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 MINIMUM_DIALOG_WIDTH_MAIN_WINDOW = 550;
33 "DlgSettingsMainWindow",
35 m_modelMainWindowBefore (0),
36 m_modelMainWindowAfter (0)
38 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::DlgSettingsMainWindow";
42 MINIMUM_DIALOG_WIDTH_MAIN_WINDOW);
45 DlgSettingsMainWindow::~DlgSettingsMainWindow()
47 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::~DlgSettingsMainWindow";
50 void DlgSettingsMainWindow::createControls (QGridLayout *layout,
53 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::createControls";
55 const int COLUMN0 = 0;
57 QLabel *labelZoomFactor =
new QLabel (tr (
"Initial zoom:"));
58 layout->addWidget (labelZoomFactor, row, 1);
60 m_cmbZoomFactor =
new QComboBox;
61 m_cmbZoomFactor->addItem (LABEL_ZOOM_16_TO_1 , QVariant (ZOOM_INITIAL_16_TO_1));
62 m_cmbZoomFactor->addItem (LABEL_ZOOM_8_TO_1 , QVariant (ZOOM_INITIAL_8_TO_1));
63 m_cmbZoomFactor->addItem (LABEL_ZOOM_4_TO_1 , QVariant (ZOOM_INITIAL_4_TO_1));
64 m_cmbZoomFactor->addItem (LABEL_ZOOM_2_TO_1 , QVariant (ZOOM_INITIAL_2_TO_1));
65 m_cmbZoomFactor->addItem (LABEL_ZOOM_1_TO_1 , QVariant (ZOOM_INITIAL_1_TO_1));
66 m_cmbZoomFactor->addItem (LABEL_ZOOM_1_TO_2 , QVariant (ZOOM_INITIAL_1_TO_2));
67 m_cmbZoomFactor->addItem (LABEL_ZOOM_1_TO_4 , QVariant (ZOOM_INITIAL_1_TO_4));
68 m_cmbZoomFactor->addItem (LABEL_ZOOM_1_TO_8 , QVariant (ZOOM_INITIAL_1_TO_8));
69 m_cmbZoomFactor->addItem (LABEL_ZOOM_1_TO_16 , QVariant (ZOOM_INITIAL_1_TO_16));
70 m_cmbZoomFactor->addItem (LABEL_ZOOM_FILL , QVariant (ZOOM_INITIAL_FILL));
71 m_cmbZoomFactor->addItem (LABEL_ZOOM_PREVIOUS , QVariant (ZOOM_INITIAL_PREVIOUS));
72 m_cmbZoomFactor->setWhatsThis(tr (
"Initial Zoom\n\n"
73 "Select the initial zoom factor when a new document is loaded. Either the previous "
74 "zoom can be kept, or the specified zoom can be applied."));
75 connect (m_cmbZoomFactor, SIGNAL (currentTextChanged (
const QString)),
this, SLOT (slotZoomFactor(
const QString)));
76 layout->addWidget (m_cmbZoomFactor, row++, 2);
78 QLabel *labelZoomControl =
new QLabel (tr (
"Zoom control:"));
79 layout->addWidget (labelZoomControl, row, 1);
81 m_cmbZoomControl =
new QComboBox;
82 m_cmbZoomControl->addItem (tr (
"Menu only" ), QVariant (ZOOM_CONTROL_MENU_ONLY));
83 m_cmbZoomControl->addItem (tr (
"Menu and mouse wheel" ), QVariant (ZOOM_CONTROL_MENU_WHEEL));
84 m_cmbZoomControl->addItem (tr (
"Menu and +/- keys" ), QVariant (ZOOM_CONTROL_MENU_PLUSMINUS));
85 m_cmbZoomControl->addItem (tr (
"Menu, mouse wheel and +/- keys"), QVariant (ZOOM_CONTROL_MENU_WHEEL_PLUSMINUS));
86 m_cmbZoomControl->setWhatsThis (tr (
"Zoom Control\n\n"
87 "Select which inputs are used to zoom in and out."));
88 connect (m_cmbZoomControl, SIGNAL (currentTextChanged (
const QString)),
this, SLOT (slotZoomControl(
const QString)));
89 layout->addWidget (m_cmbZoomControl, row++, 2);
91 QLabel *labelLocale =
new QLabel (tr (
"Locale:"));
92 layout->addWidget (labelLocale, row, 1);
95 m_cmbLocale =
new QComboBox;
96 m_cmbLocale->setWhatsThis(tr (
"Locale\n\n"
97 "Select the locale that will be used in numbers (immediately), and the language in the user "
98 "interface (after restart).\n\n"
99 "The locale determines how numbers are formatted. Specifically, either commas or "
100 "periods will be used as group delimiters in each number entered "
101 "by the user, displayed in the user interface, or exported to a file."));
102 for (
int indexLang = QLocale::C; indexLang <= QLocale::LastLanguage; indexLang++) {
103 QLocale::Language lang =
static_cast<QLocale::Language
> (indexLang);
104 QList<QLocale::Country> countries = QLocale::countriesForLanguage(lang);
105 for (
int indexCountry = 0; indexCountry < countries.count(); indexCountry++) {
106 QLocale::Country country = countries.at(indexCountry);
107 QLocale locale (lang, country);
108 QString label = QLocaleToString (locale);
109 m_cmbLocale->addItem (label, locale);
112 m_cmbLocale->model()->sort(COLUMN0);
113 connect (m_cmbLocale, SIGNAL (currentIndexChanged (
int)),
this, SLOT (slotLocale (
int)));
114 layout->addWidget (m_cmbLocale, row++, 2);
116 QLabel *labelImportCropping =
new QLabel (tr (
"Import cropping:"));
117 layout->addWidget (labelImportCropping, row, 1);
119 m_cmbImportCropping =
new QComboBox;
120 m_cmbImportCropping->setWhatsThis (tr (
"Import Cropping\n\n"
121 "Enables or disables cropping of the imported image when importing. Cropping the image is useful "
122 "for removing unimportant information around a graph, but less useful when the graph already fills "
123 "the entire image."));
125 m_cmbImportCropping->addItem (importCroppingUtil.
importCroppingToString (IMPORT_CROPPING_NEVER), IMPORT_CROPPING_NEVER);
126 m_cmbImportCropping->addItem (importCroppingUtil.
importCroppingToString (IMPORT_CROPPING_MULTIPAGE_PDFS), IMPORT_CROPPING_MULTIPAGE_PDFS);
127 m_cmbImportCropping->addItem (importCroppingUtil.
importCroppingToString (IMPORT_CROPPING_ALWAYS), IMPORT_CROPPING_ALWAYS);
128 connect (m_cmbImportCropping, SIGNAL (currentIndexChanged (
int)),
this, SLOT (slotImportCropping (
int)));
129 layout->addWidget (m_cmbImportCropping, row++, 2);
132 QLabel *labelPdfResolution =
new QLabel (tr (
"Import PDF resolution (dots per inch):"));
133 layout->addWidget (labelPdfResolution, row, 1);
135 m_cmbPdfResolution =
new QComboBox;
136 m_cmbPdfResolution->setWhatsThis (tr (
"Import PDF Resolution\n\n"
137 "Imported Portable Document Format (PDF) files will be converted to this pixel resolution "
138 "in dots per inch (DPI), where each pixel is one dot. A higher value increases the picture resolution "
139 "and may also improve numeric digitizing accuracy. However, a very high value can make the image so "
140 "large that Engauge will slow down."));
141 m_cmbPdfResolution->addItem (
"75", 75);
142 m_cmbPdfResolution->addItem (
"100", 100);
143 m_cmbPdfResolution->addItem (
"150", 150);
144 m_cmbPdfResolution->addItem (
"200", 200);
145 m_cmbPdfResolution->addItem (
"250", 250);
146 m_cmbPdfResolution->addItem (
"300", 300);
147 connect (m_cmbPdfResolution, SIGNAL (currentTextChanged (QString)),
this, SLOT (slotPdfResolution (QString)));
148 layout->addWidget (m_cmbPdfResolution, row++, 2);
151 QLabel *labelMaximumGridLines =
new QLabel (tr (
"Maximum grid lines:"));
152 layout->addWidget (labelMaximumGridLines, row, 1);
154 m_spinMaximumGridLines =
new QSpinBox;
155 m_spinMaximumGridLines->setMinimum (2);
156 m_spinMaximumGridLines->setWhatsThis (tr (
"Maximum Grid Lines\n\n"
157 "Maximum number of grid lines to be processed. This limit is applied when the step value is too "
158 "small for the start and stop values, which would result in too many grid lines visually and "
159 "possibly extremely long processing time (since each grid line would have to be processed)"));
160 connect (m_spinMaximumGridLines, SIGNAL (valueChanged (
int)),
this, (SLOT (slotMaximumGridLines (
int))));
161 layout->addWidget (m_spinMaximumGridLines, row++, 2);
163 QLabel *labelHighlightOpacity =
new QLabel (tr (
"Highlight opacity:"));
164 layout->addWidget (labelHighlightOpacity, row, 1);
166 m_spinHighlightOpacity =
new QDoubleSpinBox;
167 m_spinHighlightOpacity->setRange (0, 1);
168 m_spinHighlightOpacity->setSingleStep (0.1);
169 m_spinHighlightOpacity->setWhatsThis (tr (
"Highlight Opacity\n\n"
170 "Opacity to be applied when the cursor is over a curve or axis point in Select mode. The change in "
171 "appearance shows when the point can be selected."));
172 connect (m_spinHighlightOpacity, SIGNAL (valueChanged (
double)),
this, SLOT (slotHighlightOpacity(
double)));
173 layout->addWidget (m_spinHighlightOpacity, row++, 2);
175 QLabel *labelRecent =
new QLabel (tr (
"Recent file list:"));
176 layout->addWidget (labelRecent, row, 1);
178 m_btnRecentClear =
new QPushButton (tr (
"Clear"));
179 m_btnRecentClear->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed);
180 m_btnRecentClear->setWhatsThis (tr (
"Recent File List Clear\n\n"
181 "Clear the recent file list in the File menu."));
182 connect (m_btnRecentClear, SIGNAL (pressed ()), &
mainWindow(), SLOT (slotRecentFileClear ()));
183 connect (m_btnRecentClear, SIGNAL (pressed ()),
this, SLOT (slotRecentFileClear()));
184 layout->addWidget (m_btnRecentClear, row++, 2);
186 QLabel *labelTitleBarFormat =
new QLabel (tr (
"Include title bar path:"));
187 layout->addWidget (labelTitleBarFormat, row, 1);
189 m_chkTitleBarFormat =
new QCheckBox;
190 m_chkTitleBarFormat->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed);
191 m_chkTitleBarFormat->setWhatsThis (tr (
"Title Bar Filename\n\n"
192 "Includes or excludes the path and file extension from the filename in the title bar."));
193 connect (m_chkTitleBarFormat, SIGNAL (toggled (
bool)),
this, SLOT (slotTitleBarFormat(
bool)));
194 layout->addWidget (m_chkTitleBarFormat, row++, 2);
196 QLabel *labelSmallDialogs =
new QLabel (tr (
"Allow small dialogs:"));
197 layout->addWidget (labelSmallDialogs, row, 1);
199 m_chkSmallDialogs =
new QCheckBox;
200 m_chkSmallDialogs->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed);
201 m_chkSmallDialogs->setWhatsThis (tr (
"Allow Small Dialogs\n\n"
202 "Allows settings dialogs to be made very small so they fit on small computer screens."));
203 connect (m_chkSmallDialogs, SIGNAL (toggled (
bool)),
this, SLOT (slotSmallDialogs (
bool)));
204 layout->addWidget (m_chkSmallDialogs, row++, 2);
206 QLabel *labelDragDropExport =
new QLabel (tr (
"Allow drag and drop export:"));
207 layout->addWidget (labelDragDropExport, row, 1);
209 m_chkDragDropExport =
new QCheckBox;
210 m_chkDragDropExport->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed);
211 m_chkDragDropExport->setWhatsThis (tr (
"Allow Drag and Drop Export\n\n"
212 "Allows drag and drop export from the Curve Fitting Window and Geometry Window tables.\n\n"
213 "When drag and drop is disabled, a rectangular set of table cells can be selected using click and "
214 "drag. When drag and drop is enabled, a rectangular set of table cells can be selected using Click "
215 "then Shift+Click, since click and drag starts the drag operation."));
216 connect (m_chkDragDropExport, SIGNAL (toggled (
bool)),
this, SLOT (slotDragDropExport (
bool)));
217 layout->addWidget (m_chkDragDropExport, row++, 2);
222 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::createOptionalSaveDefault";
227 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::createSubPanel";
229 QWidget *subPanel =
new QWidget ();
230 QGridLayout *layout =
new QGridLayout (subPanel);
231 subPanel->setLayout (layout);
233 layout->setColumnStretch(0, 1);
234 layout->setColumnStretch(1, 0);
235 layout->setColumnStretch(2, 0);
236 layout->setColumnStretch(3, 1);
239 createControls (layout, row);
246 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::handleOk";
254 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::load";
256 ENGAUGE_ASSERT (
false);
262 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::loadMainWindowModel";
267 if (m_modelMainWindowBefore != 0) {
268 delete m_modelMainWindowBefore;
270 if (m_modelMainWindowAfter != 0) {
271 delete m_modelMainWindowAfter;
279 int index = m_cmbZoomFactor->findData (m_modelMainWindowAfter->
zoomFactorInitial());
280 m_cmbZoomFactor->setCurrentIndex (index);
281 index = m_cmbZoomControl->findData (m_modelMainWindowAfter->
zoomControl());
282 m_cmbZoomControl->setCurrentIndex (index);
283 QString locLabel = QLocaleToString (m_modelMainWindowAfter->
locale());
284 index = m_cmbLocale->findText (locLabel);
285 m_cmbLocale->setCurrentIndex(index);
286 index = m_cmbImportCropping->findData (m_modelMainWindowAfter->
importCropping());
287 m_cmbImportCropping->setCurrentIndex (index);
288 m_chkTitleBarFormat->setChecked (m_modelMainWindowAfter->
mainTitleBarFormat() == MAIN_TITLE_BAR_FORMAT_PATH);
290 index = m_cmbPdfResolution->findData (m_modelMainWindowAfter->
pdfResolution());
291 m_cmbPdfResolution->setCurrentIndex(index);
293 m_spinMaximumGridLines->setValue (m_modelMainWindowAfter->
maximumGridLines());
294 m_spinHighlightOpacity->setValue (m_modelMainWindowAfter->
highlightOpacity());
295 m_chkSmallDialogs->setChecked (m_modelMainWindowAfter->
smallDialogs());
296 m_chkDragDropExport->setChecked (m_modelMainWindowAfter->
dragDropExport());
306 void DlgSettingsMainWindow::slotDragDropExport (
bool)
308 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::slotDragDropExport";
314 void DlgSettingsMainWindow::slotHighlightOpacity(
double)
316 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::slotHighlightOpacity";
322 void DlgSettingsMainWindow::slotImportCropping (
int index)
324 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::slotImportCropping";
326 m_modelMainWindowAfter->
setImportCropping ((ImportCropping) m_cmbImportCropping->itemData (index).toInt ());
330 void DlgSettingsMainWindow::slotLocale (
int index)
332 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::slotLocale";
334 m_modelMainWindowAfter->
setLocale (m_cmbLocale->itemData (index).toLocale());
338 void DlgSettingsMainWindow::slotMaximumGridLines (
int limit)
340 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWIndow::slotMaximumGridLines";
346 void DlgSettingsMainWindow::slotPdfResolution(
const QString)
348 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWIndow::slotPdfResolution";
351 m_modelMainWindowAfter->
setPdfResolution(m_cmbPdfResolution->currentData().toInt());
356 void DlgSettingsMainWindow::slotRecentFileClear()
358 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::slotRecentFileClear";
364 void DlgSettingsMainWindow::slotSmallDialogs (
bool)
366 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::slotSmallDialogs";
368 m_modelMainWindowAfter->
setSmallDialogs (m_chkSmallDialogs->isChecked());
372 void DlgSettingsMainWindow::slotTitleBarFormat(
bool)
374 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::slotTitleBarFormat";
377 MAIN_TITLE_BAR_FORMAT_PATH :
378 MAIN_TITLE_BAR_FORMAT_NO_PATH);
382 void DlgSettingsMainWindow::slotZoomControl(
const QString)
384 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWindow::slotZoomControl";
386 m_modelMainWindowAfter->
setZoomControl ((ZoomControl) m_cmbZoomControl->currentData().toInt());
390 void DlgSettingsMainWindow::slotZoomFactor(
const QString)
392 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsMainWIndow::slotZoomFactor";
394 m_modelMainWindowAfter->
setZoomFactorInitial((ZoomFactorInitial) m_cmbZoomFactor->currentData().toInt());
398 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.
MainTitleBarFormat mainTitleBarFormat() const
Get method for MainWindow titlebar filename format.
void setCmdMediator(CmdMediator &cmdMediator)
Store CmdMediator for easy access by the leaf class.
void setHighlightOpacity(double highlightOpacity)
Set 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.
void setLocale(QLocale::Language language, QLocale::Country country)
Set method for locale given attributes.
int maximumGridLines() const
Maximum number of grid lines.
bool dragDropExport() const
Get method for drag and drop export.
void loadMainWindowModel(CmdMediator &cmdMediator, const MainWindowModel &modelMainWindow)
Replaced load method since the main window settings are independent of document, unlike other DlgSett...
bool smallDialogs() const
Get method for small dialogs flag.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
DlgSettingsMainWindow(MainWindow &mainWindow)
Single constructor.
ZoomControl zoomControl() const
Get method for zoom control.
Model for DlgSettingsMainWindow.
void setMaximumGridLines(int maximumGridLines)
Set method for maximum number of grid lines.
double highlightOpacity() const
Get method for highlight opacity.
virtual QWidget * createSubPanel()
Create dialog-specific panel to which base class will add Ok and Cancel buttons.
int pdfResolution() const
Get method for resolution of imported PDF files, in dots per inch.
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.
Abstract base class for all Settings dialogs.
ZoomFactorInitial zoomFactorInitial() const
Get method for initial zoom factor.
void setSmallDialogs(bool smallDialogs)
Set method for small dialogs flag.
ImportCropping importCropping() const
Get method for import cropping.
QLocale locale() const
Get method for locale.
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...