9795: remember the last location of windows [tag dialogs]

This commit is contained in:
Paul Franklin
2017-01-11 04:13:35 -08:00
parent 3bcea79cc5
commit 5633570250

View File

@@ -51,6 +51,7 @@ from ..display import display_help
from ..dialog import ErrorDialog, QuestionDialog2 from ..dialog import ErrorDialog, QuestionDialog2
import gramps.gui.widgets.progressdialog as progressdlg import gramps.gui.widgets.progressdialog as progressdlg
from ..actiongroup import ActionGroup from ..actiongroup import ActionGroup
from ..managedwindow import ManagedWindow
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@@ -245,9 +246,7 @@ class Tags(DbGUIElement):
""" """
Display the Organize Tags dialog. Display the Organize Tags dialog.
""" """
organize_dialog = OrganizeTagsDialog(self.db, OrganizeTagsDialog(self.db, self.uistate, [])
self.uistate.window)
organize_dialog.run()
def cb_new_tag(self, action): def cb_new_tag(self, action):
""" """
@@ -255,8 +254,7 @@ class Tags(DbGUIElement):
""" """
tag = Tag() tag = Tag()
tag.set_priority(self.db.get_number_of_tags()) tag.set_priority(self.db.get_number_of_tags())
new_dialog = EditTag(self.db, self.uistate.window, tag) EditTag(self.db, self.uistate, [], tag)
new_dialog.run()
if tag.get_handle(): if tag.get_handle():
self.tag_selected_rows(tag.get_handle()) self.tag_selected_rows(tag.get_handle())
@@ -313,16 +311,28 @@ def make_callback(func, tag_handle):
# Organize Tags Dialog # Organize Tags Dialog
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class OrganizeTagsDialog: class OrganizeTagsDialog(ManagedWindow):
""" """
A dialog to enable the user to organize tags. A dialog to enable the user to organize tags.
""" """
def __init__(self, db, parent_window): def __init__(self, db, uistate, track):
ManagedWindow.__init__(self, uistate, track, self.__class__, modal=True)
# the self.top.run() below makes Gtk make it modal, so any change to
# the previous line's "modal" would require that line to be changed
self.db = db self.db = db
self.parent_window = parent_window
self.namelist = None self.namelist = None
self.namemodel = None self.namemodel = None
self.top = self._create_dialog() self.top = self._create_dialog()
self.set_window(self.top, None, _('Organize Tags'))
self.setup_configs('interface.organizetagsdialog', 400, 350)
self.show()
self.run()
self.close()
# this is meaningless while it's modal, but since this ManagedWindow can
# have an EditTag ManagedWindow child it needs a non-None second argument
def build_menu_names(self, obj):
return (_('Organize Tags'), ' ')
def run(self): def run(self):
""" """
@@ -330,6 +340,8 @@ class OrganizeTagsDialog:
""" """
self._populate_model() self._populate_model()
while True: while True:
# the self.top.run() makes Gtk make it modal, so any change to that
# line would require the ManagedWindow.__init__ to be changed also
response = self.top.run() response = self.top.run()
if response == Gtk.ResponseType.HELP: if response == Gtk.ResponseType.HELP:
display_help(webpage=WIKI_HELP_PAGE, display_help(webpage=WIKI_HELP_PAGE,
@@ -342,8 +354,6 @@ class OrganizeTagsDialog:
with DbTxn(_('Change Tag Priority'), self.db) as trans: with DbTxn(_('Change Tag Priority'), self.db) as trans:
self.__change_tag_priority(trans) self.__change_tag_priority(trans)
self.top.destroy()
def __priorities_changed(self): def __priorities_changed(self):
""" """
Return True if the tag priorities have changed else return False. Return True if the tag priorities have changed else return False.
@@ -384,11 +394,7 @@ class OrganizeTagsDialog:
Create a dialog box to organize tags. Create a dialog box to organize tags.
""" """
# pylint: disable-msg=E1101 # pylint: disable-msg=E1101
title = _("%(title)s - Gramps") % {'title': _("Organize Tags")} top = Gtk.Dialog(parent=self.parent_window)
top = Gtk.Dialog(title)
top.set_default_size(400, 350)
top.set_modal(True)
top.set_transient_for(self.parent_window)
top.vbox.set_spacing(5) top.vbox.set_spacing(5)
label = Gtk.Label(label='<span size="larger" weight="bold">%s</span>' label = Gtk.Label(label='<span size="larger" weight="bold">%s</span>'
% _("Organize Tags")) % _("Organize Tags"))
@@ -429,7 +435,6 @@ class OrganizeTagsDialog:
bbox.add(edit) bbox.add(edit)
bbox.add(remove) bbox.add(remove)
box.pack_start(bbox, 0, 0, 5) box.pack_start(bbox, 0, 0, 5)
top.show_all()
return top return top
def cb_up_clicked(self, obj): def cb_up_clicked(self, obj):
@@ -452,8 +457,7 @@ class OrganizeTagsDialog:
""" """
tag = Tag() tag = Tag()
tag.set_priority(self.db.get_number_of_tags()) tag.set_priority(self.db.get_number_of_tags())
edit_dialog = EditTag(self.db, top, tag) EditTag(self.db, self.uistate, self.track, tag)
edit_dialog.run()
if tag.get_handle(): if tag.get_handle():
self.namemodel.add((tag.get_priority(), self.namemodel.add((tag.get_priority(),
@@ -470,8 +474,7 @@ class OrganizeTagsDialog:
return return
tag = self.db.get_tag_from_handle(store.get_value(iter_, 1)) tag = self.db.get_tag_from_handle(store.get_value(iter_, 1))
edit_dialog = EditTag(self.db, top, tag) EditTag(self.db, self.uistate, self.track, tag)
edit_dialog.run()
store.set_value(iter_, 2, tag.get_name()) store.set_value(iter_, 2, tag.get_name())
store.set_value(iter_, 3, tag.get_color()) store.set_value(iter_, 3, tag.get_color())
@@ -492,7 +495,7 @@ class OrganizeTagsDialog:
"removed from all objects in the database."), "removed from all objects in the database."),
_("Yes"), _("Yes"),
_("No"), _("No"),
parent=self.parent_window) parent=self.window)
prompt = yes_no.run() prompt = yes_no.run()
if prompt: if prompt:
@@ -543,23 +546,39 @@ class OrganizeTagsDialog:
# Tag editor # Tag editor
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class EditTag: class EditTag(ManagedWindow):
""" """
A dialog to enable the user to create a new tag. A dialog to enable the user to create a new tag.
""" """
def __init__(self, db, parent_window, tag): def __init__(self, db, uistate, track, tag):
self.parent_window = parent_window
self.db = db
self.tag = tag self.tag = tag
if self.tag.get_handle():
self.title = _('Tag: %s') % self.tag.get_name()
else:
self.title = _('New Tag')
ManagedWindow.__init__(self, uistate, track, self.__class__, modal=True)
# the self.top.run() below makes Gtk make it modal, so any change to
# the previous line's "modal" would require that line to be changed
self.db = db
self.entry = None self.entry = None
self.color = None self.color = None
self.top = self._create_dialog() self.top = self._create_dialog()
self.set_window(self.top, None, self.title)
self.setup_configs('interface.edittag', 320, 100)
self.show()
self.run()
self.close()
def build_menu_names(self, obj): # this is meaningless while it's modal
return (self.title, None)
def run(self): def run(self):
""" """
Run the dialog and return the result. Run the dialog and return the result.
""" """
while True: while True:
# the self.top.run() makes Gtk make it modal, so any change to that
# line would require the ManagedWindow.__init__ to be changed also
response = self.top.run() response = self.top.run()
if response == Gtk.ResponseType.HELP: if response == Gtk.ResponseType.HELP:
display_help(webpage=WIKI_HELP_PAGE, display_help(webpage=WIKI_HELP_PAGE,
@@ -569,7 +588,6 @@ class EditTag:
if response == Gtk.ResponseType.OK: if response == Gtk.ResponseType.OK:
self._save() self._save()
self.top.destroy()
def _save(self): def _save(self):
""" """
@@ -585,7 +603,7 @@ class EditTag:
if not self.tag.get_name(): if not self.tag.get_name():
ErrorDialog(_("Cannot save tag"), ErrorDialog(_("Cannot save tag"),
_("The tag name cannot be empty"), _("The tag name cannot be empty"),
parent=self.parent_window) parent=self.window)
return return
if not self.tag.get_handle(): if not self.tag.get_handle():
@@ -604,14 +622,7 @@ class EditTag:
Create a dialog box to enter a new tag. Create a dialog box to enter a new tag.
""" """
# pylint: disable-msg=E1101 # pylint: disable-msg=E1101
if self.tag.get_handle(): top = Gtk.Dialog(parent=self.parent_window)
title = _('Tag: %s') % self.tag.get_name()
else:
title = _('New Tag')
top = Gtk.Dialog(_("%(title)s - Gramps") % {'title': title})
top.set_default_size(300, 100)
top.set_modal(True)
top.set_transient_for(self.parent_window)
top.vbox.set_spacing(5) top.vbox.set_spacing(5)
hbox = Gtk.Box() hbox = Gtk.Box()
@@ -633,5 +644,4 @@ class EditTag:
top.add_button(_('_Help'), Gtk.ResponseType.HELP) top.add_button(_('_Help'), Gtk.ResponseType.HELP)
top.add_button(_('_Cancel'), Gtk.ResponseType.CANCEL) top.add_button(_('_Cancel'), Gtk.ResponseType.CANCEL)
top.add_button(_('_OK'), Gtk.ResponseType.OK) top.add_button(_('_OK'), Gtk.ResponseType.OK)
top.show_all()
return top return top