Files
libreoffice/svtools/source/table/gridtablerenderer.cxx

235 lines
8.2 KiB
C++
Raw Normal View History

CWS-TOOLING: integrate CWS gridcontrol_01 2009-08-13 07:53:28 +0200 tkr r274919 : #103210# remove mixed-line-endings 2009-08-13 07:36:19 +0200 tkr r274918 : #103210# remove mixed-line-endings 2009-08-06 14:02:11 +0200 tkr r274725 : #103210# build issues fixed 2009-08-06 12:11:52 +0200 tkr r274711 : #103210# build issues fixed 2009-08-06 12:03:32 +0200 tkr r274710 : #103210# add grid directory to d.lst 2009-08-05 17:00:11 +0200 misheto r274689 : CWS-TOOLING: rebase CWS gridcontrol_01 to trunk@274622 (milestone: DEV300:m54) 2009-08-05 14:31:42 +0200 tkr r274668 : #103210# remove add/removeMouseListener from XGridControl and use XWindow 2009-08-05 14:30:06 +0200 tkr r274667 : #103210# remove add/removeMouseListener from XGridControl and use XWindow 2009-08-05 14:29:09 +0200 tkr r274666 : #103210# remove add/removeMouseListener from XGridControl and use XWindow 2009-08-05 12:02:15 +0200 misheto r274649 : fox for HScroll problem 2009-08-05 11:37:22 +0200 misheto r274644 : CWS-TOOLING: rebase CWS gridcontrol_01 to trunk@274203 (milestone: DEV300:m53) 2009-08-03 10:12:50 +0200 tkr r274568 : #103210# Method getItemIndexPos() added 2009-07-31 18:25:42 +0200 misheto r274547 : fixed bug no cursor with NONE-selection, arrow keys cause selection disappear 2009-07-31 16:36:34 +0200 tkr r274541 : #103210# MouseListener added 2009-07-31 16:35:48 +0200 tkr r274540 : #103210# MouseListener added 2009-07-31 14:37:45 +0200 misheto r274533 : event handlers 2009-07-31 09:43:52 +0200 tkr r274513 : #103210# MouseListener added 2009-07-31 09:42:46 +0200 tkr r274512 : #103210# MouseListenerMultiplexer exported 2009-07-30 18:19:55 +0200 misheto r274501 : 2009-07-30 18:15:00 +0200 misheto r274500 : mouselistener changes 2009-07-30 15:23:03 +0200 tkr r274491 : #i103210# remove XItemListener and add XMouseListener 2009-07-30 15:22:01 +0200 tkr r274490 : #i103210# remove XItemListener and add XMouseListener 2009-07-28 16:47:37 +0200 misheto r274415 : fixed text left intented, removeAllScroll mode, selection mode, single selection 2009-07-28 16:45:32 +0200 misheto r274413 : 2009-07-28 14:56:33 +0200 tkr r274407 : #i103210# build issue fixed 2009-07-28 12:49:23 +0200 tkr r274397 : #i103210# use HScroll and VScroll for Scrolbarmode 2009-07-28 12:24:14 +0200 tkr r274396 : #i103210# use HScroll and VScroll for Scrolbarmode 2009-07-28 11:33:46 +0200 tkr r274393 : ##i103210# api changes 2009-07-28 11:32:48 +0200 tkr r274392 : ##i103210# add ItemListener 2009-07-28 11:31:49 +0200 tkr r274391 : ##i103210# add ItemListener 2009-07-28 08:30:30 +0200 tkr r274388 : #i103210# paint background color 2009-07-24 17:22:10 +0200 misheto r274314 : focus problem solved, single selection with keys UP DOWN 2009-07-22 11:43:24 +0200 misheto r274226 : removed vclxcontrol dependencies 2009-07-22 10:23:34 +0200 misheto r274220 : 2009-07-21 15:04:26 +0200 misheto r274200 : tablecontrol added items 2009-07-21 15:00:44 +0200 misheto r274198 : tablecontrol 2009-07-17 09:58:59 +0200 misheto r274082 : changes mihaela 2009-07-15 11:04:27 +0200 tkr r273999 : #i103210# api documentation added 2009-07-15 11:03:18 +0200 tkr r273998 : #i103210# adapt idl changes 2009-07-14 08:47:32 +0200 tkr r273959 : #i103210# Method removeRow added 2009-07-14 08:46:52 +0200 tkr r273958 : #i103210# Method removeRow added 2009-07-13 08:20:11 +0200 tkr r273914 : #i103210# XGridSelectionModel removed 2009-07-10 13:50:01 +0200 tkr r273888 : #i103210# selection support and listener added 2009-07-10 13:42:17 +0200 tkr r273887 : #i103210# selection support added 2009-07-06 10:21:51 +0200 tkr r273724 : #i103210# implement listener 2009-07-06 10:13:25 +0200 tkr r273723 : #i103210# remove wrong interfaces 2009-07-06 10:11:47 +0200 tkr r273722 : #i103210# interface changes 2009-07-02 15:28:50 +0200 tkr r273659 : #i103210# create new services 2009-07-02 15:26:21 +0200 tkr r273658 : #i103210# create new services 2009-07-02 12:00:39 +0200 tkr r273633 : #i103210# defaultgriddatamodel works now 2009-07-02 11:59:24 +0200 tkr r273631 : #i103210# now XGridDataModel inherits XComponent 2009-07-01 14:07:31 +0200 tkr r273579 : #i103210# initial implementation of the grid control data model 2009-07-01 13:14:21 +0200 tkr r273571 : #i103210# adding new service and some methods 2009-06-30 12:15:13 +0200 tkr r273500 : #i103210# change attribute names 2009-06-30 10:55:07 +0200 tkr r273496 : #i103210# create services and interfaces for the grid control 2009-06-30 10:47:26 +0200 tkr r273495 : #i103210# create services and interfaces for the grid control
2009-08-26 13:11:27 +00:00
/*************************************************************************
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2009 by Sun Microsystems, Inc.
*
* 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.
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svtools.hxx"
#include "svtools/table/gridtablerenderer.hxx"
#include <tools/debug.hxx>
#include <vcl/window.hxx>
//........................................................................
namespace svt { namespace table
{
//........................................................................
struct GridTableRenderer_Impl
{
ITableModel& rModel;
RowPos nCurrentRow;
GridTableRenderer_Impl( ITableModel& _rModel )
:rModel( _rModel )
,nCurrentRow( ROW_INVALID )
{
}
};
//====================================================================
//= GridTableRenderer
//====================================================================
//--------------------------------------------------------------------
GridTableRenderer::GridTableRenderer( ITableModel& _rModel )
:m_pImpl( new GridTableRenderer_Impl( _rModel ) )
{
}
//--------------------------------------------------------------------
GridTableRenderer::~GridTableRenderer()
{
DELETEZ( m_pImpl );
}
//--------------------------------------------------------------------
RowPos GridTableRenderer::getCurrentRow()
{
return m_pImpl->nCurrentRow;
}
//--------------------------------------------------------------------
void GridTableRenderer::PaintHeaderArea(
OutputDevice& _rDevice, const Rectangle& _rArea, bool _bIsColHeaderArea, bool _bIsRowHeaderArea,
const StyleSettings& _rStyle )
{
OSL_PRECOND( _bIsColHeaderArea || _bIsRowHeaderArea,
"GridTableRenderer::PaintHeaderArea: invalid area flags!" );
// fill the rows with alternating background colors
_rDevice.Push( PUSH_FILLCOLOR | PUSH_LINECOLOR );
_rDevice.SetLineColor();
_rDevice.SetFillColor( _rStyle.GetDialogColor() );
_rDevice.DrawRect( _rArea );
// delimiter lines at bottom/right
_rDevice.SetLineColor( _rStyle.GetDialogTextColor() );
_rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() );
_rDevice.DrawLine( _rArea.BottomRight(), _rArea.TopRight() );
_rDevice.Pop();
(void)_bIsColHeaderArea;
(void)_bIsRowHeaderArea;
}
//--------------------------------------------------------------------
void GridTableRenderer::PaintColumnHeader( ColPos _nCol, bool _bActive, bool _bSelected,
OutputDevice& _rDevice, const Rectangle& _rArea, const StyleSettings& _rStyle )
{
_rDevice.Push( PUSH_LINECOLOR );
_rDevice.SetLineColor( _rStyle.GetDialogTextColor() );
_rDevice.DrawLine( _rArea.BottomRight(), _rArea.TopRight() );
String sHeaderText;
PColumnModel pColumn = m_pImpl->rModel.getColumnModel( _nCol );
DBG_ASSERT( !!pColumn, "GridTableRenderer::PaintColumnHeader: invalid column model object!" );
if ( !!pColumn )
sHeaderText = pColumn->getName();
Color aRowBackground = _rStyle.GetFieldColor();
if ( _bSelected )
{
aRowBackground = COL_BLUE;
}
_rDevice.DrawText( _rArea, sHeaderText, TEXT_DRAW_LEFT | TEXT_DRAW_TOP );
_rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() );
_rDevice.Pop();
(void)_bActive;
// no special painting for the active column at the moment
//(void)_bSelected;
// TODO: selection not yet implemented
}
//--------------------------------------------------------------------
void GridTableRenderer::PrepareRow( RowPos _nRow, bool _bActive, bool _bSelected,
OutputDevice& _rDevice, const Rectangle& _rRowArea, const StyleSettings& _rStyle )
{
// remember the row for subsequent calls to the other ->ITableRenderer methods
m_pImpl->nCurrentRow = _nRow;
// fill the rows with alternating background colors
_rDevice.Push( PUSH_FILLCOLOR | PUSH_LINECOLOR );
_rDevice.SetLineColor();
Color aRowBackground = _rStyle.GetFieldColor();
_rDevice.SetFillColor( aRowBackground );
_rDevice.DrawRect( _rRowArea );
// TODO: active? selected?
_rDevice.Pop();
(void) _bSelected;
(void)_bActive;
// no special painting for the active row at the moment
//(void)_bSelected;
// TODO: selection not yet implemented
}
//--------------------------------------------------------------------
void GridTableRenderer::PaintRowHeader( bool _bActive, bool _bSelected, OutputDevice& _rDevice, const Rectangle& _rArea,
const StyleSettings& _rStyle, rtl::OUString& _rText )
{
_rDevice.Push( PUSH_FILLCOLOR | PUSH_LINECOLOR );
_rDevice.SetLineColor( _rStyle.GetDialogTextColor() );
_rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() );
_rDevice.DrawText( _rArea, _rText, TEXT_DRAW_LEFT);
// TODO: active? selected?
(void)_bActive;
(void)_bSelected;
_rDevice.Pop();
}
//--------------------------------------------------------------------
void GridTableRenderer::PaintCell( ColPos _nColumn, bool _bSelected, bool _bActive,
OutputDevice& _rDevice, const Rectangle& _rArea, const StyleSettings& _rStyle, rtl::OUString& _rText )
{
_rDevice.Push( PUSH_LINECOLOR );
// draw the grid
_rDevice.SetLineColor( COL_LIGHTGRAY );
// TODO: the LIGHTGRAY should probably be a property/setting
_rDevice.DrawLine( _rArea.BottomRight(), _rArea.TopRight() );
_rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() );
{
// TODO: remove those temporary place holders
Rectangle aRect( _rArea );
++aRect.Left(); --aRect.Right();
++aRect.Top(); --aRect.Bottom();
String sText;
if(_bSelected)
{
Color aRed(COL_BLUE);
_rDevice.SetFillColor( aRed );
_rDevice.SetTextColor(COL_WHITE);
}
_rDevice.DrawRect( _rArea );
(void)_nColumn;
_rDevice.DrawText( aRect, _rText, TEXT_DRAW_LEFT | TEXT_DRAW_TOP);
}
if(_bSelected)
{
_rDevice.SetFillColor( _rStyle.GetFieldColor() );
_rDevice.SetTextColor(COL_BLACK);
}
_rDevice.Pop();
(void)_bActive;
// // no special painting for the active cell at the moment
(void)_rStyle;
// // TODO: do we need this?
}
//--------------------------------------------------------------------
void GridTableRenderer::ShowCellCursor( Window& _rView, const Rectangle& _rCursorRect)
{
_rView.ShowFocus( _rCursorRect );
}
//--------------------------------------------------------------------
void GridTableRenderer::HideCellCursor( Window& _rView, const Rectangle& _rCursorRect)
{
(void)_rCursorRect;
_rView.HideFocus();
}
//........................................................................
} } // namespace svt::table
//........................................................................