97
109
return self.get_current_page()
99
def view_button_clicked(self, button, i):
100
self.emit("view-button-clicked", button, i)
111
def view_button_toggled(self, button, i):
112
if not button.get_active():return
114
self.emit("view-button-clicked", button, i)
102
116
def set_view_page(self, i):
103
117
self.set_current_page(i)
104
for button in self.tool_buttons:
105
button.set_sensitive(True)
106
self.tool_buttons[i].set_sensitive(False)
109
class PanedContainer(gtk.HBox):
111
super(PanedContainer, self).__init__()
112
self.pane1 = pane1 = gtk.HPaned()
113
self.pane2 = pane2 = gtk.HPaned()
116
box1 = self.left_box = gtk.EventBox()
117
box2 = self.center_box = gtk.EventBox()
118
box3 = self.right_box = gtk.EventBox()
119
pane1.pack1(box1, False, False)
120
pane2.pack1(box2, False, True)
121
pane2.pack2(box3, False, False)
124
self.informationcontainer = InformationContainer()
125
ContextMenu.informationwindow = self.informationcontainer
126
self.h1 = handle = HandleBox()
127
handle.add(self.informationcontainer)
129
self.informationcontainer.connect("hide", self.on_hide)
130
self.informationcontainer.connect("show", self.on_show)
131
self.informationcontainer.set_size_request(100, 100)
132
self.pinbox = PinnedPane()
133
self.pinbox.connect("hide", self.on_hide)
134
self.pinbox.connect("show", self.on_show)
135
self.h2 = handle = HandleBox()
136
handle.add(self.pinbox)
139
def on_show(self, w, *args):
140
self.pane1.set_position(-1)
141
self.pane2.set_position(-1)
142
handle = self.h1 if w == self.informationcontainer else self.h2
144
if w == self.informationcontainer:
145
self.right_box.show()
146
elif w == self.pinbox:
149
def on_hide(self, w, *args):
150
self.pane1.set_position(-1)
151
self.pane2.set_position(-1)
152
handle = self.h1 if w == self.informationcontainer else self.h2
154
if w == self.informationcontainer:
155
self.right_box.hide()
156
elif w == self.pinbox:
119
def _register_default_view(self, view):
120
toolbutton = Toolbar.get_toolbutton(view.icon_path, view.dsc_text)
121
self._register_new_view(self.ViewStruct(view, toolbutton))
122
self.set_view_page(0)
124
def set_zoom_slider(self, hscale):
126
for page in self.pages:
127
page.set_slider(hscale)
129
def toggle_erase_mode(self):
130
for page in self.pages:
131
page.toggle_erase_mode()
160
134
class PortalWindow(gtk.Window):
162
"day-set" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,(gobject.TYPE_PYOBJECT,)),
136
The primary application window
166
138
def __init__(self):
167
139
super(PortalWindow, self).__init__()
168
self.__initialized = False
169
self._requested_size = None
171
141
self._request_size()
172
142
self.store = STORE
173
143
self.day_iter = self.store.today
144
self.pages_loaded = 0
145
self.current_zoom = 1
146
self.in_erase_mode = False
174
147
self.view = ViewContainer(self.store)
175
148
self.toolbar = Toolbar()
176
map(self.view._register_new_view,
177
(self.view.ViewStruct(MultiViewContainer(), Toolbar.get_toolbutton(get_data_path("multiview_icon.png"), _("Switch to MultiView"))),
178
self.view.ViewStruct(ThumbViewContainer(), Toolbar.get_toolbutton(get_data_path("thumbview_icon.png"), _("Switch to ThumbView"))),
179
self.view.ViewStruct(TimelineViewContainer(), Toolbar.get_toolbutton(get_data_path("timelineview_icon.png"), _("Switch to TimelineView")))
181
self.view.set_view_page(0)
149
default_views = (MultiViewContainer(), ThumbViewContainer(), TimelineViewContainer())
150
default_views[0].connect("view-ready", self._on_view_ready)
151
map(self.view._register_default_view, default_views)
182
152
map(self.toolbar.add_new_view_button, self.view.tool_buttons[::-1])
183
self.view.connect("new-view-added", lambda w, v: self.toolbar.add_new_view_button(v.button, len(self.view.tool_buttons)))
184
self.panedcontainer = PanedContainer()
185
self.preferences_dialog = PreferencesDialog()
153
self.preferences_dialog = PreferencesDialog(parent=self)
154
ContextMenu.set_parent_window(self)
155
ContextMenuMolteplicity.set_parent_window(self)
186
156
self.histogram = HistogramWidget()
187
157
self.histogram.set_store(self.store)
188
self.histogram.set_dates([self.day_iter.date])
189
self.backward_button = DayButton(0)
190
self.forward_button = DayButton(1, sensitive=False)
191
self.searchbox = SearchBox
158
self.backward_button, ev_backward_button = DayButton.new(0)
159
self.forward_button, ev_forward_button = DayButton.new(1, sensitive=False)
160
self.nicebar = NiceBar()
161
self.nicebar_timeout = None
163
# use a table for the spinner (otherwise the spinner is massive!)
164
spinner_table = gtk.Table(3, 3, False)
166
label.set_markup(_("<span size=\"larger\"><b>Loading Journal...</b></span>"))
167
vbox = gtk.VBox(False, 5)
168
pix = gtk.gdk.pixbuf_new_from_file(get_data_path("zeitgeist-logo.svg"))
169
pix = pix.scale_simple(100, 100, gtk.gdk.INTERP_BILINEAR)
170
zlogo = gtk.image_new_from_pixbuf(pix)
171
vbox.pack_start(zlogo, False, False)
172
vbox.pack_start(label, True)
173
spinner_table.attach(vbox, 1, 2, 1, 2, gtk.EXPAND, gtk.EXPAND)
174
self.hscale = gtk.HScale(gtk.Adjustment(1.0, 0.0, 3.0, 1.0, 1.0, 0.0))
175
self.hscale.set_size_request(120, -1)
176
self.hscale.set_draw_value(False)
177
al = gtk.Alignment(yalign=0.5)
178
al.set_padding(0, 0, 8, 8)
180
im_in = gtk.image_new_from_stock(gtk.STOCK_ZOOM_IN, gtk.ICON_SIZE_MENU)
181
im_out = gtk.image_new_from_stock(gtk.STOCK_ZOOM_OUT, gtk.ICON_SIZE_MENU)
182
self.throbber_popup_button = ThrobberPopupButton()
192
183
# Widget placement
195
histogramhbox = gtk.HBox()
196
hbox.pack_start(self.backward_button, False, False)
197
hbox.pack_start(self.view, True, True, 6)
198
hbox.pack_end(self.forward_button, False, False)
199
hbox.set_border_width(4)
200
vbox.pack_start(self.toolbar, False, False)
201
self.panedcontainer.center_box.add(hbox)
202
vbox.pack_start(self.panedcontainer, True, True, 2)
203
histogramhbox.pack_end(self.histogram, True, True, 30)
204
vbox.pack_end(histogramhbox, False, False)
207
self.panedcontainer.informationcontainer.hide()
208
self.panedcontainer.pinbox.hide()
184
vbox = gtk.VBox(); hbox = gtk.HBox();self.scale_box = gtk.HBox();self.histogramhbox = gtk.HBox()
185
vbox_general = gtk.VBox();scale_toolbar_box = gtk.HBox()
186
hbox.pack_start(ev_backward_button, False, False); hbox.pack_start(self.view, True, True, 6)
187
hbox.pack_end(ev_forward_button, False, False);
188
self.scale_box.pack_start(im_out,False,False);self.scale_box.pack_start(al, False, False)
189
self.scale_box.pack_start(im_in,False,False);self.scale_box.pack_end(gtk.SeparatorToolItem(),False,False)
190
scale_toolbar_box.pack_start(self.toolbar); scale_toolbar_box.pack_end(self.throbber_popup_button,False,False);
191
scale_toolbar_box.pack_end(self.scale_box, False, False);
192
vbox.pack_start(scale_toolbar_box, False, False); vbox.pack_start(self.nicebar,False,False);vbox.pack_start(hbox, True, True, 5);
193
self.histogramhbox.pack_end(self.histogram, True, True, 32);
194
self.histogramhbox.set_sensitive(False)
195
self.spinner_notebook = gtk.Notebook()
196
self.spinner_notebook.set_show_tabs(False)
197
self.spinner_notebook.set_show_border(False)
198
self.spinner_notebook.append_page(spinner_table)
199
self.spinner_notebook.append_page(vbox)
200
vbox_general.pack_start(self.spinner_notebook)
201
vbox_general.pack_end(self.histogramhbox, False, False)
202
self.add(vbox_general)
203
vbox_general.show_all()
204
self.scale_box.hide()
211
self.tray_manager = TrayIconManager(self)
210
213
self.view.set_day(self.store.today)
214
self.view.set_zoom_slider(self.hscale)
216
self.view.connect("new-view-added", lambda w, v: self.toolbar.add_new_view_button(v.button, len(self.view.tool_buttons)))
212
217
self.connect("destroy", self.quit)
213
218
self.connect("delete-event", self.on_delete)
219
self.toolbar.connect("previous", self.previous)
220
self.toolbar.connect("jump-to-today", lambda w: self.set_date(datetime.date.today()))
221
self.toolbar.connect("next", self.next)
222
self.hscale.connect("value-changed", self._on_zoom_changed)
214
223
self.backward_button.connect("clicked", self.previous)
215
224
self.forward_button.connect("clicked", self.next)
225
self.forward_button.connect("jump-to-today", lambda w: self.set_date(datetime.date.today()))
216
226
self.histogram.connect("date-changed", lambda w, date: self.set_date(date))
217
227
self.view.connect("view-button-clicked", self.on_view_button_click)
218
self.toolbar.throbber.connect("clicked", self.show_about_window)
219
self.toolbar.goto_today_button.connect("clicked", lambda w: self.set_date(datetime.date.today()))
220
self.toolbar.pin_button.connect("clicked", lambda w: self.panedcontainer.pinbox.toggle_visibility())
221
228
self.store.connect("update", self.histogram.histogram.set_store)
222
self.searchbox.connect("search", self._on_search)
223
self.searchbox.connect("clear", self._on_search_clear)
224
self.set_title_from_date(self.day_iter.date)
226
self.histogram.set_dates(self.active_dates)
227
self.histogram.scroll_to_end()
229
self.store.request_last_n_days_events(90)
231
gobject.timeout_add_seconds(1, setup)
232
self.histogram.scroll_to_end()
233
# hide unused widgets
234
self.searchbox.hide()
229
SearchBox.connect("search", self._on_search)
230
self.throbber_popup_button.connect("toggle-erase-mode", self._on_toggle_erase_mode)
231
SearchBox.connect("clear", self._on_search_clear)
235
232
# Window configuration
236
233
self.set_icon_name("gnome-activity-journal")
237
234
self.set_icon_list(