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>
|
2011-01-11 13:26:40 +01:00
|
|
|
#include <svtools/table/tablecontrolinterface.hxx>
|
2009-08-26 13:11:27 +00:00
|
|
|
#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
|
|
|
|
//====================================================================
|
2011-01-11 13:26:40 +01:00
|
|
|
class TableControl_Impl :public ITableControl
|
2010-12-17 13:38:24 +01:00
|
|
|
,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
|
2011-01-11 14:00:09 +01:00
|
|
|
std::vector<RowPos> m_aSelectedRows;
|
2010-12-17 13:38:24 +01:00
|
|
|
//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:
|
|
|
|
|
|
|
|
|
|
|
|
void setModel( PTableModel _pModel );
|
|
|
|
|
|
|
|
inline const PTableInputHandler& getInputHandler() const { return m_pInputHandler; }
|
|
|
|
|
|
|
|
inline void setCurRow(RowPos curRow){ m_nCurRow = curRow; }
|
|
|
|
inline RowPos getTopRow() const { return m_nTopRow; }
|
|
|
|
|
|
|
|
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
|
|
|
/** 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();
|
gridsort: reworked the notification system for inserted/removed rows
In this course, more code which was in SVTXGridControl was moved to the places it belongs to, effectively
meaning that the TableControl has better chances than before to be used outside an SVTXGridControl (though
we're not there, yet).
Also, the selection-related methods in TableControl/_Impl got some refactoring love, so the implementation
details are hidden in the Impl class now, instead of being exposed to an exploited by the TableControl.
And while we were there ... The XGridSelection does not provide a |selectColumn| anymore (there was no
preparation whatsoever for column selection, anywhere, thus it was a complete dummy.)
Also, its de/selectRows methods have been removed: They have questionable use, and make implementation
rather difficult, compared with multiple calls to de/selectRow.
2011-01-13 14:08:36 +01:00
|
|
|
|
|
|
|
bool hasRowSelection() const { return !m_aSelectedRows.empty(); }
|
|
|
|
size_t getSelectedRowCount() const { return m_aSelectedRows.size(); }
|
|
|
|
|
|
|
|
/** removes the given row index from m_aSelectedRows
|
|
|
|
|
|
|
|
@return
|
|
|
|
<TRUE/> if and only if the row was previously marked as selected
|
|
|
|
*/
|
|
|
|
bool markRowAsDeselected( RowPos const i_rowIndex );
|
|
|
|
|
|
|
|
/** marks the given row as selectged, by putting it into m_aSelectedRows
|
|
|
|
@return
|
|
|
|
<TRUE/> if and only if the row was previously <em>not</em> marked as selected
|
|
|
|
*/
|
|
|
|
bool markRowAsSelected( RowPos const i_rowIndex );
|
|
|
|
|
|
|
|
/** marks all rows as deselected
|
|
|
|
@return
|
|
|
|
<TRUE/> if and only if the selection actually changed by this operation
|
|
|
|
*/
|
|
|
|
bool markAllRowsAsDeselected();
|
|
|
|
|
|
|
|
/** marks all rows as selected
|
|
|
|
@return
|
|
|
|
<FALSE/> if and only if all rows were selected already.
|
|
|
|
*/
|
|
|
|
bool markAllRowsAsSelected();
|
|
|
|
|
2011-01-03 16:01:14 +01:00
|
|
|
|
2011-01-11 13:26:40 +01:00
|
|
|
// ITableControl
|
2010-12-23 15:48:53 +01:00
|
|
|
virtual void hideCursor();
|
|
|
|
virtual void showCursor();
|
|
|
|
virtual bool dispatchAction( TableControlAction _eAction );
|
|
|
|
virtual SelectionEngine* getSelEngine();
|
2011-01-11 13:26:40 +01:00
|
|
|
virtual PTableModel getModel() const;
|
2011-01-11 14:00:09 +01:00
|
|
|
virtual ColPos getCurrentColumn() const;
|
|
|
|
virtual RowPos getCurrentRow() const;
|
2010-12-23 15:48:53 +01:00
|
|
|
virtual void activateCellAt( const Point& rPoint );
|
2011-01-11 14:00:09 +01:00
|
|
|
virtual RowPos getRowAtPoint( const Point& rPoint ) const;
|
|
|
|
virtual ColPos getColAtPoint( const Point& rPoint ) const;
|
2010-12-23 15:48:53 +01:00
|
|
|
virtual void resizeColumn(const Point& rPoint);
|
|
|
|
virtual bool checkResizeColumn(const Point& rPoint);
|
|
|
|
virtual bool endResizeColumn(const Point& rPoint);
|
2011-01-11 14:00:09 +01:00
|
|
|
virtual bool isRowSelected( RowPos i_row ) const;
|
|
|
|
|
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 );
|
gridsort: reworked the notification system for inserted/removed rows
In this course, more code which was in SVTXGridControl was moved to the places it belongs to, effectively
meaning that the TableControl has better chances than before to be used outside an SVTXGridControl (though
we're not there, yet).
Also, the selection-related methods in TableControl/_Impl got some refactoring love, so the implementation
details are hidden in the Impl class now, instead of being exposed to an exploited by the TableControl.
And while we were there ... The XGridSelection does not provide a |selectColumn| anymore (there was no
preparation whatsoever for column selection, anywhere, thus it was a complete dummy.)
Also, its de/selectRows methods have been removed: They have questionable use, and make implementation
rather difficult, compared with multiple calls to de/selectRow.
2011-01-13 14:08:36 +01:00
|
|
|
virtual void columnInserted( ColPos const i_colIndex );
|
|
|
|
virtual void columnRemoved( ColPos const i_colIndex );
|
|
|
|
virtual void allColumnsRemoved();
|
2010-12-17 13:38:24 +01:00
|
|
|
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
|