1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
from PyQt4 import QtGui
from collections import OrderedDict
import string
import os
import core
class PresetManager(QtGui.QDialog):
def __init__(self, window, parent):
super().__init__()
self.parent = parent
self.core = self.parent.core
self.presetDir = self.core.presetDir
self.window = window
self.findPresets()
self.lastFilter = '*'
# 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.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
self.presets =\
{
compName : \
[
(vers, preset) \
for name, vers, preset in parseList \
if name == compName \
] \
for compName, _, __ in parseList \
}
def drawPresetList(self, filter=None):
self.window.listWidget_presets.clear()
if filter:
self.lastFilter = str(filter)
else:
filter = str(self.lastFilter)
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)
def openSavePresetDialog(self):
window = self.parent.window
self.selectedComponents = self.parent.core.selectedComponents
componentList = window.listWidget_componentList
if componentList.currentRow() == -1:
return
while True:
index = componentList.currentRow()
currentPreset = self.selectedComponents[index].currentPreset
newName, OK = QtGui.QInputDialog.getText(
self.parent.window,
'Audio Visualizer',
'New Preset Name:',
QtGui.QLineEdit.Normal,
currentPreset
)
if OK:
badName = False
for letter in newName:
if letter in string.punctuation:
badName = True
if badName:
# some filesystems don't like bizarre characters
self.parent.showMessage(
msg='Preset names must contain only letters,'
'numbers, and spaces.')
continue
if newName:
if index != -1:
saveValueStore = \
self.selectedComponents[index].savePreset()
componentName = str(self.selectedComponents[index]).strip()
vers = self.selectedComponents[index].version()
self.createPresetFile(
componentName, vers, saveValueStore, newName)
self.selectedComponents[index].currentPreset = newName
break
def createPresetFile(self, compName, vers, saveValueStore, filename):
path = os.path.join(self.presetDir, compName, str(vers), filename)
if os.path.exists(path):
ch = self.parent.showMessage(
msg="%s already exists! Overwrite it?" % filename,
showCancel=True, icon=QtGui.QMessageBox.Warning)
if not ch:
return
self.core.createPresetFile(compName, vers, saveValueStore, filename)
self.drawPresetList()
def openPreset(self, presetName):
componentList = self.parent.window.listWidget_componentList
selectedComponents = self.parent.core.selectedComponents
index = componentList.currentRow()
if index == -1:
return
componentName = str(selectedComponents[index]).strip()
version = selectedComponents[index].version()
dirname = os.path.join(self.presetDir, componentName, str(version))
filepath = os.path.join(dirname, presetName)
if not os.path.exists(filepath):
return
with open(filepath, 'r') as f:
for line in f:
saveValueStore = dict(eval(line.strip()))
break
selectedComponents[index].loadPreset(
saveValueStore,
presetName
)
self.parent.updateComponentTitle(index)
self.parent.drawPreview()
|