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>
|
2007-07-10 Alex Roitman <shura@gramps-project.org>
|
||||||
* src/GrampsDb/_GrampsDbWriteXML.py (write_date): Write datespan.
|
* src/GrampsDb/_GrampsDbWriteXML.py (write_date): Write datespan.
|
||||||
* src/GrampsDbUtils/_ReadXML.py: (start_compound_date): Add new
|
* src/GrampsDbUtils/_ReadXML.py: (start_compound_date): Add new
|
||||||
|
@ -70,6 +70,7 @@ import GrampsDb
|
|||||||
import GrampsDbUtils
|
import GrampsDbUtils
|
||||||
import Config
|
import Config
|
||||||
import Mime
|
import Mime
|
||||||
|
from DdTargets import DdTargets
|
||||||
|
|
||||||
IMPORT_TYPES = (const.app_gramps_xml, const.app_gedcom,
|
IMPORT_TYPES = (const.app_gramps_xml, const.app_gedcom,
|
||||||
const.app_gramps_package, const.app_geneweb,
|
const.app_gramps_package, const.app_geneweb,
|
||||||
@ -144,22 +145,20 @@ class DbManager:
|
|||||||
"""
|
"""
|
||||||
Connects the signals to the buttons on the interface.
|
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.remove.connect('clicked', self.__remove_db)
|
||||||
self.new.connect('clicked', self.__new_db)
|
self.new.connect('clicked', self.__new_db)
|
||||||
self.rename.connect('clicked', self.__rename_db)
|
self.rename.connect('clicked', self.__rename_db)
|
||||||
self.repair.connect('clicked', self.__repair_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.selection.connect('changed', self.__selection_changed)
|
||||||
self.dblist.connect('button-press-event', self.__button_press)
|
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)
|
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):
|
def __button_press(self, obj, event):
|
||||||
"""
|
"""
|
||||||
Checks for a double click event. In the tree view, we want to
|
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:
|
if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
|
||||||
store, node = self.selection.get_selected()
|
store, node = self.selection.get_selected()
|
||||||
|
if not node:
|
||||||
|
return
|
||||||
# don't open a locked file
|
# don't open a locked file
|
||||||
if store.get_value(node, STOCK_COL) == 'gramps-lock':
|
if store.get_value(node, STOCK_COL) == 'gramps-lock':
|
||||||
self.__ask_to_break_lock(store, node)
|
self.__ask_to_break_lock(store, node)
|
||||||
@ -658,6 +659,7 @@ class DbManager:
|
|||||||
|
|
||||||
# Check for Thunar
|
# Check for Thunar
|
||||||
uris = selection.get_uris()
|
uris = selection.get_uris()
|
||||||
|
|
||||||
if uris: # Thunar
|
if uris: # Thunar
|
||||||
drag_value = uris[0]
|
drag_value = uris[0]
|
||||||
elif selection.get_text(): # Nautilus
|
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
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
#
|
#
|
||||||
|
|
||||||
|
"""
|
||||||
|
Provides the basic functionality for a list view
|
||||||
|
"""
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# GTK
|
# GTK
|
||||||
@ -26,7 +30,6 @@
|
|||||||
import gtk
|
import gtk
|
||||||
import pango
|
import pango
|
||||||
import const
|
import const
|
||||||
gtk26 = gtk.pygtk_version >= (2,6,0)
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -48,19 +51,22 @@ NOSORT = -1
|
|||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
class ListModel:
|
class ListModel:
|
||||||
|
|
||||||
def __init__(self,tree,dlist,select_func=None,
|
def __init__(self, tree, dlist, select_func=None, event_func=None,
|
||||||
event_func=None,mode=gtk.SELECTION_SINGLE):
|
mode=gtk.SELECTION_SINGLE):
|
||||||
|
|
||||||
self.tree = tree
|
self.tree = tree
|
||||||
self.tree.set_fixed_height_mode(True)
|
self.tree.set_fixed_height_mode(True)
|
||||||
self.mylist = []
|
self.mylist = []
|
||||||
self.data_index = 0
|
self.data_index = 0
|
||||||
for l in dlist:
|
self.sel_iter = None
|
||||||
if len(l)>3:
|
|
||||||
if l[3] == TOGGLE:
|
for info in dlist:
|
||||||
|
if len(info) > 3:
|
||||||
|
if info[3] == TOGGLE:
|
||||||
self.mylist.append(bool)
|
self.mylist.append(bool)
|
||||||
elif l[3] == IMAGE:
|
elif info[3] == IMAGE:
|
||||||
self.mylist.append(gtk.gdk.Pixbuf)
|
self.mylist.append(gtk.gdk.Pixbuf)
|
||||||
elif l[3] == INTEGER:
|
elif info[3] == INTEGER:
|
||||||
self.mylist.append(int)
|
self.mylist.append(int)
|
||||||
else:
|
else:
|
||||||
self.mylist.append(str)
|
self.mylist.append(str)
|
||||||
@ -78,10 +84,22 @@ class ListModel:
|
|||||||
self.cids = []
|
self.cids = []
|
||||||
self.idmap = {}
|
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
|
cnum = 0
|
||||||
for name in dlist:
|
|
||||||
if not name[2]:
|
for name in [ item for item in dlist if item[2]]:
|
||||||
continue
|
|
||||||
|
|
||||||
if len(name) == 3:
|
if len(name) == 3:
|
||||||
name = (name[0], name[1], name[2], TEXT, False, None)
|
name = (name[0], name[1], name[2], TEXT, False, None)
|
||||||
@ -97,27 +115,13 @@ class ListModel:
|
|||||||
column = gtk.TreeViewColumn(name[0], renderer)
|
column = gtk.TreeViewColumn(name[0], renderer)
|
||||||
column.add_attribute(renderer, 'pixbuf', cnum)
|
column.add_attribute(renderer, 'pixbuf', cnum)
|
||||||
renderer.set_property('height', const.thumbScale/2)
|
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:
|
else:
|
||||||
renderer = gtk.CellRendererText()
|
renderer = gtk.CellRendererText()
|
||||||
renderer.set_fixed_height_from_font(True)
|
renderer.set_fixed_height_from_font(True)
|
||||||
renderer.set_property('ellipsize', pango.ELLIPSIZE_END)
|
renderer.set_property('ellipsize', pango.ELLIPSIZE_END)
|
||||||
if name[5]:
|
if name[5]:
|
||||||
renderer.set_property('editable', True)
|
renderer.set_property('editable', True)
|
||||||
renderer.connect('edited',self.edited_cb, cnum)
|
renderer.connect('edited', self.__edited_cb, cnum)
|
||||||
self.function[cnum] = name[5]
|
self.function[cnum] = name[5]
|
||||||
else:
|
else:
|
||||||
renderer.set_property('editable', False)
|
renderer.set_property('editable', False)
|
||||||
@ -143,26 +147,30 @@ class ListModel:
|
|||||||
if name[0] != '':
|
if name[0] != '':
|
||||||
self.tree.append_column(column)
|
self.tree.append_column(column)
|
||||||
|
|
||||||
self.connect_model()
|
def __edited_cb(self, cell, path, new_text, col):
|
||||||
|
"""
|
||||||
if select_func:
|
Callback executed when the text of the cell renderer has changed
|
||||||
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):
|
|
||||||
self.model[path][col] = new_text
|
self.model[path][col] = new_text
|
||||||
if self.function.has_key(col):
|
if self.function.has_key(col):
|
||||||
self.function[col](int(path), new_text)
|
self.function[col](int(path), new_text)
|
||||||
|
|
||||||
def unselect(self):
|
def unselect(self):
|
||||||
|
"""
|
||||||
|
Removes the selection from the view
|
||||||
|
"""
|
||||||
self.selection.unselect_all()
|
self.selection.unselect_all()
|
||||||
|
|
||||||
def set_reorderable(self, order):
|
def set_reorderable(self, order):
|
||||||
|
"""
|
||||||
|
Enables or disables reordering of data
|
||||||
|
"""
|
||||||
self.tree.set_reorderable(order)
|
self.tree.set_reorderable(order)
|
||||||
|
|
||||||
def new_model(self):
|
def new_model(self):
|
||||||
|
"""
|
||||||
|
Creates a new model instance
|
||||||
|
"""
|
||||||
if self.model:
|
if self.model:
|
||||||
self.cid = self.model.get_sort_column_id()
|
self.cid = self.model.get_sort_column_id()
|
||||||
del self.model
|
del self.model
|
||||||
@ -174,7 +182,10 @@ class ListModel:
|
|||||||
self.selection.set_mode(self.mode)
|
self.selection.set_mode(self.mode)
|
||||||
self.sel_iter = None
|
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)
|
self.tree.set_model(self.model)
|
||||||
if self.sel_iter:
|
if self.sel_iter:
|
||||||
self.selection.select_iter(self.sel_iter)
|
self.selection.select_iter(self.sel_iter)
|
||||||
@ -188,6 +199,9 @@ class ListModel:
|
|||||||
self.sort()
|
self.sort()
|
||||||
|
|
||||||
def sort(self):
|
def sort(self):
|
||||||
|
"""
|
||||||
|
Sorts the current view
|
||||||
|
"""
|
||||||
val = self.model.get_sort_column_id()
|
val = self.model.get_sort_column_id()
|
||||||
col = val[0]
|
col = val[0]
|
||||||
if col < 0:
|
if col < 0:
|
||||||
@ -199,16 +213,25 @@ class ListModel:
|
|||||||
self.model.sort_column_changed()
|
self.model.sort_column_changed()
|
||||||
|
|
||||||
def get_selected(self):
|
def get_selected(self):
|
||||||
|
"""
|
||||||
|
Returns the selected items
|
||||||
|
"""
|
||||||
return self.selection.get_selected()
|
return self.selection.get_selected()
|
||||||
|
|
||||||
def get_row_at(self,x,y):
|
def get_row_at(self, xpos, ypos):
|
||||||
path = self.tree.get_path_at_pos(x,y)
|
"""
|
||||||
|
Returns the row at the specified (x,y) coordinates
|
||||||
|
"""
|
||||||
|
path = self.tree.get_path_at_pos(xpos, ypos)
|
||||||
if path == None:
|
if path == None:
|
||||||
return self.count -1
|
return self.count -1
|
||||||
else:
|
else:
|
||||||
return path[0][0]-1
|
return path[0][0]-1
|
||||||
|
|
||||||
def get_selected_row(self):
|
def get_selected_row(self):
|
||||||
|
"""
|
||||||
|
Gets the selected row number
|
||||||
|
"""
|
||||||
store, node = self.selection.get_selected()
|
store, node = self.selection.get_selected()
|
||||||
if node:
|
if node:
|
||||||
rows = store.get_path(node)
|
rows = store.get_path(node)
|
||||||
@ -240,8 +263,8 @@ class ListModel:
|
|||||||
path = self.model.get_path(mlist[0])
|
path = self.model.get_path(mlist[0])
|
||||||
return self.tree.create_row_drag_icon(path)
|
return self.tree.create_row_drag_icon(path)
|
||||||
|
|
||||||
def blist(self,store,path,node,list):
|
def blist(self, store, path, node, dlist):
|
||||||
list.append(self.model.get_value(node,self.data_index))
|
dlist.append(self.model.get_value(node, self.data_index))
|
||||||
|
|
||||||
def clear(self):
|
def clear(self):
|
||||||
self.count = 0
|
self.count = 0
|
||||||
@ -326,7 +349,10 @@ class ListModel:
|
|||||||
path = model.get_path(node)
|
path = model.get_path(node)
|
||||||
self.tree.scroll_to_cell(path, None, True, 0.5, 0.5)
|
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:
|
if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
|
||||||
self.double_click(obj)
|
self.double_click(obj)
|
||||||
return True
|
return True
|
||||||
|
Loading…
x
Reference in New Issue
Block a user