[Libreoffice-commits] core.git: 2 commits - framework/source officecfg/registry sc/inc sc/sdi sc/source sc/uiconfig sc/UIConfig_scalc.mk
Maxim Monastirsky
momonasmon at gmail.com
Wed Feb 17 11:03:12 UTC 2016
framework/source/uielement/popuptoolbarcontroller.cxx | 13 -
officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu | 16 +
officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu | 28 ++
sc/UIConfig_scalc.mk | 1
sc/inc/sc.hrc | 2
sc/sdi/scalc.sdi | 33 ++
sc/sdi/tabvwsh.sdi | 2
sc/source/ui/inc/tabview.hxx | 4
sc/source/ui/view/tabview.cxx | 114 ++++++----
sc/source/ui/view/tabvwsh3.cxx | 10
sc/uiconfig/scalc/menubar/menubar.xml | 2
sc/uiconfig/scalc/popupmenu/freezepanes.xml | 13 +
12 files changed, 191 insertions(+), 47 deletions(-)
New commits:
commit c3a2fa08763fb38e9325e609420db2f70e428cf0
Author: Maxim Monastirsky <momonasmon at gmail.com>
Date: Wed Feb 17 11:52:17 2016 +0200
tdf#91013 Convert freezepanes menu to xml
Change-Id: Iedab5e5be5358f7716a2b33de3f0db582a401155
diff --git a/framework/Library_fwk.mk b/framework/Library_fwk.mk
index f9aed1f..0c78fc4 100644
--- a/framework/Library_fwk.mk
+++ b/framework/Library_fwk.mk
@@ -144,7 +144,6 @@ $(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
deleted file mode 100644
index 9d4cd1b..0000000
--- a/framework/source/uielement/freezepanesmenucontroller.cxx
+++ /dev/null
@@ -1,104 +0,0 @@
-/* -*- 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/util/fwk.component b/framework/util/fwk.component
index f6ae482..f14fbe4 100644
--- a/framework/util/fwk.component
+++ b/framework/util/fwk.component
@@ -121,10 +121,6 @@
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/Controller.xcu b/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
index b994e80..267177e 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
@@ -310,10 +310,13 @@
<value>.uno:FreezePanesMenu</value>
</prop>
<prop oor:name="Module">
- <value/>
+ <value>com.sun.star.sheet.SpreadsheetDocument</value>
</prop>
<prop oor:name="Controller">
- <value>com.sun.star.comp.framework.FreezePanesMenuController</value>
+ <value>com.sun.star.comp.framework.ResourceMenuController</value>
+ </prop>
+ <prop oor:name="Value">
+ <value>freezepanes</value>
</prop>
</node>
</node>
@@ -1070,7 +1073,7 @@
<value>.uno:FreezePanes</value>
</prop>
<prop oor:name="Module">
- <value/>
+ <value>com.sun.star.sheet.SpreadsheetDocument</value>
</prop>
<prop oor:name="Controller">
<value>com.sun.star.comp.framework.GenericPopupToolbarController</value>
diff --git a/sc/UIConfig_scalc.mk b/sc/UIConfig_scalc.mk
index 968323b..4d92e3c 100644
--- a/sc/UIConfig_scalc.mk
+++ b/sc/UIConfig_scalc.mk
@@ -29,6 +29,7 @@ $(eval $(call gb_UIConfig_add_popupmenufiles,modules/scalc,\
sc/uiconfig/scalc/popupmenu/draw \
sc/uiconfig/scalc/popupmenu/drawtext \
sc/uiconfig/scalc/popupmenu/form \
+ sc/uiconfig/scalc/popupmenu/freezepanes \
sc/uiconfig/scalc/popupmenu/graphic \
sc/uiconfig/scalc/popupmenu/media \
sc/uiconfig/scalc/popupmenu/oleobject \
diff --git a/sc/uiconfig/scalc/popupmenu/freezepanes.xml b/sc/uiconfig/scalc/popupmenu/freezepanes.xml
new file mode 100644
index 0000000..cc6d314
--- /dev/null
+++ b/sc/uiconfig/scalc/popupmenu/freezepanes.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * 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/.
+ *
+-->
+<menu:menupopup xmlns:menu="http://openoffice.org/2001/menu">
+ <menu:menuitem menu:id=".uno:FreezePanesFirstColumn"/>
+ <menu:menuitem menu:id=".uno:FreezePanesFirstRow"/>
+</menu:menupopup>
commit a009ba2b8ed7ead021ecc3356a477a08e72d2191
Author: Gulsah Kose <gulsah.1004 at gmail.com>
Date: Tue Jan 19 16:32:18 2016 +0200
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 at gmail.com>
diff --git a/framework/Library_fwk.mk b/framework/Library_fwk.mk
index 0c78fc4..f9aed1f 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 0000000..9d4cd1b
--- /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 8296dac..28f7aff 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 f14fbe4..f6ae482 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 8f4d911..df6cfe1 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 4df10e2..b994e80 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 52e34ce..8395c23 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 7193916..853bc79 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 e2becfb..3a25e81 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 23b97ed..5e7d9c7 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 9895bb7..7918516 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 606755a..4ea02a9 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 0a71016..0759278 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"/>
More information about the Libreoffice-commits
mailing list