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 """
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)
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)
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()