diff options
| author | DH4 | 2017-06-23 10:46:54 -0500 |
|---|---|---|
| committer | DH4 | 2017-06-23 10:46:54 -0500 |
| commit | f3da72ea5402d5cd1f865b56c0a9aa3b9f3957f4 (patch) | |
| tree | 60e3cced168d4215e9c60d9e84da365e8d90dde0 /core.py | |
| parent | 84ceff7f5490ac5f7e1256a16d82b3b8520cb03a (diff) | |
| parent | f8628333afc5dcb2f07f4aff2ee0d41847c0c308 (diff) | |
Merge branch 'feature-newgui' of github.com:djfun/audio-visualizer-python into feature-newgui
Diffstat (limited to 'core.py')
| -rw-r--r-- | core.py | 65 |
1 files changed, 43 insertions, 22 deletions
@@ -43,6 +43,7 @@ class Core(): '*.wav', '*.ogg', '*.fla', + '*.flac', '*.aac', ]) self.imageFormats = Core.appendUppercase([ @@ -77,24 +78,32 @@ class Core(): for name in findComponents() ] self.moduleIndexes = [i for i in range(len(self.modules))] + self.compNames = [mod.Component.__doc__ for mod in self.modules] def componentListChanged(self): for i, component in enumerate(self.selectedComponents): component.compPos = i - def insertComponent(self, compPos, moduleIndex): - if compPos < 0: - compPos = len(self.selectedComponents) -1 + def insertComponent(self, compPos, moduleIndex, loader): + '''Creates a new component''' + if compPos < 0 or compPos > len(self.selectedComponents): + compPos = len(self.selectedComponents) if len(self.selectedComponents) > 50: return None component = self.modules[moduleIndex].Component( - moduleIndex, compPos) + moduleIndex, compPos, self) self.selectedComponents.insert( compPos, component) - self.componentListChanged() + + # init component's widget for loading/saving presets + self.selectedComponents[compPos].widget(loader) + self.updateComponent(compPos) + + if hasattr(loader, 'insertComponent'): + loader.insertComponent(compPos) return compPos def moveComponent(self, startI, endI): @@ -117,15 +126,11 @@ class Core(): self.selectedComponents[i].update() def moduleIndexFor(self, compName): - compNames = [mod.Component.__doc__ for mod in self.modules] - index = compNames.index(compName) + index = self.compNames.index(compName) return self.moduleIndexes[index] - def clearPreset(self, compIndex, loader=None): - '''Clears a preset from a component''' + def clearPreset(self, compIndex): self.selectedComponents[compIndex].currentPreset = None - if loader: - loader.updateComponentTitle(compIndex) def openPreset(self, filepath, compIndex, presetName): '''Applies a preset to a specific component''' @@ -143,6 +148,10 @@ class Core(): self.savedPresets[presetName] = dict(saveValueStore) return True + def getPresetDir(self, comp): + return os.path.join( + self.presetDir, str(comp), str(comp.version())) + def getPreset(self, filepath): '''Returns the preset dict stored at this filepath''' if not os.path.exists(filepath): @@ -154,8 +163,13 @@ class Core(): return saveValueStore def openProject(self, loader, filepath): - '''loader is the object calling this method (mainwindow/command) - which implements an insertComponent method''' + ''' loader is the object calling this method which must have + its own showMessage(**kwargs) method for displaying errors. + ''' + if not os.path.exists(filepath): + loader.showMessage(msg='Project file not found') + return + errcode, data = self.parseAvFile(filepath) if errcode == 0: try: @@ -175,10 +189,13 @@ class Core(): # saved preset was renamed or deleted clearThis = True - # insert component into the loader - i = loader.insertComponent( - self.moduleIndexFor(name), -1) + # create the actual component object & get its index + i = self.insertComponent( + -1, + self.moduleIndexFor(name), + loader) if i == None: + loader.showMessage(msg="Too many components!") break try: @@ -196,7 +213,9 @@ class Core(): (self.selectedComponents[i], e)) if clearThis: - self.clearPreset(i, loader) + self.clearPreset(i) + if hasattr(loader, 'updateComponentTitle'): + loader.updateComponentTitle(i) except: errcode = 1 data = sys.exc_info() @@ -208,7 +227,8 @@ class Core(): # probably just an old version, still loadable print('file missing value: %s' % value) return - loader.createNewProject() + if hasattr(loader, 'createNewProject'): + loader.createNewProject() msg = '%s: %s' % (typ.__name__, value) loader.showMessage( msg="Project file '%s' is corrupted." % filepath, @@ -218,12 +238,14 @@ class Core(): def parseAvFile(self, filepath): '''Parses an avp (project) or avl (preset package) file. - Returns data usable by another method.''' + Returns dictionary with section names as the keys, each one + contains a list of tuples: (compName, version, compPresetDict) + ''' data = {} try: with open(filepath, 'r') as f: def parseLine(line): - '''Decides if a given avp or avl line is a section header''' + '''Decides if a file line is a section header''' validSections = ('Components') line = line.strip() newSection = '' @@ -307,8 +329,7 @@ class Core(): def createPresetFile( self, compName, vers, presetName, saveValueStore, filepath=''): '''Create a preset file (.avl) at filepath using args. - Or if filepath is empty, create an internal preset using - the args for the filepath.''' + Or if filepath is empty, create an internal preset using args''' if not filepath: dirname = os.path.join(self.presetDir, compName, str(vers)) if not os.path.exists(dirname): |
