Kaydet (Commit) 046be649 authored tarafından Miklos Vajna's avatar Miklos Vajna

sd tiled rendering: support turning an editeng selection into a table one

With this, it's possible to drag the selection handle of an editeng
selection in an Impress table and drag it outside the table cell to
create an Impress table selection. Some unexpected graphic selection
still appears, though.

Change-Id: Ia7b36036ce2bda5cca570e8b6075238d5167090f
üst 32cfef5c
...@@ -94,7 +94,7 @@ public: ...@@ -94,7 +94,7 @@ public:
SVX_DLLPRIVATE virtual bool hasSelectedCells() const SAL_OVERRIDE { return mbCellSelectionMode || mpView->IsTextEdit(); } SVX_DLLPRIVATE virtual bool hasSelectedCells() const SAL_OVERRIDE { return mbCellSelectionMode || mpView->IsTextEdit(); }
/// @see sdr::SelectionController::setCursorLogicPosition(). /// @see sdr::SelectionController::setCursorLogicPosition().
SVX_DLLPRIVATE virtual void setCursorLogicPosition(const Point& rPosition, bool bPoint) SAL_OVERRIDE; SVX_DLLPRIVATE virtual bool setCursorLogicPosition(const Point& rPosition, bool bPoint) SAL_OVERRIDE;
void getSelectedCells( CellPos& rFirstPos, CellPos& rLastPos ); void getSelectedCells( CellPos& rFirstPos, CellPos& rLastPos );
void setSelectedCells( const CellPos& rFirstPos, const CellPos& rLastPos ); void setSelectedCells( const CellPos& rFirstPos, const CellPos& rLastPos );
......
...@@ -72,7 +72,7 @@ public: ...@@ -72,7 +72,7 @@ public:
/// This is a table object, and one or more of its cells are selected. /// This is a table object, and one or more of its cells are selected.
virtual bool hasSelectedCells() const; virtual bool hasSelectedCells() const;
/// Allows adjusting the point or mark of the selection to a document coordinate. /// Allows adjusting the point or mark of the selection to a document coordinate.
virtual void setCursorLogicPosition(const Point& rPosition, bool bPoint); virtual bool setCursorLogicPosition(const Point& rPosition, bool bPoint);
}; };
} }
......
...@@ -536,17 +536,14 @@ void ViewShell::SetCursorLogicPosition(const Point& rPosition, bool bPoint, bool ...@@ -536,17 +536,14 @@ void ViewShell::SetCursorLogicPosition(const Point& rPosition, bool bPoint, bool
{ {
if (SdrView* pSdrView = GetView()) if (SdrView* pSdrView = GetView())
{ {
if (pSdrView->GetTextEditObject()) rtl::Reference<sdr::SelectionController> xSelectionController(GetView()->getSelectionController());
if (!xSelectionController.is() || !xSelectionController->setCursorLogicPosition(rPosition, bPoint))
{ {
EditView& rEditView = pSdrView->GetTextEditOutlinerView()->GetEditView(); if (pSdrView->GetTextEditObject())
rEditView.SetCursorLogicPosition(rPosition, bPoint, bClearMark); {
} EditView& rEditView = pSdrView->GetTextEditOutlinerView()->GetEditView();
else rEditView.SetCursorLogicPosition(rPosition, bPoint, bClearMark);
{ }
// No text edit object, then try to adjust table selection.
rtl::Reference<sdr::SelectionController> xSelectionController(GetView()->getSelectionController());
if (xSelectionController.is())
xSelectionController->setCursorLogicPosition(rPosition, bPoint);
} }
} }
} }
......
...@@ -105,8 +105,9 @@ bool SelectionController::hasSelectedCells() const ...@@ -105,8 +105,9 @@ bool SelectionController::hasSelectedCells() const
return false; return false;
} }
void SelectionController::setCursorLogicPosition(const Point& /*rPosition*/, bool /*bPoint*/) bool SelectionController::setCursorLogicPosition(const Point& /*rPosition*/, bool /*bPoint*/)
{ {
return false;
} }
} }
......
...@@ -3152,21 +3152,31 @@ bool SvxTableController::isColumnHeader() ...@@ -3152,21 +3152,31 @@ bool SvxTableController::isColumnHeader()
return aSettings.mbUseFirstColumn; return aSettings.mbUseFirstColumn;
} }
void SvxTableController::setCursorLogicPosition(const Point& rPosition, bool bPoint) bool SvxTableController::setCursorLogicPosition(const Point& rPosition, bool bPoint)
{ {
if (mxTableObj->GetObjIdentifier() != OBJ_TABLE) if (mxTableObj->GetObjIdentifier() != OBJ_TABLE)
return; return false;
SdrTableObj* pTableObj = static_cast<SdrTableObj*>(mxTableObj.get()); SdrTableObj* pTableObj = static_cast<SdrTableObj*>(mxTableObj.get());
CellPos aCellPos; CellPos aCellPos;
if (pTableObj->CheckTableHit(rPosition, aCellPos.mnCol, aCellPos.mnRow, 0) != SDRTABLEHIT_NONE) if (pTableObj->CheckTableHit(rPosition, aCellPos.mnCol, aCellPos.mnRow, 0) != SDRTABLEHIT_NONE)
{ {
if (bPoint) // Position is a table cell.
maCursorLastPos = aCellPos; if (mbCellSelectionMode)
else {
maCursorFirstPos = aCellPos; // We have a table selection already: adjust the point or the mark.
mpView->MarkListHasChanged(); if (bPoint)
setSelectedCells(maCursorFirstPos, aCellPos);
else
setSelectedCells(aCellPos, maCursorLastPos);
return true;
}
else if (aCellPos != maMouseDownPos)
// No selection, but rPosition is at an other cell: start table selection.
StartSelection(maMouseDownPos);
} }
return false;
} }
} } } }
......
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