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)
|
||||
if (extensions.isNotEmpty()) {
|
||||
for (extension in extensions) {
|
||||
if (extension.paint(this, g2d)) {
|
||||
return
|
||||
}
|
||||
g2d.save()
|
||||
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.ApplicationScope
|
||||
import app.termora.account.AccountPlugin
|
||||
import app.termora.plugin.internal.badge.BadgePlugin
|
||||
import app.termora.plugin.internal.extension.DynamicExtensionPlugin
|
||||
import app.termora.plugin.internal.local.LocalInternalPlugin
|
||||
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))
|
||||
// account plugin
|
||||
plugins.add(PluginDescriptor(AccountPlugin(), origin = PluginOrigin.Internal, version = version))
|
||||
// badge plugin
|
||||
plugins.add(PluginDescriptor(BadgePlugin(), origin = PluginOrigin.Internal, version = version))
|
||||
|
||||
// ssh plugin
|
||||
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
|
||||
|
||||
import app.termora.DynamicColor
|
||||
import app.termora.setupAntialiasing
|
||||
import com.formdev.flatlaf.extras.components.FlatButton
|
||||
import com.formdev.flatlaf.ui.FlatButtonUI
|
||||
import java.awt.Color
|
||||
import java.awt.Graphics
|
||||
import java.awt.Graphics2D
|
||||
import javax.swing.JComponent
|
||||
import javax.swing.UIManager
|
||||
import kotlin.math.round
|
||||
|
||||
open class InstallButton : FlatButton() {
|
||||
@@ -15,6 +18,7 @@ open class InstallButton : FlatButton() {
|
||||
field = value
|
||||
repaint()
|
||||
}
|
||||
var update = false
|
||||
|
||||
private var paintingBackground = false
|
||||
|
||||
@@ -44,6 +48,18 @@ open class InstallButton : FlatButton() {
|
||||
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) {
|
||||
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 updateButton = InstallButton()
|
||||
private val updateButton = InstallButton().apply { update = true }
|
||||
private val installButton = InstallButton()
|
||||
private val uninstallButton = JButton(I18n.getString("termora.settings.plugin.uninstall"))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user