def __init__(self, sself): self.sself = sself self.header0 = MIHeader(sself) self.leftpanel = MILeftPanel(sself, _('Steps')) self.rightpanel = MIRightPanel(sself, '') self.statusbar = MIStatusBar(sself) self.buttonbar = MIButtonBar(sself) xmlgtk.xmlgtk.__init__(self, XML_DATA)
def __init__(self, step_name_list, *args, **kw): gtk.Window.__init__(self, *args, **kw) self.set_name(self.__class__.__name__) self.top = MITop(self) self.leftpanel = MILeftPanel(self, _('Steps')) self.rightpanel = MIRightPanel(self, '') self.statusbar = MIStatusBar(self) self.buttonbar = MIButtonBar(self) self.set_title(_('Magic Installer')) self.set_border_width(4) self.connect('destroy', lambda x: gtk.main_quit()) self.values = parse(search_file('magic.values.xml', [CF.D.HOTFIXDIR, '.'])) self.tm = MiTaskman(1325, self.statusbar.get_progressbar(), self.statusbar.get_progressbar()) self.step_name_list = step_name_list
class MIMainWindow(gtk.Window): def __init__(self, step_name_list, *args, **kw): gtk.Window.__init__(self, *args, **kw) self.set_name(self.__class__.__name__) self.top = MITop(self) self.leftpanel = MILeftPanel(self, _('Steps')) self.rightpanel = MIRightPanel(self, '') self.statusbar = MIStatusBar(self) self.buttonbar = MIButtonBar(self) self.set_title(_('Magic Installer')) self.set_border_width(4) self.connect('destroy', lambda x: gtk.main_quit()) self.values = parse(search_file('magic.values.xml', [CF.D.HOTFIXDIR, '.'])) self.tm = MiTaskman(1325, self.statusbar.get_progressbar(), self.statusbar.get_progressbar()) self.step_name_list = step_name_list def init(self): self.curstep = -1 self.steps = Steps(self, self.step_name_list) self.steps.init() vbox = gtk.VBox() self.add(vbox) hbox = gtk.HBox() vbox.pack_start(self.top, True, True) vbox.pack_start(hbox, True, True) hbox.pack_start(self.leftpanel, False, True) #hbox.pack_start(gtk.VSeparator(), False, True) hbox.pack_start(self.rightpanel, True, True) vbox.pack_start(self.statusbar, False, True) vbox.pack_start(self.buttonbar, False, True) self.show_all() start_stepid = 0 if len(sys.argv) > 1: try: start_stepid = int(sys.argv[1]) except: pass else: for stepid in range(len(self.steps)): if os.path.exists('/tmpfs/debug/start.step.%d' % stepid): start_stepid = stepid break step = self.steps.get_step_by_id(start_stepid) dolog('Start step: %s' % step) self.load_env(step.id) self.switch_to_page(step.name) #self.switch_to_page('welcome') def load_env(self, stepid): if stepid > 0: conf_file = '/tmpfs/step_conf/step_%s.json' find_it = False for s_id in range(stepid - 1, -1, -1): if os.path.exists(conf_file % s_id): conf_file = conf_file % s_id find_it = True break if find_it: CF.load_from_file(conf_file) def btnnext_sensitive(self, sensitive): self.buttonbar.next.set_sensitive(sensitive) def btnback_sensitive(self, sensitive): self.buttonbar.back.set_sensitive(sensitive) def switch_to_page(self, name): if not self.steps.has_key(name): return step = self.steps.get_step_by_name(name) if self.curstep == step.id: return nextstep = step.id if nextstep < self.curstep or \ ( nextstep > self.curstep and self.leave_step(self.curstep) and self.enter_step(nextstep) ): dolog('switch_to_page "%s" step from %s to %s Success' % (name, self.curstep, nextstep)) self.rightpanel.switch(step.obj.widget) self.leftpanel.switch(self.curstep, step.id) self.curstep = nextstep else: dolog('switch_to_page "%s" step from %s to %s Failed' % (name, self.curstep, nextstep)) # Call set_current_page is useless here, so use timeout # to switch back. #gobject.timeout_add(10, self.page_restore) def enter_step(self, stepid): step = self.steps.get_step_by_id(stepid) if hasattr(step.obj, 'enter'): return step.obj.enter() return True def leave_step(self, stepid): if stepid == -1: return True step = self.steps.get_step_by_id(stepid) ret = True if hasattr(step.obj, 'leave'): ret = step.obj.leave() else: ret = True if ret: self.save_env(stepid) return ret def save_env(self, stepid): CF.save_to_file('/tmpfs/step_conf/step_%s.json' % stepid) ####---------------------------------------------------- def btnhelp_clicked(self, widget, data): self.stepobj_list[self.curstep].btnhelp_clicked(widget, data) def btncancel_clicked(self, widget, data): self.stepobj_list[self.curstep].btncancel_clicked(widget, data) def btnback_clicked(self, widget, data): step = self.steps.get_step_by_id(self.curstep) if step.obj.btnback_clicked(widget, data): #self.name_map['mi_main'].set_current_page(self.curstep - 1) self.btnback_do() def btnnext_clicked(self, widget, data): step = self.steps.get_step_by_id(self.curstep) if step.obj.btnnext_clicked(widget, data): self.btnnext_do() def btnback_do(self): self.switch_to_page(self.curstep - 1) def btnnext_do(self): step = self.steps.get_step_by_id(self.curstep) self.skip_steps(step.obj.skip_stepnames) n_step_id = self.get_next_available_step(self.curstep) self.switch_to_page(self.steps.get_name_by_id(n_step_id)) def skip_steps(self, skip_stepnames): for name in skip_stepnames: dolog('Skip Step: %s ...' % name) self.steps.get_step_by_name(name).valid = False self.leftpanel.skip_step(name) dolog('Skip Step: %s Done' % name) def get_next_available_step(self, curstep): n_step_id = 0 for s_id in range(curstep+1, len(self.steps)): step = self.steps.get_step_by_id(s_id) if step.valid: n_step_id = s_id break return n_step_id #def switch_to_page(self, pageno): #if self.curstep != pageno: #if pageno < self.curstep: #self.stepsarr[self.curstep].set_from_file('images/applet-blank.png') #self.stepsarr[pageno].set_from_file('images/applet-busy.png') #self.switch2step(pageno) #elif pageno > self.curstep: #if self.leave_step(self.curstep) and self.enter_step(pageno): # only check next #self.stepsarr[self.curstep].set_from_file('images/applet-okay.png') #self.stepsarr[pageno].set_from_file('images/applet-busy.png') #self.switch2step(pageno) #else: ## Call set_current_page is useless here, so use timeout ## to switch back. #gobject.timeout_add(10, self.page_restore) def cb_push_leftpanel(self, widget): logger.d('cb_push_leftpanel') self.leftpanel.push(widget) def cb_pop_leftpanel(self): logger.d('cb_pop_leftpanel') return self.leftpanel.pop() def cb_push_rightpanel(self, widget): logger.d('cb_push_rightpanel rightpanel.stash_stack.len %s' % len(self.rightpanel.stash_stack)) self.rightpanel.push(widget) def cb_pop_rightpanel(self): logger.d('cb_pop_rightpanel') return self.rightpanel.pop() #-------------------------- TODO --------------------------------------- def btnfinish_clicked(self, widget, data): if self.stepobj_list[self.curstep].btnfinish_clicked(widget, data): # Do real installation. pass def theme_clicked(self, widget, themedir): # Use 'gtk.settings' instead of 'gtk.rc' By [email protected] settings = gtk.settings_get_default() if themedir: settings.set_string_property("gtk-theme-name", themedir, "") #gtk.rc_parse_string('gtk-theme-name = "%s"' % themedir) else: settings.set_string_property("gtk-theme-name", "Default", "") #gtk.rc_parse_string('gtk-theme-name = "Default"') def btntheme_clicked(self, widget, data): self.themedlg = magicpopup.magicpopup(self, self.uixml, _('Theme Choice'), magicpopup.magicpopup.MB_OK, 'themedlg', 'theme') themesdoc = parse('/etc/gtk-2.0/themes.xml') themelist = themesdoc.getElementsByTagName('theme') rows = 2 thetable = gtk.Table(rows, (len(themelist) + rows - 1) / rows, True) thetable.set_col_spacings(4) thetable.set_row_spacings(4) left = 0 top = 0 for themenode in themelist: path = themenode.getAttribute('dir') pic = themenode.getAttribute('pic') if pic: thebutton = gtk.Button() theimage = gtk.Image() theimage.set_from_file('/etc/gtk-2.0/pics/' + pic) theimage.show() thebutton.add(theimage) thebutton.show() else: name = themenode.getAttribute('name') if not name: if path: name = path else: name = _('Default') thebutton = gtk.Button(name) thebutton.connect('clicked', self.theme_clicked, path) thetable.attach(thebutton, left, left + 1, top, top + 1, 0, 0, 0, 0) top = top + 1 if top == rows: top = 0 left = left + 1 thetable.show() self.themedlg.name_map['themes'].pack_start(thetable, True, True) def btnlogger_clicked(self, widget, data): self.tm.add_action(None, None, None, 'start_magiclogger', 0)