Engauge Digitizer  2
Xml.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 "Logger.h"
8 #include <QFileDevice>
9 #include <QMessageBox>
10 #include <QObject>
11 #include "QtToString.h"
12 #include "Xml.h"
13 
14 QXmlStreamReader::TokenType loadNextFromReader (QXmlStreamReader &reader)
15 {
16  QXmlStreamReader::TokenType tokenType = reader.readNext();
17 
18  LOG4CPP_DEBUG_S ((*mainCat)) << "loadNextFromReader "
19  << " tokenType=" << QXmlStreamReaderTokenTypeToString (tokenType).toLatin1().data()
20  << " tag=" << reader.name().toLatin1().data();
21 
22  return tokenType;
23 }
24 
25 void xmlExitWithError (QXmlStreamReader &reader,
26  const QString &message)
27 {
28  // Try to extract as much useful context as possible
29  QString context;
30  QFileDevice *fileDevice = dynamic_cast<QFileDevice*> (reader.device());
31  if (fileDevice == 0) {
32 
33  context = QString ("%1 %2: ")
34  .arg (QObject::tr ("Start at line"))
35  .arg (reader.lineNumber());
36 
37  } else {
38 
39  context = QString ("%1 %2 %3 %4: ")
40  .arg (QObject::tr ("File"))
41  .arg (fileDevice->fileName())
42  .arg (QObject::tr ("at line"))
43  .arg (reader.lineNumber());
44 
45  }
46 
47  // Context plus original message gets displayed
48  QString adornedMsg = QString ("%1%2. %3")
49  .arg (context)
50  .arg (message)
51  .arg (QObject::tr ("Quitting"));
52 
53  QMessageBox::critical (0,
54  QObject::tr ("Error reading xml"),
55  adornedMsg);
56 
57  LOG4CPP_ERROR_S ((*mainCat)) << "xmlExitWithError error='" << adornedMsg.toLatin1().data() << "'";
58 
59  exit (-1);
60 }