Exemple #1
0
void Map::parentHeightChanged(float parentHeight)
{
	const float padding = 10; // Padding of at least 10 on all sides.
	parentHeight = parentHeight - padding*2;
	const float cellWidth = m_mapWidth / m_cols;
	const float cellHeight = parentHeight / m_rows;
	float oldCellSize = m_cellSize;
	m_cellSize = std::min(cellWidth, cellHeight);
	m_mapArea->setPreferredSize(m_cellSize * m_cols, m_cellSize * m_rows);

	QObjectList list = m_mapArea->children();
	if (m_rows * m_cols + 1 != list.count()) { qDebug("Uhoh: List size not correct!"); }

	int i=0;
	for (int y=0; y<m_rows; y++) {
		for (int x=0; x<m_cols; x++) {
			ImageView *cell = qobject_cast<ImageView*>(list[i]);
			if (cell) {
				cell->setPreferredSize(m_cellSize, m_cellSize);
				AbsoluteLayoutProperties *properties = static_cast<AbsoluteLayoutProperties*>(cell->layoutProperties());
				properties->setPositionX(x * m_cellSize);
				properties->setPositionY(y * m_cellSize);
			}
			i++;
		}
	}

	Container *robot = qobject_cast<Container*>(list[i]);
	if (robot) {
		robot->setPreferredSize(m_cellSize, m_cellSize);
		AbsoluteLayoutProperties *properties = static_cast<AbsoluteLayoutProperties*>(robot->layoutProperties());
		properties->setPositionX(properties->positionX() * m_cellSize / oldCellSize);
		properties->setPositionY(properties->positionY() * m_cellSize / oldCellSize);
	}
}