blob: e01cf105014ac43a5838d1fb4ab17bf4416be7ac [file] [log] [blame]
/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sd.hxx"
#include "DrawViewShell.hxx"
#include <vcl/wrkwin.hxx>
#include <svx/xgrad.hxx>
#include <svx/svdpagv.hxx>
#include <svx/xlnwtit.hxx>
#include <svx/xlndsit.hxx>
#include <svx/xflhtit.hxx>
#include <svx/xflgrit.hxx>
#include <svx/xlnclit.hxx>
#include <svx/xflclit.hxx>
#include <svx/xlnwtit.hxx>
#include <sfx2/bindings.hxx>
#ifndef _SFX_DISPATCH_HXX //autogen
#include <sfx2/dispatch.hxx>
#endif
#include <svl/intitem.hxx>
#include <sfx2/app.hxx>
#include <sfx2/request.hxx>
#include <svl/stritem.hxx>
#ifndef _SVXIDS_HXX
#include <svx/svxids.hrc>
#endif
#include <svx/xtable.hxx>
#include <svx/gallery.hxx>
#include <vcl/graph.hxx>
#include <svx/svdograf.hxx>
#include <svx/svdoole2.hxx>
#include <sot/storage.hxx>
#include <svl/whiter.hxx>
#include <basic/sbstar.hxx>
#include <sfx2/viewfrm.hxx>
#include "app.hrc"
#include "strings.hrc"
#include "Window.hxx"
#include "drawdoc.hxx"
#include "drawview.hxx"
#include "DrawDocShell.hxx"
#include "sdresid.hxx"
#include "fupoor.hxx"
#include <svx/galleryitem.hxx>
#include <com/sun/star/gallery/GalleryItemType.hpp>
namespace sd {
#ifndef SO2_DECL_SVINPLACEOBJECT_DEFINED
#define SO2_DECL_SVINPLACEOBJECT_DEFINED
SO2_DECL_REF(SvInPlaceObject)
#endif
#ifndef SO2_DECL_SVSTORAGE_DEFINED
#define SO2_DECL_SVSTORAGE_DEFINED
SO2_DECL_REF(SvStorage)
#endif
/*************************************************************************
|*
|* SfxRequests fuer Gallery bearbeiten
|*
\************************************************************************/
void DrawViewShell::ExecGallery(SfxRequest& rReq)
{
// waehrend einer Diashow wird nichts ausgefuehrt!
if(HasCurrentFunction(SID_PRESENTATION))
return;
const SfxItemSet* pArgs = rReq.GetArgs();
SFX_ITEMSET_ARG( pArgs, pGalleryItem, SvxGalleryItem, SID_GALLERY_FORMATS, sal_False );
if ( !pGalleryItem )
return;
GetDocSh()->SetWaitCursor( sal_True );
sal_Int8 nType( pGalleryItem->GetType() );
// Graphik einfuegen
if (nType == com::sun::star::gallery::GalleryItemType::GRAPHIC)
{
Graphic aGraphic( pGalleryItem->GetGraphic() );
// Ggf. Groesse reduzieren
Window aWindow (GetActiveWindow());
aWindow.SetMapMode(aGraphic.GetPrefMapMode());
Size aSizePix = aWindow.LogicToPixel(aGraphic.GetPrefSize());
aWindow.SetMapMode( MapMode(MAP_100TH_MM) );
Size aSize = aWindow.PixelToLogic(aSizePix);
// Groesse ggf. auf Seitengroesse begrenzen
SdrPage* pPage = mpDrawView->GetSdrPageView()->GetPage();
Size aPageSize = pPage->GetSize();
aPageSize.Width() -= pPage->GetLftBorder() + pPage->GetRgtBorder();
aPageSize.Height() -= pPage->GetUppBorder() + pPage->GetLwrBorder();
// Falls Grafik zu gross, wird die Grafik
// in die Seite eingepasst
if ( ( ( aSize.Height() > aPageSize.Height() ) || ( aSize.Width() > aPageSize.Width() ) ) &&
aSize.Height() && aPageSize.Height() )
{
float fGrfWH = (float)aSize.Width() /
(float)aSize.Height();
float fWinWH = (float)aPageSize.Width() /
(float)aPageSize.Height();
// Grafik an Pagesize anpassen (skaliert)
if ((fGrfWH != 0.F) && (fGrfWH < fWinWH))
{
aSize.Width() = (long)(aPageSize.Height() * fGrfWH);
aSize.Height()= aPageSize.Height();
}
else
{
aSize.Width() = aPageSize.Width();
aSize.Height()= (long)(aPageSize.Width() / fGrfWH);
}
}
// Ausgaberechteck fuer Grafik setzen
Point aPnt ((aPageSize.Width() - aSize.Width()) / 2,
(aPageSize.Height() - aSize.Height()) / 2);
aPnt += Point(pPage->GetLftBorder(), pPage->GetUppBorder());
Rectangle aRect (aPnt, aSize);
SdrGrafObj* pGrafObj = NULL;
sal_Bool bInsertNewObject = sal_True;
if ( mpDrawView->AreObjectsMarked() )
{
/******************************************************
* Ist ein leeres Graphik-Objekt vorhanden?
******************************************************/
const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
if (rMarkList.GetMarkCount() == 1)
{
SdrMark* pMark = rMarkList.GetMark(0);
SdrObject* pObj = pMark->GetMarkedSdrObj();
if (pObj->GetObjInventor() == SdrInventor && pObj->GetObjIdentifier() == OBJ_GRAF)
{
pGrafObj = (SdrGrafObj*) pObj;
if( pGrafObj->IsEmptyPresObj() )
{
/******************************************
* Das leere Graphik-Objekt bekommt eine neue
* Graphik
******************************************/
bInsertNewObject = sal_False;
SdrGrafObj* pNewGrafObj = (SdrGrafObj*) pGrafObj->Clone();
pNewGrafObj->SetEmptyPresObj(sal_False);
pNewGrafObj->SetOutlinerParaObject(NULL);
pNewGrafObj->SetGraphic(aGraphic);
String aStr(mpDrawView->GetDescriptionOfMarkedObjects());
aStr += sal_Unicode(' ');
aStr += String(SdResId(STR_UNDO_REPLACE));
mpDrawView->BegUndo(aStr);
SdrPageView* pPV = mpDrawView->GetSdrPageView();
mpDrawView->ReplaceObjectAtView(pGrafObj, *pPV, pNewGrafObj);
mpDrawView->EndUndo();
}
}
}
}
if( bInsertNewObject )
{
pGrafObj = new SdrGrafObj(aGraphic, aRect);
SdrPageView* pPV = mpDrawView->GetSdrPageView();
mpDrawView->InsertObjectAtView(pGrafObj, *pPV, SDRINSERT_SETDEFLAYER);
}
// Soll nur ein Link benutzt werden?
if( pGrafObj && pGalleryItem->IsLink() )
pGrafObj->SetGraphicLink( pGalleryItem->GetURL(), pGalleryItem->GetFilterName() );
}
// insert sound
else if( nType == com::sun::star::gallery::GalleryItemType::MEDIA )
{
const SfxStringItem aMediaURLItem( SID_INSERT_AVMEDIA, pGalleryItem->GetURL() );
GetViewFrame()->GetDispatcher()->Execute( SID_INSERT_AVMEDIA, SFX_CALLMODE_SYNCHRON, &aMediaURLItem, 0L );
}
GetDocSh()->SetWaitCursor( sal_False );
}
/*************************************************************************
|*
|* Statuswerte fuer Gallery zurueckgeben
|*
\************************************************************************/
void DrawViewShell::GetGalleryState(SfxItemSet& )
{
}
/*************************************************************************
|*
|* Makros fuer die Attributeinstellungen bearbeiten
|*
\************************************************************************/
//
// die vorgehensweise fuer die attributaenderung ist praktisch ueberall identisch
// 1. bisherige attribute auslesen
// 2. parameter aus dem basic-set auslesen
// 3. gewaehltes item aus dem attribut-set loeschen
// 4. neues attribut-item erzeugen
// 5. item in den set eintragen
//
void DrawViewShell::AttrExec (SfxRequest &rReq)
{
// waehrend einer Diashow wird nichts ausgefuehrt!
if(HasCurrentFunction(SID_PRESENTATION))
return;
CheckLineTo (rReq);
SfxBindings& rBindings = GetViewFrame()->GetBindings();
SfxItemSet* pAttr = new SfxItemSet ( GetDoc()->GetPool() );
GetView()->GetAttributes( *pAttr );
const SfxItemSet* pArgs = rReq.GetArgs();
switch (rReq.GetSlot ())
{
// neuen fuellstil setzen
case SID_SETFILLSTYLE :
if (pArgs)
if (pArgs->Count () == 1)
{
SFX_REQUEST_ARG (rReq, pFillStyle, SfxUInt32Item, ID_VAL_STYLE, sal_False);
if (CHECK_RANGE (XFILL_NONE, (sal_Int32)pFillStyle->GetValue (), XFILL_BITMAP))
{
pAttr->ClearItem (XATTR_FILLSTYLE);
pAttr->Put (XFillStyleItem ((XFillStyle) pFillStyle->GetValue ()), XATTR_FILLSTYLE);
rBindings.Invalidate (SID_ATTR_FILL_STYLE);
}
else StarBASIC::FatalError (SbERR_BAD_PROP_VALUE);
break;
}
StarBASIC::FatalError (SbERR_WRONG_ARGS);
break;
// linienstil neu bestimmen
case SID_SETLINESTYLE :
if (pArgs)
if (pArgs->Count () == 1)
{
SFX_REQUEST_ARG (rReq, pLineStyle, SfxUInt32Item, ID_VAL_STYLE, sal_False);
if (CHECK_RANGE (XLINE_NONE, (sal_Int32)pLineStyle->GetValue (), XLINE_DASH))
{
pAttr->ClearItem (XATTR_LINESTYLE);
pAttr->Put (XLineStyleItem ((XLineStyle) pLineStyle->GetValue ()), XATTR_LINESTYLE);
rBindings.Invalidate (SID_ATTR_LINE_STYLE);
}
else StarBASIC::FatalError (SbERR_BAD_PROP_VALUE);
break;
}
StarBASIC::FatalError (SbERR_WRONG_ARGS);
break;
// linienbreite setzen
case SID_SETLINEWIDTH :
if (pArgs)
if (pArgs->Count () == 1)
{
SFX_REQUEST_ARG (rReq, pLineWidth, SfxUInt32Item, ID_VAL_WIDTH, sal_False);
pAttr->ClearItem (XATTR_LINEWIDTH);
pAttr->Put (XLineWidthItem (pLineWidth->GetValue ()), XATTR_LINEWIDTH);
rBindings.Invalidate (SID_ATTR_LINE_WIDTH);
break;
}
StarBASIC::FatalError (SbERR_WRONG_ARGS);
break;
case SID_SETFILLCOLOR :
if (pArgs)
if (pArgs->Count () == 3)
{
SFX_REQUEST_ARG (rReq, pRed, SfxUInt32Item, ID_VAL_RED, sal_False);
SFX_REQUEST_ARG (rReq, pGreen, SfxUInt32Item, ID_VAL_GREEN, sal_False);
SFX_REQUEST_ARG (rReq, pBlue, SfxUInt32Item, ID_VAL_BLUE, sal_False);
pAttr->ClearItem (XATTR_FILLCOLOR);
pAttr->ClearItem (XATTR_FILLSTYLE);
pAttr->Put (XFillColorItem (-1, Color ((sal_uInt8) pRed->GetValue (),
(sal_uInt8) pGreen->GetValue (),
(sal_uInt8) pBlue->GetValue ())),
XATTR_FILLCOLOR);
pAttr->Put (XFillStyleItem (XFILL_SOLID), XATTR_FILLSTYLE);
rBindings.Invalidate (SID_ATTR_FILL_COLOR);
rBindings.Invalidate (SID_ATTR_FILL_STYLE);
break;
}
StarBASIC::FatalError (SbERR_WRONG_ARGS);
break;
case SID_SETLINECOLOR :
if (pArgs)
if (pArgs->Count () == 3)
{
SFX_REQUEST_ARG (rReq, pRed, SfxUInt32Item, ID_VAL_RED, sal_False);
SFX_REQUEST_ARG (rReq, pGreen, SfxUInt32Item, ID_VAL_GREEN, sal_False);
SFX_REQUEST_ARG (rReq, pBlue, SfxUInt32Item, ID_VAL_BLUE, sal_False);
pAttr->ClearItem (XATTR_LINECOLOR);
pAttr->Put (XLineColorItem (-1, Color ((sal_uInt8) pRed->GetValue (),
(sal_uInt8) pGreen->GetValue (),
(sal_uInt8) pBlue->GetValue ())),
XATTR_LINECOLOR);
rBindings.Invalidate (SID_ATTR_LINE_COLOR);
break;
}
StarBASIC::FatalError (SbERR_WRONG_ARGS);
break;
case SID_SETGRADSTARTCOLOR :
case SID_SETGRADENDCOLOR :
if (pArgs)
if (pArgs->Count () == 4)
{
SFX_REQUEST_ARG (rReq, pName, SfxStringItem, ID_VAL_INDEX, sal_False);
SFX_REQUEST_ARG (rReq, pRed, SfxUInt32Item, ID_VAL_RED, sal_False);
SFX_REQUEST_ARG (rReq, pGreen, SfxUInt32Item, ID_VAL_GREEN, sal_False);
SFX_REQUEST_ARG (rReq, pBlue, SfxUInt32Item, ID_VAL_BLUE, sal_False);
XGradientListSharedPtr aGradientList = GetDoc()->GetGradientListFromSdrModel();
long nCounts = aGradientList->Count ();
Color aColor ((sal_uInt8) pRed->GetValue (),
(sal_uInt8) pGreen->GetValue (),
(sal_uInt8) pBlue->GetValue ());
long i;
pAttr->ClearItem (XATTR_FILLGRADIENT);
pAttr->ClearItem (XATTR_FILLSTYLE);
for ( i = 0; i < nCounts; i ++)
{
XGradientEntry *pEntry = aGradientList->GetGradient (i);
if (pEntry->GetName () == pName->GetValue ())
{
XGradient aGradient(pEntry->GetGradient());
if (rReq.GetSlot () == SID_SETGRADSTARTCOLOR) aGradient.SetStartColor (aColor);
else aGradient.SetEndColor (aColor);
pAttr->Put (XFillStyleItem (XFILL_GRADIENT), XATTR_FILLSTYLE);
pAttr->Put (XFillGradientItem (pName->GetValue (), aGradient), XATTR_FILLGRADIENT);
break;
}
}
if (i >= nCounts)
{
Color aBlack (0, 0, 0);
XGradient aGradient ((rReq.GetSlot () == SID_SETGRADSTARTCOLOR)
? aColor
: aBlack,
(rReq.GetSlot () == SID_SETGRADENDCOLOR)
? aColor
: aBlack);
GetDoc()->GetGradientListFromSdrModel()->Insert (new XGradientEntry (aGradient, pName->GetValue ()));
pAttr->Put (XFillStyleItem (XFILL_GRADIENT), XATTR_FILLSTYLE);
pAttr->Put (XFillGradientItem (pName->GetValue (), aGradient), XATTR_FILLGRADIENT);
}
rBindings.Invalidate (SID_ATTR_FILL_STYLE);
rBindings.Invalidate (SID_ATTR_FILL_GRADIENT);
break;
}
StarBASIC::FatalError (SbERR_WRONG_ARGS);
break;
case SID_SETHATCHCOLOR :
if (pArgs)
if (pArgs->Count () == 4)
{
SFX_REQUEST_ARG (rReq, pName, SfxStringItem, ID_VAL_INDEX, sal_False);
SFX_REQUEST_ARG (rReq, pRed, SfxUInt32Item, ID_VAL_RED, sal_False);
SFX_REQUEST_ARG (rReq, pGreen, SfxUInt32Item, ID_VAL_GREEN, sal_False);
SFX_REQUEST_ARG (rReq, pBlue, SfxUInt32Item, ID_VAL_BLUE, sal_False);
XHatchListSharedPtr aHatchList = GetDoc()->GetHatchListFromSdrModel();
long nCounts = aHatchList.get() ? aHatchList->Count() : 0;
Color aColor ((sal_uInt8) pRed->GetValue (),
(sal_uInt8) pGreen->GetValue (),
(sal_uInt8) pBlue->GetValue ());
long i;
pAttr->ClearItem (XATTR_FILLHATCH);
pAttr->ClearItem (XATTR_FILLSTYLE);
for ( i = 0; i < nCounts; i ++)
{
XHatchEntry *pEntry = aHatchList->GetHatch (i);
if (pEntry->GetName () == pName->GetValue ())
{
XHatch aHatch(pEntry->GetHatch());
aHatch.SetColor (aColor);
pAttr->Put (XFillStyleItem (XFILL_HATCH), XATTR_FILLSTYLE);
pAttr->Put (XFillHatchItem (pName->GetValue (), aHatch), XATTR_FILLHATCH);
break;
}
}
if (i >= nCounts)
{
XHatch aHatch (aColor);
GetDoc()->GetHatchListFromSdrModel()->Insert (new XHatchEntry (aHatch, pName->GetValue ()));
pAttr->Put (XFillStyleItem (XFILL_HATCH), XATTR_FILLSTYLE);
pAttr->Put (XFillHatchItem (pName->GetValue (), aHatch), XATTR_FILLHATCH);
}
rBindings.Invalidate (SID_ATTR_FILL_HATCH);
rBindings.Invalidate (SID_ATTR_FILL_STYLE);
break;
}
StarBASIC::FatalError (SbERR_WRONG_ARGS);
break;
// einstellungen fuer liniendash
case SID_DASH :
if (pArgs)
if (pArgs->Count () == 7)
{
SFX_REQUEST_ARG (rReq, pName, SfxStringItem, ID_VAL_INDEX, sal_False);
SFX_REQUEST_ARG (rReq, pStyle, SfxUInt32Item, ID_VAL_STYLE, sal_False);
SFX_REQUEST_ARG (rReq, pDots, SfxUInt32Item, ID_VAL_DOTS, sal_False);
SFX_REQUEST_ARG (rReq, pDotLen, SfxUInt32Item, ID_VAL_DOTLEN, sal_False);
SFX_REQUEST_ARG (rReq, pDashes, SfxUInt32Item, ID_VAL_DASHES, sal_False);
SFX_REQUEST_ARG (rReq, pDashLen, SfxUInt32Item, ID_VAL_DASHLEN, sal_False);
SFX_REQUEST_ARG (rReq, pDistance, SfxUInt32Item, ID_VAL_DISTANCE, sal_False);
if (CHECK_RANGE (XDASH_RECT, (sal_Int32)pStyle->GetValue (), XDASH_ROUNDRELATIVE))
{
XDash aNewDash ((XDashStyle) pStyle->GetValue (), (short) pDots->GetValue (), pDotLen->GetValue (),
(short) pDashes->GetValue (), pDashLen->GetValue (), pDistance->GetValue ());
pAttr->ClearItem (XATTR_LINEDASH);
pAttr->ClearItem (XATTR_LINESTYLE);
XDashListSharedPtr aDashList = GetDoc()->GetDashListFromSdrModel();
long nCounts = aDashList.get() ? aDashList->Count() : 0;
XDashEntry *pEntry = new XDashEntry (aNewDash, pName->GetValue ());
long i;
for ( i = 0; i < nCounts; i++ )
if (aDashList->GetDash (i)->GetName () == pName->GetValue ())
break;
if (i < nCounts)
aDashList->Replace (pEntry, i);
else
aDashList->Insert (pEntry);
pAttr->Put (XLineDashItem (pName->GetValue (), aNewDash), XATTR_LINEDASH);
pAttr->Put (XLineStyleItem (XLINE_DASH), XATTR_LINESTYLE);
rBindings.Invalidate (SID_ATTR_LINE_DASH);
rBindings.Invalidate (SID_ATTR_FILL_STYLE);
}
else StarBASIC::FatalError (SbERR_BAD_PROP_VALUE);
break;
}
StarBASIC::FatalError (SbERR_WRONG_ARGS);
break;
// einstellungen fuer farbverlauf
case SID_GRADIENT :
if (pArgs)
if (pArgs->Count () == 8)
{
SFX_REQUEST_ARG (rReq, pName, SfxStringItem, ID_VAL_INDEX, sal_False);
SFX_REQUEST_ARG (rReq, pStyle, SfxUInt32Item, ID_VAL_STYLE, sal_False);
SFX_REQUEST_ARG (rReq, pAngle, SfxUInt32Item, ID_VAL_ANGLE, sal_False);
SFX_REQUEST_ARG (rReq, pBorder, SfxUInt32Item, ID_VAL_BORDER, sal_False);
SFX_REQUEST_ARG (rReq, pCenterX, SfxUInt32Item, ID_VAL_CENTER_X, sal_False);
SFX_REQUEST_ARG (rReq, pCenterY, SfxUInt32Item, ID_VAL_CENTER_Y, sal_False);
SFX_REQUEST_ARG (rReq, pStart, SfxUInt32Item, ID_VAL_STARTINTENS, sal_False);
SFX_REQUEST_ARG (rReq, pEnd, SfxUInt32Item, ID_VAL_ENDINTENS, sal_False);
if (CHECK_RANGE (XGRAD_LINEAR, (sal_Int32)pStyle->GetValue (), XGRAD_RECT) &&
CHECK_RANGE (0, (sal_Int32)pAngle->GetValue (), 360) &&
CHECK_RANGE (0, (sal_Int32)pBorder->GetValue (), 100) &&
CHECK_RANGE (0, (sal_Int32)pCenterX->GetValue (), 100) &&
CHECK_RANGE (0, (sal_Int32)pCenterY->GetValue (), 100) &&
CHECK_RANGE (0, (sal_Int32)pStart->GetValue (), 100) &&
CHECK_RANGE (0, (sal_Int32)pEnd->GetValue (), 100))
{
pAttr->ClearItem (XATTR_FILLGRADIENT);
pAttr->ClearItem (XATTR_FILLSTYLE);
XGradientListSharedPtr aGradientList = GetDoc()->GetGradientListFromSdrModel();
long nCounts = aGradientList->Count ();
long i;
for ( i = 0; i < nCounts; i++ )
{
XGradientEntry *pEntry = aGradientList->GetGradient (i);
if (pEntry->GetName () == pName->GetValue ())
{
XGradient aGradient(pEntry->GetGradient());
aGradient.SetGradientStyle ((XGradientStyle) pStyle->GetValue ());
aGradient.SetAngle (pAngle->GetValue () * 10);
aGradient.SetBorder ((short) pBorder->GetValue ());
aGradient.SetXOffset ((short) pCenterX->GetValue ());
aGradient.SetYOffset ((short) pCenterY->GetValue ());
aGradient.SetStartIntens ((short) pStart->GetValue ());
aGradient.SetEndIntens ((short) pEnd->GetValue ());
pAttr->Put (XFillStyleItem (XFILL_GRADIENT), XATTR_FILLSTYLE);
pAttr->Put (XFillGradientItem (pName->GetValue (), aGradient), XATTR_FILLGRADIENT);
break;
}
}
if (i >= nCounts)
{
Color aBlack (0, 0, 0);
XGradient aGradient (aBlack, aBlack, (XGradientStyle) pStyle->GetValue (),
pAngle->GetValue () * 10, (short) pCenterX->GetValue (),
(short) pCenterY->GetValue (), (short) pBorder->GetValue (),
(short) pStart->GetValue (), (short) pEnd->GetValue ());
aGradientList->Insert (new XGradientEntry (aGradient, pName->GetValue ()));
pAttr->Put (XFillStyleItem (XFILL_GRADIENT), XATTR_FILLSTYLE);
pAttr->Put (XFillGradientItem (pName->GetValue (), aGradient), XATTR_FILLGRADIENT);
}
rBindings.Invalidate (SID_ATTR_FILL_GRADIENT);
rBindings.Invalidate (SID_ATTR_FILL_STYLE);
}
else StarBASIC::FatalError (SbERR_BAD_PROP_VALUE);
break;
}
StarBASIC::FatalError (SbERR_WRONG_ARGS);
break;
// einstellungen fuer schraffur
case SID_HATCH :
if (pArgs)
if (pArgs->Count () == 4)
{
SFX_REQUEST_ARG (rReq, pName, SfxStringItem, ID_VAL_INDEX, sal_False);
SFX_REQUEST_ARG (rReq, pStyle, SfxUInt32Item, ID_VAL_STYLE, sal_False);
SFX_REQUEST_ARG (rReq, pDistance, SfxUInt32Item, ID_VAL_DISTANCE, sal_False);
SFX_REQUEST_ARG (rReq, pAngle, SfxUInt32Item, ID_VAL_ANGLE, sal_False);
if (CHECK_RANGE (XHATCH_SINGLE, (sal_Int32)pStyle->GetValue (), XHATCH_TRIPLE) &&
CHECK_RANGE (0, (sal_Int32)pAngle->GetValue (), 360))
{
pAttr->ClearItem (XATTR_FILLHATCH);
pAttr->ClearItem (XATTR_FILLSTYLE);
XHatchListSharedPtr aHatchList = GetDoc()->GetHatchListFromSdrModel();
long nCounts = aHatchList.get() ? aHatchList->Count() : 0;
long i;
for ( i = 0; i < nCounts; i++ )
{
XHatchEntry *pEntry = aHatchList->GetHatch (i);
if (pEntry->GetName () == pName->GetValue ())
{
XHatch aHatch(pEntry->GetHatch());
aHatch.SetHatchStyle ((XHatchStyle) pStyle->GetValue ());
aHatch.SetDistance (pDistance->GetValue ());
aHatch.SetAngle (pAngle->GetValue () * 10);
pAttr->Put (XFillStyleItem (XFILL_HATCH), XATTR_FILLSTYLE);
pAttr->Put (XFillHatchItem (pName->GetValue (), aHatch), XATTR_FILLHATCH);
break;
}
}
if (i >= nCounts)
{
Color aBlack (0, 0, 0);
XHatch aHatch (aBlack, (XHatchStyle) pStyle->GetValue (), pDistance->GetValue (),
pAngle->GetValue () * 10);
aHatchList->Insert (new XHatchEntry (aHatch, pName->GetValue ()));
pAttr->Put (XFillStyleItem (XFILL_HATCH), XATTR_FILLSTYLE);
pAttr->Put (XFillHatchItem (pName->GetValue (), aHatch), XATTR_FILLHATCH);
}
rBindings.Invalidate (SID_ATTR_FILL_HATCH);
rBindings.Invalidate (SID_ATTR_FILL_STYLE);
}
else StarBASIC::FatalError (SbERR_BAD_PROP_VALUE);
break;
}
StarBASIC::FatalError (SbERR_WRONG_ARGS);
break;
case SID_SELECTGRADIENT :
if (pArgs)
if (pArgs->Count () == 1)
{
SFX_REQUEST_ARG (rReq, pName, SfxStringItem, ID_VAL_INDEX, sal_False);
XGradientListSharedPtr aGradientList = GetDoc()->GetGradientListFromSdrModel();
long nCounts = aGradientList->Count ();
for (long i = 0;
i < nCounts;
i ++)
{
XGradientEntry *pEntry = aGradientList->GetGradient (i);
if (pEntry->GetName () == pName->GetValue ())
{
pAttr->ClearItem (XATTR_FILLGRADIENT);
pAttr->ClearItem (XATTR_FILLSTYLE);
pAttr->Put (XFillStyleItem (XFILL_GRADIENT), XATTR_FILLSTYLE);
pAttr->Put (XFillGradientItem (pName->GetValue (), pEntry->GetGradient ()), XATTR_FILLGRADIENT);
rBindings.Invalidate (SID_ATTR_FILL_GRADIENT);
rBindings.Invalidate (SID_ATTR_FILL_STYLE);
break;
}
}
break;
}
StarBASIC::FatalError (SbERR_WRONG_ARGS);
break;
case SID_SELECTHATCH :
if (pArgs)
if (pArgs->Count () == 1)
{
SFX_REQUEST_ARG (rReq, pName, SfxStringItem, ID_VAL_INDEX, sal_False);
XHatchListSharedPtr aHatchList = GetDoc()->GetHatchListFromSdrModel();
long nCounts = aHatchList.get() ? aHatchList->Count() : 0;
for (long i = 0;
i < nCounts;
i ++)
{
XHatchEntry *pEntry = aHatchList->GetHatch (i);
if (pEntry->GetName () == pName->GetValue ())
{
pAttr->ClearItem (XATTR_FILLHATCH);
pAttr->ClearItem (XATTR_FILLSTYLE);
pAttr->Put (XFillStyleItem (XFILL_HATCH), XATTR_FILLSTYLE);
pAttr->Put (XFillHatchItem (pName->GetValue (), pEntry->GetHatch ()), XATTR_FILLHATCH);
rBindings.Invalidate (SID_ATTR_FILL_HATCH);
rBindings.Invalidate (SID_ATTR_FILL_STYLE);
break;
}
}
break;
}
StarBASIC::FatalError (SbERR_WRONG_ARGS);
break;
case SID_UNSELECT :
mpDrawView->UnmarkAll ();
break;
case SID_GETRED :
if (pArgs)
if (pArgs->Count () == 1)
{
break;
}
StarBASIC::FatalError (SbERR_WRONG_ARGS);
break;
/* case SID_SETFONTFAMILYNAME :
case SID_SETFONTSTYLENAME :
case SID_SETFONTFAMILY :
case SID_SETFONTPITCH :
case SID_SETFONTCHARSET :
case SID_SETFONTPOSTURE :
case SID_SETFONTWEIGHT :
case SID_SETFONTUNDERLINE :
case SID_SETFONTCROSSEDOUT :
case SID_SETFONTSHADOWED :
case SID_SETFONTCONTOUR :
case SID_SETFONTCOLOR :
case SID_SETFONTLANGUAGE :
case SID_SETFONTWORDLINE :
case SID_SETFONTCASEMAP :
case SID_SETFONTESCAPE :
case SID_SETFONTKERNING :
break;*/
default :
;
}
mpDrawView->SetAttributes (*(const SfxItemSet *) pAttr);
rReq.Ignore ();
delete pAttr;
}
/*************************************************************************
|*
|* Makros fuer die Attributeinstellungen bearbeiten
|*
\************************************************************************/
void DrawViewShell::AttrState (SfxItemSet& rSet)
{
SfxWhichIter aIter (rSet);
sal_uInt16 nWhich = aIter.FirstWhich ();
SfxItemSet aAttr( GetDoc()->GetPool() );
mpDrawView->GetAttributes( aAttr );
while (nWhich)
{
switch (nWhich)
{
case SID_GETFILLSTYLE :
{
const XFillStyleItem &rFillStyleItem = (const XFillStyleItem &) aAttr.Get (XATTR_FILLSTYLE);
rSet.Put (SfxUInt32Item (nWhich, (long) rFillStyleItem.GetValue ()));
break;
}
case SID_GETLINESTYLE :
{
const XLineStyleItem &rLineStyleItem = (const XLineStyleItem &) aAttr.Get (XATTR_LINESTYLE);
rSet.Put (SfxUInt32Item (nWhich, (long) rLineStyleItem.GetValue ()));
break;
}
case SID_GETLINEWIDTH :
{
const XLineWidthItem &rLineWidthItem = (const XLineWidthItem &) aAttr.Get (XATTR_LINEWIDTH);
rSet.Put (SfxUInt32Item (nWhich, (long) rLineWidthItem.GetValue ()));
break;
}
case SID_GETGREEN :
case SID_GETRED :
case SID_GETBLUE :
{
const SfxUInt32Item &rWhatKind = (const SfxUInt32Item &) rSet.Get (ID_VAL_WHATKIND);
Color aColor;
switch (rWhatKind.GetValue ())
{
case 1 :
{
const XLineColorItem &rLineColorItem = (const XLineColorItem &) aAttr.Get (XATTR_LINECOLOR);
aColor = rLineColorItem.GetColorValue ();
break;
}
case 2 :
{
const XFillColorItem &rFillColorItem = (const XFillColorItem &) aAttr.Get (XATTR_FILLCOLOR);
aColor = rFillColorItem.GetColorValue ();
break;
}
case 3 :
case 4 :
{
const XFillGradientItem &rFillGradientItem = (const XFillGradientItem &) aAttr.Get (XATTR_FILLGRADIENT);
const XGradient &rGradient = rFillGradientItem.GetGradientValue ();
aColor = (rWhatKind.GetValue () == 3)
? rGradient.GetStartColor ()
: rGradient.GetEndColor ();
break;
}
case 5:
{
const XFillHatchItem &rFillHatchItem = (const XFillHatchItem &) aAttr.Get (XATTR_FILLHATCH);
const XHatch &rHatch = rFillHatchItem.GetHatchValue ();
aColor = rHatch.GetColor ();
break;
}
default :
;
}
rSet.Put (SfxUInt32Item (nWhich, (long) ((nWhich == SID_GETRED)
? aColor.GetRed ()
: (nWhich == SID_GETGREEN)
? aColor.GetGreen ()
: aColor.GetBlue ())));
break;
}
default :
;
}
nWhich = aIter.NextWhich ();
}
}
} // end of namespace sd