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 INCLUDED_SVX_DLGCTRL_HXX
20 : #define INCLUDED_SVX_DLGCTRL_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 : #include <o3tl/typed_flags_set.hxx>
29 :
30 : class XOBitmap;
31 : class XOutdevItemPool;
32 :
33 : namespace com { namespace sun { namespace star { namespace awt {
34 : struct Point;
35 : } } } }
36 :
37 : /*************************************************************************
38 : |* Derived from SfxTabPage for being able to get notified through the
39 : |* virtual method from the control.
40 : \************************************************************************/
41 :
42 0 : class SAL_WARN_UNUSED SvxTabPage : public SfxTabPage
43 : {
44 :
45 : public:
46 0 : SvxTabPage(vcl::Window *pParent, const OString& rID, const OUString& rUIXMLDescription, const SfxItemSet &rAttrSet)
47 0 : : SfxTabPage(pParent, rID, rUIXMLDescription, &rAttrSet)
48 : {
49 0 : }
50 : virtual void PointChanged( vcl::Window* pWindow, RECT_POINT eRP ) = 0;
51 : };
52 :
53 : /*************************************************************************
54 : |* Control for display and selection of the corner and center points of
55 : |* an object
56 : \************************************************************************/
57 :
58 : enum class CTL_STATE
59 : {
60 : NONE = 0,
61 : NOHORZ = 1, // no horizontal input information is used
62 : NOVERT = 2, // no vertical input information is used
63 : };
64 : namespace o3tl
65 : {
66 : template<> struct typed_flags<CTL_STATE> : is_typed_flags<CTL_STATE, 0x03> {};
67 : }
68 :
69 : class SvxRectCtlAccessibleContext;
70 : class SvxPixelCtlAccessible;
71 :
72 : class SVX_DLLPUBLIC SAL_WARN_UNUSED SvxRectCtl : public Control
73 : {
74 : private:
75 : SVX_DLLPRIVATE void InitSettings(vcl::RenderContext& rRenderContext);
76 : SVX_DLLPRIVATE void InitRectBitmap();
77 : SVX_DLLPRIVATE Bitmap& GetRectBitmap();
78 : SVX_DLLPRIVATE void Resize_Impl();
79 :
80 : protected:
81 : SvxRectCtlAccessibleContext* pAccContext;
82 : sal_uInt16 nBorderWidth;
83 : sal_uInt16 nRadius;
84 : Size aSize;
85 : Point aPtLT, aPtMT, aPtRT;
86 : Point aPtLM, aPtMM, aPtRM;
87 : Point aPtLB, aPtMB, aPtRB;
88 : Point aPtNew;
89 : RECT_POINT eRP, eDefRP;
90 : CTL_STYLE eCS;
91 : Bitmap* pBitmap;
92 : CTL_STATE m_nState;
93 :
94 : bool mbCompleteDisable : 1;
95 : bool mbUpdateForeground : 1;
96 : bool mbUpdateBackground : 1;
97 :
98 : void MarkToResetSettings(bool bUpdateForeground, bool bUpdateBackground);
99 :
100 : RECT_POINT GetRPFromPoint( Point, bool bRTL = false ) const;
101 : Point GetPointFromRP( RECT_POINT ) const;
102 : void SetFocusRect( const Rectangle* pRect = NULL ); // pRect == NULL -> calculate rectangle in method
103 : Point SetActualRPWithoutInvalidate( RECT_POINT eNewRP ); // returns the last point
104 :
105 : virtual void GetFocus() SAL_OVERRIDE;
106 : virtual void LoseFocus() SAL_OVERRIDE;
107 :
108 : Point GetApproxLogPtFromPixPt( const Point& rRoughPixelPoint ) const;
109 : public:
110 : SvxRectCtl( vcl::Window* pParent, RECT_POINT eRpt = RP_MM,
111 : sal_uInt16 nBorder = 200, sal_uInt16 nCircle = 80, CTL_STYLE eStyle = CS_RECT );
112 : void SetControlSettings(RECT_POINT eRpt = RP_MM, sal_uInt16 nBorder = 200,
113 : sal_uInt16 nCircle = 80, CTL_STYLE eStyle = CS_RECT);
114 : virtual ~SvxRectCtl();
115 : virtual void dispose() SAL_OVERRIDE;
116 :
117 : virtual void Paint( vcl::RenderContext& rRenderContext, const Rectangle& rRect ) SAL_OVERRIDE;
118 : virtual void MouseButtonDown( const MouseEvent& rMEvt ) SAL_OVERRIDE;
119 : virtual void KeyInput( const KeyEvent& rKeyEvt ) SAL_OVERRIDE;
120 : virtual void StateChanged( StateChangedType nStateChange ) SAL_OVERRIDE;
121 : virtual void DataChanged( const DataChangedEvent& rDCEvt ) SAL_OVERRIDE;
122 : virtual void Resize() SAL_OVERRIDE;
123 : virtual Size GetOptimalSize() const SAL_OVERRIDE;
124 :
125 : void Reset();
126 0 : RECT_POINT GetActualRP() const { return eRP;}
127 : void SetActualRP( RECT_POINT eNewRP );
128 :
129 : void SetState( CTL_STATE nState );
130 :
131 : sal_uInt8 GetNumOfChildren() const; // returns number of usable radio buttons
132 :
133 : Rectangle CalculateFocusRectangle() const;
134 : Rectangle CalculateFocusRectangle( RECT_POINT eRectPoint ) const;
135 :
136 : virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible() SAL_OVERRIDE;
137 :
138 : RECT_POINT GetApproxRPFromPixPt( const ::com::sun::star::awt::Point& rPixelPoint ) const;
139 :
140 0 : bool IsCompletelyDisabled() const { return mbCompleteDisable; }
141 : void DoCompletelyDisable(bool bNew);
142 : void SetCS(CTL_STYLE eNew);
143 : };
144 :
145 : /*************************************************************************
146 : |* Preview control for the display of bitmaps
147 : \************************************************************************/
148 :
149 : class SVX_DLLPUBLIC SAL_WARN_UNUSED SvxBitmapCtl
150 : {
151 : protected:
152 : Size aSize;
153 : sal_uInt16 nLines;
154 : Color aPixelColor, aBackgroundColor;
155 : const sal_uInt16* pBmpArray;
156 :
157 : public:
158 : SvxBitmapCtl( vcl::Window* pParent, const Size& rSize );
159 : ~SvxBitmapCtl();
160 :
161 : BitmapEx GetBitmapEx();
162 :
163 0 : void SetBmpArray( const sal_uInt16* pPixel ) { pBmpArray = pPixel; }
164 0 : void SetLines( sal_uInt16 nLns ) { nLines = nLns; }
165 0 : void SetPixelColor( Color aColor ) { aPixelColor = aColor; }
166 0 : void SetBackgroundColor( Color aColor ) { aBackgroundColor = aColor; }
167 : };
168 :
169 : /*************************************************************************
170 : |* Control for editing bitmaps
171 : \************************************************************************/
172 :
173 : class SVX_DLLPUBLIC SAL_WARN_UNUSED SvxPixelCtl : public Control
174 : {
175 : private:
176 : using OutputDevice::SetLineColor;
177 :
178 : protected:
179 : sal_uInt16 nLines, nSquares;
180 : Color aPixelColor;
181 : Color aBackgroundColor;
182 : Color aLineColor;
183 : Size aRectSize;
184 : sal_uInt16* pPixel;
185 : bool bPaintable;
186 : //Add member identifying position
187 : Point aFocusPosition;
188 : Rectangle implCalFocusRect( const Point& aPosition );
189 : void ChangePixel( sal_uInt16 nPixel );
190 :
191 : public:
192 : SvxPixelCtl( vcl::Window* pParent, sal_uInt16 nNumber = 8 );
193 :
194 : virtual ~SvxPixelCtl();
195 : virtual void dispose() SAL_OVERRIDE;
196 :
197 : virtual void Paint( vcl::RenderContext& rRenderContext, const Rectangle& rRect ) SAL_OVERRIDE;
198 : virtual void MouseButtonDown( const MouseEvent& rMEvt ) SAL_OVERRIDE;
199 : virtual void Resize() SAL_OVERRIDE;
200 : virtual Size GetOptimalSize() const SAL_OVERRIDE;
201 :
202 : void SetXBitmap( const BitmapEx& rBitmapEx );
203 :
204 0 : void SetPixelColor( const Color& rCol ) { aPixelColor = rCol; }
205 0 : void SetBackgroundColor( const Color& rCol ) { aBackgroundColor = rCol; }
206 0 : void SetLineColor( const Color& rCol ) { aLineColor = rCol; }
207 :
208 0 : sal_uInt16 GetLineCount() const { return nLines; }
209 : Color GetPixelColor() const { return aPixelColor; }
210 : Color GetBackgroundColor() const { return aBackgroundColor; }
211 :
212 : sal_uInt16 GetBitmapPixel( const sal_uInt16 nPixelNumber );
213 0 : sal_uInt16* GetBitmapPixelPtr() { return pPixel; }
214 :
215 0 : void SetPaintable( bool bTmp ) { bPaintable = bTmp; }
216 : void Reset();
217 : SvxPixelCtlAccessible* m_pAccess;
218 : ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > m_xAccess;
219 : virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible() SAL_OVERRIDE;
220 0 : long GetSquares() const { return nSquares ; }
221 0 : long GetWidth() const { return aRectSize.getWidth() ; }
222 0 : long GetHeight() const { return aRectSize.getHeight() ; }
223 :
224 : //Device Pixel .
225 : long ShowPosition( const Point &pt);
226 :
227 : long PointToIndex(const Point &pt) const;
228 : Point IndexToPoint(long nIndex) const ;
229 : long GetFoucsPosIndex() const ;
230 : //Keyboard function for key input and focus handling function
231 : virtual void KeyInput( const KeyEvent& rKEvt ) SAL_OVERRIDE;
232 : virtual void GetFocus() SAL_OVERRIDE;
233 : virtual void LoseFocus() SAL_OVERRIDE;
234 : };
235 :
236 : /************************************************************************/
237 :
238 0 : class SVX_DLLPUBLIC SAL_WARN_UNUSED ColorLB : public ColorListBox
239 : {
240 :
241 : public:
242 : ColorLB( vcl::Window* pParent, ResId Id ) : ColorListBox( pParent, Id ) {}
243 0 : ColorLB( vcl::Window* pParent, WinBits aWB ) : ColorListBox( pParent, aWB ) {}
244 :
245 : void Fill( const XColorListRef &pTab );
246 :
247 : void Append( const XColorEntry& rEntry );
248 : void Modify( const XColorEntry& rEntry, sal_Int32 nPos );
249 : };
250 :
251 : /************************************************************************/
252 :
253 0 : class SVX_DLLPUBLIC SAL_WARN_UNUSED HatchingLB : public ListBox
254 : {
255 : XHatchListRef mpList;
256 : public:
257 : explicit HatchingLB(vcl::Window* pParent, WinBits aWB);
258 :
259 : void Fill( const XHatchListRef &pList );
260 :
261 : void Append( const XHatchEntry& rEntry, const Bitmap& rBitmap );
262 : void Modify( const XHatchEntry& rEntry, sal_Int32 nPos, const Bitmap& rBitmap );
263 : };
264 :
265 : /************************************************************************/
266 :
267 0 : class SVX_DLLPUBLIC SAL_WARN_UNUSED GradientLB : public ListBox
268 : {
269 : XGradientListRef mpList;
270 : public:
271 : explicit GradientLB(vcl::Window* pParent, WinBits aWB);
272 :
273 : void Fill( const XGradientListRef &pList );
274 :
275 : void Append( const XGradientEntry& rEntry, const Bitmap& rBitmap );
276 : void Modify( const XGradientEntry& rEntry, sal_Int32 nPos, const Bitmap& rBitmap );
277 : void SelectEntryByList( const XGradientListRef &pList, const OUString& rStr,
278 : const XGradient& rXGradient, sal_uInt16 nDist = 0 );
279 : };
280 :
281 : /************************************************************************/
282 :
283 0 : class SVX_DLLPUBLIC SAL_WARN_UNUSED BitmapLB : public ListBox
284 : {
285 : public:
286 : explicit BitmapLB(vcl::Window* pParent, WinBits aWB);
287 :
288 : void Fill(const XBitmapListRef &pList);
289 :
290 : void Append(const Size& rSize, const XBitmapEntry& rEntry);
291 : void Modify(const Size& rSize, const XBitmapEntry& rEntry, sal_Int32 nPos);
292 : void SelectEntryByList(const XBitmapList* pList, const OUString& rStr);
293 :
294 : private:
295 : BitmapEx maBitmapEx;
296 :
297 : XBitmapListRef mpList;
298 : };
299 :
300 : /************************************************************************/
301 :
302 51 : class SVX_DLLPUBLIC SAL_WARN_UNUSED FillAttrLB : public ColorListBox
303 : {
304 : private:
305 : BitmapEx maBitmapEx;
306 :
307 : public:
308 : FillAttrLB( vcl::Window* pParent, WinBits aWB );
309 :
310 : void Fill( const XHatchListRef &pList );
311 : void Fill( const XGradientListRef &pList );
312 : void Fill( const XBitmapListRef &pList );
313 : };
314 :
315 : /************************************************************************/
316 :
317 51 : class SVX_DLLPUBLIC SAL_WARN_UNUSED FillTypeLB : public ListBox
318 : {
319 :
320 : public:
321 : FillTypeLB( vcl::Window* pParent, ResId Id ) : ListBox( pParent, Id ) {}
322 51 : FillTypeLB( vcl::Window* pParent, WinBits aWB ) : ListBox( pParent, aWB ) {}
323 :
324 : void Fill();
325 : };
326 :
327 : /************************************************************************/
328 :
329 0 : class SVX_DLLPUBLIC SAL_WARN_UNUSED LineLB : public ListBox
330 : {
331 : private:
332 : /// bitfield
333 : /// defines if standard fields (none, solid) are added, default is true
334 : bool mbAddStandardFields : 1;
335 :
336 : public:
337 : LineLB(vcl::Window* pParent, WinBits aWB);
338 :
339 : void Fill(const XDashListRef &pList);
340 0 : bool getAddStandardFields() const { return mbAddStandardFields; }
341 : void setAddStandardFields(bool bNew);
342 :
343 : void Append(const XDashEntry& rEntry, const Bitmap& rBitmap );
344 : void Modify(const XDashEntry& rEntry, sal_Int32 nPos, const Bitmap& rBitmap );
345 : void SelectEntryByList(const XDashList* pList, const OUString& rStr, const XDash& rDash, sal_uInt16 nDist = 0);
346 : };
347 :
348 :
349 : /************************************************************************/
350 :
351 0 : class SVX_DLLPUBLIC SAL_WARN_UNUSED LineEndLB : public ListBox
352 : {
353 :
354 : public:
355 : LineEndLB( vcl::Window* pParent, WinBits aWB );
356 :
357 : void Fill( const XLineEndListRef &pList, bool bStart = true );
358 :
359 : void Append( const XLineEndEntry& rEntry, const Bitmap& rBitmap, bool bStart = true );
360 : void Modify( const XLineEndEntry& rEntry, sal_Int32 nPos, const Bitmap& rBitmap, bool bStart = true );
361 : };
362 :
363 :
364 : class SdrObject;
365 : class SdrPathObj;
366 : class SdrModel;
367 :
368 : class SAL_WARN_UNUSED SvxPreviewBase : public Control
369 : {
370 : private:
371 : SdrModel* mpModel;
372 : VclPtr<VirtualDevice> mpBufferDevice;
373 :
374 : protected:
375 : void InitSettings(bool bForeground, bool bBackground);
376 :
377 : // prepare buffered paint
378 : void LocalPrePaint(vcl::RenderContext& rRenderContext);
379 :
380 : // end and output buffered paint
381 : void LocalPostPaint(vcl::RenderContext& rRenderContext);
382 :
383 : public:
384 : SvxPreviewBase(vcl::Window* pParent);
385 : virtual ~SvxPreviewBase();
386 : virtual void dispose() SAL_OVERRIDE;
387 :
388 : // change support
389 : virtual void StateChanged(StateChangedType nStateChange) SAL_OVERRIDE;
390 : virtual void DataChanged(const DataChangedEvent& rDCEvt) SAL_OVERRIDE;
391 :
392 : // dada read access
393 0 : SdrModel& getModel() const
394 : {
395 0 : return *mpModel;
396 : }
397 0 : OutputDevice& getBufferDevice() const
398 : {
399 0 : return *mpBufferDevice;
400 : }
401 : };
402 :
403 : /*************************************************************************
404 : |*
405 : |* SvxLinePreview
406 : |*
407 : \************************************************************************/
408 :
409 : class SVX_DLLPUBLIC SAL_WARN_UNUSED SvxXLinePreview : public SvxPreviewBase
410 : {
411 : private:
412 : SdrPathObj* mpLineObjA;
413 : SdrPathObj* mpLineObjB;
414 : SdrPathObj* mpLineObjC;
415 :
416 : Graphic* mpGraphic;
417 : bool mbWithSymbol;
418 : Size maSymbolSize;
419 :
420 : public:
421 : SvxXLinePreview( vcl::Window* pParent );
422 : virtual ~SvxXLinePreview();
423 : virtual void dispose() SAL_OVERRIDE;
424 :
425 : void SetLineAttributes(const SfxItemSet& rItemSet);
426 :
427 0 : void ShowSymbol( bool b ) { mbWithSymbol = b; };
428 : void SetSymbol( Graphic* p, const Size& s );
429 : void ResizeSymbol( const Size& s );
430 :
431 : virtual void Paint( vcl::RenderContext& rRenderContext, const Rectangle& rRect ) SAL_OVERRIDE;
432 : virtual void Resize() SAL_OVERRIDE;
433 : virtual Size GetOptimalSize() const SAL_OVERRIDE;
434 : };
435 :
436 : /*************************************************************************
437 : |*
438 : |* SvxXRectPreview
439 : |*
440 : \************************************************************************/
441 :
442 : class SVX_DLLPUBLIC SAL_WARN_UNUSED SvxXRectPreview : public SvxPreviewBase
443 : {
444 : private:
445 : SdrObject* mpRectangleObject;
446 :
447 : public:
448 : SvxXRectPreview(vcl::Window* pParent);
449 : virtual ~SvxXRectPreview();
450 : virtual void dispose() SAL_OVERRIDE;
451 :
452 : void SetAttributes(const SfxItemSet& rItemSet);
453 :
454 : virtual void Paint( vcl::RenderContext& rRenderContext, const Rectangle& rRect ) SAL_OVERRIDE;
455 : virtual void Resize() SAL_OVERRIDE;
456 : };
457 :
458 : /*************************************************************************
459 : |*
460 : |* SvxXShadowPreview
461 : |*
462 : \************************************************************************/
463 :
464 : class SVX_DLLPUBLIC SAL_WARN_UNUSED SvxXShadowPreview : public SvxPreviewBase
465 : {
466 : private:
467 : Point maShadowOffset;
468 :
469 : SdrObject* mpRectangleObject;
470 : SdrObject* mpRectangleShadow;
471 :
472 : public:
473 : SvxXShadowPreview(vcl::Window *pParent);
474 :
475 : virtual ~SvxXShadowPreview();
476 : virtual void dispose() SAL_OVERRIDE;
477 :
478 : void SetRectangleAttributes(const SfxItemSet& rItemSet);
479 : void SetShadowAttributes(const SfxItemSet& rItemSet);
480 : void SetShadowPosition(const Point& rPos);
481 :
482 : virtual void Paint( vcl::RenderContext& rRenderContext, const Rectangle& rRect ) SAL_OVERRIDE;
483 : };
484 :
485 : #endif // INCLUDED_SVX_DLGCTRL_HXX
486 :
487 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|