mirror of
				https://github.com/arsenetar/dupeguru.git
				synced 2025-09-11 17:58:17 +00:00 
			
		
		
		
	Updated the qt part of dupeguru to adjust to the latest column reorganization.
This commit is contained in:
		
							parent
							
								
									9226a4fb7c
								
							
						
					
					
						commit
						d9ae967439
					
				| @ -1,4 +1,3 @@ | |||||||
| # -*- coding: utf-8 -*- |  | ||||||
| # Created By: Virgil Dupras | # Created By: Virgil Dupras | ||||||
| # Created On: 2010-04-12 | # Created On: 2010-04-12 | ||||||
| # Copyright 2011 Hardcoded Software (http://www.hardcoded.net) | # Copyright 2011 Hardcoded Software (http://www.hardcoded.net) | ||||||
| @ -9,11 +8,21 @@ | |||||||
| 
 | 
 | ||||||
| from hscommon.notify import Listener | from hscommon.notify import Listener | ||||||
| from hscommon.gui.table import GUITable, Row | from hscommon.gui.table import GUITable, Row | ||||||
|  | from hscommon.gui.column import Column, Columns | ||||||
|  | from hscommon.trans import trget | ||||||
|  | 
 | ||||||
|  | coltr = trget('columns') | ||||||
| 
 | 
 | ||||||
| class ProblemTable(GUITable, Listener): | class ProblemTable(GUITable, Listener): | ||||||
|  |     COLUMNS = [ | ||||||
|  |         Column('path', coltr("File Path")), | ||||||
|  |         Column('msg', coltr("Error Message")), | ||||||
|  |     ] | ||||||
|  |      | ||||||
|     def __init__(self, view, problem_dialog): |     def __init__(self, view, problem_dialog): | ||||||
|         GUITable.__init__(self) |         GUITable.__init__(self) | ||||||
|         Listener.__init__(self, problem_dialog) |         Listener.__init__(self, problem_dialog) | ||||||
|  |         self.columns = Columns(self) | ||||||
|         self.view = view |         self.view = view | ||||||
|         self.dialog = problem_dialog |         self.dialog = problem_dialog | ||||||
|      |      | ||||||
|  | |||||||
| @ -53,6 +53,12 @@ class DupeGuru(QObject): | |||||||
|     LOGO_NAME = '<replace this>' |     LOGO_NAME = '<replace this>' | ||||||
|     NAME = '<replace this>' |     NAME = '<replace this>' | ||||||
|      |      | ||||||
|  |     DETAILS_DIALOG_CLASS = None | ||||||
|  |     RESULT_WINDOW_CLASS = ResultWindow | ||||||
|  |     RESULT_MODEL_CLASS = None | ||||||
|  |     PREFERENCES_CLASS = None | ||||||
|  |     PREFERENCES_DIALOG_CLASS = None | ||||||
|  |      | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|         QObject.__init__(self) |         QObject.__init__(self) | ||||||
|         appdata = str(QDesktopServices.storageLocation(QDesktopServices.DataLocation)) |         appdata = str(QDesktopServices.storageLocation(QDesktopServices.DataLocation)) | ||||||
| @ -65,7 +71,7 @@ class DupeGuru(QObject): | |||||||
|             sys.stderr = SysWrapper() |             sys.stderr = SysWrapper() | ||||||
|         if sys.stdout is None: |         if sys.stdout is None: | ||||||
|             sys.stdout = SysWrapper() |             sys.stdout = SysWrapper() | ||||||
|         self.prefs = self._create_preferences() |         self.prefs = self.PREFERENCES_CLASS() | ||||||
|         self.prefs.load() |         self.prefs.load() | ||||||
|         self.model = self.MODELCLASS(view=self, appdata=appdata) |         self.model = self.MODELCLASS(view=self, appdata=appdata) | ||||||
|         self._setup() |         self._setup() | ||||||
| @ -77,12 +83,12 @@ class DupeGuru(QObject): | |||||||
|         self._update_options() |         self._update_options() | ||||||
|         self.recentResults = Recent(self, 'recentResults') |         self.recentResults = Recent(self, 'recentResults') | ||||||
|         self.recentResults.mustOpenItem.connect(self.model.load_from) |         self.recentResults.mustOpenItem.connect(self.model.load_from) | ||||||
|         self.resultWindow = self._create_result_window() |         self.resultWindow = self.RESULT_WINDOW_CLASS(self) | ||||||
|         self._progress = Progress(self.resultWindow) |         self._progress = Progress(self.resultWindow) | ||||||
|         self.directories_dialog = DirectoriesDialog(self.resultWindow, self) |         self.directories_dialog = DirectoriesDialog(self.resultWindow, self) | ||||||
|         self.details_dialog = self._create_details_dialog(self.resultWindow) |         self.details_dialog = self.DETAILS_DIALOG_CLASS(self.resultWindow, self) | ||||||
|         self.problemDialog = ProblemDialog(parent=self.resultWindow, app=self) |         self.problemDialog = ProblemDialog(parent=self.resultWindow, app=self) | ||||||
|         self.preferences_dialog = self._create_preferences_dialog(self.resultWindow) |         self.preferences_dialog = self.PREFERENCES_DIALOG_CLASS(self.resultWindow, self) | ||||||
|         self.about_box = AboutBox(self.resultWindow, self) |         self.about_box = AboutBox(self.resultWindow, self) | ||||||
|                  |                  | ||||||
|         self.directories_dialog.show() |         self.directories_dialog.show() | ||||||
| @ -119,19 +125,6 @@ class DupeGuru(QObject): | |||||||
|         self.model.options['clean_empty_dirs'] = self.prefs.remove_empty_folders |         self.model.options['clean_empty_dirs'] = self.prefs.remove_empty_folders | ||||||
|         self.model.options['ignore_hardlink_matches'] = self.prefs.ignore_hardlink_matches |         self.model.options['ignore_hardlink_matches'] = self.prefs.ignore_hardlink_matches | ||||||
|      |      | ||||||
|     #--- Virtual |  | ||||||
|     def _create_details_dialog(self, parent): |  | ||||||
|         raise NotImplementedError() |  | ||||||
|      |  | ||||||
|     def _create_result_window(self): |  | ||||||
|         return ResultWindow(app=self) |  | ||||||
|      |  | ||||||
|     def _create_preferences(self): |  | ||||||
|         raise NotImplementedError() |  | ||||||
|      |  | ||||||
|     def _create_preferences_dialog(self, parent): |  | ||||||
|         raise NotImplementedError() |  | ||||||
|      |  | ||||||
|     #--- Public |     #--- Public | ||||||
|     def add_selected_to_ignore_list(self): |     def add_selected_to_ignore_list(self): | ||||||
|         dupes = self.model.without_ref(self.model.selected_dupes) |         dupes = self.model.without_ref(self.model.selected_dupes) | ||||||
|  | |||||||
| @ -11,13 +11,6 @@ from PyQt4.QtGui import QApplication | |||||||
| from qtlib.preferences import Preferences as PreferencesBase | from qtlib.preferences import Preferences as PreferencesBase | ||||||
| 
 | 
 | ||||||
| class Preferences(PreferencesBase): | class Preferences(PreferencesBase): | ||||||
|     # (width, is_visible) |  | ||||||
|     COLUMNS_DEFAULT_ATTRS = [] |  | ||||||
|      |  | ||||||
|     def __init__(self): |  | ||||||
|         PreferencesBase.__init__(self) |  | ||||||
|         self.reset_columns() |  | ||||||
|      |  | ||||||
|     def _load_specific(self, settings): |     def _load_specific(self, settings): | ||||||
|         # load prefs specific to the dg edition |         # load prefs specific to the dg edition | ||||||
|         pass |         pass | ||||||
| @ -34,13 +27,6 @@ class Preferences(PreferencesBase): | |||||||
|         self.custom_command = get('CustomCommand', self.custom_command) |         self.custom_command = get('CustomCommand', self.custom_command) | ||||||
|         self.language = get('Language', self.language) |         self.language = get('Language', self.language) | ||||||
|          |          | ||||||
|         widths = get('ColumnsWidth', self.columns_width) |  | ||||||
|         # only set nonzero values |  | ||||||
|         for index, width in enumerate(widths[:len(self.columns_width)]): |  | ||||||
|             if width > 0: |  | ||||||
|                 self.columns_width[index] = width |  | ||||||
|         self.columns_visible = get('ColumnsVisible', self.columns_visible) |  | ||||||
|          |  | ||||||
|         self.tableFontSize = get('TableFontSize', self.tableFontSize) |         self.tableFontSize = get('TableFontSize', self.tableFontSize) | ||||||
|         self.resultWindowIsMaximized = get('ResultWindowIsMaximized', self.resultWindowIsMaximized) |         self.resultWindowIsMaximized = get('ResultWindowIsMaximized', self.resultWindowIsMaximized) | ||||||
|         self.resultWindowRect = self.get_rect('ResultWindowRect', self.resultWindowRect) |         self.resultWindowRect = self.get_rect('ResultWindowRect', self.resultWindowRect) | ||||||
| @ -76,10 +62,6 @@ class Preferences(PreferencesBase): | |||||||
|          |          | ||||||
|         self._reset_specific() |         self._reset_specific() | ||||||
|      |      | ||||||
|     def reset_columns(self): |  | ||||||
|         self.columns_width = [width for width, _ in self.COLUMNS_DEFAULT_ATTRS] |  | ||||||
|         self.columns_visible = [visible for _, visible in self.COLUMNS_DEFAULT_ATTRS] |  | ||||||
|      |  | ||||||
|     def _save_specific(self, settings): |     def _save_specific(self, settings): | ||||||
|         # save prefs specific to the dg edition |         # save prefs specific to the dg edition | ||||||
|         pass |         pass | ||||||
| @ -94,8 +76,6 @@ class Preferences(PreferencesBase): | |||||||
|         set_('DebugMode', self.debug_mode) |         set_('DebugMode', self.debug_mode) | ||||||
|         set_('DestinationType', self.destination_type) |         set_('DestinationType', self.destination_type) | ||||||
|         set_('CustomCommand', self.custom_command) |         set_('CustomCommand', self.custom_command) | ||||||
|         set_('ColumnsWidth', self.columns_width) |  | ||||||
|         set_('ColumnsVisible', self.columns_visible) |  | ||||||
|         set_('Language', self.language) |         set_('Language', self.language) | ||||||
|          |          | ||||||
|         set_('TableFontSize', self.tableFontSize) |         set_('TableFontSize', self.tableFontSize) | ||||||
|  | |||||||
| @ -6,17 +6,14 @@ | |||||||
| # which should be included with this package. The terms are also available at  | # which should be included with this package. The terms are also available at  | ||||||
| # http://www.hardcoded.net/licenses/bsd_license | # http://www.hardcoded.net/licenses/bsd_license | ||||||
| 
 | 
 | ||||||
| from hscommon.trans import trget |  | ||||||
| from qtlib.column import Column | from qtlib.column import Column | ||||||
| from qtlib.table import Table | from qtlib.table import Table | ||||||
| from core.gui.problem_table import ProblemTable as ProblemTableModel | from core.gui.problem_table import ProblemTable as ProblemTableModel | ||||||
| 
 | 
 | ||||||
| tr = trget('ui') |  | ||||||
| 
 |  | ||||||
| class ProblemTable(Table): | class ProblemTable(Table): | ||||||
|     COLUMNS = [ |     COLUMNS = [ | ||||||
|         Column('path', tr("File Path"), 150), |         Column('path', defaultWidth=150), | ||||||
|         Column('msg', tr("Error Message"), 150), |         Column('msg', defaultWidth=150), | ||||||
|     ] |     ] | ||||||
|      |      | ||||||
|     def __init__(self, problem_dialog, view): |     def __init__(self, problem_dialog, view): | ||||||
|  | |||||||
| @ -7,16 +7,16 @@ | |||||||
| # http://www.hardcoded.net/licenses/bsd_license | # http://www.hardcoded.net/licenses/bsd_license | ||||||
| 
 | 
 | ||||||
| from PyQt4.QtCore import Qt, SIGNAL, QUrl, QRect | from PyQt4.QtCore import Qt, SIGNAL, QUrl, QRect | ||||||
| from PyQt4.QtGui import (QMainWindow, QMenu, QLabel, QHeaderView, QMessageBox, QInputDialog, | from PyQt4.QtGui import (QMainWindow, QMenu, QLabel, QMessageBox, QInputDialog, QLineEdit, | ||||||
|     QLineEdit, QDesktopServices, QFileDialog, QMenuBar, QWidget, QVBoxLayout, QAbstractItemView, |     QDesktopServices, QFileDialog, QMenuBar, QWidget, QVBoxLayout, QAbstractItemView, QStatusBar, | ||||||
|     QStatusBar, QDialog) |     QDialog) | ||||||
| 
 | 
 | ||||||
| from hscommon.plat import ISOSX, ISLINUX | from hscommon.plat import ISOSX, ISLINUX | ||||||
| from hscommon.trans import trget | from hscommon.trans import trget | ||||||
| from hscommon.util import nonone | from hscommon.util import nonone | ||||||
| from qtlib.util import moveToScreenCenter | from qtlib.util import moveToScreenCenter | ||||||
| 
 | 
 | ||||||
| from .results_model import ResultsModel, ResultsView | from .results_model import ResultsView | ||||||
| from .stats_label import StatsLabel | from .stats_label import StatsLabel | ||||||
| from .util import createActions | from .util import createActions | ||||||
| from .prioritize_dialog import PrioritizeDialog | from .prioritize_dialog import PrioritizeDialog | ||||||
| @ -29,9 +29,8 @@ class ResultWindow(QMainWindow): | |||||||
|         self.app = app |         self.app = app | ||||||
|         self._last_filter = None |         self._last_filter = None | ||||||
|         self._setupUi() |         self._setupUi() | ||||||
|         self.resultsModel = ResultsModel(self.app, self.resultsView)  |         self.resultsModel = app.RESULT_MODEL_CLASS(self.app, self.resultsView) | ||||||
|         self.stats = StatsLabel(app, self.statusLabel) |         self.stats = StatsLabel(app, self.statusLabel) | ||||||
|         self._load_columns() |  | ||||||
|         self._update_column_actions_status() |         self._update_column_actions_status() | ||||||
|          |          | ||||||
|         self.connect(self.menuColumns, SIGNAL('triggered(QAction*)'), self.columnToggled) |         self.connect(self.menuColumns, SIGNAL('triggered(QAction*)'), self.columnToggled) | ||||||
| @ -141,14 +140,15 @@ class ResultWindow(QMainWindow): | |||||||
|         # Columns menu |         # Columns menu | ||||||
|         menu = self.menuColumns |         menu = self.menuColumns | ||||||
|         self._column_actions = [] |         self._column_actions = [] | ||||||
|         for index, column in enumerate(self.app.model.COLUMNS): |         for index, (display, visible) in enumerate(self.app.model.result_table.columns.menu_items()): | ||||||
|             action = menu.addAction(column.display) |             action = menu.addAction(display) | ||||||
|             action.setCheckable(True) |             action.setCheckable(True) | ||||||
|             action.column_index = index |             action.setChecked(visible) | ||||||
|  |             action.item_index = index | ||||||
|             self._column_actions.append(action) |             self._column_actions.append(action) | ||||||
|         menu.addSeparator() |         menu.addSeparator() | ||||||
|         action = menu.addAction(tr("Reset to Defaults")) |         action = menu.addAction(tr("Reset to Defaults")) | ||||||
|         action.column_index = -1 |         action.item_index = -1 | ||||||
|          |          | ||||||
|         # Action menu |         # Action menu | ||||||
|         actionMenu = QMenu(tr("Actions"), self.menubar) |         actionMenu = QMenu(tr("Actions"), self.menubar) | ||||||
| @ -203,21 +203,11 @@ class ResultWindow(QMainWindow): | |||||||
|                 moveToScreenCenter(self) |                 moveToScreenCenter(self) | ||||||
|      |      | ||||||
|     #--- Private |     #--- Private | ||||||
|     def _load_columns(self): |  | ||||||
|         h = self.resultsView.horizontalHeader() |  | ||||||
|         h.setResizeMode(QHeaderView.Interactive) |  | ||||||
|         prefs = self.app.prefs |  | ||||||
|         attrs = list(zip(prefs.columns_width, prefs.columns_visible)) |  | ||||||
|         for index, (width, visible) in enumerate(attrs): |  | ||||||
|             h.resizeSection(index, width) |  | ||||||
|             h.setSectionHidden(index, not visible) |  | ||||||
|         h.setResizeMode(0, QHeaderView.Stretch) |  | ||||||
|      |  | ||||||
|     def _update_column_actions_status(self): |     def _update_column_actions_status(self): | ||||||
|         h = self.resultsView.horizontalHeader() |         # Update menu checked state | ||||||
|         for action in self._column_actions: |         menu_items = self.app.model.result_table.columns.menu_items() | ||||||
|             colid = action.column_index |         for action, (display, visible) in zip(self._column_actions, menu_items): | ||||||
|             action.setChecked(not h.isSectionHidden(colid)) |             action.setChecked(visible) | ||||||
|      |      | ||||||
|     #--- Actions |     #--- Actions | ||||||
|     def actionsTriggered(self): |     def actionsTriggered(self): | ||||||
| @ -352,26 +342,17 @@ class ResultWindow(QMainWindow): | |||||||
|     #--- Events |     #--- Events | ||||||
|     def appWillSavePrefs(self): |     def appWillSavePrefs(self): | ||||||
|         prefs = self.app.prefs |         prefs = self.app.prefs | ||||||
|         h = self.resultsView.horizontalHeader() |  | ||||||
|         widths = [] |  | ||||||
|         visible = [] |  | ||||||
|         for i in range(len(self.app.model.COLUMNS)): |  | ||||||
|             widths.append(h.sectionSize(i)) |  | ||||||
|             visible.append(not h.isSectionHidden(i)) |  | ||||||
|         prefs.columns_width = widths |  | ||||||
|         prefs.columns_visible = visible |  | ||||||
|         prefs.resultWindowIsMaximized = self.isMaximized() |         prefs.resultWindowIsMaximized = self.isMaximized() | ||||||
|         prefs.resultWindowRect = self.geometry() |         prefs.resultWindowRect = self.geometry() | ||||||
|      |      | ||||||
|     def columnToggled(self, action): |     def columnToggled(self, action): | ||||||
|         colid = action.column_index |         index = action.item_index | ||||||
|         if colid == -1: |         if index == -1: | ||||||
|             self.app.prefs.reset_columns() |             self.app.model.result_table.columns.reset_to_defaults() | ||||||
|             self._load_columns() |             self._update_column_actions_status() | ||||||
|         else: |         else: | ||||||
|             h = self.resultsView.horizontalHeader() |             visible = self.app.model.result_table.columns.toggle_menu_item(index) | ||||||
|             h.setSectionHidden(colid, not h.isSectionHidden(colid)) |             action.setChecked(visible) | ||||||
|         self._update_column_actions_status() |  | ||||||
|      |      | ||||||
|     def contextMenuEvent(self, event): |     def contextMenuEvent(self, event): | ||||||
|         self.actionActions.menu().exec_(event.globalPos()) |         self.actionActions.menu().exec_(event.globalPos()) | ||||||
|  | |||||||
| @ -15,31 +15,31 @@ from core.gui.result_table import ResultTable as ResultTableModel | |||||||
| 
 | 
 | ||||||
| class ResultsModel(Table): | class ResultsModel(Table): | ||||||
|     def __init__(self, app, view): |     def __init__(self, app, view): | ||||||
|         model = ResultTableModel(self, app.model) |         model = app.model.result_table | ||||||
|         self._app = app.model |  | ||||||
|         self._delta_columns = app.model.DELTA_COLUMNS |  | ||||||
|         Table.__init__(self, model, view) |         Table.__init__(self, model, view) | ||||||
|         self.model.connect() |         self.model.connect() | ||||||
|          |          | ||||||
|         app.prefsChanged.connect(self.appPrefsChanged) |         app.prefsChanged.connect(self.appPrefsChanged) | ||||||
|  |         app.willSavePrefs.connect(self.appWillSavePrefs) | ||||||
|      |      | ||||||
|     def columnCount(self, parent): |     def columnCount(self, parent): | ||||||
|         return len(self._app.COLUMNS) |         return len(self.model.COLUMNS) | ||||||
|      |      | ||||||
|     def data(self, index, role): |     def data(self, index, role): | ||||||
|         if not index.isValid(): |         if not index.isValid(): | ||||||
|             return None |             return None | ||||||
|         row = self.model[index.row()] |         row = self.model[index.row()] | ||||||
|  |         column = self.model.COLUMNS[index.column()] | ||||||
|         if role == Qt.DisplayRole: |         if role == Qt.DisplayRole: | ||||||
|             data = row.data_delta if self.model.delta_values else row.data |             data = row.data_delta if self.model.delta_values else row.data | ||||||
|             return data[index.column()] |             return data[column.name] | ||||||
|         elif role == Qt.CheckStateRole: |         elif role == Qt.CheckStateRole: | ||||||
|             if index.column() == 0 and row.markable: |             if index.column() == 0 and row.markable: | ||||||
|                 return Qt.Checked if row.marked else Qt.Unchecked |                 return Qt.Checked if row.marked else Qt.Unchecked | ||||||
|         elif role == Qt.ForegroundRole: |         elif role == Qt.ForegroundRole: | ||||||
|             if row.isref: |             if row.isref: | ||||||
|                 return QBrush(Qt.blue) |                 return QBrush(Qt.blue) | ||||||
|             elif self.model.delta_values and index.column() in self._delta_columns: |             elif self.model.delta_values and column.name in self.model.DELTA_COLUMNS: | ||||||
|                 return QBrush(QColor(255, 142, 40)) # orange |                 return QBrush(QColor(255, 142, 40)) # orange | ||||||
|         elif role == Qt.FontRole: |         elif role == Qt.FontRole: | ||||||
|             isBold = row.isref |             isBold = row.isref | ||||||
| @ -47,8 +47,8 @@ class ResultsModel(Table): | |||||||
|             font.setBold(isBold) |             font.setBold(isBold) | ||||||
|             return font |             return font | ||||||
|         elif role == Qt.EditRole: |         elif role == Qt.EditRole: | ||||||
|             if index.column() == 0: |             if column.name == 'name': | ||||||
|                 return row.data[index.column()] |                 return row.data[column.name] | ||||||
|         return None |         return None | ||||||
|      |      | ||||||
|     def flags(self, index): |     def flags(self, index): | ||||||
| @ -64,26 +64,28 @@ class ResultsModel(Table): | |||||||
|      |      | ||||||
|     def headerData(self, section, orientation, role): |     def headerData(self, section, orientation, role): | ||||||
|         if role == Qt.DisplayRole: |         if role == Qt.DisplayRole: | ||||||
|             if orientation == Qt.Horizontal and section < len(self._app.COLUMNS): |             if orientation == Qt.Horizontal and section < len(self.model.COLUMNS): | ||||||
|                 return self._app.COLUMNS[section].display |                 return self.model.COLUMNS[section].display | ||||||
|         return None |         return None | ||||||
|      |      | ||||||
|     def setData(self, index, value, role): |     def setData(self, index, value, role): | ||||||
|         if not index.isValid(): |         if not index.isValid(): | ||||||
|             return False |             return False | ||||||
|         row = self.model[index.row()] |         row = self.model[index.row()] | ||||||
|  |         column = self.model.COLUMNS[index.column()] | ||||||
|         if role == Qt.CheckStateRole: |         if role == Qt.CheckStateRole: | ||||||
|             if index.column() == 0: |             if column.name == 'name': | ||||||
|                 self._app.mark_dupe(row._dupe, value.toBool()) |                 self.model.app.mark_dupe(row._dupe, value.toBool()) | ||||||
|                 return True |                 return True | ||||||
|         elif role == Qt.EditRole: |         elif role == Qt.EditRole: | ||||||
|             if index.column() == 0: |             if column.name == 'name': | ||||||
|                 value = str(value.toString()) |                 value = str(value.toString()) | ||||||
|                 return self.model.rename_selected(value) |                 return self.model.rename_selected(value) | ||||||
|         return False |         return False | ||||||
|      |      | ||||||
|     def sort(self, column, order): |     def sort(self, column, order): | ||||||
|         self.model.sort(column, order == Qt.AscendingOrder) |         column = self.model.COLUMNS[column] | ||||||
|  |         self.model.sort(column.name, order == Qt.AscendingOrder) | ||||||
|      |      | ||||||
|     #--- Properties |     #--- Properties | ||||||
|     @property |     @property | ||||||
| @ -110,6 +112,9 @@ class ResultsModel(Table): | |||||||
|         fm = QFontMetrics(font) |         fm = QFontMetrics(font) | ||||||
|         self.view.verticalHeader().setDefaultSectionSize(fm.height()+2) |         self.view.verticalHeader().setDefaultSectionSize(fm.height()+2) | ||||||
|      |      | ||||||
|  |     def appWillSavePrefs(self): | ||||||
|  |         self.model.columns.save_columns() | ||||||
|  |      | ||||||
|     #--- model --> view |     #--- model --> view | ||||||
|     def invalidate_markings(self): |     def invalidate_markings(self): | ||||||
|         # redraw view |         # redraw view | ||||||
|  | |||||||
							
								
								
									
										15
									
								
								qt/me/app.py
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								qt/me/app.py
									
									
									
									
									
								
							| @ -11,6 +11,7 @@ from core_me.app import DupeGuru as DupeGuruModel | |||||||
| 
 | 
 | ||||||
| from ..base.app import DupeGuru as DupeGuruBase | from ..base.app import DupeGuru as DupeGuruBase | ||||||
| from .details_dialog import DetailsDialog | from .details_dialog import DetailsDialog | ||||||
|  | from .results_model import ResultsModel | ||||||
| from .preferences import Preferences | from .preferences import Preferences | ||||||
| from .preferences_dialog import PreferencesDialog | from .preferences_dialog import PreferencesDialog | ||||||
| 
 | 
 | ||||||
| @ -20,6 +21,11 @@ class DupeGuru(DupeGuruBase): | |||||||
|     LOGO_NAME = 'logo_me' |     LOGO_NAME = 'logo_me' | ||||||
|     NAME = __appname__ |     NAME = __appname__ | ||||||
|      |      | ||||||
|  |     DETAILS_DIALOG_CLASS = DetailsDialog | ||||||
|  |     RESULT_MODEL_CLASS = ResultsModel | ||||||
|  |     PREFERENCES_CLASS = Preferences | ||||||
|  |     PREFERENCES_DIALOG_CLASS = PreferencesDialog | ||||||
|  |      | ||||||
|     def _update_options(self): |     def _update_options(self): | ||||||
|         DupeGuruBase._update_options(self) |         DupeGuruBase._update_options(self) | ||||||
|         self.model.scanner.min_match_percentage = self.prefs.filter_hardness |         self.model.scanner.min_match_percentage = self.prefs.filter_hardness | ||||||
| @ -41,12 +47,3 @@ class DupeGuru(DupeGuruBase): | |||||||
|             scanned_tags.add('year') |             scanned_tags.add('year') | ||||||
|         self.model.scanner.scanned_tags = scanned_tags |         self.model.scanner.scanned_tags = scanned_tags | ||||||
|      |      | ||||||
|     def _create_details_dialog(self, parent): |  | ||||||
|         return DetailsDialog(parent, self) |  | ||||||
|      |  | ||||||
|     def _create_preferences(self): |  | ||||||
|         return Preferences() |  | ||||||
|      |  | ||||||
|     def _create_preferences_dialog(self, parent): |  | ||||||
|         return PreferencesDialog(parent, self) |  | ||||||
|      |  | ||||||
|  | |||||||
| @ -11,28 +11,6 @@ from core.scanner import ScanType | |||||||
| from ..base.preferences import Preferences as PreferencesBase | from ..base.preferences import Preferences as PreferencesBase | ||||||
| 
 | 
 | ||||||
| class Preferences(PreferencesBase): | class Preferences(PreferencesBase): | ||||||
|     # (width, is_visible) |  | ||||||
|     COLUMNS_DEFAULT_ATTRS = [  |  | ||||||
|         (200, True), # name |  | ||||||
|         (180, True), # path |  | ||||||
|         (60, True), # size |  | ||||||
|         (60, True), # Time |  | ||||||
|         (50, True), # Bitrate |  | ||||||
|         (60, False), # Sample Rate |  | ||||||
|         (40, False), # Kind |  | ||||||
|         (120, False), # modification |  | ||||||
|         (120, False), # Title |  | ||||||
|         (120, False), # Artist |  | ||||||
|         (120, False), # Album |  | ||||||
|         (80, False), # Genre |  | ||||||
|         (40, False), # Year |  | ||||||
|         (40, False), # Track Number |  | ||||||
|         (120, False), # Comment |  | ||||||
|         (60, True), # match % |  | ||||||
|         (120, False), # Words Used |  | ||||||
|         (80, False), # dupe count |  | ||||||
|     ] |  | ||||||
|      |  | ||||||
|     def _load_specific(self, settings): |     def _load_specific(self, settings): | ||||||
|         get = self.get_value |         get = self.get_value | ||||||
|         self.scan_type = get('ScanType', self.scan_type) |         self.scan_type = get('ScanType', self.scan_type) | ||||||
|  | |||||||
							
								
								
									
										19
									
								
								qt/pe/app.py
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								qt/pe/app.py
									
									
									
									
									
								
							| @ -18,6 +18,7 @@ from ..base.app import DupeGuru as DupeGuruBase | |||||||
| from .block import getblocks | from .block import getblocks | ||||||
| from .details_dialog import DetailsDialog | from .details_dialog import DetailsDialog | ||||||
| from .result_window import ResultWindow | from .result_window import ResultWindow | ||||||
|  | from .results_model import ResultsModel | ||||||
| from .preferences import Preferences | from .preferences import Preferences | ||||||
| from .preferences_dialog import PreferencesDialog | from .preferences_dialog import PreferencesDialog | ||||||
| 
 | 
 | ||||||
| @ -70,6 +71,12 @@ class DupeGuru(DupeGuruBase): | |||||||
|     LOGO_NAME = 'logo_pe' |     LOGO_NAME = 'logo_pe' | ||||||
|     NAME = __appname__ |     NAME = __appname__ | ||||||
|      |      | ||||||
|  |     DETAILS_DIALOG_CLASS = DetailsDialog | ||||||
|  |     RESULT_WINDOW_CLASS = ResultWindow | ||||||
|  |     RESULT_MODEL_CLASS = ResultsModel | ||||||
|  |     PREFERENCES_CLASS = Preferences | ||||||
|  |     PREFERENCES_DIALOG_CLASS = PreferencesDialog | ||||||
|  |      | ||||||
|     def _setup(self): |     def _setup(self): | ||||||
|         self.model.directories.fileclasses = [File] |         self.model.directories.fileclasses = [File] | ||||||
|         DupeGuruBase._setup(self) |         DupeGuruBase._setup(self) | ||||||
| @ -80,15 +87,3 @@ class DupeGuru(DupeGuruBase): | |||||||
|         self.model.scanner.match_scaled = self.prefs.match_scaled |         self.model.scanner.match_scaled = self.prefs.match_scaled | ||||||
|         self.model.scanner.threshold = self.prefs.filter_hardness |         self.model.scanner.threshold = self.prefs.filter_hardness | ||||||
|      |      | ||||||
|     def _create_details_dialog(self, parent): |  | ||||||
|         return DetailsDialog(parent, self) |  | ||||||
|      |  | ||||||
|     def _create_result_window(self): |  | ||||||
|         return ResultWindow(app=self) |  | ||||||
|      |  | ||||||
|     def _create_preferences(self): |  | ||||||
|         return Preferences() |  | ||||||
|      |  | ||||||
|     def _create_preferences_dialog(self, parent): |  | ||||||
|         return PreferencesDialog(parent, self) |  | ||||||
|      |  | ||||||
|  | |||||||
| @ -11,18 +11,6 @@ from core.scanner import ScanType | |||||||
| from ..base.preferences import Preferences as PreferencesBase | from ..base.preferences import Preferences as PreferencesBase | ||||||
| 
 | 
 | ||||||
| class Preferences(PreferencesBase): | class Preferences(PreferencesBase): | ||||||
|     # (width, is_visible) |  | ||||||
|     COLUMNS_DEFAULT_ATTRS = [  |  | ||||||
|         (200, True), # name |  | ||||||
|         (180, True), # path |  | ||||||
|         (60, True), # size |  | ||||||
|         (40, False), # kind |  | ||||||
|         (100, True), # dimensions |  | ||||||
|         (120, False), # modification |  | ||||||
|         (60, True), # match % |  | ||||||
|         (80, False), # dupe count |  | ||||||
|     ] |  | ||||||
|      |  | ||||||
|     def _load_specific(self, settings): |     def _load_specific(self, settings): | ||||||
|         get = self.get_value |         get = self.get_value | ||||||
|         self.scan_type = get('ScanType', self.scan_type) |         self.scan_type = get('ScanType', self.scan_type) | ||||||
|  | |||||||
							
								
								
									
										15
									
								
								qt/se/app.py
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								qt/se/app.py
									
									
									
									
									
								
							| @ -12,6 +12,7 @@ from core.directories import Directories as DirectoriesBase, DirectoryState | |||||||
| 
 | 
 | ||||||
| from ..base.app import DupeGuru as DupeGuruBase | from ..base.app import DupeGuru as DupeGuruBase | ||||||
| from .details_dialog import DetailsDialog | from .details_dialog import DetailsDialog | ||||||
|  | from .results_model import ResultsModel | ||||||
| from .preferences import Preferences | from .preferences import Preferences | ||||||
| from .preferences_dialog import PreferencesDialog | from .preferences_dialog import PreferencesDialog | ||||||
| 
 | 
 | ||||||
| @ -30,6 +31,11 @@ class DupeGuru(DupeGuruBase): | |||||||
|     LOGO_NAME = 'logo_se' |     LOGO_NAME = 'logo_se' | ||||||
|     NAME = __appname__ |     NAME = __appname__ | ||||||
|      |      | ||||||
|  |     DETAILS_DIALOG_CLASS = DetailsDialog | ||||||
|  |     RESULT_MODEL_CLASS = ResultsModel | ||||||
|  |     PREFERENCES_CLASS = Preferences | ||||||
|  |     PREFERENCES_DIALOG_CLASS = PreferencesDialog | ||||||
|  |      | ||||||
|     def _setup(self): |     def _setup(self): | ||||||
|         self.directories = Directories() |         self.directories = Directories() | ||||||
|         DupeGuruBase._setup(self) |         DupeGuruBase._setup(self) | ||||||
| @ -43,12 +49,3 @@ class DupeGuru(DupeGuruBase): | |||||||
|         threshold = self.prefs.small_file_threshold if self.prefs.ignore_small_files else 0 |         threshold = self.prefs.small_file_threshold if self.prefs.ignore_small_files else 0 | ||||||
|         self.model.scanner.size_threshold = threshold * 1024 # threshold is in KB. the scanner wants bytes |         self.model.scanner.size_threshold = threshold * 1024 # threshold is in KB. the scanner wants bytes | ||||||
|      |      | ||||||
|     def _create_details_dialog(self, parent): |  | ||||||
|         return DetailsDialog(parent, self) |  | ||||||
|      |  | ||||||
|     def _create_preferences(self): |  | ||||||
|         return Preferences() |  | ||||||
|      |  | ||||||
|     def _create_preferences_dialog(self, parent): |  | ||||||
|         return PreferencesDialog(parent, self) |  | ||||||
|      |  | ||||||
|  | |||||||
| @ -11,18 +11,6 @@ from core.scanner import ScanType | |||||||
| from ..base.preferences import Preferences as PreferencesBase | from ..base.preferences import Preferences as PreferencesBase | ||||||
| 
 | 
 | ||||||
| class Preferences(PreferencesBase): | class Preferences(PreferencesBase): | ||||||
|     # (width, is_visible) |  | ||||||
|     COLUMNS_DEFAULT_ATTRS = [  |  | ||||||
|         (200, True), # name |  | ||||||
|         (180, True), # path |  | ||||||
|         (60, True), # size |  | ||||||
|         (40, False), # Kind |  | ||||||
|         (120, False), # modification |  | ||||||
|         (60, True), # match % |  | ||||||
|         (120, False), # Words Used |  | ||||||
|         (80, False), # dupe count |  | ||||||
|     ] |  | ||||||
|      |  | ||||||
|     def _load_specific(self, settings): |     def _load_specific(self, settings): | ||||||
|         get = self.get_value |         get = self.get_value | ||||||
|         self.scan_type = get('ScanType', self.scan_type) |         self.scan_type = get('ScanType', self.scan_type) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user