summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSzymon Kłos <eszkadev@gmail.com>2016-08-16 09:40:27 +0200
committerSamuel Mehrbrodt <s.mehrbrodt@gmail.com>2016-08-17 07:20:16 +0000
commitce59d3be31c144279a8ab857a2f1fc71bafab343 (patch)
tree69b2a0a04de37fb45e264ea8db586e002d804520
parent9a3457b1be0f78e21b572f660ce170a6f09c56e3 (diff)
GSoC notebookbar: BigToolBox
+ New container: sfxlo-BigToolBox + Writer: Paste button with dropdown menu Change-Id: I8fa9ff2cbf594078cc2347bef790b8647ce4e6ea Reviewed-on: https://gerrit.libreoffice.org/28156 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Samuel Mehrbrodt <s.mehrbrodt@gmail.com>
-rw-r--r--extras/source/glade/libreoffice-catalog.xml.in3
-rw-r--r--include/sfx2/sidebar/SidebarToolBox.hxx2
-rw-r--r--include/vcl/toolbox.hxx6
-rw-r--r--sfx2/Library_sfx.mk1
-rw-r--r--sfx2/source/notebookbar/BigToolBox.cxx53
-rw-r--r--sfx2/source/notebookbar/BigToolBox.hxx48
-rw-r--r--sw/uiconfig/swriter/ui/notebookbar.ui53
-rw-r--r--vcl/source/window/toolbox.cxx81
8 files changed, 202 insertions, 45 deletions
diff --git a/extras/source/glade/libreoffice-catalog.xml.in b/extras/source/glade/libreoffice-catalog.xml.in
index 244e0db65d31..ebb4d471d718 100644
--- a/extras/source/glade/libreoffice-catalog.xml.in
+++ b/extras/source/glade/libreoffice-catalog.xml.in
@@ -831,5 +831,8 @@
<glade-widget-class title="Box which can move own content to the popup" name="sfxlo-DropdownBox"
generic-name="DropdownBox" parent="GtkBox"
icon-name="widget-gtk-box"/>
+ <glade-widget-class title="Big ToolBox" name="sfxlo-BigToolBox"
+ generic-name="Big ToolBox" parent="GtkToolbar"
+ icon-name="widget-gtk-toolbar"/>
</glade-widget-classes>
</glade-catalog>
diff --git a/include/sfx2/sidebar/SidebarToolBox.hxx b/include/sfx2/sidebar/SidebarToolBox.hxx
index 131364d51f66..17a8e48e1202 100644
--- a/include/sfx2/sidebar/SidebarToolBox.hxx
+++ b/include/sfx2/sidebar/SidebarToolBox.hxx
@@ -59,7 +59,7 @@ public:
css::uno::Reference<css::frame::XToolbarController> GetFirstController();
-private:
+protected:
typedef std::map<sal_uInt16, css::uno::Reference<css::frame::XToolbarController>> ControllerContainer;
ControllerContainer maControllers;
bool mbAreHandlersRegistered;
diff --git a/include/vcl/toolbox.hxx b/include/vcl/toolbox.hxx
index 06df8594c644..96a25803fe7a 100644
--- a/include/vcl/toolbox.hxx
+++ b/include/vcl/toolbox.hxx
@@ -68,6 +68,9 @@ enum ToolBoxButtonSize { TOOLBOX_BUTTONSIZE_DONTCARE, TOOLBOX_BUTTONSIZE_SMALL,
// toolbox is prevented from centering the items
enum class ToolBoxLayoutMode { Normal, LockVert };
+// Position of the text when icon and text are painted
+enum ToolBoxTextPosition { Right, Bottom };
+
struct ImplToolSize
{
long mnWidth;
@@ -146,6 +149,7 @@ private:
PointerStyle meLastStyle;
WinBits mnWinStyle;
ToolBoxLayoutMode meLayoutMode;
+ ToolBoxTextPosition meTextPosition;
Link<ToolBox *, void> maClickHdl;
Link<ToolBox *, void> maDoubleClickHdl;
Link<ToolBox *, void> maActivateHdl;
@@ -511,6 +515,8 @@ public:
void SetToolbarLayoutMode( ToolBoxLayoutMode eLayout );
void statusChanged(const css::frame::FeatureStateEvent& rEvent);
+
+ void SetToolBoxTextPosition( ToolBoxTextPosition ePosition );
};
inline void ToolBox::CheckItem( sal_uInt16 nItemId, bool bCheck )
diff --git a/sfx2/Library_sfx.mk b/sfx2/Library_sfx.mk
index 460697532fad..02956b1bb23e 100644
--- a/sfx2/Library_sfx.mk
+++ b/sfx2/Library_sfx.mk
@@ -240,6 +240,7 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\
sfx2/source/doc/saveastemplatedlg \
sfx2/source/explorer/nochaos \
sfx2/source/inet/inettbc \
+ sfx2/source/notebookbar/BigToolBox \
sfx2/source/notebookbar/DropdownBox \
sfx2/source/notebookbar/NotebookBarPopupMenu \
sfx2/source/notebookbar/NotebookbarToolBox \
diff --git a/sfx2/source/notebookbar/BigToolBox.cxx b/sfx2/source/notebookbar/BigToolBox.cxx
new file mode 100644
index 000000000000..8848cba41f52
--- /dev/null
+++ b/sfx2/source/notebookbar/BigToolBox.cxx
@@ -0,0 +1,53 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "BigToolBox.hxx"
+#include <sfx2/sidebar/ControllerFactory.hxx>
+#include <sfx2/sidebar/Theme.hxx>
+#include <sfx2/sidebar/Tools.hxx>
+#include <sfx2/viewfrm.hxx>
+
+#include <vcl/builderfactory.hxx>
+#include <vcl/commandinfoprovider.hxx>
+#include <vcl/gradient.hxx>
+#include <vcl/settings.hxx>
+#include <vcl/svapp.hxx>
+#include <toolkit/helper/vclunohelper.hxx>
+#include <svtools/miscopt.hxx>
+#include <com/sun/star/frame/XSubToolbarController.hpp>
+#include <framework/addonsoptions.hxx>
+
+namespace sfx2 { namespace notebookbar {
+
+BigToolBox::BigToolBox(vcl::Window* pParent)
+ : SidebarToolBox(pParent)
+{
+ SvtMiscOptions aMiscOptions;
+ aMiscOptions.RemoveListenerLink(LINK(this, SidebarToolBox, ChangedIconSizeHandler));
+
+ SetToolboxButtonSize(TOOLBOX_BUTTONSIZE_LARGE);
+ SetButtonType(ButtonType::SYMBOLTEXT);
+ SetToolBoxTextPosition(ToolBoxTextPosition::Bottom);
+}
+
+VCL_BUILDER_FACTORY(BigToolBox)
+
+} } // end of namespace sfx2::notebookbar
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/notebookbar/BigToolBox.hxx b/sfx2/source/notebookbar/BigToolBox.hxx
new file mode 100644
index 000000000000..4e319437c7cf
--- /dev/null
+++ b/sfx2/source/notebookbar/BigToolBox.hxx
@@ -0,0 +1,48 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SFX2_SOURCE_NOTEBOOKBAR_BIGTOOLBOX_HXX
+#define INCLUDED_SFX2_SOURCE_NOTEBOOKBAR_BIGTOOLBOX_HXX
+
+#include <sfx2/sidebar/SidebarToolBox.hxx>
+#include <sfx2/dllapi.h>
+#include <vcl/toolbox.hxx>
+#include <com/sun/star/frame/XDispatch.hpp>
+#include <com/sun/star/frame/XFrame.hpp>
+#include <com/sun/star/frame/XToolbarController.hpp>
+#include <com/sun/star/util/URL.hpp>
+#include <map>
+
+
+namespace sfx2 { namespace notebookbar {
+
+/** BigToolBox
+*/
+
+class SFX2_DLLPUBLIC BigToolBox : public sfx2::sidebar::SidebarToolBox
+{
+public:
+ BigToolBox(vcl::Window* pParent);
+};
+
+
+} } // end of namespace sfx2::notebookbar
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/uiconfig/swriter/ui/notebookbar.ui b/sw/uiconfig/swriter/ui/notebookbar.ui
index c5d531b484f0..72ba1ea1bbc6 100644
--- a/sw/uiconfig/swriter/ui/notebookbar.ui
+++ b/sw/uiconfig/swriter/ui/notebookbar.ui
@@ -199,11 +199,6 @@
<property name="can_focus">False</property>
<property name="pixbuf">cmd/lc_zoomoptimal.png</property>
</object>
- <object class="GtkImage" id="image1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="pixbuf">cmd/lc_paste.png</property>
- </object>
<object class="GtkImage" id="inserttableimg">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -421,15 +416,25 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
- <object class="vcllo-SmallButton" id="button5">
+ <object class="sfxlo-BigToolBox" id="pastebox">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="action_name">.uno:Paste</property>
- <property name="image">image1</property>
- <property name="relief">none</property>
- <property name="image_position">top</property>
- <property name="always_show_image">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">center</property>
+ <property name="show_arrow">False</property>
+ <child>
+ <object class="GtkMenuToolButton" id="Paste">
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="is_important">True</property>
+ <property name="action_name">.uno:Paste</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
@@ -441,8 +446,8 @@
<object class="GtkBox" id="box6">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="orientation">vertical</property>
<property name="valign">center</property>
+ <property name="orientation">vertical</property>
<child>
<object class="sfxlo-NotebookbarToolBox" id="cutbox">
<property name="visible">True</property>
@@ -666,11 +671,11 @@
</child>
<child>
<object class="GtkSeparator" id="separator30">
+ <property name="height_request">20</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="height_request">20</property>
<property name="valign">center</property>
+ <property name="orientation">vertical</property>
</object>
<packing>
<property name="expand">False</property>
@@ -720,11 +725,11 @@
</child>
<child>
<object class="GtkSeparator" id="separator32">
+ <property name="height_request">20</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="height_request">20</property>
<property name="valign">center</property>
+ <property name="orientation">vertical</property>
</object>
<packing>
<property name="expand">False</property>
@@ -735,11 +740,11 @@
</child>
<child>
<object class="GtkSeparator" id="separator31">
+ <property name="height_request">20</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="height_request">20</property>
<property name="valign">center</property>
+ <property name="orientation">vertical</property>
</object>
<packing>
<property name="expand">False</property>
@@ -814,8 +819,8 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Font</property>
- <property name="orientation">vertical</property>
<property name="valign">center</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkBox" id="box77">
<property name="visible">True</property>
@@ -945,8 +950,8 @@
<object class="GtkBox" id="box19">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="orientation">vertical</property>
<property name="valign">center</property>
+ <property name="orientation">vertical</property>
<child>
<object class="sfxlo-NotebookbarToolBox" id="numberbullet">
<property name="visible">True</property>
@@ -1113,8 +1118,8 @@
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="column_spacing">6</property>
<property name="valign">center</property>
+ <property name="column_spacing">6</property>
<child>
<object class="sfxlo-NotebookbarToolBox" id="verticalalignment1">
<property name="visible">True</property>
@@ -1348,8 +1353,8 @@
<object class="GtkBox" id="box32">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="orientation">vertical</property>
<property name="valign">center</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkBox" id="box66">
<property name="visible">True</property>
diff --git a/vcl/source/window/toolbox.cxx b/vcl/source/window/toolbox.cxx
index 7e6601766b7a..f203f4e5f5f4 100644
--- a/vcl/source/window/toolbox.cxx
+++ b/vcl/source/window/toolbox.cxx
@@ -1383,6 +1383,7 @@ void ToolBox::ImplInitToolBoxData()
meLastStyle = PointerStyle::Arrow;
mnWinStyle = 0;
meLayoutMode = ToolBoxLayoutMode::Normal;
+ meTextPosition = ToolBoxTextPosition::Right;
mnLastFocusItemId = 0;
mnKeyModifier = 0;
mnActivateCount = 0;
@@ -1854,14 +1855,28 @@ bool ToolBox::ImplCalcItem()
it->maItemSize.Width() = bText ? GetCtrlTextWidth( it->maText )+TB_TEXTOFFSET : 0;
it->maItemSize.Height() = bText ? GetTextHeight() : 0;
- // leave space between image and text
- if( bText )
- it->maItemSize.Width() += TB_IMAGETEXTOFFSET;
-
- // image and text side by side
- it->maItemSize.Width() += it->maImage.GetSizePixel().Width();
- if ( it->maImage.GetSizePixel().Height() > it->maItemSize.Height() )
- it->maItemSize.Height() = it->maImage.GetSizePixel().Height();
+ if ( meTextPosition == ToolBoxTextPosition::Right )
+ {
+ // leave space between image and text
+ if( bText )
+ it->maItemSize.Width() += TB_IMAGETEXTOFFSET;
+
+ // image and text side by side
+ it->maItemSize.Width() += it->maImage.GetSizePixel().Width();
+ if ( it->maImage.GetSizePixel().Height() > it->maItemSize.Height() )
+ it->maItemSize.Height() = it->maImage.GetSizePixel().Height();
+ }
+ else
+ {
+ // leave space between image and text
+ if( bText )
+ it->maItemSize.Height() += TB_IMAGETEXTOFFSET;
+
+ // text below image
+ it->maItemSize.Height() += it->maImage.GetSizePixel().Height();
+ if ( it->maImage.GetSizePixel().Width() > it->maItemSize.Width() )
+ it->maItemSize.Width() = it->maImage.GetSizePixel().Width();
+ }
it->mbVisibleText = bText;
}
@@ -1886,8 +1901,16 @@ bool ToolBox::ImplCalcItem()
// add in drop down arrow
if( it->mnBits & ToolBoxItemBits::DROPDOWN )
{
- it->maItemSize.Width() += nDropDownArrowWidth;
- it->mnDropDownArrowWidth = nDropDownArrowWidth;
+ if ( meTextPosition == ToolBoxTextPosition::Right )
+ {
+ it->maItemSize.Width() += nDropDownArrowWidth;
+ it->mnDropDownArrowWidth = nDropDownArrowWidth;
+ }
+ else
+ {
+ it->maItemSize.Height() += nDropDownArrowWidth;
+ it->mnDropDownArrowWidth = nDropDownArrowWidth;
+ }
}
// text items will be rotated in vertical mode
@@ -1956,7 +1979,8 @@ bool ToolBox::ImplCalcItem()
ImplAddButtonBorder( nMaxWidth, nMaxHeight, mpData->mbNativeButtons );
}
- if( !ImplIsFloatingMode() && GetToolboxButtonSize() != TOOLBOX_BUTTONSIZE_DONTCARE )
+ if( !ImplIsFloatingMode() && GetToolboxButtonSize() != TOOLBOX_BUTTONSIZE_DONTCARE
+ && ( meTextPosition == ToolBoxTextPosition::Right ) )
{
// make sure all vertical toolbars have the same width and horizontal have the same height
// this depends on the used button sizes
@@ -3164,7 +3188,8 @@ void ToolBox::ImplDrawItem(vcl::RenderContext& rRenderContext, sal_uInt16 nPos,
// draw the image
nImageOffX = nOffX;
nImageOffY = nOffY;
- if ( (pItem->mnBits & (ToolBoxItemBits::LEFT|ToolBoxItemBits::DROPDOWN)) || bText )
+ if ( ( (pItem->mnBits & (ToolBoxItemBits::LEFT|ToolBoxItemBits::DROPDOWN)) || bText )
+ && ( meTextPosition == ToolBoxTextPosition::Right ) )
{
// left align also to leave space for drop down arrow
// and when drawing text+image
@@ -3175,7 +3200,8 @@ void ToolBox::ImplDrawItem(vcl::RenderContext& rRenderContext, sal_uInt16 nPos,
else
{
nImageOffX += (nBtnWidth-aImageSize.Width())/2;
- nImageOffY += (nBtnHeight-aImageSize.Height())/2;
+ if ( meTextPosition == ToolBoxTextPosition::Right )
+ nImageOffY += (nBtnHeight-aImageSize.Height())/2;
}
if ( nHighlight != 0 || (pItem->meState == TRISTATE_TRUE) )
{
@@ -3223,12 +3249,21 @@ void ToolBox::ImplDrawItem(vcl::RenderContext& rRenderContext, sal_uInt16 nPos,
}
else
{
- // center vertically
- nTextOffY += (nBtnHeight-aTxtSize.Height())/2;
+ if ( meTextPosition == ToolBoxTextPosition::Right )
+ {
+ // center vertically
+ nTextOffY += (nBtnHeight-aTxtSize.Height())/2;
- // add in image offset
- if( bImage )
- nTextOffX = nImageOffX + aImageSize.Width() + TB_IMAGETEXTOFFSET;
+ // add in image offset
+ if( bImage )
+ nTextOffX = nImageOffX + aImageSize.Width() + TB_IMAGETEXTOFFSET;
+ }
+ else
+ {
+ long nArrowHeight = ( pItem->mnBits & ToolBoxItemBits::DROPDOWN )
+ ? TB_DROPDOWNARROWWIDTH : 0;
+ nTextOffY += nBtnHeight - aTxtSize.Height() - nArrowHeight;
+ }
}
// draw selection only if not already drawn during image output (see above)
@@ -3253,7 +3288,7 @@ void ToolBox::ImplDrawItem(vcl::RenderContext& rRenderContext, sal_uInt16 nPos,
// paint optional drop down arrow
if ( pItem->mnBits & ToolBoxItemBits::DROPDOWN )
{
- Rectangle aDropDownRect( pItem->GetDropDownRect( mbHorz ) );
+ Rectangle aDropDownRect( pItem->GetDropDownRect( mbHorz && ( meTextPosition == ToolBoxTextPosition::Right ) ) );
bool bSetColor = true;
if ( !pItem->mbEnabled || !IsEnabled() )
{
@@ -3887,7 +3922,8 @@ void ToolBox::MouseButtonDown( const MouseEvent& rMEvt )
// was dropdown arrow pressed
if( (it->mnBits & ToolBoxItemBits::DROPDOWN) )
{
- if( ( (it->mnBits & ToolBoxItemBits::DROPDOWNONLY) == ToolBoxItemBits::DROPDOWNONLY) || it->GetDropDownRect( mbHorz ).IsInside( aMousePos ))
+ if( ( (it->mnBits & ToolBoxItemBits::DROPDOWNONLY) == ToolBoxItemBits::DROPDOWNONLY)
+ || it->GetDropDownRect( mbHorz && ( meTextPosition == ToolBoxTextPosition::Right ) ).IsInside( aMousePos ))
{
// dropdownonly always triggers the dropdown handler, over the whole button area
@@ -5658,4 +5694,9 @@ void ToolBox::SetToolbarLayoutMode( ToolBoxLayoutMode eLayout )
meLayoutMode = eLayout;
}
+void ToolBox::SetToolBoxTextPosition( ToolBoxTextPosition ePosition )
+{
+ meTextPosition = ePosition;
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */