7 #include "MarbleGraphicsGridLayout.h"
10 #include "MarbleDebug.h"
11 #include "ScreenGraphicsItem.h"
22 class MarbleGraphicsGridLayoutPrivate
25 MarbleGraphicsGridLayoutPrivate(
int rows,
int columns )
31 m_items =
new ScreenGraphicsItem **[rows];
32 for (
int i = 0; i < rows; ++i ) {
33 m_items[i] =
new ScreenGraphicsItem *[columns];
35 for (
int row = 0; row < rows; row++ ) {
36 for (
int column = 0; column < columns; column++ ) {
37 m_items[row][column] =
nullptr;
42 ~MarbleGraphicsGridLayoutPrivate()
44 for (
int i = 0; i < m_rows; ++i ) {
51 ScreenGraphicsItem ***m_items;
59 MarbleGraphicsGridLayout::MarbleGraphicsGridLayout(
int rows,
int columns )
60 : d( new MarbleGraphicsGridLayoutPrivate( rows, columns ) )
64 MarbleGraphicsGridLayout::~MarbleGraphicsGridLayout()
69 void MarbleGraphicsGridLayout::addItem( ScreenGraphicsItem *item,
int row,
int column )
72 && column < d->m_columns )
74 d->m_items[row][column] = item;
78 void MarbleGraphicsGridLayout::updatePositions( MarbleGraphicsItem *parent )
85 for (
int row = 0; row < d->m_rows; row++ ) {
86 for (
int column = 0; column < d->m_columns; column++ ) {
87 if ( d->m_items[row][column] ==
nullptr ) {
91 QSizeF size = d->m_items[row][column]->size();
92 double width = size.
width();
93 double height = size.
height();
95 if ( width > maxWidth[column] ) {
96 maxWidth[column] = width;
98 if ( height > maxHeight[row] ) {
99 maxHeight[row] = height;
108 QRectF contentRect = parent->contentRect();
110 for (
int i = 0; i < d->m_columns; i++ ) {
112 startX[0] = contentRect.
left();
114 else if ( maxWidth[i] == 0 ) {
115 startX[i] = endX[i-1];
118 startX[i] = endX[i-1] + d->m_spacing;
121 endX[i] = startX[i] + maxWidth[i];
124 for (
int i = 0; i < d->m_rows; i++ ) {
126 startY[0] = contentRect.
left();
128 else if ( maxHeight[i] == 0 ) {
129 startY[i] = endY[i-1];
132 startY[i] = endY[i-1] + d->m_spacing;
135 endY[i] = startY[i] + maxHeight[i];
139 for (
int row = 0; row < d->m_rows; row++ ) {
140 for (
int column = 0; column < d->m_columns; column++ ) {
141 if ( d->m_items[row][column] ==
nullptr ) {
150 xPos = endX[column] - d->m_items[row][column]->size().width();
153 xPos = startX[column]
154 + ( maxWidth[column] - d->m_items[row][column]->size().width() ) / 2.0;
157 xPos = startX[column];
161 yPos = endY[row] - d->m_items[row][column]->size().height();
165 + ( maxHeight[row] - d->m_items[row][column]->size().height() ) / 2.0;
171 d->m_items[row][column]->setPosition(
QPointF( xPos, yPos ) );
175 parent->setContentSize(
QSizeF( endX[d->m_columns - 1] - contentRect.
left(),
176 endY[d->m_rows - 1] - contentRect.
top() ) );
181 return d->m_alignment;
184 Qt::Alignment MarbleGraphicsGridLayout::alignment( ScreenGraphicsItem *item )
const
186 return d->m_itemAlignment.value( item, d->m_alignment );
189 void MarbleGraphicsGridLayout::setAlignment(
Qt::Alignment align )
191 d->m_alignment = align;
194 void MarbleGraphicsGridLayout::setAlignment( ScreenGraphicsItem *item,
Qt::Alignment align )
196 d->m_itemAlignment.insert( item, align );
199 int MarbleGraphicsGridLayout::spacing()
const
204 void MarbleGraphicsGridLayout::setSpacing(
int spacing )
206 d->m_spacing = spacing;