[Libreoffice-commits] core.git: 3 commits - fpicker/source include/vcl sfx2/source vcl/source
Caolán McNamara
caolanm at redhat.com
Fri Oct 28 11:59:09 UTC 2016
fpicker/source/office/RemoteFilesDialog.cxx | 4 +++-
fpicker/source/office/iodlgimp.cxx | 4 ++--
include/vcl/button.hxx | 3 ++-
include/vcl/menubtn.hxx | 12 ++++++++----
sfx2/source/dialog/backingwindow.cxx | 6 ++++--
vcl/source/control/button.cxx | 8 +++++---
vcl/source/control/menubtn.cxx | 8 ++++----
7 files changed, 28 insertions(+), 17 deletions(-)
New commits:
commit 624ff6633c40ab678573a7a38fa3c83c41e0af17
Author: Caolán McNamara <caolanm at redhat.com>
Date: Fri Oct 28 12:37:05 2016 +0100
only draw menubutton separator when two sides do something different
Change-Id: If6e3b72eacef2325f9f30770bbed32c627bc035c
diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx
index ef5ca8c..0453bfc 100644
--- a/fpicker/source/office/RemoteFilesDialog.cxx
+++ b/fpicker/source/office/RemoteFilesDialog.cxx
@@ -279,7 +279,9 @@ RemoteFilesDialog::RemoteFilesDialog( vcl::Window* pParent, PickerFlags nBits )
m_pName_ed->SetGetFocusHdl( LINK( this, RemoteFilesDialog, FileNameGetFocusHdl ) );
m_pName_ed->SetModifyHdl( LINK( this, RemoteFilesDialog, FileNameModifyHdl ) );
- m_pAddService_btn->SetDelayMenu( true );
+ m_pAddService_btn->SetDelayMenu(true);
+ m_pAddService_btn->SetDropDown(PushButtonDropdownStyle::SplitMenuButton);
+
m_pAddMenu = m_pAddService_btn->GetPopupMenu();
m_pAddService_btn->SetClickHdl( LINK( this, RemoteFilesDialog, AddServiceHdl ) );
m_pAddService_btn->SetSelectHdl( LINK( this, RemoteFilesDialog, EditServiceMenuHdl ) );
diff --git a/fpicker/source/office/iodlgimp.cxx b/fpicker/source/office/iodlgimp.cxx
index 0f3623f..43539fd 100644
--- a/fpicker/source/office/iodlgimp.cxx
+++ b/fpicker/source/office/iodlgimp.cxx
@@ -95,8 +95,8 @@ SvtFileDialogURLSelector::SvtFileDialogURLSelector( vcl::Window* _pParent, SvtFi
{
SetStyle( GetStyle() | WB_NOPOINTERFOCUS | WB_RECTSTYLE | WB_SMALLSTYLE );
SetModeImage( _pDlg->GetButtonImage( _nButtonId ) );
- SetDelayMenu( true );
- SetDropDown( PushButtonDropdownStyle::Toolbox );
+ SetDelayMenu(true);
+ SetDropDown(PushButtonDropdownStyle::Toolbox);
}
diff --git a/include/vcl/button.hxx b/include/vcl/button.hxx
index 9d83d00..78df45e 100644
--- a/include/vcl/button.hxx
+++ b/include/vcl/button.hxx
@@ -108,7 +108,8 @@ enum class PushButtonDropdownStyle
{
NONE = 0x0000,
Toolbox = 0x0001,
- MenuButton = 0x0002,
+ MenuButton = 0x0002, //visual down arrow
+ SplitMenuButton = 0x0003, //visual down arrow and seperator line
};
class VCL_DLLPUBLIC PushButton : public Button
diff --git a/sfx2/source/dialog/backingwindow.cxx b/sfx2/source/dialog/backingwindow.cxx
index 5ba3641..15fa225 100644
--- a/sfx2/source/dialog/backingwindow.cxx
+++ b/sfx2/source/dialog/backingwindow.cxx
@@ -263,7 +263,9 @@ void BackingWindow::initControls()
mpLocalView->Hide();
mpTemplateButton->SetDelayMenu(true);
+ mpTemplateButton->SetDropDown(PushButtonDropdownStyle::SplitMenuButton);
mpRecentButton->SetDelayMenu(true);
+ mpRecentButton->SetDropDown(PushButtonDropdownStyle::SplitMenuButton);
//set handlers
mpLocalView->setCreateContextMenuHdl(LINK(this, BackingWindow, CreateContextMenuHdl));
diff --git a/vcl/source/control/button.cxx b/vcl/source/control/button.cxx
index e094ad4..cb0cb8b 100644
--- a/vcl/source/control/button.cxx
+++ b/vcl/source/control/button.cxx
@@ -868,7 +868,8 @@ void PushButton::ImplDrawPushButtonContent(OutputDevice* pDev, DrawFlags nDrawFl
sal_uLong nImageSep = 1 + (pDev->GetTextHeight()-10)/2;
if( nImageSep < 1 )
nImageSep = 1;
- if ( mnDDStyle == PushButtonDropdownStyle::MenuButton )
+ if ( mnDDStyle == PushButtonDropdownStyle::MenuButton ||
+ mnDDStyle == PushButtonDropdownStyle::SplitMenuButton )
{
long nSeparatorX = 0;
Rectangle aSymbolRect = aInRect;
@@ -1034,7 +1035,7 @@ void PushButton::ImplDrawPushButton(vcl::RenderContext& rRenderContext)
return;
bool bRollOver = (IsMouseOver() && aInRect.IsInside(GetPointerPosPixel()));
- bool bDrawMenuSep = true;
+ bool bDrawMenuSep = mnDDStyle == PushButtonDropdownStyle::SplitMenuButton;
if (GetStyle() & WB_FLATBUTTON)
{
if (!bRollOver && !HasFocus())
@@ -1642,7 +1643,8 @@ Size PushButton::CalcMinimumSize() const
}
else if ( Button::HasImage() && ! (ImplGetButtonState() & DrawButtonFlags::NoImage) )
aSize = GetModeImage().GetSizePixel();
- if( mnDDStyle == PushButtonDropdownStyle::MenuButton )
+ if( mnDDStyle == PushButtonDropdownStyle::MenuButton ||
+ mnDDStyle == PushButtonDropdownStyle::SplitMenuButton )
{
long nSymbolSize = GetTextHeight() / 2 + 1;
aSize.Width() += 2*nSymbolSize;
commit b1271fc9baecc5098b9308fb26868bf3637a6293
Author: Caolán McNamara <caolanm at redhat.com>
Date: Fri Oct 28 12:26:12 2016 +0100
the case without a separator is as a Toolbox item
Change-Id: I948a63ab9741aa89738b5e44b0ec0e078d0faaa0
diff --git a/vcl/source/control/menubtn.cxx b/vcl/source/control/menubtn.cxx
index 26241a2..6d1c677 100644
--- a/vcl/source/control/menubtn.cxx
+++ b/vcl/source/control/menubtn.cxx
@@ -108,7 +108,7 @@ void MenuButton::MouseButtonDown( const MouseEvent& rMEvt )
if (mbDelayMenu)
{
// If the separated dropdown symbol is not hit, delay the popup execution
- if( mnDDStyle != PushButtonDropdownStyle::MenuButton || // no separator at all
+ if( mnDDStyle == PushButtonDropdownStyle::Toolbox || // no separator at all
rMEvt.GetPosPixel().X() <= ImplGetSeparatorX() )
{
if ( !mpMenuTimer )
commit 94af3da7e11e82c4ed2d59655e246b5201c18709
Author: Caolán McNamara <caolanm at redhat.com>
Date: Fri Oct 28 11:48:38 2016 +0100
rename and explain the MENUBUTTON_MENUMODE_TIMED stuff
Change-Id: Ifc6ddfb0cc249e537c01f28bab84b42c6b1577d9
diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx
index 49b576d..ef5ca8c 100644
--- a/fpicker/source/office/RemoteFilesDialog.cxx
+++ b/fpicker/source/office/RemoteFilesDialog.cxx
@@ -279,7 +279,7 @@ RemoteFilesDialog::RemoteFilesDialog( vcl::Window* pParent, PickerFlags nBits )
m_pName_ed->SetGetFocusHdl( LINK( this, RemoteFilesDialog, FileNameGetFocusHdl ) );
m_pName_ed->SetModifyHdl( LINK( this, RemoteFilesDialog, FileNameModifyHdl ) );
- m_pAddService_btn->SetMenuMode( MENUBUTTON_MENUMODE_TIMED );
+ m_pAddService_btn->SetDelayMenu( true );
m_pAddMenu = m_pAddService_btn->GetPopupMenu();
m_pAddService_btn->SetClickHdl( LINK( this, RemoteFilesDialog, AddServiceHdl ) );
m_pAddService_btn->SetSelectHdl( LINK( this, RemoteFilesDialog, EditServiceMenuHdl ) );
diff --git a/fpicker/source/office/iodlgimp.cxx b/fpicker/source/office/iodlgimp.cxx
index cd4542c..0f3623f 100644
--- a/fpicker/source/office/iodlgimp.cxx
+++ b/fpicker/source/office/iodlgimp.cxx
@@ -95,7 +95,7 @@ SvtFileDialogURLSelector::SvtFileDialogURLSelector( vcl::Window* _pParent, SvtFi
{
SetStyle( GetStyle() | WB_NOPOINTERFOCUS | WB_RECTSTYLE | WB_SMALLSTYLE );
SetModeImage( _pDlg->GetButtonImage( _nButtonId ) );
- SetMenuMode( MENUBUTTON_MENUMODE_TIMED );
+ SetDelayMenu( true );
SetDropDown( PushButtonDropdownStyle::Toolbox );
}
diff --git a/include/vcl/menubtn.hxx b/include/vcl/menubtn.hxx
index 6063c5a..f5056c1 100644
--- a/include/vcl/menubtn.hxx
+++ b/include/vcl/menubtn.hxx
@@ -28,8 +28,6 @@ class PopupMenu;
class VclBuilder;
class VclSimpleEvent;
-#define MENUBUTTON_MENUMODE_TIMED ((sal_uInt16)0x0001)
-
class VCL_DLLPUBLIC MenuButton : public PushButton
{
private:
@@ -38,7 +36,7 @@ private:
Timer* mpMenuTimer;
VclPtr<PopupMenu> mpMenu;
sal_uInt16 mnCurItemId;
- sal_uInt16 mnMenuMode;
+ bool mbDelayMenu;
Link<MenuButton*,void> maActivateHdl;
Link<MenuButton*,void> maSelectHdl;
@@ -65,7 +63,13 @@ public:
void ExecuteMenu();
- void SetMenuMode(sal_uInt16 nMode) { mnMenuMode = nMode; }
+ //if false then the whole button launches the menu
+ //if true, then the button has a separator
+ //where the right portion launches the menu immediately
+ //where the left portion activates the underlying Button handlers
+ //before launching the menu in an idle, allowing it to be cancelled
+ //before being shown
+ void SetDelayMenu(bool bDelay) { mbDelayMenu = bDelay; }
void SetPopupMenu( PopupMenu* pNewMenu );
PopupMenu* GetPopupMenu() const { return mpMenu; }
diff --git a/sfx2/source/dialog/backingwindow.cxx b/sfx2/source/dialog/backingwindow.cxx
index 67738f4..5ba3641 100644
--- a/sfx2/source/dialog/backingwindow.cxx
+++ b/sfx2/source/dialog/backingwindow.cxx
@@ -262,8 +262,8 @@ void BackingWindow::initControls()
mpLocalView->SetStyle( mpLocalView->GetStyle() | WB_VSCROLL);
mpLocalView->Hide();
- mpTemplateButton->SetMenuMode( MENUBUTTON_MENUMODE_TIMED );
- mpRecentButton->SetMenuMode( MENUBUTTON_MENUMODE_TIMED );
+ mpTemplateButton->SetDelayMenu(true);
+ mpRecentButton->SetDelayMenu(true);
//set handlers
mpLocalView->setCreateContextMenuHdl(LINK(this, BackingWindow, CreateContextMenuHdl));
diff --git a/vcl/source/control/menubtn.cxx b/vcl/source/control/menubtn.cxx
index c2c099c..26241a2 100644
--- a/vcl/source/control/menubtn.cxx
+++ b/vcl/source/control/menubtn.cxx
@@ -33,7 +33,7 @@ void MenuButton::ImplInitMenuButtonData()
mpMenuTimer = nullptr;
mpMenu = nullptr;
mnCurItemId = 0;
- mnMenuMode = 0;
+ mbDelayMenu = false;
}
void MenuButton::ImplInit( vcl::Window* pParent, WinBits nStyle )
@@ -105,7 +105,7 @@ IMPL_LINK_NOARG(MenuButton, ImplMenuTimeoutHdl, Timer *, void)
void MenuButton::MouseButtonDown( const MouseEvent& rMEvt )
{
bool bExecute = true;
- if ( mnMenuMode & MENUBUTTON_MENUMODE_TIMED )
+ if (mbDelayMenu)
{
// If the separated dropdown symbol is not hit, delay the popup execution
if( mnDDStyle != PushButtonDropdownStyle::MenuButton || // no separator at all
@@ -141,7 +141,7 @@ void MenuButton::KeyInput( const KeyEvent& rKEvt )
sal_uInt16 nCode = aKeyCode.GetCode();
if ( (nCode == KEY_DOWN) && aKeyCode.IsMod2() )
ExecuteMenu();
- else if ( !(mnMenuMode & MENUBUTTON_MENUMODE_TIMED) &&
+ else if ( !mbDelayMenu &&
!aKeyCode.GetModifier() &&
((nCode == KEY_RETURN) || (nCode == KEY_SPACE)) )
ExecuteMenu();
More information about the Libreoffice-commits
mailing list