From f4933531a7e939883148d4015844fa75905c0a3b Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Fri, 27 Aug 2010 15:29:01 +0200 Subject: rename winMain -> MainWindow for consistency --- nephilim/main_window.py | 208 +++++++++++++++++++++++++++++++++++++++++++++++ nephilim/nephilim_app.py | 4 +- nephilim/winMain.py | 206 ---------------------------------------------- 3 files changed, 210 insertions(+), 208 deletions(-) create mode 100644 nephilim/main_window.py delete mode 100644 nephilim/winMain.py diff --git a/nephilim/main_window.py b/nephilim/main_window.py new file mode 100644 index 0000000..67c8847 --- /dev/null +++ b/nephilim/main_window.py @@ -0,0 +1,208 @@ +# +# Copyright (C) 2008 jerous +# Copyright (C) 2009 Anton Khirnov +# +# Nephilim is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Nephilim is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Nephilim. If not, see . +# + +from PyQt4 import QtGui, QtCore +from PyQt4.QtCore import pyqtSlot as Slot +import logging + +from common import APPNAME, sec2min, appIcon +import icons +import data + +class MainWindow(QtGui.QMainWindow): + """ + Application's main window class. + """ + mpclient = None + settings = None + " menus" + mConnect = None + mDisconnect = None + __layout_menu = None + + # Statusbar objects + __statuslabel = None + __time_slider = None + __time_label = None + + __docks = [] + + def __init__(self, mpclient): + QtGui.QMainWindow.__init__(self) + self.settings = QtCore.QSettings() + self.mpclient = mpclient + + + # statusbar + self.statusBar() + self.__statuslabel = QtGui.QLabel() + self.__time_slider = QtGui.QSlider(QtCore.Qt.Horizontal, self) + self.__time_slider.setMaximumWidth(self.width()/4) + self.__time_slider.sliderReleased.connect( self.__on___time_slider_change) + self.__time_label = TimeLabel(self, mpclient) + self.mpclient.time_changed.connect(self.__on_time_change) + + self.statusBar().addWidget(self.__statuslabel) + self.statusBar().addPermanentWidget(self.__time_label) + self.statusBar().addPermanentWidget(self.__time_slider) + + mBar = QtGui.QMenuBar() # create a menubar + # File menu + m = mBar.addMenu("File") + # connect + self.mConnect=m.addAction('Connect ...', QtGui.QApplication.instance().show_connect_win) + self.mConnect.setIcon(QtGui.QIcon(appIcon)) + # disconnect + self.mDisconnect=m.addAction('Disconnect', self.mpclient.disconnect_mpd) + self.mDisconnect.setIcon(QtGui.QIcon(':icons/disconnect.png')) + # separator + m.addSeparator() + # quit + m.addAction("Quit", QtGui.QApplication.instance().quit).setIcon(QtGui.QIcon(':icons/gtk-quit.svg')) + + # menu options + m=mBar.addMenu("Options") + # settings + m.addAction("Settings", QtGui.QApplication.instance().show_settings_win).setIcon(QtGui.QIcon(':icons/gtk-preferences.svg')) + + # menu layout + self.__layout_menu=mBar.addMenu("Layout") + + # create a toolbar for the main menu + menu_toolbar = QtGui.QToolBar('Main menu', self) + menu_toolbar.addWidget(mBar) + self.addToolBar(QtCore.Qt.TopToolBarArea, menu_toolbar) + + self.__update_layout_menu() + self.setDockOptions(QtGui.QMainWindow.AllowNestedDocks \ + |QtGui.QMainWindow.AllowTabbedDocks \ + |QtGui.QMainWindow.VerticalTabs) + self.setDockNestingEnabled(True) + self.restoreGeometry(self.settings.value('geometry', QtCore.QByteArray())) + + " add event handlers" + self.mpclient.connect_changed.connect(self.__on_connect_changed) + self.mpclient.song_changed.connect(self.__on_song_change) + self.mpclient.state_changed.connect(self.__update_state_messages) + + self.__update_state_messages() + self.show() + + def on_quit(self): + self.settings.setValue('geometry', self.saveGeometry()) + + def __update_layout_menu(self): + self.__layout_menu.clear() + self.__layout_menu.addAction('Save layout', self.save_layout) + self.__layout_menu.addAction('Restore layout', self.restore_layout) + self.__layout_menu.addSeparator() + # create checkable menu + a = QtGui.QAction('Show titlebars', self) + a.setCheckable(True) + a.setChecked(int(self.settings.value('show_titlebars', 1))) + self.__toggle_titlebars(a.isChecked()) + a.toggled.connect(self.__toggle_titlebars) + self.__layout_menu.addAction(a) + self.__layout_menu.addSeparator() + + m = self.createPopupMenu() + if m: + for action in m.actions(): + self.__layout_menu.addAction(action) + + def __toggle_titlebars(self, val): + if val: + self.settings.setValue('show_titlebars', 1) + else: + self.settings.setValue('show_titlebars', 0) + for dock in self.__docks: + if val: + dock.setTitleBarWidget(None) + else: + dock.setTitleBarWidget(QtGui.QWidget()) + def add_dock(self, dock): + if dock: + self.__docks.append(dock) + self.addDockWidget(QtCore.Qt.TopDockWidgetArea, dock) + self.__update_layout_menu() + def remove_dock(self, dock): + if dock: + self.removeDockWidget(dock) + if dock in self.__docks: + self.__docks.remove(dock) + self.__update_layout_menu() + + def save_layout(self): + self.settings.setValue('layout', self.saveState()) + def restore_layout(self): + layout = self.settings.value('layout') + if not layout: + l_file = QtCore.QFile(':default_layout') + l_file.open(QtCore.QIODevice.ReadOnly) + layout = l_file.readAll() + self.restoreState(layout) + + + def __on_connect_changed(self, val): + if val: + self.mDisconnect.setEnabled(True) + self.mConnect.setEnabled(False) + else: + self.mDisconnect.setEnabled(False) + self.mConnect.setEnabled(True) + + def __update_state_messages(self): + """Update window title and statusbar""" + song = self.mpclient.cur_song + state = self.mpclient.status['state'] + state = 'playing' if state == 'play' else 'paused' if state == 'pause' else 'stopped' + if song: + self.setWindowTitle('%s by %s - %s [%s]'%(song['?title'], song['?artist'], APPNAME, state)) + self.__statuslabel.setText('%s by %s on %s [%s]'%(song['?title'], song['?artist'],song['?album'], state)) + else: + self.setWindowTitle(APPNAME) + self.__statuslabel.setText('') + + def __on___time_slider_change(self): + self.mpclient.seek(self.__time_slider.value()) + + def __on_song_change(self): + status = self.mpclient.status + self.__time_slider.setMaximum(status['time'][1]) + self.__time_slider.setEnabled(True) + self.__update_state_messages() + + def __on_time_change(self, new_time): + if not self.__time_slider.isSliderDown(): + self.__time_slider.setValue(new_time) + +class TimeLabel(QtGui.QLabel): + + _mpclient = None + + def __init__(self, parent, mpclient): + QtGui.QLabel.__init__(self, parent) + + self._mpclient = mpclient + + self._mpclient.time_changed.connect(self._update_text) + self._update_text(self._mpclient.status['time'][0]) + + @Slot(int) + def _update_text(self, time): + self.setText('%s/%s'%(sec2min(time), sec2min(self._mpclient.status['time'][1]))) diff --git a/nephilim/nephilim_app.py b/nephilim/nephilim_app.py index 2698f67..da7050b 100644 --- a/nephilim/nephilim_app.py +++ b/nephilim/nephilim_app.py @@ -17,7 +17,7 @@ from PyQt4 import QtGui, QtCore -from winMain import winMain +from main_window import MainWindow from common import ORGNAME, APPNAME, appIcon from mpclient import MPClient from settings_wg import SettingsWidget @@ -60,7 +60,7 @@ class NephilimApp(QtGui.QApplication): self.__connect_win = ConnectWidget() #init main window - self.main_win = winMain(self.mpclient) + self.main_win = MainWindow(self.mpclient) #init plugins show_settings = False # are there new plugins? diff --git a/nephilim/winMain.py b/nephilim/winMain.py deleted file mode 100644 index a743298..0000000 --- a/nephilim/winMain.py +++ /dev/null @@ -1,206 +0,0 @@ -# -# Copyright (C) 2008 jerous -# Copyright (C) 2009 Anton Khirnov -# -# Nephilim is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Nephilim is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Nephilim. If not, see . -# - -from PyQt4 import QtGui, QtCore -from PyQt4.QtCore import pyqtSlot as Slot -import logging - -from common import APPNAME, sec2min, appIcon -import icons -import data - -class winMain(QtGui.QMainWindow): - """The winMain class is mpc's main window, showing the playlists and control-interface""" - mpclient = None - settings = None - " menus" - mConnect = None - mDisconnect = None - __layout_menu = None - - # Statusbar objects - __statuslabel = None - __time_slider = None - __time_label = None - - __docks = [] - - def __init__(self, mpclient): - QtGui.QMainWindow.__init__(self) - self.settings = QtCore.QSettings() - self.mpclient = mpclient - - - # statusbar - self.statusBar() - self.__statuslabel = QtGui.QLabel() - self.__time_slider = QtGui.QSlider(QtCore.Qt.Horizontal, self) - self.__time_slider.setMaximumWidth(self.width()/4) - self.__time_slider.sliderReleased.connect( self.__on___time_slider_change) - self.__time_label = TimeLabel(self, mpclient) - self.mpclient.time_changed.connect(self.__on_time_change) - - self.statusBar().addWidget(self.__statuslabel) - self.statusBar().addPermanentWidget(self.__time_label) - self.statusBar().addPermanentWidget(self.__time_slider) - - mBar = QtGui.QMenuBar() # create a menubar - # File menu - m = mBar.addMenu("File") - # connect - self.mConnect=m.addAction('Connect ...', QtGui.QApplication.instance().show_connect_win) - self.mConnect.setIcon(QtGui.QIcon(appIcon)) - # disconnect - self.mDisconnect=m.addAction('Disconnect', self.mpclient.disconnect_mpd) - self.mDisconnect.setIcon(QtGui.QIcon(':icons/disconnect.png')) - # separator - m.addSeparator() - # quit - m.addAction("Quit", QtGui.QApplication.instance().quit).setIcon(QtGui.QIcon(':icons/gtk-quit.svg')) - - # menu options - m=mBar.addMenu("Options") - # settings - m.addAction("Settings", QtGui.QApplication.instance().show_settings_win).setIcon(QtGui.QIcon(':icons/gtk-preferences.svg')) - - # menu layout - self.__layout_menu=mBar.addMenu("Layout") - - # create a toolbar for the main menu - menu_toolbar = QtGui.QToolBar('Main menu', self) - menu_toolbar.addWidget(mBar) - self.addToolBar(QtCore.Qt.TopToolBarArea, menu_toolbar) - - self.__update_layout_menu() - self.setDockOptions(QtGui.QMainWindow.AllowNestedDocks \ - |QtGui.QMainWindow.AllowTabbedDocks \ - |QtGui.QMainWindow.VerticalTabs) - self.setDockNestingEnabled(True) - self.restoreGeometry(self.settings.value('geometry', QtCore.QByteArray())) - - " add event handlers" - self.mpclient.connect_changed.connect(self.__on_connect_changed) - self.mpclient.song_changed.connect(self.__on_song_change) - self.mpclient.state_changed.connect(self.__update_state_messages) - - self.__update_state_messages() - self.show() - - def on_quit(self): - self.settings.setValue('geometry', self.saveGeometry()) - - def __update_layout_menu(self): - self.__layout_menu.clear() - self.__layout_menu.addAction('Save layout', self.save_layout) - self.__layout_menu.addAction('Restore layout', self.restore_layout) - self.__layout_menu.addSeparator() - # create checkable menu - a = QtGui.QAction('Show titlebars', self) - a.setCheckable(True) - a.setChecked(int(self.settings.value('show_titlebars', 1))) - self.__toggle_titlebars(a.isChecked()) - a.toggled.connect(self.__toggle_titlebars) - self.__layout_menu.addAction(a) - self.__layout_menu.addSeparator() - - m = self.createPopupMenu() - if m: - for action in m.actions(): - self.__layout_menu.addAction(action) - - def __toggle_titlebars(self, val): - if val: - self.settings.setValue('show_titlebars', 1) - else: - self.settings.setValue('show_titlebars', 0) - for dock in self.__docks: - if val: - dock.setTitleBarWidget(None) - else: - dock.setTitleBarWidget(QtGui.QWidget()) - def add_dock(self, dock): - if dock: - self.__docks.append(dock) - self.addDockWidget(QtCore.Qt.TopDockWidgetArea, dock) - self.__update_layout_menu() - def remove_dock(self, dock): - if dock: - self.removeDockWidget(dock) - if dock in self.__docks: - self.__docks.remove(dock) - self.__update_layout_menu() - - def save_layout(self): - self.settings.setValue('layout', self.saveState()) - def restore_layout(self): - layout = self.settings.value('layout') - if not layout: - l_file = QtCore.QFile(':default_layout') - l_file.open(QtCore.QIODevice.ReadOnly) - layout = l_file.readAll() - self.restoreState(layout) - - - def __on_connect_changed(self, val): - if val: - self.mDisconnect.setEnabled(True) - self.mConnect.setEnabled(False) - else: - self.mDisconnect.setEnabled(False) - self.mConnect.setEnabled(True) - - def __update_state_messages(self): - """Update window title and statusbar""" - song = self.mpclient.cur_song - state = self.mpclient.status['state'] - state = 'playing' if state == 'play' else 'paused' if state == 'pause' else 'stopped' - if song: - self.setWindowTitle('%s by %s - %s [%s]'%(song['?title'], song['?artist'], APPNAME, state)) - self.__statuslabel.setText('%s by %s on %s [%s]'%(song['?title'], song['?artist'],song['?album'], state)) - else: - self.setWindowTitle(APPNAME) - self.__statuslabel.setText('') - - def __on___time_slider_change(self): - self.mpclient.seek(self.__time_slider.value()) - - def __on_song_change(self): - status = self.mpclient.status - self.__time_slider.setMaximum(status['time'][1]) - self.__time_slider.setEnabled(True) - self.__update_state_messages() - - def __on_time_change(self, new_time): - if not self.__time_slider.isSliderDown(): - self.__time_slider.setValue(new_time) - -class TimeLabel(QtGui.QLabel): - - _mpclient = None - - def __init__(self, parent, mpclient): - QtGui.QLabel.__init__(self, parent) - - self._mpclient = mpclient - - self._mpclient.time_changed.connect(self._update_text) - self._update_text(self._mpclient.status['time'][0]) - - @Slot(int) - def _update_text(self, time): - self.setText('%s/%s'%(sec2min(time), sec2min(self._mpclient.status['time'][1]))) -- cgit v1.2.3