Merge branch 'master' of https://vcs.maemo.org/git/gigfinder
[gigfinder] / src / opt / gigfinder / gigfinder.py
index d5fe2bd..c06d36f 100755 (executable)
@@ -42,17 +42,25 @@ class GigFinder:
 
     def main(self):
         """ Build the gui and start the update thread """
+       gtk.gdk.threads_enter()
         program = hildon.Program.get_instance()
         menu = self.create_menu()
 
         self.win.set_title(self.app_title)
-        self.win.connect("destroy", gtk.main_quit, None)
+        self.win.connect("destroy", self.quit, None)
         self.win.set_app_menu(menu)
 
-        Thread(target=self.update_gigs).start()
+       self.update(None, None)
 
         self.win.show_all()
         gtk.main()
+       gtk.gdk.threads_leave()
+
+    def quit(self, widget, data):
+        self.location.stop(widget, data)
+       thread.exit()
+       gtk.main_quit()
+       return False
 
     def show_about(self, widget, data):
         """ Show about dialog """
@@ -65,35 +73,6 @@ class GigFinder:
         dialog.set_copyright(__copyright__)
         dialog.show_all()
 
-    def update(self, widget, data):
-        """ Start update process """
-        self.win.set_title(self.app_title)
-        self.location.reset()
-        self.win.remove(self.pannable_area)
-        Thread(target=self.update_gigs).start()
-
-    def update_gigs(self):
-        """ Get gig info """
-        gobject.idle_add(self.show_message, "Getting events")
-        
-        if not 'applications' in os.path.abspath(__file__):
-            gobject.idle_add(self.location.update_location)
-
-            # if no gps fix wait
-            # TODO: needs a timeout
-            while not self.location.lat or not self.location.long:
-                time.sleep(1)
-        else:
-            self.location.lat = float(51.517369)
-            self.location.long = float(-0.082998)
-
-        events = self.events.get_events(self.location.lat, 
-                                        self.location.long, 
-                                        self.distance)
-        gobject.idle_add(self.hide_message)
-        gobject.idle_add(self.show_events, events)
-        thread.exit()
-
     def show_message(self, message):
         """ Set window progress indicator and show message """
         hildon.hildon_gtk_window_set_progress_indicator(self.win, 1)
@@ -141,7 +120,7 @@ class GigFinder:
     def show_details(self, widget, data):
         """ Open new window showing gig details """
         win = hildon.StackableWindow()
-        win.set_title(data['title'])
+        win.set_title(data.title)
 
         win.vbox = gtk.VBox()
         win.add(win.vbox)
@@ -155,41 +134,62 @@ class GigFinder:
         view.set_wrap_mode(gtk.WRAP_WORD)
         buffer = view.get_buffer()
         end = buffer.get_end_iter()
-        buffer.insert(end, '%s\n' % data['title'])
-        buffer.insert(end, 'Artists: %s\n' % data['artists'])
-        buffer.insert(end, 'Venue: %s\n' % data['venue'])
-        buffer.insert(end, '%s\n' % data['address'])
-        buffer.insert(end, 'When: %s\n' % data['date'].strftime('%H:%M %d/%m/%Y'))
+        buffer.insert(end, '%s\n' % data.title)
+        buffer.insert(end, 'Artists: %s\n' % data.artists)
+        buffer.insert(end, 'Venue: %s\n' % data.venue_name)
+        buffer.insert(end, '%s\n' % data.address)
+        buffer.insert(end, 'When: %s\n' % data.start_date.strftime('%H:%M %d/%m/%Y'))
         buffer.insert(end, '\n')
         scroll.add_with_viewport(view)
 
         win.show_all()
 
-    def add_table(self):
-        """ Add table for events """
-        self.table = gtk.Table(columns=1)
-        self.table.set_row_spacings(10)
-        self.table.set_col_spacings(10)
-
+    def add_button_area(self):
+        self.box = gtk.VBox(True,0)
         self.pannable_area = hildon.PannableArea()
-        self.pannable_area.add_with_viewport(self.table)
+        self.pannable_area.add_with_viewport(self.box)
         self.pannable_area.show_all()
         self.win.add(self.pannable_area)
         
     def add_events(self, events):
         """ Add a table of buttons """
-        self.add_table()
-        pos = 0
-        
         for event in events:
             button = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, 
                                    hildon.BUTTON_ARRANGEMENT_VERTICAL)
-            button.set_text(event['title'], "distance: %0.02f km" % event['distance'])
+            button.set_text(event.title, "distance: %0.02f km" % event.get_distance_from(self.location.long, self.location.lat))
             button.connect("clicked", self.show_details, event)
-            self.table.attach(button, 0, 1, pos, pos+1, yoptions=gtk.FILL)
-            pos += 1
-        self.table.show_all()
+            self.box.pack_start(button)
+        self.box.show_all()
             
+    def update(self, widget, data):
+        """ Start update process """
+        self.win.set_title(self.app_title)
+        self.location.reset()
+       if getattr(self, 'pannable_area', None):
+            self.win.remove(self.pannable_area)
+        self.add_button_area()
+       self.location.update_location()
+        Thread(target=self.update_gigs).start()
+
+    def update_gigs(self):
+        """ Get gig info """
+        gobject.idle_add(self.show_message, "Getting events")
+        
+        if not 'applications' in os.path.abspath(__file__):
+            # if no gps fix wait
+            while not self.location.lat or not self.location.long:
+                time.sleep(1)
+        else:
+            self.location.lat = float(51.517369)
+            self.location.long = float(-0.082998)
+         
+        events = self.events.get_events(self.location.lat, 
+                                        self.location.long, 
+                                        self.distance,)
+        gobject.idle_add(self.show_events, events)
+        gobject.idle_add(self.hide_message)
+       return True
+
 if __name__ == "__main__":
     finder = GigFinder()
     finder.main()