Kaydet (Commit) e0b93ef5 authored tarafından Dennis Francis's avatar Dennis Francis Kaydeden (comit) Eike Rathke

tdf#34094 : Allow column and row selections while creating a formula

Change-Id: I516ca96c0743840fb03d8208f7236ca25027bc45
Reviewed-on: https://gerrit.libreoffice.org/20102Reviewed-by: 's avatarEike Rathke <erack@redhat.com>
Tested-by: 's avatarEike Rathke <erack@redhat.com>
üst f88576cb
...@@ -102,7 +102,7 @@ ScFormulaDlg::ScFormulaDlg( SfxBindings* pB, SfxChildWindow* pCW, ...@@ -102,7 +102,7 @@ ScFormulaDlg::ScFormulaDlg( SfxBindings* pB, SfxChildWindow* pCW,
if ( pInputHdl ) if ( pInputHdl )
pInputHdl->NotifyChange( nullptr ); pInputHdl->NotifyChange( nullptr );
ScFormulaReferenceHelper::enableInput( false ); ScFormulaReferenceHelper::enableInput( true );
ScFormulaReferenceHelper::EnableSpreadsheets(); ScFormulaReferenceHelper::EnableSpreadsheets();
m_aHelper.Init(); m_aHelper.Init();
ScFormulaReferenceHelper::SetDispatcherLock( true ); ScFormulaReferenceHelper::SetDispatcherLock( true );
......
...@@ -25,16 +25,17 @@ ...@@ -25,16 +25,17 @@
class ScHeaderFunctionSet; class ScHeaderFunctionSet;
class ScHeaderSelectionEngine; class ScHeaderSelectionEngine;
class ScTabView;
class ScColBar : public ScHeaderControl class ScColBar : public ScHeaderControl
{ {
ScViewData* pViewData;
ScHSplitPos eWhich; ScHSplitPos eWhich;
ScHeaderFunctionSet* pFuncSet; ScHeaderFunctionSet* pFuncSet;
public: public:
ScColBar( vcl::Window* pParent, ScViewData* pData, ScHSplitPos eWhichPos, ScColBar( vcl::Window* pParent, ScHSplitPos eWhichPos,
ScHeaderFunctionSet* pFunc, ScHeaderSelectionEngine* pEng ); ScHeaderFunctionSet* pFunc, ScHeaderSelectionEngine* pEng,
ScTabView* pTab );
virtual ~ScColBar(); virtual ~ScColBar();
virtual SCCOLROW GetPos() const override; virtual SCCOLROW GetPos() const override;
...@@ -60,13 +61,13 @@ public: ...@@ -60,13 +61,13 @@ public:
class ScRowBar : public ScHeaderControl class ScRowBar : public ScHeaderControl
{ {
ScViewData* pViewData;
ScVSplitPos eWhich; ScVSplitPos eWhich;
ScHeaderFunctionSet* pFuncSet; ScHeaderFunctionSet* pFuncSet;
public: public:
ScRowBar( vcl::Window* pParent, ScViewData* pData, ScVSplitPos eWhichPos, ScRowBar( vcl::Window* pParent, ScVSplitPos eWhichPos,
ScHeaderFunctionSet* pFunc, ScHeaderSelectionEngine* pEng ); ScHeaderFunctionSet* pFunc, ScHeaderSelectionEngine* pEng,
ScTabView* pTab );
virtual ~ScRowBar(); virtual ~ScRowBar();
virtual SCCOLROW GetPos() const override; virtual SCCOLROW GetPos() const override;
......
...@@ -29,6 +29,8 @@ ...@@ -29,6 +29,8 @@
// Size of the sliders // Size of the sliders
#define HDR_SLIDERSIZE 2 #define HDR_SLIDERSIZE 2
class ScTabView;
class ScHeaderControl : public vcl::Window class ScHeaderControl : public vcl::Window
{ {
private: private:
...@@ -57,6 +59,8 @@ private: ...@@ -57,6 +59,8 @@ private:
bool bIgnoreMove; bool bIgnoreMove;
bool bDoneInitRef;
long GetScrPos( SCCOLROW nEntryNo ) const; long GetScrPos( SCCOLROW nEntryNo ) const;
SCCOLROW GetMousePos( const MouseEvent& rMEvt, bool& rBorder ) const; SCCOLROW GetMousePos( const MouseEvent& rMEvt, bool& rBorder ) const;
bool IsSelectionAllowed(SCCOLROW nPos) const; bool IsSelectionAllowed(SCCOLROW nPos) const;
...@@ -67,6 +71,8 @@ private: ...@@ -67,6 +71,8 @@ private:
void DrawShadedRect( long nStart, long nEnd, const Color& rBaseColor ); void DrawShadedRect( long nStart, long nEnd, const Color& rBaseColor );
protected: protected:
ScTabView* pTabView;
// Window overrides // Window overrides
virtual void Paint( vcl::RenderContext& rRenderContext, const Rectangle& rRect ) override; virtual void Paint( vcl::RenderContext& rRenderContext, const Rectangle& rRect ) override;
...@@ -102,7 +108,7 @@ protected: ...@@ -102,7 +108,7 @@ protected:
public: public:
ScHeaderControl( vcl::Window* pParent, SelectionEngine* pSelectionEngine, ScHeaderControl( vcl::Window* pParent, SelectionEngine* pSelectionEngine,
SCCOLROW nNewSize, bool bNewVertical ); SCCOLROW nNewSize, bool bNewVertical, ScTabView* pTab );
virtual ~ScHeaderControl(); virtual ~ScHeaderControl();
void SetIgnoreMove(bool bSet) { bIgnoreMove = bSet; } void SetIgnoreMove(bool bSet) { bIgnoreMove = bSet; }
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include "appoptio.hxx" #include "appoptio.hxx"
#include "globstr.hrc" #include "globstr.hrc"
#include "markdata.hxx" #include "markdata.hxx"
#include "tabview.hxx"
#include <columnspanset.hxx> #include <columnspanset.hxx>
// STATIC DATA ----------------------------------------------------------- // STATIC DATA -----------------------------------------------------------
...@@ -52,10 +53,10 @@ static OUString lcl_MetricString( long nTwips, const OUString& rText ) ...@@ -52,10 +53,10 @@ static OUString lcl_MetricString( long nTwips, const OUString& rText )
} }
} }
ScColBar::ScColBar( vcl::Window* pParent, ScViewData* pData, ScHSplitPos eWhichPos, ScColBar::ScColBar( vcl::Window* pParent, ScHSplitPos eWhichPos,
ScHeaderFunctionSet* pFunc, ScHeaderSelectionEngine* pEng ) : ScHeaderFunctionSet* pFunc, ScHeaderSelectionEngine* pEng,
ScHeaderControl( pParent, pEng, MAXCOL+1, false ), ScTabView* pTab ) :
pViewData( pData ), ScHeaderControl( pParent, pEng, MAXCOL+1, false, pTab ),
eWhich( eWhichPos ), eWhich( eWhichPos ),
pFuncSet( pFunc ) pFuncSet( pFunc )
{ {
...@@ -68,22 +69,23 @@ ScColBar::~ScColBar() ...@@ -68,22 +69,23 @@ ScColBar::~ScColBar()
inline bool ScColBar::UseNumericHeader() const inline bool ScColBar::UseNumericHeader() const
{ {
return pViewData->GetDocument()->GetAddressConvention() == formula::FormulaGrammar::CONV_XL_R1C1; return pTabView->GetViewData().GetDocument()->GetAddressConvention() == formula::FormulaGrammar::CONV_XL_R1C1;
} }
SCCOLROW ScColBar::GetPos() const SCCOLROW ScColBar::GetPos() const
{ {
return pViewData->GetPosX(eWhich); return pTabView->GetViewData().GetPosX(eWhich);
} }
sal_uInt16 ScColBar::GetEntrySize( SCCOLROW nEntryNo ) const sal_uInt16 ScColBar::GetEntrySize( SCCOLROW nEntryNo ) const
{ {
ScDocument* pDoc = pViewData->GetDocument(); const ScViewData& rViewData = pTabView->GetViewData();
SCTAB nTab = pViewData->GetTabNo(); ScDocument* pDoc = rViewData.GetDocument();
SCTAB nTab = rViewData.GetTabNo();
if (pDoc->ColHidden(static_cast<SCCOL>(nEntryNo), nTab)) if (pDoc->ColHidden(static_cast<SCCOL>(nEntryNo), nTab))
return 0; return 0;
else else
return (sal_uInt16) ScViewData::ToPixel( pDoc->GetColWidth( static_cast<SCCOL>(nEntryNo), nTab ), pViewData->GetPPTX() ); return (sal_uInt16) ScViewData::ToPixel( pDoc->GetColWidth( static_cast<SCCOL>(nEntryNo), nTab ), rViewData.GetPPTX() );
} }
OUString ScColBar::GetEntryText( SCCOLROW nEntryNo ) const OUString ScColBar::GetEntryText( SCCOLROW nEntryNo ) const
...@@ -95,6 +97,7 @@ OUString ScColBar::GetEntryText( SCCOLROW nEntryNo ) const ...@@ -95,6 +97,7 @@ OUString ScColBar::GetEntryText( SCCOLROW nEntryNo ) const
void ScColBar::SetEntrySize( SCCOLROW nPos, sal_uInt16 nNewSize ) void ScColBar::SetEntrySize( SCCOLROW nPos, sal_uInt16 nNewSize )
{ {
const ScViewData& rViewData = pTabView->GetViewData();
sal_uInt16 nSizeTwips; sal_uInt16 nSizeTwips;
ScSizeMode eMode = SC_SIZE_DIRECT; ScSizeMode eMode = SC_SIZE_DIRECT;
if (nNewSize < 10) nNewSize = 10; // pixels if (nNewSize < 10) nNewSize = 10; // pixels
...@@ -105,9 +108,9 @@ void ScColBar::SetEntrySize( SCCOLROW nPos, sal_uInt16 nNewSize ) ...@@ -105,9 +108,9 @@ void ScColBar::SetEntrySize( SCCOLROW nPos, sal_uInt16 nNewSize )
eMode = SC_SIZE_OPTIMAL; eMode = SC_SIZE_OPTIMAL;
} }
else else
nSizeTwips = (sal_uInt16) ( nNewSize / pViewData->GetPPTX() ); nSizeTwips = (sal_uInt16) ( nNewSize / rViewData.GetPPTX() );
ScMarkData& rMark = pViewData->GetMarkData(); const ScMarkData& rMark = rViewData.GetMarkData();
std::vector<sc::ColRowSpan> aRanges; std::vector<sc::ColRowSpan> aRanges;
if ( rMark.IsColumnMarked( static_cast<SCCOL>(nPos) ) ) if ( rMark.IsColumnMarked( static_cast<SCCOL>(nPos) ) )
...@@ -136,32 +139,33 @@ void ScColBar::SetEntrySize( SCCOLROW nPos, sal_uInt16 nNewSize ) ...@@ -136,32 +139,33 @@ void ScColBar::SetEntrySize( SCCOLROW nPos, sal_uInt16 nNewSize )
aRanges.push_back(sc::ColRowSpan(nPos,nPos)); aRanges.push_back(sc::ColRowSpan(nPos,nPos));
} }
pViewData->GetView()->SetWidthOrHeight(true, aRanges, eMode, nSizeTwips); rViewData.GetView()->SetWidthOrHeight(true, aRanges, eMode, nSizeTwips);
} }
void ScColBar::HideEntries( SCCOLROW nStart, SCCOLROW nEnd ) void ScColBar::HideEntries( SCCOLROW nStart, SCCOLROW nEnd )
{ {
std::vector<sc::ColRowSpan> aRanges(1, sc::ColRowSpan(nStart,nEnd)); std::vector<sc::ColRowSpan> aRanges(1, sc::ColRowSpan(nStart,nEnd));
pViewData->GetView()->SetWidthOrHeight(true, aRanges, SC_SIZE_DIRECT, 0); pTabView->GetViewData().GetView()->SetWidthOrHeight(true, aRanges, SC_SIZE_DIRECT, 0);
} }
void ScColBar::SetMarking( bool bSet ) void ScColBar::SetMarking( bool bSet )
{ {
pViewData->GetMarkData().SetMarking( bSet ); pTabView->GetViewData().GetMarkData().SetMarking( bSet );
if (!bSet) if (!bSet)
{ {
pViewData->GetView()->UpdateAutoFillMark(); pTabView->GetViewData().GetView()->UpdateAutoFillMark();
} }
} }
void ScColBar::SelectWindow() void ScColBar::SelectWindow()
{ {
ScTabViewShell* pViewSh = pViewData->GetViewShell(); const ScViewData& rViewData = pTabView->GetViewData();
ScTabViewShell* pViewSh = rViewData.GetViewShell();
pViewSh->SetActive(); // Appear and SetViewFrame pViewSh->SetActive(); // Appear and SetViewFrame
pViewSh->DrawDeselectAll(); pViewSh->DrawDeselectAll();
ScSplitPos eActive = pViewData->GetActivePart(); ScSplitPos eActive = rViewData.GetActivePart();
if (eWhich==SC_SPLIT_LEFT) if (eWhich==SC_SPLIT_LEFT)
{ {
if (eActive==SC_SPLIT_TOPRIGHT) eActive=SC_SPLIT_TOPLEFT; if (eActive==SC_SPLIT_TOPRIGHT) eActive=SC_SPLIT_TOPLEFT;
...@@ -183,12 +187,13 @@ void ScColBar::SelectWindow() ...@@ -183,12 +187,13 @@ void ScColBar::SelectWindow()
bool ScColBar::IsDisabled() const bool ScColBar::IsDisabled() const
{ {
ScModule* pScMod = SC_MOD(); ScModule* pScMod = SC_MOD();
return pScMod->IsFormulaMode() || pScMod->IsModalMode(); return pScMod->IsModalMode();
} }
bool ScColBar::ResizeAllowed() const bool ScColBar::ResizeAllowed() const
{ {
return !pViewData->HasEditView( pViewData->GetActivePart() ); const ScViewData& rViewData = pTabView->GetViewData();
return !rViewData.HasEditView( rViewData.GetActivePart() );
} }
void ScColBar::DrawInvert( long nDragPosP ) void ScColBar::DrawInvert( long nDragPosP )
...@@ -197,24 +202,25 @@ void ScColBar::DrawInvert( long nDragPosP ) ...@@ -197,24 +202,25 @@ void ScColBar::DrawInvert( long nDragPosP )
Update(); Update();
Invert(aRect); Invert(aRect);
pViewData->GetView()->InvertVertical(eWhich,nDragPosP); pTabView->GetViewData().GetView()->InvertVertical(eWhich,nDragPosP);
} }
OUString ScColBar::GetDragHelp( long nVal ) OUString ScColBar::GetDragHelp( long nVal )
{ {
long nTwips = (long) ( nVal / pViewData->GetPPTX() ); long nTwips = (long) ( nVal / pTabView->GetViewData().GetPPTX() );
return lcl_MetricString( nTwips, ScGlobal::GetRscString(STR_TIP_WIDTH) ); return lcl_MetricString( nTwips, ScGlobal::GetRscString(STR_TIP_WIDTH) );
} }
bool ScColBar::IsLayoutRTL() const // override only for columns bool ScColBar::IsLayoutRTL() const // override only for columns
{ {
return pViewData->GetDocument()->IsLayoutRTL( pViewData->GetTabNo() ); const ScViewData& rViewData = pTabView->GetViewData();
return rViewData.GetDocument()->IsLayoutRTL( rViewData.GetTabNo() );
} }
ScRowBar::ScRowBar( vcl::Window* pParent, ScViewData* pData, ScVSplitPos eWhichPos, ScRowBar::ScRowBar( vcl::Window* pParent, ScVSplitPos eWhichPos,
ScHeaderFunctionSet* pFunc, ScHeaderSelectionEngine* pEng ) : ScHeaderFunctionSet* pFunc, ScHeaderSelectionEngine* pEng,
ScHeaderControl( pParent, pEng, MAXROW+1, true ), ScTabView* pTab ) :
pViewData( pData ), ScHeaderControl( pParent, pEng, MAXROW+1, true, pTab ),
eWhich( eWhichPos ), eWhich( eWhichPos ),
pFuncSet( pFunc ) pFuncSet( pFunc )
{ {
...@@ -227,19 +233,20 @@ ScRowBar::~ScRowBar() ...@@ -227,19 +233,20 @@ ScRowBar::~ScRowBar()
SCCOLROW ScRowBar::GetPos() const SCCOLROW ScRowBar::GetPos() const
{ {
return pViewData->GetPosY(eWhich); return pTabView->GetViewData().GetPosY(eWhich);
} }
sal_uInt16 ScRowBar::GetEntrySize( SCCOLROW nEntryNo ) const sal_uInt16 ScRowBar::GetEntrySize( SCCOLROW nEntryNo ) const
{ {
ScDocument* pDoc = pViewData->GetDocument(); const ScViewData& rViewData = pTabView->GetViewData();
SCTAB nTab = pViewData->GetTabNo(); ScDocument* pDoc = rViewData.GetDocument();
SCTAB nTab = rViewData.GetTabNo();
SCROW nLastRow = -1; SCROW nLastRow = -1;
if (pDoc->RowHidden(nEntryNo, nTab, nullptr, &nLastRow)) if (pDoc->RowHidden(nEntryNo, nTab, nullptr, &nLastRow))
return 0; return 0;
else else
return (sal_uInt16) ScViewData::ToPixel( pDoc->GetOriginalHeight( nEntryNo, return (sal_uInt16) ScViewData::ToPixel( pDoc->GetOriginalHeight( nEntryNo,
nTab ), pViewData->GetPPTY() ); nTab ), rViewData.GetPPTY() );
} }
OUString ScRowBar::GetEntryText( SCCOLROW nEntryNo ) const OUString ScRowBar::GetEntryText( SCCOLROW nEntryNo ) const
...@@ -249,6 +256,7 @@ OUString ScRowBar::GetEntryText( SCCOLROW nEntryNo ) const ...@@ -249,6 +256,7 @@ OUString ScRowBar::GetEntryText( SCCOLROW nEntryNo ) const
void ScRowBar::SetEntrySize( SCCOLROW nPos, sal_uInt16 nNewSize ) void ScRowBar::SetEntrySize( SCCOLROW nPos, sal_uInt16 nNewSize )
{ {
const ScViewData& rViewData = pTabView->GetViewData();
sal_uInt16 nSizeTwips; sal_uInt16 nSizeTwips;
ScSizeMode eMode = SC_SIZE_DIRECT; ScSizeMode eMode = SC_SIZE_DIRECT;
if (nNewSize < 10) nNewSize = 10; // pixels if (nNewSize < 10) nNewSize = 10; // pixels
...@@ -259,9 +267,9 @@ void ScRowBar::SetEntrySize( SCCOLROW nPos, sal_uInt16 nNewSize ) ...@@ -259,9 +267,9 @@ void ScRowBar::SetEntrySize( SCCOLROW nPos, sal_uInt16 nNewSize )
eMode = SC_SIZE_OPTIMAL; eMode = SC_SIZE_OPTIMAL;
} }
else else
nSizeTwips = (sal_uInt16) ( nNewSize / pViewData->GetPPTY() ); nSizeTwips = (sal_uInt16) ( nNewSize / rViewData.GetPPTY() );
ScMarkData& rMark = pViewData->GetMarkData(); const ScMarkData& rMark = rViewData.GetMarkData();
std::vector<sc::ColRowSpan> aRanges; std::vector<sc::ColRowSpan> aRanges;
if ( rMark.IsRowMarked( nPos ) ) if ( rMark.IsRowMarked( nPos ) )
...@@ -290,32 +298,33 @@ void ScRowBar::SetEntrySize( SCCOLROW nPos, sal_uInt16 nNewSize ) ...@@ -290,32 +298,33 @@ void ScRowBar::SetEntrySize( SCCOLROW nPos, sal_uInt16 nNewSize )
aRanges.push_back(sc::ColRowSpan(nPos,nPos)); aRanges.push_back(sc::ColRowSpan(nPos,nPos));
} }
pViewData->GetView()->SetWidthOrHeight(false, aRanges, eMode, nSizeTwips); rViewData.GetView()->SetWidthOrHeight(false, aRanges, eMode, nSizeTwips);
} }
void ScRowBar::HideEntries( SCCOLROW nStart, SCCOLROW nEnd ) void ScRowBar::HideEntries( SCCOLROW nStart, SCCOLROW nEnd )
{ {
std::vector<sc::ColRowSpan> aRange(1, sc::ColRowSpan(nStart,nEnd)); std::vector<sc::ColRowSpan> aRange(1, sc::ColRowSpan(nStart,nEnd));
pViewData->GetView()->SetWidthOrHeight(false, aRange, SC_SIZE_DIRECT, 0); pTabView->GetViewData().GetView()->SetWidthOrHeight(false, aRange, SC_SIZE_DIRECT, 0);
} }
void ScRowBar::SetMarking( bool bSet ) void ScRowBar::SetMarking( bool bSet )
{ {
pViewData->GetMarkData().SetMarking( bSet ); pTabView->GetViewData().GetMarkData().SetMarking( bSet );
if (!bSet) if (!bSet)
{ {
pViewData->GetView()->UpdateAutoFillMark(); pTabView->GetViewData().GetView()->UpdateAutoFillMark();
} }
} }
void ScRowBar::SelectWindow() void ScRowBar::SelectWindow()
{ {
ScTabViewShell* pViewSh = pViewData->GetViewShell(); const ScViewData& rViewData = pTabView->GetViewData();
ScTabViewShell* pViewSh = rViewData.GetViewShell();
pViewSh->SetActive(); // Appear and SetViewFrame pViewSh->SetActive(); // Appear and SetViewFrame
pViewSh->DrawDeselectAll(); pViewSh->DrawDeselectAll();
ScSplitPos eActive = pViewData->GetActivePart(); ScSplitPos eActive = rViewData.GetActivePart();
if (eWhich==SC_SPLIT_TOP) if (eWhich==SC_SPLIT_TOP)
{ {
if (eActive==SC_SPLIT_BOTTOMLEFT) eActive=SC_SPLIT_TOPLEFT; if (eActive==SC_SPLIT_BOTTOMLEFT) eActive=SC_SPLIT_TOPLEFT;
...@@ -337,12 +346,13 @@ void ScRowBar::SelectWindow() ...@@ -337,12 +346,13 @@ void ScRowBar::SelectWindow()
bool ScRowBar::IsDisabled() const bool ScRowBar::IsDisabled() const
{ {
ScModule* pScMod = SC_MOD(); ScModule* pScMod = SC_MOD();
return pScMod->IsFormulaMode() || pScMod->IsModalMode(); return pScMod->IsModalMode();
} }
bool ScRowBar::ResizeAllowed() const bool ScRowBar::ResizeAllowed() const
{ {
return !pViewData->HasEditView( pViewData->GetActivePart() ); const ScViewData& rViewData = pTabView->GetViewData();
return !rViewData.HasEditView( rViewData.GetActivePart() );
} }
void ScRowBar::DrawInvert( long nDragPosP ) void ScRowBar::DrawInvert( long nDragPosP )
...@@ -351,25 +361,27 @@ void ScRowBar::DrawInvert( long nDragPosP ) ...@@ -351,25 +361,27 @@ void ScRowBar::DrawInvert( long nDragPosP )
Update(); Update();
Invert(aRect); Invert(aRect);
pViewData->GetView()->InvertHorizontal(eWhich,nDragPosP); pTabView->GetViewData().GetView()->InvertHorizontal(eWhich,nDragPosP);
} }
OUString ScRowBar::GetDragHelp( long nVal ) OUString ScRowBar::GetDragHelp( long nVal )
{ {
long nTwips = (long) ( nVal / pViewData->GetPPTY() ); long nTwips = (long) ( nVal / pTabView->GetViewData().GetPPTY() );
return lcl_MetricString( nTwips, ScGlobal::GetRscString(STR_TIP_HEIGHT) ); return lcl_MetricString( nTwips, ScGlobal::GetRscString(STR_TIP_HEIGHT) );
} }
SCROW ScRowBar::GetHiddenCount( SCROW nEntryNo ) const // override only for rows SCROW ScRowBar::GetHiddenCount( SCROW nEntryNo ) const // override only for rows
{ {
ScDocument* pDoc = pViewData->GetDocument(); const ScViewData& rViewData = pTabView->GetViewData();
SCTAB nTab = pViewData->GetTabNo(); ScDocument* pDoc = rViewData.GetDocument();
SCTAB nTab = rViewData.GetTabNo();
return pDoc->GetHiddenRowCount( nEntryNo, nTab ); return pDoc->GetHiddenRowCount( nEntryNo, nTab );
} }
bool ScRowBar::IsMirrored() const // override only for rows bool ScRowBar::IsMirrored() const // override only for rows
{ {
return pViewData->GetDocument()->IsLayoutRTL( pViewData->GetTabNo() ); const ScViewData& rViewData = pTabView->GetViewData();
return rViewData.GetDocument()->IsLayoutRTL( rViewData.GetTabNo() );
} }
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -32,6 +32,8 @@ ...@@ -32,6 +32,8 @@
#include "gridmerg.hxx" #include "gridmerg.hxx"
#include "document.hxx" #include "document.hxx"
#include "markdata.hxx" #include "markdata.hxx"
#include "tabview.hxx"
#include "viewdata.hxx"
#define SC_DRAG_MIN 2 #define SC_DRAG_MIN 2
...@@ -45,7 +47,7 @@ ...@@ -45,7 +47,7 @@
#define SC_HDRPAINT_COUNT 7 #define SC_HDRPAINT_COUNT 7
ScHeaderControl::ScHeaderControl( vcl::Window* pParent, SelectionEngine* pSelectionEngine, ScHeaderControl::ScHeaderControl( vcl::Window* pParent, SelectionEngine* pSelectionEngine,
SCCOLROW nNewSize, bool bNewVertical ) : SCCOLROW nNewSize, bool bNewVertical, ScTabView* pTab ) :
Window ( pParent ), Window ( pParent ),
pSelEngine ( pSelectionEngine ), pSelEngine ( pSelectionEngine ),
bVertical ( bNewVertical ), bVertical ( bNewVertical ),
...@@ -58,7 +60,9 @@ ScHeaderControl::ScHeaderControl( vcl::Window* pParent, SelectionEngine* pSelect ...@@ -58,7 +60,9 @@ ScHeaderControl::ScHeaderControl( vcl::Window* pParent, SelectionEngine* pSelect
nDragStart ( 0 ), nDragStart ( 0 ),
nDragPos ( 0 ), nDragPos ( 0 ),
bDragMoved ( false ), bDragMoved ( false ),
bIgnoreMove ( false ) bIgnoreMove ( false ),
bDoneInitRef( false ),
pTabView ( pTab )
{ {
// --- RTL --- no default mirroring for this window, the spreadsheet itself // --- RTL --- no default mirroring for this window, the spreadsheet itself
// is also not mirrored // is also not mirrored
...@@ -656,6 +660,26 @@ void ScHeaderControl::MouseButtonDown( const MouseEvent& rMEvt ) ...@@ -656,6 +660,26 @@ void ScHeaderControl::MouseButtonDown( const MouseEvent& rMEvt )
return; return;
if ( ! rMEvt.IsLeft() ) if ( ! rMEvt.IsLeft() )
return; return;
if ( SC_MOD()->IsFormulaMode() )
{
if( !pTabView )
return;
SCTAB nTab = pTabView->GetViewData().GetTabNo();
if( !rMEvt.IsShift() )
pTabView->DoneRefMode();
bDoneInitRef = true;
if( !bVertical )
{
pTabView->InitRefMode( nHitNo, 0, nTab, SC_REFTYPE_REF );
pTabView->UpdateRef( nHitNo, MAXROW, nTab );
}
else
{
pTabView->InitRefMode( 0, nHitNo, nTab, SC_REFTYPE_REF );
pTabView->UpdateRef( MAXCOL, nHitNo, nTab );
}
return;
}
if ( bIsBorder && ResizeAllowed() ) if ( bIsBorder && ResizeAllowed() )
{ {
nDragNo = nHitNo; nDragNo = nHitNo;
...@@ -714,6 +738,13 @@ void ScHeaderControl::MouseButtonUp( const MouseEvent& rMEvt ) ...@@ -714,6 +738,13 @@ void ScHeaderControl::MouseButtonUp( const MouseEvent& rMEvt )
if ( IsDisabled() ) if ( IsDisabled() )
return; return;
if ( SC_MOD()->IsFormulaMode() )
{
SC_MOD()->EndReference();
bDoneInitRef = false;
return;
}
SetMarking( false ); SetMarking( false );
bIgnoreMove = false; bIgnoreMove = false;
...@@ -767,6 +798,21 @@ void ScHeaderControl::MouseMove( const MouseEvent& rMEvt ) ...@@ -767,6 +798,21 @@ void ScHeaderControl::MouseMove( const MouseEvent& rMEvt )
return; return;
} }
if ( bDoneInitRef && rMEvt.IsLeft() && SC_MOD()->IsFormulaMode() )
{
if( !pTabView )
return;
bool bTmp;
SCCOLROW nHitNo = GetMousePos( rMEvt, bTmp );
SCTAB nTab = pTabView->GetViewData().GetTabNo();
if( !bVertical )
pTabView->UpdateRef( nHitNo, MAXROW, nTab );
else
pTabView->UpdateRef( MAXCOL, nHitNo, nTab );
return;
}
if ( bDragging ) if ( bDragging )
{ {
long nNewPos = bVertical ? rMEvt.GetPosPixel().Y() : rMEvt.GetPosPixel().X(); long nNewPos = bVertical ? rMEvt.GetPosPixel().Y() : rMEvt.GetPosPixel().X();
......
...@@ -1479,11 +1479,11 @@ void ScTabView::UpdateShow() ...@@ -1479,11 +1479,11 @@ void ScTabView::UpdateShow()
pRowOutline[SC_SPLIT_TOP] = VclPtr<ScOutlineWindow>::Create( pFrameWin, SC_OUTLINE_VER, &aViewData, SC_SPLIT_TOPLEFT ); pRowOutline[SC_SPLIT_TOP] = VclPtr<ScOutlineWindow>::Create( pFrameWin, SC_OUTLINE_VER, &aViewData, SC_SPLIT_TOPLEFT );
if (bShowH && bHeader && !pColBar[SC_SPLIT_RIGHT]) if (bShowH && bHeader && !pColBar[SC_SPLIT_RIGHT])
pColBar[SC_SPLIT_RIGHT] = VclPtr<ScColBar>::Create( pFrameWin, &aViewData, SC_SPLIT_RIGHT, pColBar[SC_SPLIT_RIGHT] = VclPtr<ScColBar>::Create( pFrameWin, SC_SPLIT_RIGHT,
&aHdrFunc, pHdrSelEng ); &aHdrFunc, pHdrSelEng, this );
if (bShowV && bHeader && !pRowBar[SC_SPLIT_TOP]) if (bShowV && bHeader && !pRowBar[SC_SPLIT_TOP])
pRowBar[SC_SPLIT_TOP] = VclPtr<ScRowBar>::Create( pFrameWin, &aViewData, SC_SPLIT_TOP, pRowBar[SC_SPLIT_TOP] = VclPtr<ScRowBar>::Create( pFrameWin, SC_SPLIT_TOP,
&aHdrFunc, pHdrSelEng ); &aHdrFunc, pHdrSelEng, this );
// show Windows // show Windows
......
...@@ -85,11 +85,11 @@ void ScTabView::Init() ...@@ -85,11 +85,11 @@ void ScTabView::Init()
pHdrSelEng = new ScHeaderSelectionEngine( pFrameWin, &aHdrFunc ); pHdrSelEng = new ScHeaderSelectionEngine( pFrameWin, &aHdrFunc );
pColBar[SC_SPLIT_LEFT] = VclPtr<ScColBar>::Create( pFrameWin, &aViewData, SC_SPLIT_LEFT, pColBar[SC_SPLIT_LEFT] = VclPtr<ScColBar>::Create( pFrameWin, SC_SPLIT_LEFT,
&aHdrFunc, pHdrSelEng ); &aHdrFunc, pHdrSelEng, this );
pColBar[SC_SPLIT_RIGHT] = nullptr; pColBar[SC_SPLIT_RIGHT] = nullptr;
pRowBar[SC_SPLIT_BOTTOM] = VclPtr<ScRowBar>::Create( pFrameWin, &aViewData, SC_SPLIT_BOTTOM, pRowBar[SC_SPLIT_BOTTOM] = VclPtr<ScRowBar>::Create( pFrameWin, SC_SPLIT_BOTTOM,
&aHdrFunc, pHdrSelEng ); &aHdrFunc, pHdrSelEng, this );
pRowBar[SC_SPLIT_TOP] = nullptr; pRowBar[SC_SPLIT_TOP] = nullptr;
for (i=0; i<2; i++) for (i=0; i<2; i++)
pColOutline[i] = pRowOutline[i] = nullptr; pColOutline[i] = pRowOutline[i] = nullptr;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment