mirror of
https://github.com/TermoraDev/termora.git
synced 2026-01-16 02:12:58 +08:00
chore: add a badge to the plugin update button
This commit is contained in:
18
src/main/kotlin/app/termora/BadgeGlassPaneExtension.kt
Normal file
18
src/main/kotlin/app/termora/BadgeGlassPaneExtension.kt
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
package app.termora
|
||||||
|
|
||||||
|
import java.awt.Graphics2D
|
||||||
|
import javax.swing.JComponent
|
||||||
|
|
||||||
|
class BadgeGlassPaneExtension private constructor() : GlassPaneExtension {
|
||||||
|
companion object {
|
||||||
|
val instance = BadgeGlassPaneExtension()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun paint(c: JComponent, g2d: Graphics2D): Boolean {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun ordered(): Long {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -276,9 +276,10 @@ class TermoraFrame : JFrame(), DataProvider {
|
|||||||
.getExtensions(GlassPaneExtension::class.java)
|
.getExtensions(GlassPaneExtension::class.java)
|
||||||
if (extensions.isNotEmpty()) {
|
if (extensions.isNotEmpty()) {
|
||||||
for (extension in extensions) {
|
for (extension in extensions) {
|
||||||
if (extension.paint(this, g2d)) {
|
g2d.save()
|
||||||
return
|
val painted = extension.paint(this, g2d)
|
||||||
}
|
g2d.restore()
|
||||||
|
if (painted) break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package app.termora.plugin
|
|||||||
import app.termora.Application
|
import app.termora.Application
|
||||||
import app.termora.ApplicationScope
|
import app.termora.ApplicationScope
|
||||||
import app.termora.account.AccountPlugin
|
import app.termora.account.AccountPlugin
|
||||||
|
import app.termora.plugin.internal.badge.BadgePlugin
|
||||||
import app.termora.plugin.internal.extension.DynamicExtensionPlugin
|
import app.termora.plugin.internal.extension.DynamicExtensionPlugin
|
||||||
import app.termora.plugin.internal.local.LocalInternalPlugin
|
import app.termora.plugin.internal.local.LocalInternalPlugin
|
||||||
import app.termora.plugin.internal.plugin.PluginInternalPlugin
|
import app.termora.plugin.internal.plugin.PluginInternalPlugin
|
||||||
@@ -103,6 +104,8 @@ internal class PluginManager private constructor() {
|
|||||||
plugins.add(PluginDescriptor(PluginInternalPlugin(), origin = PluginOrigin.Internal, version = version))
|
plugins.add(PluginDescriptor(PluginInternalPlugin(), origin = PluginOrigin.Internal, version = version))
|
||||||
// account plugin
|
// account plugin
|
||||||
plugins.add(PluginDescriptor(AccountPlugin(), origin = PluginOrigin.Internal, version = version))
|
plugins.add(PluginDescriptor(AccountPlugin(), origin = PluginOrigin.Internal, version = version))
|
||||||
|
// badge plugin
|
||||||
|
plugins.add(PluginDescriptor(BadgePlugin(), origin = PluginOrigin.Internal, version = version))
|
||||||
|
|
||||||
// ssh plugin
|
// ssh plugin
|
||||||
plugins.add(PluginDescriptor(SSHInternalPlugin(), origin = PluginOrigin.Internal, version = version))
|
plugins.add(PluginDescriptor(SSHInternalPlugin(), origin = PluginOrigin.Internal, version = version))
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package app.termora.plugin.internal.badge
|
||||||
|
|
||||||
|
import app.termora.BadgeGlassPaneExtension
|
||||||
|
import app.termora.GlassPaneExtension
|
||||||
|
import app.termora.plugin.Extension
|
||||||
|
import app.termora.plugin.InternalPlugin
|
||||||
|
|
||||||
|
internal class BadgePlugin : InternalPlugin() {
|
||||||
|
|
||||||
|
init {
|
||||||
|
support.addExtension(GlassPaneExtension::class.java) { BadgeGlassPaneExtension.instance }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getName(): String {
|
||||||
|
return "Badge"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun <T : Extension> getExtensions(clazz: Class<T>): List<T> {
|
||||||
|
return support.getExtensions(clazz)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +1,14 @@
|
|||||||
package app.termora.plugin.internal.plugin
|
package app.termora.plugin.internal.plugin
|
||||||
|
|
||||||
import app.termora.DynamicColor
|
import app.termora.DynamicColor
|
||||||
|
import app.termora.setupAntialiasing
|
||||||
import com.formdev.flatlaf.extras.components.FlatButton
|
import com.formdev.flatlaf.extras.components.FlatButton
|
||||||
import com.formdev.flatlaf.ui.FlatButtonUI
|
import com.formdev.flatlaf.ui.FlatButtonUI
|
||||||
import java.awt.Color
|
import java.awt.Color
|
||||||
import java.awt.Graphics
|
import java.awt.Graphics
|
||||||
|
import java.awt.Graphics2D
|
||||||
import javax.swing.JComponent
|
import javax.swing.JComponent
|
||||||
|
import javax.swing.UIManager
|
||||||
import kotlin.math.round
|
import kotlin.math.round
|
||||||
|
|
||||||
open class InstallButton : FlatButton() {
|
open class InstallButton : FlatButton() {
|
||||||
@@ -15,6 +18,7 @@ open class InstallButton : FlatButton() {
|
|||||||
field = value
|
field = value
|
||||||
repaint()
|
repaint()
|
||||||
}
|
}
|
||||||
|
var update = false
|
||||||
|
|
||||||
private var paintingBackground = false
|
private var paintingBackground = false
|
||||||
|
|
||||||
@@ -44,6 +48,18 @@ open class InstallButton : FlatButton() {
|
|||||||
return super.getText()
|
return super.getText()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun paint(g: Graphics?) {
|
||||||
|
super.paint(g)
|
||||||
|
if (g is Graphics2D) {
|
||||||
|
setupAntialiasing(g)
|
||||||
|
if (update && installing.not()) {
|
||||||
|
val size = 6
|
||||||
|
g.color = UIManager.getColor("Component.error.focusedBorderColor")
|
||||||
|
g.fillRoundRect(width - size - 4, 4, size, size, size, size)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private inner class InstallButtonUI : FlatButtonUI(true) {
|
private inner class InstallButtonUI : FlatButtonUI(true) {
|
||||||
override fun paintBackground(g: Graphics?, c: JComponent?) {
|
override fun paintBackground(g: Graphics?, c: JComponent?) {
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ class PluginPanel(val descriptor: PluginPluginDescriptor) : JPanel(), Disposable
|
|||||||
}
|
}
|
||||||
|
|
||||||
private val restartButton = JButton(I18n.getString("termora.settings.restart.title"))
|
private val restartButton = JButton(I18n.getString("termora.settings.restart.title"))
|
||||||
private val updateButton = InstallButton()
|
private val updateButton = InstallButton().apply { update = true }
|
||||||
private val installButton = InstallButton()
|
private val installButton = InstallButton()
|
||||||
private val uninstallButton = JButton(I18n.getString("termora.settings.plugin.uninstall"))
|
private val uninstallButton = JButton(I18n.getString("termora.settings.plugin.uninstall"))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user