LibreOffice Module vcl (master)  1
ivctrl.hxx
Go to the documentation of this file.
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 
20 #pragma once
21 
22 #if !defined(VCL_DLLIMPLEMENTATION) && !defined(TOOLKIT_DLLIMPLEMENTATION) && !defined(VCL_INTERNALS)
23 #error "don't use this in new code"
24 #endif
25 
26 #include <memory>
27 #include <vcl/dllapi.h>
28 #include <vcl/ctrl.hxx>
29 #include <tools/link.hxx>
30 #include <vcl/image.hxx>
31 #include <o3tl/deleter.hxx>
32 #include <o3tl/typed_flags_set.hxx>
33 
35 
36 enum class SvxIconViewFlags
37 {
38  NONE = 0x0000,
39  POS_LOCKED = 0x0001,
40  SELECTED = 0x0002,
41  FOCUSED = 0x0004,
42  POS_MOVED = 0x0008, // Moved by Drag and Drop, but not logged
43 };
44 namespace o3tl
45 {
46  template<> struct typed_flags<SvxIconViewFlags> : is_typed_flags<SvxIconViewFlags, 0x000f> {};
47 }
48 
50 {
51  Full = 1, // Enlarge BoundRect southwards
52  Short // Shorten with "..."
53 };
54 
56 {
57  Free, // Free pixel-perfect positioning
58  AutoArrange, // Auto arrange
59 };
60 
62 {
64 
65  OUString aText;
66  OUString aQuickHelpText;
67 
68  friend class SvxIconChoiceCtrl_Impl;
69  friend class IcnCursor_Impl;
70  friend class EntryList_Impl;
71  friend class IcnGridMap_Impl;
72 
73  tools::Rectangle aRect; // Bounding-Rectangle of the entry
74  tools::Rectangle aGridRect; // Only valid in Grid-mode
75  sal_Int32 nPos;
76 
77  /*
78  The insert position in the Insertlist is equal to the (sort) order stated at the Insert
79  (-> Order of the anchors in the anchors-list!). In "AutoArrange" mode the visible order
80  can differ. The entries will be linked because of this.
81  */
82  SvxIconChoiceCtrlEntry* pblink; // backward (linker neighbour)
83  SvxIconChoiceCtrlEntry* pflink; // forward (rechter neighbour)
84 
86  sal_uInt16 nX,nY; // for keyboard control
88 
89  void ClearFlags( SvxIconViewFlags nMask ) { nFlags &= ~nMask; }
90  void SetFlags( SvxIconViewFlags nMask ) { nFlags |= nMask; }
91  void AssignFlags( SvxIconViewFlags _nFlags ) { nFlags = _nFlags; }
92 
93  // set left neighbour (A <-> B ==> A <-> this <-> B)
95  {
96  pA->pflink->pblink = this; // X <- B
97  this->pflink = pA->pflink; // X -> B
98  this->pblink = pA; // A <- X
99  pA->pflink = this; // A -> X
100  }
101  // Unlink (A <-> this <-> B ==> A <-> B)
102  void Unlink()
103  {
104  this->pblink->pflink = this->pflink;
105  this->pflink->pblink = this->pblink;
106  this->pflink = nullptr;
107  this->pblink = nullptr;
108  }
109 
110 public:
111  SvxIconChoiceCtrlEntry( const OUString& rText, const Image& rImage );
112 
113  const Image& GetImage () const { return aImage; }
114  void SetText ( const OUString& rText ) { aText = rText; }
115  const OUString& GetText () const { return aText; }
116  OUString VCL_DLLPUBLIC GetDisplayText() const;
117  void SetQuickHelpText( const OUString& rText ) { aQuickHelpText = rText; }
118  const OUString& GetQuickHelpText() const { return aQuickHelpText; }
119 
121  SvxIconViewFlags GetFlags() const { return nFlags; }
122  bool IsSelected() const { return bool(nFlags & SvxIconViewFlags::SELECTED); }
123  bool IsFocused() const { return bool(nFlags & SvxIconViewFlags::FOCUSED); }
124  bool IsPosLocked() const { return bool(nFlags & SvxIconViewFlags::POS_LOCKED); }
125 };
126 
128 {
129  long nWidth;
130 
131 public:
133  nWidth( 100 ) {}
135 
136  void SetWidth( long nWd ) { nWidth = nWd; }
137  long GetWidth() const { return nWidth; }
138 };
139 
140 
141 /*
142  Window-Bits:
143  WB_ICON // Text beneath the icon
144  WB_SMALL_ICON // Text right to the icon, position does not mind
145  WB_DETAILS // Text right to the icon, limited positioning
146  WB_BORDER
147  WB_NOHIDESELECTION // Draw selection inactively, if not focused.
148  WB_NOHSCROLL
149  WB_NOVSCROLL
150  WB_NOSELECTION
151  WB_SMART_ARRANGE // Keep Visible-Area at arrange
152  WB_ALIGN_TOP // Align line vy line LTR
153  WB_ALIGN_LEFT // Align columns from top to bottom
154  WB_NODRAGSELECTION // No selection with tracking rectangle
155  WB_NOCOLUMNHEADER // No Headerbar in Details view (Headerbar not implemented)
156  WB_NOPOINTERFOCUS // No GrabFocus at MouseButtonDown
157  WB_HIGHLIGHTFRAME // The entry beneath the mouse will be highlighted
158  WB_NOASYNCSELECTHDL // Do not collect events -> Selection handlers will be called synchronously
159 */
160 
161 #define WB_ICON WB_RECTSTYLE
162 #define WB_SMALLICON WB_SMALLSTYLE
163 #define WB_DETAILS WB_VCENTER
164 #define WB_NOHSCROLL WB_SPIN
165 #define WB_NOVSCROLL WB_DRAG
166 #define WB_NOSELECTION WB_REPEAT
167 #define WB_NODRAGSELECTION WB_PATHELLIPSIS
168 #define WB_SMART_ARRANGE 0x01000000 // used to be WB_PASSWORD
169 #define WB_ALIGN_TOP WB_TOP
170 #define WB_ALIGN_LEFT WB_LEFT
171 #define WB_NOCOLUMNHEADER WB_CENTER
172 #define WB_HIGHLIGHTFRAME WB_IGNORETAB
173 #define WB_NOASYNCSELECTHDL WB_NOLABEL
174 
175 class MnemonicGenerator;
176 
178 {
180 
182  std::unique_ptr<SvxIconChoiceCtrl_Impl, o3tl::default_delete<SvxIconChoiceCtrl_Impl>> _pImpl;
183 
184 protected:
185 
186  virtual void KeyInput( const KeyEvent& rKEvt ) override;
187  virtual void Command( const CommandEvent& rCEvt ) override;
188  virtual void Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect ) override;
189  virtual void MouseButtonDown( const MouseEvent& rMEvt ) override;
190  virtual void MouseButtonUp( const MouseEvent& rMEvt ) override;
191  virtual void MouseMove( const MouseEvent& rMEvt ) override;
192  virtual void Resize() override;
193  virtual void GetFocus() override;
194  virtual void LoseFocus() override;
195  void ClickIcon();
196  virtual void DataChanged( const DataChangedEvent& rDCEvt ) override;
197  virtual void RequestHelp( const HelpEvent& rHEvt ) override;
198  static void DrawEntryImage(
199  SvxIconChoiceCtrlEntry const * pEntry,
200  const Point& rPos,
201  OutputDevice& rDev );
202 
203  static OUString GetEntryText( SvxIconChoiceCtrlEntry const * pEntry );
204 
205  virtual void FillLayoutData() const override;
206 
207  void CallImplEventListeners(VclEventId nEvent, void* pData);
208 
209 public:
210 
211  SvtIconChoiceCtrl( vcl::Window* pParent, WinBits nWinStyle );
212  virtual ~SvtIconChoiceCtrl() override;
213  virtual void dispose() override;
214 
215  WinBits GetStyle() const;
216 
217  void SetFont( const vcl::Font& rFont );
218  void SetPointFont( const vcl::Font& rFont );
219 
220  void SetClickHdl( const Link<SvtIconChoiceCtrl*,void>& rLink ) { _aClickIconHdl = rLink; }
221 
223  void SetBackground( const Wallpaper& rWallpaper );
224 
225  void ArrangeIcons();
226 
227 
228  SvxIconChoiceCtrlEntry* InsertEntry( const OUString& rText,
229  const Image& rImage);
230 
231  void RemoveEntry(sal_Int32 nEntryListPos);
232 
233  bool DoKeyInput( const KeyEvent& rKEvt );
234 
235  sal_Int32 GetEntryCount() const;
236  SvxIconChoiceCtrlEntry* GetEntry( sal_Int32 nPos ) const;
237  sal_Int32 GetEntryListPos( SvxIconChoiceCtrlEntry const * pEntry ) const;
238  using Window::SetCursor;
239  void SetCursor( SvxIconChoiceCtrlEntry* pEntry );
241 
242  // sal_uLong is the position of the selected element in the list
243  SvxIconChoiceCtrlEntry* GetSelectedEntry() const;
244 
245 #ifdef DBG_UTIL
247 #endif
248 
249  tools::Rectangle GetBoundingBox( SvxIconChoiceCtrlEntry* pEntry ) const;
250  tools::Rectangle GetEntryCharacterBounds( const sal_Int32 _nEntryPos, const sal_Int32 _nCharacterIndex ) const;
251 
252  void SetNoSelection();
253 
254  // ACCESSIBILITY ==========================================================
255 
257  virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessible() override;
258 };
259 
260 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Link< SvtIconChoiceCtrl *, void > _aClickIconHdl
Definition: ivctrl.hxx:181
void AssignFlags(SvxIconViewFlags _nFlags)
Definition: ivctrl.hxx:91
virtual void MouseButtonDown(const MouseEvent &rMEvt)
Definition: mouse.cxx:414
void SetWidth(long nWd)
Definition: ivctrl.hxx:136
SvxIconChoiceCtrlEntry * GetEntry(const Point &rDocPos, bool bHit=false)
Definition: imivctl1.cxx:1520
#define VCL_DLLPUBLIC
Definition: dllapi.h:29
virtual void FillLayoutData() const
Definition: ctrl.cxx:80
SvxIconChoiceCtrlEntry * pflink
Definition: ivctrl.hxx:83
long GetWidth() const
Definition: ivctrl.hxx:137
bool IsSelected() const
Definition: ivctrl.hxx:122
virtual void MouseButtonUp(const MouseEvent &rMEvt)
Definition: mouse.cxx:421
SvxIconViewFlags nFlags
Definition: ivctrl.hxx:87
std::unique_ptr< SvxIconChoiceCtrl_Impl, o3tl::default_delete< SvxIconChoiceCtrl_Impl > > _pImpl
Definition: ivctrl.hxx:182
SvxIconChoiceCtrlEntry * pblink
Definition: ivctrl.hxx:82
sal_Int64 WinBits
tools::Rectangle aRect
Definition: ivctrl.hxx:73
virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessible()
void SetBackground()
void SetQuickHelpText(const OUString &rText)
Definition: ivctrl.hxx:117
const OUString & GetQuickHelpText() const
Definition: ivctrl.hxx:118
void SetEntryTextMode(SvxIconChoiceCtrlTextMode, SvxIconChoiceCtrlEntry *pEntry)
Definition: imivctl1.cxx:2436
VclEventId
Definition: vclevent.hxx:37
size_t GetEntryCount() const
Definition: imivctl.hxx:376
void SetFlags(SvxIconViewFlags nMask)
Definition: ivctrl.hxx:90
tools::Rectangle aGridRect
Definition: ivctrl.hxx:74
void ClearFlags(SvxIconViewFlags nMask)
Definition: ivctrl.hxx:89
SvxIconViewFlags GetFlags() const
Definition: ivctrl.hxx:121
OUString aQuickHelpText
Definition: ivctrl.hxx:66
Some things multiple-inherit from VclAbstractDialog and OutputDevice, so we need to use virtual inher...
Definition: outdev.hxx:302
SvxIconChoiceCtrlTextMode eTextMode
Definition: ivctrl.hxx:85
void SetClickHdl(const Link< SvtIconChoiceCtrl *, void > &rLink)
Definition: ivctrl.hxx:220
SvxIconChoiceCtrlTextMode GetTextMode() const
Definition: ivctrl.hxx:120
vcl::Cursor * GetCursor() const
Definition: window2.cxx:1203
virtual void dispose() override
This is intended to be used to clear any locally held references to other Window-subclass objects...
Definition: ctrl.cxx:59
SvxIconViewFlags
Definition: ivctrl.hxx:36
virtual void LoseFocus()
Definition: window.cxx:1849
void SetBacklink(SvxIconChoiceCtrlEntry *pA)
Definition: ivctrl.hxx:94
void SetPointFont(vcl::RenderContext &rRenderContext, const vcl::Font &rFont)
Definition: window.cxx:2167
void RemoveEntry(size_t nPos)
Definition: imivctl1.cxx:228
virtual void KeyInput(const KeyEvent &rKEvt)
Definition: window.cxx:1799
SvxIconChoiceCtrlTextMode
Definition: ivctrl.hxx:49
friend class EntryList_Impl
Definition: ivctrl.hxx:70
virtual void Resize() override
Definition: ctrl.cxx:74
Definition: ctrl.hxx:33
virtual void GetFocus()
Definition: window.cxx:1835
bool IsFocused() const
Definition: ivctrl.hxx:123
void SetCursor(vcl::Cursor *pCursor)
Definition: window.cxx:2997
void SetFont(const vcl::Font &rNewFont)
Definition: image.hxx:39
virtual void Paint(vcl::RenderContext &rRenderContext, const tools::Rectangle &rRect)
Definition: paint.cxx:1019
void InsertEntry(std::unique_ptr< SvxIconChoiceCtrlEntry >, size_t nPos)
Definition: imivctl1.cxx:190
virtual void MouseMove(const MouseEvent &rMEvt)
Definition: mouse.cxx:408
sal_Int32 GetEntryListPos(SvxIconChoiceCtrlEntry const *) const
Definition: imivctl1.cxx:2602
WinBits GetStyle() const
Definition: window2.cxx:953
const Image & GetImage() const
Definition: ivctrl.hxx:113
virtual void Command(const CommandEvent &rCEvt)
Definition: window.cxx:1917
const OUString & GetText() const
Definition: ivctrl.hxx:115
virtual void RequestHelp(const HelpEvent &rHEvt)
Definition: window.cxx:1863
bool IsPosLocked() const
Definition: ivctrl.hxx:124
SvxIconChoiceCtrlEntry(const OUString &rText, const Image &rImage)
Definition: ivctrl.cxx:57
SvxIconChoiceCtrlPositionMode
Definition: ivctrl.hxx:55
void SetText(const OUString &rText)
Definition: ivctrl.hxx:114
OUString VCL_DLLPUBLIC GetDisplayText() const
Definition: ivctrl.cxx:71
virtual void DataChanged(const DataChangedEvent &rDCEvt)
Definition: event.cxx:35