Mercurial > traipse_dev
view upmana/updatemana.py @ 37:cd8f740a8ffc traipse_dev
Whoops! Broke the Package Selecter. Now fixed!! Does anyone evene read these?
Traipse 'OpenRPG' {Build Number}
Small description of the software
--
Summary of changes:::
See what is happening here?
author | sirebral |
---|---|
date | Mon, 03 Aug 2009 20:56:36 -0500 |
parents | 683536732926 |
children | a35f41ebd04e |
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() if self.Updated: self.Updated = False self.filelist.SetValue('') wx.CallAfter(self.check) 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.4 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) 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) 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.repolist = [] for v in self.manifest.GetList('UpdateManifest', 'repolist', ''): self.repolist.append(v) self.id = 1; self.box = {}; self.main = {}; self.container = {}; self.layout = {} self.name = {}; self.url = {}; self.pull = {}; self.uri = {}; self.delete = {} self.defaultcheck = {}; self.default = {}; self.repotrac = {} #wx.Yeild() For future refrence. #Repo Name; Static Text; URL; Button. for repo in self.repolist: #self.repotrac[self.id] = repo 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.defaultcheck[self.id] = wx.CheckBox(self.repopanel, -1) self.default[self.id] = wx.StaticText(self.repopanel, -1, 'Default') 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) self.sizers["repolist_layout"].Add(self.container[self.id], -1, wx.EXPAND) 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.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']) self.Bind(wx.EVT_BUTTON, self.RefreshRepo, self.pull[self.id]) def AddRepo(self, event): repo = self.texts['reponame'].GetValue(); repo = repo.replace(' ', '_'); repo = 'repo-' + repo self.manifest.SetString('updaterepo', repo, ''); repo = repo.split(',') repolist = self.manifest.GetList('UpdateManifest', 'repolist', ''); repo = repolist + repo self.manifest.SetList('UpdateManifest', 'repolist', repo) def RefreshRepo(self, event): pass #print str(event) #repo = self.repolist[event]; print repo 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.4", 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)