summaryrefslogtreecommitdiff
path: root/svtools/source/uno/unocontroltablemodel.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svtools/source/uno/unocontroltablemodel.cxx')
-rw-r--r--svtools/source/uno/unocontroltablemodel.cxx161
1 files changed, 125 insertions, 36 deletions
diff --git a/svtools/source/uno/unocontroltablemodel.cxx b/svtools/source/uno/unocontroltablemodel.cxx
index aa00f799dfd0..ed297b42dcf8 100644
--- a/svtools/source/uno/unocontroltablemodel.cxx
+++ b/svtools/source/uno/unocontroltablemodel.cxx
@@ -27,17 +27,20 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svtools.hxx"
-#include "unocontroltablemodel.hxx"
-#include <com/sun/star/view/SelectionType.hpp>
-#include "svtools/table/gridtablerenderer.hxx"
#include "svtools/table/defaultinputhandler.hxx"
+#include "svtools/table/gridtablerenderer.hxx"
#include "svtools/table/tablecontrol.hxx"
+#include "unocontroltablemodel.hxx"
+
+#include <com/sun/star/awt/grid/XGridColumn.hpp>
+#include <com/sun/star/view/SelectionType.hpp>
+#include <comphelper/processfactory.hxx>
+
#include <comphelper/sequence.hxx>
+#include <comphelper/stlunosequence.hxx>
#include <rtl/ref.hxx>
-#include <tools/debug.hxx>
#include <toolkit/helper/property.hxx>
-#include <comphelper/processfactory.hxx>
-#include <com/sun/star/awt/grid/XGridColumn.hpp>
+#include <tools/debug.hxx>
#include <tools/diagnose_ex.h>
using ::rtl::OUString;
@@ -204,26 +207,26 @@ using namespace ::com::sun::star::awt::grid;
typedef ::std::vector< PTableModelListener > ModellListeners;
struct UnoControlTableModel_Impl
{
- ::std::vector< PColumnModel > aColumns;
- TableSize nRowCount;
- bool bHasColumnHeaders;
- bool bHasRowHeaders;
- ScrollbarVisibility eVScrollMode;
- ScrollbarVisibility eHScrollMode;
- PTableRenderer pRenderer;
- PTableInputHandler pInputHandler;
- TableMetrics nRowHeight;
- TableMetrics nColumnHeaderHeight;
- TableMetrics nRowHeaderWidth;
- ::std::vector<rtl::OUString > aRowHeadersTitle;
- ::std::vector<std::vector< Any > > aCellContent;
- ::com::sun::star::util::Color m_nLineColor;
- ::com::sun::star::util::Color m_nHeaderColor;
- ::com::sun::star::util::Color m_nTextColor;
- ::com::sun::star::util::Color m_nRowColor1;
- ::com::sun::star::util::Color m_nRowColor2;
+ ::std::vector< PColumnModel > aColumns;
+ TableSize nRowCount;
+ bool bHasColumnHeaders;
+ bool bHasRowHeaders;
+ ScrollbarVisibility eVScrollMode;
+ ScrollbarVisibility eHScrollMode;
+ PTableRenderer pRenderer;
+ PTableInputHandler pInputHandler;
+ TableMetrics nRowHeight;
+ TableMetrics nColumnHeaderHeight;
+ TableMetrics nRowHeaderWidth;
+ ::std::vector< ::rtl::OUString > aRowHeadersTitle;
+ ::std::vector< ::std::vector< Any > > aCellContent;
+ ::com::sun::star::util::Color m_nLineColor;
+ ::com::sun::star::util::Color m_nHeaderColor;
+ ::com::sun::star::util::Color m_nTextColor;
+ ::com::sun::star::util::Color m_nRowColor1;
+ ::com::sun::star::util::Color m_nRowColor2;
::com::sun::star::style::VerticalAlignment m_eVerticalAlign;
- ModellListeners m_aListeners;
+ ModellListeners m_aListeners;
UnoControlTableModel_Impl()
:aColumns ( )
@@ -308,11 +311,6 @@ using namespace ::com::sun::star::awt::grid;
m_pImpl->aColumns.resize( _nColCount);
}
//--------------------------------------------------------------------
- void UnoControlTableModel::setRowCount(TableSize _nRowCount)
- {
- m_pImpl->nRowCount = _nRowCount;
- }
- //--------------------------------------------------------------------
bool UnoControlTableModel::isCellEditable( ColPos col, RowPos row ) const
{
(void)col;
@@ -490,20 +488,111 @@ using namespace ::com::sun::star::awt::grid;
m_pImpl->aCellContent = cellContent;
}
- std::vector<std::vector< Any > >& UnoControlTableModel::getCellContent()
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::getCellContent( RowPos const i_row, ColPos const i_col, Any& o_cellContent )
+ {
+ ENSURE_OR_RETURN_VOID( ( i_row >= 0 ) && ( i_row < m_pImpl->aCellContent.size() ),
+ "UnoControlTableModel::getCellContent: illegal row index!" );
+ ::std::vector< Any >& rRowContent( m_pImpl->aCellContent[ i_row ] );
+ ENSURE_OR_RETURN_VOID( ( i_col >= 0 ) && ( i_col < rRowContent.size() ),
+ "UnoControlTableModel::getCellContent: illegal column index" );
+ o_cellContent = rRowContent[ i_col ];
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::updateCellContent( RowPos const i_row, ColPos const i_col, Any const & i_cellContent )
+ {
+ ENSURE_OR_RETURN_VOID( ( i_row >= 0 ) && ( i_row < m_pImpl->aCellContent.size() ),
+ "UnoControlTableModel::getCellContent: illegal row index!" );
+ ::std::vector< Any >& rRowContent( m_pImpl->aCellContent[ i_row ] );
+ ENSURE_OR_RETURN_VOID( ( i_col >= 0 ) && ( i_col < rRowContent.size() ),
+ "UnoControlTableModel::getCellContent: illegal column index" );
+ rRowContent[ i_col ] = i_cellContent;
+
+ // TODO: listener notification
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::setRowHeaderNames( const Sequence< ::rtl::OUString >& i_rowHeaders )
+ {
+ ENSURE_OR_RETURN_VOID( size_t( i_rowHeaders.getLength() ) == m_pImpl->aRowHeadersTitle.size(),
+ "UnoControlTableModel::setRowHeaderNames: illegal number of row headers!" );
+ // this method is not intended to set a new row count, but only to modify the existing row headers
+
+ ::std::copy(
+ ::comphelper::stl_begin( i_rowHeaders ),
+ ::comphelper::stl_end( i_rowHeaders ),
+ m_pImpl->aRowHeadersTitle.begin()
+ );
+
+ // TODO: listener notification
+ }
+
+ //--------------------------------------------------------------------
+ ::rtl::OUString UnoControlTableModel::getRowHeader( RowPos const i_rowPos ) const
{
- return m_pImpl->aCellContent;
+ ENSURE_OR_RETURN( ( i_rowPos >= 0 ) && ( i_rowPos < m_pImpl->aRowHeadersTitle.size() ),
+ "UnoControlTableModel::getRowHeader: illegal row position!", ::rtl::OUString() );
+ return m_pImpl->aRowHeadersTitle[ i_rowPos ];
}
+
//--------------------------------------------------------------------
- void UnoControlTableModel::setRowHeaderName(const std::vector<rtl::OUString>& cellColumnContent)
+ void UnoControlTableModel::appendRow( Sequence< Any > const & i_rowData, ::rtl::OUString const & i_rowHeader )
{
- m_pImpl->aRowHeadersTitle = cellColumnContent;
+ ENSURE_OR_RETURN_VOID( i_rowData.getLength() == getColumnCount(), "UnoControlTableModel::appendRow: invalid row data!" );
+
+ // add row data
+ ::std::vector< Any > newRow( i_rowData.getLength() );
+ if ( !newRow.empty() )
+ ::std::copy(
+ ::comphelper::stl_begin( i_rowData ),
+ ::comphelper::stl_end( i_rowData ),
+ newRow.begin()
+ );
+
+ m_pImpl->aCellContent.push_back( newRow );
+
+ if ( hasRowHeaders() )
+ m_pImpl->aRowHeadersTitle.push_back( i_rowHeader );
+
+ ++m_pImpl->nRowCount;
+
+ // TODO: listener notification
}
- std::vector<rtl::OUString>& UnoControlTableModel::getRowHeaderName()
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::removeRow( RowPos const i_rowPos )
{
- return m_pImpl->aRowHeadersTitle;
+ ENSURE_OR_RETURN_VOID( ( i_rowPos >= 0 ) && ( i_rowPos < getRowCount() ), "UnoControlTableModel::removeRow: illegal row position!" );
+
+ if ( hasRowHeaders() )
+ m_pImpl->aRowHeadersTitle.erase( m_pImpl->aRowHeadersTitle.begin() + i_rowPos );
+
+ const ::std::vector< ::std::vector< Any > >::iterator contentPos = m_pImpl->aCellContent.begin() + i_rowPos;
+ m_pImpl->aCellContent.erase( contentPos );
+
+ --m_pImpl->nRowCount;
+
+ // TODO: listener notification
}
+
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::clearAllRows()
+ {
+ if ( hasRowHeaders() )
+ {
+ ::std::vector< ::rtl::OUString > aEmpty;
+ m_pImpl->aRowHeadersTitle.swap( aEmpty );
+ }
+
+ ::std::vector< ::std::vector< Any > > aEmptyContent;
+ m_pImpl->aCellContent.swap( aEmptyContent );
+
+ m_pImpl->nRowCount = 0;
+
+ // TODO: listener notification
+ }
+
//--------------------------------------------------------------------
::com::sun::star::util::Color UnoControlTableModel::getLineColor()
{