/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * 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/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
if (nNewId == SID_INSERT_FRAME) // from Tbx button
nNewId = SID_DRAW_TEXT;
// CTRL-SID_OBJECT_SELECT is used to select the first object, // but not if SID_OBJECT_SELECT is the result of clicking a create function again, // so this must be tested before changing nNewId below. bool bSelectFirst = ( nNewId == SID_OBJECT_SELECT && (rReq.GetModifier() & KEY_MOD1) );
bool bEx = IsDrawSelMode(); if ( rReq.GetModifier() & KEY_MOD1 )
{ // always allow keyboard selection also on background layer // also allow creation of default objects if the same object type // was already active
bEx = true;
} elseif ( nNewId == nDrawSfxId && ( nNewId != SID_FM_CREATE_CONTROL ||
eNewFormObjKind == eFormObjKind || eNewFormObjKind == SdrObjKind::NONE ) && !bSwitchCustom )
{ // #i52871# if a different custom shape is selected, the slot id can be the same, // so the custom shape type string has to be compared, too.
// SID_FM_CREATE_CONTROL with eNewFormObjKind==OBJ_NONE (without parameter) comes // from FuConstruct::SimpleMouseButtonUp when deactivating // Execute for the form shell, to deselect the controller if ( nNewId == SID_FM_CREATE_CONTROL )
{
GetViewData().GetDispatcher().Execute(SID_FM_LEAVE_CREATE);
GetViewFrame().GetBindings().InvalidateAll(false); //! what kind of slot does the weird controller really need to display this????
}
if ( nDrawSfxId == SID_FM_CREATE_CONTROL && nNewId != nDrawSfxId )
{ // switching from control- to paint function -> deselect in control-controller
GetViewData().GetDispatcher().Execute(SID_FM_LEAVE_CREATE);
GetViewFrame().GetBindings().InvalidateAll(false); //! what kind of slot does the weird controller really need to display this????
}
SetDrawSelMode(bEx);
pView->LockBackgroundLayer( !bEx );
const SdrMarkList& rMarkList = pView->GetMarkedObjectList(); if ( bSelectFirst )
{ // select first draw object if none is selected yet if(rMarkList.GetMarkCount() == 0)
{ // select first object
pView->UnmarkAllObj();
pView->MarkNextObj(true);
// ...and make it visible if(rMarkList.GetMarkCount() != 0)
pView->MakeVisible(pView->GetAllMarkedRect(), *pWin);
}
}
nDrawSfxId = nNewId;
sDrawCustom.clear(); // value is set below for custom shapes
// for LibreOfficeKit - choosing a shape should construct it directly bool bCreateDirectly = false;
switch (nNewId)
{ case SID_OBJECT_SELECT: // not always switch back if(rMarkList.GetMarkCount() == 0) SetDrawShell(bEx);
pTabView->SetDrawFuncPtr(new FuSelection(*this, pWin, pView, rModel, aNewReq)); break;
case SID_DRAW_LINE: case SID_DRAW_XLINE: case SID_LINE_ARROW_END: case SID_LINE_ARROW_CIRCLE: case SID_LINE_ARROW_SQUARE: case SID_LINE_ARROW_START: case SID_LINE_CIRCLE_ARROW: case SID_LINE_SQUARE_ARROW: case SID_LINE_ARROWS: case SID_DRAW_RECT: case SID_DRAW_ELLIPSE: case SID_DRAW_MEASURELINE:
pTabView->SetDrawFuncPtr(new FuConstRectangle(*this, pWin, pView, rModel, aNewReq));
bCreateDirectly = comphelper::LibreOfficeKit::isActive(); break;
case SID_DRAW_CAPTION: case SID_DRAW_CAPTION_VERTICAL:
pTabView->SetDrawFuncPtr(new FuConstRectangle(*this, pWin, pView, rModel, aNewReq));
pView->SetFrameDragSingles( false );
rBindings.Invalidate( SID_BEZIER_EDIT ); break;
case SID_DRAW_XPOLYGON: case SID_DRAW_XPOLYGON_NOFILL: case SID_DRAW_POLYGON: case SID_DRAW_POLYGON_NOFILL: case SID_DRAW_BEZIER_NOFILL: case SID_DRAW_BEZIER_FILL: case SID_DRAW_FREELINE: case SID_DRAW_FREELINE_NOFILL:
pTabView->SetDrawFuncPtr(new FuConstPolygon(*this, pWin, pView, rModel, aNewReq)); break;
case SID_DRAW_ARC: case SID_DRAW_PIE: case SID_DRAW_CIRCLECUT:
pTabView->SetDrawFuncPtr(new FuConstArc(*this, pWin, pView, rModel, aNewReq)); break;
case SID_DRAW_TEXT: case SID_DRAW_TEXT_VERTICAL: case SID_DRAW_TEXT_MARQUEE: case SID_DRAW_NOTEEDIT:
pTabView->SetDrawFuncPtr(new FuText(*this, pWin, pView, rModel, aNewReq));
bCreateDirectly = comphelper::LibreOfficeKit::isActive(); break;
case SID_DRAWTBX_CS_BASIC : case SID_DRAWTBX_CS_SYMBOL : case SID_DRAWTBX_CS_ARROW : case SID_DRAWTBX_CS_FLOWCHART : case SID_DRAWTBX_CS_CALLOUT : case SID_DRAWTBX_CS_STAR : case SID_DRAW_CS_ID :
{
pTabView->SetDrawFuncPtr(new FuConstCustomShape(*this, pWin, pView, rModel, aNewReq));
// create the default object
rtl::Reference<SdrObject> pObj = pFuActual->CreateDefaultObject(nNewId, aNewObjectRectangle);
if(!pObj) return;
// insert into page
pView->InsertObjectAtView(pObj.get(), *pPageView);
switch ( nNewId )
{ case SID_DRAW_CAPTION: case SID_DRAW_CAPTION_VERTICAL: case SID_DRAW_TEXT: case SID_DRAW_TEXT_VERTICAL: // use KeyInput to start edit mode (FuText is created). // For FuText objects, edit mode is handled within CreateDefaultObject. // KEY_F2 is handled in FuDraw::KeyInput.
while ( nWhich )
{ switch ( nWhich )
{ case SID_DRAW_CHART:
{ bool bOle = GetViewFrame().GetFrame().IsInPlace(); if ( bOle || !SvtModuleOptions().IsChartInstalled() )
rSet.DisableItem( nWhich );
} break;
case SID_DRAW_LINE: case SID_DRAW_XLINE: case SID_LINE_ARROW_END: case SID_LINE_ARROW_CIRCLE: case SID_LINE_ARROW_SQUARE: case SID_LINE_ARROW_START: case SID_LINE_CIRCLE_ARROW: case SID_LINE_SQUARE_ARROW: case SID_LINE_ARROWS: case SID_DRAW_MEASURELINE: case SID_DRAW_RECT: case SID_DRAW_ELLIPSE: case SID_DRAW_POLYGON: case SID_DRAW_POLYGON_NOFILL: case SID_DRAW_XPOLYGON: case SID_DRAW_XPOLYGON_NOFILL: case SID_DRAW_BEZIER_FILL: case SID_DRAW_BEZIER_NOFILL: case SID_DRAW_FREELINE: case SID_DRAW_FREELINE_NOFILL: case SID_DRAW_ARC: case SID_DRAW_PIE: case SID_DRAW_CIRCLECUT: case SID_DRAW_TEXT: case SID_DRAW_TEXT_MARQUEE: case SID_DRAW_CAPTION:
rSet.Put( SfxBoolItem( nWhich, nDrawSfxId == nWhich ) ); break;
case SID_DRAW_TEXT_VERTICAL: case SID_DRAW_CAPTION_VERTICAL: if ( !SvtCJKOptions::IsVerticalTextEnabled() )
rSet.DisableItem( nWhich ); else
rSet.Put( SfxBoolItem( nWhich, nDrawSfxId == nWhich ) ); break;
case SID_OBJECT_SELECT: // important for the old control-controller
rSet.Put( SfxBoolItem( nWhich, nDrawSfxId == SID_OBJECT_SELECT && IsDrawSelMode() ) ); break;
case SID_DRAWTBX_CS_BASIC: case SID_DRAWTBX_CS_SYMBOL: case SID_DRAWTBX_CS_ARROW: case SID_DRAWTBX_CS_FLOWCHART: case SID_DRAWTBX_CS_CALLOUT: case SID_DRAWTBX_CS_STAR:
rSet.Put( SfxStringItem( nWhich, nDrawSfxId == nWhich ? sDrawCustom : OUString() ) ); break;
}
nWhich = aIter.NextWhich();
}
}
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.