xref: /AOO41X/main/svtools/inc/svtools/editbrowsebox.hxx (revision 01aa44aa134af97080e2cf8e8bf3a0a4cd1cffe0)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _SVTOOLS_EDITBROWSEBOX_HXX_
25 #define _SVTOOLS_EDITBROWSEBOX_HXX_
26 #define SVTOOLS_IN_EDITBROWSEBOX_HXX
27 
28 #include "svtools/svtdllapi.h"
29 #include <tools/ref.hxx>
30 #include <tools/rtti.hxx>
31 #include <vcl/window.hxx>
32 #include <vcl/combobox.hxx>
33 #include <vcl/lstbox.hxx>
34 
35 #ifndef _IMAGEBTN_HXX
36 #include <vcl/button.hxx>
37 #endif
38 #include <svtools/brwbox.hxx>
39 #include <vcl/timer.hxx>
40 #include <svtools/brwhead.hxx>
41 #include <svtools/svmedit.hxx>
42 #include <vcl/svapp.hxx>
43 
44 //==================================================================
45 // EditBrowseBoxFlags (EBBF)
46 
47 #define EBBF_NONE                       ((sal_Int32)0x0000)
48 /** if this bit is _not_ set, the handle column will be invalidated upon
49     changing the row in the browse box.  This is for forcing the row picture to
50     be repainted. If you do not have row pictures or text, you don't need this
51     invalidation, then you would specify this bit to prevent flicker
52 */
53 #define EBBF_NO_HANDLE_COLUMN_CONTENT   ((sal_Int32)0x0001)
54 /** set this bit to activate the cell on a MouseButtonDown, not a MouseButtonUp event
55  */
56 #define EBBF_ACTIVATE_ON_BUTTONDOWN     ((sal_Int32)0x0002)
57 /** if this bit is set and EBBF_NO_HANDLE_COLUMN_CONTENT is _not_ set, the handle
58     column is drawn with the text contained in column 0 instead of an image
59 */
60 #define EBBF_HANDLE_COLUMN_TEXT         ((sal_Int32)0x0004)
61 
62 /** If this bit is set, tab traveling is somewhat modified<br/>
63     If the control gets the focus because the user pressed the TAB key, then the
64     first or last cell (depending on whether the traveling was cycling forward or backward)
65     gets activated.
66     @see Window::GetGetFocusFlags
67     @see GETFOCUS_*
68 */
69 #define EBBF_SMART_TAB_TRAVEL           ((sal_Int32)0x0008)
70 
71 /// @deprecated
72 #define EBBF_NOROWPICTURE               EBBF_NO_HANDLE_COLUMN_CONTENT
73 
74 //==================================================================
75 
76 class Edit;
77 class ListBoxFrame;
78 class ButtonCtrl;
79 class SpinField;
80 class FormattedField;
81 
82 // .......................................................................
83 namespace svt
84 {
85 // .......................................................................
86 
87     class CellControllerRef;
88 
89     //==================================================================
90     //= CellController
91     //==================================================================
92     class SVT_DLLPUBLIC CellController : public SvRefBase
93     {
94         friend class EditBrowseBox;
95 
96     protected:
97         Control*    pWindow;
98         sal_Bool    bSuspended;     // <sal_True> if the window is hidden and disabled
99 
100     public:
101         TYPEINFO();
102 
103         CellController(Control* pW);
104         virtual ~CellController();
105 
GetWindow() const106         Control& GetWindow() const { return *const_cast< CellController* >( this )->pWindow; }
107 
108         virtual void SetModified();
109         virtual void ClearModified() = 0;
110         virtual sal_Bool IsModified() const = 0;
111 
112         // commit any current changes. Especially, do any reformatting you need (from input formatting
113         // to output formatting) here
114         // 95826 - 2002-10-14 - fs@openoffice.org
115         virtual void CommitModifications();
116 
117         // suspending the controller is not culmulative!
118                 void        suspend( );
119                 void        resume( );
isSuspended() const120         inline  sal_Bool    isSuspended( ) const { return bSuspended; }
121 
122     protected:
123         virtual sal_Bool MoveAllowed(const KeyEvent& rEvt) const;
124         virtual void SetModifyHdl(const Link& rLink) = 0;
125         virtual sal_Bool WantMouseEvent() const;
126     };
127 
128     SV_DECL_IMPL_REF(CellController);
129 
130     //==================================================================
131     //= IEditImplementation
132     //==================================================================
133     class IEditImplementation
134     {
135     public:
136         virtual Control&            GetControl() = 0;
137 
138         virtual String              GetText( LineEnd aSeparator ) const = 0;
139         virtual void                SetText( const String& _rStr ) = 0;
140 
141         virtual sal_Bool                IsReadOnly() const = 0;
142         virtual void                SetReadOnly( sal_Bool bReadOnly ) = 0;
143 
144         virtual xub_StrLen          GetMaxTextLen() const = 0;
145         virtual void                SetMaxTextLen( xub_StrLen _nMaxLen ) = 0;
146 
147         virtual Selection           GetSelection() const = 0;
148         virtual void                SetSelection( const Selection& _rSelection ) = 0;
149 
150         virtual void                ReplaceSelected( const String& _rStr ) = 0;
151         virtual void                DeleteSelected() = 0;
152         virtual String              GetSelected( LineEnd aSeparator ) const = 0;
153 
154         virtual void                SetModified() = 0;
155         virtual sal_Bool            IsModified() const = 0;
156         virtual void                ClearModified() = 0;
157         virtual void                SetModifyHdl( const Link& _rLink ) = 0;
158     };
159 
160     //==================================================================
161     //= GenericEditImplementation
162     //==================================================================
163     template <class EDIT>
164     class GenericEditImplementation : public IEditImplementation
165     {
166         EDIT&   m_rEdit;
167     public:
168         GenericEditImplementation( EDIT& _rEdit );
169 
GetEditWindow()170         EDIT& GetEditWindow() { return static_cast< EDIT& >( GetControl() ); }
171 
172         virtual Control&            GetControl();
173 
174         virtual String              GetText( LineEnd aSeparator ) const;
175         virtual void                SetText( const String& _rStr );
176 
177         virtual sal_Bool                IsReadOnly() const;
178         virtual void                SetReadOnly( sal_Bool bReadOnly );
179 
180         virtual xub_StrLen          GetMaxTextLen() const;
181         virtual void                SetMaxTextLen( xub_StrLen _nMaxLen );
182 
183         virtual Selection           GetSelection() const;
184         virtual void                SetSelection( const Selection& _rSelection );
185 
186         virtual void                ReplaceSelected( const String& _rStr );
187         virtual void                DeleteSelected();
188         virtual String              GetSelected( LineEnd aSeparator ) const;
189 
190         virtual void                SetModified();
191         virtual sal_Bool            IsModified() const;
192         virtual void                ClearModified();
193         virtual void                SetModifyHdl( const Link& _rLink );
194     };
195 
196     #include <svtools/editimplementation.hxx>
197 
198     //==================================================================
199     //= MultiLineTextCell
200     //==================================================================
201     /** a multi line edit which can be used in a cell of a EditBrowseBox
202     */
203     class SVT_DLLPUBLIC MultiLineTextCell : public MultiLineEdit
204     {
205     public:
MultiLineTextCell(Window * _pParent,WinBits _nStyle)206         MultiLineTextCell( Window* _pParent, WinBits _nStyle )
207             :MultiLineEdit( _pParent, _nStyle )
208         {
209         }
210 
211     protected:
212         // Window overridables
213         virtual long PreNotify( NotifyEvent& rNEvt );
214 
215         // MultiLineEdit overridables
216         virtual void Modify();
217 
218     private:
219         sal_Bool    dispatchKeyEvent( const KeyEvent& _rEvent );
220     };
221 
222     //==================================================================
223     //= concrete edit implementations
224     //==================================================================
225     typedef GenericEditImplementation< Edit >             EditImplementation;
226 
227     typedef GenericEditImplementation< MultiLineTextCell >  MultiLineEditImplementation_Base;
228     class SVT_DLLPUBLIC MultiLineEditImplementation : public MultiLineEditImplementation_Base
229     {
230     public:
MultiLineEditImplementation(MultiLineTextCell & _rEdit)231         MultiLineEditImplementation( MultiLineTextCell& _rEdit ) : MultiLineEditImplementation_Base( _rEdit )
232         {
233         }
234 
235         virtual String GetText( LineEnd aSeparator ) const;
236         virtual String GetSelected( LineEnd aSeparator ) const;
237     };
238 
239     //==================================================================
240     //= EditCellController
241     //==================================================================
242     class SVT_DLLPUBLIC EditCellController : public CellController
243     {
244         IEditImplementation*    m_pEditImplementation;
245         sal_Bool                    m_bOwnImplementation;   // did we create m_pEditImplementation?
246 
247     public:
248         TYPEINFO();
249         EditCellController( Edit* _pEdit );
250         EditCellController( MultiLineTextCell* _pEdit );
251         EditCellController( IEditImplementation* _pImplementation );
252         ~EditCellController( );
253 
GetEditImplementation() const254         const IEditImplementation* GetEditImplementation( ) const { return m_pEditImplementation; }
GetEditImplementation()255               IEditImplementation* GetEditImplementation( )       { return m_pEditImplementation; }
256 
257         virtual void SetModified();
258         virtual sal_Bool IsModified() const;
259         virtual void ClearModified();
260 
261     protected:
262         virtual sal_Bool MoveAllowed(const KeyEvent& rEvt) const;
263         virtual void SetModifyHdl(const Link& rLink);
264     };
265 
266     //==================================================================
267     //= SpinCellController
268     //==================================================================
269     class SVT_DLLPUBLIC SpinCellController : public CellController
270     {
271     public:
272         TYPEINFO();
273         SpinCellController(SpinField* pSpinField);
GetSpinWindow() const274         SpinField& GetSpinWindow() const {return (SpinField &)GetWindow();}
275 
276         virtual void SetModified();
277         virtual sal_Bool IsModified() const;
278         virtual void ClearModified();
279 
280     protected:
281         virtual sal_Bool MoveAllowed(const KeyEvent& rEvt) const;
282         virtual void SetModifyHdl(const Link& rLink);
283     };
284 
285     //==================================================================
286     //= CheckBoxControl
287     //==================================================================
288     class SVT_DLLPUBLIC CheckBoxControl : public Control
289     {
290         CheckBox*   pBox;
291         Rectangle   aFocusRect;
292         Link        m_aClickLink,m_aModifyLink;
293 
294     public:
295         CheckBoxControl(Window* pParent, WinBits nWinStyle = 0);
296         ~CheckBoxControl();
297 
298         virtual void GetFocus();
299         virtual long PreNotify(NotifyEvent& rEvt);
300         virtual void Paint(const Rectangle& rClientRect);
301         virtual void Draw( OutputDevice* pDev, const Point& rPos, const Size& rSize, sal_uLong nFlags );
302         virtual void StateChanged( StateChangedType nStateChange );
303         virtual void DataChanged( const DataChangedEvent& _rEvent );
304         virtual void Resize();
305 
SetClickHdl(const Link & rHdl)306         void SetClickHdl(const Link& rHdl) {m_aClickLink = rHdl;}
GetClickHdl() const307         const Link& GetClickHdl() const {return m_aClickLink;}
308 
SetModifyHdl(const Link & rHdl)309         void SetModifyHdl(const Link& rHdl) {m_aModifyLink = rHdl;}
GetModifyHdl() const310         const Link& GetModifyHdl() const {return m_aModifyLink;}
311 
GetBox()312         CheckBox&   GetBox() {return *pBox;};
313 
314     private:
315         DECL_LINK( OnClick, void* );
316     };
317 
318     //==================================================================
319     //= CheckBoxCellController
320     //==================================================================
321     class SVT_DLLPUBLIC CheckBoxCellController : public CellController
322     {
323     public:
324         TYPEINFO();
325 
CheckBoxCellController(CheckBoxControl * pWin)326         CheckBoxCellController(CheckBoxControl* pWin):CellController(pWin){}
327         CheckBox& GetCheckBox() const;
328 
329         virtual sal_Bool IsModified() const;
330         virtual void ClearModified();
331 
332     protected:
333         virtual void SetModifyHdl(const Link& rLink);
334         virtual sal_Bool WantMouseEvent() const;
335     };
336 
337     //==================================================================
338     //= ComboBoxControl
339     //==================================================================
340     class SVT_DLLPUBLIC ComboBoxControl : public ComboBox
341     {
342         friend class ComboBoxCellController;
343 
344     public:
345         ComboBoxControl(Window* pParent, WinBits nWinStyle = 0);
346 
347     protected:
348         virtual long PreNotify( NotifyEvent& rNEvt );
349     };
350 
351     //==================================================================
352     //= ComboBoxCellController
353     //==================================================================
354     class SVT_DLLPUBLIC ComboBoxCellController : public CellController
355     {
356     public:
357         TYPEINFO();
358 
359         ComboBoxCellController(ComboBoxControl* pParent);
GetComboBox() const360         ComboBoxControl& GetComboBox() const {return (ComboBoxControl &)GetWindow();}
361 
362         virtual sal_Bool IsModified() const;
363         virtual void ClearModified();
364 
365     protected:
366         virtual sal_Bool MoveAllowed(const KeyEvent& rEvt) const;
367         virtual void SetModifyHdl(const Link& rLink);
368     };
369 
370     //==================================================================
371     //= ListBoxControl
372     //==================================================================
373     class SVT_DLLPUBLIC ListBoxControl : public ListBox
374     {
375         friend class ListBoxCellController;
376 
377     public:
378         ListBoxControl(Window* pParent, WinBits nWinStyle = 0);
379 
380     protected:
381         virtual long PreNotify( NotifyEvent& rNEvt );
382     };
383 
384     //==================================================================
385     //= ListBoxCellController
386     //==================================================================
387     class SVT_DLLPUBLIC ListBoxCellController : public CellController
388     {
389     public:
390         TYPEINFO();
391 
392         ListBoxCellController(ListBoxControl* pParent);
GetListBox() const393         ListBoxControl& GetListBox() const {return (ListBoxControl &)GetWindow();}
394 
395         virtual sal_Bool IsModified() const;
396         virtual void ClearModified();
397 
398     protected:
399         virtual sal_Bool MoveAllowed(const KeyEvent& rEvt) const;
400         virtual void SetModifyHdl(const Link& rLink);
401     };
402 
403     //==================================================================
404     //= FormattedFieldCellController
405     //==================================================================
406     class SVT_DLLPUBLIC FormattedFieldCellController : public EditCellController
407     {
408     public:
409         TYPEINFO();
410         FormattedFieldCellController( FormattedField* _pFormatted );
411 
412         virtual void CommitModifications();
413     };
414 
415     //==================================================================
416     //= EditBrowserHeader
417     //==================================================================
418     class SVT_DLLPUBLIC EditBrowserHeader : public BrowserHeader
419     {
420     public:
EditBrowserHeader(BrowseBox * pParent,WinBits nWinBits=WB_BUTTONSTYLE)421         EditBrowserHeader( BrowseBox* pParent, WinBits nWinBits = WB_BUTTONSTYLE )
422             :BrowserHeader(pParent, nWinBits){}
423 
424     protected:
425         virtual void DoubleClick();
426     };
427 
428     //==================================================================
429     //= EditBrowseBox
430     //==================================================================
431     class EditBrowseBoxImpl;
432     class SVT_DLLPUBLIC EditBrowseBox: public BrowseBox
433     {
434         friend class EditBrowserHeader;
435 
436         enum BrowseInfo
437         {
438             COLSELECT   =   1,
439             ROWSELECT   =   2,
440             ROWCHANGE   =   4,
441             COLCHANGE   =   8
442         };
443 
444     public:
445         enum RowStatus
446         {
447             CLEAN               =   0,
448             CURRENT             =   1,
449             CURRENTNEW          =   2,
450             MODIFIED            =   3,
451             NEW                 =   4,
452             DELETED             =   5,
453             PRIMARYKEY          =   6,
454             CURRENT_PRIMARYKEY  =   7,
455             FILTER              =   8,
456             HEADERFOOTER        =   9
457         };
458 
459     private:
460         // forbid these ones
461         EditBrowseBox(EditBrowseBox&);
462         EditBrowseBox& operator=(EditBrowseBox&);
463 
464         class BrowserMouseEventPtr
465         {
466             BrowserMouseEvent* pEvent;
467             sal_Bool bDown;
468 
469         public:
BrowserMouseEventPtr()470             BrowserMouseEventPtr():pEvent(NULL){}
~BrowserMouseEventPtr()471             ~BrowserMouseEventPtr(){Clear();}
472 
Is() const473             sal_Bool Is() const {return pEvent != NULL;}
IsDown() const474             sal_Bool IsDown() const {return bDown;}
operator ->() const475             const BrowserMouseEvent* operator->() const {return pEvent;}
operator *() const476             const BrowserMouseEvent& operator*() const {return *pEvent;}
477 
478             SVT_DLLPUBLIC void Clear();
479             void Set(const BrowserMouseEvent* pEvt, sal_Bool bIsDown);
480         } aMouseEvent;
481 
482         const BrowserMouseEvent* pMouseEvent;   // is set during a mouse event
483         CellControllerRef        aController,
484                                  aOldController;
485 
486         sal_uLong   nStartEvent, nEndEvent, nCellModifiedEvent;     // event ids
487         Window* m_pFocusWhileRequest;
488             // In ActivateCell, we grab the focus asynchronously, but if between requesting activation
489             // and the asynchornous event the focus has changed, we won't grab it for ourself.
490 
491         long    nPaintRow;  // row beeing painted
492         long    nEditRow, nOldEditRow;
493         sal_uInt16  nEditCol, nOldEditCol;
494 
495         sal_Bool            bHasFocus : 1;
496         mutable sal_Bool    bPaintStatus : 1;   // paint a status (image) in the handle column
497         sal_Bool            bActiveBeforeTracking;
498 
499         CheckBoxControl* pCheckBoxPaint;
500 
501         sal_Int32   m_nBrowserFlags;
502         ImageList   m_aStatusImages;
503         ::std::auto_ptr< EditBrowseBoxImpl> m_aImpl;
504 
505     protected:
506         BrowserHeader*  pHeader;
507 
isGetCellFocusPending() const508         sal_Bool isGetCellFocusPending() const { return nStartEvent != 0; }
cancelGetCellFocus()509         void cancelGetCellFocus() { if (nStartEvent) Application::RemoveUserEvent(nStartEvent); nStartEvent = 0; }
forceGetCellFocus()510         void forceGetCellFocus() { cancelGetCellFocus(); LINK(this, EditBrowseBox, StartEditHdl).Call((void*)NULL); }
511 
getMouseEvent()512         BrowserMouseEventPtr& getMouseEvent() { return aMouseEvent; }
513 
514     protected:
GetHeaderBar() const515         BrowserHeader*  GetHeaderBar() const {return pHeader;}
516 
517         virtual BrowserHeader* CreateHeaderBar(BrowseBox* pParent);
518 
519         // if you want to have an own header ...
520         virtual BrowserHeader* imp_CreateHeaderBar(BrowseBox* pParent);
521 
522         virtual void ColumnMoved(sal_uInt16 nId);
523         virtual void ColumnResized(sal_uInt16 nColId);
524         virtual void Resize();
525         virtual void ArrangeControls(sal_uInt16& nX, sal_uInt16 nY);
526         virtual sal_Bool SeekRow(long nRow);
527 
528         virtual void GetFocus();
529         virtual void LoseFocus();
530         virtual void KeyInput(const KeyEvent& rEvt);
531         virtual void MouseButtonDown(const BrowserMouseEvent& rEvt);
532         virtual void MouseButtonUp(const BrowserMouseEvent& rEvt);
533         virtual void StateChanged( StateChangedType nType );
534         virtual void DataChanged( const DataChangedEvent& rDCEvt );
535 
536         using BrowseBox::MouseButtonUp;
537         using BrowseBox::MouseButtonDown;
538 
539         virtual long PreNotify(NotifyEvent& rNEvt );
540         virtual long Notify(NotifyEvent& rNEvt);
541 
542         virtual void EndScroll();
543 
544         // should be used instead of GetFieldRectPixel, 'cause this method here takes into account the borders
545         Rectangle GetCellRect(long nRow, sal_uInt16 nColId, sal_Bool bRelToBrowser = sal_True) const;
546         virtual sal_uInt32 GetTotalCellWidth(long nRow, sal_uInt16 nColId);
547         virtual sal_uInt32 GetAutoColumnWidth(sal_uInt16 nColId);
548 
549         virtual void PaintStatusCell(OutputDevice& rDev, const Rectangle& rRect) const;
550         virtual void PaintCell(OutputDevice& rDev, const Rectangle& rRect, sal_uInt16 nColId) const = 0;
551 
552         virtual RowStatus GetRowStatus(long nRow) const;
553 
554         virtual void    RowHeightChanged();
555 
556         // callbacks for the data window
557         virtual void    ImplStartTracking();
558         virtual void    ImplTracking();
559         virtual void    ImplEndTracking();
560 
561         // when changing a row:
562         // CursorMoving:    cursor is beeing moved, but GetCurRow() still provides the old row
563         virtual sal_Bool CursorMoving(long nNewRow, sal_uInt16 nNewCol);
564 
565         // cursor has been moved
566         virtual void CursorMoved();
567 
568         virtual void CellModified();        // called whenever a cell has been modified
569         virtual sal_Bool SaveModified();    // called whenever a cell should be left, and it's content should be saved
570                                             // return sal_False prevents leaving the cell
571         virtual sal_Bool SaveRow();         // commit the current row
572 
IsModified() const573         virtual sal_Bool IsModified() const {return aController.Is() && aController->IsModified();}
574 
575         virtual CellController* GetController(long nRow, sal_uInt16 nCol);
576         virtual void InitController(CellControllerRef& rController, long nRow, sal_uInt16 nCol);
577         virtual void ResizeController(CellControllerRef& rController, const Rectangle&);
578         virtual void ReleaseController(CellControllerRef& pController, long nRow, sal_uInt16 nCol);
579         virtual void DoubleClick(const BrowserMouseEvent&);
580 
ActivateCell()581         void ActivateCell() { ActivateCell(GetCurRow(), GetCurColumnId()); }
582 
583         // retrieve the image for the row status
584         virtual Image GetImage(RowStatus) const;
585 
586         // inserting columns
587         // if you don't set a width, this will be calculated automatically
588         // if the id isn't set the smallest unused will do it ...
589         virtual sal_uInt16 AppendColumn(const String& rName, sal_uInt16 nWidth = 0, sal_uInt16 nPos = HEADERBAR_APPEND, sal_uInt16 nId = (sal_uInt16)-1);
590 
591         // called whenever (Shift)Tab or Enter is pressed. If true is returned, these keys
592         // result in traveling to the next or to th previous cell
593         virtual sal_Bool IsTabAllowed(sal_Bool bForward) const;
594 
595         virtual sal_Bool IsCursorMoveAllowed(long nNewRow, sal_uInt16 nNewColId) const;
596 
597         void    PaintTristate(OutputDevice& rDev, const Rectangle& rRect,const TriState& eState,sal_Bool _bEnabled=sal_True) const;
598 
599         void AsynchGetFocus();
600             // secure starting of StartEditHdl
601 
602     public:
603         EditBrowseBox(Window* pParent, sal_Int32 nBrowserFlags = EBBF_NONE, WinBits nBits = WB_TABSTOP, BrowserMode nMode = 0 );
604         EditBrowseBox(Window* pParent, const ResId& rId, sal_Int32 nBrowserFlags = EBBF_NONE, BrowserMode nMode = 0 );
605         ~EditBrowseBox();
606 
IsEditing() const607         sal_Bool IsEditing() const {return aController.Is();}
InvalidateStatusCell(long nRow)608         void InvalidateStatusCell(long nRow) {RowModified(nRow, 0);}
609         void InvalidateHandleColumn();
610 
611         // late construction
612         virtual void Init();
613         virtual void RemoveRows();
614         virtual void Dispatch(sal_uInt16 nId);
615 
Controller() const616         CellControllerRef Controller() const { return aController; }
GetBrowserFlags() const617         sal_Int32   GetBrowserFlags() const { return m_nBrowserFlags; }
618         void    SetBrowserFlags(sal_Int32 nFlags);
619 
620         virtual void ActivateCell(long nRow, sal_uInt16 nCol, sal_Bool bSetCellFocus = sal_True);
621         virtual void DeactivateCell(sal_Bool bUpdate = sal_True);
622         // Children ---------------------------------------------------------------
623 
624         /** Creates the accessible object of a data table cell.
625         @param nRow
626             The row index of the cell.
627         @param nColumnId
628             The column ID of the cell.
629         @return
630             The XAccessible interface of the specified cell. */
631         virtual ::com::sun::star::uno::Reference<
632             ::com::sun::star::accessibility::XAccessible >
633         CreateAccessibleCell( sal_Int32 nRow, sal_uInt16 nColumnPos );
634 
635         /** @return  The count of additional controls of the control area. */
636         virtual sal_Int32 GetAccessibleControlCount() const;
637 
638         /** Creates the accessible object of an additional control.
639             @param nIndex
640                 The 0-based index of the control.
641             @return
642                 The XAccessible interface of the specified control. */
643         virtual ::com::sun::star::uno::Reference<
644             ::com::sun::star::accessibility::XAccessible >
645         CreateAccessibleControl( sal_Int32 nIndex );
646 
647         /** Creates the accessible object of a column header.
648             @param nColumnId
649                 The column ID of the header.
650             @return
651                 The XAccessible interface of the specified column header. */
652         virtual ::com::sun::star::uno::Reference<
653             ::com::sun::star::accessibility::XAccessible >
654         CreateAccessibleRowHeader( sal_Int32 _nRow );
655 
656         /** Sets focus to current cell of the data table. */
657         virtual void GrabTableFocus();
658 
659         virtual Rectangle GetFieldCharacterBounds(sal_Int32 _nRow,sal_Int32 _nColumnPos,sal_Int32 nIndex);
660         virtual sal_Int32 GetFieldIndexAtPoint(sal_Int32 _nRow,sal_Int32 _nColumnPos,const Point& _rPoint);
661 
662         ::com::sun::star::uno::Reference<
663             ::com::sun::star::accessibility::XAccessible > CreateAccessibleCheckBoxCell(long _nRow, sal_uInt16 _nColumnPos,const TriState& eState,sal_Bool _bEnabled=sal_True);
664     protected:
665         // creates the accessible which wraps the active cell
666         void    implCreateActiveAccessible( );
667 
668     private:
669         virtual void PaintField(OutputDevice& rDev, const Rectangle& rRect,
670                                 sal_uInt16 nColumnId ) const;
671         using Control::ImplInitSettings;
672         SVT_DLLPRIVATE void ImplInitSettings( sal_Bool bFont, sal_Bool bForeground, sal_Bool bBackground );
673         SVT_DLLPRIVATE void DetermineFocus( const sal_uInt16 _nGetFocusFlags = 0);
674         inline void HideAndDisable(CellControllerRef& rController);
675         inline void EnableAndShow() const;
676 
677         SVT_DLLPRIVATE void implActivateCellOnMouseEvent(const BrowserMouseEvent& _rEvt, sal_Bool _bUp);
678         SVT_DLLPRIVATE void impl_construct();
679 
680         DECL_DLLPRIVATE_LINK(ModifyHdl, void* );
681         DECL_DLLPRIVATE_LINK(StartEditHdl, void* );
682         DECL_DLLPRIVATE_LINK(EndEditHdl, void* );
683         DECL_DLLPRIVATE_LINK(CellModifiedHdl, void* );
684     };
685 
686 // .......................................................................
687 }   // namespace svt
688 // .......................................................................
689 
690 #undef SVTOOLS_IN_EDITBROWSEBOX_HXX
691 #endif // _SVTOOLS_EDITBROWSEBOX_HXX_
692 
693