Engauge Digitizer 2
Loading...
Searching...
No Matches
ChecklistGuideWizard.cpp
1/******************************************************************************************************
2 * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
3 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
4 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
5 ******************************************************************************************************/
6
7#include "ChecklistGuidePage.h"
8#include "ChecklistGuidePageConclusion.h"
9#include "ChecklistGuidePageCurves.h"
10#include "ChecklistGuidePageIntro.h"
11#include "ChecklistGuideWizard.h"
12#include "ChecklistTemplate.h"
13#include "ColorFilterSettings.h"
14#include "EngaugeAssert.h"
15#include "Logger.h"
16#include "MainWindow.h"
17#include <QGridLayout>
18#include <QHeaderView>
19#include <QPushButton>
20#include <QRadioButton>
21#include <QTextStream>
22#include <QVBoxLayout>
23
25 unsigned int numberCoordSystem) :
26 m_mainWindow (mainWindow),
27 m_dialogName ("ChecklistGuide")
28{
29 setWindowTitle (tr ("Checklist Guide Wizard"));
30 setModal (true);
31 QPixmap splash (":/engauge/img/SpreadsheetsForDoc.png");
32 setPixmap (QWizard::WatermarkPixmap, splash); // For ClassicStyle and ModernStyle
33 setPixmap (QWizard::BackgroundPixmap, splash); // For MacStyle
34
35 m_pageIntro = new ChecklistGuidePageIntro();
36 addPage(m_pageIntro);
37
38 for (CoordSystemIndex coordSystemIndex = 0; coordSystemIndex < numberCoordSystem; coordSystemIndex++) {
39 m_pageCurves.push_back (new ChecklistGuidePageCurves(pageCurvesTitle (coordSystemIndex, numberCoordSystem)));
40 addPage(m_pageCurves.last());
41 }
42
43 m_pageConclusion = new ChecklistGuidePageConclusion();
44 addPage(m_pageConclusion);
45}
46
47QStringList ChecklistGuideWizard::curveNames(CoordSystemIndex coordSystemIndex) const
48{
49 return m_pageCurves [coordSystemIndex]->curveNames();
50}
51
52QString ChecklistGuideWizard::pageCurvesTitle (CoordSystemIndex coordSystemIndex,
53 unsigned int numberCoordSystem) const
54{
55 LOG4CPP_INFO_S ((*mainCat)) << "ChecklistGuideWizard::pageCurvesTitle";
56
57 ENGAUGE_ASSERT (coordSystemIndex < numberCoordSystem);
58
59 if (numberCoordSystem == 1) {
60
61 // Single curve needs no index information
62 return tr ("Curves");
63
64 } else {
65
66 // One of multiple curves needs index information
67 unsigned int indexOneBased = coordSystemIndex + 1;
68 return QString ("%1 %2")
69 .arg (QObject::tr ("Curves for coordinate system"))
70 .arg (indexOneBased);
71
72 }
73}
74
75void ChecklistGuideWizard::populateCurvesGraphs (CoordSystemIndex coordSystemIndex,
76 CurvesGraphs &curvesGraphs)
77{
78 LOG4CPP_INFO_S ((*mainCat)) << "ChecklistGuideWizard::populateCurvesGraphs";
79
80 QStringList curveNames = m_pageCurves [coordSystemIndex]->curveNames();
81 QStringList::const_iterator itr;
82 for (itr = curveNames.begin(); itr != curveNames.end(); itr++) {
83
84 QString curveName = *itr;
85
86 curvesGraphs.addGraphCurveAtEnd(Curve (curveName,
89 PointStyle::defaultGraphCurve (curvesGraphs.numCurves ()))));
90 }
91}
92
93QString ChecklistGuideWizard::templateHtml (CoordSystemIndex coordSystemIndex) const
94{
95 LOG4CPP_INFO_S ((*mainCat)) << "ChecklistGuideWizard::templateHtml";
96
97 QStringList curveNames = m_pageCurves [coordSystemIndex]->curveNames();
98 bool withLines = m_pageCurves [coordSystemIndex]->withLines();
99
100 QString html;
101 QTextStream str (&html);
102
103 // Insert additional space between successive list items, using stylesheet
104 str << "<style type='text/css'>li { margin-top: 10px 0; }</style>";
105
106 str << "<p>" << tr ("The coordinates are defined by creating axis points:") << "</p>\n";
107 str << "<p>" << TAG_ANCHOR_AXIS_1 << "&nbsp;" << tr ("Add first of three axis points.") << " " << TAG_AHREF_AXIS_1 << "</p>\n";
108 str << TAG_DIV_AXIS_START_1;
109 str << "<ul>\n";
110 str << "<li>" << tr ("Click on") << " <img src="":/engauge/img/16-DigitAxis""> " << tr ("for <b>Axis Points</b> mode") << "</li>\n";
111 str << "<li>" << tr ("Click on an axis tick mark, or intersection of two grid lines, with labeled coordinates") << "</li>\n";
112 str << "<li>" << tr ("Enter the coordinates of the axis point") << "</li>\n";
113 str << "<li>" << tr ("Click on Ok") << "</li>\n";
114 str << "</ul>\n";
115 str << TAG_DIV_AXIS_END_1;
116 str << "<p>" << TAG_ANCHOR_AXIS_2 << "&nbsp;" << tr ("Add second of three axis points.") << " " << TAG_AHREF_AXIS_2 << "</p>\n";
117 str << TAG_DIV_AXIS_START_2;
118 str << "<ul>\n";
119 str << "<li>" << tr ("Click on") << " <img src="":/engauge/img/16-DigitAxis""> " << tr ("for <b>Axis Points</b> mode") << "</li>\n";
120 str << "<li>" << tr ("Click on an axis tick mark, or intersection of two grid lines, with labeled coordinates, away from the other axis point") << "</li>\n";
121 str << "<li>" << tr ("Enter the coordinates of the axis point") << "</li>\n";
122 str << "<li>" << tr ("Click on Ok") << "</li>\n";
123 str << "</ul>\n";
124 str << TAG_DIV_AXIS_END_2;
125 str << "<p>" << TAG_ANCHOR_AXIS_3 << "&nbsp;" << tr ("Add third of three axis points.") << " " << TAG_AHREF_AXIS_3 << "</p>\n";
126 str << TAG_DIV_AXIS_START_3;
127 str << "<ul>\n";
128 str << "<li>" << tr ("Click on") << " <img src="":/engauge/img/16-DigitAxis""> " << tr ("for <b>Axis Points</b> mode") << "</li>\n";
129 str << "<li>" << tr ("Click on an axis tick mark, or intersection of two grid lines, with labeled coordinates, away from the other axis points") << "</li>\n";
130 str << "<li>" << tr ("Enter the coordinates of the axis point") << "</li>\n";
131 str << "<li>" << tr ("Click on Ok") << "</li>\n";
132 str << "</ul>\n";
133 str << TAG_DIV_AXIS_END_3;
134
135 str << "<p>&nbsp;</p>\n";
136 str << "<p>" << tr ("Points are digitized along each curve:") << "</p>\n";
137 QStringList::const_iterator itr;
138 for (itr = curveNames.begin(); itr != curveNames.end(); itr++) {
139
140 QString curveName = *itr;
141
142 QString tagACurve = QString ("%1%2%3")
143 .arg (TAG_AHREF_DELIMITER_START)
144 .arg (curveName)
145 .arg (TAG_AHREF_DELIMITER_END);
146
147 str << "<p>" << TAG_ANCHOR_DELIMITER_START << curveName << TAG_ANCHOR_DELIMITER_END
148 << "&nbsp;" << tr ("Add points for curve") << " <b>" << curveName << "</b>. " << tagACurve << "</p>\n";
149 str << TAG_DIV_DELIMITER_START << curveName << TAG_DIV_DELIMITER_END;
150 str << "<ul>\n";
151
152 if (withLines) {
153
154 str << "<li>" << tr ("Click on") << " <img src="":/engauge/img/16-DigitSegment""> " << tr ("for <b>Segment Fill</b> mode") << "</li>\n";
155 str << "<li>" << tr ("Select curve") << " <b>" << curveName << "</b> " << tr ("in the drop-down list") << "</li>\n";
156 str << "<li>" << tr ("Move the cursor over the curve. If a line does not appear then adjust the <b>Color Filter</b> settings for this curve") << ":\n";
157 str << templateHtmlToAdjustColorFilterSettings () << "</li>\n";
158 str << "<li>" << tr ("Move the cursor over the curve again. When the <b>Segment Fill</b> line appears, click on it to generate points") << "</li>\n";
159 str << "</ul>\n";
160
161 } else {
162
163 str << "<li>" << tr ("Click on") << " <img src="":/engauge/img/16-DigitPointMatch""> " << tr ("for <b>Point Match</b> mode") << "</li>\n";
164 str << "<li>" << tr ("Select curve") << " <b>" << curveName << "</b> " << tr ("in the drop-down list") << "</li>\n";
165 str << "<li>" << tr ("Move the cursor over a typical point in the curve. If the cursor circle does not change color then adjust "
166 "the <b>Color Filter</b> settings for this curve") << ":\n";
167 str << templateHtmlToAdjustColorFilterSettings () << "</li>\n";
168 str << "<li>" << tr ("Move the cursor over a typical point in the curve again. Click on the point to start point matching") << "</li>\n";
169 str << "<li>" << tr ("Engauge will display a candidate point. To accept that candidate point, press the right arrow key") << "</li>\n";
170 str << "<li>" << tr ("The previous step repeats until you select a different mode") << "</li>\n";
171 str << "</ul>\n";
172 }
173
174 str << TAG_DIV_DELIMITER_START_SLASH << curveName << TAG_DIV_DELIMITER_END;
175 }
176
177 str << "<p>&nbsp;</p>\n";
178 str << "<p>" << tr ("The digitized points can be exported") << ":</p>\n";
179 str << "<p>" << TAG_ANCHOR_EXPORT << "&nbsp;" << tr ("Export the points to a file") << ". " << TAG_AHREF_EXPORT << "</p>\n";
180 str << TAG_DIV_EXPORT_START;
181 str << "<ul>\n";
182 str << "<li>" << tr ("Select menu option <b>File / Export</b>") << "</li>\n";
183 str << "<li>" << tr ("Enter the file name") << "</li>\n";
184 str << "<li>" << tr ("Click on Ok") << "</li>\n";
185 str << "<li>" << tr ("Congratulations!") << "</li>\n";
186 str << "</ul>\n";
187 str << TAG_DIV_EXPORT_END;
188
189 str << "<p>&nbsp;</p>\n";
190 str << "<p>" << tr ("Hint - The background image can be switched between the original image and filtered image.") << " " << TAG_AHREF_BACKGROUND << "</p>\n";
191 str << TAG_DIV_BACKGROUND_START;
192 str << "<ul>\n";
193 str << "<li>" << tr ("Select menu option <b>View / Background / Show Original Image</b> to see the original image") << "</li>\n";
194 str << "<li>" << tr ("Select menu option <b>View / Background / Show Filtered Image</b> to see the image from <b>Color Filter</b>") << "</li>\n";
195 str << "</ul>\n";
196 str << TAG_DIV_BACKGROUND_END;
197
198 return html;
199}
200
201QString ChecklistGuideWizard::templateHtmlToAdjustColorFilterSettings () const
202{
203 LOG4CPP_INFO_S ((*mainCat)) << "ChecklistGuideWizard::templateHtmlToAdjustColorFilterSettings";
204
205 QString html;
206 QTextStream str (&html);
207
208 str << " <ul>\n";
209 str << " <li>" << tr ("Select menu option <b>Settings / Color Filter</b>") << "<li>\n";
210 str << " <li>" << tr ("Select the method for filtering. Hue is best if the curves have different colors") << "</li>\n";
211 str << " <li>" << tr ("Slide the green buttons back and forth until the curve is easily visible in the preview window") << "</li>\n";
212 str << " <li>" << tr ("Click on Ok") << "</li>\n";
213 str << " </ul>\n";
214
215 return html;
216}
This class uses the validation method of the Conclusion page to perform final processing for Checklis...
This class adds validation to the Curves page.
This class sets up the introduction page.
ChecklistGuideWizard(MainWindow &mainWindow, unsigned int numberCoordSystem)
Single constructor.
QStringList curveNames(CoordSystemIndex coordSystemIndex) const
Curve names to be placed into Document.
QString templateHtml(CoordSystemIndex coordSystemIndex) const
Template html comprising the checklist for display.
void populateCurvesGraphs(CoordSystemIndex coordSystemIndex, CurvesGraphs &curvesGraphs)
Create entries in CurvesGraphs for each curve name that user provided.
static ColorFilterSettings defaultFilter()
Initial default for any Curve.
Container for LineStyle and PointStyle for one Curve.
Definition CurveStyle.h:19
Container for one set of digitized Points.
Definition Curve.h:33
Container for all graph curves. The axes point curve is external to this class.
void addGraphCurveAtEnd(Curve curve)
Append new graph Curve to end of Curve list.
int numCurves() const
Current number of graphs curves.
static LineStyle defaultGraphCurve(int index)
Initial default for index'th graph curve.
Definition LineStyle.cpp:84
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition MainWindow.h:78
static PointStyle defaultGraphCurve(int index)
Initial default for index'th graph curve.