7 #include "DlgSettingsMainWindow.h" 8 #include "EngaugeAssert.h" 9 #include "ImportCropping.h" 10 #include "ImportCroppingUtilBase.h" 12 #include "MainWindow.h" 13 #include "MainWindowModel.h" 16 #include <QDoubleSpinBox> 17 #include <QGraphicsScene> 18 #include <QGridLayout> 22 #include <QPushButton> 24 #include "QtToString.h" 25 #include "ZoomControl.h" 26 #include "ZoomFactorInitial.h" 27 #include "ZoomLabels.h" 29 const int MAX_GRID_LINES_MIN = 2;
30 const int MAX_GRID_LINES_MAX = 1000;
31 const int MINIMUM_DIALOG_WIDTH_MAIN_WINDOW = 550;
35 "DlgSettingsMainWindow",
37 m_modelMainWindowBefore (0),
38 m_modelMainWindowAfter (0)
40 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::DlgSettingsMainWindow";
44 MINIMUM_DIALOG_WIDTH_MAIN_WINDOW);
47 DlgSettingsMainWindow::~DlgSettingsMainWindow()
49 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::~DlgSettingsMainWindow";
52 void DlgSettingsMainWindow::createControls (QGridLayout *layout,
55 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::createControls";
57 const int COLUMN0 = 0;
59 QLabel *labelZoomFactor =
new QLabel (tr (
"Initial zoom:"));
60 layout->addWidget (labelZoomFactor, row, 1);
62 m_cmbZoomFactor =
new QComboBox;
63 m_cmbZoomFactor->addItem (LABEL_ZOOM_16_TO_1 , QVariant (ZOOM_INITIAL_16_TO_1));
64 m_cmbZoomFactor->addItem (LABEL_ZOOM_8_TO_1 , QVariant (ZOOM_INITIAL_8_TO_1));
65 m_cmbZoomFactor->addItem (LABEL_ZOOM_4_TO_1 , QVariant (ZOOM_INITIAL_4_TO_1));
66 m_cmbZoomFactor->addItem (LABEL_ZOOM_2_TO_1 , QVariant (ZOOM_INITIAL_2_TO_1));
67 m_cmbZoomFactor->addItem (LABEL_ZOOM_1_TO_1 , QVariant (ZOOM_INITIAL_1_TO_1));
68 m_cmbZoomFactor->addItem (LABEL_ZOOM_1_TO_2 , QVariant (ZOOM_INITIAL_1_TO_2));
69 m_cmbZoomFactor->addItem (LABEL_ZOOM_1_TO_4 , QVariant (ZOOM_INITIAL_1_TO_4));
70 m_cmbZoomFactor->addItem (LABEL_ZOOM_1_TO_8 , QVariant (ZOOM_INITIAL_1_TO_8));
71 m_cmbZoomFactor->addItem (LABEL_ZOOM_1_TO_16 , QVariant (ZOOM_INITIAL_1_TO_16));
72 m_cmbZoomFactor->addItem (LABEL_ZOOM_FILL , QVariant (ZOOM_INITIAL_FILL));
73 m_cmbZoomFactor->addItem (LABEL_ZOOM_PREVIOUS , QVariant (ZOOM_INITIAL_PREVIOUS));
74 m_cmbZoomFactor->setWhatsThis(tr (
"Initial Zoom\n\n" 75 "Select the initial zoom factor when a new document is loaded. Either the previous " 76 "zoom can be kept, or the specified zoom can be applied."));
77 connect (m_cmbZoomFactor, SIGNAL (currentTextChanged (
const QString)),
this, SLOT (slotZoomFactor(
const QString)));
78 layout->addWidget (m_cmbZoomFactor, row++, 2);
80 QLabel *labelZoomControl =
new QLabel (tr (
"Zoom control:"));
81 layout->addWidget (labelZoomControl, row, 1);
83 m_cmbZoomControl =
new QComboBox;
84 m_cmbZoomControl->addItem (tr (
"Menu only" ), QVariant (ZOOM_CONTROL_MENU_ONLY));
85 m_cmbZoomControl->addItem (tr (
"Menu and mouse wheel" ), QVariant (ZOOM_CONTROL_MENU_WHEEL));
86 m_cmbZoomControl->addItem (tr (
"Menu and +/- keys" ), QVariant (ZOOM_CONTROL_MENU_PLUSMINUS));
87 m_cmbZoomControl->addItem (tr (
"Menu, mouse wheel and +/- keys"), QVariant (ZOOM_CONTROL_MENU_WHEEL_PLUSMINUS));
88 m_cmbZoomControl->setWhatsThis (tr (
"Zoom Control\n\n" 89 "Select which inputs are used to zoom in and out."));
90 connect (m_cmbZoomControl, SIGNAL (currentTextChanged (
const QString)),
this, SLOT (slotZoomControl(
const QString)));
91 layout->addWidget (m_cmbZoomControl, row++, 2);
93 QLabel *labelLocale =
new QLabel (tr (
"Locale:"));
94 layout->addWidget (labelLocale, row, 1);
97 m_cmbLocale =
new QComboBox;
98 m_cmbLocale->setWhatsThis(tr (
"Locale\n\n" 99 "Select the locale that will be used in numbers (immediately), and the language in the user " 100 "interface (after restart).\n\n" 101 "The locale determines how numbers are formatted. Specifically, either commas or " 102 "periods will be used as group delimiters in each number entered " 103 "by the user, displayed in the user interface, or exported to a file."));
104 for (
int indexLang = QLocale::C; indexLang <= QLocale::LastLanguage; indexLang++) {
105 QLocale::Language lang =
static_cast<QLocale::Language
> (indexLang);
106 QList<QLocale::Country> countries = QLocale::countriesForLanguage(lang);
107 for (
int indexCountry = 0; indexCountry < countries.count(); indexCountry++) {
108 QLocale::Country country = countries.at(indexCountry);
109 QLocale locale (lang, country);
110 QString label = QLocaleToString (locale);
111 m_cmbLocale->addItem (label, locale);
114 m_cmbLocale->model()->sort(COLUMN0);
115 connect (m_cmbLocale, SIGNAL (currentIndexChanged (
int)),
this, SLOT (slotLocale (
int)));
116 layout->addWidget (m_cmbLocale, row++, 2);
118 QLabel *labelImportCropping =
new QLabel (tr (
"Import cropping:"));
119 layout->addWidget (labelImportCropping, row, 1);
121 m_cmbImportCropping =
new QComboBox;
122 m_cmbImportCropping->setWhatsThis (tr (
"Import Cropping\n\n" 123 "Enables or disables cropping of the imported image when importing. Cropping the image is useful " 124 "for removing unimportant information around a graph, but less useful when the graph already fills " 125 "the entire image.\n\n" 126 "This setting only has an effect when Engauge has been built with support for pdf files."));
128 m_cmbImportCropping->addItem (importCroppingUtil.
importCroppingToString (IMPORT_CROPPING_NEVER), IMPORT_CROPPING_NEVER);
129 m_cmbImportCropping->addItem (importCroppingUtil.
importCroppingToString (IMPORT_CROPPING_MULTIPAGE_PDFS), IMPORT_CROPPING_MULTIPAGE_PDFS);
130 m_cmbImportCropping->addItem (importCroppingUtil.
importCroppingToString (IMPORT_CROPPING_ALWAYS), IMPORT_CROPPING_ALWAYS);
131 connect (m_cmbImportCropping, SIGNAL (currentIndexChanged (
int)),
this, SLOT (slotImportCropping (
int)));
132 layout->addWidget (m_cmbImportCropping, row++, 2);
135 QLabel *labelPdfResolution =
new QLabel (tr (
"Import PDF resolution (dots per inch):"));
136 layout->addWidget (labelPdfResolution, row, 1);
138 m_cmbPdfResolution =
new QComboBox;
139 m_cmbPdfResolution->setWhatsThis (tr (
"Import PDF Resolution\n\n" 140 "Imported Portable Document Format (PDF) files will be converted to this pixel resolution " 141 "in dots per inch (DPI), where each pixel is one dot. A higher value increases the picture resolution " 142 "and may also improve numeric digitizing accuracy. However, a very high value can make the image so " 143 "large that Engauge will slow down."));
144 m_cmbPdfResolution->addItem (
"75", 75);
145 m_cmbPdfResolution->addItem (
"100", 100);
146 m_cmbPdfResolution->addItem (
"150", 150);
147 m_cmbPdfResolution->addItem (
"200", 200);
148 m_cmbPdfResolution->addItem (
"250", 250);
149 m_cmbPdfResolution->addItem (
"300", 300);
150 connect (m_cmbPdfResolution, SIGNAL (currentTextChanged (QString)),
this, SLOT (slotPdfResolution (QString)));
151 layout->addWidget (m_cmbPdfResolution, row++, 2);
154 QLabel *labelMaximumGridLines =
new QLabel (tr (
"Maximum grid lines:"));
155 layout->addWidget (labelMaximumGridLines, row, 1);
157 m_spinMaximumGridLines =
new QSpinBox;
158 m_spinMaximumGridLines->setRange (MAX_GRID_LINES_MIN, MAX_GRID_LINES_MAX);
159 m_spinMaximumGridLines->setWhatsThis (tr (
"Maximum Grid Lines\n\n" 160 "Maximum number of grid lines to be processed. This limit is applied when the step value is too " 161 "small for the start and stop values, which would result in too many grid lines visually and " 162 "possibly extremely long processing time (since each grid line would have to be processed)"));
163 connect (m_spinMaximumGridLines, SIGNAL (valueChanged (
int)),
this, (SLOT (slotMaximumGridLines (
int))));
164 layout->addWidget (m_spinMaximumGridLines, row++, 2);
166 QLabel *labelHighlightOpacity =
new QLabel (tr (
"Highlight opacity:"));
167 layout->addWidget (labelHighlightOpacity, row, 1);
169 m_spinHighlightOpacity =
new QDoubleSpinBox;
170 m_spinHighlightOpacity->setRange (0, 1);
171 m_spinHighlightOpacity->setSingleStep (0.1);
172 m_spinHighlightOpacity->setWhatsThis (tr (
"Highlight Opacity\n\n" 173 "Opacity to be applied when the cursor is over a curve or axis point in Select mode. The change in " 174 "appearance shows when the point can be selected."));
175 connect (m_spinHighlightOpacity, SIGNAL (valueChanged (
double)),
this, SLOT (slotHighlightOpacity(
double)));
176 layout->addWidget (m_spinHighlightOpacity, row++, 2);
178 QLabel *labelRecent =
new QLabel (tr (
"Recent file list:"));
179 layout->addWidget (labelRecent, row, 1);
181 m_btnRecentClear =
new QPushButton (tr (
"Clear"));
182 m_btnRecentClear->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed);
183 m_btnRecentClear->setWhatsThis (tr (
"Recent File List Clear\n\n" 184 "Clear the recent file list in the File menu."));
185 connect (m_btnRecentClear, SIGNAL (pressed ()), &
mainWindow(), SLOT (slotRecentFileClear ()));
186 connect (m_btnRecentClear, SIGNAL (pressed ()),
this, SLOT (slotRecentFileClear()));
187 layout->addWidget (m_btnRecentClear, row++, 2);
189 QLabel *labelTitleBarFormat =
new QLabel (tr (
"Include title bar path:"));
190 layout->addWidget (labelTitleBarFormat, row, 1);
192 m_chkTitleBarFormat =
new QCheckBox;
193 m_chkTitleBarFormat->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed);
194 m_chkTitleBarFormat->setWhatsThis (tr (
"Title Bar Filename\n\n" 195 "Includes or excludes the path and file extension from the filename in the title bar."));
196 connect (m_chkTitleBarFormat, SIGNAL (toggled (
bool)),
this, SLOT (slotTitleBarFormat(
bool)));
197 layout->addWidget (m_chkTitleBarFormat, row++, 2);
199 QLabel *labelSmallDialogs =
new QLabel (tr (
"Allow small dialogs:"));
200 layout->addWidget (labelSmallDialogs, row, 1);
202 m_chkSmallDialogs =
new QCheckBox;
203 m_chkSmallDialogs->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed);
204 m_chkSmallDialogs->setWhatsThis (tr (
"Allow Small Dialogs\n\n" 205 "Allows settings dialogs to be made very small so they fit on small computer screens."));
206 connect (m_chkSmallDialogs, SIGNAL (toggled (
bool)),
this, SLOT (slotSmallDialogs (
bool)));
207 layout->addWidget (m_chkSmallDialogs, row++, 2);
209 QLabel *labelDragDropExport =
new QLabel (tr (
"Allow drag and drop export:"));
210 layout->addWidget (labelDragDropExport, row, 1);
212 m_chkDragDropExport =
new QCheckBox;
213 m_chkDragDropExport->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed);
214 m_chkDragDropExport->setWhatsThis (tr (
"Allow Drag and Drop Export\n\n" 215 "Allows drag and drop export from the Curve Fitting Window and Geometry Window tables.\n\n" 216 "When drag and drop is disabled, a rectangular set of table cells can be selected using click and " 217 "drag. When drag and drop is enabled, a rectangular set of table cells can be selected using Click " 218 "then Shift+Click, since click and drag starts the drag operation."));
219 connect (m_chkDragDropExport, SIGNAL (toggled (
bool)),
this, SLOT (slotDragDropExport (
bool)));
220 layout->addWidget (m_chkDragDropExport, row++, 2);
225 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::createOptionalSaveDefault";
230 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::createSubPanel";
232 QWidget *subPanel =
new QWidget ();
233 QGridLayout *layout =
new QGridLayout (subPanel);
234 subPanel->setLayout (layout);
236 layout->setColumnStretch(0, 1);
237 layout->setColumnStretch(1, 0);
238 layout->setColumnStretch(2, 0);
239 layout->setColumnStretch(3, 1);
242 createControls (layout, row);
249 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::handleOk";
257 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::load";
259 ENGAUGE_ASSERT (
false);
265 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::loadMainWindowModel";
270 if (m_modelMainWindowBefore != 0) {
271 delete m_modelMainWindowBefore;
273 if (m_modelMainWindowAfter != 0) {
274 delete m_modelMainWindowAfter;
282 int index = m_cmbZoomFactor->findData (m_modelMainWindowAfter->
zoomFactorInitial());
283 m_cmbZoomFactor->setCurrentIndex (index);
284 index = m_cmbZoomControl->findData (m_modelMainWindowAfter->
zoomControl());
285 m_cmbZoomControl->setCurrentIndex (index);
286 QString locLabel = QLocaleToString (m_modelMainWindowAfter->
locale());
287 index = m_cmbLocale->findText (locLabel);
288 m_cmbLocale->setCurrentIndex(index);
289 index = m_cmbImportCropping->findData (m_modelMainWindowAfter->
importCropping());
290 m_cmbImportCropping->setCurrentIndex (index);
291 m_chkTitleBarFormat->setChecked (m_modelMainWindowAfter->
mainTitleBarFormat() == MAIN_TITLE_BAR_FORMAT_PATH);
293 index = m_cmbPdfResolution->findData (m_modelMainWindowAfter->
pdfResolution());
294 m_cmbPdfResolution->setCurrentIndex(index);
296 m_spinMaximumGridLines->setValue (m_modelMainWindowAfter->
maximumGridLines());
297 m_spinHighlightOpacity->setValue (m_modelMainWindowAfter->
highlightOpacity());
298 m_chkSmallDialogs->setChecked (m_modelMainWindowAfter->
smallDialogs());
299 m_chkDragDropExport->setChecked (m_modelMainWindowAfter->
dragDropExport());
309 void DlgSettingsMainWindow::slotDragDropExport (
bool)
311 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::slotDragDropExport";
317 void DlgSettingsMainWindow::slotHighlightOpacity(
double)
319 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::slotHighlightOpacity";
325 void DlgSettingsMainWindow::slotImportCropping (
int index)
327 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::slotImportCropping";
329 m_modelMainWindowAfter->
setImportCropping ((ImportCropping) m_cmbImportCropping->itemData (index).toInt ());
333 void DlgSettingsMainWindow::slotLocale (
int index)
335 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::slotLocale";
337 m_modelMainWindowAfter->
setLocale (m_cmbLocale->itemData (index).toLocale());
341 void DlgSettingsMainWindow::slotMaximumGridLines (
int limit)
343 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWIndow::slotMaximumGridLines";
349 void DlgSettingsMainWindow::slotPdfResolution(
const QString)
351 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWIndow::slotPdfResolution";
354 m_modelMainWindowAfter->
setPdfResolution(m_cmbPdfResolution->currentData().toInt());
359 void DlgSettingsMainWindow::slotRecentFileClear()
361 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::slotRecentFileClear";
367 void DlgSettingsMainWindow::slotSmallDialogs (
bool)
369 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::slotSmallDialogs";
371 m_modelMainWindowAfter->
setSmallDialogs (m_chkSmallDialogs->isChecked());
375 void DlgSettingsMainWindow::slotTitleBarFormat(
bool)
377 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::slotTitleBarFormat";
380 MAIN_TITLE_BAR_FORMAT_PATH :
381 MAIN_TITLE_BAR_FORMAT_NO_PATH);
385 void DlgSettingsMainWindow::slotZoomControl(
const QString)
387 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::slotZoomControl";
389 m_modelMainWindowAfter->
setZoomControl ((ZoomControl) m_cmbZoomControl->currentData().toInt());
393 void DlgSettingsMainWindow::slotZoomFactor(
const QString)
395 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWIndow::slotZoomFactor";
397 m_modelMainWindowAfter->
setZoomFactorInitial((ZoomFactorInitial) m_cmbZoomFactor->currentData().toInt());
401 void DlgSettingsMainWindow::updateControls ()
static QString importCroppingToString(ImportCropping importCropping)
Option as string for display to user.
virtual void createOptionalSaveDefault(QHBoxLayout *layout)
Let subclass define an optional Save As Default button.
void updateSettingsMainWindow(const MainWindowModel &modelMainWindow)
Update with new main window properties.
void setDragDropExport(bool dragDropExport)
Set method for drag and drop export.
virtual void handleOk()
Process slotOk.
void setCmdMediator(CmdMediator &cmdMediator)
Store CmdMediator for easy access by the leaf class.
void setHighlightOpacity(double highlightOpacity)
Set method for highlight opacity.
double highlightOpacity() const
Get method for highlight opacity.
void finishPanel(QWidget *subPanel, int minimumWidth=MINIMUM_DIALOG_WIDTH, int minimumHeightOrZero=0)
Add Ok and Cancel buttons to subpanel to get the whole dialog.
ZoomFactorInitial zoomFactorInitial() const
Get method for initial zoom factor.
void setLocale(QLocale::Language language, QLocale::Country country)
Set method for locale given attributes.
bool smallDialogs() const
Get method for small dialogs flag.
void loadMainWindowModel(CmdMediator &cmdMediator, const MainWindowModel &modelMainWindow)
Replaced load method since the main window settings are independent of document, unlike other DlgSett...
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
DlgSettingsMainWindow(MainWindow &mainWindow)
Single constructor.
ZoomControl zoomControl() const
Get method for zoom control.
ImportCropping importCropping() const
Get method for import cropping.
Model for DlgSettingsMainWindow.
int maximumGridLines() const
Maximum number of grid lines.
int pdfResolution() const
Get method for resolution of imported PDF files, in dots per inch.
void setMaximumGridLines(int maximumGridLines)
Set method for maximum number of grid lines.
virtual QWidget * createSubPanel()
Create dialog-specific panel to which base class will add Ok and Cancel buttons.
MainTitleBarFormat mainTitleBarFormat() const
Get method for MainWindow titlebar filename format.
QLocale locale() const
Get method for locale.
Utility class for import cropping options.
virtual void setSmallDialogs(bool smallDialogs)
If false then dialogs have a minimum size so all controls are visible.
void enableOk(bool enable)
Let leaf subclass control the Ok button.
void setZoomControl(ZoomControl zoomControl)
Set method for zoom control.
void setMainTitleBarFormat(MainTitleBarFormat mainTitleBarFormat)
Set method for MainWindow titlebar filename format.
void setZoomFactorInitial(ZoomFactorInitial zoomFactorInitial)
Set method for initial zoom factor.
bool dragDropExport() const
Get method for drag and drop export.
Abstract base class for all Settings dialogs.
void setSmallDialogs(bool smallDialogs)
Set method for small dialogs flag.
MainWindow & mainWindow()
Get method for MainWindow.
void setPdfResolution(int resolution)
Set method for resolution of imported PDF files, in dots per inch.
void setImportCropping(ImportCropping importCropping)
Set method for import cropping.
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
CmdMediator & cmdMediator()
Provide access to Document information wrapped inside CmdMediator.