summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/industry_gui.cpp86
1 files changed, 51 insertions, 35 deletions
diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp
index fe26676be..6d6843228 100644
--- a/src/industry_gui.cpp
+++ b/src/industry_gui.cpp
@@ -802,46 +802,62 @@ public:
Industry *i = Industry::Get(this->window_number);
InfoLine line = IL_NONE;
- if (pt.y >= this->production_offset_y) {
- int row = (pt.y - this->production_offset_y) / FONT_HEIGHT_NORMAL;
- for (uint j = 0; j < lengthof(i->produced_cargo); j++) {
- if (i->produced_cargo[j] == CT_INVALID) continue;
- row--;
- if (row < 0) {
- line = (InfoLine)(IL_RATE1 + j);
- break;
+ switch (this->editable) {
+ case EA_NONE: break;
+
+ case EA_RATE:
+ if (pt.y >= this->production_offset_y) {
+ int row = (pt.y - this->production_offset_y) / FONT_HEIGHT_NORMAL;
+ for (uint j = 0; j < lengthof(i->produced_cargo); j++) {
+ if (i->produced_cargo[j] == CT_INVALID) continue;
+ row--;
+ if (row < 0) {
+ line = (InfoLine)(IL_RATE1 + j);
+ break;
+ }
+ }
}
- }
+ break;
}
if (line == IL_NONE) return;
- uint x = pt.x;
- if (this->editable == EA_RATE) {
- NWidgetBase *nwi = this->GetWidget<NWidgetBase>(widget);
- uint left = nwi->pos_x + WD_FRAMETEXT_LEFT;
- uint right = nwi->pos_x + nwi->current_x - 1 - WD_FRAMERECT_RIGHT;
- if (IsInsideMM(x, left, left + 20) ) {
- /* Clicked buttons, decrease or increase production */
- if (x < left + 10) {
- if (i->production_rate[line - IL_RATE1] <= 0) return;
- i->production_rate[line - IL_RATE1] = max(i->production_rate[line - IL_RATE1] / 2, 0);
- } else {
- if (i->production_rate[line - IL_RATE1] >= 255) return;
- /* a zero production industry is unlikely to give anything but zero, so push it a little bit */
- int new_prod = i->production_rate[line - IL_RATE1] == 0 ? 1 : i->production_rate[line - IL_RATE1] * 2;
- i->production_rate[line - IL_RATE1] = minu(new_prod, 255);
- }
+ NWidgetBase *nwi = this->GetWidget<NWidgetBase>(widget);
+ int left = nwi->pos_x + WD_FRAMETEXT_LEFT;
+ int right = nwi->pos_x + nwi->current_x - 1 - WD_FRAMERECT_RIGHT;
+ if (IsInsideMM(pt.x, left, left + 20) ) {
+ /* Clicked buttons, decrease or increase production */
+ byte button = (pt.x < left + 10) ? 1 : 2;
+ switch (this->editable) {
+ case EA_RATE:
+ if (button == 1) {
+ if (i->production_rate[line - IL_RATE1] <= 0) return;
+ i->production_rate[line - IL_RATE1] = max(i->production_rate[line - IL_RATE1] / 2, 0);
+ } else {
+ if (i->production_rate[line - IL_RATE1] >= 255) return;
+ /* a zero production industry is unlikely to give anything but zero, so push it a little bit */
+ int new_prod = i->production_rate[line - IL_RATE1] == 0 ? 1 : i->production_rate[line - IL_RATE1] * 2;
+ i->production_rate[line - IL_RATE1] = minu(new_prod, 255);
+ }
+ break;
+
+ default: NOT_REACHED();
+ }
+
+ UpdateIndustryProduction(i);
+ this->SetDirty();
+ this->flags4 |= WF_TIMEOUT_BEGIN;
+ this->clicked_line = line;
+ this->clicked_button = button;
+ } else if (IsInsideMM(pt.x, left + 30, right)) {
+ /* clicked the text */
+ this->editbox_line = line;
+ switch (this->editable) {
+ case EA_RATE:
+ SetDParam(0, i->production_rate[line - IL_RATE1] * 8);
+ ShowQueryString(STR_JUST_INT, STR_CONFIG_GAME_PRODUCTION, 10, 100, this, CS_ALPHANUMERAL, QSF_NONE);
+ break;
- UpdateIndustryProduction(i);
- this->SetDirty();
- this->flags4 |= WF_TIMEOUT_BEGIN;
- this->clicked_line = line;
- this->clicked_button = (x < left + 10 ? 1 : 2);
- } else if (IsInsideMM(x, left + 30, right)) {
- /* clicked the text */
- this->editbox_line = line;
- SetDParam(0, i->production_rate[line - IL_RATE1] * 8);
- ShowQueryString(STR_JUST_INT, STR_CONFIG_GAME_PRODUCTION, 10, 100, this, CS_ALPHANUMERAL, QSF_NONE);
+ default: NOT_REACHED();
}
}
break;