30 #include <com/sun/star/sdbc/ResultSetConcurrency.hpp>
31 #include <com/sun/star/accessibility/XAccessible.hpp>
32 #include <com/sun/star/sdb/XResultSetAccess.hpp>
33 #include <com/sun/star/sdb/RowChangeAction.hpp>
34 #include <com/sun/star/sdb/XRowsChangeBroadcaster.hpp>
35 #include <com/sun/star/sdbc/SQLException.hpp>
36 #include <com/sun/star/sdbc/XResultSetUpdate.hpp>
37 #include <com/sun/star/sdbc/XRowSet.hpp>
38 #include <com/sun/star/sdbcx/Privilege.hpp>
39 #include <com/sun/star/util/NumberFormatter.hpp>
40 #include <com/sun/star/util/XNumberFormatsSupplier.hpp>
41 #include <com/sun/star/beans/XPropertySet.hpp>
42 #include <com/sun/star/beans/PropertyChangeEvent.hpp>
43 #include <com/sun/star/container/XIndexAccess.hpp>
52 #include <svx/strings.hrc>
69 using namespace ::
svt;
80 #define ROWSTATUS(row) (!row.is() ? "NULL" : row->GetStatus() == GridRowStatus::Clean ? "CLEAN" : row->GetStatus() == GridRowStatus::Modified ? "MODIFIED" : row->GetStatus() == GridRowStatus::Deleted ? "DELETED" : "INVALID")
83 BrowserMode::COLUMNSELECTION
84 | BrowserMode::MULTISELECTION
85 | BrowserMode::KEEPHIGHLIGHT
86 | BrowserMode::TRACKING_TIPS
89 | BrowserMode::HEADERBAR_NEW;
101 virtual void SAL_CALL
disposing(
const css::lang::EventObject& )
override
104 virtual void SAL_CALL
rowsChanged(
const css::sdb::RowsChangeEvent& i_aEvt)
override
106 if ( i_aEvt.Action != RowChangeAction::UPDATE )
112 for(
const Any& rBookmark : i_aEvt.Bookmarks)
117 sal_Int32 nSeekPos = pSeek->
getRow() - 1;
140 virtual void _propertyChanged(
const PropertyChangeEvent& evt)
override;
157 m_pRealListener = new ::comphelper::OPropertyChangeMultiplexer(
this, _rField);
239 return aLeft == aRight;
264 DBG_ASSERT(
m_pParent,
"FmXGridSourcePropListener::FmXGridSourcePropListener : invalid parent !");
286 m_xParent->GetParent()->GrabFocus();
294 m_xParent->PositionDataSource(nRecord);
350 m_xAbsolute->GetWidget()->set_size_request(nReserveWidth, -1);
384 bool lResult =
false;
385 if (&rButton == m_xFirstBtn.get())
387 else if( &rButton == m_xPrevBtn.get() )
389 else if( &rButton == m_xNextBtn.get() )
391 else if( &rButton == m_xLastBtn.get() )
393 else if( &rButton == m_xNewBtn.get() )
401 if (&rButton == m_xFirstBtn.get())
403 else if( &rButton == m_xPrevBtn.get() )
405 else if( &rButton == m_xNextBtn.get() )
407 else if( &rButton == m_xLastBtn.get() )
409 else if( &rButton == m_xNewBtn.get() )
415 if (!(
m_nCurrentPos != nCurrentPos || nCurrentPos < 0 || bAll))
424 bAll = bAll || nCurrentPos <= 0;
426 bAll = bAll || nCurrentPos >= nAdjustedRowCount;
460 bool bAvailable =
true;
544 aText = OUString::number(pParent->
GetRowCount() - 1);
557 OUString aExtendedInfo = aText +
" (" +
593 if (pCur && pCur->
Is())
595 Reference< XIndexAccess > xColumns(pCur->
getColumns(), UNO_QUERY);
596 for (sal_Int32
i = 0;
i < xColumns->getCount(); ++
i)
599 xColumns->getByIndex(
i), css::uno::UNO_QUERY);
600 m_aVariants.emplace_back(
new DataColumn(xColSet) );
641 if (pCur && pCur->
Is())
654 DBG_ASSERT(xSet.is(),
"DbGridRow::SetState : invalid cursor !");
694 ,m_nAsynAdjustEvent(nullptr)
695 ,m_pDataSourcePropListener(nullptr)
696 ,m_pFieldListeners(nullptr)
697 ,m_pGridListener(nullptr)
703 ,m_nDeleteEvent(nullptr)
706 ,m_nLastColId(sal_uInt16(-1))
708 ,m_bDesignMode(false)
709 ,m_bRecordCountFinal(false)
710 ,m_bNavigationBar(true)
711 ,m_bSynchDisplay(true)
713 ,m_bFilterMode(false)
714 ,m_bWantDestruction(false)
715 ,m_bPendingAdjustRows(false)
716 ,m_bHideScrollbars( false )
738 pHeader->SetMouseTransparent(
false);
782 EditBrowseBox::dispose();
787 EditBrowseBox::StateChanged( nType );
791 case StateChangedType::Mirroring:
796 case StateChangedType::Zoom:
802 sal_uInt16 nX =
static_cast<sal_uInt16
>(aPoint.X());
807 case StateChangedType::ControlFont:
811 case StateChangedType::ControlForeground:
815 case StateChangedType::ControlBackground:
825 EditBrowseBox::DataChanged( rDCEvt );
826 if ( (rDCEvt.
GetType() == DataChangedEventType::SETTINGS ) &&
827 (rDCEvt.
GetFlags() & AllSettingsFlags::STYLE) )
836 EditBrowseBox::Select();
864 if ( IsControlFont() )
876 if (IsControlBackground())
879 GetDataWindow().SetControlBackground(GetControlBackground());
927 EditBrowseBox::RemoveRows();
955 bool adjustModeForScrollbars(
BrowserMode& _rMode,
bool _bNavigationBar,
bool _bHideScrollbars )
959 if ( !_bNavigationBar )
964 if ( _bHideScrollbars )
966 _rMode |= BrowserMode::NO_HSCROLL | BrowserMode::NO_VSCROLL;
967 _rMode &= ~
BrowserMode( BrowserMode::AUTO_HSCROLL | BrowserMode::AUTO_VSCROLL );
971 _rMode |= BrowserMode::AUTO_HSCROLL | BrowserMode::AUTO_VSCROLL;
972 _rMode &= ~
BrowserMode( BrowserMode::NO_HSCROLL | BrowserMode::NO_VSCROLL );
977 if ( _bNavigationBar )
979 _rMode |= BrowserMode::AUTO_HSCROLL;
983 return nOldMode != _rMode;
1005 sal_uInt16 nX =
static_cast<sal_uInt16
>(aPoint.X());
1025 "DbGridControl::SetOptions : please do not call when editing a record (things are much easier this way ;) !");
1032 if (xDataSourceSet.is())
1035 sal_Int32 nPrivileges = 0;
1037 if ((nPrivileges & Privilege::INSERT) == 0)
1039 if ((nPrivileges & Privilege::UPDATE) == 0)
1041 if ((nPrivileges & Privilege::DELETE) == 0)
1053 if (!(
m_nMode & BrowserMode::CURSOR_WO_FOCUS))
1056 nNewMode |= BrowserMode::HIDECURSOR;
1080 if (
m_nOptions & DbGridControlOptions::Insert)
1120 m_nMode |= BrowserMode::CURSOR_WO_FOCUS;
1125 m_nMode |= BrowserMode::HIDECURSOR;
1141 return (
m_nMode & BrowserMode::CURSOR_WO_FOCUS) && !(
m_nMode & BrowserMode::HIDECURSOR);
1170 if (!_xCursor.is() || !Reference< XColumnsSupplier > (_xCursor, UNO_QUERY_THROW)->getColumns()->hasElements())
1206 xSupplier->getNumberFormatSettings()->getPropertyValue(
"NullDate") >>=
m_aNullDate;
1217 Reference< XResultSet > xClone;
1218 Reference< XResultSetAccess > xAccess( _xCursor, UNO_QUERY );
1221 xClone = xAccess.is() ? xAccess->createResultSet() : Reference< XResultSet > ();
1251 sal_Int32 nConcurrency = ResultSetConcurrency::READ_ONLY;
1254 if ( ResultSetConcurrency::UPDATABLE == nConcurrency )
1256 sal_Int32 nPrivileges = 0;
1262 && ((nPrivileges & Privilege::INSERT) == Privilege::INSERT) && (nOpts & DbGridControlOptions::Insert))
1265 && ((nPrivileges & Privilege::UPDATE) == Privilege::UPDATE) && (nOpts & DbGridControlOptions::Update))
1268 && ((nPrivileges & Privilege::DELETE) == Privilege::DELETE) && (nOpts & DbGridControlOptions::Delete))
1281 if ( bPermanentCursor )
1283 m_nMode |= BrowserMode::CURSOR_WO_FOCUS;
1290 m_nMode |= BrowserMode::HIDECURSOR;
1293 m_nMode |= BrowserMode::MULTISELECTION;
1297 Reference< XColumnsSupplier > xSupplyColumns(_xCursor, UNO_QUERY);
1298 if (xSupplyColumns.is())
1304 sal_uInt32 nRecordCount(0);
1313 Reference< XRowsChangeBroadcaster> xChangeBroad(xSet,UNO_QUERY);
1314 if ( xChangeBroad.is( ) )
1315 xChangeBroad->addRowsChangeListener(m_xRowSetListener);
1357 if (nCurPos == 0 &&
ColCount() > 1)
1390 EditBrowseBox::RemoveColumns();
1395 return std::unique_ptr<DbGridColumn>(
new DbGridColumn(nId, *
this));
1401 sal_uInt16 nRealPos = nModelPos;
1406 sal_Int16 nViewPos = nModelPos;
1413 nModelPos = nRealPos;
1415 nRealPos = nViewPos + 1;
1424 EditBrowseBox::AppendColumn(rName, nWidth, nRealPos, nId);
1435 EditBrowseBox::RemoveColumn(nId);
1446 EditBrowseBox::ColumnMoved(nId);
1452 DBG_ASSERT(!pCol->
IsHidden(),
"DbGridControl::ColumnMoved : moved a hidden col ? how this ?");
1462 size_t nNewModelPos;
1463 for (nNewModelPos = 0; nNewModelPos <
m_aColumns.size(); ++nNewModelPos)
1473 DBG_ASSERT( nNewModelPos <
m_aColumns.size(),
"DbGridControl::ColumnMoved : could not find the new model position !");
1533 auto temp = std::move(
m_aColumns[ nOldModelPos ]);
1565 EditBrowseBox::SeekRow(nRow);
1573 RecalcRows(nNewTopRow, nLinesOnScreen,
false);
1586 bool bDisablePaint = !bUpdateCursor && IsPaintEnabled();
1592 sal_Int32 nCacheSize = 0;
1594 bool bCacheAligned =
false;
1599 tools::Long nLimit = nCacheSize ? nCacheSize / 2 : 0;
1602 if (nLimit < nLinesOnScreen)
1605 aCacheSize <<= sal_Int32(nLinesOnScreen*2);
1608 bUpdateCursor =
true;
1609 bCacheAligned =
true;
1610 nLimit = nLinesOnScreen;
1618 if (nDelta < nLimit && (nDelta > 0
1621 else if (nDelta < 0 && std::abs(nDelta) < nLimit)
1623 else if (nDelta != 0 || bUpdateCursor)
1648 EditBrowseBox::RowInserted(nRow, nNumRows, bDoPaint);
1667 EditBrowseBox::RowRemoved(nRow, nNumRows, bDoPaint);
1679 sal_Int32 nRecordCount = 0;
1710 EditBrowseBox::GoToRow(nNewPos);
1726 if (
m_nOptions & DbGridControlOptions::Insert)
1737 return EditBrowseBox::FILTER;
1742 return EditBrowseBox::DELETED;
1744 return EditBrowseBox::MODIFIED;
1746 return EditBrowseBox::CURRENTNEW;
1748 return EditBrowseBox::CURRENT;
1751 return EditBrowseBox::NEW;
1753 return EditBrowseBox::DELETED;
1755 return EditBrowseBox::CLEAN;
1768 if ((
GetMode() & BrowserMode::CURSOR_WO_FOCUS) == BrowserMode::CURSOR_WO_FOCUS)
1791 return EditBrowseBox::CursorMoving( nNewRow, nNewCol );
1812 bool bNewRowInserted =
false;
1822 Reference< XResultSetUpdate > xUpdateCursor(Reference< XInterface >(*
m_pDataCursor), UNO_QUERY);
1823 xUpdateCursor->moveToInsertRow();
1825 bNewRowInserted =
true;
1855 if (bNewRowInserted)
1863 OSL_FAIL(
"DbGridControl::SetCurrent : SeekRow failed !");
1889 EditBrowseBox::CursorMoved();
1930 SAL_INFO(
"svx.fmcomp",
"DbGridControl::AdjustDataSource");
1949 bool bDataCursorIsOnNew =
false;
1952 if ( bEqualBookmarks && !bDataCursorIsOnNew )
1978 EditBrowseBox::GoToRow(nNewPos);
2017 SAL_INFO(
"svx.fmcomp",
"DbGridControl::AlignSeekCursor: nobody should tamper with my cursor this way (before first)!" );
2024 SAL_INFO(
"svx.fmcomp",
"DbGridControl::AlignSeekCursor: nobody should tamper with my cursor this way (after last)!" );
2082 bool bSuccess =
false;
2097 "DbGridControl::SeekCursor: how did the seek cursor get to this position?!" );
2099 bAbsolute = std::abs(nSteps) > 100;
2119 else if (nSteps < 0)
2137 OSL_FAIL(
"DbGridControl::SeekCursor : failed ...");
2144 if (bAbsolute || nSteps > 0)
2168 OSL_FAIL(
"DbGridControl::SeekCursor : failed ...");
2215 sal_Int32 nNewRow = std::max(
GetCurRow() - 1, sal_Int32(0));
2248 catch(SQLException &)
2287 EditBrowseBox::GoToRow(nPos);
2315 if (nNewRow > 0 &&
GetCurRow() != nNewRow)
2342 SetMouseTransparent(bMode);
2368 if (!pCurCol->IsHidden())
2369 pCurCol->UpdateControl();
2385 if ( const_cast<DbGridControl*>(
this)->SeekRow(_nRow) )
2394 if ( pColumn &&
IsValid(_rRow) )
2425 bCanUndo &= ( 0 != nState );
2432 if (nExecutionResult == rMenu.
GetItemId(
"delete"))
2439 else if (nExecutionResult == rMenu.
GetItemId(
"undo"))
2441 else if (nExecutionResult == rMenu.
GetItemId(
"save"))
2447 SAL_INFO(
"svx.fmcomp",
"DbGridControl::DataSourcePropertyChanged");
2455 DBG_ASSERT( xSource.is(),
"DbGridControl::DataSourcePropertyChanged: invalid event source!" );
2456 bool bIsNew =
false;
2463 sal_Int32 nRecordCount = 0;
2538 aContextMenu->RemoveDisabledEntries(
true,
true );
2539 PostExecuteRowContextMenu( static_cast<sal_uInt16>(_nRow), *aContextMenu, aContextMenu->Execute(
this, _rPreferredPos ) );
2546 case CommandEventId::ContextMenu:
2550 EditBrowseBox::Command(rEvt);
2580 std::unique_ptr<weld::Menu> xContextMenu(xBuilder->weld_menu(
"menu"));
2581 if (!xContextMenu->popup_at_rect(pPopupParent, aRect).isEmpty())
2586 EditBrowseBox::Command(rEvt);
2593 EditBrowseBox::Command(rEvt);
2599 m_nDeleteEvent =
nullptr;
2600 DeleteSelectedRows();
2621 CellController* pReturn =
nullptr;
2635 if ((bInsert && !pColumn->
IsAutoValue()) || bUpdate)
2645 SAL_INFO(
"svx.fmcomp",
"DbGridControl::CellModified");
2672 SAL_INFO(
"svx.fmcomp",
"current row is new, new state: MODIFIED");
2687 SAL_INFO(
"svx.fmcomp",
"current row is not new, new state: MODIFIED");
2702 EditBrowseBox::Dispatch(nId);
2722 else if (nState == 0)
2734 Reference< XResultSetUpdate > xUpdateCursor(Reference< XInterface >(*
m_pDataCursor), UNO_QUERY);
2738 xUpdateCursor->moveToInsertRow();
2740 xUpdateCursor->cancelRowUpdates();
2756 if (bAppending && (EditBrowseBox::IsModified() || bDirty))
2780 if (xDataSource.is() && !::comphelper::getBOOL(xDataSource->getPropertyValue(
FM_PROP_ISMODIFIED)))
2809 aTmpRef->SaveValue();
2812 EditBrowseBox::RowModified(nRow);
2832 SAL_INFO(
"svx.fmcomp",
"DbGridControl::SaveModified");
2839 if (!EditBrowseBox::IsModified())
2844 bool bOK = pColumn && pColumn->
Commit();
2845 DBG_ASSERT(
Controller().is(),
"DbGridControl::SaveModified: was modified, by have no controller?!" );
2876 SAL_INFO(
"svx.fmcomp",
"DbGridControl::SaveRow");
2890 bool bSuccess =
false;
2893 Reference< XResultSetUpdate > xUpdateCursor(Reference< XInterface >(*
m_pDataCursor), UNO_QUERY);
2895 xUpdateCursor->insertRow();
2897 xUpdateCursor->updateRow();
2900 catch(SQLException&)
2951 return BrowseBox::PreNotify(rEvt);
2955 case MouseNotifyEvent::KEYINPUT:
2963 if ( (
KEY_TAB == nCode ) && bCtrl && !bAlt )
2977 if ( !bShift && !bCtrl && (
KEY_ESCAPE == nCode ) )
2985 else if ( (
KEY_DELETE == nCode ) && !bShift && !bCtrl )
3000 return EditBrowseBox::PreNotify(rEvt);
3031 EditBrowseBox::KeyInput(rEvt);
3040 sal_uInt16 nNewColId = nPos == (
ColCount()-1)
3045 EditBrowseBox::RemoveColumn(nId);
3051 DBG_ASSERT(pColumn,
"DbGridControl::HideColumn : somebody did hide a nonexistent column !");
3095 for (
size_t i = nPos;
i > 0; --
i )
3100 nNextNonHidden =
i-1;
3132 OSL_FAIL(
"DbGridControl::GetColumnIdFromModelPos : invalid argument !");
3137 #if (OSL_DEBUG_LEVEL > 0) || defined DBG_UTIL
3143 sal_uInt16 nViewPos = nPos;
3149 "DbGridControl::GetColumnIdFromModelPos : this isn't consistent... did I misunderstand something ?");
3152 return pCol->
GetId();
3166 SAL_INFO(
"svx.fmcomp",
"DbGridControl::implAdjustInSolarThread");
3173 SAL_INFO(
"svx.fmcomp",
"posting an AdjustRows");
3175 SAL_INFO(
"svx.fmcomp",
"posting an AdjustDataSource");
3180 SAL_INFO(
"svx.fmcomp",
"doing an AdjustRows");
3182 SAL_INFO(
"svx.fmcomp",
"doing an AdjustDataSource");
3198 m_nAsynAdjustEvent =
nullptr;
3212 for (
const auto& rListener : *pListeners)
3229 for (
const auto& rListener : *pListeners)
3244 DBG_ASSERT(!pListeners || pListeners->empty(),
"DbGridControl::ConnectToFields : please call DisconnectFromFields first !");
3264 DBG_ASSERT(!rpListener,
"DbGridControl::ConnectToFields : already a listener for this column ?!");
3275 while (!pListeners->empty())
3277 sal_Int32 nOldSize = pListeners->size();
3278 pListeners->begin()->second->dispose();
3279 DBG_ASSERT(nOldSize > static_cast<sal_Int32>(pListeners->size()),
"DbGridControl::DisconnectFromFields : dispose on a listener should result in a removal from my list !");
3299 std::unique_ptr<vcl::SolarMutexTryAndBuyGuard> pGuard;
3320 OSL_FAIL(
"DbGridControl::FieldListenerDisposing : invalid call (have no listener array) !");
3324 ColumnFieldValueListeners::const_iterator aPos = pListeners->find(_nId);
3325 if (aPos == pListeners->end())
3327 OSL_FAIL(
"DbGridControl::FieldListenerDisposing : invalid call (did not find the listener) !");
3331 delete aPos->second;
3333 pListeners->erase(aPos);
3352 return EditBrowseBox::GetAccessibleControlCount() + 1;
3357 Reference<XAccessible > xRet;
3358 if ( _nIndex == EditBrowseBox::GetAccessibleControlCount() )
3363 xRet = EditBrowseBox::CreateAccessibleControl( _nIndex );
3369 sal_uInt16 nColumnId =
GetColumnId( _nColumnPos );
3374 Reference< css::awt::XControl> xInt(pColumn->
GetCell());
3375 Reference< css::awt::XCheckBox> xBox(xInt,UNO_QUERY);
3379 switch( xBox->getState() )
3391 return EditBrowseBox::CreateAccessibleCheckBoxCell( _nRow, _nColumnPos,eValue );
3394 return EditBrowseBox::CreateAccessibleCell( _nRow, _nColumnPos );
void InsertHandleColumn(sal_uLong nWidth)
virtual RowStatus GetRowStatus(sal_Int32 nRow) const override
std::unique_ptr< weld::Button > m_xFirstBtn
#define LINK(Instance, Class, Member)
bool IsWindowOrChild(const vcl::Window *pWindow, bool bSystemWindow=false) const
const css::uno::Reference< css::beans::XPropertySet > & getModel() const
virtual bool SaveModified() override
friend class GridFieldValueListener
virtual void EnableRTL(bool bEnable=true) override
#define GRID_COLUMN_NOT_FOUND
DbGridControl & m_rParent
void SetMode(BrowserMode nMode)
void setDataSource(const css::uno::Reference< css::sdbc::XRowSet > &rCursor, DbGridControlOptions nOpts=DbGridControlOptions::Insert|DbGridControlOptions::Update|DbGridControlOptions::Delete)
sal_Int32 GetRowAtYPosPixel(tools::Long nY, bool bRelToBrowser=true) const
DbGridControl & m_rParent
osl::Mutex m_aDestructionSafety
IMPL_LINK(NavigationBar, OnClick, weld::Button &, rButton, void)
GridRowStatus GetStatus() const
NavigationBar(vcl::Window *pParent)
VclPtr< NavigationBar > m_aBar
DbGridControlNavigationBarState
const int nReserveNumDigits
static bool IsMainThread()
static const sal_uInt16 HandleColumnId
virtual sal_uInt16 AppendColumn(const OUString &rName, sal_uInt16 nWidth, sal_uInt16 nPos=HEADERBAR_APPEND, sal_uInt16 nId=sal_uInt16(-1)) override
virtual bool DoKeyInput(const KeyEvent &rEvt) override
virtual bool IsTabAllowed(bool bForward) const override
virtual void _propertyChanged(const PropertyChangeEvent &evt) override
virtual sal_Int32 GetSelectedColumnCount() const override
FmXGridSourcePropListener * m_pDataSourcePropListener
DbGridControlOptions m_nOptionMask
void MoveToPosition(sal_uInt32 nPos)
std::unique_ptr< AbsolutePos > m_xAbsolute
#define FM_PROP_RESULTSET_CONCURRENCY
void PositionDataSource(sal_Int32 nRecord)
const css::uno::Any & GetBookmark() const
void EnablePermanentCursor(bool bEnable)
#define FM_PROP_ISMODIFIED
tools::Long CalcReverseZoom(tools::Long nVal)
std::unique_ptr< weld::Button > m_xNextBtn
static const AllSettings & GetSettings()
virtual void DataChanged(const DataChangedEvent &rDCEvt) override
virtual void PaintCell(OutputDevice &rDev, const tools::Rectangle &rRect, sal_uInt16 nColId) const override
bool getBOOL(const Any &_rAny)
void SetAccessibleName(const OUString &rName)
#define FM_PROP_ROWCOUNTFINAL
const DbGridRowRef & GetSeekRow(GrantControlAccess) const
sal_Int32 GetSelectRowCount() const
void SetRealRowCount(const OUString &rRealRowCount)
static weld::Builder * CreateBuilder(weld::Widget *pParent, const OUString &rUIFile, bool bMobile=false)
std::unique_ptr< DbGridColumn > CreateColumn(sal_uInt16 nId)
static ImplSVEvent * PostUserEvent(const Link< void *, void > &rLink, void *pCaller=nullptr, bool bReferenceLink=false)
void SetUpdateMode(bool bUpdate)
void SetState(DbGridControlNavigationBarState nWhich)
virtual void DeactivateCell(bool bUpdate=true)
sal_uInt16 GetCode() const
virtual void CursorMoved() override
const css::uno::Reference< css::beans::XPropertySet > & getPropertySet() const
css::uno::Reference< css::container::XNameAccess > getColumns() const
DataChangedEventType GetType() const
const KeyEvent * GetKeyEvent() const
sal_Int32 m_nLastVisibleWidth
sal_uInt16 GetColumnPos(sal_uInt16 nColumnId) const
virtual ::svt::CellController * GetController(sal_Int32 nRow, sal_uInt16 nCol) override
virtual void StartDrag(sal_Int8 nAction, const Point &rPosPixel) override
virtual bool PreNotify(NotifyEvent &rEvt) override
std::shared_ptr< T > make_shared(Args &&...args)
void SetFilterMode(bool bMode)
void FieldListenerDisposing(sal_uInt16 _nId)
virtual void ArrangeControls(sal_uInt16 &nX, sal_uInt16 nY) override
sal_uInt16 GetModelColumnPos(sal_uInt16 nId) const
sal_uInt16 GetColumnAtXPosPixel(tools::Long nX) const
#define FM_PROP_PRIVILEGES
rtl::Reference< FmXDisposeMultiplexer > m_xRealListener
bool IsDesignMode() const
#define HID_GRID_TRAVEL_LAST
void disposing(sal_uInt16 _nId)
bool IsFilterMode() const
BrowserDataWin & GetDataWindow() const
std::unique_ptr< weld::Label > m_xRecordOf
virtual sal_Int32 GetAccessibleControlCount() const override
virtual void Command(const CommandEvent &rEvt) override
bool IsFilterRow(sal_Int32 nRow) const
virtual void StateChanged(StateChangedType nType) override
tools::Rectangle GetControlArea() const
vcl::Window * GetWindow() const
virtual void BeginCursorAction()
virtual void DeleteSelectedRows()
std::map< sal_uInt16, GridFieldValueListener * > ColumnFieldValueListeners
virtual VclPtr< BrowserHeader > CreateHeaderBar(BrowseBox *pParent) override
void RowRemoved(sal_Int32 nRow, sal_Int32 nNumRows=1, bool bDoPaint=true)
void Enable(bool bEnable=true, bool bChild=true)
OUString GetCurrentRowCellText(DbGridColumn const *pCol, const DbGridRowRef &_rRow) const
virtual void ColumnMoved(sal_uInt16 nId) override
std::unique_ptr< weld::Button > m_xPrevBtn
OUString SvxResId(const char *pId)
css::uno::Reference< css::accessibility::XAccessible > GetAccessible(bool bCreate=true)
DbGridControl(css::uno::Reference< css::uno::XComponentContext > const &_rxContext, vcl::Window *pParent, WinBits nBits)
#define BROWSER_CURSORENDOFFILE
BrowserMode GetMode() const
CursorWrapper * getDataSource() const
bool IsMouseEvent() const
bool IsCurrentAppending() const
constexpr OUStringLiteral IsHidden(u"IsHidden")
void DataSourcePropertyChanged(const css::beans::PropertyChangeEvent &evt)
AllSettingsFlags GetFlags() const
void RowInserted(sal_Int32 nRow, sal_Int32 nNumRows=1, bool bDoPaint=true)
void EnableNavigationBar(bool bEnable)
sal_uInt16 GetViewColCount() const
const css::uno::Reference< css::util::XNumberFormatter > & getNumberFormatter() const
virtual void SetDesignMode(bool bMode)
css::uno::Reference< css::util::XNumberFormatter > m_xFormatter
std::vector< std::unique_ptr< DbGridColumn > > m_aColumns
virtual void SetNoSelection() override
css::uno::Any m_aBookmark
tools::Rectangle GetRowRectPixel(sal_Int32 nRow) const
virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessibleCell(sal_Int32 nRow, sal_uInt16 nColumnId) override
Creates the accessible object of a data table cell.
virtual sal_Int32 GetRowCount() const override
sal_Int32 GetCurRow() const
bool IsPermanentCursorEnabled() const
bool moveToBookmark(const css::uno::Any &bookmark)
sal_uInt16 GetColumnIdFromViewPos(sal_uInt16 nPos) const
void InvalidateState(DbGridControlNavigationBarState nWhich)
::cppu::OWeakObject & m_rParent
VclPtr< BrowserHeader > pHeader
virtual void Select() override
bool GoToColumnId(sal_uInt16 nColId)
virtual void onColumnChange()
called when the current column changed
void DisconnectFromFields()
static void RemoveUserEvent(ImplSVEvent *nUserEvent)
bool IsInsertionRow(sal_Int32 nRow) const
void InvalidateStatusCell(sal_Int32 nRow)
static OUString GetUIRootDir()
bool GoToRowColumnId(sal_Int32 nRow, sal_uInt16 nColId)
#define DBG_UNHANDLED_EXCEPTION(...)
virtual void dispose() override
bool m_bPendingAdjustRows
rtl::Reference<::comphelper::OPropertyChangeMultiplexer > m_pDataSourcePropMultiplexer
#define DBG_ASSERT(sCon, aError)
bool CompareBookmark(const Any &aLeft, const Any &aRight)
sal_uInt16 GetVisibleRows() const
#define HID_GRID_TRAVEL_PREV
bool canCopyCellText(sal_Int32 _nRow, sal_uInt16 _nColId)
returns if the text of the given cell can be copied into the clipboard
virtual void columnChanged()=0
sal_Int32 AlignSeekCursor()
bool getDisplaySynchron() const
DbGridControlOptions m_nOptions
std::unique_ptr< weld::Button > m_xLastBtn
virtual bool SeekRow(sal_Int32 nRow) override
weld::Window * GetPopupParent(vcl::Window &rOutWin, tools::Rectangle &rRect)
virtual ~DbGridRow() override
PopupMenu * get_menu(std::string_view sID)
void Create(SvxOrientationItem &rItem, SvStream &rStrm, sal_uInt16)
void AdjustDataSource(bool bFull=false)
virtual ~GridFieldValueListener() override
DbGridControlOptions GetOptions() const
virtual void ShowColumn(sal_uInt16 nId)
show a column
sal_uInt16 ArrangeControls()
std::unique_ptr< CursorWrapper > m_pSeekCursor
tools::Long Width() const
CommandEventId GetCommand() const
virtual bool SaveRow() override
css::uno::Reference< css::sdb::XRowsChangeListener > m_xRowSetListener
virtual void CellModified() override
void SetZoom(const Fraction &rZoom)
virtual void PositionFired(sal_Int64 nRecord) override
#define HID_GRID_TRAVEL_ABSOLUTE
CursorWrapper * GetSeekCursor(GrantControlAccess) const
ImplSVEvent * m_nAsynAdjustEvent
virtual void EndCursorAction()
css::uno::Reference< css::uno::XComponentContext > m_xContext
virtual void _propertyChanged(const PropertyChangeEvent &evt) override
bool ReserveControlArea(sal_uInt16 nWidth=USHRT_MAX)
MouseNotifyEvent GetType() const
void RemoveColumn(sal_uInt16 nId)
bool GetState(DbGridControlNavigationBarState nWhich) const
void FieldValueChanged(sal_uInt16 _nId)
const DbGridControlNavigationBarState ControlMap[]
Link< DbGridControlNavigationBarState, int > m_aMasterStateProvider
sal_uInt16 GetColumnIdFromModelPos(sal_uInt16 nPos) const
::std::vector< std::unique_ptr<::svxform::DataColumn > > m_aVariants
virtual void SAL_CALL disposing(const css::lang::EventObject &) override
std::unique_ptr< weld::Button > m_xNewBtn
virtual bool CursorMoving(sal_Int32 nNewRow, sal_uInt16 nNewCol) override
FmGridListener * m_pGridListener
void SetCursorColor(const Color &_rCol)
void refreshController(sal_uInt16 _nColId, GrantControlAccess _aAccess)
called when a controller needs to be re-initialized
KeyFuncType GetFunction() const
vcl::Window * GetParent() const
sal_uInt16 GetColumnId(sal_uInt16 nPos) const
void RecalcRows(sal_Int32 nNewTopRow, sal_uInt16 nLinesOnScreen, bool bUpdateCursor)
void executeRowContextMenu(sal_Int32 _nRow, const Point &_rPreferredPos)
virtual sal_uInt32 GetTotalCellWidth(sal_Int32 nRow, sal_uInt16 nColId) override
virtual void PreExecuteRowContextMenu(sal_uInt16 nRow, PopupMenu &rMenu)
This is called before executing a context menu for a row.
void Disable(bool bChild=true)
css::util::Date m_aNullDate
virtual bool IsModified() const override
virtual void SetPosSizePixel(const Point &rNewPos, const Size &rNewSize)
const Point & GetMousePosPixel() const
VclPtr< DbGridControl > m_pParent
void implAdjustInSolarThread(bool _bRows)
virtual void KeyInput(const KeyEvent &rKEvt)
void SetSeekPos(sal_Int32 nPos, GrantControlAccess)
VclPtr< DbGridControl > m_pControl
const vcl::KeyCode & GetKeyCode() const
FmXGridSourcePropListener(DbGridControl *_pParent)
void InvalidateAll(sal_Int32 nCurrentPos, bool bAll=false)
std::shared_ptr< weld::ButtonPressRepeater > m_xPrevRepeater
void UpdateFromField(const DbGridRow *pRow, const css::uno::Reference< css::util::XNumberFormatter > &xFormatter)
#define HID_GRID_NUMBEROFRECORDS
std::shared_ptr< weld::ButtonPressRepeater > m_xNextRepeater
DbGridRowRef m_xCurrentRow
std::unique_ptr< weld::Container > m_xContainer
void SetState(CursorWrapper *pCur, bool bPaintCursor)
bool SeekCursor(sal_Int32 nRow, bool bAbsolute=false)
void ImplInitWindow(const InitWindowFacet _eInitWhat)
virtual void onRowChange()
called when the current row changed
virtual ~DisposeListenerGridBridge() override
constexpr sal_uInt16 KEY_ESCAPE
virtual void Dispatch(sal_uInt16 nId) override
virtual void dispose() override
void SetTransparent(bool bTransparent)
virtual void disposing(sal_Int16 _nId) override
bool SetCurrent(sal_Int32 nNewRow)
OUString GetCellText(const DbGridRow *pRow, const css::uno::Reference< css::util::XNumberFormatter > &xFormatter) const
const CellControllerRef & Controller() const
virtual void Init() override
#define SAL_INFO(area, stream)
void EnableHandle(bool bEnable)
sal_Unicode GetCharCode() const
void InsertHandleColumn()
void Paint(OutputDevice &rDev, const tools::Rectangle &rRect, const DbGridRow *pRow, const css::uno::Reference< css::util::XNumberFormatter > &xFormatter)
sal_Int32 FirstSelectedRow()
#define FM_PROP_FETCHSIZE
sal_uInt16 GetViewColumnPos(sal_uInt16 nId) const
void setDisplaySynchron(bool bSync)
tools::Long Height() const
#define HID_GRID_TRAVEL_FIRST
std::unique_ptr< CursorWrapper > m_pDataCursor
virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessibleControl(sal_Int32 _nIndex) override
Creates the accessible object of an additional control.
friend class FmXGridSourcePropListener
IMPL_LINK_NOARG(DbGridControl, OnDelete, void *, void)
osl::Mutex m_aAdjustSafety
void SetStatus(GridRowStatus _eStat)
std::unique_ptr< weld::Builder > m_xBuilder
static bool IsValid(const DbGridRowRef &_xRow)
virtual ~DbGridControl() override
friend class FmXDisposeMultiplexer
virtual void VisibleRowsChanged(sal_Int32 nNewTopRow, sal_uInt16 nNumRows) override
RowSetEventListener(DbGridControl *i_pControl)
void copyCellText(sal_Int32 _nRow, sal_uInt16 _nColId)
copies the text of the given cell into the clipboard
virtual OUString GetCellText(sal_Int32 _nRow, sal_uInt16 _nColId) const override
GetCellText returns the text at the given position.
constexpr auto DEFAULT_BROWSE_MODE
rtl::Reference<::comphelper::OPropertyChangeMultiplexer > m_pRealListener
virtual bool DoKeyInput(const KeyEvent &rEvt)
virtual void PostExecuteRowContextMenu(sal_uInt16 nRow, const PopupMenu &rMenu, sal_uInt16 nExecutionResult)
After executing the context menu for a row this method is called.
virtual void HideColumn(sal_uInt16 nId)
hide a column
ImplSVEvent * m_nDeleteEvent
bool hasProperty(const OUString &_rName, const Reference< XPropertySet > &_rxSet)
#define HID_GRID_TRAVEL_NEXT
std::unique_ptr< weld::Label > m_xRecordCount
virtual void KeyInput(const KeyEvent &rEvt) override
DbGridControlOptions SetOptions(DbGridControlOptions nOpt)
DisposeListenerGridBridge(DbGridControl &_rParent, const Reference< XComponent > &_rxObject)
sal_uLong GetDefaultColumnWidth(const OUString &_rText) const
virtual void InitController(CellControllerRef &rController, sal_Int32 nRow, sal_uInt16 nCol)
void RowModified(sal_Int32 nRow)
bool isBeforeFirst() const
void ForceHideScrollbars()
forces both scrollbars to be hidden
constexpr sal_uInt16 KEY_DELETE
std::unique_ptr< weld::Label > m_xRecordText
virtual void selectionChanged()=0
Reference< XComponentContext > m_xContext
virtual void InitColumnsByFields(const css::uno::Reference< css::container::XIndexAccess > &xFields)=0
virtual bool IsRowSelected(sal_Int32 nRow) const override
css::uno::Any getBookmark()
void SetHeaderBar(BrowserHeader *)
#define BROWSER_INVALIDID
virtual ~NavigationBar() override
GridFieldValueListener(DbGridControl &_rParent, const Reference< XPropertySet > &xField, sal_uInt16 _nId)
const ::svt::CellControllerRef & GetController() const
sal_uLong GetColumnWidth(sal_uInt16 nColumnId) const
void SelectColumnId(sal_uInt16 nColId)
sal_uInt16 GetCurColumnId() const
void InsertDataColumn(sal_uInt16 nItemId, const OUString &rText, tools::Long nSize, HeaderBarItemBits nBits=HeaderBarItemBits::STDSTYLE, sal_uInt16 nPos=HEADERBAR_APPEND)
AbsolutePos(std::unique_ptr< weld::Entry > xEntry, NavigationBar *pBar)
Link< DbGridControlNavigationBarState, bool > m_aMasterSlotExecutor
friend class DisposeListenerGridBridge
const MultiSelection * GetSelection() const
sal_uInt16 ColCount() const
virtual void dispose() override
constexpr sal_uInt16 KEY_TAB
#define HID_GRID_TRAVEL_NEW
std::unique_ptr< DisposeListenerGridBridge > m_pCursorDisposeListener
virtual void RemoveRows() override
void Show(bool bVisible=true, ShowFlags nFlags=ShowFlags::NONE)
virtual void SAL_CALL rowsChanged(const css::sdb::RowsChangeEvent &i_aEvt) override
FmXGridCell * GetCell() const
sal_Int32 GetTopRow() const