Ticket #743: 0001-ADD-Load-track-from-commandline.patch

File 0001-ADD-Load-track-from-commandline.patch, 4.4 KB (added by dantje, 11 years ago)
  • Main.cpp

    From 95158808960b41f0b2076105363a0b5ac587ca79 Mon Sep 17 00:00:00 2001
    From: dantje <dvg@jccnet.de>
    Date: Sat, 15 Mar 2008 00:18:36 +0100
    Subject: [PATCH] [ADD] Load track from commandline
    [FIX] Mem leak when importing NMEA files
    [FIX] Add a layer when loading OSM files
    ---
     Main.cpp       |    6 +++
     MainWindow.cpp |   95 ++++++++++++++++++++++++++++++++------------------------
     MainWindow.h   |    1 +
     3 files changed, 61 insertions(+), 41 deletions(-)
    
    diff --git a/Main.cpp b/Main.cpp
    index a44c04f..28121d9 100644
    a b int main(int argc, char** argv) 
    1212        QCoreApplication::setApplicationName("Merkaartor");
    1313
    1414        MainWindow Main;
     15
     16        const QStringList & params = QCoreApplication::arguments();
     17        if (params.size() == 2)
     18                Main.loadFile(params.at(1));
     19       
    1520        Main.show();
     21
    1622        return app.exec();
    1723}
    1824
  • MainWindow.cpp

    diff --git a/MainWindow.cpp b/MainWindow.cpp
    index 58baa9d..0946a10 100755
    a b static bool mayDiscardUnsavedChanges(QWidget* aWidget) 
    241241                                                                 QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Cancel) == QMessageBox::Discard;
    242242}
    243243
     244void MainWindow::loadFile(const QString & fn)
     245{
     246        if (fn.isNull())
     247                return;
     248
     249        changeCurrentDirToFile(fn);
     250
     251        MapDocument* NewDoc = new MapDocument;
     252       
     253        QString NewLayerName = tr("Open %1").arg( fn.section('/', - 1));
     254        TrackMapLayer* NewLayer = NULL;
     255
     256        bool importOK = false;
     257
     258        if (fn.endsWith(".gpx")) {
     259                NewLayer = new TrackMapLayer( NewLayerName );
     260                importOK = importGPX(this, fn, NewDoc, NewLayer);
     261        }
     262        else if (fn.endsWith(".osm")) {
     263                NewLayer = new TrackMapLayer( NewLayerName );
     264                importOK = importOSM(this, fn, NewDoc, NewLayer);
     265        }
     266        else if (fn.endsWith(".ngt")) {
     267                NewLayer = new TrackMapLayer( NewLayerName );
     268                importOK = importNGT(this, fn, NewDoc, NewLayer);
     269        }
     270        else if (fn.endsWith(".nmea") || (fn.endsWith(".nme"))) {
     271                importOK = NewDoc->importNMEA(fn);
     272        }
     273               
     274        if (importOK && NewLayer)
     275                NewDoc->add(NewLayer);
     276
     277        if (importOK == false) {
     278                delete NewDoc;
     279                delete NewLayer;
     280                QMessageBox::warning(this, tr("No valid file"), tr("%1 could not be opened.").arg(fn));
     281                return;
     282        }
     283
     284        theProperties->setSelection(0);
     285        delete theDocument;
     286        theDocument = NewDoc;
     287        theView->setDocument(theDocument);
     288        theLayers->updateContent();
     289        on_viewZoomAllAction_triggered();
     290        on_editPropertiesAction_triggered();
     291        theDocument->history().setActions(editUndoAction, editRedoAction);
     292}
     293
    244294void MainWindow::on_fileOpenAction_triggered()
    245295{
    246296        if (hasUnsavedChanges(*theDocument) && !mayDiscardUnsavedChanges(this))
    247297                return;
    248         QString s = QFileDialog::getOpenFileName(
     298
     299        QString fileName = QFileDialog::getOpenFileName(
    249300                                        this,
    250301                                        tr("Open track file"),
    251302                                        "", tr(FILTER_LOAD_SUPPORTED));
    252         if (!s.isNull()) {
    253                 changeCurrentDirToFile(s);
    254                 MapDocument* NewDoc = new MapDocument;
    255                 TrackMapLayer* NewLayer = new TrackMapLayer(tr("Open %1").arg(s.right(s.length() - s.lastIndexOf('/') - 1)));
    256                 bool OK = false;
    257                 if (s.right(4).toLower() == ".gpx") {
    258                         OK = importGPX(this, s, NewDoc, NewLayer);
    259                         if (OK) {
    260                                 NewDoc->add(NewLayer);
    261                         }
    262                 } else
    263                         if (s.right(4).toLower() == ".osm") {
    264                                 OK = importOSM(this, s, NewDoc, NewLayer);
    265                         } else
    266                                 if (s.right(4).toLower() == ".ngt") {
    267                                         OK = importNGT(this, s, NewDoc, NewLayer);
    268                                         if (OK) {
    269                                                 NewDoc->add(NewLayer);
    270                                         }
    271                                 } else
    272                                         if ((s.right(5).toLower() == ".nmea") || (s.right(4).toLower() == ".nme")) {
    273                                                 if (NewDoc->importNMEA(s)) {
    274                                                         OK = true;
    275                                                 }
    276                                         }
    277                 if (OK) {
    278                         theProperties->setSelection(0);
    279                         delete theDocument;
    280                         theDocument = NewDoc;
    281                         theView->setDocument(theDocument);
    282                         theLayers->updateContent();
    283                         on_viewZoomAllAction_triggered();
    284                         on_editPropertiesAction_triggered();
    285                         theDocument->history().setActions(editUndoAction, editRedoAction);
    286                 } else {
    287                         delete NewDoc;
    288                         delete NewLayer;
    289                         QMessageBox::warning(this, tr("Not a valid file"), tr("The file could not be opened"));
    290                 }
    291         }
     303
     304        loadFile(fileName);
    292305}
    293306
    294307void MainWindow::on_fileUploadAction_triggered()
  • MainWindow.h

    diff --git a/MainWindow.h b/MainWindow.h
    index 0b28e53..9c6c2cc 100755
    a b class MainWindow : public QMainWindow, public Ui::MainWindow 
    7979
    8080        public:
    8181                void invalidateView(bool UpdateDock = true);
     82                void loadFile(const QString & fn);
    8283
    8384        private:
    8485                MapView* theView;