[PATCH 1/2] #39430: Saving Information Icon in the Status Bar was improved.

Dmitry Ashkadov dmitry.ashkadov at gmail.com
Mon Sep 12 07:57:42 PDT 2011


---
 default_images/svx/res/doc_modified_feedback.png |  Bin 0 -> 462 bytes
 default_images/svx/res/doc_modified_no_14.png    |  Bin 429 -> 369 bytes
 default_images/svx/res/doc_modified_yes_14.png   |  Bin 506 -> 462 bytes
 svx/inc/svx/dialogs.hrc                          |    9 +-
 svx/inc/svx/modctrl.hxx                          |    9 ++
 svx/source/stbctrls/modctrl.cxx                  |   88 ++++++++++++++++------
 svx/source/stbctrls/stbctrls.src                 |   10 ++-
 7 files changed, 89 insertions(+), 27 deletions(-)
 create mode 100644 default_images/svx/res/doc_modified_feedback.png

diff --git a/default_images/svx/res/doc_modified_feedback.png b/default_images/svx/res/doc_modified_feedback.png
new file mode 100644
index 0000000000000000000000000000000000000000..1fa1f7421d48a207aa2a90957b8b8a49ed87296d
GIT binary patch
literal 462
zcmV;<0WtoGP)<h;3K|Lk000e1NJLTq000gE000XJ1^@s6Pldc<00004b3#c}2nYxW
zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^
zaAhuUa%Y?FJQ at H10ZU0lK~yM_jgm1-LQxdQe_g#8`T~aroeZK71BaHTrXUnTFz_4H
z<qgr0Lj>*7ClKz|2WShV;6>0H1O|mo1rAb6b|3Y6=C#Q(Eb2F%!}<R>!#QL9ejfm>
zbpXWp;?7#T>bmZw*7^p>0&hyGae(MhFs79HY})PiRJ~q5)mkrEYuAJjbzovJ7yLph
zm7-WICZ&{~5aLw`u?#f-6bEvtR7y%IJ!@^Kl*;}~e13l-NW4%kmy=RTPis9tB8FiI
zfbI9VHVps{?rZEfcX1qtLZOiCcDsioqVM|v?A`8Cy;|e!@tBi`BQ~bD>2x}z(`k$`
zQzN1=27t}!9cE%Vwl3CjGgW4t9IaOCTLy;CVT_^I>k$c~?9bIWpY&KrEYfH+2!h~u
z(f55KkqGg49DwD_3IO?hp5e?-8{aCG%JAp>L at +2m0ACS-(yir=wEzGB07*qoM6N<$
Ef<T<VS^xk5

literal 0
HcmV?d00001

diff --git a/default_images/svx/res/doc_modified_no_14.png b/default_images/svx/res/doc_modified_no_14.png
index cc9d6f58155cb66b140aa41415a0f04d16795e11..2fbd22e956f94a45157d8b6cb9e3c32ec1178d8f 100644
GIT binary patch
delta 335
zcmV-V0kHn91Mvco7a9u)1^@s6Pldc<00004b3#c}2nYxWd<bNSkw6%K8FWQhbW?9;
zba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ at H10PaadK~yM_jnOe~gD at Bc;Af0b1`i%G
zxHs|z=oGb^k;oM~_6S|@*iKzLaU=$cDzK1cjNK(vGz7J8`Ypdt)-RJ7BLJYPswYAS
z#U+H0uW6dz%d%{=)@J~J#~9;W6vZ<Dq^lxTN-ak;O~dQDe$-mOdhb6dr6)p2w%jM!
zi4X!(%0rfA4{4fuO6ePb&p+Wc4k64+sh5AjYpk`t+d${sF6Nv=N_lY3-EW{VW*4??
z3n2uIF?<7uVc3OT*KImK-_iFyLI at bg5!PB*Yk$p4X9JBfNRk99j4?3AZoa%;XAS2(
h&*@EZNsQ4i^EaJmaj6owVRQfh002ovPDHLkV1hIFh{ON@

delta 395
zcmV;60d)TH0<8m(7by-11^@s6A4o0H00001b5ch_0Itp)=>Px#24YJ`L;(K){{a7>
zy{D6rF&KXbbV*G`2ipVz6aoiMY<pw?0013nR9JLFZ*6U5Zgc<u0000(a%Ew3Wn>_C
zX>@2HM at dakWG-a~00035Nkl<ZD9^ppy-tQO6b9h8rGcoit_-~$5(qPKPzM&m>J2z}
z0q(%~#lcJ9ei$4GL-`FMJx+YVAZlV_r<0ubNl$-&fd5`>E%H2nA|k%&^|o!F;y8ZK
zvg{GS4P(qCN%9N;VoebdPm<)Us;asw%Q7yC;>0<BTbAXXh%VPYKN>|Tg)j^qA;cZ$
z+!$kCiAetl0l;-#_`ZKZM6nQprD^)|E4bny2pr3 at 9*Uw+J2=ntA(m3Y^E_u9$J-s$
zS|3-!x~`#=Lff|2JJ|RAA#9pvmpMO2*L7Hy1;a34nkG!s^r>DmJE*mW5CT$4NGZSE
pd3zkO8P!Bl^zAJ(#>}7p>IWPwbD3qp&!GSS002ovPDHLkV1jr$p~(OM

diff --git a/default_images/svx/res/doc_modified_yes_14.png b/default_images/svx/res/doc_modified_yes_14.png
index e78de2384c0201224f9223bf753baadd1524f567..8a111d6532d08d489b3f3ff33be7b259a16a1f77 100644
GIT binary patch
delta 429
zcmV;e0aE_ at 1I`1G7a9u)1^@s6Pldc<00004b3#c}2nYxWd<bNSkw6%K8FWQhbW?9;
zba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ at H10ZU0lK~yM_ebT*313?sq;n&$LO2n*%
zKiMv6L=jOW7a$0dNGc(B5Qc!gMeOVZ+cbk0U}GT&sg(5obxIl|HbzT#z|F>)wFrrU
z7{BTq<~*F@%tRc=04Sw at LST~LyjW}ZDwWEEQtAm<20Bv8DS*V#;G~pt(6rm_Oub&e
zR!VJKYs*52Ixy3J7mP_dou*JI%(||7C4~4ALhJy||DpNr;rY1%w$?^c%H{F!^8-^|
zgYO7aT_c?o1FV$V9Dz|3^@`L2Vxx#XJ3wp{A+><#dF1o?*>1Ogdp-iS*2GT@%>E*A
z>z252O5D1|>@O1BT;lsaK at em{U=RdMtZd=b-XWVqY?UFK!>PUV<}D3o`bi8!V+`TP
zEAHI|9Nl9M*LlwD5{l$_sI|s%9H#v&96y4SfRiSx&hM$U)_-p7luD)HpYvD3e(?hy
X%Y*}$*7flK00008NkvXXu0mjfZfL|U

delta 473
zcmV;~0Ve*=1NsAy7by-11^@s6A4o0H00001b5ch_0Itp)=>Px#24YJ`L;(K){{a7>
zy{D6rF&KXbbV*G`2ipVz6ay<|uO`L-0013nR9JLFZ*6U5Zgc<u0000(a%Ew3Wn>_C
zX>@2HM at dakWG-a~0003|Nkl<ZD9^o;yGjF55Qe`!*<IA)fbkNM1hMl0gouKTMA>u}
zc>-ZKZzFb|m#`E}Cz!^{Cs5QhUXtdlaXr~RYh!<+7%zq3R5Q%~%?vXG|836DQA!N}
z_e1X9ah#nn3@?;YH$Vl*q9}6tBy__t90i?DXTH^Hohqfag%G>e+7n=Am>1uTQZARN
z*Xz>v{o_2(Giz-f====kDF6$lS%M%adY*SGgm9uLs(cGt^FX(~Mz6h2_pHj?bb%lU
zr0;+GEu~a-3^c|7(7!r>+#!9w1>w=Z+($}DtyYu9n4{4`hK|-6(`(beKE!b)*aZ7>
zNB>4)Sf#wOi`IH^tYaL<_{9w-D|-lk2E+uyD>Ajz<S|(uX~saUHEEiXmzrc*M()ls
zNK-DKwn&m>r1^4G*L9J_W#s1hTTRP?^L{1jFTpsDvqqy)_~p~mKmY10LfD1_=6;g~
P00000NkvXXu0mjfE?3WO

diff --git a/svx/inc/svx/dialogs.hrc b/svx/inc/svx/dialogs.hrc
index b10c4b3..d8e79ea 100755
--- a/svx/inc/svx/dialogs.hrc
+++ b/svx/inc/svx/dialogs.hrc
@@ -1156,9 +1156,10 @@
 
 #define SVX_OOO_BUILD_START             (RID_SVX_START + 1200)
 
-#define RID_SVXBMP_DOC_MODIFIED_YES     (SVX_OOO_BUILD_START + 1)
-#define RID_SVXBMP_DOC_MODIFIED_NO      (SVX_OOO_BUILD_START + 2)
-#define RID_SVXSTR_DOC_MODIFIED_YES     (SVX_OOO_BUILD_START + 3)
-#define RID_SVXSTR_DOC_MODIFIED_NO      (SVX_OOO_BUILD_START + 4)
+#define RID_SVXBMP_DOC_MODIFIED_YES      (SVX_OOO_BUILD_START + 1)
+#define RID_SVXBMP_DOC_MODIFIED_NO       (SVX_OOO_BUILD_START + 2)
+#define RID_SVXBMP_DOC_MODIFIED_FEEDBACK (SVX_OOO_BUILD_START + 3)
+#define RID_SVXSTR_DOC_MODIFIED_YES      (SVX_OOO_BUILD_START + 4)
+#define RID_SVXSTR_DOC_MODIFIED_NO       (SVX_OOO_BUILD_START + 5)
 
 #endif
diff --git a/svx/inc/svx/modctrl.hxx b/svx/inc/svx/modctrl.hxx
index ef2859e..bbfec1f 100644
--- a/svx/inc/svx/modctrl.hxx
+++ b/svx/inc/svx/modctrl.hxx
@@ -35,6 +35,9 @@
 
 #include <boost/shared_ptr.hpp>
 
+// Forward declarations
+class Timer;
+
 // class SvxModifyControl ------------------------------------------------
 
 class SVX_DLLPUBLIC SvxModifyControl : public SfxStatusBarControl
@@ -51,6 +54,12 @@ public:
 
     static  sal_uIntPtr GetDefItemWidth(const StatusBar& rStb);
 
+private: // Links
+    DECL_LINK( OnTimer, Timer * );
+
+private: // Functions
+    void _repaint();
+
 private:
     struct ImplData;
     ::boost::shared_ptr<ImplData> mpImpl;
diff --git a/svx/source/stbctrls/modctrl.cxx b/svx/source/stbctrls/modctrl.cxx
index 8239aa8..6ab2689 100644
--- a/svx/source/stbctrls/modctrl.cxx
+++ b/svx/source/stbctrls/modctrl.cxx
@@ -33,6 +33,7 @@
 
 #include <vcl/status.hxx>
 #include <vcl/image.hxx>
+#include <vcl/timer.hxx>
 #include <svl/eitem.hxx>
 #include <sfx2/app.hxx>
 
@@ -48,20 +49,37 @@ using ::rtl::OUString;
 
 SFX_IMPL_STATUSBAR_CONTROL(SvxModifyControl, SfxBoolItem);
 
+
+namespace
+{
+const unsigned _FEEDBACK_TIMEOUT = 3000;
+}
+
+
 // class SvxModifyControl ------------------------------------------------
 
 struct SvxModifyControl::ImplData
 {
-    Image maModifiedButton;
-    Image maNonModifiedButton;
+    enum ModificationState
+    {
+        MODIFICATION_STATE_NO = 0,
+        MODIFICATION_STATE_YES,
+        MODIFICATION_STATE_FEEDBACK,
+        MODIFICATION_STATE_SIZE
+    };
+
+    Timer maTimer;
+    Image maImages[MODIFICATION_STATE_SIZE];
 
-    bool mbModified;
+    ModificationState mnModState;
 
-    ImplData() :
-        maModifiedButton( SVX_RES(RID_SVXBMP_DOC_MODIFIED_YES) ),
-        maNonModifiedButton( SVX_RES(RID_SVXBMP_DOC_MODIFIED_NO) ),
-        mbModified(false)
+    ImplData():
+        mnModState(MODIFICATION_STATE_NO)
     {
+        maImages[MODIFICATION_STATE_NO]       = Image(SVX_RES(RID_SVXBMP_DOC_MODIFIED_NO));
+        maImages[MODIFICATION_STATE_YES]      = Image(SVX_RES(RID_SVXBMP_DOC_MODIFIED_YES));
+        maImages[MODIFICATION_STATE_FEEDBACK] = Image(SVX_RES(RID_SVXBMP_DOC_MODIFIED_FEEDBACK));
+        maTimer.SetTimeout(_FEEDBACK_TIMEOUT);
     }
 };
 
@@ -72,6 +90,7 @@ SvxModifyControl::SvxModifyControl( sal_uInt16 _nSlotId,
     SfxStatusBarControl( _nSlotId, _nId, rStb ),
     mpImpl(new ImplData)
 {
+    mpImpl->maTimer.SetTimeoutHdl( LINK(this, SvxModifyControl, OnTimer) );
 }
 
 // -----------------------------------------------------------------------
@@ -84,13 +103,43 @@ void SvxModifyControl::StateChanged( sal_uInt16, SfxItemState eState,
 
     DBG_ASSERT( pState->ISA( SfxBoolItem ), "invalid item type" );
     SfxBoolItem* pItem = (SfxBoolItem*)pState;
-    mpImpl->mbModified = pItem->GetValue();
+    mpImpl->maTimer.Stop();
 
-    if ( GetStatusBar().AreItemsVisible() )
-        GetStatusBar().SetItemData( GetId(), 0 );    // force repaint
+    bool modified = pItem->GetValue();
+    bool start = ( !modified && mpImpl->mnModState == ImplData::MODIFICATION_STATE_YES);  // should timer be started and feedback image displayed ?
 
-    int nResId = mpImpl->mbModified ? RID_SVXSTR_DOC_MODIFIED_YES : RID_SVXSTR_DOC_MODIFIED_NO;
+    mpImpl->mnModState = (start ? ImplData::MODIFICATION_STATE_FEEDBACK : (modified ? ImplData::MODIFICATION_STATE_YES : ImplData::MODIFICATION_STATE_NO));
+
+    _repaint();
+
+    int nResId = modified ? RID_SVXSTR_DOC_MODIFIED_YES : RID_SVXSTR_DOC_MODIFIED_NO;
     GetStatusBar().SetQuickHelpText(GetId(), SVX_RESSTR(nResId));
+
+    if ( start )
+        mpImpl->maTimer.Start();
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SvxModifyControl, OnTimer, Timer *, pTimer )
+{
+    if (pTimer == 0)
+        return 0;
+
+    pTimer->Stop();
+    mpImpl->mnModState = ImplData::MODIFICATION_STATE_NO;
+
+    _repaint();
+
+    return 0;
+}
+
+// -----------------------------------------------------------------------
+
+void SvxModifyControl::_repaint()
+{
+    if ( GetStatusBar().AreItemsVisible() )
+        GetStatusBar().SetItemData( GetId(), 0 );    // force repaint
 }
 
 // -----------------------------------------------------------------------
@@ -119,26 +168,21 @@ Point centerImage(const Rectangle& rBoundingRect, const Image& rImg)
 }
 
 }
+
+
 void SvxModifyControl::Paint( const UserDrawEvent& rUsrEvt )
 {
     OutputDevice*       pDev =  rUsrEvt.GetDevice();
     Rectangle           aRect = rUsrEvt.GetRect();
 
-    if (mpImpl->mbModified)
-    {
-        Point aPt = centerImage(aRect, mpImpl->maModifiedButton);
-        pDev->DrawImage(aPt, mpImpl->maModifiedButton);
-    }
-    else
-    {
-        Point aPt = centerImage(aRect, mpImpl->maNonModifiedButton);
-        pDev->DrawImage(aPt, mpImpl->maNonModifiedButton);
-    }
+    ImplData::ModificationState state = mpImpl->mnModState;
+    Point aPt = centerImage(aRect, mpImpl->maImages[state]);
+    pDev->DrawImage(aPt, mpImpl->maImages[state]);
 }
 
 void SvxModifyControl::DoubleClick()
 {
-    if (!mpImpl->mbModified)
+    if (mpImpl->mnModState != ImplData::MODIFICATION_STATE_YES)
         // document not modified.  nothing to do here.
         return;
 
diff --git a/svx/source/stbctrls/stbctrls.src b/svx/source/stbctrls/stbctrls.src
index cd129d1..b000149 100644
--- a/svx/source/stbctrls/stbctrls.src
+++ b/svx/source/stbctrls/stbctrls.src
@@ -1,4 +1,4 @@
-/*************************************************************************
+/*************************************************************************
  *
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
@@ -302,3 +302,11 @@ Image RID_SVXBMP_DOC_MODIFIED_NO
     };
     MaskColor = STD_MASKCOLOR;
 };
+Image RID_SVXBMP_DOC_MODIFIED_FEEDBACK
+{
+    ImageBitmap = Bitmap
+    {
+        File = "doc_modified_feedback.png" ;
+    };
+    MaskColor = STD_MASKCOLOR;
+};
-- 
1.7.6.1


--------------030604060609090704050305
Content-Type: text/x-patch;
 name="0002-Removed-unused-some-code-related-to-39430.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="0002-Removed-unused-some-code-related-to-39430.patch"



More information about the LibreOffice mailing list