38
38
self.preview.set_opacity(0x00)
39
39
self.add(self.preview)
41
self.active_menu = "main"
42
41
self.rss_preview_menu = self._create_rss_preview_menu()
43
42
self.preview.add(self.rss_preview_menu)
46
self.playing_item = None
47
self.create_main_menu()
49
clock = ClockLabel(0.13, "screentitle", 0, 0.87)
44
self.menu = self._create_main_menu()
46
self.menu.connect('selected', self._on_menu_selected)
47
self.menu.connect('moved', self._on_menu_moved)
48
self.menu.connect('activated', self._main_menu_activation)
49
self.menu.active = True
51
self.add(ClockLabel(0.13, "screentitle", 0, 0.87))
54
"""Return screen type."""
58
"""Return screen name (human readble)"""
61
def _create_main_menu(self):
62
"""Create main menu of the home screen"""
63
menu = ScrollMenu(10, 60, 0.045, "menuitem_active")
64
menu.set_name("mainmenu")
66
menu.add_item(_("Play CD"), "disc")
67
menu.add_item(_("Videos"), "videos")
68
menu.add_item(_("Music"), "music")
69
menu.add_item(_("Photographs"), "photo")
70
menu.add_item(_("Headlines"), "rss")
72
if self.config.display_weather_in_frontend():
73
menu.add_item(_("Weather"), "weather")
75
if self.config.display_cd_eject_in_frontend():
76
menu.add_item(_("Eject CD"), "eject_cd")
78
if self.media_player.has_media():
79
menu.add_item(_("Playing now..."), "playing")
81
menu.visible_items = 5
82
menu.selected_index = 2
85
menu_clip = menu.visible_items * 70
86
menu_y = int((self.config.get_stage_height() - menu_clip + 10) / 2)
87
menu.set_position(self.get_abs_x(0.75), menu_y)
52
91
def _create_rss_preview_menu(self):
53
92
'''Create the RSS preview menu that will show feed highlights. An
78
def create_main_menu(self):
79
"""Create main menu of the home screen"""
80
self.menu = ScrollMenu(10, 60, self.config.show_effects())
81
self.menu.set_name("mainmenu")
83
# Common values for all ScrollMenu items
85
color = "menuitem_active"
87
item0 = Label(size, color, 0, 0, _("Play CD"), "disc")
90
item2 = Label(size, color, 0, 0, _("Videos"), "videos")
93
item3 = Label(size, color, 0, 0, _("Music"), "music")
96
item4 = Label(size, color, 0, 0, _("Photographs"), "photo")
99
item5 = Label(size, color, 0, 0, _("Headlines"), "rss")
102
if self.config.display_weather_in_frontend():
103
item6 = Label(size, color, 0, 0, _("Weather"), "weather")
106
if self.config.display_cd_eject_in_frontend():
107
item7 = Label(size, color, 0, 0, _("Eject CD"), "eject_cd")
110
if self.media_player.has_media():
111
playing = Label(size, color, 0, 0, _("Playing now..."), "playing")
112
self.menu.add(playing)
114
self.menu.set_number_of_visible_items(5)
115
menu_clip = self.menu.get_number_of_visible_items() * 70
118
menu_y = int((self.config.get_stage_height() - menu_clip + 10) / 2)
119
self.menu.set_position(self.get_abs_x(0.75), menu_y)
123
117
def _create_playing_preview(self):
124
118
'''Create the Now Playing preview sidebar.'''
125
119
preview = clutter.Group()
202
Update screen widgets. This is called always when screen is poped from
203
the screen history. Updates main menu widget.
205
selected_name = self.menu.get_selected().get_name()
207
self.remove(self.menu)
208
self.create_main_menu()
210
index = self.menu.get_index(selected_name)
212
self.menu.select(index)
216
self._update_preview_area(self.menu.get_selected())
218
def _update_preview_area(self, item):
194
def _update_preview_area(self):
219
195
'''Update the preview area to display the current menu item.'''
220
196
self.preview.remove_all()
197
item = self.menu.get_selected()
221
199
self.preview.set_opacity(0x00)
224
203
if item.get_name() == "playing":
225
204
self.preview.add(self._create_playing_preview())
226
205
elif item.get_name() == "rss":
227
206
self.preview.add(self._create_rss_preview())
207
# When we update the rss preview menu, we must set it active if
209
if not self.menu.active:
210
self.rss_preview_menu.set_active(True)
231
# If the preview was updated fade it in
214
# If the preview was updated fade it in.
233
216
fade_in = clutter.Timeline(20, 60)
234
217
alpha_in = clutter.Alpha(fade_in, clutter.smoothstep_inc_func)
236
219
self.behaviour.apply(self.preview)
239
def _move_menu(self, menu_direction):
240
'''Move the menu in the given direction.'''
242
if menu_direction == self.UP:
243
scroll_direction = self.menu.scroll_down
244
preview_direction = TextMenu.UP
245
elif menu_direction == self.DOWN:
246
scroll_direction = self.menu.scroll_up
247
preview_direction = TextMenu.DOWN
249
if self.active_menu == "main":
251
selected = self.menu.get_selected()
252
if selected.get_name() == None:
254
selected = self.menu.get_selected()
255
self._update_preview_area(selected)
257
self.rss_preview_menu.move(preview_direction)
259
def _handle_up(self):
260
'''Handle UserEvent.NAVIGATE_UP.'''
261
self._move_menu(self.UP)
263
def _handle_down(self):
264
'''Handle UserEvent.NAVIGATE_DOWN.'''
265
self._move_menu(self.DOWN)
267
222
def _can_move_horizontally(self):
268
223
'''Return a boolean indicating if horizontal movement is allowed.'''
269
224
item = self.menu.get_selected()
232
Update screen widgets. This is called always when screen is poped from
233
the screen history. Updates main menu widget.
235
if self.media_player.is_playing() and \
236
(self.menu.get_index("playing") == -1):
237
self.menu.add_item(_("Playing now..."), "playing")
238
elif not self.media_player.is_playing() and \
239
(self.menu.get_index("playing") != -1):
240
self.menu.remove_item("playing")
243
self._update_preview_area()
245
def _handle_up(self):
246
'''Handle UserEvent.NAVIGATE_UP.'''
248
self.menu.scroll_up()
250
self.rss_preview_menu.move(TextMenu.UP)
252
def _handle_down(self):
253
'''Handle UserEvent.NAVIGATE_DOWN.'''
255
self.menu.scroll_down()
257
self.rss_preview_menu.move(TextMenu.DOWN)
275
259
def _handle_left(self):
276
260
'''Handle UserEvent.NAVIGATE_LEFT.'''
277
if not self._can_move_horizontally():
280
if self.active_menu == "main":
281
self.active_menu = "preview"
282
self.menu.set_active(False)
283
self.rss_preview_menu.set_active(True)
261
if self._can_move_horizontally():
262
self._preview_activation()
285
264
def _handle_right(self):
286
265
'''Handle UserEvent.NAVIGATE_RIGHT.'''
287
if not self._can_move_horizontally():
290
if self.active_menu == "preview":
291
self.active_menu = "main"
292
self.menu.set_active(True)
293
self.rss_preview_menu.set_active(False)
266
self.menu.active = True
295
268
def _handle_select(self):
296
269
'''Handle UserEvent.NAVIGATE_SELECT.'''
311
284
elif item.get_name() == "photo":
312
285
self.callback("photo_albums")
313
286
elif item.get_name() == "rss":
314
if self.active_menu == "main":
315
288
self.callback("rss")
317
290
menu_item = self.rss_preview_menu.get_current_menuitem()
318
291
kwargs = menu_item.get_userdata()
319
292
self.callback("entry", kwargs)
294
def _on_menu_moved(self, actor):
295
'''Update preview area when selected item changed on the menu.'''
296
self._update_preview_area()
298
def _on_menu_selected(self, actor):
299
'''Handle a *select command* if an item was selected.'''
300
self._handle_select()
302
def _main_menu_activation(self, actor=None):
303
'''Handle the main menu activation.'''
304
self.menu.active = True
305
if self.rss_preview_menu:
306
self.rss_preview_menu.set_active(False)
308
def _preview_activation(self, actor=None):
309
'''Handle the preview activation.'''
310
self.menu.active = False
311
if self.rss_preview_menu:
312
self.rss_preview_menu.set_active(True)