[Libreoffice-commits] .: default_images/svx svx/inc svx/source

Caolán McNamara caolan at kemper.freedesktop.org
Wed Sep 21 08:03:45 PDT 2011


 default_images/svx/res/doc_modified_feedback.png |binary
 default_images/svx/res/doc_modified_no_14.png    |binary
 default_images/svx/res/doc_modified_yes_14.png   |binary
 svx/inc/svx/dialogs.hrc                          |    9 +-
 svx/inc/svx/modctrl.hxx                          |   10 ++
 svx/source/stbctrls/modctrl.cxx                  |   88 +++++++++++++++++------
 svx/source/stbctrls/stbctrls.src                 |    8 ++
 7 files changed, 89 insertions(+), 26 deletions(-)

New commits:
commit bcbabc4b3a1c394cfab2602be14e2575a5b1ef42
Author: Dmitry Ashkadov <dmitry.ashkadov at gmail.com>
Date:   Wed Sep 21 15:58:43 2011 +0100

    fdo#39430: Implement improved Saving Information Icon in the Status Bar

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 0000000..1fa1f74
Binary files /dev/null and b/default_images/svx/res/doc_modified_feedback.png differ
diff --git a/default_images/svx/res/doc_modified_no_14.png b/default_images/svx/res/doc_modified_no_14.png
index cc9d6f5..2fbd22e 100644
Binary files a/default_images/svx/res/doc_modified_no_14.png and b/default_images/svx/res/doc_modified_no_14.png differ
diff --git a/default_images/svx/res/doc_modified_yes_14.png b/default_images/svx/res/doc_modified_yes_14.png
index e78de23..8a111d6 100644
Binary files a/default_images/svx/res/doc_modified_yes_14.png and b/default_images/svx/res/doc_modified_yes_14.png differ
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 34abea0..b3c5293 100644
--- a/svx/inc/svx/modctrl.hxx
+++ b/svx/inc/svx/modctrl.hxx
@@ -30,11 +30,15 @@
 
 // include ---------------------------------------------------------------
 
+#include <tools/link.hxx>
 #include <sfx2/stbitem.hxx>
 #include "svx/svxdllapi.h"
 
 #include <boost/shared_ptr.hpp>
 
+// Forward declarations
+class Timer;
+
 // class SvxModifyControl ------------------------------------------------
 
 class SVX_DLLPUBLIC SvxModifyControl : public SfxStatusBarControl
@@ -49,6 +53,12 @@ public:
 
     SvxModifyControl( sal_uInt16 nSlotId, sal_uInt16 nId, 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 1e94cd9..4d56d80 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 4e50e1f..9acfa83 100644
--- a/svx/source/stbctrls/stbctrls.src
+++ b/svx/source/stbctrls/stbctrls.src
@@ -301,3 +301,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;
+};


More information about the Libreoffice-commits mailing list