virtual void OnClick(Point pt, int widget, int click_count) { if (widget >= WID_NCL_TEXTFILE && widget < WID_NCL_TEXTFILE + TFT_END) { if (this->selected == NULL || this->selected->state != ContentInfo::ALREADY_HERE) return; ShowContentTextfileWindow((TextfileType)(widget - WID_NCL_TEXTFILE), this->selected); return; } switch (widget) { case WID_NCL_MATRIX: { uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_NCL_MATRIX); if (id_v >= this->content.Length()) return; // click out of bounds this->selected = *this->content.Get(id_v); this->list_pos = id_v; const NWidgetBase *checkbox = this->GetWidget<NWidgetBase>(WID_NCL_CHECKBOX); if (click_count > 1 || IsInsideBS(pt.x, checkbox->pos_x, checkbox->current_x)) { _network_content_client.ToggleSelectedState(this->selected); this->content.ForceResort(); } this->InvalidateData(); break; } case WID_NCL_CHECKBOX: case WID_NCL_TYPE: case WID_NCL_NAME: if (this->content.SortType() == widget - WID_NCL_CHECKBOX) { this->content.ToggleSortOrder(); this->list_pos = this->content.Length() - this->list_pos - 1; } else { this->content.SetSortType(widget - WID_NCL_CHECKBOX); this->content.ForceResort(); this->SortContentList(); } this->ScrollToSelected(); this->InvalidateData(); break; case WID_NCL_SELECT_ALL: _network_content_client.SelectAll(); this->InvalidateData(); break; case WID_NCL_SELECT_UPDATE: _network_content_client.SelectUpgrade(); this->InvalidateData(); break; case WID_NCL_UNSELECT: _network_content_client.UnselectAll(); this->InvalidateData(); break; case WID_NCL_CANCEL: delete this; break; case WID_NCL_OPEN_URL: if (this->selected != NULL) { extern void OpenBrowser(const char *url); OpenBrowser(this->selected->url); } break; case WID_NCL_DOWNLOAD: if (BringWindowToFrontById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD) == NULL) new NetworkContentDownloadStatusWindow(); break; } }
virtual void OnClick(Point pt, int widget, int click_count) { switch (widget) { case NCLWW_MATRIX: { uint32 id_v = (pt.y - this->GetWidget<NWidgetBase>(NCLWW_MATRIX)->pos_y) / this->resize.step_height; if (id_v >= this->vscroll.GetCapacity()) return; // click out of bounds id_v += this->vscroll.GetPosition(); if (id_v >= this->content.Length()) return; // click out of bounds this->selected = *this->content.Get(id_v); this->list_pos = id_v; const NWidgetBase *checkbox = this->GetWidget<NWidgetBase>(NCLWW_CHECKBOX); if (click_count > 1 || IsInsideBS(pt.x, checkbox->pos_x, checkbox->current_x)) { _network_content_client.ToggleSelectedState(this->selected); this->content.ForceResort(); } this->InvalidateData(); } break; case NCLWW_CHECKBOX: case NCLWW_TYPE: case NCLWW_NAME: if (this->content.SortType() == widget - NCLWW_CHECKBOX) { this->content.ToggleSortOrder(); this->list_pos = this->content.Length() - this->list_pos - 1; } else { this->content.SetSortType(widget - NCLWW_CHECKBOX); this->content.ForceResort(); this->SortContentList(); } this->ScrollToSelected(); this->InvalidateData(); break; case NCLWW_SELECT_ALL: _network_content_client.SelectAll(); this->InvalidateData(); break; case NCLWW_SELECT_UPDATE: _network_content_client.SelectUpgrade(); this->InvalidateData(); break; case NCLWW_UNSELECT: _network_content_client.UnselectAll(); this->InvalidateData(); break; case NCLWW_CANCEL: delete this; break; case NCLWW_DOWNLOAD: if (BringWindowToFrontById(WC_NETWORK_STATUS_WINDOW, 0) == NULL) new NetworkContentDownloadStatusWindow(); break; } }