mirror of
				https://github.com/arsenetar/dupeguru.git
				synced 2025-09-11 17:58:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			157 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Created By: Virgil Dupras
 | |
| # Created On: 2009-04-29
 | |
| # Copyright 2010 Hardcoded Software (http://www.hardcoded.net)
 | |
| # 
 | |
| # This software is licensed under the "BSD" License as described in the "LICENSE" file, 
 | |
| # which should be included with this package. The terms are also available at 
 | |
| # http://www.hardcoded.net/licenses/bsd_license
 | |
| 
 | |
| import sys
 | |
| from PyQt4.QtCore import SIGNAL, Qt, QSize
 | |
| from PyQt4.QtGui import (QDialog, QDialogButtonBox, QVBoxLayout, QHBoxLayout, QLabel, QComboBox,
 | |
|     QSlider, QSizePolicy, QSpacerItem, QWidget, QCheckBox, QLineEdit, QDialogButtonBox, QApplication)
 | |
| 
 | |
| from . import preferences
 | |
| 
 | |
| class PreferencesDialog(QDialog):
 | |
|     def __init__(self, parent, app):
 | |
|         flags = Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowSystemMenuHint
 | |
|         QDialog.__init__(self, parent, flags)
 | |
|         self.app = app
 | |
|         self._setupUi()
 | |
|         
 | |
|         self.connect(self.buttonBox, SIGNAL('clicked(QAbstractButton*)'), self.buttonClicked)
 | |
|         self.connect(self.filterHardnessSlider, SIGNAL("valueChanged(int)"), self.filterHardnessLabel.setNum)
 | |
|         self.buttonBox.accepted.connect(self.accept)
 | |
|         self.buttonBox.rejected.connect(self.reject)
 | |
|     
 | |
|     def _setupUi(self):
 | |
|         self.setWindowTitle("Preferences")
 | |
|         self.resize(304, 263)
 | |
|         self.setSizeGripEnabled(False)
 | |
|         self.setModal(True)
 | |
|         self.verticalLayout_2 = QVBoxLayout(self)
 | |
|         self.verticalLayout = QVBoxLayout()
 | |
|         self.horizontalLayout_3 = QHBoxLayout()
 | |
|         self.label = QLabel(self)
 | |
|         self.label.setText("Filter Hardness:")
 | |
|         self.label.setMinimumSize(QSize(0, 0))
 | |
|         self.horizontalLayout_3.addWidget(self.label)
 | |
|         self.verticalLayout_3 = QVBoxLayout()
 | |
|         self.verticalLayout_3.setSpacing(0)
 | |
|         self.horizontalLayout_6 = QHBoxLayout()
 | |
|         self.horizontalLayout_6.setSpacing(12)
 | |
|         self.filterHardnessSlider = QSlider(self)
 | |
|         sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
 | |
|         sizePolicy.setHorizontalStretch(0)
 | |
|         sizePolicy.setVerticalStretch(0)
 | |
|         sizePolicy.setHeightForWidth(self.filterHardnessSlider.sizePolicy().hasHeightForWidth())
 | |
|         self.filterHardnessSlider.setSizePolicy(sizePolicy)
 | |
|         self.filterHardnessSlider.setMinimum(1)
 | |
|         self.filterHardnessSlider.setMaximum(100)
 | |
|         self.filterHardnessSlider.setTracking(True)
 | |
|         self.filterHardnessSlider.setOrientation(Qt.Horizontal)
 | |
|         self.horizontalLayout_6.addWidget(self.filterHardnessSlider)
 | |
|         self.filterHardnessLabel = QLabel(self)
 | |
|         self.filterHardnessLabel.setText("100")
 | |
|         self.filterHardnessLabel.setMinimumSize(QSize(21, 0))
 | |
|         self.horizontalLayout_6.addWidget(self.filterHardnessLabel)
 | |
|         self.verticalLayout_3.addLayout(self.horizontalLayout_6)
 | |
|         self.horizontalLayout_5 = QHBoxLayout()
 | |
|         self.horizontalLayout_5.setContentsMargins(-1, 0, -1, -1)
 | |
|         self.label_4 = QLabel(self)
 | |
|         self.label_4.setText("More Results")
 | |
|         self.horizontalLayout_5.addWidget(self.label_4)
 | |
|         spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
 | |
|         self.horizontalLayout_5.addItem(spacerItem)
 | |
|         self.label_3 = QLabel(self)
 | |
|         self.label_3.setText("Fewer Results")
 | |
|         self.horizontalLayout_5.addWidget(self.label_3)
 | |
|         self.verticalLayout_3.addLayout(self.horizontalLayout_5)
 | |
|         self.horizontalLayout_3.addLayout(self.verticalLayout_3)
 | |
|         self.verticalLayout.addLayout(self.horizontalLayout_3)
 | |
|         self.matchScaledBox = QCheckBox(self)
 | |
|         self.matchScaledBox.setText("Match scaled pictures together")
 | |
|         self.verticalLayout.addWidget(self.matchScaledBox)
 | |
|         self.mixFileKindBox = QCheckBox(self)
 | |
|         self.mixFileKindBox.setText("Can mix file kind")
 | |
|         self.verticalLayout.addWidget(self.mixFileKindBox)
 | |
|         self.useRegexpBox = QCheckBox(self)
 | |
|         self.useRegexpBox.setText("Use regular expressions when filtering")
 | |
|         self.verticalLayout.addWidget(self.useRegexpBox)
 | |
|         self.removeEmptyFoldersBox = QCheckBox(self)
 | |
|         self.removeEmptyFoldersBox.setText("Remove empty folders on delete or move")
 | |
|         self.verticalLayout.addWidget(self.removeEmptyFoldersBox)
 | |
|         self.ignoreHardlinkMatches = QCheckBox(self)
 | |
|         self.ignoreHardlinkMatches.setText("Ignore duplicates hardlinking to the same file")
 | |
|         self.verticalLayout.addWidget(self.ignoreHardlinkMatches)
 | |
|         self.horizontalLayout_4 = QHBoxLayout()
 | |
|         self.label_5 = QLabel(self)
 | |
|         self.label_5.setText("Copy and Move:")
 | |
|         self.label_5.setMinimumSize(QSize(0, 0))
 | |
|         self.horizontalLayout_4.addWidget(self.label_5)
 | |
|         self.copyMoveDestinationComboBox = QComboBox(self)
 | |
|         sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
 | |
|         sizePolicy.setHorizontalStretch(0)
 | |
|         sizePolicy.setVerticalStretch(0)
 | |
|         sizePolicy.setHeightForWidth(self.copyMoveDestinationComboBox.sizePolicy().hasHeightForWidth())
 | |
|         self.copyMoveDestinationComboBox.addItem("Right in destination")
 | |
|         self.copyMoveDestinationComboBox.addItem("Recreate relative path")
 | |
|         self.copyMoveDestinationComboBox.addItem("Recreate absolute path")
 | |
|         self.horizontalLayout_4.addWidget(self.copyMoveDestinationComboBox)
 | |
|         self.verticalLayout.addLayout(self.horizontalLayout_4)
 | |
|         self.label_2 = QLabel(self)
 | |
|         self.label_2.setText("Custom Command (arguments: %d for dupe %r for ref):")
 | |
|         self.verticalLayout.addWidget(self.label_2)
 | |
|         self.customCommandEdit = QLineEdit(self)
 | |
|         self.verticalLayout.addWidget(self.customCommandEdit)
 | |
|         self.verticalLayout_2.addLayout(self.verticalLayout)
 | |
|         self.buttonBox = QDialogButtonBox(self)
 | |
|         self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok|QDialogButtonBox.RestoreDefaults)
 | |
|         self.verticalLayout_2.addWidget(self.buttonBox)
 | |
|         if sys.platform not in {'darwin', 'linux2'}:
 | |
|             self.verticalLayout.removeWidget(self.ignoreHardlinkMatches)
 | |
|             self.ignoreHardlinkMatches.setHidden(True)
 | |
|     
 | |
|     def load(self, prefs=None):
 | |
|         if prefs is None:
 | |
|             prefs = self.app.prefs
 | |
|         self.filterHardnessSlider.setValue(prefs.filter_hardness)
 | |
|         self.filterHardnessLabel.setNum(prefs.filter_hardness)
 | |
|         setchecked = lambda cb, b: cb.setCheckState(Qt.Checked if b else Qt.Unchecked)
 | |
|         setchecked(self.matchScaledBox, prefs.match_scaled)
 | |
|         setchecked(self.mixFileKindBox, prefs.mix_file_kind)
 | |
|         setchecked(self.useRegexpBox, prefs.use_regexp)
 | |
|         setchecked(self.removeEmptyFoldersBox, prefs.remove_empty_folders)
 | |
|         self.copyMoveDestinationComboBox.setCurrentIndex(prefs.destination_type)
 | |
|         self.customCommandEdit.setText(prefs.custom_command)
 | |
|     
 | |
|     def save(self):
 | |
|         prefs = self.app.prefs
 | |
|         prefs.filter_hardness = self.filterHardnessSlider.value()
 | |
|         ischecked = lambda cb: cb.checkState() == Qt.Checked
 | |
|         prefs.match_scaled = ischecked(self.matchScaledBox)
 | |
|         prefs.mix_file_kind = ischecked(self.mixFileKindBox)
 | |
|         prefs.use_regexp = ischecked(self.useRegexpBox)
 | |
|         prefs.remove_empty_folders = ischecked(self.removeEmptyFoldersBox)
 | |
|         prefs.destination_type = self.copyMoveDestinationComboBox.currentIndex()
 | |
|         prefs.custom_command = str(self.customCommandEdit.text())
 | |
|     
 | |
|     def resetToDefaults(self):
 | |
|         self.load(preferences.Preferences())
 | |
|     
 | |
|     #--- Events
 | |
|     def buttonClicked(self, button):
 | |
|         role = self.buttonBox.buttonRole(button)
 | |
|         if role == QDialogButtonBox.ResetRole:
 | |
|             self.resetToDefaults()
 | |
|     
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     import sys
 | |
|     from ..testapp import TestApp
 | |
|     app = QApplication([])
 | |
|     dgapp = TestApp()
 | |
|     dialog = PreferencesDialog(None, dgapp)
 | |
|     dialog.show()
 | |
|     sys.exit(app.exec_()) |