summaryrefslogtreecommitdiff
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
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>
-rw-r--r--framework/Library_fwk.mk1
-rw-r--r--framework/source/uielement/freezepanesmenucontroller.cxx104
-rw-r--r--framework/source/uielement/popuptoolbarcontroller.cxx13
-rw-r--r--framework/util/fwk.component4
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu16
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu25
-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
13 files changed, 283 insertions, 47 deletions
diff --git a/framework/Library_fwk.mk b/framework/Library_fwk.mk
index 0c78fc460a2d..f9aed1fced13 100644
--- a/framework/Library_fwk.mk
+++ b/framework/Library_fwk.mk
@@ -144,6 +144,7 @@ $(eval $(call gb_Library_add_exception_objects,fwk,\
framework/source/uielement/popuptoolbarcontroller \
framework/source/uielement/progressbarwrapper \
framework/source/uielement/recentfilesmenucontroller \
+ framework/source/uielement/freezepanesmenucontroller \
framework/source/uielement/resourcemenucontroller \
framework/source/uielement/saveasmenucontroller \
framework/source/uielement/spinfieldtoolbarcontroller \
diff --git a/framework/source/uielement/freezepanesmenucontroller.cxx b/framework/source/uielement/freezepanesmenucontroller.cxx
new file mode 100644
index 000000000000..9d4cd1bda4f4
--- /dev/null
+++ b/framework/source/uielement/freezepanesmenucontroller.cxx
@@ -0,0 +1,104 @@
+/* -*- 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 <cppuhelper/supportsservice.hxx>
+#include <svtools/popupmenucontrollerbase.hxx>
+#include <vcl/menu.hxx>
+#include <vcl/svapp.hxx>
+
+using namespace css;
+using namespace com::sun::star::uno;
+using namespace com::sun::star::frame;
+
+namespace {
+
+class FreezePanesMenuController : public svt::PopupMenuControllerBase
+{
+public:
+ explicit FreezePanesMenuController( const uno::Reference< uno::XComponentContext >& xContext );
+ virtual ~FreezePanesMenuController();
+
+ // XServiceInfo
+ virtual OUString SAL_CALL getImplementationName()
+ throw (css::uno::RuntimeException, std::exception) override
+ {
+ return OUString("com.sun.star.comp.framework.FreezePanesMenuController");
+ }
+
+ virtual sal_Bool SAL_CALL supportsService(OUString const & ServiceName)
+ throw (css::uno::RuntimeException, std::exception) override
+ {
+ return cppu::supportsService(this, ServiceName);
+ }
+
+ virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames()
+ throw (css::uno::RuntimeException, std::exception) override
+ {
+ css::uno::Sequence< OUString > aSeq { "com.sun.star.frame.PopupMenuController" };
+ return aSeq;
+ }
+
+ // XStatusListener
+ virtual void SAL_CALL statusChanged( const frame::FeatureStateEvent& Event ) throw ( uno::RuntimeException, std::exception ) override;
+
+private:
+ virtual void impl_setPopupMenu() override;
+};
+
+FreezePanesMenuController::FreezePanesMenuController( const uno::Reference< uno::XComponentContext >& xContext ) :
+ svt::PopupMenuControllerBase( xContext )
+{
+}
+
+FreezePanesMenuController::~FreezePanesMenuController()
+{
+}
+
+void FreezePanesMenuController::impl_setPopupMenu()
+{
+ VCLXMenu* pPopupMenu = VCLXMenu::GetImplementation( m_xPopupMenu );
+ Menu* pVCLPopupMenu = nullptr;
+
+ SolarMutexGuard aSolarMutexGuard;
+
+ if ( pPopupMenu )
+ pVCLPopupMenu = pPopupMenu->GetMenu();
+
+ if ( pVCLPopupMenu )
+ {
+ pVCLPopupMenu->InsertItem( ".uno:FreezePanesFirstColumn", m_xFrame );
+ pVCLPopupMenu->InsertItem( ".uno:FreezePanesFirstRow", m_xFrame );
+ }
+}
+
+// XStatusListener
+void SAL_CALL FreezePanesMenuController::statusChanged( const FeatureStateEvent& /*Event*/ ) throw ( RuntimeException, std::exception )
+{
+}
+
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
+com_sun_star_comp_framework_FreezePanesMenuController_get_implementation(
+ css::uno::XComponentContext *context,
+ css::uno::Sequence<css::uno::Any> const &)
+{
+ return cppu::acquire(new FreezePanesMenuController(context));
+}
+
+}
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/framework/source/uielement/popuptoolbarcontroller.cxx b/framework/source/uielement/popuptoolbarcontroller.cxx
index 8296dac661c8..28f7affa0487 100644
--- a/framework/source/uielement/popuptoolbarcontroller.cxx
+++ b/framework/source/uielement/popuptoolbarcontroller.cxx
@@ -169,10 +169,15 @@ throw ( css::uno::Exception, css::uno::RuntimeException, std::exception )
void SAL_CALL PopupMenuToolbarController::statusChanged( const css::frame::FeatureStateEvent& rEvent )
throw ( css::uno::RuntimeException, std::exception )
{
- // TODO move to base class
-
- svt::ToolboxController::statusChanged( rEvent );
- enable( rEvent.IsEnabled );
+ ToolBox* pToolBox = nullptr;
+ sal_uInt16 nItemId = 0;
+ if ( getToolboxId( nItemId, &pToolBox ) )
+ {
+ pToolBox->EnableItem( nItemId, rEvent.IsEnabled );
+ bool bValue;
+ if ( rEvent.State >>= bValue )
+ pToolBox->CheckItem( nItemId, bValue );
+ }
}
css::uno::Reference< css::awt::XWindow > SAL_CALL
diff --git a/framework/util/fwk.component b/framework/util/fwk.component
index f14fbe4f06bc..f6ae4821979a 100644
--- a/framework/util/fwk.component
+++ b/framework/util/fwk.component
@@ -121,6 +121,10 @@
constructor="com_sun_star_comp_framework_SaveAsMenuController_get_implementation">
<service name="com.sun.star.frame.PopupMenuController"/>
</implementation>
+ <implementation name="com.sun.star.comp.framework.FreezePanesMenuController"
+ constructor="com_sun_star_comp_framework_FreezePanesMenuController_get_implementation">
+ <service name="com.sun.star.frame.PopupMenuController"/>
+ </implementation>
<implementation name="com.sun.star.comp.framework.StatusBarControllerFactory"
constructor="com_sun_star_comp_framework_StatusBarControllerFactory_get_implementation">
<service name="com.sun.star.frame.StatusbarControllerFactory"/>
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu
index 8f4d9115743e..df6cfe1e1b86 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu
@@ -73,6 +73,22 @@
<value>1</value>
</prop>
</node>
+ <node oor:name=".uno:FreezePanesFirstColumn" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="en-US">Freeze First Column</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FreezePanesFirstRow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="en-US">Freeze First Row</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
<node oor:name=".uno:ShowErrors" oor:op="replace">
<prop oor:name="Label" oor:type="xs:string">
<value xml:lang="en-US">Trace ~Error</value>
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu b/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
index 4df10e21867b..b994e8001d4f 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
@@ -305,6 +305,17 @@
<value>conditional</value>
</prop>
</node>
+ <node oor:name="c26" oor:op="replace">
+ <prop oor:name="Command">
+ <value>.uno:FreezePanesMenu</value>
+ </prop>
+ <prop oor:name="Module">
+ <value/>
+ </prop>
+ <prop oor:name="Controller">
+ <value>com.sun.star.comp.framework.FreezePanesMenuController</value>
+ </prop>
+ </node>
</node>
<node oor:name="ToolBar">
<node oor:name="ZoomToolBox" oor:op="replace">
@@ -1054,6 +1065,20 @@
<value>com.sun.star.comp.framework.SaveToolbarController</value>
</prop>
</node>
+ <node oor:name="FreezePanesToolbarController" oor:op="replace">
+ <prop oor:name="Command">
+ <value>.uno:FreezePanes</value>
+ </prop>
+ <prop oor:name="Module">
+ <value/>
+ </prop>
+ <prop oor:name="Controller">
+ <value>com.sun.star.comp.framework.GenericPopupToolbarController</value>
+ </prop>
+ <prop oor:name="Value">
+ <value>.uno:FreezePanesMenu</value>
+ </prop>
+ </node>
<node oor:name="org.apache.openoffice.comp.framework.NewToolbarController" oor:op="replace">
<prop oor:name="Command">
<value>.uno:AddDirect</value>
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"/>