Always show shipyard layout preview and Configure button, disabled until schematic selected
This commit is contained in:
@@ -566,11 +566,21 @@ void SelectedBuildingPanel::updateShipyardLayoutWidgets(
|
||||
const std::string& recipeId,
|
||||
const std::optional<ShipLayoutConfig>& shipLayout)
|
||||
{
|
||||
const ShipDef* shipDef = (type == BuildingType::Shipyard)
|
||||
? findShipDef(recipeId)
|
||||
: nullptr;
|
||||
// The preview and Configure button are shipyard-only controls; hide them
|
||||
// entirely for other building types.
|
||||
if (type != BuildingType::Shipyard)
|
||||
{
|
||||
m_layoutPreview->hide();
|
||||
m_configureLayoutBtn->hide();
|
||||
return;
|
||||
}
|
||||
|
||||
if (shipDef && !shipDef->layout.empty())
|
||||
const ShipDef* shipDef = findShipDef(recipeId);
|
||||
const bool hasSchematic = shipDef && !shipDef->layout.empty();
|
||||
|
||||
// Always show the preview and Configure button for a shipyard; they are only
|
||||
// enabled once a schematic is selected (REQ-MOD-UI-PREVIEW).
|
||||
if (hasSchematic)
|
||||
{
|
||||
ShipLayoutConfig layout;
|
||||
if (shipLayout.has_value())
|
||||
@@ -579,14 +589,16 @@ void SelectedBuildingPanel::updateShipyardLayoutWidgets(
|
||||
}
|
||||
m_layoutPreview->setShipAndLayout(
|
||||
shipDef->layout, layout, &m_config->modules.modules);
|
||||
m_layoutPreview->show();
|
||||
m_configureLayoutBtn->show();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_layoutPreview->hide();
|
||||
m_configureLayoutBtn->hide();
|
||||
m_layoutPreview->showPlaceholder();
|
||||
}
|
||||
|
||||
m_layoutPreview->setEnabled(hasSchematic);
|
||||
m_configureLayoutBtn->setEnabled(hasSchematic);
|
||||
m_layoutPreview->show();
|
||||
m_configureLayoutBtn->show();
|
||||
}
|
||||
|
||||
const RecipeDef* SelectedBuildingPanel::findRecipe(const Building* b) const
|
||||
|
||||
@@ -8,6 +8,10 @@ namespace
|
||||
|
||||
const int kCellSize = 8;
|
||||
|
||||
// Size of the empty placeholder box shown when no schematic is selected.
|
||||
const int kPlaceholderWidth = 64;
|
||||
const int kPlaceholderHeight = 40;
|
||||
|
||||
const ModuleDef* findModuleDef(const std::vector<ModuleDef>& modules,
|
||||
const std::string& id)
|
||||
{
|
||||
@@ -90,14 +94,28 @@ void ShipLayoutPreview::clear()
|
||||
m_modules = nullptr;
|
||||
m_rows = 0;
|
||||
m_cols = 0;
|
||||
m_placeholder = false;
|
||||
setFixedSize(0, 0);
|
||||
update();
|
||||
}
|
||||
|
||||
void ShipLayoutPreview::showPlaceholder()
|
||||
{
|
||||
m_grid.clear();
|
||||
m_placedModules.clear();
|
||||
m_modules = nullptr;
|
||||
m_rows = 0;
|
||||
m_cols = 0;
|
||||
m_placeholder = true;
|
||||
setFixedSize(kPlaceholderWidth, kPlaceholderHeight);
|
||||
update();
|
||||
}
|
||||
|
||||
void ShipLayoutPreview::setShipAndLayout(const std::vector<std::string>& shipLayout,
|
||||
const ShipLayoutConfig& layout,
|
||||
const std::vector<ModuleDef>* modules)
|
||||
{
|
||||
m_placeholder = false;
|
||||
m_modules = modules;
|
||||
m_placedModules = layout.placedModules;
|
||||
m_rows = static_cast<int>(shipLayout.size());
|
||||
@@ -156,6 +174,18 @@ void ShipLayoutPreview::setShipAndLayout(const std::vector<std::string>& shipLay
|
||||
|
||||
void ShipLayoutPreview::paintEvent(QPaintEvent* /*event*/)
|
||||
{
|
||||
if (m_placeholder)
|
||||
{
|
||||
QPainter painter(this);
|
||||
painter.setRenderHint(QPainter::Antialiasing, false);
|
||||
const QRect box = rect().adjusted(0, 0, -1, -1);
|
||||
painter.fillRect(box, QColor(40, 40, 40));
|
||||
painter.setPen(QColor(128, 128, 128));
|
||||
painter.drawRect(box);
|
||||
painter.drawText(box, Qt::AlignCenter, tr("No schematic"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_rows == 0 || m_cols == 0)
|
||||
{
|
||||
return;
|
||||
|
||||
@@ -20,6 +20,10 @@ public:
|
||||
const std::vector<ModuleDef>* modules);
|
||||
void clear();
|
||||
|
||||
// Shows an empty placeholder box (no ship layout) so the preview stays
|
||||
// visible while no schematic is selected (REQ-MOD-UI-PREVIEW).
|
||||
void showPlaceholder();
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent* event) override;
|
||||
|
||||
@@ -35,4 +39,5 @@ private:
|
||||
const std::vector<ModuleDef>* m_modules;
|
||||
int m_rows;
|
||||
int m_cols;
|
||||
bool m_placeholder = false;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user