2007-02-04 Zsolt Foldvari <zfoldvar@users.sourceforge.net>

* src/GrampsLocale: set svn:ignore propery
	* src/BasicUtils: set svn:ignore propery
	* src/GrampsDbUtils: set svn:ignore propery
	* src/RelLib/_Researcher.py: add missing get/set methods
	* src/GrampsDbUtils/_WriteGedcom.py: db owner handling, warn for missing
	* src/GrampsCfg.py: db owner handling, new warning pref
	* src/Config/_GrampsConfigKeys.py: db owner handling, new warning pref
	* data/gramps.schemas.in: db owner handling, new warning pref
	* src/plugins/OwnerEditor.py: db owner handling, plugin tool
	* src/plugins/ownereditor.glade: db owner handling, plugin tool



svn: r8051
This commit is contained in:
Zsolt Foldvari 2007-02-04 17:37:36 +00:00
parent 45a2cfaced
commit 63614a2740
8 changed files with 848 additions and 20 deletions

View File

@ -1,3 +1,15 @@
2007-02-04 Zsolt Foldvari <zfoldvar@users.sourceforge.net>
* src/GrampsLocale: set svn:ignore propery
* src/BasicUtils: set svn:ignore propery
* src/GrampsDbUtils: set svn:ignore propery
* src/RelLib/_Researcher.py: add missing get/set methods
* src/GrampsDbUtils/_WriteGedcom.py: db owner handling, warn for missing
* src/GrampsCfg.py: db owner handling, new warning pref
* src/Config/_GrampsConfigKeys.py: db owner handling, new warning pref
* data/gramps.schemas.in: db owner handling, new warning pref
* src/plugins/OwnerEditor.py: db owner handling, plugin tool
* src/plugins/ownereditor.glade: db owner handling, plugin tool
2007-02-04 Richard Taylor <rjt-gramps@thegrindstone.me.uk>
* src/GrampsDb/_GrampsGEDDB.py: fix reader/writer import
* ChangeLog: fix the commit of a conflit (Brian ?)

View File

@ -1153,5 +1153,18 @@
</locale>
</schema>
<schema>
<key>/schemas/apps/gramps/behavior/owner-warn</key>
<applyto>/apps/gramps/behavior/owner-warn</applyto>
<owner>gramps</owner>
<type>bool</type>
<default>0</default>
<locale name="C">
<short>Hide warning on missing database owner.</short>
<long>If set to 1, the warning about missing database owner will not
be displayed when GEDCOM export is done.</long>
</locale>
</schema>
</schemalist>
</gconfschemafile>

View File

@ -114,6 +114,7 @@ WEBSITE_DIRECTORY = ('paths','website-directory', 2)
PORT_WARN = ('preferences','port-warn', 0)
TRANSACTIONS = ('behavior','transactions', 0)
RELEDITBTN = ('interface','editbutton', 1)
OWNER_WARN = ('preferences','owner-warn', 0)
default_value = {
@ -211,4 +212,5 @@ default_value = {
WEBSITE_DIRECTORY : './',
PORT_WARN : False,
TRANSACTIONS : True,
OWNER_WARN : False,
}

View File

@ -163,7 +163,7 @@ class GrampsPreferences(ManagedWindow.ManagedWindow):
return table
def add_advanced_panel(self):
table = gtk.Table(3,8)
table = gtk.Table(4,8)
table.set_border_width(12)
table.set_col_spacings(6)
table.set_row_spacings(6)
@ -175,9 +175,14 @@ class GrampsPreferences(ManagedWindow.ManagedWindow):
table, _('Suppress warning when cancelling with changed data'),
1, Config.DONT_ASK)
self.add_checkbox(
table, _('Suppress warning about missing researcher when'
' exporting to GEDCOM'),
2, Config.OWNER_WARN)
self.add_checkbox(
table, _('Show plugin status dialog on plugin load error'),
2, Config.POP_PLUGIN_STATUS)
3, Config.POP_PLUGIN_STATUS)
return table

View File

@ -60,12 +60,10 @@ from BasicUtils import UpdateCallback
try:
import Config
STARTUP = Config.STARTUP
STARTUP_VAL = Config.get(Config.STARTUP)
HAVE_CONFIG = True
except:
log.warn("No Config module available using defaults.")
STARTUP = ('behavior','startup', 1)
STARTUP_VAL = 0
HAVE_CONFIG = False
#------------------------------------------------------------------------
#
@ -78,12 +76,6 @@ def keep_utf8(s):
def iso8859(s):
return s.encode('iso-8859-1','replace')
def researcher_info_missing():
val = STARTUP_VAL
if val < const.startup:
return True
return False
#-------------------------------------------------------------------------
#
# GEDCOM tags representing attributes that may take a parameter, value or
@ -471,14 +463,18 @@ class GedcomWriter(UpdateCallback):
self.cnvtxt = self.option_box.cnvtxt
self.nl = self.option_box.nl
if researcher_info_missing():
if HAVE_CONFIG:
show_owner_missing_warning = not Config.get(Config.OWNER_WARN)
owner_name_empty = self.db.get_researcher().get_name() == ''
if show_owner_missing_warning and owner_name_empty:
MessageHideDialog(
_('Researcher information'),
_('A valid GEDCOM file is required to contain researcher '
'information. You need to fill these data in the '
'Preferences dialog.\n\n'
'However, most programs do not require it. '
'You may leave this empty if you want.'),STARTUP)
'However, most programs do not require it. You may '
'leave this empty if you want.'),Config.OWNER_WARN)
if self.option_box.cfilter == None:
self.plist = set(self.db.get_person_handles(sort_handles=False))

View File

@ -49,14 +49,26 @@ class Researcher(LocationBase):
self.addr = ""
self.email = ""
def set_name(self, data):
"""sets the database owner's name"""
self.name = data
def get_name(self):
"""returns the database owner's name"""
return self.name
def set_address(self, data):
"""sets the database owner's address"""
self.addr = data
def get_address(self):
"""returns the database owner's address"""
return self.addr
def set_email(self, data):
""" sets the database owner's email"""
self.email = data
def get_email(self):
"""returns the database owner's email"""
return self.email
@ -80,3 +92,13 @@ class Researcher(LocationBase):
if email:
self.email = email.strip()
def get(self):
"""gets the information about the database owner"""
return (self.name,
self.addr,
self.city,
self.state,
self.country,
self.postal,
self.phone,
self.email)

192
src/plugins/OwnerEditor.py Normal file
View File

@ -0,0 +1,192 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2007 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id:
"Database Processing/Edit database owner information"
#-------------------------------------------------------------------------
#
# python modules
#
#-------------------------------------------------------------------------
import os
from gettext import gettext as _
#-------------------------------------------------------------------------
#
# gnome/gtk
#
#-------------------------------------------------------------------------
import gtk
import gtk.glade
#-------------------------------------------------------------------------
#
# gramps modules
#
#-------------------------------------------------------------------------
import Config
import GrampsCfg
import GrampsDisplay
from GrampsWidgets import MonitoredEntry
import ManagedWindow
from PluginUtils import Tool, register_tool
#-------------------------------------------------------------------------
#
# constants
#
#-------------------------------------------------------------------------
config_keys = (
Config.RESEARCHER_NAME,
Config.RESEARCHER_ADDR,
Config.RESEARCHER_CITY,
Config.RESEARCHER_STATE,
Config.RESEARCHER_COUNTRY,
Config.RESEARCHER_POSTAL,
Config.RESEARCHER_PHONE,
Config.RESEARCHER_EMAIL,
)
#-------------------------------------------------------------------------
#
# OwnerEditor
#
#-------------------------------------------------------------------------
class OwnerEditor(Tool.Tool, ManagedWindow.ManagedWindow):
"""
Allow editing database owner information.
Provides a possibility to direcly verify and edit the owner data of the
current database. It also allows copying data from/to the preferences.
"""
def __init__(self, dbstate, uistate, options_class, name, callback=None):
ManagedWindow.ManagedWindow.__init__(self, uistate, [], self.__class__)
Tool.Tool.__init__(self, dbstate, options_class, name)
self.display()
def display(self):
base = os.path.dirname(__file__)
glade_file = os.path.join(base, "ownereditor.glade")
# get the main window from glade
top_xml = gtk.glade.XML(glade_file, "top", "gramps")
# set gramps style title for the window
window = top_xml.get_widget("top")
self.set_window(window,
top_xml.get_widget("title"),
_("Database owner editor"))
# move help button to the left side
action_area = top_xml.get_widget("action_area")
help_button = top_xml.get_widget("help_button")
action_area.set_child_secondary(help_button, True)
# connect signals
top_xml.signal_autoconnect({
"on_ok_button_clicked": self.on_ok_button_clicked,
"on_cancel_button_clicked": self.close,
"on_help_button_clicked": self.on_help_button_clicked,
"on_eventbox_button_press_event": self.on_button_press_event,
})
# fetch the popup menu
popup_xml = gtk.glade.XML(glade_file, "popup-menu", "gramps")
self.menu = popup_xml.get_widget("popup-menu")
popup_xml.signal_connect("on_menu_activate", self.on_menu_activate)
# get current db owner and attach it to the entries of the window
self.owner = self.db.get_researcher()
self.entries = []
entry = [
("entry1", self.owner.set_name, self.owner.get_name),
("entry2", self.owner.set_address, self.owner.get_address),
("entry3", self.owner.set_city, self.owner.get_city),
("entry4", self.owner.set_state, self.owner.get_state),
("entry5", self.owner.set_country, self.owner.get_country),
("entry6", self.owner.set_postal_code, self.owner.get_postal_code),
("entry7", self.owner.set_phone, self.owner.get_phone),
("entry8", self.owner.set_email, self.owner.get_email),
]
for (name,set_fn,get_fn) in entry:
self.entries.append(MonitoredEntry(top_xml.get_widget(name),
set_fn,
get_fn,
self.db.readonly))
# ok, let's see what we've done
self.show()
def on_ok_button_clicked(self, obj):
"""Update the current db's owner information from editor"""
self.db.set_researcher(self.owner)
self.close()
def on_help_button_clicked(self, obj):
"""Display the relevant portion of GRAMPS manual"""
GrampsDisplay.help('tools-db')
def on_button_press_event(self, obj, event):
"""Shows popup-menu for db <-> preferences copying"""
if event.button == 3 and event.type == gtk.gdk.BUTTON_PRESS:
self.menu.popup(None,None,None,0,0)
def on_menu_activate(self, menuitem):
"""Copies the owner information from/to the preferences"""
if menuitem.name == 'copy_from_preferences_to_db':
self.owner.set(*GrampsCfg.get_researcher().get())
for entry in self.entries:
entry.update()
elif menuitem.name == 'copy_from_db_to_preferences':
for i in range(len(config_keys)):
Config.set(config_keys[i], self.owner.get()[i])
#-------------------------------------------------------------------------
#
# OwnerEditorOptions (None at the moment)
#
#-------------------------------------------------------------------------
class OwnerEditorOptions(Tool.ToolOptions):
"""Defines options and provides handling interface."""
def __init__(self,name,person_id=None):
Tool.ToolOptions.__init__(self,name,person_id)
#-------------------------------------------------------------------------
#
# Register the plugin tool to plugin manager
#
#-------------------------------------------------------------------------
register_tool(
name = 'editowner',
category = Tool.TOOL_DBPROC,
tool_class = OwnerEditor,
options_class = OwnerEditorOptions,
modes = Tool.MODE_GUI,
translated_name = _("Edit database owner information"),
status = _("Beta"),
author_name = "Zsolt Foldvari",
author_email = "zfoldvar@users.sourceforge.net",
description = _("Allow editing database owner information.")
)

View File

@ -0,0 +1,586 @@
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
<glade-interface>
<widget class="GtkWindow" id="top">
<property name="title" translatable="yes"></property>
<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_CENTER</property>
<property name="modal">False</property>
<property name="default_width">500</property>
<property name="resizable">True</property>
<property name="destroy_with_parent">False</property>
<property name="decorated">True</property>
<property name="skip_taskbar_hint">False</property>
<property name="skip_pager_hint">False</property>
<property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
<property name="focus_on_map">True</property>
<property name="urgency_hint">False</property>
<signal name="delete_event" handler="on_delete_event" last_modification_time="Mon, 10 May 2004 00:32:54 GMT"/>
<child>
<widget class="GtkEventBox" id="eventbox">
<property name="visible">True</property>
<property name="visible_window">True</property>
<property name="above_child">False</property>
<signal name="button_press_event" handler="on_eventbox_button_press_event" last_modification_time="Tue, 30 Jan 2007 21:18:53 GMT"/>
<child>
<widget class="GtkVBox" id="vbox2">
<property name="border_width">6</property>
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkHButtonBox" id="action_area">
<property name="visible">True</property>
<property name="layout_style">GTK_BUTTONBOX_END</property>
<property name="spacing">0</property>
<child>
<widget class="GtkButton" id="cancel_button">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-cancel</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<signal name="clicked" handler="on_cancel_button_clicked" last_modification_time="Tue, 30 Jan 2007 17:27:10 GMT"/>
</widget>
</child>
<child>
<widget class="GtkButton" id="ok_button">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-ok</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<signal name="clicked" handler="on_ok_button_clicked" last_modification_time="Tue, 30 Jan 2007 17:27:02 GMT"/>
</widget>
</child>
<child>
<widget class="GtkButton" id="help_button">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-help</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<signal name="clicked" handler="on_help_button_clicked" last_modification_time="Tue, 30 Jan 2007 17:26:52 GMT"/>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
<child>
<widget class="GtkHSeparator" id="hseparator1">
<property name="visible">True</property>
</widget>
<packing>
<property name="padding">3</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="title">
<property name="visible">True</property>
<property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</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">6</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkTable" id="table1">
<property name="border_width">6</property>
<property name="visible">True</property>
<property name="n_rows">8</property>
<property name="n_columns">2</property>
<property name="homogeneous">False</property>
<property name="row_spacing">6</property>
<property name="column_spacing">6</property>
<child>
<widget class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="label" translatable="yes">Name:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</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">1</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="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="label" translatable="yes">Address:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</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">1</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="label" translatable="yes">City:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</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">1</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="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="label" translatable="yes">State/Province:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</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">1</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label5">
<property name="visible">True</property>
<property name="label" translatable="yes">Country:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</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">1</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label6">
<property name="visible">True</property>
<property name="label" translatable="yes">ZIP/Postal Code:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</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">1</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label7">
<property name="visible">True</property>
<property name="label" translatable="yes">Phone:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</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">1</property>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label8">
<property name="visible">True</property>
<property name="label" translatable="yes">Email:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</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">1</property>
<property name="top_attach">7</property>
<property name="bottom_attach">8</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="entry1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">•</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="entry2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">•</property>
<property name="activates_default">False</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="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="entry3">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">•</property>
<property name="activates_default">False</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="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="entry4">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">•</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="entry5">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">•</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="entry6">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">•</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="entry7">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">•</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="entry8">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">•</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">7</property>
<property name="bottom_attach">8</property>
<property name="y_options"></property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
</child>
</widget>
</child>
</widget>
<widget class="GtkMenu" id="popup-menu">
<child>
<widget class="GtkImageMenuItem" id="copy_from_db_to_preferences">
<property name="visible">True</property>
<property name="label" translatable="yes">Copy from DB to Preferences</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_menu_activate" last_modification_time="Tue, 30 Jan 2007 21:31:57 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image4">
<property name="visible">True</property>
<property name="stock">gtk-go-back</property>
<property name="icon_size">1</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>
</child>
<child>
<widget class="GtkImageMenuItem" id="copy_from_preferences_to_db">
<property name="visible">True</property>
<property name="label" translatable="yes">Copy from Preferences to DB</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_menu_activate" last_modification_time="Tue, 30 Jan 2007 21:32:09 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image5">
<property name="visible">True</property>
<property name="stock">gtk-go-forward</property>
<property name="icon_size">1</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>
</child>
</widget>
</glade-interface>