[Xword-commits] r70 - branches/recentlist/usr/bin

terrencegf at garage.maemo.org terrencegf at garage.maemo.org
Wed May 7 23:44:01 EEST 2008


Author: terrencegf
Date: 2008-05-07 23:43:57 +0300 (Wed, 07 May 2008)
New Revision: 70

Modified:
   branches/recentlist/usr/bin/xword
Log:
My first try at a very basic "Recent" file list.  Does not utilize the
gtk.RecentChooser class from GTK+ 2.10.


Modified: branches/recentlist/usr/bin/xword
===================================================================
--- branches/recentlist/usr/bin/xword	2008-05-07 20:37:55 UTC (rev 69)
+++ branches/recentlist/usr/bin/xword	2008-05-07 20:43:57 UTC (rev 70)
@@ -1239,6 +1239,47 @@
     def get_clues(self, mode):
         return []
 
+
+class RecentList:
+    def __init__(self, parent):
+        self.max_entries = 5
+        self.parent = parent
+        self.recent_list = []
+        self.update_menu()
+
+    def add(self,newentry):
+        self.delete(newentry)
+        self.recent_list.insert(0,newentry)
+        if len(self.recent_list) > self.max_entries:
+            del self.recent_list[-1]
+        self.update_menu()
+
+    def delete(self,newentry):
+        if newentry in self.recent_list:
+            try:
+                self.recent_list.remove(newentry)
+                self.update_menu()
+            except ValueError:
+                pass
+
+    def set(self, newlist=[]):
+        self.recent_list = newlist
+        self.update_menu()
+
+    def update_menu(self):
+        for child in self.parent.recent_menu.get_children():
+            self.parent.recent_menu.remove(child)
+        if len(self.recent_list) == 0:
+            emptymenu = gtk.MenuItem('Empty')
+            self.parent.recent_menu.append(emptymenu)
+        else:
+            for item in self.recent_list:
+                m = gtk.MenuItem(item.split(os.sep)[-1])
+                m.connect('activate', self.parent.menu_selected, 'recent', item)
+                self.parent.recent_menu.append(m)
+        self.parent.recent_menu.show_all()
+
+
 class PuzzleWindow:
     def __init__(self, puzzle):
         self.clock_time = 0.0
@@ -1250,6 +1291,9 @@
         if self.puzzle: self.control = PuzzleController(self.puzzle)
         else: self.control = DummyController()
 
+        self.recent_menu = gtk.Menu()
+        self.recent = RecentList(self)
+
         self.skip_filled = False
         self.layout = 0
         self.toolbar_layout = 4
@@ -1337,6 +1381,7 @@
         def enable(w): w.set_property('sensitive', enabled)
         
         enable(self.menu_items['save'])
+        enable(self.menu_items['recent'])
         enable(self.menu_items['properties'])
         if has_print:
             enable(self.menu_items['print'])
@@ -1366,14 +1411,7 @@
             self.notify("%s could not be loaded" % fname)
             return
         self.last_file = fname
-        recent_manager = gtk.recent_manager_get_default()
-        recent_manager.add_full("file://" + fname, {
-            'mime_type': 'application/x-crossword',
-            'app_name': 'xword',
-            'app_exec': os.path.join(sys.path[0], sys.argv[0].split("/")[-1]) + ' %f',
-            'display_name': str(self.puzzle.title),
-            'description': str("\n".join([ self.puzzle.title, self.puzzle.author, self.puzzle.copyright ]))
-            })
+        self.recent.add(fname)
         self.control = PuzzleController(self.puzzle)
         self.setup_controller()
         self.clue_widget.set_controller(self.control)
@@ -1396,7 +1434,7 @@
         try: os.mkdir(dir)
         except OSError: pass
 
-        return dir + '/' + puzzle.hashcode()
+        return dir + os.sep + puzzle.hashcode()
 
     def clear_puzzle(self):
         if self.last_file: self.do_open_file(self.last_file, True)
@@ -1731,7 +1769,9 @@
         file_menu.set_submenu(menu)
 
         append(menu, 'open', create_menu_item('Open', MENU_OPEN, 'O'))
-        append(menu, 'recent', create_menu_item('Open Recent...', 'recent'))
+        item = create_menu_item('Recent', 0)
+        item.set_submenu(self.recent_menu)
+        append(menu, 'recent', item)
         append(menu, 'save', create_menu_item('Save', MENU_SAVE, 'S'))
         if has_print:
             append(menu, 'print', create_menu_item('Print...', MENU_PRINT, 'P'))
@@ -1752,19 +1792,6 @@
         append(menu, 'clear_puzzle', create_menu_item('Clear Puzzle', 'Clear Puzzle'))
         append(menu, 'notepad', create_menu_item('Notepad...', 'notepad'))
 
-        recent_menu = gtk.MenuItem('Recent')
-        menubar.append(recent_menu)
-
-        menu = gtk.RecentChooserMenu()
-        recent_menu.set_submenu(menu)
-
-        menu.set_show_icons(False)
-        menu.set_show_not_found(False)
-        recent_filter = gtk.RecentFilter()
-        recent_filter.add_mime_type('application/x-crossword')
-        menu.set_filter(recent_filter)
-        menu.connect('item-activated', self.recent_selected)
-
         prefs_menu = gtk.MenuItem('Preferences')
         menubar.append(prefs_menu)
             
@@ -1819,7 +1846,7 @@
         self.win.add_accel_group(accel)
         return menubar
 
-    def menu_selected(self, item, action):
+    def menu_selected(self, item, action, extra=None):
         if action == MENU_QUIT:
             self.exit()
         elif action == MENU_CLOSE:
@@ -1829,7 +1856,7 @@
         elif action == MENU_OPEN:
             self.open_file()
         elif action == 'recent':
-            self.open_recent()
+            self.open_recent(extra)
         elif action == MENU_SAVE:
             self.save_file()
         elif action == MENU_PRINT:
@@ -1858,13 +1885,6 @@
             layout = -(action+1)
             if layout <> self.layout: self.set_layout(layout)
 
-    def recent_selected(self, recent_chooser):
-        filename = recent_chooser.get_current_item().get_uri()
-        if filename.startswith('file://'):
-            filename = filename[7:]
-        if file and os.path.exists(filename):
-            self.do_open_file(filename)
-
     def create_toolbar_item(self, label, icon, tooltip, is_toggle=False):
         if icon:
             img = gtk.Image()
@@ -2126,7 +2146,7 @@
             dlg.connect('destroy', lambda w: dlg.destroy())
             dlg.ok_button.connect('clicked', open_cb, dlg)
             dlg.cancel_button.connect('clicked', lambda w: dlg.destroy())
-            if self.default_loc: dlg.set_filename(self.default_loc + '/')
+            if self.default_loc: dlg.set_filename(self.default_loc + os.sep)
             dlg.show()
         else:
             if has_hildon:
@@ -2147,26 +2167,6 @@
             else:
                 dlg.destroy()
 
-    def open_recent(self):
-        dlg = gtk.RecentChooserDialog("Recent Puzzles",
-                                      None,
-                                      None,
-                                      (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
-                                       gtk.STOCK_OPEN, gtk.RESPONSE_OK))
-        dlg.set_show_icons(False)
-        dlg.set_show_not_found(False)
-        recent_filter = gtk.RecentFilter()
-        recent_filter.add_mime_type('application/x-crossword')
-        dlg.set_filter(recent_filter)
-        dlg.set_default_response(gtk.RESPONSE_OK)
-        if self.default_loc: dlg.set_current_folder(self.default_loc)
-
-        response = dlg.run()
-        if response == gtk.RESPONSE_OK:
-            self.recent_selected(dlg)
-
-        dlg.destroy()
-
     def save_file(self):
         def save_cb(w, save_dlg):
             self.do_save_file(save_dlg.get_filename())
@@ -2177,7 +2177,7 @@
             dlg.connect('destroy', lambda w: dlg.destroy())
             dlg.ok_button.connect('clicked', save_cb, dlg)
             dlg.cancel_button.connect('clicked', lambda w: dlg.destroy())
-            if self.default_loc: dlg.set_filename(self.default_loc + '/')
+            if self.default_loc: dlg.set_filename(self.default_loc + os.sep)
             dlg.show()
         else:
             if has_hildon:
@@ -2198,6 +2198,14 @@
             else:
                 dlg.destroy()
 
+    def open_recent(self, filename):
+        if filename != None:
+            if os.path.exists(filename):
+                self.do_open_file(filename)
+            else:
+                self.notify('File not found.')
+                self.recent.delete(filename)
+
     def print_puzzle(self):
         if has_print:
             pr = PuzzlePrinter(self.puzzle)
@@ -2228,6 +2236,8 @@
                 self.last_file = eval(c.get('options', 'last_file'))
             if c.has_option('options', 'min_box_size'):
                 self.min_box_size = c.getint('options', 'min_box_size')
+            if c.has_option('options', 'recent_list'):
+                self.recent.set(eval(c.get('options', 'recent_list')));
 
     def write_config(self):
         c = ConfigParser.ConfigParser()
@@ -2241,6 +2251,7 @@
         c.set('options', 'default_loc', repr(self.default_loc))
         c.set('options', 'last_file', repr(self.last_file))
         c.set('options', 'min_box_size', self.min_box_size)
+        c.set('options', 'recent_list', repr(self.recent.recent_list))
         c.write(file(os.path.expanduser('~/.crossword.cfg'), 'w'))
 
 



More information about the Xword-commits mailing list