|
 |
2135ec |
From f4bfce94abc10fbd2d8b37113e27b36c1e79fc61 Mon Sep 17 00:00:00 2001
|
|
 |
2135ec |
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
|
 |
2135ec |
Date: Fri, 13 Sep 2013 20:13:25 +0100
|
|
 |
2135ec |
Subject: [PATCH] select sheet menu as a right-click popup to the prev/next
|
|
 |
2135ec |
sheet dingus
|
|
 |
2135ec |
|
|
 |
2135ec |
Change-Id: Ifc9baeabedeab526d040220e9e45f171b5353bcf
|
|
 |
2135ec |
---
|
|
 |
2135ec |
include/svtools/tabbar.hxx | 6 ++++
|
|
 |
2135ec |
sc/source/ui/inc/tabcont.hxx | 3 ++
|
|
 |
2135ec |
sc/source/ui/view/tabcont.cxx | 69 ++++++++++++++++++++++++++++++---------
|
|
 |
2135ec |
svtools/source/control/tabbar.cxx | 34 +++++++++++++++++--
|
|
 |
2135ec |
4 files changed, 93 insertions(+), 19 deletions(-)
|
|
 |
2135ec |
|
|
 |
2135ec |
diff --git a/include/svtools/tabbar.hxx b/include/svtools/tabbar.hxx
|
|
 |
2135ec |
index 0bf3be6..44bcc48 100644
|
|
 |
2135ec |
--- a/include/svtools/tabbar.hxx
|
|
 |
2135ec |
+++ b/include/svtools/tabbar.hxx
|
|
 |
2135ec |
@@ -369,6 +369,7 @@ private:
|
|
 |
2135ec |
sal_Bool mbSelTextColor;
|
|
 |
2135ec |
bool mbMirrored;
|
|
 |
2135ec |
bool mbHasInsertTab; // if true, the tab bar has an extra tab at the end.
|
|
 |
2135ec |
+ bool mbScrollAlwaysEnabled;
|
|
 |
2135ec |
Link maSelectHdl;
|
|
 |
2135ec |
Link maDoubleClickHdl;
|
|
 |
2135ec |
Link maSplitHdl;
|
|
 |
2135ec |
@@ -377,6 +378,7 @@ private:
|
|
 |
2135ec |
Link maStartRenamingHdl;
|
|
 |
2135ec |
Link maAllowRenamingHdl;
|
|
 |
2135ec |
Link maEndRenamingHdl;
|
|
 |
2135ec |
+ Link maScrollAreaContextHdl;
|
|
 |
2135ec |
size_t maCurrentItemList;
|
|
 |
2135ec |
|
|
 |
2135ec |
using Window::ImplInit;
|
|
 |
2135ec |
@@ -529,6 +531,8 @@ public:
|
|
 |
2135ec |
void SetStyle( WinBits nStyle );
|
|
 |
2135ec |
WinBits GetStyle() const { return mnWinStyle; }
|
|
 |
2135ec |
|
|
 |
2135ec |
+ void SetScrollAlwaysEnabled(bool bScrollAlwaysEnabled);
|
|
 |
2135ec |
+
|
|
 |
2135ec |
Size CalcWindowSizePixel() const;
|
|
 |
2135ec |
|
|
 |
2135ec |
void SetSelectHdl( const Link& rLink ) { maSelectHdl = rLink; }
|
|
 |
2135ec |
@@ -547,6 +551,8 @@ public:
|
|
 |
2135ec |
const Link& GetAllowRenamingHdl() const { return maAllowRenamingHdl; }
|
|
 |
2135ec |
void SetEndRenamingHdl( const Link& rLink ) { maEndRenamingHdl = rLink; }
|
|
 |
2135ec |
const Link& GetEndRenamingHdl() const { return maEndRenamingHdl; }
|
|
 |
2135ec |
+ void SetScrollAreaContextHdl( const Link& rLink ) { maScrollAreaContextHdl = rLink; }
|
|
 |
2135ec |
+ const Link& GetScrollAreaContextHdl() const { return maScrollAreaContextHdl; }
|
|
 |
2135ec |
|
|
 |
2135ec |
// accessibility
|
|
 |
2135ec |
virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible();
|
|
 |
2135ec |
diff --git a/sc/source/ui/inc/tabcont.hxx b/sc/source/ui/inc/tabcont.hxx
|
|
 |
2135ec |
index c0bde9e..2c87f89 100644
|
|
 |
2135ec |
--- a/sc/source/ui/inc/tabcont.hxx
|
|
 |
2135ec |
+++ b/sc/source/ui/inc/tabcont.hxx
|
|
 |
2135ec |
@@ -46,6 +46,9 @@ private:
|
|
 |
2135ec |
sal_uInt16 GetMaxId() const;
|
|
 |
2135ec |
SCTAB GetPrivatDropPos(const Point& rPos );
|
|
 |
2135ec |
|
|
 |
2135ec |
+ DECL_LINK(ShowPageList, const CommandEvent*);
|
|
 |
2135ec |
+
|
|
 |
2135ec |
+ void SwitchToPageId(sal_uInt16 nId);
|
|
 |
2135ec |
protected:
|
|
 |
2135ec |
virtual void Select();
|
|
 |
2135ec |
virtual void Command( const CommandEvent& rCEvt );
|
|
 |
2135ec |
diff --git a/sc/source/ui/view/tabcont.cxx b/sc/source/ui/view/tabcont.cxx
|
|
 |
2135ec |
index 4fce113..4056748 100644
|
|
 |
2135ec |
--- a/sc/source/ui/view/tabcont.cxx
|
|
 |
2135ec |
+++ b/sc/source/ui/view/tabcont.cxx
|
|
 |
2135ec |
@@ -81,6 +81,39 @@ ScTabControl::ScTabControl( Window* pParent, ScViewData* pData ) :
|
|
 |
2135ec |
|
|
 |
2135ec |
EnableEditMode();
|
|
 |
2135ec |
UpdateInputContext();
|
|
 |
2135ec |
+
|
|
 |
2135ec |
+ SetScrollAlwaysEnabled(true);
|
|
 |
2135ec |
+
|
|
 |
2135ec |
+ SetScrollAreaContextHdl( LINK( this, ScTabControl, ShowPageList ) );
|
|
 |
2135ec |
+}
|
|
 |
2135ec |
+
|
|
 |
2135ec |
+IMPL_LINK(ScTabControl, ShowPageList, const CommandEvent *, pEvent)
|
|
 |
2135ec |
+{
|
|
 |
2135ec |
+ PopupMenu aPopup;
|
|
 |
2135ec |
+
|
|
 |
2135ec |
+ sal_uInt16 nCurPageId = GetCurPageId();
|
|
 |
2135ec |
+
|
|
 |
2135ec |
+ ScDocument* pDoc = pViewData->GetDocument();
|
|
 |
2135ec |
+ SCTAB nCount = pDoc->GetTableCount();
|
|
 |
2135ec |
+ for (SCTAB i=0; i
|
|
 |
2135ec |
+ {
|
|
 |
2135ec |
+ if (pDoc->IsVisible(i))
|
|
 |
2135ec |
+ {
|
|
 |
2135ec |
+ OUString aString;
|
|
 |
2135ec |
+ if (pDoc->GetName(i, aString))
|
|
 |
2135ec |
+ {
|
|
 |
2135ec |
+ sal_uInt16 nId = static_cast<sal_uInt16>(i)+1;
|
|
 |
2135ec |
+ aPopup.InsertItem(nId, aString, MIB_CHECKABLE);
|
|
 |
2135ec |
+ if (nId == nCurPageId)
|
|
 |
2135ec |
+ aPopup.CheckItem(nId);
|
|
 |
2135ec |
+ }
|
|
 |
2135ec |
+ }
|
|
 |
2135ec |
+ }
|
|
 |
2135ec |
+
|
|
 |
2135ec |
+ sal_uInt16 nItemId = aPopup.Execute( this, pEvent->GetMousePosPixel() );
|
|
 |
2135ec |
+ SwitchToPageId(nItemId);
|
|
 |
2135ec |
+
|
|
 |
2135ec |
+ return 0;
|
|
 |
2135ec |
}
|
|
 |
2135ec |
|
|
 |
2135ec |
ScTabControl::~ScTabControl()
|
|
 |
2135ec |
@@ -368,6 +401,25 @@ void ScTabControl::SetSheetLayoutRTL( sal_Bool bSheetRTL )
|
|
 |
2135ec |
nSelPageIdByMouse = TabBar::PAGE_NOT_FOUND;
|
|
 |
2135ec |
}
|
|
 |
2135ec |
|
|
 |
2135ec |
+void ScTabControl::SwitchToPageId(sal_uInt16 nId)
|
|
 |
2135ec |
+{
|
|
 |
2135ec |
+ if (nId)
|
|
 |
2135ec |
+ {
|
|
 |
2135ec |
+ sal_Bool bAlreadySelected = IsPageSelected( nId );
|
|
 |
2135ec |
+ //make the clicked page the current one
|
|
 |
2135ec |
+ SetCurPageId( nId );
|
|
 |
2135ec |
+ //change the selection when the current one is not already
|
|
 |
2135ec |
+ //selected or part of a multi selection
|
|
 |
2135ec |
+ if(!bAlreadySelected)
|
|
 |
2135ec |
+ {
|
|
 |
2135ec |
+ sal_uInt16 nCount = GetMaxId();
|
|
 |
2135ec |
+
|
|
 |
2135ec |
+ for (sal_uInt16 i=1; i<=nCount; i++)
|
|
 |
2135ec |
+ SelectPage( i, i==nId );
|
|
 |
2135ec |
+ Select();
|
|
 |
2135ec |
+ }
|
|
 |
2135ec |
+ }
|
|
 |
2135ec |
+}
|
|
 |
2135ec |
|
|
 |
2135ec |
void ScTabControl::Command( const CommandEvent& rCEvt )
|
|
 |
2135ec |
{
|
|
 |
2135ec |
@@ -387,22 +439,7 @@ void ScTabControl::Command( const CommandEvent& rCEvt )
|
|
 |
2135ec |
// if multiple tables are selected and the one under the cursor
|
|
 |
2135ec |
// is not part of them then unselect them
|
|
 |
2135ec |
sal_uInt16 nId = GetPageId( rCEvt.GetMousePosPixel() );
|
|
 |
2135ec |
- if (nId)
|
|
 |
2135ec |
- {
|
|
 |
2135ec |
- sal_Bool bAlreadySelected = IsPageSelected( nId );
|
|
 |
2135ec |
- //make the clicked page the current one
|
|
 |
2135ec |
- SetCurPageId( nId );
|
|
 |
2135ec |
- //change the selection when the current one is not already
|
|
 |
2135ec |
- //selected or part of a multi selection
|
|
 |
2135ec |
- if(!bAlreadySelected)
|
|
 |
2135ec |
- {
|
|
 |
2135ec |
- sal_uInt16 nCount = GetMaxId();
|
|
 |
2135ec |
-
|
|
 |
2135ec |
- for (sal_uInt16 i=1; i<=nCount; i++)
|
|
 |
2135ec |
- SelectPage( i, i==nId );
|
|
 |
2135ec |
- Select();
|
|
 |
2135ec |
- }
|
|
 |
2135ec |
- }
|
|
 |
2135ec |
+ SwitchToPageId(nId);
|
|
 |
2135ec |
|
|
 |
2135ec |
// #i52073# OLE inplace editing has to be stopped before showing the sheet tab context menu
|
|
 |
2135ec |
pViewSh->DeactivateOle();
|
|
 |
2135ec |
diff --git a/svtools/source/control/tabbar.cxx b/svtools/source/control/tabbar.cxx
|
|
 |
2135ec |
index 4152f9d..c0b8059 100644
|
|
 |
2135ec |
--- a/svtools/source/control/tabbar.cxx
|
|
 |
2135ec |
+++ b/svtools/source/control/tabbar.cxx
|
|
 |
2135ec |
@@ -100,13 +100,33 @@ class ImplTabButton : public PushButton
|
|
 |
2135ec |
{
|
|
 |
2135ec |
public:
|
|
 |
2135ec |
ImplTabButton( TabBar* pParent, WinBits nWinStyle = 0 ) :
|
|
 |
2135ec |
- PushButton( pParent, nWinStyle | WB_RECTSTYLE | WB_SMALLSTYLE | WB_NOLIGHTBORDER | WB_NOPOINTERFOCUS ) {}
|
|
 |
2135ec |
+ PushButton( pParent, nWinStyle | WB_RECTSTYLE | WB_SMALLSTYLE | WB_NOLIGHTBORDER | WB_NOPOINTERFOCUS ) {}
|
|
 |
2135ec |
|
|
 |
2135ec |
TabBar* GetParent() const { return (TabBar*)Window::GetParent(); }
|
|
 |
2135ec |
|
|
 |
2135ec |
virtual long PreNotify( NotifyEvent& rNEvt );
|
|
 |
2135ec |
+
|
|
 |
2135ec |
+ virtual void MouseButtonDown( const MouseEvent& rMEvt );
|
|
 |
2135ec |
+
|
|
 |
2135ec |
+ virtual void Command( const CommandEvent& rCEvt );
|
|
 |
2135ec |
};
|
|
 |
2135ec |
|
|
 |
2135ec |
+void ImplTabButton::MouseButtonDown( const MouseEvent& rMEvt )
|
|
 |
2135ec |
+{
|
|
 |
2135ec |
+ PushButton::MouseButtonDown(rMEvt);
|
|
 |
2135ec |
+}
|
|
 |
2135ec |
+
|
|
 |
2135ec |
+void ImplTabButton::Command( const CommandEvent& rCEvt )
|
|
 |
2135ec |
+{
|
|
 |
2135ec |
+ sal_uInt16 nCmd = rCEvt.GetCommand();
|
|
 |
2135ec |
+ if ( nCmd == COMMAND_CONTEXTMENU )
|
|
 |
2135ec |
+ {
|
|
 |
2135ec |
+ TabBar *pParent = GetParent();
|
|
 |
2135ec |
+ pParent->maScrollAreaContextHdl.Call((void*)&rCEvt);
|
|
 |
2135ec |
+ }
|
|
 |
2135ec |
+ PushButton::Command(rCEvt);
|
|
 |
2135ec |
+}
|
|
 |
2135ec |
+
|
|
 |
2135ec |
// =======================================================================
|
|
 |
2135ec |
|
|
 |
2135ec |
long ImplTabButton::PreNotify( NotifyEvent& rNEvt )
|
|
 |
2135ec |
@@ -398,6 +418,8 @@ void TabBar::ImplInit( WinBits nWinStyle )
|
|
 |
2135ec |
mbSelColor = sal_False;
|
|
 |
2135ec |
mbSelTextColor = sal_False;
|
|
 |
2135ec |
mbMirrored = sal_False;
|
|
 |
2135ec |
+ mbMirrored = sal_False;
|
|
 |
2135ec |
+ mbScrollAlwaysEnabled = false;
|
|
 |
2135ec |
|
|
 |
2135ec |
if ( nWinStyle & WB_3DTAB )
|
|
 |
2135ec |
mnOffY++;
|
|
 |
2135ec |
@@ -752,19 +774,25 @@ void TabBar::ImplEnableControls()
|
|
 |
2135ec |
return;
|
|
 |
2135ec |
|
|
 |
2135ec |
// Buttons enablen/disblen
|
|
 |
2135ec |
- sal_Bool bEnableBtn = mnFirstPos > 0;
|
|
 |
2135ec |
+ sal_Bool bEnableBtn = mbScrollAlwaysEnabled || mnFirstPos > 0;
|
|
 |
2135ec |
if ( mpFirstBtn )
|
|
 |
2135ec |
mpFirstBtn->Enable( bEnableBtn );
|
|
 |
2135ec |
if ( mpPrevBtn )
|
|
 |
2135ec |
mpPrevBtn->Enable( bEnableBtn );
|
|
 |
2135ec |
|
|
 |
2135ec |
- bEnableBtn = mnFirstPos < ImplGetLastFirstPos();
|
|
 |
2135ec |
+ bEnableBtn = mbScrollAlwaysEnabled || mnFirstPos < ImplGetLastFirstPos();
|
|
 |
2135ec |
if ( mpNextBtn )
|
|
 |
2135ec |
mpNextBtn->Enable( bEnableBtn );
|
|
 |
2135ec |
if ( mpLastBtn )
|
|
 |
2135ec |
mpLastBtn->Enable( bEnableBtn );
|
|
 |
2135ec |
}
|
|
 |
2135ec |
|
|
 |
2135ec |
+void TabBar::SetScrollAlwaysEnabled(bool bScrollAlwaysEnabled)
|
|
 |
2135ec |
+{
|
|
 |
2135ec |
+ mbScrollAlwaysEnabled = bScrollAlwaysEnabled;
|
|
 |
2135ec |
+ ImplEnableControls();
|
|
 |
2135ec |
+}
|
|
 |
2135ec |
+
|
|
 |
2135ec |
// -----------------------------------------------------------------------
|
|
 |
2135ec |
|
|
 |
2135ec |
void TabBar::ImplShowPage( sal_uInt16 nPos )
|
|
 |
2135ec |
--
|
|
 |
2135ec |
1.8.3.1
|
|
 |
2135ec |
|