summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--offapi/com/sun/star/sheet/SpreadsheetViewSettings.idl7
-rw-r--r--sc/inc/ViewSettingsSequenceDefines.hxx3
-rw-r--r--sc/inc/unonames.hxx1
-rw-r--r--sc/source/ui/app/inputwin.cxx43
-rw-r--r--sc/source/ui/inc/inputwin.hxx8
-rw-r--r--sc/source/ui/inc/viewdata.hxx10
-rw-r--r--sc/source/ui/unoobj/viewuno.cxx24
-rw-r--r--sc/source/ui/view/viewdata.cxx21
-rw-r--r--test/source/sheet/spreadsheetviewsettings.cxx10
9 files changed, 115 insertions, 12 deletions
diff --git a/offapi/com/sun/star/sheet/SpreadsheetViewSettings.idl b/offapi/com/sun/star/sheet/SpreadsheetViewSettings.idl
index 9dc5b853f61d..69da69013db0 100644
--- a/offapi/com/sun/star/sheet/SpreadsheetViewSettings.idl
+++ b/offapi/com/sun/star/sheet/SpreadsheetViewSettings.idl
@@ -152,6 +152,13 @@ published service SpreadsheetViewSettings
com::sun::star::view::DocumentZoomType::BY_VALUE.
*/
[property] short ZoomValue;
+
+ /** Number of lines shown in the Formula bar
+ Default is 1, maximum value is 25.
+
+ @since LibreOffice 7.4
+ */
+ [optional, property] short FormulaBarHeight;
};
diff --git a/sc/inc/ViewSettingsSequenceDefines.hxx b/sc/inc/ViewSettingsSequenceDefines.hxx
index 8fdbb5bb16ec..7fd754a07b6d 100644
--- a/sc/inc/ViewSettingsSequenceDefines.hxx
+++ b/sc/inc/ViewSettingsSequenceDefines.hxx
@@ -50,6 +50,7 @@
#define SC_RASTERSUBX 21
#define SC_RASTERSUBY 22
#define SC_RASTERSYNC 23
+#define SC_FORMULA_BAR_HEIGHT 24
// this are the defines for the position of the settings in the
// TableViewSettingsSequence
@@ -70,6 +71,7 @@
#define SC_TABLE_ZOOM_TYPE 11
#define SC_TABLE_ZOOM_VALUE 12
#define SC_TABLE_PAGE_VIEW_ZOOM_VALUE 13
+#define SC_FORMULA_BAR_HEIGHT_VALUE 14
#define SC_TABLE_SHOWGRID 15
inline constexpr OUStringLiteral SC_CURSORPOSITIONX = u"CursorPositionX";
@@ -95,6 +97,7 @@ inline constexpr OUStringLiteral SC_ZOOMTYPE = u"ZoomType";
inline constexpr OUStringLiteral SC_ZOOMVALUE = u"ZoomValue";
inline constexpr OUStringLiteral SC_PAGEVIEWZOOMVALUE = u"PageViewZoomValue";
inline constexpr OUStringLiteral SC_SHOWPAGEBREAKPREVIEW = u"ShowPageBreakPreview";
+inline constexpr OUStringLiteral SC_FORMULABARHEIGHT = u"FormulaBarHeight";
inline constexpr OUStringLiteral SC_VIEWID = u"ViewId";
#define SC_VIEW "view"
diff --git a/sc/inc/unonames.hxx b/sc/inc/unonames.hxx
index 7a73176cfd29..b21f7405d035 100644
--- a/sc/inc/unonames.hxx
+++ b/sc/inc/unonames.hxx
@@ -576,6 +576,7 @@ inline constexpr OUStringLiteral SC_SERVICENAME_CHART_PIVOTTABLE_DATAPROVIDER =
#define SC_UNO_UPDTEMPL "UpdateFromTemplate"
#define SC_UNO_FILTERED_RANGE_SELECTION "FilteredRangeSelection"
#define SC_UNO_VISAREASCREEN "VisibleAreaOnScreen"
+#define SC_UNO_FORMULABARHEIGHT "FormulaBarHeight"
#define SC_UNO_IMAGE_PREFERRED_DPI "ImagePreferredDPI"
/*Stampit enable/disable print cancel */
diff --git a/sc/source/ui/app/inputwin.cxx b/sc/source/ui/app/inputwin.cxx
index e50c682a1703..ab258fe6368c 100644
--- a/sc/source/ui/app/inputwin.cxx
+++ b/sc/source/ui/app/inputwin.cxx
@@ -677,6 +677,11 @@ void ScInputWindow::EnableButtons( bool bEnable )
// Invalidate();
}
+void ScInputWindow::NumLinesChanged()
+{
+ mxTextWindow->NumLinesChanged();
+}
+
void ScInputWindow::StateChanged( StateChangedType nType )
{
ToolBox::StateChanged( nType );
@@ -908,6 +913,7 @@ void ScInputBarGroup::Resize()
{
mxTextWndGroup->SetScrollPolicy();
InterimItemWindow::Resize();
+ TriggerToolboxLayout();
}
void ScInputBarGroup::StopEditEngine(bool bAll)
@@ -1034,16 +1040,25 @@ IMPL_LINK_NOARG(ScInputWindow, DropdownClickHdl, ToolBox *, void)
IMPL_LINK_NOARG(ScInputBarGroup, ClickHdl, weld::Button&, void)
{
if (mxTextWndGroup->GetNumLines() > 1)
- {
mxTextWndGroup->SetNumLines(1);
- mxButtonUp->hide();
- mxButtonDown->show();
- }
else
- {
mxTextWndGroup->SetNumLines(mxTextWndGroup->GetLastNumExpandedLines());
+
+ NumLinesChanged();
+}
+
+void ScInputBarGroup::NumLinesChanged()
+{
+ if (mxTextWndGroup->GetNumLines() > 1)
+ {
mxButtonDown->hide();
mxButtonUp->show();
+ mxTextWndGroup->SetLastNumExpandedLines(mxTextWndGroup->GetNumLines());
+ }
+ else
+ {
+ mxButtonUp->hide();
+ mxButtonDown->show();
}
TriggerToolboxLayout();
@@ -1165,6 +1180,11 @@ tools::Long ScTextWndGroup::GetLastNumExpandedLines() const
return mxTextWnd->GetLastNumExpandedLines();
}
+void ScTextWndGroup::SetLastNumExpandedLines(tools::Long nLastExpandedLines)
+{
+ mxTextWnd->SetLastNumExpandedLines(nLastExpandedLines);
+}
+
tools::Long ScTextWndGroup::GetNumLines() const
{
return mxTextWnd->GetNumLines();
@@ -1301,9 +1321,17 @@ int ScTextWnd::GetPixelHeightForLines(tools::Long nLines)
return rDevice.LogicToPixel(Size(0, nLines * rDevice.GetTextHeight())).Height() + 1;
}
+tools::Long ScTextWnd::GetNumLines() const
+{
+ ScViewData& rViewData = mpViewShell->GetViewData();
+ return rViewData.GetFormulaBarLines();
+}
+
void ScTextWnd::SetNumLines(tools::Long nLines)
{
- mnLines = nLines;
+ ScViewData& rViewData = mpViewShell->GetViewData();
+ rViewData.SetFormulaBarLines(nLines);
+
if ( nLines > 1 )
{
mnLastExpandedLines = nLines;
@@ -1567,7 +1595,6 @@ ScTextWnd::ScTextWnd(ScTextWndGroup& rParent, ScTabViewShell* pViewSh) :
bInputMode (false),
mpViewShell(pViewSh),
mrGroupBar(rParent),
- mnLines(1),
mnLastExpandedLines(INPUTWIN_MULTILINES),
mbInvalidate(false)
{
@@ -1931,7 +1958,7 @@ void ScTextWnd::SetTextString( const OUString& rNewString )
// Find position of the change, only paint the rest
if (!m_xEditEngine)
{
- bool bPaintAll = mnLines > 1 || bIsRTL;
+ bool bPaintAll = GetNumLines() > 1 || bIsRTL;
if (!bPaintAll)
{
// test if CTL script type is involved
diff --git a/sc/source/ui/inc/inputwin.hxx b/sc/source/ui/inc/inputwin.hxx
index 6bd4c3152712..12bc461f2836 100644
--- a/sc/source/ui/inc/inputwin.hxx
+++ b/sc/source/ui/inc/inputwin.hxx
@@ -104,9 +104,10 @@ public:
int GetPixelHeightForLines(tools::Long nLines);
int GetEditEngTxtHeight() const;
- virtual tools::Long GetNumLines() const override { return mnLines; }
+ virtual tools::Long GetNumLines() const override;
void SetNumLines(tools::Long nLines);
tools::Long GetLastNumExpandedLines() const { return mnLastExpandedLines; }
+ void SetLastNumExpandedLines(tools::Long nLastExpandedLines) { mnLastExpandedLines = nLastExpandedLines; }
void DoScroll();
@@ -153,7 +154,6 @@ private:
ScTabViewShell* mpViewShell;
ScTextWndGroup& mrGroupBar;
- tools::Long mnLines;
tools::Long mnLastExpandedLines;
bool mbInvalidate;
};
@@ -209,6 +209,7 @@ public:
const OutputDevice& GetEditViewDevice() const;
Point GetCursorScreenPixelPos(bool bBelowLine);
tools::Long GetLastNumExpandedLines() const;
+ void SetLastNumExpandedLines(tools::Long nLastExpandedLines);
virtual tools::Long GetNumLines() const override;
int GetPixelHeightForLines(tools::Long nLines);
weld::ScrolledWindow& GetScrollWin();
@@ -259,6 +260,7 @@ public:
bool IsInputActive() override;
void IncrementVerticalSize();
void DecrementVerticalSize();
+ void NumLinesChanged();
virtual tools::Long GetNumLines() const override { return mxTextWndGroup->GetNumLines(); }
tools::Long GetVertOffset() const { return mnVertOffset; }
@@ -300,6 +302,8 @@ public:
void SetOkCancelMode();
void SetSumAssignMode();
void EnableButtons( bool bEnable );
+ /// Update Input bar after the number of lines was changed externally
+ void NumLinesChanged();
void StartFormula();
void SetFormulaMode( bool bSet );
diff --git a/sc/source/ui/inc/viewdata.hxx b/sc/source/ui/inc/viewdata.hxx
index 76c65bf46a59..34bc8c49c4f6 100644
--- a/sc/source/ui/inc/viewdata.hxx
+++ b/sc/source/ui/inc/viewdata.hxx
@@ -329,6 +329,7 @@ private:
bool bMoveArea:1;
bool bGrowing;
+ sal_Int16 nFormulaBarLines; // Visible lines in the formula bar
tools::Long m_nLOKPageUpDownOffset;
tools::Rectangle maLOKVisibleArea;///< The visible area in the LibreOfficeKit client.
@@ -467,6 +468,15 @@ public:
double GetPPTX() const { return nPPTX; }
double GetPPTY() const { return nPPTY; }
+ void SetFormulaBarLines(sal_Int16 nLines)
+ {
+ // Formula bar must be between 1 and 25 lines (see SpreadsheetViewSettings.idl)
+ nLines = std::max(nLines, static_cast<sal_Int16>(1));
+ nLines = std::min(nLines, static_cast<sal_Int16>(25));
+ nFormulaBarLines = nLines;
+ }
+ sal_Int16 GetFormulaBarLines() const { return nFormulaBarLines; };
+
ScMarkType GetSimpleArea( SCCOL& rStartCol, SCROW& rStartRow, SCTAB& rStartTab,
SCCOL& rEndCol, SCROW& rEndRow, SCTAB& rEndTab ) const;
ScMarkType GetSimpleArea( ScRange& rRange ) const;
diff --git a/sc/source/ui/unoobj/viewuno.cxx b/sc/source/ui/unoobj/viewuno.cxx
index 5c6d599dd74f..4fe5b0c1f7d9 100644
--- a/sc/source/ui/unoobj/viewuno.cxx
+++ b/sc/source/ui/unoobj/viewuno.cxx
@@ -65,6 +65,8 @@
#include <markdata.hxx>
#include <scextopt.hxx>
#include <preview.hxx>
+#include <inputhdl.hxx>
+#include <inputwin.hxx>
#include <svx/sdrhittesthelper.hxx>
#include <formatsh.hxx>
#include <sfx2/app.hxx>
@@ -107,6 +109,7 @@ static const SfxItemPropertyMapEntry* lcl_GetViewOptPropertyMap()
{ SC_UNO_ZOOMTYPE, 0, cppu::UnoType<sal_Int16>::get(), 0, 0},
{ SC_UNO_ZOOMVALUE, 0, cppu::UnoType<sal_Int16>::get(), 0, 0},
{ SC_UNO_VISAREASCREEN,0, cppu::UnoType<awt::Rectangle>::get(), 0, 0},
+ { SC_UNO_FORMULABARHEIGHT,0,cppu::UnoType<sal_Int16>::get(), 0, 0},
{ u"", 0, css::uno::Type(), 0, 0 }
};
return aViewOptPropertyMap_Impl;
@@ -1793,6 +1796,22 @@ void SAL_CALL ScTabViewObj::setPropertyValue(
if ( aValue >>= nIntVal )
SetZoom(nIntVal);
}
+ else if ( aPropertyName == SC_UNO_FORMULABARHEIGHT )
+ {
+ sal_Int16 nIntVal = ScUnoHelpFunctions::GetInt16FromAny(aValue);
+ if (nIntVal > 0)
+ {
+ rViewData.SetFormulaBarLines(nIntVal);
+ // Notify formula bar about changed lines
+ ScInputHandler* pInputHdl = SC_MOD()->GetInputHdl();
+ if (pInputHdl)
+ {
+ ScInputWindow* pInputWin = pInputHdl->GetInputWindow();
+ if (pInputWin)
+ pInputWin->NumLinesChanged();
+ }
+ }
+ }
// Options are set on the view and document (for new views),
// so that they remain during saving.
@@ -1832,7 +1851,8 @@ uno::Any SAL_CALL ScTabViewObj::getPropertyValue( const OUString& aPropertyName
ScTabViewShell* pViewSh = GetViewShell();
if (pViewSh)
{
- const ScViewOptions& rOpt = pViewSh->GetViewData().GetOptions();
+ ScViewData& rViewData = pViewSh->GetViewData();
+ const ScViewOptions& rOpt = rViewData.GetOptions();
if ( aPropertyName == SC_UNO_COLROWHDR || aPropertyName == OLD_UNO_COLROWHDR )
aRet <<= rOpt.GetOption( VOPT_HEADER );
@@ -1860,9 +1880,9 @@ uno::Any SAL_CALL ScTabViewObj::getPropertyValue( const OUString& aPropertyName
else if ( aPropertyName == SC_UNO_VISAREA ) aRet <<= GetVisArea();
else if ( aPropertyName == SC_UNO_ZOOMTYPE ) aRet <<= GetZoomType();
else if ( aPropertyName == SC_UNO_ZOOMVALUE ) aRet <<= GetZoom();
+ else if ( aPropertyName == SC_UNO_FORMULABARHEIGHT ) aRet <<= rViewData.GetFormulaBarLines();
else if ( aPropertyName == SC_UNO_VISAREASCREEN )
{
- ScViewData& rViewData = pViewSh->GetViewData();
vcl::Window* pActiveWin = rViewData.GetActiveWin();
if ( pActiveWin )
{
diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx
index 90c63e6a95fb..31f3e5fdeaa9 100644
--- a/sc/source/ui/view/viewdata.cxx
+++ b/sc/source/ui/view/viewdata.cxx
@@ -53,6 +53,8 @@
#include <miscuno.hxx>
#include <unonames.hxx>
#include <inputopt.hxx>
+#include <inputhdl.hxx>
+#include <inputwin.hxx>
#include <viewutil.hxx>
#include <markdata.hxx>
#include <ViewSettingsSequenceDefines.hxx>
@@ -814,6 +816,7 @@ ScViewData::ScViewData(ScDocument* pDoc, ScDocShell* pDocSh, ScTabViewShell* pVi
bSelCtrlMouseClick( false ),
bMoveArea ( false ),
bGrowing (false),
+ nFormulaBarLines(1),
m_nLOKPageUpDownOffset( 0 )
{
assert(bool(pDoc) != bool(pDocSh)); // either one or the other, not both
@@ -3764,6 +3767,8 @@ void ScViewData::WriteUserDataSequence(uno::Sequence <beans::PropertyValue>& rSe
pSettings[SC_OUTLSYMB].Value <<= maOptions.GetOption(VOPT_OUTLINER);
pSettings[SC_VALUE_HIGHLIGHTING].Name = SC_UNO_VALUEHIGH;
pSettings[SC_VALUE_HIGHLIGHTING].Value <<= maOptions.GetOption(VOPT_SYNTAX);
+ pSettings[SC_FORMULA_BAR_HEIGHT_VALUE].Name = SC_FORMULABARHEIGHT;
+ pSettings[SC_FORMULA_BAR_HEIGHT_VALUE].Value <<= GetFormulaBarLines();;
const ScGridOptions& aGridOpt = maOptions.GetGridOptions();
pSettings[SC_SNAPTORASTER].Name = SC_UNO_SNAPTORASTER;
@@ -3791,6 +3796,7 @@ void ScViewData::ReadUserDataSequence(const uno::Sequence <beans::PropertyValue>
sal_Int32 nTemp32(0);
sal_Int16 nTemp16(0);
+ sal_Int16 nFormulaBarLineCount(0);
bool bPageMode(false);
EnsureTabDataSize(GetDocument().GetTableCount());
@@ -3868,6 +3874,21 @@ void ScViewData::ReadUserDataSequence(const uno::Sequence <beans::PropertyValue>
aDefPageZoomX = aDefPageZoomY = aZoom;
}
}
+ else if (sName == SC_FORMULABARHEIGHT)
+ {
+ if (rSetting.Value >>= nFormulaBarLineCount)
+ {
+ SetFormulaBarLines(nFormulaBarLineCount);
+ // Notify formula bar about changed lines
+ ScInputHandler* pInputHdl = SC_MOD()->GetInputHdl();
+ if (pInputHdl)
+ {
+ ScInputWindow* pInputWin = pInputHdl->GetInputWindow();
+ if (pInputWin)
+ pInputWin->NumLinesChanged();
+ }
+ }
+ }
else if (sName == SC_SHOWPAGEBREAKPREVIEW)
bPageMode = ScUnoHelpFunctions::GetBoolFromAny( rSetting.Value );
else if ( sName == SC_UNO_SHOWZERO )
diff --git a/test/source/sheet/spreadsheetviewsettings.cxx b/test/source/sheet/spreadsheetviewsettings.cxx
index b77bcb4c6921..1a5916dcfe39 100644
--- a/test/source/sheet/spreadsheetviewsettings.cxx
+++ b/test/source/sheet/spreadsheetviewsettings.cxx
@@ -235,6 +235,16 @@ void SpreadsheetViewSettings::testSpreadsheetViewSettingsProperties()
xSpreadsheetViewSettings->setPropertyValue(propName, aNewValue);
CPPUNIT_ASSERT(xSpreadsheetViewSettings->getPropertyValue(propName) >>= aZoomValue);
CPPUNIT_ASSERT_EQUAL_MESSAGE("Unable to set PropertyValue ZoomValue", sal_Int16(1), aZoomValue);
+
+ propName = "FormulaBarHeight";
+ sal_Int16 aFormulaBarHeight;
+ CPPUNIT_ASSERT(xSpreadsheetViewSettings->getPropertyValue(propName) >>= aFormulaBarHeight);
+
+ aNewValue <<= sal_Int16(15);
+ xSpreadsheetViewSettings->setPropertyValue(propName, aNewValue);
+ CPPUNIT_ASSERT(xSpreadsheetViewSettings->getPropertyValue(propName) >>= aFormulaBarHeight);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Unable to set PropertyValue FormulaBarHeight", sal_Int16(15),
+ aFormulaBarHeight);
}
}