Compare commits
41 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1f614bd76f | ||
|
|
0442c34258 | ||
|
|
c903f5e5a5 | ||
|
|
3329860f50 | ||
|
|
e7401f3aaa | ||
|
|
1a48e8a03e | ||
|
|
9a4adab9d6 | ||
|
|
bb0647274b | ||
|
|
f6bfb46fc0 | ||
|
|
b6fa5da8ee | ||
|
|
14c2d0e1b6 | ||
|
|
226e8c549a | ||
|
|
d173809d8c | ||
|
|
63c52fa1bb | ||
|
|
455628d44a | ||
|
|
670bb355cb | ||
|
|
202c7a9bf6 | ||
|
|
72955840f1 | ||
|
|
b8e73d5ee1 | ||
|
|
990db39664 | ||
|
|
9c0dca6bd1 | ||
|
|
02e0c1c67d | ||
|
|
ebf1715468 | ||
|
|
c10f2da00e | ||
|
|
9f71372a97 | ||
|
|
0993d9cfc3 | ||
|
|
34471834ab | ||
|
|
ff912f844c | ||
|
|
45eac501a9 | ||
|
|
d4e85c2397 | ||
|
|
c7a4d287f0 | ||
|
|
c0d622c16a | ||
|
|
b38f77f2aa | ||
|
|
d91fc9e2fb | ||
|
|
198602be61 | ||
|
|
3f9f3215ee | ||
|
|
beb388a30d | ||
|
|
29e78d4253 | ||
|
|
b80dcaf701 | ||
|
|
a876d94fbc | ||
|
|
95e1e8cb67 |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
7
debian/changelog
vendored
@ -1,3 +1,10 @@
|
|||||||
|
gramps (5.1.3-1) focal; urgency=medium
|
||||||
|
|
||||||
|
* New release
|
||||||
|
* Update debian/copyright for Alex Roitman
|
||||||
|
|
||||||
|
-- Ross Gammon <rosco2@ubuntu.com> Sun, 16 Aug 2020 20:23:34 +0200
|
||||||
|
|
||||||
gramps (5.1.2-1) unstable; urgency=medium
|
gramps (5.1.2-1) unstable; urgency=medium
|
||||||
|
|
||||||
* New release
|
* New release
|
||||||
|
|||||||
2
debian/copyright
vendored
@ -3,7 +3,7 @@ Upstream-Name: Gramps
|
|||||||
Source: https://gramps-project.org
|
Source: https://gramps-project.org
|
||||||
|
|
||||||
Files: *
|
Files: *
|
||||||
Copyright: 2000-2007, Alex Roitman
|
Copyright: 2000-2007, 2020 Alex Roitman
|
||||||
2000-2002, Bruce J. DeGrasse
|
2000-2002, Bruce J. DeGrasse
|
||||||
2000-2008, Donald N. Allingham
|
2000-2008, Donald N. Allingham
|
||||||
2000-2007, Martin Hawlisch
|
2000-2007, Martin Hawlisch
|
||||||
|
|||||||
@ -52,7 +52,6 @@ methods should be changed to generate exceptions. Possibly by globally changing
|
|||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
import logging
|
import logging
|
||||||
import os
|
|
||||||
import inspect
|
import inspect
|
||||||
from abc import ABCMeta
|
from abc import ABCMeta
|
||||||
from types import FunctionType
|
from types import FunctionType
|
||||||
@ -160,10 +159,12 @@ def wrapper(method):
|
|||||||
"""
|
"""
|
||||||
class_name = args[0].__class__.__name__
|
class_name = args[0].__class__.__name__
|
||||||
func_name = method.__name__
|
func_name = method.__name__
|
||||||
caller_frame = inspect.stack()[1]
|
frame = inspect.currentframe()
|
||||||
|
c_frame = frame.f_back
|
||||||
|
c_code = c_frame.f_code
|
||||||
LOG.debug('calling %s.%s()... from file %s, line %s in %s',
|
LOG.debug('calling %s.%s()... from file %s, line %s in %s',
|
||||||
class_name, func_name, os.path.split(caller_frame[1])[1],
|
class_name, func_name, c_code.co_filename, c_frame.f_lineno,
|
||||||
caller_frame[2], caller_frame[3])
|
c_code.co_name)
|
||||||
return method(*args, **keywargs)
|
return method(*args, **keywargs)
|
||||||
return wrapped
|
return wrapped
|
||||||
|
|
||||||
|
|||||||
@ -78,15 +78,13 @@ class DbTxn(defaultdict):
|
|||||||
|
|
||||||
elapsed_time = time.time() - self.start_time
|
elapsed_time = time.time() - self.start_time
|
||||||
if __debug__:
|
if __debug__:
|
||||||
caller_frame = inspect.stack()[1]
|
frame = inspect.currentframe()
|
||||||
|
c_frame = frame.f_back
|
||||||
|
c_code = c_frame.f_code
|
||||||
_LOG.debug(" **** DbTxn %s exited. Called from file %s, "
|
_LOG.debug(" **** DbTxn %s exited. Called from file %s, "
|
||||||
"line %s, in %s **** %.2f seconds" %
|
"line %s, in %s **** %.2f seconds",
|
||||||
((hex(id(self)),)+
|
hex(id(self)), c_code.co_filename, c_frame.f_lineno,
|
||||||
(os.path.split(caller_frame[1])[1],)+
|
c_code.co_name, elapsed_time)
|
||||||
tuple(caller_frame[i] for i in range(2, 4))+
|
|
||||||
(elapsed_time,)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|||||||
@ -42,6 +42,8 @@ from ..const import PLUGINS_DIR, USER_PLUGINS
|
|||||||
from ..constfunc import win, get_env_var
|
from ..constfunc import win, get_env_var
|
||||||
from ..config import config
|
from ..config import config
|
||||||
from .dbconst import DBLOGNAME, DBLOCKFN, DBBACKEND
|
from .dbconst import DBLOGNAME, DBLOCKFN, DBBACKEND
|
||||||
|
from ..const import GRAMPS_LOCALE as glocale
|
||||||
|
_ = glocale.translation.gettext
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -70,12 +72,14 @@ def make_database(plugin_id):
|
|||||||
database = getattr(mod, pdata.databaseclass)
|
database = getattr(mod, pdata.databaseclass)
|
||||||
db = database()
|
db = database()
|
||||||
import inspect
|
import inspect
|
||||||
caller_frame = inspect.stack()[1]
|
frame = inspect.currentframe()
|
||||||
|
c_frame = frame.f_back
|
||||||
|
c_code = c_frame.f_code
|
||||||
_LOG.debug("Database class instance created Class:%s instance:%s. "
|
_LOG.debug("Database class instance created Class:%s instance:%s. "
|
||||||
"Called from File %s, line %s, in %s"
|
"Called from File %s, line %s, in %s",
|
||||||
% ((db.__class__.__name__, hex(id(db)))
|
db.__class__.__name__, hex(id(db)), c_code.co_filename,
|
||||||
+ (os.path.split(caller_frame[1])[1],)
|
c_frame.f_lineno, c_code.co_name)
|
||||||
+ tuple(caller_frame[i] for i in range(2, 4))))
|
|
||||||
return db
|
return db
|
||||||
else:
|
else:
|
||||||
raise Exception("can't load database backend: '%s'" % plugin_id)
|
raise Exception("can't load database backend: '%s'" % plugin_id)
|
||||||
@ -209,8 +213,8 @@ def write_lock_file(name):
|
|||||||
if win():
|
if win():
|
||||||
user = get_env_var('USERNAME')
|
user = get_env_var('USERNAME')
|
||||||
host = get_env_var('USERDOMAIN')
|
host = get_env_var('USERDOMAIN')
|
||||||
if host is None:
|
if not user:
|
||||||
host = ""
|
user = _("Unknown")
|
||||||
else:
|
else:
|
||||||
host = os.uname()[1]
|
host = os.uname()[1]
|
||||||
# An ugly workaround for os.getlogin() issue with Konsole
|
# An ugly workaround for os.getlogin() issue with Konsole
|
||||||
|
|||||||
@ -29,7 +29,6 @@ Provide the database state class
|
|||||||
#
|
#
|
||||||
#------------------------------------------------------------------------
|
#------------------------------------------------------------------------
|
||||||
import sys
|
import sys
|
||||||
import os
|
|
||||||
import logging
|
import logging
|
||||||
import inspect
|
import inspect
|
||||||
|
|
||||||
@ -88,10 +87,12 @@ class DbState(Callback):
|
|||||||
"""
|
"""
|
||||||
class_name = self.__class__.__name__
|
class_name = self.__class__.__name__
|
||||||
func_name = "is_open"
|
func_name = "is_open"
|
||||||
caller_frame = inspect.stack()[1]
|
frame = inspect.currentframe()
|
||||||
|
c_frame = frame.f_back
|
||||||
|
c_code = c_frame.f_code
|
||||||
_LOG.debug('calling %s.%s()... from file %s, line %s in %s',
|
_LOG.debug('calling %s.%s()... from file %s, line %s in %s',
|
||||||
class_name, func_name, os.path.split(caller_frame[1])[1],
|
class_name, func_name, c_code.co_filename, c_frame.f_lineno,
|
||||||
caller_frame[2], caller_frame[3])
|
c_code.co_name)
|
||||||
return (self.db is not None) and self.db.is_open()
|
return (self.db is not None) and self.db.is_open()
|
||||||
|
|
||||||
def change_database(self, database):
|
def change_database(self, database):
|
||||||
|
|||||||
@ -52,7 +52,7 @@ class MatchesEventFilter(MatchesEventFilterBase):
|
|||||||
name = _('Persons with events matching the <event filter>')
|
name = _('Persons with events matching the <event filter>')
|
||||||
description = _("Matches persons who have events that match a certain"
|
description = _("Matches persons who have events that match a certain"
|
||||||
" event filter")
|
" event filter")
|
||||||
category = _('General filters')
|
category = _('Event filters')
|
||||||
|
|
||||||
# we want to have this filter show event filters
|
# we want to have this filter show event filters
|
||||||
namespace = 'Event'
|
namespace = 'Event'
|
||||||
|
|||||||
@ -99,7 +99,8 @@ class BaseTest(unittest.TestCase):
|
|||||||
stime = perf_counter()
|
stime = perf_counter()
|
||||||
results = filter_.apply(self.db)
|
results = filter_.apply(self.db)
|
||||||
if __debug__:
|
if __debug__:
|
||||||
rulename = inspect.stack()[1][3]
|
frame = inspect.currentframe()
|
||||||
|
rulename = frame.f_back.f_code.co_name
|
||||||
print("%s: %.2f\n" % (rulename, perf_counter() - stime))
|
print("%s: %.2f\n" % (rulename, perf_counter() - stime))
|
||||||
return set(results)
|
return set(results)
|
||||||
|
|
||||||
|
|||||||
@ -113,6 +113,10 @@ else:
|
|||||||
_GS_CMD = where_is("gs")
|
_GS_CMD = where_is("gs")
|
||||||
|
|
||||||
|
|
||||||
|
def esc(id_txt):
|
||||||
|
return id_txt.replace('"', '\\"')
|
||||||
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# GVOptions
|
# GVOptions
|
||||||
@ -575,7 +579,7 @@ class GVDocBase(BaseDoc, GVDoc):
|
|||||||
text += ' URL="%s"' % url
|
text += ' URL="%s"' % url
|
||||||
|
|
||||||
text += " ]"
|
text += " ]"
|
||||||
self.write(' "%s" %s;\n' % (node_id, text))
|
self.write(' "%s" %s;\n' % (esc(node_id), text))
|
||||||
|
|
||||||
def add_link(self, id1, id2, style="", head="", tail="", comment=""):
|
def add_link(self, id1, id2, style="", head="", tail="", comment=""):
|
||||||
"""
|
"""
|
||||||
@ -583,7 +587,7 @@ class GVDocBase(BaseDoc, GVDoc):
|
|||||||
|
|
||||||
Implements GVDocBase.add_link().
|
Implements GVDocBase.add_link().
|
||||||
"""
|
"""
|
||||||
self.write(' "%s" -> "%s"' % (id1, id2))
|
self.write(' "%s" -> "%s"' % (esc(id1), esc(id2)))
|
||||||
|
|
||||||
if style or head or tail:
|
if style or head or tail:
|
||||||
self.write(' [')
|
self.write(' [')
|
||||||
@ -635,7 +639,7 @@ class GVDocBase(BaseDoc, GVDoc):
|
|||||||
|
|
||||||
Implements GVDocBase.add_samerank().
|
Implements GVDocBase.add_samerank().
|
||||||
"""
|
"""
|
||||||
self.write(' {rank=same "%s" "%s"}\n' % (id1, id2))
|
self.write(' {rank=same "%s" "%s"}\n' % (esc(id1), esc(id2)))
|
||||||
|
|
||||||
def rewrite_label(self, id, label):
|
def rewrite_label(self, id, label):
|
||||||
"""
|
"""
|
||||||
@ -643,7 +647,7 @@ class GVDocBase(BaseDoc, GVDoc):
|
|||||||
|
|
||||||
Implements GVDocBase.rewrite_label().
|
Implements GVDocBase.rewrite_label().
|
||||||
"""
|
"""
|
||||||
self.write(' "%s" [label = "%s"]\n' % (id, label))
|
self.write(' "%s" [label = "%s"]\n' % (esc(id), label))
|
||||||
|
|
||||||
def start_subgraph(self, graph_id):
|
def start_subgraph(self, graph_id):
|
||||||
""" Implement GVDocBase.start_subgraph() """
|
""" Implement GVDocBase.start_subgraph() """
|
||||||
|
|||||||
@ -324,12 +324,16 @@ class Callback:
|
|||||||
return
|
return
|
||||||
|
|
||||||
# Check signal exists
|
# Check signal exists
|
||||||
|
frame = inspect.currentframe()
|
||||||
|
c_frame = frame.f_back
|
||||||
|
c_code = c_frame.f_code
|
||||||
|
frame_info = (c_code.co_filename, c_frame.f_lineno, c_code.co_name)
|
||||||
if signal_name not in self.__signal_map:
|
if signal_name not in self.__signal_map:
|
||||||
self._warn("Attempt to emit to unknown signal: %s\n"
|
self._warn("Attempt to emit to unknown signal: %s\n"
|
||||||
" from: file: %s\n"
|
" from: file: %s\n"
|
||||||
" line: %d\n"
|
" line: %d\n"
|
||||||
" func: %s\n"
|
" func: %s\n"
|
||||||
% ((str(signal_name), ) + inspect.stack()[1][1:4]))
|
% ((str(signal_name), ) + frame_info))
|
||||||
return
|
return
|
||||||
|
|
||||||
# check that the signal is not already being emitted. This prevents
|
# check that the signal is not already being emitted. This prevents
|
||||||
@ -340,7 +344,7 @@ class Callback:
|
|||||||
" from: file: %s\n"
|
" from: file: %s\n"
|
||||||
" line: %d\n"
|
" line: %d\n"
|
||||||
" func: %s\n"
|
" func: %s\n"
|
||||||
% ((str(signal_name), ) + inspect.stack()[1][1:4]))
|
% ((str(signal_name), ) + frame_info))
|
||||||
return
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -358,7 +362,7 @@ class Callback:
|
|||||||
" from: file: %s\n"
|
" from: file: %s\n"
|
||||||
" line: %d\n"
|
" line: %d\n"
|
||||||
" func: %s\n"
|
" func: %s\n"
|
||||||
% ((str(signal_name), ) + inspect.stack()[1][1:4]))
|
% ((str(signal_name), ) + frame_info))
|
||||||
return
|
return
|
||||||
|
|
||||||
# type check arguments
|
# type check arguments
|
||||||
@ -369,7 +373,7 @@ class Callback:
|
|||||||
" from: file: %s\n"
|
" from: file: %s\n"
|
||||||
" line: %d\n"
|
" line: %d\n"
|
||||||
" func: %s\n"
|
" func: %s\n"
|
||||||
% ((str(signal_name), ) + inspect.stack()[1][1:4]))
|
% ((str(signal_name), ) + frame_info))
|
||||||
return
|
return
|
||||||
|
|
||||||
if len(args) > 0:
|
if len(args) > 0:
|
||||||
@ -379,7 +383,7 @@ class Callback:
|
|||||||
" from: file: %s\n"
|
" from: file: %s\n"
|
||||||
" line: %d\n"
|
" line: %d\n"
|
||||||
" func: %s\n"
|
" func: %s\n"
|
||||||
% ((str(signal_name), ) + inspect.stack()[1][1:4]))
|
% ((str(signal_name), ) + frame_info))
|
||||||
return
|
return
|
||||||
|
|
||||||
if arg_types is not None:
|
if arg_types is not None:
|
||||||
@ -391,7 +395,7 @@ class Callback:
|
|||||||
" line: %d\n"
|
" line: %d\n"
|
||||||
" func: %s\n"
|
" func: %s\n"
|
||||||
" arg passed was: %s, type of arg passed %s, type should be: %s\n"
|
" arg passed was: %s, type of arg passed %s, type should be: %s\n"
|
||||||
% ((str(signal_name), ) + inspect.stack()[1][1:4] +\
|
% ((str(signal_name), ) + frame_info +\
|
||||||
(args[i], repr(type(args[i])), repr(arg_types[i]))))
|
(args[i], repr(type(args[i])), repr(arg_types[i]))))
|
||||||
return
|
return
|
||||||
if signal_name in self.__callback_map:
|
if signal_name in self.__callback_map:
|
||||||
|
|||||||
@ -471,6 +471,7 @@ class ClipCitation(ClipHandleWrapper):
|
|||||||
|
|
||||||
def refresh(self):
|
def refresh(self):
|
||||||
if self._handle:
|
if self._handle:
|
||||||
|
try:
|
||||||
citation = clipdb.get_citation_from_handle(self._handle)
|
citation = clipdb.get_citation_from_handle(self._handle)
|
||||||
if citation:
|
if citation:
|
||||||
self._title = citation.get_gramps_id()
|
self._title = citation.get_gramps_id()
|
||||||
@ -489,9 +490,17 @@ class ClipCitation(ClipHandleWrapper):
|
|||||||
text = str(text)
|
text = str(text)
|
||||||
if len(text) > 60:
|
if len(text) > 60:
|
||||||
text = text[:60] + "..."
|
text = text[:60] + "..."
|
||||||
self._value = _("Volume/Page: %(pag)s -- %(sourcetext)s") % {
|
self._value = _("Volume/Page: %(pag)s -- %(sourcetext)s"
|
||||||
'pag' : page,
|
) % { 'pag' : page,
|
||||||
'sourcetext' : text}
|
'sourcetext' : text}
|
||||||
|
except:
|
||||||
|
# We are in the Source tree view. The shortcuts only
|
||||||
|
# work for citations.
|
||||||
|
print("We cannot copy the source from this view."
|
||||||
|
" Use drag and drop.")
|
||||||
|
self._title = self._value = ''
|
||||||
|
self._pickle = self._type = self._objclass = None
|
||||||
|
self._handle = self._dbid = self._dbname = None
|
||||||
|
|
||||||
|
|
||||||
class ClipRepoRef(ClipObjWrapper):
|
class ClipRepoRef(ClipObjWrapper):
|
||||||
@ -1281,6 +1290,14 @@ class ClipboardListView:
|
|||||||
model.insert_before(node, data)
|
model.insert_before(node, data)
|
||||||
else:
|
else:
|
||||||
model.insert_after(node, data)
|
model.insert_after(node, data)
|
||||||
|
elif isinstance(data[1], ClipCitation):
|
||||||
|
if data[3]:
|
||||||
|
# we have a real citation
|
||||||
|
model.append(data)
|
||||||
|
#else:
|
||||||
|
# We are in a Source treeview and trying
|
||||||
|
# to copy a source with a shortcut.
|
||||||
|
# Use drag and drop to do that.
|
||||||
else:
|
else:
|
||||||
model.append(data)
|
model.append(data)
|
||||||
|
|
||||||
|
|||||||
@ -532,7 +532,7 @@ class GrampsImportFileDialog(ManagedWindow):
|
|||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
f = file(filename,'w')
|
f = open(filename, 'w')
|
||||||
f.close()
|
f.close()
|
||||||
os.remove(filename)
|
os.remove(filename)
|
||||||
except IOError:
|
except IOError:
|
||||||
@ -548,7 +548,6 @@ class GrampsImportFileDialog(ManagedWindow):
|
|||||||
self.import_info = None
|
self.import_info = None
|
||||||
self._begin_progress()
|
self._begin_progress()
|
||||||
self.uistate.set_sensitive(False)
|
self.uistate.set_sensitive(False)
|
||||||
self.uistate.viewmanager.enable_menu(False)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
#an importer can return an object with info, object.info_text()
|
#an importer can return an object with info, object.info_text()
|
||||||
@ -569,7 +568,6 @@ class GrampsImportFileDialog(ManagedWindow):
|
|||||||
except Exception:
|
except Exception:
|
||||||
_LOG.error("Failed to import database.", exc_info=True)
|
_LOG.error("Failed to import database.", exc_info=True)
|
||||||
self.uistate.set_sensitive(True)
|
self.uistate.set_sensitive(True)
|
||||||
self.uistate.viewmanager.enable_menu(True)
|
|
||||||
self._end_progress()
|
self._end_progress()
|
||||||
|
|
||||||
def build_menu_names(self, obj): # this is meaningless since it's modal
|
def build_menu_names(self, obj): # this is meaningless since it's modal
|
||||||
|
|||||||
@ -1013,7 +1013,7 @@ class DbManager(CLIDbManager, ManagedWindow):
|
|||||||
"""
|
"""
|
||||||
Handle the reception of drag data
|
Handle the reception of drag data
|
||||||
"""
|
"""
|
||||||
drag_value = selection.get_data().decode()
|
drag_value = selection.get_data().decode().strip(' \r\n\x00')
|
||||||
fname = None
|
fname = None
|
||||||
type = None
|
type = None
|
||||||
title = None
|
title = None
|
||||||
|
|||||||
@ -520,7 +520,10 @@ class DisplayState(Callback):
|
|||||||
history.push(handle)
|
history.push(handle)
|
||||||
|
|
||||||
def set_sensitive(self, state):
|
def set_sensitive(self, state):
|
||||||
self.window.set_sensitive(state)
|
tbar = self.uimanager.get_widget('ToolBar')
|
||||||
|
tbar.set_sensitive(state)
|
||||||
|
self.viewmanager.hpane.set_sensitive(state)
|
||||||
|
self.uimanager.enable_all_actions(state)
|
||||||
|
|
||||||
def db_changed(self, db):
|
def db_changed(self, db):
|
||||||
db.connect('long-op-start', self.progress_monitor.add_op)
|
db.connect('long-op-start', self.progress_monitor.add_op)
|
||||||
|
|||||||
@ -39,6 +39,9 @@ from ..glade import Glade
|
|||||||
from gramps.gen.simple import SimpleAccess
|
from gramps.gen.simple import SimpleAccess
|
||||||
from gramps.gen.const import URL_MANUAL_SECT2
|
from gramps.gen.const import URL_MANUAL_SECT2
|
||||||
|
|
||||||
|
import logging
|
||||||
|
_LOG = logging.getLogger("editlink")
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# Constants
|
# Constants
|
||||||
@ -154,6 +157,12 @@ class EditLink(ManagedWindow):
|
|||||||
|
|
||||||
def _on_new_callback(self, obj):
|
def _on_new_callback(self, obj):
|
||||||
object_class = obj.__class__.__name__
|
object_class = obj.__class__.__name__
|
||||||
|
# workaround for bug12260
|
||||||
|
try:
|
||||||
|
test = obj.handle
|
||||||
|
except AttributeError:
|
||||||
|
_LOG.warn(str(object_class))
|
||||||
|
return
|
||||||
self.selected.set_text(self.display_link(
|
self.selected.set_text(self.display_link(
|
||||||
object_class, "handle", obj.handle))
|
object_class, "handle", obj.handle))
|
||||||
self.url_link.set_text("gramps://%s/%s/%s" %
|
self.url_link.set_text("gramps://%s/%s/%s" %
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!-- Generated with glade 3.18.3 -->
|
<!-- Generated with glade 3.22.2 -->
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="3.10"/>
|
<requires lib="gtk+" version="3.10"/>
|
||||||
<requires lib="grampswidgets" version="0.0"/>
|
|
||||||
<object class="GtkDialog" id="editplace">
|
<object class="GtkDialog" id="editplace">
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="type_hint">dialog</property>
|
<property name="type_hint">dialog</property>
|
||||||
|
<child type="titlebar">
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
<child internal-child="vbox">
|
<child internal-child="vbox">
|
||||||
<object class="GtkBox" id="dialog-vbox19">
|
<object class="GtkBox" id="dialog-vbox19">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
@ -101,7 +103,7 @@
|
|||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="comment1">
|
<object class="GtkLabel" id="comment1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="halign">start</property>
|
<property name="halign">start</property>
|
||||||
<property name="label" translatable="yes">Either use the two fields below to enter coordinates (latitude and longitude),</property>
|
<property name="label" translatable="yes">Either use the two fields below to enter coordinates (latitude and longitude),</property>
|
||||||
<property name="hexpand">True</property>
|
<property name="hexpand">True</property>
|
||||||
|
|||||||
@ -325,7 +325,6 @@ class BaseSelector(ManagedWindow):
|
|||||||
self.sortorder = Gtk.SortType.ASCENDING
|
self.sortorder = Gtk.SortType.ASCENDING
|
||||||
else:
|
else:
|
||||||
self.sortorder = Gtk.SortType.DESCENDING
|
self.sortorder = Gtk.SortType.DESCENDING
|
||||||
self.model.reverse_order()
|
|
||||||
self.build_tree()
|
self.build_tree()
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|||||||
@ -496,6 +496,16 @@ class UIManager():
|
|||||||
"""
|
"""
|
||||||
return group.act_group.lookup_action(actionname)
|
return group.act_group.lookup_action(actionname)
|
||||||
|
|
||||||
|
def enable_all_actions(self, state):
|
||||||
|
for group in self.action_groups:
|
||||||
|
if group.act_group:
|
||||||
|
for item in group.actionlist:
|
||||||
|
action = group.act_group.lookup_action(item[ACTION_NAME])
|
||||||
|
if action:
|
||||||
|
# We check in case the group has not been inserted into
|
||||||
|
# UIManager yet
|
||||||
|
action.set_enabled(group.sensitive if state else False)
|
||||||
|
|
||||||
def dump_all_accels(self):
|
def dump_all_accels(self):
|
||||||
''' A function used diagnostically to see what accels are present.
|
''' A function used diagnostically to see what accels are present.
|
||||||
This will only dump the current accel set, if other non-open windows
|
This will only dump the current accel set, if other non-open windows
|
||||||
|
|||||||
@ -450,7 +450,7 @@ def open_file_with_default_application(path, uistate):
|
|||||||
GLib.timeout_add_seconds(1, poll_external, (proc, errstrings, uistate))
|
GLib.timeout_add_seconds(1, poll_external, (proc, errstrings, uistate))
|
||||||
return
|
return
|
||||||
|
|
||||||
def process_pending_events(max_count=10):
|
def process_pending_events(max_count=20):
|
||||||
"""
|
"""
|
||||||
Process pending events, but don't get into an infinite loop.
|
Process pending events, but don't get into an infinite loop.
|
||||||
"""
|
"""
|
||||||
|
|||||||
@ -273,13 +273,13 @@ class ViewManager(CLIManager):
|
|||||||
Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.MOD1_MASK)
|
Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.MOD1_MASK)
|
||||||
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||||
self.window.add(vbox)
|
self.window.add(vbox)
|
||||||
hpane = Gtk.Paned()
|
self.hpane = Gtk.Paned()
|
||||||
self.ebox = Gtk.EventBox()
|
self.ebox = Gtk.EventBox()
|
||||||
|
|
||||||
self.navigator = Navigator(self)
|
self.navigator = Navigator(self)
|
||||||
self.ebox.add(self.navigator.get_top())
|
self.ebox.add(self.navigator.get_top())
|
||||||
hpane.pack1(self.ebox, False, False)
|
self.hpane.pack1(self.ebox, False, False)
|
||||||
hpane.show()
|
self.hpane.show()
|
||||||
|
|
||||||
self.notebook = Gtk.Notebook()
|
self.notebook = Gtk.Notebook()
|
||||||
self.notebook.set_scrollable(True)
|
self.notebook.set_scrollable(True)
|
||||||
@ -288,14 +288,14 @@ class ViewManager(CLIManager):
|
|||||||
self.__init_lists()
|
self.__init_lists()
|
||||||
self.__build_ui_manager()
|
self.__build_ui_manager()
|
||||||
|
|
||||||
hpane.add2(self.notebook)
|
self.hpane.add2(self.notebook)
|
||||||
toolbar = self.uimanager.get_widget('ToolBar')
|
toolbar = self.uimanager.get_widget('ToolBar')
|
||||||
self.statusbar = Statusbar()
|
self.statusbar = Statusbar()
|
||||||
self.statusbar.show()
|
self.statusbar.show()
|
||||||
vbox.pack_end(self.statusbar, False, True, 0)
|
vbox.pack_end(self.statusbar, False, True, 0)
|
||||||
vbox.pack_start(toolbar, False, True, 0)
|
vbox.pack_start(toolbar, False, True, 0)
|
||||||
vbox.pack_end(hpane, True, True, 0)
|
vbox.pack_end(self.hpane, True, True, 0)
|
||||||
vbox.show()
|
vbox.show_all()
|
||||||
|
|
||||||
self.uistate = DisplayState(self.window, self.statusbar,
|
self.uistate = DisplayState(self.window, self.statusbar,
|
||||||
self.uimanager, self)
|
self.uimanager, self)
|
||||||
@ -835,6 +835,7 @@ class ViewManager(CLIManager):
|
|||||||
hbox.add(Gtk.Label(label=pdata.name))
|
hbox.add(Gtk.Label(label=pdata.name))
|
||||||
hbox.show_all()
|
hbox.show_all()
|
||||||
page_num = self.notebook.append_page(page.get_display(), hbox)
|
page_num = self.notebook.append_page(page.get_display(), hbox)
|
||||||
|
self.active_page.post_create()
|
||||||
if not self.file_loaded:
|
if not self.file_loaded:
|
||||||
self.uimanager.set_actions_visible(self.actiongroup, False)
|
self.uimanager.set_actions_visible(self.actiongroup, False)
|
||||||
self.uimanager.set_actions_visible(self.readonlygroup, False)
|
self.uimanager.set_actions_visible(self.readonlygroup, False)
|
||||||
@ -993,6 +994,7 @@ class ViewManager(CLIManager):
|
|||||||
The method called after load of a new database.
|
The method called after load of a new database.
|
||||||
Inherit CLI method to add GUI part
|
Inherit CLI method to add GUI part
|
||||||
"""
|
"""
|
||||||
|
if self.dbstate.db.is_open():
|
||||||
self._post_load_newdb_nongui(filename, title)
|
self._post_load_newdb_nongui(filename, title)
|
||||||
self._post_load_newdb_gui(filename, filetype, title)
|
self._post_load_newdb_gui(filename, filetype, title)
|
||||||
|
|
||||||
@ -1061,51 +1063,6 @@ class ViewManager(CLIManager):
|
|||||||
config.set('paths.recent-file', '')
|
config.set('paths.recent-file', '')
|
||||||
config.save()
|
config.save()
|
||||||
|
|
||||||
def enable_menu(self, enable):
|
|
||||||
""" Enable/disable the menues. Used by the dbloader for import to
|
|
||||||
prevent other operations during import. Needed because simpler methods
|
|
||||||
don't work under Gnome with application menus at top of screen (instead
|
|
||||||
of Gramps window).
|
|
||||||
Note: enable must be set to False on first call.
|
|
||||||
"""
|
|
||||||
if not enable:
|
|
||||||
self.action_st = (
|
|
||||||
self.uimanager.get_actions_sensitive(self.actiongroup),
|
|
||||||
self.uimanager.get_actions_sensitive(self.readonlygroup),
|
|
||||||
self.uimanager.get_actions_sensitive(self.undoactions),
|
|
||||||
self.uimanager.get_actions_sensitive(self.redoactions),
|
|
||||||
self.uimanager.get_actions_sensitive(self.fileactions),
|
|
||||||
self.uimanager.get_actions_sensitive(self.toolactions),
|
|
||||||
self.uimanager.get_actions_sensitive(self.reportactions),
|
|
||||||
self.uimanager.get_actions_sensitive(
|
|
||||||
self.recent_manager.action_group))
|
|
||||||
self.uimanager.set_actions_sensitive(self.actiongroup, enable)
|
|
||||||
self.uimanager.set_actions_sensitive(self.readonlygroup, enable)
|
|
||||||
self.uimanager.set_actions_sensitive(self.undoactions, enable)
|
|
||||||
self.uimanager.set_actions_sensitive(self.redoactions, enable)
|
|
||||||
self.uimanager.set_actions_sensitive(self.fileactions, enable)
|
|
||||||
self.uimanager.set_actions_sensitive(self.toolactions, enable)
|
|
||||||
self.uimanager.set_actions_sensitive(self.reportactions, enable)
|
|
||||||
self.uimanager.set_actions_sensitive(
|
|
||||||
self.recent_manager.action_group, enable)
|
|
||||||
else:
|
|
||||||
self.uimanager.set_actions_sensitive(
|
|
||||||
self.actiongroup, self.action_st[0])
|
|
||||||
self.uimanager.set_actions_sensitive(
|
|
||||||
self.readonlygroup, self.action_st[1])
|
|
||||||
self.uimanager.set_actions_sensitive(
|
|
||||||
self.undoactions, self.action_st[2])
|
|
||||||
self.uimanager.set_actions_sensitive(
|
|
||||||
self.redoactions, self.action_st[3])
|
|
||||||
self.uimanager.set_actions_sensitive(
|
|
||||||
self.fileactions, self.action_st[4])
|
|
||||||
self.uimanager.set_actions_sensitive(
|
|
||||||
self.toolactions, self.action_st[5])
|
|
||||||
self.uimanager.set_actions_sensitive(
|
|
||||||
self.reportactions, self.action_st[6])
|
|
||||||
self.uimanager.set_actions_sensitive(
|
|
||||||
self.recent_manager.action_group, self.action_st[7])
|
|
||||||
|
|
||||||
def __change_undo_label(self, label, update_menu=True):
|
def __change_undo_label(self, label, update_menu=True):
|
||||||
"""
|
"""
|
||||||
Change the UNDO label
|
Change the UNDO label
|
||||||
|
|||||||
@ -138,6 +138,7 @@ class PageView(DbGUIElement, metaclass=ABCMeta):
|
|||||||
self.sidebar = None
|
self.sidebar = None
|
||||||
self.bottombar = None
|
self.bottombar = None
|
||||||
self.widget = None
|
self.widget = None
|
||||||
|
self.vpane = None
|
||||||
|
|
||||||
DbGUIElement.__init__(self, dbstate.db)
|
DbGUIElement.__init__(self, dbstate.db)
|
||||||
|
|
||||||
@ -154,18 +155,20 @@ class PageView(DbGUIElement, metaclass=ABCMeta):
|
|||||||
self.ident + "_bottombar",
|
self.ident + "_bottombar",
|
||||||
defaults[1])
|
defaults[1])
|
||||||
hpane = Gtk.Paned()
|
hpane = Gtk.Paned()
|
||||||
vpane = Gtk.Paned(orientation=Gtk.Orientation.VERTICAL)
|
self.vpane = Gtk.Paned(orientation=Gtk.Orientation.VERTICAL)
|
||||||
hpane.pack1(vpane, resize=True, shrink=False)
|
hpane.pack1(self.vpane, resize=True, shrink=False)
|
||||||
hpane.pack2(self.sidebar, resize=False, shrink=False)
|
hpane.pack2(self.sidebar, resize=False, shrink=False)
|
||||||
hpane.show()
|
hpane.show()
|
||||||
vpane.show()
|
self.vpane.show()
|
||||||
|
|
||||||
self.widget = self.build_widget()
|
self.widget = self.build_widget()
|
||||||
self.widget.show_all()
|
self.widget.show_all()
|
||||||
self.widget.set_name('view')
|
self.widget.set_name('view')
|
||||||
vpane.pack1(self.widget, resize=True, shrink=False)
|
self.vpane.pack1(self.widget, resize=True, shrink=False)
|
||||||
vpane.pack2(self.bottombar, resize=False, shrink=True)
|
self.vpane.pack2(self.bottombar, resize=False, shrink=True)
|
||||||
self._setup_slider_config(vpane, 'vpane.slider-position')
|
self.vpane.show_all()
|
||||||
|
self._config.register('vpane.slider-position', -1)
|
||||||
|
self.vpane.set_position(self._config.get('vpane.slider-position'))
|
||||||
|
|
||||||
self.sidebar_toggled(self.sidebar.get_property('visible'))
|
self.sidebar_toggled(self.sidebar.get_property('visible'))
|
||||||
self.hpane_sig = hpane.connect("draw", self.set_page_slider)
|
self.hpane_sig = hpane.connect("draw", self.set_page_slider)
|
||||||
@ -343,6 +346,11 @@ class PageView(DbGUIElement, metaclass=ABCMeta):
|
|||||||
self.bottombar.set_inactive()
|
self.bottombar.set_inactive()
|
||||||
self.active = False
|
self.active = False
|
||||||
|
|
||||||
|
def post_create(self):
|
||||||
|
if self.vpane:
|
||||||
|
self._setup_slider_config(self.vpane, 'vpane.slider-position')
|
||||||
|
self.vpane = None
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def build_tree(self):
|
def build_tree(self):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@ -29,7 +29,6 @@ BSDDBTxn class: Wrapper for BSDDB transaction-oriented methods
|
|||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
import logging
|
import logging
|
||||||
import inspect
|
import inspect
|
||||||
import os
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -73,14 +72,13 @@ class BSDDBTxn:
|
|||||||
"""
|
"""
|
||||||
# Conditional on __debug__ because all that frame stuff may be slow
|
# Conditional on __debug__ because all that frame stuff may be slow
|
||||||
if __debug__:
|
if __debug__:
|
||||||
caller_frame = inspect.stack()[1]
|
frame = inspect.currentframe()
|
||||||
|
c_frame = frame.f_back
|
||||||
|
c_code = c_frame.f_code
|
||||||
_LOG.debug(" BSDDBTxn %s instantiated. Called from file %s,"
|
_LOG.debug(" BSDDBTxn %s instantiated. Called from file %s,"
|
||||||
" line %s, in %s" %
|
" line %s, in %s", hex(id(self)), c_code.co_filename,
|
||||||
((hex(id(self)),)+
|
c_frame.f_lineno, c_code.co_name)
|
||||||
(os.path.split(caller_frame[1])[1],)+
|
|
||||||
(tuple(caller_frame[i] for i in range(2, 4)))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
self.env = env
|
self.env = env
|
||||||
self.db = db
|
self.db = db
|
||||||
self.txn = None
|
self.txn = None
|
||||||
|
|||||||
@ -31,7 +31,7 @@ SVG document generator.
|
|||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
|
from xml.sax.saxutils import escape
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# Gramps modules
|
# Gramps modules
|
||||||
@ -147,7 +147,7 @@ class SvgDrawDoc(BaseDoc, DrawDoc):
|
|||||||
linex = xpos + (width - self.string_width(font, line)) / 2
|
linex = xpos + (width - self.string_width(font, line)) / 2
|
||||||
self.buffer.write(
|
self.buffer.write(
|
||||||
'<tspan x="%4.2f" dy="%d">' % (linex, size) +
|
'<tspan x="%4.2f" dy="%d">' % (linex, size) +
|
||||||
line +
|
escape(line) +
|
||||||
'</tspan>'
|
'</tspan>'
|
||||||
)
|
)
|
||||||
self.buffer.write('</text>\n')
|
self.buffer.write('</text>\n')
|
||||||
@ -273,7 +273,7 @@ class SvgDrawDoc(BaseDoc, DrawDoc):
|
|||||||
self.buffer.write(' font-family:serif;')
|
self.buffer.write(' font-family:serif;')
|
||||||
self.buffer.write(
|
self.buffer.write(
|
||||||
'">' +
|
'">' +
|
||||||
line +
|
escape(line) +
|
||||||
'</text>\n'
|
'</text>\n'
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -307,7 +307,7 @@ class SvgDrawDoc(BaseDoc, DrawDoc):
|
|||||||
self.buffer.write('font-family:serif;')
|
self.buffer.write('font-family:serif;')
|
||||||
self.buffer.write(
|
self.buffer.write(
|
||||||
'">' +
|
'">' +
|
||||||
text +
|
escape(text) +
|
||||||
'</text>\n'
|
'</text>\n'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -202,7 +202,7 @@ class CalendarWriter:
|
|||||||
date = event.get_date_object()
|
date = event.get_date_object()
|
||||||
place_handle = event.get_place_handle()
|
place_handle = event.get_place_handle()
|
||||||
date_string = self.format_date(date, 1)
|
date_string = self.format_date(date, 1)
|
||||||
if date_string is not "":
|
if date_string != "":
|
||||||
# self.writeln("")
|
# self.writeln("")
|
||||||
self.writeln("BEGIN:VEVENT")
|
self.writeln("BEGIN:VEVENT")
|
||||||
time_s = time.gmtime(event.change)
|
time_s = time.gmtime(event.change)
|
||||||
|
|||||||
@ -300,6 +300,8 @@ class DateRange:
|
|||||||
"""
|
"""
|
||||||
start = None
|
start = None
|
||||||
stop = None
|
stop = None
|
||||||
|
if date.is_empty():
|
||||||
|
return (None, None)
|
||||||
if date.modifier == Date.MOD_NONE:
|
if date.modifier == Date.MOD_NONE:
|
||||||
start = date.sortval
|
start = date.sortval
|
||||||
stop = date.sortval
|
stop = date.sortval
|
||||||
|
|||||||
@ -271,6 +271,7 @@ class BirthdayReport(Report):
|
|||||||
for person_handle in people:
|
for person_handle in people:
|
||||||
step()
|
step()
|
||||||
person = self.database.get_person_from_handle(person_handle)
|
person = self.database.get_person_from_handle(person_handle)
|
||||||
|
short_name = self.get_name(person)
|
||||||
birth_ref = person.get_birth_ref()
|
birth_ref = person.get_birth_ref()
|
||||||
birth_date = None
|
birth_date = None
|
||||||
if birth_ref:
|
if birth_ref:
|
||||||
|
|||||||
@ -441,7 +441,8 @@ class TagReport(Report):
|
|||||||
|
|
||||||
for place_handle in place_list:
|
for place_handle in place_list:
|
||||||
place = self.database.get_place_from_handle(place_handle)
|
place = self.database.get_place_from_handle(place_handle)
|
||||||
place_title = _pd.display(self.database, place, self.place_format)
|
place_title = _pd.display(self.database, place, None,
|
||||||
|
self.place_format)
|
||||||
|
|
||||||
self.doc.start_row()
|
self.doc.start_row()
|
||||||
|
|
||||||
|
|||||||
BIN
images/hicolor/128x128/apps/gramps.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 709 B After Width: | Height: | Size: 709 B |
|
Before Width: | Height: | Size: 1003 B After Width: | Height: | Size: 1003 B |
|
Before Width: | Height: | Size: 1003 B After Width: | Height: | Size: 1003 B |
BIN
images/hicolor/256x256/apps/gramps.png
Normal file
|
After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 61 KiB |
@ -41,7 +41,7 @@
|
|||||||
</binary>
|
</binary>
|
||||||
|
|
||||||
<binary recurse="True">
|
<binary recurse="True">
|
||||||
${prefix}/lib/python3.6/*.so
|
${prefix}/lib/python3.8/*.so
|
||||||
</binary>
|
</binary>
|
||||||
|
|
||||||
<binary>
|
<binary>
|
||||||
@ -96,6 +96,10 @@
|
|||||||
${prefix}/lib/libgexiv2.dylib
|
${prefix}/lib/libgexiv2.dylib
|
||||||
</binary>
|
</binary>
|
||||||
|
|
||||||
|
<binary>
|
||||||
|
${prefix}/lib/libgeocode-glib.dylib
|
||||||
|
</binary>
|
||||||
|
|
||||||
<gir>
|
<gir>
|
||||||
${prefix}/share/gir-1.0/*.gir
|
${prefix}/share/gir-1.0/*.gir
|
||||||
</gir>
|
</gir>
|
||||||
@ -144,19 +148,19 @@
|
|||||||
<!-- We have to pull in the python modules, which are mixed python
|
<!-- We have to pull in the python modules, which are mixed python
|
||||||
and loadable modules. -->
|
and loadable modules. -->
|
||||||
<data recurse="True">
|
<data recurse="True">
|
||||||
${prefix}/lib/python3.6/*.py
|
${prefix}/lib/python3.8/*.py
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
<data>
|
<data>
|
||||||
${prefix}/lib/python3.6/config-3.6m-darwin/
|
${prefix}/lib/python3.8/config-3.8-darwin/
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
<data>
|
<data>
|
||||||
${prefix}/lib/python3.6/site-packages/gramps/gen/utils/resource-path
|
${prefix}/lib/python3.8/site-packages/gramps/gen/utils/resource-path
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
<data>
|
<data>
|
||||||
${prefix}/include/python3.6m/pyconfig.h
|
${prefix}/include/python3.8/pyconfig.h
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
|
|
||||||
@ -173,7 +177,7 @@
|
|||||||
</data>
|
</data>
|
||||||
|
|
||||||
<data recurse="True">
|
<data recurse="True">
|
||||||
${prefix}/lib/python3.6/site-packages/gramps/*.glade
|
${prefix}/lib/python3.8/site-packages/gramps/*.glade
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
<data>
|
<data>
|
||||||
|
|||||||
@ -40,6 +40,8 @@ environ['USERPROFILE'] = environ['HOME']
|
|||||||
environ['APPDATA'] = join(environ['HOME'], 'Library', 'Application Support')
|
environ['APPDATA'] = join(environ['HOME'], 'Library', 'Application Support')
|
||||||
environ['PATH'] = join(bundle_contents, 'MacOS') + ':' + environ['PATH']
|
environ['PATH'] = join(bundle_contents, 'MacOS') + ':' + environ['PATH']
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
__file__ = 'gramps_launcher.py'
|
||||||
import gramps.grampsapp as app
|
import gramps.grampsapp as app
|
||||||
app.main()
|
app.main()
|
||||||
|
|
||||||
|
|||||||
46
po/cs.po
@ -38,7 +38,7 @@ msgstr ""
|
|||||||
"Project-Id-Version: gramps 3.3.x\n"
|
"Project-Id-Version: gramps 3.3.x\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-07-15 22:20+0200\n"
|
"POT-Creation-Date: 2020-07-15 22:20+0200\n"
|
||||||
"PO-Revision-Date: 2020-08-21 11:01+0200\n"
|
"PO-Revision-Date: 2020-09-25 09:02+0200\n"
|
||||||
"Last-Translator: Zdeněk Hataš <zdenek.hatas@gmail.com>\n"
|
"Last-Translator: Zdeněk Hataš <zdenek.hatas@gmail.com>\n"
|
||||||
"Language-Team: Czech <Czech <gnome-cs-list@gnome.org>>\n"
|
"Language-Team: Czech <Czech <gnome-cs-list@gnome.org>>\n"
|
||||||
"Language: cs\n"
|
"Language: cs\n"
|
||||||
@ -2514,7 +2514,7 @@ msgstr "P=červen|D=června|T=červnu|O=červnem"
|
|||||||
|
|
||||||
#: ../gramps/gen/datehandler/_datestrings.py:85
|
#: ../gramps/gen/datehandler/_datestrings.py:85
|
||||||
msgid "localized lexeme inflections||July"
|
msgid "localized lexeme inflections||July"
|
||||||
msgstr "P=červenec|D=července|T=červenci|O=červencen"
|
msgstr "P=červenec|D=července|T=červenci|O=červencem"
|
||||||
|
|
||||||
#: ../gramps/gen/datehandler/_datestrings.py:86
|
#: ../gramps/gen/datehandler/_datestrings.py:86
|
||||||
msgid "localized lexeme inflections||August"
|
msgid "localized lexeme inflections||August"
|
||||||
@ -14099,7 +14099,7 @@ msgstr "Link_Editor"
|
|||||||
|
|
||||||
#: ../gramps/gui/editors/editlink.py:87 ../gramps/gui/editors/editlink.py:239
|
#: ../gramps/gui/editors/editlink.py:87 ../gramps/gui/editors/editlink.py:239
|
||||||
msgid "Link Editor"
|
msgid "Link Editor"
|
||||||
msgstr " Editor linků"
|
msgstr "Editor linků"
|
||||||
|
|
||||||
#: ../gramps/gui/editors/editlink.py:91
|
#: ../gramps/gui/editors/editlink.py:91
|
||||||
msgid "Internet Address"
|
msgid "Internet Address"
|
||||||
@ -15390,7 +15390,7 @@ msgstr "Příště se již neptat"
|
|||||||
|
|
||||||
#: ../gramps/gui/glade/displaystate.glade:7
|
#: ../gramps/gui/glade/displaystate.glade:7
|
||||||
msgid "Gramps Warnings"
|
msgid "Gramps Warnings"
|
||||||
msgstr " Varování Gramps"
|
msgstr "Varování Gramps"
|
||||||
|
|
||||||
#: ../gramps/gui/glade/editaddress.glade:44
|
#: ../gramps/gui/glade/editaddress.glade:44
|
||||||
#: ../gramps/gui/glade/editchildref.glade:47
|
#: ../gramps/gui/glade/editchildref.glade:47
|
||||||
@ -23435,7 +23435,7 @@ msgstr "Dvojklikem zobrazit osoby v generacích"
|
|||||||
#: ../gramps/plugins/gramplet/pedigreegramplet.py:264
|
#: ../gramps/plugins/gramplet/pedigreegramplet.py:264
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid " has 1 of 1 individual (%(percent)s complete)\n"
|
msgid " has 1 of 1 individual (%(percent)s complete)\n"
|
||||||
msgstr "zahrnuje pouze jednoho jednotlivce (dokončeno z %(percent)s)\n"
|
msgstr " zahrnuje pouze jednoho jednotlivce (dokončeno z %(percent)s)\n"
|
||||||
|
|
||||||
#. Create the Generation title, set an index marker
|
#. Create the Generation title, set an index marker
|
||||||
#: ../gramps/plugins/gramplet/pedigreegramplet.py:267
|
#: ../gramps/plugins/gramplet/pedigreegramplet.py:267
|
||||||
@ -25070,7 +25070,7 @@ msgstr "Oddělený(á)"
|
|||||||
|
|
||||||
#: ../gramps/plugins/importer/importgeneweb.py:197
|
#: ../gramps/plugins/importer/importgeneweb.py:197
|
||||||
msgid "GeneWeb import"
|
msgid "GeneWeb import"
|
||||||
msgstr "importovat GeneWeb"
|
msgstr "Importovat GeneWeb"
|
||||||
|
|
||||||
#: ../gramps/plugins/importer/importgeneweb.py:912
|
#: ../gramps/plugins/importer/importgeneweb.py:912
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
@ -25331,7 +25331,7 @@ msgid ""
|
|||||||
"event description."
|
"event description."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Uložit datum narození\n"
|
"Uložit datum narození\n"
|
||||||
"v popisu události"
|
"v popisu události."
|
||||||
|
|
||||||
#: ../gramps/plugins/importer/importprogen.glade:1495
|
#: ../gramps/plugins/importer/importprogen.glade:1495
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -25339,7 +25339,7 @@ msgid ""
|
|||||||
"event description."
|
"event description."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Uložit datum úmrtí\n"
|
"Uložit datum úmrtí\n"
|
||||||
"v popisu události"
|
"v popisu události."
|
||||||
|
|
||||||
#: ../gramps/plugins/importer/importprogen.glade:1515
|
#: ../gramps/plugins/importer/importprogen.glade:1515
|
||||||
msgid "Diverse"
|
msgid "Diverse"
|
||||||
@ -25606,7 +25606,7 @@ msgstr " Štítky: %d\n"
|
|||||||
#: ../gramps/plugins/importer/importxml.py:291
|
#: ../gramps/plugins/importer/importxml.py:291
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid " Citations: %d\n"
|
msgid " Citations: %d\n"
|
||||||
msgstr "Citací: %d\n"
|
msgstr " Citací: %d\n"
|
||||||
|
|
||||||
#: ../gramps/plugins/importer/importxml.py:293
|
#: ../gramps/plugins/importer/importxml.py:293
|
||||||
msgid "Number of new objects imported:\n"
|
msgid "Number of new objects imported:\n"
|
||||||
@ -25917,7 +25917,7 @@ msgstr "Řádek ignorován "
|
|||||||
#: ../gramps/plugins/lib/libgedcom.py:1540
|
#: ../gramps/plugins/lib/libgedcom.py:1540
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Illegal character%s"
|
msgid "Illegal character%s"
|
||||||
msgstr "neplatný znak%s"
|
msgstr "Neplatný znak%s"
|
||||||
|
|
||||||
#: ../gramps/plugins/lib/libgedcom.py:1820
|
#: ../gramps/plugins/lib/libgedcom.py:1820
|
||||||
msgid "Your GEDCOM file is corrupted. It appears to have been truncated."
|
msgid "Your GEDCOM file is corrupted. It appears to have been truncated."
|
||||||
@ -30079,7 +30079,7 @@ msgstr "Importují se osoby."
|
|||||||
|
|
||||||
#: ../gramps/plugins/lib/libprogen.py:1414
|
#: ../gramps/plugins/lib/libprogen.py:1414
|
||||||
msgid "see address on "
|
msgid "see address on "
|
||||||
msgstr "viz adresa"
|
msgstr "viz adresa "
|
||||||
|
|
||||||
#: ../gramps/plugins/lib/libprogen.py:1417
|
#: ../gramps/plugins/lib/libprogen.py:1417
|
||||||
msgid "see also address"
|
msgid "see also address"
|
||||||
@ -30092,7 +30092,7 @@ msgstr "Důvod úmrtí"
|
|||||||
#. start feedback about import progress (GUI/TXT)
|
#. start feedback about import progress (GUI/TXT)
|
||||||
#: ../gramps/plugins/lib/libprogen.py:1586
|
#: ../gramps/plugins/lib/libprogen.py:1586
|
||||||
msgid "Importing families."
|
msgid "Importing families."
|
||||||
msgstr "Importují se rodiny"
|
msgstr "Importují se rodiny."
|
||||||
|
|
||||||
#: ../gramps/plugins/lib/libprogen.py:1691
|
#: ../gramps/plugins/lib/libprogen.py:1691
|
||||||
msgid "Civil union"
|
msgid "Civil union"
|
||||||
@ -30468,12 +30468,12 @@ msgstr "Dánsko"
|
|||||||
#. TODO for Arabic, should the next line's comma be translated?
|
#. TODO for Arabic, should the next line's comma be translated?
|
||||||
#: ../gramps/plugins/mapservices/eniroswedenmap.py:81
|
#: ../gramps/plugins/mapservices/eniroswedenmap.py:81
|
||||||
msgid " parish"
|
msgid " parish"
|
||||||
msgstr "farnost"
|
msgstr " farnost"
|
||||||
|
|
||||||
#. TODO for Arabic, should the next line's comma be translated?
|
#. TODO for Arabic, should the next line's comma be translated?
|
||||||
#: ../gramps/plugins/mapservices/eniroswedenmap.py:87
|
#: ../gramps/plugins/mapservices/eniroswedenmap.py:87
|
||||||
msgid " state"
|
msgid " state"
|
||||||
msgstr "kraj"
|
msgstr " kraj"
|
||||||
|
|
||||||
#: ../gramps/plugins/mapservices/eniroswedenmap.py:150
|
#: ../gramps/plugins/mapservices/eniroswedenmap.py:150
|
||||||
msgid "Latitude not within '54.55' to '69.05'\n"
|
msgid "Latitude not within '54.55' to '69.05'\n"
|
||||||
@ -31643,7 +31643,7 @@ msgstr "sp. %(reference)s : %(spouse)s"
|
|||||||
#: ../gramps/plugins/textreport/descendreport.py:393
|
#: ../gramps/plugins/textreport/descendreport.py:393
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%s sp."
|
msgid "%s sp."
|
||||||
msgstr " %s sp."
|
msgstr "%s sp."
|
||||||
|
|
||||||
#: ../gramps/plugins/textreport/descendreport.py:526
|
#: ../gramps/plugins/textreport/descendreport.py:526
|
||||||
#: ../gramps/plugins/textreport/detdescendantreport.py:1011
|
#: ../gramps/plugins/textreport/detdescendantreport.py:1011
|
||||||
@ -36237,7 +36237,7 @@ msgstr " (1 bratr)"
|
|||||||
#: ../gramps/plugins/view/relview.py:1053
|
#: ../gramps/plugins/view/relview.py:1053
|
||||||
#: ../gramps/plugins/view/relview.py:1108
|
#: ../gramps/plugins/view/relview.py:1108
|
||||||
msgid " (1 sister)"
|
msgid " (1 sister)"
|
||||||
msgstr "(1 sestra)"
|
msgstr " (1 sestra)"
|
||||||
|
|
||||||
#: ../gramps/plugins/view/relview.py:1055
|
#: ../gramps/plugins/view/relview.py:1055
|
||||||
#: ../gramps/plugins/view/relview.py:1110
|
#: ../gramps/plugins/view/relview.py:1110
|
||||||
@ -36304,14 +36304,14 @@ msgstr "Spusťte prosím nástroj pro ověření integrity/opravy databáze"
|
|||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid " ({number_of} child)"
|
msgid " ({number_of} child)"
|
||||||
msgid_plural " ({number_of} children)"
|
msgid_plural " ({number_of} children)"
|
||||||
msgstr[0] "({number_of} potomek)"
|
msgstr[0] " ({number_of} potomek)"
|
||||||
msgstr[1] "({number_of} potomci)"
|
msgstr[1] " ({number_of} potomci)"
|
||||||
msgstr[2] "({number_of} potomků)"
|
msgstr[2] " ({number_of} potomků)"
|
||||||
|
|
||||||
#: ../gramps/plugins/view/relview.py:1567
|
#: ../gramps/plugins/view/relview.py:1567
|
||||||
#: ../gramps/plugins/view/relview.py:1613
|
#: ../gramps/plugins/view/relview.py:1613
|
||||||
msgid " (no children)"
|
msgid " (no children)"
|
||||||
msgstr "(bez dětí)"
|
msgstr " (bez dětí)"
|
||||||
|
|
||||||
#: ../gramps/plugins/view/relview.py:1871
|
#: ../gramps/plugins/view/relview.py:1871
|
||||||
msgid "Use shading"
|
msgid "Use shading"
|
||||||
@ -36550,7 +36550,7 @@ msgstr "Poslední změna nastala %(date)s"
|
|||||||
#: ../gramps/plugins/webreport/basepage.py:1319
|
#: ../gramps/plugins/webreport/basepage.py:1319
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid " on %(date)s"
|
msgid " on %(date)s"
|
||||||
msgstr "%(date)s"
|
msgstr " %(date)s"
|
||||||
|
|
||||||
#: ../gramps/plugins/webreport/basepage.py:1340
|
#: ../gramps/plugins/webreport/basepage.py:1340
|
||||||
#: ../gramps/plugins/webreport/basepage.py:1345
|
#: ../gramps/plugins/webreport/basepage.py:1345
|
||||||
@ -36616,7 +36616,7 @@ msgstr "Další"
|
|||||||
|
|
||||||
#: ../gramps/plugins/webreport/basepage.py:2127
|
#: ../gramps/plugins/webreport/basepage.py:2127
|
||||||
msgid " [Click to Go]"
|
msgid " [Click to Go]"
|
||||||
msgstr "[Kliknout pro pokračování]"
|
msgstr " [Kliknout pro pokračování]"
|
||||||
|
|
||||||
#: ../gramps/plugins/webreport/basepage.py:2151
|
#: ../gramps/plugins/webreport/basepage.py:2151
|
||||||
msgid "Latter-Day Saints/ LDS Ordinance"
|
msgid "Latter-Day Saints/ LDS Ordinance"
|
||||||
@ -36907,7 +36907,7 @@ msgstr "Volby Html"
|
|||||||
#: ../gramps/plugins/webreport/narrativeweb.py:1678
|
#: ../gramps/plugins/webreport/narrativeweb.py:1678
|
||||||
#: ../gramps/plugins/webreport/webcal.py:1685
|
#: ../gramps/plugins/webreport/webcal.py:1685
|
||||||
msgid "File extension"
|
msgid "File extension"
|
||||||
msgstr "přípona souboru"
|
msgstr "Přípona souboru"
|
||||||
|
|
||||||
#: ../gramps/plugins/webreport/narrativeweb.py:1681
|
#: ../gramps/plugins/webreport/narrativeweb.py:1681
|
||||||
#: ../gramps/plugins/webreport/webcal.py:1688
|
#: ../gramps/plugins/webreport/webcal.py:1688
|
||||||
|
|||||||
425
po/zh_CN.po
21
setup.py
@ -419,8 +419,7 @@ package_data = package_data_core + package_data_gui
|
|||||||
# Resources
|
# Resources
|
||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
data_files_core = [('share/mime-info', ['data/gramps.mime']),
|
data_files_core = [('share/mime-info', ['data/gramps.mime'])]
|
||||||
('share/icons', ['images/gramps.png'])]
|
|
||||||
DOC_FILES = ['AUTHORS', 'COPYING', 'FAQ', 'INSTALL', 'NEWS', 'README.md',
|
DOC_FILES = ['AUTHORS', 'COPYING', 'FAQ', 'INSTALL', 'NEWS', 'README.md',
|
||||||
'TODO']
|
'TODO']
|
||||||
GEDCOM_FILES = glob.glob(os.path.join('example', 'gedcom', '*.*'))
|
GEDCOM_FILES = glob.glob(os.path.join('example', 'gedcom', '*.*'))
|
||||||
@ -441,8 +440,8 @@ data_files_core.append(('share/gramps/css/swanky-purse/images', SWANKY_IMG))
|
|||||||
|
|
||||||
PNG_FILES = glob.glob(os.path.join('data', '*.png'))
|
PNG_FILES = glob.glob(os.path.join('data', '*.png'))
|
||||||
SVG_FILES = glob.glob(os.path.join('data', '*.svg'))
|
SVG_FILES = glob.glob(os.path.join('data', '*.svg'))
|
||||||
data_files_core.append(('share/icons/gnome/48x48/mimetypes', PNG_FILES))
|
data_files_core.append(('share/icons/hicolor/48x48/mimetypes', PNG_FILES))
|
||||||
data_files_core.append(('share/icons/gnome/scalable/mimetypes', SVG_FILES))
|
data_files_core.append(('share/icons/hicolor/scalable/mimetypes', SVG_FILES))
|
||||||
|
|
||||||
DTD_FILES = glob.glob(os.path.join('data', '*.dtd'))
|
DTD_FILES = glob.glob(os.path.join('data', '*.dtd'))
|
||||||
RNG_FILES = glob.glob(os.path.join('data', '*.rng'))
|
RNG_FILES = glob.glob(os.path.join('data', '*.rng'))
|
||||||
@ -465,6 +464,20 @@ data_files_gui.append(('share/gramps/images/hicolor/22x22/actions', ICON_22))
|
|||||||
data_files_gui.append(('share/gramps/images/hicolor/24x24/actions', ICON_24))
|
data_files_gui.append(('share/gramps/images/hicolor/24x24/actions', ICON_24))
|
||||||
data_files_gui.append(('share/gramps/images/hicolor/48x48/actions', ICON_48))
|
data_files_gui.append(('share/gramps/images/hicolor/48x48/actions', ICON_48))
|
||||||
data_files_gui.append(('share/gramps/images/hicolor/scalable/actions', ICON_SC))
|
data_files_gui.append(('share/gramps/images/hicolor/scalable/actions', ICON_SC))
|
||||||
|
APP_16 = os.path.join(THEME, '16x16', 'apps', 'gramps.png')
|
||||||
|
APP_22 = os.path.join(THEME, '22x22', 'apps', 'gramps.png')
|
||||||
|
APP_24 = os.path.join(THEME, '24x24', 'apps', 'gramps.png')
|
||||||
|
APP_48 = os.path.join(THEME, '48x48', 'apps', 'gramps.png')
|
||||||
|
APP_128 = os.path.join(THEME, '128x128', 'apps', 'gramps.png')
|
||||||
|
APP_256 = os.path.join(THEME, '256x256', 'apps', 'gramps.png')
|
||||||
|
APP_SC = os.path.join(THEME, 'scalable', 'apps', 'gramps.svg')
|
||||||
|
data_files_gui.append(('share/icons/hicolor/16x16/apps', [APP_16]))
|
||||||
|
data_files_gui.append(('share/icons/hicolor/22x22/apps', [APP_22]))
|
||||||
|
data_files_gui.append(('share/icons/hicolor/24x24/apps', [APP_24]))
|
||||||
|
data_files_gui.append(('share/icons/hicolor/48x48/apps', [APP_48]))
|
||||||
|
data_files_gui.append(('share/icons/hicolor/128x128/apps', [APP_128]))
|
||||||
|
data_files_gui.append(('share/icons/hicolor/256x256/apps', [APP_256]))
|
||||||
|
data_files_gui.append(('share/icons/hicolor/scalable/apps', [APP_SC]))
|
||||||
|
|
||||||
data_files = data_files_core + data_files_gui
|
data_files = data_files_core + data_files_gui
|
||||||
|
|
||||||
|
|||||||