1
0
Fork 0

(svn r17374) -Codechange: make the town and vehicle GUIs use the scrollbar wrappers

release/1.0
rubidium 2009-09-02 08:48:29 +00:00
parent 7aa9f8e3fb
commit 900aedf270
4 changed files with 41 additions and 81 deletions

View File

@ -108,7 +108,7 @@ public:
Window(desc, window_number), sel_index(-1) Window(desc, window_number), sel_index(-1)
{ {
this->town = Town::Get(this->window_number); this->town = Town::Get(this->window_number);
this->vscroll.cap = 5; this->vscroll.SetCapacity(5);
this->FindWindowPlacementAndResize(desc); this->FindWindowPlacementAndResize(desc);
} }
@ -118,7 +118,7 @@ public:
int numact; int numact;
uint buttons = GetMaskOfTownActions(&numact, _local_company, this->town); uint buttons = GetMaskOfTownActions(&numact, _local_company, this->town);
SetVScrollCount(this, numact + 1); this->vscroll.SetCount(numact + 1);
if (this->sel_index != -1 && !HasBit(buttons, this->sel_index)) { if (this->sel_index != -1 && !HasBit(buttons, this->sel_index)) {
this->sel_index = -1; this->sel_index = -1;
@ -172,7 +172,7 @@ public:
} }
y = this->widget[TWA_COMMAND_LIST].top + 1; y = this->widget[TWA_COMMAND_LIST].top + 1;
int pos = this->vscroll.pos; int pos = this->vscroll.GetPosition();
if (--pos < 0) { if (--pos < 0) {
DrawString(this->widget[TWA_COMMAND_LIST].left + 2, this->widget[TWA_COMMAND_LIST].right - 2, y, STR_LOCAL_AUTHORITY_ACTIONS_TITLE); DrawString(this->widget[TWA_COMMAND_LIST].left + 2, this->widget[TWA_COMMAND_LIST].right - 2, y, STR_LOCAL_AUTHORITY_ACTIONS_TITLE);
@ -206,7 +206,7 @@ public:
if (!IsInsideMM(y, 0, 5)) return; if (!IsInsideMM(y, 0, 5)) return;
y = GetNthSetBit(GetMaskOfTownActions(NULL, _local_company, this->town), y + this->vscroll.pos - 1); y = GetNthSetBit(GetMaskOfTownActions(NULL, _local_company, this->town), y + this->vscroll.GetPosition() - 1);
if (y >= 0) { if (y >= 0) {
this->sel_index = y; this->sel_index = y;
this->SetDirty(); this->SetDirty();
@ -558,7 +558,7 @@ private:
this->towns.Compact(); this->towns.Compact();
this->towns.RebuildDone(); this->towns.RebuildDone();
SetVScrollCount(this, this->towns.Length()); // Update scrollbar as well. this->vscroll.SetCount(this->towns.Length()); // Update scrollbar as well.
} }
/* Always sort the towns. */ /* Always sort the towns. */
this->last_town = NULL; this->last_town = NULL;
@ -603,7 +603,7 @@ public:
this->BuildSortTownList(); this->BuildSortTownList();
this->InitNested(desc, 0); this->InitNested(desc, 0);
this->vscroll.cap = this->nested_array[TDW_CENTERTOWN]->current_y / (int)this->resize.step_height; this->vscroll.SetCapacity(this->nested_array[TDW_CENTERTOWN]->current_y / (int)this->resize.step_height);
} }
~TownDirectoryWindow() ~TownDirectoryWindow()
@ -635,7 +635,7 @@ public:
case TDW_CENTERTOWN: { case TDW_CENTERTOWN: {
int n = 0; int n = 0;
int y = r.top + WD_FRAMERECT_TOP; int y = r.top + WD_FRAMERECT_TOP;
for (uint i = this->vscroll.pos; i < this->towns.Length(); i++) { for (uint i = this->vscroll.GetPosition(); i < this->towns.Length(); i++) {
const Town *t = this->towns[i]; const Town *t = this->towns[i];
assert(t->xy != INVALID_TILE); assert(t->xy != INVALID_TILE);
@ -645,7 +645,7 @@ public:
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_TOWN_DIRECTORY_TOWN); DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_TOWN_DIRECTORY_TOWN);
y += this->resize.step_height; y += this->resize.step_height;
if (++n == this->vscroll.cap) break; // max number of towns in 1 window if (++n == this->vscroll.GetCapacity()) break; // max number of towns in 1 window
} }
} break; } break;
} }
@ -716,9 +716,9 @@ public:
case TDW_CENTERTOWN: { // Click on Town Matrix case TDW_CENTERTOWN: { // Click on Town Matrix
uint16 id_v = (pt.y - this->nested_array[widget]->pos_y - WD_FRAMERECT_TOP) / this->resize.step_height; uint16 id_v = (pt.y - this->nested_array[widget]->pos_y - WD_FRAMERECT_TOP) / this->resize.step_height;
if (id_v >= this->vscroll.cap) return; // click out of bounds if (id_v >= this->vscroll.GetCapacity()) return; // click out of bounds
id_v += this->vscroll.pos; id_v += this->vscroll.GetPosition();
if (id_v >= this->towns.Length()) return; // click out of town bounds if (id_v >= this->towns.Length()) return; // click out of town bounds
@ -742,7 +742,7 @@ public:
virtual void OnResize(Point delta) virtual void OnResize(Point delta)
{ {
this->vscroll.cap += delta.y / (int)this->resize.step_height; this->vscroll.UpdateCapacity(delta.y / (int)this->resize.step_height);
} }
virtual void OnInvalidateData(int data) virtual void OnInvalidateData(int data)

View File

@ -102,6 +102,7 @@ void BaseVehicleListWindow::BuildVehicleList(Owner owner, uint16 index, uint16 w
GenerateVehicleSortList(&this->vehicles, this->vehicle_type, owner, index, window_type); GenerateVehicleSortList(&this->vehicles, this->vehicle_type, owner, index, window_type);
this->vehicles.RebuildDone(); this->vehicles.RebuildDone();
this->vscroll.SetCount(this->vehicles.Length());
} }
/* cached values for VehicleNameSorter to spare many GetString() calls */ /* cached values for VehicleNameSorter to spare many GetString() calls */
@ -298,14 +299,14 @@ struct RefitWindow : public Window {
RefitWindow(const WindowDesc *desc, const Vehicle *v, VehicleOrderID order) : Window(desc, v->index) RefitWindow(const WindowDesc *desc, const Vehicle *v, VehicleOrderID order) : Window(desc, v->index)
{ {
this->owner = v->owner; this->owner = v->owner;
this->vscroll.cap = 8; this->vscroll.SetCapacity(8);
this->resize.step_height = 14; this->resize.step_height = 14;
this->order = order; this->order = order;
this->sel = -1; this->sel = -1;
this->list = BuildRefitList(v); this->list = BuildRefitList(v);
if (v->type == VEH_TRAIN) this->length = CountVehiclesInChain(v); if (v->type == VEH_TRAIN) this->length = CountVehiclesInChain(v);
SetVScrollCount(this, this->list->num_lines); this->vscroll.SetCount(this->list->num_lines);
this->widget[VRW_SELECTHEADER].tooltips = STR_REFIT_TRAIN_LIST_TOOLTIP + v->type; this->widget[VRW_SELECTHEADER].tooltips = STR_REFIT_TRAIN_LIST_TOOLTIP + v->type;
this->widget[VRW_MATRIX].tooltips = STR_REFIT_TRAIN_LIST_TOOLTIP + v->type; this->widget[VRW_MATRIX].tooltips = STR_REFIT_TRAIN_LIST_TOOLTIP + v->type;
@ -337,12 +338,12 @@ struct RefitWindow : public Window {
} }
} }
SetVScrollCount(this, this->list->num_lines); this->vscroll.SetCount(this->list->num_lines);
SetDParam(0, v->index); SetDParam(0, v->index);
this->DrawWidgets(); this->DrawWidgets();
this->cargo = DrawVehicleRefitWindow(this->list, this->sel, this->vscroll.pos, this->vscroll.cap, this->resize.step_height, this->width - 2); this->cargo = DrawVehicleRefitWindow(this->list, this->sel, this->vscroll.GetPosition(), this->vscroll.GetCapacity(), this->resize.step_height, this->width - 2);
if (this->cargo != NULL) { if (this->cargo != NULL) {
CommandCost cost; CommandCost cost;
@ -365,7 +366,7 @@ struct RefitWindow : public Window {
case VRW_MATRIX: { // listbox case VRW_MATRIX: { // listbox
int y = pt.y - this->widget[VRW_MATRIX].top; int y = pt.y - this->widget[VRW_MATRIX].top;
if (y >= 0) { if (y >= 0) {
this->sel = (y / (int)this->resize.step_height) + this->vscroll.pos; this->sel = (y / (int)this->resize.step_height) + this->vscroll.GetPosition();
this->SetDirty(); this->SetDirty();
} }
break; break;
@ -387,8 +388,8 @@ struct RefitWindow : public Window {
virtual void OnResize(Point delta) virtual void OnResize(Point delta)
{ {
this->vscroll.cap += delta.y / (int)this->resize.step_height; this->vscroll.UpdateCapacity(delta.y / (int)this->resize.step_height);
this->widget[VRW_MATRIX].data = (this->vscroll.cap << MAT_ROW_START) + (1 << MAT_COL_START); this->widget[VRW_MATRIX].data = (this->vscroll.GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
} }
}; };
@ -807,8 +808,8 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle)
int left = this->widget[VLW_WIDGET_LIST].left + WD_MATRIX_LEFT; int left = this->widget[VLW_WIDGET_LIST].left + WD_MATRIX_LEFT;
int right = this->widget[VLW_WIDGET_LIST].right - WD_MATRIX_RIGHT; int right = this->widget[VLW_WIDGET_LIST].right - WD_MATRIX_RIGHT;
int y = PLY_WND_PRC__OFFSET_TOP_WIDGET; int y = PLY_WND_PRC__OFFSET_TOP_WIDGET;
uint max = min(this->vscroll.pos + this->vscroll.cap, this->vehicles.Length()); uint max = min(this->vscroll.GetPosition() + this->vscroll.GetCapacity(), this->vehicles.Length());
for (uint i = this->vscroll.pos; i < max; ++i) { for (uint i = this->vscroll.GetPosition(); i < max; ++i) {
const Vehicle *v = this->vehicles[i]; const Vehicle *v = this->vehicles[i];
StringID str; StringID str;
@ -879,19 +880,19 @@ struct VehicleListWindow : public BaseVehicleListWindow {
this->resize.step_width = 1; this->resize.step_width = 1;
/* Fallthrough */ /* Fallthrough */
case VEH_ROAD: case VEH_ROAD:
this->vscroll.cap = 6; this->vscroll.SetCapacity(6);
this->resize.step_height = PLY_WND_PRC__SIZE_OF_ROW_SMALL; this->resize.step_height = PLY_WND_PRC__SIZE_OF_ROW_SMALL;
break; break;
case VEH_SHIP: case VEH_SHIP:
case VEH_AIRCRAFT: case VEH_AIRCRAFT:
this->vscroll.cap = 4; this->vscroll.SetCapacity(4);
this->resize.step_height = PLY_WND_PRC__SIZE_OF_ROW_BIG; this->resize.step_height = PLY_WND_PRC__SIZE_OF_ROW_BIG;
break; break;
default: NOT_REACHED(); default: NOT_REACHED();
} }
this->widget[VLW_WIDGET_LIST].data = (this->vscroll.cap << MAT_ROW_START) + (1 << MAT_COL_START); this->widget[VLW_WIDGET_LIST].data = (this->vscroll.GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
/* Set up sorting. Make the window-specific _sorting variable /* Set up sorting. Make the window-specific _sorting variable
* point to the correct global _sorting struct so we are freed * point to the correct global _sorting struct so we are freed
@ -925,7 +926,6 @@ struct VehicleListWindow : public BaseVehicleListWindow {
this->BuildVehicleList(owner, index, window_type); this->BuildVehicleList(owner, index, window_type);
this->SortVehicleList(); this->SortVehicleList();
SetVScrollCount(this, this->vehicles.Length());
if (this->vehicles.Length() == 0) HideDropDownMenu(this); if (this->vehicles.Length() == 0) HideDropDownMenu(this);
@ -937,25 +937,25 @@ struct VehicleListWindow : public BaseVehicleListWindow {
* and we should close the window when deleting the order */ * and we should close the window when deleting the order */
NOT_REACHED(); NOT_REACHED();
} }
SetDParam(0, this->vscroll.count); SetDParam(0, this->vscroll.GetCount());
break; break;
case VLW_STANDARD: // Company Name case VLW_STANDARD: // Company Name
SetDParam(0, STR_COMPANY_NAME); SetDParam(0, STR_COMPANY_NAME);
SetDParam(1, owner); SetDParam(1, owner);
SetDParam(2, this->vscroll.count); SetDParam(2, this->vscroll.GetCount());
break; break;
case VLW_WAYPOINT_LIST: case VLW_WAYPOINT_LIST:
SetDParam(0, STR_WAYPOINT_NAME); SetDParam(0, STR_WAYPOINT_NAME);
SetDParam(1, index); SetDParam(1, index);
SetDParam(2, this->vscroll.count); SetDParam(2, this->vscroll.GetCount());
break; break;
case VLW_STATION_LIST: // Station Name case VLW_STATION_LIST: // Station Name
SetDParam(0, STR_STATION_NAME); SetDParam(0, STR_STATION_NAME);
SetDParam(1, index); SetDParam(1, index);
SetDParam(2, this->vscroll.count); SetDParam(2, this->vscroll.GetCount());
break; break;
case VLW_DEPOT_LIST: case VLW_DEPOT_LIST:
@ -965,7 +965,7 @@ struct VehicleListWindow : public BaseVehicleListWindow {
} else { } else {
SetDParam(1, Depot::Get(index)->town_index); SetDParam(1, Depot::Get(index)->town_index);
} }
SetDParam(2, this->vscroll.count); SetDParam(2, this->vscroll.GetCount());
break; break;
default: NOT_REACHED(); default: NOT_REACHED();
} }
@ -1015,9 +1015,9 @@ struct VehicleListWindow : public BaseVehicleListWindow {
uint32 id_v = (pt.y - PLY_WND_PRC__OFFSET_TOP_WIDGET) / this->resize.step_height; uint32 id_v = (pt.y - PLY_WND_PRC__OFFSET_TOP_WIDGET) / this->resize.step_height;
const Vehicle *v; const Vehicle *v;
if (id_v >= this->vscroll.cap) return; // click out of bounds if (id_v >= this->vscroll.GetCapacity()) return; // click out of bounds
id_v += this->vscroll.pos; id_v += this->vscroll.GetPosition();
if (id_v >= this->vehicles.Length()) return; // click out of list bound if (id_v >= this->vehicles.Length()) return; // click out of list bound
@ -1103,8 +1103,8 @@ struct VehicleListWindow : public BaseVehicleListWindow {
virtual void OnResize(Point delta) virtual void OnResize(Point delta)
{ {
this->vscroll.cap += delta.y / (int)this->resize.step_height; this->vscroll.UpdateCapacity(delta.y / (int)this->resize.step_height);
this->widget[VLW_WIDGET_LIST].data = (this->vscroll.cap << MAT_ROW_START) + (1 << MAT_COL_START); this->widget[VLW_WIDGET_LIST].data = (this->vscroll.GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
} }
virtual void OnInvalidateData(int data) virtual void OnInvalidateData(int data)
@ -1279,7 +1279,7 @@ struct VehicleDetailsWindow : Window {
case VEH_TRAIN: case VEH_TRAIN:
ResizeWindow(this, 0, 39); ResizeWindow(this, 0, 39);
this->vscroll.cap = 6; this->vscroll.SetCapacity(6);
this->height += 12; this->height += 12;
this->resize.step_height = 14; this->resize.step_height = 14;
this->resize.height = this->height - 14 * 2; // Minimum of 4 wagons in the display this->resize.height = this->height - 14 * 2; // Minimum of 4 wagons in the display
@ -1310,11 +1310,11 @@ struct VehicleDetailsWindow : Window {
} }
if (v->type != VEH_TRAIN) { if (v->type != VEH_TRAIN) {
this->vscroll.cap = 1; this->vscroll.SetCapacity(1);
this->widget[VLD_WIDGET_MIDDLE_DETAILS].right += 12; this->widget[VLD_WIDGET_MIDDLE_DETAILS].right += 12;
} }
this->widget[VLD_WIDGET_MIDDLE_DETAILS].data = (this->vscroll.cap << MAT_ROW_START) + (1 << MAT_COL_START); this->widget[VLD_WIDGET_MIDDLE_DETAILS].data = (this->vscroll.GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
this->owner = v->owner; this->owner = v->owner;
this->tab = TDW_TAB_CARGO; this->tab = TDW_TAB_CARGO;
@ -1367,7 +1367,7 @@ struct VehicleDetailsWindow : Window {
if (v->type == VEH_TRAIN) { if (v->type == VEH_TRAIN) {
this->DisableWidget(det_tab + VLD_WIDGET_DETAILS_CARGO_CARRIED); this->DisableWidget(det_tab + VLD_WIDGET_DETAILS_CARGO_CARRIED);
SetVScrollCount(this, GetTrainDetailsWndVScroll(v->index, det_tab)); this->vscroll.SetCount(GetTrainDetailsWndVScroll(v->index, det_tab));
} }
this->SetWidgetsHiddenState(v->type != VEH_TRAIN, this->SetWidgetsHiddenState(v->type != VEH_TRAIN,
@ -1436,14 +1436,14 @@ struct VehicleDetailsWindow : Window {
const Widget *matrix = &this->widget[VLD_WIDGET_MIDDLE_DETAILS]; const Widget *matrix = &this->widget[VLD_WIDGET_MIDDLE_DETAILS];
switch (v->type) { switch (v->type) {
case VEH_TRAIN: case VEH_TRAIN:
DrawVehicleDetails(v, matrix->left + 2, matrix->right - 2, matrix->top + 1, this->vscroll.pos, this->vscroll.cap, det_tab); DrawVehicleDetails(v, matrix->left + 2, matrix->right - 2, matrix->top + 1, this->vscroll.GetPosition(), this->vscroll.GetCapacity(), det_tab);
break; break;
case VEH_ROAD: case VEH_ROAD:
case VEH_SHIP: case VEH_SHIP:
case VEH_AIRCRAFT: case VEH_AIRCRAFT:
DrawVehicleImage(v, matrix->left + 3, matrix->top + 1, INVALID_VEHICLE, matrix->right - matrix->left - 5, 0); DrawVehicleImage(v, matrix->left + 3, matrix->top + 1, INVALID_VEHICLE, matrix->right - matrix->left - 5, 0);
DrawVehicleDetails(v, matrix->left + 75, matrix->right - 2, matrix->top + 1, this->vscroll.pos, this->vscroll.cap, det_tab); DrawVehicleDetails(v, matrix->left + 75, matrix->right - 2, matrix->top + 1, this->vscroll.GetPosition(), this->vscroll.GetCapacity(), det_tab);
break; break;
default: NOT_REACHED(); default: NOT_REACHED();
@ -1501,8 +1501,8 @@ struct VehicleDetailsWindow : Window {
if (delta.x != 0) ResizeButtons(this, VLD_WIDGET_DETAILS_CARGO_CARRIED, VLD_WIDGET_DETAILS_TOTAL_CARGO); if (delta.x != 0) ResizeButtons(this, VLD_WIDGET_DETAILS_CARGO_CARRIED, VLD_WIDGET_DETAILS_TOTAL_CARGO);
if (delta.y == 0) return; if (delta.y == 0) return;
this->vscroll.cap += delta.y / 14; this->vscroll.UpdateCapacity(delta.y / 14);
this->widget[VLD_WIDGET_MIDDLE_DETAILS].data = (this->vscroll.cap << MAT_ROW_START) + (1 << MAT_COL_START); this->widget[VLD_WIDGET_MIDDLE_DETAILS].data = (this->vscroll.GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
} }
}; };

View File

@ -2626,42 +2626,6 @@ int PositionMainToolbar(Window *w)
return w->left; return w->left;
} }
/**
* Set the number of items of the vertical scrollbar.
*
* Function also updates the position of the scrollbar if necessary.
* @param w Window containing the vertical scrollbar
* @param num New number of items
*/
void SetVScrollCount(Window *w, int num)
{
w->vscroll.SetCount(num);
}
/**
* Set the number of items of the second vertical scrollbar.
*
* Function also updates the position of the scrollbar if necessary.
* @param w Window containing the second vertical scrollbar
* @param num New number of items
*/
void SetVScroll2Count(Window *w, int num)
{
w->vscroll2.SetCount(num);
}
/**
* Set the number of items of the horizontal scrollbar.
*
* Function also updates the position of the scrollbar if necessary.
* @param w Window containing the horizontal scrollbar
* @param num New number of items
*/
void SetHScrollCount(Window *w, int num)
{
w->hscroll.SetCount(num);
}
/** /**
* Switches viewports following vehicles, which get autoreplaced * Switches viewports following vehicles, which get autoreplaced

View File

@ -957,8 +957,4 @@ void ResizeButtons(Window *w, byte left, byte right);
void ResizeWindowForWidget(Window *w, uint widget, int delta_x, int delta_y); void ResizeWindowForWidget(Window *w, uint widget, int delta_x, int delta_y);
void SetVScrollCount(Window *w, int num);
void SetVScroll2Count(Window *w, int num);
void SetHScrollCount(Window *w, int num);
#endif /* WINDOW_GUI_H */ #endif /* WINDOW_GUI_H */