[gnome-games/sudoku-tube] Use glade (notebook) to do the connecting dialog



commit 8985c6364a554922ad9b691bbaa241e9e95c9e95
Author: Zhang Sen <zh jesse gmail com>
Date:   Sun Aug 16 22:04:07 2009 +0800

    Use glade (notebook) to do the connecting dialog

 gnome-sudoku/data/offering_tube.ui |   67 ++++++++++++++++++++++---
 gnome-sudoku/src/lib/main.py       |   98 +++++++++++++++++-------------------
 2 files changed, 107 insertions(+), 58 deletions(-)
---
diff --git a/gnome-sudoku/data/offering_tube.ui b/gnome-sudoku/data/offering_tube.ui
index cb7c2ea..49ccc58 100644
--- a/gnome-sudoku/data/offering_tube.ui
+++ b/gnome-sudoku/data/offering_tube.ui
@@ -13,12 +13,54 @@
         <property name="orientation">vertical</property>
         <property name="spacing">2</property>
         <child>
-          <object class="GtkLabel" id="label">
+          <object class="GtkNotebook" id="notebook">
             <property name="visible">True</property>
-            <property name="label" translatable="yes">Waiting for reply</property>
+            <property name="can_focus">True</property>
+            <property name="show_tabs">False</property>
+            <property name="show_border">False</property>
+            <child>
+              <object class="GtkLabel" id="wait_label">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">Waiting for reply</property>
+              </object>
+            </child>
+            <child type="tab">
+              <object class="GtkLabel" id="label1">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">page 1</property>
+              </object>
+              <packing>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="fail_label">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">Request failed</property>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child type="tab">
+              <object class="GtkLabel" id="label2">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">page 2</property>
+              </object>
+              <packing>
+                <property name="position">1</property>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child type="tab">
+              <placeholder/>
+            </child>
           </object>
           <packing>
-            <property name="position">1</property>
+            <property name="position">0</property>
           </packing>
         </child>
         <child internal-child="action_area">
@@ -26,10 +68,20 @@
             <property name="visible">True</property>
             <property name="layout_style">end</property>
             <child>
-              <placeholder/>
+              <object class="GtkButton" id="button_ok">
+                <property name="label">gtk-ok</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">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="button1">
+              <object class="GtkButton" id="button_cancel">
                 <property name="label">gtk-cancel</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
@@ -46,13 +98,14 @@
           <packing>
             <property name="expand">False</property>
             <property name="pack_type">end</property>
-            <property name="position">0</property>
+            <property name="position">1</property>
           </packing>
         </child>
       </object>
     </child>
     <action-widgets>
-      <action-widget response="-6">button1</action-widget>
+      <action-widget response="-5">button_ok</action-widget>
+      <action-widget response="-6">button_cancel</action-widget>
     </action-widgets>
   </object>
 </interface>
diff --git a/gnome-sudoku/src/lib/main.py b/gnome-sudoku/src/lib/main.py
index fc33b82..620a736 100644
--- a/gnome-sudoku/src/lib/main.py
+++ b/gnome-sudoku/src/lib/main.py
@@ -444,59 +444,55 @@ class SudokuGame(gconf_wrapper.GConfWrapper):
             return
 
     def _new_with_contact_cb(self, action):
+        def response_cb(dialog, response_id):
+            if self._is_waiting_for_response:
+                if response_id in (gtk.RESPONSE_CANCEL,
+                        gtk.RESPONSE_DELETE_EVENT):
+                    self._tube_offer.cancel()
+                    self._is_initiator = None
+            # else don't need to do anything
+            self._wait_dialog.destroy()
+
+        def offer_fail_cb(offer, reason):
+            self._is_waiting_for_response = False
+            self._is_initiator = None
+            notebook = builder.get_object("notebook")
+            notebook.set_current_page(1)
+            button_cancel = builder.get_object("button_cancel")
+            button_ok = builder.get_object("button_ok")
+            button_cancel.hide()
+            button_ok.show()
+
         choice = contact_selector.contact_selector_run(self.w)
-        if choice:
-            self._is_initiator = True
-            conn, handle, mode = choice
-
-            puzzle = self._generate_new_puzzle()
-            if not puzzle:
-                logger.error("failed to genereate new puzzle")
-                # should popup?
-                return
+        if not choice:
+            return
 
-            self._tube_offer = tp_tube.TubeOffer(
-                    conn, handle, self._tube_service, puzzle, mode)
-
-            builder = gtk.Builder()
-            builder.add_from_file(os.path.join(UI_DIR, "offering_tube.ui"))
-            self._wait_dialog = builder.get_object("dialog")
-            self._wait_dialog.set_transient_for(self.w)
-            self._wait_dialog.connect("response", self._wait_dialog_response_cb)
-
-            self._tube_offer.connect("offer-succeeded",
-                    self._tube_offered_cb, puzzle, mode)
-            self._tube_offer.connect("offer-failed", self._offer_fail_cb)
-
-            self._tube_offer.execute()
-            self._is_waiting_for_response = True
-            self._wait_dialog.run()
-
-    def _wait_dialog_response_cb(self, dialog, response_id):
-        if self._is_waiting_for_response:
-            if response_id in (gtk.RESPONSE_CANCEL, gtk.RESPONSE_DELETE_EVENT):
-                self._tube_offer.cancel()
-                self._is_initiator = None
-        # else don't need to do anything
-        self._wait_dialog.destroy()
+        self._is_initiator = True
+        conn, handle, mode = choice
 
-    def _offer_fail_cb(self, offer, reason):
-        self._is_waiting_for_response = False
-        self._is_initiator = None
-        # clear label and button
-        vbox = self._wait_dialog.vbox
-        vbox.remove(vbox.get_children()[0])
-        action = self._wait_dialog.action_area
-        action.remove(action.get_children()[0])
-
-        text = '<span weight="bold" size="larger">Failed</span>\n%s' % reason
-        fail_label = gtk.Label(text)
-        fail_label.set_use_markup(True)
-        fail_label.set_line_wrap(True)
-        fail_label.set_selectable(True)
-        fail_label.show()
-        self._wait_dialog.vbox.pack_start(fail_label)
-        self._wait_dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)
+        puzzle = self._generate_new_puzzle()
+        if not puzzle:
+            logger.error("failed to genereate new puzzle")
+            # should popup?
+            return
+
+        self._tube_offer = tp_tube.TubeOffer(
+                conn, handle, self._tube_service, puzzle, mode)
+
+        builder = gtk.Builder()
+        builder.add_from_file(os.path.join(UI_DIR, "offering_tube.ui"))
+        self._wait_dialog = builder.get_object("dialog")
+
+        self._wait_dialog.set_transient_for(self.w)
+        self._wait_dialog.connect("response", response_cb)
+
+        self._tube_offer.connect("offer-succeeded",
+                self._tube_offered_cb, puzzle, mode)
+        self._tube_offer.connect("offer-failed", offer_fail_cb)
+
+        self._tube_offer.execute()
+        self._is_waiting_for_response = True
+        self._wait_dialog.run()
 
     def _process_accepted_tube(self, bus, tube, puzzle, mode):
         """User has accepted the tube



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]