~exaile-bugday/+junk/exaile

« back to all changes in this revision

Viewing changes to xlgui/main.py

  • Committer: Mathias Brodala
  • Date: 2009-07-25 20:15:28 UTC
  • Revision ID: info@noctus.net-20090725201528-gbzsi1tvr2olmqdh
* Add ShortcutListPrefsItem for simple editing of keyboard shortcuts

Show diffs side-by-side

added added

removed removed

Lines of Context:
168
168
        gtk.EventBox.__init__(self)
169
169
        self.set_visible_window(False)
170
170
 
 
171
        self.connect('button_press_event', self.on_button_press)
 
172
 
171
173
        self.main = main
172
174
        self.nb = notebook
173
175
        self.page = page
174
 
        self.already_needs_save = self.page.playlist.get_is_custom() and self.page.get_needs_save()
175
 
        
176
 
        self.connect('button_press_event', self.on_button_press)
177
 
        self.page.connect('playlist-content-changed', lambda widget, dirty:
178
 
                    self.on_playlist_content_change(dirty))
179
 
        self.page.connect('customness-changed', lambda widget, custom:
180
 
                    self.on_customness_change(custom))
181
 
        event.add_callback(self.on_playlist_removed, 'playlist_removed')
182
176
 
183
177
        self.hbox = hbox = gtk.HBox(False, 2)
184
178
        self.add(hbox)
185
179
 
186
 
        if self.already_needs_save and self.page.playlist.get_is_custom():
187
 
            self.label = gtk.Label("*" + title)
188
 
        else:
189
 
            self.label = gtk.Label(title)
 
180
        self.label = gtk.Label(title)
190
181
        hbox.pack_start(self.label, False, False)
191
182
 
192
 
        self.menu = menu.PlaylistTabMenu(self, self.page.playlist.get_is_custom())
 
183
        self.menu = menu.PlaylistTabMenu(self)
193
184
 
194
185
        self.button = btn = gtk.Button()
195
186
        btn.set_name('tabCloseButton')
210
201
    def set_title(self, title):
211
202
        self.label.set_text(title)
212
203
    title = property(get_title, set_title)
213
 
    
214
 
    def on_customness_change(self, custom):
215
 
        self.menu.destroy()
216
 
        self.menu = None
217
 
        self.menu = menu.PlaylistTabMenu(self, custom)
218
 
    
219
 
    def on_playlist_removed(self, type, object, name):
220
 
        if name == self.page.playlist.name and self.page.playlist.get_is_custom():
221
 
            self.page.playlist.set_needs_save(False)
222
 
            self.on_playlist_content_change(False)
223
 
            self.page.playlist.set_is_custom(False)
224
 
            self.on_customness_change(False)
225
 
    
226
 
    def on_playlist_content_change(self, dirty):
227
 
        if self.page.playlist.get_is_custom():
228
 
            if dirty and not self.already_needs_save:
229
 
                self.already_needs_save = True
230
 
                self.label.set_text('*' + self.label.get_text())
231
 
            elif not dirty and self.already_needs_save:
232
 
                self.already_needs_save = False
233
 
                if self.label.get_text()[0] == '*':
234
 
                    self.label.set_text(self.label.get_text()[1:])
235
204
 
236
205
    def on_button_press(self, widget, event):
237
206
        """
264
233
        response = dialog.run()
265
234
        if response == gtk.RESPONSE_OK:
266
235
            self.title = dialog.get_value()
267
 
            pl = self.main.get_selected_playlist()
268
 
            pl.set_name(self.title)
269
 
            pl.playlist.set_name(self.title)
270
 
            self.main.controller.panels['playlists'].add_new_playlist(pl.playlist.get_tracks(), self.title)
271
 
            pl.playlist.set_is_custom(True)
272
 
            pl.emit('customness-changed', True)
273
 
            pl.set_needs_save(False)
274
 
            event.log_event('custom_playlist_saved', self, pl.playlist)
275
 
        
276
 
    def do_save_changes_to_custom(self, *args):
277
 
        pl = self.main.get_selected_playlist()
278
 
        pl.set_needs_save(False)
279
 
        self.main.playlist_manager.save_playlist(pl.playlist, overwrite = True)
280
 
        event.log_event('custom_playlist_saved', self, pl.playlist)
 
236
            self.main.controller.panels['playlists'].add_new_playlist(self.main.get_selected_playlist().playlist.get_tracks(), self.title)
 
237
        self.main.get_selected_playlist().kind = 'custom'
281
238
 
282
239
    def do_close(self, *args):
283
240
        """
386
343
            pl.name = match.group('name')
387
344
 
388
345
            if match.group('tab') not in added_tabs:
389
 
                pl = self.add_playlist(pl, erase_empty=False)
 
346
                pl = self.add_playlist(pl)
390
347
                added_tabs[match.group('tab')] = pl
391
348
            pl = added_tabs[match.group('tab')]
392
349
 
426
383
            logger.debug("Saving tab %d: %s" % (i, pl.name))
427
384
            self.tab_manager.save_playlist(pl, True)            
428
385
 
429
 
    def add_playlist(self, pl=None, erase_empty=True):
 
386
    def add_playlist(self, pl=None):
430
387
        """
431
388
            Adds a playlist to the playlist tab
432
389
 
433
390
            @param pl: the xl.playlist.Playlist instance to add
434
391
        """
435
 
        new_empty_pl = False
436
392
        if pl is None:
437
393
            pl = xl.playlist.Playlist()
438
 
            new_empty_pl = True
439
 
        if len(pl.get_tracks()) == 0:
440
 
            new_empty_pl = True
441
 
 
442
 
        name = pl.get_name()
 
394
        name = pl.name
 
395
        pl = playlist.Playlist(self, self.queue, pl)
443
396
        nb = self.playlist_notebook
444
 
        if pl.get_is_custom():
445
 
            for n in range(nb.get_n_pages()):
446
 
                nth = nb.get_nth_page(n)
447
 
                if nth.playlist.get_is_custom() and not nth.get_needs_save() \
448
 
                    and nth.playlist.get_name() == pl.get_name():
449
 
                    nb.set_current_page(n)
450
 
                    return
451
 
 
452
 
        pl = playlist.Playlist(self, self.queue, pl)
453
397
 
454
398
        try:
455
399
            name = name % (nb.get_n_pages() + 1)
461
405
            name = name[:20] + "..."
462
406
 
463
407
        tab = NotebookTab(self, nb, name, pl)
464
 
        # We check if the current playlist is empty, to know if it should be replaced
465
 
        cur = nb.get_current_page()
466
 
        remove_cur = False
467
 
        curpl = nb.get_nth_page(cur)
468
 
        if curpl and len(curpl.playlist.get_tracks()) == 0:
469
 
            remove_cur = True
470
 
        
471
408
        nb.append_page(pl, tab)
472
 
        nb.set_tab_reorderable(pl, True)
473
 
        if remove_cur and not new_empty_pl and erase_empty:
474
 
            nb.remove_page(cur)
475
 
            nb.reorder_child(pl, cur)
476
 
            nb.set_current_page(cur)
477
 
        else:
478
 
            nb.set_current_page(nb.get_n_pages() - 1)
 
409
        nb.set_current_page(nb.get_n_pages() - 1)
479
410
        self.set_mode_toggles()
480
411
        
481
412
        # Always show tab bar for more than one tab
483
414
            nb.set_show_tabs(True)
484
415
 
485
416
        self.queue.set_current_playlist(pl.playlist)
486
 
        
 
417
 
487
418
        return pl
488
419
 
489
420
    def _setup_hotkeys(self):
549
480
        box.pack_start(self.filter.entry, True, True)
550
481
 
551
482
    def on_queue(self):
552
 
        """
553
 
            Toggles queue on the current playlist
554
 
        """
 
483
        """Toggles queue on the current playlist"""
555
484
        cur_page = self.playlist_notebook.get_children()[
556
485
                self.playlist_notebook.get_current_page()]
557
486
        cur_page.menu.on_queue()
787
716
        if tab is None:
788
717
            tab = self.playlist_notebook.get_current_page()
789
718
        pl = self.playlist_notebook.get_nth_page(tab)
790
 
        if pl.on_closing():
791
 
            if self.queue.current_playlist == pl.playlist:
792
 
                self.queue.current_playlist = None
793
 
            self.playlist_notebook.remove_page(tab)
 
719
        if self.queue.current_playlist == pl.playlist:
 
720
            self.queue.current_playlist = None
 
721
        self.playlist_notebook.remove_page(tab)
794
722
 
795
723
    def on_playlist_notebook_switch(self, notebook, page, page_num):
796
724
        """
1114
1042
 
1115
1043
    def window_state_change_event(self, widget, event):
1116
1044
        """
1117
 
            Saves the current maximized and fullscreen
1118
 
            states and minimizes to tray if requested
 
1045
            Saves the current maximized and fullscreen states
1119
1046
        """
1120
1047
        if event.changed_mask & gtk.gdk.WINDOW_STATE_MAXIMIZED:
1121
1048
            settings.set_option('gui/mainw_maximized',
1122
1049
                bool(event.new_window_state & gtk.gdk.WINDOW_STATE_MAXIMIZED))
1123
1050
        if event.changed_mask & gtk.gdk.WINDOW_STATE_FULLSCREEN:
1124
1051
            self._fullscreen = bool(event.new_window_state & gtk.gdk.WINDOW_STATE_FULLSCREEN)
1125
 
 
1126
 
        if settings.get_option('gui/minimize_to_tray', False) and \
1127
 
           self.controller.tray_icon is not None and \
1128
 
           event.changed_mask & gtk.gdk.WINDOW_STATE_ICONIFIED and \
1129
 
           event.new_window_state & gtk.gdk.WINDOW_STATE_ICONIFIED:
1130
 
            self.window.hide()
1131
 
 
1132
1052
        return False
1133
1053
 
1134
1054
def get_playlist_nb():