Remove column config from db, move to the plugins
Start with reuse of preferences for all configuration Allow all view plugins to set configuration dialog TODO: activate the column reorder in config of listviews svn: r14176
This commit is contained in:
parent
f0cfe6c5e9
commit
a89e8d1d18
@ -7,7 +7,6 @@ src/ansel_utf8.py
|
||||
src/Assistant.py
|
||||
src/AutoComp.py
|
||||
src/Bookmarks.py
|
||||
src/ColumnOrder.py
|
||||
src/const.py
|
||||
src/DateEdit.py
|
||||
src/Date.py
|
||||
@ -18,7 +17,6 @@ src/ExportAssistant.py
|
||||
src/ExportOptions.py
|
||||
src/glade.py
|
||||
src/GrampsAboutDialog.py
|
||||
src/GrampsCfg.py
|
||||
src/GrampsDisplay.py
|
||||
src/gramps.py
|
||||
src/ImgManip.py
|
||||
@ -187,6 +185,8 @@ src/gen/utils/callman.py
|
||||
|
||||
# gui - GUI code
|
||||
src/gui/__init__.py
|
||||
src/gui/columnorder.py
|
||||
src/gui/configure.py
|
||||
src/gui/dbguielement.py
|
||||
src/gui/dbloader.py
|
||||
src/gui/dbman.py
|
||||
@ -842,7 +842,7 @@ src/glade/displaystate.glade
|
||||
src/glade/addmedia.glade
|
||||
src/glade/questiondialog.glade
|
||||
src/glade/columnorder.glade
|
||||
src/glade/grampscfg.glade
|
||||
src/glade/configure.glade
|
||||
src/glade/dateedit.glade
|
||||
src/glade/editsource.glade
|
||||
src/glade/styleeditor.glade
|
||||
|
@ -26,8 +26,7 @@ gdir_PYTHON = \
|
||||
Assistant.py\
|
||||
AutoComp.py\
|
||||
Bookmarks.py\
|
||||
ColumnOrder.py\
|
||||
config.py\
|
||||
config.py\
|
||||
const.py\
|
||||
DateEdit.py\
|
||||
Date.py\
|
||||
@ -39,7 +38,6 @@ gdir_PYTHON = \
|
||||
ExportOptions.py\
|
||||
glade.py\
|
||||
GrampsAboutDialog.py\
|
||||
GrampsCfg.py\
|
||||
GrampsDisplay.py\
|
||||
gramps.py\
|
||||
ImgManip.py\
|
||||
|
@ -285,31 +285,6 @@ register('preferences.sprefix', 'S%04d')
|
||||
register('preferences.todo-color', '#ff0000')
|
||||
register('preferences.use-last-view', True)
|
||||
|
||||
register('person-view.columns', [(1, 0, 250), (1, 1, 50), (1, 2, 75),
|
||||
(1, 3, 100), (1, 4, 175), (1, 5, 100),
|
||||
(1, 6, 175), (1, 7, 100), (0, 8, 100)])
|
||||
register('child-view.columns', [(1, 0), (1, 1), (1, 2), (1, 3), (1, 4),
|
||||
(1, 5), (0, 6), (0, 7)])
|
||||
register('place-view.columns', [(1, 0, 250), (1, 1, 75), (1, 11, 100),
|
||||
(0, 3, 100), (1, 4, 100, ), (0, 5, 150),
|
||||
(1, 6, 150), (0, 7, 150), (0, 8, 150),
|
||||
(0, 9, 150), (0, 10, 150),(0,2,100)])
|
||||
register('source-view.columns', [(1, 0, 200), (1, 1, 75), (1, 2, 150),
|
||||
(0, 3, 100), (1, 4, 150), (0, 5, 100)])
|
||||
register('media-view.columns', [(1, 0, 200, ), (1, 1, 75), (1, 2, 100),
|
||||
(1, 3, 200), (1, 5, 150), (0, 4, 150)])
|
||||
register('repository-view.columns', [(1, 0, 200), (1, 1, 75), (0, 5, 100),
|
||||
(0, 6, 100), (1, 2, 100), (1, 3, 250),
|
||||
(1, 4, 100), (0, 7, 100), (0, 8, 100),
|
||||
(0, 9, 100), (0, 10, 100), (0, 12, 100)])
|
||||
register('event-view.columns', [(1, 0, 200), (1, 1, 75), (1, 2, 100),
|
||||
(0, 6, 230), (1, 3, 150),
|
||||
(1, 4, 200), (0, 5, 100)])
|
||||
register('family-view.columns', [(1, 0, 75), (1, 1, 200), (1, 2, 200),
|
||||
(1, 3, 100), (0, 4, 100)])
|
||||
register('note-view.columns', [(1, 0, 350), (1, 1, 75), (1, 2, 100),
|
||||
(1, 3, 100)])
|
||||
|
||||
register('researcher.researcher-addr', '')
|
||||
register('researcher.researcher-city', '')
|
||||
register('researcher.researcher-country', '')
|
||||
|
@ -195,13 +195,6 @@ class DbReadBase(object):
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def get_event_column_order(self):
|
||||
"""
|
||||
Return the Event display common information stored in the database's
|
||||
metadata.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def get_event_cursor(self):
|
||||
"""
|
||||
Return a reference to a cursor over Family objects
|
||||
@ -289,13 +282,6 @@ class DbReadBase(object):
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def get_family_list_column_order(self):
|
||||
"""
|
||||
Return the Person display common information stored in the database's
|
||||
metadata.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def get_family_relation_types(self):
|
||||
"""
|
||||
Return a list of all relationship types associated with Family
|
||||
@ -334,13 +320,6 @@ class DbReadBase(object):
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def get_media_column_order(self):
|
||||
"""
|
||||
Return the MediaObject display common information stored in the
|
||||
database's metadata.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def get_media_cursor(self):
|
||||
"""
|
||||
Return a reference to a cursor over Media objects
|
||||
@ -387,13 +366,6 @@ class DbReadBase(object):
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def get_note_column_order(self):
|
||||
"""
|
||||
Return the Note display common information stored in the database's
|
||||
metadata.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def get_note_cursor(self):
|
||||
"""
|
||||
Return a reference to a cursor over Note objects
|
||||
@ -503,13 +475,6 @@ class DbReadBase(object):
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def get_person_column_order(self):
|
||||
"""
|
||||
Return the Person display common information stored in the database's
|
||||
metadata.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def get_person_cursor(self):
|
||||
"""
|
||||
Return a reference to a cursor over Person objects
|
||||
@ -555,13 +520,6 @@ class DbReadBase(object):
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def get_place_column_order(self):
|
||||
"""
|
||||
Return the Place display common information stored in thedatabase's
|
||||
metadata.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def get_place_cursor(self):
|
||||
"""
|
||||
Return a reference to a cursor over Place objects
|
||||
@ -666,13 +624,6 @@ class DbReadBase(object):
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def get_repository_column_order(self):
|
||||
"""
|
||||
Return the Repository display common information stored in the
|
||||
database's metadata.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def get_repository_cursor(self):
|
||||
"""
|
||||
Return a reference to a cursor over Repository objects
|
||||
@ -729,13 +680,6 @@ class DbReadBase(object):
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def get_source_column_order(self):
|
||||
"""
|
||||
Return the Source display common information stored in the database's
|
||||
metadata.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def get_source_cursor(self):
|
||||
"""
|
||||
Return a reference to a cursor over Source objects
|
||||
@ -1072,74 +1016,6 @@ class DbReadBase(object):
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def get_child_column_order(self):
|
||||
"""
|
||||
Return the Person display common information stored in the database's
|
||||
metadata.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def set_child_column_order(self, col_list):
|
||||
"""
|
||||
Store the Person display common information in the database's metadata.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def set_column_order(self, col_list, name):
|
||||
"""
|
||||
Store the display information in the database's metadata.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def set_event_column_order(self, col_list):
|
||||
"""
|
||||
Store the Event display common information in the database's metadata.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def set_family_list_column_order(self, col_list):
|
||||
"""
|
||||
Store the Person display common information in the database's metadata.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def set_media_column_order(self, col_list):
|
||||
"""
|
||||
Store the Media display common information in the database's metadata.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def set_note_column_order(self, col_list):
|
||||
"""
|
||||
Store the Note display common information in the database's metadata.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def set_person_column_order(self, col_list):
|
||||
"""
|
||||
Store the Person display common information in the database's metadata.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def set_place_column_order(self, col_list):
|
||||
"""
|
||||
Store the Place display common information in the database's metadata.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def set_repository_column_order(self, col_list):
|
||||
"""
|
||||
Store the Repository display common information in the database's
|
||||
metadata.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def set_source_column_order(self, col_list):
|
||||
"""
|
||||
Store the Source display common information in the database's metadata.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def set_mediapath(self, path):
|
||||
"""
|
||||
Set the default media path for database, path should be utf-8.
|
||||
|
@ -43,13 +43,7 @@ __all__ = (
|
||||
|
||||
('PERSON_KEY', 'FAMILY_KEY', 'SOURCE_KEY', 'EVENT_KEY',
|
||||
'MEDIA_KEY', 'PLACE_KEY', 'REPOSITORY_KEY', 'NOTE_KEY',
|
||||
'REFERENCE_KEY', 'PERSON_COL_KEY', 'FAMILY_COL_KEY',
|
||||
'CHILD_COL_KEY'
|
||||
) +
|
||||
|
||||
('PERSON_COL_KEY', 'FAMILY_COL_KEY', 'CHILD_COL_KEY',
|
||||
'PLACE_COL_KEY', 'SOURCE_COL_KEY', 'MEDIA_COL_KEY',
|
||||
'EVENT_COL_KEY', 'REPOSITORY_COL_KEY', 'NOTE_COL_KEY'
|
||||
'REFERENCE_KEY'
|
||||
) +
|
||||
|
||||
('TXNADD', 'TXNUPD', 'TXNDEL')
|
||||
@ -84,14 +78,4 @@ REPOSITORY_KEY = 6
|
||||
REFERENCE_KEY = 7
|
||||
NOTE_KEY = 8
|
||||
|
||||
PERSON_COL_KEY = 'person-view.columns'
|
||||
CHILD_COL_KEY = 'child-view.columns'
|
||||
PLACE_COL_KEY = 'place-view.columns'
|
||||
SOURCE_COL_KEY = 'source-view.columns'
|
||||
MEDIA_COL_KEY = 'media-view.columns'
|
||||
REPOSITORY_COL_KEY = 'repository-view.columns'
|
||||
EVENT_COL_KEY = 'event-view.columns'
|
||||
FAMILY_COL_KEY = 'family-view.columns'
|
||||
NOTE_COL_KEY = 'note-view.columns'
|
||||
|
||||
TXNADD, TXNUPD, TXNDEL = 0, 1, 2
|
||||
|
@ -52,7 +52,6 @@ from gen.utils.callback import Callback
|
||||
from gen.db import (GrampsCursor, DbReadBase)
|
||||
from Utils import create_id
|
||||
import Errors
|
||||
import config
|
||||
|
||||
LOG = logging.getLogger(DBLOGNAME)
|
||||
#-------------------------------------------------------------------------
|
||||
@ -157,16 +156,8 @@ class DbBsddbRead(DbReadBase, Callback):
|
||||
|
||||
returns a list of all Event types assocated with instances of <object>
|
||||
in the database.
|
||||
|
||||
.. method:: get_<object>_column_order()
|
||||
|
||||
returns the object's display common information.
|
||||
|
||||
"""
|
||||
|
||||
# This holds a reference to the gramps Config module if
|
||||
# it is available, it is setup by the factory methods.
|
||||
__config__ = None
|
||||
__signals__ = {}
|
||||
# If this is True logging will be turned on.
|
||||
try:
|
||||
@ -1369,150 +1360,6 @@ class DbBsddbRead(DbReadBase, Callback):
|
||||
return self.metadata.get('mediapath', None)
|
||||
return None
|
||||
|
||||
def set_column_order(self, col_list, name):
|
||||
if (self.metadata is not None) and (not self.readonly):
|
||||
self.metadata[name] = col_list
|
||||
|
||||
def set_person_column_order(self, col_list):
|
||||
"""
|
||||
Store the Person display common information in the database's metadata.
|
||||
"""
|
||||
self.set_column_order(col_list, PERSON_COL_KEY)
|
||||
|
||||
def set_family_list_column_order(self, col_list):
|
||||
"""
|
||||
Store the Person display common information in the database's metadata.
|
||||
"""
|
||||
self.set_column_order(col_list, FAMILY_COL_KEY)
|
||||
|
||||
def set_child_column_order(self, col_list):
|
||||
"""
|
||||
Store the Person display common information in the database's metadata.
|
||||
"""
|
||||
self.set_column_order(col_list, CHILD_COL_KEY)
|
||||
|
||||
def set_place_column_order(self, col_list):
|
||||
"""
|
||||
Store the Place display common information in the database's metadata.
|
||||
"""
|
||||
self.set_column_order(col_list, PLACE_COL_KEY)
|
||||
|
||||
def set_source_column_order(self, col_list):
|
||||
"""
|
||||
Store the Source display common information in the database's metadata.
|
||||
"""
|
||||
self.set_column_order(col_list, SOURCE_COL_KEY)
|
||||
|
||||
def set_media_column_order(self, col_list):
|
||||
"""
|
||||
Store the Media display common information in the database's metadata.
|
||||
"""
|
||||
self.set_column_order(col_list, MEDIA_COL_KEY)
|
||||
|
||||
def set_event_column_order(self, col_list):
|
||||
"""
|
||||
Store the Event display common information in the database's metadata.
|
||||
"""
|
||||
self.set_column_order(col_list, EVENT_COL_KEY)
|
||||
|
||||
def set_repository_column_order(self, col_list):
|
||||
"""
|
||||
Store the Repository display common information in the database's
|
||||
metadata.
|
||||
"""
|
||||
self.set_column_order(col_list, REPOSITORY_COL_KEY)
|
||||
|
||||
def set_note_column_order(self, col_list):
|
||||
"""
|
||||
Store the Note display common information in the database's metadata.
|
||||
"""
|
||||
self.set_column_order(col_list, NOTE_COL_KEY)
|
||||
|
||||
def __get_column_order(self, name):
|
||||
default = config.get_default(name)
|
||||
cols = config.get(name)
|
||||
if len(cols) != len(default):
|
||||
return cols + default[len(cols):]
|
||||
else:
|
||||
return cols
|
||||
|
||||
def get_person_column_order(self):
|
||||
"""
|
||||
Return the Person display common information stored in the database's
|
||||
metadata.
|
||||
"""
|
||||
return self.__get_column_order(PERSON_COL_KEY)
|
||||
|
||||
def __get_columns(self, key):
|
||||
default = config.get_default(key)
|
||||
values = self.__get_column_order(key)
|
||||
new = []
|
||||
for val in values:
|
||||
if len(val) == 2:
|
||||
for x in default:
|
||||
if val[1] == x[1]:
|
||||
new.append((val[0], val[1], x[2]))
|
||||
break
|
||||
else:
|
||||
new.append(val)
|
||||
return new
|
||||
|
||||
def get_family_list_column_order(self):
|
||||
"""
|
||||
Return the Person display common information stored in the database's
|
||||
metadata.
|
||||
"""
|
||||
return self.__get_columns(FAMILY_COL_KEY)
|
||||
|
||||
def get_child_column_order(self):
|
||||
"""
|
||||
Return the Person display common information stored in the database's
|
||||
metadata.
|
||||
"""
|
||||
return self.__get_column_order(CHILD_COL_KEY)
|
||||
|
||||
def get_place_column_order(self):
|
||||
"""
|
||||
Return the Place display common information stored in thedatabase's
|
||||
metadata.
|
||||
"""
|
||||
return self.__get_columns(PLACE_COL_KEY)
|
||||
|
||||
def get_source_column_order(self):
|
||||
"""
|
||||
Return the Source display common information stored in the database's
|
||||
metadata.
|
||||
"""
|
||||
return self.__get_columns(SOURCE_COL_KEY)
|
||||
|
||||
def get_media_column_order(self):
|
||||
"""
|
||||
Return the MediaObject display common information stored in the
|
||||
database's metadata.
|
||||
"""
|
||||
return self.__get_columns(MEDIA_COL_KEY)
|
||||
|
||||
def get_event_column_order(self):
|
||||
"""
|
||||
Return the Event display common information stored in the database's
|
||||
metadata.
|
||||
"""
|
||||
return self.__get_columns(EVENT_COL_KEY)
|
||||
|
||||
def get_repository_column_order(self):
|
||||
"""
|
||||
Return the Repository display common information stored in the
|
||||
database's metadata.
|
||||
"""
|
||||
return self.__get_columns(REPOSITORY_COL_KEY)
|
||||
|
||||
def get_note_column_order(self):
|
||||
"""
|
||||
Return the Note display common information stored in the database's
|
||||
metadata.
|
||||
"""
|
||||
return self.__get_columns(NOTE_COL_KEY)
|
||||
|
||||
def find_backlink_handles(self, handle, include_classes=None):
|
||||
"""
|
||||
Find all objects that hold a reference to the object handle.
|
||||
|
@ -20,12 +20,10 @@ class DbTest(object):
|
||||
"find_next_repository_gramps_id",
|
||||
"find_next_source_gramps_id",
|
||||
"get_bookmarks",
|
||||
"get_child_column_order",
|
||||
"get_child_reference_types",
|
||||
"get_default_handle",
|
||||
"get_default_person",
|
||||
"get_event_bookmarks",
|
||||
"get_event_column_order",
|
||||
"get_event_cursor",
|
||||
"get_event_from_gramps_id",
|
||||
"get_event_from_handle",
|
||||
@ -38,14 +36,12 @@ class DbTest(object):
|
||||
"get_family_from_gramps_id",
|
||||
"get_family_from_handle",
|
||||
"get_family_handles",
|
||||
"get_family_list_column_order",
|
||||
"get_family_relation_types",
|
||||
"get_from_handle",
|
||||
"get_gramps_ids",
|
||||
"get_marker_types",
|
||||
"get_media_attribute_types",
|
||||
"get_media_bookmarks",
|
||||
"get_media_column_order",
|
||||
"get_media_cursor",
|
||||
"get_media_object_handles",
|
||||
"get_mediapath",
|
||||
@ -53,7 +49,6 @@ class DbTest(object):
|
||||
"get_name_group_mapping",
|
||||
"get_name_types",
|
||||
"get_note_bookmarks",
|
||||
"get_note_column_order",
|
||||
"get_note_cursor",
|
||||
"get_note_from_gramps_id",
|
||||
"get_note_from_handle",
|
||||
@ -70,14 +65,12 @@ class DbTest(object):
|
||||
"get_object_from_gramps_id",
|
||||
"get_object_from_handle",
|
||||
"get_person_attribute_types",
|
||||
"get_person_column_order",
|
||||
"get_person_cursor",
|
||||
"get_person_event_types",
|
||||
"get_person_from_gramps_id",
|
||||
"get_person_from_handle",
|
||||
"get_person_handles",
|
||||
"get_place_bookmarks",
|
||||
"get_place_column_order",
|
||||
"get_place_cursor",
|
||||
"get_place_from_gramps_id",
|
||||
"get_place_from_handle",
|
||||
@ -94,7 +87,6 @@ class DbTest(object):
|
||||
"get_reference_map_primary_cursor",
|
||||
"get_reference_map_referenced_cursor",
|
||||
"get_repo_bookmarks",
|
||||
"get_repository_column_order",
|
||||
"get_repository_cursor",
|
||||
"get_repository_from_gramps_id",
|
||||
"get_repository_from_handle",
|
||||
@ -103,7 +95,6 @@ class DbTest(object):
|
||||
"get_researcher",
|
||||
"get_save_path",
|
||||
"get_source_bookmarks",
|
||||
"get_source_column_order",
|
||||
"get_source_cursor",
|
||||
"get_source_from_gramps_id",
|
||||
"get_source_from_handle",
|
||||
@ -152,17 +143,6 @@ class DbTest(object):
|
||||
"set_prefixes",
|
||||
"set_repository_id_prefix",
|
||||
"set_source_id_prefix",
|
||||
# Column order:
|
||||
"set_child_column_order",
|
||||
"set_column_order",
|
||||
"set_event_column_order",
|
||||
"set_family_list_column_order",
|
||||
"set_media_column_order",
|
||||
"set_note_column_order",
|
||||
"set_person_column_order",
|
||||
"set_place_column_order",
|
||||
"set_repository_column_order",
|
||||
"set_source_column_order",
|
||||
# Other set methods:
|
||||
"set_mediapath",
|
||||
"set_redo_callback",
|
||||
|
@ -19,7 +19,7 @@ dist_pkgdata_DATA = \
|
||||
addmedia.glade \
|
||||
questiondialog.glade \
|
||||
columnorder.glade \
|
||||
grampscfg.glade \
|
||||
configure.glade \
|
||||
dateedit.glade \
|
||||
editsource.glade \
|
||||
styleeditor.glade \
|
||||
|
@ -13,6 +13,8 @@ pkgdatadir = $(datadir)/@PACKAGE@/gui
|
||||
|
||||
pkgdata_PYTHON = \
|
||||
__init__.py \
|
||||
columnorder.py \
|
||||
configure.py \
|
||||
dbguielement.py \
|
||||
dbloader.py \
|
||||
dbman.py \
|
||||
|
@ -50,8 +50,8 @@ import DateHandler
|
||||
from gen.display.name import displayer as _nd
|
||||
from gen.display.name import NameDisplayError
|
||||
import Utils
|
||||
from gen.lib import Name
|
||||
import gen.lib
|
||||
from gen.lib import Name
|
||||
import ManagedWindow
|
||||
from gui.widgets import MarkupLabel, BasicLabel
|
||||
from QuestionDialog import ErrorDialog, QuestionDialog2, OkDialog
|
||||
@ -121,44 +121,209 @@ will be removed around empty fields. Other text will appear literally."""))
|
||||
def build_menu_names(self, obj):
|
||||
return (_(" Name Editor"), _("Preferences"))
|
||||
|
||||
class GrampsPreferences(ManagedWindow.ManagedWindow):
|
||||
|
||||
def __init__(self, uistate, dbstate):
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# ConfigureDialog
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
class ConfigureDialog(ManagedWindow.ManagedWindow):
|
||||
"""
|
||||
Base class for configuration dialogs. They provide a Notebook, to which
|
||||
pages are added with configuration options, and a Cancel and Save button.
|
||||
On save, a config file on which the dialog works, is saved to disk, and
|
||||
a callback called.
|
||||
"""
|
||||
def __init__(self, uistate, dbstate, configure_page_funcs, configobj,
|
||||
configmanager,
|
||||
dialogtitle=_("Preferences"), on_close=None):
|
||||
"""
|
||||
Set up a configuration dialog
|
||||
:param uistate: a DisplayState instance
|
||||
:param dbstate: a DbState instance
|
||||
:param configure_page_funcs: a list of function that return a tuple
|
||||
(str, gtk.Widget). The string is used as label for the
|
||||
configuration page, and the widget as the content of the
|
||||
configuration page
|
||||
:param configobj: the unique object that is configured, it must be
|
||||
identifiable (id(configobj)). If the configure dialog of the
|
||||
configobj is already open, a Errors.WindowActiveError will be
|
||||
raised. Grab this exception in the calling method
|
||||
:param configmanager: a configmanager object. Several convenience
|
||||
methods are present in ConfigureDialog to set up widgets that
|
||||
write changes directly via this configmanager.
|
||||
:param dialogtitle: the title of the configuration dialog
|
||||
:param on_close: callback that is called on close
|
||||
"""
|
||||
self.dbstate = dbstate
|
||||
ManagedWindow.ManagedWindow.__init__(self, uistate, [], GrampsPreferences)
|
||||
self.__config = configmanager
|
||||
ManagedWindow.ManagedWindow.__init__(self, uistate, [], configobj)
|
||||
self.set_window(
|
||||
gtk.Dialog(_('Preferences'),
|
||||
flags=gtk.DIALOG_NO_SEPARATOR,
|
||||
gtk.Dialog(dialogtitle, flags=gtk.DIALOG_NO_SEPARATOR,
|
||||
buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)),
|
||||
None, _('Preferences'), None)
|
||||
panel = gtk.Notebook()
|
||||
self.window.vbox.add(panel)
|
||||
None, dialogtitle, None)
|
||||
self.panel = gtk.Notebook()
|
||||
self.window.vbox.add(self.panel)
|
||||
self.__on_close = on_close
|
||||
self.window.connect('response', self.done)
|
||||
panel.append_page(self.add_behavior_panel(),
|
||||
MarkupLabel(_('General')))
|
||||
panel.append_page(self.add_database_panel(),
|
||||
MarkupLabel(_('Database')))
|
||||
panel.append_page(self.add_formats_panel(),
|
||||
MarkupLabel(_('Display')))
|
||||
panel.append_page(self.add_text_panel(),
|
||||
MarkupLabel(_('Text')))
|
||||
panel.append_page(self.add_prefix_panel(),
|
||||
MarkupLabel(_('ID Formats')))
|
||||
panel.append_page(self.add_date_panel(),
|
||||
MarkupLabel(_('Dates')))
|
||||
panel.append_page(self.add_advanced_panel(),
|
||||
MarkupLabel(_('Warnings')))
|
||||
panel.append_page(self.add_researcher_panel(),
|
||||
MarkupLabel(_('Researcher')))
|
||||
panel.append_page(self.add_color_panel(),
|
||||
MarkupLabel(_('Marker Colors')))
|
||||
|
||||
self.__setup_pages(configure_page_funcs)
|
||||
|
||||
self.window.show_all()
|
||||
self.show()
|
||||
|
||||
def __setup_pages(self, configure_page_funcs):
|
||||
"""
|
||||
This method builds the notebookpages in the panel
|
||||
"""
|
||||
for func in configure_page_funcs:
|
||||
labeltitle, widget = func()
|
||||
self.panel.append_page(widget, MarkupLabel(labeltitle))
|
||||
|
||||
def done(self, obj, value):
|
||||
Utils.update_constants()
|
||||
if self.__on_close:
|
||||
self.__on_close()
|
||||
self.close()
|
||||
|
||||
def update_int_entry(self, obj, constant):
|
||||
"""
|
||||
:param obj: an object with get_text method that should contain an
|
||||
integer
|
||||
:param constant: the config setting to which the integer value must be
|
||||
saved
|
||||
"""
|
||||
try:
|
||||
self.__config.set(constant, int(obj.get_text()))
|
||||
except:
|
||||
print "WARNING: ignoring invalid value for '%s'" % constant
|
||||
|
||||
def update_entry(self, obj, constant):
|
||||
"""
|
||||
:param obj: an object with get_text method
|
||||
:param constant: the config setting to which the text value must be
|
||||
saved
|
||||
"""
|
||||
self.__config.set(constant, unicode(obj.get_text()))
|
||||
|
||||
def update_color(self, obj, constant, color_hex_label):
|
||||
color = obj.get_color()
|
||||
hexval = "#%02x%02x%02x" % (color.red/256,
|
||||
color.green/256,
|
||||
color.blue/256)
|
||||
color_hex_label.set_text(hexval)
|
||||
self.__config.set(constant, hexval)
|
||||
|
||||
def update_checkbox(self, obj, constant):
|
||||
self.__config.set(constant, obj.get_active())
|
||||
|
||||
def update_radiobox(self, obj, constant):
|
||||
self.__config.set(constant, obj.get_active())
|
||||
|
||||
def add_checkbox(self, table, label, index, constant, start=1, stop=9):
|
||||
checkbox = gtk.CheckButton(label)
|
||||
checkbox.set_active(self.__config.get(constant))
|
||||
checkbox.connect('toggled', self.update_checkbox, constant)
|
||||
table.attach(checkbox, start, stop, index, index+1, yoptions=0)
|
||||
|
||||
def add_radiobox(self, table, label, index, constant, group, column):
|
||||
radiobox = gtk.RadioButton(group,label)
|
||||
if self.__config.get(constant) == True:
|
||||
radiobox.set_active(True)
|
||||
radiobox.connect('toggled', self.update_radiobox, constant)
|
||||
table.attach(radiobox, column, column+1, index, index+1, yoptions=0)
|
||||
return radiobox
|
||||
|
||||
def add_text(self, table, label, index):
|
||||
text = gtk.Label()
|
||||
text.set_line_wrap(True)
|
||||
text.set_alignment(0.,0.)
|
||||
text.set_text(label)
|
||||
table.attach(text, 1, 9, index, index+1, yoptions=0)
|
||||
|
||||
def add_path_box(self, table, label, index, entry, path, callback_label,
|
||||
callback_sel):
|
||||
""" Add an entry to give in path and a select button to open a
|
||||
dialog.
|
||||
Changing entry calls callback_label
|
||||
Clicking open button call callback_sel
|
||||
"""
|
||||
lwidget = BasicLabel("%s: " %label)
|
||||
hbox = gtk.HBox()
|
||||
if path:
|
||||
entry.set_text(path)
|
||||
entry.connect('changed', callback_label)
|
||||
btn = gtk.Button()
|
||||
btn.connect('clicked', callback_sel)
|
||||
image = gtk.Image()
|
||||
image.set_from_stock(gtk.STOCK_OPEN, gtk.ICON_SIZE_BUTTON)
|
||||
image.show()
|
||||
btn.add(image)
|
||||
hbox.pack_start(entry, expand=True, fill=True)
|
||||
hbox.pack_start(btn, expand=False, fill=False)
|
||||
table.attach(lwidget, 1, 2, index, index+1, yoptions=0,
|
||||
xoptions=gtk.FILL)
|
||||
table.attach(hbox, 2, 3, index, index+1, yoptions=0)
|
||||
|
||||
def add_entry(self, table, label, index, constant, callback=None):
|
||||
if not callback:
|
||||
callback = self.update_entry
|
||||
lwidget = BasicLabel("%s: " % label)
|
||||
entry = gtk.Entry()
|
||||
entry.set_text(self.__config.get(constant))
|
||||
entry.connect('changed', callback, constant)
|
||||
table.attach(lwidget, 0, 1, index, index+1, yoptions=0,
|
||||
xoptions=gtk.FILL)
|
||||
table.attach(entry, 1, 2, index, index+1, yoptions=0)
|
||||
|
||||
def add_pos_int_entry(self, table, label, index, constant, callback=None):
|
||||
""" entry field for positive integers
|
||||
"""
|
||||
lwidget = BasicLabel("%s: " % label)
|
||||
entry = gtk.Entry()
|
||||
entry.set_text(str(self.__config.get(constant)))
|
||||
if callback:
|
||||
entry.connect('changed', callback, constant)
|
||||
table.attach(lwidget, 1, 2, index, index+1, yoptions=0,
|
||||
xoptions=gtk.FILL)
|
||||
table.attach(entry, 2, 3, index, index+1, yoptions=0)
|
||||
|
||||
def add_color(self, table, label, index, constant):
|
||||
lwidget = BasicLabel("%s: " % label)
|
||||
hexval = self.__config.get(constant)
|
||||
color = gtk.gdk.color_parse(hexval)
|
||||
entry = gtk.ColorButton(color=color)
|
||||
color_hex_label = BasicLabel(hexval)
|
||||
entry.connect('color-set', self.update_color, constant, color_hex_label)
|
||||
table.attach(lwidget, 0, 1, index, index+1, yoptions=0,
|
||||
xoptions=gtk.FILL)
|
||||
table.attach(entry, 1, 2, index, index+1, yoptions=0, xoptions=0)
|
||||
table.attach(color_hex_label, 2, 3, index, index+1, yoptions=0)
|
||||
return entry
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GrampsPreferences
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class GrampsPreferences(ConfigureDialog):
|
||||
|
||||
def __init__(self, uistate, dbstate):
|
||||
page_funcs = (
|
||||
self.add_behavior_panel,
|
||||
self.add_database_panel,
|
||||
self.add_formats_panel,
|
||||
self.add_text_panel,
|
||||
self.add_prefix_panel,
|
||||
self.add_date_panel,
|
||||
self.add_advanced_panel,
|
||||
self.add_researcher_panel,
|
||||
self.add_color_panel
|
||||
)
|
||||
ConfigureDialog.__init__(self, uistate, dbstate, page_funcs,
|
||||
GrampsPreferences, config,
|
||||
on_close=Utils.update_constants)
|
||||
|
||||
def add_researcher_panel(self):
|
||||
table = gtk.Table(3, 8)
|
||||
table.set_border_width(12)
|
||||
@ -172,7 +337,7 @@ class GrampsPreferences(ManagedWindow.ManagedWindow):
|
||||
self.add_entry(table, _('ZIP/Postal Code'), 5, 'researcher.researcher-postal')
|
||||
self.add_entry(table, _('Phone'), 6, 'researcher.researcher-phone')
|
||||
self.add_entry(table, _('Email'), 7, 'researcher.researcher-email')
|
||||
return table
|
||||
return _('Researcher'), table
|
||||
|
||||
def add_prefix_panel(self):
|
||||
"""
|
||||
@ -198,7 +363,7 @@ class GrampsPreferences(ManagedWindow.ManagedWindow):
|
||||
self.update_idformat_entry)
|
||||
self.add_entry(table, _('Note'), 7, 'preferences.nprefix',
|
||||
self.update_idformat_entry)
|
||||
return table
|
||||
return _('ID Formats'), table
|
||||
|
||||
def add_advanced_panel(self):
|
||||
table = gtk.Table(4, 8)
|
||||
@ -222,7 +387,7 @@ class GrampsPreferences(ManagedWindow.ManagedWindow):
|
||||
table, _('Show plugin status dialog on plugin load error.'),
|
||||
3, 'behavior.pop-plugin-status')
|
||||
|
||||
return table
|
||||
return _('Warnings'), table
|
||||
|
||||
def add_color_panel(self):
|
||||
table = gtk.Table(3, 8)
|
||||
@ -240,7 +405,7 @@ class GrampsPreferences(ManagedWindow.ManagedWindow):
|
||||
button = gtk.Button(stock=gtk.STOCK_REVERT_TO_SAVED)
|
||||
button.connect('clicked', self.reset_colors)
|
||||
table.attach(button, 1, 2, 3, 4, yoptions=0, xoptions=0)
|
||||
return table
|
||||
return _('Marker Colors'), table
|
||||
|
||||
def reset_colors(self, obj):
|
||||
|
||||
@ -734,7 +899,7 @@ class GrampsPreferences(ManagedWindow.ManagedWindow):
|
||||
_("Show text in sidebar buttons (requires restart)"),
|
||||
row, 'interface.sidebar-text', stop=3)
|
||||
row += 1
|
||||
return table
|
||||
return _('Display'), table
|
||||
|
||||
def add_text_panel(self):
|
||||
row = 0
|
||||
@ -760,7 +925,7 @@ class GrampsPreferences(ManagedWindow.ManagedWindow):
|
||||
self.add_entry(table, _('Private record'), row,
|
||||
'preferences.private-record-text')
|
||||
row += 1
|
||||
return table
|
||||
return _('Text'), table
|
||||
|
||||
def cb_name_dialog(self, obj):
|
||||
the_list = self.fmt_obox.get_model()
|
||||
@ -810,7 +975,7 @@ class GrampsPreferences(ManagedWindow.ManagedWindow):
|
||||
_('Markup for invalid date format'),
|
||||
7, 'preferences.invalid-date-format', self.update_entry)
|
||||
|
||||
return table
|
||||
return _('Dates'), table
|
||||
|
||||
def add_behavior_panel(self):
|
||||
table = gtk.Table(3, 8)
|
||||
@ -845,7 +1010,7 @@ class GrampsPreferences(ManagedWindow.ManagedWindow):
|
||||
7, self.path_entry, self.dbstate.db.get_mediapath(),
|
||||
self.set_mediapath, self.select_mediapath)
|
||||
|
||||
return table
|
||||
return _('General'), table
|
||||
|
||||
def add_database_panel(self):
|
||||
table = gtk.Table(2, 2)
|
||||
@ -860,88 +1025,7 @@ class GrampsPreferences(ManagedWindow.ManagedWindow):
|
||||
_('Automatically load last database'),
|
||||
1, 'behavior.autoload')
|
||||
|
||||
return table
|
||||
|
||||
def add_checkbox(self, table, label, index, constant, start=1, stop=9):
|
||||
checkbox = gtk.CheckButton(label)
|
||||
checkbox.set_active(config.get(constant))
|
||||
checkbox.connect('toggled', self.update_checkbox, constant)
|
||||
table.attach(checkbox, start, stop, index, index+1, yoptions=0)
|
||||
|
||||
def add_radiobox(self, table, label, index, constant, group, column):
|
||||
radiobox = gtk.RadioButton(group,label)
|
||||
if config.get(constant) == True:
|
||||
radiobox.set_active(True)
|
||||
radiobox.connect('toggled', self.update_radiobox, constant)
|
||||
table.attach(radiobox, column, column+1, index, index+1, yoptions=0)
|
||||
return radiobox
|
||||
|
||||
def add_text(self, table, label, index):
|
||||
text = gtk.Label()
|
||||
text.set_line_wrap(True)
|
||||
text.set_alignment(0.,0.)
|
||||
text.set_text(label)
|
||||
table.attach(text, 1, 9, index, index+1, yoptions=0)
|
||||
|
||||
def add_path_box(self, table, label, index, entry, path, callback_label,
|
||||
callback_sel):
|
||||
""" Add an entry to give in path and a select button to open a
|
||||
dialog.
|
||||
Changing entry calls callback_label
|
||||
Clicking open button call callback_sel
|
||||
"""
|
||||
lwidget = BasicLabel("%s: " %label)
|
||||
hbox = gtk.HBox()
|
||||
if path:
|
||||
entry.set_text(path)
|
||||
entry.connect('changed', callback_label)
|
||||
btn = gtk.Button()
|
||||
btn.connect('clicked', callback_sel)
|
||||
image = gtk.Image()
|
||||
image.set_from_stock(gtk.STOCK_OPEN, gtk.ICON_SIZE_BUTTON)
|
||||
image.show()
|
||||
btn.add(image)
|
||||
hbox.pack_start(entry, expand=True, fill=True)
|
||||
hbox.pack_start(btn, expand=False, fill=False)
|
||||
table.attach(lwidget, 1, 2, index, index+1, yoptions=0,
|
||||
xoptions=gtk.FILL)
|
||||
table.attach(hbox, 2, 3, index, index+1, yoptions=0)
|
||||
|
||||
def add_entry(self, table, label, index, constant, callback=None):
|
||||
if not callback:
|
||||
callback = self.update_entry
|
||||
lwidget = BasicLabel("%s: " % label)
|
||||
entry = gtk.Entry()
|
||||
entry.set_text(config.get(constant))
|
||||
entry.connect('changed', callback, constant)
|
||||
table.attach(lwidget, 0, 1, index, index+1, yoptions=0,
|
||||
xoptions=gtk.FILL)
|
||||
table.attach(entry, 1, 2, index, index+1, yoptions=0)
|
||||
|
||||
def add_pos_int_entry(self, table, label, index, constant, callback=None):
|
||||
""" entry field for positive integers
|
||||
"""
|
||||
lwidget = BasicLabel("%s: " % label)
|
||||
entry = gtk.Entry()
|
||||
entry.set_text(str(config.get(constant)))
|
||||
if callback:
|
||||
entry.connect('changed', callback, constant)
|
||||
table.attach(lwidget, 1, 2, index, index+1, yoptions=0,
|
||||
xoptions=gtk.FILL)
|
||||
table.attach(entry, 2, 3, index, index+1, yoptions=0)
|
||||
|
||||
def add_color(self, table, label, index, constant):
|
||||
lwidget = BasicLabel("%s: " % label)
|
||||
hexval = config.get(constant)
|
||||
color = gtk.gdk.color_parse(hexval)
|
||||
entry = gtk.ColorButton(color=color)
|
||||
color_hex_label = BasicLabel(hexval)
|
||||
entry.connect('color-set', self.update_color, constant, color_hex_label)
|
||||
table.attach(lwidget, 0, 1, index, index+1, yoptions=0,
|
||||
xoptions=gtk.FILL)
|
||||
table.attach(entry, 1, 2, index, index+1, yoptions=0, xoptions=0)
|
||||
table.attach(color_hex_label, 2, 3, index, index+1, yoptions=0)
|
||||
return entry
|
||||
return _('Database'), table
|
||||
|
||||
def set_mediapath(self, *obj):
|
||||
if self.path_entry.get_text().strip():
|
||||
@ -969,15 +1053,6 @@ class GrampsPreferences(ManagedWindow.ManagedWindow):
|
||||
self.path_entry.set_text(val)
|
||||
f.destroy()
|
||||
|
||||
def update_int_entry(self, obj, constant):
|
||||
try:
|
||||
config.set(constant, int(obj.get_text()))
|
||||
except:
|
||||
print "WARNING: ignoring invalid value for '%s'" % constant
|
||||
|
||||
def update_entry(self, obj, constant):
|
||||
config.set(constant, unicode(obj.get_text()))
|
||||
|
||||
def update_idformat_entry(self, obj, constant):
|
||||
config.set(constant, unicode(obj.get_text()))
|
||||
self.dbstate.db.set_prefixes(
|
||||
@ -1009,20 +1084,6 @@ class GrampsPreferences(ManagedWindow.ManagedWindow):
|
||||
else:
|
||||
obj.set_text(str(intval))
|
||||
|
||||
def update_color(self, obj, constant, color_hex_label):
|
||||
color = obj.get_color()
|
||||
hexval = "#%02x%02x%02x" % (color.red/256,
|
||||
color.green/256,
|
||||
color.blue/256)
|
||||
color_hex_label.set_text(hexval)
|
||||
config.set(constant, hexval)
|
||||
|
||||
def update_checkbox(self, obj, constant):
|
||||
config.set(constant, obj.get_active())
|
||||
|
||||
def update_radiobox(self, obj, constant):
|
||||
config.set(constant, obj.get_active())
|
||||
|
||||
def build_menu_names(self, obj):
|
||||
return (_('Preferences'), None)
|
||||
|
@ -67,7 +67,6 @@ import ReportBase
|
||||
import DisplayState
|
||||
import const
|
||||
import config
|
||||
import GrampsCfg
|
||||
import Errors
|
||||
from QuestionDialog import (ErrorDialog, WarningDialog, QuestionDialog2,
|
||||
InfoDialog)
|
||||
@ -76,6 +75,7 @@ import UndoHistory
|
||||
from gui.dbloader import DbLoader
|
||||
import GrampsDisplay
|
||||
from gui.widgets.progressdialog import ProgressMonitor, GtkProgressDialog
|
||||
from gui.configure import GrampsPreferences
|
||||
from gen.db.backup import backup
|
||||
from gen.db.exceptions import DbException
|
||||
from GrampsAboutDialog import GrampsAboutDialog
|
||||
@ -762,7 +762,7 @@ class ViewManager(CLIManager):
|
||||
Open the preferences dialog.
|
||||
"""
|
||||
try:
|
||||
GrampsCfg.GrampsPreferences(self.uistate, self.dbstate)
|
||||
GrampsPreferences(self.uistate, self.dbstate)
|
||||
self._key = self.uistate.connect('nameformat-changed',
|
||||
self.active_page.build_tree)
|
||||
except Errors.WindowActiveError:
|
||||
@ -885,6 +885,7 @@ class ViewManager(CLIManager):
|
||||
page = page_def(self.dbstate, self.uistate)
|
||||
# Category is (string, trans):
|
||||
page.set_category(pdata.category)
|
||||
page.set_ident(page.get_category() + '_' + pdata.id)
|
||||
page_title = page.get_title()
|
||||
page_category = page.get_category()
|
||||
page_translated_category = page.get_translated_category()
|
||||
@ -1103,6 +1104,12 @@ class ViewManager(CLIManager):
|
||||
mergeid = self.uimanager.add_ui_from_string(self.ui_category[
|
||||
category_page])
|
||||
self.merge_ids.append(mergeid)
|
||||
|
||||
configaction = self.actiongroup.get_action('ConfigView')
|
||||
if self.active_page.can_configure():
|
||||
configaction.set_sensitive(True)
|
||||
else:
|
||||
configaction.set_sensitive(False)
|
||||
|
||||
def change_category(self, obj, page, num=-1):
|
||||
"""
|
||||
@ -1330,7 +1337,7 @@ class ViewManager(CLIManager):
|
||||
"""
|
||||
Displays the configuration dialog for the active view
|
||||
"""
|
||||
pass
|
||||
self.active_page.configure()
|
||||
|
||||
def undo(self, obj):
|
||||
"""
|
||||
|
@ -51,6 +51,7 @@ import pango
|
||||
#
|
||||
#----------------------------------------------------------------
|
||||
from gui.views.navigationview import NavigationView
|
||||
from gui.columnorder import ColumnOrder
|
||||
import config
|
||||
import TreeTips
|
||||
import Errors
|
||||
@ -80,7 +81,13 @@ LISTTREE = 1
|
||||
#
|
||||
#----------------------------------------------------------------
|
||||
class ListView(NavigationView):
|
||||
|
||||
COLUMN_NAMES = []
|
||||
#listview config settings that are always present related to the columns
|
||||
CONFIGSETTINGS = (
|
||||
('columns.visible', []),
|
||||
('columns.order', []),
|
||||
('columns.sizecol', [])
|
||||
)
|
||||
ADD_MSG = ""
|
||||
EDIT_MSG = ""
|
||||
DEL_MSG = ""
|
||||
@ -127,6 +134,7 @@ class ListView(NavigationView):
|
||||
contains the interface. This containter will be inserted into
|
||||
a gtk.Notebook page.
|
||||
"""
|
||||
self.init_config()
|
||||
self.vbox = gtk.VBox()
|
||||
self.vbox.set_border_width(4)
|
||||
self.vbox.set_spacing(4)
|
||||
@ -469,10 +477,24 @@ class ListView(NavigationView):
|
||||
|
||||
def column_order(self):
|
||||
"""
|
||||
Must be set by children. The method that obtains the column order
|
||||
to be used. Format: see ColumnOrder.
|
||||
Column order is obtained from the config file of the listview.
|
||||
A column order is a list of 3-tuples. The order in the list is the
|
||||
order the columns must appear in.
|
||||
For a column, the 3-tuple should be (enable, modelcol, sizecol), where
|
||||
enable: show this column or don't show it
|
||||
modelcol: column in the datamodel this column is build of
|
||||
size: size the column should have
|
||||
"""
|
||||
raise NotImplementedError
|
||||
order = self._config.get('columns.order')
|
||||
size = self._config.get('columns.sizecol')
|
||||
vis = self._config.get('columns.visible')
|
||||
colord = []
|
||||
for val, size in zip(order, size):
|
||||
if val in vis:
|
||||
colord.append((1, val, size))
|
||||
else:
|
||||
colord.append((0, val, size))
|
||||
return colord
|
||||
|
||||
def column_ord_setfunc(self, clist):
|
||||
"""
|
||||
@ -1038,8 +1060,38 @@ class ListView(NavigationView):
|
||||
def close_branch(self, obj):
|
||||
"""
|
||||
Collapse the selected branches.
|
||||
obj: for use of method in event callback
|
||||
:param obj: not used, present only to allow the use of the method in
|
||||
event callback
|
||||
"""
|
||||
selected = self.selection.get_selected_rows()
|
||||
for path in selected[1]:
|
||||
self.list.collapse_row(path)
|
||||
|
||||
def can_configure(self):
|
||||
"""
|
||||
See :class:`~gui.views.pageview.PageView
|
||||
:return: bool
|
||||
"""
|
||||
return True
|
||||
|
||||
def config_connect(self):
|
||||
"""
|
||||
Overwriten from :class:`~gui.views.pageview.PageView method
|
||||
This method will be called after the ini file is initialized
|
||||
"""
|
||||
#func = self.config_callback(self.build_tree)
|
||||
#self._config.connect('columns.visible', func)
|
||||
#self._config.connect('columns.order', func)
|
||||
pass
|
||||
|
||||
def _get_configure_page_funcs(self):
|
||||
"""
|
||||
Return a list of functions that create gtk elements to use in the
|
||||
notebook pages of the Configure dialog
|
||||
|
||||
:return: list of functions
|
||||
"""
|
||||
def columnpage():
|
||||
return _('Columns', ColumnOrder(self._config, COLUMN_NAMES,
|
||||
tree=False))
|
||||
return [columnpage]
|
||||
|
@ -46,8 +46,11 @@ from gen.ggettext import gettext as _
|
||||
# GRAMPS
|
||||
#
|
||||
#----------------------------------------------------------------
|
||||
import Errors
|
||||
from gui.dbguielement import DbGUIElement
|
||||
from gui.widgets.menutoolbuttonaction import MenuToolButtonAction
|
||||
from gui.configure import ConfigureDialog
|
||||
from config import config
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
@ -84,6 +87,8 @@ class PageView(DbGUIElement):
|
||||
placed behind the same button in the sidebar
|
||||
"""
|
||||
|
||||
CONFIGSETTINGS = []
|
||||
|
||||
def __init__(self, title, dbstate, uistate):
|
||||
self.title = title
|
||||
self.dbstate = dbstate
|
||||
@ -102,6 +107,7 @@ class PageView(DbGUIElement):
|
||||
self._dirty_on_change_inactive = True
|
||||
self.func_list = {}
|
||||
self.category = "Miscellaneous"
|
||||
self.ident = None
|
||||
self.translated_category = _("Miscellaneous")
|
||||
|
||||
self.dbstate.connect('no-database', self.disable_action_group)
|
||||
@ -110,6 +116,9 @@ class PageView(DbGUIElement):
|
||||
self.model = None
|
||||
self.selection = None
|
||||
self.handle_col = 0
|
||||
|
||||
self._config = None
|
||||
self.__configure_content = None
|
||||
|
||||
DbGUIElement.__init__(self, dbstate.db)
|
||||
|
||||
@ -232,6 +241,12 @@ class PageView(DbGUIElement):
|
||||
"""
|
||||
return self.translated_category
|
||||
|
||||
def set_ident(self, ident):
|
||||
"""
|
||||
Set the id of the view. This is an unique ident
|
||||
"""
|
||||
self.ident = ident
|
||||
|
||||
def get_display(self):
|
||||
"""
|
||||
Builds the graphical display, returning the top level widget.
|
||||
@ -373,3 +388,73 @@ class PageView(DbGUIElement):
|
||||
that should be called when quiting the main application.
|
||||
"""
|
||||
pass
|
||||
|
||||
def init_config(self):
|
||||
"""
|
||||
If you need a view with a config, then call this method in the
|
||||
build_tree method. It will set up a config file for the
|
||||
view, and use CONFIGSETTINGS to set the config defaults.
|
||||
The config is later accessbile via self._config
|
||||
So you can do
|
||||
self._config.get("section.variable1")
|
||||
self._config.set("section.variable1", value)
|
||||
self._config.save()
|
||||
|
||||
CONFIGSETTINGS should be a list with tuples like
|
||||
("section.variable1", value)
|
||||
"""
|
||||
if self._config:
|
||||
return
|
||||
self._config = config.register_manager(self.ident,
|
||||
use_config_path=True)
|
||||
for section, value in self.CONFIGSETTINGS:
|
||||
self._config.register(section, value)
|
||||
self._config.init()
|
||||
self.config_connect()
|
||||
|
||||
def config_connect(self):
|
||||
"""
|
||||
Overwrite this method to set connects to the config file to monitor
|
||||
changes. This method will be called after the ini file is initialized
|
||||
Eg:
|
||||
self.config.connect("section.option", self.callback)
|
||||
"""
|
||||
pass
|
||||
|
||||
def config_callback(self, callback):
|
||||
"""
|
||||
Convenience wrappen to create a callback for a config setting
|
||||
:param callback: a callback function to call.
|
||||
"""
|
||||
return lambda arg1, arg2, arg3, arg4: callback()
|
||||
|
||||
def can_configure(self):
|
||||
"""
|
||||
Inheriting classes should set if the view has a configure window or not
|
||||
:return: bool
|
||||
"""
|
||||
return False
|
||||
|
||||
def configure(self):
|
||||
"""
|
||||
Open the configure dialog for the view.
|
||||
"""
|
||||
if not self.__configure_content:
|
||||
self.__configure_content = self._get_configure_page_funcs()
|
||||
title = _("Configure %(cat)s - %(view)s") % \
|
||||
{'cat': self.get_category(), 'view': self.get_title()}
|
||||
try:
|
||||
ConfigureDialog(self.uistate, self.dbstate,
|
||||
self.__configure_content,
|
||||
self, self._config, dialogtitle=title)
|
||||
except Errors.WindowActiveError:
|
||||
return
|
||||
|
||||
def _get_configure_page_funcs(self):
|
||||
"""
|
||||
Return a list of functions that create gtk elements to use in the
|
||||
notebook pages of the Configure view
|
||||
|
||||
:return: list of functions
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
@ -70,7 +70,21 @@ from gen.ggettext import gettext as _
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class PlaceBaseView(ListView):
|
||||
|
||||
""" base view class for place views, be they flat list or tree
|
||||
"""
|
||||
COL_NAME = 0
|
||||
COL_ID = 1
|
||||
COL_PARISH = 2
|
||||
COL_ZIP = 3
|
||||
COL_CITY = 4
|
||||
COL_COUNTY = 5
|
||||
COL_STATE = 6
|
||||
COL_COUNTRY = 7
|
||||
COL_LAT = 8
|
||||
COL_LON = 9
|
||||
COL_CHAN = 10
|
||||
COL_STREET = 11
|
||||
# name of the columns
|
||||
COLUMN_NAMES = [
|
||||
_('Place Name'),
|
||||
_('ID'),
|
||||
@ -85,7 +99,16 @@ class PlaceBaseView(ListView):
|
||||
_('Last Changed'),
|
||||
_('Street'),
|
||||
]
|
||||
|
||||
# default setting with visible columns, order of the col, and their size
|
||||
CONFIGSETTINGS = (
|
||||
('columns.visible', [COL_NAME, COL_ID, COL_STREET, COL_CITY, COL_STATE
|
||||
]),
|
||||
('columns.order', [COL_NAME, COL_ID, COL_STREET, COL_ZIP, COL_CITY,
|
||||
COL_COUNTY, COL_STATE, COL_COUNTRY, COL_LAT,
|
||||
COL_LON, COL_PARISH, COL_CHAN]),
|
||||
('columns.sizecol', [250, 75, 100, 100, 100, 100, 150, 150, 150,
|
||||
150, 150, 100])
|
||||
)
|
||||
ADD_MSG = _("Add a new place")
|
||||
EDIT_MSG = _("Edit the selected place")
|
||||
DEL_MSG = _("Delete the selected place")
|
||||
@ -124,17 +147,12 @@ class PlaceBaseView(ListView):
|
||||
|
||||
def navigation_type(self):
|
||||
return 'Place'
|
||||
|
||||
def column_ord_setfunc(self, clist):
|
||||
self.dbstate.db.set_place_column_order(clist)
|
||||
|
||||
def get_bookmarks(self):
|
||||
return self.dbstate.db.get_place_bookmarks()
|
||||
|
||||
def define_actions(self):
|
||||
ListView.define_actions(self)
|
||||
self._add_action('ColumnEdit', gtk.STOCK_PROPERTIES,
|
||||
_('_Column Editor'), callback=self._column_editor)
|
||||
self._add_action('FastMerge', None, _('_Merge...'),
|
||||
callback=self.fast_merge)
|
||||
self._add_toolmenu_action('MapsList', _('Loading...'),
|
||||
@ -268,19 +286,6 @@ class PlaceBaseView(ListView):
|
||||
def drag_info(self):
|
||||
return DdTargets.PLACE_LINK
|
||||
|
||||
def _column_editor(self, obj):
|
||||
import ColumnOrder
|
||||
|
||||
ColumnOrder.ColumnOrder(
|
||||
_('Select Place Columns'),
|
||||
self.uistate,
|
||||
self.dbstate.db.get_place_column_order(),
|
||||
PlaceBaseView.COLUMN_NAMES,
|
||||
self.set_column_order)
|
||||
|
||||
def column_order(self):
|
||||
return self.dbstate.db.get_place_column_order()
|
||||
|
||||
def get_stock(self):
|
||||
return 'gramps-place'
|
||||
|
||||
@ -311,7 +316,6 @@ class PlaceBaseView(ListView):
|
||||
<menuitem action="Edit"/>
|
||||
<menuitem action="Remove"/>
|
||||
</placeholder>
|
||||
<menuitem action="ColumnEdit"/>
|
||||
<menuitem action="FilterEdit"/>
|
||||
<placeholder name="Merge">
|
||||
<menuitem action="FastMerge"/>
|
||||
|
@ -60,6 +60,7 @@ class NoteModel(FlatBaseModel):
|
||||
self.column_id,
|
||||
self.column_type,
|
||||
self.column_marker,
|
||||
self.column_change,
|
||||
self.column_handle,
|
||||
self.column_marker_color
|
||||
]
|
||||
@ -68,10 +69,11 @@ class NoteModel(FlatBaseModel):
|
||||
self.column_id,
|
||||
self.column_type,
|
||||
self.column_marker,
|
||||
self.column_change,
|
||||
self.column_handle,
|
||||
self.column_marker_color
|
||||
]
|
||||
self.marker_color_column = 5
|
||||
self.marker_color_column = 6
|
||||
FlatBaseModel.__init__(self, db, scol, order, search=search,
|
||||
skip=skip, sort_map=sort_map)
|
||||
|
||||
@ -124,3 +126,7 @@ class NoteModel(FlatBaseModel):
|
||||
return None
|
||||
except IndexError:
|
||||
return None
|
||||
|
||||
def column_change(self,data):
|
||||
return unicode(time.strftime('%x %X',time.localtime(
|
||||
data[Note.POS_CHANGE])), GrampsLocale.codeset)
|
||||
|
@ -338,19 +338,6 @@ class GrampsBSDDB(DbGrdb, UpdateCallback):
|
||||
self.metadata.sync()
|
||||
return None
|
||||
|
||||
def _set_column_order(self, col_list, name):
|
||||
if self.metadata and not self.readonly:
|
||||
if self.UseTXN:
|
||||
# Start transaction if needed
|
||||
the_txn = self.env.txn_begin()
|
||||
else:
|
||||
the_txn = None
|
||||
self.metadata.put(name, col_list, txn=the_txn)
|
||||
if self.UseTXN:
|
||||
the_txn.commit()
|
||||
else:
|
||||
self.metadata.sync()
|
||||
|
||||
def version_supported(self):
|
||||
dbversion = self.metadata.get('version',default=_DBVERSION)
|
||||
return ((dbversion <= _DBVERSION) and (dbversion >= _MINVERSION))
|
||||
@ -1588,21 +1575,23 @@ class GrampsBSDDB(DbGrdb, UpdateCallback):
|
||||
|
||||
# Remove event column metadata, since columns have changed.
|
||||
# This will reset all columns to defaults in event view
|
||||
for name in (PERSON_COL_KEY, EVENT_COL_KEY):
|
||||
try:
|
||||
if self.UseTXN:
|
||||
# Start transaction if needed
|
||||
the_txn = self.env.txn_begin()
|
||||
else:
|
||||
the_txn = None
|
||||
self.metadata.delete(name, txn=the_txn)
|
||||
if self.UseTXN:
|
||||
the_txn.commit()
|
||||
else:
|
||||
self.metadata.sync()
|
||||
except KeyError:
|
||||
if self.UseTXN:
|
||||
the_txn.abort()
|
||||
## This action is removed: column data is no longer used, so no
|
||||
## need to change it
|
||||
#for name in (PERSON_COL_KEY, EVENT_COL_KEY):
|
||||
# try:
|
||||
# if self.UseTXN:
|
||||
# # Start transaction if needed
|
||||
# the_txn = self.env.txn_begin()
|
||||
# else:
|
||||
# the_txn = None
|
||||
# self.metadata.delete(name, txn=the_txn)
|
||||
# if self.UseTXN:
|
||||
# the_txn.commit()
|
||||
# else:
|
||||
# self.metadata.sync()
|
||||
# except KeyError:
|
||||
# if self.UseTXN:
|
||||
# the_txn.abort()
|
||||
|
||||
# This upgrade adds attribute lists to Event and EventRef objects
|
||||
length = self.get_number_of_events() + len(self.person_map) \
|
||||
|
@ -58,10 +58,7 @@ from gen.utils.callback import Callback
|
||||
#-------------------------------------------------------------------------
|
||||
from gen.db.dbconst import (PERSON_KEY, FAMILY_KEY, SOURCE_KEY, EVENT_KEY,
|
||||
MEDIA_KEY, PLACE_KEY, REPOSITORY_KEY, NOTE_KEY,
|
||||
REFERENCE_KEY, PERSON_COL_KEY, FAMILY_COL_KEY,
|
||||
CHILD_COL_KEY, PLACE_COL_KEY, SOURCE_COL_KEY,
|
||||
MEDIA_COL_KEY, EVENT_COL_KEY, REPOSITORY_COL_KEY,
|
||||
NOTE_COL_KEY)
|
||||
REFERENCE_KEY)
|
||||
|
||||
_UNDO_SIZE = 1000
|
||||
|
||||
@ -2294,171 +2291,6 @@ class DbGrdb(Callback):
|
||||
return self.metadata.get('mediapath', None)
|
||||
return None
|
||||
|
||||
def set_column_order(self, col_list, name):
|
||||
if (self.metadata is not None) and (not self.readonly):
|
||||
self.metadata[name] = col_list
|
||||
|
||||
def set_person_column_order(self, col_list):
|
||||
"""
|
||||
Store the Person display common information in the database's metadata.
|
||||
"""
|
||||
self.set_column_order(col_list, PERSON_COL_KEY)
|
||||
|
||||
def set_family_list_column_order(self, col_list):
|
||||
"""
|
||||
Store the Person display common information in the database's metadata.
|
||||
"""
|
||||
self.set_column_order(col_list, FAMILY_COL_KEY)
|
||||
|
||||
def set_child_column_order(self, col_list):
|
||||
"""
|
||||
Store the Person display common information in the database's metadata.
|
||||
"""
|
||||
self.set_column_order(col_list, CHILD_COL_KEY)
|
||||
|
||||
def set_place_column_order(self, col_list):
|
||||
"""
|
||||
Store the Place display common information in the database's metadata.
|
||||
"""
|
||||
self.set_column_order(col_list, PLACE_COL_KEY)
|
||||
|
||||
def set_source_column_order(self, col_list):
|
||||
"""
|
||||
Store the Source display common information in the database's metadata.
|
||||
"""
|
||||
self.set_column_order(col_list, SOURCE_COL_KEY)
|
||||
|
||||
def set_media_column_order(self, col_list):
|
||||
"""
|
||||
Store the Media display common information in the database's metadata.
|
||||
"""
|
||||
self.set_column_order(col_list, MEDIA_COL_KEY)
|
||||
|
||||
def set_event_column_order(self, col_list):
|
||||
"""
|
||||
Store the Event display common information in the database's metadata.
|
||||
"""
|
||||
self.set_column_order(col_list, EVENT_COL_KEY)
|
||||
|
||||
def set_repository_column_order(self, col_list):
|
||||
"""
|
||||
Store the Repository display common information in the database's
|
||||
metadata.
|
||||
"""
|
||||
self.set_column_order(col_list, REPOSITORY_COL_KEY)
|
||||
|
||||
def set_note_column_order(self, col_list):
|
||||
"""
|
||||
Store the Note display common information in the database's metadata.
|
||||
"""
|
||||
self.set_column_order(col_list, NOTE_COL_KEY)
|
||||
|
||||
def __get_column_order(self, name, default):
|
||||
if self.metadata is None:
|
||||
return default
|
||||
else:
|
||||
cols = self.metadata.get(name, default)
|
||||
if len(cols) != len(default):
|
||||
return cols + default[len(cols):]
|
||||
else:
|
||||
return cols
|
||||
|
||||
def get_person_column_order(self):
|
||||
"""
|
||||
Return the Person display common information stored in the database's
|
||||
metadata.
|
||||
"""
|
||||
default = [(1, 1, 100), (1, 2, 100), (1, 3, 150), (0, 4, 150),
|
||||
(1, 5, 150), (0, 6, 150), (0, 7, 100), (0, 8, 100),
|
||||
]
|
||||
return self.__get_column_order(PERSON_COL_KEY, default)
|
||||
|
||||
def __get_columns(self, key, default):
|
||||
values = self.__get_column_order(key, default)
|
||||
new = []
|
||||
for val in values:
|
||||
if len(val) == 2:
|
||||
for x in default:
|
||||
if val[1] == x[1]:
|
||||
new.append((val[0], val[1], x[2]))
|
||||
break
|
||||
else:
|
||||
new.append(val)
|
||||
return new
|
||||
|
||||
def get_family_list_column_order(self):
|
||||
"""
|
||||
Return the Person display common information stored in the database's
|
||||
metadata.
|
||||
"""
|
||||
default = [(1, 0, 75), (1, 1, 200), (1, 2, 200), (1, 3, 100),
|
||||
(0, 4, 100)]
|
||||
return self.__get_columns(FAMILY_COL_KEY, default)
|
||||
|
||||
def get_child_column_order(self):
|
||||
"""
|
||||
Return the Person display common information stored in the database's
|
||||
metadata.
|
||||
"""
|
||||
default = [(1, 0), (1, 1), (1, 2), (1, 3), (1, 4), (1, 5),
|
||||
(0, 6), (0, 7)]
|
||||
return self.__get_column_order(CHILD_COL_KEY, default)
|
||||
|
||||
def get_place_column_order(self):
|
||||
"""
|
||||
Return the Place display common information stored in thedatabase's
|
||||
metadata.
|
||||
"""
|
||||
default = [(1, 0, 250), (1, 1, 75), (1, 11, 100), (0, 3, 100),
|
||||
(1, 4, 100, ), (0, 5, 150), (1, 6, 150), (0, 7, 150),
|
||||
(0, 8, 150), (0, 9, 150), (0, 10, 150),(0,2,100)]
|
||||
return self.__get_columns(PLACE_COL_KEY, default)
|
||||
|
||||
def get_source_column_order(self):
|
||||
"""
|
||||
Return the Source display common information stored in the database's
|
||||
metadata.
|
||||
"""
|
||||
default = [(1, 0, 200), (1, 1, 75), (1, 2, 150), (0, 3, 100),
|
||||
(1, 4, 150), (0, 5, 100)]
|
||||
return self.__get_columns(SOURCE_COL_KEY, default)
|
||||
|
||||
def get_media_column_order(self):
|
||||
"""
|
||||
Return the MediaObject display common information stored in the
|
||||
database's metadata.
|
||||
"""
|
||||
default = [(1, 0, 200, ), (1, 1, 75), (1, 2, 100), (1, 3, 200),
|
||||
(1, 5, 150), (0, 4, 150)]
|
||||
return self.__get_columns(MEDIA_COL_KEY, default)
|
||||
|
||||
def get_event_column_order(self):
|
||||
"""
|
||||
Return the Event display common information stored in the database's
|
||||
metadata.
|
||||
"""
|
||||
default = [(1, 0, 200), (1, 1, 75), (1, 2, 100), (1, 3, 150),
|
||||
(1, 4, 200), (0, 5, 100)]
|
||||
return self.__get_columns(EVENT_COL_KEY, default)
|
||||
|
||||
def get_repository_column_order(self):
|
||||
"""
|
||||
Return the Repository display common information stored in the
|
||||
database's metadata.
|
||||
"""
|
||||
default = [(1, 0, 200), (1, 1, 75), (0, 5, 100), (0, 6, 100),
|
||||
(1, 2, 100), (1, 3, 250), (1, 4, 100), (0, 7, 100),
|
||||
(0, 8, 100), (0, 9, 100), (0, 10, 100), (0, 12, 100)]
|
||||
return self.__get_columns(REPOSITORY_COL_KEY, default)
|
||||
|
||||
def get_note_column_order(self):
|
||||
"""
|
||||
Return the Note display common information stored in the database's
|
||||
metadata.
|
||||
"""
|
||||
default = [(1, 0, 350), (1, 1, 75), (1, 2, 100), (1, 3, 100)]
|
||||
return self.__get_columns(NOTE_COL_KEY, default)
|
||||
|
||||
def delete_primary_from_reference_map(self, handle, transaction):
|
||||
"""
|
||||
Called each time an object is removed from the database.
|
||||
|
@ -66,6 +66,15 @@ class EventView(ListView):
|
||||
"""
|
||||
EventView class, derived from the ListView
|
||||
"""
|
||||
# columns in the model used in view
|
||||
COL_DESCR = 0
|
||||
COL_ID = 1
|
||||
COL_TYPE = 2
|
||||
COL_DATE = 3
|
||||
COL_PLACE = 4
|
||||
COL_CHAN = 5
|
||||
COL_PARTIC = 6
|
||||
# name of the columns
|
||||
COLUMN_NAMES = [
|
||||
_('Description'),
|
||||
_('ID'),
|
||||
@ -75,7 +84,13 @@ class EventView(ListView):
|
||||
_('Last Changed'),
|
||||
_('Main Participants'),
|
||||
]
|
||||
|
||||
# default setting with visible columns, order of the col, and their size
|
||||
CONFIGSETTINGS = (
|
||||
('columns.visible', [COL_DESCR, COL_ID, COL_TYPE, COL_DATE, COL_PLACE]),
|
||||
('columns.order', [COL_DESCR, COL_ID, COL_TYPE, COL_PARTIC, COL_DATE,
|
||||
COL_PLACE, COL_CHAN]),
|
||||
('columns.sizecol', [200, 75, 100, 230, 150, 200, 100])
|
||||
)
|
||||
ADD_MSG = _("Add a new event")
|
||||
EDIT_MSG = _("Edit the selected event")
|
||||
DEL_MSG = _("Delete the selected event")
|
||||
@ -113,9 +128,6 @@ class EventView(ListView):
|
||||
def navigation_type(self):
|
||||
return 'Event'
|
||||
|
||||
def column_ord_setfunc(self, clist):
|
||||
self.dbstate.db.set_event_column_order(clist)
|
||||
|
||||
def get_bookmarks(self):
|
||||
"""
|
||||
Return the bookmark object
|
||||
@ -128,12 +140,6 @@ class EventView(ListView):
|
||||
"""
|
||||
return DdTargets.EVENT
|
||||
|
||||
def column_order(self):
|
||||
"""
|
||||
returns a tuple indicating the column order
|
||||
"""
|
||||
return self.dbstate.db.get_event_column_order()
|
||||
|
||||
def get_stock(self):
|
||||
"""
|
||||
Use the gramps-event stock icon
|
||||
@ -170,7 +176,6 @@ class EventView(ListView):
|
||||
<menuitem action="Edit"/>
|
||||
<menuitem action="Remove"/>
|
||||
</placeholder>
|
||||
<menuitem action="ColumnEdit"/>
|
||||
<menuitem action="FilterEdit"/>
|
||||
</menu>
|
||||
</menubar>
|
||||
@ -203,8 +208,6 @@ class EventView(ListView):
|
||||
ListView.define_actions(self)
|
||||
self._add_action('FilterEdit', None, _('Event Filter Editor'),
|
||||
callback=self.filter_editor,)
|
||||
self._add_action('ColumnEdit', gtk.STOCK_PROPERTIES,
|
||||
_('_Column Editor'), callback=self._column_editor,)
|
||||
self._add_action('QuickReport', None,
|
||||
_("Quick View"), None, None, None)
|
||||
self._add_action('Dummy', None,
|
||||
@ -217,19 +220,6 @@ class EventView(ListView):
|
||||
else:
|
||||
return None
|
||||
|
||||
def _column_editor(self, obj):
|
||||
"""
|
||||
returns a tuple indicating the column order
|
||||
"""
|
||||
import ColumnOrder
|
||||
|
||||
ColumnOrder.ColumnOrder(
|
||||
_('Select Event Columns'),
|
||||
self.uistate,
|
||||
self.dbstate.db.get_event_column_order(),
|
||||
EventView.COLUMN_NAMES,
|
||||
self.set_column_order)
|
||||
|
||||
def add(self, obj):
|
||||
try:
|
||||
EditEvent(self.dbstate, self.uistate, [], gen.lib.Event())
|
||||
|
@ -59,7 +59,16 @@ from gen.plug import CATEGORY_QR_FAMILY
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class FamilyView(ListView):
|
||||
|
||||
""" FamilyView class, derived from the ListView
|
||||
"""
|
||||
# columns in the model used in view
|
||||
COL_ID = 0
|
||||
COL_FATHER = 1
|
||||
COL_MOTHER = 2
|
||||
COL_REL = 3
|
||||
COL_MARDATE = 4
|
||||
COL_CHAN = 5
|
||||
# name of the columns
|
||||
COLUMN_NAMES = [
|
||||
_('ID'),
|
||||
_('Father'),
|
||||
@ -68,6 +77,14 @@ class FamilyView(ListView):
|
||||
_('Marriage Date'),
|
||||
_('Last Changed'),
|
||||
]
|
||||
#default setting with visible columns, order of the col, and their size
|
||||
CONFIGSETTINGS = (
|
||||
('columns.visible', [COL_ID, COL_FATHER, COL_MOTHER, COL_REL,
|
||||
COL_MARDATE]),
|
||||
('columns.order', [COL_ID, COL_FATHER, COL_MOTHER, COL_REL,
|
||||
COL_MARDATE, COL_CHAN]),
|
||||
('columns.sizecol', [75, 200, 200, 100, 100, 100])
|
||||
)
|
||||
|
||||
ADD_MSG = _("Add a new family")
|
||||
EDIT_MSG = _("Edit the selected family")
|
||||
@ -103,22 +120,6 @@ class FamilyView(ListView):
|
||||
def navigation_type(self):
|
||||
return 'Family'
|
||||
|
||||
def column_ord_setfunc(self, clist):
|
||||
self.dbstate.db.set_family_list_column_order(clist)
|
||||
|
||||
def column_order(self):
|
||||
return self.dbstate.db.get_family_list_column_order()
|
||||
|
||||
def _column_editor(self, obj):
|
||||
import ColumnOrder
|
||||
|
||||
ColumnOrder.ColumnOrder(
|
||||
_('Select Family Columns'),
|
||||
self.uistate,
|
||||
self.dbstate.db.get_family_list_column_order(),
|
||||
FamilyView.COLUMN_NAMES,
|
||||
self.set_column_order)
|
||||
|
||||
def get_stock(self):
|
||||
return 'gramps-family'
|
||||
|
||||
@ -143,7 +144,6 @@ class FamilyView(ListView):
|
||||
<menuitem action="Edit"/>
|
||||
<menuitem action="Remove"/>
|
||||
</placeholder>
|
||||
<menuitem action="ColumnEdit"/>
|
||||
<menuitem action="FilterEdit"/>
|
||||
</menu>
|
||||
<menu action="BookMenu">
|
||||
@ -182,8 +182,6 @@ class FamilyView(ListView):
|
||||
"""Add the Forward action group to handle the Forward button."""
|
||||
|
||||
ListView.define_actions(self)
|
||||
self._add_action('ColumnEdit', gtk.STOCK_PROPERTIES,
|
||||
_('_Column Editor...'), callback=self._column_editor)
|
||||
|
||||
self._add_action('FilterEdit', None, _('Family Filter Editor'),
|
||||
callback=self.filter_editor,)
|
||||
|
@ -75,7 +75,13 @@ class MediaView(ListView):
|
||||
thumbnail image at the top of the view that must be updated when the
|
||||
selection changes or when the selected media object changes.
|
||||
"""
|
||||
|
||||
COL_TITLE = 0
|
||||
COL_ID = 1
|
||||
COL_TYPE = 2
|
||||
COL_PATH = 3
|
||||
COL_CHAN = 4
|
||||
COL_DATE = 5
|
||||
#name of the columns
|
||||
COLUMN_NAMES = [
|
||||
_('Title'),
|
||||
_('ID'),
|
||||
@ -84,6 +90,14 @@ class MediaView(ListView):
|
||||
_('Last Changed'),
|
||||
_('Date'),
|
||||
]
|
||||
# default setting with visible columns, order of the col, and their size
|
||||
CONFIGSETTINGS = (
|
||||
('columns.visible', [COL_TITLE, COL_ID, COL_TYPE, COL_PATH,
|
||||
COL_DATE]),
|
||||
('columns.order', [COL_TITLE, COL_ID, COL_TYPE, COL_PATH,
|
||||
COL_DATE, COL_CHAN]),
|
||||
('columns.sizecol', [200, 75, 100, 200, 150, 150])
|
||||
)
|
||||
|
||||
ADD_MSG = _("Add a new media object")
|
||||
EDIT_MSG = _("Edit the selected media object")
|
||||
@ -122,9 +136,6 @@ class MediaView(ListView):
|
||||
def navigation_type(self):
|
||||
return 'Media'
|
||||
|
||||
def column_ord_setfunc(self, clist):
|
||||
self.dbstate.db.set_media_column_order(clist)
|
||||
|
||||
def _set_dnd(self):
|
||||
"""
|
||||
Set up drag-n-drop. The source and destination are set by calling .target()
|
||||
@ -219,8 +230,6 @@ class MediaView(ListView):
|
||||
"""
|
||||
ListView.define_actions(self)
|
||||
|
||||
self._add_action('ColumnEdit', gtk.STOCK_PROPERTIES,
|
||||
_('_Column Editor'), callback=self._column_editor)
|
||||
self._add_action('FilterEdit', None, _('Media Filter Editor'),
|
||||
callback=self.filter_editor)
|
||||
self._add_action('OpenMedia', 'gramps-viewmedia', _('View'),
|
||||
@ -254,25 +263,6 @@ class MediaView(ListView):
|
||||
mfolder, mfile = os.path.split(mpath)
|
||||
open_file_with_default_application(mfolder)
|
||||
|
||||
def _column_editor(self, obj):
|
||||
"""
|
||||
Start the column editor dialog
|
||||
"""
|
||||
import ColumnOrder
|
||||
|
||||
ColumnOrder.ColumnOrder(
|
||||
_('Select Media Columns'),
|
||||
self.uistate,
|
||||
self.dbstate.db.get_media_column_order(),
|
||||
MediaView.COLUMN_NAMES,
|
||||
self.set_column_order)
|
||||
|
||||
def column_order(self):
|
||||
"""
|
||||
Get the column order from the database
|
||||
"""
|
||||
return self.dbstate.db.get_media_column_order()
|
||||
|
||||
def get_stock(self):
|
||||
"""
|
||||
Return the icon for this view
|
||||
@ -354,7 +344,6 @@ class MediaView(ListView):
|
||||
<menuitem action="Edit"/>
|
||||
<menuitem action="Remove"/>
|
||||
</placeholder>
|
||||
<menuitem action="ColumnEdit"/>
|
||||
<menuitem action="FilterEdit"/>
|
||||
</menu>
|
||||
<menu action="BookMenu">
|
||||
|
@ -50,7 +50,6 @@ import Utils
|
||||
import Errors
|
||||
import Bookmarks
|
||||
import config
|
||||
import ColumnOrder
|
||||
from gen.lib import Note
|
||||
from DdTargets import DdTargets
|
||||
from Filters.SideBar import NoteSidebarFilter
|
||||
@ -63,13 +62,28 @@ from gen.plug import CATEGORY_QR_NOTE
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class NoteView(ListView):
|
||||
"""
|
||||
Noteview, a normal flat listview for the notes
|
||||
"""
|
||||
COL_PREVIEW = 0
|
||||
COL_ID = 1
|
||||
COL_TYPE = 2
|
||||
COL_MARKER = 3
|
||||
COL_CHAN = 4
|
||||
|
||||
COLUMN_NAMES = [
|
||||
_('Preview'),
|
||||
_('ID'),
|
||||
_('Type'),
|
||||
_('Marker'),
|
||||
_('Last Changed')
|
||||
]
|
||||
# default setting with visible columns, order of the col, and their size
|
||||
CONFIGSETTINGS = (
|
||||
('columns.visible', [COL_PREVIEW, COL_ID, COL_TYPE, COL_MARKER]),
|
||||
('columns.order', [COL_PREVIEW, COL_ID, COL_TYPE, COL_MARKER,
|
||||
COL_CHAN]),
|
||||
('columns.sizecol', [350, 75, 100, 100, 100]))
|
||||
|
||||
ADD_MSG = _("Add a new note")
|
||||
EDIT_MSG = _("Edit the selected note")
|
||||
@ -105,9 +119,6 @@ class NoteView(ListView):
|
||||
def navigation_type(self):
|
||||
return 'Note'
|
||||
|
||||
def column_ord_setfunc(self, clist):
|
||||
self.dbstate.db.set_note_column_order(clist)
|
||||
|
||||
def get_bookmarks(self):
|
||||
"""
|
||||
Return the bookmark object
|
||||
@ -120,12 +131,6 @@ class NoteView(ListView):
|
||||
"""
|
||||
return DdTargets.NOTE_LINK
|
||||
|
||||
def column_order(self):
|
||||
"""
|
||||
returns a tuple indicating the column order
|
||||
"""
|
||||
return self.dbstate.db.get_note_column_order()
|
||||
|
||||
def get_stock(self):
|
||||
"""
|
||||
Use the gramps-event stock icon
|
||||
@ -162,7 +167,6 @@ class NoteView(ListView):
|
||||
<menuitem action="Edit"/>
|
||||
<menuitem action="Remove"/>
|
||||
</placeholder>
|
||||
<menuitem action="ColumnEdit"/>
|
||||
<menuitem action="FilterEdit"/>
|
||||
</menu>
|
||||
</menubar>
|
||||
@ -200,8 +204,6 @@ class NoteView(ListView):
|
||||
|
||||
def define_actions(self):
|
||||
ListView.define_actions(self)
|
||||
self._add_action('ColumnEdit', gtk.STOCK_PROPERTIES,
|
||||
_('_Column Editor'), callback=self._column_editor)
|
||||
self._add_action('FilterEdit', None, _('Note Filter Editor'),
|
||||
callback=self.filter_editor,)
|
||||
self._add_action('QuickReport', None, _("Quick View"), None, None, None)
|
||||
@ -214,17 +216,6 @@ class NoteView(ListView):
|
||||
else:
|
||||
return None
|
||||
|
||||
def _column_editor(self, obj):
|
||||
"""
|
||||
returns a tuple indicating the column order
|
||||
"""
|
||||
ColumnOrder.ColumnOrder(
|
||||
_('Select Note Columns'),
|
||||
self.uistate,
|
||||
self.dbstate.db.get_note_column_order(),
|
||||
NoteView.COLUMN_NAMES,
|
||||
self.set_column_order)
|
||||
|
||||
def add(self, obj):
|
||||
try:
|
||||
EditNote(self.dbstate, self.uistate, [], Note())
|
||||
|
@ -73,8 +73,18 @@ from gen.ggettext import sgettext as _
|
||||
#-------------------------------------------------------------------------
|
||||
class PersonView(ListView):
|
||||
"""
|
||||
PersonView class, derived from the ListView
|
||||
PersonView class, derived from the ListView, a treeview
|
||||
"""
|
||||
COL_NAME = 0
|
||||
COL_ID = 1
|
||||
COL_GEN = 2
|
||||
COL_BDAT = 3
|
||||
COL_BPLAC = 4
|
||||
COL_DDAT = 5
|
||||
COL_DPLAC = 6
|
||||
COL_SPOUSE = 7
|
||||
COL_CHAN = 8
|
||||
#name of the columns
|
||||
COLUMN_NAMES = [
|
||||
_('Name'),
|
||||
_('ID'),
|
||||
@ -86,7 +96,13 @@ class PersonView(ListView):
|
||||
_('Spouse'),
|
||||
_('Last Changed'),
|
||||
]
|
||||
|
||||
# default setting with visible columns, order of the col, and their size
|
||||
CONFIGSETTINGS = (
|
||||
('columns.visible', [COL_NAME, COL_ID, COL_GEN, COL_BDAT, COL_DDAT]),
|
||||
('columns.order', [COL_NAME, COL_ID, COL_GEN, COL_BDAT, COL_BPLAC,
|
||||
COL_DDAT, COL_DPLAC, COL_SPOUSE, COL_CHAN]),
|
||||
('columns.sizecol', [250, 75, 75, 100, 175, 100, 175, 100, 100])
|
||||
)
|
||||
ADD_MSG = _("Add a new person")
|
||||
EDIT_MSG = _("Edit the selected person")
|
||||
DEL_MSG = _("Delete the selected person")
|
||||
@ -127,9 +143,6 @@ class PersonView(ListView):
|
||||
"""
|
||||
return LISTTREE
|
||||
|
||||
def column_ord_setfunc(self, clist):
|
||||
self.dbstate.db.set_person_column_order(clist)
|
||||
|
||||
def navigation_type(self):
|
||||
return 'Person'
|
||||
|
||||
@ -151,17 +164,11 @@ class PersonView(ListView):
|
||||
"""
|
||||
return DdTargets.PERSON_LINK_LIST
|
||||
|
||||
def column_order(self):
|
||||
"""
|
||||
returns a tuple indicating the column order
|
||||
"""
|
||||
return self.dbstate.db.get_person_column_order()
|
||||
|
||||
def exact_search(self):
|
||||
"""
|
||||
Returns a tuple indicating columns requiring an exact search
|
||||
"""
|
||||
return (2,) # Gender ('female' contains the string 'male')
|
||||
return (PersonView.COL_GEN,) # Gender ('female' contains the string 'male')
|
||||
|
||||
def get_stock(self):
|
||||
"""
|
||||
@ -207,7 +214,6 @@ class PersonView(ListView):
|
||||
<menuitem action="Remove"/>
|
||||
</placeholder>
|
||||
<menuitem action="SetActive"/>
|
||||
<menuitem action="ColumnEdit"/>
|
||||
<menuitem action="FilterEdit"/>
|
||||
<placeholder name="Merge">
|
||||
<menuitem action="CmpMerge"/>
|
||||
@ -252,19 +258,6 @@ class PersonView(ListView):
|
||||
else:
|
||||
return None
|
||||
|
||||
def _column_editor(self, obj):
|
||||
"""
|
||||
returns a tuple indicating the column order
|
||||
"""
|
||||
import ColumnOrder
|
||||
|
||||
ColumnOrder.ColumnOrder(
|
||||
_('Select Person Columns'),
|
||||
self.uistate,
|
||||
self.dbstate.db.get_person_column_order(),
|
||||
PersonView.COLUMN_NAMES,
|
||||
self.set_column_order)
|
||||
|
||||
def add(self, obj):
|
||||
person = gen.lib.Person()
|
||||
|
||||
@ -391,9 +384,7 @@ class PersonView(ListView):
|
||||
('Add', gtk.STOCK_ADD, _("_Add..."), "<control>Insert",
|
||||
_("Add a new person"), self.add),
|
||||
('Remove', gtk.STOCK_REMOVE, _("_Remove"), "<control>Delete",
|
||||
_("Remove the Selected Person"), self.remove),
|
||||
('ColumnEdit', gtk.STOCK_PROPERTIES, _('_Column Editor...'), None,
|
||||
None, self._column_editor),
|
||||
_("Remove the Selected Person"), self.remove),
|
||||
('CmpMerge', None, _('Compare and _Merge...'), None, None,
|
||||
self.cmp_merge),
|
||||
('FastMerge', None, _('_Fast Merge...'), None, None,
|
||||
|
@ -107,7 +107,6 @@ class PlaceTreeView(PlaceBaseView):
|
||||
<menuitem action="Edit"/>
|
||||
<menuitem action="Remove"/>
|
||||
</placeholder>
|
||||
<menuitem action="ColumnEdit"/>
|
||||
<menuitem action="FilterEdit"/>
|
||||
<placeholder name="Merge">
|
||||
<menuitem action="FastMerge"/>
|
||||
|
@ -61,6 +61,21 @@ from gen.ggettext import gettext as _
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class RepositoryView(ListView):
|
||||
""" repository listview class
|
||||
"""
|
||||
COL_NAME = 0
|
||||
COL_ID = 1
|
||||
COL_TYPE = 2
|
||||
COL_URL = 3
|
||||
COL_STREET = 4
|
||||
COL_ZIP = 5
|
||||
COL_CITY = 6
|
||||
COL_COUNTY = 7
|
||||
COL_STATE = 8
|
||||
COL_COUNTRY = 9
|
||||
COL_EMAIL = 10
|
||||
COL_SURL = 11
|
||||
COL_CHAN = 12
|
||||
|
||||
COLUMN_NAMES = [
|
||||
_('Name'),
|
||||
@ -77,7 +92,17 @@ class RepositoryView(ListView):
|
||||
_('Search URL'),
|
||||
_('Last Changed'),
|
||||
]
|
||||
|
||||
# default setting with visible columns, order of the col, and their size
|
||||
CONFIGSETTINGS = (
|
||||
('columns.visible', [COL_NAME, COL_ID, COL_TYPE, COL_URL, COL_STREET,
|
||||
]),
|
||||
('columns.order', [COL_NAME, COL_ID, COL_ZIP, COL_CITY, COL_TYPE,
|
||||
COL_URL, COL_STREET, COL_COUNTY, COL_STATE,
|
||||
COL_COUNTRY, COL_EMAIL, COL_SURL,
|
||||
COL_CHAN]),
|
||||
('columns.sizecol', [200, 75, 100, 100, 100, 250, 100, 100, 100,
|
||||
100, 100, 100, 100])
|
||||
)
|
||||
ADD_MSG = _("Add a new repository")
|
||||
EDIT_MSG = _("Edit the selected repository")
|
||||
DEL_MSG = _("Delete the selected repository")
|
||||
@ -113,9 +138,6 @@ class RepositoryView(ListView):
|
||||
def navigation_type(self):
|
||||
return 'Repository'
|
||||
|
||||
def column_ord_setfunc(self, clist):
|
||||
self.dbstate.db.set_repository_column_order(clist)
|
||||
|
||||
def get_bookmarks(self):
|
||||
return self.dbstate.db.get_repo_bookmarks()
|
||||
|
||||
@ -124,8 +146,6 @@ class RepositoryView(ListView):
|
||||
|
||||
def define_actions(self):
|
||||
ListView.define_actions(self)
|
||||
self._add_action('ColumnEdit', gtk.STOCK_PROPERTIES,
|
||||
_('_Column Editor'), callback=self._column_editor)
|
||||
self._add_action('FilterEdit', None, _('Repository Filter Editor'),
|
||||
callback=self.filter_editor,)
|
||||
self._add_action('QuickReport', None,
|
||||
@ -133,19 +153,6 @@ class RepositoryView(ListView):
|
||||
self._add_action('Dummy', None,
|
||||
' ', None, None, self.dummy_report)
|
||||
|
||||
def _column_editor(self, obj):
|
||||
import ColumnOrder
|
||||
|
||||
ColumnOrder.ColumnOrder(
|
||||
_('Select Repository Columns'),
|
||||
self.uistate,
|
||||
self.dbstate.db.get_repository_column_order(),
|
||||
RepositoryView.COLUMN_NAMES,
|
||||
self.set_column_order)
|
||||
|
||||
def column_order(self):
|
||||
return self.dbstate.db.get_repository_column_order()
|
||||
|
||||
def get_stock(self):
|
||||
return 'gramps-repository'
|
||||
|
||||
@ -176,7 +183,6 @@ class RepositoryView(ListView):
|
||||
<menuitem action="Edit"/>
|
||||
<menuitem action="Remove"/>
|
||||
</placeholder>
|
||||
<menuitem action="ColumnEdit"/>
|
||||
<menuitem action="FilterEdit"/>
|
||||
</menu>
|
||||
</menubar>
|
||||
|
@ -63,7 +63,15 @@ from gen.ggettext import gettext as _
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class SourceView(ListView):
|
||||
|
||||
""" sources listview class
|
||||
"""
|
||||
COL_TITLE = 0
|
||||
COL_ID = 1
|
||||
COL_AUTH = 2
|
||||
COL_ABBR = 3
|
||||
COL_PINFO = 4
|
||||
COL_CHAN = 5
|
||||
# name of the columns
|
||||
COLUMN_NAMES = [
|
||||
_('Title'),
|
||||
_('ID'),
|
||||
@ -72,7 +80,13 @@ class SourceView(ListView):
|
||||
_('Publication Information'),
|
||||
_('Last Changed'),
|
||||
]
|
||||
|
||||
# default setting with visible columns, order of the col, and their size
|
||||
CONFIGSETTINGS = (
|
||||
('columns.visible', [COL_TITLE, COL_ID, COL_AUTH, COL_PINFO]),
|
||||
('columns.order', [COL_TITLE, COL_ID, COL_AUTH, COL_ABBR, COL_PINFO,
|
||||
COL_CHAN]),
|
||||
('columns.sizecol', [200, 75, 150, 100, 150, 100])
|
||||
)
|
||||
ADD_MSG = _("Add a new source")
|
||||
EDIT_MSG = _("Edit the selected source")
|
||||
DEL_MSG = _("Delete the selected source")
|
||||
@ -108,9 +122,6 @@ class SourceView(ListView):
|
||||
def navigation_type(self):
|
||||
return 'Source'
|
||||
|
||||
def column_ord_setfunc(self, clist):
|
||||
self.dbstate.db.set_source_column_order(clist)
|
||||
|
||||
def get_bookmarks(self):
|
||||
return self.dbstate.db.get_source_bookmarks()
|
||||
|
||||
@ -119,8 +130,6 @@ class SourceView(ListView):
|
||||
|
||||
def define_actions(self):
|
||||
ListView.define_actions(self)
|
||||
self._add_action('ColumnEdit', gtk.STOCK_PROPERTIES,
|
||||
_('_Column Editor'), callback=self._column_editor)
|
||||
self._add_action('FastMerge', None, _('_Merge'),
|
||||
callback=self.fast_merge)
|
||||
self._add_action('FilterEdit', None, _('Source Filter Editor'),
|
||||
@ -128,19 +137,6 @@ class SourceView(ListView):
|
||||
self._add_action('QuickReport', None, _("Quick View"), None, None, None)
|
||||
self._add_action('Dummy', None, ' ', None, None, self.dummy_report)
|
||||
|
||||
def _column_editor(self, obj):
|
||||
import ColumnOrder
|
||||
|
||||
ColumnOrder.ColumnOrder(
|
||||
_('Select Source Columns'),
|
||||
self.uistate,
|
||||
self.dbstate.db.get_source_column_order(),
|
||||
SourceView.COLUMN_NAMES,
|
||||
self.set_column_order)
|
||||
|
||||
def column_order(self):
|
||||
return self.dbstate.db.get_source_column_order()
|
||||
|
||||
def get_stock(self):
|
||||
return 'gramps-source'
|
||||
|
||||
@ -171,7 +167,6 @@ class SourceView(ListView):
|
||||
<menuitem action="Edit"/>
|
||||
<menuitem action="Remove"/>
|
||||
</placeholder>
|
||||
<menuitem action="ColumnEdit"/>
|
||||
<menuitem action="FilterEdit"/>
|
||||
<placeholder name="Merge">
|
||||
<menuitem action="FastMerge"/>
|
||||
|
Loading…
Reference in New Issue
Block a user