Fixes #2086748 [[Enhancement] Efficient Column Positioning in Column Manager](https://bugs.launchpad.net/calibre/+bug/2086748)
This commit is contained in:
Kovid Goyal 2024-11-06 22:08:38 +05:30
commit 73dc14719e
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
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,10 +239,24 @@ 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()
for _ in range(0, count):
row = self.opt_columns.currentRow() row = self.opt_columns.currentRow()
if row > 0: if row > 0:
self.opt_columns.setSortingEnabled(False)
for i in range(0, self.opt_columns.columnCount()): for i in range(0, self.opt_columns.columnCount()):
lower = self.opt_columns.takeItem(row-1, i) lower = self.opt_columns.takeItem(row-1, i)
upper = self.opt_columns.takeItem(row, i) upper = self.opt_columns.takeItem(row, i)
@ -255,9 +269,11 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
self.opt_columns.setSortingEnabled(True) self.opt_columns.setSortingEnabled(True)
def down_column(self): def down_column(self):
self.opt_columns.setSortingEnabled(False) count = self.get_move_count()
for _ in range(0, count):
row = self.opt_columns.currentRow() row = self.opt_columns.currentRow()
if row < self.opt_columns.rowCount()-1: if row < self.opt_columns.rowCount()-1:
self.opt_columns.setSortingEnabled(False)
for i in range(0, self.opt_columns.columnCount()): for i in range(0, self.opt_columns.columnCount()):
lower = self.opt_columns.takeItem(row, i) lower = self.opt_columns.takeItem(row, i)
upper = self.opt_columns.takeItem(row+1, i) upper = self.opt_columns.takeItem(row+1, i)

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>