[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    extragear/base/konq-plugins/validators
From:       Pino Toscano <pino () kde ! org>
Date:       2009-01-01 0:43:42
Message-ID: 1230770622.834899.22518.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 903981 by pino:

Support the validation of frames and iframes of the current page with the embedded \
validator. The tooltip shows the results for all the frames, while the statusbar \
label the total count. In the result dialog, show all the results sorted by frame \
(and then by line, and then column); in case the page has no frames, don't show the \
"frame" column.

On the code point of view: shuffled a bit some code to keep a list of the validation \
result objects, instead of a validator.


 M  +94 -14    plugin_validators.cpp  
 M  +5 -1      plugin_validators.h  
 M  +51 -34    reportdialog.cpp  
 M  +2 -2      reportdialog.h  
 M  +5 -0      reportwidget.ui  


--- trunk/extragear/base/konq-plugins/validators/plugin_validators.cpp #903980:903981
@@ -81,7 +81,7 @@
                                     const QVariantList & )
   : Plugin( parent ), m_configDialog(0), m_part(0)
   , m_localValidation(0), m_localValidationReport(0)
-  , m_icon(0), m_statusBarExt(0), m_validator(0)
+  , m_icon(0), m_statusBarExt(0)
 {
   setComponentData(PluginValidatorsFactory::componentData());
 
@@ -145,8 +145,7 @@
   removeStatusBarIcon();
   delete m_configDialog;
 #ifdef HAVE_TIDY
-  delete m_validator;
-  m_validator = 0;
+  qDeleteAll(m_lastResults);
 #endif
 // Dont' delete the action. KActionCollection as parent does the job already
 // and not deleting it at this point also ensures that in case we are not unplugged
@@ -290,13 +289,29 @@
 void PluginValidators::slotTidyValidation()
 {
 #ifdef HAVE_TIDY
-  const QByteArray source = documentSource().toUtf8();
-  delete m_validator;
-  m_validator = new TidyValidator(source);
+  qDeleteAll(m_lastResults);
+  m_lastResults.clear();
+  SourcesList sources;
+  sources.append(qMakePair(QString(), documentSource()));
+  sources += documentSources();
+  SourcesList::ConstIterator it = sources.constBegin(), itEnd = sources.constEnd();
+  int errorCount = 0;
+  int warningCount = 0;
+  int a11yWarningCount = 0;
+  for ( ; it != itEnd; ++it)
+  {
+    ValidationResult* res = new ValidationResult();
+    res->frameName = it->first;
+    TidyValidator v(it->second.toUtf8());
+    res->errors = v.errors();
+    errorCount += res->errors.count();
+    res->warnings = v.warnings();
+    warningCount += res->warnings.count();
+    res->accesswarns = v.accessibilityWarnings();
+    a11yWarningCount += res->accesswarns.count();
+    m_lastResults.append(res);
+  }
 
-  const int errorCount = m_validator->errorCount();
-  const int warningCount = m_validator->warningCount();
-  const int a11yWarningCount = m_validator->accessibilityWarningCount();
   const QString errorCountString = i18np("1 error", "%1 errors", errorCount);
   const QString warningCountString = i18np("1 warning", "%1 warnings", \
warningCount);  const QString a11yWarningCountString = i18np("1 accessibility \
warning", "%1 accessibility warnings", a11yWarningCount); @@ -304,10 +319,49 @@
                         "%1, %2", errorCountString, warningCountString));
   QStringList results;
   results.append(i18n("HTML tidy results:") + QLatin1String("\n"));
-  results.append(errorCountString);
-  results.append(warningCountString);
-  if (ValidatorsSettings::accessibilityLevel())
-    results.append(a11yWarningCountString);
+  if (m_lastResults.count() == 1)
+  {
+    results.append(errorCountString);
+    results.append(warningCountString);
+    if (ValidatorsSettings::accessibilityLevel())
+      results.append(a11yWarningCountString);
+  }
+  else if (m_lastResults.count() > 1)
+  {
+    QList<ValidationResult *>::ConstIterator vIt = m_lastResults.constBegin(), \
vItEnd = m_lastResults.constEnd(); +    if (ValidatorsSettings::accessibilityLevel())
+      results.append(i18nc("%1 is the error count string, %2 the warning count \
string, " +                           "%3 the accessibility warning string",
+                           "Page: %1, %2, %3",
+                           i18np("1 error", "%1 errors", (*vIt)->errors.count()),
+                           i18np("1 warning", "%1 warnings", \
(*vIt)->warnings.count()), +                           i18np("1 accessibility \
warning", "%1 accessibility warnings", (*vIt)->accesswarns.count()))); +    else
+      results.append(i18nc("%1 is the error count string, %2 the warning count \
string", +                           "Page: %1, %2",
+                           i18np("1 error", "%1 errors", (*vIt)->errors.count()),
+                           i18np("1 warning", "%1 warnings", \
(*vIt)->warnings.count()))); +    ++vIt;
+    for ( ; vIt != vItEnd; ++vIt)
+    {
+      ValidationResult* res = *vIt;
+      if (ValidatorsSettings::accessibilityLevel())
+        results.append(i18nc("%1 is the HTML frame name, %2 is the error count \
string, " +                             "%3 the warning count string, %4 the \
accessibility warning string", +                             "Frame '%1': %2, %3, \
%4", +                             res->frameName,
+                             i18np("1 error", "%1 errors", (*vIt)->errors.count()),
+                             i18np("1 warning", "%1 warnings", \
(*vIt)->warnings.count()), +                             i18np("1 accessibility \
warning", "%1 accessibility warnings", (*vIt)->accesswarns.count()))); +      else
+        results.append(i18nc("%1 is the HTML frame name, %2 is the error count \
string, " +                             "%3 the warning count string",
+                             "Frame '%1': %2, %3",
+                             res->frameName,
+                             i18np("1 error", "%1 errors", (*vIt)->errors.count()),
+                             i18np("1 warning", "%1 warnings", \
(*vIt)->warnings.count()))); +    }
+  }
   m_icon->setToolTip(results.join(QLatin1String("\n")));
   QPalette pal = m_icon->palette();
   if (errorCount > 0)
@@ -333,7 +387,7 @@
 void PluginValidators::slotShowTidyValidationReport()
 {
 #ifdef HAVE_TIDY
-  ReportDialog *reportDialog = new ReportDialog(m_validator, 0);
+  ReportDialog *reportDialog = new ReportDialog(m_lastResults, 0);
   reportDialog->setAttribute(Qt::WA_DeleteOnClose);
   reportDialog->show();
 #endif
@@ -424,6 +478,32 @@
   return QString();
 }
 
+void recursiveKHTMLFrames(KHTMLPart* part, SourcesList* sources)
+{
+  const QStringList frameNames = part->frameNames();
+  int i = 0;
+  Q_FOREACH (KParts::ReadOnlyPart *frame, part->frames())
+  {
+    if (KHTMLPart *khtmlpart = qobject_cast<KHTMLPart *>(frame))
+    {
+      sources->append(qMakePair(frameNames.at(i), part->documentSource()));
+      recursiveKHTMLFrames(khtmlpart, sources);
+    }
+    ++i;
+  }
+}
+
+SourcesList PluginValidators::documentSources() const
+{
+  if (KHTMLPart *khtmlpart = qobject_cast<KHTMLPart *>(m_part))
+  {
+    SourcesList sources;
+    recursiveKHTMLFrames(khtmlpart, &sources);
+    return sources;
+  }
+  return SourcesList();
+}
+
 bool PluginValidators::doExternalValidationChecks()
 {
   if (!parent()->inherits("KHTMLPart") && !parent()->inherits("WebKitPart"))
--- trunk/extragear/base/konq-plugins/validators/plugin_validators.h #903980:903981
@@ -42,8 +42,11 @@
   class StatusBarExtension;
 }
 class ClickIconLabel;
+struct ValidationResult;
 class TidyValidator;
 
+typedef QList<QPair<QString, QString> > SourcesList;
+
 class PluginValidators : public KParts::Plugin
 {
   Q_OBJECT
@@ -88,12 +91,13 @@
 
   ClickIconLabel *m_icon;
   KParts::StatusBarExtension *m_statusBarExt;
-  TidyValidator *m_validator;
+  QList<ValidationResult *> m_lastResults;
 
   bool canValidateByUri() const;
   bool canValidateByUpload() const;
   bool canValidateLocally() const;
   QString documentSource() const;
+  SourcesList documentSources() const;
   void validateByUri(const KUrl &url);
   void validateByUpload(const KUrl &url, const QList<QPair<QByteArray, QByteArray> > \
&formData);  bool doExternalValidationChecks();
--- trunk/extragear/base/konq-plugins/validators/reportdialog.cpp #903980:903981
@@ -25,18 +25,24 @@
 
 #include <klocale.h>
 
+static const int FrameNumberRole = Qt::UserRole + 1;
+
 static bool compare_report_items(QTreeWidgetItem* a, QTreeWidgetItem* b)
 {
-  int val1 = a->text(1).toInt();
-  int val2 = b->text(1).toInt();
+  int val1 = a->data(0, FrameNumberRole).toInt();
+  int val2 = b->data(0, FrameNumberRole).toInt();
   if (val1 != val2)
     return val1 < val2;
   val1 = a->text(2).toInt();
   val2 = b->text(2).toInt();
+  if (val1 != val2)
+    return val1 < val2;
+  val1 = a->text(3).toInt();
+  val2 = b->text(3).toInt();
   return val1 < val2;
 }
 
-ReportDialog::ReportDialog(TidyValidator* validator, QWidget* parent)
+ReportDialog::ReportDialog(const QList<ValidationResult *> &results, QWidget* \
parent)  : KDialog(parent)
 {
   setButtons(KDialog::Close);
@@ -48,42 +54,53 @@
   header->setResizeMode(0, QHeaderView::ResizeToContents);
   header->setResizeMode(1, QHeaderView::ResizeToContents);
   header->setResizeMode(2, QHeaderView::ResizeToContents);
+  header->setResizeMode(3, QHeaderView::ResizeToContents);
   QList<QTreeWidgetItem *> items;
-  for (int i = 0; i < validator->errorCount(); ++i)
+  int i = 0;
+  Q_FOREACH (ValidationResult* res, results)
   {
-    const TidyReport r = validator->error(i);
-    QTreeWidgetItem *item = new QTreeWidgetItem();
-    item->setIcon(0, KIcon("dialog-error"));
-    item->setText(1, QString::number(r.line));
-    item->setText(2, QString::number(r.col));
-    item->setText(3, r.msg);
-    item->setToolTip(0, i18nc("Validation status", "Error"));
-    items.append(item);
+    Q_FOREACH (const TidyReport &r, res->errors)
+    {
+      QTreeWidgetItem *item = new QTreeWidgetItem();
+      item->setIcon(0, KIcon("dialog-error"));
+      item->setText(1, res->frameName);
+      item->setText(2, QString::number(r.line));
+      item->setText(3, QString::number(r.col));
+      item->setText(4, r.msg);
+      item->setToolTip(0, i18nc("Validation status", "Error"));
+      item->setData(0, FrameNumberRole, i);
+      items.append(item);
+    }
+    Q_FOREACH (const TidyReport &r, res->warnings)
+    {
+      QTreeWidgetItem *item = new QTreeWidgetItem();
+      item->setIcon(0, KIcon("dialog-warning"));
+      item->setText(1, res->frameName);
+      item->setText(2, QString::number(r.line));
+      item->setText(3, QString::number(r.col));
+      item->setText(4, r.msg);
+      item->setToolTip(0, i18nc("Validation status", "Warning"));
+      item->setData(0, FrameNumberRole, i);
+      items.append(item);
+    }
+    Q_FOREACH (const TidyReport &r, res->accesswarns)
+    {
+      QTreeWidgetItem *item = new QTreeWidgetItem();
+      item->setIcon(0, KIcon("preferences-desktop-accessibility"));
+      item->setText(1, res->frameName);
+      item->setText(2, QString::number(r.line));
+      item->setText(3, QString::number(r.col));
+      item->setText(4, r.msg);
+      item->setToolTip(0, i18nc("Validation status", "Accessibility warning"));
+      item->setData(0, FrameNumberRole, i);
+      items.append(item);
+    }
+    ++i;
   }
-  for (int i = 0; i < validator->warningCount(); ++i)
-  {
-    const TidyReport r = validator->warning(i);
-    QTreeWidgetItem *item = new QTreeWidgetItem();
-    item->setIcon(0, KIcon("dialog-warning"));
-    item->setText(1, QString::number(r.line));
-    item->setText(2, QString::number(r.col));
-    item->setText(3, r.msg);
-    item->setToolTip(0, i18nc("Validation status", "Warning"));
-    items.append(item);
-  }
-  for (int i = 0; i < validator->accessibilityWarningCount(); ++i)
-  {
-    const TidyReport r = validator->accessibilityWarning(i);
-    QTreeWidgetItem *item = new QTreeWidgetItem();
-    item->setIcon(0, KIcon("preferences-desktop-accessibility"));
-    item->setText(1, QString::number(r.line));
-    item->setText(2, QString::number(r.col));
-    item->setText(3, r.msg);
-    item->setToolTip(0, i18nc("Validation status", "Accessibility warning"));
-    items.append(item);
-  }
   qStableSort(items.begin(), items.end(), compare_report_items);
   m_ui.reportsView->addTopLevelItems(items);
+  if (results.count() == 1)
+    header->setSectionHidden(1, true);
 }
 
 QSize ReportDialog::sizeHint() const
--- trunk/extragear/base/konq-plugins/validators/reportdialog.h #903980:903981
@@ -24,13 +24,13 @@
 
 #include "ui_reportwidget.h"
 
-class TidyValidator;
+struct ValidationResult;
 
 class ReportDialog : public KDialog
 {
   Q_OBJECT
 public:
-  ReportDialog(TidyValidator* validator, QWidget* parent);
+  ReportDialog(const QList<ValidationResult *> &results, QWidget* parent);
 
   virtual QSize sizeHint() const;
 
--- trunk/extragear/base/konq-plugins/validators/reportwidget.ui #903980:903981
@@ -31,6 +31,11 @@
      </column>
      <column>
       <property name="text" >
+       <string>Frame</string>
+      </property>
+     </column>
+     <column>
+      <property name="text" >
        <string>Row</string>
       </property>
      </column>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic