44
44
class View(gtk.Window):
45
45
"""Main GTK+ window"""
47
formatDict = {'mp3': True, 'wma': True, 'ogg': True, 'flac': True,
47
formatDict = {'mp3': True, 'wma': True, 'ogg': True, 'flac': True,
48
48
'm4a': True, 'mp4': True, 'aac': True, 'wav': True,
49
49
'ape': True, 'mpc': True, 'wv': True}
51
51
def __init__(self, model, control):
53
53
gtk.Window.__init__(self)
55
55
self.control = control
56
56
self.set_title('CometSound')
57
57
self.control.registerView(self)
60
60
# Create the toplevel window
61
61
self.connect('destroy', lambda w: self.destroy())
62
62
self.minwidth = 733 #int(self.get_screen().get_width() / 2.5)
79
79
self.pix = self.icon.get_pixbuf().scale_simple(48, 48, gtk.gdk.INTERP_BILINEAR)
80
80
self.set_icon(self.pix)
83
83
self.createSlider()
85
85
self.createPrimaryToolbar()
87
87
self.setStatusIcon()
89
89
self.columns = columns
90
90
self.filesTree = FilesFrame(None, self.control, self.formatDict, self.columns)
91
91
self.playlistFrame = PlaylistFrame(self.control)
93
93
self.framebox.pack1(self.filesTree)
94
94
self.framebox.pack2(self.playlistFrame, False, False)
95
95
self.framebox.set_position(framepos)
109
109
self.vbox.pack_start(sbar, False)
110
110
self.vbox.pack_start(self.progressBar, False)
113
113
if self.control.settings['scrobbler']:
114
114
self.scrobblerButton.show()
116
self.scrobblerButton.hide()
116
self.scrobblerButton.hide()
118
118
self.progressBar.pulse()
119
119
self.statusbar.push(0, 'Loading library...')
122
122
self.filesTree.treeview.grab_focus()
123
123
self.statusbar.pop(0)
124
124
self.vbox.remove(self.progressBar)
127
127
if self.model.getAudioFileList()[1] != 'Group':
128
128
self.control.refreshTree()
130
130
print "filelist is a multiple selection"
132
132
self.statusbar.set_size_request(0,14)
134
134
if self.model.playlist != None:
135
135
self.control.playStopSelected()
158
158
actiongroup = gtk.ActionGroup('UIManagerExample')
159
159
self.actiongroup = actiongroup
163
163
actiongroup.add_actions([('Quit', gtk.STOCK_QUIT, _('_Quit'), None, _('Quit the program'), self.quit),
164
164
('Open', gtk.STOCK_OPEN, _('_Open folder...'), None, _('Open media folder'), self.control.openFolder),
191
191
uitogglelist = ''
192
192
for label in list:
193
uitogglelist = uitogglelist + '<menuitem action="%s"/>' % (label)
195
viewNum = self.control.settings['view']
193
uitogglelist = uitogglelist + '<menuitem action="%s"/>' % (label)
195
viewNum = self.control.settings['view']
198
198
self.control.settings['view'] = 0
200
200
actiongroup.add_radio_actions([('Tree View', None, _('File View'), None, _('File System visualization'), 0),
244
244
self.actiongroup = actiongroup
245
245
self.uimanager = uimanager
247
247
# Create a MenuBar
248
248
self.menubar = uimanager.get_widget('/MenuBar')
249
249
toolbar = uimanager.get_widget('/ToolBar')
250
250
imageToolbar = uimanager.get_widget('/ImageToolBar')
251
251
#toolbar.set_size_request(170, 50)
253
253
# Create an Image to show the album's cover
254
254
self.image = AlbumImage()
281
281
tv = gtk.ToolItem()
282
282
tv.add(self.volumeButton)
283
283
imageToolbar.insert(tv, 3)
285
285
self.scrobblerButton = gtk.Button()
286
286
self.scrobblerButton.set_relief(gtk.RELIEF_NONE)
287
self.scrobblerButton.unset_flags(gtk.CAN_FOCUS)
287
self.scrobblerButton.unset_flags(gtk.CAN_FOCUS)
288
288
sIcon = gtk.Image()
289
289
sIcon.set_from_file("images/love.png")
290
290
si = sIcon.get_pixbuf().scale_simple(28, 28, gtk.gdk.INTERP_BILINEAR)
295
295
tv = gtk.ToolItem()
296
296
tv.add(self.scrobblerButton)
297
297
imageToolbar.insert(tv, 2)
299
299
tl = gtk.ToolItem()
300
300
tl.add(self.slider)
301
301
tl.set_expand(True)
302
302
toolbar.insert(tl, -1)
304
304
tl = gtk.ToolItem()
306
306
l.set_size_request(19,0)
308
308
toolbar.insert(tl, 3)
310
310
tl = gtk.ToolItem()
312
312
l.set_size_request(9,0)
314
314
toolbar.insert(tl, 0)
316
316
tl = gtk.ToolItem()
318
318
l.set_size_request(12,0)
320
320
toolbar.insert(tl, -1)
322
322
tl = gtk.ToolItem()
324
324
l.set_size_request(7,0)
326
326
imageToolbar.insert(tl, -1)
328
328
self.imageToolbar = imageToolbar
329
329
self.hbox.pack_start(toolbar, True)
331
331
def updatePlaylistsMenu(self, newPlaylist):
332
332
self.actiongroup.add_actions([(newPlaylist, None, newPlaylist, None, None, self.control.loadPlaylist)])
333
333
merge_id = self.uimanager.new_merge_id()
334
334
self.uimanager.add_ui(merge_id, 'ui/MenuBar/Playlists', newPlaylist, newPlaylist, gtk.UI_MANAGER_MENUITEM, False)
336
336
def changeView(self, radioaction, current, value = None):
337
337
self.filesTree.removeTagToolbar()
338
338
self.filesTree.treeview.get_column(0).set_title(_('Name'))
377
377
hscale.connect('format-value', self.control.sliderFormat)
378
378
self.slider = hscale
379
379
self.slider.set_sensitive(False)
381
381
def createButton(self, imageStock, tooltip, func, data = None):
382
382
Icon = gtk.Image()
383
Icon.set_from_stock(imageStock, gtk.ICON_SIZE_SMALL_TOOLBAR)
383
Icon.set_from_stock(imageStock, gtk.ICON_SIZE_SMALL_TOOLBAR)
386
386
B.set_tooltip_text(tooltip)
387
B.connect("clicked", func, data)
387
B.connect("clicked", func, data)
390
390
def setStatusIcon(self):
391
391
"""Builds the status icon"""
394
394
mode = self.control.settings['statusicon']
397
397
if self.tray != None:
398
398
self.tray.set_visible(False)
400
400
self.tray = gtk.StatusIcon()
401
401
pix = pix.scale_simple(20, 20, gtk.gdk.INTERP_BILINEAR)
402
402
self.tray.set_from_pixbuf(pix)
403
self.tray.connect('popup-menu', self.openMenu)
404
self.tray.connect('activate', self.minimize)
403
self.tray.connect('popup-menu', self.openMenu)
404
self.tray.connect('activate', self.minimize)
406
406
statusMenu = gtk.Menu()
407
407
if self.control.settings['statusicon'] == 0:
408
408
self.menulabel = gtk.MenuItem(self.label.get_text())
409
409
statusMenu.append(self.menulabel)
411
411
sep = gtk.SeparatorMenuItem()
413
413
statusMenu.append(sep)
415
415
statusPlay = gtk.CheckMenuItem(_('Play'))
416
416
statusPlay.set_active(self.control.playerThread.playing)
417
417
statusPlay.show()
418
418
statusMenu.append(statusPlay)
419
419
statusPlay.connect('toggled', self.control.playStopSelected)
420
self.statusPlay = statusPlay
420
self.statusPlay = statusPlay
422
422
next = gtk.MenuItem(_('Next'))
424
424
statusMenu.append(next)
425
425
next.connect('activate', self.control.nextTrack)
427
427
previous = gtk.MenuItem(_('Previous'))
429
429
statusMenu.append(previous)
430
430
previous.connect('activate', self.control.previousTrack)
432
432
quit = gtk.MenuItem(_('Quit'))
434
434
statusMenu.append(quit)
435
quit.connect('activate', self.quit)
436
self.statusMenu = statusMenu
438
def openMenu(self, icon, event_button, event_time):
439
"""Shows the status icon"""
435
quit.connect('activate', self.quit)
436
self.statusMenu = statusMenu
438
def openMenu(self, icon, event_button, event_time):
439
"""Shows the status icon"""
440
440
if self.label.get_text() != '\n\n' and self.control.settings['statusicon'] == 0:
441
441
self.statusMenu.remove(self.menulabel)
442
442
self.menulabel = gtk.MenuItem(self.label.get_text())
447
447
self.statusMenu.prepend(self.menulabel)
448
448
self.statusMenu.popup(None, None, gtk.status_icon_position_menu,
449
449
event_button, event_time, self.tray)
451
451
def minimize(self, obj = None):
452
452
if self.get_visible():
457
457
def openPreferences(self, obj = None):
459
459
p = PreferencesDialog(self.columns, self.control, self.control.settings)
461
461
self.control.settings = defaultSettings
462
462
p = PreferencesDialog(self.columns, self.control, defaultSettings)
464
464
def openPlaylistFolder(self, widget, data=None):
465
465
"""Opens the folder of the saved playlists"""
466
466
cacheDir = os.path.join(os.environ.get('HOME', None), ".cometsound")
468
468
if not os.path.exists(dir):
470
470
os.system('xdg-open %s' % dir)
472
472
def savePlaylistDialog(self, widget, data=None):
473
473
d = SavePlaylistDialog(self.control)
475
475
def getFormatDict(self):
476
return self.formatDict
476
return self.formatDict
478
478
def setButtonPlay(self):
479
479
"""Sets the button to "play" during playing"""
480
480
self.actiongroup.get_action('Play/Stop').set_stock_id(gtk.STOCK_MEDIA_PLAY)
481
self.actiongroup.get_action('Play/Stop').set_tooltip(_('Play'))
481
self.actiongroup.get_action('Play/Stop').set_tooltip(_('Play'))
483
483
def setButtonPause(self):
484
484
"""Sets the button to "pause" """
485
485
self.actiongroup.get_action('Play/Stop').set_stock_id(gtk.STOCK_MEDIA_PAUSE)
486
486
self.actiongroup.get_action('Play/Stop').set_tooltip(_('Pause'))
488
488
def storeSize(self, widget, event):
489
489
all = widget.get_allocation()
490
490
self.width, self.height = all.width, all.height
492
492
def showAboutDialog(self, o):
493
493
ad = AboutDialog(self.icon, APP_VERSION)
496
496
def quit(self, obj = None):
499
499
def destroy(self):
500
500
"""Handles the program shutdown"""