/* This file is part of the KDE project Copyright (C) 1999 Simon Hausmann (C) 1999 David Faure This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "mainwindow.h" #include #include #include #include #include #include #include #include #include #include #include #include using namespace KParts; namespace KParts { class MainWindowPrivate { public: MainWindowPrivate() : m_activePart(nullptr), m_bShellGUIActivated(false), m_helpMenu(nullptr) { } QPointer m_activePart; bool m_bShellGUIActivated; KHelpMenu *m_helpMenu; }; } MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags f) : KXmlGuiWindow(parent, f), d(new MainWindowPrivate()) { } MainWindow::~MainWindow() { delete d; } void MainWindow::createGUI(Part *part) { #if 0 kDebug() << "part=" << part << ( part ? part->metaObject()->className() : "" ) << ( part ? part->objectName() : "" ); #endif KXMLGUIFactory *factory = guiFactory(); assert(factory); if (d->m_activePart) { #if 0 kDebug() << "deactivating GUI for" << d->m_activePart << d->m_activePart->metaObject()->className() << d->m_activePart->objectName(); #endif GUIActivateEvent ev(false); QApplication::sendEvent(d->m_activePart, &ev); factory->removeClient( d->m_activePart ); disconnect( d->m_activePart, SIGNAL(setWindowCaption(QString)), this, SLOT(setCaption(QString)) ); disconnect( d->m_activePart, SIGNAL(setStatusBarText(QString)), this, SLOT(slotSetStatusBarText(QString)) ); } if (!d->m_bShellGUIActivated) { createShellGUI(); d->m_bShellGUIActivated = true; } if (part) { // do this before sending the activate event connect( part, SIGNAL(setWindowCaption(QString)), this, SLOT(setCaption(QString)) ); connect( part, SIGNAL(setStatusBarText(QString)), this, SLOT(slotSetStatusBarText(QString)) ); factory->addClient(part); GUIActivateEvent ev(true); QApplication::sendEvent(part, &ev); } d->m_activePart = part; } void MainWindow::slotSetStatusBarText(const QString &text) { statusBar()->showMessage(text); } void MainWindow::createShellGUI(bool create) { assert(d->m_bShellGUIActivated != create); d->m_bShellGUIActivated = create; if (create) { if (isHelpMenuEnabled() && !d->m_helpMenu) { d->m_helpMenu = new KHelpMenu(this, componentData().aboutData(), true, actionCollection()); } QString f = xmlFile(); setXMLFile( KStandardDirs::locate("config", "ui/ui_standards.rc", componentData())); if (!f.isEmpty()) { setXMLFile(f, true); } else { QString auto_file(componentData().componentName() + "ui.rc"); setXMLFile(auto_file, true); } GUIActivateEvent ev(true); QApplication::sendEvent(this, &ev); guiFactory()->addClient(this); } else { GUIActivateEvent ev(false); QApplication::sendEvent(this, &ev); guiFactory()->removeClient(this); } } bool MainWindow::queryClose() { // query part first ReadWritePart* rwpart = qobject_cast(d->m_activePart); if (rwpart && !rwpart->queryClose()) { return false; } // then KXmlGuiWindow return KXmlGuiWindow::queryClose(); } void KParts::MainWindow::saveNewToolbarConfig() { createGUI(d->m_activePart); KConfigGroup cg(KGlobal::config(), QString()); applyMainWindowSettings(cg); } #include "moc_mainwindow.cpp"