diff options
author | Gulsah Kose <gulsah.1004@gmail.com> | 2016-01-19 16:32:18 +0200 |
---|---|---|
committer | Maxim Monastirsky <momonasmon@gmail.com> | 2016-02-17 13:02:32 +0200 |
commit | a009ba2b8ed7ead021ecc3356a477a08e72d2191 (patch) | |
tree | efb3046135e99ad3e23aa6293fdda57f08f9459a /sc | |
parent | d562ee461735a6daa6dcdfcc559f851cad160aaf (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.hrc | 2 | ||||
-rw-r--r-- | sc/sdi/scalc.sdi | 33 | ||||
-rw-r--r-- | sc/sdi/tabvwsh.sdi | 2 | ||||
-rw-r--r-- | sc/source/ui/inc/tabview.hxx | 4 | ||||
-rw-r--r-- | sc/source/ui/view/tabview.cxx | 114 | ||||
-rw-r--r-- | sc/source/ui/view/tabvwsh3.cxx | 10 | ||||
-rw-r--r-- | sc/uiconfig/scalc/menubar/menubar.xml | 2 |
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"/> |