First attempt at autosave

svn: r668
This commit is contained in:
Don Allingham 2001-12-28 01:22:20 +00:00
parent 4e6a9abe93
commit 62a662daf3
13 changed files with 585 additions and 126 deletions

View File

@ -94,6 +94,8 @@ sprefix = "S"
pprefix = "P" pprefix = "P"
fprefix = "F" fprefix = "F"
autoload = 0 autoload = 0
autosave = 0
autosave_int = 5
usetabs = 0 usetabs = 0
autocomp = 1 autocomp = 1
usevc = 0 usevc = 0
@ -161,6 +163,8 @@ def make_path(path):
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
def loadConfig(call): def loadConfig(call):
global autoload global autoload
global autosave
global autosave_int
global owner global owner
global usetabs global usetabs
global autocomp global autocomp
@ -218,6 +222,8 @@ def loadConfig(call):
hide_altnames = get_bool("/gramps/config/DisplayAltNames") hide_altnames = get_bool("/gramps/config/DisplayAltNames")
autoload = get_bool("/gramps/config/autoLoad") autoload = get_bool("/gramps/config/autoLoad")
autosave = get_bool("/gramps/config/autoSave")
autosave_int = get_int("/gramps/config/autoSaveInterval")
dateFormat = get_int("/gramps/config/dateFormat") dateFormat = get_int("/gramps/config/dateFormat")
dateEntry = get_int("/gramps/config/dateEntry") dateEntry = get_int("/gramps/config/dateEntry")
paper_preference = get_string("/gramps/config/paperPreference") paper_preference = get_string("/gramps/config/paperPreference")
@ -295,6 +301,10 @@ def loadConfig(call):
if autoload == None: if autoload == None:
autoload = 1 autoload = 1
if autosave == None:
autosave = 0
if autosave_int == None:
autosave = 5
if mediaref == None: if mediaref == None:
mediaref = 1 mediaref = 1
if globalprop == None: if globalprop == None:
@ -456,6 +466,8 @@ def on_propertybox_apply(obj,page):
show_detail = prefsTop.get_widget("showdetail").get_active() show_detail = prefsTop.get_widget("showdetail").get_active()
autoload = prefsTop.get_widget("autoload").get_active() autoload = prefsTop.get_widget("autoload").get_active()
autosave = prefsTop.get_widget("save_enable").get_active()
autosave_int = prefsTop.get_widget("save_interval").get_value_as_int()
display_attr = prefsTop.get_widget("attr_display").get_active() display_attr = prefsTop.get_widget("attr_display").get_active()
attr_name = string.strip(prefsTop.get_widget("attr_name").get_text()) attr_name = string.strip(prefsTop.get_widget("attr_name").get_text())
usetabs = prefsTop.get_widget("usetabs").get_active() usetabs = prefsTop.get_widget("usetabs").get_active()
@ -539,6 +551,13 @@ def on_propertybox_apply(obj,page):
set_string("/gramps/config/paperPreference",paper_preference) set_string("/gramps/config/paperPreference",paper_preference)
set_string("/gramps/config/outputPreference",output_preference) set_string("/gramps/config/outputPreference",output_preference)
set_bool("/gramps/config/autoLoad",autoload) set_bool("/gramps/config/autoLoad",autoload)
set_bool("/gramps/config/autoSave",autosave)
set_int("/gramps/config/autoSaveInterval",autosave_int)
if autosave and autosave_int != 0:
utils.enable_autosave(None,autosave_int)
else:
utils.disable_autosave()
set_bool("/gramps/config/DisplayAltNames",hide_altnames) set_bool("/gramps/config/DisplayAltNames",hide_altnames)
set_string("/gramps/config/ReportDirectory",report_dir) set_string("/gramps/config/ReportDirectory",report_dir)
set_string("/gramps/config/WebsiteDirectory",web_dir) set_string("/gramps/config/WebsiteDirectory",web_dir)
@ -684,6 +703,8 @@ def display_preferences_box(db):
pbox = prefsTop.get_widget("propertybox") pbox = prefsTop.get_widget("propertybox")
pbox.set_data("db",db) pbox.set_data("db",db)
auto = prefsTop.get_widget("autoload") auto = prefsTop.get_widget("autoload")
asave = prefsTop.get_widget("save_enable")
asave_int = prefsTop.get_widget("save_interval")
vis = prefsTop.get_widget("gid_visible") vis = prefsTop.get_widget("gid_visible")
idedit = prefsTop.get_widget("gid_edit") idedit = prefsTop.get_widget("gid_edit")
index_vis = prefsTop.get_widget("show_child_id") index_vis = prefsTop.get_widget("show_child_id")
@ -701,6 +722,8 @@ def display_preferences_box(db):
display_attr_obj = prefsTop.get_widget("attr_display") display_attr_obj = prefsTop.get_widget("attr_display")
display_altnames = prefsTop.get_widget("display_altnames") display_altnames = prefsTop.get_widget("display_altnames")
auto.set_active(autoload) auto.set_active(autoload)
asave.set_active(autosave)
asave_int.set_value(autosave_int)
detail.set_active(show_detail) detail.set_active(show_detail)
tabs.set_active(usetabs) tabs.set_active(usetabs)
ac.set_active(autocomp) ac.set_active(autocomp)
@ -854,7 +877,7 @@ def display_preferences_box(db):
prefsTop.get_widget("dbdir").gtk_entry().set_text(db_dir) prefsTop.get_widget("dbdir").gtk_entry().set_text(db_dir)
prefsTop.get_widget("repdir").gtk_entry().set_text(report_dir) prefsTop.get_widget("repdir").gtk_entry().set_text(report_dir)
prefsTop.get_widget("htmldir").gtk_entry().set_text(web_dir) prefsTop.get_widget("htmldir").gtk_entry().set_text(web_dir)
pbox.set_modified(0) pbox.set_modified(0)
pbox.show() pbox.show()

View File

@ -67,7 +67,7 @@ class EventEditor:
self.place_combo = self.top.get_widget("eventPlace_combo") self.place_combo = self.top.get_widget("eventPlace_combo")
self.date_field = self.top.get_widget("eventDate") self.date_field = self.top.get_widget("eventDate")
self.cause_field = self.top.get_widget("eventCause") self.cause_field = self.top.get_widget("eventCause")
self.descr_field = self.top.get_widget("eventDescription") self.descr_field = self.top.get_widget("event_description")
self.note_field = self.top.get_widget("eventNote") self.note_field = self.top.get_widget("eventNote")
self.event_menu = self.top.get_widget("personalEvents") self.event_menu = self.top.get_widget("personalEvents")
self.priv = self.top.get_widget("priv") self.priv = self.top.get_widget("priv")

View File

@ -339,7 +339,10 @@ class MergePeople:
old_note = old_note + "\n\n" old_note = old_note + "\n\n"
self.p1.setNote(old_note + self.p2.getNote()) self.p1.setNote(old_note + self.p2.getNote())
del self.db.getPersonMap()[self.p2.getId()] try:
del self.db.getPersonMap()[self.p2.getId()]
except:
print "%s is not in the person map!" % (Config.nameof(self.p2))
self.update(self.p1,self.p2) self.update(self.p1,self.p2)
utils.destroy_passed_object(self.top) utils.destroy_passed_object(self.top)

View File

@ -91,15 +91,16 @@ class RevisionComment:
class RevisionSelect: class RevisionSelect:
def __init__(self,db,filename,vc,load): def __init__(self,db,filename,vc,load,callback=None):
self.db = db self.db = db
self.filename = filename self.filename = filename
self.vc = vc self.vc = vc
self.load = load self.load = load
self.callback = callback
dialog = libglade.GladeXML(const.revisionFile, "revselect") dialog = libglade.GladeXML(const.revisionFile, "revselect")
dialog.signal_autoconnect({ dialog.signal_autoconnect({
"destroy_passed_object" : utils.destroy_passed_object, "destroy_passed_object" : self.on_cancel_clicked,
"on_loadrev_clicked" : self.on_loadrev_clicked, "on_loadrev_clicked" : self.on_loadrev_clicked,
}) })
@ -111,6 +112,11 @@ class RevisionSelect:
self.revlist.set_row_data(index,f[0]) self.revlist.set_row_data(index,f[0])
index = index + 1 index = index + 1
def on_cancel_clicked(self,obj):
utils.destroy_passed_object(obj)
if self.callback:
self.callback()
def on_loadrev_clicked(self,obj): def on_loadrev_clicked(self,obj):
if len(self.revlist.selection) > 0: if len(self.revlist.selection) > 0:
rev = self.revlist.get_row_data(self.revlist.selection[0]) rev = self.revlist.get_row_data(self.revlist.selection[0])

View File

@ -488,12 +488,12 @@ def exportData(database, filename, callback):
GnomeErrorDialog(_("Failure writing %s, original file restored") % filename) GnomeErrorDialog(_("Failure writing %s, original file restored") % filename)
shutil.copy(filename + ".bak", filename) shutil.copy(filename + ".bak", filename)
def quick_write(database, filename): def quick_write(database, filename,callback=None):
global fileroot global fileroot
fileroot = os.path.dirname(filename) fileroot = os.path.dirname(filename)
g = gzip.open(filename,"wb") g = gzip.open(filename,"wb")
write_xml_data(database, g, None, 0) write_xml_data(database, g, callback, 0)
g.close() g.close()
def write_xml_data(database, g, callback, sp): def write_xml_data(database, g, callback, sp):

View File

@ -78,70 +78,12 @@
<widget> <widget>
<class>GtkTable</class> <class>GtkTable</class>
<name>table13</name> <name>table13</name>
<rows>3</rows> <rows>4</rows>
<columns>2</columns> <columns>3</columns>
<homogeneous>False</homogeneous> <homogeneous>False</homogeneous>
<row_spacing>0</row_spacing> <row_spacing>0</row_spacing>
<column_spacing>0</column_spacing> <column_spacing>0</column_spacing>
<widget>
<class>GtkCheckButton</class>
<name>uncompress</name>
<can_focus>True</can_focus>
<signal>
<name>toggled</name>
<handler>on_object_toggled</handler>
<object>propertybox</object>
<last_modification_time>Sat, 09 Dec 2000 18:11:20 GMT</last_modification_time>
</signal>
<label>Do not compress XML data file</label>
<active>False</active>
<draw_indicator>True</draw_indicator>
<child>
<left_attach>0</left_attach>
<right_attach>2</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>3</xpad>
<ypad>3</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkCheckButton</class>
<name>autoload</name>
<can_focus>True</can_focus>
<signal>
<name>toggled</name>
<handler>on_object_toggled</handler>
<object>propertybox</object>
<last_modification_time>Sat, 09 Dec 2000 18:11:20 GMT</last_modification_time>
</signal>
<label>Automatically load last database</label>
<active>True</active>
<draw_indicator>True</draw_indicator>
<child>
<left_attach>0</left_attach>
<right_attach>2</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>3</xpad>
<ypad>3</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget> <widget>
<class>GtkLabel</class> <class>GtkLabel</class>
<name>label205</name> <name>label205</name>
@ -155,8 +97,8 @@
<child> <child>
<left_attach>0</left_attach> <left_attach>0</left_attach>
<right_attach>1</right_attach> <right_attach>1</right_attach>
<top_attach>2</top_attach> <top_attach>3</top_attach>
<bottom_attach>3</bottom_attach> <bottom_attach>4</bottom_attach>
<xpad>3</xpad> <xpad>3</xpad>
<ypad>3</ypad> <ypad>3</ypad>
<xexpand>False</xexpand> <xexpand>False</xexpand>
@ -178,9 +120,9 @@
<modal>False</modal> <modal>False</modal>
<child> <child>
<left_attach>1</left_attach> <left_attach>1</left_attach>
<right_attach>2</right_attach> <right_attach>3</right_attach>
<top_attach>2</top_attach> <top_attach>3</top_attach>
<bottom_attach>3</bottom_attach> <bottom_attach>4</bottom_attach>
<xpad>3</xpad> <xpad>3</xpad>
<ypad>3</ypad> <ypad>3</ypad>
<xexpand>True</xexpand> <xexpand>True</xexpand>
@ -209,6 +151,157 @@
<text></text> <text></text>
</widget> </widget>
</widget> </widget>
<widget>
<class>GtkLabel</class>
<name>label217</name>
<label>Autosave interval (minutes)</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>2</top_attach>
<bottom_attach>3</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkCheckButton</class>
<name>save_enable</name>
<can_focus>True</can_focus>
<signal>
<name>toggled</name>
<handler>on_object_toggled</handler>
<object>propertybox</object>
<last_modification_time>Mon, 24 Dec 2001 23:25:36 GMT</last_modification_time>
</signal>
<label>Enable Autosaving</label>
<active>False</active>
<draw_indicator>True</draw_indicator>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>2</top_attach>
<bottom_attach>3</bottom_attach>
<xpad>3</xpad>
<ypad>3</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkSpinButton</class>
<name>save_interval</name>
<can_focus>True</can_focus>
<signal>
<name>changed</name>
<handler>on_object_changed</handler>
<object>propertybox</object>
<last_modification_time>Mon, 24 Dec 2001 23:25:52 GMT</last_modification_time>
</signal>
<climb_rate>1</climb_rate>
<digits>0</digits>
<numeric>True</numeric>
<update_policy>GTK_UPDATE_IF_VALID</update_policy>
<snap>True</snap>
<wrap>False</wrap>
<value>5</value>
<lower>0</lower>
<upper>100</upper>
<step>1</step>
<page>10</page>
<page_size>10</page_size>
<child>
<left_attach>2</left_attach>
<right_attach>3</right_attach>
<top_attach>2</top_attach>
<bottom_attach>3</bottom_attach>
<xpad>3</xpad>
<ypad>3</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkCheckButton</class>
<name>autoload</name>
<can_focus>True</can_focus>
<signal>
<name>toggled</name>
<handler>on_object_toggled</handler>
<object>propertybox</object>
<last_modification_time>Sat, 09 Dec 2000 18:11:20 GMT</last_modification_time>
</signal>
<label>Automatically load last database</label>
<active>True</active>
<draw_indicator>True</draw_indicator>
<child>
<left_attach>0</left_attach>
<right_attach>3</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>3</xpad>
<ypad>3</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkCheckButton</class>
<name>uncompress</name>
<can_focus>True</can_focus>
<signal>
<name>toggled</name>
<handler>on_object_toggled</handler>
<object>propertybox</object>
<last_modification_time>Sat, 09 Dec 2000 18:11:20 GMT</last_modification_time>
</signal>
<label>Do not compress XML data file</label>
<active>False</active>
<draw_indicator>True</draw_indicator>
<child>
<left_attach>0</left_attach>
<right_attach>3</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>3</xpad>
<ypad>3</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
</widget> </widget>
</widget> </widget>
@ -1993,7 +2086,7 @@
<widget> <widget>
<class>GnomeFileEntry</class> <class>GnomeFileEntry</class>
<name>htmldir</name> <name>htmldir</name>
<history_id>repdir</history_id> <history_id>webdir</history_id>
<max_saved>10</max_saved> <max_saved>10</max_saved>
<title>Gramps - Select default report directory</title> <title>Gramps - Select default report directory</title>
<directory>True</directory> <directory>True</directory>

View File

@ -91,7 +91,7 @@ gtkrcFile = "%s/gtkrc" % rootDir
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
progName = "gramps" progName = "gramps"
version = "0.7.0" version = "0.7.1pre"
copyright = "© 2001 Donald N. Allingham" copyright = "© 2001 Donald N. Allingham"
authors = ["Donald N. Allingham", "David Hampton"] authors = ["Donald N. Allingham", "David Hampton"]
comments = _("Gramps (Genealogical Research and Analysis Management Programming System) is a personal genealogy program.") comments = _("Gramps (Genealogical Research and Analysis Management Programming System) is a personal genealogy program.")

View File

@ -240,44 +240,6 @@
</child> </child>
</widget> </widget>
<widget>
<class>GnomeEntry</class>
<name>eDescBox</name>
<history_id>event_description</history_id>
<max_saved>15</max_saved>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>4</top_attach>
<bottom_attach>5</bottom_attach>
<xpad>3</xpad>
<ypad>3</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
<widget>
<class>GtkEntry</class>
<child_name>GnomeEntry:entry</child_name>
<name>eventDescription</name>
<can_focus>True</can_focus>
<signal>
<name>insert_text</name>
<handler>on_combo_insert_text</handler>
<object>eDescBox</object>
<last_modification_time>Thu, 18 Oct 2001 01:38:54 GMT</last_modification_time>
</signal>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
</widget>
</widget>
<widget> <widget>
<class>GtkCombo</class> <class>GtkCombo</class>
<name>eventPlace_combo</name> <name>eventPlace_combo</name>
@ -587,6 +549,30 @@ French
</child> </child>
</widget> </widget>
</widget> </widget>
<widget>
<class>GtkEntry</class>
<name>event_description</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>4</top_attach>
<bottom_attach>5</bottom_attach>
<xpad>3</xpad>
<ypad>3</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
</widget> </widget>
</widget> </widget>
</widget> </widget>

View File

@ -27,7 +27,7 @@ import intl
_ = intl.gettext _ = intl.gettext
class EventPlace(Filter.Filter): class EventPlace(Filter.Filter):
"People with an event location of ..." """Finds people with a specfied event location in any field"""
def __init__(self,text): def __init__(self,text):
self.ok = 1 self.ok = 1
@ -44,9 +44,23 @@ class EventPlace(Filter.Filter):
list.append(person.getDeath()) list.append(person.getDeath())
for event in list: for event in list:
if self.regexp.search(event.getPlaceName()): if self.regexp.search(event.getPlaceName()):
val = 1 return 1
break place = event.getPlace()
return val if not place:
continue
locs = [place.get_main_location()] + place.get_alternate_locations()
for location in locs:
if self.regexp.search(location.get_city()):
return 1
if self.regexp.search(location.get_parish()):
return 1
if self.regexp.search(location.get_county()):
return 1
if self.regexp.search(location.get_state()):
return 1
if self.regexp.search(location.get_country()):
return 1
return 0
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #

View File

@ -485,6 +485,19 @@
<stock_icon>GNOME_STOCK_MENU_MAIL</stock_icon> <stock_icon>GNOME_STOCK_MENU_MAIL</stock_icon>
</widget> </widget>
<widget>
<class>GtkMenuItem</class>
<name>report_a_bug1</name>
<tooltip>Report a bug to the GRAMPS bug tracking system</tooltip>
<signal>
<name>activate</name>
<handler>on_gramps_report_bug_activate</handler>
<last_modification_time>Mon, 24 Dec 2001 05:43:23 GMT</last_modification_time>
</signal>
<label>_Report a bug</label>
<right_justify>False</right_justify>
</widget>
<widget> <widget>
<class>GtkPixmapMenuItem</class> <class>GtkPixmapMenuItem</class>
<name>about1</name> <name>about1</name>
@ -7025,4 +7038,155 @@ Unknown
</widget> </widget>
</widget> </widget>
<widget>
<class>GnomeDialog</class>
<name>opendb</name>
<signal>
<name>delete_event</name>
<handler>on_opendb_delete_event</handler>
<last_modification_time>Mon, 24 Dec 2001 16:08:13 GMT</last_modification_time>
</signal>
<title>Gramps - Open a Database</title>
<type>GTK_WINDOW_TOPLEVEL</type>
<position>GTK_WIN_POS_NONE</position>
<modal>True</modal>
<allow_shrink>False</allow_shrink>
<allow_grow>True</allow_grow>
<auto_shrink>False</auto_shrink>
<auto_close>False</auto_close>
<hide_on_close>False</hide_on_close>
<widget>
<class>GtkVBox</class>
<child_name>GnomeDialog:vbox</child_name>
<name>dialog-vbox13</name>
<homogeneous>False</homogeneous>
<spacing>8</spacing>
<child>
<padding>4</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkHButtonBox</class>
<child_name>GnomeDialog:action_area</child_name>
<name>dialog-action_area13</name>
<layout_style>GTK_BUTTONBOX_END</layout_style>
<spacing>8</spacing>
<child_min_width>85</child_min_width>
<child_min_height>27</child_min_height>
<child_ipad_x>7</child_ipad_x>
<child_ipad_y>0</child_ipad_y>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
<pack>GTK_PACK_END</pack>
</child>
<widget>
<class>GtkButton</class>
<name>open_ok</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<has_focus>True</has_focus>
<signal>
<name>clicked</name>
<handler>on_open_ok_clicked</handler>
<object>opendb</object>
<last_modification_time>Mon, 24 Dec 2001 15:57:56 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
</widget>
<widget>
<class>GtkButton</class>
<name>open_cancel</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_open_cancel_clicked</handler>
<object>opendb</object>
<last_modification_time>Mon, 24 Dec 2001 15:57:24 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
</widget>
</widget>
<widget>
<class>GtkVBox</class>
<name>vbox49</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>label293</name>
<width>300</width>
<label>Open a Database</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>10</xpad>
<ypad>10</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GtkHSeparator</class>
<name>hseparator24</name>
<child>
<padding>5</padding>
<expand>False</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkRadioButton</class>
<name>existing</name>
<border_width>5</border_width>
<can_focus>True</can_focus>
<label>Open an Existing Database</label>
<active>True</active>
<draw_indicator>True</draw_indicator>
<group>open</group>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GtkRadioButton</class>
<name>new</name>
<border_width>5</border_width>
<can_focus>True</can_focus>
<label>Create a New Database</label>
<active>False</active>
<draw_indicator>True</draw_indicator>
<group>open</group>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
</widget>
</widget>
</widget>
</GTK-Interface> </GTK-Interface>

View File

@ -162,6 +162,10 @@ def on_gramps_mailing_lists_activate(obj):
import gnome.url import gnome.url
gnome.url.show("http://sourceforge.net/mail/?group_id=25770") gnome.url.show("http://sourceforge.net/mail/?group_id=25770")
def on_gramps_report_bug_activate(obj):
import gnome.url
gnome.url.show("http://sourceforge.net/tracker/?group_id=25770&atid=385137")
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# Merge # Merge
@ -381,15 +385,18 @@ def on_new_clicked(obj):
gnome.ui.GnomeQuestionDialog(msg,new_database_response) gnome.ui.GnomeQuestionDialog(msg,new_database_response)
def new_database_response(val): def new_database_response(val):
if val == 1:
return
clear_database()
DbPrompter(database,1)
def clear_database():
"""Clear out the database if permission was granted""" """Clear out the database if permission was granted"""
global active_person, active_father global active_person, active_father
global active_family, active_mother global active_family, active_mother
global active_child, active_spouse global active_child, active_spouse
global id2col,alt2col,person_list global id2col,alt2col,person_list
if val == 1:
return
const.personalEvents = const.initialize_personal_event_list() const.personalEvents = const.initialize_personal_event_list()
const.personalAttributes = const.initialize_personal_attribute_list() const.personalAttributes = const.initialize_personal_attribute_list()
const.marriageEvents = const.initialize_marriage_event_list() const.marriageEvents = const.initialize_marriage_event_list()
@ -408,6 +415,7 @@ def new_database_response(val):
alt2col = {} alt2col = {}
utils.clearModified() utils.clearModified()
utils.clear_timer()
change_active_person(None) change_active_person(None)
person_list.clear() person_list.clear()
load_family() load_family()
@ -504,7 +512,7 @@ def on_ok_button1_clicked(obj):
if filename == "" or filename == None: if filename == "" or filename == None:
return return
new_database_response(0) clear_database()
if getoldrev.get_active(): if getoldrev.get_active():
vc = VersionControl.RcsVersionControl(filename) vc = VersionControl.RcsVersionControl(filename)
@ -559,8 +567,13 @@ def save_file(filename,comment):
path = filename path = filename
filename = os.path.normpath(filename) filename = os.path.normpath(filename)
autosave = "%s/autosave.gramps" % filename
statusbar.set_status(_("Saving %s ...") % filename) statusbar.set_status(_("Saving %s ...") % filename)
utils.clearModified()
utils.clear_timer()
if os.path.exists(filename): if os.path.exists(filename):
if os.path.isdir(filename) == 0: if os.path.isdir(filename) == 0:
displayError(_("%s is not a directory") % filename) displayError(_("%s is not a directory") % filename)
@ -590,15 +603,46 @@ def save_file(filename,comment):
return return
database.setSavePath(old_file) database.setSavePath(old_file)
utils.clearModified()
Config.save_last_file(old_file) Config.save_last_file(old_file)
if Config.usevc: if Config.usevc:
vc = VersionControl.RcsVersionControl(path) vc = VersionControl.RcsVersionControl(path)
vc.checkin(filename,comment,not Config.uncompress) vc.checkin(filename,comment,not Config.uncompress)
topWindow.set_title("Gramps - " + database.getSavePath())
statusbar.set_status("") statusbar.set_status("")
statusbar.set_progress(0) statusbar.set_progress(0)
if os.path.exists(autosave):
try:
os.remove(autosave)
except:
pass
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def autosave_database():
import WriteXML
path = database.getSavePath()
filename = os.path.normpath(path)
utils.clearModified()
filename = "%s/autosave.gramps" % (database.getSavePath())
statusbar.set_status(_("autosaving..."));
try:
WriteXML.quick_write(database,filename,quick_progress)
statusbar.set_status(_("autosave complete"));
except (IOError,OSError):
statusbar.set_status(_("autosave failed"));
except:
import traceback
traceback.print_exc()
return 0
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -1100,6 +1144,7 @@ def revert_query(value):
database.new() database.new()
read_file(file) read_file(file)
utils.clearModified() utils.clearModified()
utils.clear_timer()
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -1593,6 +1638,18 @@ def load_progress(value):
while gtk.events_pending(): while gtk.events_pending():
gtk.mainiteration() gtk.mainiteration()
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def quick_progress(value):
gtk.threads_enter()
statusbar.set_progress(value)
while gtk.events_pending():
gtk.mainiteration()
gtk.threads_leave()
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# #
@ -1883,7 +1940,7 @@ def on_main_key_release_event(obj,event):
on_delete_person_clicked(obj) on_delete_person_clicked(obj)
elif event.keyval == GDK.Insert: elif event.keyval == GDK.Insert:
load_new_person(obj) load_new_person(obj)
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# Main program # Main program
@ -1913,7 +1970,7 @@ def main(arg):
Config.loadConfig(full_update) Config.loadConfig(full_update)
gtop = libglade.GladeXML(const.gladeFile, "gramps") gtop = libglade.GladeXML(const.gladeFile, "gramps")
toolbar = gtop.get_widget("toolbar1") toolbar = gtop.get_widget("toolbar1")
toolbar.set_style(Config.toolbar) toolbar.set_style(Config.toolbar)
statusbar = gtop.get_widget("statusbar") statusbar = gtop.get_widget("statusbar")
@ -2034,6 +2091,7 @@ def main(arg):
"on_swap_clicked" : on_swap_clicked, "on_swap_clicked" : on_swap_clicked,
"on_tools_clicked" : on_tools_clicked, "on_tools_clicked" : on_tools_clicked,
"on_gramps_home_page_activate" : on_gramps_home_page_activate, "on_gramps_home_page_activate" : on_gramps_home_page_activate,
"on_gramps_report_bug_activate" : on_gramps_report_bug_activate,
"on_gramps_mailing_lists_activate" : on_gramps_mailing_lists_activate, "on_gramps_mailing_lists_activate" : on_gramps_mailing_lists_activate,
"on_writing_extensions_activate" : on_writing_extensions_activate, "on_writing_extensions_activate" : on_writing_extensions_activate,
}) })
@ -2054,11 +2112,99 @@ def main(arg):
read_file(arg) read_file(arg)
elif Config.lastfile != None and Config.lastfile != "" and Config.autoload: elif Config.lastfile != None and Config.lastfile != "" and Config.autoload:
read_file(Config.lastfile) read_file(Config.lastfile)
else:
DbPrompter(database,0)
if Config.autosave and Config.autosave_int != 0:
utils.enable_autosave(autosave_database,Config.autosave_int)
database.setResearcher(Config.owner) database.setResearcher(Config.owner)
gtk.mainloop() gtk.mainloop()
#-------------------------------------------------------------------------
#
# Make sure a database is opened
#
#-------------------------------------------------------------------------
class DbPrompter:
def __init__(self,db,want_new):
self.db = db
self.want_new = want_new
self.show()
def show(self):
opendb = libglade.GladeXML(const.gladeFile, "opendb")
opendb.signal_autoconnect({
"on_open_ok_clicked" : self.open_ok_clicked,
"on_open_cancel_clicked" : self.open_cancel_clicked,
"on_opendb_delete_event": self.open_delete_event,
})
self.new = opendb.get_widget("new")
if self.want_new:
self.new.set_active(1)
def open_ok_clicked(self,obj):
if self.new.get_active():
self.save_as_activate()
else:
self.open_activate()
utils.destroy_passed_object(obj)
def save_as_activate(self):
wFs = libglade.GladeXML (const.gladeFile, FILESEL)
wFs.signal_autoconnect({
"on_ok_button1_clicked": self.save_ok_button_clicked,
"destroy_passed_object": self.cancel_button_clicked,
})
def save_ok_button_clicked(self,obj):
filename = obj.get_filename()
if filename:
utils.destroy_passed_object(obj)
if Config.usevc and Config.vc_comment:
display_comment_box(filename)
else:
save_file(filename,_("No Comment Provided"))
def open_activate(self):
wFs = libglade.GladeXML(const.revisionFile, "dbopen")
wFs.signal_autoconnect({
"on_ok_button1_clicked": self.ok_button_clicked,
"destroy_passed_object": self.cancel_button_clicked,
})
self.fileSelector = wFs.get_widget("dbopen")
self.dbname = wFs.get_widget("dbname")
self.getoldrev = wFs.get_widget("getoldrev")
self.dbname.set_default_path(Config.db_dir)
self.getoldrev.set_sensitive(Config.usevc)
def cancel_button_clicked(self,obj):
utils.destroy_passed_object(obj)
self.show()
def ok_button_clicked(self,obj):
filename = self.dbname.get_full_path(0)
if not filename:
return
utils.destroy_passed_object(obj)
clear_database()
if self.getoldrev.get_active():
vc = VersionControl.RcsVersionControl(filename)
VersionControl.RevisionSelect(self.db,filename,vc,load_revision,self.show)
else:
read_file(filename)
def open_delete_event(self,obj,event):
gtk.mainquit()
def open_cancel_clicked(self,obj):
gtk.mainquit()
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# Start it all # Start it all
@ -2066,3 +2212,4 @@ def main(arg):
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
if __name__ == '__main__': if __name__ == '__main__':
main(None) main(None)

View File

@ -20,7 +20,7 @@
<title>Gramps - Open a database</title> <title>Gramps - Open a database</title>
<type>GTK_WINDOW_TOPLEVEL</type> <type>GTK_WINDOW_TOPLEVEL</type>
<position>GTK_WIN_POS_NONE</position> <position>GTK_WIN_POS_NONE</position>
<modal>False</modal> <modal>True</modal>
<allow_shrink>False</allow_shrink> <allow_shrink>False</allow_shrink>
<allow_grow>True</allow_grow> <allow_grow>True</allow_grow>
<auto_shrink>False</auto_shrink> <auto_shrink>False</auto_shrink>

View File

@ -58,6 +58,9 @@ _ = gettext
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
_modifiedFlag = 0 _modifiedFlag = 0
_autotime_val = 1
_autosave_fun = None
_autosave_tim = None
LISTOBJ = "s" LISTOBJ = "s"
OBJECT = "o" OBJECT = "o"
@ -70,9 +73,29 @@ OBJECT = "o"
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
def modified(): def modified():
global _modifiedFlag global _modifiedFlag, _autosave_tim
if _autosave_fun and not _autosave_tim:
_autosave_tim = gtk.timeout_add(60000*_autotime_val,_autosave_fun)
_modifiedFlag = 1 _modifiedFlag = 1
def enable_autosave(fun,value):
global _autosave_fun
global _autosave_val
if fun != None:
_autosave_fun = fun
_autosave_val = value
def disable_autosave():
global _autosave_fun
_autosave_fun = None
def clear_timer():
global _autosave_tim
if _autosave_tim:
gtk.timeout_remove(_autosave_tim)
_autosave_tim = None
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# Clears the modified flag. Should be called after data is saved. # Clears the modified flag. Should be called after data is saved.