* src/AddMedia.py: relative path support
* src/AddrEdit.py: add DisplayTab support * src/DdTargets.py: repository references support * src/DisplayTabs.py: repository reference support * src/EditMedia.py: save support * src/EditSource.py: save support * src/ImageSelect.py: remove unused stuff * src/Sources.py: use object instead of gobject.TYPE_PYOBJECT * src/Utils.py: relative path calculator * src/ViewManager.py: change cwd to directory of the file so that relative paths work * src/edit_person.glade: fix size * src/gramps.glade: add relative path indicator * src/GrampsDb/_ReadGedcom.py: remove useless compare svn: r5883
This commit is contained in:
parent
9393b15589
commit
388b3bad33
16
ChangeLog
16
ChangeLog
@ -1,3 +1,19 @@
|
||||
2006-02-04 Don Allingham <don@gramps-project.org>
|
||||
* src/AddMedia.py: relative path support
|
||||
* src/AddrEdit.py: add DisplayTab support
|
||||
* src/DdTargets.py: repository references support
|
||||
* src/DisplayTabs.py: repository reference support
|
||||
* src/EditMedia.py: save support
|
||||
* src/EditSource.py: save support
|
||||
* src/ImageSelect.py: remove unused stuff
|
||||
* src/Sources.py: use object instead of gobject.TYPE_PYOBJECT
|
||||
* src/Utils.py: relative path calculator
|
||||
* src/ViewManager.py: change cwd to directory of the file so that
|
||||
relative paths work
|
||||
* src/edit_person.glade: fix size
|
||||
* src/gramps.glade: add relative path indicator
|
||||
* src/GrampsDb/_ReadGedcom.py: remove useless compare
|
||||
|
||||
2006-02-03 Don Allingham <don@gramps-project.org>
|
||||
* src/AttrEdit.py: use DisplayTabs
|
||||
* src/NameEdit.py: use DisplayTabs
|
||||
|
@ -86,6 +86,7 @@ class AddMediaObject:
|
||||
self.file_text = self.glade.get_widget("fname")
|
||||
self.internal = self.glade.get_widget('internal')
|
||||
self.internal.connect('toggled',self.internal_toggled)
|
||||
self.relpath = self.glade.get_widget('relpath')
|
||||
self.temp_name = ""
|
||||
self.object = None
|
||||
|
||||
@ -118,6 +119,12 @@ class AddMediaObject:
|
||||
mobj.set_mime_type(None)
|
||||
else:
|
||||
filename = self.file_text.get_filename()
|
||||
|
||||
if self.relpath.get_active():
|
||||
p = self.db.get_save_path()
|
||||
if not os.path.isdir(p):
|
||||
p = os.path.dirname(p)
|
||||
filename = Utils.relative_path(filename,p)
|
||||
|
||||
if os.path.exists(filename) == 0:
|
||||
msgstr = _("Cannot import %s")
|
||||
|
@ -31,7 +31,6 @@ mechanism for the user to edit address information.
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gettext import gettext as _
|
||||
import gc
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -56,6 +55,7 @@ import DisplayState
|
||||
import Spell
|
||||
|
||||
from WindowUtils import GladeIf
|
||||
from DisplayTabs import *
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -103,26 +103,14 @@ class AddressEditor(DisplayState.ManagedWindow):
|
||||
self.postal.set_editable(not self.db.readonly)
|
||||
self.phone = self.top.get_widget("phone")
|
||||
self.phone.set_editable(not self.db.readonly)
|
||||
self.note_field = self.top.get_widget("addr_note")
|
||||
self.note_field.set_editable(not self.db.readonly)
|
||||
self.spell = Spell.Spell(self.note_field)
|
||||
self.priv = self.top.get_widget("priv")
|
||||
self.priv.set_sensitive(not self.db.readonly)
|
||||
self.slist = self.top.get_widget("slist")
|
||||
self.sources_label = self.top.get_widget("sources_tab")
|
||||
self.notes_label = self.top.get_widget("note_tab")
|
||||
self.general_label = self.top.get_widget("general_tab")
|
||||
self.flowed = self.top.get_widget("addr_flowed")
|
||||
self.flowed.set_sensitive(not self.db.readonly)
|
||||
self.preform = self.top.get_widget("addr_preform")
|
||||
self.preform.set_sensitive(not self.db.readonly)
|
||||
|
||||
title_label = self.top.get_widget("title")
|
||||
|
||||
Utils.set_titles(self.window,title_label,_('Address Editor'))
|
||||
|
||||
if self.addr:
|
||||
self.srcreflist = self.addr.get_source_references()
|
||||
self.addr_date_obj = RelLib.Date(self.addr.get_date_object())
|
||||
self.addr_start.set_text(DateHandler.get_date(self.addr))
|
||||
self.street.set_text(self.addr.get_street())
|
||||
@ -132,29 +120,9 @@ class AddressEditor(DisplayState.ManagedWindow):
|
||||
self.postal.set_text(self.addr.get_postal_code())
|
||||
self.phone.set_text(self.addr.get_phone())
|
||||
self.priv.set_active(self.addr.get_privacy())
|
||||
if self.addr.get_note():
|
||||
self.note_field.get_buffer().set_text(self.addr.get_note())
|
||||
Utils.bold_label(self.notes_label)
|
||||
if addr.get_note_format() == 1:
|
||||
self.preform.set_active(1)
|
||||
else:
|
||||
self.flowed.set_active(1)
|
||||
Utils.bold_label(self.general_label)
|
||||
else:
|
||||
Utils.unbold_label(self.sources_label)
|
||||
Utils.bold_label(self.general_label)
|
||||
else:
|
||||
Utils.unbold_label(self.general_label)
|
||||
self.addr_date_obj = RelLib.Date()
|
||||
self.srcreflist = []
|
||||
self.addr = RelLib.Address()
|
||||
self.switch_page()
|
||||
|
||||
self.sourcetab = Sources.SourceTab(
|
||||
self.dbstate, self.uistate, self.track,
|
||||
self.srcreflist, self, self.top, self.window, self.slist,
|
||||
self.top.get_widget('add_src'), self.top.get_widget('edit_src'),
|
||||
self.top.get_widget('del_src'), self.db.readonly)
|
||||
|
||||
date_stat = self.top.get_widget("date_stat")
|
||||
date_stat.set_sensitive(not self.db.readonly)
|
||||
@ -167,21 +135,45 @@ class AddressEditor(DisplayState.ManagedWindow):
|
||||
okbtn = self.top.get_widget('button121')
|
||||
okbtn.set_sensitive(not self.db.readonly)
|
||||
self.gladeif.connect('button129','clicked',self.on_help_clicked)
|
||||
self.gladeif.connect('notebook2','switch_page',self.on_switch_page)
|
||||
|
||||
self.window.set_transient_for(self.parent_window)
|
||||
self.window.show()
|
||||
self._create_tabbed_pages()
|
||||
|
||||
self.show()
|
||||
|
||||
def _add_page(self,page):
|
||||
self.notebook.insert_page(page)
|
||||
self.notebook.set_tab_label(page,page.get_tab_widget())
|
||||
return page
|
||||
|
||||
def _create_tabbed_pages(self):
|
||||
"""
|
||||
Creates the notebook tabs and inserts them into the main
|
||||
window.
|
||||
|
||||
"""
|
||||
|
||||
vbox = self.top.get_widget('vbox')
|
||||
|
||||
self.notebook = gtk.Notebook()
|
||||
|
||||
self.srcref_list = self._add_page(SourceEmbedList(
|
||||
self.dbstate,self.uistate, self.track,
|
||||
self.addr.source_list))
|
||||
self.note_tab = self._add_page(NoteTab(
|
||||
self.dbstate, self.uistate, self.track,
|
||||
self.addr.get_note_object()))
|
||||
|
||||
self.notebook.show_all()
|
||||
vbox.pack_start(self.notebook,True)
|
||||
|
||||
def on_delete_event(self,obj,b):
|
||||
self.gladeif.close()
|
||||
self.close()
|
||||
gc.collect()
|
||||
|
||||
def close_window(self,obj):
|
||||
self.gladeif.close()
|
||||
self.close()
|
||||
self.window.destroy()
|
||||
gc.collect()
|
||||
self.close()
|
||||
|
||||
def build_menu_names(self,obj):
|
||||
return (_('Address'),_('Address Editor'))
|
||||
@ -204,12 +196,11 @@ class AddressEditor(DisplayState.ManagedWindow):
|
||||
postal = unicode(self.postal.get_text())
|
||||
b = self.note_field.get_buffer()
|
||||
note = unicode(b.get_text(b.get_start_iter(),b.get_end_iter(),False))
|
||||
format = self.preform.get_active()
|
||||
priv = self.priv.get_active()
|
||||
|
||||
self.addr.set_source_reference_list(self.srcreflist)
|
||||
|
||||
self.update(date_obj,street,city,state,country,postal,phone,note,format,priv)
|
||||
self.update(date_obj,street,city,state,country,postal,phone,priv)
|
||||
self.callback(self.addr)
|
||||
self.close_window(obj)
|
||||
|
||||
@ -219,7 +210,7 @@ class AddressEditor(DisplayState.ManagedWindow):
|
||||
if get() != data:
|
||||
set(data)
|
||||
|
||||
def update(self,date_obj,street,city,state,country,postal,phone,note,format,priv):
|
||||
def update(self,date_obj,street,city,state,country,postal,phone,priv):
|
||||
"""Compares the data items, and updates if necessary"""
|
||||
|
||||
if not self.addr.get_date_object().is_equal(date_obj):
|
||||
@ -234,16 +225,3 @@ class AddressEditor(DisplayState.ManagedWindow):
|
||||
self.check(self.addr.get_note,self.addr.set_note,note)
|
||||
self.check(self.addr.get_note_format,self.addr.set_note_format,format)
|
||||
self.check(self.addr.get_privacy,self.addr.set_privacy,priv)
|
||||
|
||||
def on_switch_page(self,obj,a,page):
|
||||
self.switch_page()
|
||||
|
||||
def switch_page(self):
|
||||
buf = self.note_field.get_buffer()
|
||||
start = buf.get_start_iter()
|
||||
stop = buf.get_end_iter()
|
||||
text = unicode(buf.get_text(start,stop,False))
|
||||
if text:
|
||||
Utils.bold_label(self.notes_label)
|
||||
else:
|
||||
Utils.unbold_label(self.notes_label)
|
||||
|
@ -103,6 +103,7 @@ class _DdTargets(object):
|
||||
self.ATTRIBUTE = _DdType(self,'pattr')
|
||||
self.ADDRESS = _DdType(self,'paddr')
|
||||
self.SOURCEREF = _DdType(self,'srcref')
|
||||
self.REPOREF = _DdType(self,'reporef')
|
||||
self.NAME = _DdType(self,'name')
|
||||
self.MEDIAOBJ = _DdType(self,'mediaobj')
|
||||
self.DATA = _DdType(self,'data_tuple')
|
||||
|
@ -537,7 +537,7 @@ class EventEmbedList(EmbeddedList):
|
||||
|
||||
_column_names = [
|
||||
(_('Type'),0,100),
|
||||
(_('Description'),1,200),
|
||||
(_('Description'),1,175),
|
||||
(_('ID'),2, 60),
|
||||
(_('Date'),3, 150),
|
||||
(_('Place'),4, 140),
|
||||
@ -1103,6 +1103,61 @@ class SourceEmbedList(EmbeddedList):
|
||||
self.changed = True
|
||||
self.rebuild()
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# RepoEmbedList
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class RepoEmbedList(EmbeddedList):
|
||||
|
||||
_HANDLE_COL = 4
|
||||
_DND_TYPE = DdTargets.REPOREF
|
||||
|
||||
_column_names = [
|
||||
(_('ID'), 0, 75),
|
||||
(_('Title'), 1, 200),
|
||||
(_('Call Number'), 2, 125),
|
||||
(_('Type'), 3, 100),
|
||||
]
|
||||
|
||||
def __init__(self,dbstate,uistate,track,obj):
|
||||
self.obj = obj
|
||||
EmbeddedList.__init__(self, dbstate, uistate, track,
|
||||
_('Repositories'), RepoRefModel)
|
||||
|
||||
def get_icon_name(self):
|
||||
return 'gramps-repository'
|
||||
|
||||
def get_data(self):
|
||||
return self.obj
|
||||
|
||||
def column_order(self):
|
||||
return ((1,0),(1,1),(1,2),(1,3))
|
||||
|
||||
def add_button_clicked(self,obj):
|
||||
from RepositoryRefEdit import RepositoryRefEdit
|
||||
|
||||
ref = RelLib.RepositoryRef()
|
||||
RepositoryRefEdit.RepositoryRefEdit(
|
||||
self.dbstate, self.uistate, self.track, ref, self.add_callback)
|
||||
|
||||
def add_callback(self,obj):
|
||||
self.get_data().append(name)
|
||||
self.changed = True
|
||||
self.rebuild()
|
||||
|
||||
def edit_button_clicked(self,obj):
|
||||
from RepositoryRefEdit import RepositoryRefEdit
|
||||
|
||||
ref = self.get_selected()
|
||||
if ref:
|
||||
RepositoryRefEdit.RepositoryRefEdit(
|
||||
self.dbstate, self.uistate, self.track, ref, self.edit_callback)
|
||||
|
||||
def edit_callback(self,name):
|
||||
self.changed = True
|
||||
self.rebuild()
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# ChildModel
|
||||
@ -1256,7 +1311,7 @@ class EventRefModel(gtk.ListStore):
|
||||
if t == RelLib.EventRef.CUSTOM:
|
||||
return v
|
||||
else:
|
||||
return Utils.event_roles[t]
|
||||
return Utils.event_roles.get(t,"error %d" % t)
|
||||
|
||||
def column_date(self,event_ref):
|
||||
event = self.db.get_event_from_handle(event_ref.ref)
|
||||
@ -1378,7 +1433,7 @@ class DataModel(gtk.ListStore):
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# DataModel
|
||||
# SourceRefModel
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class SourceRefModel(gtk.ListStore):
|
||||
@ -1393,7 +1448,30 @@ class SourceRefModel(gtk.ListStore):
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# SourceBacRefModel
|
||||
# RepoRefModel
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class RepoRefModel(gtk.ListStore):
|
||||
|
||||
def __init__(self,ref_list,db):
|
||||
gtk.ListStore.__init__(self,str,str,str,str,object)
|
||||
self.db = db
|
||||
for ref in ref_list:
|
||||
repo = self.db.get_repository_from_handle(ref.ref)
|
||||
self.append(row=[repo.gramps_id, repo.name, ref.call_number,
|
||||
self.type_of(repo), ref,])
|
||||
|
||||
def type_of(self,ref):
|
||||
v,s = ref.get_type()
|
||||
|
||||
if v == RelLib.RepoRef.CUSTOM:
|
||||
return unicode(s)
|
||||
else:
|
||||
return Utils.source_media_types.get(v,"error %s" % v)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# SourceBackRefModel
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class SourceBackRefModel(gtk.ListStore):
|
||||
|
@ -196,11 +196,10 @@ class EditMedia(DisplayState.ManagedWindow):
|
||||
self.change_dialog.get_widget("path").set_text(fname)
|
||||
|
||||
def on_apply_clicked(self, obj):
|
||||
t = self.notes.get_buffer()
|
||||
text = unicode(t.get_text(t.get_start_iter(),t.get_end_iter(),False))
|
||||
desc = unicode(self.descr_window.get_text())
|
||||
note = self.obj.get_note()
|
||||
path = self.change_dialog.get_widget('path').get_text()
|
||||
|
||||
if path != self.obj.get_path():
|
||||
mime = GrampsMime.get_type(path)
|
||||
self.obj.set_mime_type(mime)
|
||||
@ -209,15 +208,6 @@ class EditMedia(DisplayState.ManagedWindow):
|
||||
if not self.date_object.is_equal(self.obj.get_date_object()):
|
||||
self.obj.set_date_object(self.date_object)
|
||||
|
||||
format = self.preform.get_active()
|
||||
if text != note or desc != self.obj.get_description():
|
||||
self.obj.set_note(text)
|
||||
self.obj.set_description(desc)
|
||||
if format != self.obj.get_note_format():
|
||||
self.obj.set_note_format(format)
|
||||
if self.lists_changed:
|
||||
self.obj.set_attribute_list(self.alist)
|
||||
self.obj.set_source_reference_list(self.srcreflist)
|
||||
trans = self.db.transaction_begin()
|
||||
self.db.commit_media_object(self.obj,trans)
|
||||
self.db.transaction_commit(trans,_("Edit Media Object"))
|
||||
|
@ -56,8 +56,7 @@ import Spell
|
||||
import GrampsDisplay
|
||||
import DisplayState
|
||||
|
||||
from DisplayTabs import NoteTab, GalleryTab, DataEmbedList, SourceBackRefList
|
||||
|
||||
from DisplayTabs import *
|
||||
from WindowUtils import GladeIf
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -207,6 +206,8 @@ class EditSource(DisplayState.ManagedWindow):
|
||||
self.author = self.top_window.get_widget("author")
|
||||
self.pubinfo = self.top_window.get_widget("pubinfo")
|
||||
self.abbrev = self.top_window.get_widget("abbrev")
|
||||
self.cancel = self.top_window.get_widget('cancel')
|
||||
self.ok = self.top_window.get_widget('ok')
|
||||
|
||||
self.vbox = self.top_window.get_widget('vbox')
|
||||
|
||||
@ -222,8 +223,9 @@ class EditSource(DisplayState.ManagedWindow):
|
||||
self.abbrev.set_text(source.get_abbreviation())
|
||||
self.abbrev.set_editable(mode)
|
||||
|
||||
self.top_window.get_widget('ok').set_sensitive(not self.db.readonly)
|
||||
self.top_window.get_widget('cancel').connect('clicked', self.close_window)
|
||||
self.ok.set_sensitive(not self.db.readonly)
|
||||
self.cancel.connect('clicked', self.close_window)
|
||||
self.ok.connect('clicked', self.apply_clicked)
|
||||
|
||||
self.notebook = gtk.Notebook()
|
||||
self.notebook.show()
|
||||
@ -233,19 +235,18 @@ class EditSource(DisplayState.ManagedWindow):
|
||||
|
||||
self.show()
|
||||
|
||||
self.model = None # This will hold the model for backreferences once it is complete.
|
||||
|
||||
def load_data(self):
|
||||
self.note_tab = NoteTab(self.dbstate, self.uistate, self.track,
|
||||
self.source.get_note_object())
|
||||
self.gallery_tab = GalleryTab(self.dbstate, self.uistate, self.track,
|
||||
self.source.get_media_list())
|
||||
|
||||
self.data_tab = DataEmbedList(self.dbstate, self.uistate, self.track,
|
||||
self.source)
|
||||
|
||||
self.backref_tab = SourceBackRefList(self.dbstate, self.uistate, self.track,
|
||||
self.db.find_backlink_handles(self.source.handle))
|
||||
self.note_tab = NoteTab(
|
||||
self.dbstate, self.uistate, self.track, self.source.get_note_object())
|
||||
self.gallery_tab = GalleryTab(
|
||||
self.dbstate, self.uistate, self.track, self.source.get_media_list())
|
||||
self.data_tab = DataEmbedList(
|
||||
self.dbstate, self.uistate, self.track, self.source)
|
||||
self.repo_tab = RepoEmbedList(
|
||||
self.dbstate, self.uistate, self.track, self.source.get_reporef_list())
|
||||
self.backref_tab = SourceBackRefList(
|
||||
self.dbstate, self.uistate, self.track,
|
||||
self.db.find_backlink_handles(self.source.handle))
|
||||
|
||||
self.notebook.insert_page(self.note_tab)
|
||||
self.notebook.set_tab_label(self.note_tab,self.note_tab.get_tab_widget())
|
||||
@ -256,6 +257,9 @@ class EditSource(DisplayState.ManagedWindow):
|
||||
self.notebook.insert_page(self.gallery_tab)
|
||||
self.notebook.set_tab_label(self.gallery_tab,self.gallery_tab.get_tab_widget())
|
||||
|
||||
self.notebook.insert_page(self.repo_tab)
|
||||
self.notebook.set_tab_label(self.repo_tab,self.repo_tab.get_tab_widget())
|
||||
|
||||
self.notebook.insert_page(self.backref_tab)
|
||||
self.notebook.set_tab_label(self.backref_tab,self.backref_tab.get_tab_widget())
|
||||
|
||||
@ -287,17 +291,12 @@ class EditSource(DisplayState.ManagedWindow):
|
||||
self.gladeif.close()
|
||||
self.close()
|
||||
|
||||
def on_source_apply_clicked(self,obj):
|
||||
def apply_clicked(self,obj):
|
||||
|
||||
title = unicode(self.title.get_text())
|
||||
author = unicode(self.author.get_text())
|
||||
pubinfo = unicode(self.pubinfo.get_text())
|
||||
abbrev = unicode(self.abbrev.get_text())
|
||||
note = unicode(
|
||||
self.notes_buffer.get_text(self.notes_buffer.get_start_iter(),
|
||||
self.notes_buffer.get_end_iter(),
|
||||
False))
|
||||
format = self.preform.get_active()
|
||||
|
||||
if author != self.source.get_author():
|
||||
self.source.set_author(author)
|
||||
@ -310,31 +309,7 @@ class EditSource(DisplayState.ManagedWindow):
|
||||
|
||||
if abbrev != self.source.get_abbreviation():
|
||||
self.source.set_abbreviation(abbrev)
|
||||
|
||||
if note != self.source.get_note():
|
||||
self.source.set_note(note)
|
||||
|
||||
if format != self.source.get_note_format():
|
||||
self.source.set_note_format(format)
|
||||
|
||||
new_map = {}
|
||||
for val in range(0,len(self.data_model)):
|
||||
node = self.data_model.get_iter(val)
|
||||
key = self.data_model.get_value(node,0)
|
||||
value = self.data_model.get_value(node,1)
|
||||
if key:
|
||||
new_map[unicode(key)] = unicode(value)
|
||||
if new_map != self.source.get_data_map():
|
||||
self.source.set_data_map(new_map)
|
||||
|
||||
# update repository refs
|
||||
repos_ref_list = []
|
||||
for val in range(0,len(self.repos_ref_model)):
|
||||
iter = self.repos_ref_model.get_iter(val)
|
||||
repos_ref_list.append(self.repos_ref_model.get_value(iter,0))
|
||||
|
||||
self.source.set_reporef_list(repos_ref_list)
|
||||
|
||||
|
||||
trans = self.db.transaction_begin()
|
||||
if self.source.get_handle() == None:
|
||||
self.db.add_source(self.source,trans)
|
||||
@ -343,7 +318,6 @@ class EditSource(DisplayState.ManagedWindow):
|
||||
self.db.transaction_commit(trans,_("Edit Source (%s)") % title)
|
||||
self.close(obj)
|
||||
|
||||
|
||||
class DelSrcQuery:
|
||||
def __init__(self,source,db,the_lists):
|
||||
self.source = source
|
||||
|
@ -811,7 +811,7 @@ class GedcomParser:
|
||||
self.parse_repository(self.repo)
|
||||
self.db.commit_repository(self.repo, self.trans)
|
||||
del self.repo
|
||||
elif matches[2] in ["SUBM","SUBN","REPO"]:
|
||||
elif matches[2] in ("SUBM","SUBN"):
|
||||
self.ignore_sub_junk(1)
|
||||
elif matches[1] in (TOKEN_SUBM,TOKEN_SUBN,TOKEN_OBJE,TOKEN__EVENT_DEFN):
|
||||
self.ignore_sub_junk(1)
|
||||
|
1057
src/ImageSelect.py
1057
src/ImageSelect.py
File diff suppressed because it is too large
Load Diff
@ -36,7 +36,6 @@ import gc
|
||||
import gtk
|
||||
import gtk.glade
|
||||
from gtk.gdk import ACTION_COPY, BUTTON1_MASK, INTERP_BILINEAR, pixbuf_new_from_file
|
||||
from gobject import TYPE_PYOBJECT
|
||||
import cPickle as pickle
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -217,7 +216,7 @@ class SourceTab:
|
||||
self.window = window
|
||||
self.slist = clist
|
||||
self.selection = clist.get_selection()
|
||||
self.model = gtk.ListStore(str,str,TYPE_PYOBJECT)
|
||||
self.model = gtk.ListStore(str,str,object)
|
||||
self.readonly = readonly
|
||||
|
||||
add_btn.set_sensitive(not readonly)
|
||||
|
17
src/Utils.py
17
src/Utils.py
@ -1118,6 +1118,23 @@ def get_type_converter_by_name(val_str):
|
||||
return unicode
|
||||
return unicode
|
||||
|
||||
def relative_path(original, base):
|
||||
if not os.path.exists(original) or not os.path.isdir(base):
|
||||
return original
|
||||
|
||||
base_list = (os.path.abspath(base)).split(os.sep)
|
||||
target_list = (os.path.abspath(original)).split(os.sep)
|
||||
|
||||
# Starting from the filepath root, work out how much of the filepath is
|
||||
# shared by base and target.
|
||||
|
||||
for i in range(min(len(base_list), len(target_list))):
|
||||
if base_list[i] <> target_list[i]: break
|
||||
else:
|
||||
i+=1
|
||||
rel_list = [os.pardir] * (len(base_list)-i) + target_list[i:]
|
||||
return os.path.join(*rel_list)
|
||||
|
||||
class ProgressMeter:
|
||||
"""
|
||||
Progress meter class for GRAMPS.
|
||||
|
@ -715,6 +715,11 @@ class ViewManager:
|
||||
_('You do not have write access '
|
||||
'to the selected file.'))
|
||||
|
||||
try:
|
||||
os.chdir(os.path.dirname(filename))
|
||||
except:
|
||||
print "could not change directory"
|
||||
|
||||
try:
|
||||
if self.load_database(filename,callback,mode=mode):
|
||||
if filename[-1] == '/':
|
||||
|
@ -9,7 +9,7 @@
|
||||
<property name="type">GTK_WINDOW_TOPLEVEL</property>
|
||||
<property name="window_position">GTK_WIN_POS_NONE</property>
|
||||
<property name="modal">False</property>
|
||||
<property name="default_height">600</property>
|
||||
<property name="default_height">500</property>
|
||||
<property name="resizable">True</property>
|
||||
<property name="destroy_with_parent">False</property>
|
||||
<property name="icon">gramps.png</property>
|
||||
|
451
src/gramps.glade
451
src/gramps.glade
@ -1353,7 +1353,7 @@
|
||||
<widget class="GtkEntry" id="gid">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="editable">False</property>
|
||||
<property name="editable">True</property>
|
||||
<property name="visibility">True</property>
|
||||
<property name="max_length">0</property>
|
||||
<property name="text" translatable="yes"></property>
|
||||
@ -9668,7 +9668,7 @@ Very High</property>
|
||||
<widget class="GtkTable" id="table51">
|
||||
<property name="border_width">6</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">2</property>
|
||||
<property name="n_rows">3</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="row_spacing">6</property>
|
||||
@ -9736,6 +9736,28 @@ Very High</property>
|
||||
<property name="inconsistent">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">fill</property>
|
||||
<property name="y_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkCheckButton" id="relpath">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes">Convert to a relative path</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<property name="active">False</property>
|
||||
<property name="inconsistent">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
@ -14216,6 +14238,7 @@ Very High</property>
|
||||
<property name="window_position">GTK_WIN_POS_NONE</property>
|
||||
<property name="modal">False</property>
|
||||
<property name="default_width">600</property>
|
||||
<property name="default_height">450</property>
|
||||
<property name="resizable">True</property>
|
||||
<property name="destroy_with_parent">False</property>
|
||||
<property name="icon">gramps.png</property>
|
||||
@ -14293,7 +14316,7 @@ Very High</property>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox35">
|
||||
<widget class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
@ -14735,427 +14758,7 @@ Very High</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkNotebook" id="notebook2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="show_tabs">True</property>
|
||||
<property name="show_border">True</property>
|
||||
<property name="tab_pos">GTK_POS_TOP</property>
|
||||
<property name="scrollable">False</property>
|
||||
<property name="enable_popup">False</property>
|
||||
<signal name="switch_page" handler="on_switch_page" last_modification_time="Wed, 12 Nov 2003 18:09:04 GMT"/>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox40">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkHBox" id="hbox40">
|
||||
<property name="border_width">6</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">6</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkScrolledWindow" id="scrolledwindow27">
|
||||
<property name="visible">True</property>
|
||||
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<property name="shadow_type">GTK_SHADOW_IN</property>
|
||||
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkTreeView" id="slist">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="headers_visible">True</property>
|
||||
<property name="rules_hint">False</property>
|
||||
<property name="reorderable">False</property>
|
||||
<property name="enable_search">True</property>
|
||||
<property name="fixed_height_mode">False</property>
|
||||
<property name="hover_selection">False</property>
|
||||
<property name="hover_expand">False</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox48">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">6</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="add_src">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImage" id="image2356">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-add</property>
|
||||
<property name="icon_size">4</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="edit_src">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImage" id="image2357">
|
||||
<property name="visible">True</property>
|
||||
<property name="pixbuf">edit_sm.png</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="del_src">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImage" id="image2358">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-remove</property>
|
||||
<property name="icon_size">4</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkHButtonBox" id="hbuttonbox3">
|
||||
<property name="visible">True</property>
|
||||
<property name="layout_style">GTK_BUTTONBOX_SPREAD</property>
|
||||
<property name="spacing">30</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="tab_expand">False</property>
|
||||
<property name="tab_fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkHBox" id="sources_tab">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImage" id="image2581">
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="sourcesAddr">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Sources</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_CENTER</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="type">tab</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox52">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkScrolledWindow" id="scrolledwindow24">
|
||||
<property name="height_request">350</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<property name="shadow_type">GTK_SHADOW_IN</property>
|
||||
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkTextView" id="addr_note">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="editable">True</property>
|
||||
<property name="overwrite">False</property>
|
||||
<property name="accepts_tab">True</property>
|
||||
<property name="justification">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap_mode">GTK_WRAP_WORD</property>
|
||||
<property name="cursor_visible">True</property>
|
||||
<property name="pixels_above_lines">0</property>
|
||||
<property name="pixels_below_lines">0</property>
|
||||
<property name="pixels_inside_wrap">0</property>
|
||||
<property name="left_margin">0</property>
|
||||
<property name="right_margin">0</property>
|
||||
<property name="indent">0</property>
|
||||
<property name="text" translatable="yes"></property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkTable" id="table33">
|
||||
<property name="border_width">12</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">2</property>
|
||||
<property name="n_columns">3</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="row_spacing">12</property>
|
||||
<property name="column_spacing">24</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label302">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes"><b>Format</b></property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="right_attach">3</property>
|
||||
<property name="top_attach">0</property>
|
||||
<property name="bottom_attach">1</property>
|
||||
<property name="x_options">fill</property>
|
||||
<property name="y_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkRadioButton" id="addr_flowed">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Multiple spaces, tabs, and single line breaks are replaced with single spaces. Two consecutive line breaks mark a new paragraph.</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes">_Flowed</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<property name="active">True</property>
|
||||
<property name="inconsistent">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options"></property>
|
||||
<property name="y_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkRadioButton" id="addr_preform">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Formatting is preserved, except for the leading whitespace. Multiple spaces, tabs, and all line breaks are respected.</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes">_Preformatted</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<property name="active">False</property>
|
||||
<property name="inconsistent">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<property name="group">addr_flowed</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="right_attach">3</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options"></property>
|
||||
<property name="y_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="tab_expand">False</property>
|
||||
<property name="tab_fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkHBox" id="note_tab">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImage" id="image2582">
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="noteAddr">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Note</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_CENTER</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="type">tab</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
Loading…
Reference in New Issue
Block a user