00001
00002
00003
00004
00005
00006
00007 #include "CmdMediator.h"
00008 #include "CmdSettingsGeneral.h"
00009 #include "DlgSettingsGeneral.h"
00010 #include "EngaugeAssert.h"
00011 #include "Logger.h"
00012 #include "MainWindow.h"
00013 #include <QComboBox>
00014 #include <QGraphicsScene>
00015 #include <QGridLayout>
00016 #include <QGroupBox>
00017 #include <QLabel>
00018 #include <qmath.h>
00019 #include <QPushButton>
00020 #include <QSettings>
00021 #include <QSpinBox>
00022 #include "Settings.h"
00023
00024 DlgSettingsGeneral::DlgSettingsGeneral(MainWindow &mainWindow) :
00025 DlgSettingsAbstractBase (tr ("General"),
00026 "DlgSettingsGeneral",
00027 mainWindow),
00028 m_modelGeneralBefore (0),
00029 m_modelGeneralAfter (0)
00030 {
00031 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsGeneral::DlgSettingsGeneral";
00032
00033 QWidget *subPanel = createSubPanel ();
00034 finishPanel (subPanel);
00035 }
00036
00037 DlgSettingsGeneral::~DlgSettingsGeneral()
00038 {
00039 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsGeneral::~DlgSettingsGeneral";
00040 }
00041
00042 void DlgSettingsGeneral::createControls (QGridLayout *layout,
00043 int &row)
00044 {
00045 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsGeneral::createControls";
00046
00047 QLabel *labelCursorSize = new QLabel (tr ("Effective cursor size (pixels):"));
00048 layout->addWidget (labelCursorSize, row, 1);
00049
00050 m_spinCursorSize = new QSpinBox;
00051 m_spinCursorSize->setMinimum (1);
00052 m_spinCursorSize->setWhatsThis (tr ("Effective Cursor Size\n\n"
00053 "This is the effective width and height of the cursor when clicking on a pixel that is "
00054 "not part of the background.\n\n"
00055 "This parameter is used in the Color Picker and Point Match modes"));
00056 connect (m_spinCursorSize, SIGNAL (valueChanged (int)), this, SLOT (slotCursorSize (int)));
00057 layout->addWidget (m_spinCursorSize, row++, 2);
00058
00059 QLabel *labelExtraPrecision = new QLabel (tr ("Extra precision (digits):"));
00060 layout->addWidget (labelExtraPrecision, row, 1);
00061
00062 m_spinExtraPrecision = new QSpinBox;
00063 m_spinExtraPrecision->setMinimum (0);
00064 m_spinExtraPrecision->setWhatsThis (tr ("Extra Digits of Precision\n\n"
00065 "This is the number of additional digits of precision appended after the significant "
00066 "digits determined by the digitization accuracy at that point. The digitization accuracy "
00067 "at any point equals the change in graph coordinates from moving one pixel in each direction. "
00068 "Appending extra digits does not improve the accuracy of the numbers. More information can "
00069 "be found in discussions of accuracy versus precision.\n\n"
00070 "This parameter is used on the coordinates in the Status Bar and during Export"));
00071 connect (m_spinExtraPrecision, SIGNAL (valueChanged (int)), this, SLOT (slotExtraPrecision (int)));
00072 layout->addWidget (m_spinExtraPrecision, row++, 2);
00073 }
00074
00075 void DlgSettingsGeneral::createOptionalSaveDefault (QHBoxLayout *layout)
00076 {
00077 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsGeneral::createOptionalSaveDefault";
00078
00079 m_btnSaveDefault = new QPushButton (tr ("Save As Default"));
00080 m_btnSaveDefault->setWhatsThis (tr ("Save the settings for use as future defaults, according to the curve name selection."));
00081 connect (m_btnSaveDefault, SIGNAL (released ()), this, SLOT (slotSaveDefault ()));
00082 layout->addWidget (m_btnSaveDefault, 0, Qt::AlignLeft);
00083 }
00084
00085 QWidget *DlgSettingsGeneral::createSubPanel ()
00086 {
00087 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsGeneral::createSubPanel";
00088
00089 QWidget *subPanel = new QWidget ();
00090 QGridLayout *layout = new QGridLayout (subPanel);
00091 subPanel->setLayout (layout);
00092
00093 layout->setColumnStretch(0, 1);
00094 layout->setColumnStretch(1, 0);
00095 layout->setColumnStretch(2, 0);
00096 layout->setColumnStretch(3, 1);
00097
00098 int row = 0;
00099 createControls (layout, row);
00100
00101 return subPanel;
00102 }
00103
00104 void DlgSettingsGeneral::handleOk ()
00105 {
00106 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsGeneral::handleOk";
00107
00108 CmdSettingsGeneral *cmd = new CmdSettingsGeneral (mainWindow (),
00109 cmdMediator ().document(),
00110 *m_modelGeneralBefore,
00111 *m_modelGeneralAfter);
00112 cmdMediator ().push (cmd);
00113
00114 hide ();
00115 }
00116
00117 void DlgSettingsGeneral::load (CmdMediator &cmdMediator)
00118 {
00119 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsGeneral::load";
00120
00121 setCmdMediator (cmdMediator);
00122
00123
00124 if (m_modelGeneralBefore != 0) {
00125 delete m_modelGeneralBefore;
00126 }
00127 if (m_modelGeneralAfter != 0) {
00128 delete m_modelGeneralAfter;
00129 }
00130
00131
00132 m_modelGeneralBefore = new DocumentModelGeneral (cmdMediator.document());
00133 m_modelGeneralAfter = new DocumentModelGeneral (cmdMediator.document());
00134
00135
00136 m_spinCursorSize->setValue (m_modelGeneralAfter->cursorSize());
00137 m_spinExtraPrecision->setValue (m_modelGeneralAfter->extraPrecision());
00138
00139 updateControls ();
00140 enableOk (false);
00141 }
00142
00143 void DlgSettingsGeneral::slotCursorSize (int cursorSize)
00144 {
00145 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsGeneral::slotCursorSize";
00146
00147 m_modelGeneralAfter->setCursorSize (cursorSize);
00148 updateControls();
00149 }
00150
00151 void DlgSettingsGeneral::slotExtraPrecision (int extraPrecision)
00152 {
00153 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsGeneral::slotExtraPrecision";
00154
00155 m_modelGeneralAfter->setExtraPrecision (extraPrecision);
00156 updateControls();
00157 }
00158
00159 void DlgSettingsGeneral::slotSaveDefault()
00160 {
00161 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsGeneral::slotSaveDefault";
00162
00163 QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
00164 settings.beginGroup (SETTINGS_GROUP_GENERAL);
00165
00166 settings.setValue (SETTINGS_GENERAL_CURSOR_SIZE,
00167 m_modelGeneralAfter->cursorSize());
00168 settings.setValue (SETTINGS_GENERAL_EXTRA_PRECISION,
00169 m_modelGeneralAfter->extraPrecision());
00170 settings.endGroup ();
00171 }
00172
00173 void DlgSettingsGeneral::updateControls ()
00174 {
00175 enableOk (true);
00176 }