+ if returnAll:
+ return nameControl, dirControl, flexGridSizer, Validate, allControls
+ else:
+ return nameControl, dirControl, flexGridSizer, Validate
+
+
+def CreateDirectoryOnlyControl( parent, dirLabel=_("Location:"), startingDirectory=None, choiceDirs=None, appDirDefaultStartDir=False):
+
+ if not choiceDirs:
+ choiceDirs = []
+ projectDirs = []
+
+ if appDirDefaultStartDir:
+ appDirectory = wx.ConfigBase_Get().Read(ProjectEditor.PROJECT_DIRECTORY_KEY, ProjectEditor.NEW_PROJECT_DIRECTORY_DEFAULT)
+ else:
+ appDirectory = wx.ConfigBase_Get().Read(ProjectEditor.PROJECT_DIRECTORY_KEY)
+ if appDirectory:
+ choiceDirs.append(appDirectory)
+ if appDirDefaultStartDir and not startingDirectory:
+ startingDirectory = appDirectory
+
+ projectService = wx.GetApp().GetService(ProjectEditor.ProjectService)
+ if projectService:
+ curProjectDoc = projectService.GetCurrentProject()
+ if curProjectDoc:
+ homeDir = curProjectDoc.GetAppDocMgr().homeDir
+ if homeDir and (homeDir not in choiceDirs):
+ choiceDirs.append(homeDir)
+ if not startingDirectory:
+ startingDirectory = homeDir
+
+ for projectDoc in projectService.GetOpenProjects():
+ if projectDoc == curProjectDoc:
+ continue
+ homeDir = projectDoc.GetAppDocMgr().homeDir
+ if homeDir and (homeDir not in projectDirs):
+ projectDirs.append(homeDir)
+ projectDirs.sort(CaseInsensitiveCompare)
+ for projectDir in projectDirs:
+ if projectDir not in choiceDirs:
+ choiceDirs.append(projectDir)
+
+ if startingDirectory and (startingDirectory not in choiceDirs):
+ choiceDirs.insert(0, startingDirectory)
+
+ if os.getcwd() not in choiceDirs:
+ choiceDirs.append(os.getcwd())
+ if appdirs.documents_folder not in choiceDirs:
+ choiceDirs.append(appdirs.documents_folder)
+
+
+ if not startingDirectory:
+ startingDirectory = os.getcwd()
+
+ dirLabelText = wx.StaticText(parent, -1, dirLabel)
+ dirControl = wx.ComboBox(parent, -1, startingDirectory, size=(-1,-1), choices=choiceDirs)
+ dirControl.SetToolTipString(startingDirectory)
+ button = wx.Button(parent, -1, _("Browse..."))
+
+ def OnFindDirClick(event):
+ dlg = wx.DirDialog(wx.GetApp().GetTopWindow(),
+ _("Choose a directory:"),
+ defaultPath=dirControl.GetValue().strip(),
+ style=wx.DD_DEFAULT_STYLE|wx.DD_NEW_DIR_BUTTON)
+ dlg.CenterOnParent()
+ if dlg.ShowModal() == wx.ID_OK:
+ dir = dlg.GetPath()
+ if dirControl.FindString(dir) == wx.NOT_FOUND:
+ dirControl.Insert(dir, 0)
+ dirControl.SetValue(dir)
+ dirControl.SetToolTipString(dir)
+ dlg.Destroy()
+
+ parent.Bind(wx.EVT_BUTTON, OnFindDirClick, button)
+
+ def Validate(allowOverwriteOnPrompt=False):
+ dirName = dirControl.GetValue().strip()
+ if dirName == "":
+ wx.MessageBox(_("Please provide a directory."), _("Provide a Directory"))
+ return False
+ if not os.path.exists(dirName):
+ wx.MessageBox(_("That directory does not exist. Please choose an existing directory."), _("Provide a Valid Directory"))
+ return False
+ return True
+
+ HALF_SPACE = 5
+ flexGridSizer = wx.FlexGridSizer(cols = 3, vgap = HALF_SPACE, hgap = HALF_SPACE)
+ flexGridSizer.AddGrowableCol(1,1)
+ flexGridSizer.Add(dirLabelText, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.RIGHT, border=HALF_SPACE)
+ flexGridSizer.Add(dirControl, 2, flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border=HALF_SPACE)
+ flexGridSizer.Add(button, flag=wx.ALIGN_RIGHT|wx.LEFT, border=HALF_SPACE)
+
+ return dirControl, flexGridSizer, Validate
+
+
+def CreateNameOnlyControl( parent, fileLabel, startingName="", startingDirectoryControl=None):
+
+ fileLabelText = wx.StaticText(parent, -1, fileLabel)
+ nameControl = wx.TextCtrl(parent, -1, startingName, size=(-1,-1))
+
+ def Validate(allowOverwriteOnPrompt=False, noFirstCharDigit=False):
+ projName = nameControl.GetValue().strip()
+ if projName == "":
+ wx.MessageBox(_("Blank name. Please enter a valid name."), _("Project Name"))
+ return False
+ if noFirstCharDigit and projName[0].isdigit():
+ wx.MessageBox(_("Name cannot start with a number. Please enter a valid name."), _("Project Name"))
+ return False
+ if projName.find(' ') != -1:
+ wx.MessageBox(_("Spaces in name. Name cannot have spaces.") % infoString, _("Project Name"))
+ return False
+ path = os.path.join(startingDirectoryControl.GetValue().strip(), projName)
+ if os.path.exists(path):
+ if os.path.isdir(path):
+ message = _("Project '%s' already exists. Would you like to overwrite the contents of the project?") % projName
+ else: # os.path.isfile(path):
+ message = _("'%s' already exists as a file. Would you like to replace it with the project?") % nameControl.GetValue().strip()
+
+ yesNoMsg = wx.MessageDialog(wx.GetApp().GetTopWindow(),
+ message,
+ _("Project Directory Exists"),
+ wx.YES_NO|wx.ICON_QUESTION
+ )
+ yesNoMsg.CenterOnParent()
+ status = yesNoMsg.ShowModal()
+ yesNoMsg.Destroy()
+ if status == wx.ID_NO:
+ return False
+ return True
+
+ HALF_SPACE = 5
+ flexGridSizer = wx.FlexGridSizer(cols = 2, vgap = HALF_SPACE, hgap = HALF_SPACE)
+ flexGridSizer.AddGrowableCol(1,1)
+ flexGridSizer.Add(fileLabelText, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.TOP|wx.RIGHT, border=HALF_SPACE)
+ flexGridSizer.Add(nameControl, 2, flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border=HALF_SPACE)
+
+ return nameControl, flexGridSizer, Validate
+