def __init__(self, parent, dlg_id, title): wx.Dialog.__init__(self, parent, dlg_id, title) contentSizer = wx.BoxSizer(wx.VERTICAL) lineSizer = wx.BoxSizer(wx.HORIZONTAL) lineSizer.Add(wx.StaticText(self, -1, _("Key: ")), 0, wx.ALIGN_CENTER | wx.LEFT, HALF_SPACE) self.key_ctrl = wx.TextCtrl(self, -1, "", size=(200, -1)) lineSizer.Add(self.key_ctrl, 0, wx.LEFT | wx.ALIGN_BOTTOM, SPACE) contentSizer.Add(lineSizer, 0, wx.ALL, HALF_SPACE) lineSizer = wx.BoxSizer(wx.HORIZONTAL) lineSizer.Add(wx.StaticText(self, -1, _("Value:")), 0, wx.ALIGN_CENTER | wx.LEFT, HALF_SPACE) self.value_ctrl = wx.TextCtrl(self, -1, "", size=(200, -1)) lineSizer.Add(self.value_ctrl, 0, wx.LEFT, HALF_SPACE) contentSizer.Add(lineSizer, 0, wx.ALL, HALF_SPACE) bsizer = wx.StdDialogButtonSizer() ok_btn = wx.Button(self, wx.ID_OK, _("&OK")) #set ok button default focused ok_btn.SetDefault() bsizer.AddButton(ok_btn) cancel_btn = wx.Button(self, wx.ID_CANCEL, _("&Cancel")) bsizer.AddButton(cancel_btn) bsizer.Realize() contentSizer.Add(bsizer, 0, wx.ALIGN_RIGHT | wx.RIGHT | wx.BOTTOM, HALF_SPACE) self.SetSizer(contentSizer) self.Fit()
def ValidateName(name, ext=None, hint="name"): """ Returns an error string if there is something wrong with the name. Otherwise it returns None """ if name == "": return _("Blank %s. Please enter a valid %s.") % (hint, hint) if name.find(' ') != -1: return _("Spaces in %s. %s cannot have spaces.") % (hint, hint.title()) if name[0].isdigit(): return _("%s cannot start with a number. Please enter a valid %s." ) % (hint.title(), hint) if ext and name.endswith(ext): # strip extension if provided lenExt = len(ext) name = name[:-lenExt] if not name.replace("_", "a").isalnum( ): # [a-zA-Z0-9_] note '_' is allowed and ext ending. return _( "%s must be alphanumeric ('_' allowed). Please enter a valid %s." ) % (hint.title(), hint) return None
def LoadDefaultInterpreter(self): if self.LoadPythonInterpretersFromConfig(): self.SetCurrentInterpreter(self.DefaultInterpreter) return self.LoadPythonInterpreters() if 0 == len(self.interpreters): if sysutils.isWindows(): dlg = wx.MessageDialog(None, _("No python interpreter found in your computer,will use the builtin interpreter instead"), \ _("Python interpreter not found"), wx.OK | wx.ICON_WARNING) else: dlg = wx.MessageDialog(None, _("Python interpreter not found!"), _("No Interpreter"), wx.OK | wx.ICON_WARNING) dlg.ShowModal() dlg.Destroy() if sysutils.isWindows() and None == self.GetInterpreterByName( BUILTIN_INTERPRETER_NAME): self.LoadBuiltinInterpreter() if 1 == len(self.interpreters): self.MakeDefaultInterpreter() elif 1 < len(self.interpreters): self.ChooseDefaultInterpreter() self.SetCurrentInterpreter(self.DefaultInterpreter) self.SavePythonInterpretersConfig()
def ModifyInterpreterNameDlg(self, event): index = self.dvlc.GetSelectedRow() if index == wx.NOT_FOUND: self.UpdateUI() return item = self.dvlc.RowToItem(index) id = self.dvlc.GetItemData(item) interpreter = interpretermanager.InterpreterManager( ).GetInterpreterById(id) dlg = AddInterpreterDialog(self, -1, _("Modify Interpreter Name")) dlg.path_ctrl.SetValue(interpreter.Path) dlg.path_ctrl.Enable(False) dlg.browser_btn.Enable(False) dlg.name_ctrl.SetValue(interpreter.Name) dlg.CenterOnParent() status = dlg.ShowModal() passedCheck = False while status == wx.ID_OK and not passedCheck: if 0 == len(dlg.name_ctrl.GetValue()): wx.MessageBox(_("Interpreter Name is empty"), _("Error"), wx.OK | wx.ICON_ERROR, self) status = dlg.ShowModal() else: name = dlg.name_ctrl.GetValue() interpreter.Name = name self.dvlc.SetTextValue(interpreter.Name, index, 0) passedCheck = True dlg.Destroy()
def __init__(self, parent): wx.Panel.__init__(self, parent) self.Sizer = wx.BoxSizer() left_sizer = wx.BoxSizer(wx.VERTICAL) self.tree_ctrl = wx.TreeCtrl(self, -1, style=wx.TR_HAS_BUTTONS | wx.TR_DEFAULT_STYLE) wx.EVT_RIGHT_DOWN(self.tree_ctrl, self.OnRightClick) left_sizer.Add(self.tree_ctrl, 1, wx.EXPAND) right_sizer = wx.BoxSizer(wx.VERTICAL) self.add_path_btn = wx.Button(self, -1, _("Add Path..")) wx.EVT_BUTTON(self.add_path_btn, -1, self.AddNewPath) right_sizer.Add(self.add_path_btn, 0, wx.TOP | wx.EXPAND, SPACE * 3) self.add_file_btn = wx.Button(self, -1, _("Add File...")) wx.EVT_BUTTON(self.add_file_btn, -1, self.PopFileMenu) right_sizer.Add(self.add_file_btn, 0, wx.TOP | wx.EXPAND, SPACE) self.remove_path_btn = wx.Button(self, -1, _("Remove Path...")) wx.EVT_BUTTON(self.remove_path_btn, -1, self.RemovePath) right_sizer.Add(self.remove_path_btn, 0, wx.TOP | wx.EXPAND, SPACE) self.Sizer.Add(left_sizer, 1, wx.EXPAND | wx.RIGHT, HALF_SPACE) self.Sizer.Add(right_sizer, 0, wx.RIGHT, SPACE) self._popUpMenu = None self._interpreter = None self.Fit()
def CreatePopupMenu(self): if not self._popUpMenu: self._popUpMenu = flatmenu.FlatMenu() menuItem = flatmenu.FlatMenuItem(self._popUpMenu, self.ID_NEW_ZIP, _("Add Zip File"), "", wx.ITEM_NORMAL) self.Bind(flatmenu.EVT_FLAT_MENU_SELECTED, self.AddNewFilePath, id=self.ID_NEW_ZIP) self._popUpMenu.AppendItem(menuItem) menuItem = flatmenu.FlatMenuItem(self._popUpMenu, self.ID_NEW_EGG, _("Add Egg File"), "", wx.ITEM_NORMAL) self.Bind(flatmenu.EVT_FLAT_MENU_SELECTED, self.AddNewFilePath, id=self.ID_NEW_EGG) self._popUpMenu.AppendItem(menuItem) menuItem = flatmenu.FlatMenuItem(self._popUpMenu, self.ID_NEW_WHEEL, _("Add Wheel File"), "", wx.ITEM_NORMAL) self.Bind(flatmenu.EVT_FLAT_MENU_SELECTED, self.AddNewFilePath, id=self.ID_NEW_WHEEL) self._popUpMenu.AppendItem(menuItem)
def __init__(self, parent, dlg_id, title, size=(300, 400)): wx.Dialog.__init__(self, parent, dlg_id, title, size=size) self.Sizer = wx.BoxSizer() self.dvlc = dataview.DataViewListCtrl(self, size=(280, 380)) self.dvlc.AppendTextColumn(_('Key'), width=80) self.dvlc.AppendTextColumn(_('Value'), width=200) self.Sizer.Add(self.dvlc, 1, wx.EXPAND) self.SetVariables()
def OnOKClick(self, event): name = self.name_ctrl.GetValue().strip() location = self.path_ctrl.GetValue().strip() if name == "": wx.MessageBox(_("name cann't be empty")) return if location == "": wx.MessageBox(_("location cann't be empty")) return self.EndModal(wx.ID_OK)
def __init__(self, parent): wx.ProgressDialog.__init__(self, _("Interpreter Smart Analyse"), _("Please wait a minute for end analysing"), maximum=100, parent=parent, style=0 | wx.PD_APP_MODAL | wx.PD_SMOOTH) self.KeepGoing = True
def AddNewFilePath(self, event): if self._interpreter is None: return id = event.GetId() descr = _( "Zip File (*.zip)|*.zip|Egg File (*.egg)|*.egg|Wheel File (*.whl)|*.whl" ) if id == self.ID_NEW_ZIP: descr = _("Zip File (*.zip)|*.zip") title = _("Choose a Zip File") elif id == self.ID_NEW_EGG: descr = _("Egg File (*.egg)|*.egg") title = _("Choose a Egg File") elif id == self.ID_NEW_WHEEL: descr = _("Wheel File (*.whl)|*.whl") title = _("Choose a Wheel File") dlg = wx.FileDialog(self, title, wildcard=descr, style=wx.OPEN | wx.FILE_MUST_EXIST | wx.CHANGE_DIR) if dlg.ShowModal() != wx.ID_OK: dlg.Destroy() return path = dlg.GetPath() dlg.Destroy() if self.CheckPathExist(path): wx.MessageBox(_("Path already exist"), _("Add Search Path"), wx.OK, self) return self.tree_ctrl.AppendItem(self.tree_ctrl.GetRootItem(), path)
def RemovePath(self,event): if self._interpreter is None: return item = self.tree_ctrl.GetSelection() if item == self.tree_ctrl.GetRootItem(): return path = self.tree_ctrl.GetItemText(item) if parserutils.PathsContainPath(self._interpreter.SysPathList,path): wx.MessageBox(_("The Python System Path could not be removed"),_("Error"),wx.OK|wx.ICON_ERROR,self) return self.tree_ctrl.Delete(item)
def ShowHideDetails(self, event): if self._show_details: self.detail_btn.SetLabel(_("Show Details") + "↓") self.GetSizer().Hide(self.detailSizer) self._show_details = False else: self.GetSizer().Show(self.detailSizer) self.detail_btn.SetLabel(_("Hide Details") + "↑") self._show_details = True self.GetSizer().Layout() self.Fit()
def AddVariable(self, key, value): if self.CheckKeyExist(key): ret = wx.MessageBox( _("Key name has already exist in environment variable,Do you wann't to overwrite it?" ), _("Warning"), wx.YES_NO | wx.ICON_QUESTION, self) if ret == wx.YES: row = self.GetVariableRow(key) assert (row != -1) self.RemoveRowVariable(row) else: return self.dvlc.AppendItem([key, value])
def __init__(self, parent): wx.ProgressDialog.__init__( self, _("New Virtual Env"), _("Please wait a minute for end New Virtual Env"), maximum=100, parent=parent, style=0 | wx.PD_APP_MODAL | wx.PD_SMOOTH) self.KeepGoing = True self.msg = ""
def BrowsePath(self, event): descr = _("Text File (*.txt)|*.txt") title = _("Choose requirements.txt") dlg = wx.FileDialog(self, title, wildcard=descr, style=wx.OPEN | wx.FILE_MUST_EXIST | wx.CHANGE_DIR) if dlg.ShowModal() != wx.ID_OK: dlg.Destroy() return path = dlg.GetPath() dlg.Destroy() self.value_ctrl.SetValue(path)
def EndDialog(self, retcode): if retcode == 0: if self._manage_action == self.MANAGE_INSTALL_PACKAGE: wx.MessageBox(_("Install Success")) else: wx.MessageBox(_("Uninstall Success")) self.EndModal(wx.ID_OK) else: if self._manage_action == self.MANAGE_INSTALL_PACKAGE: wx.MessageBox(_("Install Fail"), style=wx.OK | wx.ICON_ERROR) else: wx.MessageBox(_("Uninstall Fail"), style=wx.OK | wx.ICON_ERROR) self.value_ctrl.Enable(True) self.ok_btn.Enable(True)
def AddInterpreter(self, event): dlg = AddInterpreterDialog(self, -1, _("Add Interpreter")) dlg.CenterOnParent() status = dlg.ShowModal() passedCheck = False while status == wx.ID_OK and not passedCheck: if 0 == len(dlg.path_ctrl.GetValue()): wx.MessageBox(_("Interpreter Path is empty"), _("Error"), wx.OK | wx.ICON_ERROR, self) status = dlg.ShowModal() elif 0 == len(dlg.name_ctrl.GetValue()): wx.MessageBox(_("Interpreter Name is empty"), _("Error"), wx.OK | wx.ICON_ERROR, self) status = dlg.ShowModal() elif not os.path.exists(dlg.path_ctrl.GetValue()): wx.MessageBox(_("Interpreter Path is not exist"), _("Error"), wx.OK | wx.ICON_ERROR, self) status = dlg.ShowModal() else: try: interpreter = interpretermanager.InterpreterManager( ).AddPythonInterpreter(dlg.path_ctrl.GetValue(), dlg.name_ctrl.GetValue()) self.AddOneInterpreter(interpreter) self.SmartAnalyse(interpreter) passedCheck = True except Exception, e: wx.MessageBox(e.msg, _("Error"), wx.OK | wx.ICON_ERROR, self) status = dlg.ShowModal()
def AddPythonInterpreter(self, interpreter_path, name): interpreter = Interpreter.PythonInterpreter(name, interpreter_path) if not interpreter.IsValidInterpreter: raise InterpreterAddError( _("%s is not a valid interpreter path") % interpreter_path) interpreter.Name = name if self.CheckInterpreterExist(interpreter): raise InterpreterAddError(_("interpreter have already exist")) self.interpreters.append(interpreter) #first interpreter should be the default interpreter by default if 1 == len(self.interpreters): self.MakeDefaultInterpreter() self.SetCurrentInterpreter(self.DefaultInterpreter) return interpreter
def __init__(self, parent): wx.Panel.__init__(self, parent) box_sizer = wx.BoxSizer(wx.VERTICAL) top_sizer = wx.BoxSizer(wx.HORIZONTAL) left_sizer = wx.BoxSizer(wx.VERTICAL) left_sizer.Add( wx.StaticText(self, label=_("Set User Defined Environment Variable:")), 0, wx.TOP | wx.EXPAND, SPACE) self.dvlc = dataview.DataViewListCtrl(self, size=(510, 230)) self.dvlc.AppendTextColumn(_('Key'), width=100) self.dvlc.AppendTextColumn(_('Value'), width=410) dataview.EVT_DATAVIEW_SELECTION_CHANGED(self.dvlc, -1, self.UpdateUI) left_sizer.Add(self.dvlc, 1, wx.TOP | wx.RIGHT | wx.EXPAND, HALF_SPACE) top_sizer.Add(left_sizer, 0, wx.LEFT, 0) right_sizer = wx.BoxSizer(wx.VERTICAL) self.new_btn = wx.Button(self, -1, _("New..")) wx.EVT_BUTTON(self.new_btn, -1, self.NewVariable) right_sizer.Add(self.new_btn, 0, wx.LEFT | wx.BOTTOM | wx.EXPAND, SPACE) self.edit_btn = wx.Button(self, -1, _("Edit")) wx.EVT_BUTTON(self.edit_btn, -1, self.EditVariable) right_sizer.Add(self.edit_btn, 0, wx.LEFT | wx.BOTTOM | wx.EXPAND, SPACE) self.remove_btn = wx.Button(self, -1, _("Remove...")) wx.EVT_BUTTON(self.remove_btn, -1, self.RemoveVariable) right_sizer.Add(self.remove_btn, 0, wx.LEFT | wx.BOTTOM | wx.EXPAND, SPACE) top_sizer.Add(right_sizer, 0, wx.TOP, SPACE * 3.5) bottom_sizer = wx.BoxSizer(wx.HORIZONTAL) self._includeCheckBox = wx.CheckBox( self, -1, _("Include System Environment Variable")) self.Bind(wx.EVT_CHECKBOX, self.checkInclude, self._includeCheckBox) bottom_sizer.Add(self._includeCheckBox, 0, wx.LEFT | wx.ALIGN_BOTTOM) self.hyperLinkCtrl = hl.HyperLinkCtrl(self, wx.ID_ANY, _("View")) self.hyperLinkCtrl.SetColours("BLUE", "BLUE", "BLUE") self.hyperLinkCtrl.AutoBrowse(False) self.hyperLinkCtrl.SetBold(True) self.Bind(hl.EVT_HYPERLINK_LEFT, self.OnGotoLink, self.hyperLinkCtrl) bottom_sizer.Add(self.hyperLinkCtrl, 0, wx.LEFT | wx.ALIGN_BOTTOM, SPACE) box_sizer.Add(top_sizer, 0, wx.TOP, HALF_SPACE) box_sizer.Add(bottom_sizer, 0, wx.TOP, SPACE) self.SetSizer(box_sizer) self.interpreter = None self.UpdateUI(None)
def OnRightClick(self, event): if self.tree_ctrl.GetSelection() == self.tree_ctrl.GetRootItem(): return x, y = event.GetPosition() menu = wx.Menu() menu.Append(ID_GOTO_PATH, _("&Goto Path")) #must not use name ProcessEvent,otherwise will invoke flatmenu pop event invalid wx.EVT_MENU(self, ID_GOTO_PATH, self.TreeCtrlEvent) menu.Append(ID_REMOVE_PATH, _("&Remove Path")) wx.EVT_MENU(self, ID_REMOVE_PATH, self.TreeCtrlEvent) self.tree_ctrl.PopupMenu(menu, wx.Point(x, y)) menu.Destroy()
def ChooseExecutablePath(self, event): if sysutils.isWindows(): descr = _("Executable (*.exe) |*.exe") else: descr = "All Files (*)|*" dlg = wx.FileDialog(self, _("Select Executable Path"), wildcard=descr, style=wx.OPEN | wx.FILE_MUST_EXIST | wx.CHANGE_DIR) if dlg.ShowModal() == wx.ID_OK: path = dlg.GetPath() self.path_ctrl.SetValue(path) self.name_ctrl.SetValue(path) self.path_ctrl.SetInsertionPointEnd() dlg.Destroy()
def AddNewPath(self,event): if self._interpreter is None: return dlg = wx.DirDialog(wx.GetApp().GetTopWindow(), _("Choose a directory to Add"), style=wx.DD_DEFAULT_STYLE|wx.DD_NEW_DIR_BUTTON) if dlg.ShowModal() != wx.ID_OK: dlg.Destroy() return path = dlg.GetPath() if self.CheckPathExist(path): wx.MessageBox(_("Path already exist"),_("Add Search Path"),wx.OK,self) return dlg.Destroy() self.tree_ctrl.AppendItem(self.tree_ctrl.GetRootItem(),path)
def GetProjectForDoc(doc): """ Given a document find which project it belongs to. Tries to intelligently resolve conflicts if it is in more than one open project. """ projectService = wx.GetApp().GetService( project.ProjectEditor.ProjectService) projectDoc = projectService.FindProjectFromMapping(doc) if projectDoc: return projectDoc projectDoc = projectService.GetCurrentProject() if not projectDoc: return None if projectDoc.IsFileInProject(doc.GetFilename()): return projectDoc projects = [] openDocs = wx.GetApp().GetDocumentManager().GetDocuments() for openDoc in openDocs: if openDoc == projectDoc: continue if (isinstance(openDoc, project.ProjectEditor.ProjectDocument)): if openDoc.IsFileInProject(doc.GetFilename()): projects.append(openDoc) if projects: if len(projects) == 1: return projects[0] else: choices = [ os.path.basename(project.GetFilename()) for project in projects ] dlg = wx.SingleChoiceDialog( wx.GetApp().GetTopWindow(), _("'%s' found in more than one project.\nWhich project should be used for this operation?" ) % os.path.basename(doc.GetFilename()), _("Select Project"), choices, wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER | wx.OK | wx.CENTRE) dlg.CenterOnParent() projectDoc = None if dlg.ShowModal() == wx.ID_OK: i = dlg.GetSelection() projectDoc = projects[i] dlg.Destroy() return projectDoc return None
def ChooseDefaultInterpreter(self): choices = [] for interpreter in self.interpreters: choices.append(interpreter.Name) dlg = wx.SingleChoiceDialog(None, _("Please Choose Default Interpreter:"), _("Choose Interpreter"), choices) if dlg.ShowModal() == wx.ID_OK: name = dlg.GetStringSelection() interpreter = self.GetInterpreterByName(name) self.SetDefaultInterpreter(interpreter) else: wx.MessageBox(_("No default interpreter selected, application may not run normal!"),\ _("Choose Interpreter"),wx.OK | wx.ICON_WARNING) del self.interpreters[:] self.SetDefaultInterpreter(None) dlg.Destroy()
def OnOKClick(self, event): if self.value_ctrl.GetValue().strip() == "": wx.MessageBox(_("package name is empty")) return interpreter_name = self._interpreterCombo.GetStringSelection() interpreter = interpretermanager.InterpreterManager( ).GetInterpreterByName(interpreter_name) if interpreter.IsBuiltIn or interpreter.GetPipPath() is None: wx.MessageBox(_("Could not find pip on the path"), style=wx.OK | wx.ICON_ERROR) return self.value_ctrl.Enable(False) self.ok_btn.Enable(False) if self._manage_action == ManagePackagesDialog.MANAGE_INSTALL_PACKAGE: self.InstallPackage(interpreter) else: self.UninstallPackage(interpreter)
def ChooseVirtualEnvPath(self, event): dlg = wx.DirDialog(wx.GetApp().GetTopWindow(), _("Choose the location of Virtual Env"), style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) if dlg.ShowModal() != wx.ID_OK: dlg.Destroy() return path = dlg.GetPath() self.path_ctrl.SetValue(path)
def InstallPip(self, event): dlg = ManagePackagesDialog(self, -1, _("Install Package"), ManagePackagesDialog.MANAGE_INSTALL_PACKAGE, self.interpreter) dlg.CenterOnParent() status = dlg.ShowModal() if status == wx.ID_OK: pass dlg.Destroy()
def AppendSysPath(self, interpreter): self._interpreter = interpreter self.tree_ctrl.DeleteAllItems() root_item = self.tree_ctrl.AddRoot(_("Path List")) path_list = interpreter.SysPathList + interpreter.PythonPathList for path in path_list: if path.strip() == "": continue self.tree_ctrl.AppendItem(root_item, path) self.tree_ctrl.ExpandAll()
def OnGotoLink(event): option_service = wx.GetApp().GetService(OptionService.OptionsService) option_service.OnOption(option_name=_("Python Interpreter")) choices, default_selection = interpretermanager.InterpreterManager( ).GetChoices() interpreterCombo.Clear() if len(choices) > 0: interpreterCombo.InsertItems(choices, 0) interpreterCombo.SetSelection(default_selection) wx.GetApp().AddInterpreters()
def BrowsePath(self, event): dlg = wx.DirDialog(wx.GetApp().GetTopWindow(), _("Choose the location"), style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) if dlg.ShowModal() != wx.ID_OK: dlg.Destroy() return path = dlg.GetPath() #will cause wx.EVT_TEXT event self.dirControl.SetValue(path)