def createAppDialog(self, path=None): """ New app dialog """ self.dialog = QDialog() self.ui = Ui_newApplicationDialog() self.ui.setupUi(self.dialog) if path is not None: self.ui.directory.setText(path) #self.adjustDialog(path) cancelButton = self.ui.buttonBox.button(QDialogButtonBox.Cancel) okButton = self.ui.buttonBox.button(QDialogButtonBox.Ok) QObject.connect(self.ui.browse, SIGNAL('clicked()'), self.chooseDirectoryDialog) QObject.connect(cancelButton, SIGNAL('clicked()'), self.exit_ii) QObject.connect(okButton, SIGNAL('clicked()'), self.exit_ii) if self.dialog.exec_(): id = str(self.ui.id.text()) name = str(self.ui.name.text()) path = str(self.ui.directory.text()) if '' == id or '' == name or '' == path: return self.createAppDialog(path) if self.new: print('now creating', path, id, name) appPath = os.path.join(path, 'app') appFile = open(appPath, 'w') appFile.write('app = {' + APP.format(id, name) + '}') appFile.close() mainPath = os.path.join(path, 'main.lua') mainFile = open(mainPath, 'w') mainFile.close() self.openList = [appPath, mainPath] return path else: return path else: return
def createAppDialog(self, path=None): """ New app dialog """ self.dialog = QDialog() self.ui = Ui_newApplicationDialog() self.ui.setupUi(self.dialog) if path is not None : self.ui.directory.setText(path) #self.adjustDialog(path) cancelButton = self.ui.buttonBox.button(QDialogButtonBox.Cancel) okButton = self.ui.buttonBox.button(QDialogButtonBox.Ok) QObject.connect(self.ui.browse, SIGNAL('clicked()'), self.chooseDirectoryDialog) QObject.connect(cancelButton, SIGNAL('clicked()'), self.exit_ii) QObject.connect(okButton, SIGNAL('clicked()'), self.exit_ii) if self.dialog.exec_(): id = str(self.ui.id.text()) name = str(self.ui.name.text()) path = str(self.ui.directory.text()) if '' == id or '' == name or '' == path: return self.createAppDialog(path) if self.new: print('now creating', path, id, name) appPath = os.path.join(path, 'app') appFile = open(appPath, 'w') appFile.write('app = {' + APP.format(id, name) + '}') appFile.close() mainPath = os.path.join(path, 'main.lua') mainFile = open(mainPath, 'w') mainFile.close() self.openList = [appPath, mainPath] return path else: return path else: return
class Wizard(): # font font = QFont() font.setPointSize(10) def __init(self, mainWindow = None): self.mainWindow = mainWindow self.id = None self.name = None self.new = None def filesToOpen(self): return self.openList def start(self, path, openApp=False, newApp=False): self.openList = None # Check settings for the last path used settings = QSettings() dir = str(settings.value('path', '').toString()) # If no app path was passed in if not path and newApp == False: if os.path.exists(dir) and os.path.isdir(dir): files = os.listdir(dir) if len(files) <= 0: msg = QMessageBox() msg.setText('Directory "' + dir + '" does not contain an "app" file and a "main.lua" file.') msg.setWindowTitle("Error") msg.exec_() return else: if 'app' in files and 'main.lua' in files: return dir else: msg = QMessageBox() msg.setText('Directory "' + dir + '" does not contain an "app" file or a "main.lua" file.') msg.setWindowTitle("Error") msg.exec_() return #sys.exit('Error >> ' + dir + #' does not contain an app file and a main.lua file.') else: #TODO: add dialog box for openApp or newApp msg = QMessageBox() msg.setText('Directory "' + dir + '" does not exist.') msg.setWindowTitle("Error") msg.exec_() return # Get a path from the user if openApp == False and newApp == True: userPath = self.createAppDialog() if userPath: print('Path chosen: ' + str(userPath)) else: return if os.path.exists(userPath): if os.path.isdir(userPath): files = os.listdir(userPath) # If the directory is empty, start the app creator if len(files) <= 0: return self.createAppDialog() if 'app' in files and 'main.lua' in files: #return self.start(path, True, False) return userPath else: msg = QMessageBox() msg.setText('Directory "' + os.path.basename(str(userPath)) + '" does not contain an "app" file and a "main.lua" file.') msg.setInformativeTet('If you pick an empty directory, you will be ' 'prompted to create a new app there.'); msg.setWindowTitle("Error") msg.exec_() return self.start(None) # Path was given on command line else: if os.path.exists(path) and os.path.isdir(path): files = os.listdir(path) if len(files) <= 0: msg = QMessageBox() msg.setText('Directory "' + os.path.basename(str(path)) + '" does not contain an "app" file and a "main.lua" file.') #msg.setInformativeText('If you pick an empty directory, you will be ' # 'prompted to create a new app there.'); msg.setWindowTitle("Error") msg.exec_() return #return self.createAppDialog(path) else: if 'app' in files and 'main.lua' in files: return path else: #print('[VDBG] Error - ' + path + ' does not contain an app file and a main.lua file.') msg = QMessageBox() msg.setText('Directory "' + os.path.basename(str(path)) + '" does not contain an "app" file and a "main.lua" file.') #msg.setInformativeText('If you pick an empty directory, you will be ' # 'prompted to create a new app there.'); msg.setWindowTitle("Error") msg.exec_() return else: print('[VDBG] Error - ' + path + ' is not existing directory.') def lineSplit(self, line): """ TODO: Find the id/name in a better way... """ s = line.split('"') if len(s) == 3: return s else: s = line.split("'") if len(s) == 3: return s def scan(self, path): """ Scan the path given: If invalid app dir, return -4 If invalid app file, return -3 If user cancels the dialog, return -2 If non-empty with no app and main.lua, return -1 If empty, return 0 If app and main.lua exist, return 1 """ if os.path.isdir(path): try: files = os.listdir(path) except: return -4 # If the directory is empty, allow the user to change id and name if len(files) <= 0: return 0 if 'app' in files and 'main.lua' in files: f = open(os.path.join(path, 'app')) id = None name = None try: app = f.read() idLine = re.search('''id\s*=\s*['"].*['"]\s*[,]''', app).group(0)[:-1] nameLine = re.search('''name\s*=\s*['"].*['"]\s*[,]''', app).group(0)[:-1] id = self.lineSplit(idLine)[1] name = self.lineSplit(nameLine)[1] self.id = id self.name = name return 1 except: print('invalid app') return -3 else: #print("U",path) return -1 else: # not a valid directory return -2 def adjustDialog(self, path, dir=None): result = self.scan(str(path)) # If the path is a directory... if dir is None : if 0 == result: self.ui.id.setReadOnly(False) self.ui.name.setReadOnly(False) self.new = True elif 1 == result: self.ui.id.setReadOnly(True) self.ui.name.setReadOnly(True) #self.ui.id.setText(self.id) #self.ui.name.setText(self.name) self.new = False if -1 == result: msg = QMessageBox() msg.setText('Directory "' + os.path.basename(str(path)) + '" does not contain an "app" file and a "main.lua" file.') msg.setInformativeText('If you pick an empty directory, you will be ' 'prompted to create a new app there.'); msg.setWindowTitle("Error") msg.exec_() return result def chooseDirectoryDialog(self, dir=None): """ User chooses a directory: If the directory is empty, then they must fill in Name and Id If the directory is not empty, it must have an 'app' and 'main.lua' """ # Open the browser, wait for it to close if dir is None: directory = self.ui.directory.text() else : directory = dir path = QFileDialog.getExistingDirectory(None, 'Create an app directory', directory, QFileDialog.ShowDirsOnly) apath = os.path.dirname(str(path)) result = self.adjustDialog(path, directory) if result == 0: self.ui.directory.setText(path) self.ui.id.setReadOnly(False) self.ui.name.setReadOnly(False) self.new = True elif result == -4: msg = QMessageBox() msg.setText('\'' + os.path.basename(str(path)) + '\' is not a valid directory. Please select another empty directory to create a new app.') msg.setWindowTitle("Warning") msg.exec_() else: msg = QMessageBox() msg.setText('\'' + os.path.basename(str(path)) + '\' is not an empty directory. Please select an empty directory to create a new app.') msg.setWindowTitle("Warning") msg.exec_() return path def createAppDialog(self, path=None): """ New app dialog """ self.dialog = QDialog() self.ui = Ui_newApplicationDialog() self.ui.setupUi(self.dialog) if path is not None : self.ui.directory.setText(path) #self.adjustDialog(path) cancelButton = self.ui.buttonBox.button(QDialogButtonBox.Cancel) okButton = self.ui.buttonBox.button(QDialogButtonBox.Ok) QObject.connect(self.ui.browse, SIGNAL('clicked()'), self.chooseDirectoryDialog) QObject.connect(cancelButton, SIGNAL('clicked()'), self.exit_ii) QObject.connect(okButton, SIGNAL('clicked()'), self.exit_ii) if self.dialog.exec_(): id = str(self.ui.id.text()) name = str(self.ui.name.text()) path = str(self.ui.directory.text()) if '' == id or '' == name or '' == path: return self.createAppDialog(path) if self.new: print('now creating', path, id, name) appPath = os.path.join(path, 'app') appFile = open(appPath, 'w') appFile.write('app = {' + APP.format(id, name) + '}') appFile.close() mainPath = os.path.join(path, 'main.lua') mainFile = open(mainPath, 'w') mainFile.close() self.openList = [appPath, mainPath] return path else: return path else: return # If the path is a directory... #if os.path.isdir(path): # # files = os.listdir(path) # # If the directory is empty, allow the user to change id and name # if len(files) <= 0: # self.ui.id.setReadOnly(False) # self.ui.name.setReadOnly(False) # # if 'app' in files and 'main.lua' in files: # self.ui.id.setReadOnly(True) # self.ui.name.setReadOnly(True) # # else: # msg = QMessageBox() # msg.setText('Directory "' + os.path.basename(str(path)) + # '" does not contain an "app" file and a "main.lua" file.') # msg.setInformativeText('If you pick an empty directory, you will be ' # 'prompted to create a new app there.'); # msg.setWindowTitle("Error") # msg.exec_() # return # # User shouldn't be able to get here... #else: # sys.exit() def exit_ii(self): pass
class Wizard(): # font font = QFont() font.setPointSize(10) def __init(self, mainWindow=None): self.mainWindow = mainWindow self.id = None self.name = None self.new = None def filesToOpen(self): return self.openList def start(self, path, openApp=False, newApp=False): self.openList = None # Check settings for the last path used settings = QSettings() dir = str(settings.value('path', '').toString()) # If no app path was passed in if not path and newApp == False: if os.path.exists(dir) and os.path.isdir(dir): files = os.listdir(dir) if len(files) <= 0: msg = QMessageBox() msg.setText( 'Directory "' + dir + '" does not contain an "app" file and a "main.lua" file.' ) msg.setWindowTitle("Error") msg.exec_() return else: if 'app' in files and 'main.lua' in files: return dir else: msg = QMessageBox() msg.setText( 'Directory "' + dir + '" does not contain an "app" file or a "main.lua" file.' ) msg.setWindowTitle("Error") msg.exec_() return #sys.exit('Error >> ' + dir + #' does not contain an app file and a main.lua file.') else: #TODO: add dialog box for openApp or newApp msg = QMessageBox() msg.setText('Directory "' + dir + '" does not exist.') msg.setWindowTitle("Error") msg.exec_() return # Get a path from the user if openApp == False and newApp == True: userPath = self.createAppDialog() if userPath: print('Path chosen: ' + str(userPath)) else: return if os.path.exists(userPath): if os.path.isdir(userPath): files = os.listdir(userPath) # If the directory is empty, start the app creator if len(files) <= 0: return self.createAppDialog() if 'app' in files and 'main.lua' in files: #return self.start(path, True, False) return userPath else: msg = QMessageBox() msg.setText( 'Directory "' + os.path.basename(str(userPath)) + '" does not contain an "app" file and a "main.lua" file.' ) msg.setInformativeTet( 'If you pick an empty directory, you will be ' 'prompted to create a new app there.') msg.setWindowTitle("Error") msg.exec_() return self.start(None) # Path was given on command line else: if os.path.exists(path) and os.path.isdir(path): files = os.listdir(path) if len(files) <= 0: msg = QMessageBox() msg.setText( 'Directory "' + os.path.basename(str(path)) + '" does not contain an "app" file and a "main.lua" file.' ) #msg.setInformativeText('If you pick an empty directory, you will be ' # 'prompted to create a new app there.'); msg.setWindowTitle("Error") msg.exec_() return #return self.createAppDialog(path) else: if 'app' in files and 'main.lua' in files: return path else: #print('[VDBG] Error - ' + path + ' does not contain an app file and a main.lua file.') msg = QMessageBox() msg.setText( 'Directory "' + os.path.basename(str(path)) + '" does not contain an "app" file and a "main.lua" file.' ) #msg.setInformativeText('If you pick an empty directory, you will be ' # 'prompted to create a new app there.'); msg.setWindowTitle("Error") msg.exec_() return else: print('[VDBG] Error - ' + path + ' is not existing directory.') def lineSplit(self, line): """ TODO: Find the id/name in a better way... """ s = line.split('"') if len(s) == 3: return s else: s = line.split("'") if len(s) == 3: return s def scan(self, path): """ Scan the path given: If invalid app dir, return -4 If invalid app file, return -3 If user cancels the dialog, return -2 If non-empty with no app and main.lua, return -1 If empty, return 0 If app and main.lua exist, return 1 """ if os.path.isdir(path): try: files = os.listdir(path) except: return -4 # If the directory is empty, allow the user to change id and name if len(files) <= 0: return 0 if 'app' in files and 'main.lua' in files: f = open(os.path.join(path, 'app')) id = None name = None try: app = f.read() idLine = re.search('''id\s*=\s*['"].*['"]\s*[,]''', app).group(0)[:-1] nameLine = re.search('''name\s*=\s*['"].*['"]\s*[,]''', app).group(0)[:-1] id = self.lineSplit(idLine)[1] name = self.lineSplit(nameLine)[1] self.id = id self.name = name return 1 except: print('invalid app') return -3 else: #print("U",path) return -1 else: # not a valid directory return -2 def adjustDialog(self, path, dir=None): result = self.scan(str(path)) # If the path is a directory... if dir is None: if 0 == result: self.ui.id.setReadOnly(False) self.ui.name.setReadOnly(False) self.new = True elif 1 == result: self.ui.id.setReadOnly(True) self.ui.name.setReadOnly(True) #self.ui.id.setText(self.id) #self.ui.name.setText(self.name) self.new = False if -1 == result: msg = QMessageBox() msg.setText( 'Directory "' + os.path.basename(str(path)) + '" does not contain an "app" file and a "main.lua" file.') msg.setInformativeText( 'If you pick an empty directory, you will be ' 'prompted to create a new app there.') msg.setWindowTitle("Error") msg.exec_() return result def chooseDirectoryDialog(self, dir=None): """ User chooses a directory: If the directory is empty, then they must fill in Name and Id If the directory is not empty, it must have an 'app' and 'main.lua' """ # Open the browser, wait for it to close if dir is None: directory = self.ui.directory.text() else: directory = dir path = QFileDialog.getExistingDirectory(None, 'Create an app directory', directory, QFileDialog.ShowDirsOnly) apath = os.path.dirname(str(path)) result = self.adjustDialog(path, directory) if result == 0: self.ui.directory.setText(path) self.ui.id.setReadOnly(False) self.ui.name.setReadOnly(False) self.new = True elif result == -4: msg = QMessageBox() msg.setText( '\'' + os.path.basename(str(path)) + '\' is not a valid directory. Please select another empty directory to create a new app.' ) msg.setWindowTitle("Warning") msg.exec_() else: msg = QMessageBox() msg.setText( '\'' + os.path.basename(str(path)) + '\' is not an empty directory. Please select an empty directory to create a new app.' ) msg.setWindowTitle("Warning") msg.exec_() return path def createAppDialog(self, path=None): """ New app dialog """ self.dialog = QDialog() self.ui = Ui_newApplicationDialog() self.ui.setupUi(self.dialog) if path is not None: self.ui.directory.setText(path) #self.adjustDialog(path) cancelButton = self.ui.buttonBox.button(QDialogButtonBox.Cancel) okButton = self.ui.buttonBox.button(QDialogButtonBox.Ok) QObject.connect(self.ui.browse, SIGNAL('clicked()'), self.chooseDirectoryDialog) QObject.connect(cancelButton, SIGNAL('clicked()'), self.exit_ii) QObject.connect(okButton, SIGNAL('clicked()'), self.exit_ii) if self.dialog.exec_(): id = str(self.ui.id.text()) name = str(self.ui.name.text()) path = str(self.ui.directory.text()) if '' == id or '' == name or '' == path: return self.createAppDialog(path) if self.new: print('now creating', path, id, name) appPath = os.path.join(path, 'app') appFile = open(appPath, 'w') appFile.write('app = {' + APP.format(id, name) + '}') appFile.close() mainPath = os.path.join(path, 'main.lua') mainFile = open(mainPath, 'w') mainFile.close() self.openList = [appPath, mainPath] return path else: return path else: return # If the path is a directory... #if os.path.isdir(path): # # files = os.listdir(path) # # If the directory is empty, allow the user to change id and name # if len(files) <= 0: # self.ui.id.setReadOnly(False) # self.ui.name.setReadOnly(False) # # if 'app' in files and 'main.lua' in files: # self.ui.id.setReadOnly(True) # self.ui.name.setReadOnly(True) # # else: # msg = QMessageBox() # msg.setText('Directory "' + os.path.basename(str(path)) + # '" does not contain an "app" file and a "main.lua" file.') # msg.setInformativeText('If you pick an empty directory, you will be ' # 'prompted to create a new app there.'); # msg.setWindowTitle("Error") # msg.exec_() # return # # User shouldn't be able to get here... #else: # sys.exit() def exit_ii(self): pass