From 82aa515a52b70ba317510d5e9faec1f9ae093703 Mon Sep 17 00:00:00 2001 From: pip Date: Sun, 27 Jun 2010 18:59:40 +0000 Subject: [PATCH] Cosmetic changes to the look of the new map plug-in (buttons colours, widget borders etc). git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@907 ebee16cc-31ac-478f-84a7-5cbb03baadba --- ground/src/plugins/opmap/images/blank1.png | Bin 3256 -> 4494 bytes .../opmap/images/combobox_down_arrow.png | Bin 384 -> 1101 bytes ground/src/plugins/opmap/images/go.png | Bin 2552 -> 4038 bytes ground/src/plugins/opmap/images/hold.png | Bin 2614 -> 4045 bytes ground/src/plugins/opmap/images/home.png | Bin 2687 -> 4092 bytes ground/src/plugins/opmap/images/hover.png | Bin 2618 -> 2618 bytes ground/src/plugins/opmap/images/left_but.png | Bin 0 -> 1163 bytes .../plugins/opmap/images/next_waypoint.png | Bin 0 -> 4660 bytes .../plugins/opmap/images/prev_waypoint.png | Bin 0 -> 4679 bytes ground/src/plugins/opmap/images/right_but.png | Bin 0 -> 614 bytes ground/src/plugins/opmap/opmap.pro | 9 +- ground/src/plugins/opmap/opmap.qrc | 12 +- .../plugins/opmap/opmap_mapoverlaywidget.cpp | 36 ++ .../plugins/opmap/opmap_mapoverlaywidget.h | 27 + .../plugins/opmap/opmap_mapoverlaywidget.ui | 438 ++++++++++++++++ ground/src/plugins/opmap/opmap_widget.ui | 484 ++++++++++++++---- .../src/plugins/opmap/opmapgadgetwidget.cpp | 160 ++---- ground/src/plugins/opmap/opmapgadgetwidget.h | 10 +- 18 files changed, 945 insertions(+), 231 deletions(-) create mode 100644 ground/src/plugins/opmap/images/left_but.png create mode 100644 ground/src/plugins/opmap/images/next_waypoint.png create mode 100644 ground/src/plugins/opmap/images/prev_waypoint.png create mode 100644 ground/src/plugins/opmap/images/right_but.png create mode 100644 ground/src/plugins/opmap/opmap_mapoverlaywidget.cpp create mode 100644 ground/src/plugins/opmap/opmap_mapoverlaywidget.h create mode 100644 ground/src/plugins/opmap/opmap_mapoverlaywidget.ui diff --git a/ground/src/plugins/opmap/images/blank1.png b/ground/src/plugins/opmap/images/blank1.png index e0bb6d412958e9289e6bcc797ed8213a2147006d..faed06d1c1b04af3d0b1f9a7cfb7d7487756e182 100644 GIT binary patch delta 4400 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 delta 257 zcmV+c0sj8Y2!I2SWC$7xFB@8WqveroCw~BDP)t-s0000G5D*Ow4GIbhetv#yYij}m z0#sB~zP`S-wY4uVFCZWwr>CdDz`%opg9r!+Y;0`3y}d+4M4+Ic6ciK-3k!>ji@(3W zT3T8G0RgQ~CMI@vc6WDoWo2ay3=C9(J{SN100DGTPE!Ct=GbNc0B!(S zNklQ7bi$SSOjh? zn*fk6D1>AYHxDl_A3w6y>>Qk2C~je9VP!*g9U~K2o&o~^L;wWR#W-#~00000NkvXX Hu0mjf6&O`K diff --git a/ground/src/plugins/opmap/images/go.png b/ground/src/plugins/opmap/images/go.png index 91cf86306726a6c3769fd39d38fe3ab331f28d07..b491d791ad33a4db5ac66ec9601bd0c6b39c8d6a 100644 GIT binary patch literal 4038 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 diff --git a/ground/src/plugins/opmap/images/hold.png b/ground/src/plugins/opmap/images/hold.png index 901fcb2bdbb03ae8fb48c5227b0606cc65dd7ecf..9879fd3f83802e691e2329b3482dc7b0f588b2cd 100644 GIT binary patch literal 4045 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 literal 2614 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 diff --git a/ground/src/plugins/opmap/images/hover.png b/ground/src/plugins/opmap/images/hover.png index 01157da09ce0b8cca0b14025207f58d640639f29..816619e3c4f31ebe0b7f51d2bdb032c6201f17fa 100644 GIT binary patch delta 504 zcmdlbvP)z_3Wqc|j~=(Y?AM7o2K7_IT8o_0fMlS)Cxrd-`cokK_3bAE0|PTNGY1<7 zH#-*(2RAP#k0`IO7@vqFzqp)`w33LtvZ#W(xU#0Cs*aR~o{W}(jJA=Su9g4wWqd|kB*D4u4|BiSBQ~Mq-j93X;7?rNQzZdnoUfOLt=itV@k1edbw+MjYod1 zXF&NsXRmEL2SPi}U*CBFh;Hn<2t+q`U%I&$gl_G-3`Dp0U%7MW8W7z*eEr^$ z8~2XgxPSa65Is0?>*2}UK=k+&8M$#KYxG!_1Bl5e}4Sl9LS`_sKUSij3uB& YK=&_-n}~+~|NsA>GoWqrT;{oK04YEoCjbBd delta 504 zcmVazd<0D$TMfB>_A|Np@M|G@wM z@Bjb+0|EjG2L%fV1`G)Y4hskt5DXU*4H**-9~TiK8WSWO6eu1RDj*jvBN;Cw8Zjjs zGbbE3Djqy8AwV%BLo+2yIVnv#Do#8rR6s6PK`&cIGF?YAUr01&PB>^!Id4@xaer1m zby+}pTta?eMSx;Pf@4R7WJrf+N{wqxk8MtnZcmhPQJ8d7nsrp0cU7HuR-buSqkLJY zfLyGDUa*E>wTff6jAXfuWxI}MypU(Uk!Zw~YsQys%bRb_oN&*canYZ0(xG$IqIA}y zb=akL+NO8hsCeC}dEu;kuz!B&v485bfb6t^?zV#RxP|Nqzj|Jwim-2eaK|Nr9u|L6bz?*ISvvrz&n u0VDtb|Nrp+;H2uafd2ph0RI60{{R30|Nj900RR90|NqFK7oD@61DyuRS{nNR diff --git a/ground/src/plugins/opmap/images/left_but.png b/ground/src/plugins/opmap/images/left_but.png new file mode 100644 index 0000000000000000000000000000000000000000..0766e62c9aa4d1ba7dc6a780e74ba22951edd9ef GIT binary patch literal 1163 zcmeAS@N?(olHy`uVBq!ia0vp^f3wrSy}h)-MfDM`nq-N z=Fgv>o16RW*|SHF9$me9_2|)~n>KA)zI^%2nKR$KdGqASlUuiLoj!ef$BrGVSFi5r z>9Mx9K701;?%lg5O`7!f?c3L{U+>?)f6A086DCZksHph(@#CF4cP?GJbl|{&jT<*I zF)?*^c1A}>*VWZYN=harCFSJg)YQ~8Ha0djHPzSGr>CcDX=xofa-_Aj_4DV?+qZ9D zwQAL@S+k0Zi+}$7`QpWkn>TOn-Me?`(xpFs{J4Mr{=tI>w{6?@|NsB<=g zFVCMp-??+Aii*nLzkgS*T*=191`Lf+Frq?W^}b+dpobYtg8YIR9G=}s19DD!x;TbZ z+)7SZAjHAJ@x9kUn3Ic-(^d52M**G?7oo!M7r&T(`25^K=;G%OAs>Q1U2E*NIN9ZG zVX?d8#DeY}S)UKPd`UUVE7P+i^~%FrUrfI8@-!;_nR9A}(l!YtwIdxj5;|r~P*>_w zOzKulYF12YQase7nAEG7|(+%aRKaGOQ4yK`_{X!l(IXm+&&3fk)HS1nUnbnax2 z%Ay4;R1WcnA5u`$Q`A(|J>2PG-{iEW=aAAL4o0>-Ikz~w6h^i%vobzEwp|Pio~8~* T)YTp)f}+&Z)z4*}Q$iB}FJv@n literal 0 HcmV?d00001 diff --git a/ground/src/plugins/opmap/images/next_waypoint.png b/ground/src/plugins/opmap/images/next_waypoint.png new file mode 100644 index 0000000000000000000000000000000000000000..96b5b363f651cd4f878fd53a63a2a9ec84332d6f GIT binary patch literal 4660 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 JPDHLkV1huV!4Uue literal 0 HcmV?d00001 diff --git a/ground/src/plugins/opmap/images/right_but.png b/ground/src/plugins/opmap/images/right_but.png new file mode 100644 index 0000000000000000000000000000000000000000..d0d78acd8fbc352ed58d234523e7760f609611c4 GIT binary patch literal 614 zcmV-s0-61ZP)WdKxlWgs##AWC&^ATls9Fd#5DIxsmpFgGAAFfcGMtpQu)00007bV*G` z2igW32?Z~%UP43w000SaNLh0L01EH`01EH{Laa2H00004XF*Lt006O%3;baP0002n zP)t-s0001vj*gA!^6YK$jFhAk)WWUudlDXyu8WD$=24^pP!$uuCCYD*WTXV znVFfVr>C;Avc<*4)z#JF;^OA!=8TMttE;QHxVX#9%i7x7+9|9?Xj`3z`(%L($d`A-0|`8iHV7Retvv>e1U<1f`Wp7e}8Rl zZN$XHnwpxbs;alQxAXJ!rKP34y}jAl+34u#`T6;_wzk2+!QbEC`1ttG&(Ht=|GBxj z=jZ42^z{Dz{;8>{{r&y?E1uQ>0004WQchCF;slXC zkRFgO5C@13qywZK=t5u8^6{|`g8T@Q%yO8il=4>fAv$GnaXKbu7D{sgMhSCSO5S307*qoM6N<$g6K9g AVgLXD literal 0 HcmV?d00001 diff --git a/ground/src/plugins/opmap/opmap.pro b/ground/src/plugins/opmap/opmap.pro index ab65cca07..63b34dd60 100644 --- a/ground/src/plugins/opmap/opmap.pro +++ b/ground/src/plugins/opmap/opmap.pro @@ -10,16 +10,19 @@ HEADERS += opmapplugin.h \ opmapgadgetconfiguration.h \ opmapgadget.h \ opmapgadgetwidget.h \ - opmap_waypointeditor_dialog.h + opmap_waypointeditor_dialog.h \ + opmap_mapoverlaywidget.h SOURCES += opmapplugin.cpp \ opmapgadgetwidget.cpp \ opmapgadgetoptionspage.cpp \ opmapgadgetfactory.cpp \ opmapgadgetconfiguration.cpp \ opmapgadget.cpp \ - opmap_waypointeditor_dialog.cpp + opmap_waypointeditor_dialog.cpp \ + opmap_mapoverlaywidget.cpp OTHER_FILES += OPMapGadget.pluginspec FORMS += opmapgadgetoptionspage.ui \ opmap_widget.ui \ - opmap_waypointeditor_dialog.ui + opmap_waypointeditor_dialog.ui \ + opmap_mapoverlaywidget.ui RESOURCES += opmap.qrc diff --git a/ground/src/plugins/opmap/opmap.qrc b/ground/src/plugins/opmap/opmap.qrc index f359866e7..01945886b 100644 --- a/ground/src/plugins/opmap/opmap.qrc +++ b/ground/src/plugins/opmap/opmap.qrc @@ -1,16 +1,18 @@ images/ok.png - images/circle.png - images/go.png - images/home.png - images/hover.png images/uav.png images/gcs.png images/plus.png images/minus.png images/waypoint.png - images/hold.png + images/right_but.png + images/left_but.png images/combobox_down_arrow.png + images/home.png + images/hold.png + images/go.png + images/next_waypoint.png + images/prev_waypoint.png diff --git a/ground/src/plugins/opmap/opmap_mapoverlaywidget.cpp b/ground/src/plugins/opmap/opmap_mapoverlaywidget.cpp new file mode 100644 index 000000000..ef9852a54 --- /dev/null +++ b/ground/src/plugins/opmap/opmap_mapoverlaywidget.cpp @@ -0,0 +1,36 @@ +#include "opmap_mapoverlaywidget.h" +#include "ui_opmap_mapoverlaywidget.h" + +OPMap_MapOverlayWidget::OPMap_MapOverlayWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::OPMap_MapOverlayWidget) +{ + ui->setupUi(this); +} + +OPMap_MapOverlayWidget::~OPMap_MapOverlayWidget() +{ + delete ui; +} + +void OPMap_MapOverlayWidget::changeEvent(QEvent *e) +{ + QWidget::changeEvent(e); + switch (e->type()) { + case QEvent::LanguageChange: + ui->retranslateUi(this); + break; + default: + break; + } +} + +void OPMap_MapOverlayWidget::on_verticalSlider_sliderMoved(int position) +{ + +} + +void OPMap_MapOverlayWidget::on_dial_sliderMoved(int position) +{ + +} diff --git a/ground/src/plugins/opmap/opmap_mapoverlaywidget.h b/ground/src/plugins/opmap/opmap_mapoverlaywidget.h new file mode 100644 index 000000000..a7ed98a7f --- /dev/null +++ b/ground/src/plugins/opmap/opmap_mapoverlaywidget.h @@ -0,0 +1,27 @@ +#ifndef OPMAP_MAPOVERLAYWIDGET_H +#define OPMAP_MAPOVERLAYWIDGET_H + +#include + +namespace Ui { + class OPMap_MapOverlayWidget; +} + +class OPMap_MapOverlayWidget : public QWidget { + Q_OBJECT +public: + OPMap_MapOverlayWidget(QWidget *parent = 0); + ~OPMap_MapOverlayWidget(); + +protected: + void changeEvent(QEvent *e); + +private: + Ui::OPMap_MapOverlayWidget *ui; + +private slots: + void on_dial_sliderMoved(int position); + void on_verticalSlider_sliderMoved(int position); +}; + +#endif // OPMAP_MAPOVERLAYWIDGET_H diff --git a/ground/src/plugins/opmap/opmap_mapoverlaywidget.ui b/ground/src/plugins/opmap/opmap_mapoverlaywidget.ui new file mode 100644 index 000000000..56f763d37 --- /dev/null +++ b/ground/src/plugins/opmap/opmap_mapoverlaywidget.ui @@ -0,0 +1,438 @@ + + + OPMap_MapOverlayWidget + + + + 0 + 0 + 287 + 299 + + + + + 0 + 0 + + + + + + + false + + + /*background-color: rgba(0, 0, 0, 0);*/ +background-color: transparent; + +QFrame { +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(110, 110, 110, 255), stop:1 rgba(71, 71, 71, 255)); +color: rgba(255, 255, 255, 70); +} + +QLabel { /* all label types */ +/* background-color: rgba(255, 255, 255, 0); */ +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(64, 64, 64, 255), stop:1 rgba(128, 128, 128, 255)); +color: rgb(255, 255, 255); +} + +QToolButton { /* all types of tool button */ +background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); +/*border-style: none;*/ +border: 0px; +} +QToolButton:hover { +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(255, 160, 0, 255), stop:1 rgba(160, 100, 0, 255)); +color: rgb(255, 255, 255); +} +QToolButton:pressed { +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(48, 48, 48, 255), stop:1 rgba(120, 120, 120, 255)); +color: rgb(255, 255, 255); +} + +QToolButton:checked { +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(48, 48, 48, 255), stop:1 rgba(120, 120, 120, 255)); +color: rgb(255, 255, 255); +} + +QSlider::groove:horizontal { +border: none; +height: 4px; +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(48, 48, 48, 255), stop:1 rgba(80, 80, 80, 255)); +margin: 2px 0; +} +QSlider::handle:horizontal { +border: 1px solid #5c5c5c; +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(255, 255, 255, 255), stop:1 rgba(128, 128, 128, 255)); +width: 24px; +margin: -2px 0; +border-radius: 3px; +} + +QComboBox { +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(48, 48, 48, 255), stop:1 rgba(120, 120, 120, 255)); +color: rgb(255, 255, 255); +} +QComboBox:hover { +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(48, 48, 48, 255), stop:1 rgba(120, 120, 120, 255)); + background-color: rgb(197, 138, 0); +} +QComboBox::down-arrow { + image: url(:/opmap/images/combobox_down_arrow.png); +} +QComboBox:drop-down { + subcontrol-origin: padding; + subcontrol-position: top right; + border-left-style: none; + border-top-right-radius: 1px; + border-bottom-right-radius: 1px; +} + +QToolTip { +background-color: white; +color: black; +border: 1px solid black; +padding: 5px; +border-radius: 2px; +/* opacity: 170; */ +} + + + + + 0 + + + 0 + + + 0 + + + + + 10 + + + + + + 0 + 0 + + + + + 0 + 120 + + + + + 16777215 + 120 + + + + QSlider::handle:vertical { +border: 1px solid #5c5c5c; +background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(128, 128, 128, 255), stop:1 rgba(255, 255, 255, 255)); +width: 24px; +height: 20px; +margin: -2px 0; +border-radius: 3px; +} + + + + + 2 + + + 19 + + + 1 + + + true + + + Qt::Vertical + + + false + + + false + + + + + + + + 0 + 0 + + + + + 50 + 50 + + + + + 50 + 50 + + + + 360 + + + 180 + + + true + + + 1.000000000000000 + + + false + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 40 + + + + + + + + 0 + + + + + QToolButton { /* all types of tool button */ +background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); +/*border-style: none;*/ +border: 0px; +} +QToolButton:hover { +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(255, 160, 0, 255), stop:1 rgba(160, 100, 0, 255)); +color: rgb(255, 255, 255); +} +QToolButton:pressed { +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(48, 48, 48, 255), stop:1 rgba(120, 120, 120, 255)); +color: rgb(255, 255, 255); +} + +QToolButton:checked { +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(48, 48, 48, 255), stop:1 rgba(120, 120, 120, 255)); +color: rgb(255, 255, 255); +} + + + + + + + + :/opmap/images/left_but.png:/opmap/images/left_but.png + + + + 17 + 48 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + QToolButton { /* all types of tool button */ +background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); +/*border-style: none;*/ +border: 0px; +} +QToolButton:hover { +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(255, 160, 0, 255), stop:1 rgba(160, 100, 0, 255)); +color: rgb(255, 255, 255); +} +QToolButton:pressed { +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(48, 48, 48, 255), stop:1 rgba(120, 120, 120, 255)); +color: rgb(255, 255, 255); +} + +QToolButton:checked { +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(48, 48, 48, 255), stop:1 rgba(120, 120, 120, 255)); +color: rgb(255, 255, 255); +} + + + + + + + + :/opmap/images/right_but.png:/opmap/images/right_but.png + + + + 17 + 48 + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + 20 + + + 20 + + + 20 + + + + + QLabel { /* all label types */ +/* background-color: rgba(0, 0, 0, 0); */ + background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0.778409 rgba(0, 0, 0, 176), stop:1 rgba(0, 0, 0, 0)); +color: rgb(255, 255, 255); + +} + + + QFrame::NoFrame + + + TextLabel + + + 8 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + QLabel { /* all label types */ +/* background-color: rgba(0, 0, 0, 0); */ + background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0.778409 rgba(0, 0, 0, 176), stop:1 rgba(0, 0, 0, 0)); +color: rgb(255, 255, 255); +} + + + TextLabel + + + 8 + + + + + + + + + + + + diff --git a/ground/src/plugins/opmap/opmap_widget.ui b/ground/src/plugins/opmap/opmap_widget.ui index b6713207b..bd399731b 100644 --- a/ground/src/plugins/opmap/opmap_widget.ui +++ b/ground/src/plugins/opmap/opmap_widget.ui @@ -7,7 +7,7 @@ 0 0 704 - 475 + 327 @@ -44,7 +44,7 @@ 0 - + 0 @@ -120,10 +120,16 @@ QComboBox::down-arrow { QComboBox:drop-down { subcontrol-origin: padding; subcontrol-position: top right; - border-left-style: none; + border-left-style: 1px solid black; border-top-right-radius: 1px; border-bottom-right-radius: 1px; } +QComboBox QAbstractItemView { /* the drop down list */ +background-color: rgb(255, 255, 255); +color: rgb(0, 0, 0); +border: 2px solid darkgray; +selection-background-color: lightgray; +} QToolTip { background-color: white; @@ -136,7 +142,7 @@ border-radius: 2px; - QFrame::NoFrame + QFrame::StyledPanel QFrame::Plain @@ -149,13 +155,13 @@ border-radius: 2px; 0 - 5 + 3 0 - 5 + 3 @@ -163,10 +169,10 @@ border-radius: 2px; 5 - 8 + 3 - 8 + 3 @@ -190,19 +196,25 @@ border-radius: 2px; :/core/images/prev.png:/core/images/prev.png - true + false - - - QFrame::Plain - + - Qt::Vertical + Qt::Horizontal - + + QSizePolicy::Fixed + + + + 15 + 20 + + + @@ -224,6 +236,9 @@ border-radius: 2px; true + + -1 + 20 @@ -233,6 +248,21 @@ border-radius: 2px; false + + + london + + + + + new york + + + + + paris + + @@ -257,7 +287,7 @@ border-radius: 2px; - true + false Qt::NoArrow @@ -265,14 +295,20 @@ border-radius: 2px; - - - QFrame::Plain - + - Qt::Vertical + Qt::Horizontal - + + QSizePolicy::Fixed + + + + 15 + 20 + + + @@ -299,7 +335,7 @@ border-radius: 2px; true - true + false @@ -331,19 +367,25 @@ border-radius: 2px; true - true + false - - - QFrame::Plain - + - Qt::Vertical + Qt::Horizontal - + + QSizePolicy::Fixed + + + + 15 + 20 + + + @@ -370,7 +412,7 @@ border-radius: 2px; true - true + false @@ -399,19 +441,22 @@ border-radius: 2px; true - true + false - - - QFrame::Plain - + - Qt::Vertical + Qt::Horizontal - + + + 40 + 20 + + + @@ -435,7 +480,7 @@ border-radius: 2px; - true + false @@ -465,7 +510,7 @@ p, li { white-space: pre-wrap; } - true + false @@ -522,39 +567,22 @@ color: rgb(255, 255, 255); - - - - QFrame::Plain - - - Qt::Vertical - - - Qt::Horizontal + + QSizePolicy::Fixed + - 40 + 15 20 - - - - QFrame::Plain - - - Qt::Vertical - - - @@ -579,23 +607,13 @@ color: rgb(255, 255, 255); - true + false Qt::NoArrow - - - - QFrame::Plain - - - Qt::Vertical - - - @@ -618,7 +636,7 @@ color: rgb(255, 255, 255); :/core/images/next.png:/core/images/next.png - true + false @@ -637,7 +655,8 @@ color: rgb(255, 255, 255); - background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(0, 0, 0, 255), stop:1 rgba(255, 255, 255, 255)); + background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(71, 71, 71, 255), stop:1 rgba(110, 110, 110, 255)); + QFrame::NoFrame @@ -652,7 +671,7 @@ color: rgb(255, 255, 255); Qt::Horizontal - 5 + 7 false @@ -672,7 +691,7 @@ color: rgb(255, 255, 255); - 600 + 300 16777215 @@ -682,6 +701,17 @@ color: rgb(255, 255, 255); background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(71, 71, 71, 255), stop:1 rgba(110, 110, 110, 255)); color: rgb(255, 255, 255); +/* +QTreeView::item { +border: 1px solid #d9d9d9; +border-top-color: transparent; +border-bottom-color: transparent; +} +*/ +QTreeView::item:hover { +background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #e7effd, stop: 1 #cbdaf1); +border: 1px solid #bfcde4; +} QTreeView::branch:has-children:!has-siblings:closed, QTreeView::branch:closed:has-children:has-siblings { border-image: none; @@ -728,16 +758,75 @@ QTreeView::branch:open:has-children:!has-siblings, QTreeView::branch:open:has-ch true - QWidget { + background-color: black; +border: 1px solid black; + +QLabel { /* all label types */ +/* background-color: rgba(255, 255, 255, 0); */ +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(64, 64, 64, 255), stop:1 rgba(128, 128, 128, 255)); +color: rgb(255, 255, 255); +} + +QToolButton { /* all types of tool button */ +background-color: rgba(255, 255, 255, 0); +color: rgb(255, 255, 255); +/*border-style: none;*/ +border: 0px; +} +QToolButton:hover { +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(255, 160, 0, 255), stop:1 rgba(160, 100, 0, 255)); +color: rgb(255, 255, 255); +} +QToolButton:pressed { +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(48, 48, 48, 255), stop:1 rgba(120, 120, 120, 255)); +color: rgb(255, 255, 255); +} + +QToolButton:checked { +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(48, 48, 48, 255), stop:1 rgba(120, 120, 120, 255)); +color: rgb(255, 255, 255); +} + +QSlider::groove:horizontal { +border: none; +height: 4px; +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(48, 48, 48, 255), stop:1 rgba(80, 80, 80, 255)); +margin: 2px 0; +} +QSlider::handle:horizontal { +border: 1px solid #5c5c5c; +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(255, 255, 255, 255), stop:1 rgba(128, 128, 128, 255)); +width: 24px; +margin: -2px 0; +border-radius: 3px; +} + +QComboBox { +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(48, 48, 48, 255), stop:1 rgba(120, 120, 120, 255)); +color: rgb(255, 255, 255); +} +QComboBox:hover { +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(48, 48, 48, 255), stop:1 rgba(120, 120, 120, 255)); + background-color: rgb(197, 138, 0); +} +QComboBox::down-arrow { + image: url(:/opmap/images/combobox_down_arrow.png); +} +QComboBox:drop-down { + subcontrol-origin: padding; + subcontrol-position: top right; + border-left-style: none; + border-top-right-radius: 1px; + border-bottom-right-radius: 1px; } QToolTip { background-color: white; color: black; border: 1px solid black; -padding: 2px; -border-radius: 3px; +padding: 5px; +border-radius: 2px; /* opacity: 170; */ } @@ -746,22 +835,22 @@ border-radius: 3px; - + - + 0 0 - 87 + 48 50 - 87 + 70 16777215 @@ -799,21 +888,33 @@ border-radius: 3px; } + + QFrame::NoFrame + - - 8 + + 1 - - 0 - - - 0 - - + 0 + + true + + + + 0 + 0 + + + + + 48 + 0 + + UAV go home @@ -840,12 +941,100 @@ border-radius: 3px; Qt::ToolButtonIconOnly - true + false + + + + + + + + 0 + 0 + + + + + 48 + 0 + + + + Move UAV to previous waypoint + + + + + + + + + + :/opmap/images/prev_waypoint.png:/opmap/images/prev_waypoint.png + + + + 70 + 70 + + + + false + + + + + + + + 0 + 0 + + + + + 48 + 0 + + + + Move UAV to next waypoint + + + + + + + + + + :/opmap/images/next_waypoint.png:/opmap/images/next_waypoint.png + + + + 70 + 70 + + + + false + + + 0 + 0 + + + + + 48 + 0 + + UAV hold position @@ -866,12 +1055,24 @@ border-radius: 3px; - true + false + + + 0 + 0 + + + + + 48 + 0 + + UAV go! @@ -892,7 +1093,7 @@ border-radius: 3px; - true + false @@ -913,7 +1114,7 @@ border-radius: 3px; 0 - + 0 @@ -934,8 +1135,10 @@ color: rgba(255, 255, 255, 70); QLabel { /* all label types */ /* background-color: rgba(255, 255, 255, 0); */ -background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(64, 64, 64, 255), stop:1 rgba(128, 128, 128, 255)); +background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(64, 64, 64, 128), stop:1 rgba(128, 128, 128, 128)); color: rgb(255, 255, 255); +/*border: 1px solid black;*/ +border: none; } QToolTip { @@ -949,22 +1152,31 @@ border-radius: 3px; - QFrame::NoFrame + QFrame::StyledPanel - QFrame::Raised + QFrame::Plain 0 - + 0 + + 3 + + + 0 + + + 3 + - 3 + 5 3 @@ -972,6 +1184,62 @@ border-radius: 3px; 8 + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + 0 + 0 + + + + + 8 + 50 + false + false + true + + + + Map position + + + + + + QFrame::NoFrame + + + QFrame::Raised + + + labelUAVPos + + + Qt::AlignCenter + + + 5 + + + @@ -982,7 +1250,7 @@ border-radius: 3px; - 9 + 8 50 false false @@ -1019,7 +1287,7 @@ border-radius: 3px; - 9 + 8 50 false false @@ -1032,6 +1300,12 @@ border-radius: 3px; + + QFrame::NoFrame + + + QFrame::Plain + labelMousePos @@ -1073,7 +1347,7 @@ border-radius: 3px; 100 - 10 + 12 @@ -1081,7 +1355,7 @@ border-radius: 3px; QProgressBar { -border: none; +border: nonei; padding: 1px; background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 rgba(48, 48, 48, 255), stop:1 rgba(120, 120, 120, 255)); color: rgb(255, 255, 255); diff --git a/ground/src/plugins/opmap/opmapgadgetwidget.cpp b/ground/src/plugins/opmap/opmapgadgetwidget.cpp index 25369c8a8..56c1d5a87 100644 --- a/ground/src/plugins/opmap/opmapgadgetwidget.cpp +++ b/ground/src/plugins/opmap/opmapgadgetwidget.cpp @@ -47,27 +47,20 @@ OPMapGadgetWidget::OPMapGadgetWidget(QWidget *parent) : QWidget(parent) waypoint_editor = NULL; wayPoint_treeView_model = NULL; findPlaceCompleter = NULL; - -// setMouseTracking(true); + m_map_graphics_scene = NULL; + m_map_scene_proxy = NULL; + m_map_overlay_widget = NULL; prev_tile_number = 0; - // ************** - // Get required UAVObjects - - ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); - UAVObjectManager *objManager = pm->getObject(); - m_positionActual = PositionActual::GetInstance(objManager); - // ************** // create the widget that holds the user controls and the map m_widget = new Ui::OPMap_Widget(); -// m_widget = new Ui_OPMap_Widget(); m_widget->setupUi(this); // ************** - // create the map display + // create the map widget m_map = new mapcontrol::OPMapWidget(); @@ -76,22 +69,54 @@ OPMapGadgetWidget::OPMapGadgetWidget(QWidget *parent) : QWidget(parent) m_map->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); m_map->setMinimumSize(64, 64); + m_map->setFrameStyle(QFrame::NoFrame); + m_map->configuration->DragButton = Qt::LeftButton; // use the left mouse button for map dragging } // ************** + setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); + + QVBoxLayout *layout = new QVBoxLayout; + layout->setSpacing(0); + layout->setContentsMargins(0, 0, 0, 0); + layout->addWidget(m_map); +// layout->addChildWidget(); + m_widget->mapWidget->setLayout(layout); + + // ************** + // create the user controls overlayed onto the map +/* + m_map_overlay_widget = new OPMap_MapOverlayWidget(); + + m_map_graphics_scene = m_map->scene(); + m_map_scene_proxy = m_map_graphics_scene->addWidget(m_map_overlay_widget); + + m_map_overlay_widget->setGeometry(m_map->geometry()); +*/ + // ************** + // Get required UAVObjects + + ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); + UAVObjectManager *objManager = pm->getObject(); + m_positionActual = PositionActual::GetInstance(objManager); + + // ************** + // create various context (mouse right click) menu actions + createActions(); // ************** // set the user control options -// m_widget->labelNumTilesToLoad->setText(" 0"); - m_widget->labelMapPos->setText(""); - m_widget->labelMousePos->setText(""); + m_widget->labelUAVPos->setText("---"); + m_widget->labelMapPos->setText("---"); + m_widget->labelMousePos->setText("---"); + m_widget->progressBarMap->setMaximum(1); - m_widget->widgetFlightControls->setVisible(false); + m_widget->frameFlightControls->setVisible(false); m_widget->toolButtonFlightControlsShowHide->setIcon(QIcon(QString::fromUtf8(":/core/images/prev.png"))); m_widget->treeViewWaypoints->setVisible(false); @@ -138,16 +163,6 @@ OPMapGadgetWidget::OPMapGadgetWidget(QWidget *parent) : QWidget(parent) m_map->SetCurrentPosition(internals::PointLatLng(data.Latitude, data.Longitude)); // set the default map position } - // ************** - - setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); - - QVBoxLayout *layout = new QVBoxLayout; - layout->setSpacing(0); - layout->setContentsMargins(0, 0, 0, 0); - layout->addWidget(m_map); - m_widget->mapWidget->setLayout(layout); - // ************** // create the waypoint editor dialog @@ -216,11 +231,6 @@ OPMapGadgetWidget::OPMapGadgetWidget(QWidget *parent) : QWidget(parent) - // ************** - // create the user controls overlayed onto the map - -// createMapOverlayUserControls(); - // ************** // create the desired timers @@ -242,6 +252,7 @@ OPMapGadgetWidget::OPMapGadgetWidget(QWidget *parent) : QWidget(parent) OPMapGadgetWidget::~OPMapGadgetWidget() { + if (m_map_overlay_widget) delete m_map_overlay_widget; if (wayPoint_treeView_model) delete wayPoint_treeView_model; if (waypoint_editor) delete waypoint_editor; if (m_map) delete m_map; @@ -411,7 +422,7 @@ void OPMapGadgetWidget::updatePosition() " " + QString::number(uav_heading, 'f', 1) + "deg" + " " + QString::number(uav_height_feet, 'f', 1) + "feet" + " " + QString::number(uav_ground_speed, 'f', 1) + "mph"; - if (m_widget) m_widget->labelMapPos->setText(str); + if (m_widget) m_widget->labelUAVPos->setText(str); if (m_map && followUAVpositionAct && followUAVheadingAct) { @@ -493,7 +504,7 @@ void OPMapGadgetWidget::OnCurrentPositionChanged(internals::PointLatLng point) if (m_widget) { QString coord_str = " " + QString::number(point.Lat(), 'f', 6) + " " + QString::number(point.Lng(), 'f', 6) + " "; -// m_widget->labelMapPos->setText(coord_str); + m_widget->labelMapPos->setText(coord_str); } } @@ -575,6 +586,7 @@ void OPMapGadgetWidget::on_comboBoxFindPlace_returnPressed() void OPMapGadgetWidget::on_toolButtonFindPlace_clicked() { + m_widget->comboBoxFindPlace->setFocus(); on_comboBoxFindPlace_returnPressed(); } @@ -605,9 +617,9 @@ void OPMapGadgetWidget::on_toolButtonFlightControlsShowHide_clicked() { if (m_widget) { - m_widget->widgetFlightControls->setVisible(!m_widget->widgetFlightControls->isVisible()); + m_widget->frameFlightControls->setVisible(!m_widget->frameFlightControls->isVisible()); - if (m_widget->widgetFlightControls->isVisible()) + if (m_widget->frameFlightControls->isVisible()) m_widget->toolButtonFlightControlsShowHide->setIcon(QIcon(QString::fromUtf8(":/core/images/next.png"))); else m_widget->toolButtonFlightControlsShowHide->setIcon(QIcon(QString::fromUtf8(":/core/images/prev.png"))); @@ -735,86 +747,6 @@ void OPMapGadgetWidget::setCacheLocation(QString cacheLocation) m_map->configuration->SetCacheLocation(cacheLocation); } -// ************************************************************************************* -// create some user controls overlayed onto the map area - -QPushButton * OPMapGadgetWidget::createTransparentButton(QWidget *parent, QString text, QString icon) -{ - QPixmap pix; - pix.load(icon); - - QPushButton *but = new QPushButton(parent); - - QColor transparent_color(0,0,0,0); - QPalette but_pal(but->palette()); - - but_pal.setColor(QPalette::Button, transparent_color); - but->setPalette(but_pal); - - but->setIcon(pix); - but->setText(text); - but->setIconSize(pix.size()); - - return but; -} - -void OPMapGadgetWidget::createMapOverlayUserControls() -{ - QPushButton *zoomout = new QPushButton(""); - zoomout->setToolTip(tr("Zoom out")); - zoomout->setCursor(Qt::OpenHandCursor); - zoomout->setFlat(true); - zoomout->setIcon(QIcon(QString::fromUtf8(":/opmap/images/minus.png"))); - zoomout->setIconSize(QSize(32, 32)); - zoomout->setFixedSize(28, 28); - connect(zoomout, SIGNAL(clicked(bool)), this, SLOT(zoomOut())); - -// QPushButton *zoomin = createTransparentButton(map, "", QString::fromUtf8(":/core/images/plus.png")); -// zoomin->setStyleSheet(""); - QPushButton *zoomin = new QPushButton(""); - zoomin->setFlat(true); - zoomin->setToolTip(tr("Zoom in")); - zoomin->setCursor(Qt::OpenHandCursor); - zoomin->setIcon(QIcon(QString::fromUtf8(":/opmap/images/plus.png"))); -// zoomin->setIconSize(QSize(12, 12)); - zoomin->setIconSize(QSize(28, 28)); - zoomin->setFixedSize(32, 32); -// zoomin->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); - connect(zoomin, SIGNAL(clicked(bool)), this, SLOT(zoomIn())); - -// statusLabel.font().setPointSize(20); - - // add zoom buttons to the layout of the MapControl - QVBoxLayout* overlay_layout_v1 = new QVBoxLayout; - overlay_layout_v1->setMargin(4); - overlay_layout_v1->setSpacing(4); - - QHBoxLayout* overlay_layout_h1 = new QHBoxLayout; - overlay_layout_h1->setMargin(0); - overlay_layout_h1->setSpacing(4); -// overlay_layout_h1->addWidget(gcsButton); -// overlay_layout_h1->addWidget(uavButton); -// overlay_layout_h1->addSpacing(10); - overlay_layout_h1->addWidget(zoomout); - overlay_layout_h1->addWidget(zoomin); - overlay_layout_h1->addStretch(0); - - QHBoxLayout* overlay_layout_h2 = new QHBoxLayout; - overlay_layout_h2->setMargin(0); - overlay_layout_h2->setSpacing(4); - overlay_layout_h2->addStretch(0); -// overlay_layout_h2->addWidget(&statusLabel); - overlay_layout_h2->addStretch(0); - - overlay_layout_v1->addSpacing(10); - overlay_layout_v1->addLayout(overlay_layout_h1); - overlay_layout_v1->addStretch(0); -// overlay_layout_v1->addLayout(overlay_layout_h2); - overlay_layout_v1->addSpacing(10); - - m_map->setLayout(overlay_layout_v1); -} - // ************************************************************************************* // Context menu stuff diff --git a/ground/src/plugins/opmap/opmapgadgetwidget.h b/ground/src/plugins/opmap/opmapgadgetwidget.h index 6800e194a..ce50ba66d 100644 --- a/ground/src/plugins/opmap/opmapgadgetwidget.h +++ b/ground/src/plugins/opmap/opmapgadgetwidget.h @@ -38,9 +38,11 @@ #include "uavobjects/uavobjectmanager.h" #include "uavobjects/positionactual.h" +#include "opmap_mapoverlaywidget.h" #include "opmap_waypointeditor_dialog.h" -namespace Ui { +namespace Ui +{ class OPMap_Widget; } @@ -163,9 +165,9 @@ private: opmap_waypointeditor_dialog *waypoint_editor; - QPushButton * createTransparentButton(QWidget *parent, QString text, QString icon); - void createMapOverlayUserControls(); - + QGraphicsScene *m_map_graphics_scene; + QGraphicsProxyWidget *m_map_scene_proxy; + OPMap_MapOverlayWidget *m_map_overlay_widget; QStandardItemModel *wayPoint_treeView_model;