#! /usr/bin/env python

import sys
from PyQt4 import QtGui, \
                  QtCore
import my_application_rc

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        # create actions
        aboutAct = self.createAction(icon     = 'about',
                                     text     = self.tr('&About'),
                                     tip      = self.tr('Show the application\'s About box'),
                                     slot     = self.about)

        exitAct  = self.createAction(icon     = 'exit',
                                     text     = self.tr('E&xit'),
                                     shortcut = 'Ctrl+Q',
                                     tip      = self.tr('Exit the application'),
                                     slot     = self.close)

        helpAct  = self.createAction(icon     = 'help',
                                     text     = self.tr('&Help'),
                                     shortcut = 'F1',
                                     tip      = self.tr('Online help'),
                                     slot     = self.help)
        #

        # create menus
        self.fileMenu = self.menuBar().addMenu(self.tr('&File'))
        for act in [exitAct]:
            self.fileMenu.addAction(act)

        self.helpMenu = self.menuBar().addMenu(self.tr('&Help'))
        for act in [helpAct, aboutAct]:
            self.helpMenu.addAction(act)
        #

        # create toolbars
        self.fileToolBar = self.addToolBar(self.tr('File'))
        for act in [exitAct]:
            self.fileToolBar.addAction(act)

        self.helpToolBar = self.addToolBar(self.tr('Help'))
        for act in [helpAct, aboutAct]:
            self.helpToolBar.addAction(act)
        #

        # set window title and status bar
        self.setWindowTitle('My Application')
        self.statusBar().showMessage(self.tr('Ready'))

        # read settings
        settings = QtCore.QSettings()
        self.restoreGeometry(settings.value('Geometry').toByteArray())

    def about(self):
        QtGui.QMessageBox.about(self, self.tr('About Application'),
                                      self.tr('My Application does something\n'
                                              'This software comes without warranty, liability or support!'))

    def closeEvent(self, event):
        settings = QtCore.QSettings()
        settings.setValue('Geometry', QtCore.QVariant(self.saveGeometry()))

    def createAction(self, icon, text, tip, slot, shortcut = None):
        action = QtGui.QAction(QtGui.QIcon(':/%s.png' % icon), text, self)
        try:
            action.setShortcut(shortcut)
        except TypeError:
            pass
        action.setToolTip(tip)
        action.setStatusTip(tip)
        self.connect(action, QtCore.SIGNAL('triggered()'), slot)
        return action

    def help(self):
        helpDialog = QtGui.QDialog(self)

        browser = QtGui.QTextBrowser()
        browser.append(self.tr('Help'))

        layout = QtGui.QVBoxLayout()
        layout.addWidget(browser)

        helpDialog.setLayout(layout)
        helpDialog.setWindowTitle(self.tr('Help'))
        helpDialog.show()

app     = QtGui.QApplication(sys.argv)

# Internationalization
qtTranslator  = QtCore.QTranslator()
qtTranslator.load(':/qt.qm')
app.installTranslator(qtTranslator)

appTranslator = QtCore.QTranslator()
appTranslator.load(':/my_application.qm')
app.installTranslator(appTranslator)
#

app.setOrganizationName('Trolltech')
app.setApplicationName('My Application')
app.setWindowIcon(QtGui.QIcon(':/application.png'))

mainWin       = MainWindow()
mainWin.show()
app.exec_()
