예제 #1
0
class Logger(gtk.VBox):

	name = "Logger"
	caption = _("Logger")
	caption_label = None
	logs = []
	connected = False


	def __init__(self, app):

		gtk.VBox.__init__(self)
		self.app = app
		self.logs = []
		self.icon_theme = gtk.icon_theme_get_default()
		self.caption_label = TabIconCaption(gtk.STOCK_MISSING_IMAGE, self.caption)

		spacer = gtk.VBox()
		self.add(spacer)
		self.set_border_width(5)

		nav_panel = gtk.HBox()
		nav_panel.set_border_width(0)

		self.rec_but = NavigationButton(gtk.STOCK_MEDIA_RECORD, _('Start recording'))
		nav_panel.pack_start(self.rec_but, False)
		self.rec_but.connect('clicked', self.start_rec)

		self.stop_but = NavigationButton(gtk.STOCK_MEDIA_STOP, _('Stop recording'))
		nav_panel.pack_start(self.stop_but, False)
		self.stop_but.connect('clicked', self.stop_rec)

		separator = gtk.VSeparator()
		nav_panel.pack_start(separator, False)

		self.clear_but = NavigationButton(gtk.STOCK_CLEAR, _('Clear logs'))
		nav_panel.pack_start(self.clear_but, False)
		self.clear_but.connect('clicked', self.clear_logs)

		spacer.pack_start(nav_panel, False)

		self.treeview = gtk.TreeView()

		self.scrolledwindow = gtk.ScrolledWindow()
		self.scrolledwindow.add(self.treeview)
		self.scrolledwindow.set_shadow_type(gtk.SHADOW_ETCHED_IN)
		self.scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
		spacer.pack_end(self.scrolledwindow, True)

		#-------TreeList--------------
		col = gtk.TreeViewColumn()
		col.set_title(_('Log Entries'))
		render_pixbuf = gtk.CellRendererPixbuf()
		col.pack_start(render_pixbuf, expand=False)
		col.add_attribute(render_pixbuf, 'pixbuf', 0)
		render_text = gtk.CellRendererText()
		col.pack_start(render_text, expand=True)
		col.add_attribute(render_text, 'text', 1)
		self.treeview.append_column(col)
		#-----------------------------
		self.treeview.set_rules_hint(True)

		self.show_all()
		self.update_view()

	def update_view(self):
		if config.log_start_record:
			self.rec_but.set_sensitive(False)
			self.stop_but.set_sensitive(True)
			if not self.connected:
				self.set_listener(True)
		else:
			self.rec_but.set_sensitive(True)
			self.stop_but.set_sensitive(False)
			if self.connected:
				self.set_listener(False)

		store = gtk.ListStore(gtk.gdk.Pixbuf, str)
		for log in self.logs:
			log_type, log_text = log
			store.append((self.icon_theme.load_icon(log_icons[log_type], 16, 0), log_text))

		self.treeview.set_model(store)

	def stop_rec(self, *args):
		config.log_start_record = False
		self.update_view()

	def start_rec(self, *args):
		config.log_start_record = True
		self.update_view()

	def clear_logs(self, *args):
		self.logs = []
		self.update_view()

	def set_listener(self, start=True):
		if start:
			events.connect(events.MESSAGES, self.listener)
			self.connected = True
		else:
			events.disconnect(events.MESSAGES, self.listener)
			self.connected = False

	def listener(self, *args):
		args, = args
		self.logs.append(args)
		self.update_view()
예제 #2
0
파일: scripting.py 프로젝트: Scrik/sk1-wx
class ScriptingTool(gtk.VBox):

    name = "Script Launcher"
    caption = _("Script Launcher")
    caption_label = None
    undo = []
    redo = []

    def __init__(self, app, root=''):
        gtk.VBox.__init__(self, False, 0)
        self.mw = app.mw
        self.app = app
        self.caption_label = TabIconCaption(gtk.STOCK_MEDIA_PLAY, self.caption)
        self.root = root

        self.current_dir = "" + config.scr_current_directory

        spacer = gtk.VBox()
        self.add(spacer)
        self.set_border_width(5)

        label = gtk.Label(self.caption.upper())
        spacer.pack_start(label, False)

        separator = gtk.HSeparator()
        spacer.pack_start(separator, False)

        nav_panel = gtk.HBox()
        nav_panel.set_border_width(3)

        self.back_but = NavigationButton(gtk.STOCK_GO_BACK, _('Go Back'))
        nav_panel.pack_start(self.back_but, False)
        self.back_but.connect('clicked', self.action_back)

        self.up_but = NavigationButton(gtk.STOCK_GO_UP, _('Go Up'))
        nav_panel.pack_start(self.up_but, False)
        self.up_but.connect('clicked', self.action_up)

        self.forward_but = NavigationButton(gtk.STOCK_GO_FORWARD,
                                            _('Go Forward'))
        nav_panel.pack_start(self.forward_but, False)
        self.forward_but.connect('clicked', self.action_forward)

        self.home_but = NavigationButton(gtk.STOCK_HOME, _('Home directory'))
        nav_panel.pack_start(self.home_but, False)
        self.home_but.connect('clicked', self.action_home)

        separator = gtk.VSeparator()
        nav_panel.pack_start(separator, False, padding=2)

        self.refr_but = NavigationButton(gtk.STOCK_REFRESH, _('Refresh'))
        nav_panel.pack_start(self.refr_but, False)
        self.refr_but.connect('clicked', self.update_view)

        separator = gtk.VSeparator()
        nav_panel.pack_start(separator, False, padding=2)

        self.find_but = NavigationToggleButton(gtk.STOCK_FIND,
                                               _('Show all files'))
        nav_panel.pack_start(self.find_but, False)
        self.find_but.connect('clicked', self.update_view)

        spacer.pack_start(nav_panel, False)

        self.listmodel = FileListModel()

        self.treeview = gtk.TreeView()

        self.column = gtk.TreeViewColumn()
        self.column.set_title(_('Log Entries'))
        render_pixbuf = gtk.CellRendererPixbuf()
        self.column.pack_start(render_pixbuf, expand=False)
        self.column.add_attribute(render_pixbuf, 'pixbuf', 0)
        render_text = gtk.CellRendererText()
        self.column.pack_start(render_text, expand=True)
        self.column.add_attribute(render_text, 'text', 1)
        self.treeview.append_column(self.column)

        self.treeview.connect('row-activated', self.open_file)

        self.scrolledwindow = gtk.ScrolledWindow()
        self.scrolledwindow.add(self.treeview)
        self.scrolledwindow.set_shadow_type(gtk.SHADOW_ETCHED_IN)
        self.scrolledwindow.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
        spacer.pack_end(self.scrolledwindow, True)

        self.treeview.set_model(self.listmodel)
        self.treeview.set_rules_hint(True)
        events.connect(events.CONFIG_MODIFIED, self.update_by_config)
        self.find_but.set_active(config.scr_show_all_files)
        self.update_view()

    def open_file(self, treeview, path, column):
        model = treeview.get_model()
        pathname = os.path.abspath(model.get_pathname(path))
        if os.path.isdir(pathname):
            self.set_path(pathname)
        else:
            name = os.path.basename(pathname)[:-3]
            path = os.path.dirname(pathname)
            file, filename, desc = imp.find_module(name, [path])
            module = imp.load_module(name, file, filename, desc)
            module.run_script(self.app, self.mw)

    def set_path(self, pathname, undo=False):
        try:
            os.listdir(pathname)
        except:
            msg = _('Access error to')
            msg = "%s '%s'" % (msg, pathname)
            sec = sys.exc_info()[1].__str__()
            dialogs.msg_dialog(self.mw, self.app.appdata.app_name, msg, sec,
                               gtk.MESSAGE_ERROR)
            return

        if undo:
            pass
        else:
            self.undo += [
                self.current_dir,
            ]
        self.current_dir = "" + pathname
        config.scr_current_directory = "" + pathname
        self.update_view()

    def update_view(self, *args):
        path = '' + config.scr_current_directory
        if self.root:
            path = path.replace(self.root, '::')
        self.column.set_title(path)

        filters = [
            'py',
        ]
        config.scr_show_all_files = self.find_but.get_active()
        if self.find_but.get_active():
            filters = []

        new_model = FileListModel(config.scr_current_directory, filters,
                                  config.scr_show_hidden_files, self.root)
        self.treeview.set_model(new_model)

        if self.undo:
            self.back_but.set_sensitive(True)
        else:
            self.back_but.set_sensitive(False)

        if self.redo:
            self.forward_but.set_sensitive(True)
        else:
            self.forward_but.set_sensitive(False)

        self.home_but.set_sensitive(True)
        if self.current_dir == os.path.expanduser('~'):
            self.home_but.set_sensitive(False)
        if self.root and self.current_dir == self.root:
            self.home_but.set_sensitive(False)

        self.up_but.set_sensitive(True)
        if self.root:
            if self.current_dir == self.root:
                self.up_but.set_sensitive(False)
        else:
            if self.current_dir == os.path.abspath(
                    os.path.join(self.current_dir, '..')):
                self.up_but.set_sensitive(False)

    def update_by_config(self, *args):
        attr = args[0][0]
        value = args[0][1]
        if attr[0:3] == 'scr_':
            if attr == 'scr_current_directory' and value == self.current_dir:
                pass
            else:
                self.update_view()

    def action_home(self, *args):
        if self.root:
            self.set_path(self.root)
        else:
            self.set_path(os.path.expanduser('~'))

    def action_up(self, *args):
        path = os.path.abspath(os.path.join(self.current_dir, '..'))
        self.set_path(path)

    def action_back(self, *args):
        if self.undo:
            self.redo.insert(0, self.current_dir)
            path = self.undo[-1]
            self.undo = self.undo[:-1]
            self.set_path(path, True)

    def action_forward(self, *args):
        if self.redo:
            path = self.redo[0]
            self.redo = self.redo[1:]
            self.set_path(path)
예제 #3
0
파일: filebrowser.py 프로젝트: Scrik/sk1-wx
class FileBrowserTool(gtk.VBox):

	name = "File Browser"
	caption = _("File Browser")
	caption_label = None
	undo = []
	redo = []

	def __init__(self, app, root=''):
		gtk.VBox.__init__(self, False, 0)
		self.mw = app.mw
		self.app = app
		self.caption_label = TabIconCaption(gtk.STOCK_HARDDISK, self.caption)
		self.root = root

		self.current_dir = "" + config.fb_current_directory

		spacer = gtk.VBox()
		self.add(spacer)
		self.set_border_width(5)

		nav_panel = gtk.HBox()
		nav_panel.set_border_width(3)

		self.back_but = NavigationButton(gtk.STOCK_GO_BACK, _('Go Back'))
		nav_panel.pack_start(self.back_but, False)
		self.back_but.connect('clicked', self.action_back)

		self.up_but = NavigationButton(gtk.STOCK_GO_UP, _('Go Up'))
		nav_panel.pack_start(self.up_but, False)
		self.up_but.connect('clicked', self.action_up)

		self.forward_but = NavigationButton(gtk.STOCK_GO_FORWARD, _('Go Forward'))
		nav_panel.pack_start(self.forward_but, False)
		self.forward_but.connect('clicked', self.action_forward)

		self.home_but = NavigationButton(gtk.STOCK_HOME, _('Home directory'))
		nav_panel.pack_start(self.home_but, False)
		self.home_but.connect('clicked', self.action_home)

		separator = gtk.VSeparator()
		nav_panel.pack_start(separator, False, padding=2)

		self.refr_but = NavigationButton(gtk.STOCK_REFRESH, _('Refresh'))
		nav_panel.pack_start(self.refr_but, False)
		self.refr_but.connect('clicked', self.update_view)

		separator = gtk.VSeparator()
		nav_panel.pack_start(separator, False, padding=2)

		self.find_but = NavigationToggleButton(gtk.STOCK_FIND, _('Show all files'))
		nav_panel.pack_start(self.find_but, False)
		self.find_but.connect('clicked', self.update_view)


		spacer.pack_start(nav_panel, False)

		self.listmodel = FileListModel()

		self.treeview = gtk.TreeView()

		self.column = gtk.TreeViewColumn()
		self.column.set_title(_('Log Entries'))
		render_pixbuf = gtk.CellRendererPixbuf()
		self.column.pack_start(render_pixbuf, expand=False)
		self.column.add_attribute(render_pixbuf, 'pixbuf', 0)
		render_text = gtk.CellRendererText()
		self.column.pack_start(render_text, expand=True)
		self.column.add_attribute(render_text, 'text', 1)
		self.treeview.append_column(self.column)

		self.treeview.connect('row-activated', self.open_file)

		self.scrolledwindow = gtk.ScrolledWindow()
		self.scrolledwindow.add(self.treeview)
		self.scrolledwindow.set_shadow_type(gtk.SHADOW_ETCHED_IN)
		self.scrolledwindow.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
		spacer.pack_end(self.scrolledwindow, True)

		self.treeview.set_model(self.listmodel)
		self.treeview.set_rules_hint(True)
		events.connect(events.CONFIG_MODIFIED, self.update_by_config)
		self.find_but.set_active(config.fb_show_all_files)
		self.update_view()


	def open_file(self, treeview, path, column):
		model = treeview.get_model()
		pathname = os.path.abspath(model.get_pathname(path))
		if os.path.isdir(pathname):
			self.set_path(pathname)
		else:
			self.app.open(pathname)

	def set_path(self, pathname, undo=False):
		try:
			os.listdir(pathname)
		except:
			msg = _('Access error to')
			msg = "%s '%s'" % (msg, pathname)
			sec = sys.exc_info()[1].__str__()
			dialogs.msg_dialog(self.mw, self.app.appdata.app_name, msg,
							sec, gtk.MESSAGE_ERROR)
			return

		if undo:
			pass
		else:
			self.undo += [self.current_dir, ]
		self.current_dir = "" + pathname
		config.fb_current_directory = "" + pathname
		self.update_view()

	def update_view(self, *args):
		path = '' + config.fb_current_directory
		if self.root:
			path = path.replace(self.root, '::')
		self.column.set_title(path)

		filters = _get_open_filters()
		config.fb_show_all_files = self.find_but.get_active()
		if self.find_but.get_active():
			filters = []

		new_model = FileListModel(config.fb_current_directory,
							filters,
							config.fb_show_hidden_files,
							self.root)
		self.treeview.set_model(new_model)

		if self.undo:
			self.back_but.set_sensitive(True)
		else:
			self.back_but.set_sensitive(False)

		if self.redo:
			self.forward_but.set_sensitive(True)
		else:
			self.forward_but.set_sensitive(False)

		self.home_but.set_sensitive(True)
		if self.current_dir == os.path.expanduser('~'):
			self.home_but.set_sensitive(False)
		if self.root and self.current_dir == self.root:
			self.home_but.set_sensitive(False)

		self.up_but.set_sensitive(True)
		if self.root:
			if self.current_dir == self.root:
				self.up_but.set_sensitive(False)
		else:
			if self.current_dir == os.path.abspath(os.path.join(self.current_dir, '..')):
				self.up_but.set_sensitive(False)

	def update_by_config(self, *args):
		attr = args[0][0]
		value = args[0][1]
		if attr[0:3] == 'fb_':
			if attr == 'fb_current_directory' and value == self.current_dir:
				pass
			else:
				self.update_view()

	def action_home(self, *args):
		if self.root:
			self.set_path(self.root)
		else:
			self.set_path(os.path.expanduser('~'))

	def action_up(self, *args):
		path = os.path.abspath(os.path.join(self.current_dir, '..'))
		self.set_path(path)

	def action_back(self, *args):
		if self.undo:
			self.redo.insert(0, self.current_dir)
			path = self.undo[-1]
			self.undo = self.undo[:-1]
			self.set_path(path, True)

	def action_forward(self, *args):
		if self.redo:
			path = self.redo[0]
			self.redo = self.redo[1:]
			self.set_path(path)
예제 #4
0
class ResourceViewWidget(gtk.VBox):

	name = "Resource View"
	caption = _("Resource View")
	caption_label = None
	undo = []
	redo = []

	def __init__(self, app, presenter):
		gtk.VBox.__init__(self, False, 0)
		self.mw = app.mw
		self.app = app
		self.presenter = presenter

		self.root = self.presenter.doc_presenter.doc_dir

		self.current_dir = "" + self.root

		spacer = gtk.VBox()
		self.add(spacer)
		self.set_border_width(5)

		nav_panel = gtk.HBox()
		nav_panel.set_border_width(0)

		self.back_but = NavigationButton(gtk.STOCK_GO_BACK, _('Go Back'))
		nav_panel.pack_start(self.back_but, False)
		self.back_but.connect('clicked', self.action_back)

		self.up_but = NavigationButton(gtk.STOCK_GO_UP, _('Go Up'))
		nav_panel.pack_start(self.up_but, False)
		self.up_but.connect('clicked', self.action_up)

		self.forward_but = NavigationButton(gtk.STOCK_GO_FORWARD, _('Go Forward'))
		nav_panel.pack_start(self.forward_but, False)
		self.forward_but.connect('clicked', self.action_forward)

		self.home_but = NavigationButton(gtk.STOCK_HOME, _('Home directory'))
		nav_panel.pack_start(self.home_but, False)
		self.home_but.connect('clicked', self.action_home)

		separator = gtk.VSeparator()
		nav_panel.pack_start(separator, False, padding=2)

		self.refr_but = NavigationButton(gtk.STOCK_REFRESH, _('Refresh'))
		nav_panel.pack_start(self.refr_but, False)
		self.refr_but.connect('clicked', self.update_view)


		spacer.pack_start(nav_panel, False)

		self.listmodel = FileListModel()

		self.treeview = gtk.TreeView()

		self.column = gtk.TreeViewColumn()
		self.column.set_title(_('Log Entries'))
		render_pixbuf = gtk.CellRendererPixbuf()
		self.column.pack_start(render_pixbuf, expand=False)
		self.column.add_attribute(render_pixbuf, 'pixbuf', 0)
		render_text = gtk.CellRendererText()
		self.column.pack_start(render_text, expand=True)
		self.column.add_attribute(render_text, 'text', 1)
		self.treeview.append_column(self.column)

		self.treeview.connect('row-activated', self.open_file)

		self.scrolledwindow = gtk.ScrolledWindow()
		self.scrolledwindow.add(self.treeview)
		self.scrolledwindow.set_shadow_type(gtk.SHADOW_ETCHED_IN)
		self.scrolledwindow.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
		spacer.pack_end(self.scrolledwindow, True)

		self.treeview.set_model(self.listmodel)
		self.treeview.set_rules_hint(True)
		self.update_view()


	def open_file(self, treeview, path, column):
		model = treeview.get_model()
		pathname = os.path.abspath(model.get_pathname(path))
		if os.path.isdir(pathname):
			self.set_path(pathname)
		else:
			self.app.external_app_open(pathname)

	def set_path(self, pathname, undo=False):
		try:
			os.listdir(pathname)
		except:
			msg = _('Access error to')
			msg = "%s '%s'" % (msg, pathname)
			sec = sys.exc_info()[1].__str__()
			dialogs.msg_dialog(self.mw, self.app.appdata.app_name, msg,
							sec, gtk.MESSAGE_ERROR)
			return

		if undo:
			pass
		else:
			self.undo += [self.current_dir, ]
		self.current_dir = "" + pathname
		self.update_view()

	def update_view(self, *args):
		path = self.current_dir
		if self.root:
			path = path.replace(self.root, '::')
		self.column.set_title(path)

		new_model = FileListModel(self.current_dir,
							[],
							True,
							self.root)
		self.treeview.set_model(new_model)

		if self.undo:
			self.back_but.set_sensitive(True)
		else:
			self.back_but.set_sensitive(False)

		if self.redo:
			self.forward_but.set_sensitive(True)
		else:
			self.forward_but.set_sensitive(False)

		self.home_but.set_sensitive(True)
		if self.current_dir == os.path.expanduser('~'):
			self.home_but.set_sensitive(False)
		if self.root and self.current_dir == self.root:
			self.home_but.set_sensitive(False)

		self.up_but.set_sensitive(True)
		if self.root:
			if self.current_dir == self.root:
				self.up_but.set_sensitive(False)
		else:
			if self.current_dir == os.path.abspath(os.path.join(self.current_dir, '..')):
				self.up_but.set_sensitive(False)

	def action_home(self, *args):
		if self.root:
			self.set_path(self.root)
		else:
			self.set_path(os.path.expanduser('~'))

	def action_up(self, *args):
		path = os.path.abspath(os.path.join(self.current_dir, '..'))
		self.set_path(path)

	def action_back(self, *args):
		if self.undo:
			self.redo.insert(0, self.current_dir)
			path = self.undo[-1]
			self.undo = self.undo[:-1]
			self.set_path(path, True)

	def action_forward(self, *args):
		if self.redo:
			path = self.redo[0]
			self.redo = self.redo[1:]
			self.set_path(path)
예제 #5
0
class ResourceViewWidget(gtk.VBox):

	name = "Resource View"
	caption = _("Resource View")
	caption_label = None
	undo = []
	redo = []

	def __init__(self, app, presenter):
		gtk.VBox.__init__(self, False, 0)
		self.mw = app.mw
		self.app = app
		self.presenter = presenter

		self.root = self.presenter.doc_presenter.doc_dir

		self.current_dir = "" + self.root

		spacer = gtk.VBox()
		self.add(spacer)
		self.set_border_width(5)

		nav_panel = gtk.HBox()
		nav_panel.set_border_width(0)

		self.back_but = NavigationButton(gtk.STOCK_GO_BACK, _('Go Back'))
		nav_panel.pack_start(self.back_but, False)
		self.back_but.connect('clicked', self.action_back)

		self.up_but = NavigationButton(gtk.STOCK_GO_UP, _('Go Up'))
		nav_panel.pack_start(self.up_but, False)
		self.up_but.connect('clicked', self.action_up)

		self.forward_but = NavigationButton(gtk.STOCK_GO_FORWARD, _('Go Forward'))
		nav_panel.pack_start(self.forward_but, False)
		self.forward_but.connect('clicked', self.action_forward)

		self.home_but = NavigationButton(gtk.STOCK_HOME, _('Home directory'))
		nav_panel.pack_start(self.home_but, False)
		self.home_but.connect('clicked', self.action_home)

		separator = gtk.VSeparator()
		nav_panel.pack_start(separator, False, padding=2)

		self.refr_but = NavigationButton(gtk.STOCK_REFRESH, _('Refresh'))
		nav_panel.pack_start(self.refr_but, False)
		self.refr_but.connect('clicked', self.update_view)


		spacer.pack_start(nav_panel, False)

		self.listmodel = FileListModel()

		self.treeview = gtk.TreeView()

		self.column = gtk.TreeViewColumn()
		self.column.set_title(_('Log Entries'))
		render_pixbuf = gtk.CellRendererPixbuf()
		self.column.pack_start(render_pixbuf, expand=False)
		self.column.add_attribute(render_pixbuf, 'pixbuf', 0)
		render_text = gtk.CellRendererText()
		self.column.pack_start(render_text, expand=True)
		self.column.add_attribute(render_text, 'text', 1)
		self.treeview.append_column(self.column)

		self.treeview.connect('row-activated', self.open_file)

		self.scrolledwindow = gtk.ScrolledWindow()
		self.scrolledwindow.add(self.treeview)
		self.scrolledwindow.set_shadow_type(gtk.SHADOW_ETCHED_IN)
		self.scrolledwindow.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
		spacer.pack_end(self.scrolledwindow, True)

		self.treeview.set_model(self.listmodel)
		self.treeview.set_rules_hint(True)
		self.update_view()


	def open_file(self, treeview, path, column):
		model = treeview.get_model()
		pathname = os.path.abspath(model.get_pathname(path))
		if os.path.isdir(pathname):
			self.set_path(pathname)
		else:
			self.app.external_app_open(pathname)

	def set_path(self, pathname, undo=False):
		try:
			os.listdir(pathname)
		except:
			msg = _('Access error to')
			msg = "%s '%s'" % (msg, pathname)
			sec = sys.exc_info()[1].__str__()
			dialogs.msg_dialog(self.mw, self.app.appdata.app_name, msg,
							sec, gtk.MESSAGE_ERROR)
			return

		if undo:
			pass
		else:
			self.undo += [self.current_dir, ]
		self.current_dir = "" + pathname
		self.update_view()

	def update_view(self, *args):
		path = '' + self.current_dir
		if self.root:
			path = path.replace(self.root, '::')
		self.column.set_title(path)

		new_model = FileListModel(self.current_dir,
							[],
							True,
							self.root)
		self.treeview.set_model(new_model)

		if self.undo:
			self.back_but.set_sensitive(True)
		else:
			self.back_but.set_sensitive(False)

		if self.redo:
			self.forward_but.set_sensitive(True)
		else:
			self.forward_but.set_sensitive(False)

		self.home_but.set_sensitive(True)
		if self.current_dir == os.path.expanduser('~'):
			self.home_but.set_sensitive(False)
		if self.root and self.current_dir == self.root:
			self.home_but.set_sensitive(False)

		self.up_but.set_sensitive(True)
		if self.root:
			if self.current_dir == self.root:
				self.up_but.set_sensitive(False)
		else:
			if self.current_dir == os.path.abspath(os.path.join(self.current_dir, '..')):
				self.up_but.set_sensitive(False)

	def action_home(self, *args):
		if self.root:
			self.set_path(self.root)
		else:
			self.set_path(os.path.expanduser('~'))

	def action_up(self, *args):
		path = os.path.abspath(os.path.join(self.current_dir, '..'))
		self.set_path(path)

	def action_back(self, *args):
		if self.undo:
			self.redo.insert(0, self.current_dir)
			path = self.undo[-1]
			self.undo = self.undo[:-1]
			self.set_path(path, True)

	def action_forward(self, *args):
		if self.redo:
			path = self.redo[0]
			self.redo = self.redo[1:]
			self.set_path(path)