* src/plugins/ExtractCity.py: provide selection dialog

2007-07-22  Don Allingham  <don@gramps-project.org>


svn: r8756
This commit is contained in:
Don Allingham 2007-07-23 04:13:37 +00:00
parent abf7019a63
commit b63174dfee
3 changed files with 161 additions and 27 deletions

View File

@ -1,10 +1,12 @@
2007-07-22 Don Allingham <don@gramps-project.org>
* src/plugins/ExtractCity.py: provide selection dialog
2007-07-22 Don Allingham <don@gramps-project.org>
* configure.in: remove gconf requirement
* src/Config/_GrampsConfigKeys.py: pylint
* src/Config/__init__.py: drop gconf, provide upgrade to .ini
* src/Config/_GrampsGconfKeys.py: pylint
* src/Config/_GrampsIniKeys.py: pylint
* src/plugins/ExtractCity.py: fix name
* src/plugins/EventNames.py: fix name
* src/Spell.py: pylint
* data/Makefile.am: remove gconf schema installation

View File

@ -28,6 +28,7 @@
#
#-------------------------------------------------------------------------
import re
import os
from gettext import gettext as _
#-------------------------------------------------------------------------
@ -46,6 +47,7 @@ import gtk.glade
import ManagedWindow
from PluginUtils import Tool, register_tool
import Utils
CITY_STATE = re.compile("^(.+),\s*([\w\s\.]+),?(\s+[\d-])?")
@ -286,6 +288,14 @@ STATE_MAP = {
"YUKON" : ("Yukon", 1),
}
COLS = [
(_('Place title'), 1),
(_('City'), 2),
(_('State'), 3),
(_('Postal code'), 4),
(_('Country'), 5)
]
#-------------------------------------------------------------------------
#
# ExtractCity
@ -303,12 +313,13 @@ class ExtractCity(Tool.BatchTool, ManagedWindow.ManagedWindow):
"""
def __init__(self, dbstate, uistate, options_class, name, callback=None):
self.label = _('Capitalization changes')
self.label = _('Extract Place data')
# ManagedWindow.ManagedWindow.__init__(self, uistate, [], self.__class__)
# self.set_window(gtk.Window(), gtk.Label(), '')
ManagedWindow.ManagedWindow.__init__(self, uistate, [], self.__class__)
self.set_window(gtk.Window(), gtk.Label(), '')
Tool.BatchTool.__init__(self, dbstate, options_class, name)
if not self.fail:
uistate.set_busy_cursor(True)
self.run(dbstate.db)
@ -318,42 +329,150 @@ class ExtractCity(Tool.BatchTool, ManagedWindow.ManagedWindow):
"""
Performs the actual extraction of information
"""
trans = db.transaction_begin("", batch=True)
db.disable_signals()
self.progress = Utils.ProgressMeter(_('Checking place titles'),'')
self.progress.set_pass(_('Looking for place fields'),
len(self.db.get_place_handles()))
self.name_list = []
for handle in db.get_place_handles():
place = db.get_place_from_handle(handle)
descr = place.get_title()
loc = place.get_main_location()
self.progress.step()
if loc.get_street() == "" and loc.get_city() == "" \
and loc.get_state() == "" and \
loc.get_postal_code() == "":
match = CITY_STATE.match(descr.strip())
if match:
(city, state, postal) = match.groups()
val = " ".join(state.strip().split()).upper()
if state:
new_state = STATE_MAP.get(state.upper())
new_state = STATE_MAP.get(val.upper())
if new_state:
self.name_list.append(
(handle,
(city, new_state[0], postal, COUNTRY[new_state[1]])))
else:
val = " ".join(descr.strip().split()).upper()
new_state = STATE_MAP.get(val)
if new_state:
loc.set_state(new_state[0])
loc.set_country(COUNTRY[new_state[1]])
if city:
loc.set_city(" ".join(city.split()))
if postal:
loc.set_postal_code(postal)
db.commit_place(place, trans)
else:
val = " ".join(descr.strip().split()).upper()
new_state = STATE_MAP.get(val)
if new_state:
loc.set_state(new_state[0])
loc.set_country(COUNTRY[new_state[1]])
db.commit_place(place, trans)
self.name_list.append(
(handle,
(None, new_state[0], None, COUNTRY[new_state[1]])))
self.progress.close()
db.transaction_commit(trans, _("Place changes"))
db.enable_signals()
db.request_rebuild()
if self.name_list:
self.display()
else:
self.close()
from QuestionDialog import OkDialog
OkDialog(_('No modifications made'),
_("No place information could be extracted."))
def display(self):
base = os.path.dirname(__file__)
glade_file = os.path.join(base, "changenames.glade")
self.top = gtk.glade.XML(glade_file, "top", "gramps")
window = self.top.get_widget('top')
self.top.signal_autoconnect({
"destroy_passed_object" : self.close,
"on_ok_clicked" : self.on_ok_clicked,
"on_help_clicked" : self.on_help_clicked,
})
self.list = self.top.get_widget("list")
self.set_window(window, self.top.get_widget('title'), self.label)
lbl = self.top.get_widget('info')
lbl.set_line_wrap(True)
lbl.set_text(
_('Below is a list of Places with the possible data that can '
'be extracted from the place title. Select the places you '
'wish GRAMPS to convert.'))
self.model = gtk.ListStore(bool, str, str, str, str, str, str)
r = gtk.CellRendererToggle()
r.connect('toggled',self.toggled)
c = gtk.TreeViewColumn(_('Select'), r, active=0)
self.list.append_column(c)
for (title, col) in COLS:
self.list.append_column(
gtk.TreeViewColumn(title,
gtk.CellRendererText(),
text=col))
self.list.set_model(self.model)
self.iter_list = []
self.progress.set_pass(_('Building display'), len(self.name_list))
for (id, data) in self.name_list:
place = self.db.get_place_from_handle(id)
descr = place.get_title()
loc = place.get_main_location()
handle = self.model.append()
self.model.set_value(handle, 0, True)
self.model.set_value(handle, 1, descr)
if data[0]:
self.model.set_value(handle, 2, data[0])
if data[1]:
self.model.set_value(handle, 3, data[1])
if data[2]:
self.model.set_value(handle, 4, data[2])
if data[3]:
self.model.set_value(handle, 5, data[3])
self.model.set_value(handle, 6, id)
self.iter_list.append(handle)
self.progress.step()
self.progress.close()
self.show()
def toggled(self,cell,path_string):
path = tuple([int (i) for i in path_string.split(':')])
row = self.model[path]
row[0] = not row[0]
def build_menu_names(self,obj):
return (self.label,None)
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
GrampsDisplay.help('tools-db')
def on_ok_clicked(self,obj):
self.trans = self.db.transaction_begin("", batch=True)
self.db.disable_signals()
changelist = [node for node in self.iter_list
if self.model.get_value(node,0)]
for change in changelist:
row = self.model[change]
place = self.db.get_place_from_handle(row[6])
(city, state, postal, country) = (row[2], row[3], row[4], row[5])
if city:
place.get_main_location().set_city(city)
if state:
place.get_main_location().set_state(state)
if postal:
place.get_main_location().set_city(postal)
if country:
place.get_main_location().set_country(postal)
self.db.commit_place(place, self.trans)
self.db.transaction_commit(self.trans,_("Extract Place data"))
self.db.enable_signals()
self.db.request_rebuild()
self.close()
#------------------------------------------------------------------------
#
#

View File

@ -18,6 +18,8 @@
<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>
@ -40,6 +42,10 @@
<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>
@ -49,7 +55,7 @@
</child>
<child>
<widget class="GtkLabel" id="label3">
<widget class="GtkLabel" id="info">
<property name="visible">True</property>
<property name="label" translatable="yes">Below is a list of the family names that
GRAMPS can convert to correct capitalization.
@ -63,6 +69,10 @@ Select the names you wish GRAMPS to convert. </property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">10</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>
@ -88,6 +98,9 @@ Select the names you wish GRAMPS to convert. </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>