LibreOffice Module svx (master)  1
gridctrl.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 #ifndef INCLUDED_SVX_GRIDCTRL_HXX
20 #define INCLUDED_SVX_GRIDCTRL_HXX
21 
22 #include <com/sun/star/util/Date.hpp>
23 
24 #include <tools/ref.hxx>
27 #include <osl/mutex.hxx>
28 #include <svx/svxdllapi.h>
29 #include <o3tl/typed_flags_set.hxx>
30 #include <memory>
31 #include <vector>
32 
33 namespace comphelper { class OPropertyChangeMultiplexer; }
34 namespace com::sun::star::beans { struct PropertyChangeEvent; }
35 namespace com::sun::star::container { class XIndexAccess; }
36 namespace com::sun::star::sdbc { class XRowSet; }
37 namespace com::sun::star::sdb { class XRowsChangeListener; }
38 namespace com::sun::star::uno { class XComponentContext; }
39 namespace com::sun::star::util { class XNumberFormatter; }
40 namespace weld { class Menu; }
41 
42 class CursorWrapper;
43 
44 bool CompareBookmark(const css::uno::Any& aLeft, const css::uno::Any& aRight);
45 
46 namespace svxform
47 {
48  class DataColumn;
49 }
50 
51 enum class GridRowStatus
52 {
53  Clean,
54  Modified,
55  Deleted,
56  Invalid
57 };
58 
59 
60 // DbGridRow, description of rows
61 
62 
63 class SAL_DLLPUBLIC_RTTI DbGridRow final : public SvRefBase
64 {
65  css::uno::Any m_aBookmark; // Bookmark of the row, can be set
66  ::std::vector< std::unique_ptr<::svxform::DataColumn> >
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);
76 
77  virtual ~DbGridRow() override;
78 
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 ]; }
81 
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; }
86 
87  const css::uno::Any& GetBookmark() const { return m_aBookmark; }
88 
89  bool IsValid() const { return m_eStatus == GridRowStatus::Clean || m_eStatus == GridRowStatus::Modified; }
90  bool IsModified() const { return m_eStatus == GridRowStatus::Modified; }
91 };
92 
94 
95 
96 // DbGridControl
97 
98 class DbGridColumn;
99 
101 {
102 public:
103  virtual void selectionChanged() = 0;
104  virtual void columnChanged() = 0;
105 
106 protected:
108 };
109 
110 #define GRID_COLUMN_NOT_FOUND SAL_MAX_UINT16
111 
112 
113 // InitWindowFacet, describing which aspect of a column's Window to (re-)initialize
114 
115 enum class InitWindowFacet
116 {
117  Font = 0x01,
118  Foreground = 0x02,
119  Background = 0x04,
120  WritingMode = 0x08,
121  All = 0x0F
122 };
123 namespace o3tl
124 {
125  template<> struct typed_flags<InitWindowFacet> : is_typed_flags<InitWindowFacet, 0x0f> {};
126 }
127 
128 
129 // these options are or'ed and indicate, which of the single
130 // features can be released, default is readonly which means 0
132 {
133  Readonly = 0x00,
134  Insert = 0x01,
135  Update = 0x02,
136  Delete = 0x04
137 };
138 namespace o3tl
139 {
140  template<> struct typed_flags<DbGridControlOptions> : is_typed_flags<DbGridControlOptions, 0x07> {};
141 }
142 
143 // StatusIds for Controls of the Bar
144 // important for invalidation
146 {
147  NONE,
148  Text,
149  Absolute,
150  Of,
151  Count,
152  First,
153  Next,
154  Prev,
155  Last,
156  New,
157  Undo // related to SID_FM_RECORD_UNDO
158 };
159 
162 
163 // NavigationBar
164 class NavigationBar final : public InterimItemWindow
165 {
166  class AbsolutePos final : public RecordItemWindowBase
167  {
168  public:
169  AbsolutePos(std::unique_ptr<weld::Entry> xEntry, NavigationBar* pBar);
170 
171  virtual bool DoKeyInput(const KeyEvent& rEvt) override;
172  virtual void PositionFired(sal_Int64 nRecord) override;
173 
174  weld::Entry* GetWidget() { return m_xWidget.get(); }
175  private:
177  };
178 
180 
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;
186 
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'
192 
193  std::shared_ptr<weld::ButtonPressRepeater> m_xPrevRepeater;
194  std::shared_ptr<weld::ButtonPressRepeater> m_xNextRepeater;
195 
196  sal_Int32 m_nCurrentPos;
197 
198  bool m_bPositioning; // protect PositionDataSource against recursion
199 
200 public:
201  NavigationBar(vcl::Window* pParent);
202  virtual ~NavigationBar() override;
203  virtual void dispose() override;
204 
205  // Status methods for Controls
206  void InvalidateAll(sal_Int32 nCurrentPos, bool bAll = false);
209  bool GetState(DbGridControlNavigationBarState nWhich) const;
210  sal_uInt16 ArrangeControls();
211 
212 private:
213 
214  DECL_LINK(OnClick, weld::Button&, void);
215 
216  void PositionDataSource(sal_Int32 nRecord);
217 };
218 
220 {
224 
225 public:
226 
227  friend class NavigationBar;
228 
229 private:
232 
233  css::uno::Reference< css::util::XNumberFormatter > m_xFormatter;
234  css::uno::Reference< css::uno::XComponentContext > m_xContext;
235 
236  std::vector< std::unique_ptr<DbGridColumn> > m_aColumns; // Column description
238  DbGridRowRef m_xDataRow; // Row which can be modified
239  // comes from the data cursor
240  DbGridRowRef m_xSeekRow, // Row to which the iterator can set
241  // comes from the data cursor
242 
243  m_xEmptyRow; // record set to insert
244 
246 
247  // if we modify the row for the new record, we automatically insert a "new new row".
248  // But if somebody else inserts a new record into the data source, we have to do the same.
249  // For that reason we have to listen to some properties of our data source.
252  css::uno::Reference< css::sdb::XRowsChangeListener>
253  m_xRowSetListener; // get notification when rows were changed
254 
256  // property listeners for field values
257 
258  std::unique_ptr<DisposeListenerGridBridge> m_pCursorDisposeListener;
259  // need to know about the disposing of the seek cursor
260  // construct analogous to the data source proplistener/multiplexer above :
261  // DisposeListenerGridBridge is a bridge from FmXDisposeListener which I don't want to be derived from
262 
264 
265 protected:
266  std::unique_ptr<CursorWrapper> m_pDataCursor; // Cursor for Updates
267  std::unique_ptr<CursorWrapper> m_pSeekCursor; // Cursor for Seeking
268 
269 private:
270  // iteration variables
272  DbGridRowRef m_xPaintRow; // Row to be displayed
273  sal_Int32 m_nSeekPos; // Position of the SeekCursor
274  sal_Int32 m_nTotalCount; // is set when the data cursor finished counting the
275  // records. Initial value is -1
277  osl::Mutex m_aAdjustSafety;
278 
279  css::util::Date
280  m_aNullDate; // NullDate of the Numberformatter;
281 
283  sal_Int32 m_nCurrentPos; // Current position;
284  ImplSVEvent * m_nDeleteEvent; // EventId for asynchronous deletion of rows
285  DbGridControlOptions m_nOptions; // What is the able to do (Insert, Update, Delete)
286  // default readonly
287  DbGridControlOptions m_nOptionMask; // the mask of options to be enabled in setDataSource
288  // (with respect to the data source capabilities)
289  // defaults to (insert | update | delete)
290  sal_uInt16 m_nLastColId;
291  sal_Int32 m_nLastRowId;
292 
293  bool m_bDesignMode : 1; // default = sal_False
294  bool m_bRecordCountFinal : 1;
295  bool m_bNavigationBar : 1;
296 
297  bool m_bSynchDisplay : 1;
298  bool m_bHandle : 1;
299  bool m_bFilterMode : 1;
300  bool m_bWantDestruction : 1;
301  bool m_bPendingAdjustRows : 1; // if an async adjust is pending, is it for AdjustRows or AdjustDataSource ?
302  bool m_bHideScrollbars : 1;
303 
304 protected:
305  bool m_bUpdating : 1; // are any updates being executed right now?
306 
307 protected:
308  virtual bool SeekRow(sal_Int32 nRow) override;
309  virtual void VisibleRowsChanged( sal_Int32 nNewTopRow, sal_uInt16 nNumRows) override;
310  virtual void PaintCell(OutputDevice& rDev, const tools::Rectangle& rRect, sal_uInt16 nColId) const override;
311  virtual RowStatus GetRowStatus(sal_Int32 nRow) const override;
312  virtual bool CursorMoving(sal_Int32 nNewRow, sal_uInt16 nNewCol) override;
313  virtual void CursorMoved() override;
314  virtual void ArrangeControls(sal_uInt16& nX, sal_uInt16 nY) override;
315  virtual sal_uInt32 GetTotalCellWidth(sal_Int32 nRow, sal_uInt16 nColId) override;
316  virtual void Command(const CommandEvent& rEvt) override;
317  virtual bool PreNotify(NotifyEvent& rEvt) override;
318  virtual void KeyInput(const KeyEvent& rEvt) override;
319  virtual void StateChanged( StateChangedType nType ) override;
320  virtual void DataChanged( const DataChangedEvent& rDCEvt ) override;
321  virtual void Select() override;
322 
323  virtual ::svt::CellController* GetController(sal_Int32 nRow, sal_uInt16 nCol) override;
324 
325  virtual void CellModified() override;
326  virtual bool SaveModified() override;
327  virtual bool IsModified() const override;
328 
329  virtual sal_uInt16 AppendColumn(const OUString& rName, sal_uInt16 nWidth, sal_uInt16 nPos = HEADERBAR_APPEND, sal_uInt16 nId = sal_uInt16(-1)) override;
330  void RemoveColumn(sal_uInt16 nId);
331  std::unique_ptr<DbGridColumn> CreateColumn(sal_uInt16 nId);
332  virtual void ColumnMoved(sal_uInt16 nId) override;
333  virtual bool SaveRow() override;
334  virtual bool IsTabAllowed(bool bForward) const override;
335 
337  virtual void HideColumn(sal_uInt16 nId);
339  virtual void ShowColumn(sal_uInt16 nId);
340 
348  virtual void PreExecuteRowContextMenu(weld::Menu& rMenu);
351  virtual void PostExecuteRowContextMenu(const OString& rExecutionResult);
352 
354  void DataSourcePropertyChanged(const css::beans::PropertyChangeEvent& evt);
355 
356  void FieldValueChanged(sal_uInt16 _nId);
357  void FieldListenerDisposing(sal_uInt16 _nId);
358 
359  void disposing(sal_uInt16 _nId);
360 
361  // own overridables
363  virtual void onRowChange();
365  virtual void onColumnChange();
366 
367  // DragSourceHelper overridables
368  virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel ) override;
369 
370  void executeRowContextMenu(const Point& _rPreferredPos);
371 
372 public:
374  css::uno::Reference< css::uno::XComponentContext > const & _rxContext,
375  vcl::Window* pParent,
376  WinBits nBits);
377 
378  virtual ~DbGridControl() override;
379  virtual void dispose() override;
380 
381  virtual void Init() override;
382  virtual void InitColumnsByFields(const css::uno::Reference< css::container::XIndexAccess >& xFields) = 0;
383  virtual void RemoveRows() override;
384 
393  virtual OUString GetCellText(sal_Int32 _nRow, sal_uInt16 _nColId) const override;
394 
395  void RemoveRows(bool bNewCursor);
396 
397  const css::uno::Reference< css::util::XNumberFormatter >& getNumberFormatter() const {return m_xFormatter;}
398 
399  // the data source
400  // the options can restrict but not extend the update abilities
401  void setDataSource(const css::uno::Reference< css::sdbc::XRowSet >& rCursor,
403  virtual void Dispatch(sal_uInt16 nId) override;
404 
405  CursorWrapper* getDataSource() const {return m_pDataCursor.get();}
406  const std::vector< std::unique_ptr<DbGridColumn> >& GetColumns() const {return m_aColumns;}
407 
408  void EnableHandle(bool bEnable);
409  bool HasHandle() const {return m_bHandle;}
410  void InsertHandleColumn();
411 
412  // which position does the column with the id in the View have, the handle column doesn't count
413  sal_uInt16 GetViewColumnPos( sal_uInt16 nId ) const { sal_uInt16 nPos = GetColumnPos(nId); return (nPos==BROWSER_INVALIDID) ? GRID_COLUMN_NOT_FOUND : nPos-1; }
414 
415  // which position does the column with the id in m_aColumns have, that means the css::sdbcx::Container
416  // returned from the GetColumns (may be different from the position returned by GetViewColumnPos
417  // if there are hidden columns)
418  sal_uInt16 GetModelColumnPos( sal_uInt16 nId ) const;
419 
420  // the number of columns in the model
421  sal_uInt16 GetViewColCount() const { return ColCount() - 1; }
422  sal_uInt16 GetModelColCount() const { return static_cast<sal_uInt16>(m_aColumns.size()); }
423  // reverse to GetViewColumnPos: Id of position, the first non-handle column has position 0
424  sal_uInt16 GetColumnIdFromViewPos( sal_uInt16 nPos ) const { return GetColumnId(nPos + 1); }
425  sal_uInt16 GetColumnIdFromModelPos( sal_uInt16 nPos ) const;
426 
427  virtual void SetDesignMode(bool bMode);
428  bool IsDesignMode() const {return m_bDesignMode;}
429  bool IsOpen() const {return m_pSeekCursor != nullptr;}
430 
431  void SetFilterMode(bool bMode);
432  bool IsFilterMode() const {return m_bFilterMode;}
433  bool IsFilterRow(sal_Int32 nRow) const {return m_bFilterMode && nRow == 0;}
434 
435  void EnableNavigationBar(bool bEnable);
436  bool HasNavigationBar() const {return m_bNavigationBar;}
437 
438  DbGridControlOptions GetOptions() const {return m_nOptions;}
439  NavigationBar& GetNavigationBar() {return *m_aBar;}
441  // The new options are interpreted with respect to the current data source. If it is unable
442  // to update, to insert or to restore, the according options are ignored. If the grid isn't
443  // connected to a data source, all options except OPT_READONLY are ignored.
444 
445  const css::util::Date& getNullDate() const {return m_aNullDate;}
446 
447  // positioning
448  void MoveToPosition(sal_uInt32 nPos);
449  void MoveToFirst();
450  void MoveToNext();
451  void MoveToPrev();
452  void MoveToLast();
453  void AppendNew();
454 
455  // adjustment of the cursors in case the data cursor has been
456  // moved from the outside.
457  // the flag indicates if an adjustment of the row count should be
458  // done as well
459  void AdjustDataSource(bool bFull = false);
460  void Undo();
461 
462  virtual void BeginCursorAction();
463  virtual void EndCursorAction();
464 
465  // is the current line being updated
466  bool IsUpdating() const {return m_bUpdating;}
467 
468  void RowRemoved( sal_Int32 nRow, sal_Int32 nNumRows = 1, bool bDoPaint = true );
469  void RowInserted( sal_Int32 nRow, sal_Int32 nNumRows = 1, bool bDoPaint = true );
470  void RowModified( sal_Int32 nRow );
471 
472  void resetCurrentRow();
473 
474  bool getDisplaySynchron() const { return m_bSynchDisplay; }
475  void setDisplaySynchron(bool bSync);
476  // when set to sal_False, the display is no longer in sync with the current cursor position
477  // (means that in AdjustDataSource we are jumping to a row not belonging to CursorPosition)
478  // when using this, you should know what you are doing, because for example entering data
479  // in a row in the display that is not in sync with the position of the cursor can be very critical
480 
481  const DbGridRowRef& GetCurrentRow() const {return m_xCurrentRow;}
482 
483  void SetStateProvider(const Link<DbGridControlNavigationBarState,int>& rProvider) { m_aMasterStateProvider = rProvider; }
484  // if this link is set the given provider will be asked for the state of my items.
485  // the return values are interpreted as follows :
486  // <0 -> not specified (use default mechanism to determine the state)
487  // ==0 -> the item is disabled
488  // >0 -> the item is enabled
489  void SetSlotExecutor(const Link<DbGridControlNavigationBarState,bool>& rExecutor) { m_aMasterSlotExecutor = rExecutor; }
490  // analogous : if this link is set, all nav-bar slots will be routed through it when executed
491  // if the handler returns nonzero, no further handling of the slot occurs
492 
493  void EnablePermanentCursor(bool bEnable);
494  bool IsPermanentCursorEnabled() const;
495 
502  void ForceHideScrollbars();
503 
504  const css::uno::Reference< css::uno::XComponentContext >&
505  getContext() const { return m_xContext; }
506 
508  bool canCopyCellText(sal_Int32 _nRow, sal_uInt16 _nColId);
510  void copyCellText(sal_Int32 _nRow, sal_uInt16 _nColId);
511 
512  // select in listener handling
513  void setGridListener( FmGridListener* _pListener ) { m_pGridListener = _pListener; }
514 
515  // helper class to grant access to selected methods from within the DbCellControl class
516  struct GrantControlAccess final
517  {
518  friend class DbCellControl;
519  friend class RowSetEventListener;
521  };
522 
524  void refreshController(sal_uInt16 _nColId, GrantControlAccess _aAccess);
525 
526  CursorWrapper* GetSeekCursor(GrantControlAccess /*_aAccess*/) const { return m_pSeekCursor.get(); }
527  const DbGridRowRef& GetSeekRow(GrantControlAccess /*_aAccess*/) const { return m_xSeekRow; }
528  void SetSeekPos(sal_Int32 nPos,GrantControlAccess /*_aAccess*/) {m_nSeekPos = nPos;}
529 
534  virtual sal_Int32 GetAccessibleControlCount() const override;
535 
542  virtual css::uno::Reference<
543  css::accessibility::XAccessible >
544  CreateAccessibleControl( sal_Int32 _nIndex ) override;
545 
546  // IAccessibleTableProvider
551  virtual css::uno::Reference<
552  css::accessibility::XAccessible >
553  CreateAccessibleCell( sal_Int32 nRow, sal_uInt16 nColumnId ) override;
554 
555 protected:
556  void RecalcRows(sal_Int32 nNewTopRow, sal_uInt16 nLinesOnScreen, bool bUpdateCursor);
557  bool SeekCursor(sal_Int32 nRow, bool bAbsolute = false);
558  void RemoveColumns(); // cleaning of own structures
559  void AdjustRows();
560  sal_Int32 AlignSeekCursor();
561  bool SetCurrent(sal_Int32 nNewRow);
562 
563  OUString GetCurrentRowCellText(DbGridColumn const * pCol,const DbGridRowRef& _rRow) const;
564  virtual void DeleteSelectedRows();
565  static bool IsValid(const DbGridRowRef& _xRow) { return _xRow.is() && _xRow->IsValid(); }
566 
567  // row which is currently being appended
568  bool IsCurrentAppending() const;
569 
570  // empty row for insertion
571  bool IsInsertionRow(sal_Int32 nRow) const;
572 
573  void SetSeekPos(sal_Int32 nPos) {m_nSeekPos = nPos;}
574  sal_Int32 GetCurrentPos() const {return m_nCurrentPos;}
575  sal_Int32 GetSeekPos() const {return m_nSeekPos;}
576  sal_Int32 GetTotalCount() const {return m_nTotalCount;}
577 
578  const DbGridRowRef& GetEmptyRow() const { return m_xEmptyRow; }
579  const DbGridRowRef& GetSeekRow() const { return m_xSeekRow; }
580  const DbGridRowRef& GetPaintRow() const { return m_xPaintRow; }
581 
582  void ConnectToFields();
583  void DisconnectFromFields();
584 
585  void implAdjustInSolarThread(bool _bRows);
586  // calls AdjustRows or AdjustDataSource, synchron if the caller is running in the solar thread, else asynchron
587 
588 protected:
589  void ImplInitWindow( const InitWindowFacet _eInitWhat );
590  DECL_LINK(OnDelete, void*, void);
591 
592  DECL_LINK(OnAsyncAdjust, void*, void);
593  // if the param is != NULL, AdjustRows will be called, else AdjustDataSource
594 
595 private:
597 };
598 
599 #endif // INCLUDED_SVX_GRIDCTRL_HXX
600 
601 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
void InsertHandleColumn(sal_uLong nWidth)
std::unique_ptr< weld::Button > m_xFirstBtn
Definition: gridctrl.hxx:187
bool is() const
virtual bool IsModified() const
#define GRID_COLUMN_NOT_FOUND
Definition: gridctrl.hxx:110
osl::Mutex m_aDestructionSafety
Definition: gridctrl.hxx:276
virtual void StartDrag(sal_Int8 _nAction, const Point &_rPosPixel) override
const std::vector< std::unique_ptr< DbGridColumn > > & GetColumns() const
Definition: gridctrl.hxx:406
GridRowStatus GetStatus() const
Definition: gridctrl.hxx:83
void setGridListener(FmGridListener *_pListener)
Definition: gridctrl.hxx:513
NavigationBar(vcl::Window *pParent)
Definition: gridctrl.cxx:309
VclPtr< NavigationBar > m_aBar
Definition: gridctrl.hxx:237
DbGridControlNavigationBarState
Definition: gridctrl.hxx:145
virtual bool DoKeyInput(const KeyEvent &rEvt) override
Definition: gridctrl.cxx:282
const DbGridRowRef & GetEmptyRow() const
Definition: gridctrl.hxx:578
FmXGridSourcePropListener * m_pDataSourcePropListener
Definition: gridctrl.hxx:251
bool IsModified() const
Definition: gridctrl.hxx:90
DbGridControlOptions m_nOptionMask
Definition: gridctrl.hxx:287
signed char sal_Int8
std::unique_ptr< AbsolutePos > m_xAbsolute
Definition: gridctrl.hxx:183
void PositionDataSource(sal_Int32 nRecord)
Definition: gridctrl.cxx:298
virtual void Select()
virtual sal_uInt16 AppendColumn(const OUString &rName, sal_uInt16 nWidth, sal_uInt16 nPos=HEADERBAR_APPEND, sal_uInt16 nId=sal_uInt16(-1))
const css::uno::Any & GetBookmark() const
Definition: gridctrl.hxx:87
bool IsNew() const
Definition: gridctrl.hxx:85
void RemoveColumns()
void SetStateProvider(const Link< DbGridControlNavigationBarState, int > &rProvider)
Definition: gridctrl.hxx:483
std::unique_ptr< weld::Button > m_xNextBtn
Definition: gridctrl.hxx:189
virtual bool CursorMoving(sal_Int32 nNewRow, sal_uInt16 nNewCol)
virtual void StateChanged(StateChangedType nType) override
bool IsOpen() const
Definition: gridctrl.hxx:429
const DbGridRowRef & GetSeekRow(GrantControlAccess) const
Definition: gridctrl.hxx:527
virtual sal_Int32 GetAccessibleControlCount() const override
virtual void ColumnMoved(sal_uInt16 nId) override
void SetState(DbGridControlNavigationBarState nWhich)
Definition: gridctrl.cxx:498
DbGridControlOptions
Definition: gridctrl.hxx:131
virtual void dispose() override
sal_uInt16 GetColumnPos(sal_uInt16 nColumnId) const
bool CompareBookmark(const css::uno::Any &aLeft, const css::uno::Any &aRight)
sal_Int32 m_nLastRowId
Definition: gridctrl.hxx:291
void RowInserted(sal_Int32 nRow, sal_Int32 nNumRows=1, bool bDoPaint=true, bool bKeepSelection=false)
sal_uInt16 GetModelColCount() const
Definition: gridctrl.hxx:422
virtual void Command(const CommandEvent &rEvt) override
bool IsDesignMode() const
Definition: gridctrl.hxx:428
bool IsFilterMode() const
Definition: gridctrl.hxx:432
std::unique_ptr< weld::Label > m_xRecordOf
Definition: gridctrl.hxx:184
StateChangedType
bool IsFilterRow(sal_Int32 nRow) const
Definition: gridctrl.hxx:433
virtual void PaintCell(OutputDevice &rDev, const tools::Rectangle &rRect, sal_uInt16 nColId) const =0
BrowserMode m_nMode
Definition: gridctrl.hxx:282
sal_Int64 WinBits
sal_Int32 m_nSeekPos
Definition: gridctrl.hxx:273
bool HasField(sal_uInt32 nPos) const
Definition: gridctrl.hxx:79
const DbGridRowRef & GetPaintRow() const
Definition: gridctrl.hxx:580
sal_uInt16 m_nLastColId
Definition: gridctrl.hxx:290
std::unique_ptr< weld::Button > m_xPrevBtn
Definition: gridctrl.hxx:188
bool IsUpdating() const
Definition: gridctrl.hxx:466
CursorWrapper * getDataSource() const
Definition: gridctrl.hxx:405
void RemoveColumn(sal_uInt16 nColumnId)
sal_uInt16 GetViewColCount() const
Definition: gridctrl.hxx:421
virtual void ArrangeControls(sal_uInt16 &nX, sal_uInt16 nY)
const css::uno::Reference< css::util::XNumberFormatter > & getNumberFormatter() const
Definition: gridctrl.hxx:397
virtual void KeyInput(const KeyEvent &rEvt) override
css::uno::Reference< css::util::XNumberFormatter > m_xFormatter
Definition: gridctrl.hxx:233
std::vector< std::unique_ptr< DbGridColumn > > m_aColumns
Definition: gridctrl.hxx:236
css::uno::Any m_aBookmark
Definition: gridctrl.hxx:65
virtual void CursorMoved() override
virtual void DataChanged(const DataChangedEvent &rDCEvt) override
virtual bool SaveRow()
sal_uInt16 GetColumnIdFromViewPos(sal_uInt16 nPos) const
Definition: gridctrl.hxx:424
void InvalidateState(DbGridControlNavigationBarState nWhich)
Definition: gridctrl.hxx:207
virtual sal_uInt32 GetTotalCellWidth(sal_Int32 nRow, sal_uInt16 nColId)
void SetNew(bool _bNew)
Definition: gridctrl.hxx:84
virtual OUString GetCellText(sal_Int32 _nRow, sal_uInt16 _nColId) const
sal_Int32 m_nCurrentPos
Definition: gridctrl.hxx:283
sal_Int32 GetCurrentPos() const
Definition: gridctrl.hxx:574
rtl::Reference<::comphelper::OPropertyChangeMultiplexer > m_pDataSourcePropMultiplexer
Definition: gridctrl.hxx:250
virtual bool IsTabAllowed(bool bForward) const
virtual void columnChanged()=0
bool getDisplaySynchron() const
Definition: gridctrl.hxx:474
DbGridControlOptions m_nOptions
Definition: gridctrl.hxx:285
std::unique_ptr< weld::Button > m_xLastBtn
Definition: gridctrl.hxx:190
void SetSlotExecutor(const Link< DbGridControlNavigationBarState, bool > &rExecutor)
Definition: gridctrl.hxx:489
virtual bool SaveModified()
DbGridControlOptions GetOptions() const
Definition: gridctrl.hxx:438
sal_uInt16 ArrangeControls()
Definition: gridctrl.cxx:373
std::unique_ptr< CursorWrapper > m_pSeekCursor
Definition: gridctrl.hxx:267
css::uno::Reference< css::sdb::XRowsChangeListener > m_xRowSetListener
Definition: gridctrl.hxx:253
virtual void PositionFired(sal_Int64 nRecord) override
Definition: gridctrl.cxx:292
bool HasHandle() const
Definition: gridctrl.hxx:409
CursorWrapper * GetSeekCursor(GrantControlAccess) const
Definition: gridctrl.hxx:526
ImplSVEvent * m_nAsynAdjustEvent
Definition: gridctrl.hxx:245
css::uno::Reference< css::uno::XComponentContext > m_xContext
Definition: gridctrl.hxx:234
const DbGridRowRef & GetCurrentRow() const
Definition: gridctrl.hxx:481
bool GetState(DbGridControlNavigationBarState nWhich) const
Definition: gridctrl.cxx:443
BrowserMode
Link< DbGridControlNavigationBarState, int > m_aMasterStateProvider
Definition: gridctrl.hxx:230
const css::uno::Reference< css::uno::XComponentContext > & getContext() const
Definition: gridctrl.hxx:505
::std::vector< std::unique_ptr<::svxform::DataColumn > > m_aVariants
Definition: gridctrl.hxx:67
std::unique_ptr< weld::Button > m_xNewBtn
Definition: gridctrl.hxx:191
DbGridRowRef m_xPaintRow
Definition: gridctrl.hxx:272
bool HasNavigationBar() const
Definition: gridctrl.hxx:436
FmGridListener * m_pGridListener
Definition: gridctrl.hxx:263
sal_Int32 m_nTotalCount
Definition: gridctrl.hxx:274
DbGridRowRef m_xDataRow
Definition: gridctrl.hxx:238
virtual void RemoveRows()
sal_uInt16 GetColumnId(sal_uInt16 nPos) const
css::util::Date m_aNullDate
Definition: gridctrl.hxx:280
const css::util::Date & getNullDate() const
Definition: gridctrl.hxx:445
weld::Entry * GetWidget()
Definition: gridctrl.hxx:174
virtual void Init()
virtual CellController * GetController(sal_Int32 nRow, sal_uInt16 nCol)
NavigationBar & GetNavigationBar()
Definition: gridctrl.hxx:439
void SetSeekPos(sal_Int32 nPos, GrantControlAccess)
Definition: gridctrl.hxx:528
void InvalidateAll(sal_Int32 nCurrentPos, bool bAll=false)
Definition: gridctrl.cxx:413
std::unique_ptr< weld::Entry > m_xWidget
std::shared_ptr< weld::ButtonPressRepeater > m_xPrevRepeater
Definition: gridctrl.hxx:193
virtual void CellModified()
std::shared_ptr< weld::ButtonPressRepeater > m_xNextRepeater
Definition: gridctrl.hxx:194
VclPtr< NavigationBar > m_xParent
Definition: gridctrl.hxx:176
DbGridRowRef m_xCurrentRow
Definition: gridctrl.hxx:271
virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessibleControl(sal_Int32 nIndex) override
virtual bool PreNotify(NotifyEvent &rNEvt) override
virtual RowStatus GetRowStatus(sal_Int32 nRow) const
bool m_bPositioning
Definition: gridctrl.hxx:198
sal_Int32 GetTotalCount() const
Definition: gridctrl.hxx:576
#define SVXCORE_DLLPUBLIC
Definition: svxdllapi.h:35
sal_uInt16 GetViewColumnPos(sal_uInt16 nId) const
Definition: gridctrl.hxx:413
void * m_pFieldListeners
Definition: gridctrl.hxx:255
std::unique_ptr< CursorWrapper > m_pDataCursor
Definition: gridctrl.hxx:266
virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessibleCell(sal_Int32 nRow, sal_uInt16 nColumnPos) override
osl::Mutex m_aAdjustSafety
Definition: gridctrl.hxx:277
void SetStatus(GridRowStatus _eStat)
Definition: gridctrl.hxx:82
static bool IsValid(const DbGridRowRef &_xRow)
Definition: gridctrl.hxx:565
sal_Int32 GetSeekPos() const
Definition: gridctrl.hxx:575
void RowRemoved(sal_Int32 nRow, sal_Int32 nNumRows=1, bool bDoPaint=true)
ImplSVEvent * m_nDeleteEvent
Definition: gridctrl.hxx:284
std::unique_ptr< weld::Label > m_xRecordCount
Definition: gridctrl.hxx:185
const ::svxform::DataColumn & GetField(sal_uInt32 nPos) const
Definition: gridctrl.hxx:80
const DbGridRowRef & GetSeekRow() const
Definition: gridctrl.hxx:579
DECL_LINK(OnClick, weld::Button &, void)
class FmSearchEngine - Impl class for FmSearchDialog
tools::SvRef< DbGridRow > DbGridRowRef
Definition: gridctrl.hxx:93
std::unique_ptr< weld::Label > m_xRecordText
Definition: gridctrl.hxx:182
virtual void selectionChanged()=0
GridRowStatus
Definition: gridctrl.hxx:51
InitWindowFacet
Definition: gridctrl.hxx:115
bool m_bIsNew
Definition: gridctrl.hxx:69
virtual void VisibleRowsChanged(sal_Int32 nNewTopRow, sal_uInt16 nNumRows)
GridRowStatus m_eStatus
Definition: gridctrl.hxx:68
#define BROWSER_INVALIDID
virtual ~NavigationBar() override
Definition: gridctrl.cxx:354
bool IsValid() const
Definition: gridctrl.hxx:89
virtual void Dispatch(sal_uInt16 nId)
AbsolutePos(std::unique_ptr< weld::Entry > xEntry, NavigationBar *pBar)
Definition: gridctrl.cxx:276
Link< DbGridControlNavigationBarState, bool > m_aMasterSlotExecutor
Definition: gridctrl.hxx:231
sal_Int32 m_nCurrentPos
Definition: gridctrl.hxx:196
void RowModified(sal_Int32 nRow, sal_uInt16 nColId=BROWSER_INVALIDID)
DbGridRowRef m_xSeekRow
Definition: gridctrl.hxx:240
sal_uInt16 nPos
sal_uInt16 ColCount() const
virtual void dispose() override
Definition: gridctrl.cxx:359
virtual bool SeekRow(sal_Int32 nRow) override
std::unique_ptr< DisposeListenerGridBridge > m_pCursorDisposeListener
Definition: gridctrl.hxx:258
void SetSeekPos(sal_Int32 nPos)
Definition: gridctrl.hxx:573