[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-4.3' - 2 commits - include/svx include/vcl svx/source vcl/source

Samuel Mehrbrodt s.mehrbrodt at gmail.com
Tue Feb 3 05:49:08 PST 2015


 include/svx/dialogs.hrc          |    3 +
 include/vcl/menubtn.hxx          |    3 +
 svx/source/tbxctrls/tbcontrl.cxx |   75 ++++++++++++++++++++++++++++++++++++++-
 svx/source/tbxctrls/tbcontrl.src |   19 +++++++++
 vcl/source/control/menubtn.cxx   |   10 ++---
 5 files changed, 102 insertions(+), 8 deletions(-)

New commits:
commit 5c596ffbd81b495800d59663cc99e3ce65d56356
Author: Samuel Mehrbrodt <s.mehrbrodt at gmail.com>
Date:   Tue Sep 30 20:37:12 2014 +0200

    fdo#62081 Improve split menu on style dropdown
    
    * Remove "Apply style"
    * Add "Update Style Based on Selection"
    * A11y:
      * Context menu key: Open submenu
      * Return key: Apply style
    
    Change-Id: Ib2960baa1412a05ea00b0e214d1af0a3d119e852
    (cherry picked from commit d59e33500a250824e713afacef2ea295576caba6)

diff --git a/include/svx/dialogs.hrc b/include/svx/dialogs.hrc
index b917f16..f04a0bf 100644
--- a/include/svx/dialogs.hrc
+++ b/include/svx/dialogs.hrc
@@ -185,7 +185,7 @@
 // for Toolbox-Control style
 #define RID_SVXTBX_STYLE                    (RID_SVX_START + 120)
 #define RID_SVX_STYLE_MENU                  (RID_SVX_START + 121)
-#define RID_SVX_APPLY_STYLE                 (RID_SVX_START + 122)
+#define RID_SVX_UPDATE_STYLE                (RID_SVX_START + 122)
 #define RID_SVX_MODIFY_STYLE                (RID_SVX_START + 123)
 
 #define RID_SVXDLG_COMPRESSGRAPHICS         (RID_SVX_START + 142)
diff --git a/include/vcl/menubtn.hxx b/include/vcl/menubtn.hxx
index f62c3cb..f917edf 100644
--- a/include/vcl/menubtn.hxx
+++ b/include/vcl/menubtn.hxx
@@ -45,7 +45,6 @@ private:
     Link            maSelectHdl;
 
     SAL_DLLPRIVATE void    ImplInitMenuButtonData();
-    SAL_DLLPRIVATE void    ImplExecuteMenu();
     DECL_DLLPRIVATE_LINK(  ImplMenuTimeoutHdl, void* );
 
     // Copy assignment is forbidden and not implemented.
@@ -68,6 +67,8 @@ public:
     virtual void    Activate() SAL_OVERRIDE;
     virtual void    Select();
 
+    void            ExecuteMenu();
+
     void            SetMenuMode( sal_uInt16 nMode );
     sal_uInt16      GetMenuMode() const { return mnMenuMode; }
 
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index 746b49a..64de29b 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -385,24 +385,24 @@ void SvxStyleBox_Impl::ReleaseFocus()
 
 IMPL_LINK( SvxStyleBox_Impl, MenuSelectHdl, Menu*, pMenu)
 {
+    ReleaseFocus();
+    OUString sEntry = OUString( (GetEntry(GetSelectEntryPos())) );
+    Sequence< PropertyValue > aArgs( 2 );
+    aArgs[0].Name   = "Param";
+    aArgs[0].Value  = makeAny( sEntry );
+    aArgs[1].Name   = "Family";
+    aArgs[1].Value  = makeAny( sal_Int16( eStyleFamily ));
+
     sal_uInt16 nMenuId = pMenu->GetCurItemId();
     switch(nMenuId) {
-        case RID_SVX_APPLY_STYLE:
+        case RID_SVX_UPDATE_STYLE:
         {
-            nCurSel = GetSelectEntryPos();
-            SetText(GetEntry(nCurSel));
-            Select();
+            SfxToolBoxControl::Dispatch( m_xDispatchProvider,
+                OUString( ".uno:StyleUpdateByExample" ), aArgs );
             break;
         }
         case RID_SVX_MODIFY_STYLE:
         {
-            OUString sEntry = OUString( (GetEntry(GetSelectEntryPos())) );
-            ReleaseFocus();
-            Sequence< PropertyValue > aArgs( 2 );
-            aArgs[0].Name   = "Param";
-            aArgs[0].Value  = makeAny( sEntry );
-            aArgs[1].Name   = "Family";
-            aArgs[1].Value  = makeAny( sal_Int16( eStyleFamily ));
             SfxToolBoxControl::Dispatch( m_xDispatchProvider,
                 OUString( ".uno:EditStyle" ), aArgs );
             break;
@@ -535,22 +535,18 @@ bool SvxStyleBox_Impl::Notify( NotifyEvent& rNEvt )
 
         switch ( nCode )
         {
-            case KEY_RETURN:
+            case KEY_CONTEXTMENU:
             {
                 if(IsInDropDown())
                 {
                     sal_uInt16 nItem = GetSelectEntryPos() - 1;
                     if(nItem < MAX_STYLES_ENTRIES)
-                        m_pButtons[nItem]->KeyInput(*rNEvt.GetKeyEvent());
-                    nHandled = true;
-                }
-                else
-                {
+                        m_pButtons[nItem]->ExecuteMenu();
                     nHandled = true;
-                    Select();
                 }
                 break;
             }
+            case KEY_RETURN:
             case KEY_TAB:
             {
                 if ( KEY_TAB == nCode )
diff --git a/svx/source/tbxctrls/tbcontrl.src b/svx/source/tbxctrls/tbcontrl.src
index 59728c6..df42dca 100644
--- a/svx/source/tbxctrls/tbcontrl.src
+++ b/svx/source/tbxctrls/tbcontrl.src
@@ -79,7 +79,7 @@ String RID_SVXSTR_LINECOLOR
 ComboBox RID_SVXTBX_STYLE
 {
     HelpId = HID_STYLE_LISTBOX ;
-    Size = MAP_APPFONT ( 50 , 86 ) ;
+    Size = MAP_APPFONT ( 60 , 86 ) ;
     DropDown = TRUE ;
     Sort = TRUE ;
     AutoHScroll = TRUE ;
@@ -94,13 +94,13 @@ Menu RID_SVX_STYLE_MENU
     {
         MenuItem
         {
-            Identifier = RID_SVX_APPLY_STYLE ;
-            Text [ en-US ] = "Apply style" ;
+            Identifier = RID_SVX_UPDATE_STYLE ;
+            Text [ en-US ] = "Update Style Based on Selection" ;
         };
         MenuItem
         {
             Identifier = RID_SVX_MODIFY_STYLE ;
-            Text [ en-US ] = "Modify style" ;
+            Text [ en-US ] = "Edit Style" ;
         };
     };
 };
diff --git a/vcl/source/control/menubtn.cxx b/vcl/source/control/menubtn.cxx
index 7f263b6..b3cd7a2 100644
--- a/vcl/source/control/menubtn.cxx
+++ b/vcl/source/control/menubtn.cxx
@@ -46,7 +46,7 @@ void MenuButton::ImplInit( Window* pParent, WinBits nStyle )
     EnableRTL( Application::GetSettings().GetLayoutRTL() );
 }
 
-void MenuButton::ImplExecuteMenu()
+void MenuButton::ExecuteMenu()
 {
     Activate();
 
@@ -120,7 +120,7 @@ IMPL_LINK_NOARG(MenuButton, ImplMenuTimeoutHdl)
     {
         if ( !(GetStyle() & WB_NOPOINTERFOCUS) )
             GrabFocus();
-        ImplExecuteMenu();
+        ExecuteMenu();
     }
 
     return 0;
@@ -154,7 +154,7 @@ void MenuButton::MouseButtonDown( const MouseEvent& rMEvt )
         {
             if ( !(GetStyle() & WB_NOPOINTERFOCUS) )
                 GrabFocus();
-            ImplExecuteMenu();
+            ExecuteMenu();
         }
     }
 }
@@ -164,11 +164,11 @@ void MenuButton::KeyInput( const KeyEvent& rKEvt )
     KeyCode aKeyCode = rKEvt.GetKeyCode();
     sal_uInt16 nCode = aKeyCode.GetCode();
     if ( (nCode == KEY_DOWN) && aKeyCode.IsMod2() )
-        ImplExecuteMenu();
+        ExecuteMenu();
     else if ( !(mnMenuMode & MENUBUTTON_MENUMODE_TIMED) &&
               !aKeyCode.GetModifier() &&
               ((nCode == KEY_RETURN) || (nCode == KEY_SPACE)) )
-        ImplExecuteMenu();
+        ExecuteMenu();
     else
         PushButton::KeyInput( rKEvt );
 }
commit 352ece87fc5f85ad95f35cc4f33eec29d2dfa59b
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Sun Sep 21 19:50:09 2014 +0200

    fdo#62081: Add split menus to items in the style dropdown
    
    I added buttons to the Style dropdown. Each button opens a menu.
    So far I added "apply style" and "edit style" options.
    
    Reviewed-on: https://gerrit.libreoffice.org/11581
    Reviewed-by: Samuel Mehrbrodt <s.mehrbrodt at gmail.com>
    Tested-by: Samuel Mehrbrodt <s.mehrbrodt at gmail.com>
    (cherry picked from commit b4de0bd548399593ad2627afde443a569e7b8ea1)
    
    Conflicts:
    	svx/source/tbxctrls/tbcontrl.cxx
    
    Change-Id: I3b5c153a0674d06541d403bb0f34ec73418bb778

diff --git a/include/svx/dialogs.hrc b/include/svx/dialogs.hrc
index 2756267..b917f16 100644
--- a/include/svx/dialogs.hrc
+++ b/include/svx/dialogs.hrc
@@ -184,6 +184,9 @@
 
 // for Toolbox-Control style
 #define RID_SVXTBX_STYLE                    (RID_SVX_START + 120)
+#define RID_SVX_STYLE_MENU                  (RID_SVX_START + 121)
+#define RID_SVX_APPLY_STYLE                 (RID_SVX_START + 122)
+#define RID_SVX_MODIFY_STYLE                (RID_SVX_START + 123)
 
 #define RID_SVXDLG_COMPRESSGRAPHICS         (RID_SVX_START + 142)
 
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index 638c179..746b49a 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -25,6 +25,7 @@
 #include <svl/itemset.hxx>
 #include <vcl/toolbox.hxx>
 #include <vcl/bmpacc.hxx>
+#include <vcl/menubtn.hxx>
 #include <svtools/valueset.hxx>
 #include <svtools/ctrlbox.hxx>
 #include <svl/style.hxx>
@@ -166,8 +167,12 @@ private:
     OUString                        aMoreKey;
     OUString                        sDefaultStyle;
     bool                            bInSpecialMode;
+    MenuButton*                     m_pButtons[MAX_STYLES_ENTRIES];
+    PopupMenu                       m_aMenu;
 
     void            ReleaseFocus();
+
+    DECL_LINK( MenuSelectHdl, Menu * );
 };
 
 
@@ -348,7 +353,11 @@ SvxStyleBox_Impl::SvxStyleBox_Impl(Window* pParent,
     , aClearFormatKey( rClearFormatKey )
     , aMoreKey( rMoreKey )
     , bInSpecialMode( bInSpec )
+    , m_aMenu ( SVX_RES( RID_SVX_STYLE_MENU ) )
 {
+    m_aMenu.SetSelectHdl( LINK( this, SvxStyleBox_Impl, MenuSelectHdl ) );
+    for(int i = 0; i < MAX_STYLES_ENTRIES; i++)
+        m_pButtons[i] = NULL;
     aLogicalSize = PixelToLogic( GetSizePixel(), MAP_APPFONT );
     EnableAutocomplete( true );
     EnableUserDraw( true );
@@ -357,6 +366,8 @@ SvxStyleBox_Impl::SvxStyleBox_Impl(Window* pParent,
 
 SvxStyleBox_Impl::~SvxStyleBox_Impl()
 {
+    for(int i = 0; i < MAX_STYLES_ENTRIES; i++)
+        delete m_pButtons[i];
 }
 
 
@@ -372,7 +383,33 @@ void SvxStyleBox_Impl::ReleaseFocus()
         m_xFrame->getContainerWindow()->setFocus();
 }
 
-
+IMPL_LINK( SvxStyleBox_Impl, MenuSelectHdl, Menu*, pMenu)
+{
+    sal_uInt16 nMenuId = pMenu->GetCurItemId();
+    switch(nMenuId) {
+        case RID_SVX_APPLY_STYLE:
+        {
+            nCurSel = GetSelectEntryPos();
+            SetText(GetEntry(nCurSel));
+            Select();
+            break;
+        }
+        case RID_SVX_MODIFY_STYLE:
+        {
+            OUString sEntry = OUString( (GetEntry(GetSelectEntryPos())) );
+            ReleaseFocus();
+            Sequence< PropertyValue > aArgs( 2 );
+            aArgs[0].Name   = "Param";
+            aArgs[0].Value  = makeAny( sEntry );
+            aArgs[1].Name   = "Family";
+            aArgs[1].Value  = makeAny( sal_Int16( eStyleFamily ));
+            SfxToolBoxControl::Dispatch( m_xDispatchProvider,
+                OUString( ".uno:EditStyle" ), aArgs );
+            break;
+        }
+    }
+    return 0;
+}
 
 void SvxStyleBox_Impl::Select()
 {
@@ -499,6 +536,21 @@ bool SvxStyleBox_Impl::Notify( NotifyEvent& rNEvt )
         switch ( nCode )
         {
             case KEY_RETURN:
+            {
+                if(IsInDropDown())
+                {
+                    sal_uInt16 nItem = GetSelectEntryPos() - 1;
+                    if(nItem < MAX_STYLES_ENTRIES)
+                        m_pButtons[nItem]->KeyInput(*rNEvt.GetKeyEvent());
+                    nHandled = true;
+                }
+                else
+                {
+                    nHandled = true;
+                    Select();
+                }
+                break;
+            }
             case KEY_TAB:
             {
                 if ( KEY_TAB == nCode )
@@ -556,6 +608,10 @@ void SvxStyleBox_Impl::UserDraw( const UserDrawEvent& rUDEvt )
 
     if ( nItem == 0 || nItem == GetEntryCount() - 1 )
     {
+        Rectangle aRect(rUDEvt.GetRect());
+        unsigned int nId = (aRect.getY() / aRect.GetSize().Height());
+        if(m_pButtons[nId])
+            m_pButtons[nId]->Hide();
         // draw the non-style entries, ie. "Clear Formatting" or "More..."
         DrawEntry( rUDEvt, true, true );
     }
@@ -667,6 +723,27 @@ void SvxStyleBox_Impl::UserDraw( const UserDrawEvent& rUDEvt )
                         pDevice->SetFillColor( aColor );
                         pDevice->DrawRect( rUDEvt.GetRect() );
                     }
+
+                    Rectangle aRect(rUDEvt.GetRect());
+                    unsigned int nId = (aRect.getY() / aRect.GetSize().Height());
+                    if(nId < MAX_STYLES_ENTRIES && m_pButtons[nId])
+                        m_pButtons[nId]->Hide();
+                }
+                else
+                {
+                    Rectangle aRect(rUDEvt.GetRect());
+                    unsigned int nId = (aRect.getY() / aRect.GetSize().Height());
+                    if(nId < MAX_STYLES_ENTRIES)
+                    {
+                        if(m_pButtons[nId] == NULL)
+                        {
+                            m_pButtons[nId] = new MenuButton((Window*)pDevice);
+                            m_pButtons[nId]->SetSizePixel(Size(20, aRect.GetSize().Height()));
+                            m_pButtons[nId]->SetPopupMenu(&m_aMenu);
+                        }
+                        m_pButtons[nId]->SetPosPixel(Point(aRect.GetWidth() - 20, aRect.getY()));
+                        m_pButtons[nId]->Show();
+                    }
                 }
 
                 // IMG_TXT_DISTANCE in ilstbox.hxx is 6, then 1 is added as
diff --git a/svx/source/tbxctrls/tbcontrl.src b/svx/source/tbxctrls/tbcontrl.src
index 793eb76..59728c6 100644
--- a/svx/source/tbxctrls/tbcontrl.src
+++ b/svx/source/tbxctrls/tbcontrl.src
@@ -88,6 +88,23 @@ ComboBox RID_SVXTBX_STYLE
     Hide = TRUE ;
 };
 
+Menu RID_SVX_STYLE_MENU
+{
+    ItemList =
+    {
+        MenuItem
+        {
+            Identifier = RID_SVX_APPLY_STYLE ;
+            Text [ en-US ] = "Apply style" ;
+        };
+        MenuItem
+        {
+            Identifier = RID_SVX_MODIFY_STYLE ;
+            Text [ en-US ] = "Modify style" ;
+        };
+    };
+};
+
 String RID_SVXSTR_EXTRAS_CHARBACKGROUND
 {
     Text [ en-US ] = "Highlighting" ;


More information about the Libreoffice-commits mailing list