Source code for mesycontrol.gui_mainwindow

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# mesycontrol - Remote control for mesytec devices.
# Copyright (C) 2015-2016 mesytec GmbH & Co. KG <info@mesytec.com>
#
# This program 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 2
# of the License, or (at your option) any later version.
#
# This program 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 this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

__author__ = 'Florian Lüke'
__email__  = 'f.lueke@mesytec.com'

from qt import pyqtSlot
from qt import Qt
from qt import QtCore
from qt import QtGui
import platform

from mc_treeview import MCTreeView
from util import make_icon
import gui_util
import log_view
import util

[docs]class MCMdiArea(QtGui.QMdiArea): def __init__(self, parent=None): super(MCMdiArea, self).__init__(parent) self.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
[docs]class MainWindow(QtGui.QMainWindow): def __init__(self, context, parent=None): super(MainWindow, self).__init__(parent) self.log = util.make_logging_source_adapter(__name__, self) self.context = context util.loadUi(":/ui/mainwin.ui", self) self.setWindowIcon(make_icon(":/window-icon.png")) # Treeview self.treeview = MCTreeView(app_registry=context.app_registry, device_registry=context.device_registry) dw_tree = QtGui.QDockWidget("Device tree", self) dw_tree.setObjectName("dw_treeview") dw_tree.setWidget(self.treeview) dw_tree.setFeatures(QtGui.QDockWidget.DockWidgetMovable | QtGui.QDockWidget.DockWidgetFloatable) self.addDockWidget(Qt.BottomDockWidgetArea, dw_tree) # Log view self.logview = log_view.LogView(parent=self) dw_logview = QtGui.QDockWidget("Application Log", self) dw_logview.setObjectName("dw_logview") dw_logview.setWidget(self.logview) dw_logview.setFeatures(QtGui.QDockWidget.DockWidgetMovable | QtGui.QDockWidget.DockWidgetFloatable) self.addDockWidget(Qt.BottomDockWidgetArea, dw_logview) # Note: do not call restore_settings() here. It needs to be called # after self.show() to work properly!
[docs] def store_settings(self): settings = self.context.make_qsettings() settings.beginGroup("MainWindow") try: settings.setValue("size", self.size()); settings.setValue("pos", self.pos()); settings.setValue("geometry", self.saveGeometry()); settings.setValue("state", self.saveState()); finally: settings.endGroup() window_list = self.mdiArea.subWindowList() for window in window_list: gui_util.store_subwindow_state(window, settings) settings.setValue("MCTreeView/state", self.treeview.splitter.saveState())
[docs] def restore_settings(self): settings = self.context.make_qsettings() settings.beginGroup("MainWindow") try: self.resize(settings.value("size", QtCore.QSize(1024, 768)).toSize()) self.move(settings.value("pos", QtCore.QPoint(0, 0)).toPoint()) self.restoreGeometry(settings.value("geometry").toByteArray()) self.restoreState(settings.value("state").toByteArray()) finally: settings.endGroup() self.treeview.splitter.restoreState( settings.value("MCTreeView/state").toByteArray())
[docs] @pyqtSlot() def on_actionAbout_triggered(self): try: from . import mc_version version = mc_version.version except ImportError: version = "devel version" d = QtGui.QDialog(self) d.setWindowTitle("About mesycontrol") license = QtGui.QTextBrowser(parent=d) license.setWindowFlags(Qt.Window) license.setWindowTitle("mesycontrol license") license.setText("") try: f = QtCore.QFile(":/gpl-notice.txt") if not f.open(QtCore.QIODevice.ReadOnly | QtCore.QIODevice.Text): return license.setText(QtCore.QString(f.readAll())) finally: f.close() l = QtGui.QVBoxLayout(d) logo = QtGui.QLabel() logo.setPixmap(QtGui.QPixmap(":/mesytec-logo.png" ).scaledToWidth(300, Qt.SmoothTransformation)) l.addWidget(logo) t = "mesycontrol - %s" % version label = QtGui.QLabel(t) font = label.font() font.setPointSize(15) font.setBold(True) label.setFont(font) l.addWidget(label) l.addWidget(QtGui.QLabel("Remote control for mesytec devices.")) l.addWidget(QtGui.QLabel(QtCore.QString.fromUtf8("© 2014-2015 mesytec GmbH & Co. KG"))) t = '<a href="mailto:info@mesytec.com">info@mesytec.com</a> - <a href="http://www.mesytec.com">www.mesytec.com</a>' label = QtGui.QLabel(t) label.setOpenExternalLinks(True) l.addWidget(label) t = 'Running on Python %s using PyQt %s with Qt %s.' % ( platform.python_version(), QtCore.PYQT_VERSION_STR, QtCore.QT_VERSION_STR) l.addWidget(QtGui.QLabel(t)) l.addSpacing(20) bl = QtGui.QHBoxLayout() def license_button_clicked(): sz = license.size() sz = sz.expandedTo(QtCore.QSize(500, 300)) license.resize(sz) license.show() license.raise_() b = QtGui.QPushButton("&License", clicked=license_button_clicked) bl.addWidget(b) b = QtGui.QPushButton("&Close", clicked=d.close) b.setAutoDefault(True) b.setDefault(True) bl.addWidget(b) l.addLayout(bl) for item in (l.itemAt(i) for i in range(l.count())): item.setAlignment(Qt.AlignHCenter) w = item.widget() if isinstance(w, QtGui.QLabel): w.setTextInteractionFlags(Qt.TextBrowserInteraction) d.exec_()
[docs] @pyqtSlot() def on_actionAbout_Qt_triggered(self): QtGui.QApplication.instance().aboutQt()
[docs] def closeEvent(self, event): self.store_settings() super(MainWindow, self).closeEvent(event)