chore: improve sidebar

This commit is contained in:
hstyi
2025-07-04 16:27:11 +08:00
committed by hstyi
parent 919c06779d
commit d1dba56bcd
5 changed files with 67 additions and 4 deletions

View File

@@ -94,6 +94,7 @@ class JSplitPaneWithZeroSizeDivider(
synchronized(treeLock) {
for (c in components) {
if (c == divider) {
c.isVisible = splitPane.leftComponent.isVisible
c.setBounds(
splitPane.dividerLocation - w,
topOffset.get(),
@@ -109,8 +110,10 @@ class JSplitPaneWithZeroSizeDivider(
override fun paint(g: Graphics) {
super.paint(g)
g.color = UIManager.getColor("controlShadow")
g.fillRect(splitPane.dividerLocation, 0, 1, topOffset.get())
if (divider.isVisible) {
g.color = UIManager.getColor("controlShadow")
g.fillRect(splitPane.dividerLocation, 0, 1, topOffset.get())
}
}
}

View File

@@ -1,13 +1,20 @@
package app.termora
import app.termora.actions.AnAction
import app.termora.actions.AnActionEvent
import app.termora.tree.NewHostTree
import com.formdev.flatlaf.extras.components.FlatTabbedPane
import com.formdev.flatlaf.extras.components.FlatToolBar
import com.formdev.flatlaf.util.SystemInfo
import java.awt.BorderLayout
import java.awt.Dimension
import java.awt.Font
import java.awt.event.ComponentAdapter
import java.awt.event.ComponentEvent
import java.awt.event.KeyEvent
import java.awt.event.MouseAdapter
import javax.swing.*
import kotlin.math.max
class TermoraFencePanel(
@@ -24,6 +31,8 @@ class TermoraFencePanel(
private val leftTreePanel = LeftTreePanel()
private val mySplitPane = JSplitPaneWithZeroSizeDivider(splitPane) { tabbed.tabHeight }
private val enableManager get() = EnableManager.getInstance()
private val toolbar = FlatToolBar().apply { isFloatable = false }
private var dividerLocation = 0
init {
initView()
@@ -44,12 +53,39 @@ class TermoraFencePanel(
tabbed.tabType = FlatTabbedPane.TabType.underlined
tabbed.tabAreaInsets = null
// macOS 避开控制栏
if (SystemInfo.isMacOS) {
toolbar.add(Box.createHorizontalStrut(76))
}
toolbar.add(createColspanAction())
tabbed.leadingComponent = toolbar
toolbar.isVisible = false
add(mySplitPane, BorderLayout.CENTER)
}
private fun initEvents() {
Disposer.register(this, leftTreePanel)
splitPane.addPropertyChangeListener("dividerLocation") { mySplitPane.doLayout() }
leftTreePanel.addComponentListener(object : ComponentAdapter() {
override fun componentHidden(e: ComponentEvent) {
toolbar.isVisible = true
}
override fun componentShown(e: ComponentEvent) {
toolbar.isVisible = false
}
})
actionMap.put("toggle", createColspanAction())
getInputMap(WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke(
KeyEvent.VK_B,
toolkit.menuShortcutKeyMaskEx or KeyEvent.SHIFT_DOWN_MASK
), "toggle"
)
}
private inner class LeftTreePanel : JPanel(BorderLayout()), Disposable {
@@ -70,9 +106,14 @@ class TermoraFencePanel(
val label = JLabel(Application.getName())
label.foreground = UIManager.getColor("textInactiveText")
label.font = label.font.deriveFont(Font.BOLD)
// 与最后一个按钮对冲,使其宽度和谐
box.add(JButton(Icons.empty))
box.add(Box.createHorizontalGlue())
if (SystemInfo.isMacOS.not()) box.add(label)
if (SystemInfo.isMacOS.not()) {
box.add(label)
}
box.add(Box.createHorizontalGlue())
box.add(createColspanAction())
if (SystemInfo.isMacOS || SystemInfo.isLinux) {
box.addMouseListener(moveMouseAdapter)
@@ -95,8 +136,24 @@ class TermoraFencePanel(
}
}
private fun createColspanAction(): Action {
return object : AnAction(Icons.dataColumn) {
init {
val text = I18n.getString("termora.welcome.toggle-sidebar")
putValue(SHORT_DESCRIPTION, "$text (${if (SystemInfo.isMacOS) '⌘' else "Ctrl"} + Shift + B)")
}
override fun actionPerformed(evt: AnActionEvent) {
if (leftTreePanel.isVisible) dividerLocation = splitPane.dividerLocation
leftTreePanel.isVisible = leftTreePanel.isVisible.not()
if (leftTreePanel.isVisible) splitPane.dividerLocation = dividerLocation
}
}
}
override fun dispose() {
enableManager.setFlag("Termora.Fence.dividerLocation", splitPane.dividerLocation)
enableManager.setFlag("Termora.Fence.dividerLocation", max(splitPane.dividerLocation, 10))
}
fun getHostTree(): NewHostTree {

View File

@@ -154,6 +154,7 @@ termora.find-everywhere.quick-command.local-terminal=Local Terminal
# Welcome
termora.welcome.my-hosts=My hosts
termora.welcome.toggle-sidebar=Toggle Sidebar
termora.welcome.contextmenu.connect=Connect
termora.welcome.contextmenu.connect-with=Connect with
termora.welcome.contextmenu.open-in-new-window=${termora.tabbed.contextmenu.open-in-new-window}

View File

@@ -149,6 +149,7 @@ termora.settings.sftp.preserve-time=保留原始文件修改时间
# Welcome
termora.welcome.my-hosts=我的主机
termora.welcome.toggle-sidebar=显示/隐藏侧边栏
termora.welcome.contextmenu.connect=连接
termora.welcome.contextmenu.connect-with=连接到
termora.welcome.contextmenu.copy=${termora.copy}

View File

@@ -148,6 +148,7 @@ termora.settings.account.login-failed=登入失敗,請稍後再試
# Welcome
termora.welcome.my-hosts=我的主機
termora.welcome.toggle-sidebar=顯示/隱藏側邊欄
termora.welcome.contextmenu.connect=連接
termora.welcome.contextmenu.connect-with=連接到
termora.welcome.contextmenu.copy=複製