* src/Assistant.py: More changes, still needs work.
* src/Exporter.py: More changes, still needs work. svn: r5709
This commit is contained in:
		@@ -12,6 +12,9 @@
 | 
			
		||||
	* src/ViewManager.py: Add handler for Export; add hot keys for
 | 
			
		||||
	import and export.
 | 
			
		||||
 | 
			
		||||
	* src/Assistant.py: More changes, still needs work.
 | 
			
		||||
	* src/Exporter.py: More changes, still needs work.
 | 
			
		||||
 | 
			
		||||
2006-01-09  Don Allingham  <don@gramps-project.org>
 | 
			
		||||
	* relation.svg: Relationship view icon
 | 
			
		||||
	* media.svg: Relationship view icon
 | 
			
		||||
 
 | 
			
		||||
@@ -94,6 +94,7 @@ class Assistant(gtk.Object):
 | 
			
		||||
 | 
			
		||||
        self.current_page = 0
 | 
			
		||||
        self.max_page = 1
 | 
			
		||||
        self.conclusion_set = False
 | 
			
		||||
        
 | 
			
		||||
        self.window = gtk.Window()
 | 
			
		||||
        titlebox = gtk.HBox()
 | 
			
		||||
@@ -103,7 +104,6 @@ class Assistant(gtk.Object):
 | 
			
		||||
        self.title = gtk.Label(self.title_text[0])
 | 
			
		||||
        self.title.set_alignment(0,0.5)
 | 
			
		||||
        self.title.set_use_markup(True)
 | 
			
		||||
        self.conclude_text = "No finish text specified"
 | 
			
		||||
 | 
			
		||||
        titlebox.pack_start(self.title,True)
 | 
			
		||||
        image = gtk.Image()
 | 
			
		||||
@@ -150,9 +150,11 @@ class Assistant(gtk.Object):
 | 
			
		||||
        """Set the property of writable properties."""
 | 
			
		||||
        raise AttributeError, 'unknown or read only property %s' % prop.name
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def update_title(self):
 | 
			
		||||
        self.title.set_label(self.title_text[self.current_page])
 | 
			
		||||
        try:
 | 
			
		||||
            self.title.set_label(self.title_text[self.current_page])
 | 
			
		||||
        except IndexError:
 | 
			
		||||
            pass
 | 
			
		||||
        self.title.set_use_markup(True)
 | 
			
		||||
 | 
			
		||||
    def set_buttons(self):
 | 
			
		||||
@@ -201,7 +203,7 @@ class Assistant(gtk.Object):
 | 
			
		||||
            self.current_page += 1
 | 
			
		||||
            self.notebook.set_current_page(self.current_page)
 | 
			
		||||
            self.update_title()
 | 
			
		||||
	    self.set_buttons()
 | 
			
		||||
            self.set_buttons()
 | 
			
		||||
 | 
			
		||||
        self.emit('after-page-next',self.notebook.get_current_page())
 | 
			
		||||
        self.emit('page-changed',self.notebook.get_current_page())
 | 
			
		||||
@@ -217,29 +219,44 @@ class Assistant(gtk.Object):
 | 
			
		||||
        self.notebook.append_page(hbox)
 | 
			
		||||
 | 
			
		||||
    def set_conclusion(self,title,text):
 | 
			
		||||
        self.conclude_text = text
 | 
			
		||||
        hbox = gtk.HBox(spacing=12)
 | 
			
		||||
        image = gtk.Image()
 | 
			
		||||
        image.set_from_file(_splash_jpg)
 | 
			
		||||
        hbox.pack_start(image,False)
 | 
			
		||||
        label = gtk.Label(text)
 | 
			
		||||
        label.set_line_wrap(True)
 | 
			
		||||
        hbox.add(label)
 | 
			
		||||
        hbox.show_all()
 | 
			
		||||
        if self.conclusion_set:
 | 
			
		||||
            self.notebook.remove_page(-1)
 | 
			
		||||
            self.title_text.pop(-1)
 | 
			
		||||
        self.notebook.append_page(hbox)
 | 
			
		||||
        self.title_text.append(_format % title)
 | 
			
		||||
        self.conclusion_set = True
 | 
			
		||||
 | 
			
		||||
    def add_page(self, title, child):
 | 
			
		||||
        self.title_text.append(_format % title)
 | 
			
		||||
        self.notebook.append_page(child)
 | 
			
		||||
        self.max_page += 1
 | 
			
		||||
 | 
			
		||||
    def insert_page(self, title, child, position=-1):
 | 
			
		||||
        self.title_text.insert(position,_format % title)
 | 
			
		||||
        self.notebook.insert_page(child,None,position)
 | 
			
		||||
        self.max_page += 1
 | 
			
		||||
 | 
			
		||||
    def remove_page(self,position):
 | 
			
		||||
        self.title_text.pop(position)
 | 
			
		||||
        self.notebook.remove_page(position)
 | 
			
		||||
        self.max_page -= 1
 | 
			
		||||
 | 
			
		||||
    def get_number_of_pages(self):
 | 
			
		||||
        return self.max_page
 | 
			
		||||
 | 
			
		||||
    def show(self):
 | 
			
		||||
        self.title_text.append(_format % _('Finished'))
 | 
			
		||||
        hbox = gtk.HBox(spacing=12)
 | 
			
		||||
        image = gtk.Image()
 | 
			
		||||
        image.set_from_file(_splash_jpg)
 | 
			
		||||
        hbox.pack_start(image,False)
 | 
			
		||||
        label = gtk.Label(self.conclude_text)
 | 
			
		||||
        label.set_line_wrap(True)
 | 
			
		||||
        hbox.add(label)
 | 
			
		||||
        self.notebook.append_page(hbox)
 | 
			
		||||
        self.window.show_all()
 | 
			
		||||
        self.notebook.set_current_page(0)
 | 
			
		||||
        
 | 
			
		||||
        self.emit('page-changed',self.notebook.get_current_page())
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def destroy(self):
 | 
			
		||||
        self.window.destroy()
 | 
			
		||||
 | 
			
		||||
@@ -283,6 +300,8 @@ if __name__ == "__main__":
 | 
			
		||||
    make_label(table,_('Email:'),5,0,1,1,4)
 | 
			
		||||
    box.add(table)
 | 
			
		||||
    a.add_page('Researcher information',box)
 | 
			
		||||
 | 
			
		||||
    a.set_conclusion('aaa','bbb')
 | 
			
		||||
    a.show()
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    gtk.main()
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										161
									
								
								src/Exporter.py
									
									
									
									
									
								
							
							
						
						
									
										161
									
								
								src/Exporter.py
									
									
									
									
									
								
							@@ -49,7 +49,8 @@ import QuestionDialog
 | 
			
		||||
import GrampsKeys
 | 
			
		||||
import GrampsDisplay
 | 
			
		||||
import Assistant
 | 
			
		||||
print "0"
 | 
			
		||||
 | 
			
		||||
from GrampsDb import gramps_db_writer_factory
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
# Exporter
 | 
			
		||||
@@ -83,31 +84,38 @@ class Exporter:
 | 
			
		||||
 | 
			
		||||
        self.build_exports()
 | 
			
		||||
        self.confirm_label = gtk.Label()
 | 
			
		||||
        self.extra_pages = []
 | 
			
		||||
        self.format_option = None
 | 
			
		||||
 | 
			
		||||
        self.w = Assistant.Assistant(_('Saving your data'),None)
 | 
			
		||||
        self.w = Assistant.Assistant(_('Saving your data'),self.complete)
 | 
			
		||||
 | 
			
		||||
        self.w.set_intro(self.get_intro_text())
 | 
			
		||||
        
 | 
			
		||||
        title,box = self.build_format_page()
 | 
			
		||||
        self.w.add_page(title,box)
 | 
			
		||||
        title1,box1 = self.build_format_page()
 | 
			
		||||
        self.w.add_page(title1,box1)
 | 
			
		||||
        self.format_page = 1
 | 
			
		||||
 | 
			
		||||
        title,box = self.build_file_sel_page()
 | 
			
		||||
        self.w.add_page(title,box)
 | 
			
		||||
        title2,box2 = self.build_file_sel_page()
 | 
			
		||||
        self.w.add_page(title2,box2)
 | 
			
		||||
        self.file_sel_page = self.w.get_number_of_pages()
 | 
			
		||||
 | 
			
		||||
        title,box = self.build_confirm_page()
 | 
			
		||||
        self.w.add_page(title,box)
 | 
			
		||||
        title3,box3 = self.build_confirm_page()
 | 
			
		||||
        self.w.add_page(title3,box3)
 | 
			
		||||
 | 
			
		||||
        title,text=self.get_conclusion_text()
 | 
			
		||||
        self.w.set_conclusion(title,text)
 | 
			
		||||
        self.w.connect('before-page-next',self.on_before_page_next)
 | 
			
		||||
 | 
			
		||||
        self.w.show()
 | 
			
		||||
 | 
			
		||||
    def close(self,obj,obj2=None):
 | 
			
		||||
        """
 | 
			
		||||
        Close and delete handler.
 | 
			
		||||
        """
 | 
			
		||||
        self.w.destroy()
 | 
			
		||||
    def complete(self):
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
    def on_before_page_next(self,obj,page,data=None):
 | 
			
		||||
        if page == self.format_page:
 | 
			
		||||
            self.build_options()
 | 
			
		||||
            self.suggest_filename()
 | 
			
		||||
        elif page == self.file_sel_page-1:
 | 
			
		||||
            self.build_confirm_label()
 | 
			
		||||
        elif page == self.file_sel_page:
 | 
			
		||||
            self.success = self.save()
 | 
			
		||||
 | 
			
		||||
    def help(self,obj):
 | 
			
		||||
        """
 | 
			
		||||
@@ -139,11 +147,9 @@ class Exporter:
 | 
			
		||||
        box = gtk.VBox()
 | 
			
		||||
        box.set_spacing(12)
 | 
			
		||||
        box.add(self.confirm_label)
 | 
			
		||||
        #p.connect('prepare',self.build_confirm_label)
 | 
			
		||||
        #p.connect('next',self.save)
 | 
			
		||||
        return (page_title,box)
 | 
			
		||||
 | 
			
		||||
    def build_confirm_label(self,obj,obj2):
 | 
			
		||||
    def build_confirm_label(self):
 | 
			
		||||
        """
 | 
			
		||||
        Build the text of the confirmation label. This should query
 | 
			
		||||
        the selected options (format, filename) and present the summary
 | 
			
		||||
@@ -158,11 +164,12 @@ class Exporter:
 | 
			
		||||
        self.confirm_label.set_text(
 | 
			
		||||
                _('The data will be saved as follows:\n\n'
 | 
			
		||||
                'Format:\t%s\nName:\t%s\nFolder:\t%s\n\n'
 | 
			
		||||
                'Press Forward to proceed, Cancel to abort, or Back to '
 | 
			
		||||
                'Press OK to proceed, Cancel to abort, or Back to '
 | 
			
		||||
                'revisit your options.') % (format, name, folder))
 | 
			
		||||
        self.confirm_label.set_line_wrap(True)
 | 
			
		||||
        self.confirm_label.show_all()
 | 
			
		||||
 | 
			
		||||
    def save(self,obj,obj2):
 | 
			
		||||
    def save(self):
 | 
			
		||||
        """
 | 
			
		||||
        Perform the actual Save As/Export operation. 
 | 
			
		||||
        Depending on the success status, set the text for the final page.
 | 
			
		||||
@@ -171,44 +178,31 @@ class Exporter:
 | 
			
		||||
        GrampsKeys.save_last_export_dir(os.path.split(filename)[0])
 | 
			
		||||
        ix = self.get_selected_format_index()
 | 
			
		||||
        if self.exports[ix][3]:
 | 
			
		||||
            success = self.exports[ix][0](self.parent.db,filename,self.person,
 | 
			
		||||
                    self.option_box_instance)
 | 
			
		||||
            success = self.exports[ix][0](self.dbstate.db,
 | 
			
		||||
                                          filename,self.person,
 | 
			
		||||
                                          self.option_box_instance)
 | 
			
		||||
        else:
 | 
			
		||||
            success = self.exports[ix][0](self.parent.db,filename,self.person)
 | 
			
		||||
            success = self.exports[ix][0](self.dbstate.db,
 | 
			
		||||
                                          filename,self.person)
 | 
			
		||||
        if success:
 | 
			
		||||
            self.last_page.set_title(_('Your data has been saved'))
 | 
			
		||||
            self.last_page.set_text(_('The copy of your data has been '
 | 
			
		||||
                    'successfully saved. You may press Apply button '
 | 
			
		||||
                    'now to continue.\n\n'
 | 
			
		||||
                    'Note: the database currently opened in your GRAMPS '
 | 
			
		||||
                    'window is NOT the file you have just saved. '
 | 
			
		||||
                    'Future editing of the currently opened database will '
 | 
			
		||||
                    'not alter the copy you have just made. '))
 | 
			
		||||
            conclusion_title =  _('Your data has been saved')
 | 
			
		||||
            conclusion_text = _(
 | 
			
		||||
                'The copy of your data has been '
 | 
			
		||||
                'successfully saved. You may press Apply button '
 | 
			
		||||
                'now to continue.\n\n'
 | 
			
		||||
                'Note: the database currently opened in your GRAMPS '
 | 
			
		||||
                'window is NOT the file you have just saved. '
 | 
			
		||||
                'Future editing of the currently opened database will '
 | 
			
		||||
                'not alter the copy you have just made. ')
 | 
			
		||||
        else:
 | 
			
		||||
            self.last_page.set_title(_('Saving failed'))
 | 
			
		||||
            self.last_page.set_text()
 | 
			
		||||
 | 
			
		||||
    def get_conclusion_text(self,success=False):
 | 
			
		||||
        if success:
 | 
			
		||||
            return (
 | 
			
		||||
                _('Your data has been saved'),
 | 
			
		||||
                _('The copy of your data has been '
 | 
			
		||||
                     'successfully saved. You may press Apply button '
 | 
			
		||||
                     'now to continue.\n\n'
 | 
			
		||||
                     'Note: the database currently opened in your GRAMPS '
 | 
			
		||||
                     'window is NOT the file you have just saved. '
 | 
			
		||||
                     'Future editing of the currently opened database will '
 | 
			
		||||
                     'not alter the copy you have just made. ')
 | 
			
		||||
                )
 | 
			
		||||
        else:
 | 
			
		||||
            return (
 | 
			
		||||
                _('Saving failed'),
 | 
			
		||||
                _('There was an error while saving your data. '
 | 
			
		||||
                  'Please go back and try again.\n\n'
 | 
			
		||||
                  'Note: your currently opened database is safe. '
 | 
			
		||||
                  'It was only '
 | 
			
		||||
                  'a copy of your data that failed to save.')
 | 
			
		||||
                )
 | 
			
		||||
            conclusion_title =  _('Saving failed'),
 | 
			
		||||
            conclusion_text = _(
 | 
			
		||||
                'There was an error while saving your data. '
 | 
			
		||||
                'You may try starting the export again.\n\n'
 | 
			
		||||
                'Note: your currently opened database is safe. '
 | 
			
		||||
                'It was only '
 | 
			
		||||
                'a copy of your data that failed to save.')
 | 
			
		||||
        self.w.set_conclusion(conclusion_title,conclusion_text)
 | 
			
		||||
 | 
			
		||||
    def build_format_page(self):
 | 
			
		||||
        """
 | 
			
		||||
@@ -241,46 +235,35 @@ class Exporter:
 | 
			
		||||
            tip.set_tip(button,description)
 | 
			
		||||
        
 | 
			
		||||
        box.add(table)
 | 
			
		||||
        #box.show_all()
 | 
			
		||||
        #p.connect('next',self.build_options)
 | 
			
		||||
        return (page_title,box)
 | 
			
		||||
 | 
			
		||||
    def build_options(self,obj,obj2):
 | 
			
		||||
    def build_options(self):
 | 
			
		||||
        """
 | 
			
		||||
        Build an extra page with the options specific for the chosen format.
 | 
			
		||||
        If there's already a page (or pages) for this format in 
 | 
			
		||||
        self.empty_pages then do nothing, otherwise add a page.
 | 
			
		||||
        If there's already an entry for this format in self.extra_pages then
 | 
			
		||||
        do nothing, otherwise add a page.
 | 
			
		||||
 | 
			
		||||
        If the chosen format does not have options then remove all
 | 
			
		||||
        extra pages that are already there (from previous user passes 
 | 
			
		||||
        through the druid).
 | 
			
		||||
        through the assistant).
 | 
			
		||||
        """
 | 
			
		||||
        ix = self.get_selected_format_index()
 | 
			
		||||
        if self.exports[ix][3]:
 | 
			
		||||
            if ix == self.format_option:
 | 
			
		||||
                return
 | 
			
		||||
            elif self.format_option:
 | 
			
		||||
                self.w.remove_page(self.format_page+1)
 | 
			
		||||
                self.format_option = None
 | 
			
		||||
            title = self.exports[ix][3][0]
 | 
			
		||||
            for (ep_ix,ep) in self.extra_pages:
 | 
			
		||||
                if ep_ix == ix:
 | 
			
		||||
                    return
 | 
			
		||||
                else:
 | 
			
		||||
                   ep.destroy()
 | 
			
		||||
                   self.extra_pages.remove((ep_ix,ep))
 | 
			
		||||
 | 
			
		||||
            option_box_class = self.exports[ix][3][1]
 | 
			
		||||
            self.option_box_instance = option_box_class(self.person)
 | 
			
		||||
 | 
			
		||||
            p = DruidPageStandard()
 | 
			
		||||
            p.set_title(title)
 | 
			
		||||
            p.set_title_foreground(self.fg_color)
 | 
			
		||||
            p.set_background(self.bg_color)
 | 
			
		||||
            p.set_logo(self.logo)
 | 
			
		||||
            p.append_item("",self.option_box_instance.get_option_box(),"")
 | 
			
		||||
            self.extra_pages.append((ix,p))
 | 
			
		||||
            self.d.insert_page(self.file_sel_page,p)
 | 
			
		||||
            p.show_all()
 | 
			
		||||
        else:
 | 
			
		||||
            for (ep_ix,ep) in self.extra_pages:
 | 
			
		||||
                ep.destroy()
 | 
			
		||||
            self.extra_pages = []
 | 
			
		||||
            box = self.option_box_instance.get_option_box()
 | 
			
		||||
            self.w.insert_page(title,box,self.format_page+1)
 | 
			
		||||
            self.format_option = ix
 | 
			
		||||
            box.show_all()
 | 
			
		||||
        elif self.format_option:
 | 
			
		||||
            self.w.remove_page(self.format_page+1)
 | 
			
		||||
            self.format_option = None
 | 
			
		||||
 | 
			
		||||
    def build_file_sel_page(self):
 | 
			
		||||
        """
 | 
			
		||||
@@ -294,14 +277,12 @@ class Exporter:
 | 
			
		||||
        box.set_spacing(12)
 | 
			
		||||
        box.add(self.chooser)
 | 
			
		||||
 | 
			
		||||
        # Dirty hack to enable proper EXPAND and FILL properties of the chooser
 | 
			
		||||
        # Dirty hack to enable proper EXPAND/FILL properties of the chooser
 | 
			
		||||
        box.set_child_packing(self.chooser,1,1,0,gtk.PACK_START)
 | 
			
		||||
        #gradnparent = parent.get_parent()
 | 
			
		||||
        #gradnparent.set_child_packing(parent,1,1,0,gtk.PACK_START)
 | 
			
		||||
        #p.connect('prepare',self.suggest_filename)
 | 
			
		||||
 | 
			
		||||
        return (page_title,box)
 | 
			
		||||
 | 
			
		||||
    def suggest_filename(self,obj,obj2):
 | 
			
		||||
    def suggest_filename(self):
 | 
			
		||||
        """
 | 
			
		||||
        Prepare suggested filename and set it in the file chooser. 
 | 
			
		||||
        """
 | 
			
		||||
@@ -318,7 +299,7 @@ class Exporter:
 | 
			
		||||
        if ext == 'gramps':
 | 
			
		||||
            new_filename = os.path.expanduser(default_dir + 'data.gramps')
 | 
			
		||||
        elif ext == 'burn':
 | 
			
		||||
            new_filename = os.path.basename(self.parent.db.get_save_path())
 | 
			
		||||
            new_filename = os.path.basename(self.dbstate.db.get_save_path())
 | 
			
		||||
        else:
 | 
			
		||||
            new_filename = Utils.get_new_filename(ext,default_dir)
 | 
			
		||||
        self.chooser.set_current_folder(default_dir)
 | 
			
		||||
@@ -343,7 +324,7 @@ class Exporter:
 | 
			
		||||
        In the future, filter and other options may be added.
 | 
			
		||||
        """
 | 
			
		||||
        try:
 | 
			
		||||
            GrampsDb.gramps_db_writer_factory(const.app_gramps)(database,filename,person)
 | 
			
		||||
            gramps_db_writer_factory(const.app_gramps)(database,filename,person)
 | 
			
		||||
            return 1
 | 
			
		||||
        except IOError, msg:
 | 
			
		||||
            QuestionDialog.ErrorDialog( _("Could not write file: %s") % filename,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user