@@ -9,6 +9,8 @@ import javax.swing.JMenu
99import javax.swing.JMenuItem
1010import javax.swing.JOptionPane
1111import javax.swing.JPopupMenu
12+ import javax.swing.event.MenuEvent
13+ import javax.swing.event.MenuListener
1214
1315class 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