From 6eb1705e08c6b1c9affe86e5ec5117650469bf13 Mon Sep 17 00:00:00 2001 From: Alex Zolotarev Date: Mon, 6 Jun 2011 04:20:10 +0200 Subject: [PATCH] [qt] Added search active indicator and clear text button --- qt/about.cpp | 2 +- qt/info_dialog.cpp | 2 +- qt/mainwindow.cpp | 2 +- qt/preferences_dialog.cpp | 2 +- qt/res/busy.png | Bin 0 -> 1191 bytes qt/res/resources.qrc | 6 +++-- qt/res/x.png | Bin 0 -> 3228 bytes qt/search_panel.cpp | 53 ++++++++++++++++++++++++++++++++++++-- qt/search_panel.hpp | 8 +++++- 9 files changed, 66 insertions(+), 9 deletions(-) create mode 100644 qt/res/busy.png create mode 100644 qt/res/x.png diff --git a/qt/about.cpp b/qt/about.cpp index 6183f204c7..d3eebb93e7 100644 --- a/qt/about.cpp +++ b/qt/about.cpp @@ -15,7 +15,7 @@ AboutDialog::AboutDialog(QWidget * parent) : QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint) { - QIcon icon(":logo.png"); + QIcon icon(":/ui/logo.png"); setWindowIcon(icon); setWindowTitle(QMenuBar::tr("About")); diff --git a/qt/info_dialog.cpp b/qt/info_dialog.cpp index 4ee9c6c243..089c6d4e9a 100644 --- a/qt/info_dialog.cpp +++ b/qt/info_dialog.cpp @@ -15,7 +15,7 @@ namespace qt QStringList const & buttons) : QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint) { - QIcon icon(":logo.png"); + QIcon icon(":/ui/logo.png"); setWindowIcon(icon); setWindowTitle(title); setFocusPolicy(Qt::StrongFocus); diff --git a/qt/mainwindow.cpp b/qt/mainwindow.cpp index 1f2e56235d..d20e791e06 100644 --- a/qt/mainwindow.cpp +++ b/qt/mainwindow.cpp @@ -54,7 +54,7 @@ MainWindow::MainWindow() setCentralWidget(m_pDrawWidget); setWindowTitle(tr("MapsWithMe")); - setWindowIcon(QIcon(":logo.png")); + setWindowIcon(QIcon(":/ui/logo.png")); #ifndef OMIM_OS_WINDOWS QMenu * helpMenu = new QMenu(tr("Help"), this); diff --git a/qt/preferences_dialog.cpp b/qt/preferences_dialog.cpp index 4f2f7bde12..9df9671ad5 100644 --- a/qt/preferences_dialog.cpp +++ b/qt/preferences_dialog.cpp @@ -16,7 +16,7 @@ namespace qt : QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint), m_autoUpdatesEnabled(autoUpdatesEnabled) { - QIcon icon(":logo.png"); + QIcon icon(":/ui/logo.png"); setWindowIcon(icon); setWindowTitle(tr("Preferences")); diff --git a/qt/res/busy.png b/qt/res/busy.png new file mode 100644 index 0000000000000000000000000000000000000000..9a193e4ee58ea4a462e33b9aea69d4975563fad9 GIT binary patch literal 1191 zcmV;Y1X%ltP)=Z@fY|H+?e& zoWBK=NF>Y4%V_&MJ3F-jcXxNCQV9S=B9Txi{5C8c4xgNypx*%i^Yim+wHg3SCX>_Y ztc-koe0+U<1pqdi-PYEICgbsVFc^%-+9=PQ(IeGCX?y>{2T!K`}+YvEEXRh zA5#?7($X?DHRW(P6bi-a>S{Kd&E;|cfMJ+KA^`xu-%k)kDwWFT^QfRIRi{9>TrT{P zx3jae#l^*;p`nF^1)I%gFc?%SmDOrRkht0{iQ%IE-tpWx2s%~O6A(xT0@xE>#c$T zK%r1jC=`Egy>jj2MtCG*> zbGzNWy}bhi12kcwP>3YSuC6ZnZGGDH34*ZMY*$xT6h-;{etOvL?QJ%jjYJ|+sZ^;{ zibSHX!s79`+wHd7?d2mwqtVci0HCw86ZO)^$H#a)E|<%@y1K+-abwu&>8Z!#L1PTV zCMPGQQt8prQ7{-Z7z{d{t{mz0datjqaU9oZGy;Jj5D28x>0+@M2m~^j%$H!OzqPlw z8w`fQ!9fOtK@fz?wE3*<3DXHk$!pVq&7Bqr+;oQWVAG@y5r; z%gxZ|^Py9zN_EaN9LM!~J%(X?KA+F$-`w1gBnbdotyZa27K=p`RxB1}GMP*!1At^Q z8488U4s}WOVU>zTqnDSL0KjImhlhu21Jr6Yi^T!}uh&Zu1if1WSS%JpHL2I@ySuxg z<_;o}Nc#Hv03e^wCzDBfw+6Q>sZ`q2)6?48s?};gi%}>P=x9dNpTjT=o12@foGBl{ z<$*vTFc=KO08C-#C}!location-search.png location.png - + logo.png + busy.png + x.png - + \ No newline at end of file diff --git a/qt/res/x.png b/qt/res/x.png new file mode 100644 index 0000000000000000000000000000000000000000..83e2950ed655831b3b010ea4efa9fd0fb0a055ca GIT binary patch literal 3228 zcmV;N3}f?&P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+IGAcj`HEZjlrM0^GDTj{ZD{SKOPyA^JJta=jqzM+-GW2-g9;6-1ulJniNm|x$VgR zUMDJB+=I$j^{20w4WQB`1E}n8gQ~ftN;!4U+ zilo!Ojg*_cI3=1&=f_j&ykMX%PQ3$NFw3zO>8#mV*Q(w`g9CA_!z?FLjbEt*QE1Ni;+RK9i?-AJEF z*HWiZ(ez%F^Hgnusy?Wjc*kvZynn5v6Awoa6rl5etS5)!10$4l_NBUXZXD_lbuAD@ z4Dkja-b76S1V9d|=|lodb##X=T{34j3LSAT*McyG~b8iYj+3kYET5>5Wu@l^iz$LYqNsdR2q zS7Mb^P!s*md?dJL5>{kwL9(NoI1k_+91fs4$C`(z?P_|Ma zu$EG#?8EMKZOd4?G`}CgvUK9t5tEM(xJ8IV?wX#%Kd&jbarWi995V4Kzgi%;WujH0 z@6*|_D7^RFct9viF^H(4XG7TvAYv`fhzZ6&w+&t0@C;p?-IHKl%KTNW?{239U2C`x z-dlq}FE(NOaM$5iw9YCa3KfJ&4I|){K*U;{5rNSI51^8nEvbCXAS#%UK*##jqGP?o z`&2s<`+gD@v;U`IzQgy|ls=t3ERxVVIan1C!IZ#zWq296s8B-!4ht#}Q3TyeGNOmw zfYE^jVntudej=7&WjgYUn$4>Pkpn^kSh@BaZdR7LKHk>#Y zx}`)7bScROY^8zd-AZM|fT;uotNGtepvw!o(9s7Y=&-w{_oe`8_c#;M?{TtZgnmri zI#2v2A^?Kn#7<8|5>H~R6o4>=Tdfkh8UY|2bh9ctjD((n6ckh{UD%Nd$2Fsa-D?nR z?XD7HPY0(rtrKn^wqgHshyoxm3v!0X)75?J>H3LOy0SBc3dVOZa$!+J54f_G0=Y2L zP1iC$rhn$_r1G8b>o6vp@la$a)P>27sBF>Qbfi}V?e9`!Mo5623C`xb+B@k`&v3bM z4iESLU=SrMr_#6Ierwdfua(i+*SlA!VQ#f*xzm?Af655UXZiPB^7Yp&#szhx6|+Km z`R6o+HKU2Gz3)e12|*!J?{*~ZOmK*0jy+Thz6-B_=m#aBh_X}hinjs|ArP;1ujo>h zZ3U2$h^Yy8M`|>DGLBd zJR}PbfM8o;xKP1s4+Q}5K^UU&RX}i;;%xBD&_RkR_~H3;=ilh4buY{kp6o`U39#+B zF3*jn%>EIS*1_ouP+(hIN6Z&(9h8Bf@a^*e69}{~O^I-^Qzn!+J^*R}qHNpJ&=9Wx z;zUEWEAaz&3CtVT3hOtyBvvI?{d%~t>4n2 z9yP5HSSPqMWdaV9QF3u|SRCCrb0j20!Nl&;$u2GmefaX-DcV|s7A(cL2_1qJl5j(flS8Y9@UOOp-5h-GUWUc= zX9DhE(#04`l@72ag z54b-uEC2$FoerUgyOJ7NgBw*F;_K~8Wx~sD1&hg^#Y0gtqvb{lU;?KKfV?-Q;Vj6k z6<~c!yLSs(C?8aMtw4ksN*uhe!cs=K&1%3_S&!WuqU_71@=zqZ6;^Z}nDPLlfE1Jo zOaaRC2zIAEa0N1J1z6X@?)|JC0D9DrUW;KtSn3E%9Ub@?>;&12T$n5+tyZal!B@0! zLdb5z7RnoUFP$7D4=b{!D;NgiXAT3(1f~G_l_&EqSR0wO0<3Lr_ijXpSpnXK7$UW^meHA)yUD|fEQtz62Qr{^l?2RGJfTyOPh{2#u%?+k z>62!5xn&Fr4Wc8eGn9a(v|Q+xGO3}mQTWcy53fS}4MU9WCbL8)JHzNe423TaG%zz9 zZ^MA%&2|gUwgHy6bfHyEZ39;~wNW}OlZM-82yCW2wgC}nDb=Mo8wFE6A#eVh^0J_R z#t^w$#q+#Ya|uWgHIDRc6Z-HQlC_S7c4veg zAbuzkY_R?7LcX?dabaDN!a$X0VZ9iPhufz(&zh$8;Lik0<7|CW8rx_G9~!pd)tdK? zU}~K6O%8gPlJ&{bb|oWv*wqYS7*-}2MD9zywZ)O!vMRJ^ZqZyE_7e#4D%c!Wx2_Q? z3`^o{E)=apNYW8x-Z>ORWi`$Q0VrOVtj!MYSo-{6kOK^Y-Yq*8Lhs+08~{=HwnywH zZCO=MtwnR48X8Gk@q1Um=E!U4FM>acvw2Xug=A^6fG9OGpYCNG;+rd_R50yjZFX?b z_4y&w93awubybuy7njeg_`D%ru1Beu^mD6kCfKvn%6(c(t77!<8Q z7PyV#A;*A7g{AP=X=Ee4TQnU9NI=l_)+>XM*Al2=z_2nr6m_8N5f5rsV}(@d+pwDa zS&z7AGkzB`%60Rv;Xi0(8;GLM(UJJZvH4j**j8o`?p8+7O|4hDmZ+jnb%xP_l+84S z0HmNyO0inpg))#00U<<6;u0_jRIfyMyaklDxD`zHL5NmfYh_%s2It1qddw56?EhAd% zRb4A2jM-`?mDqOjAcfmsgTITdjH>#}tg2-30Rlyf0g))vYA;Or4X+# zY@6K(F~Re&FW2oKUO~)jXm9>*L%R>Jw7ePnpC`2yB$z6dVU*2OC){K_h9HQ7sr-Uz-vQ&@q${M3i}kdE4f zfB$P^2hHc-+tBXC@2-Bgsdig3y>U*AJz;i?-HTV62au&r9kc=8Xec{`46(76J83h3 zm*E0@uqBk`ngMl#f9H8Chpf(LW&s4{K@k_AXknb4mH>#=QMC#`bEUv~AI3Xq4i0Q8 zR`kx>r8)rWJu_qME>t2a3FSpmqdRQR{1UvKfL!gZs0%Nc(0}EuipCr O0000_ literal 0 HcmV?d00001 diff --git a/qt/search_panel.cpp b/qt/search_panel.cpp index 8c65edecf8..4a6b214e04 100644 --- a/qt/search_panel.cpp +++ b/qt/search_panel.cpp @@ -3,10 +3,13 @@ #include "../std/bind.hpp" +#include #include #include #include #include +#include +#include namespace qt { @@ -26,8 +29,18 @@ SearchPanel::SearchPanel(DrawWidget * drawWidget, QWidget * parent) m_pTable->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents); connect(m_pTable, SIGNAL(cellClicked(int,int)), this, SLOT(OnSearchPanelItemClicked(int,int))); + m_pClearButton = new QPushButton(this); + connect(m_pClearButton, SIGNAL(pressed()), this, SLOT(OnClearButton())); + m_pClearButton->setVisible(false); + m_pClearButton->setFocusPolicy(Qt::NoFocus); + m_pAnimationTimer = new QTimer(this); + connect(m_pAnimationTimer, SIGNAL(timeout()), this, SLOT(OnAnimationTimer())); + + QHBoxLayout * horizontalLayout = new QHBoxLayout(); + horizontalLayout->addWidget(m_pEditor); + horizontalLayout->addWidget(m_pClearButton); QVBoxLayout * verticalLayout = new QVBoxLayout(); - verticalLayout->addWidget(m_pEditor); + verticalLayout->addLayout(horizontalLayout); verticalLayout->addWidget(m_pTable); setLayout(verticalLayout); @@ -62,7 +75,7 @@ void SearchPanel::OnSearchResult(search::Result * result, int queryId) if (queryId != m_queryId) return; - if (!result->GetString().empty()) // last element + if (!result->GetString().empty()) { int const rowCount = m_pTable->rowCount(); m_pTable->setRowCount(rowCount + 1); @@ -72,7 +85,12 @@ void SearchPanel::OnSearchResult(search::Result * result, int queryId) m_results.push_back(result); } else + { // last element delete result; + // stop search busy indicator + m_pAnimationTimer->stop(); + m_pClearButton->setIcon(QIcon(":/ui/x.png")); + } } void SearchPanel::OnSearchTextChanged(QString const & str) @@ -85,8 +103,20 @@ void SearchPanel::OnSearchTextChanged(QString const & str) QString const normalized = str.normalized(QString::NormalizationForm_KC); if (!normalized.isEmpty()) + { m_pDrawWidget->Search(normalized.toUtf8().constData(), bind(&SearchPanel::SearchResultThreadFunc, this, _1, m_queryId)); + // show busy indicator + if (!m_pAnimationTimer->isActive()) + m_pAnimationTimer->start(200); + OnAnimationTimer(); + m_pClearButton->setFlat(true); + m_pClearButton->setVisible(true); + } + else + { // hide X button + m_pClearButton->setVisible(false); + } } void SearchPanel::OnSearchPanelItemClicked(int row, int) @@ -122,4 +152,23 @@ void SearchPanel::OnViewportChanged() OnSearchTextChanged(txt); } +void SearchPanel::OnAnimationTimer() +{ + static int angle = 0; + QPixmap pixmap(":/ui/busy.png"); + QSize const oldSize = pixmap.size(); + QMatrix rm; + angle += 15; + if (angle >= 360) + angle = 0; + rm.rotate(angle); + pixmap = pixmap.transformed(rm); + m_pClearButton->setIcon(QIcon(pixmap)); +} + +void SearchPanel::OnClearButton() +{ + m_pEditor->setText(""); +} + } diff --git a/qt/search_panel.hpp b/qt/search_panel.hpp index 3540a17eeb..068eb1c7e9 100644 --- a/qt/search_panel.hpp +++ b/qt/search_panel.hpp @@ -8,6 +8,8 @@ class QTableWidget; class QLineEdit; +class QPushButton; +class QTimer; namespace qt { @@ -19,6 +21,8 @@ class SearchPanel : public QWidget DrawWidget * m_pDrawWidget; QTableWidget * m_pTable; QLineEdit * m_pEditor; + QPushButton * m_pClearButton; + QTimer * m_pAnimationTimer; /// Stores current search results vector m_results; @@ -38,12 +42,14 @@ public: explicit SearchPanel(DrawWidget * drawWidget, QWidget * parent); ~SearchPanel(); -protected slots: +private slots: void OnSearchPanelItemClicked(int row, int column); void OnSearchTextChanged(QString const &); /// Called via signal to support multithreading void OnSearchResult(search::Result * result, int queryId); void OnViewportChanged(); + void OnAnimationTimer(); + void OnClearButton(); }; }