/*************************************************************************** * Copyright (c) 2004 Werner Mayer * * * * This file is part of the FreeCAD CAx development system. * * * * 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., 59 Temple Place, * * Suite 330, Boston, MA 02111-1307, USA * * * ***************************************************************************/ #include "PreCompiled.h" #include "PropertyPage.h" #include "PrefWidgets.h" #include "WidgetFactory.h" #include using namespace Gui::Dialog; /** Construction */ PropertyPage::PropertyPage(QWidget* parent) : QWidget(parent) { bChanged = false; } /** Destruction */ PropertyPage::~PropertyPage() { } /** Applies all changes. Reimplement this in your subclasses. */ void PropertyPage::apply() { } /** Discards all changes. Reimplement this in your subclasses. */ void PropertyPage::cancel() { } /** Resets to the default values. Reimplement this in your subclasses. */ void PropertyPage::reset() { } /** Returns whether the page was modified or not. */ bool PropertyPage::isModified() { return bChanged; } /** Sets the page to be modified. */ void PropertyPage::setModified(bool b) { bChanged = b; } /** Applies all changes calling @ref apply() and resets the modified state. */ void PropertyPage::onApply() { if (isModified()) apply(); setModified(false); } /** Discards all changes calling @ref cancel() and resets the modified state. */ void PropertyPage::onCancel() { if (isModified()) { cancel(); setModified(false); } } /** Resets to the default values. */ void PropertyPage::onReset() { reset(); } // ---------------------------------------------------------------- /** Construction */ PreferencePage::PreferencePage(QWidget* parent) : QWidget(parent) { } /** Destruction */ PreferencePage::~PreferencePage() { } void PreferencePage::changeEvent(QEvent *e) { QWidget::changeEvent(e); } // ---------------------------------------------------------------- PreferenceUiForm::PreferenceUiForm(const QString& fn, QWidget* parent) : PreferencePage(parent), form(0) { UiLoader loader; #if QT_VERSION >= 0x040500 loader.setLanguageChangeEnabled(true); #endif QFile file(fn); if (file.open(QFile::ReadOnly)) form = loader.load(&file, this); file.close(); if (form) { this->setWindowTitle(form->windowTitle()); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(form); setLayout(layout); } else { Base::Console().Error("Failed to load UI file from '%s'\n", (const char*)fn.toUtf8()); } } PreferenceUiForm::~PreferenceUiForm() { } void PreferenceUiForm::changeEvent(QEvent *e) { QWidget::changeEvent(e); } template void PreferenceUiForm::loadPrefWidgets(void) { QList pw = form->findChildren(); for (typename QList::iterator it = pw.begin(); it != pw.end(); ++it) (*it)->onRestore(); } template void PreferenceUiForm::savePrefWidgets(void) { QList pw = form->findChildren(); for (typename QList::iterator it = pw.begin(); it != pw.end(); ++it) (*it)->onSave(); } void PreferenceUiForm::loadSettings() { if (!form) return; // search for all pref widgets to restore their settings loadPrefWidgets(); loadPrefWidgets(); loadPrefWidgets(); loadPrefWidgets(); loadPrefWidgets(); loadPrefWidgets(); loadPrefWidgets(); loadPrefWidgets(); loadPrefWidgets(); } void PreferenceUiForm::saveSettings() { if (!form) return; // search for all pref widgets to save their settings savePrefWidgets(); savePrefWidgets(); savePrefWidgets(); savePrefWidgets(); savePrefWidgets(); savePrefWidgets(); savePrefWidgets(); savePrefWidgets(); savePrefWidgets(); } // ---------------------------------------------------------------- /** Construction */ CustomizeActionPage::CustomizeActionPage(QWidget* parent) : QWidget(parent) { } /** Destruction */ CustomizeActionPage::~CustomizeActionPage() { } bool CustomizeActionPage::event(QEvent* e) { bool ok = QWidget::event(e); if (e->type() == QEvent::ParentChange || e->type() == QEvent::ParentAboutToChange) { QWidget* topLevel = this->parentWidget(); while (topLevel && !topLevel->inherits("QDialog")) topLevel = topLevel->parentWidget(); if (topLevel) { int index = topLevel->metaObject()->indexOfSignal( QMetaObject::normalizedSignature("addMacroAction(const QByteArray&)") ); if (index >= 0) { if (e->type() == QEvent::ParentChange) { connect(topLevel, SIGNAL(addMacroAction( const QByteArray& )), this, SLOT(onAddMacroAction( const QByteArray& ))); connect(topLevel, SIGNAL(removeMacroAction( const QByteArray& )), this, SLOT(onRemoveMacroAction( const QByteArray& ))); connect(topLevel, SIGNAL(modifyMacroAction( const QByteArray& )), this, SLOT(onModifyMacroAction( const QByteArray& ))); } else { disconnect(topLevel, SIGNAL(addMacroAction( const QByteArray& )), this, SLOT(onAddMacroAction( const QByteArray& ))); disconnect(topLevel, SIGNAL(removeMacroAction( const QByteArray& )), this, SLOT(onRemoveMacroAction( const QByteArray& ))); disconnect(topLevel, SIGNAL(modifyMacroAction( const QByteArray& )), this, SLOT(onModifyMacroAction( const QByteArray& ))); } } } } return ok; } void CustomizeActionPage::changeEvent(QEvent *e) { QWidget::changeEvent(e); } #include "moc_PropertyPage.cpp"