kdelibs/kparts/mainwindow.cpp

181 lines
4.6 KiB
C++
Raw Permalink Normal View History

2014-11-13 01:04:59 +02:00
/* This file is part of the KDE project
Copyright (C) 1999 Simon Hausmann <hausmann@kde.org>
(C) 1999 David Faure <faure@kde.org>
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 <kedittoolbar.h>
#include <kparts/event.h>
#include <kparts/part.h>
#include <kcomponentdata.h>
#include <kstatusbar.h>
#include <khelpmenu.h>
#include <kstandarddirs.h>
#include <QtGui/QApplication>
#include <kxmlguifactory.h>
#include <kconfiggroup.h>
#include <kdebug.h>
#include <assert.h>
using namespace KParts;
namespace KParts
{
class MainWindowPrivate
{
public:
MainWindowPrivate()
: m_activePart(nullptr),
m_bShellGUIActivated(false),
m_helpMenu(nullptr)
2014-11-13 01:04:59 +02:00
{
}
QPointer<Part> m_activePart;
bool m_bShellGUIActivated;
KHelpMenu *m_helpMenu;
};
}
MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags f)
: KXmlGuiWindow(parent, f),
d(new MainWindowPrivate())
2014-11-13 01:04:59 +02:00
{
}
MainWindow::~MainWindow()
{
delete d;
2014-11-13 01:04:59 +02:00
}
void MainWindow::createGUI(Part *part)
2014-11-13 01:04:59 +02:00
{
#if 0
kDebug() << "part=" << part
<< ( part ? part->metaObject()->className() : "" )
<< ( part ? part->objectName() : "" );
2014-11-13 01:04:59 +02:00
#endif
KXMLGUIFactory *factory = guiFactory();
2014-11-13 01:04:59 +02:00
assert(factory);
2014-11-13 01:04:59 +02:00
if (d->m_activePart) {
2014-11-13 01:04:59 +02:00
#if 0
kDebug() << "deactivating GUI for" << d->m_activePart
<< d->m_activePart->metaObject()->className()
<< d->m_activePart->objectName();
2014-11-13 01:04:59 +02:00
#endif
GUIActivateEvent ev(false);
QApplication::sendEvent(d->m_activePart, &ev);
2014-11-13 01:04:59 +02:00
factory->removeClient( d->m_activePart );
2014-11-13 01:04:59 +02:00
disconnect(
d->m_activePart, SIGNAL(setWindowCaption(QString)),
this, SLOT(setCaption(QString))
);
disconnect(
d->m_activePart, SIGNAL(setStatusBarText(QString)),
this, SLOT(slotSetStatusBarText(QString))
);
}
2014-11-13 01:04:59 +02:00
if (!d->m_bShellGUIActivated) {
createShellGUI();
d->m_bShellGUIActivated = true;
}
2014-11-13 01:04:59 +02:00
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);
}
2014-11-13 01:04:59 +02:00
d->m_activePart = part;
2014-11-13 01:04:59 +02:00
}
void MainWindow::slotSetStatusBarText(const QString &text)
2014-11-13 01:04:59 +02:00
{
statusBar()->showMessage(text);
2014-11-13 01:04:59 +02:00
}
void MainWindow::createShellGUI(bool create)
2014-11-13 01:04:59 +02:00
{
assert(d->m_bShellGUIActivated != create);
2014-11-13 01:04:59 +02:00
d->m_bShellGUIActivated = create;
if (create) {
if (isHelpMenuEnabled() && !d->m_helpMenu) {
d->m_helpMenu = new KHelpMenu(this, componentData().aboutData(), true, actionCollection());
}
2014-11-13 01:04:59 +02:00
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);
2014-11-13 01:04:59 +02:00
}
GUIActivateEvent ev(true);
QApplication::sendEvent(this, &ev);
2014-11-13 01:04:59 +02:00
guiFactory()->addClient(this);
} else {
GUIActivateEvent ev(false);
QApplication::sendEvent(this, &ev);
2014-11-13 01:04:59 +02:00
guiFactory()->removeClient(this);
2014-11-13 01:04:59 +02:00
}
}
bool MainWindow::queryClose()
{
// query part first
ReadWritePart* rwpart = qobject_cast<ReadWritePart*>(d->m_activePart);
if (rwpart && !rwpart->queryClose()) {
return false;
}
// then KXmlGuiWindow
return KXmlGuiWindow::queryClose();
}
2014-11-13 01:04:59 +02:00
void KParts::MainWindow::saveNewToolbarConfig()
{
createGUI(d->m_activePart);
KConfigGroup cg(KGlobal::config(), QString());
applyMainWindowSettings(cg);
}
#include "moc_mainwindow.cpp"