00001
00002
00003
00004
00005
00006
00007 #include "ChecklistGuideBrowser.h"
00008 #include "ChecklistTemplate.h"
00009 #include "CmdMediator.h"
00010 #include "Document.h"
00011 #include "EngaugeAssert.h"
00012 #include "Logger.h"
00013 #include <QDebug>
00014
00015 const int MIN_WIDTH_BROWSER = 340;
00016
00017 ChecklistGuideBrowser::ChecklistGuideBrowser ()
00018 {
00019 setOpenLinks (false);
00020 setMinimumWidth(MIN_WIDTH_BROWSER);
00021
00022 connect (this, SIGNAL (anchorClicked (const QUrl &)), this, SLOT (slotAnchorClicked (const QUrl &)));
00023 }
00024
00025 QString ChecklistGuideBrowser::ahref (QString &html,
00026 const QString &name) const
00027 {
00028 LOG4CPP_INFO_S ((*mainCat)) << "ChecklistGuideBrowser::bindToDocument";
00029
00030 QString expression = QString ("%1%2%3")
00031 .arg (TAG_AHREF_DELIMITER_START)
00032 .arg (name)
00033 .arg (TAG_AHREF_DELIMITER_END);
00034
00035 QString link;
00036 if (name == m_anchor) {
00037
00038
00039 link = QString ("<a href=""#"">Less ...</a>");
00040
00041 } else {
00042
00043
00044 link = QString ("<a href=""#%1"">More ...</a>")
00045 .arg (name);
00046
00047 }
00048
00049 html.replace (expression, link);
00050
00051 return html;
00052 }
00053
00054 void ChecklistGuideBrowser::check (QString &html,
00055 const QString &anchor,
00056 bool isChecked) const
00057 {
00058 LOG4CPP_INFO_S ((*mainCat)) << "ChecklistGuideBrowser::check";
00059
00060 QString tag = QString ("%1%2%3")
00061 .arg (TAG_ANCHOR_DELIMITER_START)
00062 .arg (anchor)
00063 .arg (TAG_ANCHOR_DELIMITER_END);
00064
00065 if (isChecked) {
00066 html.replace (tag, "<img src="":/engauge/img/16-checked.png"">");
00067 } else {
00068 html.replace (tag, "<img src="":/engauge/img/16-unchecked.png"">");
00069 }
00070 }
00071
00072 void ChecklistGuideBrowser::divHide (QString &html,
00073 const QString &anchor) const
00074 {
00075 LOG4CPP_INFO_S ((*mainCat)) << "ChecklistGuideBrowser::divHide"
00076 << " anchor=" << anchor.toLatin1().data();
00077
00078
00079 QString expression = QString ("\\%1%2\\%3.*\\%4%5\\%6")
00080 .arg (TAG_DIV_DELIMITER_START)
00081 .arg (anchor)
00082 .arg (TAG_DIV_DELIMITER_END)
00083 .arg (TAG_DIV_DELIMITER_START_SLASH)
00084 .arg (anchor)
00085 .arg (TAG_DIV_DELIMITER_END);
00086 QRegExp regExp (expression);
00087 html.replace (regExp, "");
00088 }
00089
00090 void ChecklistGuideBrowser::divShow (QString &html,
00091 const QString &anchor) const
00092 {
00093 LOG4CPP_INFO_S ((*mainCat)) << "ChecklistGuideBrowser::divShow"
00094 << " anchor=" << anchor.toLatin1().data();
00095
00096 if (!anchor.isEmpty ()) {
00097
00098
00099 QString expressionStart = QString ("\\%1%2\\%3")
00100 .arg (TAG_DIV_DELIMITER_START)
00101 .arg (anchor)
00102 .arg (TAG_DIV_DELIMITER_END);
00103 QString expressionEnd = QString ("\\%1%2\\%3")
00104 .arg (TAG_DIV_DELIMITER_START_SLASH)
00105 .arg (anchor)
00106 .arg (TAG_DIV_DELIMITER_END);
00107 QRegExp regExpStart (expressionStart);
00108 QRegExp regExpEnd (expressionEnd);
00109 html.replace (regExpStart, "");
00110 html.replace (regExpEnd, "");
00111 }
00112 }
00113
00114 QString ChecklistGuideBrowser::processAhrefs (const QString &htmlBefore)
00115 {
00116 LOG4CPP_INFO_S ((*mainCat)) << "ChecklistGuideBrowser::processAhrefs";
00117
00118 QString html = htmlBefore;
00119
00120
00121 ahref (html, NAME_BACKGROUND);
00122
00123
00124 ahref (html, NAME_AXIS1);
00125 ahref (html, NAME_AXIS2);
00126 ahref (html, NAME_AXIS3);
00127
00128
00129 QStringList::const_iterator itr;
00130 for (itr = m_curveNames.begin(); itr != m_curveNames.end(); itr++) {
00131
00132 QString curveName = *itr;
00133 ahref (html, curveName);
00134 }
00135
00136
00137 ahref (html, NAME_EXPORT);
00138
00139 return html;
00140 }
00141
00142 QString ChecklistGuideBrowser::processCheckboxes (const QString &htmlBefore)
00143 {
00144 LOG4CPP_INFO_S ((*mainCat)) << "ChecklistGuideBrowser::processCheckboxes";
00145
00146 QString html = htmlBefore;
00147
00148 check (html, NAME_BACKGROUND, m_checkedTags.contains (NAME_BACKGROUND));
00149
00150 check (html, NAME_AXIS1, m_checkedTags.contains (NAME_AXIS1));
00151 check (html, NAME_AXIS2, m_checkedTags.contains (NAME_AXIS2));
00152 check (html, NAME_AXIS3, m_checkedTags.contains (NAME_AXIS3));
00153
00154
00155 QStringList::const_iterator itr;
00156 for (itr = m_curveNames.begin(); itr != m_curveNames.end(); itr++) {
00157
00158 QString curveName = *itr;
00159 check (html, curveName, m_checkedTags.contains (curveName));
00160 }
00161
00162 check (html, NAME_EXPORT, m_checkedTags.contains (NAME_EXPORT));
00163
00164 return html;
00165 }
00166
00167 QString ChecklistGuideBrowser::processDivs (const QString &htmlBefore)
00168 {
00169 LOG4CPP_INFO_S ((*mainCat)) << "ChecklistGuideBrowser::processDivs";
00170
00171 QString html = htmlBefore;
00172
00173
00174
00175 divShow (html, m_anchor);
00176
00177
00178 divHide (html, NAME_BACKGROUND);
00179
00180
00181 divHide (html, NAME_AXIS1);
00182 divHide (html, NAME_AXIS2);
00183 divHide (html, NAME_AXIS3);
00184
00185
00186 QStringList::const_iterator itr;
00187 for (itr = m_curveNames.begin(); itr != m_curveNames.end(); itr++) {
00188
00189 QString curveName = *itr;
00190 divHide (html, curveName);
00191 }
00192
00193 divHide (html, NAME_EXPORT);
00194
00195 return html;
00196 }
00197
00198 void ChecklistGuideBrowser::refresh ()
00199 {
00200 LOG4CPP_INFO_S ((*mainCat)) << "ChecklistGuideBrowser::refresh";
00201
00202 QString html = m_templateHtml;
00203
00204 html = processAhrefs (html);
00205 html = processCheckboxes (html);
00206 html = processDivs (html);
00207
00208 QTextBrowser::setHtml (html);
00209 }
00210
00211 void ChecklistGuideBrowser::repopulateCheckedTags (const CmdMediator &cmdMediator,
00212 bool documentIsExported)
00213 {
00214 LOG4CPP_INFO_S ((*mainCat)) << "ChecklistGuideBrowser::repopulateCheckedTags";
00215
00216 m_checkedTags.clear();
00217
00218 if (cmdMediator.document().curveAxes().numPoints() > 0) {
00219 m_checkedTags [NAME_AXIS1] = true;
00220 }
00221
00222 if (cmdMediator.document().curveAxes().numPoints() > 1) {
00223 m_checkedTags [NAME_AXIS2] = true;
00224 }
00225
00226 if (cmdMediator.document().curveAxes().numPoints() > 2) {
00227 m_checkedTags [NAME_AXIS3] = true;
00228 }
00229
00230
00231 QStringList::const_iterator itr;
00232 for (itr = m_curveNames.begin(); itr != m_curveNames.end(); itr++) {
00233
00234 QString curveName = *itr;
00235 if (cmdMediator.document().curvesGraphsNumPoints (curveName) > 0) {
00236 m_checkedTags [curveName] = true;
00237 }
00238 }
00239
00240
00241
00242
00243
00244 if (documentIsExported) {
00245 m_checkedTags [NAME_EXPORT] = true;
00246 }
00247 }
00248
00249 void ChecklistGuideBrowser::setTemplateHtml (const QString &html,
00250 const QStringList &curveNames)
00251 {
00252 m_templateHtml = html;
00253 m_curveNames = curveNames;
00254
00255 refresh();
00256 }
00257
00258 void ChecklistGuideBrowser::slotAnchorClicked (const QUrl &url)
00259 {
00260 LOG4CPP_INFO_S ((*mainCat)) << "ChecklistGuideBrowser::slotAnchorClicked";
00261
00262 m_anchor = "";
00263 if (url.hasFragment ()) {
00264 m_anchor = url.fragment ();
00265 }
00266
00267 refresh();
00268 }
00269
00270 void ChecklistGuideBrowser::update (const CmdMediator &cmdMediator,
00271 bool documentIsExported)
00272 {
00273 LOG4CPP_INFO_S ((*mainCat)) << "ChecklistGuideBrowser::update";
00274
00275 repopulateCheckedTags(cmdMediator,
00276 documentIsExported);
00277
00278 refresh();
00279 }