[Sugar-devel] [PATCH sugar] Journal: add alert to confirm before erasing an entry

Simon Schampijer simon at schampijer.de
Sun Aug 19 11:40:55 EDT 2012


Erasing an entry in the Journal does not ask for confirmation
before doing the erase. This patch adds an alert to the ListView
and the DetailView that asks for confirmation before doing the
erase. This is part of the touch interaction work [1].

Signed-off-by: Simon Schampijer <simon at laptop.org>

[1] http://wiki.sugarlabs.org/go/Features/Touch/Development#Journal
---
 src/jarabe/journal/journaltoolbox.py | 26 ++++++++++++++++++++------
 src/jarabe/journal/palettes.py       | 17 ++++++++++++++++-
 2 files changed, 36 insertions(+), 7 deletions(-)

diff --git a/src/jarabe/journal/journaltoolbox.py b/src/jarabe/journal/journaltoolbox.py
index 2aa4153..5572668 100644
--- a/src/jarabe/journal/journaltoolbox.py
+++ b/src/jarabe/journal/journaltoolbox.py
@@ -36,6 +36,7 @@ from sugar.graphics.combobox import ComboBox
 from sugar.graphics.menuitem import MenuItem
 from sugar.graphics.icon import Icon
 from sugar.graphics.xocolor import XoColor
+from sugar.graphics.alert import ConfirmationAlert
 from sugar.graphics import iconentry
 from sugar.graphics import style
 from sugar import mime
@@ -45,6 +46,7 @@ from jarabe.journal import misc
 from jarabe.journal import model
 from jarabe.journal.palettes import ClipboardMenu
 from jarabe.journal.palettes import VolumeMenu
+from jarabe.journal import journalwindow
 
 
 _AUTOSEARCH_TIMEOUT = 1000
@@ -438,12 +440,24 @@ class EntryToolbar(gtk.Toolbar):
                       _('Error'))
 
     def _erase_button_clicked_cb(self, button):
-        registry = bundleregistry.get_registry()
-
-        bundle = misc.get_bundle(self._metadata)
-        if bundle is not None and registry.is_installed(bundle):
-            registry.uninstall(bundle)
-        model.delete(self._metadata['uid'])
+        alert = ConfirmationAlert()
+        alert.props.title = _('Erase \"%s\"') % self._metadata['title']
+        alert.props.msg = _('This will erase the entry \"%s\" perminantely.') \
+            % self._metadata['title']
+        alert.connect('response', self.__erase_alert_response_cb)
+        journalwindow.get_journal_window().add_alert(alert)
+        alert.show()
+
+    def __erase_alert_response_cb(self, alert, response_id):
+        if response_id is gtk.RESPONSE_OK:
+            journalwindow.get_journal_window().remove_alert(alert)
+            registry = bundleregistry.get_registry()
+            bundle = misc.get_bundle(self._metadata)
+            if bundle is not None and registry.is_installed(bundle):
+                registry.uninstall(bundle)
+            model.delete(self._metadata['uid'])
+        elif response_id is gtk.RESPONSE_CANCEL:
+            journalwindow.get_journal_window().remove_alert(alert)
 
     def _resume_menu_item_activate_cb(self, menu_item, service_name):
         misc.resume(self._metadata, service_name)
diff --git a/src/jarabe/journal/palettes.py b/src/jarabe/journal/palettes.py
index 8fc1e5d..90f5dee 100644
--- a/src/jarabe/journal/palettes.py
+++ b/src/jarabe/journal/palettes.py
@@ -29,6 +29,7 @@ from sugar.graphics.palette import Palette
 from sugar.graphics.menuitem import MenuItem
 from sugar.graphics.icon import Icon
 from sugar.graphics.xocolor import XoColor
+from sugar.graphics.alert import ConfirmationAlert
 from sugar import mime
 
 from jarabe.model import friends
@@ -36,6 +37,7 @@ from jarabe.model import filetransfer
 from jarabe.model import mimeregistry
 from jarabe.journal import misc
 from jarabe.journal import model
+from jarabe.journal import journalwindow
 
 
 class ObjectPalette(Palette):
@@ -142,7 +144,20 @@ class ObjectPalette(Palette):
                       _('Error'))
 
     def __erase_activate_cb(self, menu_item):
-        model.delete(self._metadata['uid'])
+        alert = ConfirmationAlert()
+        alert.props.title = _('Erase \"%s\"') % self._metadata['title']
+        alert.props.msg = _('This will erase the entry \"%s\" perminantely.') \
+            % self._metadata['title']
+        alert.connect('response', self.__erase_alert_response_cb)
+        journalwindow.get_journal_window().add_alert(alert)
+        alert.show()
+
+    def __erase_alert_response_cb(self, alert, response_id):
+        if response_id is gtk.RESPONSE_OK:
+            journalwindow.get_journal_window().remove_alert(alert)
+            model.delete(self._metadata['uid'])
+        elif response_id is gtk.RESPONSE_CANCEL:
+            journalwindow.get_journal_window().remove_alert(alert)
 
     def __detail_activate_cb(self, menu_item):
         self.emit('detail-clicked', self._metadata['uid'])
-- 
1.7.11.4



More information about the Sugar-devel mailing list