void FactoryReport::init()
{
addControl("btnShowAll", &btnShowAll, 10, 10);
btnShowAll.font(*MAIN_FONT);
btnShowAll.size(75, 20);
btnShowAll.type(Button::BUTTON_TOGGLE);
btnShowAll.toggle(true);
btnShowAll.text("All");
btnShowAll.click().connect(this, &FactoryReport::btnShowAllClicked);
addControl("btnShowSurface", &btnShowSurface, 87, 10);
btnShowSurface.font(*MAIN_FONT);
btnShowSurface.size(75, 20);
btnShowSurface.type(Button::BUTTON_TOGGLE);
btnShowSurface.text("Surface");
btnShowSurface.click().connect(this, &FactoryReport::btnShowSurfaceClicked);
addControl("btnShowUnderground", &btnShowUnderground, 164, 10);
btnShowUnderground.font(*MAIN_FONT);
btnShowUnderground.size(75, 20);
btnShowUnderground.type(Button::BUTTON_TOGGLE);
btnShowUnderground.text("Underground");
btnShowUnderground.click().connect(this, &FactoryReport::btnShowUndergroundClicked);
addControl("btnShowActive", &btnShowActive, 10, 33);
btnShowActive.font(*MAIN_FONT);
btnShowActive.size(75, 20);
btnShowActive.type(Button::BUTTON_TOGGLE);
btnShowActive.text("Active");
btnShowActive.click().connect(this, &FactoryReport::btnShowActiveClicked);
addControl("btnShowIdle", &btnShowIdle, 87, 33);
btnShowIdle.font(*MAIN_FONT);
btnShowIdle.size(75, 20);
btnShowIdle.type(Button::BUTTON_TOGGLE);
btnShowIdle.text("Idle");
btnShowIdle.click().connect(this, &FactoryReport::btnShowIdleClicked);
addControl("btnShowDisabled", &btnShowDisabled, 164, 33);
btnShowDisabled.font(*MAIN_FONT);
btnShowDisabled.size(75, 20);
btnShowDisabled.type(Button::BUTTON_TOGGLE);
btnShowDisabled.text("Disabled");
btnShowDisabled.click().connect(this, &FactoryReport::btnShowDisabledClicked);
addControl("cboTestBox", &cboFilterByProduct, 250, 33);
cboFilterByProduct.font(*MAIN_FONT);
cboFilterByProduct.size(200, 20);
cboFilterByProduct.addItem("Clothing");
cboFilterByProduct.addItem("Maintenance Supplies");
cboFilterByProduct.addItem("Medicine");
cboFilterByProduct.addItem("Robodigger");
cboFilterByProduct.addItem("Robodozer");
cboFilterByProduct.addItem("Roboexplorer");
cboFilterByProduct.addItem("Robominer");
cboFilterByProduct.addItem("Road Materials");
cboFilterByProduct.addItem("Truck");
}
... but now we're creating a bunch of functions that effectively do the same thing.
btnShowIdle.font(*MAIN_FONT);
btnShowIdle.size(75, 20);
btnShowIdle.type(Button::BUTTON_TOGGLE);
btnShowAll.text("All");
btnShowAll.click().connect(this, &FactoryReport::btnShowAllClicked);
x = 10 + 77 * columnX;
y = 10 + 23 * columnY;
"btnShowAll", &btnShowAll
addControl("cboTestBox", &cboFilterByProduct, 250, 33);
cboFilterByProduct.font(*MAIN_FONT);
cboFilterByProduct.size(200, 20);
ToggleButton irradiateColonists;
Button closeReactorControlWindow;
class Button {
// ...
// Makes sense to allow update after construction
void text(const std::string& text);
void image(const std::string& path);
// ...
};
class Button {
Button(std::string text);
Button(Image image);
};
class Button {
Button(std::string text, ClickHandler clickHandler);
Button(Image image, ClickHandler clickHandler);
};
class FactoryReport {
private:
ToggleButton btnShowAll;
ToggleButton btnShowSurface;
ToggleButton btnShowUnderground;
ToggleButton btnShowActive;
ToggleButton btnShowIdle;
ToggleButton btnShowDisabled;
ComboBox cboFilterByProduct;
};
FactoryReport::FactoryReport() :
btnShowAll("All", &FactoryReport::btnShowAllClicked),
btnShowSurface("Surface", &FactoryReport::btnShowSurfaceClicked),
btnShowUnderground("Underground", &FactoryReport::btnShowUndergroundClicked),
btnShowActive("Active", &FactoryReport::btnShowActiveClicked),
btnShowIdle("Idle", &FactoryReport::btnShowIdleClicked),
btnShowDisabled("Disabled", &FactoryReport::btnShowDisabledClicked)
{
// ...
}
void FactoryReport::init()
{
addControl("btnShowAll", &btnShowAll, 10, 10);
btnShowAll.font(*MAIN_FONT);
btnShowAll.size(75, 20);
btnShowAll.toggle(true);
addControl("btnShowSurface", &btnShowSurface, 87, 10);
btnShowSurface.font(*MAIN_FONT);
btnShowSurface.size(75, 20);
addControl("btnShowUnderground", &btnShowUnderground, 164, 10);
btnShowUnderground.font(*MAIN_FONT);
btnShowUnderground.size(75, 20);
addControl("btnShowActive", &btnShowActive, 10, 33);
btnShowActive.font(*MAIN_FONT);
btnShowActive.size(75, 20);
addControl("btnShowIdle", &btnShowIdle, 87, 33);
btnShowIdle.font(*MAIN_FONT);
btnShowIdle.size(75, 20);
addControl("btnShowDisabled", &btnShowDisabled, 164, 33);
btnShowDisabled.font(*MAIN_FONT);
btnShowDisabled.size(75, 20);
addControl("cboTestBox", &cboFilterByProduct, 250, 33);
cboFilterByProduct.font(*MAIN_FONT);
cboFilterByProduct.size(200, 20);
cboFilterByProduct.addItem("Clothing");
cboFilterByProduct.addItem("Maintenance Supplies");
cboFilterByProduct.addItem("Medicine");
cboFilterByProduct.addItem("Robodigger");
cboFilterByProduct.addItem("Robodozer");
cboFilterByProduct.addItem("Roboexplorer");
cboFilterByProduct.addItem("Robominer");
cboFilterByProduct.addItem("Road Materials");
cboFilterByProduct.addItem("Truck");
}
And woot! I noticed some ways I could improve interfaces and make code more readable or at least more efficient so I kinda went for it. It's why I take breaks from coding now and then. Sometimes it helps to come back to it with fresh eyes.