def __init__(self, filenames = [], parent = None, name = None): """ Constructor @param filenames filenames of form and/or translation files to load @param parent parent widget of this window (QWidget) @param name name of this window (string or QString) """ self.mainWidget = None self.currentFile = QDir.currentPath() KQMainWindow.__init__(self, parent) if not name: self.setObjectName("TRPreviewer") else: self.setObjectName(name) self.resize(QSize(800, 600).expandedTo(self.minimumSizeHint())) self.setAttribute(Qt.WA_DeleteOnClose) self.statusBar() self.setWindowIcon(UI.PixmapCache.getIcon("eric.png")) self.setWindowTitle(self.trUtf8("Translations Previewer")) self.cw = QWidget(self) self.cw.setObjectName("qt_central_widget") self.TRPreviewerLayout = QVBoxLayout(self.cw) self.TRPreviewerLayout.setMargin(6) self.TRPreviewerLayout.setSpacing(6) self.TRPreviewerLayout.setObjectName("TRPreviewerLayout") self.languageLayout = QHBoxLayout() self.languageLayout.setMargin(0) self.languageLayout.setSpacing(6) self.languageLayout.setObjectName("languageLayout") self.languageLabel = QLabel(self.trUtf8("Select language file"), self.cw) self.languageLabel.setObjectName("languageLabel") self.languageLayout.addWidget(self.languageLabel) self.languageCombo = QComboBox(self.cw) self.languageCombo.setObjectName("languageCombo") self.languageCombo.setEditable(False) self.languageCombo.setToolTip(self.trUtf8("Select language file")) self.languageLayout.addWidget(self.languageCombo) languageSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.languageLayout.addItem(languageSpacer) self.TRPreviewerLayout.addLayout(self.languageLayout) self.preview = WidgetWorkspace(self.cw) self.preview.setObjectName("preview") self.TRPreviewerLayout.addWidget(self.preview) self.connect(self.preview, SIGNAL('lastWidgetClosed'), self.__updateActions) self.setCentralWidget(self.cw) self.connect(self.languageCombo,SIGNAL("activated(const QString&)"), self.setTranslation) self.translations = TranslationsDict(self.languageCombo, self) self.connect(self.translations, SIGNAL('translationChanged'), self.preview, SIGNAL('rebuildWidgets')) self.__initActions() self.__initMenus() self.__initToolbars() self.__updateActions() # fire up the single application server self.SAServer = TRSingleApplicationServer(self) self.connect(self.SAServer, SIGNAL('loadForm'), self.preview.loadWidget) self.connect(self.SAServer, SIGNAL('loadTranslation'), self.translations.add) # defere loading of a UI file until we are shown self.filesToLoad = filenames[:]
class TRPreviewer(KQMainWindow): """ Class implementing the UI Previewer main window. """ def __init__(self, filenames = [], parent = None, name = None): """ Constructor @param filenames filenames of form and/or translation files to load @param parent parent widget of this window (QWidget) @param name name of this window (string or QString) """ self.mainWidget = None self.currentFile = QDir.currentPath() KQMainWindow.__init__(self, parent) if not name: self.setObjectName("TRPreviewer") else: self.setObjectName(name) self.resize(QSize(800, 600).expandedTo(self.minimumSizeHint())) self.setAttribute(Qt.WA_DeleteOnClose) self.statusBar() self.setWindowIcon(UI.PixmapCache.getIcon("eric.png")) self.setWindowTitle(self.trUtf8("Translations Previewer")) self.cw = QWidget(self) self.cw.setObjectName("qt_central_widget") self.TRPreviewerLayout = QVBoxLayout(self.cw) self.TRPreviewerLayout.setMargin(6) self.TRPreviewerLayout.setSpacing(6) self.TRPreviewerLayout.setObjectName("TRPreviewerLayout") self.languageLayout = QHBoxLayout() self.languageLayout.setMargin(0) self.languageLayout.setSpacing(6) self.languageLayout.setObjectName("languageLayout") self.languageLabel = QLabel(self.trUtf8("Select language file"), self.cw) self.languageLabel.setObjectName("languageLabel") self.languageLayout.addWidget(self.languageLabel) self.languageCombo = QComboBox(self.cw) self.languageCombo.setObjectName("languageCombo") self.languageCombo.setEditable(False) self.languageCombo.setToolTip(self.trUtf8("Select language file")) self.languageLayout.addWidget(self.languageCombo) languageSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.languageLayout.addItem(languageSpacer) self.TRPreviewerLayout.addLayout(self.languageLayout) self.preview = WidgetWorkspace(self.cw) self.preview.setObjectName("preview") self.TRPreviewerLayout.addWidget(self.preview) self.connect(self.preview, SIGNAL('lastWidgetClosed'), self.__updateActions) self.setCentralWidget(self.cw) self.connect(self.languageCombo,SIGNAL("activated(const QString&)"), self.setTranslation) self.translations = TranslationsDict(self.languageCombo, self) self.connect(self.translations, SIGNAL('translationChanged'), self.preview, SIGNAL('rebuildWidgets')) self.__initActions() self.__initMenus() self.__initToolbars() self.__updateActions() # fire up the single application server self.SAServer = TRSingleApplicationServer(self) self.connect(self.SAServer, SIGNAL('loadForm'), self.preview.loadWidget) self.connect(self.SAServer, SIGNAL('loadTranslation'), self.translations.add) # defere loading of a UI file until we are shown self.filesToLoad = filenames[:] def show(self): """ Public slot to show this dialog. This overloaded slot loads a UI file to be previewed after the main window has been shown. This way, previewing a dialog doesn't interfere with showing the main window. """ QMainWindow.show(self) if self.filesToLoad: filenames, self.filesToLoad = (self.filesToLoad[:], []) first = True for fn in filenames: fi = QFileInfo(fn) if fi.suffix().toLower().compare('ui') == 0: self.preview.loadWidget(fn) elif fi.suffix().toLower().compare('qm') == 0: self.translations.add(fn, first) first = False self.__updateActions() def closeEvent(self, event): """ Private event handler for the close event. @param event close event (QCloseEvent) """ if self.SAServer is not None: self.SAServer.shutdown() self.SAServer = None event.accept() def __initActions(self): """ Private method to define the user interface actions. """ self.openUIAct = QAction(UI.PixmapCache.getIcon("openUI.png"), self.trUtf8('&Open UI Files...'), self) self.openUIAct.setStatusTip(self.trUtf8('Open UI files for display')) self.openUIAct.setWhatsThis(self.trUtf8( """<b>Open UI Files</b>""" """<p>This opens some UI files for display.</p>""" )) self.connect(self.openUIAct, SIGNAL('triggered()'), self.__openWidget) self.openQMAct = QAction(UI.PixmapCache.getIcon("openQM.png"), self.trUtf8('Open &Translation Files...'), self) self.openQMAct.setStatusTip(self.trUtf8('Open Translation files for display')) self.openQMAct.setWhatsThis(self.trUtf8( """<b>Open Translation Files</b>""" """<p>This opens some translation files for display.</p>""" )) self.connect(self.openQMAct, SIGNAL('triggered()'), self.__openTranslation) self.reloadAct = QAction(UI.PixmapCache.getIcon("reload.png"), self.trUtf8('&Reload Translations'), self) self.reloadAct.setStatusTip(self.trUtf8('Reload the loaded translations')) self.reloadAct.setWhatsThis(self.trUtf8( """<b>Reload Translations</b>""" """<p>This reloads the translations for the loaded languages.</p>""" )) self.connect(self.reloadAct, SIGNAL('triggered()'), self.translations.reload) self.exitAct = QAction(UI.PixmapCache.getIcon("exit.png"), self.trUtf8('&Quit'), self) self.exitAct.setShortcut(QKeySequence(self.trUtf8("Ctrl+Q","File|Quit"))) self.exitAct.setStatusTip(self.trUtf8('Quit the application')) self.exitAct.setWhatsThis(self.trUtf8( """<b>Quit</b>""" """<p>Quit the application.</p>""" )) self.connect(self.exitAct, SIGNAL('triggered()'), qApp, SLOT('closeAllWindows()')) self.whatsThisAct = QAction(UI.PixmapCache.getIcon("whatsThis.png"), self.trUtf8('&What\'s This?'), self) self.whatsThisAct.setShortcut(QKeySequence(self.trUtf8("Shift+F1"))) self.whatsThisAct.setStatusTip(self.trUtf8('Context sensitive help')) self.whatsThisAct.setWhatsThis(self.trUtf8( """<b>Display context sensitive help</b>""" """<p>In What's This? mode, the mouse cursor shows an arrow with a""" """ question mark, and you can click on the interface elements to get""" """ a short description of what they do and how to use them. In""" """ dialogs, this feature can be accessed using the context help""" """ button in the titlebar.</p>""" )) self.connect(self.whatsThisAct,SIGNAL('triggered()'),self.__whatsThis) self.aboutAct = QAction(self.trUtf8('&About'), self) self.aboutAct.setStatusTip(self.trUtf8('Display information about this software')) self.aboutAct.setWhatsThis(self.trUtf8( """<b>About</b>""" """<p>Display some information about this software.</p>""" )) self.connect(self.aboutAct,SIGNAL('triggered()'),self.__about) self.aboutQtAct = QAction(self.trUtf8('About &Qt'), self) self.aboutQtAct.setStatusTip(\ self.trUtf8('Display information about the Qt toolkit')) self.aboutQtAct.setWhatsThis(self.trUtf8( """<b>About Qt</b>""" """<p>Display some information about the Qt toolkit.</p>""" )) self.connect(self.aboutQtAct,SIGNAL('triggered()'),self.__aboutQt) self.tileAct = QAction(self.trUtf8('&Tile'), self) self.tileAct.setStatusTip(self.trUtf8('Tile the windows')) self.tileAct.setWhatsThis(self.trUtf8( """<b>Tile the windows</b>""" """<p>Rearrange and resize the windows so that they are tiled.</p>""" )) self.connect(self.tileAct, SIGNAL('triggered()'),self.preview.tile) self.cascadeAct = QAction(self.trUtf8('&Cascade'), self) self.cascadeAct.setStatusTip(self.trUtf8('Cascade the windows')) self.cascadeAct.setWhatsThis(self.trUtf8( """<b>Cascade the windows</b>""" """<p>Rearrange and resize the windows so that they are cascaded.</p>""" )) self.connect(self.cascadeAct, SIGNAL('triggered()'),self.preview.cascade) self.closeAct = QAction(UI.PixmapCache.getIcon("close.png"), self.trUtf8('&Close'), self) self.closeAct.setShortcut(QKeySequence(self.trUtf8("Ctrl+W","File|Close"))) self.closeAct.setStatusTip(self.trUtf8('Close the current window')) self.closeAct.setWhatsThis(self.trUtf8( """<b>Close Window</b>""" """<p>Close the current window.</p>""" )) self.connect(self.closeAct, SIGNAL('triggered()'),self.preview.closeWidget) self.closeAllAct = QAction(self.trUtf8('Clos&e All'), self) self.closeAllAct.setStatusTip(self.trUtf8('Close all windows')) self.closeAllAct.setWhatsThis(self.trUtf8( """<b>Close All Windows</b>""" """<p>Close all windows.</p>""" )) self.connect(self.closeAllAct, SIGNAL('triggered()'), self.preview.closeAllWidgets) def __initMenus(self): """ Private method to create the menus. """ mb = self.menuBar() menu = mb.addMenu(self.trUtf8('&File')) menu.setTearOffEnabled(True) menu.addAction(self.openUIAct) menu.addAction(self.openQMAct) menu.addAction(self.reloadAct) menu.addSeparator() menu.addAction(self.closeAct) menu.addAction(self.closeAllAct) menu.addSeparator() menu.addAction(self.exitAct) self.windowMenu = mb.addMenu(self.trUtf8('&Window')) self.windowMenu.setTearOffEnabled(True) self.connect(self.windowMenu, SIGNAL('aboutToShow()'), self.__showWindowMenu) self.connect(self.windowMenu, SIGNAL('triggered(QAction *)'), self.preview.toggleSelectedWidget) mb.addSeparator() menu = mb.addMenu(self.trUtf8('&Help')) menu.setTearOffEnabled(True) menu.addAction(self.aboutAct) menu.addAction(self.aboutQtAct) menu.addSeparator() menu.addAction(self.whatsThisAct) def __initToolbars(self): """ Private method to create the toolbars. """ filetb = self.addToolBar(self.trUtf8("File")) filetb.setIconSize(UI.Config.ToolBarIconSize) filetb.addAction(self.openUIAct) filetb.addAction(self.openQMAct) filetb.addAction(self.reloadAct) filetb.addSeparator() filetb.addAction(self.closeAct) filetb.addSeparator() filetb.addAction(self.exitAct) helptb = self.addToolBar(self.trUtf8("Help")) helptb.setIconSize(UI.Config.ToolBarIconSize) helptb.addAction(self.whatsThisAct) def __whatsThis(self): """ Private slot called in to enter Whats This mode. """ QWhatsThis.enterWhatsThisMode() def __updateActions(self): """ Private slot to update the actions state. """ if self.preview.hasWidgets(): self.closeAct.setEnabled(True) self.closeAllAct.setEnabled(True) self.tileAct.setEnabled(True) self.cascadeAct.setEnabled(True) else: self.closeAct.setEnabled(False) self.closeAllAct.setEnabled(False) self.tileAct.setEnabled(False) self.cascadeAct.setEnabled(False) if self.translations.hasTranslations(): self.reloadAct.setEnabled(True) else: self.reloadAct.setEnabled(False) def __about(self): """ Private slot to show the about information. """ KQMessageBox.about(self, self.trUtf8("TR Previewer"), self.trUtf8( """<h3> About TR Previewer </h3>""" """<p>The TR Previewer loads and displays Qt User-Interface files""" """ and translation files and shows dialogs for a selected language.</p>""" )) def __aboutQt(self): """ Private slot to show info about Qt. """ QMessageBox.aboutQt(self, self.trUtf8("TR Previewer")) def __openWidget(self): """ Private slot to handle the Open Dialog action. """ fileNameList = KQFileDialog.getOpenFileNames(\ None, self.trUtf8("Select UI files"), QString(), self.trUtf8("Qt User-Interface Files (*.ui)")) for fileName in fileNameList: self.preview.loadWidget(fileName) self.__updateActions() def __openTranslation(self): """ Private slot to handle the Open Translation action. """ fileNameList = KQFileDialog.getOpenFileNames(\ None, self.trUtf8("Select translation files"), QString(), self.trUtf8("Qt Translation Files (*.qm)")) first = True for fileName in fileNameList: self.translations.add(fileName, first) first = False self.__updateActions() def setTranslation(self, name): """ Public slot to activate a translation. @param name name (language) of the translation (string or QString) """ self.translations.set(name) def __showWindowMenu(self): """ Private slot to handle the aboutToShow signal of the window menu. """ self.windowMenu.clear() self.windowMenu.addAction(self.tileAct) self.windowMenu.addAction(self.cascadeAct) self.windowMenu.addSeparator() self.preview.showWindowMenu(self.windowMenu) def reloadTranslations(self): """ Public slot to reload all translations. """ self.translations.reload()