Debian packaging: 0.0.4-1
[beifahrer] / src / lift-detail-window.vala
index 163da15..a61231c 100644 (file)
@@ -20,10 +20,6 @@ using Gtk;
 using Hildon;
 
 public class LiftDetailWindow : StackableWindow {
-       private const string BROWSER_SERVICE = "com.nokia.osso_browser";
-       private const string BROWSER_PATH = "/com/nokia/osso_browser";
-       private const string BROWSER_IF = "com.nokia.osso_browser";
-
        private const string CALENDAR_SERVICE = "com.nokia.calendar";
        private const string CALENDAR_PATH = "/com/nokia/calendar";
        private const string CALENDAR_IF = "com.nokia.calendar";
@@ -38,6 +34,7 @@ public class LiftDetailWindow : StackableWindow {
        Label label_driver;
        OssoABook.Button button_phone;
        OssoABook.Button button_sms;
+       OssoABook.Button button_email;
        Image image_smoke;
        Label label;
        Label label_changed;
@@ -88,7 +85,7 @@ public class LiftDetailWindow : StackableWindow {
                hbox.pack_start (button_route, true, true, 0);
                hbox.pack_start (image_eventbox, false, false, MARGIN_DEFAULT);
 
-               table = new Table (6, 2, false);
+               table = new Table (7, 2, false);
 
                button_calendar = new OssoABook.Button (SizeType.FINGER_HEIGHT);
                button_calendar.set_icon_name ("general_calendar");
@@ -109,6 +106,11 @@ public class LiftDetailWindow : StackableWindow {
                button_sms.set_icon_visible (true);
                button_sms.title = _("SMS");
 
+               button_email = new OssoABook.Button (SizeType.FINGER_HEIGHT);
+               button_email.set_icon_name ("general_email");
+               button_email.set_icon_visible (true);
+               button_email.title = _("E-mail");
+
                label = new Label ("");
                label.set_alignment (0.0f, 0.5f);
                label.set_line_wrap (true);
@@ -123,14 +125,16 @@ public class LiftDetailWindow : StackableWindow {
                        table.attach (label_driver, 0, 2, 1, 2, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, MARGIN_DEFAULT, 0);
                        table.attach (button_phone, 0, 2, 2, 3, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, 0, 0);
                        table.attach (button_sms, 0, 2, 3, 4, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, 0, 0);
+                       table.attach (button_email, 0, 2, 4, 5, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, 0, 0);
                } else {
                        table.attach (button_calendar, 1, 2, 0, 1, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, 0, 0);
                        table.attach (label_driver, 0, 1, 1, 2, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, MARGIN_DEFAULT, 0);
                        table.attach (button_phone, 1, 2, 1, 2, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, 0, 0);
                        table.attach (button_sms, 1, 2, 2, 3, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, 0, 0);
+                       table.attach (button_email, 1, 2, 3, 4, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, 0, 0);
                }
-               table.attach (label, 0, 2, 4, 5, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, MARGIN_DEFAULT, 0);
-               table.attach (label_changed, 0, 2, 5, 6, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, MARGIN_DEFAULT, 0);
+               table.attach (label, 0, 2, 5, 6, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, MARGIN_DEFAULT, 0);
+               table.attach (label_changed, 0, 2, 6, 7, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, MARGIN_DEFAULT, 0);
 
                vbox.pack_start (hbox, true, true, 0);
                vbox.pack_start (table, true, true, 0);
@@ -139,15 +143,17 @@ public class LiftDetailWindow : StackableWindow {
                alignment.add (pannable);
 
                alignment.show_all ();
+               button_email.hide ();
                add (alignment);
 
-               BeifahrerProgram.orientation.changed.connect (on_orientation_changed);
+               Gdk.Screen.get_default ().size_changed.connect (on_orientation_changed);
                add_contact.clicked.connect (on_add_contact_clicked);
                goto_website.clicked.connect (on_goto_website_clicked);
                image_eventbox.button_press_event.connect (on_image_eventbox_button_pressed);
                button_calendar.clicked.connect (on_button_calendar_clicked);
                button_phone.clicked.connect (on_button_phone_clicked);
                button_sms.clicked.connect (on_button_sms_clicked);
+               button_email.clicked.connect (on_button_email_clicked);
                destroy.connect (on_destroy);
                map_event.connect (on_map_event);
        }
@@ -184,6 +190,16 @@ public class LiftDetailWindow : StackableWindow {
                        string phone_number = E.normalize_phone_number (lift.phone);
                        button_phone.value = phone_number;
                        button_sms.value = phone_number;
+               } else if (lift.phone2 != null) {
+                       button_phone.title = _("Phone");
+                       string phone_number = E.normalize_phone_number (lift.phone2);
+                       button_phone.value = phone_number;
+                       button_sms.value = phone_number;
+               }
+
+               if (lift.email_image_uri != null) {
+                       button_email.value = _("Click to view E-mail image");
+                       button_email.show ();
                }
 
                string lift_text = _("Free places: %d\n").printf (lift.places);
@@ -294,6 +310,24 @@ public class LiftDetailWindow : StackableWindow {
                }
        }
 
+       void on_button_email_clicked () {
+               var uri = "http://mitfahrclub.adac.de";
+               uri += lift.email_image_uri;
+               try {
+                       var action = URIAction.get_default_action_by_uri (uri);
+                       if (action != null) {
+                               action.open (uri);
+                       } else {
+
+                               Banner.show_information (this, null, _("Couldn't open %s URI").printf (uri));
+                       }
+               } catch (Error e) {
+                       if (e is URIError) {
+                               Banner.show_information (this, null, _("Error: %s").printf (e.message));
+                       }
+               }
+       }
+
        void on_add_contact_clicked () {
                var contact = new OssoABook.Contact ();
                var attr_fn = new E.VCardAttribute (null, E.EVC_FN);
@@ -315,17 +349,7 @@ public class LiftDetailWindow : StackableWindow {
        }
 
        void on_goto_website_clicked () {
-               var url = "http://mitfahrclub.adac.de" + lift.href;
-
-               try {
-                       var conn = DBus.Bus.get (DBus.BusType.SESSION);
-
-                       dynamic DBus.Object browser = conn.get_object (BROWSER_SERVICE, BROWSER_PATH, BROWSER_IF);
-                       browser.open_new_window (url, false);
-               } catch (Error e) {
-                       stderr.printf ("Error: %s\n", e.message);
-                       Banner.show_information (this, null, _("Failed to open browser."));
-               }
+               BeifahrerProgram.open_browser (this, adac.get_lift_details_url (lift));
        }
 
        bool on_image_eventbox_button_pressed (Gdk.EventButton event) {
@@ -338,7 +362,7 @@ public class LiftDetailWindow : StackableWindow {
                return false;
        }
 
-       void on_orientation_changed () {
+       void on_orientation_changed (Gdk.Screen screen) {
                // Maybe this will be fixed directly in Maemo-GTK, see
                // http://lists.maemo.org/pipermail/maemo-developers/2010-May/026332.html
                vbox.queue_resize ();
@@ -347,16 +371,19 @@ public class LiftDetailWindow : StackableWindow {
                table.remove (label_driver);
                table.remove (button_phone);
                table.remove (button_sms);
+               table.remove (button_email);
                if (BeifahrerProgram.orientation.portrait) {
                        table.attach (button_calendar, 0, 2, 0, 1, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, 0, 0);
                        table.attach (label_driver, 0, 2, 1, 2, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, MARGIN_DEFAULT, 0);
                        table.attach (button_phone, 0, 2, 2, 3, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, 0, 0);
                        table.attach (button_sms, 0, 2, 3, 4, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, 0, 0);
+                       table.attach (button_email, 0, 2, 4, 5, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, 0, 0);
                } else {
                        table.attach (button_calendar, 1, 2, 0, 1, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, 0, 0);
                        table.attach (label_driver, 0, 1, 1, 2, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, MARGIN_DEFAULT, 0);
                        table.attach (button_phone, 1, 2, 1, 2, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, 0, 0);
                        table.attach (button_sms, 1, 2, 2, 3, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, 0, 0);
+                       table.attach (button_email, 1, 2, 3, 4, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL, 0, 0);
                }
        }
 }