diff options
Diffstat (limited to 'src/fringlib/fringui.py')
-rw-r--r-- | src/fringlib/fringui.py | 61 |
1 files changed, 39 insertions, 22 deletions
diff --git a/src/fringlib/fringui.py b/src/fringlib/fringui.py index ca634d1..a6c606d 100644 --- a/src/fringlib/fringui.py +++ b/src/fringlib/fringui.py @@ -3,7 +3,7 @@ import cairo import sys import os -from fringwalker import FringWalker +from fringwalker import * from fringrenderer import FringRenderer from fringutil import * @@ -37,6 +37,14 @@ ui = """ <separator /> <menuitem action="Quit"/> </menu> + + <menu action="TreeWalker"> + <menuitem action="Python"/> + <menuitem action="Python gnomevfs"/> + <menuitem action="c++"/> + </menu> + + <menu action="View"> <menuitem action="Show Hidden Files"/> <separator /> @@ -56,7 +64,7 @@ ui = """ class UI( gtk.Window ): - def __init__(self, path): + def __init__(self, uri): self.busy_cursor = 0 self.backgroundColour = (1,1,1) self.data = None @@ -67,14 +75,15 @@ class UI( gtk.Window ): # create gui gtk.Window.__init__(self) self.set_title("fring"); - self.__init_gui(path) + self.__init_gui() # walk directory self.walker.connect("list-changed",self.__list_changed) self.walker.connect("finished", self.__walker_finished) - self.open_folder(path) + self.walker.connect("manually-stopped", lambda w: self.__show_busy_cursor(-1)) + self.open_folder(uri) - def __init_gui(self, path): + def __init_gui(self): # create menubar uimanager = gtk.UIManager() @@ -82,6 +91,7 @@ class UI( gtk.Window ): self.add_accel_group(accelgroup) ag_global = gtk.ActionGroup('ag_global') ag_global.add_actions([ + ('TreeWalker', None, "TreeWalker"), ('FRing', None, "_Folder"), ('View', None, "_View"), ('Help', None, "_Help"), @@ -91,12 +101,22 @@ class UI( gtk.Window ): ('Zoom In', gtk.STOCK_ZOOM_IN, "Zoom _In", "<ctrl>Up", "Zoom In", lambda w: self.zoom(w,0.2)), ('Zoom Out', gtk.STOCK_ZOOM_OUT, "Zoom _Out", "<ctrl>Down", "Zoom Out", lambda w: self.zoom(w,-0.2)), ('Save Image...', gtk.STOCK_SAVE_AS, "_Save Image...", None, "Save Image...", self.save_image), - ('Refresh', gtk.STOCK_REFRESH, "_Refresh Tree", "<ctrl>R", "Refresh Tree", lambda w: self.__set_path(self.path)), + ('Refresh', gtk.STOCK_REFRESH, "_Refresh Tree", "<ctrl>R", "Refresh Tree", lambda w: self.__set_uri(self.uri)), ('About', gtk.STOCK_ABOUT, "_About", None, "About", self.about_dialog), ]) action = gtk.ToggleAction("Show Hidden Files", "Show Hidden Files", None, None) + action.set_active(True) action.connect("toggled",self.__hidden_files_toggled) ag_global.add_action(action) + + # add a menu with radio buttons to choose the walking method + ag_global.add_radio_actions([ + ('Python', None, "Python", None, None, WALKER_CLASSIC), + ('Python gnomevfs', None, "Python gnomevfs", None, None, WALKER_GNOMEVFS), + ('c++', None, "c++", None, None, WALKER_CPP), + ], 1) + self.methodaction = ag_global.get_action("c++") + uimanager.insert_action_group(ag_global, 0) uimanager.add_ui_from_string(ui) menubar = uimanager.get_widget('/MenuBar') @@ -113,7 +133,8 @@ class UI( gtk.Window ): b = gtk.FileChooserButton('Select a Folder') b.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER) - b.connect("current-folder-changed", lambda w: self.__set_path(w.get_current_folder())) + b.set_local_only(False) + b.connect("current-folder-changed", lambda w: self.__set_uri(w.get_uri())) toolbar.pack_start( b, True ) self.filechooserbutton = b @@ -155,12 +176,9 @@ class UI( gtk.Window ): self.eventbox.connect("size-allocate",self.__on_resize) self.connect("delete_event", self.close) - - - def open_folder(self,path): - print "open",path + def open_folder(self,uri): # change folder by changing the chooser button - self.filechooserbutton.set_current_folder(path) + self.filechooserbutton.set_current_folder_uri(uri) def about_dialog(self,widget): d = gtk.AboutDialog() @@ -176,7 +194,7 @@ class UI( gtk.Window ): gtk.main_quit() def open_parent(self,widget): - p = os.path.split(self.path) + p = os.path.split(self.uri) p = os.path.join(p[:-1]) self.open_folder(p[0]) @@ -199,10 +217,9 @@ class UI( gtk.Window ): self.renderer.HEIGHT = self.height self.renderer.INNER_RADIUS = self.height/12 self.renderer.RING_RADIUS = self.height/10 - #self.renderer.INNER_RADIUS *= self.zoomfactor self.renderer.RING_RADIUS *= self.zoomfactor self.renderer.RINGS_MAX = 3 - self.renderer.draw_segment(self.ctx, 0, 0, 1, 0, 1, self.data, self.path) + self.renderer.draw_segment(self.ctx, 0, 0, 1, 0, 1, self.data, self.uri) self.image.queue_draw() self.__show_busy_cursor(-1) @@ -225,26 +242,26 @@ class UI( gtk.Window ): #----------------------------------------------------------- private methods - def __set_path(self,path): + def __set_uri(self,uri): """ Set a path and start parsing. Also used to refresh or reset. """ - self.path = path + self.uri = uri self.walker.stop() - if path is None: return - self.walker.walk(path); - self.__show_busy_cursor(1) + if uri: + self.walker.walk(uri,self.methodaction.get_current_value()) + self.__show_busy_cursor(1) def __selectfolder(self,widget): """ Open a dialog to select a folder """ d = gtk.FileChooserDialog(None, self, gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, (gtk.STOCK_CANCEL,0,gtk.STOCK_OK,1)) - if d.run() == 1: self.open_folder(d.get_current_folder()) + if d.run() == 1: self.open_folder(d.get_uri()) d.destroy() def __hidden_files_toggled(self,widget): if self.walker.showhidden == widget.get_active(): return self.walker.showhidden = widget.get_active() - self.__set_path(self.path) + self.__set_uri(self.uri) def __move_event(self, widget, event): |