mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-08 02:34:06 -04:00
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:
parent
37dd0f5c70
commit
d9bd244f06
@ -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
|
||||||
|
@ -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><p>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.</p></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><p>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.</p></string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>...</string>
|
<string>...</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user