2009-08-26 13:11:27 +00:00
|
|
|
/*************************************************************************
|
2010-02-12 15:01:35 +01:00
|
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
|
|
*
|
|
|
|
* Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
|
|
*
|
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
|
|
*
|
|
|
|
* This file is part of OpenOffice.org.
|
|
|
|
*
|
|
|
|
* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Lesser General Public License version 3
|
|
|
|
* only, as published by the Free Software Foundation.
|
|
|
|
*
|
|
|
|
* OpenOffice.org is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU Lesser General Public License version 3 for more details
|
|
|
|
* (a copy is included in the LICENSE file that accompanied this code).
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
|
|
* version 3 along with OpenOffice.org. If not, see
|
|
|
|
* <http://www.openoffice.org/license.html>
|
|
|
|
* for a copy of the LGPLv3 License.
|
|
|
|
*
|
2009-08-26 13:11:27 +00:00
|
|
|
************************************************************************/
|
|
|
|
|
|
|
|
#ifndef SVTOOLS_TABLECONTROL_IMPL_HXX
|
|
|
|
#define SVTOOLS_TABLECONTROL_IMPL_HXX
|
|
|
|
|
|
|
|
#include <svtools/table/tablemodel.hxx>
|
|
|
|
#include <svtools/table/abstracttablecontrol.hxx>
|
|
|
|
#include <svtools/table/tablemodel.hxx>
|
2010-12-17 13:38:24 +01:00
|
|
|
|
2009-08-26 13:11:27 +00:00
|
|
|
#include <vcl/seleng.hxx>
|
|
|
|
|
2010-12-17 13:38:24 +01:00
|
|
|
#include <vector>
|
2010-02-12 17:08:15 +01:00
|
|
|
|
2009-08-26 13:11:27 +00:00
|
|
|
class ScrollBar;
|
|
|
|
class ScrollBarBox;
|
|
|
|
|
|
|
|
//........................................................................
|
|
|
|
namespace svt { namespace table
|
|
|
|
{
|
|
|
|
//........................................................................
|
|
|
|
|
2010-12-23 15:48:53 +01:00
|
|
|
struct ColumnWidthInfo
|
|
|
|
{
|
|
|
|
ColumnWidthInfo()
|
|
|
|
:nStartPixel( 0 )
|
|
|
|
,nEndPixel( 0 )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
ColumnWidthInfo( long const i_startPixel, long const i_endPixel )
|
|
|
|
:nStartPixel( i_startPixel )
|
|
|
|
,nEndPixel( i_endPixel )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
long getStart() const { return nStartPixel; }
|
|
|
|
long getEnd() const { return nEndPixel; }
|
|
|
|
|
|
|
|
void setEnd( long const i_end ) { nEndPixel = i_end; }
|
|
|
|
void move( long const i_offset ) { nStartPixel += i_offset; nEndPixel += i_offset; }
|
|
|
|
|
|
|
|
long getWidth() const { return nEndPixel - nStartPixel; }
|
|
|
|
|
|
|
|
private:
|
|
|
|
/** the start of the column, in pixels. Might be negative, in case the column is scrolled out of the visible
|
|
|
|
area.
|
|
|
|
*/
|
|
|
|
long nStartPixel;
|
|
|
|
|
|
|
|
/** the end of the column, in pixels, plus 1. Effectively, this is the accumulated width of a all columns
|
|
|
|
up to the current one.
|
|
|
|
*/
|
|
|
|
long nEndPixel;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct ColumnInfoPositionLess
|
|
|
|
{
|
|
|
|
bool operator()( ColumnWidthInfo const& i_colInfo, long const i_position )
|
|
|
|
{
|
|
|
|
return i_colInfo.getEnd() < i_position;
|
|
|
|
}
|
|
|
|
bool operator()( long const i_position, ColumnWidthInfo const& i_colInfo )
|
|
|
|
{
|
|
|
|
return i_position < i_colInfo.getStart();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef ::std::vector< ColumnWidthInfo > ColumnPositions;
|
2009-08-26 13:11:27 +00:00
|
|
|
|
|
|
|
class TableControl;
|
|
|
|
class TableDataWindow;
|
|
|
|
class TableFunctionSet;
|
|
|
|
|
|
|
|
//====================================================================
|
|
|
|
//= TableControl_Impl
|
|
|
|
//====================================================================
|
2010-12-17 13:38:24 +01:00
|
|
|
class TableControl_Impl :public IAbstractTableControl
|
|
|
|
,public ITableModelListener
|
2009-08-26 13:11:27 +00:00
|
|
|
{
|
|
|
|
friend class TableGeometry;
|
|
|
|
friend class TableRowGeometry;
|
|
|
|
friend class TableColumnGeometry;
|
|
|
|
friend class SuspendInvariants;
|
2010-12-23 15:48:53 +01:00
|
|
|
friend class TableFunctionSet;
|
|
|
|
|
2009-08-26 13:11:27 +00:00
|
|
|
private:
|
|
|
|
/// the control whose impl-instance we implemnt
|
2010-03-23 15:28:55 +01:00
|
|
|
TableControl& m_rAntiImpl;
|
2009-08-26 13:11:27 +00:00
|
|
|
/// the model of the table control
|
2010-03-23 15:28:55 +01:00
|
|
|
PTableModel m_pModel;
|
2009-08-26 13:11:27 +00:00
|
|
|
/// the input handler to use, usually the input handler as provided by ->m_pModel
|
2010-03-23 15:28:55 +01:00
|
|
|
PTableInputHandler m_pInputHandler;
|
2010-12-23 15:48:53 +01:00
|
|
|
/// info about the widths of our columns
|
|
|
|
ColumnPositions m_aColumnWidths;
|
2010-02-12 17:08:15 +01:00
|
|
|
|
2009-08-26 13:11:27 +00:00
|
|
|
/// the height of a single row in the table, measured in pixels
|
2010-03-23 15:28:55 +01:00
|
|
|
long m_nRowHeightPixel;
|
2009-08-26 13:11:27 +00:00
|
|
|
/// the height of the column header row in the table, measured in pixels
|
2010-03-23 15:28:55 +01:00
|
|
|
long m_nColHeaderHeightPixel;
|
2009-08-26 13:11:27 +00:00
|
|
|
/// the width of the row header column in the table, measured in pixels
|
2010-03-23 15:28:55 +01:00
|
|
|
long m_nRowHeaderWidthPixel;
|
2009-08-26 13:11:27 +00:00
|
|
|
|
|
|
|
/// the number of columns in the table control. Cached model value.
|
2010-03-23 15:28:55 +01:00
|
|
|
TableSize m_nColumnCount;
|
2009-08-26 13:11:27 +00:00
|
|
|
/// the number of rows in the table control. Cached model value.
|
2010-03-23 15:28:55 +01:00
|
|
|
TableSize m_nRowCount;
|
2009-08-26 13:11:27 +00:00
|
|
|
|
2010-03-23 15:28:55 +01:00
|
|
|
ColPos m_nCurColumn;
|
|
|
|
RowPos m_nCurRow;
|
|
|
|
ColPos m_nLeftColumn;
|
|
|
|
RowPos m_nTopRow;
|
2009-08-26 13:11:27 +00:00
|
|
|
|
2010-03-23 15:28:55 +01:00
|
|
|
sal_Int32 m_nCursorHidden;
|
2009-08-26 13:11:27 +00:00
|
|
|
|
|
|
|
/** the window to contain all data content, including header bars
|
|
|
|
|
|
|
|
The window's upper left corner is at position (0,0), relative to the
|
|
|
|
table control, which is the direct parent of the data window.
|
|
|
|
*/
|
2010-03-23 15:28:55 +01:00
|
|
|
TableDataWindow* m_pDataWindow;
|
2009-08-26 13:11:27 +00:00
|
|
|
/// the vertical scrollbar, if any
|
2010-03-23 15:28:55 +01:00
|
|
|
ScrollBar* m_pVScroll;
|
2009-08-26 13:11:27 +00:00
|
|
|
/// the horizontal scrollbar, if any
|
2010-12-23 15:48:53 +01:00
|
|
|
ScrollBar* m_pHScroll;
|
2010-03-23 15:28:55 +01:00
|
|
|
ScrollBarBox* m_pScrollCorner;
|
2010-12-17 13:38:24 +01:00
|
|
|
//selection engine - for determining selection range, e.g. single, multiple
|
|
|
|
SelectionEngine* m_pSelEngine;
|
|
|
|
//vector which contains the selected rows
|
|
|
|
std::vector<RowPos> m_nRowSelected;
|
|
|
|
//part of selection engine
|
|
|
|
TableFunctionSet* m_pTableFunctionSet;
|
|
|
|
//part of selection engine
|
2010-12-23 15:48:53 +01:00
|
|
|
RowPos m_nAnchor;
|
|
|
|
bool m_bResizingColumn;
|
|
|
|
ColPos m_nResizingColumn;
|
|
|
|
bool m_bResizingGrid;
|
2011-01-04 22:23:17 +01:00
|
|
|
bool m_bUpdatingColWidths;
|
2009-08-26 13:11:27 +00:00
|
|
|
|
|
|
|
#if DBG_UTIL
|
|
|
|
#define INV_SCROLL_POSITION 1
|
|
|
|
/** represents a bitmask of invariants to check
|
|
|
|
|
|
|
|
Actually, impl_checkInvariants checks more invariants than denoted in this
|
|
|
|
bit mask, but only those present here can be disabled temporarily.
|
|
|
|
*/
|
|
|
|
sal_Int32 m_nRequiredInvariants;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
PTableModel getModel() const;
|
|
|
|
void setModel( PTableModel _pModel );
|
|
|
|
|
|
|
|
inline const PTableInputHandler& getInputHandler() const { return m_pInputHandler; }
|
|
|
|
|
|
|
|
inline ColPos getCurColumn() const { return m_nCurColumn; }
|
|
|
|
inline RowPos getCurRow() const { return m_nCurRow; }
|
|
|
|
inline void setCurRow(RowPos curRow){ m_nCurRow = curRow; }
|
|
|
|
inline RowPos getTopRow() const { return m_nTopRow; }
|
2009-10-30 12:37:25 +00:00
|
|
|
inline long getRowCount() const { return m_nRowCount; }
|
|
|
|
inline long getColumnCount() const { return m_nColumnCount; }
|
2009-08-26 13:11:27 +00:00
|
|
|
|
|
|
|
inline const TableControl& getAntiImpl() const { return m_rAntiImpl; }
|
|
|
|
inline TableControl& getAntiImpl() { return m_rAntiImpl; }
|
|
|
|
|
|
|
|
public:
|
|
|
|
TableControl_Impl( TableControl& _rAntiImpl );
|
|
|
|
~TableControl_Impl();
|
|
|
|
|
|
|
|
#if DBG_UTIL
|
|
|
|
const sal_Char* impl_checkInvariants() const;
|
|
|
|
#endif
|
|
|
|
/** to be called when the anti-impl instance has been resized
|
|
|
|
*/
|
|
|
|
void onResize();
|
|
|
|
|
|
|
|
/** paints the table control content which intersects with the given rectangle
|
|
|
|
*/
|
|
|
|
void doPaintContent( const Rectangle& _rUpdateRect );
|
|
|
|
|
|
|
|
/** moves the cursor to the cell with the given coordinates
|
|
|
|
|
|
|
|
To ease the caller's code, the coordinates must not necessarily denote a
|
|
|
|
valid position. If they don't, <FALSE/> will be returned.
|
|
|
|
*/
|
|
|
|
bool goTo( ColPos _nColumn, RowPos _nRow );
|
|
|
|
|
|
|
|
/** ensures that the given coordinate is visible
|
|
|
|
@param _nColumn
|
|
|
|
the column position which should be visible. Must be non-negative, and smaller
|
|
|
|
than the column count.
|
|
|
|
@param _nRow
|
|
|
|
the row position which should be visibleMust be non-negative, and smaller
|
|
|
|
than the row count.
|
|
|
|
@param _bAcceptPartialVisibility
|
|
|
|
<TRUE/> if it's okay that the given cooordinate is only partially visible
|
|
|
|
*/
|
|
|
|
void ensureVisible( ColPos _nColumn, RowPos _nRow, bool _bAcceptPartialVisibility );
|
2010-12-17 13:38:24 +01:00
|
|
|
|
2011-01-03 16:01:14 +01:00
|
|
|
/** retrieves the content of the given cell, converted to a string
|
|
|
|
*/
|
|
|
|
::rtl::OUString getCellContentAsString( RowPos const i_row, ColPos const i_col );
|
|
|
|
|
2010-12-17 13:38:24 +01:00
|
|
|
/** checks whether the vector with the selected rows contains the current row*/
|
|
|
|
BOOL isRowSelected(const ::std::vector<RowPos>& selectedRows, RowPos current);
|
|
|
|
|
|
|
|
bool isRowSelected(RowPos current);
|
2011-01-03 16:01:14 +01:00
|
|
|
|
2010-12-17 13:38:24 +01:00
|
|
|
/** returns the position of the current row in the selection vector */
|
|
|
|
int getRowSelectedNumber(const ::std::vector<RowPos>& selectedRows, RowPos current);
|
2011-01-03 16:01:14 +01:00
|
|
|
|
2010-12-17 13:38:24 +01:00
|
|
|
/** _rCellRect contains the region, which should be invalidate after some action e.g. selecting row*/
|
|
|
|
void invalidateSelectedRegion(RowPos _nPrevRow, RowPos _nCurRow, Rectangle& _rCellRect );
|
2011-01-03 16:01:14 +01:00
|
|
|
|
2010-12-17 13:38:24 +01:00
|
|
|
/** to be called when a new row is added to the control*/
|
|
|
|
void invalidateRow(RowPos _nRowPos, Rectangle& _rCellRect );
|
2011-01-03 16:01:14 +01:00
|
|
|
|
2010-12-17 13:38:24 +01:00
|
|
|
/** returns the vector, which contains the selected rows*/
|
|
|
|
std::vector<RowPos>& getSelectedRows();
|
2011-01-03 16:01:14 +01:00
|
|
|
|
2010-12-17 13:38:24 +01:00
|
|
|
/** updates the vector, which contains the selected rows after removing the row nRowPos*/
|
|
|
|
void removeSelectedRow(RowPos _nRowPos);
|
|
|
|
void invalidateRows();
|
|
|
|
void clearSelection();
|
2011-01-03 16:01:14 +01:00
|
|
|
|
2010-12-23 15:48:53 +01:00
|
|
|
// IAbstractTableControl
|
|
|
|
virtual void hideCursor();
|
|
|
|
virtual void showCursor();
|
|
|
|
virtual bool dispatchAction( TableControlAction _eAction );
|
|
|
|
virtual SelectionEngine* getSelEngine();
|
|
|
|
virtual void activateCellAt( const Point& rPoint );
|
|
|
|
virtual RowPos getRowAtPoint( const Point& rPoint );
|
|
|
|
virtual ColPos getColAtPoint( const Point& rPoint );
|
|
|
|
virtual void resizeColumn(const Point& rPoint);
|
|
|
|
virtual bool checkResizeColumn(const Point& rPoint);
|
|
|
|
virtual bool endResizeColumn(const Point& rPoint);
|
2010-12-17 13:38:24 +01:00
|
|
|
|
|
|
|
TableDataWindow* getDataWindow();
|
|
|
|
ScrollBar* getHorzScrollbar();
|
|
|
|
ScrollBar* getVertScrollbar();
|
|
|
|
|
|
|
|
Rectangle calcHeaderRect(bool bColHeader);
|
|
|
|
Rectangle calcTableRect();
|
|
|
|
|
|
|
|
// ITableModelListener
|
|
|
|
virtual void rowsInserted( RowPos first, RowPos last );
|
|
|
|
virtual void rowsRemoved( RowPos first, RowPos last );
|
|
|
|
virtual void columnsInserted( ColPos first, ColPos last );
|
|
|
|
virtual void columnsRemoved( ColPos first, ColPos last );
|
|
|
|
virtual void columnMoved( ColPos oldIndex, ColPos newIndex );
|
|
|
|
virtual void cellsUpdated( ColPos firstCol, ColPos lastCol, RowPos firstRow, RowPos lastRow );
|
2011-01-04 22:23:17 +01:00
|
|
|
virtual void columnChanged( ColPos const i_column, ColumnAttributeGroup const i_attributeGroup );
|
2010-12-17 13:38:24 +01:00
|
|
|
|
2009-10-30 12:37:25 +00:00
|
|
|
private:
|
|
|
|
/** toggles the cursor visibility
|
|
|
|
|
|
|
|
The method is not bound to the classes public invariants, as it's used in
|
|
|
|
situations where the they must not necessarily be fullfilled.
|
|
|
|
*/
|
|
|
|
void impl_ni_doSwitchCursor( bool _bOn );
|
2009-08-26 13:11:27 +00:00
|
|
|
|
|
|
|
/** returns the number of visible rows.
|
|
|
|
|
|
|
|
@param _bAcceptPartialRow
|
|
|
|
specifies whether a possible only partially visible last row is
|
|
|
|
counted, too.
|
|
|
|
*/
|
|
|
|
TableSize impl_getVisibleRows( bool _bAcceptPartialRow ) const;
|
|
|
|
|
|
|
|
/** returns the number of visible columns
|
|
|
|
|
|
|
|
The value may change with different horizontal scroll positions, as
|
|
|
|
different columns have different widths. For instance, if your control is
|
|
|
|
100 pixels wide, and has three columns of width 50, 50, 100, respectively,
|
|
|
|
then this method will return either "2" or "1", depending on which column
|
|
|
|
is the first visible one.
|
|
|
|
|
|
|
|
@param _bAcceptPartialRow
|
|
|
|
specifies whether a possible only partially visible last row is
|
|
|
|
counted, too.
|
|
|
|
*/
|
2011-01-06 14:16:36 +01:00
|
|
|
TableSize impl_getVisibleColumns( bool _bAcceptPartialCol ) const;
|
2009-08-26 13:11:27 +00:00
|
|
|
|
|
|
|
/** determines the rectangle occupied by the given cell
|
|
|
|
*/
|
|
|
|
void impl_getCellRect( ColPos _nColumn, RowPos _nRow, Rectangle& _rCellRect ) const;
|
|
|
|
|
|
|
|
/** updates all cached model values
|
|
|
|
|
|
|
|
The method is not bound to the classes public invariants, as it's used in
|
|
|
|
situations where the they must not necessarily be fullfilled.
|
|
|
|
*/
|
|
|
|
void impl_ni_updateCachedModelValues();
|
|
|
|
|
|
|
|
/** updates ->m_aColumnWidthsPixel with the current pixel widths of all model columns
|
|
|
|
|
|
|
|
The method takes into account the current zoom factor and map mode of the table
|
|
|
|
control, plus any possible COLWIDTH_FIT_TO_VIEW widths in the model columns.
|
|
|
|
|
|
|
|
The method is not bound to the classes public invariants, as it's used in
|
|
|
|
situations where the they must not necessarily be fullfilled.
|
|
|
|
*/
|
|
|
|
void impl_ni_updateColumnWidths();
|
|
|
|
|
|
|
|
/** updates the scrollbars of the control
|
|
|
|
|
|
|
|
The method is not bound to the classes public invariants, as it's used in
|
|
|
|
situations where the they must not necessarily be fullfilled.
|
|
|
|
|
|
|
|
This includes both the existence of the scrollbars, and their
|
|
|
|
state.
|
|
|
|
*/
|
|
|
|
void impl_ni_updateScrollbars();
|
|
|
|
|
|
|
|
/** scrolls the view by the given number of rows
|
|
|
|
|
|
|
|
The method is not bound to the classes public invariants, as it's used in
|
|
|
|
situations where the they must not necessarily be fullfilled.
|
|
|
|
|
|
|
|
@return
|
|
|
|
the number of rows by which the viewport was scrolled. This may differ
|
|
|
|
from the given numbers to scroll in case the begin or the end of the
|
|
|
|
row range were reached.
|
|
|
|
*/
|
|
|
|
TableSize impl_ni_ScrollRows( TableSize _nRowDelta );
|
|
|
|
|
2010-12-23 15:48:53 +01:00
|
|
|
/** equivalent to impl_ni_ScrollRows, but checks the instances invariants beforehand (in a non-product build only)
|
|
|
|
*/
|
|
|
|
TableSize impl_scrollRows( TableSize const i_rowDelta );
|
|
|
|
|
2009-08-26 13:11:27 +00:00
|
|
|
/** scrolls the view by the given number of columns
|
|
|
|
|
|
|
|
The method is not bound to the classes public invariants, as it's used in
|
|
|
|
situations where the they must not necessarily be fullfilled.
|
|
|
|
|
|
|
|
@return
|
|
|
|
the number of columns by which the viewport was scrolled. This may differ
|
|
|
|
from the given numbers to scroll in case the begin or the end of the
|
|
|
|
column range were reached.
|
|
|
|
*/
|
2010-12-23 15:48:53 +01:00
|
|
|
TableSize impl_ni_ScrollColumns( TableSize _nColumnDelta );
|
|
|
|
|
|
|
|
/** equivalent to impl_ni_ScrollColumns, but checks the instances invariants beforehand (in a non-product build only)
|
|
|
|
*/
|
|
|
|
TableSize impl_scrollColumns( TableSize const i_columnDelta );
|
|
|
|
|
|
|
|
/** retrieves the area occupied by the totality of (at least partially) visible cells
|
2010-03-26 17:45:16 +01:00
|
|
|
|
|
|
|
The returned area includes row and column headers. Also, it takes into
|
|
|
|
account the the fact that there might be less columns than would normally
|
|
|
|
find room in the control.
|
|
|
|
|
|
|
|
As a result of respecting the partial visibility of rows and columns,
|
|
|
|
the returned area might be larger than the data window's output size.
|
|
|
|
*/
|
|
|
|
void impl_getAllVisibleCellsArea( Rectangle& _rCellArea ) const;
|
|
|
|
|
|
|
|
/** retrieves the area occupied by all (at least partially) visible data cells.
|
|
|
|
|
|
|
|
Effectively, the returned area is the same as returned by ->impl_getAllVisibleCellsArea,
|
|
|
|
minus the row and column header areas.
|
|
|
|
*/
|
|
|
|
void impl_getAllVisibleDataCellArea( Rectangle& _rCellArea ) const;
|
2009-08-26 13:11:27 +00:00
|
|
|
|
2010-12-23 15:48:53 +01:00
|
|
|
/** retrieves the column which covers the given ordinate
|
|
|
|
*/
|
|
|
|
ColPos impl_getColumnForOrdinate( long const i_ordinate ) const;
|
|
|
|
|
2011-01-06 14:16:36 +01:00
|
|
|
/// invalidates the window area occupied by the given column
|
|
|
|
void impl_invalidateColumn( ColPos const i_column );
|
2010-02-12 17:08:15 +01:00
|
|
|
|
2009-08-26 13:11:27 +00:00
|
|
|
DECL_LINK( OnScroll, ScrollBar* );
|
2010-12-23 15:48:53 +01:00
|
|
|
DECL_LINK( OnUpdateScrollbars, void* );
|
2009-08-26 13:11:27 +00:00
|
|
|
};
|
2010-12-23 15:48:53 +01:00
|
|
|
|
2010-03-22 15:15:28 +01:00
|
|
|
//see seleng.hxx, seleng.cxx, FunctionSet overridables, part of selection engine
|
2009-08-26 13:11:27 +00:00
|
|
|
class TableFunctionSet : public FunctionSet
|
|
|
|
{
|
|
|
|
friend class TableDataWindow;
|
|
|
|
private:
|
|
|
|
TableControl_Impl* m_pTableControl;
|
|
|
|
RowPos m_nCurrentRow;
|
|
|
|
public:
|
|
|
|
TableFunctionSet(TableControl_Impl* _pTableControl);
|
|
|
|
virtual ~TableFunctionSet();
|
|
|
|
|
|
|
|
virtual void BeginDrag();
|
|
|
|
virtual void CreateAnchor();
|
|
|
|
virtual void DestroyAnchor();
|
|
|
|
virtual BOOL SetCursorAtPoint(const Point& rPoint, BOOL bDontSelectAtCursor);
|
|
|
|
virtual BOOL IsSelectionAtPoint( const Point& rPoint );
|
|
|
|
virtual void DeselectAtPoint( const Point& rPoint );
|
|
|
|
virtual void DeselectAll();
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//........................................................................
|
|
|
|
} } // namespace svt::table
|
|
|
|
//........................................................................
|
|
|
|
|
|
|
|
#endif // SVTOOLS_TABLECONTROL_IMPL_HXX
|