Skip to content
This repository was archived by the owner on Apr 8, 2025. It is now read-only.

Commit c8ff4cf

Browse files
committed
feat(#60, #61): move hidden and new icons to group from context menu
1 parent f80ae94 commit c8ff4cf

File tree

5 files changed

+38
-16
lines changed

5 files changed

+38
-16
lines changed

Diff for: src/progman/core/language.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class Language:
4848
},
4949
"window": {
5050
"new_icon": "New icon...",
51-
"add_uncategorized": "Add uncategorized icon",
51+
"add_new": "Add uncategorized icon",
5252
"add_hidden": "Add hidden icon"
5353
}
5454
}

Diff for: src/progman/core/state.py

+7
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,10 @@ def copy_shortcut_to_new_group(self, shortcut: Shortcut, group: str) -> None:
5050
self._groups[group].append(shortcut)
5151
if group in self.group_windows:
5252
self.group_windows[group].add_icon(shortcut)
53+
54+
def unhide_shortcut(self, shortcut: Shortcut, new_group: str) -> None:
55+
current_hidden_group = shortcut.tags[0]
56+
self._groups[current_hidden_group].shortcuts.remove(shortcut)
57+
shortcut.tags = [new_group]
58+
shortcut.managed_by_user = True
59+
self.add_shortcut(shortcut)

Diff for: src/progman/ui/contextmenu.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from tkinter import Event, Menu, Misc
1+
from tkinter import END, Event, Menu, Misc
22
from typing import TYPE_CHECKING
33

44
if TYPE_CHECKING:
@@ -31,3 +31,10 @@ def bind_context_menu_to(self, items_to_bind_to: list[Misc]) -> None:
3131

3232
def show_context_menu(self, event: Event) -> None:
3333
self._context_menu.post(event.x_root, event.y_root)
34+
35+
@staticmethod
36+
def delete_items_from_menu(menu: Menu) -> None:
37+
menu_items = menu.index(END)
38+
if menu_items is not None:
39+
for i in range(menu_items, -1, -1):
40+
menu.delete(i)

Diff for: src/progman/ui/groupwindow.py

+21-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
from functools import partial
12
from tkinter import Event, Misc, Toplevel
23

3-
from core import MenuItem, Shortcut
4+
from core import HIDDEN_TAGS, Group, MenuItem, Shortcut
45
from ui.appdrawer import AppDrawer
56
from ui.iconpropertiesdialog import IconPropertiesDialog
67
from ui.progmanwidgets import ProgmanWidget
@@ -17,9 +18,10 @@ def __init__(self, parent: Misc | None, group_name: str, *args: any, **kwargs: a
1718
self._group_name = group_name
1819
self._menu_items = [
1920
MenuItem("new_icon", self._create_new_icon),
20-
MenuItem("add_uncategorized", self._add_uncategorized_icon, state="disabled"),
21-
MenuItem("add_hidden", self._add_hidden_icon, state="disabled"),
21+
MenuItem("add_new", type="submenu"),
22+
MenuItem("add_hidden", type="submenu")
2223
]
24+
self._group_hashes = dict([(tag, 0) for tag in HIDDEN_TAGS])
2325

2426
@property
2527
def group_name(self) -> str:
@@ -57,8 +59,20 @@ def _create_new_icon(self) -> None:
5759
if dialog.result:
5860
self.app_state.add_shortcut(dialog.result)
5961

60-
def _add_uncategorized_icon(self) -> None:
61-
pass
62+
def show_context_menu(self, event: Event) -> None:
63+
for tag in HIDDEN_TAGS:
64+
if hash(self.app_state.groups[tag]) != self._group_hashes[tag]:
65+
self.delete_items_from_menu(self._sub_menus["add_" + tag.lower()])
66+
self._generate_group_menu(self.app_state.groups[tag], tag)
67+
Window.show_context_menu(self, event)
6268

63-
def _add_hidden_icon(self) -> None:
64-
pass
69+
def _generate_group_menu(self, group: Group, tag: str) -> None:
70+
sub_menu = f"add_{tag.lower()}"
71+
for shortcut in sorted(group.shortcuts, key=lambda x: x.name.lower()):
72+
name = f"{shortcut.name} ({shortcut.target_path})" if shortcut.target_path else shortcut.name
73+
self._sub_menus[sub_menu].add_command(label=name,
74+
command=partial(self._add_hidden_tagged_shortcut, shortcut))
75+
self._group_hashes[tag] = hash(self.app_state.groups[tag])
76+
77+
def _add_hidden_tagged_shortcut(self, shortcut: Shortcut) -> None:
78+
self.app_state.unhide_shortcut(shortcut, self._group_name)

Diff for: src/progman/ui/icon.py

+1-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from abc import ABC, abstractmethod
2-
from tkinter import END, Event, Frame, Label, Menu, PhotoImage
2+
from tkinter import Event, Frame, Label, PhotoImage
33
from typing import TYPE_CHECKING
44

55
from ui.contextmenu import ContextMenu
@@ -70,9 +70,3 @@ def select(self) -> None:
7070
def deselect(self) -> None:
7171
self._text_label.config(background=self.theme.background,
7272
foreground=self.theme.foreground)
73-
74-
def delete_items_from_menu(self, menu: Menu) -> None:
75-
menu_items = menu.index(END)
76-
if menu_items is not None:
77-
for i in range(menu_items, -1, -1):
78-
menu.delete(i)

0 commit comments

Comments
 (0)