// Listen for the frame being activated.
Reference<frame::XFrame> xFrame (mxController->getFrame()); if (xFrame.is())
xFrame->addFrameActionListener(this);
// Create the border painter.
mpPaneBorderPainter = new PresenterPaneBorderPainter(rxContext);
mpWindowManager->SetPaneBorderPainter(mpPaneBorderPainter);
mxSlideShowController->activate();
Reference<beans::XPropertySet> xProperties (mxSlideShowController, UNO_QUERY); if (xProperties.is())
{
Reference<awt::XWindow> xWindow (
xProperties->getPropertyValue(u"ParentWindow"_ustr), UNO_QUERY); if (xWindow.is())
xWindow->addKeyListener(this);
}
UpdateCurrentSlide(0);
maInstances[mxController->getFrame()] = this;
// Create a URLTransformer.
mxUrlTransformer.set(util::URLTransformer::create(mxComponentContext));
}
// Get the current slide from the slide show controller.
mxCurrentSlide = nullptr;
Reference<container::XIndexAccess> xIndexAccess(mxSlideShowController, UNO_QUERY); try
{
sal_Int32 nSlideIndex = mxSlideShowController->getCurrentSlideIndex() + nOffset; if (mxSlideShowController->isPaused())
nSlideIndex = -1;
sal_Int32 nIndex (0); while (true)
{
sal_Int32 nStartIndex = rTemplate.indexOf('%', nIndex); if (nStartIndex < 0)
{ // Add the remaining part of the string.
sResult.append(rTemplate.subView(nIndex)); break;
} else
{ // Add the part preceding the next %.
sResult.append(rTemplate.subView(nIndex, nStartIndex-nIndex));
// Get the placeholder
++nStartIndex; const sal_Int32 nEndIndex (rTemplate.indexOf('%', nStartIndex+1)); const std::u16string_view sPlaceholder (rTemplate.subView(nStartIndex, nEndIndex-nStartIndex));
nIndex = nEndIndex+1;
// Replace the placeholder with its current value. if (sPlaceholder == sCurrentSlideNumberPlaceholder)
sResult.append(sCurrentSlideNumber); elseif (sPlaceholder == sCurrentSlideNamePlaceholder)
sResult.append(sCurrentSlideName); elseif (sPlaceholder == sSlideCountPlaceholder)
sResult.append(sSlideCount);
}
}
return sResult.makeStringAndClear();
}
}
void PresenterController::UpdatePaneTitles()
{ if ( ! mxSlideShowController.is()) return;
// Get string for slide count. const OUString sSlideCount = OUString::number(mxSlideShowController->getSlideCount());
// Get string for current slide index.
OUString sCurrentSlideNumber (OUString::number(mnCurrentSlideIndex + 1));
// Get name of the current slide.
OUString sCurrentSlideName;
Reference<container::XNamed> xNamedSlide (mxCurrentSlide, UNO_QUERY); if (xNamedSlide.is())
sCurrentSlideName = xNamedSlide->getName();
Reference<beans::XPropertySet> xSlideProperties (mxCurrentSlide, UNO_QUERY); if (xSlideProperties.is())
{ try
{
OUString sName; if (xSlideProperties->getPropertyValue(u"LinkDisplayName"_ustr) >>= sName)
{ // Find out whether the name of the current slide has been // automatically created or has been set by the user. if (sName != sCurrentSlideName)
sCurrentSlideName = sName;
}
} catch (const beans::UnknownPropertyException&)
{
}
}
// Replace the placeholders with their current values. for (auto& rxPane : mpPaneContainer->maPanes)
{
OSL_ASSERT(rxPane != nullptr);
void PresenterController::UpdateViews()
{ // Tell all views about the slides they should display. for (constauto& rxPane : mpPaneContainer->maPanes)
{
Reference<drawing::XDrawView> xDrawView (rxPane->mxView, UNO_QUERY); if (xDrawView.is())
xDrawView->setCurrentPage(mxCurrentSlide);
}
}
void PresenterController::CheckNextSlideUpdate(const Reference<drawing::XShape>& rxShape)
{ if (!mxNextSlide) return;
// check if shape is member of page or it's masterPage if(IsXShapeAssociatedWithXDrawPage(rxShape, mxNextSlide))
UpdateViews();
}
void SAL_CALL PresenterController::notifyConfigurationChange ( const ConfigurationChangeEvent& rEvent)
{ if (rBHelper.bDisposed || rBHelper.bInDispose)
{ throw lang::DisposedException (
u"PresenterController object has already been disposed"_ustr, static_cast<uno::XWeak*>(this));
}
sal_Int32 nType (0); if ( ! (rEvent.UserData >>= nType)) return;
switch (nType)
{ case ResourceActivationEventType: if (rEvent.ResourceId->compareTo(mxMainPaneId) == 0)
{
InitializeMainPane(Reference<XPane>(rEvent.ResourceObject,UNO_QUERY));
} elseif (rEvent.ResourceId->isBoundTo(mxMainPaneId,AnchorBindingMode_DIRECT))
{ // A pane bound to the main pane has been created and is // stored in the pane container.
Reference<XPane> xPane (rEvent.ResourceObject,UNO_QUERY); if (xPane.is())
{
mpPaneContainer->FindPaneId(xPane->getResourceId());
}
} elseif (rEvent.ResourceId->isBoundTo(mxMainPaneId,AnchorBindingMode_INDIRECT))
{ // A view bound to one of the panes has been created and is // stored in the pane container along with its pane.
Reference<XView> xView (rEvent.ResourceObject,UNO_QUERY); if (xView.is())
{
mpPaneContainer->StoreView(xView);
UpdateViews();
mpWindowManager->NotifyViewCreation(xView);
}
} break;
case ResourceDeactivationEventType: if (rEvent.ResourceId->isBoundTo(mxMainPaneId,AnchorBindingMode_INDIRECT))
{ // If this is a view then remove it from the pane container.
Reference<XView> xView (rEvent.ResourceObject,UNO_QUERY); if (xView.is())
{
PresenterPaneContainer::SharedPaneDescriptor pDescriptor(
mpPaneContainer->RemoveView(xView));
// A possibly opaque view has been removed. Update() // updates the clip polygon.
mpWindowManager->Update(); // Request the repainting of the area previously // occupied by the view. if (pDescriptor)
GetPaintManager()->Invalidate(pDescriptor->mxBorderWindow);
}
} break;
case ConfigurationUpdateEndEventType: if (mpAccessibleObject.is())
mpAccessibleObject->UpdateAccessibilityHierarchy();
UpdateCurrentSlide(0); break;
}
}
case awt::Key::PAGEDOWN: if (mxSlideShowController.is())
{ if (rEvent.Modifiers == awt::KeyModifier::MOD2)
mxSlideShowController->gotoNextSlide(); else
mxSlideShowController->gotoNextEffect();
} break;
case awt::Key::RIGHT: case awt::Key::SPACE: case awt::Key::DOWN: case awt::Key::XF86FORWARD: if (mxSlideShowController.is())
{
mxSlideShowController->gotoNextEffect();
} break;
case awt::Key::PAGEUP: if (mxSlideShowController.is())
{ if (rEvent.Modifiers == awt::KeyModifier::MOD2)
mxSlideShowController->gotoPreviousSlide(); else
mxSlideShowController->gotoPreviousEffect();
} break;
case awt::Key::LEFT: case awt::Key::UP: case awt::Key::BACKSPACE: case awt::Key::XF86BACK: if (mxSlideShowController.is())
{
mxSlideShowController->gotoPreviousEffect();
} break;
case awt::Key::P: if (mxSlideShowController.is())
{ bool bPenEnabled = mxSlideShowController->getUsePen();
mxSlideShowController->setUsePen( !bPenEnabled );
} break;
// tdf#149351 Ctrl+A disables pointer as pen mode case awt::Key::A: if (mxSlideShowController.is())
{ if (rEvent.Modifiers == awt::KeyModifier::MOD1)
{
mxSlideShowController->setUsePen( false );
}
} break;
case awt::Key::E: if (mxSlideShowController.is())
{
mxSlideShowController->setEraseAllInk( true );
} break;
case awt::Key::HOME: if (mxSlideShowController.is())
{
mxSlideShowController->gotoFirstSlide();
} break;
case awt::Key::END: if (mxSlideShowController.is())
{
mxSlideShowController->gotoLastSlide();
} break;
case awt::Key::W: case awt::Key::COMMA: if (mxSlideShowController.is())
{ if (mxSlideShowController->isPaused())
mxSlideShowController->resume(); else
mxSlideShowController->blankScreen(0x00ffffff);
} break;
case awt::Key::B: case awt::Key::POINT: if (mxSlideShowController.is())
{ if (mxSlideShowController->isPaused())
mxSlideShowController->resume(); else
mxSlideShowController->blankScreen(0x00000000);
} break;
case awt::Key::NUM0: case awt::Key::NUM1: case awt::Key::NUM2: case awt::Key::NUM3: case awt::Key::NUM4: case awt::Key::NUM5: case awt::Key::NUM6: case awt::Key::NUM7: case awt::Key::NUM8: case awt::Key::NUM9:
HandleNumericKeyPress(rEvent.KeyCode-awt::Key::NUM0, rEvent.Modifiers); break;
case awt::Key::RETURN: if (mnPendingSlideNumber > 0)
{ if (mxSlideShowController.is())
mxSlideShowController->gotoSlideIndex(mnPendingSlideNumber - 1);
mnPendingSlideNumber = -1;
} else
{ if (mxSlideShowController.is())
mxSlideShowController->gotoNextEffect();
}
break;
case awt::Key::F1: // Toggle the help view. if (mpWindowManager)
{ if (mpWindowManager->GetViewMode() != PresenterWindowManager::VM_Help)
mpWindowManager->SetViewMode(PresenterWindowManager::VM_Help); else
mpWindowManager->SetHelpViewState(false);
}
break;
default: // Tell all views about the unhandled key event. for (constauto& rxPane : mpPaneContainer->maPanes)
{ if ( ! rxPane->mbIsActive) continue;
// Main pane has been created and is now observed by the window // manager.
mpWindowManager->SetParentPane(rxPane);
mpWindowManager->SetTheme(mpTheme);
if (mpPaneBorderPainter)
mpPaneBorderPainter->SetTheme(mpTheme);
// Add key listener
mxMainWindow = rxPane->getWindow(); if (mxMainWindow.is())
{
mxMainWindow->addKeyListener(this);
mxMainWindow->addMouseListener(this);
}
Reference<XPane2> xPane2 (rxPane, UNO_QUERY); if (xPane2.is())
xPane2->setVisible(true);
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.