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
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.preferences import ConfigWidgetBase, test_widget
@ -239,35 +239,51 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
title = self.opt_columns.item(row, 2).text()
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):
self.opt_columns.setSortingEnabled(False)
row = self.opt_columns.currentRow()
if row > 0:
for i in range(0, self.opt_columns.columnCount()):
lower = self.opt_columns.takeItem(row-1, i)
upper = self.opt_columns.takeItem(row, i)
self.opt_columns.setItem(row, i, lower)
self.opt_columns.setItem(row-1, i, upper)
self.recreate_row(row-1)
self.recreate_row(row)
self.opt_columns.setCurrentCell(row-1, 1)
self.changed_signal.emit()
self.opt_columns.setSortingEnabled(True)
count = self.get_move_count()
for _ in range(0, count):
row = self.opt_columns.currentRow()
if row > 0:
self.opt_columns.setSortingEnabled(False)
for i in range(0, self.opt_columns.columnCount()):
lower = self.opt_columns.takeItem(row-1, i)
upper = self.opt_columns.takeItem(row, i)
self.opt_columns.setItem(row, i, lower)
self.opt_columns.setItem(row-1, i, upper)
self.recreate_row(row-1)
self.recreate_row(row)
self.opt_columns.setCurrentCell(row-1, 1)
self.changed_signal.emit()
self.opt_columns.setSortingEnabled(True)
def down_column(self):
self.opt_columns.setSortingEnabled(False)
row = self.opt_columns.currentRow()
if row < self.opt_columns.rowCount()-1:
for i in range(0, self.opt_columns.columnCount()):
lower = self.opt_columns.takeItem(row, i)
upper = self.opt_columns.takeItem(row+1, i)
self.opt_columns.setItem(row+1, i, lower)
self.opt_columns.setItem(row, i, upper)
self.recreate_row(row+1)
self.recreate_row(row)
self.opt_columns.setCurrentCell(row+1, 1)
self.changed_signal.emit()
self.opt_columns.setSortingEnabled(True)
count = self.get_move_count()
for _ in range(0, count):
row = self.opt_columns.currentRow()
if row < self.opt_columns.rowCount()-1:
self.opt_columns.setSortingEnabled(False)
for i in range(0, self.opt_columns.columnCount()):
lower = self.opt_columns.takeItem(row, i)
upper = self.opt_columns.takeItem(row+1, i)
self.opt_columns.setItem(row+1, i, lower)
self.opt_columns.setItem(row, i, upper)
self.recreate_row(row+1)
self.recreate_row(row)
self.opt_columns.setCurrentCell(row+1, 1)
self.changed_signal.emit()
self.opt_columns.setSortingEnabled(True)
def is_new_custom_column(self, cc):
return 'colnum' in cc and cc['colnum'] >= self.initial_created_count

View File

@ -39,7 +39,8 @@
<item>
<widget class="QToolButton" name="column_up">
<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 name="text">
<string>...</string>
@ -171,7 +172,8 @@
<item>
<widget class="QToolButton" name="column_down">
<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 name="text">
<string>...</string>