1
0
mirror of https://github.com/gryf/pygtktalog.git synced 2025-12-17 11:30:19 +01:00

* Clean up TreeStore model for files.

* Added observer variable to main model, so that clicked file id in
   search window can be easly passed to main controller and jump to that
   file.
 * Some cosmetic changes.
This commit is contained in:
2008-05-08 08:45:23 +00:00
parent 1b0d76e6ba
commit 697bd8124c

View File

@@ -22,7 +22,7 @@
# ------------------------------------------------------------------------- # -------------------------------------------------------------------------
__version__ = "0.8" __version__ = "1.0 RC1"
LICENCE = \ LICENCE = \
""" """
GPL v2 GPL v2
@@ -37,6 +37,9 @@ from gtkmvc import Controller
from c_config import ConfigController from c_config import ConfigController
from views.v_config import ConfigView from views.v_config import ConfigView
from c_search import SearchController
from views.v_search import SearchView
import views.v_dialogs as Dialogs import views.v_dialogs as Dialogs
from views.v_image import ImageView from views.v_image import ImageView
@@ -124,7 +127,6 @@ class MainController(Controller):
# generate recent menu # generate recent menu
self.__generate_recent_menu() self.__generate_recent_menu()
self.view['tag_cloud_textview'].connect("populate-popup", self.view['tag_cloud_textview'].connect("populate-popup",
self.on_tag_cloud_textview_popup) self.on_tag_cloud_textview_popup)
# in case model has opened file, register tags # in case model has opened file, register tags
@@ -181,6 +183,8 @@ class MainController(Controller):
return True return True
def on_tag_cloud_textview_event_after(self, textview, event): def on_tag_cloud_textview_event_after(self, textview, event):
"""check, if and what tag user clicked. generate apropriate output
in files treview"""
if event.type != gtk.gdk.BUTTON_RELEASE: if event.type != gtk.gdk.BUTTON_RELEASE:
return False return False
if event.button != 1: if event.button != 1:
@@ -222,6 +226,7 @@ class MainController(Controller):
self.view['tag_path'].set_text(txt + ", " +tag1) self.view['tag_path'].set_text(txt + ", " +tag1)
self.__tag_cloud() self.__tag_cloud()
self.model.get_root_entries() self.model.get_root_entries()
self.__set_files_hiden_columns_visible(True)
self.view['files'].set_model(self.model.files_list) self.view['files'].set_model(self.model.files_list)
self.__hide_details() self.__hide_details()
@@ -409,6 +414,7 @@ class MainController(Controller):
self.view['tag_path_box'].hide() self.view['tag_path_box'].hide()
self.model.selected_tags = [] self.model.selected_tags = []
self.model.refresh_discs_tree() self.model.refresh_discs_tree()
self.__set_files_hiden_columns_visible(False)
# cleanup files and detiles # cleanup files and detiles
try: try:
@@ -464,7 +470,6 @@ class MainController(Controller):
textview.get_window(gtk.TEXT_WINDOW_TEXT).\ textview.get_window(gtk.TEXT_WINDOW_TEXT).\
set_cursor(gtk.gdk.Cursor(gtk.gdk.LEFT_PTR)) set_cursor(gtk.gdk.Cursor(gtk.gdk.LEFT_PTR))
def on_tag_cloud_click(self, tag, textview, event, b_iter, data): def on_tag_cloud_click(self, tag, textview, event, b_iter, data):
"""react on click on connected tag items""" """react on click on connected tag items"""
tag_cloud = self.view['tag_cloud_textview'] tag_cloud = self.view['tag_cloud_textview']
@@ -487,18 +492,8 @@ class MainController(Controller):
self.view['tag_path'].set_text(txt + ", " +tag1) self.view['tag_path'].set_text(txt + ", " +tag1)
self.__tag_cloud() self.__tag_cloud()
#elif event.type == gtk.gdk.MOTION_NOTIFY:
# window = tag_cloud.get_window(gtk.TEXT_WINDOW_TEXT)
# if window:
# window.set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND2))
#else:
# window = tag_cloud.get_window(gtk.TEXT_WINDOW_TEXT)
# if window:
# window.set_cursor(None)
# NOTE: quit / close window
def on_main_destroy_event(self, window, event): def on_main_destroy_event(self, window, event):
"""NOTE: quit / close window signal"""
self.on_quit_activate(window) self.on_quit_activate(window)
return True return True
@@ -688,6 +683,7 @@ class MainController(Controller):
if path: if path:
iter = self.model.discs_tree.get_iter(path) iter = self.model.discs_tree.get_iter(path)
id = self.model.discs_tree.get_value(iter, 0) id = self.model.discs_tree.get_value(iter, 0)
self.__set_files_hiden_columns_visible(False)
self.model.get_root_entries(id) self.model.get_root_entries(id)
self.__get_item_info(id) self.__get_item_info(id)
@@ -917,8 +913,6 @@ class MainController(Controller):
self.view['edit2'].set_sensitive(True) self.view['edit2'].set_sensitive(True)
self.__popup_menu(event, 'files_popup') self.__popup_menu(event, 'files_popup')
return True return True
#if event.button == 1:
# return False
def on_files_cursor_changed(self, treeview): def on_files_cursor_changed(self, treeview):
"""Show details of selected file/directory""" """Show details of selected file/directory"""
@@ -953,11 +947,12 @@ class MainController(Controller):
first_iter = f_model.get_iter_first() first_iter = f_model.get_iter_first()
first_child_value = f_model.get_value(first_iter, 0) first_child_value = f_model.get_value(first_iter, 0)
# get two steps up # get two steps up
val = self.model.get_parent_discs_value(first_child_value) val = self.model.get_parent_id(first_child_value)
parent_value = self.model.get_parent_discs_value(val) parent_value = self.model.get_parent_id(val)
iter = self.model.discs_tree.get_iter_first() iter = self.model.discs_tree.get_iter_first()
while iter: while iter:
current_value = self.model.discs_tree.get_value(iter, 0) current_value = self.model.discs_tree.get_value(iter,
0)
if current_value == parent_value: if current_value == parent_value:
path = self.model.discs_tree.get_path(iter) path = self.model.discs_tree.get_path(iter)
self.view['discs'].set_cursor(path) self.view['discs'].set_cursor(path)
@@ -976,8 +971,9 @@ class MainController(Controller):
f_iter = self.model.files_list.get_iter(row) f_iter = self.model.files_list.get_iter(row)
current_id = self.model.files_list.get_value(f_iter, 0) current_id = self.model.files_list.get_value(f_iter, 0)
if self.model.files_list.get_value(f_iter,4) == 1: if self.model.files_list.get_value(f_iter, 6) == 1:
# ONLY directories. files are omitted. # ONLY directories. files are omitted.
self.__set_files_hiden_columns_visible(False)
self.model.get_root_entries(current_id) self.model.get_root_entries(current_id)
d_path, d_column = self.view['discs'].get_cursor() d_path, d_column = self.view['discs'].get_cursor()
@@ -985,15 +981,16 @@ class MainController(Controller):
if not self.view['discs'].row_expanded(d_path): if not self.view['discs'].row_expanded(d_path):
self.view['discs'].expand_row(d_path, False) self.view['discs'].expand_row(d_path, False)
iter = self.model.discs_tree.get_iter(d_path) discs_model = self.model.discs_tree
new_iter = self.model.discs_tree.iter_children(iter) iterator = discs_model.get_iter(d_path)
new_iter = discs_model.iter_children(iterator)
if new_iter: if new_iter:
while new_iter: while new_iter:
current_value = self.model.discs_tree.get_value(new_iter, 0) current_value = discs_model.get_value(new_iter, 0)
if current_value == current_id: if current_value == current_id:
path = self.model.discs_tree.get_path(new_iter) path = discs_model.get_path(new_iter)
self.view['discs'].set_cursor(path) self.view['discs'].set_cursor(path)
new_iter = self.model.discs_tree.iter_next(new_iter) new_iter = discs_model.iter_next(new_iter)
return return
def on_cancel_clicked(self, widget): def on_cancel_clicked(self, widget):
@@ -1003,7 +1000,10 @@ class MainController(Controller):
return return
def on_find_activate(self, widget): def on_find_activate(self, widget):
# TODO: implement searcher """search button/menu activated. Show search window"""
if not self.model.search_created:
c = SearchController(self.model)
v = SearchView(c)
return return
# NOTE: recent signal # NOTE: recent signal
@@ -1263,10 +1263,45 @@ class MainController(Controller):
print "files have focus", self.view['files'].is_focus() print "files have focus", self.view['files'].is_focus()
print "discs have focus", self.view['discs'].is_focus() print "discs have focus", self.view['discs'].is_focus()
print "images have focus", self.view['images'].is_focus() print "images have focus", self.view['images'].is_focus()
c = self.view['files'].get_column(0)
c.set_visible(not c.get_visible())
c = self.view['files'].get_column(2)
c.set_visible(not c.get_visible())
##################### #####################
# observed properetis # observed properetis
def property_point_value_change(self, model, old, new):
"""File was activated in search window through the observable
property - select it on the discs and files treeview, and get
file description"""
if new:
discs_tree = self.view['discs']
discs_model = discs_tree.get_model()
parent_id = self.model.get_parent_id(new)
def foreach_disctree(model, path, iterator, data):
"""find path in model to desired value"""
if model.get_value(iterator, 0) == data:
discs_tree.expand_to_path(path)
discs_tree.set_cursor(path)
return False
discs_model.foreach(foreach_disctree, parent_id)
files_list = self.view['files']
files_model = files_list.get_model()
def foreach_fileslist(model, path, iterator, data):
"""find path in model to desired value"""
if model.get_value(iterator, 0) == data:
files_list.set_cursor(path)
self.__get_item_info(data)
return False
files_model.foreach(foreach_fileslist, new)
return
def property_statusmsg_value_change(self, model, old, new): def property_statusmsg_value_change(self, model, old, new):
if self.statusbar_id: if self.statusbar_id:
self.view['mainStatus'].remove(self.context_id, self.statusbar_id) self.view['mainStatus'].remove(self.context_id, self.statusbar_id)
@@ -1307,6 +1342,11 @@ class MainController(Controller):
######################### #########################
# private class functions # private class functions
def __set_files_hiden_columns_visible(self, boolean):
"""switch visibility of default hidden columns in files treeview"""
self.view['files'].get_column(0).set_visible(boolean)
self.view['files'].get_column(2).set_visible(boolean)
def __get_tv_selection_ids(self, treeview): def __get_tv_selection_ids(self, treeview):
"""get selection from treeview and return coresponding ids' from """get selection from treeview and return coresponding ids' from
connected model or None""" connected model or None"""
@@ -1369,28 +1409,39 @@ class MainController(Controller):
v.get_selection().set_mode(gtk.SELECTION_MULTIPLE) v.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
c = gtk.TreeViewColumn('Disc', gtk.CellRendererText(), text=1)
c.set_sort_column_id(1)
c.set_resizable(True)
c.set_visible(False)
self.view['files'].append_column(c)
c = gtk.TreeViewColumn('Filename') c = gtk.TreeViewColumn('Filename')
cellpb = gtk.CellRendererPixbuf() cellpb = gtk.CellRendererPixbuf()
cell = gtk.CellRendererText() cell = gtk.CellRendererText()
c.pack_start(cellpb, False) c.pack_start(cellpb, False)
c.pack_start(cell, True) c.pack_start(cell, True)
c.set_attributes(cellpb, stock_id=6) c.set_attributes(cellpb, stock_id=7)
c.set_attributes(cell, text=1) c.set_attributes(cell, text=2)
c.set_sort_column_id(1)
c.set_resizable(True)
self.view['files'].append_column(c)
c = gtk.TreeViewColumn('Size', gtk.CellRendererText(), text=2)
c.set_sort_column_id(2) c.set_sort_column_id(2)
c.set_resizable(True) c.set_resizable(True)
self.view['files'].append_column(c) self.view['files'].append_column(c)
c = gtk.TreeViewColumn('Date', gtk.CellRendererText(), text=3) c = gtk.TreeViewColumn('Path', gtk.CellRendererText(), text=3)
c.set_sort_column_id(3) c.set_sort_column_id(3)
c.set_resizable(True) c.set_resizable(True)
c.set_visible(False)
self.view['files'].append_column(c) self.view['files'].append_column(c)
self.view['files'].set_search_column(1)
c = gtk.TreeViewColumn('Size', gtk.CellRendererText(), text=4)
c.set_sort_column_id(4)
c.set_resizable(True)
self.view['files'].append_column(c)
c = gtk.TreeViewColumn('Date', gtk.CellRendererText(), text=5)
c.set_sort_column_id(5)
c.set_resizable(True)
self.view['files'].append_column(c)
self.view['files'].set_search_column(2)
#v.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, #v.enable_model_drag_source(gtk.gdk.BUTTON1_MASK,
# self.DND_TARGETS, # self.DND_TARGETS,