From bb6fafad42abcbb4897afe6cbdca35364be4bdcc Mon Sep 17 00:00:00 2001 From: Artem Pavlenko Date: Tue, 15 Jun 2010 12:27:34 +0000 Subject: [PATCH] + don't call zoom_all if bounding box is supplied --- demo/viewer/mainwindow.cpp | 452 ++++++++++++++++++------------------- 1 file changed, 226 insertions(+), 226 deletions(-) diff --git a/demo/viewer/mainwindow.cpp b/demo/viewer/mainwindow.cpp index 42f9908a7..c890aa7b1 100644 --- a/demo/viewer/mainwindow.cpp +++ b/demo/viewer/mainwindow.cpp @@ -45,335 +45,335 @@ #include "about_dialog.hpp" MainWindow::MainWindow() - : filename_(), - default_extent_(-20037508.3428,-20037508.3428,20037508.3428,20037508.3428) + : filename_(), + default_extent_(-20037508.3428,-20037508.3428,20037508.3428,20037508.3428) { - mapWidget_ = new MapWidget(this); - QSplitter *splitter = new QSplitter(this); - QTabWidget *tabWidget=new QTabWidget; - layerTab_ = new LayerTab; - layerTab_->setFocusPolicy(Qt::NoFocus); - layerTab_->setIconSize(QSize(16,16)); + mapWidget_ = new MapWidget(this); + QSplitter *splitter = new QSplitter(this); + QTabWidget *tabWidget=new QTabWidget; + layerTab_ = new LayerTab; + layerTab_->setFocusPolicy(Qt::NoFocus); + layerTab_->setIconSize(QSize(16,16)); - //LayerDelegate *delegate = new LayerDelegate(this); - //layerTab_->setItemDelegate(delegate); - //layerTab_->setItemDelegate(new QItemDelegate(this)); - //layerTab_->setViewMode(QListView::IconMode); + //LayerDelegate *delegate = new LayerDelegate(this); + //layerTab_->setItemDelegate(delegate); + //layerTab_->setItemDelegate(new QItemDelegate(this)); + //layerTab_->setViewMode(QListView::IconMode); - layerTab_->setFlow(QListView::TopToBottom); - tabWidget->addTab(layerTab_,tr("Layers")); + layerTab_->setFlow(QListView::TopToBottom); + tabWidget->addTab(layerTab_,tr("Layers")); - // Styles tab - styleTab_ = new StyleTab; - tabWidget->addTab(styleTab_,tr("Styles")); - splitter->addWidget(tabWidget); - splitter->addWidget(mapWidget_); - QList list; - list.push_back(200); - list.push_back(600); - splitter->setSizes(list); + // Styles tab + styleTab_ = new StyleTab; + tabWidget->addTab(styleTab_,tr("Styles")); + splitter->addWidget(tabWidget); + splitter->addWidget(mapWidget_); + QList list; + list.push_back(200); + list.push_back(600); + splitter->setSizes(list); - mapWidget_->setFocusPolicy(Qt::StrongFocus); - mapWidget_->setFocus(); + mapWidget_->setFocusPolicy(Qt::StrongFocus); + mapWidget_->setFocus(); - //setCentralWidget(mapWidget_); - setCentralWidget(splitter); - createActions(); - createMenus(); - createToolBars(); - createContextMenu(); + //setCentralWidget(mapWidget_); + setCentralWidget(splitter); + createActions(); + createMenus(); + createToolBars(); + createContextMenu(); - setWindowTitle(tr("Mapnik Viewer")); - status=new QStatusBar(this); - status->showMessage(tr("")); - setStatusBar(status); - resize(800,600); + setWindowTitle(tr("Mapnik Viewer")); + status=new QStatusBar(this); + status->showMessage(tr("")); + setStatusBar(status); + resize(800,600); - //connect mapview to layerlist - connect(mapWidget_, SIGNAL(mapViewChanged()),layerTab_, SLOT(update())); - // slider - connect(slider_,SIGNAL(valueChanged(int)),mapWidget_,SLOT(zoomToLevel(int))); - // - connect(layerTab_,SIGNAL(update_mapwidget()),mapWidget_,SLOT(updateMap())); - connect(layerTab_,SIGNAL(layerSelected(int)), - mapWidget_,SLOT(layerSelected(int))); + //connect mapview to layerlist + connect(mapWidget_, SIGNAL(mapViewChanged()),layerTab_, SLOT(update())); + // slider + connect(slider_,SIGNAL(valueChanged(int)),mapWidget_,SLOT(zoomToLevel(int))); + // + connect(layerTab_,SIGNAL(update_mapwidget()),mapWidget_,SLOT(updateMap())); + connect(layerTab_,SIGNAL(layerSelected(int)), + mapWidget_,SLOT(layerSelected(int))); } MainWindow::~MainWindow() { - delete mapWidget_; + delete mapWidget_; } void MainWindow::closeEvent(QCloseEvent* event) { - event->accept(); + event->accept(); } void MainWindow::createContextMenu() { - layerTab_->setContextMenuPolicy(Qt::ActionsContextMenu); - layerTab_->addAction(openAct); - layerTab_->addAction(layerInfo); + layerTab_->setContextMenuPolicy(Qt::ActionsContextMenu); + layerTab_->addAction(openAct); + layerTab_->addAction(layerInfo); } void MainWindow::open(QString const& path) { - if (path.isNull()) - { - filename_ = QFileDialog::getOpenFileName(this,tr("Open Mapnik file"), - currentPath,"*.xml"); - } - else - { - filename_ = path; - } + if (path.isNull()) + { + filename_ = QFileDialog::getOpenFileName(this,tr("Open Mapnik file"), + currentPath,"*.xml"); + } + else + { + filename_ = path; + } - if (!filename_.isEmpty()) - { - load_map_file(filename_); - //zoom_all(); - setWindowTitle(tr("%1 - Mapnik Viewer").arg(filename_)); - } + if (!filename_.isEmpty()) + { + load_map_file(filename_); + //zoom_all(); + setWindowTitle(tr("%1 - Mapnik Viewer").arg(filename_)); + } } -void MainWindow::reload() +void MainWindow::reload() { if (!filename_.isEmpty()) { - - mapnik::box2d bbox = mapWidget_->getMap()->getCurrentExtent(); - load_map_file(filename_); - mapWidget_->zoomToBox(bbox); - setWindowTitle(tr("%1 - *Reloaded*").arg(filename_)); + + mapnik::box2d bbox = mapWidget_->getMap()->getCurrentExtent(); + load_map_file(filename_); + mapWidget_->zoomToBox(bbox); + setWindowTitle(tr("%1 - *Reloaded*").arg(filename_)); } } void MainWindow::save() { - QString initialPath = QDir::currentPath() + "/untitled.xml"; - QString filename = QFileDialog::getSaveFileName(this, tr("Save"), - initialPath, - tr("%1 Files (*.xml)") - .arg(QString("Mapnik definition"))); - if (!filename.isEmpty()) - { - std::cout<<"saving "<< filename.toStdString() << std::endl; - mapnik::save_map(*mapWidget_->getMap(),filename.toStdString()); - } + QString initialPath = QDir::currentPath() + "/untitled.xml"; + QString filename = QFileDialog::getSaveFileName(this, tr("Save"), + initialPath, + tr("%1 Files (*.xml)") + .arg(QString("Mapnik definition"))); + if (!filename.isEmpty()) + { + std::cout<<"saving "<< filename.toStdString() << std::endl; + mapnik::save_map(*mapWidget_->getMap(),filename.toStdString()); + } } void MainWindow::load_map_file(QString const& filename) { - std::cout<<"loading "<< filename.toStdString() << std::endl; - unsigned width = mapWidget_->width(); - unsigned height = mapWidget_->height(); - boost::shared_ptr map(new mapnik::Map(width,height)); - mapWidget_->setMap(map); - try - { - mapnik::load_map(*map,filename.toStdString()); - } - catch (mapnik::config_error & ex) - { - std::cout << ex.what() << "\n"; - } - map->zoom_all(); - mapnik::box2d const& ext = map->getCurrentExtent(); - mapWidget_->zoomToBox(ext); - layerTab_->setModel(new LayerListModel(map,this)); - styleTab_->setModel(new StyleModel(map,this)); + std::cout<<"loading "<< filename.toStdString() << std::endl; + unsigned width = mapWidget_->width(); + unsigned height = mapWidget_->height(); + boost::shared_ptr map(new mapnik::Map(width,height)); + mapWidget_->setMap(map); + try + { + mapnik::load_map(*map,filename.toStdString()); + } + catch (mapnik::config_error & ex) + { + std::cout << ex.what() << "\n"; + } + //map->zoom_all(); + //mapnik::box2d const& ext = map->getCurrentExtent(); + //mapWidget_->zoomToBox(ext); + layerTab_->setModel(new LayerListModel(map,this)); + styleTab_->setModel(new StyleModel(map,this)); } void MainWindow::zoom_all() { - mapWidget_->defaultView(); + mapWidget_->defaultView(); } void MainWindow::zoom_to_box() { - mapWidget_->setTool(MapWidget::ZoomToBox); + mapWidget_->setTool(MapWidget::ZoomToBox); } void MainWindow::pan() { - mapWidget_->setTool(MapWidget::Pan); + mapWidget_->setTool(MapWidget::Pan); } void MainWindow::info() { - mapWidget_->setTool(MapWidget::Info); + mapWidget_->setTool(MapWidget::Info); } void MainWindow::pan_left() { - mapWidget_->panLeft(); + mapWidget_->panLeft(); } void MainWindow::pan_right() { - mapWidget_->panRight(); + mapWidget_->panRight(); } void MainWindow::pan_up() { - mapWidget_->panUp(); + mapWidget_->panUp(); } void MainWindow::pan_down() { - mapWidget_->panDown(); + mapWidget_->panDown(); } void MainWindow::about() { - about_dialog dlg; - dlg.exec(); + about_dialog dlg; + dlg.exec(); } void MainWindow::export_as() { - QAction *action = qobject_cast(sender()); - QByteArray fileFormat = action->data().toByteArray(); - QString initialPath = QDir::currentPath() + "/map." + fileFormat; + QAction *action = qobject_cast(sender()); + QByteArray fileFormat = action->data().toByteArray(); + QString initialPath = QDir::currentPath() + "/map." + fileFormat; - QString fileName = QFileDialog::getSaveFileName(this, tr("Export As"), - initialPath, - tr("%1 Files (*.%2);;All Files (*)") - .arg(QString(fileFormat.toUpper())) - .arg(QString(fileFormat))); - if (!fileName.isEmpty()) - { - QPixmap const& pix = mapWidget_->pixmap(); - pix.save(fileName); - } + QString fileName = QFileDialog::getSaveFileName(this, tr("Export As"), + initialPath, + tr("%1 Files (*.%2);;All Files (*)") + .arg(QString(fileFormat.toUpper())) + .arg(QString(fileFormat))); + if (!fileName.isEmpty()) + { + QPixmap const& pix = mapWidget_->pixmap(); + pix.save(fileName); + } } void MainWindow::print() { - //Q_ASSERT(mapWidget_->pixmap()); - //QPrintDialog dialog(&printer, this); - //if (dialog.exec()) { - // QPainter painter(&printer); - // QRect rect = painter.viewport(); - // QSize size = mapWidget_->pixmap()->size(); - // size.scale(rect.size(), Qt::KeepAspectRatio); - // painter.setViewport(rect.x(), rect.y(), size.width(), size.height()); - // painter.setWindow(mapWidget_->pixmap()->rect()); - // painter.drawPixmap(0, 0, *mapWidget_->pixmap()); - //} + //Q_ASSERT(mapWidget_->pixmap()); + //QPrintDialog dialog(&printer, this); + //if (dialog.exec()) { + // QPainter painter(&printer); + // QRect rect = painter.viewport(); + // QSize size = mapWidget_->pixmap()->size(); + // size.scale(rect.size(), Qt::KeepAspectRatio); + // painter.setViewport(rect.x(), rect.y(), size.width(), size.height()); + // painter.setWindow(mapWidget_->pixmap()->rect()); + // painter.drawPixmap(0, 0, *mapWidget_->pixmap()); + //} } void MainWindow::createActions() { - //exportAct = new QAction(tr("&Export as ..."),this); - //exportAct->setShortcut(tr("Ctrl+E")); - //connect(exportAct, SIGNAL(triggered()), this, SLOT(export_as())); - zoomAllAct = new QAction(QIcon(":/images/home.png"),tr("Zoom All"),this); - connect(zoomAllAct, SIGNAL(triggered()), this, SLOT(zoom_all())); + //exportAct = new QAction(tr("&Export as ..."),this); + //exportAct->setShortcut(tr("Ctrl+E")); + //connect(exportAct, SIGNAL(triggered()), this, SLOT(export_as())); + zoomAllAct = new QAction(QIcon(":/images/home.png"),tr("Zoom All"),this); + connect(zoomAllAct, SIGNAL(triggered()), this, SLOT(zoom_all())); - zoomBoxAct = new QAction(QIcon(":/images/zoombox.png"),tr("Zoom To Box"),this); - zoomBoxAct->setCheckable(true); - connect(zoomBoxAct, SIGNAL(triggered()), this, SLOT(zoom_to_box())); + zoomBoxAct = new QAction(QIcon(":/images/zoombox.png"),tr("Zoom To Box"),this); + zoomBoxAct->setCheckable(true); + connect(zoomBoxAct, SIGNAL(triggered()), this, SLOT(zoom_to_box())); - panAct = new QAction(QIcon(":/images/pan.png"),tr("Pan"),this); - panAct->setCheckable(true); - connect(panAct, SIGNAL(triggered()), this, SLOT(pan())); + panAct = new QAction(QIcon(":/images/pan.png"),tr("Pan"),this); + panAct->setCheckable(true); + connect(panAct, SIGNAL(triggered()), this, SLOT(pan())); - infoAct = new QAction(QIcon(":/images/info.png"),tr("Info"),this); - infoAct->setCheckable(true); - connect(infoAct, SIGNAL(triggered()), this, SLOT(info())); + infoAct = new QAction(QIcon(":/images/info.png"),tr("Info"),this); + infoAct->setCheckable(true); + connect(infoAct, SIGNAL(triggered()), this, SLOT(info())); - toolsGroup=new QActionGroup(this); - toolsGroup->addAction(zoomBoxAct); - toolsGroup->addAction(panAct); - toolsGroup->addAction(infoAct); - zoomBoxAct->setChecked(true); + toolsGroup=new QActionGroup(this); + toolsGroup->addAction(zoomBoxAct); + toolsGroup->addAction(panAct); + toolsGroup->addAction(infoAct); + zoomBoxAct->setChecked(true); - openAct=new QAction(tr("Open Map definition"),this); - connect(openAct,SIGNAL(triggered()),this,SLOT(open())); - saveAct=new QAction(tr("Save Map definition"),this); - connect(saveAct,SIGNAL(triggered()),this,SLOT(save())); + openAct=new QAction(tr("Open Map definition"),this); + connect(openAct,SIGNAL(triggered()),this,SLOT(open())); + saveAct=new QAction(tr("Save Map definition"),this); + connect(saveAct,SIGNAL(triggered()),this,SLOT(save())); - panLeftAct = new QAction(QIcon(":/images/left.png"),tr("&Pan Left"),this); - connect(panLeftAct, SIGNAL(triggered()), this, SLOT(pan_left())); - panRightAct = new QAction(QIcon(":/images/right.png"),tr("&Pan Right"),this); - connect(panRightAct, SIGNAL(triggered()), this, SLOT(pan_right())); - panUpAct = new QAction(QIcon(":/images/up.png"),tr("&Pan Up"),this); - connect(panUpAct, SIGNAL(triggered()), this, SLOT(pan_up())); - panDownAct = new QAction(QIcon(":/images/down.png"),tr("&Pan Down"),this); - connect(panDownAct, SIGNAL(triggered()), this, SLOT(pan_down())); + panLeftAct = new QAction(QIcon(":/images/left.png"),tr("&Pan Left"),this); + connect(panLeftAct, SIGNAL(triggered()), this, SLOT(pan_left())); + panRightAct = new QAction(QIcon(":/images/right.png"),tr("&Pan Right"),this); + connect(panRightAct, SIGNAL(triggered()), this, SLOT(pan_right())); + panUpAct = new QAction(QIcon(":/images/up.png"),tr("&Pan Up"),this); + connect(panUpAct, SIGNAL(triggered()), this, SLOT(pan_up())); + panDownAct = new QAction(QIcon(":/images/down.png"),tr("&Pan Down"),this); + connect(panDownAct, SIGNAL(triggered()), this, SLOT(pan_down())); - reloadAct = new QAction(QIcon(":/images/reload.png"),tr("Reload"),this); - connect(reloadAct, SIGNAL(triggered()), this, SLOT(reload())); + reloadAct = new QAction(QIcon(":/images/reload.png"),tr("Reload"),this); + connect(reloadAct, SIGNAL(triggered()), this, SLOT(reload())); - layerInfo = new QAction(QIcon(":/images/info.png"),tr("&Layer info"),layerTab_); - connect(layerInfo, SIGNAL(triggered()), layerTab_,SLOT(layerInfo())); - connect(layerTab_, SIGNAL(doubleClicked(QModelIndex const&)), layerTab_,SLOT(layerInfo2(QModelIndex const&))); - foreach (QByteArray format, QImageWriter::supportedImageFormats()) - { - QString text = tr("%1...").arg(QString(format).toUpper()); + layerInfo = new QAction(QIcon(":/images/info.png"),tr("&Layer info"),layerTab_); + connect(layerInfo, SIGNAL(triggered()), layerTab_,SLOT(layerInfo())); + connect(layerTab_, SIGNAL(doubleClicked(QModelIndex const&)), layerTab_,SLOT(layerInfo2(QModelIndex const&))); + foreach (QByteArray format, QImageWriter::supportedImageFormats()) + { + QString text = tr("%1...").arg(QString(format).toUpper()); - QAction *action = new QAction(text, this); - action->setData(format); - connect(action, SIGNAL(triggered()), this, SLOT(export_as())); - exportAsActs.append(action); - } + QAction *action = new QAction(text, this); + action->setData(format); + connect(action, SIGNAL(triggered()), this, SLOT(export_as())); + exportAsActs.append(action); + } - printAct = new QAction(QIcon(":/images/print.png"),tr("&Print ..."),this); - printAct->setShortcut(tr("Ctrl+E")); - connect(printAct, SIGNAL(triggered()), this, SLOT(print())); + printAct = new QAction(QIcon(":/images/print.png"),tr("&Print ..."),this); + printAct->setShortcut(tr("Ctrl+E")); + connect(printAct, SIGNAL(triggered()), this, SLOT(print())); - exitAct = new QAction(tr("E&xit"), this); - exitAct->setShortcut(tr("Ctrl+Q")); - connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); + exitAct = new QAction(tr("E&xit"), this); + exitAct->setShortcut(tr("Ctrl+Q")); + connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); - aboutAct = new QAction(QIcon(":/images/about.png"),tr("&About"), this); - connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); + aboutAct = new QAction(QIcon(":/images/about.png"),tr("&About"), this); + connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); } void MainWindow::createMenus() { - exportMenu = new QMenu(tr("&Export As"), this); - foreach (QAction *action, exportAsActs) - exportMenu->addAction(action); + exportMenu = new QMenu(tr("&Export As"), this); + foreach (QAction *action, exportAsActs) + exportMenu->addAction(action); - fileMenu = new QMenu(tr("&File"),this); - fileMenu->addAction(openAct); - fileMenu->addAction(saveAct); - fileMenu->addMenu(exportMenu); - fileMenu->addAction(printAct); - fileMenu->addSeparator(); - fileMenu->addAction(exitAct); - menuBar()->addMenu(fileMenu); + fileMenu = new QMenu(tr("&File"),this); + fileMenu->addAction(openAct); + fileMenu->addAction(saveAct); + fileMenu->addMenu(exportMenu); + fileMenu->addAction(printAct); + fileMenu->addSeparator(); + fileMenu->addAction(exitAct); + menuBar()->addMenu(fileMenu); - helpMenu = new QMenu(tr("&Help"), this); - helpMenu->addAction(aboutAct); - menuBar()->addMenu(helpMenu); + helpMenu = new QMenu(tr("&Help"), this); + helpMenu->addAction(aboutAct); + menuBar()->addMenu(helpMenu); } void MainWindow::createToolBars() { - fileToolBar = addToolBar(tr("Actions")); - fileToolBar->addAction(zoomAllAct); - fileToolBar->addAction(zoomBoxAct); - fileToolBar->addAction(panAct); - fileToolBar->addAction(panLeftAct); - fileToolBar->addAction(panRightAct); - fileToolBar->addAction(panUpAct); - fileToolBar->addAction(panDownAct); - fileToolBar->addAction(infoAct); - fileToolBar->addAction(reloadAct); - fileToolBar->addAction(printAct); - slider_ = new QSlider(Qt::Horizontal,fileToolBar); - slider_->setRange(1,18); - slider_->setTickPosition(QSlider::TicksBelow); - slider_->setTickInterval(1); - slider_->setTracking(false); - fileToolBar->addWidget(slider_); - fileToolBar->addAction(aboutAct); + fileToolBar = addToolBar(tr("Actions")); + fileToolBar->addAction(zoomAllAct); + fileToolBar->addAction(zoomBoxAct); + fileToolBar->addAction(panAct); + fileToolBar->addAction(panLeftAct); + fileToolBar->addAction(panRightAct); + fileToolBar->addAction(panUpAct); + fileToolBar->addAction(panDownAct); + fileToolBar->addAction(infoAct); + fileToolBar->addAction(reloadAct); + fileToolBar->addAction(printAct); + slider_ = new QSlider(Qt::Horizontal,fileToolBar); + slider_->setRange(1,18); + slider_->setTickPosition(QSlider::TicksBelow); + slider_->setTickInterval(1); + slider_->setTracking(false); + fileToolBar->addWidget(slider_); + fileToolBar->addAction(aboutAct); } @@ -382,16 +382,16 @@ void MainWindow::set_default_extent(double x0,double y0, double x1, double y1) { try { - boost::shared_ptr map_ptr = mapWidget_->getMap(); - if (map_ptr) - { - mapnik::projection prj(map_ptr->srs()); - prj.forward(x0,y0); - prj.forward(x1,y1); - default_extent_=mapnik::box2d(x0,y0,x1,y1); - mapWidget_->zoomToBox(default_extent_); - std::cout << "SET DEFAULT EXT\n"; - } + boost::shared_ptr map_ptr = mapWidget_->getMap(); + if (map_ptr) + { + mapnik::projection prj(map_ptr->srs()); + prj.forward(x0,y0); + prj.forward(x1,y1); + default_extent_=mapnik::box2d(x0,y0,x1,y1); + mapWidget_->zoomToBox(default_extent_); + std::cout << "SET DEFAULT EXT\n"; + } } catch (...) {}