summaryrefslogtreecommitdiff
path: root/src/network
diff options
context:
space:
mode:
Diffstat (limited to 'src/network')
-rw-r--r--src/network/network_content_gui.cpp21
-rw-r--r--src/network/network_gui.cpp55
2 files changed, 44 insertions, 32 deletions
diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp
index 138cea9bd..adeddff15 100644
--- a/src/network/network_content_gui.cpp
+++ b/src/network/network_content_gui.cpp
@@ -239,6 +239,7 @@ class NetworkContentListWindow : public QueryStringBaseWindow, ContentCallback {
const ContentInfo *selected; ///< The selected content info
int list_pos; ///< Our position in the list
uint filesize_sum; ///< The sum of all selected file sizes
+ Scrollbar *vscroll;
/**
* (Re)build the network game list as its amount has changed because
@@ -260,7 +261,7 @@ class NetworkContentListWindow : public QueryStringBaseWindow, ContentCallback {
this->content.RebuildDone();
this->SortContentList();
- this->vscroll.SetCount(this->content.Length()); // Update the scrollbar
+ this->vscroll->SetCount(this->content.Length()); // Update the scrollbar
this->ScrollToSelected();
}
@@ -338,7 +339,7 @@ class NetworkContentListWindow : public QueryStringBaseWindow, ContentCallback {
{
if (this->selected == NULL) return;
- this->vscroll.ScrollTowards(this->list_pos);
+ this->vscroll->ScrollTowards(this->list_pos);
}
public:
@@ -351,7 +352,9 @@ public:
selected(NULL),
list_pos(0)
{
- this->InitNested(desc, 1);
+ this->CreateNestedTree(desc);
+ this->vscroll = this->GetScrollbar(NCLWW_SCROLLBAR);
+ this->FinishInitNested(desc, 1);
this->GetWidget<NWidgetStacked>(NCLWW_SEL_ALL_UPDATE)->SetDisplayedPlane(select_all);
@@ -448,7 +451,7 @@ public:
int sprite_y_offset = WD_MATRIX_TOP + (FONT_HEIGHT_NORMAL - 10) / 2;
uint y = r.top;
int cnt = 0;
- for (ConstContentIterator iter = this->content.Get(this->vscroll.GetPosition()); iter != this->content.End() && cnt < this->vscroll.GetCapacity(); iter++, cnt++) {
+ for (ConstContentIterator iter = this->content.Get(this->vscroll->GetPosition()); iter != this->content.End() && cnt < this->vscroll->GetCapacity(); iter++, cnt++) {
const ContentInfo *ci = *iter;
if (ci == this->selected) GfxFillRect(r.left + 1, y + 1, r.right - 1, y + this->resize.step_height - 1, 10);
@@ -590,7 +593,7 @@ public:
{
switch (widget) {
case NCLWW_MATRIX: {
- uint id_v = this->vscroll.GetScrolledRowFromWidget(pt.y, this, NCLWW_MATRIX);
+ uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, NCLWW_MATRIX);
if (id_v >= this->content.Length()) return; // click out of bounds
this->selected = *this->content.Get(id_v);
@@ -664,11 +667,11 @@ public:
break;
case WKC_PAGEUP:
/* scroll up a page */
- this->list_pos = (this->list_pos < this->vscroll.GetCapacity()) ? 0 : this->list_pos - this->vscroll.GetCapacity();
+ this->list_pos = (this->list_pos < this->vscroll->GetCapacity()) ? 0 : this->list_pos - this->vscroll->GetCapacity();
break;
case WKC_PAGEDOWN:
/* scroll down a page */
- this->list_pos = min(this->list_pos + this->vscroll.GetCapacity(), (int)this->content.Length() - 1);
+ this->list_pos = min(this->list_pos + this->vscroll->GetCapacity(), (int)this->content.Length() - 1);
break;
case WKC_HOME:
/* jump to beginning */
@@ -723,8 +726,8 @@ public:
virtual void OnResize()
{
- this->vscroll.SetCapacityFromWidget(this, NCLWW_MATRIX);
- this->GetWidget<NWidgetCore>(NCLWW_MATRIX)->widget_data = (this->vscroll.GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
+ this->vscroll->SetCapacityFromWidget(this, NCLWW_MATRIX);
+ this->GetWidget<NWidgetCore>(NCLWW_MATRIX)->widget_data = (this->vscroll->GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
}
virtual void OnReceiveContentInfo(const ContentInfo *rci)
diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp
index cc37bcfe7..99520c2ec 100644
--- a/src/network/network_gui.cpp
+++ b/src/network/network_gui.cpp
@@ -254,6 +254,7 @@ protected:
NetworkGameList *last_joined; ///< the last joined server
GUIGameServerList servers; ///< list with game servers.
ServerListPosition list_pos; ///< position of the selected server
+ Scrollbar *vscroll;
/**
* (Re)build the network game list as its amount has changed because
@@ -272,7 +273,7 @@ protected:
this->servers.Compact();
this->servers.RebuildDone();
- this->vscroll.SetCount(this->servers.Length());
+ this->vscroll->SetCount(this->servers.Length());
}
/** Sort servers by name. */
@@ -443,13 +444,15 @@ protected:
void ScrollToSelectedServer()
{
if (this->list_pos == SLP_INVALID) return; // no server selected
- this->vscroll.ScrollTowards(this->list_pos);
+ this->vscroll->ScrollTowards(this->list_pos);
}
public:
NetworkGameWindow(const WindowDesc *desc) : QueryStringBaseWindow(NETWORK_CLIENT_NAME_LENGTH)
{
- this->InitNested(desc, 0);
+ this->CreateNestedTree(desc);
+ this->vscroll = this->GetScrollbar(NGWW_SCROLLBAR);
+ this->FinishInitNested(desc, 0);
ttd_strlcpy(this->edit_str_buf, _settings_client.network.client_name, this->edit_str_size);
this->afilter = CS_ALPHANUMERAL;
@@ -539,9 +542,9 @@ public:
case NGWW_MATRIX: {
uint16 y = r.top + WD_MATRIX_TOP;
- const int max = min(this->vscroll.GetPosition() + this->vscroll.GetCapacity(), (int)this->servers.Length());
+ const int max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), (int)this->servers.Length());
- for (int i = this->vscroll.GetPosition(); i < max; ++i) {
+ for (int i = this->vscroll->GetPosition(); i < max; ++i) {
const NetworkGameList *ngl = this->servers[i];
this->DrawServerLine(ngl, y, ngl == this->server);
y += this->resize.step_height;
@@ -696,7 +699,7 @@ public:
break;
case NGWW_MATRIX: { // Matrix to show networkgames
- uint id_v = this->vscroll.GetScrolledRowFromWidget(pt.y, this, NGWW_MATRIX);
+ uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, NGWW_MATRIX);
this->server = (id_v < this->servers.Length()) ? this->servers[id_v] : NULL;
this->list_pos = (server == NULL) ? SLP_INVALID : id_v;
this->SetDirty();
@@ -843,12 +846,12 @@ public:
case WKC_PAGEUP:
/* scroll up a page */
if (this->server == NULL) return ES_HANDLED;
- this->list_pos = (this->list_pos < this->vscroll.GetCapacity()) ? 0 : this->list_pos - this->vscroll.GetCapacity();
+ this->list_pos = (this->list_pos < this->vscroll->GetCapacity()) ? 0 : this->list_pos - this->vscroll->GetCapacity();
break;
case WKC_PAGEDOWN:
/* scroll down a page */
if (this->server == NULL) return ES_HANDLED;
- this->list_pos = min(this->list_pos + this->vscroll.GetCapacity(), (int)this->servers.Length() - 1);
+ this->list_pos = min(this->list_pos + this->vscroll->GetCapacity(), (int)this->servers.Length() - 1);
break;
case WKC_HOME:
/* jump to beginning */
@@ -900,8 +903,8 @@ public:
virtual void OnResize()
{
- this->vscroll.SetCapacityFromWidget(this, NGWW_MATRIX);
- this->GetWidget<NWidgetCore>(NGWW_MATRIX)->widget_data = (this->vscroll.GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
+ this->vscroll->SetCapacityFromWidget(this, NGWW_MATRIX);
+ this->GetWidget<NWidgetCore>(NGWW_MATRIX)->widget_data = (this->vscroll->GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
}
};
@@ -1055,17 +1058,20 @@ struct NetworkStartServerWindow : public QueryStringBaseWindow {
byte field; ///< Selected text-field
FiosItem *map; ///< Selected map
byte widget_id; ///< The widget that has the pop-up input menu
+ Scrollbar *vscroll;
NetworkStartServerWindow(const WindowDesc *desc) : QueryStringBaseWindow(NETWORK_NAME_LENGTH)
{
this->InitNested(desc, 0);
+ this->vscroll = this->GetScrollbar(NSSW_SCROLLBAR);
+
ttd_strlcpy(this->edit_str_buf, _settings_client.network.server_name, this->edit_str_size);
_saveload_mode = SLD_NEW_GAME;
BuildFileList();
- this->vscroll.SetCapacity(14);
- this->vscroll.SetCount(_fios_items.Length() + 1);
+ this->vscroll->SetCapacity(14);
+ this->vscroll->SetCount(_fios_items.Length() + 1);
this->afilter = CS_ALPHANUMERAL;
InitializeTextBuffer(&this->text, this->edit_str_buf, this->edit_str_size, 160);
@@ -1143,7 +1149,7 @@ struct NetworkStartServerWindow : public QueryStringBaseWindow {
/* draw list of maps */
GfxFillRect(r.left + 1, r.top + 1, r.right - 1, r.bottom - 1, 0xD7); // black background of maps list
- for (uint pos = this->vscroll.GetPosition(); pos < _fios_items.Length() + 1; pos++) {
+ for (uint pos = this->vscroll->GetPosition(); pos < _fios_items.Length() + 1; pos++) {
const FiosItem *item = (pos == 0) ? NULL : _fios_items.Get(pos - 1);
if (item == this->map) { // this->map == NULL for first item
GfxFillRect(r.left + 1, y, r.right - 1, y + FONT_HEIGHT_NORMAL - 1, 155); // show highlighted item with a different colour
@@ -1156,7 +1162,7 @@ struct NetworkStartServerWindow : public QueryStringBaseWindow {
}
y += FONT_HEIGHT_NORMAL;
- if (y >= this->vscroll.GetCapacity() * FONT_HEIGHT_NORMAL + r.top) break;
+ if (y >= this->vscroll->GetCapacity() * FONT_HEIGHT_NORMAL + r.top) break;
}
}
@@ -1175,8 +1181,8 @@ struct NetworkStartServerWindow : public QueryStringBaseWindow {
break;
case NSSW_SELMAP: { // Select map
- int y = this->vscroll.GetScrolledRowFromWidget(pt.y, this, NSSW_SELMAP, WD_FRAMERECT_TOP, FONT_HEIGHT_NORMAL);
- if (y >= this->vscroll.GetCount()) return;
+ int y = this->vscroll->GetScrolledRowFromWidget(pt.y, this, NSSW_SELMAP, WD_FRAMERECT_TOP, FONT_HEIGHT_NORMAL);
+ if (y >= this->vscroll->GetCount()) return;
this->map = (y == 0) ? NULL : _fios_items.Get(y - 1);
this->SetDirty();
@@ -1454,11 +1460,14 @@ struct NetworkLobbyWindow : public Window {
CompanyID company; ///< Select company
NetworkGameList *server; ///< Selected server
NetworkCompanyInfo company_info[MAX_COMPANIES];
+ Scrollbar *vscroll;
NetworkLobbyWindow(const WindowDesc *desc, NetworkGameList *ngl) :
Window(), company(INVALID_COMPANY), server(ngl)
{
- this->InitNested(desc, 0);
+ this->CreateNestedTree(desc);
+ this->vscroll = this->GetScrollbar(NLWW_SCROLLBAR);
+ this->FinishInitNested(desc, 0);
this->OnResize();
}
@@ -1525,7 +1534,7 @@ struct NetworkLobbyWindow : public Window {
/* Cannot spectate if there are too many spectators */
this->SetWidgetDisabledState(NLWW_SPECTATE, gi->spectators_on >= gi->spectators_max);
- this->vscroll.SetCount(gi->companies_on);
+ this->vscroll->SetCount(gi->companies_on);
/* Draw window widgets */
this->DrawWidgets();
@@ -1544,7 +1553,7 @@ struct NetworkLobbyWindow : public Window {
int y = r.top + WD_MATRIX_TOP;
/* Draw company list */
- int pos = this->vscroll.GetPosition();
+ int pos = this->vscroll->GetPosition();
while (pos < this->server->info.companies_on) {
byte company = NetworkLobbyFindCompanyIndex(pos);
bool income = false;
@@ -1561,7 +1570,7 @@ struct NetworkLobbyWindow : public Window {
pos++;
y += this->resize.step_height;
- if (pos >= this->vscroll.GetPosition() + this->vscroll.GetCapacity()) break;
+ if (pos >= this->vscroll->GetPosition() + this->vscroll->GetCapacity()) break;
}
}
@@ -1636,7 +1645,7 @@ struct NetworkLobbyWindow : public Window {
break;
case NLWW_MATRIX: { // Company list
- uint id_v = this->vscroll.GetScrolledRowFromWidget(pt.y, this, NLWW_MATRIX);
+ uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, NLWW_MATRIX);
this->company = (id_v >= this->server->info.companies_on) ? INVALID_COMPANY : NetworkLobbyFindCompanyIndex(id_v);
this->SetDirty();
@@ -1669,8 +1678,8 @@ struct NetworkLobbyWindow : public Window {
virtual void OnResize()
{
- this->vscroll.SetCapacityFromWidget(this, NLWW_MATRIX);
- this->GetWidget<NWidgetCore>(NLWW_MATRIX)->widget_data = (this->vscroll.GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
+ this->vscroll->SetCapacityFromWidget(this, NLWW_MATRIX);
+ this->GetWidget<NWidgetCore>(NLWW_MATRIX)->widget_data = (this->vscroll->GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
}
};