mirror of
https://github.com/arsenetar/dupeguru.git
synced 2026-01-22 06:37:17 +00:00
More cleanups
- Cleanup columns.py and tables - Other misc cleanups - Remove text_field.py from qtlib as it is not used - Remove unused variables from image_viewer method
This commit is contained in:
@@ -14,38 +14,38 @@ class Column:
|
||||
def __init__(
|
||||
self,
|
||||
attrname,
|
||||
defaultWidth,
|
||||
default_width,
|
||||
editor=None,
|
||||
alignment=Qt.AlignLeft,
|
||||
cantTruncate=False,
|
||||
cant_truncate=False,
|
||||
painter=None,
|
||||
resizeToFit=False,
|
||||
resize_to_fit=False,
|
||||
):
|
||||
self.attrname = attrname
|
||||
self.defaultWidth = defaultWidth
|
||||
self.default_width = default_width
|
||||
self.editor = editor
|
||||
# See moneyguru #15. Painter attribute was added to allow custom painting of amount value and
|
||||
# currency information. Can be used as a pattern for custom painting of any column.
|
||||
self.painter = painter
|
||||
self.alignment = alignment
|
||||
# This is to indicate, during printing, that a column can't have its data truncated.
|
||||
self.cantTruncate = cantTruncate
|
||||
self.resizeToFit = resizeToFit
|
||||
self.cant_truncate = cant_truncate
|
||||
self.resize_to_fit = resize_to_fit
|
||||
|
||||
|
||||
class Columns:
|
||||
def __init__(self, model, columns, headerView):
|
||||
def __init__(self, model, columns, header_view):
|
||||
self.model = model
|
||||
self._headerView = headerView
|
||||
self._headerView.setDefaultAlignment(Qt.AlignLeft)
|
||||
self._header_view = header_view
|
||||
self._header_view.setDefaultAlignment(Qt.AlignLeft)
|
||||
|
||||
def setspecs(col, modelcol):
|
||||
modelcol.default_width = col.defaultWidth
|
||||
modelcol.default_width = col.default_width
|
||||
modelcol.editor = col.editor
|
||||
modelcol.painter = col.painter
|
||||
modelcol.resizeToFit = col.resizeToFit
|
||||
modelcol.resize_to_fit = col.resize_to_fit
|
||||
modelcol.alignment = col.alignment
|
||||
modelcol.cantTruncate = col.cantTruncate
|
||||
modelcol.cant_truncate = col.cant_truncate
|
||||
|
||||
if columns:
|
||||
for col in columns:
|
||||
@@ -56,16 +56,16 @@ class Columns:
|
||||
for modelcol in self.model.column_list:
|
||||
setspecs(col, modelcol)
|
||||
self.model.view = self
|
||||
self._headerView.sectionMoved.connect(self.headerSectionMoved)
|
||||
self._headerView.sectionResized.connect(self.headerSectionResized)
|
||||
self._header_view.sectionMoved.connect(self.header_section_moved)
|
||||
self._header_view.sectionResized.connect(self.header_section_resized)
|
||||
|
||||
# See moneyguru #14 and #15. This was added in order to allow automatic resizing of columns.
|
||||
for column in self.model.column_list:
|
||||
if column.resizeToFit:
|
||||
self._headerView.setSectionResizeMode(column.logical_index, QHeaderView.ResizeToContents)
|
||||
if column.resize_to_fit:
|
||||
self._header_view.setSectionResizeMode(column.logical_index, QHeaderView.ResizeToContents)
|
||||
|
||||
# --- Public
|
||||
def setColumnsWidth(self, widths):
|
||||
def set_columns_width(self, widths):
|
||||
# `widths` can be None. If it is, then default widths are set.
|
||||
columns = self.model.column_list
|
||||
if not widths:
|
||||
@@ -73,38 +73,38 @@ class Columns:
|
||||
for column, width in zip(columns, widths):
|
||||
if width == 0: # column was hidden before.
|
||||
width = column.default_width
|
||||
self._headerView.resizeSection(column.logical_index, width)
|
||||
self._header_view.resizeSection(column.logical_index, width)
|
||||
|
||||
def setColumnsOrder(self, columnIndexes):
|
||||
if not columnIndexes:
|
||||
def set_columns_order(self, column_indexes):
|
||||
if not column_indexes:
|
||||
return
|
||||
for destIndex, columnIndex in enumerate(columnIndexes):
|
||||
for dest_index, column_index in enumerate(column_indexes):
|
||||
# moveSection takes 2 visual index arguments, so we have to get our visual index first
|
||||
visualIndex = self._headerView.visualIndex(columnIndex)
|
||||
self._headerView.moveSection(visualIndex, destIndex)
|
||||
visual_index = self._header_view.visualIndex(column_index)
|
||||
self._header_view.moveSection(visual_index, dest_index)
|
||||
|
||||
# --- Events
|
||||
def headerSectionMoved(self, logicalIndex, oldVisualIndex, newVisualIndex):
|
||||
attrname = self.model.column_by_index(logicalIndex).name
|
||||
self.model.move_column(attrname, newVisualIndex)
|
||||
def header_section_moved(self, logical_index, old_visual_index, new_visual_index):
|
||||
attrname = self.model.column_by_index(logical_index).name
|
||||
self.model.move_column(attrname, new_visual_index)
|
||||
|
||||
def headerSectionResized(self, logicalIndex, oldSize, newSize):
|
||||
attrname = self.model.column_by_index(logicalIndex).name
|
||||
self.model.resize_column(attrname, newSize)
|
||||
def header_section_resized(self, logical_index, old_size, new_size):
|
||||
attrname = self.model.column_by_index(logical_index).name
|
||||
self.model.resize_column(attrname, new_size)
|
||||
|
||||
# --- model --> view
|
||||
def restore_columns(self):
|
||||
columns = self.model.ordered_columns
|
||||
indexes = [col.logical_index for col in columns]
|
||||
self.setColumnsOrder(indexes)
|
||||
self.set_columns_order(indexes)
|
||||
widths = [col.width for col in self.model.column_list]
|
||||
if not any(widths):
|
||||
widths = None
|
||||
self.setColumnsWidth(widths)
|
||||
self.set_columns_width(widths)
|
||||
for column in self.model.column_list:
|
||||
visible = self.model.column_is_visible(column.name)
|
||||
self._headerView.setSectionHidden(column.logical_index, not visible)
|
||||
self._header_view.setSectionHidden(column.logical_index, not visible)
|
||||
|
||||
def set_column_visible(self, colname, visible):
|
||||
column = self.model.column_by_name(colname)
|
||||
self._headerView.setSectionHidden(column.logical_index, not visible)
|
||||
self._header_view.setSectionHidden(column.logical_index, not visible)
|
||||
|
||||
@@ -28,8 +28,8 @@ class Table(QAbstractTableModel):
|
||||
self.view = view
|
||||
self.view.setModel(self)
|
||||
self.model.view = self
|
||||
if hasattr(self.model, "columns"):
|
||||
self.columns = Columns(self.model.columns, self.COLUMNS, view.horizontalHeader())
|
||||
if hasattr(self.model, "_columns"):
|
||||
self._columns = Columns(self.model._columns, self.COLUMNS, view.horizontalHeader())
|
||||
|
||||
self.view.selectionModel().selectionChanged[(QItemSelection, QItemSelection)].connect(self.selectionChanged)
|
||||
|
||||
@@ -82,28 +82,28 @@ class Table(QAbstractTableModel):
|
||||
return False
|
||||
|
||||
def columnCount(self, index):
|
||||
return self.model.columns.columns_count()
|
||||
return self.model._columns.columns_count()
|
||||
|
||||
def data(self, index, role):
|
||||
if not index.isValid():
|
||||
return None
|
||||
row = self.model[index.row()]
|
||||
column = self.model.columns.column_by_index(index.column())
|
||||
column = self.model._columns.column_by_index(index.column())
|
||||
return self._getData(row, column, role)
|
||||
|
||||
def flags(self, index):
|
||||
if not index.isValid():
|
||||
return self.INVALID_INDEX_FLAGS
|
||||
row = self.model[index.row()]
|
||||
column = self.model.columns.column_by_index(index.column())
|
||||
column = self.model._columns.column_by_index(index.column())
|
||||
return self._getFlags(row, column)
|
||||
|
||||
def headerData(self, section, orientation, role):
|
||||
if orientation != Qt.Horizontal:
|
||||
return None
|
||||
if section >= self.model.columns.columns_count():
|
||||
if section >= self.model._columns.columns_count():
|
||||
return None
|
||||
column = self.model.columns.column_by_index(section)
|
||||
column = self.model._columns.column_by_index(section)
|
||||
if role == Qt.DisplayRole:
|
||||
return column.display
|
||||
elif role == Qt.TextAlignmentRole:
|
||||
@@ -123,11 +123,11 @@ class Table(QAbstractTableModel):
|
||||
if not index.isValid():
|
||||
return False
|
||||
row = self.model[index.row()]
|
||||
column = self.model.columns.column_by_index(index.column())
|
||||
column = self.model._columns.column_by_index(index.column())
|
||||
return self._setData(row, column, value, role)
|
||||
|
||||
def sort(self, section, order):
|
||||
column = self.model.columns.column_by_index(section)
|
||||
column = self.model._columns.column_by_index(section)
|
||||
attrname = column.name
|
||||
self.model.sort_by(attrname, desc=order == Qt.DescendingOrder)
|
||||
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
# Created On: 2012/01/23
|
||||
# Copyright 2015 Hardcoded Software (http://www.hardcoded.net)
|
||||
#
|
||||
# This software is licensed under the "GPLv3" License as described in the "LICENSE" file,
|
||||
# which should be included with this package. The terms are also available at
|
||||
# http://www.gnu.org/licenses/gpl-3.0.html
|
||||
|
||||
|
||||
class TextField:
|
||||
def __init__(self, model, view):
|
||||
self.model = model
|
||||
self.view = view
|
||||
self.model.view = self
|
||||
# Make TextField also work for QLabel, which doesn't allow editing
|
||||
if hasattr(self.view, "editingFinished"):
|
||||
self.view.editingFinished.connect(self.editingFinished)
|
||||
|
||||
def editingFinished(self):
|
||||
self.model.text = self.view.text()
|
||||
|
||||
# model --> view
|
||||
def refresh(self):
|
||||
self.view.setText(self.model.text)
|
||||
Reference in New Issue
Block a user