def loadRealm(self,fn): global config global worldList status.push(0,"Destroying menus...") clearMenus() status.push(0,"Clearing worldList...") worldList = {} # clear worldList status.push(0,"Reloading config...") backends.killRealmOpts() status.push(0,"Loading realm...") config.update(backends.loadRealm(fn)) status.push(0,"Populating realm...") common.updateTitle() backends.populateWorld() status.push(0,"Building menus...") doMenus(self) pass
def __init__(self,configfile): global status global config global mainWin global menuBar self.window = mainWin common.updateTitle() self.window.connect("delete_event", self.delete_event) self.window.connect("destroy", self.destroy) self.window.set_border_width(3) self.window.show() if not config.get("nowindowstore"): self.window.set_geometry_hints(None,config['size'][0],config['size'][1]) self.window.move(config['pos'][0],config['pos'][1]) mainWin = self.window self.box1 = gtk.VBox() self.window.add(self.box1) self.box1.show() self.tabs = gtk.Notebook() self.tabs.set_scrollable(True) if not config.get("seenfirstrun"): menu.firstRunTab(self,self.tabs) self.accgroup = gtk.AccelGroup() # for use on menus self.window.add_accel_group(self.accgroup) Base.makeMenus(self) self.box1.add(menuBar) self.box1.add(self.tabs) self.tabs.show() # self.menu1.connect("clicked", self.hello, None) # self.menu1.connect_object("clicked", gtk.Widget.destroy, self.window) status.set_border_width(2) status.show() self.box1.add(status) self.box1.set_child_packing(status,0,0,0,gtk.PACK_START) self.box1.set_child_packing(self.tabs,1,1,0,gtk.PACK_START) self.box1.set_child_packing(menuBar,0,0,0,gtk.PACK_START) # self.button1.set_border_width(2) menuBar.show()
def optionSetter(caller,parent = "?",canskip = True): global config global status options = {} factor = 0.80 if parent == "?": parent = mainWin print "parent: %s" % parent title = "Setting Options" optbox = gtk.Dialog(title,parent,gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_APPLY,gtk.RESPONSE_APPLY,gtk.STOCK_OK,gtk.RESPONSE_OK)) if not canskip: optbox.get_action_area().get_children()[2].set_sensitive(False) # buttons seem to number right to left applyBut = optbox.get_action_area().get_children()[1] applyBut.set_sensitive(False) # optbox.get_action_area().get_children()[0].set_sensitive(False) if not config.get("nowindowstore"): optbox.set_geometry_hints(None,int(config['size'][0] * factor),int(config['size'][1] * (factor - 0.05))) # optbox.set_decorated(False) sw = gtk.VBox() sw.show() sw.set_border_width(10) scroll = gtk.ScrolledWindow() scroll.show() scroll.set_policy(gtk.POLICY_NEVER,gtk.POLICY_AUTOMATIC) scroll.add_with_viewport(sw) optbox.vbox.add(scroll) rf = config['realmfile'] if rf == "": rf = "<unspecified>" label = gtk.Label("Realm-specific Options for %s" % rf) label.show() sw.pack_start(label,False,False,7) row = gtk.HBox() label = gtk.Label("Name of this realm/setting/world: ") e = gtk.Entry() e.show() e.set_text(config.get("realmname","Unnamed Realm")) optbox.set_title("Setting Options - %s" % e.get_text()) e.connect("changed",setOpt,None,options,"realmname",2) e.connect("changed",mayApply,applyBut) e.connect("focus-in-event",scrollOnTab,scroll) row.show() label.show() row.pack_start(label,False,False,2) row.pack_start(e,True,True,2) sw.pack_start(row) row = gtk.HBox() label = gtk.Label("Realm Directory: ") e = gtk.Entry() e.show() e.set_text(config.get("realmdir","")) e.connect("changed",setOpt,None,options,"realmdir",2) e.connect("changed",mayApply,applyBut) e.connect("focus-in-event",scrollOnTab,scroll) row.show() label.show() row.pack_start(label,False,False,2) row.pack_start(e,True,True,2) sw.pack_start(row) cb = gtk.CheckButton("Family name comes first (Eastern style names)") cb.set_active(config.get("familyfirst",False)) cb.connect("toggled",setOpt,None,options,"familyfirst",1) cb.connect("toggled",mayApply,applyBut) cb.connect("focus-in-event",scrollOnTab,scroll) cb.show() sw.pack_start(cb) cb = gtk.CheckButton("Use middle/maiden names") cb.set_active(config.get("usemiddle",True)) cb.connect("toggled",setOpt,None,options,"usemiddle",1) cb.connect("toggled",mayApply,applyBut) cb.connect("focus-in-event",scrollOnTab,scroll) cb.show() sw.pack_start(cb) sqlbox = gtk.Frame("SQL Options") xmlbox = gtk.Frame("XML Options") formats = ["xml","sql"] forms = [("informat","Input format"),("outformat","Output format")] for key in forms: label = key[1] key = key[0] group = None row = gtk.HBox() row.show() label = gtk.Label("%s:" % label) label.show() row.pack_start(label,False,False,2) c = gtk.combo_box_new_text() selected = -1 options[key] = config.get(key,"xml") i = 0 for f in formats: if f == options.get(key): selected = i c.append_text(f) i += 1 c.set_active(selected) c.connect("changed",setOpt,None,options,key,3) c.connect("changed",mayApply,applyBut) c.connect("changed",toggleBoxes,None,sqlbox,xmlbox,options) c.connect("move-active",setOpt,options,key,3) c.connect("move-active",toggleBoxes,sqlbox,xmlbox,options) c.connect("focus",scrollOnTab,scroll) c.connect("focus-in-event",scrollOnTab,scroll) c.show() row.pack_start(c,False,False,2) sw.pack_start(row) sw.pack_start(sqlbox) sw.pack_start(xmlbox) toggleBoxes(None,None,sqlbox,xmlbox,options) xb = gtk.VBox() xb.show() xmlbox.add(xb) sb = gtk.VBox() sb.show() sqlbox.add(sb) ####### SQL box options label = gtk.Label("SQL input/output is not yet implemented.\nPlease use XML for the time being.") label.show() sb.pack_start(label) ####### XML box options cb = gtk.CheckButton("Include empty tags when saving XML files") cb.set_active(config.get("printemptyXMLtags",False)) cb.connect("toggled",setOpt,None,options,"printemptyXMLtags",1) cb.connect("toggled",mayApply,applyBut) cb.connect("focus-in-event",scrollOnTab,scroll) cb.show() xb.pack_start(cb) row = gtk.HBox() label = gtk.Label("DTDs are found in this directory: ") e = gtk.Entry() e.show() e.set_text(config.get("dtddir","")) e.connect("changed",setOpt,None,options,"dtddir",2) e.connect("changed",mayApply,applyBut) e.connect("focus-in-event",scrollOnTab,scroll) row.show() label.show() row.pack_start(label,False,False,2) row.pack_start(e,True,True,2) xb.pack_start(row) row = gtk.HBox() label = gtk.Label("URL for DTD in XML files: ") e = gtk.Entry() e.show() e.set_text(config.get("dtdurl","")) e.connect("changed",setOpt,None,options,"dtdurl",2) e.connect("changed",mayApply,applyBut) e.connect("focus-in-event",scrollOnTab,scroll) row.show() label.show() row.pack_start(label,False,False,2) row.pack_start(e,True,True,2) xb.pack_start(row) row = gtk.HBox() label = gtk.Label("URL for XSL files in XML: ") e = gtk.Entry() e.show() e.set_text(config.get("xslurl","")) e.connect("changed",setOpt,None,options,"xslurl",2) e.connect("changed",mayApply,applyBut) e.connect("focus-in-event",scrollOnTab,scroll) row.show() label.show() row.pack_start(label,False,False,2) row.pack_start(e,True,True,2) xb.pack_start(row) row = gtk.HBox() label = gtk.Label("Century assumed for 2-digit years: ") test = gtk.Label("Test dates:") test.show() a = gtk.Adjustment(int(config.get("century",1900)/100),-499,500) s1 = gtk.SpinButton(a,1.0,0) s1.set_increments(1,10) s1.show() s1.connect("value-changed",setOpt,None,options,"century",5) s1.connect("value-changed",mayApply,applyBut) s1.connect("focus-in-event",scrollOnTab,scroll) row.show() label.show() row.pack_start(label,False,False,2) row.pack_start(s1,False,False,2) label = gtk.Label("Split year: ") label.show() a = gtk.Adjustment(int(config.get("centbreak",77)),0,99) s2 = gtk.SpinButton(a,1.0,0) s2.set_increments(1,10) s2.show() s2.connect("value-changed",setOpt,None,options,"centbreak",4) s2.connect("value-changed",mayApply,applyBut) s2.connect("focus-in-event",scrollOnTab,scroll) row.pack_start(label,False,False,2) row.pack_start(s2,True,True,2) setDates(None,s1,s2,test) s2.connect("value-changed",setDates,s1,s2,test) s1.connect("value-changed",setDates,s1,s2,test) sw.pack_start(row) sw.pack_start(test,True,True,2) cb = gtk.CheckButton("Show only calculated date") cb.set_active(config.get("hideage",True)) cb.connect("toggled",setOpt,None,options,"hideage",1) cb.connect("toggled",mayApply,applyBut) cb.connect("focus-in-event",scrollOnTab,scroll) cb.show() sw.pack_start(cb) row = gtk.HBox() label = gtk.Label("Date for age calculations: ") label.show() e = gtk.Entry() e.set_text(config.get("agedate","06/08/10b")) e.connect("changed",setOpt,None,options,"agedate",2) e.connect("changed",mayApply,applyBut) e.show() row.show() row.pack_start(label,0,0,2) row.pack_start(e,1,1,2) placeCalendarButton(None,row,e,None,[],nomark=True) sw.pack_start(row,0,0,2) row = gtk.HBox() label = gtk.Label("Expert: Style for dates in this realm: ") e = gtk.Entry() e.show() e.set_text(config.get("datestyle","%y/%m/%db")) e.connect("changed",setOpt,None,options,"datestyle",2) e.connect("changed",mayApply,applyBut) e.connect("focus-in-event",scrollOnTab,scroll) row.show() label.show() row.pack_start(label,False,False,2) row.pack_start(e,True,True,2) sw.pack_start(row) row = gtk.HBox() label = gtk.Label("Background color for a changed field: ") e = gtk.Entry() e.show() e.set_text(config.get("altcolor","#FFFFFF")) e.connect("changed",setOpt,None,options,"altcolor",2) e.connect("changed",mayApply,applyBut) e.connect("changed",setBack,e,gtk.STATE_NORMAL) setBack(None,e,gtk.STATE_NORMAL) e.connect("focus-in-event",scrollOnTab,scroll) b = gtk.Button("Choose Color") b.connect("clicked",selColor,e) b.show() row.show() label.show() row.pack_start(label,False,False,2) row.pack_start(e,True,True,2) row.pack_start(b,False,False,2) sw.pack_start(row) row = gtk.HBox() label = gtk.Label("Background color for a changed field after save: ") e = gtk.Entry() e.show() e.set_text(config.get("savecolor","#FFFFFF")) e.connect("changed",setOpt,None,options,"savecolor",2) e.connect("changed",mayApply,applyBut) e.connect("changed",setBack,e,gtk.STATE_NORMAL) setBack(None,e,gtk.STATE_NORMAL) e.connect("focus-in-event",scrollOnTab,scroll) b = gtk.Button("Choose Color") b.connect("clicked",selColor,e) b.show() row.show() label.show() row.pack_start(label,False,False,2) row.pack_start(e,True,True,2) row.pack_start(b,False,False,2) sw.pack_start(row) cb = gtk.CheckButton("Use list files for this realm") cb.set_active(config.get("uselistfile",True)) cb.connect("toggled",setOpt,None,options,"uselistfile",1) cb.connect("toggled",mayApply,applyBut) cb.connect("focus-in-event",scrollOnTab,scroll) cb.show() sw.pack_start(cb) cb = gtk.CheckButton("Use only realm-defined relationships, not free text") cb.set_active(config.get("specialrelsonly",True)) cb.connect("toggled",setOpt,None,options,"specialrelsonly",1) cb.connect("toggled",mayApply,applyBut) cb.connect("focus-in-event",scrollOnTab,scroll) cb.show() sw.pack_start(cb) row = gtk.HBox() row.show() label = gtk.Label("Story List Format:") label.show() row.pack_start(label,False,False,2) c = gtk.combo_box_new_text() selected = -1 options["showstories"] = config.get("showstories","idlist") i = 0 formats = ["idlist","titlelist"] for f in formats: if f == options.get("showstories"): selected = i c.append_text(f) i += 1 c.set_active(selected) c.connect("changed",setOpt,None,options,"showstories",3) c.connect("changed",mayApply,applyBut) c.connect("move-active",setOpt,options,"showstories",3) c.connect("move-active",mayApply,applyBut) c.connect("focus",scrollOnTab,scroll) c.connect("focus-in-event",scrollOnTab,scroll) c.show() row.pack_start(c,False,False,2) sw.pack_start(row) cb = gtk.CheckButton("If only one story, set default Story List value") cb.set_active(config.get("defaultstory",True)) cb.connect("toggled",setOpt,None,options,"defaultstory",1) cb.connect("toggled",mayApply,applyBut) cb.connect("focus-in-event",scrollOnTab,scroll) cb.show() sw.pack_start(cb) ####### >>>>>>> label = gtk.Label("Program-wide Options") label.show() sw.pack_start(label,False,False,7) cb = gtk.CheckButton("Don't store window size/position") cb.set_active(config.get("nowindowstore",False)) cb.connect("toggled",setOpt,None,options,"nowindowstore",1) cb.connect("toggled",mayApply,applyBut) cb.connect("focus-in-event",scrollOnTab,scroll) cb.show() sw.pack_start(cb) cb = gtk.CheckButton("Accept realm-specific options in the config file") cb.set_active(config.get("rlmincfg",False)) cb.connect("toggled",setOpt,None,options,"rlmincfg",1) cb.connect("toggled",mayApply,applyBut) cb.connect("focus-in-event",scrollOnTab,scroll) cb.show() sw.pack_start(cb) cb = gtk.CheckButton("Opening a new person file at startup") cb.set_active(config.get("startnewperson",False)) cb.connect("toggled",setOpt,None,options,"startnewperson",1) cb.connect("toggled",mayApply,applyBut) cb.connect("focus-in-event",scrollOnTab,scroll) cb.show() sw.pack_start(cb) cb = gtk.CheckButton("Allow opening duplicate tabs") cb.set_active(config.get("duplicatetabs",False)) cb.connect("toggled",setOpt,None,options,"duplicatetabs",1) cb.connect("toggled",mayApply,applyBut) cb.connect("focus-in-event",scrollOnTab,scroll) cb.show() sw.pack_start(cb) cb = gtk.CheckButton("Save the active realm file on exit") cb.set_active(config.get("saverealm",False)) cb.connect("toggled",setOpt,None,options,"saverealm",1) cb.connect("toggled",mayApply,applyBut) cb.connect("focus-in-event",scrollOnTab,scroll) cb.show() sw.pack_start(cb) row = gtk.HBox() row.show() label = gtk.Label("Load this realm automatically:") label.show() row.pack_start(label,False,False,2) d = gtk.Label() d.set_text(config.get("loadrealm","")) d.show() row.pack_start(d,True,True,2) but = gtk.Button("Select Realm") but.connect("clicked",chooseRealm,d,options) but.connect("clicked",mayApply,applyBut) but.show() row.pack_start(but,False,False,2) sw.pack_start(row) row = gtk.HBox() row.show() label = gtk.Label("Likerealm handling:") label.show() row.pack_start(label,False,False,2) c = gtk.combo_box_new_text() selected = -1 options["matchlike"] = config.get("matchlike",2) i = 0 formats = ["Keep likerealm and track which options are from where","Keep likerealm and save only options that differ","Save all options and omit likerealm"] for f in formats: if i == options.get("matchlike"): selected = i c.append_text(f) i += 1 if selected != -1: c.set_active(selected) c.connect("changed",setOpt,None,options,"matchlike",1) c.connect("changed",mayApply,applyBut) c.connect("move-active",setOpt,options,"matchlike",1) c.connect("move-active",mayApply,applyBut) c.connect("focus",scrollOnTab,scroll) c.connect("focus-in-event",scrollOnTab,scroll) c.show() row.pack_start(c,False,False,2) sw.pack_start(row) resp = 0 while resp not in [-6,-5]: resp = optbox.run() if resp == -10: t = "Options applied." print t status.push(0,t) copyOpts(options) if options.get("realmname") is not None: updateTitle() options = {} optbox.set_title("Setting Options - %s" % config.get("realmname","Unnamed Realm")) applyBut.set_sensitive(False) if resp == -6: t = "Cancelled" print t status.push(0,t) optbox.destroy() return elif resp == -5: t = "Options accepted." print t status.push(0,t) optbox.destroy() copyOpts(options) if options.get("realmname") is not None: updateTitle() # saveConfig() # saveRealm() return