Big update to 0.1.0. Improved error handling, syncing, the works...
[hermes] / package / src / gui.py
index b82a71c..c283ff1 100755 (executable)
@@ -40,7 +40,8 @@ class HermesGUI:
       try:
         fb2c = Hermes(self,
                       twitter = (self.get_use_twitter() and self.get_twitter_credentials()) or None,
-                      facebook = self.get_use_facebook())
+                      facebook = self.get_use_facebook(),
+                      empty = self.get_create_empty())
         fb2c.load_friends()
         fb2c.sync_contacts(resync = force)
         gobject.idle_add(self.open_summary, fb2c)
@@ -114,47 +115,81 @@ class HermesGUI:
     dialog = gtk.Dialog('Accounts', self.window)
     dialog.add_button('Save', gtk.RESPONSE_OK)
 
-    use_facebook = hildon.CheckButton(gtk.HILDON_SIZE_FINGER_HEIGHT)
-    use_facebook.set_label('Use Facebook')
+    #pa = hildon.PannableArea()
+    #dialog.vbox.add(pa)
+    content = dialog.vbox 
+    #content = gtk.VBox()
+    #pa.add(content)
+    #pa.set_size_request(600, 380)
+
+    use_facebook = self.new_checkbox('Use Facebook', content)
     use_facebook.set_active(self.get_use_facebook())
-    dialog.vbox.add(use_facebook)
 
-    use_twitter = hildon.CheckButton(gtk.HILDON_SIZE_FINGER_HEIGHT)
-    use_twitter.set_label('Use Twitter')
+    indent = self.new_indent(content)
+    fb_msg = self.add_linked(indent, use_facebook, gtk.Label('Note: authentication via web page'))
+    fb_msg.set_property('justify', gtk.JUSTIFY_LEFT)
+    
+    fb_empty = self.add_linked(indent, use_facebook, self.new_checkbox('Create birthday-only contacts'))
+    fb_empty.set_active(self.get_create_empty())
+
+    use_twitter = self.new_checkbox('Use Twitter', content)
     use_twitter.set_active(self.get_use_twitter())
-    dialog.vbox.add(use_twitter)
 
-    tw_indent = gtk.HBox()
-    tw_user = hildon.Entry(gtk.HILDON_SIZE_FINGER_HEIGHT)
-    tw_user.set_property('hildon-input-mode', gtk.HILDON_GTK_INPUT_MODE_FULL)
-    tw_user.set_placeholder("Twitter username")
-    tw_user.set_property('is-focus', False)
+    indent = self.new_indent(content)
+    tw_user = self.add_linked(indent, use_twitter, self.new_input('Twitter username'))
     tw_user.set_text(self.get_twitter_credentials()[0])
-    self.sync_edit(use_twitter, tw_user)
-    use_twitter.connect('toggled', self.sync_edit, tw_user)
-    tw_indent.pack_start(tw_user, padding=48)
-    dialog.vbox.add(tw_indent)
-
-    tw_indent = gtk.HBox()
-    tw_pass = hildon.Entry(gtk.HILDON_SIZE_FINGER_HEIGHT)
-    tw_pass.set_placeholder("Twitter password")
+
+    tw_pass = self.add_linked(indent, use_twitter, self.new_input('Twitter password'))
     tw_pass.set_property('hildon-input-mode', gtk.HILDON_GTK_INPUT_MODE_FULL |
                                               gtk.HILDON_GTK_INPUT_MODE_INVISIBLE)
     tw_pass.set_text(self.get_twitter_credentials()[1])
-    self.sync_edit(use_twitter, tw_pass)
-    use_twitter.connect('toggled', self.sync_edit, tw_pass)
-    tw_indent.pack_start(tw_pass, padding=48)
-    dialog.vbox.add(tw_indent)
 
     dialog.show_all()
     result = dialog.run()
     dialog.hide()
     if result == gtk.RESPONSE_OK:
       self.set_use_facebook(use_facebook.get_active())
+      self.set_create_empty(fb_empty.get_active())
       self.set_use_twitter(use_twitter.get_active(), tw_user.get_text(), tw_pass.get_text())
 
     return result
-    
+  # -----------------------------------------------------------------------
+  def new_checkbox(self, label, box = None):
+    checkbox = hildon.CheckButton(gtk.HILDON_SIZE_FINGER_HEIGHT)
+    checkbox.set_label(label)
+    if box:
+      box.add(checkbox)
+    return checkbox
+
+
+  # -----------------------------------------------------------------------
+  def new_indent(self, box):
+    outer = gtk.HBox()
+    indent = gtk.VBox()
+    outer.pack_start(indent, padding=48)
+    box.add(outer)
+    return indent
+
+  # -----------------------------------------------------------------------
+  def new_input(self, text, box = None):
+    input = hildon.Entry(gtk.HILDON_SIZE_FINGER_HEIGHT)
+    input.set_property('hildon-input-mode', gtk.HILDON_GTK_INPUT_MODE_FULL)
+    input.set_placeholder(text)
+    input.set_property('is-focus', False)
+    if box:
+      box.add(input)
+    return input
+
+
+  # -----------------------------------------------------------------------
+  def add_linked(self, box, ctrl, to_add):
+    box.add(to_add)
+    self.sync_edit(ctrl, to_add)
+    ctrl.connect('toggled', self.sync_edit, to_add)
+    return to_add
+  
     
   # -----------------------------------------------------------------------
   def sync_edit(self, use_twitter, edit):
@@ -278,6 +313,13 @@ class HermesGUI:
   def set_use_facebook(self, value):
     self.gc.set_bool("/apps/maemo/hermes/use_facebook", value)
 
+  def get_create_empty(self):
+    return self.gc.get_bool("/apps/maemo/hermes/create_empty")
+
+
+  def set_create_empty(self, value):
+    self.gc.set_bool("/apps/maemo/hermes/create_empty", value)
+
 
   def get_use_twitter(self):
     return self.gc.get_bool("/apps/maemo/hermes/use_twitter")