Skip to content

Commit f331ce7

Browse files
committed
Add existing tags to menu
1 parent 6ffdfe1 commit f331ce7

File tree

1 file changed

+41
-14
lines changed

1 file changed

+41
-14
lines changed

src/BookmarkActions.kt

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import javax.swing.JMenu
99
import javax.swing.JMenuItem
1010
import javax.swing.JOptionPane
1111
import javax.swing.JPopupMenu
12+
import javax.swing.event.MenuEvent
13+
import javax.swing.event.MenuListener
1214

1315
class BookmarkActions(
1416
private val panel: BookmarksPanel,
@@ -23,7 +25,7 @@ class BookmarkActions(
2325
private val deleteMenu = JMenuItem("Delete Bookmark(s)")
2426
private val clearMenu = JMenuItem("Clear Bookmarks")
2527
private val addTag = JMenu("Add Tag")
26-
private val existingTags = JMenuItem("Existing Tags")
28+
private val existingTagsMenu = JMenu("Existing Tags")
2729
private val newTag = JMenuItem("New Tag")
2830
private val comments = JMenuItem("Add comment")
2931

@@ -41,14 +43,15 @@ class BookmarkActions(
4143
actionsMenu.add(clearMenu)
4244
actionsMenu.addSeparator()
4345
newTag.addActionListener(this)
44-
existingTags.addActionListener(this)
4546
comments.addActionListener(this)
4647
addTag.add(newTag)
47-
addTag.add(existingTags)
48+
existingTagsMenu.addMenuListener(UpdateTagMenu(this))
49+
addTag.add(existingTagsMenu)
4850
actionsMenu.add(addTag)
4951
actionsMenu.addSeparator()
5052
actionsMenu.add(comments)
5153
panel.table.componentPopupMenu = actionsMenu
54+
5255
}
5356

5457

@@ -75,16 +78,6 @@ class BookmarkActions(
7578
panel.model.updateTags()
7679
panel.bookmarkOptions.updateTags()
7780
}
78-
existingTags -> {
79-
val tags = panel.model.tags.sorted().toTypedArray()
80-
val tagToAdd = JOptionPane.showInputDialog(
81-
null, "Select an existing tag:",
82-
"Tags", JOptionPane.QUESTION_MESSAGE, null, tags, null
83-
) as String
84-
selectedBookmarks.forEach { it.tags.add(tagToAdd) }
85-
panel.model.updateTags()
86-
panel.bookmarkOptions.updateTags()
87-
}
8881
else -> {
8982
for (selectedBookmark in selectedBookmarks) {
9083
val https = useHTTPs(selectedBookmark)
@@ -122,7 +115,41 @@ class BookmarkActions(
122115
}
123116
}
124117

125-
private fun getSelectedBookmarks(): MutableList<Bookmark> {
118+
class UpdateTagMenu(private val bookmarkActions: BookmarkActions) : MenuListener {
119+
private val existingTagsMenu = bookmarkActions.existingTagsMenu
120+
private val panel = bookmarkActions.panel
121+
122+
override fun menuSelected(me: MenuEvent) {
123+
existingTagsMenu.removeAll()
124+
val tags = panel.model.tags.sorted()
125+
tags.forEach {
126+
val menuItem = JMenuItem(it)
127+
menuItem.addActionListener(TagsActionListener(bookmarkActions))
128+
existingTagsMenu.add(menuItem)
129+
}
130+
existingTagsMenu.revalidate()
131+
existingTagsMenu.repaint()
132+
existingTagsMenu.doClick()
133+
}
134+
135+
override fun menuCanceled(p0: MenuEvent?) {}
136+
137+
override fun menuDeselected(p0: MenuEvent?) {}
138+
}
139+
140+
class TagsActionListener(bookmarkActions: BookmarkActions) : ActionListener {
141+
private val selectedBookmarks = bookmarkActions.getSelectedBookmarks()
142+
private val panel = bookmarkActions.panel
143+
override fun actionPerformed(e: ActionEvent) {
144+
val menuItem = e.source as JMenuItem
145+
selectedBookmarks.forEach { it.tags.add(menuItem.text) }
146+
panel.model.updateTags()
147+
panel.bookmarkOptions.updateTags()
148+
}
149+
150+
}
151+
152+
fun getSelectedBookmarks(): MutableList<Bookmark> {
126153
val selectedBookmarks: MutableList<Bookmark> = ArrayList()
127154
for (index in table.selectedRows) {
128155
selectedBookmarks.add(bookmarks[index])

0 commit comments

Comments
 (0)