7822: Yes To All button; added MultiSelectDialog, and use in remove multiple people
This commit is contained in:
parent
b363360ac8
commit
2835f51fb6
@ -339,6 +339,66 @@ class MissingMediaDialog(object):
|
||||
self.top)
|
||||
return True
|
||||
|
||||
class MultiSelectDialog(object):
|
||||
def __init__(self, msg1, msg2, task1, task2, task3, parent=None):
|
||||
self.xml = Glade(toplevel='multiselectdialog')
|
||||
|
||||
self.top = self.xml.toplevel
|
||||
self.top.set_icon(ICON)
|
||||
self.top.set_title("%s - Gramps" % msg1)
|
||||
|
||||
self.task1 = task1
|
||||
self.task2 = task2
|
||||
self.task3 = task3
|
||||
self.default_action = 0
|
||||
self.last_action = 0
|
||||
|
||||
label1 = self.xml.get_object('label6')
|
||||
label1.set_text('<span weight="bold" size="larger">%s</span>' % msg1)
|
||||
label1.set_use_markup(True)
|
||||
|
||||
label2 = self.xml.get_object('label5')
|
||||
label2.set_text(msg2)
|
||||
label2.set_use_markup(True)
|
||||
|
||||
check_button = self.xml.get_object('apply_to_rest')
|
||||
|
||||
if parent:
|
||||
self.top.set_transient_for(parent)
|
||||
self.top.show()
|
||||
self.top.connect('delete_event', self.warn)
|
||||
response = Gtk.ResponseType.DELETE_EVENT
|
||||
|
||||
# Need some magic here, because an attempt to close the dialog
|
||||
# with the X button not only emits the 'delete_event' signal
|
||||
# but also exits with the RESPONSE_DELETE_EVENT
|
||||
while response == Gtk.ResponseType.DELETE_EVENT:
|
||||
response = self.top.run()
|
||||
|
||||
if check_button.get_active():
|
||||
self.default_action = response
|
||||
else:
|
||||
self.default_action = 0
|
||||
self.last_action = response
|
||||
if response == 1:
|
||||
if self.task1:
|
||||
self.task1()
|
||||
elif response == 2:
|
||||
if self.task2:
|
||||
self.task2()
|
||||
elif response == 3:
|
||||
if self.task3:
|
||||
self.task3()
|
||||
self.top.destroy()
|
||||
|
||||
def warn(self, obj, obj2):
|
||||
WarningDialog(
|
||||
_("Attempt to force closing the dialog"),
|
||||
_("Please do not force closing this important dialog.\n"
|
||||
"Instead select one of the available options"),
|
||||
self.top)
|
||||
return True
|
||||
|
||||
class MessageHideDialog(object):
|
||||
|
||||
def __init__(self, title, message, key, parent=None):
|
||||
|
@ -397,6 +397,169 @@
|
||||
<action-widget response="3">button11</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
<object class="GtkDialog" id="multiselectdialog">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="default_width">600</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkBox" id="vbox143">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkButtonBox" id="hbuttonbox50">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button183">
|
||||
<property name="label" translatable="yes">_Cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="tooltip_text" translatable="yes">Cancel the rest of the operations</property>
|
||||
<property name="use_underline">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button184">
|
||||
<property name="label" translatable="yes">_No</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="tooltip_text" translatable="yes">Do not apply the operation to this item</property>
|
||||
<property name="use_underline">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button185">
|
||||
<property name="label" translatable="yes">_Yes</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_focus">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="has_default">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="tooltip_text" translatable="yes">Apply the operation to this item</property>
|
||||
<property name="use_underline">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkGrid" id="table82">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">12</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label5">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="margin_left">6</property>
|
||||
<property name="margin_right">6</property>
|
||||
<property name="margin_top">24</property>
|
||||
<property name="margin_bottom">24</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="wrap">True</property>
|
||||
<property name="ellipsize">start</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage" id="image8">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="valign">start</property>
|
||||
<property name="pixel_size">48</property>
|
||||
<property name="icon_name">dialog-warning</property>
|
||||
<property name="icon_size">6</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label6">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="margin_left">6</property>
|
||||
<property name="margin_right">6</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="wrap">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="apply_to_rest">
|
||||
<property name="label" translatable="yes">_Use this answer for the rest of the items</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="tooltip_text" translatable="yes">If you check this button, your next answer will apply to the rest of the selected items</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="1">button183</action-widget>
|
||||
<action-widget response="2">button184</action-widget>
|
||||
<action-widget response="3">button185</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
<object class="GtkDialog" id="optiondialog">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
|
@ -51,7 +51,7 @@ from gramps.gui.views.listview import ListView, TEXT, MARKUP, ICON
|
||||
from gramps.gui.actiongroup import ActionGroup
|
||||
from gramps.gen.utils.string import data_recover_msg
|
||||
from gramps.gen.display.name import displayer as name_displayer
|
||||
from gramps.gui.dialog import ErrorDialog, QuestionDialog
|
||||
from gramps.gui.dialog import ErrorDialog, MultiSelectDialog
|
||||
from gramps.gen.errors import WindowActiveError
|
||||
from gramps.gui.views.bookmarks import PersonBookmarks
|
||||
from gramps.gen.config import config
|
||||
@ -286,18 +286,34 @@ class BasePersonView(ListView):
|
||||
"""
|
||||
Remove a person from the database.
|
||||
"""
|
||||
self._multi_select_dialog = None
|
||||
for sel in self.selected_handles():
|
||||
person = self.dbstate.db.get_person_from_handle(sel)
|
||||
self.active_person = person
|
||||
name = name_displayer.display(person)
|
||||
|
||||
msg = _('Deleting the person will remove the person '
|
||||
'from the database.')
|
||||
msg = "%s %s" % (msg, data_recover_msg)
|
||||
QuestionDialog(_('Delete %s?') % name,
|
||||
msg,
|
||||
_('_Delete Person'),
|
||||
self.delete_person_response)
|
||||
if (self._multi_select_dialog and
|
||||
self._multi_select_dialog.default_action != 0):
|
||||
# Repeat previous choice
|
||||
if self._multi_select_dialog.default_action == 1: # Cancel
|
||||
break
|
||||
elif self._multi_select_dialog.default_action == 2: # No
|
||||
break
|
||||
elif self._multi_select_dialog.default_action == 3: # Yes
|
||||
self.delete_person_response()
|
||||
elif (self._multi_select_dialog and
|
||||
self._multi_select_dialog.last_action == 1): # Cancel
|
||||
# Cancel the rest of the operations
|
||||
break
|
||||
else:
|
||||
# Ask to delete; option to cancel, delete rest
|
||||
name = name_displayer.display(person) + (" [%s]" % person.gramps_id)
|
||||
msg = _('Deleting the person will remove the person '
|
||||
'from the database.')
|
||||
self._multi_select_dialog = MultiSelectDialog(_('Delete %s?') % name,
|
||||
msg,
|
||||
None, # Cancel function
|
||||
None, # No function
|
||||
self.delete_person_response) # Yes
|
||||
self._multi_select_dialog = None
|
||||
|
||||
def delete_person_response(self):
|
||||
"""
|
||||
|
Loading…
Reference in New Issue
Block a user