~rockstar/entertainer/package-structure-apocalypse

« back to all changes in this revision

Viewing changes to entertainerlib/frontend/gui/screens/main.py

  • Committer: Matt Layman
  • Date: 2009-05-09 17:03:51 UTC
  • mfrom: (358.2.15 trunk)
  • mto: (358.2.17 trunk)
  • mto: This revision was merged to the branch mainline in revision 383.
  • Revision ID: laymansterms.dev@gmail.com-20090509170351-t79yv9gn7gfsmc5q
Merged from trunk. Fixed conflicts and changed copyright for new incoming files.

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
        self.preview.set_opacity(0x00)
39
39
        self.add(self.preview)
40
40
 
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)
44
43
 
45
 
        self.menu = None
46
 
        self.playing_item = None
47
 
        self.create_main_menu()
48
 
 
49
 
        clock = ClockLabel(0.13, "screentitle", 0, 0.87)
50
 
        self.add(clock)
 
44
        self.menu = self._create_main_menu()
 
45
        self.add(self.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
 
50
 
 
51
        self.add(ClockLabel(0.13, "screentitle", 0, 0.87))
 
52
 
 
53
    def get_type(self):
 
54
        """Return screen type."""
 
55
        return Screen.NORMAL
 
56
 
 
57
    def get_name(self):
 
58
        """Return screen name (human readble)"""
 
59
        return "Main"
 
60
 
 
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")
 
65
 
 
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")
 
71
 
 
72
        if self.config.display_weather_in_frontend():
 
73
            menu.add_item(_("Weather"), "weather")
 
74
 
 
75
        if self.config.display_cd_eject_in_frontend():
 
76
            menu.add_item(_("Eject CD"), "eject_cd")
 
77
 
 
78
        if self.media_player.has_media():
 
79
            menu.add_item(_("Playing now..."), "playing")
 
80
 
 
81
        menu.visible_items = 5
 
82
        menu.selected_index = 2
 
83
 
 
84
        # Menu position
 
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)
 
88
 
 
89
        return menu
51
90
 
52
91
    def _create_rss_preview_menu(self):
53
92
        '''Create the RSS preview menu that will show feed highlights. An
75
114
 
76
115
        return menu
77
116
 
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")
82
 
 
83
 
        # Common values for all ScrollMenu items
84
 
        size = 0.045
85
 
        color = "menuitem_active"
86
 
 
87
 
        item0 = Label(size, color, 0, 0, _("Play CD"), "disc")
88
 
        self.menu.add(item0)
89
 
 
90
 
        item2 = Label(size, color, 0, 0, _("Videos"), "videos")
91
 
        self.menu.add(item2)
92
 
 
93
 
        item3 = Label(size, color, 0, 0, _("Music"), "music")
94
 
        self.menu.add(item3)
95
 
 
96
 
        item4 = Label(size, color, 0, 0, _("Photographs"), "photo")
97
 
        self.menu.add(item4)
98
 
 
99
 
        item5 = Label(size, color, 0, 0, _("Headlines"), "rss")
100
 
        self.menu.add(item5)
101
 
 
102
 
        if self.config.display_weather_in_frontend():
103
 
            item6 = Label(size, color, 0, 0, _("Weather"), "weather")
104
 
            self.menu.add(item6)
105
 
 
106
 
        if self.config.display_cd_eject_in_frontend():
107
 
            item7 = Label(size, color, 0, 0, _("Eject CD"), "eject_cd")
108
 
            self.menu.add(item7)
109
 
 
110
 
        if self.media_player.has_media():
111
 
            playing = Label(size, color, 0, 0, _("Playing now..."), "playing")
112
 
            self.menu.add(playing)
113
 
 
114
 
        self.menu.set_number_of_visible_items(5)
115
 
        menu_clip = self.menu.get_number_of_visible_items() * 70
116
 
 
117
 
        # Menu position
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)
120
 
 
121
 
        self.add(self.menu)
122
 
 
123
117
    def _create_playing_preview(self):
124
118
        '''Create the Now Playing preview sidebar.'''
125
119
        preview = clutter.Group()
197
191
 
198
192
        return preview
199
193
 
200
 
    def update(self):
201
 
        """
202
 
        Update screen widgets. This is called always when screen is poped from
203
 
        the screen history. Updates main menu widget.
204
 
        """
205
 
        selected_name = self.menu.get_selected().get_name()
206
 
 
207
 
        self.remove(self.menu)
208
 
        self.create_main_menu()
209
 
 
210
 
        index = self.menu.get_index(selected_name)
211
 
        if not index == -1:
212
 
            self.menu.select(index)
213
 
 
214
 
        self.menu.update()
215
 
 
216
 
        self._update_preview_area(self.menu.get_selected())
217
 
 
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()
 
198
 
221
199
        self.preview.set_opacity(0x00)
222
200
 
223
201
        update = True
 
202
 
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
 
208
            # main menu is not.
 
209
            if not self.menu.active:
 
210
                self.rss_preview_menu.set_active(True)
228
211
        else:
229
212
            update = False
230
213
 
231
 
        # If the preview was updated fade it in
 
214
        # If the preview was updated fade it in.
232
215
        if update:
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)
237
220
            fade_in.start()
238
221
 
239
 
    def _move_menu(self, menu_direction):
240
 
        '''Move the menu in the given direction.'''
241
 
 
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
248
 
 
249
 
        if self.active_menu == "main":
250
 
            scroll_direction()
251
 
            selected = self.menu.get_selected()
252
 
            if selected.get_name() == None:
253
 
                scroll_direction()
254
 
                selected = self.menu.get_selected()
255
 
            self._update_preview_area(selected)
256
 
        else:
257
 
            self.rss_preview_menu.move(preview_direction)
258
 
 
259
 
    def _handle_up(self):
260
 
        '''Handle UserEvent.NAVIGATE_UP.'''
261
 
        self._move_menu(self.UP)
262
 
 
263
 
    def _handle_down(self):
264
 
        '''Handle UserEvent.NAVIGATE_DOWN.'''
265
 
        self._move_menu(self.DOWN)
266
 
 
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()
272
227
        else:
273
228
            return True
274
229
 
 
230
    def update(self):
 
231
        """
 
232
        Update screen widgets. This is called always when screen is poped from
 
233
        the screen history. Updates main menu widget.
 
234
        """
 
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")
 
241
 
 
242
        self.menu.refresh()
 
243
        self._update_preview_area()
 
244
 
 
245
    def _handle_up(self):
 
246
        '''Handle UserEvent.NAVIGATE_UP.'''
 
247
        if self.menu.active:
 
248
            self.menu.scroll_up()
 
249
        else:
 
250
            self.rss_preview_menu.move(TextMenu.UP)
 
251
 
 
252
    def _handle_down(self):
 
253
        '''Handle UserEvent.NAVIGATE_DOWN.'''
 
254
        if self.menu.active:
 
255
            self.menu.scroll_down()
 
256
        else:
 
257
            self.rss_preview_menu.move(TextMenu.DOWN)
 
258
 
275
259
    def _handle_left(self):
276
260
        '''Handle UserEvent.NAVIGATE_LEFT.'''
277
 
        if not self._can_move_horizontally():
278
 
            return
279
 
 
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()
284
263
 
285
264
    def _handle_right(self):
286
265
        '''Handle UserEvent.NAVIGATE_RIGHT.'''
287
 
        if not self._can_move_horizontally():
288
 
            return
289
 
 
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
294
267
 
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":
 
287
            if self.menu.active:
315
288
                self.callback("rss")
316
289
            else:
317
290
                menu_item = self.rss_preview_menu.get_current_menuitem()
318
291
                kwargs = menu_item.get_userdata()
319
292
                self.callback("entry", kwargs)
320
293
 
 
294
    def _on_menu_moved(self, actor):
 
295
        '''Update preview area when selected item changed on the menu.'''
 
296
        self._update_preview_area()
 
297
 
 
298
    def _on_menu_selected(self, actor):
 
299
        '''Handle a *select command* if an item was selected.'''
 
300
        self._handle_select()
 
301
 
 
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)
 
307
 
 
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)
 
313