ScRangeList aRangesToMark;
ScAddress aCurPos = rView.GetCurPos();
size_t ListSize = rRanges.size(); for ( size_t i = 0; i < ListSize; ++i )
{ const ScRange & r = rRanges[i]; // Collect only those ranges that are on the same sheet as the current // cursor. if (r.aStart.Tab() == aCurPos.Tab())
aRangesToMark.push_back(r);
}
if (aRangesToMark.empty()) return;
// Jump to the first range of all precedent ranges. const ScRange & r = aRangesToMark.front();
lcl_jumpToRange(r, &rView, rDocSh.GetDocument());
ListSize = aRangesToMark.size(); for ( size_t i = 0; i < ListSize; ++i )
{
MarkRange(aRangesToMark[i], false, true);
}
}
if (aRefTokens.empty()) // No precedents found. Nothing to do. return;
ScTokenRef p = aRefTokens.front(); if (ScRefTokenHelper::isExternalRef(p))
{ // This is external. Open the external document if available, and // jump to the destination.
ScGlobal::OpenURL(sUrl, OUString());
} return;
} else
{
ScRange aRange;
ScRefTokenHelper::getRangeFromToken(&rDoc, aRange, p, aCurPos); if (aRange.aStart.Tab() != aCurPos.Tab())
{ // The first precedent range is on a different sheet. Jump to it // immediately and forget the rest.
lcl_jumpToRange(aRange, &rView, rDoc); return;
}
}
if (bInputMode)
{ double fVal = 0.0;
sal_uInt32 nFormat = 0; switch (nReqFmt)
{ case SvNumFormatType::DATE:
{
Date aActDate( Date::SYSTEM );
fVal = aActDate - pFormatter->GetNullDate(); if (nCurNumFormatType == SvNumFormatType::DATE)
nFormat = nCurNumFormat;
} break; case SvNumFormatType::TIME:
{
tools::Time aActTime( tools::Time::SYSTEM );
fVal = aActTime.GetTimeInDays(); if (nCurNumFormatType == SvNumFormatType::TIME)
nFormat = nCurNumFormat;
} break; default:
SAL_WARN("sc.ui","unhandled current date/time request");
nReqFmt = SvNumFormatType::DATETIME;
[[fallthrough]]; case SvNumFormatType::DATETIME:
{
DateTime aActDateTime( DateTime::SYSTEM );
fVal = DateTime::Sub( aActDateTime, DateTime( pFormatter->GetNullDate())); if (nCurNumFormatType == SvNumFormatType::DATETIME)
nFormat = nCurNumFormat;
} break;
}
if (!nFormat)
{ const LanguageType nLang = (pCurNumFormatEntry ? pCurNumFormatEntry->GetLanguage() : ScGlobal::eLnge);
nFormat = pFormatter->GetStandardFormat( nReqFmt, nLang); // This would return a more precise format with seconds and 100th // seconds for a time request. //nFormat = pFormatter->GetStandardFormat( fVal, nFormat, nReqFmt, nLang);
}
OUString aString; const Color* pColor;
pFormatter->GetOutputString( fVal, nFormat, aString, &pColor);
pInputHdl->DataChanging();
EditView* pTopView = pInputHdl->GetTopView(); if (pTopView)
pTopView->InsertText( aString);
EditView* pTableView = pInputHdl->GetTableView(); if (pTableView)
pTableView->InsertText( aString);
pInputHdl->DataChanged();
} else
{ // Clear "Enter pastes" mode.
rViewData.SetPasteMode( ScPasteFlags::NONE ); // Clear CopySourceOverlay in each window of a split/frozen tabview.
rViewData.GetViewShell()->UpdateCopySourceOverlay();
bool bForceReqFmt = false; constdouble fCell = rDoc.GetValue( aCurPos); // Combine requested date/time stamp with existing cell time/date, if any. switch (nReqFmt)
{ case SvNumFormatType::DATE: switch (nCurNumFormatType)
{ case SvNumFormatType::TIME: // An empty cell formatted as time (or 00:00 time) shall // not result in the current date with 00:00 time, but only // in current date. if (fCell != 0.0)
nReqFmt = SvNumFormatType::DATETIME; break; case SvNumFormatType::DATETIME:
{ // Force to only date if the existing date+time is the // current date. This way inserting current date twice // on an existing date+time cell can be used to force // date, which otherwise would only be possible by // applying a date format. double fDate = rtl::math::approxFloor( fCell); if (fDate == (Date( Date::SYSTEM) - pFormatter->GetNullDate()))
bForceReqFmt = true;
} break; default: break;
} break; case SvNumFormatType::TIME: switch (nCurNumFormatType)
{ case SvNumFormatType::DATE: // An empty cell formatted as date shall not result in the // null date and current time, but only in current time. if (fCell != 0.0)
nReqFmt = SvNumFormatType::DATETIME; break; case SvNumFormatType::DATETIME: // Requesting current time on an empty date+time cell // inserts both current date+time. if (fCell == 0.0)
nReqFmt = SvNumFormatType::DATETIME; else
{ // Add current time to an existing date+time where time is // zero and date is current date, else force time only. double fDate = rtl::math::approxFloor( fCell); double fTime = fCell - fDate; if (fTime == 0.0 && fDate == (Date( Date::SYSTEM) - pFormatter->GetNullDate()))
nReqFmt = SvNumFormatType::DATETIME; else
bForceReqFmt = true;
} break; default: break;
} break; default:
SAL_WARN("sc.ui","unhandled current date/time request");
nReqFmt = SvNumFormatType::DATETIME;
[[fallthrough]]; case SvNumFormatType::DATETIME: break;
} double fVal = 0.0; switch (nReqFmt)
{ case SvNumFormatType::DATE:
{
Date aActDate( Date::SYSTEM );
fVal = aActDate - pFormatter->GetNullDate();
} break; case SvNumFormatType::TIME:
{
tools::Time aActTime( tools::Time::SYSTEM );
fVal = aActTime.GetTimeInDays();
} break; case SvNumFormatType::DATETIME: switch (nCurNumFormatType)
{ case SvNumFormatType::DATE:
{ double fDate = rtl::math::approxFloor( fCell);
tools::Time aActTime( tools::Time::SYSTEM );
fVal = fDate + aActTime.GetTimeInDays();
} break; case SvNumFormatType::TIME:
{ double fTime = fCell - rtl::math::approxFloor( fCell);
Date aActDate( Date::SYSTEM );
fVal = (aActDate - pFormatter->GetNullDate()) + fTime;
} break; default:
{
DateTime aActDateTime( DateTime::SYSTEM );
fVal = DateTime::Sub( aActDateTime, DateTime( pFormatter->GetNullDate()));
}
} break; default: break;
// Set the new cell format only when it differs from the current cell // format type. Preserve a date+time format unless we force a format // through. if (bForceReqFmt || (nReqFmt != nCurNumFormatType && nCurNumFormatType != SvNumFormatType::DATETIME))
SetNumberFormat(nReqFmt); else
rViewData.UpdateInputHandler(); // update input bar with new value
pUndoMgr->LeaveListAction();
}
}
void ScViewFunc::ShowNote( bool bShow )
{ if( bShow )
HideNoteOverlay(); const ScViewData& rViewData = GetViewData();
ScAddress aPos( rViewData.GetCurX(), rViewData.GetCurY(), rViewData.GetTabNo() ); // show note moved to ScDocFunc, to be able to use it in notesuno.cxx
rViewData.GetDocShell().GetDocFunc().ShowNote( aPos, bShow );
}
void ScViewFunc::EditNote()
{ // HACK: If another text object is selected, make sure it gets unselected if (FuText* pOldFuText = dynamic_cast<FuText*>(GetDrawFuncPtr()))
pOldFuText->KeyInput(KeyEvent(0, vcl::KeyCode(KEY_ESCAPE)));
// start drawing undo to catch undo action for insertion of the caption object
rDocSh.MakeDrawLayer();
ScDrawLayer* pDrawLayer = rDoc.GetDrawLayer();
pDrawLayer->BeginCalcUndo(true); // generated undo action is processed in FuText::StopEditMode
// get existing note or create a new note (including caption drawing object)
ScPostIt* pNote = rDoc.GetOrCreateNote( aPos ); if(!pNote) return;
// hide temporary note caption
HideNoteOverlay(); // show caption object without changing internal visibility state
pNote->ShowCaptionTemp( aPos );
/* Drawing object has been created in ScDocument::GetOrCreateNote() or inScPostIt::ShowCaptionTemp(),soScPostIt::GetCaption()should
return a caption object. */
SdrCaptionObj* pCaption = pNote->GetCaption(); if( !pCaption ) return;
if ( ScDrawView* pScDrawView = GetScDrawView() )
pScDrawView->SyncForGrid( pCaption );
// activate object (as in FuSelection::TestComment)
GetViewData().GetDispatcher().Execute( SID_DRAW_NOTEEDIT, SfxCallMode::SYNCHRON | SfxCallMode::RECORD ); // now get the created FuText and set into EditMode
FuText* pFuText = dynamic_cast<FuText*>(GetDrawFuncPtr()); if (pFuText)
{
ScrollToObject( pCaption ); // make object fully visible
pFuText->SetInEditMode( pCaption );
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.