Enhance DataTable population by adding sort indicators to column headers and clearing both rows and columns before repopulating
This commit is contained in:
parent
15a3b6230f
commit
bcded3105b
1 changed files with 14 additions and 31 deletions
|
@ -151,19 +151,27 @@ class HostsManagerApp(App):
|
||||||
def populate_entries_table(self) -> None:
|
def populate_entries_table(self) -> None:
|
||||||
"""Populate the left pane with hosts entries using DataTable."""
|
"""Populate the left pane with hosts entries using DataTable."""
|
||||||
table = self.query_one("#entries-table", DataTable)
|
table = self.query_one("#entries-table", DataTable)
|
||||||
table.clear()
|
table.clear(columns=True) # Clear both rows and columns
|
||||||
|
|
||||||
# Configure DataTable properties
|
# Configure DataTable properties
|
||||||
table.zebra_stripes = True
|
table.zebra_stripes = True
|
||||||
table.cursor_type = "row"
|
table.cursor_type = "row"
|
||||||
table.show_header = True
|
table.show_header = True
|
||||||
|
|
||||||
# Add columns only if they don't exist
|
# Create column labels with sort indicators
|
||||||
if not table.columns:
|
ip_label = "IP Address"
|
||||||
table.add_columns("IP Address", "Canonical Hostname")
|
hostname_label = "Canonical Hostname"
|
||||||
|
|
||||||
# Update column headers with sort indicators
|
# Add sort indicators
|
||||||
self.update_column_headers()
|
if self.sort_column == "ip":
|
||||||
|
arrow = "↑" if self.sort_ascending else "↓"
|
||||||
|
ip_label = f"{arrow} IP Address"
|
||||||
|
elif self.sort_column == "hostname":
|
||||||
|
arrow = "↑" if self.sort_ascending else "↓"
|
||||||
|
hostname_label = f"{arrow} Canonical Hostname"
|
||||||
|
|
||||||
|
# Add columns with proper labels
|
||||||
|
table.add_columns(ip_label, hostname_label)
|
||||||
|
|
||||||
# Add rows
|
# Add rows
|
||||||
for entry in self.hosts_file.entries:
|
for entry in self.hosts_file.entries:
|
||||||
|
@ -276,31 +284,6 @@ class HostsManagerApp(App):
|
||||||
# For now, just update the status with help info
|
# For now, just update the status with help info
|
||||||
self.update_status("Help: ↑/↓ Navigate, r Reload, q Quit, h Help")
|
self.update_status("Help: ↑/↓ Navigate, r Reload, q Quit, h Help")
|
||||||
|
|
||||||
def update_column_headers(self) -> None:
|
|
||||||
"""Update column headers with sort indicators."""
|
|
||||||
table = self.query_one("#entries-table", DataTable)
|
|
||||||
if not table.columns or len(table.columns) < 2:
|
|
||||||
return
|
|
||||||
|
|
||||||
# Get current column labels
|
|
||||||
ip_label = "IP Address"
|
|
||||||
hostname_label = "Canonical Hostname"
|
|
||||||
|
|
||||||
# Add sort indicators
|
|
||||||
if self.sort_column == "ip":
|
|
||||||
arrow = "↑" if self.sort_ascending else "↓"
|
|
||||||
ip_label = f"{arrow} IP Address"
|
|
||||||
elif self.sort_column == "hostname":
|
|
||||||
arrow = "↑" if self.sort_ascending else "↓"
|
|
||||||
hostname_label = f"{arrow} Canonical Hostname"
|
|
||||||
|
|
||||||
# Update column labels safely
|
|
||||||
try:
|
|
||||||
table.columns[0].label = ip_label
|
|
||||||
table.columns[1].label = hostname_label
|
|
||||||
except (IndexError, KeyError):
|
|
||||||
# If we can't update the labels, just continue
|
|
||||||
pass
|
|
||||||
|
|
||||||
def action_sort_by_ip(self) -> None:
|
def action_sort_by_ip(self) -> None:
|
||||||
"""Sort entries by IP address, toggle ascending/descending."""
|
"""Sort entries by IP address, toggle ascending/descending."""
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue