def HgCreate(path, **argsdict): # src=, , passwd=argsdict.get('passwd', '') remote = argsdict.get('remote', '') username = Profile_Get('HG_USER', 'str', '') uname = argsdict.get('uname', '') if username == '' or uname != '': username = uname passwd = argsdict.get('passwd', '') password = Profile_Get('HG_PASSWD', 'str', '') if password == '' or passwd != '': password = passwd repo = HgIface.HgInter(path, src=remote, uname=username, passwd=password) return repo
def OnClose(self, event): profiler.TheProfile.Write(Profile_Get('MYPROFILE')) Deca.world.HgRepository.close() event.GetId() self._mgr.UnInit() del self._mgr self.Destroy()
def HgSync(repo, frame, rev=None, insecure=True, do_pull=True): status = repo.Local repo.SwitchToRemote() if repo.User == '': dlg = UserPassDlg(frame) dlg.DlgLabel = _("Code repository account:") if dlg.ShowModal() == wx.ID_OK: repo.User = dlg.txtUname.GetValue() repo.Password = dlg.txtPassword.GetValue() Profile_Set('HG_USER', repo.User) Profile_Set('HG_PASSWD', repo.Password) repo.reopen() dlg.Destroy() # and now - time to pull remote_repo = Profile_Get('HG_REPOSITORY') if remote_repo is None: remote_repo = repo.Repo.paths().get('default') if remote_repo is None: remote_repo = repo.Repo.paths().get('default-push') if remote_repo is None: dlg = wx.TextEntryDialog(frame, _("Code repository URL:"), _('Push')) if dlg.ShowModal() == wx.ID_OK and dlg.GetValue() != '': remote_repo = dlg.GetValue() Profile_Set('HG_REPOSITORY', remote_repo) dlg.Destroy() if remote_repo is not None: repo.sync(remote_repo, rev=rev, insecure=insecure, do_pull=do_pull) if status: repo.SwitchToLocal()
def __init__(self, parent): """Initialize the Shell""" shell.Shell.__init__(self, parent) #, locals=dict() # Get the color scheme to use style = Profile_Get(PYSHELL_STYLE) if style is None: style = Profile_Get('SYNTHEME') ed_style.StyleMgr.__init__(self, self.GetStyleSheet(style)) # Attributes self.SetStyleBits(5) self._shell_style = style mgr = syntax.SyntaxMgr(ed_glob.CONFIG['CACHE_DIR']) syn_data = mgr.GetSyntaxData('py') synspec = syn_data.SyntaxSpec self.SetLexer(wx.stc.STC_LEX_PYTHON) self.SetSyntax(synspec)
def OnNewWorld(self, event): if Deca.world.Modified: resp = wx.MessageBox(_("Do you want to save current work?"), _("Sampo Framework"), wx.YES_NO | wx.CANCEL | wx.ICON_QUESTION) if resp == wx.CANCEL: return if resp == wx.YES: self.OnSaveWorld(event) while self.nbook.GetPageCount() > 0: self.ClosePage(0) Deca.CreateWorld() profiler.TheProfile.Load( os.path.join(ed_glob.CONFIG['PROFILE_DIR'], "default.ppb")) profiler.TheProfile.Update() if Profile_Get('SHOW_CONSOLE', 'bool', True): self.shell.Show() self.AddTab(self.shell, self.shell.Title) wx.GetApp().ReloadTranslation() self.UpdateColors(Profile_Get('SYNTHEME', 'default')) self.explorer.UpdateWorldTree() self.SetTitle(_('[Untitled] - Sampo Framework'))
def DoSaveWorld(self, event): if event.GetId() == self.ID_SaveWorldAs: dlg = wx.FileDialog(self, wildcard="DECA files|*.deca|All files|*.*", style=wx.FD_SAVE) if dlg.ShowModal() == wx.ID_OK: fname = dlg.Path if os.path.splitext(fname)[1].lower() != '.deca': fname += '.deca' dlg.Destroy() else: dlg.Destroy() return else: fname = None if Deca.world.Initial: # request filename dlg = wx.FileDialog(self, wildcard="DECA files|*.deca|All files|*.*", style=wx.FD_SAVE) if dlg.ShowModal() == wx.ID_OK: fname = dlg.Path if os.path.splitext(fname)[1].lower() != '.deca': fname += '.deca' dlg.Destroy() else: dlg.Destroy() return profiler.TheProfile.Write(Profile_Get('MYPROFILE')) # save window position Profile_Set('WINDOW_POS', self.GetPositionTuple()) Profile_Set('WINDOW_SIZE', self.GetSizeTuple()) Profile_Set('WINDOW_STATE', self.IsMaximized()) Profile_Set('WINDOW_LAYOUT', self._mgr.SavePerspective()) Profile_Set('HG_USER', Deca.world.HgRepository.User) Profile_Set('HG_PASSWD', Deca.world.HgRepository.Password) Profile_Set('HG_AUTOFILES', Deca.world.HgRepository.AddRemove) # save open tabs pg_list = [] active_idx = self.nbook.GetSelection() for idx in range(self.nbook.GetPageCount()): pg = self.nbook.GetPage(idx) if pg.Tag != "Console": pg_list.append((pg.Tag, pg.GetParams(), idx == active_idx)) Profile_Set('VIEW_PAGES', pg_list) Deca.world.Save(fname) self.SetTitle( _('[%s] - Sampo Framework') % os.path.basename(Deca.world.Filename))
def OnPaneViewMenu(self, event): if event.IsDropDownClicked(): tb = event.GetEventObject() tb.SetToolSticky(event.GetId(), True) # create the popup menu cntxMenu = wx.Menu() it = cntxMenu.AppendItem( wx.MenuItem(cntxMenu, self.ID_ViewExplorer, _("View world &explorer"), wx.EmptyString, wx.ITEM_CHECK)) if self._mgr.GetPane('explorer').IsShown(): it.Check(True) it = cntxMenu.AppendItem( wx.MenuItem(cntxMenu, self.ID_ViewProps, _("View &properties pane"), wx.EmptyString, wx.ITEM_CHECK)) if self._mgr.GetPane('props').IsShown(): it.Check(True) it = cntxMenu.AppendItem( wx.MenuItem(cntxMenu, self.ID_ViewLogger, _("View &logs pane"), wx.EmptyString, wx.ITEM_CHECK)) if self._mgr.GetPane('logger').IsShown(): it.Check(True) it = cntxMenu.AppendItem( wx.MenuItem(cntxMenu, self.ID_ViewConsole, _("View &console"), wx.EmptyString, wx.ITEM_CHECK)) for idx in range(self.nbook.GetPageCount()): pg = self.nbook.GetPage(idx) if pg.Tag == 'Console': it.Check(True) if not Profile_Get('ALLOW_CONSOLE', 'bool', True): it.Enable(False) # line up our menu with the button rect = tb.GetToolRect(event.GetId()) pt = tb.ClientToScreen(rect.GetBottomLeft()) pt = self.ScreenToClient(pt) self.PopupMenu(cntxMenu, pos=pt) # make sure the button is "un-stuck" tb.SetToolSticky(event.GetId(), False) pass
def OnContextMenu(self, event): upd = False if event.GetId() == self.ID_ViewExplorer: upd = True p = self._mgr.GetPane('explorer') if p.IsShown(): self._mgr.ClosePane(p) else: p.Show() elif event.GetId() == self.ID_ViewProps: upd = True p = self._mgr.GetPane('props') if p.IsShown(): self._mgr.ClosePane(p) else: p.Show() elif event.GetId() == self.ID_ViewLogger: upd = True p = self._mgr.GetPane('logger') if p.IsShown(): self._mgr.ClosePane(p) else: p.Show() elif event.GetId() == self.ID_ViewConsole: present = False for idx in range(self.nbook.GetPageCount()): pg = self.nbook.GetPage(idx) if pg.Tag == 'Console': self.ClosePage(idx) Profile_Set('SHOW_CONSOLE', False) present = True break self.nbook.Update() if not present and Profile_Get('ALLOW_CONSOLE', 'bool', True): self.shell.Show() self.AddTab(self.shell, self.shell.Title) Profile_Set('SHOW_CONSOLE', True) if upd: self._mgr.Update()
def __init__(self, parent, title="", pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE | wx.SUNKEN_BORDER | wx.CLIP_CHILDREN): self.log = wx.GetApp().GetLog() #self.log.write("Images will now be provided by SampoArt\n") wx.ArtProvider.PushProvider(ed_art.EditraArt()) wx.Frame.__init__(self, parent, wx.ID_ANY, title, pos, size, style) self._perspectives = [] self.n = 0 self.x = 0 util.SetWindowIcon(self) self.style = Profile_Get('SYNTHEME', 'str', 'default') self.statusbar = self.CreateStatusBar(3) #, wx.ST_SIZEGRIP self.statusbar.SetStatusWidths([-1, 24, 150]) self.statusbar.SetStatusText(_("Welcome To Sampo Framework"), 0) self._status_icon = wx.StaticBitmap( self.statusbar, wx.ID_ANY, wx.Image(os.path.join("pixmaps", "ledgray.png")).ConvertToBitmap()) self._gauge = wx.Gauge(self.statusbar, wx.ID_ANY) self._gauge.SetRange(100) # tell FrameManager to manage this frame self._mgr = aui.AuiManager() self._mgr.SetManagedWindow(self) # Open sub-menu self._open_menu = wx.Menu() tbmp = wx.ArtProvider_GetBitmap(str(ed_glob.ID_FOLDER), wx.ART_MENU, wx.Size(16, 16)) mi = self._open_menu.AppendItem( wx.MenuItem(self._open_menu, self.ID_OpenWorldFile, _("&Open world"))) mi.SetBitmap(tbmp) self._open_menu.AppendItem( wx.MenuItem(self._open_menu, self.ID_OpenWorldMerge, _("Merge with another world"))) self._open_menu.AppendItem( wx.MenuItem(self._open_menu, self.ID_OpenWorldReduced, _("Open world without restoring views"))) self._save_menu = wx.Menu() self._save_menu.AppendItem( wx.MenuItem(self._save_menu, self.ID_SaveWorld, _("&Save world"))) self._save_menu.AppendItem( wx.MenuItem(self._save_menu, self.ID_SaveWorldAs, _("Save world &as..."))) # min size for the frame itself isn't completely done. # see the end up FrameManager::Update() for the test # code. For now, just hard code a frame minimum size self.SetMinSize(wx.Size(400, 300)) # create some toolbars tb1 = aui.AuiToolBar(self, -1) tb1.SetToolBitmapSize(wx.Size(16, 16)) tbmp = wx.ArtProvider_GetBitmap(str(ed_glob.ID_NEW), wx.ART_MENU, wx.Size(16, 16)) tb1.AddTool(self.ID_CreateWorld, '', tbmp, tbmp, wx.ITEM_NORMAL, _("New world"), _("Create new empty world"), None) tbmp = wx.ArtProvider_GetBitmap(str(ed_glob.ID_FOLDER), wx.ART_MENU, wx.Size(16, 16)) tb1.AddTool(self.ID_OpenWorld, '', tbmp, tbmp, wx.ITEM_NORMAL, _("Open world"), _("Open world from storage"), None) tb1.SetToolDropDown(self.ID_OpenWorld, True) tbmp = wx.ArtProvider_GetBitmap(str(ed_glob.ID_SAVE), wx.ART_MENU, wx.Size(16, 16)) tb1.AddTool(self.ID_SaveWorld, '', tbmp, tbmp, wx.ITEM_NORMAL, _("Save world"), _("Save world to storage"), None) tb1.SetToolDropDown(self.ID_SaveWorld, True) tbmp = wx.ArtProvider_GetBitmap(str(ed_glob.ID_PREF), wx.ART_MENU, wx.Size(16, 16)) tb1.AddTool(self.ID_Settings, '', tbmp, tbmp, wx.ITEM_NORMAL, _("Options"), _("Tune the framework"), None) tb1.AddSeparator() tbmp = wx.ArtProvider_GetBitmap(str(ed_glob.ID_DECA_LAYER), wx.ART_MENU, wx.Size(16, 16)) tb1.AddTool(Explorer.expPanel.ID_AddLayer, '', tbmp, tbmp, wx.ITEM_NORMAL, _("Add layer"), _("Create new empty layer"), None) tbmp = wx.ArtProvider_GetBitmap(str(ed_glob.ID_DECA_IMAGES), wx.ART_MENU, wx.Size(16, 16)) tb1.AddTool(self.ID_ImageLib, '', tbmp, tbmp, wx.ITEM_NORMAL, _("Images"), _("Edit images library"), None) tbmp = wx.ArtProvider_GetBitmap(str(ed_glob.ID_DECA_ENGINE), wx.ART_MENU, wx.Size(16, 16)) tb1.AddTool(Explorer.expPanel.ID_RefreshEngines, '', tbmp, tbmp, wx.ITEM_NORMAL, _("Reload engines"), _("Rebuild engines tree and reinitialize packages"), None) tb1.AddSeparator() tbmp = wx.ArtProvider_GetBitmap(str(ed_glob.ID_COMPUTER), wx.ART_MENU, wx.Size(16, 16)) tb1.AddTool(self.ID_ViewMenu, '', tbmp, tbmp, wx.ITEM_NORMAL, _("View"), _("Select visible components"), None) tb1.SetToolDropDown(self.ID_ViewMenu, True) tbmp = wx.ArtProvider_GetBitmap(str(ed_glob.ID_HELP), wx.ART_MENU, wx.Size(16, 16)) tb1.AddTool(self.ID_HelpView, '', tbmp, tbmp, wx.ITEM_NORMAL, _("Help"), _("Show the help browser"), None) tbmp = wx.ArtProvider_GetBitmap(str(ed_glob.ID_ABOUT), wx.ART_MENU, wx.Size(16, 16)) tb1.AddTool(self.ID_About, '', tbmp, tbmp, wx.ITEM_NORMAL, _("About"), _("About the framework"), None) tb1.Realize() self.tb2 = None # add a bunch of panes self.propgrid = PropertySheet.PropGridPanel(self) self._mgr.AddPane( self.propgrid, aui.AuiPaneInfo().Name("props").Caption( "Properties").Right().CloseButton(True).MaximizeButton(True)) self.propgrid.SetPropObject(Deca.world) self.explorer = Explorer.expPanel(self, wx.Point(0, 0), wx.Size(160, 250)) self.explorer.UpdateWorldTree() self._mgr.AddPane( self.explorer, aui.AuiPaneInfo().Name("explorer").Caption("World").Left().Layer( 1).Position(1).CloseButton(True).MaximizeButton(True)) self.logger = Logger.LogView(self) self._mgr.AddPane( self.logger, aui.AuiPaneInfo().Name("logger").Caption("Logs & Messages").Bottom( ).Layer(1).Position(1).CloseButton(True).MaximizeButton(True)) self.log.Frame = self.logger # create some center panes self.nbook = aui.AuiNotebook(self) self.shell = PyShellView(self.nbook) if Profile_Get('ALLOW_CONSOLE', 'bool', True): self.AddTab(self.shell, self.shell.Title) self.UpdateIndexes() self._mgr.AddPane(self.nbook, aui.AuiPaneInfo().Name("notebook").CenterPane()) # add the toolbars to the manager self._mgr.AddPane( tb1, aui.AuiPaneInfo().Name("tb1").Caption("MainToolbar").ToolbarPane(). Top().Row(0).Position(0).LeftDockable(False).RightDockable(False)) # make some default perspectives perspective_all = self._mgr.SavePerspective() all_panes = self._mgr.GetAllPanes() for ii in xrange(len(all_panes)): all_panes[ii].MinimizeMode(aui.AUI_MINIMIZE_CAPT_SMART | (all_panes[ii].GetMinimizeMode() & aui.AUI_MINIMIZE_POS_MASK)) if not all_panes[ii].IsToolbar(): all_panes[ii].Hide() self._mgr.GetPane("props").Show() self._mgr.GetPane("explorer").Show().Left().Layer(0).Row(0).Position(0) self._mgr.GetPane("logger").Show().Bottom().Layer(0).Row(0).Position(0) self._mgr.GetPane("notebook").Show() perspective_default = self._mgr.SavePerspective() self._perspectives.append(perspective_default) self._perspectives.append(perspective_all) # "commit" all changes made to FrameManager self._mgr.Update() #self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) self.sizeChanged = False self.Bind(wx.EVT_SIZE, self.OnSize) self.Bind(wx.EVT_IDLE, self.OnIdle) self.Bind(wx.EVT_CLOSE, self.OnClose) self.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnPageClose) # Show How To Use The Closing Panes Event self.Bind(aui.EVT_AUI_PANE_CLOSE, self.OnPaneClose) self.Bind(wx.EVT_MENU, self.OnNewWorld, id=self.ID_CreateWorld) self.Bind(wx.EVT_MENU, self.DoOpenWorld, id=self.ID_OpenWorldFile) self.Bind(wx.EVT_MENU, self.DoOpenWorld, id=self.ID_OpenWorldReduced) self.Bind(wx.EVT_MENU, self.DoOpenWorld, id=self.ID_OpenWorldMerge) self.Bind(aui.EVT_AUITOOLBAR_TOOL_DROPDOWN, self.OnOpenWorld, id=self.ID_OpenWorld) self.Bind(wx.EVT_MENU, self.DoSaveWorld, id=self.ID_SaveWorld) self.Bind(aui.EVT_AUITOOLBAR_TOOL_DROPDOWN, self.OnSaveWorld, id=self.ID_SaveWorld) self.Bind(wx.EVT_MENU, self.DoSaveWorld, id=self.ID_SaveWorldAs) self.Bind(wx.EVT_MENU, self.OnSettings, id=self.ID_Settings) self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT) self.Bind(wx.EVT_MENU, self.OnAbout, id=self.ID_About) self.Bind(wx.EVT_MENU, self.OnHelpView, id=self.ID_HelpView) self.Bind(wx.EVT_MENU, self.OnImageLib, id=self.ID_ImageLib) self.Bind(wx.EVT_MENU, self.OnNewLayer, id=Explorer.expPanel.ID_AddLayer) self.Bind(wx.EVT_MENU, self.OnRefreshWorld, id=Explorer.expPanel.ID_RefreshEngines) #self.Bind(wx.EVT_MENU, self.OnContextMenu, id=self.ID_ViewMenu) self.Bind(aui.EVT_AUITOOLBAR_TOOL_DROPDOWN, self.OnPaneViewMenu, id=self.ID_ViewMenu) self.Bind(wx.EVT_MENU, self.OnContextMenu, id=self.ID_ViewExplorer) self.Bind(wx.EVT_MENU, self.OnContextMenu, id=self.ID_ViewProps) self.Bind(wx.EVT_MENU, self.OnContextMenu, id=self.ID_ViewLogger) self.Bind(wx.EVT_MENU, self.OnContextMenu, id=self.ID_ViewConsole) self.Bind(wx.EVT_MENU, self.DispatchToControl, id=ed_glob.ID_SHOW_AUTOCOMP) self.Bind(wx.EVT_MENU, self.DispatchToControl, id=wx.ID_SAVE) self.Bind(wx.EVT_MENU, self.DispatchToControl, id=wx.ID_OPEN) self.Bind(wx.EVT_MENU, self.DispatchToControl, id=wx.ID_FIND) accel_tbl = wx.AcceleratorTable([ (wx.ACCEL_CTRL, ord(' '), ed_glob.ID_SHOW_AUTOCOMP), (wx.ACCEL_CTRL, ord('Q'), wx.ID_EXIT), (wx.ACCEL_CTRL, ord('S'), wx.ID_SAVE), (wx.ACCEL_CTRL, ord('O'), wx.ID_OPEN), (wx.ACCEL_CTRL, ord('F'), wx.ID_FIND) ]) self.SetAcceleratorTable(accel_tbl) self.UpdateColors(self.style) wx.CallAfter(self._FixTbarsView)
def DoOpenWorld(self, event): evt_id = event.GetId() if evt_id == self.ID_OpenWorldFile or evt_id == self.ID_OpenWorldReduced: if Deca.world.Modified: resp = wx.MessageBox(_("Do you want to save current work?"), _("Sampo Framework"), wx.YES_NO | wx.CANCEL | wx.ICON_QUESTION) if resp == wx.CANCEL: return if resp == wx.YES: self.OnSaveWorld(event) # request filename dlg = wx.FileDialog(self, wildcard="DECA files|*.deca|All files|*.*", style=wx.FD_OPEN) if dlg.ShowModal() == wx.ID_OK: while self.nbook.GetPageCount() > 0: self.ClosePage(0) self.nbook.Update() Deca.CreateWorld(dlg.Path) profiler.TheProfile.Load( os.path.join(ed_glob.CONFIG['PROFILE_DIR'], "default.ppb")) wx.GetApp().ReloadTranslation() profiler.TheProfile.Update() if Deca.world.HgRepository.User == '': Deca.world.HgRepository.User = Profile_Get( 'HG_USER', 'str', '') Deca.world.HgRepository.Password = Profile_Get( 'HG_PASSWD', 'str', '') Deca.world.HgRepository.reopen() try: HgCommon.HgSync(Deca.world.HgRepository, None) Deca.world.HgRepository.SwitchToLocal() if Deca.world.HgRepository.IsWdChanged: Deca.world.HgRepository.commit( 'Automatic sync to server on startup') except Exception as cond: self.log("[Source control][err] Synchronize failed: %s" % cond) finally: Deca.world.HgRepository.SwitchToLocal() if Profile_Get('SHOW_CONSOLE', 'bool', True): self.shell.Show() self.AddTab(self.shell, self.shell.Title) if evt_id == self.ID_OpenWorldFile: pg_list = Profile_Get('VIEW_PAGES', 'list', []) for pg in pg_list: tag = pg[0] #self.log("[DoOpenWorld][dbg] page = %s" % str(pg)) if tag == "Text": fn = '' if pg[1][1] == ScEditor.EditorPanel.ED_TypeScript: fn = os.path.join(Deca.world.EnginesPath, pg[1][0]) elif pg[1][ 1] == ScEditor.EditorPanel.ED_TypeReport: fn = os.path.join(Deca.world.ReportsPath, pg[1][0]) if os.path.exists(fn): self.CreateTextWindow(fn, pg[1][1], activate=pg[2]) elif tag == "Text Shape": fn = os.path.join(Deca.world.ShapesPath, pg[1]) if os.path.exists(fn): px = ShapeEdPanel(self) px.tx.LoadFile(fn) ttl = px.tx.GetTitleString() self.AddTab(px, ttl, active=pg[2]) elif tag == "Graph": px = ScGraph.GraphPanel(pg[1], self) self.AddTab(px, pg[1], active=pg[2]) elif tag == "Repo": px = ObjRepo.RepositoryPanel(self) self.AddTab(px, px.Title, active=pg[2]) elif tag == "RepoView": px = RepoView.RepoView(self) self.AddTab(px, px.Title, active=pg[2]) elif tag == "HtmlView": px = HtmlView.HtmlPanel(self) self.AddTab(px, px.Title, active=pg[2]) elif tag == "ImgView": px = ObjRepo.RepositoryPanel(self) self.AddTab(px, px.Title, active=pg[2]) # for each saved page # if need to restore pages self.UpdateColors(Profile_Get('SYNTHEME', default='default')) self.explorer.UpdateWorldTree() # restore window position pdata = Profile_Get('WINDOW_STATE', default=False) self.Maximize(pdata) pdata = Profile_Get('WINDOW_POS') #, default=None if pdata: self.SetPosition(pdata) pdata = Profile_Get('WINDOW_SIZE') #, default=None if pdata: self.SetSize(pdata) pdata = Profile_Get('WINDOW_LAYOUT') #, default=None if pdata: self._mgr.LoadPerspective(pdata) Deca.world.HgRepository.User = Profile_Get('HG_USER', '') Deca.world.HgRepository.Password = Profile_Get('HG_PASSWD', '') Deca.world.HgRepository.AddRemove = Profile_Get( 'HG_AUTOFILES', '') self.SetTitle( _('[%s] - Sampo Framework') % os.path.basename(Deca.world.Filename)) # if file selected dlg.Destroy() elif evt_id == self.ID_OpenWorldMerge: wx.MessageBox(_("Not implemented yet!"), _("Sampo Framework")) else: event.Skip()
def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=_("Repository paramenters"), pos=wx.DefaultPosition, size=wx.Size(399, 222), style=wx.CAPTION | wx.CLOSE_BOX | wx.RESIZE_BORDER | wx.SYSTEM_MENU) self.SetSizeHintsSz(wx.DefaultSize, maxSize=wx.DefaultSize) bSizer = wx.BoxSizer(wx.VERTICAL) gbSizer = wx.GridBagSizer(0, 0) gbSizer.AddGrowableCol(1) gbSizer.AddGrowableRow(4) gbSizer.SetFlexibleDirection(wx.BOTH) gbSizer.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED) self.stURL = wx.StaticText(self, wx.ID_ANY, _("Repo URL"), wx.DefaultPosition, wx.DefaultSize, 0) self.stURL.Wrap(-1) gbSizer.Add(self.stURL, pos=wx.GBPosition(0, 0), span=wx.GBSpan(1, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5) self.txtURL = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) gbSizer.Add(self.txtURL, pos=wx.GBPosition(0, 1), span=wx.GBSpan(1, 2), flag=wx.ALL | wx.EXPAND, border=2) self.stUname = wx.StaticText(self, wx.ID_ANY, _("Username"), wx.DefaultPosition, wx.DefaultSize, 0) self.stUname.Wrap(-1) gbSizer.Add(self.stUname, pos=wx.GBPosition(1, 0), span=wx.GBSpan(1, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5) self.txtUname = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) gbSizer.Add(self.txtUname, pos=wx.GBPosition(1, 1), span=wx.GBSpan(1, 1), flag=wx.ALL | wx.EXPAND, border=2) self.stPasswd = wx.StaticText(self, wx.ID_ANY, _("Password"), wx.DefaultPosition, wx.DefaultSize, 0) self.stPasswd.Wrap(-1) gbSizer.Add(self.stPasswd, pos=wx.GBPosition(2, 0), span=wx.GBSpan(1, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5) self.txtPasswd = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.TE_PASSWORD) gbSizer.Add(self.txtPasswd, pos=wx.GBPosition(2, 1), span=wx.GBSpan(1, 1), flag=wx.ALL | wx.EXPAND, border=2) self.stStatus = wx.StaticText(self, wx.ID_ANY, ("Status"), wx.DefaultPosition, wx.DefaultSize, 0) self.stStatus.Wrap(-1) gbSizer.Add(self.stStatus, pos=wx.GBPosition(3, 0), span=wx.GBSpan(1, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5) self.txtStatus = wx.StaticText(self, wx.ID_ANY, _("Unknown"), wx.DefaultPosition, wx.DefaultSize, 0) self.txtStatus.Wrap(-1) gbSizer.Add(self.txtStatus, pos=wx.GBPosition(3, 1), span=wx.GBSpan(1, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5) self.btnCheck = wx.Button(self, wx.ID_ANY, _("Check"), wx.DefaultPosition, wx.DefaultSize, 0) gbSizer.Add(self.btnCheck, pos=wx.GBPosition(3, 2), span=wx.GBSpan(1, 1), flag=wx.ALL, border=2) bSizer.Add(gbSizer, proportion=1, flag=wx.EXPAND, border=5) sdbSizer = wx.StdDialogButtonSizer() self.sdbSizerOK = wx.Button(self, wx.ID_OK) sdbSizer.AddButton(self.sdbSizerOK) self.sdbSizerCancel = wx.Button(self, wx.ID_CANCEL) sdbSizer.AddButton(self.sdbSizerCancel) sdbSizer.Realize() bSizer.Add(sdbSizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5) self.SetSizer(bSizer) self.Layout() self.Centre(wx.BOTH) # Connect Events self.btnCheck.Bind(wx.EVT_BUTTON, self.OnCheck) self.sdbSizerOK.Bind(wx.EVT_BUTTON, self.OnOK) # Fill data data = Profile_Get('HG_REPOSITORY', 'str', '') self.txtURL.SetValue(data) data = Profile_Get('HG_USER', 'str', '') self.txtUname.SetValue(data) data = Profile_Get('HG_PASSWD', 'str', '') self.txtPasswd.SetValue(data)
def HgPush(repo, frame, force=False, insecure=True): status = repo.Local repo.SwitchToLocal() message = '' if repo.User == '': dlg = UserPassDlg(frame) dlg.DlgLabel = _("Code repository account:") if dlg.ShowModal() == wx.ID_OK: repo.User = dlg.txtUname.GetValue() repo.Password = dlg.txtPassword.GetValue() Profile_Set('HG_USER', repo.User) Profile_Set('HG_PASSWD', repo.Password) repo.reopen() dlg.Destroy() if repo.IsWdChanged: dlg = wx.TextEntryDialog(frame, _("Describe revision:"), _('Commit')) dlg.SetValue("Auto-commit") if dlg.ShowModal() == wx.ID_OK and dlg.GetValue() != '': message = dlg.GetValue() try: repo.commit(message) except Exception as cond: wx.GetApp().log("[SourceControl] err: %s" % cond) # committed dlg.Destroy() else: dlg.Destroy() if not status: repo.SwitchToRemote() return repo.SwitchToRemote() if repo.IsWdChanged: if message == '': dlg = wx.TextEntryDialog(frame, _("Describe revision:"), _('Commit')) dlg.SetValue("Auto-commit") if dlg.ShowModal() == wx.ID_OK and dlg.GetValue() != '': message = dlg.GetValue() dlg.Destroy() else: if status: repo.SwitchToLocal() dlg.Destroy() return try: repo.commit(message) except Exception as cond: wx.GetApp().log("[SourceControl] err: %s" % cond) # committed # and now - time to push remote_repo = Profile_Get('HG_REPOSITORY') if remote_repo is None: remote_repo = repo.Repo.paths().get('default') if remote_repo is None: remote_repo = repo.Repo.paths().get('default-push') if remote_repo is None: dlg = wx.TextEntryDialog(frame, _("Code repository URL:"), _('Push')) if dlg.ShowModal() == wx.ID_OK and dlg.GetValue() != '': remote_repo = dlg.GetValue() Profile_Set('HG_REPOSITORY', remote_repo) dlg.Destroy() if remote_repo is not None: repo.push(remote_repo, force=force, insecure=insecure) if status: repo.SwitchToLocal()