[ide-console] Add tooltips to all icons

This commit is contained in:
Dmitry Kovanikov
2015-09-04 16:41:16 +03:00
committed by Pavel V. Talanov
parent b4224bf9f3
commit bd52462420
5 changed files with 32 additions and 26 deletions
@@ -112,6 +112,6 @@ public class KotlinConsoleKeeper(val project: Project) {
} }
companion object { companion object {
jvmStatic fun getInstance(project: Project) = ServiceManager.getService(project, javaClass<KotlinConsoleKeeper>()) jvmStatic fun getInstance(project: Project) = ServiceManager.getService(project, KotlinConsoleKeeper::class.java)
} }
} }
@@ -31,6 +31,7 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.Disposer
import org.jetbrains.kotlin.console.actions.BuildAndRestartConsoleAction import org.jetbrains.kotlin.console.actions.BuildAndRestartConsoleAction
import org.jetbrains.kotlin.console.actions.KtExecuteCommandAction import org.jetbrains.kotlin.console.actions.KtExecuteCommandAction
import org.jetbrains.kotlin.console.gutter.IconPack
import org.jetbrains.kotlin.console.gutter.KotlinConsoleGutterContentProvider import org.jetbrains.kotlin.console.gutter.KotlinConsoleGutterContentProvider
import org.jetbrains.kotlin.console.gutter.KotlinConsoleIndicatorRenderer import org.jetbrains.kotlin.console.gutter.KotlinConsoleIndicatorRenderer
import org.jetbrains.kotlin.console.gutter.ReplIcons import org.jetbrains.kotlin.console.gutter.ReplIcons
@@ -41,7 +42,6 @@ import org.jetbrains.kotlin.idea.JetLanguage
import java.awt.Color import java.awt.Color
import java.awt.Font import java.awt.Font
import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentHashMap
import javax.swing.Icon
import kotlin.properties.Delegates import kotlin.properties.Delegates
public class KotlinConsoleRunner( public class KotlinConsoleRunner(
@@ -137,7 +137,7 @@ public class KotlinConsoleRunner(
} }
fun setupGutters() { fun setupGutters() {
fun configureEditorGutter(editor: EditorEx, color: Color, icon: Icon) { fun configureEditorGutter(editor: EditorEx, color: Color, iconPack: IconPack) {
editor.settings.isLineMarkerAreaShown = true // hack to show gutter editor.settings.isLineMarkerAreaShown = true // hack to show gutter
editor.settings.isFoldingOutlineShown = true editor.settings.isFoldingOutlineShown = true
editor.gutterComponentEx.setPaintBackground(true) editor.gutterComponentEx.setPaintBackground(true)
@@ -145,7 +145,7 @@ public class KotlinConsoleRunner(
editorColorScheme.setColor(EditorColors.GUTTER_BACKGROUND, color) editorColorScheme.setColor(EditorColors.GUTTER_BACKGROUND, color)
editor.colorsScheme = editorColorScheme editor.colorsScheme = editorColorScheme
addGutterIndicator(editor, icon) addGutterIndicator(editor, iconPack)
} }
val historyEditor = consoleView.historyViewer val historyEditor = consoleView.historyViewer
@@ -162,8 +162,8 @@ public class KotlinConsoleRunner(
consoleEditor.settings.additionalLinesCount = 2 consoleEditor.settings.additionalLinesCount = 2
} }
fun addGutterIndicator(editor: EditorEx, icon: Icon) { fun addGutterIndicator(editor: EditorEx, iconPack: IconPack) {
val indicator = KotlinConsoleIndicatorRenderer(icon) val indicator = KotlinConsoleIndicatorRenderer(iconPack)
val editorMarkup = editor.markupModel val editorMarkup = editor.markupModel
val indicatorHighlighter = editorMarkup.addRangeHighlighter( val indicatorHighlighter = editorMarkup.addRangeHighlighter(
0, editor.document.textLength, HighlighterLayer.LAST, null, HighlighterTargetArea.LINES_IN_RANGE 0, editor.document.textLength, HighlighterLayer.LAST, null, HighlighterTargetArea.LINES_IN_RANGE
@@ -173,9 +173,9 @@ public class KotlinConsoleRunner(
indicatorHighlighter.gutterIconRenderer = indicator indicatorHighlighter.gutterIconRenderer = indicator
} }
fun changeConsoleEditorIndicator(newIcon: Icon) { fun changeConsoleEditorIndicator(newIconPack: IconPack) {
val editorHighlighter = editorToHighlighter[consoleView.consoleEditor] val editorHighlighter = editorToHighlighter[consoleView.consoleEditor]
editorHighlighter?.gutterIconRenderer = KotlinConsoleIndicatorRenderer(newIcon) editorHighlighter?.gutterIconRenderer = KotlinConsoleIndicatorRenderer(newIconPack)
} }
// this method shouldn't be called in normal usage; it is for test purpose only // this method shouldn't be called in normal usage; it is for test purpose only
@@ -17,10 +17,14 @@
package org.jetbrains.kotlin.console.gutter package org.jetbrains.kotlin.console.gutter
import com.intellij.openapi.editor.markup.GutterIconRenderer import com.intellij.openapi.editor.markup.GutterIconRenderer
import javax.swing.Icon
public class KotlinConsoleIndicatorRenderer(private val indicatorIcon: Icon) : GutterIconRenderer() { public class KotlinConsoleIndicatorRenderer(iconPack: IconPack) : GutterIconRenderer() {
override fun getIcon() = indicatorIcon private val icon = iconPack.icon
override fun hashCode() = indicatorIcon.hashCode() private val tooltip = iconPack.tooltip
override fun equals(other: Any?) = indicatorIcon == (other as? KotlinConsoleIndicatorRenderer)?.indicatorIcon ?: null
override fun getIcon() = icon
override fun getTooltipText() = tooltip
override fun hashCode() = icon.hashCode()
override fun equals(other: Any?) = icon == (other as? KotlinConsoleIndicatorRenderer)?.icon ?: null
} }
@@ -20,17 +20,19 @@ import com.intellij.icons.AllIcons
import org.jetbrains.kotlin.idea.JetIcons import org.jetbrains.kotlin.idea.JetIcons
import javax.swing.Icon import javax.swing.Icon
public data class IconPack(val icon: Icon, val tooltip: String)
public object ReplIcons { public object ReplIcons {
public val BUILD_WARNING_INDICATOR: Icon = AllIcons.Ide.Warning_notifications public val BUILD_WARNING_INDICATOR: IconPack = IconPack(AllIcons.Ide.Warning_notifications, "Some issues with module <make>")
public val HISTORY_INDICATOR: Icon = AllIcons.General.MessageHistory public val HISTORY_INDICATOR: IconPack = IconPack(AllIcons.General.MessageHistory, "History of executed commands")
public val EDITOR_INDICATOR: Icon = JetIcons.LAUNCH public val EDITOR_INDICATOR: IconPack = IconPack(JetIcons.LAUNCH, "Write your commands here")
public val EDITOR_READLINE_INDICATOR: Icon = AllIcons.General.Balloon public val EDITOR_READLINE_INDICATOR: IconPack = IconPack(AllIcons.General.Balloon, "Waiting for input...")
public val COMMAND_MARKER: Icon = AllIcons.General.Run public val COMMAND_MARKER: IconPack = IconPack(AllIcons.General.Run, "Executed command")
public val READLINE_MARKER: Icon = AllIcons.Icons.Ide.SpeedSearchPrompt public val READLINE_MARKER: IconPack = IconPack(AllIcons.Icons.Ide.SpeedSearchPrompt, "Input line")
// command result icons // command result icons
public val SYSTEM_HELP: Icon = AllIcons.Actions.Menu_help public val SYSTEM_HELP: IconPack = IconPack(AllIcons.Actions.Menu_help, "System help")
public val RESULT: Icon = AllIcons.Vcs.Equal public val RESULT: IconPack = IconPack(AllIcons.Vcs.Equal, "Result")
public val COMPILER_ERROR: Icon = AllIcons.General.Error public val COMPILER_ERROR: Icon = AllIcons.General.Error
public val RUNTIME_EXCEPTION: Icon = AllIcons.General.BalloonWarning public val RUNTIME_EXCEPTION: IconPack = IconPack(AllIcons.General.BalloonWarning, "Runtime exception")
} }
@@ -31,11 +31,11 @@ import com.intellij.psi.PsiDocumentManager
import org.jetbrains.kotlin.console.KotlinConsoleHistoryManager import org.jetbrains.kotlin.console.KotlinConsoleHistoryManager
import org.jetbrains.kotlin.console.KotlinConsoleRunner import org.jetbrains.kotlin.console.KotlinConsoleRunner
import org.jetbrains.kotlin.console.SeverityDetails import org.jetbrains.kotlin.console.SeverityDetails
import org.jetbrains.kotlin.console.gutter.IconPack
import org.jetbrains.kotlin.console.gutter.KotlinConsoleErrorRenderer import org.jetbrains.kotlin.console.gutter.KotlinConsoleErrorRenderer
import org.jetbrains.kotlin.console.gutter.KotlinConsoleIndicatorRenderer import org.jetbrains.kotlin.console.gutter.KotlinConsoleIndicatorRenderer
import org.jetbrains.kotlin.console.gutter.ReplIcons import org.jetbrains.kotlin.console.gutter.ReplIcons
import org.jetbrains.kotlin.diagnostics.Severity import org.jetbrains.kotlin.diagnostics.Severity
import javax.swing.Icon
public class KotlinReplOutputHighlighter( public class KotlinReplOutputHighlighter(
private val runner: KotlinConsoleRunner, private val runner: KotlinConsoleRunner,
@@ -57,17 +57,17 @@ public class KotlinReplOutputHighlighter(
return Pair(oldLen, newLen) return Pair(oldLen, newLen)
} }
private fun printOutput(output: String, contentType: ConsoleViewContentType, icon: Icon? = null) { private fun printOutput(output: String, contentType: ConsoleViewContentType, iconPack: IconPack? = null) {
val (startOffset, endOffset) = textOffsets(output) val (startOffset, endOffset) = textOffsets(output)
consoleView.print(output, contentType) consoleView.print(output, contentType)
consoleView.flushDeferredText() consoleView.flushDeferredText()
if (icon == null) return if (iconPack == null) return
historyMarkup.addRangeHighlighter( historyMarkup.addRangeHighlighter(
startOffset, endOffset, HighlighterLayer.LAST, null, HighlighterTargetArea.EXACT_RANGE startOffset, endOffset, HighlighterLayer.LAST, null, HighlighterTargetArea.EXACT_RANGE
) apply { gutterIconRenderer = KotlinConsoleIndicatorRenderer(icon) } ) apply { gutterIconRenderer = KotlinConsoleIndicatorRenderer(iconPack) }
} }
private fun printWarningMessage(message: String, isAddHyperlink: Boolean) = WriteCommandAction.runWriteCommandAction(project) { private fun printWarningMessage(message: String, isAddHyperlink: Boolean) = WriteCommandAction.runWriteCommandAction(project) {