Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions settings-gui/ui/pages/backup.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ def _setup_ui(self):

self.import_desc = QLabel(
_(
"Save your configurations to a JSON file, or restore them from a .lotusbak file. Select what you want to include:"
"Save or restore your configurations via JSON files. Select the components you wish to include:"
)
)
self.import_desc.setWordWrap(True)
Expand Down Expand Up @@ -134,13 +134,13 @@ def do_export(self):
return

default_filename = (
f"lotus-backup-{datetime.now().strftime('%Y%m%d-%H%M%S')}.lotusbak"
f"lotus-backup-{datetime.now().strftime('%Y%m%d-%H%M%S')}.json"
)
path, _filter = QFileDialog.getSaveFileName(
self,
_("Export Backup"),
os.path.join(os.path.expanduser("~"), default_filename),
_("Lotus Backup (*.lotusbak);;All Files (*)"),
_("JSON Backup (*.json);;All Files (*)"),
)
if not path:
return
Expand Down Expand Up @@ -194,7 +194,7 @@ def on_select_import_file(self):
self,
_("Select Backup File"),
os.path.expanduser("~"),
_("Lotus Backup (*.lotusbak);;All Files (*)"),
_("JSON Backup (*.json);;All Files (*)"),
)
if not path:
return
Expand Down
1 change: 0 additions & 1 deletion settings-gui/ui/pages/dict_editor.py
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,6 @@ def on_add(self):

self.upsert_row(word)
self.input_word.clear()
self._update_add_button_icon()
self.input_word.setFocus()

def _update_add_button_icon(self):
Expand Down
65 changes: 51 additions & 14 deletions settings-gui/ui/pages/keymap_editor.py
Original file line number Diff line number Diff line change
Expand Up @@ -298,13 +298,14 @@ def _setup_ui(self):
for action_code, action_name in BAMBOO_ACTIONS:
self.combo_action.addItem(action_name, action_code)

btn_add = QPushButton(QIcon.fromTheme("list-add"), _("Add"))
btn_add.setToolTip(_("Add / Update Keymap"))
btn_add.clicked.connect(self.on_add)
self.btn_add = QPushButton(QIcon.fromTheme("list-add"), _("Add"))
self.btn_add.setToolTip(_("Add Keymap"))
self.btn_add.clicked.connect(self.on_add)
self.input_key.textChanged.connect(self._update_add_button_icon)

input_layout.addWidget(self.input_key)
input_layout.addWidget(self.combo_action)
input_layout.addWidget(btn_add)
input_layout.addWidget(self.btn_add)
editor_layout.addLayout(input_layout)

# Table
Expand Down Expand Up @@ -420,23 +421,59 @@ def on_search_changed(self):
self.table.setRowHidden(row, search_text not in key and search_text not in action)

def on_add(self):
"""Adds a new keymap entry."""
"""Adds or updates a keymap entry."""
key = self.input_key.text().strip()
if not key:
return

# Check for update
for row in range(self.table.rowCount()):
item = self.table.item(row, 0)
if item and item.text() == key:
combo = self.table.cellWidget(row, 1)
if combo:
combo.setCurrentIndex(self.combo_action.currentIndex())
return
self.upsert_row(key, self.combo_action.currentData())
self.input_key.clear()
self.input_key.setFocus()

def upsert_row(self, key: str, action_code: str):
"""Adds or updates a row in the keymap table."""
row = self._find_row_by_key(key)
if row is not None:
# Update existing
cell_combo = self.table.cellWidget(row, 1)
if cell_combo:
idx = cell_combo.findData(action_code)
if idx >= 0:
cell_combo.setCurrentIndex(idx)
self._on_item_changed()
return

self._add_row(key, self.combo_action.currentData())
# Insert new
self._add_row(key, action_code)
self.on_search_changed()
self.update_button_states()
self._on_item_changed()

def _find_row_by_key(self, key: str) -> int | None:
"""Finds row index for a given key. Returns None if not found."""
for r in range(self.table.rowCount()):
item = self.table.item(r, 0)
if item and item.text() == key:
return r
return None

def _update_add_button_icon(self, *_args):
"""Changes the Add button icon to Update if key exists."""
key = self.input_key.text().strip()

# Disable button if key is empty
self.btn_add.setEnabled(bool(key))

found = self._find_row_by_key(key) is not None
if found:
self.btn_add.setIcon(QIcon.fromTheme("document-save"))
self.btn_add.setText(_("Update"))
self.btn_add.setToolTip(_("Update Keymap"))
else:
self.btn_add.setIcon(QIcon.fromTheme("list-add"))
self.btn_add.setText(_("Add"))
self.btn_add.setToolTip(_("Add Keymap"))

def on_load_preset(self):
"""Loads a predefined set of keymaps."""
preset_name = self.combo_preset.currentText()
Expand Down
32 changes: 19 additions & 13 deletions settings-gui/ui/pages/macro_editor.py
Original file line number Diff line number Diff line change
Expand Up @@ -323,23 +323,33 @@ def save_data(self):
self.dbus.set_sub_config_list("lotus-macro", "Macro", data)
self.initial_state = self._get_current_state()

def _find_row_by_key(self, key: str) -> int | None:
"""Finds row index for a given key. Returns None if not found."""
for r in range(self.table.rowCount()):
item = self.table.item(r, 0)
if item and item.text() == key:
return r
return None

def upsert_row(self, key: str, value: str, sort: bool = True):
# Update existing
for row in range(self.table.rowCount()):
if self.table.item(row, 0) and self.table.item(row, 0).text() == key:
self.table.item(row, 1).setText(value)
self._apply_row_highlight(row, key)
if sort:
self.on_search_changed() # Re-apply filter
self.update_button_states()
return
row = self._find_row_by_key(key)
if row is not None:
self.table.item(row, 1).setText(value)
self._apply_row_highlight(row, key)
if sort:
self.on_search_changed() # Re-apply filter
self.update_button_states()
self._on_item_changed()
return

# Insert new
row = self.table.rowCount()
self.table.insertRow(row)
self.table.setItem(row, 0, QTableWidgetItem(key))
self.table.setItem(row, 1, QTableWidgetItem(value))
self._apply_row_highlight(row, key)
self.on_search_changed()
if sort:
self.on_search_changed() # Re-apply filter
self.update_button_states()
Expand Down Expand Up @@ -420,7 +430,6 @@ def on_add(self):
self.upsert_row(key, val)
self.input_key.clear()
self.input_val.clear()
self._update_add_button_icon()
self.input_key.setFocus()

def _update_add_button_icon(self):
Expand All @@ -440,10 +449,7 @@ def _update_add_button_icon(self):
# Disable button if key is invalid, empty, or value is empty
self.btn_add.setEnabled(not is_invalid and bool(key) and bool(val))

found = any(
self.table.item(r, 0) and self.table.item(r, 0).text() == key
for r in range(self.table.rowCount())
)
found = self._find_row_by_key(key) is not None
if found:
self.btn_add.setIcon(QIcon.fromTheme("document-save"))
self.btn_add.setText(_("Update"))
Expand Down
Loading