nss: upgrade to release 3.73
[LibreOffice.git] / include / svx / gridctrl.hxx
blob1fb6c19951b640a72c2a95f133013bbab2325641
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
19 #ifndef INCLUDED_SVX_GRIDCTRL_HXX
20 #define INCLUDED_SVX_GRIDCTRL_HXX
22 #include <com/sun/star/util/Date.hpp>
24 #include <tools/ref.hxx>
25 #include <svtools/editbrowsebox.hxx>
26 #include <svtools/recorditemwindow.hxx>
27 #include <osl/mutex.hxx>
28 #include <svx/svxdllapi.h>
29 #include <vcl/menu.hxx>
30 #include <o3tl/typed_flags_set.hxx>
31 #include <memory>
32 #include <vector>
34 namespace comphelper { class OPropertyChangeMultiplexer; }
35 namespace com::sun::star::beans { struct PropertyChangeEvent; }
36 namespace com::sun::star::container { class XIndexAccess; }
37 namespace com::sun::star::sdbc { class XRowSet; }
38 namespace com::sun::star::sdb { class XRowsChangeListener; }
39 namespace com::sun::star::uno { class XComponentContext; }
40 namespace com::sun::star::util { class XNumberFormatter; }
42 class CursorWrapper;
44 bool CompareBookmark(const css::uno::Any& aLeft, const css::uno::Any& aRight);
46 namespace svxform
48 class DataColumn;
51 enum class GridRowStatus
53 Clean,
54 Modified,
55 Deleted,
56 Invalid
60 // DbGridRow, description of rows
63 class SAL_DLLPUBLIC_RTTI DbGridRow final : public SvRefBase
65 css::uno::Any m_aBookmark; // Bookmark of the row, can be set
66 ::std::vector< std::unique_ptr<::svxform::DataColumn> >
67 m_aVariants;
68 GridRowStatus m_eStatus;
69 bool m_bIsNew;
70 // row is no longer valid
71 // is removed on the next positioning
72 public:
73 DbGridRow();
74 DbGridRow(CursorWrapper* pCur, bool bPaintCursor);
75 void SetState(CursorWrapper* pCur, bool bPaintCursor);
77 virtual ~DbGridRow() override;
79 bool HasField(sal_uInt32 nPos) const { return nPos < m_aVariants.size(); }
80 const ::svxform::DataColumn& GetField(sal_uInt32 nPos) const { return *m_aVariants[ nPos ]; }
82 void SetStatus(GridRowStatus _eStat) { m_eStatus = _eStat; }
83 GridRowStatus GetStatus() const { return m_eStatus; }
84 void SetNew(bool _bNew) { m_bIsNew = _bNew; }
85 bool IsNew() const { return m_bIsNew; }
87 const css::uno::Any& GetBookmark() const { return m_aBookmark; }
89 bool IsValid() const { return m_eStatus == GridRowStatus::Clean || m_eStatus == GridRowStatus::Modified; }
90 bool IsModified() const { return m_eStatus == GridRowStatus::Modified; }
93 typedef tools::SvRef<DbGridRow> DbGridRowRef;
96 // DbGridControl
98 class DbGridColumn;
100 class FmGridListener
102 public:
103 virtual void selectionChanged() = 0;
104 virtual void columnChanged() = 0;
106 protected:
107 ~FmGridListener() {}
110 #define GRID_COLUMN_NOT_FOUND SAL_MAX_UINT16
113 // InitWindowFacet, describing which aspect of a column's Window to (re-)initialize
115 enum class InitWindowFacet
117 Font = 0x01,
118 Foreground = 0x02,
119 Background = 0x04,
120 WritingMode = 0x08,
121 All = 0x0F
123 namespace o3tl
125 template<> struct typed_flags<InitWindowFacet> : is_typed_flags<InitWindowFacet, 0x0f> {};
129 // these options are or'ed and indicate, which of the single
130 // features can be released, default is readonly which means 0
131 enum class DbGridControlOptions
133 Readonly = 0x00,
134 Insert = 0x01,
135 Update = 0x02,
136 Delete = 0x04
138 namespace o3tl
140 template<> struct typed_flags<DbGridControlOptions> : is_typed_flags<DbGridControlOptions, 0x07> {};
143 // StatusIds for Controls of the Bar
144 // important for invalidation
145 enum class DbGridControlNavigationBarState
147 NONE,
148 Text,
149 Absolute,
151 Count,
152 First,
153 Next,
154 Prev,
155 Last,
156 New,
157 Undo // related to SID_FM_RECORD_UNDO
160 class FmXGridSourcePropListener;
161 class DisposeListenerGridBridge;
163 // NavigationBar
164 class NavigationBar final : public InterimItemWindow
166 class AbsolutePos final : public RecordItemWindowBase
168 public:
169 AbsolutePos(std::unique_ptr<weld::Entry> xEntry, NavigationBar* pBar);
171 virtual bool DoKeyInput(const KeyEvent& rEvt) override;
172 virtual void PositionFired(sal_Int64 nRecord) override;
174 weld::Entry* GetWidget() { return m_xWidget.get(); }
175 private:
176 VclPtr<NavigationBar> m_xParent;
179 friend class NavigationBar::AbsolutePos;
181 // additional controls
182 std::unique_ptr<weld::Label> m_xRecordText;
183 std::unique_ptr<AbsolutePos> m_xAbsolute; // absolute positioning
184 std::unique_ptr<weld::Label> m_xRecordOf;
185 std::unique_ptr<weld::Label> m_xRecordCount;
187 std::unique_ptr<weld::Button> m_xFirstBtn; // Button for 'go to the first record'
188 std::unique_ptr<weld::Button> m_xPrevBtn; // Button for 'go to the previous record'
189 std::unique_ptr<weld::Button> m_xNextBtn; // Button for 'go to the next record'
190 std::unique_ptr<weld::Button> m_xLastBtn; // Button for 'go to the last record'
191 std::unique_ptr<weld::Button> m_xNewBtn; // Button for 'go to a new record'
193 AutoTimer m_aNextRepeat;
194 AutoTimer m_aPrevRepeat;
196 sal_Int32 m_nCurrentPos;
198 bool m_bPositioning; // protect PositionDataSource against recursion
200 public:
201 NavigationBar(vcl::Window* pParent);
202 virtual ~NavigationBar() override;
203 virtual void dispose() override;
205 // Status methods for Controls
206 void InvalidateAll(sal_Int32 nCurrentPos, bool bAll = false);
207 void InvalidateState(DbGridControlNavigationBarState nWhich) {SetState(nWhich);}
208 void SetState(DbGridControlNavigationBarState nWhich);
209 bool GetState(DbGridControlNavigationBarState nWhich) const;
210 sal_uInt16 ArrangeControls();
212 private:
214 DECL_LINK(OnClick, weld::Button&, void);
216 DECL_LINK(PrevMousePressHdl, const MouseEvent&, bool);
217 DECL_LINK(PrevMouseReleaseHdl, const MouseEvent&, bool);
218 DECL_LINK(NextMousePressHdl, const MouseEvent&, bool);
219 DECL_LINK(NextMouseReleaseHdl, const MouseEvent&, bool);
220 DECL_LINK(PrevRepeatTimerHdl, Timer*, void);
221 DECL_LINK(NextRepeatTimerHdl, Timer*, void);
223 void PositionDataSource(sal_Int32 nRecord);
226 class SVXCORE_DLLPUBLIC DbGridControl : public svt::EditBrowseBox
228 friend class FmXGridSourcePropListener;
229 friend class GridFieldValueListener;
230 friend class DisposeListenerGridBridge;
232 public:
234 friend class NavigationBar;
236 private:
237 Link<DbGridControlNavigationBarState,int> m_aMasterStateProvider;
238 Link<DbGridControlNavigationBarState,bool> m_aMasterSlotExecutor;
240 css::uno::Reference< css::util::XNumberFormatter > m_xFormatter;
241 css::uno::Reference< css::uno::XComponentContext > m_xContext;
243 std::vector< std::unique_ptr<DbGridColumn> > m_aColumns; // Column description
244 VclPtr<NavigationBar> m_aBar;
245 DbGridRowRef m_xDataRow; // Row which can be modified
246 // comes from the data cursor
247 DbGridRowRef m_xSeekRow, // Row to which the iterator can set
248 // comes from the data cursor
250 m_xEmptyRow; // record set to insert
252 ImplSVEvent * m_nAsynAdjustEvent;
254 // if we modify the row for the new record, we automatically insert a "new new row".
255 // But if somebody else inserts a new record into the data source, we have to do the same.
256 // For that reason we have to listen to some properties of our data source.
257 rtl::Reference<::comphelper::OPropertyChangeMultiplexer> m_pDataSourcePropMultiplexer;
258 FmXGridSourcePropListener* m_pDataSourcePropListener;
259 css::uno::Reference< css::sdb::XRowsChangeListener>
260 m_xRowSetListener; // get notification when rows were changed
262 void* m_pFieldListeners;
263 // property listeners for field values
265 std::unique_ptr<DisposeListenerGridBridge> m_pCursorDisposeListener;
266 // need to know about the disposing of the seek cursor
267 // construct analogous to the data source proplistener/multiplexer above :
268 // DisposeListenerGridBridge is a bridge from FmXDisposeListener which I don't want to be derived from
270 FmGridListener* m_pGridListener;
272 protected:
273 std::unique_ptr<CursorWrapper> m_pDataCursor; // Cursor for Updates
274 std::unique_ptr<CursorWrapper> m_pSeekCursor; // Cursor for Seeking
276 private:
277 // iteration variables
278 DbGridRowRef m_xCurrentRow;
279 DbGridRowRef m_xPaintRow; // Row to be displayed
280 sal_Int32 m_nSeekPos; // Position of the SeekCursor
281 sal_Int32 m_nTotalCount; // is set when the data cursor finished counting the
282 // records. Initial value is -1
283 osl::Mutex m_aDestructionSafety;
284 osl::Mutex m_aAdjustSafety;
286 css::util::Date
287 m_aNullDate; // NullDate of the Numberformatter;
289 BrowserMode m_nMode;
290 sal_Int32 m_nCurrentPos; // Current position;
291 ImplSVEvent * m_nDeleteEvent; // EventId for asynchronous deletion of rows
292 DbGridControlOptions m_nOptions; // What is the able to do (Insert, Update, Delete)
293 // default readonly
294 DbGridControlOptions m_nOptionMask; // the mask of options to be enabled in setDataSource
295 // (with respect to the data source capabilities)
296 // defaults to (insert | update | delete)
297 sal_uInt16 m_nLastColId;
298 sal_Int32 m_nLastRowId;
300 bool m_bDesignMode : 1; // default = sal_False
301 bool m_bRecordCountFinal : 1;
302 bool m_bNavigationBar : 1;
304 bool m_bSynchDisplay : 1;
305 bool m_bHandle : 1;
306 bool m_bFilterMode : 1;
307 bool m_bWantDestruction : 1;
308 bool m_bPendingAdjustRows : 1; // if an async adjust is pending, is it for AdjustRows or AdjustDataSource ?
309 bool m_bHideScrollbars : 1;
311 protected:
312 bool m_bUpdating : 1; // are any updates being executed right now?
314 protected:
315 virtual bool SeekRow(sal_Int32 nRow) override;
316 virtual void VisibleRowsChanged( sal_Int32 nNewTopRow, sal_uInt16 nNumRows) override;
317 virtual void PaintCell(OutputDevice& rDev, const tools::Rectangle& rRect, sal_uInt16 nColId) const override;
318 virtual RowStatus GetRowStatus(sal_Int32 nRow) const override;
319 virtual bool CursorMoving(sal_Int32 nNewRow, sal_uInt16 nNewCol) override;
320 virtual void CursorMoved() override;
321 virtual void ArrangeControls(sal_uInt16& nX, sal_uInt16 nY) override;
322 virtual sal_uInt32 GetTotalCellWidth(sal_Int32 nRow, sal_uInt16 nColId) override;
323 virtual void Command(const CommandEvent& rEvt) override;
324 virtual bool PreNotify(NotifyEvent& rEvt) override;
325 virtual void KeyInput(const KeyEvent& rEvt) override;
326 virtual void StateChanged( StateChangedType nType ) override;
327 virtual void DataChanged( const DataChangedEvent& rDCEvt ) override;
328 virtual void Select() override;
330 virtual ::svt::CellController* GetController(sal_Int32 nRow, sal_uInt16 nCol) override;
332 virtual void CellModified() override;
333 virtual bool SaveModified() override;
334 virtual bool IsModified() const override;
336 virtual sal_uInt16 AppendColumn(const OUString& rName, sal_uInt16 nWidth, sal_uInt16 nPos = HEADERBAR_APPEND, sal_uInt16 nId = sal_uInt16(-1)) override;
337 void RemoveColumn(sal_uInt16 nId);
338 std::unique_ptr<DbGridColumn> CreateColumn(sal_uInt16 nId);
339 virtual void ColumnMoved(sal_uInt16 nId) override;
340 virtual bool SaveRow() override;
341 virtual bool IsTabAllowed(bool bForward) const override;
343 /// hide a column
344 virtual void HideColumn(sal_uInt16 nId);
345 /// show a column
346 virtual void ShowColumn(sal_uInt16 nId);
348 /** This is called before executing a context menu for a row. rMenu contains the initial entries
349 handled by this base class' method (which always has to be called).
350 Derived classes may alter the menu in any way and handle any additional entries in
351 PostExecuteColumnContextMenu.
352 All disabled entries will be removed before executing the menu, so be careful with separators
353 near entries you probably wish to disable ...
355 virtual void PreExecuteRowContextMenu(sal_uInt16 nRow, PopupMenu& rMenu);
356 /** After executing the context menu for a row this method is called.
358 virtual void PostExecuteRowContextMenu(sal_uInt16 nRow, const PopupMenu& rMenu, sal_uInt16 nExecutionResult);
360 /// @throws css::uno::RuntimeException
361 void DataSourcePropertyChanged(const css::beans::PropertyChangeEvent& evt);
363 void FieldValueChanged(sal_uInt16 _nId);
364 void FieldListenerDisposing(sal_uInt16 _nId);
366 void disposing(sal_uInt16 _nId);
368 // own overridables
369 /// called when the current row changed
370 virtual void onRowChange();
371 /// called when the current column changed
372 virtual void onColumnChange();
374 // DragSourceHelper overridables
375 virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel ) override;
377 void executeRowContextMenu( sal_Int32 _nRow, const Point& _rPreferredPos );
379 public:
380 DbGridControl(
381 css::uno::Reference< css::uno::XComponentContext > const & _rxContext,
382 vcl::Window* pParent,
383 WinBits nBits);
385 virtual ~DbGridControl() override;
386 virtual void dispose() override;
388 virtual void Init() override;
389 virtual void InitColumnsByFields(const css::uno::Reference< css::container::XIndexAccess >& xFields) = 0;
390 virtual void RemoveRows() override;
392 /** GetCellText returns the text at the given position
393 @param _nRow
394 the number of the row
395 @param _nColId
396 the ID of the column
397 @return
398 the text out of the cell
400 virtual OUString GetCellText(sal_Int32 _nRow, sal_uInt16 _nColId) const override;
402 void RemoveRows(bool bNewCursor);
404 const css::uno::Reference< css::util::XNumberFormatter >& getNumberFormatter() const {return m_xFormatter;}
406 // the data source
407 // the options can restrict but not extend the update abilities
408 void setDataSource(const css::uno::Reference< css::sdbc::XRowSet >& rCursor,
409 DbGridControlOptions nOpts = DbGridControlOptions::Insert | DbGridControlOptions::Update | DbGridControlOptions::Delete);
410 virtual void Dispatch(sal_uInt16 nId) override;
412 CursorWrapper* getDataSource() const {return m_pDataCursor.get();}
413 const std::vector< std::unique_ptr<DbGridColumn> >& GetColumns() const {return m_aColumns;}
415 void EnableHandle(bool bEnable);
416 bool HasHandle() const {return m_bHandle;}
417 void InsertHandleColumn();
419 // which position does the column with the id in the View have, the handle column doesn't count
420 sal_uInt16 GetViewColumnPos( sal_uInt16 nId ) const { sal_uInt16 nPos = GetColumnPos(nId); return (nPos==BROWSER_INVALIDID) ? GRID_COLUMN_NOT_FOUND : nPos-1; }
422 // which position does the column with the id in m_aColumns have, that means the css::sdbcx::Container
423 // returned from the GetColumns (may be different from the position returned by GetViewColumnPos
424 // if there are hidden columns)
425 sal_uInt16 GetModelColumnPos( sal_uInt16 nId ) const;
427 // the number of columns in the model
428 sal_uInt16 GetViewColCount() const { return ColCount() - 1; }
429 sal_uInt16 GetModelColCount() const { return static_cast<sal_uInt16>(m_aColumns.size()); }
430 // reverse to GetViewColumnPos: Id of position, the first non-handle column has position 0
431 sal_uInt16 GetColumnIdFromViewPos( sal_uInt16 nPos ) const { return GetColumnId(nPos + 1); }
432 sal_uInt16 GetColumnIdFromModelPos( sal_uInt16 nPos ) const;
434 virtual void SetDesignMode(bool bMode);
435 bool IsDesignMode() const {return m_bDesignMode;}
436 bool IsOpen() const {return m_pSeekCursor != nullptr;}
438 void SetFilterMode(bool bMode);
439 bool IsFilterMode() const {return m_bFilterMode;}
440 bool IsFilterRow(sal_Int32 nRow) const {return m_bFilterMode && nRow == 0;}
442 void EnableNavigationBar(bool bEnable);
443 bool HasNavigationBar() const {return m_bNavigationBar;}
445 DbGridControlOptions GetOptions() const {return m_nOptions;}
446 NavigationBar& GetNavigationBar() {return *m_aBar;}
447 DbGridControlOptions SetOptions(DbGridControlOptions nOpt);
448 // The new options are interpreted with respect to the current data source. If it is unable
449 // to update, to insert or to restore, the according options are ignored. If the grid isn't
450 // connected to a data source, all options except OPT_READONLY are ignored.
452 const css::util::Date& getNullDate() const {return m_aNullDate;}
454 // positioning
455 void MoveToPosition(sal_uInt32 nPos);
456 void MoveToFirst();
457 void MoveToNext();
458 void MoveToPrev();
459 void MoveToLast();
460 void AppendNew();
462 // adjustment of the cursors in case the data cursor has been
463 // moved from the outside.
464 // the flag indicates if an adjustment of the row count should be
465 // done as well
466 void AdjustDataSource(bool bFull = false);
467 void Undo();
469 virtual void BeginCursorAction();
470 virtual void EndCursorAction();
472 // is the current line being updated
473 bool IsUpdating() const {return m_bUpdating;}
475 void RowRemoved( sal_Int32 nRow, sal_Int32 nNumRows = 1, bool bDoPaint = true );
476 void RowInserted( sal_Int32 nRow, sal_Int32 nNumRows = 1, bool bDoPaint = true );
477 void RowModified( sal_Int32 nRow );
479 void resetCurrentRow();
481 bool getDisplaySynchron() const { return m_bSynchDisplay; }
482 void setDisplaySynchron(bool bSync);
483 // when set to sal_False, the display is no longer in sync with the current cursor position
484 // (means that in AdjustDataSource we are jumping to a row not belonging to CursorPosition)
485 // when using this, you should know what you are doing, because for example entering data
486 // in a row in the display that is not in sync with the position of the cursor can be very critical
488 const DbGridRowRef& GetCurrentRow() const {return m_xCurrentRow;}
490 void SetStateProvider(const Link<DbGridControlNavigationBarState,int>& rProvider) { m_aMasterStateProvider = rProvider; }
491 // if this link is set the given provider will be asked for the state of my items.
492 // the return values are interpreted as follows :
493 // <0 -> not specified (use default mechanism to determine the state)
494 // ==0 -> the item is disabled
495 // >0 -> the item is enabled
496 void SetSlotExecutor(const Link<DbGridControlNavigationBarState,bool>& rExecutor) { m_aMasterSlotExecutor = rExecutor; }
497 // analogous : if this link is set, all nav-bar slots will be routed through it when executed
498 // if the handler returns nonzero, no further handling of the slot occurs
500 void EnablePermanentCursor(bool bEnable);
501 bool IsPermanentCursorEnabled() const;
503 /** forces both scrollbars to be hidden
505 For the horizontal scrollbar, this is overruled by enabling the navigation bar: A navigation
506 bar <b>always</b> implies a horizontal scroll bar
507 @seealso EnableNavigationBar
509 void ForceHideScrollbars();
511 const css::uno::Reference< css::uno::XComponentContext >&
512 getContext() const { return m_xContext; }
514 /// returns <TRUE/> if the text of the given cell can be copied into the clipboard
515 bool canCopyCellText(sal_Int32 _nRow, sal_uInt16 _nColId);
516 /// copies the text of the given cell into the clipboard
517 void copyCellText(sal_Int32 _nRow, sal_uInt16 _nColId);
519 // select in listener handling
520 void setGridListener( FmGridListener* _pListener ) { m_pGridListener = _pListener; }
522 // helper class to grant access to selected methods from within the DbCellControl class
523 struct GrantControlAccess final
525 friend class DbCellControl;
526 friend class RowSetEventListener;
527 GrantControlAccess() { }
530 /// called when a controller needs to be re-initialized
531 void refreshController(sal_uInt16 _nColId, GrantControlAccess _aAccess);
533 CursorWrapper* GetSeekCursor(GrantControlAccess /*_aAccess*/) const { return m_pSeekCursor.get(); }
534 const DbGridRowRef& GetSeekRow(GrantControlAccess /*_aAccess*/) const { return m_xSeekRow; }
535 void SetSeekPos(sal_Int32 nPos,GrantControlAccess /*_aAccess*/) {m_nSeekPos = nPos;}
538 @return
539 The count of additional controls of the control area.
541 virtual sal_Int32 GetAccessibleControlCount() const override;
543 /** Creates the accessible object of an additional control.
544 @param _nIndex
545 The 0-based index of the control.
546 @return
547 The XAccessible interface of the specified control.
549 virtual css::uno::Reference<
550 css::accessibility::XAccessible >
551 CreateAccessibleControl( sal_Int32 _nIndex ) override;
553 // IAccessibleTableProvider
554 /** Creates the accessible object of a data table cell.
555 @param nRow The row index of the cell.
556 @param nColumnId The column ID of the cell.
557 @return The XAccessible interface of the specified cell. */
558 virtual css::uno::Reference<
559 css::accessibility::XAccessible >
560 CreateAccessibleCell( sal_Int32 nRow, sal_uInt16 nColumnId ) override;
562 protected:
563 void RecalcRows(sal_Int32 nNewTopRow, sal_uInt16 nLinesOnScreen, bool bUpdateCursor);
564 bool SeekCursor(sal_Int32 nRow, bool bAbsolute = false);
565 void RemoveColumns(); // cleaning of own structures
566 void AdjustRows();
567 sal_Int32 AlignSeekCursor();
568 bool SetCurrent(sal_Int32 nNewRow);
570 OUString GetCurrentRowCellText(DbGridColumn const * pCol,const DbGridRowRef& _rRow) const;
571 virtual void DeleteSelectedRows();
572 static bool IsValid(const DbGridRowRef& _xRow) { return _xRow.is() && _xRow->IsValid(); }
574 // row which is currently being appended
575 bool IsCurrentAppending() const;
577 // empty row for insertion
578 bool IsInsertionRow(sal_Int32 nRow) const;
580 void SetSeekPos(sal_Int32 nPos) {m_nSeekPos = nPos;}
581 sal_Int32 GetCurrentPos() const {return m_nCurrentPos;}
582 sal_Int32 GetSeekPos() const {return m_nSeekPos;}
583 sal_Int32 GetTotalCount() const {return m_nTotalCount;}
585 const DbGridRowRef& GetEmptyRow() const { return m_xEmptyRow; }
586 const DbGridRowRef& GetSeekRow() const { return m_xSeekRow; }
587 const DbGridRowRef& GetPaintRow() const { return m_xPaintRow; }
589 void ConnectToFields();
590 void DisconnectFromFields();
592 void implAdjustInSolarThread(bool _bRows);
593 // calls AdjustRows or AdjustDataSource, synchron if the caller is running in the solar thread, else asynchron
595 protected:
596 void ImplInitWindow( const InitWindowFacet _eInitWhat );
597 DECL_LINK(OnDelete, void*, void);
599 DECL_LINK(OnAsyncAdjust, void*, void);
600 // if the param is != NULL, AdjustRows will be called, else AdjustDataSource
602 private:
603 using BrowseBox::InsertHandleColumn;
606 #endif // INCLUDED_SVX_GRIDCTRL_HXX
608 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */