//============================================================================= // // File : OptionsWidgetContainer.cpp // Creation date : Wed Nov 21 17:09:49 2001 GMT by Szymon Stefanek // // This file is part of the KVIrc IRC client distribution // Copyright (C) 2001-2010 Szymon Stefanek (pragma at kvirc dot net) // // 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. // //============================================================================= #include "OptionsWidgetContainer.h" #include "OptionsInstanceManager.h" #include "KviLocale.h" #include "KviIconManager.h" #include "KviApplication.h" #include "KviMainWindow.h" #include "KviTalToolTip.h" #include #include #include #include #include #include #include extern OptionsInstanceManager * g_pOptionsInstanceManager; OptionsWidgetContainer::OptionsWidgetContainer(QWidget * par, bool bModal) : QDialog(par) { m_pLayout = new QGridLayout(this); setObjectName("container"); m_pOptionsWidget = NULL; if(bModal) setWindowModality(par ? Qt::WindowModal : Qt::ApplicationModal); } OptionsWidgetContainer::~OptionsWidgetContainer() { if(m_pOptionsWidget) delete m_pOptionsWidget; } void OptionsWidgetContainer::setLeftCornerWidget(QWidget * pWidget) { if(!pWidget) return; m_pLayout->addWidget(pWidget, 1, 0); } void OptionsWidgetContainer::setNextToLeft(QWidget * pWidget) { if(!pWidget) return; m_pLayout->addWidget(pWidget, 2, 0); } void OptionsWidgetContainer::optionsWidgetDestroyed() { m_pOptionsWidget = NULL; } void OptionsWidgetContainer::childEvent(QChildEvent * e) { // This handles reparents which may happen when // options.edit and options.dialog are used without closing // the corresponding widgets. if(m_pOptionsWidget && (e->type() == QEvent::ChildRemoved)) { if(e->child() == static_cast(m_pOptionsWidget)) { QObject::disconnect(m_pOptionsWidget, SIGNAL(destroyed()), this, SLOT(optionsWidgetDestroyed())); m_pOptionsWidget = NULL; } } QWidget::childEvent(e); } void OptionsWidgetContainer::setup(KviOptionsWidget * w) { if(m_pOptionsWidget) QObject::disconnect(m_pOptionsWidget, SIGNAL(destroyed()), this, SLOT(optionsWidgetDestroyed())); m_pLayout->addWidget(w, 0, 0, 1, 3); //g->addMultiCellWidget(w,0,0,0,2); QPushButton * b = new QPushButton(__tr2qs_ctx("&OK", "options"), this); KviTalToolTip::add(b, __tr2qs_ctx("Close this dialog, accepting all changes.", "options")); //b->setMinimumWidth(m_pCancel->sizeHint().width()); m_pLayout->addWidget(b, 1, 1); b->setDefault(true); connect(b, SIGNAL(clicked()), this, SLOT(okClicked())); b->setIcon(*(g_pIconManager->getSmallIcon(KviIconManager::Accept))); m_pCancel = new QPushButton(__tr2qs_ctx("Cancel", "options"), this); KviTalToolTip::add(m_pCancel, __tr2qs_ctx("Close this dialog, discarding all changes.", "options")); m_pLayout->addWidget(m_pCancel, 1, 2); connect(m_pCancel, SIGNAL(clicked()), this, SLOT(cancelClicked())); m_pCancel->setIcon(*(g_pIconManager->getSmallIcon(KviIconManager::Discard))); m_pLayout->setRowStretch(0, 1); m_pLayout->setColumnStretch(0, 1); OptionsWidgetInstanceEntry * e = g_pOptionsInstanceManager->findInstanceEntry(w->metaObject()->className()); if(e) { setWindowIcon(QIcon(*(g_pIconManager->getSmallIcon(e->eIcon)))); setWindowTitle(e->szName); } m_pOptionsWidget = w; if(m_pOptionsWidget) QObject::connect(m_pOptionsWidget, SIGNAL(destroyed()), this, SLOT(optionsWidgetDestroyed())); } void OptionsWidgetContainer::closeEvent(QCloseEvent * e) { e->ignore(); cancelClicked(); } void OptionsWidgetContainer::showEvent(QShowEvent * e) { if(!parent()) { QRect rect = g_pApp->desktop()->screenGeometry(g_pMainWindow); move(rect.x() + ((rect.width() - width()) / 2), rect.y() + ((rect.height() - height()) / 2)); } QWidget::showEvent(e); m_pCancel->setFocus(); } void OptionsWidgetContainer::reject() { cancelClicked(); } void OptionsWidgetContainer::okClicked() { if(m_pOptionsWidget) m_pOptionsWidget->commit(); g_pApp->saveOptions(); delete this; } void OptionsWidgetContainer::cancelClicked() { deleteLater(); }