From 72a1f604f7eba5a39c769780920d0c0dff9e60ba Mon Sep 17 00:00:00 2001 From: goldenhawking Date: Mon, 12 Sep 2016 11:18:16 +0800 Subject: [PATCH] We add a "lite mode" for main frame. in lite mode, no tab bars or dock widget will be shown. a method enableLiteMode is both provided in widgets and axwidget. --- qtviewer_planetosm/osm_frame_widget.cpp | 50 ++++++++++++++++++--- qtviewer_planetosm/osm_frame_widget.h | 2 +- qtviewer_planetosm/osm_frame_widget.ui | 21 ++++----- qtviewer_planetosm/qtaxviewer_planetosm.cpp | 20 ++++++++- qtviewer_planetosm/qtwidget_planetosm.cpp | 5 +++ qtviewer_planetosm/qtwidget_planetosm.h | 1 + 6 files changed, 80 insertions(+), 19 deletions(-) diff --git a/qtviewer_planetosm/osm_frame_widget.cpp b/qtviewer_planetosm/osm_frame_widget.cpp index 252820f..0f6b8aa 100644 --- a/qtviewer_planetosm/osm_frame_widget.cpp +++ b/qtviewer_planetosm/osm_frame_widget.cpp @@ -138,9 +138,7 @@ bool osm_frame_widget::eventFilter(QObject *obj, QEvent *event) } else if (obj == ui->dockWidget_QTV_side) { - ui->dockWidget_QTV_side->hide(); - QMargins m = this->layout()->contentsMargins(); - this->layout()->setContentsMargins(m.left(),m.top(),12,m.bottom()); + enableLiteMode(true); return true; } else if (m_PropPageslayer.contains(obj)) @@ -198,10 +196,7 @@ void osm_frame_widget::mousePressEvent(QMouseEvent * e) { if (ui->dockWidget_QTV_side->isVisible()==false) { - ui->dockWidget_QTV_side->show(); - - QMargins m = this->layout()->contentsMargins(); - this->layout()->setContentsMargins(m.left(),m.top(),m.left(),m.bottom()); + enableLiteMode(false); } } @@ -429,3 +424,44 @@ void osm_frame_widget::on_pushButton_QTV_saveToFile_clicked() } } } +void osm_frame_widget::enableLiteMode(bool bEnabled) +{ + if (bEnabled==true) + { + if (ui->tab_map->parent()==this) + return; + ui->tabWidget_main->hide(); + int idx = ui->tabWidget_main->indexOf(ui->tab_map); + ui->tab_map->setParent(this); + if (idx>=0) + ui->tabWidget_main->removeTab(idx); + //remove topmost flag + Qt::WindowFlags flg = ui->tab_map->windowFlags(); + flg &= ~(Qt::WindowMinMaxButtonsHint|Qt::WindowStaysOnTopHint|Qt::Window ); + ui->tab_map->setWindowFlags(flg); + //add to current Layer + this->layout()->addWidget(ui->tab_map); + ui->tab_map->show(); + ui->dockWidget_QTV_side->hide(); + QMargins m = this->layout()->contentsMargins(); + this->layout()->setContentsMargins(m.left(),m.top(),12,m.bottom()); + + } + else + { + Qt::WindowFlags flg = ui->tab_map->windowFlags(); + flg &= ~(Qt::WindowMinMaxButtonsHint|Qt::WindowStaysOnTopHint|Qt::Window ); + ui->tab_map->setWindowFlags(flg); + int idx = ui->tabWidget_main->addTab( + ui->tab_map, + "Map" + ); + ui->tabWidget_main->setTabIcon(idx,ui->tab_map->windowIcon()); + ui->tabWidget_main->show(); + ui->tabWidget_main->setCurrentIndex(idx); + QMargins m = this->layout()->contentsMargins(); + this->layout()->setContentsMargins(m.left(),m.top(),m.left(),m.bottom()); + ui->dockWidget_QTV_side->show(); + + } +} diff --git a/qtviewer_planetosm/osm_frame_widget.h b/qtviewer_planetosm/osm_frame_widget.h index d5c9350..42010cc 100644 --- a/qtviewer_planetosm/osm_frame_widget.h +++ b/qtviewer_planetosm/osm_frame_widget.h @@ -30,7 +30,7 @@ public: public: //Get tile viewer tilesviewer * viewer(); - + void enableLiteMode(bool bEnabled); protected: bool eventFilter(QObject *obj, QEvent *event); protected: diff --git a/qtviewer_planetosm/osm_frame_widget.ui b/qtviewer_planetosm/osm_frame_widget.ui index f3b021d..8b701f6 100644 --- a/qtviewer_planetosm/osm_frame_widget.ui +++ b/qtviewer_planetosm/osm_frame_widget.ui @@ -17,23 +17,23 @@ :/ui/icons/Folder Online aqua.png:/ui/icons/Folder Online aqua.png - + + + 1 + - 0 + 1 - 0 + 1 - 0 + 1 - 0 + 1 - - 0 - - + QTabWidget::South @@ -115,7 +115,7 @@ - + @@ -481,6 +481,7 @@ + diff --git a/qtviewer_planetosm/qtaxviewer_planetosm.cpp b/qtviewer_planetosm/qtaxviewer_planetosm.cpp index e9f360b..97f522c 100644 --- a/qtviewer_planetosm/qtaxviewer_planetosm.cpp +++ b/qtviewer_planetosm/qtaxviewer_planetosm.cpp @@ -460,8 +460,26 @@ QString qtaxviewer_planetosm::osm_layer_call_function(QString layerName, QString p_out = la->call_func(p_in); strRes = map_to_string(p_out); } + else if (layerName=="MAIN_MAP") + { + QMap p_in; + p_in = string_to_map(args); + if (p_in["function"].toString().toUpper()=="ENABLELITEMODE") + { + if (p_in["mode"].toInt()==0) + this->enableLiteMode(false); + else + this->enableLiteMode(true); + + } + else + { + strRes = QString("error=Layer name \"%1\" does not have this function.;").arg(layerName); + } + + } else - strRes = QString("error=Layer name \"%1\" does not exist.;").arg(layerName); + strRes = QString("error=Layer name \"%1\" does not exist.MAIN_MAP means the main map frame.;").arg(layerName); return strRes; } diff --git a/qtviewer_planetosm/qtwidget_planetosm.cpp b/qtviewer_planetosm/qtwidget_planetosm.cpp index 99a57d9..8ebfae1 100644 --- a/qtviewer_planetosm/qtwidget_planetosm.cpp +++ b/qtviewer_planetosm/qtwidget_planetosm.cpp @@ -465,3 +465,8 @@ QString qtwidget_planetosm::osm_layer_call_function(QString layerName, QString a return strRes; } +void qtwidget_planetosm::enableLiteMode(bool bEnabled) +{ + osm_frame_widget * mp = qobject_cast(m_map_widget); + mp->enableLiteMode(bEnabled); +} diff --git a/qtviewer_planetosm/qtwidget_planetosm.h b/qtviewer_planetosm/qtwidget_planetosm.h index 9df1cd8..f320ca5 100644 --- a/qtviewer_planetosm/qtwidget_planetosm.h +++ b/qtviewer_planetosm/qtwidget_planetosm.h @@ -30,6 +30,7 @@ protected: public: explicit qtwidget_planetosm(QWidget *parent = 0); ~qtwidget_planetosm(); + void enableLiteMode(bool bEnabled); //! slots below is designed for widget interfaces public: QTVOSM::viewer_interface * viewer(); -- GitLab