Refactor footer setup: enhance footer item management based on keybindings for improved usability and clarity.
This commit is contained in:
parent
49dd015d53
commit
3f0892fb7b
2 changed files with 45 additions and 26 deletions
|
@ -137,21 +137,36 @@ class HostsManagerApp(App):
|
||||||
self.update_status(f"❌ Error loading hosts file: {e}")
|
self.update_status(f"❌ Error loading hosts file: {e}")
|
||||||
|
|
||||||
def _setup_footer(self) -> None:
|
def _setup_footer(self) -> None:
|
||||||
"""Setup the footer with initial content."""
|
"""Setup the footer with initial content based on keybindings."""
|
||||||
try:
|
try:
|
||||||
footer = self.query_one("#custom-footer", CustomFooter)
|
footer = self.query_one("#custom-footer", CustomFooter)
|
||||||
|
|
||||||
# Left section - common actions
|
# Clear existing items
|
||||||
footer.add_right_item("^e: Edit Mode")
|
footer.clear_left_items()
|
||||||
footer.add_right_item("c: Config")
|
footer.clear_right_items()
|
||||||
footer.add_right_item("?: Help")
|
|
||||||
footer.add_right_item("q: Quit")
|
|
||||||
|
|
||||||
# Right section - sort and edit actions
|
# Process keybindings and add to appropriate sections
|
||||||
footer.add_left_item("i: Sort IP")
|
for binding in self.BINDINGS:
|
||||||
footer.add_left_item("n: Sort Host")
|
# Only show bindings marked with show=True
|
||||||
footer.add_left_item("r: Reload")
|
if hasattr(binding, "show") and binding.show:
|
||||||
|
# Get the display key
|
||||||
|
key_display = getattr(binding, "key_display", None) or binding.key
|
||||||
|
|
||||||
|
# Get the description
|
||||||
|
description = binding.description or binding.action
|
||||||
|
|
||||||
|
# Format the item
|
||||||
|
item = f"{key_display}: {description}"
|
||||||
|
|
||||||
|
# Determine positioning from id attribute
|
||||||
|
binding_id = getattr(binding, "id", None)
|
||||||
|
if binding_id and binding_id.startswith("left:"):
|
||||||
|
footer.add_left_item(item)
|
||||||
|
elif binding_id and binding_id.startswith("right:"):
|
||||||
|
footer.add_right_item(item)
|
||||||
|
else:
|
||||||
|
# Default to right if no specific positioning
|
||||||
|
footer.add_right_item(item)
|
||||||
|
|
||||||
# Status section will be updated by update_status
|
# Status section will be updated by update_status
|
||||||
self._update_footer_status()
|
self._update_footer_status()
|
||||||
|
@ -190,11 +205,6 @@ class HostsManagerApp(App):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Always update the header subtitle with current status
|
# Always update the header subtitle with current status
|
||||||
mode = "Edit mode" if self.edit_mode else "Read-only mode"
|
|
||||||
entry_count = len(self.hosts_file.entries)
|
|
||||||
active_count = len(self.hosts_file.get_active_entries())
|
|
||||||
|
|
||||||
# Format: "29 entries (6 active) | Read-only mode"
|
|
||||||
# Update the footer status
|
# Update the footer status
|
||||||
self._update_footer_status()
|
self._update_footer_status()
|
||||||
|
|
||||||
|
|
|
@ -9,17 +9,26 @@ from textual.binding import Binding
|
||||||
|
|
||||||
# Key bindings for the hosts manager application
|
# Key bindings for the hosts manager application
|
||||||
HOSTS_MANAGER_BINDINGS = [
|
HOSTS_MANAGER_BINDINGS = [
|
||||||
|
Binding("a", "add_entry", "Add new entry", show=True, id="left:add_entry"),
|
||||||
|
Binding("d", "delete_entry", "Delete entry", show=True, id="left:delete_entry"),
|
||||||
|
Binding("e", "edit_entry", "Edit entry", show=True, id="left:edit_entry"),
|
||||||
|
Binding("space", "toggle_entry", "Toggle active/inactive", show=True, id="left:toggle_entry"),
|
||||||
|
Binding("ctrl+e", "toggle_edit_mode", "Toggle edit mode", show=True, id="left:toggle_edit_mode"),
|
||||||
|
Binding("c", "config", "Configuration", show=True, id="right:config"),
|
||||||
|
Binding(
|
||||||
|
"question_mark",
|
||||||
|
"help",
|
||||||
|
"Show help",
|
||||||
|
show=True,
|
||||||
|
key_display="?",
|
||||||
|
id="right:help",
|
||||||
|
),
|
||||||
Binding("q", "quit", "Quit", show=True, id="right:quit"),
|
Binding("q", "quit", "Quit", show=True, id="right:quit"),
|
||||||
Binding("r", "reload", "Reload hosts file", show=True, id="right:reload"),
|
Binding("r", "reload", "Reload hosts file", show=False),
|
||||||
Binding("question_mark", "help", "Show help", show=True, key_display="?", id="right:help"),
|
Binding("i", "sort_by_ip", "Sort by IP address", show=False),
|
||||||
Binding("i", "sort_by_ip", "Sort by IP address", show=True, id="left:quit"),
|
Binding(
|
||||||
Binding("n", "sort_by_hostname", "Sort by hostname", show=True, id="left:quit"),
|
"h", "sort_by_hostname", "Sort by hostname", show=False
|
||||||
Binding("c", "config", "Configuration", show=True),
|
),
|
||||||
Binding("ctrl+e", "toggle_edit_mode", "Toggle edit mode", show=True),
|
|
||||||
Binding("a", "add_entry", "Add new entry", show=False),
|
|
||||||
Binding("d", "delete_entry", "Delete entry", show=False),
|
|
||||||
Binding("e", "edit_entry", "Edit entry", show=False),
|
|
||||||
Binding("space", "toggle_entry", "Toggle active/inactive", show=False),
|
|
||||||
Binding("ctrl+s", "save_file", "Save hosts file", show=False),
|
Binding("ctrl+s", "save_file", "Save hosts file", show=False),
|
||||||
Binding("shift+up", "move_entry_up", "Move entry up", show=False),
|
Binding("shift+up", "move_entry_up", "Move entry up", show=False),
|
||||||
Binding("shift+down", "move_entry_down", "Move entry down", show=False),
|
Binding("shift+down", "move_entry_down", "Move entry down", show=False),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue