Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
f4147a39
Kaydet (Commit)
f4147a39
authored
May 11, 2015
tarafından
Tomaž Vajngerl
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
refactor TableControl to use RenderContext
Change-Id: I4a84cdc8517b69b28fbb8521d0593ae5ed4c3a79
üst
f54212fb
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
169 additions
and
214 deletions
+169
-214
gridtablerenderer.cxx
svtools/source/table/gridtablerenderer.cxx
+121
-134
tablecontrol_impl.cxx
svtools/source/table/tablecontrol_impl.cxx
+34
-55
tablecontrol_impl.hxx
svtools/source/table/tablecontrol_impl.hxx
+1
-4
tabledatawindow.cxx
svtools/source/table/tabledatawindow.cxx
+4
-12
tabledatawindow.hxx
svtools/source/table/tabledatawindow.hxx
+9
-9
No files found.
svtools/source/table/gridtablerenderer.cxx
Dosyayı görüntüle @
f4147a39
...
...
@@ -36,22 +36,20 @@
namespace
svt
{
namespace
table
{
using
::
com
::
sun
::
star
::
uno
::
Any
;
using
::
com
::
sun
::
star
::
uno
::
Reference
;
using
::
com
::
sun
::
star
::
uno
::
UNO_QUERY
;
using
::
com
::
sun
::
star
::
uno
::
XInterface
;
using
::
com
::
sun
::
star
::
uno
::
TypeClass_INTERFACE
;
using
::
com
::
sun
::
star
::
graphic
::
XGraphic
;
using
::
com
::
sun
::
star
::
style
::
HorizontalAlignment
;
using
::
com
::
sun
::
star
::
style
::
HorizontalAlignment_LEFT
;
using
::
com
::
sun
::
star
::
style
::
HorizontalAlignment_CENTER
;
using
::
com
::
sun
::
star
::
style
::
HorizontalAlignment_RIGHT
;
using
::
com
::
sun
::
star
::
style
::
VerticalAlignment
;
using
::
com
::
sun
::
star
::
style
::
VerticalAlignment_TOP
;
using
::
com
::
sun
::
star
::
style
::
VerticalAlignment_MIDDLE
;
using
::
com
::
sun
::
star
::
style
::
VerticalAlignment_BOTTOM
;
using
::
css
::
uno
::
Any
;
using
::
css
::
uno
::
Reference
;
using
::
css
::
uno
::
UNO_QUERY
;
using
::
css
::
uno
::
XInterface
;
using
::
css
::
uno
::
TypeClass_INTERFACE
;
using
::
css
::
graphic
::
XGraphic
;
using
::
css
::
style
::
HorizontalAlignment
;
using
::
css
::
style
::
HorizontalAlignment_LEFT
;
using
::
css
::
style
::
HorizontalAlignment_CENTER
;
using
::
css
::
style
::
HorizontalAlignment_RIGHT
;
using
::
css
::
style
::
VerticalAlignment
;
using
::
css
::
style
::
VerticalAlignment_TOP
;
using
::
css
::
style
::
VerticalAlignment_MIDDLE
;
using
::
css
::
style
::
VerticalAlignment_BOTTOM
;
//= CachedSortIndicator
...
...
@@ -60,26 +58,26 @@ namespace svt { namespace table
{
public
:
CachedSortIndicator
()
:
m_lastHeaderHeight
(
0
)
,
m_lastArrowColor
(
COL_TRANSPARENT
)
:
m_lastHeaderHeight
(
0
)
,
m_lastArrowColor
(
COL_TRANSPARENT
)
{
}
BitmapEx
const
&
getBitmapFor
(
OutputDevice
const
&
i_device
,
long
const
i_headerHeight
,
StyleSettings
const
&
i_style
,
bool
const
i_sortAscending
);
BitmapEx
const
&
getBitmapFor
(
OutputDevice
const
&
i_device
,
long
const
i_headerHeight
,
StyleSettings
const
&
i_style
,
bool
const
i_sortAscending
);
private
:
long
m_lastHeaderHeight
;
Color
m_lastArrowColor
;
BitmapEx
m_sortAscending
;
BitmapEx
m_sortDescending
;
long
m_lastHeaderHeight
;
Color
m_lastArrowColor
;
BitmapEx
m_sortAscending
;
BitmapEx
m_sortDescending
;
};
BitmapEx
const
&
CachedSortIndicator
::
getBitmapFor
(
OutputDevice
const
&
i_device
,
long
const
i_headerHeight
,
BitmapEx
const
&
CachedSortIndicator
::
getBitmapFor
(
vcl
::
RenderContext
const
&
i_device
,
long
const
i_headerHeight
,
StyleSettings
const
&
i_style
,
bool
const
i_sortAscending
)
{
BitmapEx
&
rBitmap
(
i_sortAscending
?
m_sortAscending
:
m_sortDescending
);
if
(
!
rBitmap
||
(
i_headerHeight
!=
m_lastHeaderHeight
)
||
(
i_style
.
GetActiveColor
()
!=
m_lastArrowColor
)
)
BitmapEx
&
rBitmap
(
i_sortAscending
?
m_sortAscending
:
m_sortDescending
);
if
(
!
rBitmap
||
(
i_headerHeight
!=
m_lastHeaderHeight
)
||
(
i_style
.
GetActiveColor
()
!=
m_lastArrowColor
)
)
{
long
const
nSortIndicatorWidth
=
2
*
i_headerHeight
/
3
;
long
const
nSortIndicatorHeight
=
2
*
nSortIndicatorWidth
/
3
;
...
...
@@ -89,14 +87,12 @@ namespace svt { namespace table
ScopedVclPtrInstance
<
VirtualDevice
>
aDevice
(
i_device
,
0
,
0
);
aDevice
->
SetOutputSizePixel
(
aBitmapSize
);
DecorationView
aDecoView
(
aDevice
.
get
()
);
aDecoView
.
DrawSymbol
(
Rectangle
(
aBitmapPos
,
aBitmapSize
),
i_sortAscending
?
SymbolType
::
SPIN_UP
:
SymbolType
::
SPIN_DOWN
,
i_style
.
GetActiveColor
()
);
DecorationView
aDecoView
(
aDevice
.
get
());
aDecoView
.
DrawSymbol
(
Rectangle
(
aBitmapPos
,
aBitmapSize
),
i_sortAscending
?
SymbolType
::
SPIN_UP
:
SymbolType
::
SPIN_DOWN
,
i_style
.
GetActiveColor
());
rBitmap
=
aDevice
->
GetBitmapEx
(
aBitmapPos
,
aBitmapSize
);
rBitmap
=
aDevice
->
GetBitmapEx
(
aBitmapPos
,
aBitmapSize
);
m_lastHeaderHeight
=
i_headerHeight
;
m_lastArrowColor
=
i_style
.
GetActiveColor
();
}
...
...
@@ -115,11 +111,11 @@ namespace svt { namespace table
CellValueConversion
aStringConverter
;
GridTableRenderer_Impl
(
ITableModel
&
_rModel
)
:
rModel
(
_rModel
)
,
nCurrentRow
(
ROW_INVALID
)
,
bUseGridLines
(
true
)
,
aSortIndicator
(
)
,
aStringConverter
()
:
rModel
(
_rModel
)
,
nCurrentRow
(
ROW_INVALID
)
,
bUseGridLines
(
true
)
,
aSortIndicator
(
)
,
aStringConverter
()
{
}
};
...
...
@@ -205,51 +201,48 @@ namespace svt { namespace table
namespace
{
Color
lcl_getEffectiveColor
(
::
boost
::
optional
<
::
Color
>
const
&
i_modelColor
,
StyleSettings
const
&
i_styleSettings
,
::
Color
const
&
(
StyleSettings
::*
i_getDefaultColor
)
()
const
)
Color
lcl_getEffectiveColor
(
boost
::
optional
<
Color
>
const
&
i_modelColor
,
StyleSettings
const
&
i_styleSettings
,
Color
const
&
(
StyleSettings
::*
i_getDefaultColor
)
()
const
)
{
if
(
!!
i_modelColor
)
if
(
!!
i_modelColor
)
return
*
i_modelColor
;
return
(
i_styleSettings
.
*
i_getDefaultColor
)();
return
(
i_styleSettings
.
*
i_getDefaultColor
)();
}
}
void
GridTableRenderer
::
PaintHeaderArea
(
OutputDevice
&
_rDevice
,
const
Rectangle
&
_rArea
,
bool
_bIsColHeaderArea
,
bool
_bIsRowHeaderArea
,
const
StyleSettings
&
_rStyle
)
void
GridTableRenderer
::
PaintHeaderArea
(
vcl
::
RenderContext
&
rRenderContext
,
const
Rectangle
&
_rArea
,
bool
_bIsColHeaderArea
,
bool
_bIsRowHeaderArea
,
const
StyleSettings
&
_rStyle
)
{
OSL_PRECOND
(
_bIsColHeaderArea
||
_bIsRowHeaderArea
,
"GridTableRenderer::PaintHeaderArea: invalid area flags!"
);
OSL_PRECOND
(
_bIsColHeaderArea
||
_bIsRowHeaderArea
,
"GridTableRenderer::PaintHeaderArea: invalid area flags!"
);
_rDevice
.
Push
(
PushFlags
::
FILLCOLOR
|
PushFlags
::
LINECOLOR
);
rRenderContext
.
Push
(
PushFlags
::
FILLCOLOR
|
PushFlags
::
LINECOLOR
);
Color
const
background
=
lcl_getEffectiveColor
(
m_pImpl
->
rModel
.
getHeaderBackgroundColor
(),
_rStyle
,
&
StyleSettings
::
GetDialogColor
);
_rDevice
.
SetFillColor
(
background
);
Color
const
background
=
lcl_getEffectiveColor
(
m_pImpl
->
rModel
.
getHeaderBackgroundColor
(),
_rStyle
,
&
StyleSettings
::
GetDialogColor
);
rRenderContext
.
SetFillColor
(
background
);
_rDevice
.
SetLineColor
();
_rDevice
.
DrawRect
(
_rArea
);
rRenderContext
.
SetLineColor
();
rRenderContext
.
DrawRect
(
_rArea
);
// delimiter lines at bottom/right
::
boost
::
optional
<
::
Color
>
aLineColor
(
m_pImpl
->
rModel
.
getLineColor
()
);
::
Color
const
lineColor
=
!
aLineColor
?
_rStyle
.
GetSeparatorColor
()
:
*
aLineColor
;
_rDevice
.
SetLineColor
(
lineColor
);
_rDevice
.
DrawLine
(
_rArea
.
BottomLeft
(),
_rArea
.
BottomRight
()
);
_rDevice
.
DrawLine
(
_rArea
.
BottomRight
(),
_rArea
.
TopRight
()
);
boost
::
optional
<
Color
>
aLineColor
(
m_pImpl
->
rModel
.
getLineColor
()
);
Color
const
lineColor
=
!
aLineColor
?
_rStyle
.
GetSeparatorColor
()
:
*
aLineColor
;
rRenderContext
.
SetLineColor
(
lineColor
);
rRenderContext
.
DrawLine
(
_rArea
.
BottomLeft
(),
_rArea
.
BottomRight
()
);
rRenderContext
.
DrawLine
(
_rArea
.
BottomRight
(),
_rArea
.
TopRight
()
);
_rDevice
.
Pop
();
rRenderContext
.
Pop
();
(
void
)
_bIsColHeaderArea
;
(
void
)
_bIsRowHeaderArea
;
}
void
GridTableRenderer
::
PaintColumnHeader
(
ColPos
_nCol
,
bool
_bActive
,
bool
_bSelected
,
OutputDevice
&
_rDevice
,
const
Rectangle
&
_rArea
,
const
StyleSettings
&
_rStyle
)
void
GridTableRenderer
::
PaintColumnHeader
(
ColPos
_nCol
,
bool
_bActive
,
bool
_bSelected
,
vcl
::
RenderContext
&
rRenderContext
,
const
Rectangle
&
_rArea
,
const
StyleSettings
&
_rStyle
)
{
_rDevice
.
Push
(
PushFlags
::
LINECOLOR
);
rRenderContext
.
Push
(
PushFlags
::
LINECOLOR
);
OUString
sHeaderText
;
PColumnModel
const
pColumn
=
m_pImpl
->
rModel
.
getColumnModel
(
_nCol
);
...
...
@@ -257,20 +250,20 @@ namespace svt { namespace table
if
(
!!
pColumn
)
sHeaderText
=
pColumn
->
getName
();
::
Color
const
textColor
=
lcl_getEffectiveColor
(
m_pImpl
->
rModel
.
getTextColor
(),
_rStyle
,
&
StyleSettings
::
GetFieldTextColor
);
_rDevice
.
SetTextColor
(
textColor
);
Color
const
textColor
=
lcl_getEffectiveColor
(
m_pImpl
->
rModel
.
getTextColor
(),
_rStyle
,
&
StyleSettings
::
GetFieldTextColor
);
rRenderContext
.
SetTextColor
(
textColor
);
Rectangle
const
aTextRect
(
lcl_getTextRenderingArea
(
lcl_getContentArea
(
*
m_pImpl
,
_rArea
)
)
);
sal_uLong
nDrawTextFlags
=
lcl_getAlignmentTextDrawFlags
(
*
m_pImpl
,
_nCol
)
|
TEXT_DRAW_CLIP
;
if
(
!
m_pImpl
->
rModel
.
isEnabled
()
)
if
(
!
m_pImpl
->
rModel
.
isEnabled
()
)
nDrawTextFlags
|=
TEXT_DRAW_DISABLE
;
_rDevice
.
DrawText
(
aTextRect
,
sHeaderText
,
nDrawTextFlags
);
rRenderContext
.
DrawText
(
aTextRect
,
sHeaderText
,
nDrawTextFlags
);
::
boost
::
optional
<
::
Color
>
const
aLineColor
(
m_pImpl
->
rModel
.
getLineColor
()
);
::
Color
const
lineColor
=
!
aLineColor
?
_rStyle
.
GetSeparatorColor
()
:
*
aLineColor
;
_rDevice
.
SetLineColor
(
lineColor
);
_rDevice
.
DrawLine
(
_rArea
.
BottomRight
(),
_rArea
.
TopRight
());
_rDevice
.
DrawLine
(
_rArea
.
BottomLeft
(),
_rArea
.
BottomRight
()
);
boost
::
optional
<
Color
>
const
aLineColor
(
m_pImpl
->
rModel
.
getLineColor
()
);
Color
const
lineColor
=
!
aLineColor
?
_rStyle
.
GetSeparatorColor
()
:
*
aLineColor
;
rRenderContext
.
SetLineColor
(
lineColor
);
rRenderContext
.
DrawLine
(
_rArea
.
BottomRight
(),
_rArea
.
TopRight
());
rRenderContext
.
DrawLine
(
_rArea
.
BottomLeft
(),
_rArea
.
BottomRight
()
);
// draw sort indicator if the model data is sorted by the given column
ITableDataSort
const
*
pSortAdapter
=
m_pImpl
->
rModel
.
getSortAdapter
();
...
...
@@ -280,8 +273,8 @@ namespace svt { namespace table
if
(
aCurrentSortOrder
.
nColumnPos
==
_nCol
)
{
long
const
nHeaderHeight
(
_rArea
.
GetHeight
()
);
BitmapEx
const
aIndicatorBitmap
=
m_pImpl
->
aSortIndicator
.
getBitmapFor
(
_rDevice
,
nHeaderHeight
,
_rStyle
,
aCurrentSortOrder
.
eSortDirection
==
ColumnSortAscending
);
BitmapEx
const
aIndicatorBitmap
=
m_pImpl
->
aSortIndicator
.
getBitmapFor
(
rRenderContext
,
nHeaderHeight
,
_rStyle
,
aCurrentSortOrder
.
eSortDirection
==
ColumnSortAscending
);
Size
const
aBitmapSize
(
aIndicatorBitmap
.
GetSizePixel
()
);
long
const
nSortIndicatorPaddingX
=
2
;
long
const
nSortIndicatorPaddingY
=
(
nHeaderHeight
-
aBitmapSize
.
Height
()
)
/
2
;
...
...
@@ -289,22 +282,18 @@ namespace svt { namespace table
if
(
(
nDrawTextFlags
&
TEXT_DRAW_RIGHT
)
!=
0
)
{
// text is right aligned => draw the sort indicator at the left hand side
_rDevice
.
DrawBitmapEx
(
Point
(
_rArea
.
Left
()
+
nSortIndicatorPaddingX
,
_rArea
.
Top
()
+
nSortIndicatorPaddingY
),
aIndicatorBitmap
);
rRenderContext
.
DrawBitmapEx
(
Point
(
_rArea
.
Left
()
+
nSortIndicatorPaddingX
,
_rArea
.
Top
()
+
nSortIndicatorPaddingY
),
aIndicatorBitmap
);
}
else
{
// text is left-aligned or centered => draw the sort indicator at the right hand side
_rDevice
.
DrawBitmapEx
(
Point
(
_rArea
.
Right
()
-
nSortIndicatorPaddingX
-
aBitmapSize
.
Width
(),
nSortIndicatorPaddingY
),
aIndicatorBitmap
);
rRenderContext
.
DrawBitmapEx
(
Point
(
_rArea
.
Right
()
-
nSortIndicatorPaddingX
-
aBitmapSize
.
Width
(),
nSortIndicatorPaddingY
),
aIndicatorBitmap
);
}
}
_rDevice
.
Pop
();
rRenderContext
.
Pop
();
(
void
)
_bActive
;
// no special painting for the active column at the moment
...
...
@@ -314,38 +303,38 @@ namespace svt { namespace table
}
void
GridTableRenderer
::
PrepareRow
(
RowPos
_nRow
,
bool
i_hasControlFocus
,
bool
_bSelected
,
OutputDevice
&
_rDevice
,
const
Rectangle
&
_rRowArea
,
const
StyleSettings
&
_rStyle
)
void
GridTableRenderer
::
PrepareRow
(
RowPos
_nRow
,
bool
i_hasControlFocus
,
bool
_bSelected
,
vcl
::
RenderContext
&
rRenderContext
,
const
Rectangle
&
_rRowArea
,
const
StyleSettings
&
_rStyle
)
{
// remember the row for subsequent calls to the other ->ITableRenderer methods
m_pImpl
->
nCurrentRow
=
_nRow
;
_rDevice
.
Push
(
PushFlags
::
FILLCOLOR
|
PushFlags
::
LINECOLOR
);
rRenderContext
.
Push
(
PushFlags
::
FILLCOLOR
|
PushFlags
::
LINECOLOR
);
::
Color
backgroundColor
=
_rStyle
.
GetFieldColor
();
Color
backgroundColor
=
_rStyle
.
GetFieldColor
();
::
boost
::
optional
<
::
Color
>
const
aLineColor
(
m_pImpl
->
rModel
.
getLineColor
()
);
::
Color
lineColor
=
!
aLineColor
?
_rStyle
.
GetSeparatorColor
()
:
*
aLineColor
;
boost
::
optional
<
Color
>
const
aLineColor
(
m_pImpl
->
rModel
.
getLineColor
()
);
Color
lineColor
=
!
aLineColor
?
_rStyle
.
GetSeparatorColor
()
:
*
aLineColor
;
::
Color
const
activeSelectionBackColor
=
lcl_getEffectiveColor
(
m_pImpl
->
rModel
.
getActiveSelectionBackColor
(),
_rStyle
,
&
StyleSettings
::
GetHighlightColor
);
if
(
_bSelected
)
Color
const
activeSelectionBackColor
=
lcl_getEffectiveColor
(
m_pImpl
->
rModel
.
getActiveSelectionBackColor
(),
_rStyle
,
&
StyleSettings
::
GetHighlightColor
);
if
(
_bSelected
)
{
// selected rows use the background color from the style
backgroundColor
=
i_hasControlFocus
?
activeSelectionBackColor
:
lcl_getEffectiveColor
(
m_pImpl
->
rModel
.
getInactiveSelectionBackColor
(),
_rStyle
,
&
StyleSettings
::
GetDeactiveColor
);
if
(
!
aLineColor
)
?
activeSelectionBackColor
:
lcl_getEffectiveColor
(
m_pImpl
->
rModel
.
getInactiveSelectionBackColor
(),
_rStyle
,
&
StyleSettings
::
GetDeactiveColor
);
if
(
!
aLineColor
)
lineColor
=
backgroundColor
;
}
else
{
::
boost
::
optional
<
::
std
::
vector
<
::
Color
>
>
aRowColors
=
m_pImpl
->
rModel
.
getRowBackgroundColors
();
if
(
!
aRowColors
)
boost
::
optional
<
std
::
vector
<
Color
>
>
aRowColors
=
m_pImpl
->
rModel
.
getRowBackgroundColors
();
if
(
!
aRowColors
)
{
// use alternating default colors
Color
const
fieldColor
=
_rStyle
.
GetFieldColor
();
if
(
_rStyle
.
GetHighContrastMode
()
||
(
(
m_pImpl
->
nCurrentRow
%
2
)
==
0
)
)
if
(
_rStyle
.
GetHighContrastMode
()
||
((
m_pImpl
->
nCurrentRow
%
2
)
==
0
)
)
{
backgroundColor
=
fieldColor
;
}
...
...
@@ -360,55 +349,53 @@ namespace svt { namespace table
}
else
{
if
(
aRowColors
->
empty
()
)
if
(
aRowColors
->
empty
()
)
{
// all colors have the same background color
backgroundColor
=
_rStyle
.
GetFieldColor
();
}
else
{
backgroundColor
=
aRowColors
->
at
(
m_pImpl
->
nCurrentRow
%
aRowColors
->
size
()
);
backgroundColor
=
aRowColors
->
at
(
m_pImpl
->
nCurrentRow
%
aRowColors
->
size
()
);
}
}
}
//m_pImpl->bUseGridLines ? _rDevice.SetLineColor( lineColor ) : _rDevice.SetLineColor();
_rDevice
.
SetLineColor
();
_rDevice
.
SetFillColor
(
backgroundColor
);
_rDevice
.
DrawRect
(
_rRowArea
);
rRenderContext
.
SetLineColor
();
rRenderContext
.
SetFillColor
(
backgroundColor
);
rRenderContext
.
DrawRect
(
_rRowArea
);
_rDevice
.
Pop
();
rRenderContext
.
Pop
();
}
void
GridTableRenderer
::
PaintRowHeader
(
bool
i_hasControlFocus
,
bool
_bSelected
,
OutputDevice
&
_rDevice
,
const
Rectangle
&
_rArea
,
const
StyleSettings
&
_rStyle
)
void
GridTableRenderer
::
PaintRowHeader
(
bool
/*i_hasControlFocus*/
,
bool
/*_bSelected*/
,
vcl
::
RenderContext
&
rRenderContext
,
const
Rectangle
&
_rArea
,
const
StyleSettings
&
_rStyle
)
{
_rDevice
.
Push
(
PushFlags
::
LINECOLOR
|
PushFlags
::
TEXTCOLOR
);
rRenderContext
.
Push
(
PushFlags
::
LINECOLOR
|
PushFlags
::
TEXTCOLOR
);
::
boost
::
optional
<
::
Color
>
const
aLineColor
(
m_pImpl
->
rModel
.
getLineColor
()
);
::
Color
const
lineColor
=
!
aLineColor
?
_rStyle
.
GetSeparatorColor
()
:
*
aLineColor
;
_rDevice
.
SetLineColor
(
lineColor
);
_rDevice
.
DrawLine
(
_rArea
.
BottomLeft
(),
_rArea
.
BottomRight
()
);
boost
::
optional
<
Color
>
const
aLineColor
(
m_pImpl
->
rModel
.
getLineColor
()
);
Color
const
lineColor
=
!
aLineColor
?
_rStyle
.
GetSeparatorColor
()
:
*
aLineColor
;
rRenderContext
.
SetLineColor
(
lineColor
);
rRenderContext
.
DrawLine
(
_rArea
.
BottomLeft
(),
_rArea
.
BottomRight
()
);
Any
const
rowHeading
(
m_pImpl
->
rModel
.
getRowHeading
(
m_pImpl
->
nCurrentRow
)
);
OUString
const
rowTitle
(
m_pImpl
->
aStringConverter
.
convertToString
(
rowHeading
)
);
if
(
!
rowTitle
.
isEmpty
()
)
if
(
!
rowTitle
.
isEmpty
()
)
{
::
Color
const
textColor
=
lcl_getEffectiveColor
(
m_pImpl
->
rModel
.
getHeaderTextColor
(),
_rStyle
,
&
StyleSettings
::
GetFieldTextColor
);
_rDevice
.
SetTextColor
(
textColor
);
Color
const
textColor
=
lcl_getEffectiveColor
(
m_pImpl
->
rModel
.
getHeaderTextColor
(),
_rStyle
,
&
StyleSettings
::
GetFieldTextColor
);
rRenderContext
.
SetTextColor
(
textColor
);
Rectangle
const
aTextRect
(
lcl_getTextRenderingArea
(
lcl_getContentArea
(
*
m_pImpl
,
_rArea
)
)
);
sal_uLong
nDrawTextFlags
=
lcl_getAlignmentTextDrawFlags
(
*
m_pImpl
,
0
)
|
TEXT_DRAW_CLIP
;
if
(
!
m_pImpl
->
rModel
.
isEnabled
()
)
Rectangle
const
aTextRect
(
lcl_getTextRenderingArea
(
lcl_getContentArea
(
*
m_pImpl
,
_rArea
))
);
sal_uLong
nDrawTextFlags
=
lcl_getAlignmentTextDrawFlags
(
*
m_pImpl
,
0
)
|
TEXT_DRAW_CLIP
;
if
(
!
m_pImpl
->
rModel
.
isEnabled
()
)
nDrawTextFlags
|=
TEXT_DRAW_DISABLE
;
// TODO: is using the horizontal alignment of the 0'th column a good idea here? This is pretty ... arbitray ..
_rDevice
.
DrawText
(
aTextRect
,
rowTitle
,
nDrawTextFlags
);
rRenderContext
.
DrawText
(
aTextRect
,
rowTitle
,
nDrawTextFlags
);
}
(
void
)
i_hasControlFocus
;
(
void
)
_bSelected
;
_rDevice
.
Pop
();
rRenderContext
.
Pop
();
}
...
...
@@ -434,14 +421,14 @@ namespace svt { namespace table
};
void
GridTableRenderer
::
PaintCell
(
ColPos
const
i_column
,
bool
_bSelected
,
bool
i_hasControlFocus
,
OutputDevice
&
_rDevice
,
const
Rectangle
&
_rArea
,
const
StyleSettings
&
_rStyle
)
void
GridTableRenderer
::
PaintCell
(
ColPos
const
i_column
,
bool
_bSelected
,
bool
i_hasControlFocus
,
vcl
::
RenderContext
&
rRenderContext
,
const
Rectangle
&
_rArea
,
const
StyleSettings
&
_rStyle
)
{
_rDevice
.
Push
(
PushFlags
::
LINECOLOR
|
PushFlags
::
FILLCOLOR
);
rRenderContext
.
Push
(
PushFlags
::
LINECOLOR
|
PushFlags
::
FILLCOLOR
);
Rectangle
const
aContentArea
(
lcl_getContentArea
(
*
m_pImpl
,
_rArea
)
);
CellRenderContext
const
a
RenderContext
(
_rDevice
,
aContentArea
,
_rStyle
,
i_column
,
_bSelected
,
i_hasControlFocus
);
impl_paintCellContent
(
aRenderContext
);
Rectangle
const
aContentArea
(
lcl_getContentArea
(
*
m_pImpl
,
_rArea
)
);
CellRenderContext
const
a
CellRenderContext
(
rRenderContext
,
aContentArea
,
_rStyle
,
i_column
,
_bSelected
,
i_hasControlFocus
);
impl_paintCellContent
(
aCellRenderContext
);
if
(
m_pImpl
->
bUseGridLines
)
{
...
...
@@ -456,12 +443,12 @@ namespace svt { namespace table
:
lcl_getEffectiveColor
(
m_pImpl
->
rModel
.
getInactiveSelectionBackColor
(),
_rStyle
,
&
StyleSettings
::
GetDeactiveColor
);
}
_rDevice
.
SetLineColor
(
lineColor
);
_rDevice
.
DrawLine
(
_rArea
.
BottomLeft
(),
_rArea
.
BottomRight
()
);
_rDevice
.
DrawLine
(
_rArea
.
BottomRight
(),
_rArea
.
TopRight
()
);
rRenderContext
.
SetLineColor
(
lineColor
);
rRenderContext
.
DrawLine
(
_rArea
.
BottomLeft
(),
_rArea
.
BottomRight
()
);
rRenderContext
.
DrawLine
(
_rArea
.
BottomRight
(),
_rArea
.
TopRight
()
);
}
_rDevice
.
Pop
();
rRenderContext
.
Pop
();
}
...
...
svtools/source/table/tablecontrol_impl.cxx
Dosyayı görüntüle @
f4147a39
...
...
@@ -1197,124 +1197,103 @@ namespace svt { namespace table
}
void
TableControl_Impl
::
doPaintContent
(
const
Rectangle
&
_rUpdateRect
)
void
TableControl_Impl
::
doPaintContent
(
vcl
::
RenderContext
&
rRenderContext
,
const
Rectangle
&
_rUpdateRect
)
{
if
(
!
getModel
()
)
if
(
!
getModel
()
)
return
;
PTableRenderer
pRenderer
=
getModel
()
->
getRenderer
();
DBG_ASSERT
(
!!
pRenderer
,
"TableDataWindow::doPaintContent: invalid renderer!"
);
if
(
!
pRenderer
)
DBG_ASSERT
(
!!
pRenderer
,
"TableDataWindow::doPaintContent: invalid renderer!"
);
if
(
!
pRenderer
)
return
;
// our current style settings, to be passed to the renderer
const
StyleSettings
&
rStyle
=
m_rAntiImpl
.
GetSettings
().
GetStyleSettings
();
const
StyleSettings
&
rStyle
=
rRenderContext
.
GetSettings
().
GetStyleSettings
();
m_nRowCount
=
m_pModel
->
getRowCount
();
// the area occupied by all (at least partially) visible cells, including
// headers
Rectangle
const
aAllCellsWithHeaders
(
impl_getAllVisibleCellsArea
()
);
// draw the header column area
if
(
m_pModel
->
hasColumnHeaders
()
)
if
(
m_pModel
->
hasColumnHeaders
()
)
{
TableRowGeometry
const
aHeaderRow
(
*
this
,
Rectangle
(
Point
(
0
,
0
),
aAllCellsWithHeaders
.
BottomRight
()
),
ROW_COL_HEADERS
);
TableRowGeometry
const
aHeaderRow
(
*
this
,
Rectangle
(
Point
(
0
,
0
),
aAllCellsWithHeaders
.
BottomRight
()),
ROW_COL_HEADERS
);
Rectangle
const
aColRect
(
aHeaderRow
.
getRect
());
pRenderer
->
PaintHeaderArea
(
*
m_pDataWindow
,
aColRect
,
true
,
false
,
rStyle
);
pRenderer
->
PaintHeaderArea
(
rRenderContext
,
aColRect
,
true
,
false
,
rStyle
);
// Note that strictly, aHeaderRow.getRect() also contains the intersection between column
// and row header area. However, below we go to paint this intersection, again,
// so this hopefully doesn't hurt if we already paint it here.
for
(
TableCellGeometry
aCell
(
aHeaderRow
,
m_nLeftColumn
);
aCell
.
isValid
();
aCell
.
moveRight
()
)
for
(
TableCellGeometry
aCell
(
aHeaderRow
,
m_nLeftColumn
);
aCell
.
isValid
();
aCell
.
moveRight
())
{
if
(
_rUpdateRect
.
GetIntersection
(
aCell
.
getRect
()
).
IsEmpty
()
)
if
(
_rUpdateRect
.
GetIntersection
(
aCell
.
getRect
()).
IsEmpty
()
)
continue
;
bool
isActiveColumn
=
(
aCell
.
getColumn
()
==
getCurrentColumn
()
);
bool
isActiveColumn
=
(
aCell
.
getColumn
()
==
getCurrentColumn
()
);
bool
isSelectedColumn
=
false
;
pRenderer
->
PaintColumnHeader
(
aCell
.
getColumn
(),
isActiveColumn
,
isSelectedColumn
,
*
m_pDataWindow
,
aCell
.
getRect
(),
rStyle
);
pRenderer
->
PaintColumnHeader
(
aCell
.
getColumn
(),
isActiveColumn
,
isSelectedColumn
,
rRenderContext
,
aCell
.
getRect
(),
rStyle
);
}
}
// the area occupied by the row header, if any
Rectangle
aRowHeaderArea
;
if
(
m_pModel
->
hasRowHeaders
()
)
if
(
m_pModel
->
hasRowHeaders
()
)
{
aRowHeaderArea
=
aAllCellsWithHeaders
;
aRowHeaderArea
.
Right
()
=
m_nRowHeaderWidthPixel
-
1
;
TableSize
const
nVisibleRows
=
impl_getVisibleRows
(
true
);
TableSize
const
nVisibleRows
=
impl_getVisibleRows
(
true
);
TableSize
nActualRows
=
nVisibleRows
;
if
(
m_nTopRow
+
nActualRows
>
m_nRowCount
)
if
(
m_nTopRow
+
nActualRows
>
m_nRowCount
)
nActualRows
=
m_nRowCount
-
m_nTopRow
;
aRowHeaderArea
.
Bottom
()
=
m_nColHeaderHeightPixel
+
m_nRowHeightPixel
*
nActualRows
-
1
;
pRenderer
->
PaintHeaderArea
(
*
m_pDataWindow
,
aRowHeaderArea
,
false
,
true
,
rStyle
);
pRenderer
->
PaintHeaderArea
(
rRenderContext
,
aRowHeaderArea
,
false
,
true
,
rStyle
);
// Note that strictly, aRowHeaderArea also contains the intersection between column
// and row header area. However, below we go to paint this intersection, again,
// so this hopefully doesn't hurt if we already paint it here.
if
(
m_pModel
->
hasColumnHeaders
()
)
if
(
m_pModel
->
hasColumnHeaders
()
)
{
TableCellGeometry
const
aIntersection
(
*
this
,
Rectangle
(
Point
(
0
,
0
),
aAllCellsWithHeaders
.
BottomRight
()
),
COL_ROW_HEADERS
,
ROW_COL_HEADERS
);
Rectangle
const
aInters
(
aIntersection
.
getRect
()
);
pRenderer
->
PaintHeaderArea
(
*
m_pDataWindow
,
aInters
,
true
,
true
,
rStyle
);
TableCellGeometry
const
aIntersection
(
*
this
,
Rectangle
(
Point
(
0
,
0
),
aAllCellsWithHeaders
.
BottomRight
()),
COL_ROW_HEADERS
,
ROW_COL_HEADERS
);
Rectangle
const
aInters
(
aIntersection
.
getRect
());
pRenderer
->
PaintHeaderArea
(
rRenderContext
,
aInters
,
true
,
true
,
rStyle
);
}
}
// draw the table content row by row
TableSize
colCount
=
getModel
()
->
getColumnCount
();
// paint all rows
Rectangle
const
aAllDataCellsArea
(
impl_getAllVisibleDataCellArea
()
);
for
(
TableRowGeometry
aRowIterator
(
*
this
,
aAllCellsWithHeaders
,
getTopRow
()
);
aRowIterator
.
isValid
();
aRowIterator
.
moveDown
()
)
Rectangle
const
aAllDataCellsArea
(
impl_getAllVisibleDataCellArea
());
for
(
TableRowGeometry
aRowIterator
(
*
this
,
aAllCellsWithHeaders
,
getTopRow
());
aRowIterator
.
isValid
();
aRowIterator
.
moveDown
())
{
if
(
_rUpdateRect
.
GetIntersection
(
aRowIterator
.
getRect
()
).
IsEmpty
()
)
if
(
_rUpdateRect
.
GetIntersection
(
aRowIterator
.
getRect
()
).
IsEmpty
()
)
continue
;
bool
const
isControlFocused
=
m_rAntiImpl
.
HasControlFocus
();
bool
const
isSelectedRow
=
isRowSelected
(
aRowIterator
.
getRow
()
);
bool
const
isSelectedRow
=
isRowSelected
(
aRowIterator
.
getRow
()
);
Rectangle
const
aRect
=
aRowIterator
.
getRect
().
GetIntersection
(
aAllDataCellsArea
);
Rectangle
const
aRect
=
aRowIterator
.
getRect
().
GetIntersection
(
aAllDataCellsArea
);
// give the redenderer a chance to prepare the row
pRenderer
->
PrepareRow
(
aRowIterator
.
getRow
(),
isControlFocused
,
isSelectedRow
,
*
m_pDataWindow
,
aRect
,
rStyle
);
pRenderer
->
PrepareRow
(
aRowIterator
.
getRow
(),
isControlFocused
,
isSelectedRow
,
rRenderContext
,
aRect
,
rStyle
);
// paint the row header
if
(
m_pModel
->
hasRowHeaders
()
)
if
(
m_pModel
->
hasRowHeaders
()
)
{
const
Rectangle
aCurrentRowHeader
(
aRowHeaderArea
.
GetIntersection
(
aRowIterator
.
getRect
()
)
);
pRenderer
->
PaintRowHeader
(
isControlFocused
,
isSelectedRow
,
*
m_pDataWindow
,
aCurrentRowHeader
,
rStyle
);
const
Rectangle
aCurrentRowHeader
(
aRowHeaderArea
.
GetIntersection
(
aRowIterator
.
getRect
()));
pRenderer
->
PaintRowHeader
(
isControlFocused
,
isSelectedRow
,
rRenderContext
,
aCurrentRowHeader
,
rStyle
);
}
if
(
!
colCount
)
if
(
!
colCount
)
continue
;
// paint all cells in this row
for
(
TableCellGeometry
aCell
(
aRowIterator
,
m_nLeftColumn
);
aCell
.
isValid
();
aCell
.
moveRight
()
)
for
(
TableCellGeometry
aCell
(
aRowIterator
,
m_nLeftColumn
);
aCell
.
isValid
();
aCell
.
moveRight
())
{
bool
isSelectedColumn
=
false
;
pRenderer
->
PaintCell
(
aCell
.
getColumn
(),
isSelectedRow
||
isSelectedColumn
,
isControlFocused
,
*
m_pDataWindow
,
aCell
.
getRect
(),
rStyle
);
pRenderer
->
PaintCell
(
aCell
.
getColumn
(),
isSelectedRow
||
isSelectedColumn
,
isControlFocused
,
rRenderContext
,
aCell
.
getRect
(),
rStyle
);
}
}
}
...
...
svtools/source/table/tablecontrol_impl.hxx
Dosyayı görüntüle @
f4147a39
...
...
@@ -34,11 +34,8 @@
class
ScrollBar
;
class
ScrollBarBox
;
namespace
svt
{
namespace
table
{
struct
MutableColumnMetrics
:
protected
ColumnMetrics
{
MutableColumnMetrics
()
...
...
@@ -170,7 +167,7 @@ namespace svt { namespace table
/** paints the table control content which intersects with the given rectangle
*/
void
doPaintContent
(
const
Rectangle
&
_rUpdateRect
);
void
doPaintContent
(
vcl
::
RenderContext
&
rRenderContext
,
const
Rectangle
&
_rUpdateRect
);
/** moves the cursor to the cell with the given coordinates
...
...
svtools/source/table/tabledatawindow.cxx
Dosyayı görüntüle @
f4147a39
...
...
@@ -17,7 +17,6 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include "table/tablecontrol.hxx"
#include "tabledatawindow.hxx"
...
...
@@ -27,16 +26,9 @@
#include <vcl/help.hxx>
#include <vcl/settings.hxx>
namespace
svt
{
namespace
table
{
using
::
com
::
sun
::
star
::
uno
::
Any
;
//= TableDataWindow
using
css
::
uno
::
Any
;
TableDataWindow
::
TableDataWindow
(
TableControl_Impl
&
_rTableControl
)
:
Window
(
&
_rTableControl
.
getAntiImpl
()
)
...
...
@@ -60,9 +52,9 @@ namespace svt { namespace table
Window
::
dispose
();
}
void
TableDataWindow
::
Paint
(
vcl
::
RenderContext
&
/*rRenderContext*/
,
const
Rectangle
&
rUpdateRect
)
void
TableDataWindow
::
Paint
(
vcl
::
RenderContext
&
rRenderContext
,
const
Rectangle
&
rUpdateRect
)
{
m_rTableControl
.
doPaintContent
(
rUpdateRect
);
m_rTableControl
.
doPaintContent
(
rRenderContext
,
rUpdateRect
);
}
void
TableDataWindow
::
SetBackground
(
const
Wallpaper
&
rColor
)
...
...
@@ -221,7 +213,7 @@ namespace svt { namespace table
return
nDone
||
Window
::
Notify
(
rNEvt
);
}
}
}
// namespace svt::table
}}
// namespace svt::table
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
svtools/source/table/tabledatawindow.hxx
Dosyayı görüntüle @
f4147a39
...
...
@@ -26,15 +26,9 @@
namespace
svt
{
namespace
table
{
class
TableControl_Impl
;
class
TableFunctionSet
;
//= TableDataWindow
/** the window containing the content area (including headers) of
a table control
*/
...
...
@@ -51,11 +45,17 @@ namespace svt { namespace table
virtual
~
TableDataWindow
();
virtual
void
dispose
()
SAL_OVERRIDE
;
inline
void
SetSelectHdl
(
const
Link
<>&
rLink
)
{
m_aSelectHdl
=
rLink
;
}
inline
const
Link
<>&
GetSelectHdl
()
const
{
return
m_aSelectHdl
;
}
inline
void
SetSelectHdl
(
const
Link
<>&
rLink
)
{
m_aSelectHdl
=
rLink
;
}
inline
const
Link
<>&
GetSelectHdl
()
const
{
return
m_aSelectHdl
;
}
// Window overridables
virtual
void
Paint
(
vcl
::
RenderContext
&
rRenderContext
,
const
Rectangle
&
rRect
)
SAL_OVERRIDE
;
virtual
void
Paint
(
vcl
::
RenderContext
&
rRenderContext
,
const
Rectangle
&
rRect
)
SAL_OVERRIDE
;
virtual
void
MouseMove
(
const
MouseEvent
&
rMEvt
)
SAL_OVERRIDE
;
virtual
void
MouseButtonDown
(
const
MouseEvent
&
rMEvt
)
SAL_OVERRIDE
;
virtual
void
MouseButtonUp
(
const
MouseEvent
&
rMEvt
)
SAL_OVERRIDE
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment