Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 : #ifndef _SVX_DLG_CTRL_HXX
20 : #define _SVX_DLG_CTRL_HXX
21 :
22 : #include <svtools/ctrlbox.hxx>
23 : #include <sfx2/tabdlg.hxx>
24 : #include "svx/svxdllapi.h"
25 : #include <svx/rectenum.hxx>
26 : #include <vcl/graph.hxx>
27 : #include <svx/xtable.hxx>
28 :
29 : class XOBitmap;
30 : class XOutdevItemPool;
31 :
32 : namespace com { namespace sun { namespace star { namespace awt {
33 : struct Point;
34 : } } } }
35 :
36 : /*************************************************************************
37 : |* Derived from SfxTabPage for being able to get notified through the
38 : |* virtual method from the control.
39 : \************************************************************************/
40 :
41 0 : class SvxTabPage : public SfxTabPage
42 : {
43 :
44 : public:
45 0 : SvxTabPage(Window* pParent, ResId Id, const SfxItemSet& rInAttrs)
46 0 : : SfxTabPage(pParent, Id, rInAttrs)
47 : {
48 0 : }
49 0 : SvxTabPage(Window *pParent, const OString& rID, const OUString& rUIXMLDescription, const SfxItemSet &rAttrSet)
50 0 : : SfxTabPage(pParent, rID, rUIXMLDescription, rAttrSet)
51 : {
52 0 : }
53 : virtual void PointChanged( Window* pWindow, RECT_POINT eRP ) = 0;
54 : };
55 :
56 : /*************************************************************************
57 : |* Control for display and selection of the corner and center points of
58 : |* an object
59 : \************************************************************************/
60 :
61 : typedef sal_uInt16 CTL_STATE;
62 : #define CS_NOHORZ 1 // no horizontal input information is used
63 : #define CS_NOVERT 2 // no vertikal input information is used
64 :
65 : class SvxRectCtlAccessibleContext;
66 :
67 : class SVX_DLLPUBLIC SvxRectCtl : public Control
68 : {
69 : private:
70 : SVX_DLLPRIVATE void InitSettings( sal_Bool bForeground, sal_Bool bBackground );
71 : SVX_DLLPRIVATE void InitRectBitmap( void );
72 : SVX_DLLPRIVATE Bitmap& GetRectBitmap( void );
73 : SVX_DLLPRIVATE void Resize_Impl();
74 :
75 : protected:
76 : SvxRectCtlAccessibleContext* pAccContext;
77 : sal_uInt16 nBorderWidth;
78 : sal_uInt16 nRadius;
79 : Size aSize;
80 : Point aPtLT, aPtMT, aPtRT;
81 : Point aPtLM, aPtMM, aPtRM;
82 : Point aPtLB, aPtMB, aPtRB;
83 : Point aPtNew;
84 : RECT_POINT eRP, eDefRP;
85 : CTL_STYLE eCS;
86 : Bitmap* pBitmap;
87 : CTL_STATE m_nState;
88 :
89 : sal_Bool mbCompleteDisable;
90 :
91 : RECT_POINT GetRPFromPoint( Point ) const;
92 : Point GetPointFromRP( RECT_POINT ) const;
93 : void SetFocusRect( const Rectangle* pRect = NULL ); // pRect == NULL -> calculate rectangle in method
94 : Point SetActualRPWithoutInvalidate( RECT_POINT eNewRP ); // returns the last point
95 :
96 : virtual void GetFocus();
97 : virtual void LoseFocus();
98 :
99 : Point GetApproxLogPtFromPixPt( const Point& rRoughPixelPoint ) const;
100 : public:
101 : SvxRectCtl( Window* pParent, const ResId& rResId, RECT_POINT eRpt = RP_MM,
102 : sal_uInt16 nBorder = 200, sal_uInt16 nCircle = 80, CTL_STYLE eStyle = CS_RECT );
103 : SvxRectCtl( Window* pParent, RECT_POINT eRpt = RP_MM,
104 : sal_uInt16 nBorder = 200, sal_uInt16 nCircle = 80, CTL_STYLE eStyle = CS_RECT );
105 : virtual ~SvxRectCtl();
106 :
107 : virtual void Paint( const Rectangle& rRect );
108 : virtual void MouseButtonDown( const MouseEvent& rMEvt );
109 : virtual void KeyInput( const KeyEvent& rKeyEvt );
110 : virtual void StateChanged( StateChangedType nStateChange );
111 : virtual void DataChanged( const DataChangedEvent& rDCEvt );
112 : virtual void Resize();
113 :
114 : void Reset();
115 : RECT_POINT GetActualRP() const;
116 : void SetActualRP( RECT_POINT eNewRP );
117 :
118 : void SetState( CTL_STATE nState );
119 :
120 : sal_uInt8 GetNumOfChildren( void ) const; // returns number of usable radio buttons
121 :
122 : Rectangle CalculateFocusRectangle( void ) const;
123 : Rectangle CalculateFocusRectangle( RECT_POINT eRectPoint ) const;
124 :
125 : virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible();
126 :
127 : RECT_POINT GetApproxRPFromPixPt( const ::com::sun::star::awt::Point& rPixelPoint ) const;
128 :
129 0 : sal_Bool IsCompletelyDisabled() const { return mbCompleteDisable; }
130 : void DoCompletelyDisable(sal_Bool bNew);
131 : void SetCS(CTL_STYLE eNew);
132 : };
133 :
134 : /*************************************************************************
135 : |* Preview control for the display of bitmaps
136 : \************************************************************************/
137 :
138 : class SVX_DLLPUBLIC SvxBitmapCtl
139 : {
140 : protected:
141 : Size aSize;
142 : sal_uInt16 nLines;
143 : Color aPixelColor, aBackgroundColor;
144 : const sal_uInt16* pBmpArray;
145 :
146 : public:
147 : SvxBitmapCtl( Window* pParent, const Size& rSize );
148 : ~SvxBitmapCtl();
149 :
150 : BitmapEx GetBitmapEx();
151 :
152 0 : void SetBmpArray( const sal_uInt16* pPixel ) { pBmpArray = pPixel; }
153 0 : void SetLines( sal_uInt16 nLns ) { nLines = nLns; }
154 0 : void SetPixelColor( Color aColor ) { aPixelColor = aColor; }
155 0 : void SetBackgroundColor( Color aColor ) { aBackgroundColor = aColor; }
156 : };
157 :
158 : /*************************************************************************
159 : |* Control for editing bitmaps
160 : \************************************************************************/
161 :
162 : class SVX_DLLPUBLIC SvxPixelCtl : public Control
163 : {
164 : private:
165 : using OutputDevice::SetLineColor;
166 :
167 : protected:
168 : sal_uInt16 nLines, nSquares;
169 : Color aPixelColor;
170 : Color aBackgroundColor;
171 : Color aLineColor;
172 : Size aRectSize;
173 : sal_uInt16* pPixel;
174 : sal_Bool bPaintable;
175 :
176 : void ChangePixel( sal_uInt16 nPixel );
177 :
178 : public:
179 : SvxPixelCtl( Window* pParent, const ResId& rResId,
180 : sal_uInt16 nNumber = 8 );
181 : ~SvxPixelCtl();
182 :
183 : virtual void Paint( const Rectangle& rRect );
184 : virtual void MouseButtonDown( const MouseEvent& rMEvt );
185 :
186 : void SetXBitmap( const BitmapEx& rBitmapEx );
187 :
188 0 : void SetPixelColor( const Color& rCol ) { aPixelColor = rCol; }
189 0 : void SetBackgroundColor( const Color& rCol ) { aBackgroundColor = rCol; }
190 0 : void SetLineColor( const Color& rCol ) { aLineColor = rCol; }
191 :
192 0 : sal_uInt16 GetLineCount() const { return nLines; }
193 : Color GetPixelColor() const { return aPixelColor; }
194 : Color GetBackgroundColor() const { return aBackgroundColor; }
195 :
196 0 : sal_uInt16* GetBitmapPixelPtr() { return pPixel; }
197 :
198 0 : void SetPaintable( sal_Bool bTmp ) { bPaintable = bTmp; }
199 : void Reset();
200 : };
201 :
202 : /************************************************************************/
203 :
204 64 : class SVX_DLLPUBLIC ColorLB : public ColorListBox
205 : {
206 :
207 : public:
208 0 : ColorLB( Window* pParent, ResId Id ) : ColorListBox( pParent, Id ) {}
209 64 : ColorLB( Window* pParent, WinBits aWB ) : ColorListBox( pParent, aWB ) {}
210 :
211 : virtual void Fill( const XColorListRef &pTab );
212 :
213 : void Append( const XColorEntry& rEntry );
214 : void Modify( const XColorEntry& rEntry, sal_uInt16 nPos );
215 : };
216 :
217 : /************************************************************************/
218 :
219 0 : class SVX_DLLPUBLIC HatchingLB : public ListBox
220 : {
221 : XHatchListRef mpList;
222 : public:
223 : explicit HatchingLB(Window* pParent, ResId Id);
224 : explicit HatchingLB(Window* pParent, WinBits aWB);
225 :
226 : virtual void Fill( const XHatchListRef &pList );
227 :
228 : void Append( const XHatchEntry& rEntry, const Bitmap& rBitmap );
229 : void Modify( const XHatchEntry& rEntry, sal_uInt16 nPos, const Bitmap& rBitmap );
230 : };
231 :
232 : /************************************************************************/
233 :
234 0 : class SVX_DLLPUBLIC GradientLB : public ListBox
235 : {
236 : XGradientListRef mpList;
237 : public:
238 : explicit GradientLB(Window* pParent, ResId Id);
239 : explicit GradientLB(Window* pParent, WinBits aWB);
240 :
241 : virtual void Fill( const XGradientListRef &pList );
242 :
243 : void Append( const XGradientEntry& rEntry, const Bitmap& rBitmap );
244 : void Modify( const XGradientEntry& rEntry, sal_uInt16 nPos, const Bitmap& rBitmap );
245 : void SelectEntryByList( const XGradientListRef &pList, const String& rStr,
246 : const XGradient& rXGradient, sal_uInt16 nDist = 0 );
247 : };
248 :
249 : /************************************************************************/
250 :
251 0 : class SVX_DLLPUBLIC BitmapLB : public ListBox
252 : {
253 : public:
254 : explicit BitmapLB(Window* pParent, ResId Id);
255 :
256 : virtual void Fill(const XBitmapListRef &pList);
257 :
258 : void Append(const Size& rSize, const XBitmapEntry& rEntry);
259 : void Modify(const Size& rSize, const XBitmapEntry& rEntry, sal_uInt16 nPos);
260 : void SelectEntryByList(const XBitmapList* pList, const String& rStr);
261 :
262 : private:
263 : BitmapEx maBitmapEx;
264 :
265 : XBitmapListRef mpList;
266 : };
267 :
268 : /************************************************************************/
269 :
270 64 : class FillAttrLB : public ColorListBox
271 : {
272 : private:
273 : BitmapEx maBitmapEx;
274 :
275 : public:
276 : FillAttrLB( Window* pParent, WinBits aWB );
277 :
278 : virtual void Fill( const XColorListRef &pList );
279 : virtual void Fill( const XHatchListRef &pList );
280 : virtual void Fill( const XGradientListRef &pList );
281 : virtual void Fill( const XBitmapListRef &pList );
282 : };
283 :
284 : /************************************************************************/
285 :
286 64 : class FillTypeLB : public ListBox
287 : {
288 :
289 : public:
290 : FillTypeLB( Window* pParent, ResId Id ) : ListBox( pParent, Id ) {}
291 64 : FillTypeLB( Window* pParent, WinBits aWB ) : ListBox( pParent, aWB ) {}
292 :
293 : virtual void Fill();
294 : };
295 :
296 : /************************************************************************/
297 :
298 : class SVX_DLLPUBLIC LineLB : public ListBox
299 : {
300 : private:
301 : /// bitfield
302 : /// defines if standard fields (none, solid) are added, default is true
303 : bool mbAddStandardFields : 1;
304 :
305 : public:
306 : LineLB(Window* pParent, ResId Id);
307 : LineLB(Window* pParent, WinBits aWB);
308 : virtual ~LineLB();
309 :
310 : virtual void Fill(const XDashListRef &pList);
311 61 : bool getAddStandardFields() const { return mbAddStandardFields; }
312 : void setAddStandardFields(bool bNew);
313 :
314 : void Append(const XDashEntry& rEntry, const Bitmap& rBitmap );
315 : void Modify(const XDashEntry& rEntry, sal_uInt16 nPos, const Bitmap& rBitmap );
316 : void SelectEntryByList(const XDashList* pList, const String& rStr, const XDash& rDash, sal_uInt16 nDist = 0);
317 : };
318 :
319 : /************************************************************************/
320 :
321 : class SVX_DLLPUBLIC LineEndLB : public ListBox
322 : {
323 :
324 : public:
325 : LineEndLB( Window* pParent, ResId Id );
326 : LineEndLB( Window* pParent, WinBits aWB );
327 : virtual ~LineEndLB (void);
328 :
329 : virtual void Fill( const XLineEndListRef &pList, bool bStart = true );
330 :
331 : void Append( const XLineEndEntry& rEntry, const Bitmap& rBitmap, bool bStart = true );
332 : void Modify( const XLineEndEntry& rEntry, sal_uInt16 nPos, const Bitmap& rBitmap, bool bStart = true );
333 : };
334 :
335 : //////////////////////////////////////////////////////////////////////////////
336 :
337 : class SdrObject;
338 : class SdrModel;
339 :
340 : class SvxPreviewBase : public Control
341 : {
342 : private:
343 : SdrModel* mpModel;
344 : VirtualDevice* mpBufferDevice;
345 :
346 : protected:
347 : void InitSettings(bool bForeground, bool bBackground);
348 :
349 : // prepare buffered paint
350 : void LocalPrePaint();
351 :
352 : // end and output buffered paint
353 : void LocalPostPaint();
354 :
355 : public:
356 : SvxPreviewBase(Window* pParent, const ResId& rResId);
357 : SvxPreviewBase(Window* pParent);
358 : virtual ~SvxPreviewBase();
359 :
360 : // change support
361 : virtual void StateChanged(StateChangedType nStateChange);
362 : virtual void DataChanged(const DataChangedEvent& rDCEvt);
363 :
364 : // dada read access
365 0 : SdrModel& getModel() const { return *mpModel; }
366 0 : OutputDevice& getBufferDevice() const { return *mpBufferDevice; }
367 : };
368 :
369 : /*************************************************************************
370 : |*
371 : |* SvxLinePreview
372 : |*
373 : \************************************************************************/
374 :
375 : class SVX_DLLPUBLIC SvxXLinePreview : public SvxPreviewBase
376 : {
377 : private:
378 : SdrObject* mpLineObjA;
379 : SdrObject* mpLineObjB;
380 : SdrObject* mpLineObjC;
381 :
382 : Graphic* mpGraphic;
383 : sal_Bool mbWithSymbol;
384 : Size maSymbolSize;
385 :
386 : public:
387 : SvxXLinePreview( Window* pParent, const ResId& rResId );
388 : virtual ~SvxXLinePreview();
389 :
390 : void SetLineAttributes(const SfxItemSet& rItemSet);
391 :
392 0 : void ShowSymbol( sal_Bool b ) { mbWithSymbol = b; };
393 : void SetSymbol( Graphic* p, const Size& s );
394 : void ResizeSymbol( const Size& s );
395 :
396 : virtual void Paint( const Rectangle& rRect );
397 : };
398 :
399 : /*************************************************************************
400 : |*
401 : |* SvxXRectPreview
402 : |*
403 : \************************************************************************/
404 :
405 : class SVX_DLLPUBLIC SvxXRectPreview : public SvxPreviewBase
406 : {
407 : private:
408 : SdrObject* mpRectangleObject;
409 :
410 : public:
411 : SvxXRectPreview(Window* pParent, const ResId& rResId);
412 : SvxXRectPreview(Window* pParent);
413 : virtual ~SvxXRectPreview();
414 :
415 : void SetAttributes(const SfxItemSet& rItemSet);
416 :
417 : virtual void Paint( const Rectangle& rRect );
418 : virtual void Resize();
419 : };
420 :
421 : /*************************************************************************
422 : |*
423 : |* SvxXShadowPreview
424 : |*
425 : \************************************************************************/
426 :
427 : class SVX_DLLPUBLIC SvxXShadowPreview : public SvxPreviewBase
428 : {
429 : private:
430 : SdrObject* mpRectangleObject;
431 : SdrObject* mpRectangleShadow;
432 :
433 : public:
434 : SvxXShadowPreview( Window* pParent, const ResId& rResId );
435 : virtual ~SvxXShadowPreview();
436 :
437 : void SetRectangleAttributes(const SfxItemSet& rItemSet);
438 : void SetShadowAttributes(const SfxItemSet& rItemSet);
439 : void SetShadowPosition(const Point& rPos);
440 :
441 : virtual void Paint( const Rectangle& rRect );
442 : };
443 :
444 : #endif // _SVX_DLG_CTRL_HXX
445 :
446 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|