diff --git a/ChangeLog b/ChangeLog index 7c498e58b..4b9759583 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2007-12-27 Douglas S. Blank + * src/DataViews/_MyGrampsView.py: added API for data save/load + * src/plugins/DefaultGadgets.py: top surnames takes count; TODO saves + 2007-12-26 Douglas S. Blank * src/DataViews/_MyGrampsView.py: added tooltips, cleanup, menu work * src/plugins/DefaultGadgets.py: fine tuning diff --git a/src/DataViews/_MyGrampsView.py b/src/DataViews/_MyGrampsView.py index 7ff0b7e7e..148def26a 100644 --- a/src/DataViews/_MyGrampsView.py +++ b/src/DataViews/_MyGrampsView.py @@ -51,7 +51,8 @@ def register_gadget(data_dict): global AVAILABLE_GADGETS base_opts = {"name":"Unnamed Gadget", "state":"maximized", - "column": -1, "row": -1} + "column": -1, "row": -1, + "data": []} base_opts.update(data_dict) AVAILABLE_GADGETS[base_opts["name"]] = base_opts @@ -150,7 +151,6 @@ class Gadget(object): self._generator = None self._need_to_update = False self._tags = [] - self.data = {} self.tooltip = None self.link_cursor = gtk.gdk.Cursor(gtk.gdk.LEFT_PTR) self.standard_cursor = gtk.gdk.Cursor(gtk.gdk.XTERM) @@ -212,14 +212,20 @@ class Gadget(object): self._tags.append((LinkTag(buffer),data)) buffer.apply_tag(self._tags[-1][0], start, end) + def get_text(self): + start = self.gui.buffer.get_start_iter() + end = self.gui.buffer.get_end_iter() + return self.gui.buffer.get_text(start, end) + def insert_text(self, text): self.gui.buffer.insert_at_cursor(text) def clear_text(self): self.gui.buffer.set_text('') - def set_text(self, text): - self.gui.buffer.set_text(text) + def set_text(self, text, scroll_to='start'): + self.gui.buffer.set_text('') + self.append_text(text, scroll_to) def append_text(self, text, scroll_to="end"): enditer = self.gui.buffer.get_end_iter() @@ -232,6 +238,17 @@ class Gadget(object): else: self.gui.textview.scroll_to_mark(start, 0.0, True, 0, 0) + def load_data_to_text(self, pos=0): + if len(self.gui.data) >= pos + 1: + text = self.gui.data[pos] + text = text.replace("\\n", chr(10)) + self.set_text(text, 'end') + + def save_text_to_data(self): + text = self.get_text() + text = text.replace(chr(10), "\\n") + self.gui.data.append(text) + def update(self, *handles): self.main() if self._idle_id != 0: @@ -349,6 +366,7 @@ class GuiGadget: self.column = int(kwargs.get("column", -1)) self.row = int(kwargs.get("row", -1)) self.state = kwargs.get("state", "maximized") + self.data = kwargs.get("data", []) ########## self.pui = None # user code self.xml = gtk.glade.XML(const.GLADE_FILE, 'gvgadget', "gramps") @@ -597,7 +615,12 @@ class MyGrampsView(PageView.PageView): else: data = {} for opt in cp.options(sec): - data[opt] = cp.get(sec, opt).strip() + if opt.startswith("data["): + temp = data.get("data", []) + temp.append(cp.get(sec, opt).strip()) + data["data"] = temp + else: + data[opt] = cp.get(sec, opt).strip() if "name" not in data: data["name"] = "Unnamed Gadget" retval.append((data["name"], data)) # name, opts @@ -611,7 +634,11 @@ class MyGrampsView(PageView.PageView): def save(self, *args): if debug: print "saving" filename = GADGET_FILENAME - fp = open(filename, "w") + try: + fp = open(filename, "w") + except: + print "Failed writing '%s'; gadgets not saved" % filename + return fp.write(";; Gramps gadgets file" + NL) fp.write((";; Automatically created at %s" % time.strftime("%Y/%m/%d %H:%M:%S")) + NL + NL) fp.write("[My Gramps View Options]" + NL) @@ -632,7 +659,13 @@ class MyGrampsView(PageView.PageView): if key == "title": continue if key == "column": continue if key == "row": continue - fp.write(("%s=%s" + NL)% (key, base_opts[key])) + if key == "data": + cnt = 0 + for item in base_opts["data"]: + fp.write(("data[%d]=%s" + NL) % (cnt, item)) + cnt += 1 + else: + fp.write(("%s=%s" + NL)% (key, base_opts[key])) fp.write(("column=%d" + NL) % col) fp.write(("row=%d" + NL) % row) fp.write(NL) diff --git a/src/plugins/DefaultGadgets.py b/src/plugins/DefaultGadgets.py index b32e3fe06..80f06fb73 100644 --- a/src/plugins/DefaultGadgets.py +++ b/src/plugins/DefaultGadgets.py @@ -94,8 +94,16 @@ class LogGadget(Gadget): class TopSurnamesGadget(Gadget): def init(self): + self.top_size = 10 # will be overwritten in load self.set_text("No Family Tree loaded.") + def on_load(self): + if len(self.gui.data) > 0: + self.top_size = int(self.gui.data[0]) + + def on_save(self): + self.gui.data = [self.top_size] + def main(self): self.set_text("Processing...\n") @@ -131,7 +139,7 @@ class TopSurnamesGadget(Gadget): (line + 1, surname, int((float(count)/total) * 100), count)) line += 1 - if line >= 10: + if line >= self.top_size: break self.append_text("\nTotal unique surnames: %d\n" % total_surnames) self.append_text("Total people: %d" % total_people) @@ -359,6 +367,13 @@ class TODOGadget(Gadget): self.gui.textview.set_editable(True) self.append_text("Enter your TODO list here.") + def on_load(self): + self.load_data_to_text() + + def on_save(self): + self.gui.data = [] # clear out old data + self.save_text_to_data() + def make_welcome_content(gui): text = """ Welcome to GRAMPS!