1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: svdetc.hxx,v $
10 * $Revision: 1.4.152.1 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
34 #include <tools/string.hxx>
35 #include <tools/contnr.hxx>
37 #ifndef _OUTDEV_HXX //autogen
38 #include <vcl/outdev.hxx>
40 #include <tools/shl.hxx>
41 #include <svx/outliner.hxx>
42 #include "svx/svxdllapi.h"
44 ////////////////////////////////////////////////////////////////////////////////////////////////////
46 // ExchangeFormat-Id der DrawingEngine holen. Daten koennen dann per
47 // static BOOL CopyData(pData,nLen,nFormat);
48 // bereitgestellt werden, wobei pData/nLen einen SvMemoryStream beschreiben in
49 // dem ein SdrModel gestreamt wird an dem fuer die Zeitdauer des Streamens das
50 // Flag SdrModel::SetStreamingSdrModel(TRUE) gesetzt wird.
51 // ULONG SdrGetExchangeFormat(); -- JP 18.01.99 - dafuer gibt es ein define
57 class LocaleDataWrapper
;
59 namespace com
{ namespace sun
{ namespace star
{ namespace lang
{
63 // Einen Outliner mit den engineglobalen
64 // Defaulteinstellungen auf dem Heap erzeugen.
65 // Ist pMod<>NULL, dann wird der MapMode des uebergebenen
66 // Models verwendet. Die resultierende Default-Fonthoehe bleibt
67 // jedoch dieselbe (die logische Fonthoehe wird umgerechnet).
68 SVX_DLLPUBLIC SdrOutliner
* SdrMakeOutliner( USHORT nOutlinerMode
, SdrModel
* pMod
);
70 // Globale Defaulteinstellungen fuer die DrawingEngine.
71 // Diese Einstellungen sollte man direkt beim Applikationsstart
72 // vornehmen, noch bevor andere Methoden der Engine gerufen werden.
73 class SVX_DLLPUBLIC SdrEngineDefaults
75 friend class SdrAttrObj
;
77 FontFamily eFontFamily
;
81 Fraction aMapFraction
;
84 static SdrEngineDefaults
& GetDefaults();
88 // Default Fontname ist "Times New Roman"
89 static void SetFontName(const String
& rFontName
) { GetDefaults().aFontName
=rFontName
; }
90 static String
GetFontName() { return GetDefaults().aFontName
; }
91 // Default FontFamily ist FAMILY_ROMAN
92 static void SetFontFamily(FontFamily eFam
) { GetDefaults().eFontFamily
=eFam
; }
93 static FontFamily
GetFontFamily() { return GetDefaults().eFontFamily
; }
94 // Default FontColor ist COL_BLACK
95 static void SetFontColor(const Color
& rColor
) { GetDefaults().aFontColor
=rColor
; }
96 static Color
GetFontColor() { return GetDefaults().aFontColor
; }
97 // Default FontHeight ist 847. Die Fonthoehe wird in logischen Einheiten
98 // (MapUnit/MapFraction (siehe unten)) angegeben. Die Defaulteinstellung
99 // 847/100mm entspricht also ca. 24 Point. Verwendet man stattdessen
100 // beispielsweise Twips (SetMapUnit(MAP_TWIP)) (20 Twip = 1 Point) muss
101 // man als Fonthoehe 480 angeben um 24 Point als default zu erhalten.
102 static void SetFontHeight(ULONG nHeight
) { GetDefaults().nFontHeight
=nHeight
; }
103 static ULONG
GetFontHeight() { return GetDefaults().nFontHeight
; }
104 // Der MapMode wird fuer den globalen Outliner benoetigt.
105 // Gleichzeitig bekommt auch jedes neu instanziierte SdrModel
106 // diesen MapMode default zugewiesen.
107 // Default MapUnit ist MAP_100TH_MM
108 static void SetMapUnit(MapUnit eMap
) { GetDefaults().eMapUnit
=eMap
; }
109 static MapUnit
GetMapUnit() { return GetDefaults().eMapUnit
; }
110 // Default MapFraction ist 1/1.
111 static void SetMapFraction(const Fraction
& rMap
) { GetDefaults().aMapFraction
=rMap
; }
112 static Fraction
GetMapFraction() { return GetDefaults().aMapFraction
; }
113 // Der Aufruf der folgenden Methode veranlasst die Engine
114 // ihre sprachabhaengigen Resourcen neu zu initiallisieren.
115 // Bereits bestehende Undotexte, etc. bleiben jedoch in der
116 // sprache erhalten, in der sie erzeugt wurden.
117 static void LanguageHasChanged();
120 // Einen Outliner mit den engineglobalen
121 // Defaulteinstellungen auf dem Heap erzeugen.
122 // Ist pMod<>NULL, dann wird der MapMode des uebergebenen
123 // Models verwendet. Die resultierende Default-Fonthoehe bleibt
124 // jedoch dieselbe (die logische Fonthoehe wird umgerechnet).
125 friend SVX_DLLPUBLIC SdrOutliner
* SdrMakeOutliner( USHORT nOutlinerMode
, SdrModel
* pMod
);
129 // Liefert eine Ersatzdarstellung fuer einen XFillStyle
130 // Bei XFILL_NONE gibt's FALSE und rCol bleibt unveraendert.
131 SVX_DLLPUBLIC FASTBOOL
GetDraftFillColor(const SfxItemSet
& rSet
, Color
& rCol
);
133 // Ein Container fuer USHORTs (im Prinzip ein dynamisches Array)
137 UShortCont(USHORT nBlock
, USHORT nInit
, USHORT nResize
): aArr(nBlock
,nInit
,nResize
) {}
138 void Clear() { aArr
.Clear(); }
139 void Insert(USHORT nElem
, ULONG nPos
=CONTAINER_APPEND
) { aArr
.Insert((void*)ULONG(nElem
),nPos
); }
140 void Remove(ULONG nPos
) { aArr
.Remove(nPos
); }
141 void Replace(USHORT nElem
, ULONG nPos
) { aArr
.Replace((void*)ULONG(nElem
),nPos
); }
142 USHORT
GetObject(ULONG nPos
) const { return USHORT(ULONG(aArr
.GetObject(nPos
))); }
143 ULONG
GetPos(USHORT nElem
) const { return aArr
.GetPos((void*)(ULONG
)nElem
); }
144 ULONG
GetCount() const { return aArr
.Count(); }
148 class ContainerSorter
{
152 //#if 0 // _SOLAR__PRIVATE
153 void ImpSubSort(long nL
, long nR
) const;
154 //#endif // __PRIVATE
156 ContainerSorter(Container
& rNewCont
): rCont(rNewCont
) {}
157 void DoSort(ULONG a
=0, ULONG b
=0xFFFFFFFF) const;
158 #ifdef This_Is_Just_For_A_Comment
159 Compare() muss returnieren
:
160 -1 falls
*pElem1
<*pElem2
161 0 falls
*pElem1
=*pElem2
162 +1 falls
*pElem1
>*pElem2
164 virtual int Compare(const void* pElem1
, const void* pElem2
) const=0;
165 private: // damit keiner vergessen wird
168 Is1stLessThan2nd(const void* pElem1
, const void* pElem2
) const;
169 // virtual FASTBOOL Is1stLessThan2nd(const void* pElem1, const void* pElem2) const=NULL;
172 ////////////////////////////////////////////////////////////////////////////////////////////////////
174 //#if 0 // _SOLAR__PRIVATE
175 #define SDRHDC_SAVEPEN 1 /* Save Linecolor */
176 #define SDRHDC_SAVEBRUSH 2 /* Save Fillcolorn */
177 #define SDRHDC_SAVEFONT 4 /* Save Font */
178 #define SDRHDC_SAVEPENANDBRUSH 3 /* Save Line- and FillColor */
179 #define SDRHDC_SAVEPENANDBRUSHANDFONT 7 /* Save Font, Line- and fillcolor */
180 #define SDRHDC_SAVECLIPPING 8 /* Save Clipping */
181 #define SDRHDC_SAVEALL 15 /* Save Clipping, Font, fill- and linecolor */
187 ImpColorMerk
* pFarbMerk
;
188 ImpClipMerk
* pClipMerk
;
189 Color
* pLineColorMerk
;
192 ImpSdrHdcMerk(const OutputDevice
& rOut
, USHORT nNewMode
=SDRHDC_SAVEALL
, FASTBOOL bAutoMerk
=TRUE
);
194 void Save(const OutputDevice
& rOut
);
195 FASTBOOL
IsSaved() const { return pFarbMerk
!=NULL
|| pClipMerk
!=NULL
|| pLineColorMerk
!=NULL
; }
196 void Restore(OutputDevice
& rOut
, USHORT nMask
=SDRHDC_SAVEALL
) const;
198 //#endif // __PRIVATE
200 ////////////////////////////////////////////////////////////////////////////////////////////////////
202 // Ein ItemSet auf Outliner- bzw. EditEngine-Items durchsuchen
203 // Liefert TRUE, wenn der Set solchen Items enthaelt.
204 BOOL
SearchOutlinerItems(const SfxItemSet
& rSet
, BOOL bInklDefaults
, BOOL
* pbOnlyEE
=NULL
);
206 // zurueck erhaelt man einen neuen WhichTable den
207 // man dann irgendwann mit delete platthauen muss.
208 USHORT
* RemoveWhichRange(const USHORT
* pOldWhichTable
, USHORT nRangeBeg
, USHORT nRangeEnd
);
210 ////////////////////////////////////////////////////////////////////////////////////////////////////
212 ////////////////////////////////////////////////////////////////////////////////////////////////////
216 // Hilfsklasse zur kommunikation zwischen dem Dialog
217 // zum aufbrechen von Metafiles (sd/source/ui/dlg/brkdlg.cxx),
218 // SdrEditView::DoImportMarkedMtf() und
219 // ImpSdrGDIMetaFileImport::DoImport()
220 class SVX_DLLPUBLIC SvdProgressInfo
223 ULONG nSumActionCount
; // Summe aller Actions
224 ULONG nSumCurAction
; // Summe aller bearbeiteten Actions
226 ULONG nActionCount
; // Anzahl der Actions im akt. Obj.
227 ULONG nCurAction
; // Anzahl bearbeiteter Act. im akt. Obj.
229 ULONG nInsertCount
; // Anzahl einzufuegender Act. im akt. Obj.
230 ULONG nCurInsert
; // Anzahl bereits eingefuegter Actions
232 ULONG nObjCount
; // Anzahl der selektierten Objekte
233 ULONG nCurObj
; // Aktuelles Objekt
238 SvdProgressInfo( Link
*_pLink
);
240 void Init( ULONG _nSumActionCount
, ULONG _nObjCount
);
242 BOOL
SetNextObject();
244 void SetActionCount( ULONG _nActionCount
);
245 void SetInsertCount( ULONG _nInsertCount
);
247 BOOL
ReportActions( ULONG nAnzActions
);
248 BOOL
ReportInserts( ULONG nAnzInserts
);
250 ULONG
GetSumActionCount() const { return nSumActionCount
; };
251 ULONG
GetSumCurAction() const { return nSumCurAction
; };
252 ULONG
GetObjCount() const { return nObjCount
; };
253 ULONG
GetCurObj() const { return nCurObj
; };
255 ULONG
GetActionCount() const { return nActionCount
; };
256 ULONG
GetCurAction() const { return nCurAction
; };
258 ULONG
GetInsertCount() const { return nInsertCount
; };
259 ULONG
GetCurInsert() const { return nCurInsert
; };
262 BOOL
ReportRescales( ULONG nAnzRescales
);
271 unsigned FindEntry(const Link
& rLink
) const;
273 SdrLinkList(): aList(1024,4,4) {}
274 ~SdrLinkList() { Clear(); }
275 SVX_DLLPUBLIC
void Clear();
276 unsigned GetLinkCount() const { return (unsigned)aList
.Count(); }
277 Link
& GetLink(unsigned nNum
) { return *((Link
*)(aList
.GetObject(nNum
))); }
278 const Link
& GetLink(unsigned nNum
) const { return *((Link
*)(aList
.GetObject(nNum
))); }
279 void InsertLink(const Link
& rLink
, unsigned nPos
=0xFFFF);
280 void RemoveLink(const Link
& rLink
);
281 FASTBOOL
HasLink(const Link
& rLink
) const { return FindEntry(rLink
)!=0xFFFF; }
284 // Fuer die Factory in SvdObj.CXX
285 SdrLinkList
& ImpGetUserMakeObjHdl();
286 SdrLinkList
& ImpGetUserMakeObjUserDataHdl();
291 class OLEObjCache
: public Container
296 void UnloadOnDemand();
297 BOOL
UnloadObj( SdrOle2Obj
* pObj
);
298 DECL_LINK( UnloadCheckHdl
, AutoTimer
* );
302 SVX_DLLPUBLIC
~OLEObjCache();
304 void SetSize(ULONG nNewSize
);
305 void InsertObj(SdrOle2Obj
* pObj
);
306 void RemoveObj(SdrOle2Obj
* pObj
);
310 class SVX_DLLPUBLIC SdrGlobalData
312 const SvtSysLocale
* pSysLocale
; // follows always locale settings
313 const CharClass
* pCharClass
; // follows always SysLocale
314 const LocaleDataWrapper
* pLocaleData
; // follows always SysLocale
316 SdrLinkList aUserMakeObjHdl
;
317 SdrLinkList aUserMakeObjUserDataHdl
;
318 SdrOutliner
* pOutliner
;
319 SdrEngineDefaults
* pDefaults
;
321 ULONG nExchangeFormat
;
322 OLEObjCache aOLEObjCache
;
325 const SvtSysLocale
* GetSysLocale(); // follows always locale settings
326 const CharClass
* GetCharClass(); // follows always SysLocale
327 const LocaleDataWrapper
* GetLocaleData(); // follows always SysLocale
332 OLEObjCache
& GetOLEObjCache() { return aOLEObjCache
; }
335 inline SdrGlobalData
& GetSdrGlobalData()
337 void** ppAppData
=GetAppData(SHL_SVD
);
338 if (*ppAppData
==NULL
) {
339 *ppAppData
=new SdrGlobalData
;
341 return *((SdrGlobalData
*)*ppAppData
);
347 SVX_DLLPUBLIC String
GetResourceString(sal_uInt16 nResID
);
351 /////////////////////////////////////////////////////////////////////
352 // #i101872# isolated GetTextEditBackgroundColor for tooling
353 class SdrObjEditView
;
355 SVX_DLLPUBLIC Color
GetTextEditBackgroundColor(const SdrObjEditView
& rView
);
357 /////////////////////////////////////////////////////////////////////