diff --git a/src/Mod/Sketcher/Gui/SketcherSettings.cpp b/src/Mod/Sketcher/Gui/SketcherSettings.cpp index f9c158c22..adf0b74a4 100644 --- a/src/Mod/Sketcher/Gui/SketcherSettings.cpp +++ b/src/Mod/Sketcher/Gui/SketcherSettings.cpp @@ -28,6 +28,7 @@ #include "SketcherSettings.h" #include "ui_SketcherSettings.h" +#include "TaskSketcherGeneral.h" #include using namespace SketcherGui; @@ -38,6 +39,8 @@ SketcherSettings::SketcherSettings(QWidget* parent) : PreferencePage(parent), ui(new Ui_SketcherSettings) { ui->setupUi(this); + form = new SketcherGeneralWidget(ui->groupBox); + ui->gridLayout->addWidget(form, 1, 0, 1, 1); } /** @@ -46,6 +49,7 @@ SketcherSettings::SketcherSettings(QWidget* parent) SketcherSettings::~SketcherSettings() { // no need to delete child widgets, Qt does it all for us + delete ui; } void SketcherSettings::saveSettings() @@ -69,6 +73,7 @@ void SketcherSettings::saveSettings() // Sketch editing ui->EditSketcherFontSize->onSave(); + form->saveSettings(); } void SketcherSettings::loadSettings() @@ -92,6 +97,7 @@ void SketcherSettings::loadSettings() // Sketch editing ui->EditSketcherFontSize->onRestore(); + form->loadSettings(); } /** diff --git a/src/Mod/Sketcher/Gui/SketcherSettings.h b/src/Mod/Sketcher/Gui/SketcherSettings.h index a9f428e6a..5f4d85bca 100644 --- a/src/Mod/Sketcher/Gui/SketcherSettings.h +++ b/src/Mod/Sketcher/Gui/SketcherSettings.h @@ -28,6 +28,7 @@ namespace SketcherGui { class Ui_SketcherSettings; +class SketcherGeneralWidget; /** * The SketcherSettings class implements a preference page to change sketcher settings. * @author Werner Mayer @@ -48,6 +49,7 @@ protected: private: Ui_SketcherSettings* ui; + SketcherGeneralWidget* form; }; } // namespace SketcherGui diff --git a/src/Mod/Sketcher/Gui/TaskSketcherGeneral.cpp b/src/Mod/Sketcher/Gui/TaskSketcherGeneral.cpp index e15aaa319..2c9fcb32c 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherGeneral.cpp +++ b/src/Mod/Sketcher/Gui/TaskSketcherGeneral.cpp @@ -40,57 +40,28 @@ using namespace SketcherGui; using namespace Gui::TaskView; -TaskSketcherGeneral::TaskSketcherGeneral(ViewProviderSketch *sketchView) - : TaskBox(Gui::BitmapFactory().pixmap("document-new"),tr("Edit controls"),true, 0) - , sketchView(sketchView) +SketcherGeneralWidget::SketcherGeneralWidget(QWidget *parent) + : QWidget(parent), ui(new Ui_TaskSketcherGeneral) { - // we need a separate container widget to add all controls to - proxy = new QWidget(this); - ui = new Ui_TaskSketcherGeneral(); - ui->setupUi(proxy); - QMetaObject::connectSlotsByName(this); - - this->groupLayout()->addWidget(proxy); + ui->setupUi(this); // connecting the needed signals - QObject::connect( - ui->checkBoxShowGrid, SIGNAL(toggled(bool)), - this , SLOT(toggleGridView(bool)) - ); - QObject::connect( - ui->checkBoxGridSnap, SIGNAL(stateChanged(int)), - this , SLOT (toggleGridSnap(int)) - ); - - QObject::connect( - ui->comboBoxGridSize, SIGNAL(currentIndexChanged(QString)), - this , SLOT (setGridSize(QString)) - ); - - QObject::connect( - ui->checkBoxAutoconstraints, SIGNAL(stateChanged(int)), - this , SLOT (toggleAutoconstraints(int)) - ); - - Gui::Selection().Attach(this); - - Base::Reference hGrp = App::GetApplication().GetUserParameter() - .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/Sketcher/General"); - ui->checkBoxShowGrid->setChecked(hGrp->GetBool("ShowGrid", true)); - - fillGridCombo(); - QString size = ui->comboBoxGridSize->currentText(); - size = QString::fromAscii(hGrp->GetASCII("GridSize", (const char*)size.toAscii()).c_str()); - int it = ui->comboBoxGridSize->findText(size); - if(it != -1) - ui->comboBoxGridSize->setCurrentIndex(it); - - ui->checkBoxGridSnap->setChecked(hGrp->GetBool("GridSnap", ui->checkBoxGridSnap->isChecked())); - ui->checkBoxAutoconstraints->setChecked(hGrp->GetBool("AutoConstraints", ui->checkBoxAutoconstraints->isChecked())); + connect(ui->checkBoxShowGrid, SIGNAL(toggled(bool)), + this, SLOT(toggleGridView(bool))); + connect(ui->checkBoxGridSnap, SIGNAL(stateChanged(int)), + this, SLOT(toggleGridSnap(int))); + connect(ui->comboBoxGridSize, SIGNAL(currentIndexChanged(QString)), + this, SLOT(setGridSize(QString))); + connect(ui->checkBoxAutoconstraints, SIGNAL(stateChanged(int)), + this, SIGNAL(emitToggleAutoconstraints(int))); } +SketcherGeneralWidget::~SketcherGeneralWidget() +{ + delete ui; +} -TaskSketcherGeneral::~TaskSketcherGeneral() +void SketcherGeneralWidget::saveSettings() { Base::Reference hGrp = App::GetApplication().GetUserParameter() .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/Sketcher/General"); @@ -101,14 +72,27 @@ TaskSketcherGeneral::~TaskSketcherGeneral() hGrp->SetBool("GridSnap", ui->checkBoxGridSnap->isChecked()); hGrp->SetBool("AutoConstraints", ui->checkBoxAutoconstraints->isChecked()); - - delete ui; - Gui::Selection().Detach(this); } -void TaskSketcherGeneral::fillGridCombo(void) +void SketcherGeneralWidget::loadSettings() { - if(Base::UnitsApi::getSchema() == Base::Imperial1 ){ + Base::Reference hGrp = App::GetApplication().GetUserParameter() + .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/Sketcher/General"); + ui->checkBoxShowGrid->setChecked(hGrp->GetBool("ShowGrid", true)); + + fillGridCombo(); + QString size = ui->comboBoxGridSize->currentText(); + size = QString::fromAscii(hGrp->GetASCII("GridSize", (const char*)size.toAscii()).c_str()); + int it = ui->comboBoxGridSize->findText(size); + if (it != -1) ui->comboBoxGridSize->setCurrentIndex(it); + + ui->checkBoxGridSnap->setChecked(hGrp->GetBool("GridSnap", ui->checkBoxGridSnap->isChecked())); + ui->checkBoxAutoconstraints->setChecked(hGrp->GetBool("AutoConstraints", ui->checkBoxAutoconstraints->isChecked())); +} + +void SketcherGeneralWidget::fillGridCombo(void) +{ + if (Base::UnitsApi::getSchema() == Base::Imperial1) { ui->comboBoxGridSize->addItem(QString::fromUtf8("1/1000 [thou] \"")); ui->comboBoxGridSize->addItem(QString::fromUtf8("1/128 \"")); ui->comboBoxGridSize->addItem(QString::fromUtf8("1/100 \"")); @@ -134,7 +118,8 @@ void TaskSketcherGeneral::fillGridCombo(void) ui->comboBoxGridSize->addItem(QString::fromUtf8("3960 \" [half furlong]")); ui->comboBoxGridSize->setCurrentIndex(ui->comboBoxGridSize->findText(QString::fromUtf8("1/4 \""))); - }else{ + } + else { ui->comboBoxGridSize->addItem(QString::fromUtf8("1 \xC2\xB5m")); ui->comboBoxGridSize->addItem(QString::fromUtf8("2 \xC2\xB5m")); ui->comboBoxGridSize->addItem(QString::fromUtf8("5 \xC2\xB5m")); @@ -163,16 +148,79 @@ void TaskSketcherGeneral::fillGridCombo(void) ui->comboBoxGridSize->addItem(QString::fromUtf8("200 m")); ui->comboBoxGridSize->addItem(QString::fromUtf8("500 m")); - ui->comboBoxGridSize->setCurrentIndex(ui->comboBoxGridSize->findText(QString::fromUtf8("10 mm"))); } } -void TaskSketcherGeneral::toggleGridView(bool on) +void SketcherGeneralWidget::toggleGridView(bool on) { ui->label->setEnabled(on); ui->comboBoxGridSize->setEnabled(on); ui->checkBoxGridSnap->setEnabled(on); + emitToggleGridView(on); +} + +void SketcherGeneralWidget::setGridSize(const QString& val) +{ + emitSetGridSize(val); +} + +void SketcherGeneralWidget::toggleGridSnap(int state) +{ + setGridSize(ui->comboBoxGridSize->currentText()); // Ensure consistency + emitToggleGridSnap(state); +} + +void SketcherGeneralWidget::changeEvent(QEvent *e) +{ + QWidget::changeEvent(e); + if (e->type() == QEvent::LanguageChange) { + ui->retranslateUi(this); + } +} + +// ---------------------------------------------------------------------------- + +TaskSketcherGeneral::TaskSketcherGeneral(ViewProviderSketch *sketchView) + : TaskBox(Gui::BitmapFactory().pixmap("document-new"),tr("Edit controls"),true, 0) + , sketchView(sketchView) +{ + // we need a separate container widget to add all controls to + widget = new SketcherGeneralWidget(this); + this->groupLayout()->addWidget(widget); + + // connecting the needed signals + QObject::connect( + widget, SIGNAL(emitToggleGridView(bool)), + this , SLOT (toggleGridView(bool)) + ); + QObject::connect( + widget, SIGNAL(emitToggleGridSnap(int)), + this , SLOT (toggleGridSnap(int)) + ); + + QObject::connect( + widget, SIGNAL(emitSetGridSize(QString)), + this , SLOT (setGridSize(QString)) + ); + + QObject::connect( + widget, SIGNAL(emitToggleAutoconstraints(int)), + this , SLOT (toggleAutoconstraints(int)) + ); + + Gui::Selection().Attach(this); + widget->loadSettings(); +} + +TaskSketcherGeneral::~TaskSketcherGeneral() +{ + widget->saveSettings(); + Gui::Selection().Detach(this); +} + +void TaskSketcherGeneral::toggleGridView(bool on) +{ sketchView->ShowGrid.setValue(on); } @@ -185,7 +233,6 @@ void TaskSketcherGeneral::setGridSize(const QString& val) void TaskSketcherGeneral::toggleGridSnap(int state) { - setGridSize(ui->comboBoxGridSize->currentText()); // Ensure consistency sketchView->GridSnap.setValue(state == Qt::Checked); } @@ -194,14 +241,6 @@ void TaskSketcherGeneral::toggleAutoconstraints(int state) sketchView->Autoconstraints.setValue(state == Qt::Checked); } -void TaskSketcherGeneral::changeEvent(QEvent *e) -{ - TaskBox::changeEvent(e); - if (e->type() == QEvent::LanguageChange) { - ui->retranslateUi(proxy); - } -} - /// @cond DOXERR void TaskSketcherGeneral::OnChange(Gui::SelectionSingleton::SubjectType &rCaller, Gui::SelectionSingleton::MessageType Reason) diff --git a/src/Mod/Sketcher/Gui/TaskSketcherGeneral.h b/src/Mod/Sketcher/Gui/TaskSketcherGeneral.h index 6644e3883..ef0f34e73 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherGeneral.h +++ b/src/Mod/Sketcher/Gui/TaskSketcherGeneral.h @@ -37,7 +37,39 @@ namespace SketcherGui { class ViewProviderSketch; -class TaskSketcherGeneral : public Gui::TaskView::TaskBox, public Gui::SelectionSingleton::ObserverType +class SketcherGeneralWidget : public QWidget +{ + Q_OBJECT + +public: + SketcherGeneralWidget(QWidget *parent=0); + ~SketcherGeneralWidget(); + + void saveSettings(); + void loadSettings(); + +Q_SIGNALS: + void setGridSnap(int Type); + void emitToggleGridView(bool); + void emitToggleGridSnap(int); + void emitSetGridSize(const QString&); + void emitToggleAutoconstraints(int); + +public Q_SLOTS: + void toggleGridView(bool on); + void setGridSize(const QString& val); + void toggleGridSnap(int state); + +protected: + void changeEvent(QEvent *e); + void fillGridCombo(void); + +private: + Ui_TaskSketcherGeneral* ui; +}; + +class TaskSketcherGeneral : public Gui::TaskView::TaskBox, + public Gui::SelectionSingleton::ObserverType { Q_OBJECT @@ -57,15 +89,9 @@ public Q_SLOTS: void toggleGridSnap(int state); void toggleAutoconstraints(int state); -protected: - void changeEvent(QEvent *e); - - ViewProviderSketch *sketchView; - void fillGridCombo(void); - private: - QWidget* proxy; - Ui_TaskSketcherGeneral* ui; + ViewProviderSketch *sketchView; + SketcherGeneralWidget* widget; }; } //namespace SketcherGui