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

* Code clean up.

* Decerased amount of class methods.
 * Added tags cloud support.
This commit is contained in:
2008-04-24 13:19:13 +00:00
parent e774353a8b
commit 8080ccc7f0

View File

@@ -34,12 +34,8 @@ from os import popen
from utils import deviceHelper from utils import deviceHelper
from gtkmvc import Controller from gtkmvc import Controller
from time import time, ctime
from c_config import ConfigController from c_config import ConfigController
from views.v_config import ConfigView from views.v_config import ConfigView
from c_tags import TagsController
from views.v_tags import TagsView
import views.v_dialogs as Dialogs import views.v_dialogs as Dialogs
@@ -66,6 +62,8 @@ class MainController(Controller):
self.DND_TARGETS = [('files_tags', 0, 69)] self.DND_TARGETS = [('files_tags', 0, 69)]
Controller.__init__(self, model) Controller.__init__(self, model)
self.tag_switched = True self.tag_switched = True
self.hovering = False
self.first = True
return return
def register_view(self, view): def register_view(self, view):
@@ -114,25 +112,19 @@ class MainController(Controller):
self.view['tag_cloud_textview'].drag_dest_set(gtk.DEST_DEFAULT_ALL, self.view['tag_cloud_textview'].drag_dest_set(gtk.DEST_DEFAULT_ALL,
self.DND_TARGETS, self.DND_TARGETS,
gtk.gdk.ACTION_COPY) gtk.gdk.ACTION_COPY)
#ttv.connect('drag_motion', self.on_tag_cloud_textview_drag_motion)
#ttv.connect('drag_drop', self.on_tag_cloud_textview_drag_drop)
# initialize treeviews # initialize treeviews
self.__setup_disc_treeview() self.__setup_disc_treeview()
self.__setup_files_treeview() self.__setup_files_treeview()
self.__setup_exif_treeview() self.__setup_exif_treeview()
# in case passing catalog filename in command line, unlock gui # in case passing catalog filename in command line, unlock gui
if self.model.filename != None: if self.model.filename:
self.__activate_ui(self.model.filename) self.__activate_ui(self.model.filename)
# generate recent menu # generate recent menu
self.__generate_recent_menu() self.__generate_recent_menu()
# initialoze tag cloud
self.__tag_cloud()
# Show main window # Show main window
self.view['main'].show(); self.view['main'].show();
self.view['main'].drag_dest_set(0, [], 0) self.view['main'].drag_dest_set(0, [], 0)
@@ -149,14 +141,13 @@ class MainController(Controller):
iter = filestv.get_iter_at_location(x, y) iter = filestv.get_iter_at_location(x, y)
try: try:
tag = iter.get_tags()[0] tag = iter.get_tags()[0]
#print tag.get_property('name')
self.tag_switched = False self.tag_switched = False
tag.set_property("weight", pango.WEIGHT_BOLD) tag.set_property("weight", pango.WEIGHT_BOLD)
except: except:
if not self.tag_switched: if not self.tag_switched:
self.__tag_cloud() self.__tag_cloud()
pass pass
buff = filestv.get_buffer() #buff = filestv.get_buffer()
#self.__find_tag_in_textview() #self.__find_tag_in_textview()
return True return True
@@ -187,7 +178,7 @@ class MainController(Controller):
tn = self.model.get_tag_by_id(it) tn = self.model.get_tag_by_id(it)
self.model.add_tags(int(id.strip()), tn) self.model.add_tags(int(id.strip()), tn)
except: except:
if selection.data != '': if selection.data:
tags = Dialogs.TagsDialog().run() tags = Dialogs.TagsDialog().run()
if not tags: if not tags:
return return
@@ -195,7 +186,6 @@ class MainController(Controller):
self.model.add_tags(int(id.strip()), tags) self.model.add_tags(int(id.strip()), tags)
self.__tag_cloud() self.__tag_cloud()
print "end", selection.data
def on_edit2_activate(self, menu_item): def on_edit2_activate(self, menu_item):
try: try:
@@ -222,7 +212,7 @@ class MainController(Controller):
image, only_thumbs = Dialogs.LoadImageFile().run() image, only_thumbs = Dialogs.LoadImageFile().run()
if not image: if not image:
return return
try: #try:
selection = self.view['files'].get_selection() selection = self.view['files'].get_selection()
model, list_of_paths = selection.get_selected_rows() model, list_of_paths = selection.get_selected_rows()
for path in list_of_paths: for path in list_of_paths:
@@ -230,11 +220,11 @@ class MainController(Controller):
self.model.add_thumbnail(image, id) self.model.add_thumbnail(image, id)
self.model.unsaved_project = True self.model.unsaved_project = True
self.__set_title(filepath=self.model.filename, modified=True) self.__set_title(filepath=self.model.filename, modified=True)
except: #except:
if __debug__: # if __debug__:
print "c_main.py: on_add_thumb1_activate(): error on getting", # print "c_main.py: on_add_thumb1_activate(): error on getting",
print "selected items or creating thumbnails" # print "selected items or creating thumbnails"
return # return
self.__get_item_info(id) self.__get_item_info(id)
return return
@@ -310,7 +300,7 @@ class MainController(Controller):
if __debug__: if __debug__:
print "c_main.py: on_rename1_activate(): label:", new_name print "c_main.py: on_rename1_activate(): label:", new_name
if new_name != None and new_name != name: if new_name and new_name != name:
self.model.rename(id, new_name) self.model.rename(id, new_name)
self.__set_title(filepath=self.model.filename, modified=True) self.__set_title(filepath=self.model.filename, modified=True)
self.model.unsaved_project = True self.model.unsaved_project = True
@@ -333,7 +323,7 @@ class MainController(Controller):
if __debug__: if __debug__:
print "c_main.py: on_rename1_activate(): label:", new_name print "c_main.py: on_rename1_activate(): label:", new_name
if new_name != None and new_name != name: if new_name and new_name != name:
self.model.rename(fid, new_name) self.model.rename(fid, new_name)
self.__set_title(filepath=self.model.filename, modified=True) self.__set_title(filepath=self.model.filename, modified=True)
@@ -356,15 +346,85 @@ class MainController(Controller):
if w: if w:
w.set_cursor(None) w.set_cursor(None)
def on_clear_clicked(self, w):
self.view['tag_path_box'].hide()
self.model.selected_tags = []
self.model.refresh_discs_tree()
self.on_discs_cursor_changed(w)
self.__tag_cloud()
# NOTE: text view "links" functions
def on_tag_cloud_textview_visibility_notify_event(self, textview, event):
(wx, wy, mod) = textview.window.get_pointer()
(bx, by) = textview.window_to_buffer_coords(gtk.TEXT_WINDOW_WIDGET,
wx, wy)
self.check_hovering(bx, by)
return False
def check_hovering(self, x, y):
"""Check if the mouse is above a tagged link and if yes show
a hand cursor"""
_hovering = False
textview = self.view['tag_cloud_textview']
# get the iter at the mouse position
iter = textview.get_iter_at_location(x, y)
# set _hovering if the iter has the tag "url"
tags = iter.get_tags()
for tag in tags:
_hovering = True
break
# change the global hovering state
if _hovering != self.hovering or self.first == True:
self.first = False
self.hovering = _hovering
# Set the appropriate cursur icon
if self.hovering:
textview.get_window(gtk.TEXT_WINDOW_TEXT).\
set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND2))
else:
textview.get_window(gtk.TEXT_WINDOW_TEXT).\
set_cursor(gtk.gdk.Cursor(gtk.gdk.LEFT_PTR))
def on_tag_cloud_click(self, tag, textview, event, b_iter, data):
"""react on click on connected tag items"""
tag_cloud = self.view['tag_cloud_textview']
if event.type == gtk.gdk.BUTTON_RELEASE:
self.model.add_tag_to_path(tag.get_property('name'))
self.view['tag_path_box'].show()
# fill the path of tag
self.view['tag_path'].set_text('')
temp = self.model.selected_tags.values()
self.model.refresh_discs_tree()
self.on_discs_cursor_changed(textview)
temp.sort()
for tag1 in temp:
txt = self.view['tag_path'].get_text()
if txt == '':
self.view['tag_path'].set_text(tag1)
else:
self.view['tag_path'].set_text(txt + ", " +tag1)
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 # NOTE: quit / close window
def on_main_destroy_event(self, window, event): def on_main_destroy_event(self, window, event):
self.on_quit1_activate(window) self.on_quit_activate(window)
return True return True
def on_tb_quit_clicked(self, widget): def on_quit_activate(self, widget):
self.on_quit1_activate(widget)
def on_quit1_activate(self, widget):
"""Quit and save window parameters to config file""" """Quit and save window parameters to config file"""
# check if any unsaved project is on go. # check if any unsaved project is on go.
if self.model.unsaved_project and \ if self.model.unsaved_project and \
@@ -379,8 +439,7 @@ class MainController(Controller):
gtk.main_quit() gtk.main_quit()
return False return False
def on_new_activate(self, widget):
def on_new1_activate(self, widget):
"""Create new database file""" """Create new database file"""
if self.model.unsaved_project: if self.model.unsaved_project:
if not Dialogs.Qst('Unsaved data - pyGTKtalog', if not Dialogs.Qst('Unsaved data - pyGTKtalog',
@@ -396,9 +455,6 @@ class MainController(Controller):
self.view['description'].set_buffer(buf) self.view['description'].set_buffer(buf)
self.__activate_ui() self.__activate_ui()
def on_tb_new_clicked(self, widget):
self.on_new1_activate(widget)
def on_add_cd_activate(self, widget, label=None, current_id=None): def on_add_cd_activate(self, widget, label=None, current_id=None):
"""Add directory structure from cd/dvd disc""" """Add directory structure from cd/dvd disc"""
mount = deviceHelper.volmount(self.model.config.confd['cd']) mount = deviceHelper.volmount(self.model.config.confd['cd'])
@@ -406,7 +462,7 @@ class MainController(Controller):
guessed_label = deviceHelper.volname(self.model.config.confd['cd']) guessed_label = deviceHelper.volname(self.model.config.confd['cd'])
if not label: if not label:
label = Dialogs.InputDiskLabel(guessed_label).run() label = Dialogs.InputDiskLabel(guessed_label).run()
if label != None: if label:
self.scan_cd = True self.scan_cd = True
for widget in self.widgets_all: for widget in self.widgets_all:
self.view[widget].set_sensitive(False) self.view[widget].set_sensitive(False)
@@ -425,9 +481,6 @@ class MainController(Controller):
"Last mount message:\n%s" % mount) "Last mount message:\n%s" % mount)
return False return False
def on_tb_addcd_clicked(self, widget):
self.on_add_cd_activate(widget)
def on_add_directory1_activate(self, widget, path=None, label=None, def on_add_directory1_activate(self, widget, path=None, label=None,
current_id=None): current_id=None):
"""Show dialog for choose drectory to add from filesystem.""" """Show dialog for choose drectory to add from filesystem."""
@@ -476,18 +529,15 @@ class MainController(Controller):
else: else:
self.view['maintoolbar'].hide() self.view['maintoolbar'].hide()
def on_save1_activate(self, widget): def on_save_activate(self, widget):
"""Save catalog to file""" """Save catalog to file"""
if self.model.filename: if self.model.filename:
self.model.save() self.model.save()
self.__set_title(filepath=self.model.filename) self.__set_title(filepath=self.model.filename)
else: else:
self.on_save_as1_activate(widget) self.on_save_as_activate(widget)
def on_tb_save_clicked(self, widget): def on_save_as_activate(self, widget):
self.on_save1_activate(widget)
def on_save_as1_activate(self, widget):
"""Save database to file under different filename.""" """Save database to file under different filename."""
path = Dialogs.ChooseDBFilename().run() path = Dialogs.ChooseDBFilename().run()
if path: if path:
@@ -514,11 +564,7 @@ class MainController(Controller):
selected_id = self.model.discs_tree.get_value(selected_iter, 0) selected_id = self.model.discs_tree.get_value(selected_iter, 0)
self.on_stat1_activate(menu_item, selected_id) self.on_stat1_activate(menu_item, selected_id)
def on_tb_open_clicked(self, widget): def on_open_activate(self, widget, path=None):
self.on_open1_activate(widget)
return
def on_open1_activate(self, widget, path=None):
"""Open catalog file""" """Open catalog file"""
confirm = self.model.config.confd['confirmabandon'] confirm = self.model.config.confd['confirmabandon']
if self.model.unsaved_project and confirm: if self.model.unsaved_project and confirm:
@@ -538,6 +584,7 @@ class MainController(Controller):
else: else:
self.__generate_recent_menu() self.__generate_recent_menu()
self.__activate_ui(path) self.__activate_ui(path)
self.__tag_cloud()
return return
def on_discs_cursor_changed(self, widget): def on_discs_cursor_changed(self, widget):
@@ -545,11 +592,12 @@ class MainController(Controller):
treeview.""" treeview."""
model = self.view['discs'].get_model() model = self.view['discs'].get_model()
path, column = self.view['discs'].get_cursor() path, column = self.view['discs'].get_cursor()
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.model.get_root_entries(id) self.model.get_root_entries(id)
self.__get_item_info(id) self.__get_item_info(id)
return return
def on_discs_row_activated(self, treeview, path, treecolumn): def on_discs_row_activated(self, treeview, path, treecolumn):
@@ -678,19 +726,11 @@ class MainController(Controller):
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"""
model, paths = treeview.get_selection().get_selected_rows() file_id = self.__get_tv_id_under_cursor(treeview)
try: self.__get_item_info(file_id)
itera = model.get_iter(paths[0])
iter = model.get_iter(treeview.get_cursor()[0])
id = self.model.files_list.get_value(iter, 0)
self.__get_item_info(id)
except:
if __debug__:
print "c_main.py: on_files_cursor_changed() insufficient",
print "iterator"
return return
def on_files_key_release_event(self, a, event): def on_files_key_release_event(self, treeview, event):
if gtk.gdk.keyval_name(event.keyval) == 'BackSpace': if gtk.gdk.keyval_name(event.keyval) == 'BackSpace':
d_path, d_column = self.view['discs'].get_cursor() d_path, d_column = self.view['discs'].get_cursor()
if d_path and d_column: if d_path and d_column:
@@ -702,7 +742,7 @@ class MainController(Controller):
self.view['discs'].set_cursor(model.get_path(parent_iter)) self.view['discs'].set_cursor(model.get_path(parent_iter))
else: else:
# hard way # hard way
f_model = self.view['files'].get_model() f_model = treeview.get_model()
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
@@ -716,11 +756,13 @@ class MainController(Controller):
self.view['discs'].set_cursor(path) self.view['discs'].set_cursor(path)
iter = None iter = None
else: else:
iter = self.model.discs_tree.iter_next() iter = self.model.discs_tree.iter_next(iter)
if gtk.gdk.keyval_name(event.keyval) == 'Delete':
for file_id in self.__get_tv_selection_ids(treeview):
self.main.delete(file_id)
ids = self.__get_tv_selection_ids(self.view['files']) ids = self.__get_tv_selection_ids(self.view['files'])
def on_files_row_activated(self, files_obj, row, column): def on_files_row_activated(self, files_obj, row, column):
"""On directory doubleclick in files listview dive into desired """On directory doubleclick in files listview dive into desired
branch.""" branch."""
@@ -732,7 +774,7 @@ class MainController(Controller):
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()
if d_path!=None: if d_path:
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)
@@ -747,22 +789,19 @@ class MainController(Controller):
new_iter = self.model.discs_tree.iter_next(new_iter) new_iter = self.model.discs_tree.iter_next(new_iter)
return return
def on_cancel1_activate(self, widget):
self.on_cancel_clicked(widget)
def on_cancel_clicked(self, widget): def on_cancel_clicked(self, widget):
"""When scanning thread is runing and user push the cancel button, """When scanning thread is runing and user push the cancel button,
models abort attribute trigger cancelation for scan operation""" models abort attribute trigger cancelation for scan operation"""
self.model.abort = True self.model.abort = True
return return
def on_tb_find_clicked(self, widget): def on_find_activate(self, widget):
# TODO: implement searcher # TODO: implement searcher
return return
# NOTE: recent signal # NOTE: recent signal
def recent_item_response(self, path): def recent_item_response(self, path):
self.on_open1_activate(self, path) self.on_open_activate(self, path)
return return
# NOTE: add tags / images # NOTE: add tags / images
@@ -819,7 +858,6 @@ class MainController(Controller):
self.__get_item_info(id) self.__get_item_info(id)
return return
def on_update1_activate(self, menu_item): def on_update1_activate(self, menu_item):
"""Update disc under cursor position""" """Update disc under cursor position"""
path, column = self.view['discs'].get_cursor() path, column = self.view['discs'].get_cursor()
@@ -831,9 +869,9 @@ class MainController(Controller):
fid = model.get_value(model.get_iter(path), 0) fid = model.get_value(model.get_iter(path), 0)
if self.model.get_source(path) == self.model.CD: if self.model.get_source(path) == self.model.CD:
self.on_add_cd_activate(widget, label, fid) self.on_add_cd_activate(menu_item, label, fid)
elif self.model.get_source(path) == self.model.DR: elif self.model.get_source(path) == self.model.DR:
self.on_add_directory1_activate(widget, filepath, label, fid) self.on_add_directory1_activate(menu_item, filepath, label, fid)
return return
@@ -962,11 +1000,12 @@ class MainController(Controller):
print "abort = %s" % self.model.abort print "abort = %s" % self.model.abort
print "self.model.config.recent = %s" % self.model.config.recent print "self.model.config.recent = %s" % self.model.config.recent
print "source: %s" % self.model.source print "source: %s" % self.model.source
self.__tag_cloud()
##################### #####################
# observed properetis # observed properetis
def property_statusmsg_value_change(self, model, old, new): def property_statusmsg_value_change(self, model, old, new):
if self.statusbar_id != 0: if self.statusbar_id:
self.view['mainStatus'].remove(self.context_id, self.statusbar_id) self.view['mainStatus'].remove(self.context_id, self.statusbar_id)
self.statusbar_id = self.view['mainStatus'].push(self.context_id, self.statusbar_id = self.view['mainStatus'].push(self.context_id,
"%s" % new) "%s" % new)
@@ -1005,12 +1044,12 @@ class MainController(Controller):
######################### #########################
# private class functions # private class functions
def __get_tv_selection_ids(self, treev): 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"""
ids = [] ids = []
try: try:
selection = treev.get_selection() selection = treeview.get_selection()
model, list_of_paths = selection.get_selected_rows() model, list_of_paths = selection.get_selected_rows()
for path in list_of_paths: for path in list_of_paths:
ids.append(model.get_value(model.get_iter(path), 0)) ids.append(model.get_value(model.get_iter(path), 0))
@@ -1022,6 +1061,17 @@ class MainController(Controller):
print "getting selected items" print "getting selected items"
return return
return None return None
def __get_tv_id_under_cursor(self, treeview):
"""get id of item form tree view under cursor"""
path, column = treeview.get_cursor()
if path and column:
model = treeview.get_model()
tm_iter = model.get_iter(path)
item_id = model.get_value(tm_iter, 0)
return item_id
return None
def __setup_disc_treeview(self): def __setup_disc_treeview(self):
"""Setup TreeView discs widget as tree.""" """Setup TreeView discs widget as tree."""
self.view['discs'].set_model(self.model.discs_tree) self.view['discs'].set_model(self.model.discs_tree)
@@ -1076,6 +1126,7 @@ class MainController(Controller):
c.set_sort_column_id(3) c.set_sort_column_id(3)
c.set_resizable(True) c.set_resizable(True)
self.view['files'].append_column(c) self.view['files'].append_column(c)
self.view['files'].set_search_column(1)
#v.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, #v.enable_model_drag_source(gtk.gdk.BUTTON1_MASK,
# self.DND_TARGETS, # self.DND_TARGETS,
@@ -1157,9 +1208,17 @@ class MainController(Controller):
return return
def __get_item_info(self, item): def __get_item_info(self, item):
self.view['description'].show()
set = self.model.get_file_info(item)
buf = gtk.TextBuffer() buf = gtk.TextBuffer()
if not item:
buf.set_text('')
self.view['img_container'].hide()
self.view['exifinfo'].hide()
self.view['thumb_box'].hide()
self.view['description'].set_buffer(buf)
return
#self.view['description'].show()
set = self.model.get_file_info(item)
if __debug__ and 'debug' in set: if __debug__ and 'debug' in set:
tag = buf.create_tag() tag = buf.create_tag()
@@ -1200,6 +1259,15 @@ class MainController(Controller):
buf.insert_with_tags(buf.get_end_iter(), "Note:\n", tag) buf.insert_with_tags(buf.get_end_iter(), "Note:\n", tag)
buf.insert(buf.get_end_iter(), set['note']) buf.insert(buf.get_end_iter(), set['note'])
tags = self.model.get_file_tags(item)
if tags:
buf.insert(buf.get_end_iter(), "\n")
tag = buf.create_tag()
tag.set_property('weight', pango.WEIGHT_BOLD)
buf.insert_with_tags(buf.get_end_iter(), "File tags:\n", tag)
for tag in tags:
buf.insert(buf.get_end_iter(), tags[tag] + ", ")
self.view['description'].set_buffer(buf) self.view['description'].set_buffer(buf)
if 'images' in set: if 'images' in set:
@@ -1223,51 +1291,42 @@ class MainController(Controller):
def __tag_cloud(self): def __tag_cloud(self):
"""generate tag cloud""" """generate tag cloud"""
# TODO: checkit!
self.tag_switched = True self.tag_switched = True
v = self.view['tag_cloud_textview'] tag_cloud = self.view['tag_cloud_textview']
def tag_cloud_click(tag, textview, event, iter, e): self.model.get_tags()
"""react on click on connected tag items"""
if event.type == gtk.gdk.BUTTON_RELEASE:
print tag.get_property('name')
elif event.type == gtk.gdk.MOTION_NOTIFY:
w = v.get_window(gtk.TEXT_WINDOW_TEXT)
if w:
w.set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND2))
else:
w = v.get_window(gtk.TEXT_WINDOW_TEXT)
if w:
w.set_cursor(None)
def insert_blank(b, iter): def insert_blank(buff, b_iter):
if iter.is_end() and iter.is_start(): if b_iter.is_end() and b_iter.is_start():
return iter return b_iter
else: else:
b.insert(iter, " ") buff.insert(b_iter, " ")
iter = b.get_end_iter() b_iter = buff.get_end_iter()
return iter return b_iter
if len(self.model.tag_cloud) > 0: if len(self.model.tag_cloud) > 0:
buff = v.get_buffer() buff = tag_cloud.get_buffer()
#buff = gtk.TextBuffer()
# NOTE: remove old tags # NOTE: remove old tags
tag_table = buff.get_tag_table() tag_table = buff.get_tag_table()
def rem(texttag, data): def rem(texttag, data):
tag_table.remove(texttag) tag_table.remove(texttag)
tag_table.foreach(rem) tag_table.foreach(rem)
tag_table.foreach(rem)
buff.set_text('') buff.set_text('')
for cloud in self.model.tag_cloud: for cloud in self.model.tag_cloud:
iter = insert_blank(buff, buff.get_end_iter()) iter = insert_blank(buff, buff.get_end_iter())
tag = buff.create_tag(str(cloud['id'])) tag = buff.create_tag(str(cloud['id']))
tag.set_property('size-points', cloud['size']) tag.set_property('size-points', cloud['size'])
tag.set_property('foreground', cloud['color']) tag.set_property('foreground', cloud['color'])
tag.set_property("weight", pango.WEIGHT_NORMAL) tag.set_property("weight", pango.WEIGHT_NORMAL)
tag.connect('event', tag_cloud_click, tag) tag.connect('event', self.on_tag_cloud_click, tag)
buff.insert_with_tags(iter, buff.insert_with_tags(iter,
cloud['name'] + "(%d)" % cloud['count'], cloud['name'] + "(%d)" % cloud['count'],
tag) tag)
v.set_buffer(buff) #tag_cloud.set_buffer(buff)
def __find_tag_in_textview(self, widget, x, y): def __find_tag_in_textview(self, widget, x, y):
pass pass