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:
parent
5984415471
commit
576c4b705f
@ -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
|
||||
|
@ -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
|
||||
|
108
src/ListModel.py
108
src/ListModel.py
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user