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

List:       kde-commits
Subject:    [kstars/gsoc2012-spacetime] /: Implemented UI option to select CSV or Space delimited files
From:       Rishab Arora <ra.rishab () gmail ! com>
Date:       2012-09-01 0:00:50
Message-ID: 20120901000050.91A59A60D4 () git ! kde ! org
[Download RAW message or body]

Git commit cbf1cfa31eeba49f83bc2df7c11570cf87b6629b by Rishab Arora.
Committed on 01/09/2012 at 01:30.
Pushed by rishabarora into branch 'gsoc2012-spacetime'.

Implemented UI option to select CSV or Space delimited files

M  +21   -5    datahandlers/catalogdb.cpp
M  +3    -1    datahandlers/catalogdb.h
M  +3    -1    kstars/dialogs/addcatdialog.cpp
M  +3    -0    kstars/dialogs/addcatdialog.ui

http://commits.kde.org/kstars/cbf1cfa31eeba49f83bc2df7c11570cf87b6629b

diff --git a/datahandlers/catalogdb.cpp b/datahandlers/catalogdb.cpp
index d36a921..26ced2f 100644
--- a/datahandlers/catalogdb.cpp
+++ b/datahandlers/catalogdb.cpp
@@ -262,8 +262,10 @@ void CatalogDB::AddEntry(const QString& catalog_name, const int ID,
   add_query.bindValue("MajorAxis", major_axis);
   add_query.bindValue("MinorAxis", minor_axis);
   add_query.bindValue("Flux", flux);
-  if (!add_query.exec())
+  if (!add_query.exec()) {
+    kWarning() << "Custom Catalog Insert Query FAILED!";
     kWarning() << add_query.lastQuery();
+  }
 
   // Find UID of the Row just added
   rowuid = add_query.lastInsertId().toInt();
@@ -313,6 +315,7 @@ bool CatalogDB::AddCatalogContents(const QString& fname) {
   if (ccFile.open(QIODevice::ReadOnly)) {
       QStringList columns;  // list of data column descriptors in the header
       QString catalog_name;
+      char delimiter;
 
       QTextStream stream(&ccFile);
       // TODO(spacetime) : Decide appropriate number of lines to be read
@@ -325,7 +328,7 @@ bool CatalogDB::AddCatalogContents(const QString& fname) {
         */
 
       if (lines.size() < 1 ||
-          !ParseCatalogInfoToDB(lines, columns, catalog_name)) {
+          !ParseCatalogInfoToDB(lines, columns, catalog_name, delimiter)) {
           kWarning() << "Issue in catalog file header: " << filename;
           ccFile.close();
           return false;
@@ -344,7 +347,7 @@ bool CatalogDB::AddCatalogContents(const QString& fname) {
                                           buildParserSequence(columns);
 
       // Part 2) Read file and store into DB
-      KSParser catalog_text_parser(filename, '#', sequence, ' ');
+      KSParser catalog_text_parser(filename, '#', sequence, delimiter);
 
       QHash<QString, QVariant> row_content;
       while (catalog_text_parser.HasNextRow()) {
@@ -363,7 +366,8 @@ bool CatalogDB::AddCatalogContents(const QString& fname) {
 
 bool CatalogDB::ParseCatalogInfoToDB(const QStringList &lines,
                                      QStringList &columns,
-                                     QString &catalog_name) {
+                                     QString &catalog_name,
+                                     char &delimiter) {
 /*
 * Most of the code here is by Thomas Kabelmann from customcatalogcomponent.cpp 
 * (now catalogcomponent.cpp)
@@ -386,12 +390,14 @@ bool CatalogDB::ParseCatalogInfoToDB(const QStringList &lines,
   catFluxFreq.clear();
   catFluxUnit.clear();
   catEpoch = 0.;
+  delimiter = ' ';
 
   int i = 0;
   for (; i < lines.size(); ++i) {
       QString d(lines.at(i));  // current data line
       if (d.left(1) != "#") break;  // no longer in header!
 
+      int idelimiter = d.indexOf("# Delimiter: ");
       int iname      = d.indexOf("# Name: ");
       int iprefix    = d.indexOf("# Prefix: ");
       int icolor     = d.indexOf("# Color: ");
@@ -399,7 +405,17 @@ bool CatalogDB::ParseCatalogInfoToDB(const QStringList &lines,
       int ifluxfreq  = d.indexOf("# Flux Frequency: ");
       int ifluxunit  = d.indexOf("# Flux Unit: ");
 
-      if (iname == 0) {  // line contains catalog name
+      if (idelimiter == 0) {  // line contains delimiter
+          idelimiter = d.indexOf(":") + 2;
+          if (delimiter == '\0') {
+              delimiter = d.mid(idelimiter).at(0).toAscii();
+          } else {  // duplicate name in header
+              if (showerrs)
+                  errs.append(i18n("Parsing header: ") +
+                                i18n("Extra Delimiter field in header: %1."
+                                      "  Will be ignored", d.mid(idelimiter)));
+          }
+      } else if (iname == 0) {  // line contains catalog name
           iname = d.indexOf(":")+2;
           if (catalog_name.isEmpty()) {
               catalog_name = d.mid(iname);
diff --git a/datahandlers/catalogdb.h b/datahandlers/catalogdb.h
index 21b4b7a..e79252b 100644
--- a/datahandlers/catalogdb.h
+++ b/datahandlers/catalogdb.h
@@ -139,10 +139,12 @@ class CatalogDB {
    *
    * @param lines List of lines to use for extraction of details
    * @param Columns Stores the read Columns in this list
+   * @param catalog_name Name retrieved from file header
+   * @param delimiter Delimeter retrieved from file header
    * @return bool
    **/
   bool ParseCatalogInfoToDB(const QStringList &lines, QStringList &columns,
-                            QString &catalog_name);
+                            QString &catalog_name, char &delimiter);
 
   /**
    * @brief Add the catalog with given details into the database
diff --git a/kstars/dialogs/addcatdialog.cpp b/kstars/dialogs/addcatdialog.cpp
index f885120..772cfd2 100644
--- a/kstars/dialogs/addcatdialog.cpp
+++ b/kstars/dialogs/addcatdialog.cpp
@@ -140,8 +140,10 @@ bool AddCatDialog::validateDataFile() {
 QString AddCatDialog::writeCatalogHeader() {
     QString name = ( acd->CatalogName->text().isEmpty() ? i18n("Custom") : acd->CatalogName->text() );
     QString pre = ( acd->Prefix->text().isEmpty() ? "CC" : acd->Prefix->text() );
+    char delimiter = ( acd->CSVButton->isChecked() ? ',' : ' ' );
 
-    QString h = QString("# Name: %1\n").arg( name );
+    QString h = QString("# Delimiter: %1\n").arg( delimiter );
+    h += QString("# Name: %1\n").arg( name );
     h += QString("# Prefix: %1\n").arg( pre );
     h += QString("# Color: %1\n").arg( acd->ColorButton->color().name() );
     h += QString("# Epoch: %1\n").arg( acd->Epoch->value() );
diff --git a/kstars/dialogs/addcatdialog.ui b/kstars/dialogs/addcatdialog.ui
index b738755..873dc8f 100644
--- a/kstars/dialogs/addcatdialog.ui
+++ b/kstars/dialogs/addcatdialog.ui
@@ -226,6 +226,9 @@
        </item>
        <item>
         <widget class="QRadioButton" name="SpaceButton">
+         <property name="checked">
+          <bool>true</bool>
+         </property>
          <property name="text">
           <string>Space Delimited</string>
          </property>

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

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