[Libreoffice-commits] core.git: 2 commits - include/svx include/vcl svx/source

Caolán McNamara caolanm at redhat.com
Thu Jan 16 12:40:13 PST 2014


 include/svx/sidebar/PanelLayout.hxx           |    4 ++
 include/vcl/builder.hxx                       |    5 ++-
 svx/source/sidebar/PanelLayout.cxx            |   21 ++++++++++++
 svx/source/sidebar/text/TextPropertyPanel.cxx |   43 +-------------------------
 4 files changed, 32 insertions(+), 41 deletions(-)

New commits:
commit a0fdc73984d0eb89eacbcd858db938ad5cf1157d
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Jan 16 20:36:25 2014 +0000

    Related: fdo#73414 use frame::XDispatch::dispatch directly
    
    This hopefully is a model which we can build in further
    to remove the rest of the direct SID... stuff and the fragile
    mapping from the known .uno: commands to SIDS to dispatch, and
    instead just dispatch the .uno: command directly
    
    Change-Id: Iec0f92123fa4c2dae15e0ac716d5ef687e67da79

diff --git a/svx/source/sidebar/text/TextPropertyPanel.cxx b/svx/source/sidebar/text/TextPropertyPanel.cxx
index 8f29d2f..2ed39fc 100644
--- a/svx/source/sidebar/text/TextPropertyPanel.cxx
+++ b/svx/source/sidebar/text/TextPropertyPanel.cxx
@@ -81,9 +81,6 @@ namespace svx { namespace sidebar {
 
 #undef HAS_IA2
 
-#define FN_GROW_FONT_SIZE       (FN_FORMAT + 3 )
-#define FN_SHRINK_FONT_SIZE     (FN_FORMAT + 4 )
-
 PopupControl* TextPropertyPanel::CreateCharacterSpacingControl (PopupContainer* pParent)
 {
     return new TextCharacterSpacingControl(pParent, *this, mpBindings);
@@ -553,44 +550,10 @@ IMPL_LINK(TextPropertyPanel, ToolboxIncDecSelectHdl, ToolBox*, pToolBox)
     const sal_uInt16 nId = pToolBox->GetCurItemId();
     const OUString aCommand(pToolBox->GetItemCommand(nId));
 
-    // font size +/- enhancement in sd
-    switch (maContext.GetCombinedContext_DI())
-    {
-        case CombinedEnumContext(Application_DrawImpress, Context_DrawText):
-        case CombinedEnumContext(Application_DrawImpress, Context_Text):
-        case CombinedEnumContext(Application_DrawImpress, Context_Table):
-        case CombinedEnumContext(Application_DrawImpress, Context_OutlineText):
-        case CombinedEnumContext(Application_DrawImpress, Context_Draw):
-        case CombinedEnumContext(Application_DrawImpress, Context_TextObject):
-        case CombinedEnumContext(Application_DrawImpress, Context_Graphic):
-            if(aCommand == UNO_GROW)
-            {
-                EndTracking();
-                SfxVoidItem aItem(SID_GROW_FONT_SIZE);
-                mpBindings->GetDispatcher()->Execute( SID_GROW_FONT_SIZE, SFX_CALLMODE_RECORD, &aItem, 0L );
-            }
-            else if(aCommand == UNO_SHRINK)
-            {
-                EndTracking();
-                SfxVoidItem aItem(SID_SHRINK_FONT_SIZE);
-                mpBindings->GetDispatcher()->Execute( SID_SHRINK_FONT_SIZE, SFX_CALLMODE_RECORD, &aItem, 0L );
-            }
-            break;
+    EndTracking();
+
+    dispatch(aCommand);
 
-        default:
-            if(aCommand == UNO_GROW)
-            {
-                EndTracking();
-                SfxVoidItem aItem(FN_GROW_FONT_SIZE);
-                mpBindings->GetDispatcher()->Execute( FN_GROW_FONT_SIZE, SFX_CALLMODE_RECORD, &aItem, 0L );
-            }
-            else if(aCommand == UNO_SHRINK)
-            {
-                EndTracking();
-                SfxVoidItem aItem(FN_SHRINK_FONT_SIZE);
-                mpBindings->GetDispatcher()->Execute( FN_SHRINK_FONT_SIZE, SFX_CALLMODE_RECORD, &aItem, 0L );
-            }
-    }
     UpdateItem(SID_ATTR_CHAR_FONTHEIGHT);
 
     return 0;
commit 36e590ee00affc89b26055c748b862cf79f56247
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Jan 16 20:33:54 2014 +0000

    make use that these VclBuilders have an XFrame to expose its dispatch
    
    the sidebar widget-layout enabled panels could use frame::XDispatch::dispatch
    to send their commands directly rather than mapping back to SIDS and Executing
    those, which would allow removing piles of weird-ass stuff
    
    Change-Id: Ibbff56d4fb96820d3bdbf4b1cb582d25337fe48b

diff --git a/include/svx/sidebar/PanelLayout.hxx b/include/svx/sidebar/PanelLayout.hxx
index 5275ced..fe55f11 100644
--- a/include/svx/sidebar/PanelLayout.hxx
+++ b/include/svx/sidebar/PanelLayout.hxx
@@ -16,6 +16,7 @@
 #include <vcl/ctrl.hxx>
 #include <vcl/timer.hxx>
 
+#include <com/sun/star/beans/PropertyValue.hpp>
 #include <com/sun/star/frame/XFrame.hpp>
 
 /// This class is the base for the Widget Layout-based sidebar panels.
@@ -36,6 +37,9 @@ public:
     virtual Size GetOptimalSize() const;
     virtual void setPosSizePixel(long nX, long nY, long nWidth, long nHeight, sal_uInt16 nFlags = WINDOW_POSSIZE_ALL);
     virtual void queue_resize();
+
+    void dispatch(const OUString& rCommand, const css::uno::Sequence<css::beans::PropertyValue>& rArgs =
+        css::uno::Sequence<css::beans::PropertyValue>());
 };
 
 #endif
diff --git a/include/vcl/builder.hxx b/include/vcl/builder.hxx
index 8cd25a0..2719aba 100644
--- a/include/vcl/builder.hxx
+++ b/include/vcl/builder.hxx
@@ -242,7 +242,7 @@ private:
     };
 
     /// XFrame to be able to extract labels and other properties of the UNO commands (like of .uno:Bold).
-    com::sun::star::uno::Reference<com::sun::star::frame::XFrame> m_xFrame;
+    css::uno::Reference<css::frame::XFrame> m_xFrame;
 
 public:
     VclBuilder(::Window *pParent, OUString sUIRootDir, OUString sUIFile,
@@ -308,6 +308,8 @@ public:
     //Helpers to retrofit all the existing code to the builder
     static void reorderWithinParent(std::vector< ::Window*>& rChilds, bool bIsButtonBox);
     static void reorderWithinParent(::Window &rWindow, sal_uInt16 nNewPosition);
+
+    css::uno::Reference<css::frame::XFrame> getFrame() { return m_xFrame; }
 private:
     ::Window *insertObject(::Window *pParent,
         const OString &rClass, const OString &rID,
@@ -390,6 +392,7 @@ public:
     virtual ~VclBuilderContainer();
     static OUString getUIRootDir();
     bool hasBuilder() const { return m_pUIBuilder != NULL; }
+    css::uno::Reference<css::frame::XFrame> getFrame() { return m_pUIBuilder->getFrame(); }
     template <typename T> T* get(T*& ret, OString sID)
     {
         return m_pUIBuilder->get<T>(ret, sID);
diff --git a/svx/source/sidebar/PanelLayout.cxx b/svx/source/sidebar/PanelLayout.cxx
index e31c75b..72bdfc2 100644
--- a/svx/source/sidebar/PanelLayout.cxx
+++ b/svx/source/sidebar/PanelLayout.cxx
@@ -7,6 +7,10 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include <com/sun/star/frame/XDispatchProvider.hpp>
+#include <com/sun/star/util/URL.hpp>
+#include <com/sun/star/util/URLTransformer.hpp>
+#include <comphelper/processfactory.hxx>
 #include <svx/sidebar/PanelLayout.hxx>
 #include <vcl/layout.hxx>
 
@@ -87,4 +91,21 @@ void PanelLayout::setPosSizePixel(long nX, long nY, long nWidth, long nHeight, s
         VclContainer::setLayoutAllocation(*pChild, Point(0, 0), Size(nWidth, nHeight));
 }
 
+void PanelLayout::dispatch(const OUString& rCommand, const css::uno::Sequence<css::beans::PropertyValue>& rArgs)
+{
+    assert(getFrame().is());
+
+    css::util::URL aURL;
+    aURL.Complete = rCommand;
+
+    css::uno::Reference<css::util::XURLTransformer > xURLTransformer(
+        css::util::URLTransformer::create(comphelper::getProcessComponentContext()));
+
+    xURLTransformer->parseStrict(aURL);
+
+    css::uno::Reference<css::frame::XDispatchProvider> xProvider(getFrame(), css::uno::UNO_QUERY_THROW);
+    css::uno::Reference<css::frame::XDispatch > xDispatch(xProvider->queryDispatch(aURL, OUString(), 0));
+    xDispatch->dispatch(aURL, rArgs);
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list