From c2d0f7070de02911575c9392fcd999f8f28968cd Mon Sep 17 00:00:00 2001 From: Pekka Nissinen Date: Mon, 14 Jun 2010 16:56:54 +0300 Subject: [PATCH] Added new scalable panels, deleted obsolite bitmaps and made some minor cosmetic changes Reviewed by: Kaj Wallin --- images.qrc | 14 +-- res/images/arrow_left.png | Bin 212 -> 3528 bytes res/images/arrow_right.png | Bin 222 -> 3506 bytes res/images/side_bar_left.png | Bin 11385 -> 0 bytes res/images/side_bar_right.png | Bin 11404 -> 0 bytes res/images/sliding_bar_left.png | Bin 6229 -> 0 bytes res/images/sliding_bar_left_test.png | Bin 8938 -> 0 bytes res/images/sliding_bar_right.png | Bin 6236 -> 0 bytes res/images/sliding_bar_right_test.png | Bin 8938 -> 0 bytes res/images/userpanel_mask.png | Bin 3892 -> 0 bytes src/common.h | 10 +- src/engine/engine.cpp | 3 +- src/facebookservice/facebookauthentication.cpp | 17 ++- src/map/baselocationitem.h | 26 ++--- src/map/mapcommon.h | 2 - src/map/mapengine.cpp | 3 +- src/src.pro | 128 +++++++++++----------- src/ui/friendlistitem.cpp | 21 ++-- src/ui/friendlistpanel.cpp | 6 +- src/ui/friendlistpanel.h | 3 +- src/ui/mainwindow.cpp | 67 ++++++------ src/ui/mainwindow.h | 1 - src/ui/panelcommon.h | 79 +++++++++----- src/ui/panelsidebar.cpp | 64 +++++++---- src/ui/panelsidebar.h | 61 +++++++---- src/ui/panelsliderbar.cpp | 78 ++++++++++---- src/ui/panelsliderbar.h | 94 ++++++++++------ src/ui/sidepanel.cpp | 136 +++++++++++++----------- src/ui/sidepanel.h | 135 ++++++++++++----------- src/ui/userinfopanel.cpp | 4 +- src/ui/userinfopanel.h | 2 +- src/ui/zoombuttonpanel.h | 5 +- tests/ui/sidepanel/sidepanel.pro | 3 +- tests/ui/sidepanel/testsidepanel.cpp | 6 +- 34 files changed, 555 insertions(+), 413 deletions(-) mode change 100755 => 100644 res/images/arrow_left.png mode change 100755 => 100644 res/images/arrow_right.png delete mode 100755 res/images/side_bar_left.png delete mode 100755 res/images/side_bar_right.png delete mode 100755 res/images/sliding_bar_left.png delete mode 100644 res/images/sliding_bar_left_test.png delete mode 100755 res/images/sliding_bar_right.png delete mode 100644 res/images/sliding_bar_right_test.png delete mode 100644 res/images/userpanel_mask.png diff --git a/images.qrc b/images.qrc index f407513..5d1b74f 100644 --- a/images.qrc +++ b/images.qrc @@ -13,10 +13,6 @@ res/images/send_position_s.png res/images/show_position.png res/images/show_position_s.png - res/images/side_bar_left.png - res/images/side_bar_right.png - res/images/sliding_bar_left.png - res/images/sliding_bar_right.png res/images/led_red.png res/images/led_red_s.png res/images/list_item_bottom.png @@ -25,9 +21,6 @@ res/images/user_info_item_bottom.png res/images/user_info_item_middle.png res/images/user_info_item_top.png - res/images/sliding_bar_left_test.png - res/images/userpanel_mask.png - res/images/sliding_bar_right_test.png res/images/gps_pos_accurate.png res/images/gps_pos_coarse.png res/images/friend_group.png @@ -40,5 +33,12 @@ res/images/large_profile_pic_border_left.png res/images/large_profile_pic_border_middle.png res/images/large_profile_pic_border_right.png + res/images/menu_bar_drop_shadow.png + res/images/side_bar_middle_left.png + res/images/side_bar_middle_right.png + res/images/side_bar_tile_left.png + res/images/side_bar_tile_right.png + res/images/sliding_bar_button.png + res/images/sliding_bar_tile.png diff --git a/res/images/arrow_left.png b/res/images/arrow_left.png old mode 100755 new mode 100644 index 2232aefc7102c927f9b669e244bd2c5103f7e21a..083f18e124d25325c8028b614c9d5dbb5d295080 GIT binary patch delta 3516 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 Hu0mjf*en*V diff --git a/res/images/side_bar_right.png b/res/images/side_bar_right.png deleted file mode 100755 index a4fdbed1fb3344e8193468da922cb0980d737f6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11404 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 diff --git a/res/images/sliding_bar_left_test.png b/res/images/sliding_bar_left_test.png deleted file mode 100644 index a377f8d1f5307aa0485b8cc48029ec8ccb6602af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8938 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𝔄2lh*ZIILaQXpn|4^KtISS zCX0eYpO-`mMHk> z)05}9V>zJdLM^svv3GsQiJXuB!`g03K)>r(lq6|N*OkKkDP(RTU}X|;iHaL6ceUUOLd z<1DPdi16ih7R{!|&eABYGh1WVMmNbbpNS^oh9-^2Q_PL3*5(S z&0X~2;4TvSL47JnHdo`7T}E##ec+{DeD+knNF-TR1=}R(cI7#mwyV~wrwtV0Y>n9~ zpYxw>Cu6<+Rxb*X=O%Ls?WX%WhJzMSQ0-wdGHh=GMIQJ6^4D`2{*Ko16V0|anM3#Y zFnKV|V;|bH2P#oND1- zISi=;M}K-Lg1s(gq6G|7iUrgOZ8l15?t2uZwnST8Sn)ywvo%Wl)5NkheEI+FyVrW< z6!IU6kNHN46yQ^2e@ZUy@kH8bn4O#dOJ^{d$(+DxI8XVqXU9AY@Ulbi(ktlmw4hHCZo^x}yM?&qV4w1o(+CZmZmc7K=H zL=5lSWZeISn9O|=rlMzc7pA%onoIqNp^U3!o53t44si*M(BgP(@&wA3)CrdzF>{)3 z>O*^@1w>;Cs}3o;Sh~6ATj0LWj1F5C5DqUe92R%_((D!m5AmA9hqYeioAW~>ye4{$ zwTNEeH67%q?}|*1(D@A3o?EDxHWe46Iri-Nw#RB$73rG@K;GD5pp6ozOJV_2{K4ax zWCn9H&<4y&#rMl;Q%afBB(4m>vmQ7GKf&HuvVC2tRUUzI$(ZLgP@ix$aFS#7OY zqVD4%DBKjjtqBebwAKCQS^k>lO=vGM9{W(j5rZ3Ha@nD%k=PMi^~{w|4~U|w%@bg` z)=^hm&&2`;Yll-7n+C?CHmzHiIqCD49d{Mu=@h00XdHX24N^Xd(=h04c#7ZB(aEq- zkWOB47R6l-kLzqIV6KD8=-u=_DSH_#0PDTQjA%vXN&4}WtVIvcP@9*O=w`Yih=maN z(i}4&_(5>qRefN0vh1d)rW&nkaU5EU@n4AJWG*Gm+D>x##T};_26cDdKC@7UK9&h< zkcYrFHv1lolBWd@Lwb$?WY3#a-2Z+KDkKgu6mSS~(-X_KlXj7p+3$fuZQiO3E5Q;z zdC1Ce!+V2`qj#m#SqXDh!?V>1pB7+PG_*BfH21H&zd-&tNrr`v8UDDTvWUMk>L~=D zwSCN?b$WX*m54JbbDL}^kO|~~0XZa@wRA#6FXr`3RT*654v-;LpIa1IXOcc8;@5$L z#v<^hbVaXRngUDRqL>t~Lpa847bx*CnQKGaMn)1k;Bz7qPmLSe&wxy1zC`34uMP<9 zR3osMN5i$CvMAc=C$`qyrQmiG;O3J(lBF?%1$AR`oh^gi$cV`AFjsbsluGa)lk69bu(Z&UCj6 z4hALf{_uHU|IPP#dbsk-E-B})JE6^QVTo{hDdlV5=(LL19m`!@Y;+f;pO9^oLUu2aTE5z?9Ru?D$q;cR#8=<;as^7@~}>xd1b zej6*xRq?OaOhU`# z3>$>8W%Y&8y|@FPzXO5(u#cmPkg1Bvu>EA(67}KEt2-1$Rsdb|^=jJuGD2i(oDMGu z;Na&EuA$0`d{*6dQgzt!*XhyMn1Gyels70<@( zMb--pWXXL)VQDFCR6tIbUSjhMME~wZW}NyWLI`cUW`U^uTg+OsF;!%l=iAjQ6ox;w zT3EEE{*>F6fE+o6rNWFG78Ry?G|TLw3~GVR4W+NfImM1%?~EtR*D@#|sbuEEcy53# zwZuHXdIybKwjfG**+)*XVeIE+4FA5*`onvDp6{!zPf=V%d zQCVtn46c7S_%Bf!8Z3x~*uTTU7V@vdj7%oV%>;V4o%+73gUgZRW6&RHbo2+5Fr)*9 zT>Uvha~o8psy?~P+rN0`B+RdbLp1fz6Z^Gtvk#eF`zjdY83}Cw!Xa?!twl_GXI4jC z_v5b9v}o|N+qTBde`Hl518lqkukzgZ*=r?^22~X`rO}#eux$rUTU$gZ{M|{gNXtS@ zL^sSz>0FY2A**6PYN0(LE!#j3ogBo(CCxYmx6*{@@WilsUa2G-!Se~css10*A7z*aqPLEyj-=Y;# z3b>jc+du2XSHX9QWGK{^msN)F`Hz?X}vDkjM7^g-EkBb zkW;`|^!sa^xT7YfqUUkl{2nIYf2EHA-mib_ka5Ipbl2;9<35B7-GN1;1EnJ+77<2K z>*zB=i_knX0iF@r>QG2A0=j>-PVT{)zuyAyrkjqODu44AxQ{cZ@@9YLUs<3)NQ*^N z(2z&bEnUgVu*=WGj~5p=Dn8b!3(T95by+#TXkk`s_=o#KAjX2b1(K;z9;7BrO9oM3 zSS+={Y#*9K+7a#L@F32nAH-56hU!z!?)XaD=t5D?HM*bG%-3b0I^i4O^ls8WyHd z>4uUf7-zGvU_^Hi7VLV5EvW4h9yxI0%!kQ8sT|l^&b^kNMmvAU&07B*SA3GogqVsu z?y@b-qo!P--t zCQ!P>MSB<|Vd~hMVry8G+$+n2+RQj?g^MM7=osjaQmH23H-i#d#0_rxg{&>=3y7)< zA18;!6(yeitC`*jc`;MSt75a3vi+(Ed+@pEL%+pE^h^!-3-BwAvX3XixYVOC$m&g+ zeL@Ih{tZ8YVnSRU-E$|FTK?Ey4*1{a7{MwyR|IaxHw@Ha0dj#!==r8=HoBC`A;cAC zxAn!aNdgpN?-o_O-br7tdKOm`iSNcosJCdt1ZSNOa(?(rU4KDmFDaUchzv~T%-(XA zO&{CSj8+lWjH3WR*}9Y*-!n)ylgUN!b0C~;Rsgs72fi}h2i_=9RsN4j{IC%7`iHk8 z?|;D!b8Tf=5$m96MI^m!BHCD^y_?1H)>*QbP$(d6n(-xed4}Pfu&WZ2v^5oha^lxp z@9W_=@)U-ZaWiF3de+?7#@_|;PSXNyD+Hp4ZH`znQddEl6ryuf>9b~sB2IFp@#urX z8K9|YLMg>`X#y(ts!{E`FsuosM&F!Xy^Ay9RE2UUR74!U^@j#6?(lqQv^8PPEIpLt za@>5rmR$v8{WoLKnbNW@cja8@q7N+wyZCMW_HfD^X>$_Mz}HeKY`zMj53#$p z+&C!tJ938JP@509B5;I=3k6Nitc-Pv!T^JZwNfs9G5>(#4%)|x_#g1YXE)Amlxk4| z73)NkC8#>-qye+Nj!;r2k83|ijQw| zOY^<31#_aCbJX2S>Fm^B+Mo!v7wS(~lWVgH*}Y&*oW->{lFg`^=GQ&WLIK9{1|Xq^ zQyrW*Z(?)`t>=`!kv#m92m+1KPW18pReWO@=6+E)Wr8O5ktGQi4~0%+XQRNFxkUqZOO9X zKg+@~joeMbc`~sWYF`s5XX$a0;$~xQEvPIp)S`68o_GGRcHj^KLCz<=voCP5@2LqP zcJ#tP0_aeO(056aK8|uGhg==ob;wXCKU^X@#BGtniOJ}E<;#N@aDOxdgMRYxAdUyC z4IZ&N6kPs80m3NJ$T%U1loXIPK~^AOF3xsv%XA%y^WOdZ^3n2A2)I7p9!kADUKVRb z!m4Ps)&f$OFp_QA^T2f!6PKz^R*vQMTF)F`4T=Nyp~>UrR;!bhpLMBR?=#*WBa!sO z{{B>{;8>l>`}d1gMvc!HY<)mqWdw5q57e~Ozu4{bSfUVMcl>?M|JffU9BA@5O!@Ci z@v+PEeVs+bk*1|!x$N08zxri2p48X>;OSx@81GM_rewIec$xc~if~a(k*58*@9z~C zY7a$Qy{{bCo=3^zkkI10lf;vZNFqV3@9q98+^1!*k?HUsF3Zc+_Ix#8zPh7<#8-=j zim{0AZMU|_SJ?Nq1saJj^%7pEAMUEgzWU{~-#cwzUD9woJwC2F+2-Gj<73}EDjxNT z4nxF+I@X+35qCuQc7lvSTsS=RRGIpe#eF>8I2;lHwkUD?d z_+a@^`1``;|!`>J!NJUZ?~W=bj?j6b;EM zZ4I87+<^9{H{F!;>VQ1i=ccyM&AW!f>EW(%J*Zw}6g5xX_{9P9ucXn0DT7Ey?z~M0 z*6*JKQTmyvvyKK|&6cn2dy@itRK4zHIau;3$0nk4G$nOrkk+{R_w&)RiLYrKL*Chb8rYLXEkCUCjgIapS7$7*K#aALCaEA-hSKmgBqk%VAn20>xquOKAi| zH^t$OLLXC65&UfHY}LW1lM6P`^e@ZBrC&OceY93)^VQS$@G%?+{5|9j<3A7P-3)*Qzi_rM>^tqw!=8i?d^u@+REh9JXv*q8%Yxgp13%ASODf4vuxJ%C1Ti z&(7pb$2nnZMK<#*K&SN-?5Z-9OyBLLoIbCvD|1Bq%b(It_iBzI*!W`H6jV+$dD6Ou zayjViY*M!NEy&%5nIY3;MnmU3$U$yrk{B%sY-|RZTib^rcg>|8z+j)2mU^H<1}eQe ztZ2qK7@O6DJjC@WVg$#86h|N^KtxfqgFG^y!$E$)5cXYaucS>HWf8q!82I zhi^q8W`94ba8IBmh$2&tL7H$XgIjlxTw!vMu|}&}awe=CEr}8o_gd$fO(D+2tq&<< z&!~Bw-?`pFB{8X5rP%fS1k!S>j~YB{gCwpF(Yy(CCT8mu#PN>8Vq#0zvCEp$Sd1hE`8X{oHpQiZbfvu8&_w@o5>0Z27 z$AWUD46NB(~gcUOhggUE5LB>V~NFZuMmsDgk diff --git a/res/images/sliding_bar_right.png b/res/images/sliding_bar_right.png deleted file mode 100755 index 35f249e1189ccee0207c663500fbfceb37d23b76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6236 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𝔄2lh*ZIILaQXpn|4^KtISS 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 diff --git a/res/images/userpanel_mask.png b/res/images/userpanel_mask.png deleted file mode 100644 index 81fa6d4b63c13247b04cd4bccdbf4958a951fa0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3892 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 z28ug``{9mPwAwUNHLH4loginState()) { logout(); m_situareService->clearUserData(); - } - else { + } else { m_facebookAuthenticator->start(); } } diff --git a/src/facebookservice/facebookauthentication.cpp b/src/facebookservice/facebookauthentication.cpp index 9537793..d238821 100644 --- a/src/facebookservice/facebookauthentication.cpp +++ b/src/facebookservice/facebookauthentication.cpp @@ -106,7 +106,7 @@ bool FacebookAuthentication::updateCredentials(const QUrl &url) bool found = false; - if (url.isValid()){ + if (url.isValid()) { qDebug() << "url is valid"; QString callbackUrl = url.toString(); @@ -163,30 +163,25 @@ bool FacebookAuthentication::updateCredentials(const QUrl &url) } } } - } - else if ( callbackUrl.indexOf(LOGIN_FAILURE_REPLY) == 0){ + } else if ( callbackUrl.indexOf(LOGIN_FAILURE_REPLY) == 0) { qDebug() << "login failure"; qDebug() << callbackUrl; clearAccountInformation(true); if(m_freshLogin) { emit error(SituareError::LOGIN_FAILED); emit loginFailure(); - } - else { + } else { m_freshLogin = true; emit error(SituareError::SESSION_EXPIRED); } - } - else if(callbackUrl.indexOf(LOGIN_PAGE) == 0) { + } else if(callbackUrl.indexOf(LOGIN_PAGE) == 0) { qDebug() << "correct loginPage"; - } - else { + } else { qDebug() << "totally wrong webPage"; // we should not get a wrong page at this point emit loginFailure(); } - } - else { + } else { qDebug() << " Loading of page failed invalid URL" << endl; // we should not get a wrong page at this point emit loginFailure(); diff --git a/src/map/baselocationitem.h b/src/map/baselocationitem.h index 0652119..2cf2c7a 100644 --- a/src/map/baselocationitem.h +++ b/src/map/baselocationitem.h @@ -49,19 +49,19 @@ public: ******************************************************************************/ public: /** - * @brief Return item sceneBoundingRect transformed to given zoom level - * - * Because of using ItemIgnoresTransformations, and not scaling the item, the default - * sceneBoundingRect does always return the lowest map tile level scene bounding rect which - * is scaled to current zoom level. - * - * Left side of the returned rect is always inside the world coordinates, so collision - * detection based on this rect does work also when items are spanned outside the - * world coordinates. - * - * @param zoomLevel Zoom level for which the sceneBoundingRect should be transformed - * @return sceneBoundingRect transformed to given zoom level - */ + * @brief Return item sceneBoundingRect transformed to given zoom level + * + * Because of using ItemIgnoresTransformations, and not scaling the item, the default + * sceneBoundingRect does always return the lowest map tile level scene bounding rect which + * is scaled to current zoom level. + * + * Left side of the returned rect is always inside the world coordinates, so collision + * detection based on this rect does work also when items are spanned outside the + * world coordinates. + * + * @param zoomLevel Zoom level for which the sceneBoundingRect should be transformed + * @return sceneBoundingRect transformed to given zoom level + */ QRect sceneTransformedBoundingRect(int zoomLevel) const; }; diff --git a/src/map/mapcommon.h b/src/map/mapcommon.h index 187035b..86966da 100644 --- a/src/map/mapcommon.h +++ b/src/map/mapcommon.h @@ -94,8 +94,6 @@ const qreal MIN_LATITUDE = -MAX_LATITUDE; ///< Minimum latitude value const qreal MIN_LONGITUDE = -180.0; ///< Minimum longitude value const qreal MAX_LONGITUDE = 180.0; ///< Maximum longitude value -const int DEFAULT_SCREEN_WIDTH = 973; ///< Default screen width -const int DEFAULT_SCREEN_HEIGHT = 614; ///< Default screen height const int DEFAULT_ZOOM_LEVEL = 14; ///< Default zoom level const qreal DEFAULT_LONGITUDE = 0.0000; ///< Default longitude value const qreal DEFAULT_LATITUDE = 0.0000; ///< Default latitude value diff --git a/src/map/mapengine.cpp b/src/map/mapengine.cpp index 6863828..43d252f 100644 --- a/src/map/mapengine.cpp +++ b/src/map/mapengine.cpp @@ -360,8 +360,7 @@ void MapEngine::receiveOwnLocation(User *user) if (!m_ownLocation->isVisible()) m_ownLocation->show(); - } - else { + } else { m_ownLocation->hide(); } diff --git a/src/src.pro b/src/src.pro index 77c017e..32d698b 100644 --- a/src/src.pro +++ b/src/src.pro @@ -9,94 +9,96 @@ RESOURCES += ../images.qrc \ ../languages.qrc TRANSLATIONS += ../res/languages/situare_fi.ts SOURCES += main.cpp \ - ui/mainwindow.cpp \ - situareservice/situareservice.cpp \ - situareservice/imagefetcher.cpp \ - facebookservice/facebookcredentials.cpp \ + engine/engine.cpp \ facebookservice/facebookauthentication.cpp \ + facebookservice/facebookcredentials.cpp \ + gps/gpsposition.cpp \ + map/baselocationitem.cpp \ + map/friendgroupitem.cpp \ + map/frienditemshandler.cpp \ + map/friendlocationitem.cpp \ + map/gpslocationitem.cpp \ map/mapengine.cpp \ - map/mapview.cpp \ + map/mapfetcher.cpp \ map/mapscene.cpp \ map/maptile.cpp \ - map/mapfetcher.cpp \ + map/maptilerequest.cpp \ + map/mapview.cpp \ map/ownlocationitem.cpp \ - map/baselocationitem.cpp \ - map/friendlocationitem.cpp \ - ui/updatelocation/updatelocationdialog.cpp \ + network/networkaccessmanager.cpp \ + network/networkcookiejar.cpp \ + network/networkhandler.cpp \ + network/networkreply.cpp \ + situareservice/imagefetcher.cpp \ + situareservice/situareservice.cpp \ ui/updatelocation/texteditautoresizer.cpp \ - ui/friendlistview.cpp \ - ui/friendlistitem.cpp \ - user/user.cpp \ + ui/updatelocation/updatelocationdialog.cpp \ ui/avatarimage.cpp \ - engine/engine.cpp \ - ui/settingsdialog.cpp \ - ui/logindialog.cpp \ - map/maptilerequest.cpp \ - ui/imagebutton.cpp \ + ui/friendlistitem.cpp \ ui/friendlistpanel.cpp \ - ui/userinfopanel.cpp \ + ui/friendlistview.cpp \ + ui/imagebutton.cpp \ + ui/logindialog.cpp \ + ui/mainwindow.cpp \ + ui/mapscale.cpp \ ui/panelsidebar.cpp \ ui/panelsliderbar.cpp \ - map/friendgroupitem.cpp \ - map/frienditemshandler.cpp \ - gps/gpsposition.cpp \ - map/gpslocationitem.cpp \ - ui/zoombuttonpanel.cpp \ - ui/userinfo.cpp \ + ui/settingsdialog.cpp \ ui/sidepanel.cpp \ + ui/sidepanelbase.cpp \ + ui/userinfo.cpp \ + ui/userinfopanel.cpp \ ui/zoombutton.cpp \ - network/networkaccessmanager.cpp \ - network/networkhandler.cpp \ - network/networkcookiejar.cpp \ - network/networkreply.cpp \ - ui/mapscale.cpp -HEADERS += ui/mainwindow.h \ + ui/zoombuttonpanel.cpp \ + user/user.cpp +HEADERS += common.h \ + engine/engine.h \ + facebookservice/facebookauthentication.h \ + facebookservice/facebookcommon.h \ + facebookservice/facebookcredentials.h \ + gps/gpscommon.h \ + gps/gpsposition.h \ + map/baselocationitem.h \ + map/friendgroupitem.h \ + map/frienditemshandler.h \ + map/friendlocationitem.h \ + map/gpslocationitem.h \ + map/mapcommon.h \ map/mapengine.h \ - map/mapview.h \ + map/mapfetcher.h \ map/mapscene.h \ map/maptile.h \ - map/mapfetcher.h \ - map/mapcommon.h \ + map/maptilerequest.h \ + map/mapview.h \ map/ownlocationitem.h \ - map/baselocationitem.h \ - map/friendlocationitem.h \ - ui/updatelocation/updatelocationdialog.h \ - ui/updatelocation/texteditautoresizer.h \ - situareservice/situareservice.h \ - situareservice/situarecommon.h \ + network/networkaccessmanager.h \ + network/networkcookiejar.h \ + network/networkhandler.h \ + network/networkreply.h \ situareservice/imagefetcher.h \ - facebookservice/facebookcredentials.h \ - facebookservice/facebookauthentication.h \ - facebookservice/facebookcommon.h \ - ui/friendlistview.h \ - ui/friendlistitem.h \ - user/user.h \ + situareservice/situarecommon.h \ + situareservice/situareservice.h \ + ui/updatelocation/texteditautoresizer.h \ + ui/updatelocation/updatelocationdialog.h \ ui/avatarimage.h \ - engine/engine.h \ - ui/settingsdialog.h \ - ui/logindialog.h \ - map/maptilerequest.h \ - ui/imagebutton.h \ + ui/friendlistitem.h \ ui/friendlistpanel.h \ - ui/userinfopanel.h \ + ui/friendlistview.h \ + ui/imagebutton.h \ + ui/logindialog.h \ + ui/mainwindow.h \ + ui/mapscale.h \ ui/panelcommon.h \ ui/panelsidebar.h \ ui/panelsliderbar.h \ - map/friendgroupitem.h \ - map/frienditemshandler.h \ - gps/gpsposition.h \ - map/gpslocationitem.h \ - gps/gpscommon.h \ - ui/zoombuttonpanel.h \ - common.h \ + ui/settingsdialog.h \ ui/userinfo.h \ + ui/userinfopanel.h \ ui/sidepanel.h \ + ui/sidepanelbase.h \ ui/zoombutton.h \ - network/networkaccessmanager.h \ - network/networkhandler.h \ - network/networkcookiejar.h \ - network/networkreply.h \ - ui/mapscale.h + ui/zoombuttonpanel.h \ + user/user.h QT += network \ webkit DEFINES += QT_NO_DEBUG_OUTPUT diff --git a/src/ui/friendlistitem.cpp b/src/ui/friendlistitem.cpp index 4cd7840..3cfc7fc 100644 --- a/src/ui/friendlistitem.cpp +++ b/src/ui/friendlistitem.cpp @@ -36,30 +36,31 @@ #include "imagebutton.h" #include "../common.h" -const int BACKGROUND_TOP_HEIGHT = 20; const int BACKGROUND_BOTTOM_HEIGHT = 15; +const int BACKGROUND_TOP_HEIGHT = 20; +const int BACKGROUND_WIDTH = 368; const int ICON_HEIGHT = 24; ///< Icon height const int ICON_WIDTH = 24; ///< Icon width const int IMAGE_HEIGHT = 64; ///< Friend image height const int IMAGE_WIDTH = 64; ///< Friend image width -const int ITEM_MAX_WIDTH = 368; ///< Maximum width for item const int ITEM_MIN_HEIGHT = 141; ///< Minimum height for item -const int ITEM_MIN_WIDTH = 368; ///< Minimum width for item const int MARGIN = 5; ///< Icon margin const int MOUSE_PRESS_AREA_WIDTH = 20; ///< Area width for item height toggling const int MOUSE_PRESS_AREA_HEIGHT = 20; ///< Area height for item height toggling + /** * @var NAME_LABEL_MAX_WIDTH * * @brief Name label's maximum width */ -const int NAME_LABEL_MAX_WIDTH = ITEM_MIN_WIDTH - 3*MARGIN - IMAGE_WIDTH; +const int NAME_LABEL_MAX_WIDTH = BACKGROUND_WIDTH - 3*MARGIN - IMAGE_WIDTH; + /** * @var LABEL_MAX_WIDTH * * @brief All label's maximum width */ -const int LABEL_MAX_WIDTH = ITEM_MIN_WIDTH - 3*MARGIN - IMAGE_WIDTH - MARGIN - ICON_WIDTH; +const int LABEL_MAX_WIDTH = BACKGROUND_WIDTH - 3 * MARGIN - IMAGE_WIDTH - MARGIN - ICON_WIDTH; const int WALK_DISTANCE = 5; ///< Walk distance limit for distance icon const int CAR_DISTANCE = 500; ///< Car distance limit for distance icon @@ -142,8 +143,8 @@ FriendListItem::FriendListItem(QWidget *parent) layout->addLayout(topLayout, 0); layout->addLayout(bottomLayout, 1); - setMinimumSize(ITEM_MIN_WIDTH, ITEM_MIN_HEIGHT); - setMaximumWidth(ITEM_MIN_WIDTH); + setMinimumSize(BACKGROUND_WIDTH, ITEM_MIN_HEIGHT); + setMaximumWidth(BACKGROUND_WIDTH); setFont(NOKIA_FONT_SMALL); m_nameLabel->setFont(NOKIA_FONT_NORMAL); @@ -296,10 +297,10 @@ void FriendListItem::paintEvent(QPaintEvent *event) QPainter painter(this); - QRect topRect = QRect(0, 0, ITEM_MIN_WIDTH, BACKGROUND_TOP_HEIGHT); - QRect middleRect = QRect(0, topRect.bottom(), ITEM_MIN_WIDTH, + QRect topRect = QRect(0, 0, BACKGROUND_WIDTH, BACKGROUND_TOP_HEIGHT); + QRect middleRect = QRect(0, topRect.bottom(), BACKGROUND_WIDTH, height() - BACKGROUND_TOP_HEIGHT - BACKGROUND_BOTTOM_HEIGHT); - QRect bottomRect = QRect(topRect.left(), middleRect.bottom(), ITEM_MIN_WIDTH, + QRect bottomRect = QRect(topRect.left(), middleRect.bottom(), BACKGROUND_WIDTH, BACKGROUND_BOTTOM_HEIGHT); painter.drawPixmap(topRect, m_backgroundTopImage); diff --git a/src/ui/friendlistpanel.cpp b/src/ui/friendlistpanel.cpp index 192d8c3..4c62607 100644 --- a/src/ui/friendlistpanel.cpp +++ b/src/ui/friendlistpanel.cpp @@ -32,7 +32,8 @@ FriendListPanel::FriendListPanel(QWidget *parent) setType(SidePanel::FriendPanel); QHBoxLayout *filterLayout = new QHBoxLayout; - filterLayout->setContentsMargins(SLIDINGBAR_WIDTH+1, 0, SHOW_ALL_BUTTON_RIGHT_MARGIN, 0); + filterLayout->setContentsMargins(FRIENDPANEL_FILTER_MARGIN_LEFT, 0, + FRIENDPANEL_FILTER_MARGIN_RIGHT, 0); m_friendListHeaderWidget = new QWidget(); m_friendListHeaderWidget->setLayout(filterLayout); m_friendListHeaderWidget->setAutoFillBackground(true); @@ -47,7 +48,8 @@ FriendListPanel::FriendListPanel(QWidget *parent) m_panelVBox->addWidget(m_friendListHeaderWidget); QHBoxLayout *friendListLayout = new QHBoxLayout; - friendListLayout->setContentsMargins(SLIDINGBAR_WIDTH+1, 0, SIDEBAR_WIDTH, 0); + friendListLayout->setContentsMargins(FRIENDPANEL_MARGIN_LEFT, FRIENDPANEL_MARGIN_TOP, + FRIENDPANEL_MARGIN_RIGHT, FRIENDPANEL_MARGIN_BOTTOM); m_friendListView = new FriendListView(this); QScrollArea *friendListScroll = new QScrollArea(this); friendListScroll->setWidgetResizable(false); diff --git a/src/ui/friendlistpanel.h b/src/ui/friendlistpanel.h index 13ecfda..1d81a02 100644 --- a/src/ui/friendlistpanel.h +++ b/src/ui/friendlistpanel.h @@ -23,6 +23,7 @@ #define FRIENDLISTPANEL_H #include + #include "sidepanel.h" class FriendListView; @@ -91,7 +92,7 @@ private: QWidget *m_friendListHeaderWidget; ///< Friend list header widget QLabel *m_friendListLabel; ///< Friend list label QPushButton *m_clearFilterButton; ///< Button to clear list filtering - FriendListView *m_friendListView; ///< Friend list view + FriendListView *m_friendListView; ///< Friend list view }; #endif // FRIENDLISTPANEL_H diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index 6a13e42..b4e8507 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -27,15 +27,16 @@ #include #include -#include "common.h" #include "facebookservice/facebookauthentication.h" +#include "map/mapcommon.h" +#include "map/mapview.h" +#include "common.h" #include "friendlistpanel.h" #include "logindialog.h" -#include "map/mapview.h" +#include "mapscale.h" #include "settingsdialog.h" #include "userinfopanel.h" #include "zoombuttonpanel.h" -#include "mapscale.h" #include "mainwindow.h" @@ -47,10 +48,6 @@ #include #endif // Q_WS_MAEMO_5 -// values for setting screen size in desktop matching N900 screen size -const int N900_APP_WIDTH = 800; -const int N900_APP_HEIGHT = 449; - MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), m_drawOwnLocationCrosshair(false), @@ -73,6 +70,8 @@ MainWindow::MainWindow(QWidget *parent) QHBoxLayout *layout = new QHBoxLayout; layout->addWidget(m_mapView); layout->setMargin(0); + layout->setSpacing(0); + setCentralWidget(new QWidget()); centralWidget()->setLayout(layout); @@ -98,8 +97,8 @@ MainWindow::MainWindow(QWidget *parent) grabZoomKeys(true); - // set screen size in desktop matching N900 screen size - resize(N900_APP_WIDTH, N900_APP_HEIGHT); + // Set default screen size + resize(DEFAULT_SCREEN_WIDTH, DEFAULT_SCREEN_HEIGHT); #ifdef Q_WS_MAEMO_5 setAttribute(Qt::WA_Maemo5StackedWindow); #endif @@ -146,7 +145,6 @@ void MainWindow::buildFullScreenButton() connect(m_fullScreenButton, SIGNAL(clicked()), this, SLOT(toggleFullScreen())); #endif // Q_WS_MAEMO_5 - } void MainWindow::buildFriendListPanel() @@ -154,6 +152,7 @@ void MainWindow::buildFriendListPanel() qDebug() << __PRETTY_FUNCTION__; m_friendsListPanel = new FriendListPanel(this); + m_friendsListPanelSidebar = new PanelSideBar(this, RIGHT); m_friendsListPanel->stackUnder(m_friendsListPanelSidebar); @@ -161,17 +160,17 @@ void MainWindow::buildFriendListPanel() connect(this, SIGNAL(friendsLocationsReady(QList&)), m_friendsListPanel, SLOT(friendInfoReceived(QList&))); - connect(m_friendsListPanel, SIGNAL(findFriend(QPointF)), - this, SIGNAL(findFriend(QPointF))); - - connect(m_mapView, SIGNAL(viewResized(QSize)), - m_friendsListPanel, SLOT(screenResized(QSize))); - connect(this, SIGNAL(locationItemClicked(QList)), m_friendsListPanel, SLOT(showFriendsInList(QList))); connect(m_mapView, SIGNAL(viewResized(QSize)), - m_friendsListPanelSidebar, SLOT(reDrawSidebar(QSize))); + m_friendsListPanel, SLOT(resizePanel(QSize))); + + connect(m_mapView, SIGNAL(viewResized(QSize)), + m_friendsListPanelSidebar, SLOT(resizeSideBar(QSize))); + + connect(m_friendsListPanel, SIGNAL(findFriend(QPointF)), + this, SIGNAL(findFriend(QPointF))); } void MainWindow::buildInformationBox(const QString &message, bool modal) @@ -286,38 +285,42 @@ void MainWindow::buildUserInfoPanel() qDebug() << __PRETTY_FUNCTION__; m_userPanel = new UserInfoPanel(this); + m_userPanelSidebar = new PanelSideBar(this, LEFT); m_userPanelSidebar->stackUnder(m_friendsListPanel); m_userPanel->stackUnder(m_userPanelSidebar); - connect(m_userPanel, SIGNAL(findUser(QPointF)), - this, SIGNAL(findUser(QPointF))); - connect(this, SIGNAL(userLocationReady(User*)), m_userPanel, SLOT(userDataReceived(User*))); - connect(m_userPanel, SIGNAL(requestReverseGeo()), - this, SIGNAL(requestReverseGeo())); - connect(this, SIGNAL(reverseGeoReady(QString)), m_userPanel, SIGNAL(reverseGeoReady(QString))); - connect(m_userPanel, SIGNAL(statusUpdate(QString,bool)), - this, SIGNAL(statusUpdate(QString,bool))); - - connect(m_userPanel, SIGNAL(refreshUserData()), - this, SIGNAL(refreshUserData())); - - connect(m_mapView, SIGNAL(viewResized(QSize)), - m_userPanel, SLOT(screenResized(QSize))); - connect(this, SIGNAL(clearUpdateLocationDialogData()), m_userPanel, SIGNAL(clearUpdateLocationDialogData())); connect(this, SIGNAL(messageSendingFailed(int)), m_userPanel, SIGNAL(messageSendingFailed(int))); + connect(m_mapView, SIGNAL(viewResized(QSize)), + m_userPanel, SLOT(resizePanel(QSize))); + + connect(m_mapView, SIGNAL(viewResized(QSize)), + m_userPanelSidebar, SLOT(resizeSideBar(QSize))); + + connect(m_userPanel, SIGNAL(findUser(QPointF)), + this, SIGNAL(findUser(QPointF))); + + connect(m_userPanel, SIGNAL(requestReverseGeo()), + this, SIGNAL(requestReverseGeo())); + + connect(m_userPanel, SIGNAL(statusUpdate(QString,bool)), + this, SIGNAL(statusUpdate(QString,bool))); + + connect(m_userPanel, SIGNAL(refreshUserData()), + this, SIGNAL(refreshUserData())); + connect(m_userPanel, SIGNAL(notificateUpdateFailing(QString, bool)), this, SLOT(buildInformationBox(QString, bool))); } diff --git a/src/ui/mainwindow.h b/src/ui/mainwindow.h index 4f572fb..9079c02 100644 --- a/src/ui/mainwindow.h +++ b/src/ui/mainwindow.h @@ -107,7 +107,6 @@ public: */ void readAutomaticLocationUpdateSettings(); - /** * @brief Enable / disable auto centering button. * diff --git a/src/ui/panelcommon.h b/src/ui/panelcommon.h index 0638b53..5e3cea8 100644 --- a/src/ui/panelcommon.h +++ b/src/ui/panelcommon.h @@ -22,50 +22,71 @@ #ifndef PANELCOMMON_H #define PANELCOMMON_H -#include -#include "map/mapcommon.h" - -enum Side {LEFT, RIGHT}; ///< Enumerator for panel sideness +#include +#include "../common.h" +// Dragging settings const int DRAG_INIT_TIME = 1000; ///< How long buttons must be pressed to start drag mode const int FORCE_RELEASE_TIME = 10000; ///< How long mouse can be grabbed -const int SIDEBAR_WIDTH = 23; ///< Width of the sidebar -const int SIDEBAR_HEIGHT = 424; ///< Height of the sidebar +// Common panel settings +enum Side {LEFT, RIGHT}; ///< Enumerator for panel sideness + +const int MAEMO5_SCROLLBAR_WIDTH = 8; ///< Width of the Maemo scrollbar + +const int PANEL_PEEK_AMOUNT = 27; ///< Amount of pixels shown when panel is closed +const int PANEL_TOP_PADDING = 0; ///< Amount of padding in top of panels +const int PANEL_BOTTOM_PADDING = 0; ///< Amount of padding in bottom of panels -const int SLIDINGBAR_WIDTH = 24; ///< Width of the slidingbar -const int SLIDINGBAR_HEIGHT = 424; ///< Height of the slidingbar +const int SIDEBAR_WIDTH = 23; ///< Width of the sidebar +const int SIDEBAR_HEIGHT = DEFAULT_SCREEN_HEIGHT - PANEL_TOP_PADDING + - PANEL_BOTTOM_PADDING; ///< Height of the sidebar -const int SHOW_ALL_BUTTON_RIGHT_MARGIN = SIDEBAR_WIDTH*2-7; ///< Show all button right margin +const int SLIDER_BAR_WIDTH = 5; ///< Width of the slider bar +const int SLIDER_BUTTON_OFFSET = 19; ///< Slider bar button extrusion width +const int SLIDER_WIDTH = 43; ///< Width of the whole slider +const int SLIDER_HEIGHT = DEFAULT_SCREEN_HEIGHT - PANEL_TOP_PADDING + - PANEL_BOTTOM_PADDING; ///< Height of the slider -const int PANEL_PEEK_AMOUNT = 25; ///< Amount of pixels shown when panel is closed +// Friend list panel settings +const int FRIENDPANEL_WIDTH = 426; ///< Width of the friends list panel +const int FRIENDPANEL_HEIGHT = DEFAULT_SCREEN_HEIGHT - PANEL_TOP_PADDING + - PANEL_BOTTOM_PADDING; ///< Height of the friends list panel -const int FRIENDPANEL_WIDTH = 430; ///< Width of the friends list panel -const int FRIENDPANEL_HEIGHT = DEFAULT_SCREEN_HEIGHT; ///< Height of the friends list panel +const int FRIENDPANEL_MARGIN_LEFT = SLIDER_BUTTON_OFFSET + + MAEMO5_SCROLLBAR_WIDTH; ///< Friend list panel inner margin (left) +const int FRIENDPANEL_MARGIN_RIGHT = SIDEBAR_WIDTH; ///< Friend list panel inner margin (right) +const int FRIENDPANEL_MARGIN_TOP = 0; ///< Friend list panel inner margin (top) +const int FRIENDPANEL_MARGIN_BOTTOM = 0; ///< Friend list panel inner margin (bottom) -const int USERPANEL_WIDTH = 300; ///< Width of the user panel -const int USERPANEL_HEIGHT = DEFAULT_SCREEN_HEIGHT; ///< Height of the user panetl +const int FRIENDPANEL_FILTER_MARGIN_LEFT = FRIENDPANEL_MARGIN_LEFT + 4; ///< Friend list filter bar margin (left) +const int FRIENDPANEL_FILTER_MARGIN_RIGHT = FRIENDPANEL_MARGIN_RIGHT + + MAEMO5_SCROLLBAR_WIDTH + 4; ///< Friend list filter bar margin (right) -const int MARGIN_CORRECTION = 1; ///< Amount of correction to make panels touch the window borders -const int MARGIN_CORRECTION2 = 2; ///< Amount of correction to make panels touch the window borders +const int SHOW_ALL_BUTTON_RIGHT_MARGIN = SIDEBAR_WIDTH * 2 - 7; ///< Show all button right margin -const int PANEL_TOP_Y = 0; ///< Y coordinate for top of both panels -const int TOP_CORNER_X = 0; ///< X coordinate for top left corner +const int FRIENDPANEL_CLOSED_X = DEFAULT_SCREEN_WIDTH - SLIDER_BUTTON_OFFSET + - PANEL_PEEK_AMOUNT; ///< Horizontal position of a closed friend list panel +const int FRIENDPANEL_OPENED_X = DEFAULT_SCREEN_WIDTH - SLIDER_BUTTON_OFFSET - SLIDER_BAR_WIDTH + - FRIENDPANEL_WIDTH; ///< Horizontal position of a open friend list panel -const int FRIENDPANEL_CLOSED_X = - DEFAULT_SCREEN_WIDTH - PANEL_PEEK_AMOUNT - - SLIDINGBAR_WIDTH; ///< X location of the friend list panel when closed -const int FRIENDPANEL_OPENED_X = - DEFAULT_SCREEN_WIDTH - FRIENDPANEL_WIDTH - - SLIDINGBAR_WIDTH; ///< X location of the friend list panel when opened +// User info panel settings +const int USERPANEL_WIDTH = 298; ///< Width of the user panel +const int USERPANEL_HEIGHT = DEFAULT_SCREEN_HEIGHT - PANEL_TOP_PADDING + - PANEL_BOTTOM_PADDING; ///< Height of the user panel -const int USERPANEL_CLOSED_X = - 2 - USERPANEL_WIDTH + PANEL_PEEK_AMOUNT; ///< X location of the user panel when closed -const int USERPANEL_OPENED_X = 0; ///< X location of the user panel when opened +const int USERPANEL_MARGIN_LEFT = SIDEBAR_WIDTH + + MAEMO5_SCROLLBAR_WIDTH; ///< User info panel inner margin (left) +const int USERPANEL_MARGIN_RIGHT = SLIDER_BUTTON_OFFSET; ///< User info panel inner margin (right) +const int USERPANEL_MARGIN_TOP = 0; ///< User info panel inner margin (top) +const int USERPANEL_MARGIN_BOTTOM = 0; ///< User info panel inner margin (bottom) +const int USERPANEL_CLOSED_X = - USERPANEL_WIDTH + PANEL_PEEK_AMOUNT + - SLIDER_BAR_WIDTH; ///< Horizontal position of a closed user info panel +const int USERPANEL_OPENED_X = 0; ///< Horizontal position of a open user info panel -const int ZOOM_BUTTON_PANEL_POSITION_X = 10 - + PANEL_PEEK_AMOUNT; ///< Horizontal position of zoom panel +// Zoom button panel settings +const int ZOOM_BUTTON_PANEL_POSITION_X = 10 + PANEL_PEEK_AMOUNT; ///< Horizontal position of zoom panel const int ZOOM_BUTTON_PANEL_POSITION_Y = 10; ///< Vertical position of zoom panel const int ZOOM_BUTTON_PANEL_BUTTON_SPACING = 4; ///< Size of a zoom button spacing diff --git a/src/ui/panelsidebar.cpp b/src/ui/panelsidebar.cpp index 442fd40..bd6cf4b 100644 --- a/src/ui/panelsidebar.cpp +++ b/src/ui/panelsidebar.cpp @@ -1,8 +1,9 @@ - /* +/* Situare - A location system for Facebook Copyright (C) 2010 Ixonos Plc. Authors: Kaj Wallin - kaj.wallin@ixonos.com + Pekka Nissinen - pekka.nissinen@ixonos.com Situare is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -17,30 +18,40 @@ along with Situare; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ +*/ + +#include +#include -#include #include "panelsidebar.h" -#include "panelcommon.h" PanelSideBar::PanelSideBar(QWidget *parent, Side side) : QWidget(parent) { + qDebug() << __PRETTY_FUNCTION__; + if (side == LEFT) { setObjectName("SidePanelLeft"); - setStyleSheet(QString( - "#SidePanelLeft{background-image: url(:/res/images/side_bar_left.png)}")); - move(QPoint(USERPANEL_OPENED_X, PANEL_TOP_Y)); - } - else if (side == RIGHT){ + m_panelTile.load(":res/images/side_bar_tile_left.png"); + m_panelMiddleTile.load(":res/images/side_bar_middle_left.png"); + move(0, PANEL_TOP_PADDING); + } else if (side == RIGHT) { setObjectName("SidePanelRight"); - setStyleSheet(QString( - "#SidePanelRight{background-image: url(:/res/images/side_bar_right.png)}")); - move(QPoint(DEFAULT_SCREEN_WIDTH - SIDEBAR_WIDTH + MARGIN_CORRECTION2, PANEL_TOP_Y)); - } - else { + m_panelTile.load(":res/images/side_bar_tile_right.png"); + m_panelMiddleTile.load(":res/images/side_bar_middle_right.png"); + move(DEFAULT_SCREEN_WIDTH - SIDEBAR_WIDTH, PANEL_TOP_PADDING); + } else { qFatal("Illegal PanelSideBar 2nd argument"); } + + m_menuDropShadowTile.load(":res/images/menu_bar_drop_shadow.png"); + + middleRect.setRect(0, (SIDEBAR_HEIGHT / 2) - (m_panelMiddleTile.height() / 2), + SIDEBAR_WIDTH, m_panelMiddleTile.height()); + topRect.setRect(0, 0, SIDEBAR_WIDTH, middleRect.top()); + bottomRect.setRect(0, middleRect.bottom() + 1, SIDEBAR_WIDTH, + SIDEBAR_HEIGHT - topRect.height() - middleRect.height()); + resize(SIDEBAR_WIDTH, SIDEBAR_HEIGHT); setAttribute(Qt::WA_TransparentForMouseEvents, true); } @@ -49,17 +60,26 @@ void PanelSideBar::paintEvent(QPaintEvent *) { qDebug() << __PRETTY_FUNCTION__; - QStyleOption option; - option.init(this); + QPainter painter(this); - QStylePainter painter(this); - style()->drawPrimitive(QStyle::PE_Widget, &option, &painter, this); + painter.drawTiledPixmap(topRect, m_panelTile); + painter.drawPixmap(middleRect, m_panelMiddleTile); + painter.drawTiledPixmap(bottomRect, m_panelTile); + painter.drawTiledPixmap(0, 0, SIDEBAR_WIDTH, m_menuDropShadowTile.height(), m_menuDropShadowTile); } -void PanelSideBar::reDrawSidebar(const QSize &size) +void PanelSideBar::resizeSideBar(const QSize &size) { qDebug() << __PRETTY_FUNCTION__; - if (objectName() == "SidePanelRight") { - move(size.width() - SIDEBAR_WIDTH + MARGIN_CORRECTION2, PANEL_TOP_Y); - } + + if (objectName() == "SidePanelRight") + move(size.width() - SIDEBAR_WIDTH, PANEL_TOP_PADDING); + + middleRect.setRect(0, (size.height() / 2) - (m_panelMiddleTile.height() / 2), + SIDEBAR_WIDTH, m_panelMiddleTile.height()); + topRect.setRect(0, 0, SIDEBAR_WIDTH, middleRect.top()); + bottomRect.setRect(0, middleRect.bottom() + 1, + SIDEBAR_WIDTH, size.height() - topRect.height() - middleRect.height()); + + resize(SIDEBAR_WIDTH, size.height() - PANEL_TOP_PADDING - PANEL_BOTTOM_PADDING); } diff --git a/src/ui/panelsidebar.h b/src/ui/panelsidebar.h index 52b92d7..671baa7 100644 --- a/src/ui/panelsidebar.h +++ b/src/ui/panelsidebar.h @@ -1,8 +1,9 @@ - /* +/* Situare - A location system for Facebook Copyright (C) 2010 Ixonos Plc. Authors: Kaj Wallin - kaj.wallin@ixonos.com + Pekka Nissinen - pekka.nissinen@ixonos.com Situare is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -17,31 +18,38 @@ along with Situare; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ +*/ #ifndef PANELSIDEBAR_H #define PANELSIDEBAR_H +#include +#include +#include +#include #include + #include "panelcommon.h" /** -* @brief Generic class for drawing sidebar anchors at the side of the screen -* -* @author Kaj Wallin - kaj.wallin (at) ixonos.com -* @class PanelSideBar panelsidebar.h "ui/panelsidebar.h" -*/ + * @brief Generic class for drawing sidebar anchors at the side of the screen + * + * @author Kaj Wallin - kaj.wallin (at) ixonos.com + * @author Pekka Nissinen - pekka.nissinen@ixonos.com + * + * @class PanelSideBar panelsidebar.h "ui/panelsidebar.h" + */ class PanelSideBar : public QWidget { Q_OBJECT public: /** - * @brief Constructor - * - * @param parent Parent - * @param side Qstring for the sidebar location. Accepts "left" and "right" - */ + * @brief Constructor + * + * @param parent Parent + * @param side Qstring for the sidebar location. Accepts "left" and "right" + */ PanelSideBar(QWidget *parent = 0, Side side = LEFT); /******************************************************************************* @@ -49,10 +57,10 @@ public: ******************************************************************************/ protected: /** - * @brief Draws stylesheet used in this class. - * - * @param * QPaintEvent unused - */ + * @brief Draws stylesheet used in this class. + * + * @param * QPaintEvent unused + */ void paintEvent(QPaintEvent *); /******************************************************************************* @@ -60,11 +68,22 @@ protected: ******************************************************************************/ public slots: /** - * @brief Slot to redraw the sidebar after window resize event - * - * @param size Size of the screen - */ - void reDrawSidebar(const QSize &size); + * @brief Slot to redraw the side bar after window resize event + * + * @param size Size of the new window + */ + void resizeSideBar(const QSize &size); + +/******************************************************************************* + * DATA MEMBERS + ******************************************************************************/ +private: + QPixmap m_menuDropShadowTile; ///< Pixmap for menu drop shadow + QPixmap m_panelMiddleTile; ///< Pixmap for side bar middle tile + QPixmap m_panelTile; ///< Pixmap for side bar tile + QRect topRect; ///< Rect for side bar top + QRect middleRect; ///< Rect for side bar middle + QRect bottomRect; ///< Rect for side bar bottom }; #endif // PANELSIDEBAR_H diff --git a/src/ui/panelsliderbar.cpp b/src/ui/panelsliderbar.cpp index 267608a..fd42ce8 100644 --- a/src/ui/panelsliderbar.cpp +++ b/src/ui/panelsliderbar.cpp @@ -1,8 +1,9 @@ - /* +/* Situare - A location system for Facebook Copyright (C) 2010 Ixonos Plc. Authors: Kaj Wallin - kaj.wallin@ixonos.com + Pekka Nissinen - pekka.nissinen@ixonos.com Situare is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -17,46 +18,77 @@ along with Situare; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ +*/ + +#include +#include +#include -#include #include "panelsliderbar.h" -#include "panelcommon.h" PanelSliderBar::PanelSliderBar(QWidget *parent, Side side) : QWidget(parent) { - if(side == LEFT) { - setObjectName("UserPanelSlidingBar"); - setStyleSheet(QString( - "#UserPanelSlidingBar{background-image: url(:/res/images/sliding_bar_left_test.png)}")); - setMask(QPixmap(":/res/images/sliding_bar_left_test.png").mask()); - } - else if(side == RIGHT) { - setObjectName("FriendPanelSlidingBar"); - setStyleSheet(QString( - "#FriendPanelSlidingBar{background-image: url(:/res/images/sliding_bar_right_test.png)}")); - setMask(QPixmap(":/res/images/sliding_bar_right_test.png").mask()); - } - else { + qDebug() << __PRETTY_FUNCTION__; + + if (side == LEFT) + m_sliderButtonArrow.load(":res/images/arrow_right.png"); + else if (side == RIGHT) + m_sliderButtonArrow.load(":res/images/arrow_left.png"); + else qFatal("Illegal PanelSliderBar 2nd argument"); - } - resize(SLIDINGBAR_WIDTH*2, SLIDINGBAR_HEIGHT); + + m_sliderTile.load(":res/images/sliding_bar_tile.png"); + m_sliderButton.load(":res/images/sliding_bar_button.png"); + m_menuDropShadowTile.load(":res/images/menu_bar_drop_shadow.png"); + + m_buttonRect.setRect(0, (SLIDER_HEIGHT / 2) - (m_sliderButton.height() / 2), + SLIDER_WIDTH, m_sliderButton.height()); + m_topRect.setRect(SLIDER_BUTTON_OFFSET, 0, SLIDER_BAR_WIDTH, m_buttonRect.top()); + m_bottomRect.setRect(SLIDER_BUTTON_OFFSET, m_buttonRect.bottom() + 1, + SLIDER_BAR_WIDTH, SLIDER_HEIGHT - m_topRect.height() - m_buttonRect.height()); + + m_sliderRegion = QRegion(m_buttonRect).united(QRegion(m_topRect).united(QRegion(m_bottomRect))); + setMask(m_sliderRegion); + + resize(SLIDER_WIDTH, SLIDER_HEIGHT); } void PanelSliderBar::paintEvent(QPaintEvent *) { qDebug() << __PRETTY_FUNCTION__; - QStyleOption option; - option.init(this); + QPainter painter(this); - QStylePainter painter(this); - style()->drawPrimitive(QStyle::PE_Widget, &option, &painter, this); + painter.drawTiledPixmap(m_topRect, m_sliderTile); + painter.drawTiledPixmap(m_bottomRect, m_sliderTile); + painter.drawTiledPixmap(SLIDER_BUTTON_OFFSET, 0, SLIDER_BAR_WIDTH, m_menuDropShadowTile.height(), + m_menuDropShadowTile); + painter.drawPixmap(m_buttonRect, m_sliderButton); + painter.drawPixmap((this->width() / 2) - (m_sliderButtonArrow.width() / 2), + (this->height() / 2) - (m_sliderButtonArrow.height() / 2), + m_sliderButtonArrow); } void PanelSliderBar::mouseReleaseEvent(QMouseEvent *) { qDebug() << __PRETTY_FUNCTION__; + emit clicked(); } + +void PanelSliderBar::resizeSliderBar(const QSize &size) +{ + qDebug() << __PRETTY_FUNCTION__; + + m_buttonRect.setRect(0, (size.height() / 2) - (m_sliderButton.height() / 2), + SLIDER_WIDTH, m_sliderButton.height()); + m_topRect.setRect(SLIDER_BUTTON_OFFSET, 0, SLIDER_BAR_WIDTH, m_buttonRect.top()); + m_bottomRect.setRect(SLIDER_BUTTON_OFFSET, m_buttonRect.bottom() + 1, + SLIDER_BAR_WIDTH, size.height() - m_topRect.height() - m_buttonRect.height()); + + m_sliderRegion = QRegion(m_buttonRect).united(QRegion(m_topRect).united(QRegion(m_bottomRect))); + setMask(m_sliderRegion); + + resize(SLIDER_WIDTH, size.height() - PANEL_TOP_PADDING - PANEL_BOTTOM_PADDING); +} diff --git a/src/ui/panelsliderbar.h b/src/ui/panelsliderbar.h index fed9220..46e980a 100644 --- a/src/ui/panelsliderbar.h +++ b/src/ui/panelsliderbar.h @@ -1,8 +1,9 @@ - /* +/* Situare - A location system for Facebook Copyright (C) 2010 Ixonos Plc. Authors: Kaj Wallin - kaj.wallin@ixonos.com + Pekka Nissinen - pekka.nissinen@ixonos.com Situare is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -17,64 +18,93 @@ along with Situare; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - +*/ #ifndef PANELSLIDERBAR_H #define PANELSLIDERBAR_H +#include +#include +#include +#include #include + #include "panelcommon.h" /** -* @brief Generic class from drawing sliding bar attached to panels -* -* @author Kaj Wallin - kaj.wallin (at) ixonos.com -* @class PanelSliderBar panelsliderbar.h "ui/panelsliderbar.h" -*/ + * @brief Generic class for panel slider bars + * + * @author Kaj Wallin - kaj.wallin (at) ixonos.com + * @author Pekka Nissinen - pekka.nissinen@ixonos.com + * + * @class PanelSliderBar panelsliderbar.h "ui/panelsliderbar.h" + */ class PanelSliderBar : public QWidget { Q_OBJECT public: /** - * @brief Constructor - * - * @param parent Parent - * @param side Qstring for the sliderbar location. Accepts "LEFT" and "RIGHT" - */ + * @brief Constructor + * + * @param parent Parent + * @param side Qstring for the sliderbar location. Accepts "LEFT" and "RIGHT" + */ PanelSliderBar(QWidget *parent, Side side); /******************************************************************************* -* BASE CLASS INHERITED AND REIMPLEMENTED MEMBER FUNCTIONS -******************************************************************************/ + * BASE CLASS INHERITED AND REIMPLEMENTED MEMBER FUNCTIONS + ******************************************************************************/ protected: /** - * @brief Draws stylesheet used in this class. - * - * @param * QPaintEvent unused - */ + * @brief Draws the slider + * + * @param * QPaintEvent unused + */ void paintEvent(QPaintEvent *); /** - * @brief Mouse release event used to expand/collapse the panel - * - * @param * Event - * - * @sa clicked - */ + * @brief Mouse release event used to expand/collapse the panel + * + * @param * Event + * + * @sa clicked + */ void mouseReleaseEvent(QMouseEvent *); +/******************************************************************************* + * MEMBER FUNCTIONS AND SLOTS + ******************************************************************************/ +public slots: + /** + * @brief Slot to redraw the slider bar after window resize event + * + * @param size Size of the new window + */ + void resizeSliderBar(const QSize &size); - /******************************************************************************* - * SIGNALS - ******************************************************************************/ +/******************************************************************************* + * SIGNALS + ******************************************************************************/ signals: /** - * @brief Signal that is emitted the slider bar is clicked - * - * @sa mouseReleaseEvent - */ + * @brief Signal that is emitted the slider bar is clicked + * + * @sa mouseReleaseEvent + */ void clicked(); + +/******************************************************************************* + * DATA MEMBERS + ******************************************************************************/ +private: + QPixmap m_menuDropShadowTile; ///< Pixmap for menu drop shadow + QPixmap m_sliderButton; ///< Pixmap for panel sliding bar button + QPixmap m_sliderButtonArrow; ///< Pixmap for panel sliding bar button arrow + QPixmap m_sliderTile; ///< Pixmap for panel sliding bar + QRect m_bottomRect; ///< Rect for slider bar bottom + QRect m_buttonRect; ///< Rect for slider bar button + QRect m_topRect; ///< Rect for slider bar top + QRegion m_sliderRegion; ///< Region of the slider bar }; #endif // PANELSLIDERBAR_H diff --git a/src/ui/sidepanel.cpp b/src/ui/sidepanel.cpp index b6f0910..064c547 100644 --- a/src/ui/sidepanel.cpp +++ b/src/ui/sidepanel.cpp @@ -1,8 +1,9 @@ - /* +/* Situare - A location system for Facebook Copyright (C) 2010 Ixonos Plc. Authors: Kaj Wallin - kaj.wallin@ixonos.com + Pekka Nissinen - pekka.nissinen@ixonos.com Situare is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -17,51 +18,50 @@ along with Situare; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ +*/ +#include #include "sidepanel.h" -#include "panelsliderbar.h" + +#include "panelcommon.h" #include "panelsidebar.h" -#include +#include "panelsliderbar.h" +#include "sidepanelbase.h" SidePanel::SidePanel(QWidget *parent) : QWidget(parent), - m_isOpen(false) + m_isOpen(false), + currentType(SidePanel::None) { qDebug() << __PRETTY_FUNCTION__; - currentType = SidePanel::None; m_panelVBox = new QVBoxLayout(this); m_panelVBox->setMargin(0); m_panelVBox->setSpacing(0); - m_panelBase = new QWidget(this); + m_panelBase = new SidePanelBase(this); m_panelBase->setLayout(m_panelVBox); - QPalette pal = palette(); - pal.setColor(QPalette::Background, QColor(0, 0, 0, 128)); - m_panelBase->setPalette(pal); - m_panelBase->setAutoFillBackground(true); - m_panelStateMachine = new QStateMachine(this); m_panelStateClosed = new QState(m_panelStateMachine); m_panelStateOpened = new QState(m_panelStateMachine); m_panelStateMachine->setInitialState(m_panelStateClosed); - m_panelTransitionOpen = m_panelStateClosed->addTransition( - this, SIGNAL(toggleState()), m_panelStateOpened); + m_panelTransitionOpen = m_panelStateClosed->addTransition(this, SIGNAL(toggleState()), + m_panelStateOpened); m_panelTransitionOpen->addAnimation(new QPropertyAnimation(this, "pos", this)); - m_panelTransitionClose = m_panelStateOpened->addTransition( - this, SIGNAL(toggleState()), m_panelStateClosed); + m_panelTransitionClose = m_panelStateOpened->addTransition(this, SIGNAL(toggleState()), + m_panelStateClosed); m_panelTransitionClose->addAnimation(new QPropertyAnimation(this, "pos", this)); connect(m_panelStateClosed, SIGNAL(entered()), this, SLOT(stateChangedToClosed())); connect(m_panelStateOpened, SIGNAL(entered()), this, SLOT(stateChangedToOpen())); + hide(); } @@ -70,9 +70,7 @@ void SidePanel::openPanel() qDebug() << __PRETTY_FUNCTION__; if(!m_isOpen) - { emit toggleState(); - } } void SidePanel::closePanel() @@ -80,32 +78,42 @@ void SidePanel::closePanel() qDebug() << __PRETTY_FUNCTION__; if(m_isOpen) - { emit toggleState(); - } } -void SidePanel::screenResized(const QSize &size) +void SidePanel::resizePanel(const QSize &size) { qDebug() << __PRETTY_FUNCTION__; - if(currentType == SidePanel::UserPanel) - { - m_panelBase->resize(USERPANEL_WIDTH, SLIDINGBAR_HEIGHT + MARGIN_CORRECTION); - resize(USERPANEL_WIDTH + SLIDINGBAR_WIDTH,SLIDINGBAR_HEIGHT + MARGIN_CORRECTION); - } - else if(currentType == SidePanel::FriendPanel) - { - resize(FRIENDPANEL_WIDTH + SLIDINGBAR_WIDTH, size.height() + MARGIN_CORRECTION); - m_panelBase->resize(FRIENDPANEL_WIDTH, size.height() + MARGIN_CORRECTION); - m_panelStateClosed->assignProperty(this, "pos", QPoint( - size.width() - PANEL_PEEK_AMOUNT - SLIDINGBAR_WIDTH + MARGIN_CORRECTION, PANEL_TOP_Y)); - m_panelStateOpened->assignProperty(this, "pos", QPoint( - size.width() - FRIENDPANEL_WIDTH - SLIDINGBAR_WIDTH + MARGIN_CORRECTION, PANEL_TOP_Y)); - move(size.width() - PANEL_PEEK_AMOUNT - SLIDINGBAR_WIDTH + MARGIN_CORRECTION, PANEL_TOP_Y); - } - else - { + if(currentType == SidePanel::UserPanel) { + this->resize(USERPANEL_WIDTH + SLIDER_BAR_WIDTH + SLIDER_BUTTON_OFFSET, + size.height() - PANEL_TOP_PADDING - PANEL_BOTTOM_PADDING); + + m_panelBase->resize(USERPANEL_WIDTH, + size.height() - PANEL_TOP_PADDING - PANEL_BOTTOM_PADDING); + + m_panelSlidingBar->resizeSliderBar(size); + } else if(currentType == SidePanel::FriendPanel) { + this->resize(SLIDER_WIDTH + FRIENDPANEL_WIDTH, + size.height() - PANEL_TOP_PADDING - PANEL_BOTTOM_PADDING); + + if(!m_isOpen) + this->move(size.width() - SLIDER_BUTTON_OFFSET - PANEL_PEEK_AMOUNT, PANEL_TOP_PADDING); + else + this->move(size.width() - SLIDER_BUTTON_OFFSET - SLIDER_BAR_WIDTH - FRIENDPANEL_WIDTH, + PANEL_TOP_PADDING); + + m_panelBase->resize(FRIENDPANEL_WIDTH, + size.height() - PANEL_TOP_PADDING - PANEL_BOTTOM_PADDING); + + m_panelSlidingBar->resizeSliderBar(size); + + m_panelStateClosed->assignProperty(this, "pos", + QPoint(size.width() - SLIDER_BUTTON_OFFSET - PANEL_PEEK_AMOUNT, PANEL_TOP_PADDING)); + m_panelStateOpened->assignProperty(this, "pos", + QPoint(size.width() - SLIDER_BUTTON_OFFSET - SLIDER_BAR_WIDTH - FRIENDPANEL_WIDTH, + PANEL_TOP_PADDING)); + } else { qFatal("Illegal panel type in SidePanel::screenResized"); } } @@ -117,49 +125,51 @@ void SidePanel::setType(SidePanel::PanelType type) if(currentType == SidePanel::None) { if(type == SidePanel::UserPanel) { currentType = type; - m_panelBase->move(TOP_CORNER_X,PANEL_TOP_Y); - m_panelBase->resize(USERPANEL_WIDTH, SLIDINGBAR_HEIGHT + MARGIN_CORRECTION); + setObjectName("UserPanel"); + + this->resize(USERPANEL_WIDTH + SLIDER_BAR_WIDTH + SLIDER_BUTTON_OFFSET, + USERPANEL_HEIGHT); + this->move(USERPANEL_CLOSED_X, PANEL_TOP_PADDING); - PanelSliderBar *m_panelSlidingBar = new PanelSliderBar(this, LEFT); - m_panelSlidingBar->move(USERPANEL_WIDTH - SLIDINGBAR_WIDTH, PANEL_TOP_Y); + m_panelBase->resize(USERPANEL_WIDTH, SLIDER_HEIGHT); + + m_panelSlidingBar = new PanelSliderBar(this, LEFT); + m_panelSlidingBar->move(USERPANEL_WIDTH - SLIDER_BUTTON_OFFSET, 0); connect(m_panelSlidingBar, SIGNAL(clicked()), this, SIGNAL(toggleState())); - // set mask to allow clicking zoom button at their default position - setMask(QPixmap(":/res/images/userpanel_mask.png").mask()); - - m_panelStateClosed->assignProperty(this, "pos", QPoint( - USERPANEL_CLOSED_X, PANEL_TOP_Y)); - m_panelStateOpened->assignProperty(this, "pos", QPoint( - USERPANEL_OPENED_X, PANEL_TOP_Y)); - setObjectName("UserPanel"); - } - else if (type == SidePanel::FriendPanel) { + m_panelStateClosed->assignProperty(this, "pos", + QPoint(USERPANEL_CLOSED_X, PANEL_TOP_PADDING)); + m_panelStateOpened->assignProperty(this, "pos", + QPoint(USERPANEL_OPENED_X, PANEL_TOP_PADDING)); + } else if (type == SidePanel::FriendPanel) { currentType = type; - m_panelBase->move(TOP_CORNER_X + SLIDINGBAR_WIDTH,PANEL_TOP_Y); + setObjectName("FriendPanel"); + + this->resize(SLIDER_BUTTON_OFFSET + SLIDER_BAR_WIDTH + FRIENDPANEL_WIDTH, + FRIENDPANEL_HEIGHT); + this->move(FRIENDPANEL_CLOSED_X, PANEL_TOP_PADDING); + m_panelBase->resize(FRIENDPANEL_WIDTH, FRIENDPANEL_HEIGHT); + m_panelBase->move(SLIDER_BUTTON_OFFSET + SLIDER_BAR_WIDTH, 0); m_panelSlidingBar = new PanelSliderBar(this, RIGHT); - m_panelSlidingBar->move(TOP_CORNER_X, PANEL_TOP_Y); connect(m_panelSlidingBar, SIGNAL(clicked()), this, SIGNAL(toggleState())); - m_panelStateClosed->assignProperty(this, "pos", QPoint( - FRIENDPANEL_CLOSED_X, PANEL_TOP_Y)); - m_panelStateOpened->assignProperty(this, "pos", QPoint( - FRIENDPANEL_OPENED_X, PANEL_TOP_Y)); - setObjectName("FriendPanel"); - } - else { + m_panelStateClosed->assignProperty(this, "pos", + QPoint(FRIENDPANEL_CLOSED_X, PANEL_TOP_PADDING)); + m_panelStateOpened->assignProperty(this, "pos", + QPoint(FRIENDPANEL_OPENED_X, PANEL_TOP_PADDING)); + } else { qWarning() << "In" << __PRETTY_FUNCTION__ << ":" << type; qFatal("Illegal type set for SidePanel::setType"); } m_panelStateMachine->start(); show(); - } - else { + } else { qWarning() << "Illegally tried to set type multiple times at SidePanel::setType"; } } diff --git a/src/ui/sidepanel.h b/src/ui/sidepanel.h index e126d81..48646df 100644 --- a/src/ui/sidepanel.h +++ b/src/ui/sidepanel.h @@ -1,8 +1,9 @@ - /* +/* Situare - A location system for Facebook Copyright (C) 2010 Ixonos Plc. Authors: Kaj Wallin - kaj.wallin@ixonos.com + Pekka Nissinen - pekka.nissinen@ixonos.com Situare is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -17,85 +18,88 @@ along with Situare; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ +*/ #ifndef SIDEPANEL_H #define SIDEPANEL_H #include #include -#include "panelcommon.h" class PanelSliderBar; +class SidePanelBase; /** -* @brief Base class for sliding side panels -* -* @author Kaj Wallin - kaj.wallin (at) ixonos.com -* @class SidePanel sidepanel.h "ui/sidepanel.h" -*/ + * @brief Base class for sliding side panels + * + * @author Kaj Wallin - kaj.wallin (at) ixonos.com + * @author Pekka Nissinen - pekka.nissinen@ixonos.com + * + * @class SidePanel sidepanel.h "ui/sidepanel.h" + */ class SidePanel : public QWidget { Q_OBJECT public: /** - * @brief Constructor - - * @param parent - */ + * @brief Constructor + * + * @param parent + */ SidePanel(QWidget *parent = 0); /** - * @brief Enumerator for the panel type - * Defines values: UserPanel, FriendPanel, None - * - * @sa setType - */ + * @brief Enumerator for the panel type + * Defines values: UserPanel, FriendPanel, None + * + * @sa setType + */ enum PanelType {UserPanel, FriendPanel, None}; + /****************************************************************************** * MEMBER FUNCTIONS AND SLOTS ******************************************************************************/ public slots: /** - * @brief Public slot that will open the panel unless already open - */ + * @brief Public slot that will open the panel unless already open + */ void openPanel(); /** - * @brief Public slot that will close the panel unless already closed - */ + * @brief Public slot that will close the panel unless already closed + */ void closePanel(); /** - * @brief Slot to redraw the panel after window resize event - * - * @param size Size of the new screen - */ - void screenResized(const QSize &size); + * @brief Slot to redraw the panel after window resize event + * + * @param size Size of the new window + */ + void resizePanel(const QSize &size); /** - * @brief Type setter for the panel. Also sets panel visible - * - * Use to set panel type as UserPanel or FriendPanel. Panel type determines - * which side the panel will be rendered. UserPanel will always be rendered - * on the left side of the screen and FriendPanel on the right side. Type - * cannot be set twice. - * - * @param type Type of the panel, either UserPanel or FriendPanel - * @sa PanelType - */ + * @brief Type setter for the panel. Also sets panel visible + * + * Use to set panel type as UserPanel or FriendPanel. Panel type determines + * which side the panel will be rendered. UserPanel will always be rendered + * on the left side of the screen and FriendPanel on the right side. Type + * cannot be set twice. + * + * @param type Type of the panel, either UserPanel or FriendPanel + * @sa PanelType + */ void setType(SidePanel::PanelType type); - private slots: /** - * @brief Internal slot used to track statemachine state - */ + * @brief Internal slot used to track statemachine state + */ void stateChangedToClosed(); + /** - * @brief Internal slot used to track statemachine state - */ + * @brief Internal slot used to track statemachine state + */ void stateChangedToOpen(); /****************************************************************************** @@ -103,27 +107,27 @@ private slots: ******************************************************************************/ signals: /** - * @brief Signal that is sent to state machine when state must be changed - * - * @sa openPanel - * @sa closePanel - */ + * @brief Signal that is sent to state machine when state must be changed + * + * @sa openPanel + * @sa closePanel + */ void toggleState(); /** - * @brief Signal that is sent when panel is closed - * - * @sa openPanel - * @sa closePanel - */ + * @brief Signal that is sent when panel is closed + * + * @sa openPanel + * @sa closePanel + */ void panelClosed(); /** - * @brief Signal that is sent when panel is opened - * - * @sa openPanel - * @sa closePanel - */ + * @brief Signal that is sent when panel is opened + * + * @sa openPanel + * @sa closePanel + */ void panelOpened(); /******************************************************************************* @@ -134,15 +138,16 @@ protected: private: bool m_isOpen; ///< Boolean used to track the current state of the statemachine - QSignalTransition *m_panelTransitionClose; ///< Transition signal for closing the panel - QSignalTransition *m_panelTransitionOpen; ///< Transition signal for opening the panel - QState *m_panelStateClosed; ///< State of the closed panel - QState *m_panelStateOpened; ///< State of the opened panel - QStateMachine *m_panelStateMachine; ///< State machine for sliding the panel - QWidget *m_panelBase; ///< Widget for panel base - - PanelType currentType; ///< Holder for the type of this panel - PanelSliderBar *m_panelSlidingBar; ///< Widget for sidebar tab item + + QSignalTransition *m_panelTransitionClose; ///< Transition signal for closing the panel + QSignalTransition *m_panelTransitionOpen; ///< Transition signal for opening the panel + QState *m_panelStateClosed; ///< State of the closed panel + QState *m_panelStateOpened; ///< State of the opened panel + QStateMachine *m_panelStateMachine; ///< State machine for sliding the panel + + SidePanelBase *m_panelBase; ///< Widget for panel base + PanelType currentType; ///< Holder for the type of this panel + PanelSliderBar *m_panelSlidingBar; ///< Widget for panel sliding bar item }; #endif // SIDEPANEL_H diff --git a/src/ui/userinfopanel.cpp b/src/ui/userinfopanel.cpp index 2d6dc4d..3351d49 100644 --- a/src/ui/userinfopanel.cpp +++ b/src/ui/userinfopanel.cpp @@ -20,7 +20,9 @@ */ #include "userinfopanel.h" + #include "userinfo.h" +#include "panelcommon.h" UserInfoPanel::UserInfoPanel(QWidget *parent) : SidePanel(parent) @@ -47,7 +49,7 @@ UserInfoPanel::UserInfoPanel(QWidget *parent) userInfoScroll->widget()->setAutoFillBackground(false); m_panelVBox->addWidget(userInfoScroll); - m_panelVBox->setContentsMargins(SLIDINGBAR_WIDTH+1, 0, SIDEBAR_WIDTH, 0); + m_panelVBox->setContentsMargins(USERPANEL_MARGIN_LEFT, 0, USERPANEL_MARGIN_RIGHT, 0); connect(m_userInfo, SIGNAL(findUser(QPointF)), this, SIGNAL(findUser(QPointF))); diff --git a/src/ui/userinfopanel.h b/src/ui/userinfopanel.h index 11efde9..ebebdf7 100644 --- a/src/ui/userinfopanel.h +++ b/src/ui/userinfopanel.h @@ -19,11 +19,11 @@ USA. */ - #ifndef USERPANEL_H #define USERPANEL_H #include + #include "../user/user.h" #include "sidepanel.h" diff --git a/src/ui/zoombuttonpanel.h b/src/ui/zoombuttonpanel.h index 5d649ac..c001e67 100644 --- a/src/ui/zoombuttonpanel.h +++ b/src/ui/zoombuttonpanel.h @@ -23,9 +23,10 @@ #ifndef ZOOMBUTTONPANEL_H #define ZOOMBUTTONPANEL_H -#include -#include #include +#include +#include +#include #include "zoombutton.h" diff --git a/tests/ui/sidepanel/sidepanel.pro b/tests/ui/sidepanel/sidepanel.pro index 18c6afd..181fcbb 100644 --- a/tests/ui/sidepanel/sidepanel.pro +++ b/tests/ui/sidepanel/sidepanel.pro @@ -6,10 +6,11 @@ INCLUDEPATH += "../../../src" SOURCES += \ testsidepanel.cpp \ ../../../src/ui/sidepanel.cpp \ + ../../../src/ui/sidepanelbase.cpp \ ../../../src/ui/panelsliderbar.cpp - HEADERS += \ ../../../src/ui/sidepanel.h \ + ../../../src/ui/sidepanelbase.h \ ../../../src/ui/panelsliderbar.h \ ../../../src/ui/panelcommon.h \ ../../../src/map/mapcommon.h diff --git a/tests/ui/sidepanel/testsidepanel.cpp b/tests/ui/sidepanel/testsidepanel.cpp index 29f8cf0..b59a795 100644 --- a/tests/ui/sidepanel/testsidepanel.cpp +++ b/tests/ui/sidepanel/testsidepanel.cpp @@ -1,4 +1,4 @@ - /* +/* Situare - A location system for Facebook Copyright (C) 2010 Ixonos Plc. Authors: @@ -17,9 +17,7 @@ along with Situare; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - - +*/ #include #include -- 1.7.9.5