#!/usr/bin/python import time import sys import os from gtk import * from gnome.ui import * from GDK import * import libglade import paper fields = { 'title' : 'entry' , 'authors': 'entry', 'url': 'entry', 'projecturl': 'entry', 'abstract' : 'text', 'publication': 'entry', 'publisher': 'entry', 'pubtype': 'rbuttons', 'date': 'entry', 'pages': 'entry', 'address': 'entry', 'keywords': 'entry' } rfields = [ 'title' , 'authors', 'url' ] buttons = { 'article' : 'Article' , 'book': 'Book', 'proceedings':'Proceedings', 'phd': 'PhD Thesis' , 'masters':'Masters', 'techreport': 'Tech report', 'manual':'Manual' } vars = { } def selectedbutton(widgets): for b in buttons.keys(): if widgets[b].active: return buttons[b] return None class GladeHandlers: def on_exit_activate(self): mainquit() def on_app_destroy(self): mainquit() def on_about_activate(self): widgets['about'].show() def on_new_clicked(self): for w in fields.keys(): if fields[w] == 'entry': widgets[w].set_text ("") elif fields[w] == 'text': widgets[w].delete_text(0,-1) def on_save_clicked(self): empties = "" for rw in rfields: if widgets[rw].get_text() == "": empties = empties + rw + ", " # Check for missing required fields if empties: print "Missing fields:" + empties return # Get values based on type of field for w in fields.keys(): if fields[w] == "entry": vars[w] = widgets[w].get_text() elif fields[w] == "rbuttons": button = selectedbutton (widgets) vars[w] = button or "" elif fields[w] == "text": vars[w] = widgets[w].get_chars(0, -1) # Convert Date if vars.has_key("date") : try: print vars["date"] # seconds = getdate.getdate (vars["date"]) # date = time.gmtime(seconds) # vars["month"] = time.strftime("%b", date) # vars["year"] = time.strftime("%Y", date) except: print "Badly formed date:"+ vars["date"] +" please try again" return # Do the paper thing paper.newpaper (vars, widgets["copy"].active, widgets["comment"].active, \ widgets["readinglist"].active, widgets["bibtex"].active ) class WidgetsWrapper: def __init__(self): dir = os.path.dirname(sys.argv[0]) gladexml = dir + '/' + 'gtkpaper.glade' self.widgets = libglade.GladeXML(gladexml) self.widgets.signal_autoconnect(GladeHandlers.__dict__) # Gives us the ability to do: widgets['widget_name'].action() def __getitem__(self, key): return self.widgets.get_widget(key) def get_widget_by_longname(self, longname): return self.widgets.get_widget_by_longname(longname) def main(): widgets["copy"].set_active(1) widgets["comment"].set_active(1) widgets["readinglist"].set_active (1) widgets["bibtex"].set_active (1) mainloop() # messagebox = widgets.get_widget_by_longname('reqfields.mbox.message') # messagebox.hide() # print widgets.widgets widgets = WidgetsWrapper() if __name__ == '__main__': main()