/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * 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/.
*/
// TODO: This is a workaround for the view going blank when overflow the current view with text. // The extra faulty draw call still happens.. Should get rid of that before removing this.
VirtVScrollHdl(mpVerticalScrollBar);
}
void NotesPanelViewShell::ArrangeGUIElements()
{ // Retrieve the current size (thickness) of the scroll bars. That is // the width of the vertical and the height of the horizontal scroll // bar. int nScrollBarSize = GetParentWindow()->GetSettings().GetStyleSettings().GetScrollBarSize();
maScrBarWH = Size(nScrollBarSize, nScrollBarSize);
ViewShell::ArrangeGUIElements();
::sd::Window* pWindow = mpContentWindow.get(); if (pWindow == nullptr) return;
std::shared_ptr<ViewShell> pMainViewShell = GetViewShellBase().GetMainViewShell(); if (pMainViewShell)
pCurrentPage = pMainViewShell->GetActualPage();
if (!pCurrentPage) return nullptr;
switch (pCurrentPage->GetPageKind())
{ case PageKind::Standard: return GetDoc()->GetSdPage((pCurrentPage->GetPageNum() - 1) >> 1, PageKind::Notes); case PageKind::Notes: return pCurrentPage; case PageKind::Handout: default: return nullptr;
}
}
css::uno::Reference<css::drawing::XDrawSubController> NotesPanelViewShell::CreateSubController()
{ // SubController appears is only relevant for MainViewShell // NotesPanel isn't meant as a MainViewShell return {};
}
/** * Activate(): during the first invocation the fields get updated
*/ void NotesPanelViewShell::Activate(bool bIsMDIActivate)
{ if (!mbInitialized)
{
mbInitialized = true;
SfxRequest aRequest(SID_EDIT_OUTLINER, SfxCallMode::SLOT, GetDoc()->GetItemPool());
FuPermanent(aRequest);
}
switch (nSlotId)
{ case SID_STYLE_FAMILY2: case SID_STYLE_FAMILY3:
{
rSet.DisableItem(nWhich);
} break;
case SID_STYLE_FAMILY5:
{
SfxStyleSheet* pStyleSheet = mpNotesPanelView->GetOutlinerView()->GetStyleSheet();
if (pStyleSheet)
{
pStyleSheet = static_cast<SdStyleSheet*>(pStyleSheet)->GetPseudoStyleSheet();
if (pStyleSheet)
{
SfxTemplateItem aItem(nWhich, pStyleSheet->GetName());
aAllSet.Put(aItem);
}
}
if (!pStyleSheet)
{
SfxTemplateItem aItem(nWhich, OUString());
aAllSet.Put(aItem);
}
} break;
case SID_STYLE_EDIT:
{
std::unique_ptr<SfxUInt16Item> pFamilyItem;
GetViewFrame()->GetBindings().QueryState(SID_STYLE_FAMILY, pFamilyItem); if (pFamilyItem
&& static_cast<SfxStyleFamily>(pFamilyItem->GetValue())
== SfxStyleFamily::Pseudo)
{
rSet.DisableItem(nWhich);
}
} break;
case SID_STYLE_UPDATE_BY_EXAMPLE:
{
OutlinerView* pOV = mpNotesPanelView->GetOutlinerView();
ESelection aESel(pOV->GetSelection());
if (aESel.HasRange()) // spanned selection, i.e. StyleSheet and/or // attribution not necessarily unique
rSet.DisableItem(nWhich);
} break;
case SID_STYLE_NEW: case SID_STYLE_DELETE: case SID_STYLE_HIDE: case SID_STYLE_SHOW: case SID_STYLE_NEW_BY_EXAMPLE: case SID_STYLE_WATERCAN:
{
rSet.DisableItem(nWhich);
} break; case FN_NUM_BULLET_ON: case FN_NUM_NUMBERING_ON:
{ bool bIsBullet = false; bool bIsNumbering = false;
OutlinerView* pOlView = mpNotesPanelView->GetTextEditOutlinerView(); if (pOlView)
{
pOlView->IsBulletOrNumbering(bIsBullet, bIsNumbering);
}
rSet.Put(SfxBoolItem(FN_NUM_BULLET_ON, bIsBullet));
rSet.Put(SfxBoolItem(FN_NUM_NUMBERING_ON, bIsNumbering));
} break;
void NotesPanelViewShell::GetState(SfxItemSet& rSet)
{ // Iterate over all requested items in the set.
SfxWhichIter aIter(rSet);
sal_uInt16 nWhich = aIter.FirstWhich(); while (nWhich)
{ switch (nWhich)
{ case FID_SEARCH_NOW: case SID_SEARCH_ITEM: case SID_SEARCH_OPTIONS: // Call common (old) implementation in the document shell.
GetDocSh()->GetState(rSet); break; default:
SAL_WARN("sd", "NotesPanelViewShell::GetState(): can not handle which id " << nWhich); break;
}
nWhich = aIter.NextWhich();
}
}
case SID_PRESENTATION: case SID_PRESENTATION_CURRENT_SLIDE: case SID_REHEARSE_TIMINGS:
{
slideshowhelp::ShowSlideShow(rReq, *GetDoc());
Cancel();
rReq.Done();
} break;
case SID_STYLE_EDIT: case SID_STYLE_UPDATE_BY_EXAMPLE:
{ if (rReq.GetArgs())
{
SetCurrentFunction(FuTemplate::Create(*this, GetActiveWindow(),
mpNotesPanelView.get(), *GetDoc(), rReq));
Cancel();
}
case FN_INSERT_SOFT_HYPHEN: case FN_INSERT_HARDHYPHEN: case FN_INSERT_HARD_SPACE: case FN_INSERT_NNBSP: case SID_INSERT_RLM: case SID_INSERT_LRM: case SID_INSERT_WJ: case SID_INSERT_ZWSP: case SID_CHARMAP:
{
SetCurrentFunction(FuBullet::Create(*this, GetActiveWindow(), mpNotesPanelView.get(),
*GetDoc(), rReq));
Cancel();
} break;
case FN_NUM_BULLET_ON:
{ // The value (sal_uInt16)0xFFFF means set bullet on/off.
SfxUInt16Item aItem(FN_SVX_SET_BULLET, sal_uInt16(0xFFFF));
GetViewFrame()->GetDispatcher()->ExecuteList(FN_SVX_SET_BULLET, SfxCallMode::RECORD,
{ &aItem });
} break;
case FN_NUM_NUMBERING_ON:
{ // The value (sal_uInt16)0xFFFF means set bullet on/off.
SfxUInt16Item aItem(FN_SVX_SET_NUMBER, sal_uInt16(0xFFFF));
GetViewFrame()->GetDispatcher()->ExecuteList(FN_SVX_SET_NUMBER, SfxCallMode::RECORD,
{ &aItem });
} break;
case SID_OUTLINE_BULLET: case FN_SVX_SET_BULLET: case FN_SVX_SET_NUMBER:
{
SetCurrentFunction(FuBulletAndPosition::Create(
*this, GetActiveWindow(), mpNotesPanelView.get(), *GetDoc(), rReq));
Cancel();
SfxBindings& rBindings = GetViewFrame()->GetBindings();
rBindings.Invalidate(FN_NUM_BULLET_ON);
rBindings.Invalidate(FN_NUM_NUMBERING_ON);
} break;
case SID_INSERT_FLD_DATE_FIX: case SID_INSERT_FLD_DATE_VAR: case SID_INSERT_FLD_TIME_FIX: case SID_INSERT_FLD_TIME_VAR: case SID_INSERT_FLD_AUTHOR: case SID_INSERT_FLD_PAGE: case SID_INSERT_FLD_PAGE_TITLE: case SID_INSERT_FLD_PAGES: case SID_INSERT_FLD_FILE:
{
std::unique_ptr<SvxFieldItem> pFieldItem;
case SID_DRAWINGMODE: case SID_SLIDE_MASTER_MODE: case SID_NOTES_MODE: case SID_NOTES_MASTER_MODE: case SID_HANDOUT_MASTER_MODE: case SID_SLIDE_SORTER_MODE: case SID_OUTLINE_MODE:
framework::FrameworkHelper::Instance(GetViewShellBase())
->HandleModeChangeSlot(nSlot, rReq);
rReq.Done(); break;
case SID_RULER:
SetRuler(!HasRuler());
Invalidate(SID_RULER);
rReq.Done(); break;
case SID_ZOOM_PREV:
{ if (mpZoomList->IsPreviousPossible())
{
SetZoomRect(mpZoomList->GetPreviousZoomRect());
}
rReq.Done();
} break;
case SID_ZOOM_NEXT:
{ if (mpZoomList->IsNextPossible())
{
SetZoomRect(mpZoomList->GetNextZoomRect());
}
rReq.Done();
} break;
case SID_AUTOSPELL_CHECK:
{
GetDoc()->SetOnlineSpell(!GetDoc()->GetOnlineSpell());
rReq.Done();
} break;
case SID_TRANSLITERATE_SENTENCE_CASE: case SID_TRANSLITERATE_TITLE_CASE: case SID_TRANSLITERATE_TOGGLE_CASE: case SID_TRANSLITERATE_UPPER: case SID_TRANSLITERATE_LOWER: case SID_TRANSLITERATE_HALFWIDTH: case SID_TRANSLITERATE_FULLWIDTH: case SID_TRANSLITERATE_HIRAGANA: case SID_TRANSLITERATE_KATAKANA:
{
OutlinerView* pOLV = mpNotesPanelView ? mpNotesPanelView->GetOutlinerView() : nullptr; if (pOLV)
{
TransliterationFlags nType = TransliterationFlags::NONE;
switch (nSlot)
{ case SID_TRANSLITERATE_SENTENCE_CASE:
nType = TransliterationFlags::SENTENCE_CASE; break; case SID_TRANSLITERATE_TITLE_CASE:
nType = TransliterationFlags::TITLE_CASE; break; case SID_TRANSLITERATE_TOGGLE_CASE:
nType = TransliterationFlags::TOGGLE_CASE; break; case SID_TRANSLITERATE_UPPER:
nType = TransliterationFlags::LOWERCASE_UPPERCASE; break; case SID_TRANSLITERATE_LOWER:
nType = TransliterationFlags::UPPERCASE_LOWERCASE; break; case SID_TRANSLITERATE_HALFWIDTH:
nType = TransliterationFlags::FULLWIDTH_HALFWIDTH; break; case SID_TRANSLITERATE_FULLWIDTH:
nType = TransliterationFlags::HALFWIDTH_FULLWIDTH; break; case SID_TRANSLITERATE_HIRAGANA:
nType = TransliterationFlags::KATAKANA_HIRAGANA; break; case SID_TRANSLITERATE_KATAKANA:
nType = TransliterationFlags::HIRAGANA_KATAKANA; break;
}
pOLV->TransliterateText(nType);
}
rReq.Done();
bPreviewState = true;
} break;
// added Undo/Redo handling case SID_UNDO:
{
ImpSidUndo(rReq);
} break; case SID_REDO:
{
ImpSidRedo(rReq);
} break;
void NotesPanelViewShell::MouseButtonUp(const MouseEvent& rMEvt, ::sd::Window* pWin)
{ // first the base classes
ViewShell::MouseButtonUp(rMEvt, pWin);
OutlinerView* pOLV = mpNotesPanelView->GetOutlinerView();
Point aPos(rCEvt.GetMousePosPixel());
if (pOLV && pOLV->IsWrongSpelledWordAtPos(aPos))
{ // Popup for Online-Spelling now handled by DrawDocShell
Link<SpellCallbackInfo&, void> aLink
= LINK(GetDocSh(), DrawDocShell, OnlineSpellCallback);
bool FuNotesPane::KeyInput(const KeyEvent& rKEvt)
{
sal_uInt16 nCode = rKEvt.GetKeyCode().GetCode(); switch (nCode)
{ case KEY_PAGEUP: case KEY_PAGEDOWN:
{ // do not consume the input and let Accelerators handle Ctrl+PgUp/PgDown if (rKEvt.GetKeyCode().IsMod1()) returnfalse; break;
} default: break;
} return FuSimpleOutlinerText::KeyInput(rKEvt);
}
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.