Mercurial > traipse_dev
view upmana/updatemana.py @ 44:15a76be834dc traipse_dev
Delete button is working ok. Moving on to ignore feature then implementation.
author | sirebral |
---|---|
date | Wed, 05 Aug 2009 15:15:09 -0500 |
parents | f00b02fbf511 |
children | 50e82d8090cf |
line wrap: on
line source
import wx import manifest import orpg.dirpath from orpg.orpgCore import * import orpg.orpg_version import orpg.tools.orpg_log import orpg.orpg_xml import orpg.dirpath import orpg.tools.validate from mercurial import ui, hg, commands, repo, revlog, cmdutil class Updater(wx.Panel): def __init__(self, parent, open_rpg, manifest): wx.Panel.__init__(self, parent) ### Update Manager self.ui = ui.ui() self.repo = hg.repository(self.ui, ".") self.c = self.repo.changectx('tip') self.manifest = manifest self.xml = open_rpg.get_component('xml') self.dir_struct = open_rpg.get_component("dir_struct") self.parent = parent self.log = open_rpg.get_component("log") self.log.log("Enter updaterFrame", ORPG_DEBUG) self.SetBackgroundColour(wx.WHITE) self.sizer = wx.GridBagSizer(hgap=1, vgap=1) self.changelog = wx.TextCtrl(self, wx.ID_ANY, size=(400, -1), style=wx.TE_MULTILINE | wx.TE_READONLY) self.filelist = wx.TextCtrl(self, wx.ID_ANY, size=(250, 300), style=wx.TE_MULTILINE | wx.TE_READONLY) self.buttons = {} self.buttons['progress_bar'] = wx.Gauge(self, wx.ID_ANY, 100) self.buttons['auto_text'] = wx.StaticText(self, wx.ID_ANY, "Auto Update") self.buttons['auto_check'] = wx.CheckBox(self, wx.ID_ANY) self.buttons['no_text'] = wx.StaticText(self, wx.ID_ANY, "No Update") self.buttons['no_check'] = wx.CheckBox(self, wx.ID_ANY) self.buttons['advanced'] = wx.Button(self, wx.ID_ANY, "Package Select") self.buttons['update'] = wx.Button(self, wx.ID_ANY, "Update Now") self.buttons['finish'] = wx.Button(self, wx.ID_ANY, "Finish") self.sizer.Add(self.changelog, (0,0), span=(4,1), flag=wx.EXPAND) self.sizer.Add(self.filelist, (0,1), span=(1,3), flag=wx.EXPAND) self.sizer.Add(self.buttons['progress_bar'], (1,1), span=(1,3), flag=wx.EXPAND) self.sizer.Add(self.buttons['auto_text'], (2,1)) self.sizer.Add(self.buttons['auto_check'], (2,2), flag=wx.EXPAND) self.sizer.Add(self.buttons['no_text'], (3,1)) self.sizer.Add(self.buttons['no_check'], (3,2), flag=wx.EXPAND) self.sizer.Add(self.buttons['advanced'], (2,3), flag=wx.EXPAND) self.sizer.Add(self.buttons['update'], (3,3), flag=wx.EXPAND) self.sizer.Add(self.buttons['finish'], (4,3), flag=wx.EXPAND) self.sizer.AddGrowableCol(0) self.sizer.AddGrowableRow(0) self.SetSizer(self.sizer) self.SetAutoLayout(True) self.get_package self.current = self.c.branch() self.BranchInfo(self.current) #if self.autoupdate == "On": self.buttons['auto_check'].SetValue(True) ## Event Handlers self.Bind(wx.EVT_BUTTON, self.Update, self.buttons['update']) self.Bind(wx.EVT_BUTTON, self.Finish, self.buttons['finish']) self.Bind(wx.EVT_BUTTON, self.ChooseBranch, self.buttons['advanced']) self.Bind(wx.EVT_CHECKBOX, self.ToggleAutoUpdate, self.buttons['auto_check']) self.Bind(wx.EVT_CHECKBOX, self.ToggleNoUpdate, self.buttons['no_check']) def ToggleAutoUpdate(self, event): if self.buttons['auto_check'].GetValue(): if self.buttons['no_check'].GetValue(): self.buttons['no_check'].SetValue(False) self.manifest.SetString("updatemana", "no_update", "off") self.autoupdate = "On" self.manifest.SetString("updatemana", "auto_update", "on") else: self.autoupdate = "Off" self.manifest.SetString("updatemana", "auto_update", "off") def ToggleNoUpdate(self, event): if self.buttons['no_check'].GetValue(): if self.buttons['auto_check'].GetValue(): self.buttons['auto_check'].SetValue(False) self.manifest.SetString("updatemana", "auto_update", "off") self.autoupdate = "On" self.manifest.SetString("updatemana", "no_update", "on") else: self.autoupdate = "Off" self.manifest.SetString("updatemana", "no_update", "off") def Update(self, evt=None): hg.clean(self.repo, self.current) def Finish(self, evt=None): self.Finished = True self.Destroy() #destroys tab, pretty useless. def ChooseBranch(self, evt=None): dlg = wx.Dialog(self, wx.ID_ANY, "Package Selector", style=wx.DEFAULT_DIALOG_STYLE) if wx.Platform == '__WXMSW__': icon = wx.Icon(self.dir_struct["icon"]+'d20.ico', wx.BITMAP_TYPE_ICO) else: icon = wx.Icon(self.dir_struct["icon"]+"d20.xpm", wx.BITMAP_TYPE_XPM ) dlg.SetIcon(icon) dlgsizer = wx.GridBagSizer(hgap=1, vgap=1) Yes = wx.Button( dlg, wx.ID_OK, "Ok" ) Yes.SetDefault() rgroup = wx.RadioButton(dlg, wx.ID_ANY, "group_start", style=wx.RB_GROUP) rgroup.Hide() self.get_packages() if self.package_list == None: return types = self.package_list row=0; col=0 self.current = self.c.branch() self.package_type = self.current self.btnlist = {}; self.btn = {} self.id = 1 for t in types: self.btnName = str(t) self.btn[self.id] = wx.RadioButton(dlg, wx.ID_ANY, str(t), name=self.btnName) if self.btnName == self.current: self.btn[self.id].SetValue(True) self.btnlist[self.id] = self.btnName dlgsizer.Add(self.btn[self.id], (row, col)) row += 1; self.id += 1 dlgsizer.Add(Yes, (row+1,0)) dlg.SetAutoLayout( True ) dlg.SetSizer( dlgsizer ) dlgsizer.Fit( dlg ) dlg.Centre() dlg.Bind(wx.EVT_RADIOBUTTON, self.PackageSet) if dlg.ShowModal(): dlg.Destroy() def PackageSet(self, event): for btn in self.btn: if self.btn[btn].GetValue() == True: self.current = self.btnlist[btn] branches = self.repo.branchtags() heads = dict.fromkeys(self.repo.heads(), 1) l = [((n in heads), self.repo.changelog.rev(n), n, t) for t, n in branches.items()] #l.sort() #l.reverse() #for ishead, r, n, t in l: self.package_list.append(t) if self.current != type: #r = hg.islocal() files = self.c.files() #print commands.log(u, r, c) #print r.changelog ### Cleaning up for dev build 0.1 ### The below material is for the Rev Log. You can run hg log to see what data it will pull. #cs = r.changectx(c.rev()).changeset() #get = util.cachefunc(lambda r: repo.changectx(r).changeset()) #changeiter, matchfn = cmdutil.walkchangerevs(u, r, 1, cs, 1) #for st, rev, fns in changeiter: # revbranch = get(rev)[5]['branch']; print revbranch heads = dict.fromkeys(self.repo.heads(), self.repo.branchtags()) branches = dict.copy(self.repo.branchtags()) self.BranchInfo(self.current) def BranchInfo(self, branch): self.filelist.SetValue('') self.filelist.AppendText("Files that will change\n\n") self.changelog.SetValue('') changelog = "Traipse 'OpenRPG' Update Manager.\n\nThis is Dev Build 0.5 of the Update Manager. It has limited functionality.\n\nThe full release will search your Revision log and show the contents here.\n\nMajor changes in this version are ... Manifest is now in a CheckListBox, very nice, Repos now allow for scrolling, New button works. Checks Box on the Updater tab work. Settings file is created and data is saved to it." self.changelog.AppendText(changelog + '\n') self.filelist.AppendText("Update to " + branch + "\n\n The full release will show the files to be changed here.") #### Files works but not fully without the change log information, pulled for Dev 0.1 #for f in files: # fc = c[f] # self.filelist.AppendText(str(f + '\n')) def verify_file(self, abs_path): """Returns True if file or directory exists""" try: os.stat(abs_path) return True except OSError: self.log.log("Invalid File or Directory: " + abs_path, ORPG_GENERAL) return False def get_packages(self, type=None): #Fixed and ready for Test. Can be cleaner self.package_list = [] b = self.repo.branchtags() heads = dict.fromkeys(self.repo.heads(), 1) l = [((n in heads), self.repo.changelog.rev(n), n, t) for t, n in b.items()] l.sort() l.reverse() for ishead, r, n, t in l: self.package_list.append(t) def get_package(self): #Fixed and ready for test. self.get_packages() if self.package_list == None: return None return None class Repos(wx.Panel): def __init__(self, parent, openrpg, manifest): wx.Panel.__init__(self, parent) ### Update Manager self.ui = ui.ui() self.r = hg.repository(self.ui, ".") self.c = self.r.changectx('tip') mainpanel = self self.openrpg = openrpg self.manifest = manifest self.buttons = {} self.texts = {} ## Section Sizers (with frame edges and text captions) self.box_sizers = {} self.box_sizers["newbutton"] = wx.StaticBox(self, -1) ## Layout Sizers self.sizers = {} self.sizers["main"] = wx.GridBagSizer(hgap=2, vgap=2) self.sizers["button"] = wx.GridBagSizer(hgap=2, vgap=2) #Button Layout self.sizers["newbutton"] = wx.StaticBoxSizer(self.box_sizers["newbutton"], wx.VERTICAL) self.sizers["newrepo_layout"] = wx.FlexGridSizer(rows=1, cols=2, hgap=2, vgap=5) empty = wx.StaticText(self, -1, "") reponame = wx.StaticText(self, -1, "Name:") self.texts["reponame"] = wx.TextCtrl(self, -1, '') self.buttons['addrepo'] = wx.Button(self, wx.ID_NEW) ##Build Button self.sizers["newrepo_layout"].Add(self.buttons['addrepo'], -1, wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL|wx.ALL) self.sizers["newrepo_layout"].Add(empty, -1) self.sizers["newrepo_layout"].Add(reponame, -1, wx.ALIGN_CENTER|wx.ALIGN_CENTER_VERTICAL|wx.ALL) self.sizers["newrepo_layout"].Add(self.texts["reponame"], -1, wx.EXPAND) self.sizers["newrepo_layout"].AddGrowableCol(1) self.sizers["newbutton"].Add(self.sizers["newrepo_layout"], -1, wx.EXPAND) #Repo List Panel self.repopanel = wx.ScrolledWindow(self) self.repopanel.SetScrollbars(20,20,55,40) self.repopanel.Scroll(50,10) self.box_sizers["repolist"] = wx.StaticBox(self.repopanel, -1, "Current Repo List") self.sizers["repolist"] = wx.StaticBoxSizer(self.box_sizers["repolist"], wx.VERTICAL) self.sizers["repo"] = wx.GridBagSizer(hgap=2, vgap=2) self.sizers["repolist_layout"] = wx.FlexGridSizer(rows=1, cols=1, hgap=2, vgap=5) self.manifest = manifest self.NewRepoList(None) self.BuildRepoList(None) self.sizers["repolist_layout"].AddGrowableCol(0) self.sizers["repolist"].Add(self.sizers["repolist_layout"], -1, wx.EXPAND) self.sizers["repo"].Add(self.sizers["repolist"], (0,0), flag=wx.EXPAND) self.sizers["repo"].AddGrowableCol(0) self.sizers['repo'].AddGrowableRow(0) self.sizers['repo'].AddGrowableRow(1) self.repopanel.SetSizer(self.sizers['repo']) self.repopanel.SetAutoLayout(True) #Build Main Sizer self.sizers["main"].Add(self.sizers["newbutton"], (0,0), flag=wx.EXPAND) self.sizers["main"].Add(self.repopanel, (1,0), flag=wx.EXPAND) self.sizers["main"].AddGrowableCol(0) self.sizers["main"].AddGrowableCol(1) self.sizers["main"].AddGrowableRow(1) self.SetSizer(self.sizers["main"]) self.SetAutoLayout(True) self.Fit() self.Bind(wx.EVT_BUTTON, self.AddRepo, self.buttons['addrepo']) def NewRepoList(self, event): self.id = -1; self.box = {}; self.box_name= {}; self.main = {}; self.container = {}; self.layout = {} self.name = {}; self.url = {}; self.url_list = {}; self.pull = {}; self.uri = {}; self.delete = {} self.defaultcheck = {}; self.default = {}; self.repotrac = {} self.pull_list = {}; self.delete_list = {}; self.defchecklist = {} def BuildRepoList(self, event): self.repolist = self.manifest.GetList('UpdateManifest', 'repolist', '') try: self.repolist = self.repo except: pass #wx.Yeild() For future refrence. for repo in self.repolist: self.id += 1 #Build Constructs self.box[self.id] = wx.StaticBox(self.repopanel, -1, str(repo)) self.main[self.id] = wx.GridBagSizer(hgap=2, vgap=2) self.container[self.id] = wx.StaticBoxSizer(self.box[self.id], wx.VERTICAL) self.layout[self.id] = wx.FlexGridSizer(rows=1, cols=4, hgap=2, vgap=5) self.name[self.id] = wx.StaticText(self.repopanel, -1, 'URL') self.uri[self.id] = self.manifest.GetString('updaterepo', repo, '') self.url[self.id] = wx.TextCtrl(self.repopanel, -1, self.uri[self.id]) self.pull[self.id] = wx.Button(self.repopanel, wx.ID_REFRESH) self.delete[self.id] = wx.Button(self.repopanel, wx.ID_DELETE) self.delete_list[self.delete[self.id]] = self.id self.defaultcheck[self.id] = wx.CheckBox(self.repopanel, -1) self.default[self.id] = wx.StaticText(self.repopanel, -1, 'Default') #Build Retraceables self.box_name[self.id] = str(repo) self.pull_list[self.pull[self.id]] = self.id self.defchecklist[self.defaultcheck[self.id]] = self.id #Build Layout self.layout[self.id].Add(self.name[self.id], -1, wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL|wx.ALL) self.layout[self.id].Add(self.url[self.id], -1, wx.EXPAND) self.layout[self.id].Add(self.pull[self.id], -1, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ALL) self.layout[self.id].Add(self.delete[self.id], -1, wx.EXPAND) self.layout[self.id].Add(self.defaultcheck[self.id], -1, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ALL) self.layout[self.id].Add(self.default[self.id], -1, wx.EXPAND) self.layout[self.id].AddGrowableCol(1) self.container[self.id].Add(self.layout[self.id], -1, wx.EXPAND) #Button Events self.Bind(wx.EVT_BUTTON, self.RefreshRepo, self.pull[self.id]) self.Bind(wx.EVT_BUTTON, self.DelRepo, self.delete[self.id]) self.sizers["repolist_layout"].Insert(0, self.container[self.id], -1, wx.EXPAND) self.sizers['repolist_layout'].Layout() def AddRepo(self, event): repo = self.texts['reponame'].GetValue(); repo = repo.replace(' ', '_'); repo = 'repo-' + repo self.manifest.SetString('updaterepo', repo, ''); self.repo = repo.split(',') repolist = self.manifest.GetList('UpdateManifest', 'repolist', '') if repolist == '': pass else: repolist = repolist + self.repo self.manifest.SetList('UpdateManifest', 'repolist', repolist) self.BuildRepoList(None) def DelRepo(self, event): self.id = self.delete_list[event.GetEventObject()] self.sizers["repolist_layout"].Hide(self.container[self.id]) try: del self.box_name[self.id] except: pass self.manifest.SetList('UpdateManifest', 'repolist', list(self.box_name.values())) self.sizers['repolist_layout'].Layout() def RefreshRepo(self, event): self.id = self.pull_list[event.GetEventObject()] self.manifest.SetString('updaterepo', str(self.box_name[self.id]), self.url[self.id].GetValue()) try: commands.pull(self.ui, self.r, self.url[self.id].GetValue(), force=True) except: pass class Manifest(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent) self.ui = ui.ui() self.repo = hg.repository(self.ui, ".") self.c = self.repo.changectx('tip') self.manifestlist = [] self.manifestlist = self.c.manifest().keys() self.manifestlist.sort() self.SetBackgroundColour(wx.WHITE) self.sizer = wx.GridBagSizer(hgap=1, vgap=1) self.manifestlog = wx.CheckListBox( self, -1, wx.DefaultPosition, wx.DefaultSize, self.manifestlist, wx.LC_REPORT|wx.SUNKEN_BORDER|wx.EXPAND|wx.LC_HRULES) self.sizer.Add(self.manifestlog, (0,0), flag=wx.EXPAND) self.sizer.AddGrowableCol(0) self.sizer.AddGrowableRow(0) self.SetSizer(self.sizer) self.SetAutoLayout(True) class Control(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent) class updaterFrame(wx.Frame): def __init__(self, parent, title, openrpg, manifest): wx.Frame.__init__(self, None, wx.ID_ANY, title, size=(640,480), style=wx.FRAME_NO_TASKBAR | wx.STAY_ON_TOP | wx.DEFAULT_FRAME_STYLE) self.CenterOnScreen() ####### Panel Stuff ###### p = wx.Panel(self) nb = wx.Notebook(p) # create the page windows as children of the notebook page1 = Updater(nb, openrpg, manifest) page2 = Repos(nb, openrpg, manifest) page3 = Manifest(nb) page4 = Control(nb) # add the pages to the notebook with the label to show on the tab nb.AddPage(page1, "Updater") nb.AddPage(page2, "Repos") nb.AddPage(page3, "Manifest") nb.AddPage(page4, "Control") # finally, put the notebook in a sizer for the panel to manage # the layout sizer = wx.BoxSizer() sizer.Add(nb, 1, wx.EXPAND) p.SetSizer(sizer) class updateApp(wx.App): def OnInit(self): self.open_rpg = open_rpg self.log = orpg.tools.orpg_log.orpgLog(orpg.dirpath.dir_struct["user"] + "runlogs/") self.log.setLogToConsol(False) self.log.log("Updater Start", ORPG_NOTE) self.manifest = manifest.ManifestChanges() self.open_rpg.add_component("log", self.log) self.open_rpg.add_component("xml", orpg.orpg_xml) self.open_rpg.add_component("dir_struct", orpg.dirpath.dir_struct) self.validate = orpg.tools.validate.Validate() self.open_rpg.add_component("validate", self.validate) self.updater = updaterFrame(self, "OpenRPG Update Manager Beta 0.5", self.open_rpg, self.manifest) self.updated = False try: self.updater.Show() self.SetTopWindow(self.updater) self.updater.Fit() except: pass return True def OnExit(self): #self.settings.save() """ imported = ['orpg.orpgCore', 'orpg.orpg_wx', 'orpg.orpg_version', 'orpg.tools.orpg_log', 'orpg.orpg_xml', 'orpg.dirpath', 'orpg.tools.orpg_settings', 'orpg.tools.validate', 'orpg.pulldom', 'orpg.tools.NotebookCtrl', 'orpg.tools.config_update', 'orpg.systempath', 'orpg.minidom', 'orpg.dirpath.dirpath_tools', 'orpg.tools.rgbhex', 'orpg.orpg_windows'] for name in imported: if name in sys.modules: self.log.log("Unimported " + name, ORPG_DEBUG) del sys.modules[name] """ self.log.log("Updater Exit\n\n", ORPG_NOTE)