summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorGulsah Kose <gulsah.1004@gmail.com>2016-01-19 16:32:18 +0200
committerMaxim Monastirsky <momonasmon@gmail.com>2016-02-17 13:02:32 +0200
commita009ba2b8ed7ead021ecc3356a477a08e72d2191 (patch)
treeefb3046135e99ad3e23aa6293fdda57f08f9459a /sc
parentd562ee461735a6daa6dcdfcc559f851cad160aaf (diff)
tdf#91013 Add new uno commands to freeze one row and column.
Added freezepanesfirstcolumn and freezepanesfirstrow commands. FreezePanes button became a split button that includes this two new uno commands. And this new commands added to menu. Change-Id: Ic6958067cc98b3df50bcd06a1eac220bd9a61473 Reviewed-on: https://gerrit.libreoffice.org/21604 Signed-off-by: Gulsah Kose <gulsah.1004@gmail.com>
Diffstat (limited to 'sc')
-rw-r--r--sc/inc/sc.hrc2
-rw-r--r--sc/sdi/scalc.sdi33
-rw-r--r--sc/sdi/tabvwsh.sdi2
-rw-r--r--sc/source/ui/inc/tabview.hxx4
-rw-r--r--sc/source/ui/view/tabview.cxx114
-rw-r--r--sc/source/ui/view/tabvwsh3.cxx10
-rw-r--r--sc/uiconfig/scalc/menubar/menubar.xml2
7 files changed, 124 insertions, 43 deletions
diff --git a/sc/inc/sc.hrc b/sc/inc/sc.hrc
index 52e34cebcc67..8395c2366ff0 100644
--- a/sc/inc/sc.hrc
+++ b/sc/inc/sc.hrc
@@ -275,6 +275,8 @@
#define SID_ZTEST_DIALOG (SC_MESSAGE_START + 81)
#define SID_CHI_SQUARE_TEST_DIALOG (SC_MESSAGE_START + 82)
#define SID_SEARCH_RESULTS_DIALOG (SC_MESSAGE_START + 83)
+#define SID_WINDOW_FIX_ROW (SC_MESSAGE_START + 84)
+#define SID_WINDOW_FIX_COL (SC_MESSAGE_START + 85)
// functions
diff --git a/sc/sdi/scalc.sdi b/sc/sdi/scalc.sdi
index 7193916d81ec..853bc79495eb 100644
--- a/sc/sdi/scalc.sdi
+++ b/sc/sdi/scalc.sdi
@@ -2080,6 +2080,39 @@ SfxVoidItem FreezePanes SID_WINDOW_FIX
GroupId = GID_VIEW;
]
+SfxVoidItem FreezePanesFirstColumn SID_WINDOW_FIX_COL
+()
+[
+ AutoUpdate = FALSE,
+ FastCall = FALSE,
+ ReadOnlyDoc = TRUE,
+ Toggle = FALSE,
+ Container = FALSE,
+ RecordAbsolute = FALSE,
+ RecordPerSet;
+
+ AccelConfig = TRUE,
+ MenuConfig = TRUE,
+ ToolBoxConfig = TRUE,
+ GroupId = GID_VIEW;
+]
+
+SfxVoidItem FreezePanesFirstRow SID_WINDOW_FIX_ROW
+()
+[
+ AutoUpdate = FALSE,
+ FastCall = FALSE,
+ ReadOnlyDoc = TRUE,
+ Toggle = FALSE,
+ Container = FALSE,
+ RecordAbsolute = FALSE,
+ RecordPerSet;
+
+ AccelConfig = TRUE,
+ MenuConfig = TRUE,
+ ToolBoxConfig = TRUE,
+ GroupId = GID_VIEW;
+]
SfxVoidItem FunctionBox FID_FUNCTION_BOX
diff --git a/sc/sdi/tabvwsh.sdi b/sc/sdi/tabvwsh.sdi
index e2becfbddc7b..3a25e81a7b1d 100644
--- a/sc/sdi/tabvwsh.sdi
+++ b/sc/sdi/tabvwsh.sdi
@@ -131,6 +131,8 @@ interface TableEditView
SID_CURRENTDOC [ ExecMethod = Execute; StateMethod = GetState; ]
SID_WINDOW_SPLIT [ ExecMethod = Execute; StateMethod = GetState; ]
SID_WINDOW_FIX [ ExecMethod = Execute; StateMethod = GetState; ]
+ SID_WINDOW_FIX_ROW [ ExecMethod = Execute; ]
+ SID_WINDOW_FIX_COL [ ExecMethod = Execute; ]
SID_SAVEDOC
[
ExecMethod = ExecuteSave ;
diff --git a/sc/source/ui/inc/tabview.hxx b/sc/source/ui/inc/tabview.hxx
index 23b97ed79392..5e7d9c792fc6 100644
--- a/sc/source/ui/inc/tabview.hxx
+++ b/sc/source/ui/inc/tabview.hxx
@@ -229,6 +229,8 @@ public:
ScTabView( vcl::Window* pParent, ScDocShell& rDocSh, ScTabViewShell* pViewShell );
~ScTabView();
+ enum SplitMethod { SC_SPLIT_METHOD_FIRST_COL, SC_SPLIT_METHOD_FIRST_ROW, SC_SPLIT_METHOD_CURSOR };
+
void MakeDrawLayer();
void HideListBox();
@@ -494,7 +496,7 @@ public:
Point GetMousePosPixel();
- void FreezeSplitters( bool bFreeze );
+ void FreezeSplitters( bool bFreeze, SplitMethod eSplitMethod = SC_SPLIT_METHOD_CURSOR );
void RemoveSplit();
void SplitAtCursor();
void SplitAtPixel( const Point& rPixel, bool bHor, bool bVer );
diff --git a/sc/source/ui/view/tabview.cxx b/sc/source/ui/view/tabview.cxx
index 9895bb79e14b..791851622e22 100644
--- a/sc/source/ui/view/tabview.cxx
+++ b/sc/source/ui/view/tabview.cxx
@@ -1931,7 +1931,7 @@ Point ScTabView::GetMousePosPixel()
return aPos;
}
-void ScTabView::FreezeSplitters( bool bFreeze )
+void ScTabView::FreezeSplitters( bool bFreeze, SplitMethod eSplitMetod)
{
ScSplitMode eOldH = aViewData.GetHSplitMode();
ScSplitMode eOldV = aViewData.GetVSplitMode();
@@ -1949,19 +1949,20 @@ void ScTabView::FreezeSplitters( bool bFreeze )
aViewData.GetDocShell()->SetDocumentModified();
Point aSplit;
- SCsCOL nPosX;
- SCsROW nPosY;
- if (eOldH != SC_SPLIT_NONE || eOldV != SC_SPLIT_NONE)
+ SCsCOL nPosX = 1;
+ SCsROW nPosY = 1;
+ if (eOldV != SC_SPLIT_NONE || eOldH != SC_SPLIT_NONE)
{
- if (eOldH != SC_SPLIT_NONE)
+ if ( eOldV != SC_SPLIT_NONE && (eSplitMetod == SC_SPLIT_METHOD_FIRST_ROW || eSplitMetod == SC_SPLIT_METHOD_CURSOR))
+ aSplit.Y() = aViewData.GetVSplitPos() - aWinStart.Y();
+
+ if ( eOldH != SC_SPLIT_NONE && (eSplitMetod == SC_SPLIT_METHOD_FIRST_COL || eSplitMetod == SC_SPLIT_METHOD_CURSOR))
{
long nSplitPos = aViewData.GetHSplitPos();
if ( bLayoutRTL )
nSplitPos = pFrameWin->GetOutputSizePixel().Width() - nSplitPos - 1;
aSplit.X() = nSplitPos - aWinStart.X();
}
- if (eOldV != SC_SPLIT_NONE)
- aSplit.Y() = aViewData.GetVSplitPos() - aWinStart.Y();
aViewData.GetPosFromPixel( aSplit.X(), aSplit.Y(), ePos, nPosX, nPosY );
bool bLeft;
@@ -1974,51 +1975,80 @@ void ScTabView::FreezeSplitters( bool bFreeze )
}
else
{
- nPosX = static_cast<SCsCOL>( aViewData.GetCurX());
- nPosY = static_cast<SCsROW>( aViewData.GetCurY());
+ switch(eSplitMetod)
+ {
+ case SC_SPLIT_METHOD_FIRST_ROW:
+ {
+ nPosX = 0;
+ nPosY = 1;
+ }
+ break;
+ case SC_SPLIT_METHOD_FIRST_COL:
+ {
+ nPosX = 1;
+ nPosY = 0;
+ }
+ break;
+ case SC_SPLIT_METHOD_CURSOR:
+ {
+ nPosX = static_cast<SCsCOL>( aViewData.GetCurX());
+ nPosY = static_cast<SCsROW>( aViewData.GetCurY());
+ }
+ break;
+ }
}
- SCCOL nLeftPos = aViewData.GetPosX(SC_SPLIT_LEFT);
SCROW nTopPos = aViewData.GetPosY(SC_SPLIT_BOTTOM);
- SCCOL nRightPos = static_cast<SCCOL>(nPosX);
SCROW nBottomPos = static_cast<SCROW>(nPosY);
- if (eOldH != SC_SPLIT_NONE)
- if (aViewData.GetPosX(SC_SPLIT_RIGHT) > nRightPos)
- nRightPos = aViewData.GetPosX(SC_SPLIT_RIGHT);
- if (eOldV != SC_SPLIT_NONE)
+ SCCOL nLeftPos = aViewData.GetPosX(SC_SPLIT_LEFT);
+ SCCOL nRightPos = static_cast<SCCOL>(nPosX);
+
+ if (eSplitMetod == SC_SPLIT_METHOD_FIRST_ROW || eSplitMetod == SC_SPLIT_METHOD_CURSOR)
{
- nTopPos = aViewData.GetPosY(SC_SPLIT_TOP);
- if (aViewData.GetPosY(SC_SPLIT_BOTTOM) > nBottomPos)
- nBottomPos = aViewData.GetPosY(SC_SPLIT_BOTTOM);
+ if (eOldV != SC_SPLIT_NONE)
+ {
+ nTopPos = aViewData.GetPosY(SC_SPLIT_TOP);
+ if (aViewData.GetPosY(SC_SPLIT_BOTTOM) > nBottomPos)
+ nBottomPos = aViewData.GetPosY(SC_SPLIT_BOTTOM);
+ }
+ aSplit = aViewData.GetScrPos( static_cast<SCCOL>(nPosX), static_cast<SCROW>(nPosY), ePos, true );
+ if (aSplit.Y() > 0)
+ {
+ aViewData.SetVSplitMode( SC_SPLIT_FIX );
+ aViewData.SetVSplitPos( aSplit.Y() + aWinStart.Y() );
+ aViewData.SetFixPosY( nPosY );
+
+ aViewData.SetPosY(SC_SPLIT_TOP, nTopPos);
+ aViewData.SetPosY(SC_SPLIT_BOTTOM, nBottomPos);
+ }
+ else
+ aViewData.SetVSplitMode( SC_SPLIT_NONE );
}
- aSplit = aViewData.GetScrPos( static_cast<SCCOL>(nPosX), static_cast<SCROW>(nPosY), ePos, true );
- if (nPosX > aViewData.GetPosX(SC_SPLIT_LEFT)) // (aSplit.X() > 0) doesn't work for RTL
+ if (eSplitMetod == SC_SPLIT_METHOD_FIRST_COL || eSplitMetod == SC_SPLIT_METHOD_CURSOR)
{
- long nSplitPos = aSplit.X() + aWinStart.X();
- if ( bLayoutRTL )
- nSplitPos = pFrameWin->GetOutputSizePixel().Width() - nSplitPos - 1;
-
- aViewData.SetHSplitMode( SC_SPLIT_FIX );
- aViewData.SetHSplitPos( nSplitPos );
- aViewData.SetFixPosX( nPosX );
+ if (eOldH != SC_SPLIT_NONE)
+ {
+ if (aViewData.GetPosX(SC_SPLIT_RIGHT) > nRightPos)
+ nRightPos = aViewData.GetPosX(SC_SPLIT_RIGHT);
+ }
+ aSplit = aViewData.GetScrPos( static_cast<SCCOL>(nPosX), static_cast<SCROW>(nPosY), ePos, true );
+ if (nPosX > aViewData.GetPosX(SC_SPLIT_LEFT)) // (aSplit.X() > 0) doesn't work for RTL
+ {
+ long nSplitPos = aSplit.X() + aWinStart.X();
+ if ( bLayoutRTL )
+ nSplitPos = pFrameWin->GetOutputSizePixel().Width() - nSplitPos - 1;
- aViewData.SetPosX(SC_SPLIT_LEFT, nLeftPos);
- aViewData.SetPosX(SC_SPLIT_RIGHT, nRightPos);
- }
- else
- aViewData.SetHSplitMode( SC_SPLIT_NONE );
- if (aSplit.Y() > 0)
- {
- aViewData.SetVSplitMode( SC_SPLIT_FIX );
- aViewData.SetVSplitPos( aSplit.Y() + aWinStart.Y() );
- aViewData.SetFixPosY( nPosY );
+ aViewData.SetHSplitMode( SC_SPLIT_FIX );
+ aViewData.SetHSplitPos( nSplitPos );
+ aViewData.SetFixPosX( nPosX );
- aViewData.SetPosY(SC_SPLIT_TOP, nTopPos);
- aViewData.SetPosY(SC_SPLIT_BOTTOM, nBottomPos);
+ aViewData.SetPosX(SC_SPLIT_LEFT, nLeftPos);
+ aViewData.SetPosX(SC_SPLIT_RIGHT, nRightPos);
+ }
+ else
+ aViewData.SetHSplitMode( SC_SPLIT_NONE );
}
- else
- aViewData.SetVSplitMode( SC_SPLIT_NONE );
}
else // unfreeze
{
@@ -2104,6 +2134,8 @@ void ScTabView::InvalidateSplit()
SfxBindings& rBindings = aViewData.GetBindings();
rBindings.Invalidate( SID_WINDOW_SPLIT );
rBindings.Invalidate( SID_WINDOW_FIX );
+ rBindings.Invalidate( SID_WINDOW_FIX_COL );
+ rBindings.Invalidate( SID_WINDOW_FIX_ROW );
pHSplitter->SetFixed( aViewData.GetHSplitMode() == SC_SPLIT_FIX );
pVSplitter->SetFixed( aViewData.GetVSplitMode() == SC_SPLIT_FIX );
diff --git a/sc/source/ui/view/tabvwsh3.cxx b/sc/source/ui/view/tabvwsh3.cxx
index 606755a7c42f..4ea02a9fde79 100644
--- a/sc/source/ui/view/tabvwsh3.cxx
+++ b/sc/source/ui/view/tabvwsh3.cxx
@@ -896,13 +896,21 @@ void ScTabViewShell::Execute( SfxRequest& rReq )
break;
case SID_WINDOW_FIX:
+ case SID_WINDOW_FIX_COL:
+ case SID_WINDOW_FIX_ROW:
{
+ SplitMethod eSplitMethod = SC_SPLIT_METHOD_CURSOR;
+ if (nSlot == SID_WINDOW_FIX_COL)
+ eSplitMethod = SC_SPLIT_METHOD_FIRST_COL;
+ else if (nSlot == SID_WINDOW_FIX_ROW)
+ eSplitMethod = SC_SPLIT_METHOD_FIRST_ROW;
+
ScSplitMode eHSplit = GetViewData().GetHSplitMode();
ScSplitMode eVSplit = GetViewData().GetVSplitMode();
if ( eHSplit == SC_SPLIT_FIX || eVSplit == SC_SPLIT_FIX ) // remove
RemoveSplit();
else
- FreezeSplitters( true ); // create or fixate
+ FreezeSplitters( true, eSplitMethod); // create or fixate
rReq.Done();
InvalidateSplit();
diff --git a/sc/uiconfig/scalc/menubar/menubar.xml b/sc/uiconfig/scalc/menubar/menubar.xml
index 0a7101626ff1..07592785217e 100644
--- a/sc/uiconfig/scalc/menubar/menubar.xml
+++ b/sc/uiconfig/scalc/menubar/menubar.xml
@@ -120,6 +120,8 @@
<menu:menuitem menu:id=".uno:ViewValueHighlighting"/>
<menu:menuseparator/>
<menu:menuitem menu:id=".uno:FreezePanes"/>
+ <menu:menuitem menu:id=".uno:FreezePanesFirstColumn"/>
+ <menu:menuitem menu:id=".uno:FreezePanesFirstRow"/>
<menu:menuitem menu:id=".uno:SplitWindow"/>
<menu:menuseparator/>
<menu:menuitem menu:id=".uno:Sidebar"/>