71 lines
2.5 KiB
Python
71 lines
2.5 KiB
Python
|
from PyQt4 import QtGui
|
||
|
#import sys
|
||
|
import os
|
||
|
|
||
|
class PresetManager(QtGui.QDialog):
|
||
|
def __init__(self, window, parent):
|
||
|
super().__init__()
|
||
|
self.parent = parent
|
||
|
self.presetDir = parent.presetDir
|
||
|
self.window = window
|
||
|
self.presets = self.findPresets()
|
||
|
|
||
|
# create filter box and preset list
|
||
|
self.drawFilterList()
|
||
|
self.window.comboBox_filter.currentIndexChanged.connect(
|
||
|
lambda: self.drawPresetList(self.window.comboBox_filter.currentText())
|
||
|
)
|
||
|
self.drawPresetList('*')
|
||
|
|
||
|
# make auto-completion for search bar
|
||
|
self.autocomplete = QtGui.QStringListModel()
|
||
|
completer = QtGui.QCompleter()
|
||
|
completer.setModel(self.autocomplete)
|
||
|
self.window.lineEdit_search.setCompleter(completer)
|
||
|
|
||
|
def show(self):
|
||
|
presetNames = []
|
||
|
for presetList in self.presets.values():
|
||
|
for preset in presetList:
|
||
|
presetNames.append(preset[1])
|
||
|
self.autocomplete.setStringList(presetNames)
|
||
|
self.presets = self.findPresets()
|
||
|
self.drawFilterList()
|
||
|
self.drawPresetList('*')
|
||
|
self.window.show()
|
||
|
|
||
|
def findPresets(self):
|
||
|
parseList = []
|
||
|
for dirpath, dirnames, filenames in os.walk(self.presetDir):
|
||
|
# anything without a subdirectory must be a preset folder
|
||
|
if dirnames:
|
||
|
continue
|
||
|
for preset in filenames:
|
||
|
compName = os.path.basename(os.path.dirname(dirpath))
|
||
|
compVers = os.path.basename(dirpath)
|
||
|
try:
|
||
|
parseList.append((compName, int(compVers), preset))
|
||
|
except ValueError:
|
||
|
continue
|
||
|
return { compName : \
|
||
|
[ (vers, preset) \
|
||
|
for name, vers, preset in parseList \
|
||
|
if name == compName \
|
||
|
] \
|
||
|
for compName, _, __ in parseList \
|
||
|
}
|
||
|
|
||
|
def drawPresetList(self, filter):
|
||
|
self.window.listWidget_presets.clear()
|
||
|
for component, presets in self.presets.items():
|
||
|
if filter != '*' and component != filter:
|
||
|
continue
|
||
|
for vers, preset in presets:
|
||
|
self.window.listWidget_presets.addItem('%s: %s' % (component, preset))
|
||
|
|
||
|
def drawFilterList(self):
|
||
|
self.window.comboBox_filter.clear()
|
||
|
self.window.comboBox_filter.addItem('*')
|
||
|
for component in self.presets:
|
||
|
self.window.comboBox_filter.addItem(component)
|