2007-07-11 Don Allingham <don@gramps-project.org>

* src/DbManager.py (DbManager.__button_press): check for node == None



svn: r8713
This commit is contained in:
Don Allingham 2007-07-12 04:24:44 +00:00
parent 5984415471
commit 576c4b705f
5 changed files with 292 additions and 261 deletions

View File

@ -1,3 +1,6 @@
2007-07-11 Don Allingham <don@gramps-project.org>
* src/DbManager.py (DbManager.__button_press): check for node == None
2007-07-10 Alex Roitman <shura@gramps-project.org>
* src/GrampsDb/_GrampsDbWriteXML.py (write_date): Write datespan.
* src/GrampsDbUtils/_ReadXML.py: (start_compound_date): Add new

View File

@ -70,6 +70,7 @@ import GrampsDb
import GrampsDbUtils
import Config
import Mime
from DdTargets import DdTargets
IMPORT_TYPES = (const.app_gramps_xml, const.app_gedcom,
const.app_gramps_package, const.app_geneweb,
@ -144,22 +145,20 @@ class DbManager:
"""
Connects the signals to the buttons on the interface.
"""
ddtargets = [ DdTargets.URI_LIST.target() ]
self.top.drag_dest_set(gtk.DEST_DEFAULT_ALL, ddtargets, ACTION_COPY)
self.remove.connect('clicked', self.__remove_db)
self.new.connect('clicked', self.__new_db)
self.rename.connect('clicked', self.__rename_db)
self.repair.connect('clicked', self.__repair_db)
if RCS_FOUND:
self.rcs.connect('clicked', self.__rcs)
self.selection.connect('changed', self.__selection_changed)
self.dblist.connect('button-press-event', self.__button_press)
self.top.drag_dest_set(
gtk.DEST_DEFAULT_ALL,
(('text/plain', 0, 1),
('text/uri-list', 0, 2)),
ACTION_COPY)
self.top.connect('drag_data_received', self.__drag_data_received)
if RCS_FOUND:
self.rcs.connect('clicked', self.__rcs)
def __button_press(self, obj, event):
"""
Checks for a double click event. In the tree view, we want to
@ -168,6 +167,8 @@ class DbManager:
"""
if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
store, node = self.selection.get_selected()
if not node:
return
# don't open a locked file
if store.get_value(node, STOCK_COL) == 'gramps-lock':
self.__ask_to_break_lock(store, node)
@ -658,6 +659,7 @@ class DbManager:
# Check for Thunar
uris = selection.get_uris()
if uris: # Thunar
drag_value = uris[0]
elif selection.get_text(): # Nautilus

View File

@ -18,6 +18,10 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
"""
Provides the basic functionality for a list view
"""
#-------------------------------------------------------------------------
#
# GTK
@ -26,7 +30,6 @@
import gtk
import pango
import const
gtk26 = gtk.pygtk_version >= (2,6,0)
#-------------------------------------------------------------------------
#
@ -48,19 +51,22 @@ NOSORT = -1
#-------------------------------------------------------------------------
class ListModel:
def __init__(self,tree,dlist,select_func=None,
event_func=None,mode=gtk.SELECTION_SINGLE):
def __init__(self, tree, dlist, select_func=None, event_func=None,
mode=gtk.SELECTION_SINGLE):
self.tree = tree
self.tree.set_fixed_height_mode(True)
self.mylist = []
self.data_index = 0
for l in dlist:
if len(l)>3:
if l[3] == TOGGLE:
self.sel_iter = None
for info in dlist:
if len(info) > 3:
if info[3] == TOGGLE:
self.mylist.append(bool)
elif l[3] == IMAGE:
elif info[3] == IMAGE:
self.mylist.append(gtk.gdk.Pixbuf)
elif l[3] == INTEGER:
elif info[3] == INTEGER:
self.mylist.append(int)
else:
self.mylist.append(str)
@ -78,10 +84,22 @@ class ListModel:
self.cids = []
self.idmap = {}
self.__build_columns(dlist)
self.__connect_model()
if select_func:
self.selection.connect('changed', select_func)
if event_func:
self.double_click = event_func
self.tree.connect('event', self.__button_press)
def __build_columns(self, dlist):
"""
Builds the columns based of the data in dlist
"""
cnum = 0
for name in dlist:
if not name[2]:
continue
for name in [ item for item in dlist if item[2]]:
if len(name) == 3:
name = (name[0], name[1], name[2], TEXT, False, None)
@ -97,27 +115,13 @@ class ListModel:
column = gtk.TreeViewColumn(name[0], renderer)
column.add_attribute(renderer, 'pixbuf', cnum)
renderer.set_property('height', const.thumbScale/2)
elif gtk26 and name[3] == COMBO:
store = gtk.ListStore(str)
model = gtk.ListStore(str, object)
for val in name[4]:
model.append((val,store))
self.function[cnum] = name[5]
renderer = gtk.CellRendererCombo()
renderer.set_property('model',model)
renderer.set_property('text_column',0)
renderer.set_fixed_height_from_font(True)
renderer.set_property('editable',True)
renderer.connect('edited',self.edited_cb, cnum)
column = gtk.TreeViewColumn(name[0],renderer,text=cnum)
column.set_reorderable(True)
else:
renderer = gtk.CellRendererText()
renderer.set_fixed_height_from_font(True)
renderer.set_property('ellipsize', pango.ELLIPSIZE_END)
if name[5]:
renderer.set_property('editable', True)
renderer.connect('edited',self.edited_cb, cnum)
renderer.connect('edited', self.__edited_cb, cnum)
self.function[cnum] = name[5]
else:
renderer.set_property('editable', False)
@ -143,26 +147,30 @@ class ListModel:
if name[0] != '':
self.tree.append_column(column)
self.connect_model()
if select_func:
self.selection.connect('changed',select_func)
if event_func:
self.double_click = event_func
self.tree.connect('event',self.button_press)
def edited_cb(self, cell, path, new_text, col):
def __edited_cb(self, cell, path, new_text, col):
"""
Callback executed when the text of the cell renderer has changed
"""
self.model[path][col] = new_text
if self.function.has_key(col):
self.function[col](int(path), new_text)
def unselect(self):
"""
Removes the selection from the view
"""
self.selection.unselect_all()
def set_reorderable(self, order):
"""
Enables or disables reordering of data
"""
self.tree.set_reorderable(order)
def new_model(self):
"""
Creates a new model instance
"""
if self.model:
self.cid = self.model.get_sort_column_id()
del self.model
@ -174,7 +182,10 @@ class ListModel:
self.selection.set_mode(self.mode)
self.sel_iter = None
def connect_model(self):
def __connect_model(self):
"""
Connects the model to the associated tree
"""
self.tree.set_model(self.model)
if self.sel_iter:
self.selection.select_iter(self.sel_iter)
@ -188,6 +199,9 @@ class ListModel:
self.sort()
def sort(self):
"""
Sorts the current view
"""
val = self.model.get_sort_column_id()
col = val[0]
if col < 0:
@ -199,16 +213,25 @@ class ListModel:
self.model.sort_column_changed()
def get_selected(self):
"""
Returns the selected items
"""
return self.selection.get_selected()
def get_row_at(self,x,y):
path = self.tree.get_path_at_pos(x,y)
def get_row_at(self, xpos, ypos):
"""
Returns the row at the specified (x,y) coordinates
"""
path = self.tree.get_path_at_pos(xpos, ypos)
if path == None:
return self.count -1
else:
return path[0][0]-1
def get_selected_row(self):
"""
Gets the selected row number
"""
store, node = self.selection.get_selected()
if node:
rows = store.get_path(node)
@ -240,8 +263,8 @@ class ListModel:
path = self.model.get_path(mlist[0])
return self.tree.create_row_drag_icon(path)
def blist(self,store,path,node,list):
list.append(self.model.get_value(node,self.data_index))
def blist(self, store, path, node, dlist):
dlist.append(self.model.get_value(node, self.data_index))
def clear(self):
self.count = 0
@ -326,7 +349,10 @@ class ListModel:
path = model.get_path(node)
self.tree.scroll_to_cell(path, None, True, 0.5, 0.5)
def button_press(self,obj,event):
def __button_press(self, obj, event):
"""
Called when a button press is executed
"""
if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
self.double_click(obj)
return True