Enhancement 2086748] Efficient Column Positioning in Column Manager

Added keyboard modifiers to the up/down buttons on the dialog. Click moves the row one place (as before). Shift-click moves the row 5 places. Ctrl-click moves the row 10 places. Ctrl-Shift-click moves the row to the top or bottom as appropriate.
This commit is contained in:
Charles Haley 2024-11-06 14:32:38 +00:00
parent 37dd0f5c70
commit d9bd244f06
2 changed files with 47 additions and 29 deletions

View File

@ -9,7 +9,7 @@ import copy
import sys import sys
from contextlib import suppress from contextlib import suppress
from qt.core import QAbstractItemView, QIcon, Qt, QTableWidgetItem from qt.core import QAbstractItemView, QApplication, QIcon, Qt, QTableWidgetItem
from calibre.gui2 import Application, error_dialog, gprefs, question_dialog from calibre.gui2 import Application, error_dialog, gprefs, question_dialog
from calibre.gui2.preferences import ConfigWidgetBase, test_widget from calibre.gui2.preferences import ConfigWidgetBase, test_widget
@ -239,35 +239,51 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
title = self.opt_columns.item(row, 2).text() title = self.opt_columns.item(row, 2).text()
self.setup_row(row, title, row, force_checked_to=checked) self.setup_row(row, title, row, force_checked_to=checked)
def get_move_count(self):
mods = QApplication.keyboardModifiers()
if mods == Qt.KeyboardModifier.ShiftModifier:
count = 5
elif mods == Qt.KeyboardModifier.ControlModifier:
count = 10
elif mods == (Qt.KeyboardModifier.ShiftModifier | Qt.KeyboardModifier.ControlModifier):
count = self.opt_columns.rowCount()
else:
count = 1
return count
def up_column(self): def up_column(self):
self.opt_columns.setSortingEnabled(False) count = self.get_move_count()
row = self.opt_columns.currentRow() for _ in range(0, count):
if row > 0: row = self.opt_columns.currentRow()
for i in range(0, self.opt_columns.columnCount()): if row > 0:
lower = self.opt_columns.takeItem(row-1, i) self.opt_columns.setSortingEnabled(False)
upper = self.opt_columns.takeItem(row, i) for i in range(0, self.opt_columns.columnCount()):
self.opt_columns.setItem(row, i, lower) lower = self.opt_columns.takeItem(row-1, i)
self.opt_columns.setItem(row-1, i, upper) upper = self.opt_columns.takeItem(row, i)
self.recreate_row(row-1) self.opt_columns.setItem(row, i, lower)
self.recreate_row(row) self.opt_columns.setItem(row-1, i, upper)
self.opt_columns.setCurrentCell(row-1, 1) self.recreate_row(row-1)
self.changed_signal.emit() self.recreate_row(row)
self.opt_columns.setSortingEnabled(True) self.opt_columns.setCurrentCell(row-1, 1)
self.changed_signal.emit()
self.opt_columns.setSortingEnabled(True)
def down_column(self): def down_column(self):
self.opt_columns.setSortingEnabled(False) count = self.get_move_count()
row = self.opt_columns.currentRow() for _ in range(0, count):
if row < self.opt_columns.rowCount()-1: row = self.opt_columns.currentRow()
for i in range(0, self.opt_columns.columnCount()): if row < self.opt_columns.rowCount()-1:
lower = self.opt_columns.takeItem(row, i) self.opt_columns.setSortingEnabled(False)
upper = self.opt_columns.takeItem(row+1, i) for i in range(0, self.opt_columns.columnCount()):
self.opt_columns.setItem(row+1, i, lower) lower = self.opt_columns.takeItem(row, i)
self.opt_columns.setItem(row, i, upper) upper = self.opt_columns.takeItem(row+1, i)
self.recreate_row(row+1) self.opt_columns.setItem(row+1, i, lower)
self.recreate_row(row) self.opt_columns.setItem(row, i, upper)
self.opt_columns.setCurrentCell(row+1, 1) self.recreate_row(row+1)
self.changed_signal.emit() self.recreate_row(row)
self.opt_columns.setSortingEnabled(True) self.opt_columns.setCurrentCell(row+1, 1)
self.changed_signal.emit()
self.opt_columns.setSortingEnabled(True)
def is_new_custom_column(self, cc): def is_new_custom_column(self, cc):
return 'colnum' in cc and cc['colnum'] >= self.initial_created_count return 'colnum' in cc and cc['colnum'] >= self.initial_created_count

View File

@ -39,7 +39,8 @@
<item> <item>
<widget class="QToolButton" name="column_up"> <widget class="QToolButton" name="column_up">
<property name="toolTip"> <property name="toolTip">
<string>Move column up</string> <string>&lt;p&gt;Click to move the row up 1. Shift+click to move the row up 5.
Ctrl+click to move the row up 10. Ctrl+Shift+click to move the row to the top.&lt;/p&gt;</string>
</property> </property>
<property name="text"> <property name="text">
<string>...</string> <string>...</string>
@ -171,7 +172,8 @@
<item> <item>
<widget class="QToolButton" name="column_down"> <widget class="QToolButton" name="column_down">
<property name="toolTip"> <property name="toolTip">
<string>Move column down</string> <string>&lt;p&gt;Click to move the row down 1. Shift+click to move the row down 5.
Ctrl+click to move the row down 10. Ctrl+Shift+click to move the row to the bottom.&lt;/p&gt;</string>
</property> </property>
<property name="text"> <property name="text">
<string>...</string> <string>...</string>