# # Small example of the new GtkUIManager # # Johan Dahlin , 2004 # # Modified to add recent files and gnomevfs # Gustavo Carneiro , 2004 # import pygtk pygtk.require('2.0') import gtk import egg.recent import gnomevfs ui_string = """ """ class Window(gtk.Window): def __init__(self): gtk.Window.__init__(self) self.set_position(gtk.WIN_POS_CENTER) self.set_title('GtkUIManager/RecentViewGtk test app') self.connect('delete-event', self.delete_event_cb) self.set_size_request(400, 200) vbox = gtk.VBox() self.add(vbox) self.create_ui() vbox.pack_start(self.ui.get_widget('/Menubar'), expand=False) vbox.pack_start(self.ui.get_widget('/Toolbar'), expand=False) sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) vbox.pack_start(sw) textview = gtk.TextView() self.buffer = textview.get_buffer() sw.add(textview) status = gtk.Statusbar() vbox.pack_end(status, expand=False) ## Now the important stuff: add recent files model = egg.recent.RecentModel(egg.recent.RECENT_MODEL_SORT_MRU) open = self.ui.get_widget("/ui/Menubar/FileMenu/Open") self.recent = egg.recent.RecentViewGtk(open.parent, open) self.recent.set_model(model) self.recent.connect("activate", self.recent_activate_cb) def recent_activate_cb(self, rview, item): self.load_uri(item.get_uri()) def create_ui(self): ag = gtk.ActionGroup('WindowActions') actions = [ ('FileMenu', None, '_File'), ('New', gtk.STOCK_NEW, '_New', 'N', 'Create a new file', self.file_new_cb), ('Open', gtk.STOCK_OPEN, '_Open', 'O', 'Open a file', self.file_open_cb), ('Close', gtk.STOCK_CLOSE, '_Close', 'W', 'Close the current window', self.file_close_cb), ('Quit', gtk.STOCK_QUIT, '_Quit', 'Q', 'Quit application', self.file_quit_cb), ('HelpMenu', None, '_Help'), ('About', None, '_About', None, 'About application', self.help_about_cb), ] ag.add_actions(actions) self.ui = gtk.UIManager() self.ui.insert_action_group(ag, 0) self.ui.add_ui_from_string(ui_string) self.add_accel_group(self.ui.get_accel_group()) def file_new_cb(self, action): w = Window() w.show_all() gtk.main() def file_open_cb(self, action): dialog = gtk.FileChooserDialog("Open..", self, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK)) dialog.set_default_response(gtk.RESPONSE_OK) dialog.set_local_only(False) filter = gtk.FileFilter() filter.set_name("All files") filter.add_pattern("*") dialog.add_filter(filter) dialog.hide() if dialog.run() == gtk.RESPONSE_OK: self.load_uri(dialog.get_uri()) dialog.destroy() def load_uri(self, uri): self.buffer.set_text(gnomevfs.read_entire_file(uri)) self.recent.get_model().add(uri) def file_close_cb(self, action): self.hide() gtk.main_quit() def file_quit_cb(self, action): raise SystemExit def help_about_cb(self, action): dialog = gtk.MessageDialog(self, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, "Small example of the new GtkUIManger") dialog.run() dialog.destroy() def delete_event_cb(self, window, event): gtk.main_quit() if __name__ == '__main__': w = Window() w.show_all() gtk.main()