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