// set the cell size and refresh display void LifeCanvas::SetCellSize(int cellsize) { m_cellsize = cellsize; // find current center wxInt32 cx = m_viewportX + m_viewportW / 2; wxInt32 cy = m_viewportY + m_viewportH / 2; // get current canvas size and adjust viewport accordingly int w, h; GetClientSize(&w, &h); m_viewportW = (w + m_cellsize - 1) / m_cellsize; m_viewportH = (h + m_cellsize - 1) / m_cellsize; // recenter m_viewportX = cx - m_viewportW / 2; m_viewportY = cy - m_viewportH / 2; // adjust scrollbars if (m_interactive) { SetScrollbar(wxHORIZONTAL, m_viewportW, m_viewportW, 3 * m_viewportW); SetScrollbar(wxVERTICAL, m_viewportH, m_viewportH, 3 * m_viewportH); m_thumbX = m_viewportW; m_thumbY = m_viewportH; } Refresh(false); }
// // Update the horizontal scrollbar or remove it if not needed // void KeyView::UpdateHScroll() { // Get the internal dimensions of the view wxRect r = GetClientRect(); // Calculate the full line width mWidth = KV_LEFT_MARGIN + mCommandWidth + KV_COLUMN_SPACER + mKeyWidth + KV_VSCROLL_WIDTH; // Retrieve the current horizontal scroll amount mScrollX = GetScrollPos(wxHORIZONTAL); if (mWidth <= r.GetWidth()) { // Remove the scrollbar if it will fit within client width SetScrollbar(wxHORIZONTAL, 0, 0, 0); } else { // Set scrollbar metrics SetScrollbar(wxHORIZONTAL, mScrollX, r.GetWidth(), mWidth); } // Refresh the entire view RefreshAll(); }
void BaseEditor::UpdateVirtualSize() { m_ZoomedSize = CalculateVirtualSize() * m_nZoom; wxRect rect = GetClientRect(); // hide unnessary scroll bar bool bShowHorizontal = true; if (m_ZoomedSize.GetWidth() <= rect.GetWidth()) { SetScrollbar(wxHORIZONTAL, 0, 0, 0, true); bShowHorizontal = false; } bool bShowVertical = true; if (m_ZoomedSize.GetHeight() <= rect.GetHeight()) { SetScrollbar(wxVERTICAL, 0, 0, 0, true); bShowVertical = false; } // get the rect again, it may be difference from the old rect after hide the scroll bar rect = GetClientRect(); // recalculate the scroll bar range if (bShowHorizontal) { SetScrollbar(wxHORIZONTAL, m_ptOriginOffset.x, rect.GetWidth(), m_ZoomedSize.GetWidth(), true); } if (bShowVertical) { SetScrollbar(wxVERTICAL, m_ptOriginOffset.y, rect.GetHeight(), m_ZoomedSize.GetHeight(), true); } }
void gxLightweightControl::Init() { mLightweightSystem = NULL; // For wxAutoBufferedPaintDC to work SetBackgroundStyle(wxBG_STYLE_CUSTOM); // Start with the scrollbars hidden SetScrollbar(wxHORIZONTAL, 0,1000, 1000); SetScrollbar(wxVERTICAL, 0,1000, 1000); }
// This determines the scrollbar size and position such that, where possible // the item at the top of the visible screen is unmoved void tpanelscrollbar::RepositionItems() { tpanelscrollpane *tsp = get_paired_ptr(); if (!tsp) return; #if TPANEL_SCROLLING_COPIOUS_LOGGING LogMsgFormat(LOGT::TPANELTRACE, "TSCL: tpanelscrollbar::RepositionItems %s, START %d %d", cstr(GetThisName()), GetThumbPosition(), parent->GetCurrentDisp().size()); #endif scroll_virtual_size = 0; int cumul_size = 0; bool have_scroll_offset = false; int scroll_offset = 0; for (auto &disp : parent->GetCurrentDisp()) { wxPoint p = disp.item->GetPosition(); wxSize s = disp.item->GetSize(); if (!disp.item->IsShown()) { s.y = 0; } scroll_virtual_size += s.y; if (p.x == 0 && p.y + s.y > 0 && p.y <= 0) { // This is an item which is visible at the top of the list // We should use the *last* matching item, this is as earlier items may grow in size to overlap the top of the screen // p.y is non-positive // The scroll offset should be increased as p.y increases in magnitude below 0 scroll_offset = cumul_size - p.y; have_scroll_offset = true; } cumul_size += s.y; } if (parent->pimpl()->displayoffset == 0 && GetThumbPosition() == 0 && have_scroll_offset && !scroll_always_freeze) { // We were at the very top, we would normally be scrolling down as something has been inserted above // Scroll back to the top instead // Don't do this if scroll_always_freeze is true scroll_offset = 0; } scroll_always_freeze = false; if (!have_scroll_offset) { scroll_offset = GetThumbPosition(); } scroll_client_size = tsp->GetClientSize().y; SetScrollbar(scroll_offset, scroll_client_size, scroll_virtual_size, 1); ScrollItems(); #if TPANEL_SCROLLING_COPIOUS_LOGGING LogMsgFormat(LOGT::TPANELTRACE, "TSCL: tpanelscrollbar::RepositionItems %s, END %d %d %d %d %d", cstr(GetThisName()), GetThumbPosition(), scroll_offset, have_scroll_offset, scroll_always_freeze, cumul_size); #endif }
void wxVideoTerminal::CalcScrollRange(bool calc_range) { if (calc_range) { int range = (m_botscreen_row - m_viewport.y) - m_firstline_row; SetScrollbar(wxVERTICAL, m_scrollpos_row-m_firstline_row, true, range+1); } else { SetScrollPos(wxVERTICAL, m_scrollpos_row-m_firstline_row, true); } }
// Essentially a float to int conversion. void AttachableScrollBar::SetScrollBarFromViewInfo() { ViewInfo & mViewInfo = *mpViewInfo; mViewInfo.sbarTotal = (int) (mViewInfo.GetTotalWidth()); mViewInfo.sbarScreen = (int) (mViewInfo.GetScreenWidth()); mViewInfo.sbarH = (int) (mViewInfo.GetBeforeScreenWidth()); SetScrollbar(mViewInfo.sbarH, mViewInfo.sbarScreen, mViewInfo.sbarTotal, mViewInfo.sbarScreen, TRUE); }
void BigScrollBar::SetBigScrollBar(gg_tl_dat position, gg_tl_dat thumbSize, gg_tl_dat range) { m_BigRange = range; if (m_BigRange<20) { m_BigRange=20; } /*TODO: range darf nicht null sein -- erledigt*/ int sbPosition = (int) ( (position*SCROLLBAR_LENGTH)/m_BigRange ); int sbThumbSize = (int) ( (thumbSize*SCROLLBAR_LENGTH)/m_BigRange ); SetScrollbar(sbPosition, sbThumbSize, SCROLLBAR_LENGTH, sbThumbSize); }
void CategoryList::ReCreateScrollBars() { int clientHeight = GetClientSize().GetHeight(); int maxY = clientHeight; for(wxWindowList::Node * node = GetChildren().GetFirst(); node; node = node->GetNext()) { maxY = wxMax(maxY, node->GetData()->GetPosition().y+node->GetData()->GetSize().GetHeight()); } maxY += (maxY <= clientHeight ? 0 : 5); SetScrollbar(wxVERTICAL, 0, clientHeight, maxY); }
void wxJigsawEditorCanvas::AdjustScrollBars() { // image sampled size wxSize imageSize = GetDiagramSize(); // old scroll position wxPoint pt = GetScrollPosition(); if(GetScrollRange(wxHORIZONTAL) != imageSize.x) { SetScrollbar(wxHORIZONTAL, 0, GetClientSize().x, imageSize.x); } if(GetScrollRange(wxVERTICAL) != imageSize.y) { SetScrollbar(wxVERTICAL, 0, GetClientSize().y, imageSize.y); } Scroll(pt); if(m_View) { //wxLogTrace(wxTraceMask(), _("View offset = %i, %i"), pt.x, pt.y); //m_View->SetViewOffset(wxSize(pt.x, pt.y)); } }
// Essentially a float to int conversion. void AttachableScrollBar::SetScrollBarFromViewInfo() { ViewInfo & mViewInfo = *mpViewInfo; mViewInfo.sbarTotal = (int) (mViewInfo.total * mViewInfo.zoom); mViewInfo.sbarScreen = (int) (mViewInfo.screen * mViewInfo.zoom); mViewInfo.sbarH = (int) (mViewInfo.h * mViewInfo.zoom); SetScrollbar(mViewInfo.sbarH, mViewInfo.sbarScreen, mViewInfo.sbarTotal, mViewInfo.sbarScreen, TRUE); mViewInfo.lastZoom = mViewInfo.zoom; }
void wxVScrolledWindow::UpdateScrollbar() { // see how many lines can we fit on screen const wxCoord hWindow = GetClientSize().y; wxCoord h = 0; size_t line; for ( line = m_lineFirst; line < m_lineMax; line++ ) { if ( h > hWindow ) break; h += OnGetLineHeight(line); } // if we still have remaining space below, maybe we can fit everything? if ( h < hWindow ) { wxCoord hAll = h; for ( size_t lineFirst = m_lineFirst; lineFirst > 0; lineFirst-- ) { hAll += OnGetLineHeight(m_lineFirst - 1); if ( hAll > hWindow ) break; } if ( hAll < hWindow ) { // we don't need scrollbar at all RemoveScrollbar(); return; } } m_nVisible = line - m_lineFirst; int pageSize = m_nVisible; if ( h > hWindow ) { // last line is only partially visible, we still need the scrollbar and // so we have to "fix" pageSize because if it is equal to m_lineMax the // scrollbar is not shown at all under MSW pageSize--; } // set the scrollbar parameters to reflect this SetScrollbar(wxVERTICAL, m_lineFirst, pageSize, m_lineMax); }
// Scrollbar bool wxScrollBar::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name) { if ( !CreateControl(parent, id, pos, size, style, validator, name) ) return false; if (!MSWCreateControl(wxT("ScrollBar"), wxEmptyString, pos, size)) return false; SetScrollbar(0, 1, 2, 1, false); return true; }
void cSkinSTTNGDisplayMenu::SetEvent(const cEvent *Event) { if (!Event) return; const cFont *font = cFont::GetFont(fontOsd); int xl = x3 + 5; int y = y3; cTextScroller ts; char t[32]; snprintf(t, sizeof(t), "%s %s - %s", *Event->GetDateString(), *Event->GetTimeString(), *Event->GetEndTimeString()); ts.Set(osd, xl, y, x4 - xl, y4 - y, t, font, Theme.Color(clrMenuEventTime), Theme.Color(clrBackground)); if (Event->Vps() && Event->Vps() != Event->StartTime()) { char *buffer; asprintf(&buffer, " VPS: %s", *Event->GetVpsString()); const cFont *font = cFont::GetFont(fontSml); osd->DrawText(x4 - font->Width(buffer), y, buffer, Theme.Color(clrMenuEventVps), frameColor, font); int yb = y + font->Height(); osd->DrawRectangle(x5, y, x6 - 1, yb - 1, frameColor); osd->DrawEllipse (x6, y, x7 - 1, yb - 1, frameColor, 5); free(buffer); } y += ts.Height(); y += font->Height(); ts.Set(osd, xl, y, x4 - xl, y4 - y, Event->Title(), font, Theme.Color(clrMenuEventTitle), Theme.Color(clrBackground)); y += ts.Height(); if (!isempty(Event->ShortText())) { const cFont *font = cFont::GetFont(fontSml); ts.Set(osd, xl, y, x4 - xl, y4 - y, Event->ShortText(), font, Theme.Color(clrMenuEventShortText), Theme.Color(clrBackground)); y += ts.Height(); } y += font->Height(); if (!isempty(Event->Description())) { int yt = y; int yb = y4 - Roundness; textScroller.Set(osd, xl, yt, x4 - xl, yb - yt, Event->Description(), font, Theme.Color(clrMenuEventDescription), Theme.Color(clrBackground)); yb = yt + textScroller.Height(); osd->DrawEllipse (x1, yt - Roundness, x2, yt, frameColor, -3); osd->DrawRectangle(x1, yt, x2, yb, frameColor); osd->DrawEllipse (x1, yb, x2, yb + Roundness, frameColor, -2); SetScrollbar(); } }
void cSkinSTTNGDisplayMenu::SetRecording(const cRecording *Recording) { if (!Recording) return; const cRecordingInfo *Info = Recording->Info(); const cFont *font = cFont::GetFont(fontOsd); int xl = x3 + 5; int y = y3; cTextScroller ts; char t[32]; snprintf(t, sizeof(t), "%s %s", *DateString(Recording->start), *TimeString(Recording->start)); ts.Set(osd, xl, y, x4 - xl, y4 - y, t, font, Theme.Color(clrMenuEventTime), Theme.Color(clrBackground)); y += ts.Height(); y += font->Height(); const char *Title = Info->Title(); if (isempty(Title)) Title = Recording->Name(); ts.Set(osd, xl, y, x4 - xl, y4 - y, Title, font, Theme.Color(clrMenuEventTitle), Theme.Color(clrBackground)); y += ts.Height(); if (!isempty(Info->ShortText())) { const cFont *font = cFont::GetFont(fontSml); ts.Set(osd, xl, y, x4 - xl, y4 - y, Info->ShortText(), font, Theme.Color(clrMenuEventShortText), Theme.Color(clrBackground)); y += ts.Height(); } y += font->Height(); if (!isempty(Info->Description())) { int yt = y; int yb = y4 - Roundness; textScroller.Set(osd, xl, yt, x4 - xl, yb - yt, Info->Description(), font, Theme.Color(clrMenuEventDescription), Theme.Color(clrBackground)); yb = yt + textScroller.Height(); osd->DrawEllipse (x1, yt - Roundness, x2, yt, frameColor, -3); osd->DrawRectangle(x1, yt, x2, yb, frameColor); osd->DrawEllipse (x1, yb, x2, yb + Roundness, frameColor, -2); SetScrollbar(); } }
SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(0, 7), SetResize(1, 0), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(8, 8, 8), /* Left side. */ NWidget(NWID_VERTICAL), NWidget(NWID_HORIZONTAL), NWidget(NWID_VERTICAL), NWidget(NWID_HORIZONTAL), NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_CHECKBOX), SetMinimalSize(13, 1), SetDataTip(STR_EMPTY, STR_NULL), NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_TYPE), SetDataTip(STR_CONTENT_TYPE_CAPTION, STR_CONTENT_TYPE_CAPTION_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_NAME), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_CONTENT_NAME_CAPTION, STR_CONTENT_NAME_CAPTION_TOOLTIP), EndContainer(), NWidget(WWT_MATRIX, COLOUR_LIGHT_BLUE, WID_NCL_MATRIX), SetResize(1, 14), SetFill(1, 1), SetScrollbar(WID_NCL_SCROLLBAR), SetDataTip(STR_NULL, STR_CONTENT_MATRIX_TOOLTIP), EndContainer(), NWidget(NWID_VSCROLLBAR, COLOUR_LIGHT_BLUE, WID_NCL_SCROLLBAR), EndContainer(), EndContainer(), /* Right side. */ NWidget(NWID_VERTICAL), NWidget(WWT_PANEL, COLOUR_LIGHT_BLUE, WID_NCL_DETAILS), SetResize(1, 1), SetFill(1, 1), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7), NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL), NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL), NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL), EndContainer(), EndContainer(), EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(0, 7), SetResize(1, 0),
static const NWidgetPart _nested_group_widgets[] = { NWidget(NWID_HORIZONTAL), // Window header NWidget(WWT_CLOSEBOX, COLOUR_GREY), NWidget(WWT_CAPTION, COLOUR_GREY, GRP_WIDGET_CAPTION), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), NWidget(NWID_HORIZONTAL), /* left part */ NWidget(NWID_VERTICAL), NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalTextLines(1, WD_DROPDOWNTEXT_TOP + WD_DROPDOWNTEXT_BOTTOM), SetFill(1, 0), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY, GRP_WIDGET_ALL_VEHICLES), SetMinimalSize(200, 13), SetFill(1, 0), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY, GRP_WIDGET_DEFAULT_VEHICLES), SetMinimalSize(200, 13), SetFill(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_MATRIX, COLOUR_GREY, GRP_WIDGET_LIST_GROUP), SetMinimalSize(188, 0), SetDataTip(0x701, STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP), SetFill(1, 0), SetResize(0, 1), SetScrollbar(GRP_WIDGET_LIST_GROUP_SCROLLBAR), NWidget(NWID_VSCROLLBAR, COLOUR_GREY, GRP_WIDGET_LIST_GROUP_SCROLLBAR), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY, GRP_WIDGET_GROUP_INFO), SetMinimalSize(200, 25), SetFill(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, GRP_WIDGET_CREATE_GROUP), SetMinimalSize(24, 25), SetFill(0, 1), SetDataTip(SPR_GROUP_CREATE_TRAIN, STR_GROUP_CREATE_TOOLTIP), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, GRP_WIDGET_DELETE_GROUP), SetMinimalSize(24, 25), SetFill(0, 1), SetDataTip(SPR_GROUP_DELETE_TRAIN, STR_GROUP_DELETE_TOOLTIP), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, GRP_WIDGET_RENAME_GROUP), SetMinimalSize(24, 25), SetFill(0, 1), SetDataTip(SPR_GROUP_RENAME_TRAIN, STR_GROUP_RENAME_TOOLTIP), NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(92, 25), SetFill(1, 1), EndContainer(), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, GRP_WIDGET_REPLACE_PROTECTION), SetMinimalSize(24, 25), SetFill(0, 1), SetDataTip(SPR_GROUP_REPLACE_OFF_TRAIN, STR_GROUP_REPLACE_PROTECTION_TOOLTIP), NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(12, 25), SetFill(0, 1), EndContainer(), EndContainer(),
} this->SelectOtherObject(-1); } }; static const NWidgetPart _nested_build_object_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), NWidget(WWT_CAPTION, COLOUR_DARK_GREEN), SetDataTip(STR_OBJECT_BUILD_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(WWT_DEFSIZEBOX, COLOUR_DARK_GREEN), EndContainer(), NWidget(WWT_PANEL, COLOUR_DARK_GREEN), NWidget(NWID_HORIZONTAL), SetPadding(2, 0, 0, 0), NWidget(NWID_VERTICAL), NWidget(NWID_HORIZONTAL), SetPadding(0, 5, 2, 5), NWidget(WWT_MATRIX, COLOUR_GREY, WID_BO_CLASS_LIST), SetFill(1, 0), SetMatrixDataTip(1, 0, STR_OBJECT_BUILD_CLASS_TOOLTIP), SetScrollbar(WID_BO_SCROLLBAR), NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_BO_SCROLLBAR), EndContainer(), NWidget(NWID_HORIZONTAL), SetPadding(0, 5, 0, 5), NWidget(NWID_MATRIX, COLOUR_DARK_GREEN, WID_BO_OBJECT_MATRIX), SetPIP(0, 2, 0), NWidget(WWT_PANEL, COLOUR_GREY, WID_BO_OBJECT_SPRITE), SetDataTip(0x0, STR_OBJECT_BUILD_PREVIEW_TOOLTIP), EndContainer(), EndContainer(), EndContainer(), NWidget(WWT_TEXT, COLOUR_DARK_GREEN, WID_BO_OBJECT_NAME), SetDataTip(STR_ORANGE_STRING, STR_NULL), SetPadding(2, 5, 2, 5), NWidget(WWT_TEXT, COLOUR_DARK_GREEN, WID_BO_OBJECT_SIZE), SetDataTip(STR_OBJECT_BUILD_SIZE, STR_NULL), SetPadding(2, 5, 2, 5), EndContainer(), NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetScrollbar(WID_BO_SELECT_SCROLL), NWidget(NWID_HORIZONTAL), NWidget(NWID_MATRIX, COLOUR_DARK_GREEN, WID_BO_SELECT_MATRIX), SetFill(0, 1), SetPIP(0, 2, 0), NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BO_SELECT_IMAGE), SetMinimalSize(66, 60), SetDataTip(0x0, STR_OBJECT_BUILD_TOOLTIP), SetFill(0, 0), SetResize(0, 0), SetScrollbar(WID_BO_SELECT_SCROLL),
TWA_COMMAND_LIST, ///< List of commands for the player. TWA_SCROLLBAR, TWA_ACTION_INFO, ///< Additional information about the action. TWA_EXECUTE, ///< Do-it button. }; static const NWidgetPart _nested_town_authority_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_BROWN), NWidget(WWT_CAPTION, COLOUR_BROWN, TWA_CAPTION), SetDataTip(STR_LOCAL_AUTHORITY_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(WWT_SHADEBOX, COLOUR_BROWN), NWidget(WWT_STICKYBOX, COLOUR_BROWN), EndContainer(), NWidget(WWT_PANEL, COLOUR_BROWN, TWA_RATING_INFO), SetMinimalSize(317, 92), SetResize(1, 1), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_PANEL, COLOUR_BROWN, TWA_COMMAND_LIST), SetMinimalSize(305, 52), SetResize(1, 0), SetDataTip(0x0, STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP), SetScrollbar(TWA_SCROLLBAR), EndContainer(), NWidget(NWID_VSCROLLBAR, COLOUR_BROWN, TWA_SCROLLBAR), EndContainer(), NWidget(WWT_PANEL, COLOUR_BROWN, TWA_ACTION_INFO), SetMinimalSize(317, 52), SetResize(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, TWA_EXECUTE), SetMinimalSize(317, 12), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_LOCAL_AUTHORITY_DO_IT_BUTTON, STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP), NWidget(WWT_RESIZEBOX, COLOUR_BROWN), EndContainer() }; /** Town authority window. */ struct TownAuthorityWindow : Window { private: Town *town; ///< Town being displayed. int sel_index; ///< Currently selected town action, \c 0 to \c TACT_COUNT-1, \c -1 means no action selected. Scrollbar *vscroll;
NWidget(NWID_HORIZONTAL), // Window header NWidget(WWT_CLOSEBOX, COLOUR_GREY), NWidget(WWT_CAPTION, COLOUR_GREY, WID_GL_CAPTION), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), NWidget(NWID_HORIZONTAL), /* left part */ NWidget(NWID_VERTICAL), NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalTextLines(1, WD_DROPDOWNTEXT_TOP + WD_DROPDOWNTEXT_BOTTOM), SetFill(1, 0), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY, WID_GL_ALL_VEHICLES), SetFill(1, 0), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY, WID_GL_DEFAULT_VEHICLES), SetFill(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_MATRIX, COLOUR_GREY, WID_GL_LIST_GROUP), SetMatrixDataTip(1, 0, STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP), SetFill(1, 0), SetResize(0, 1), SetScrollbar(WID_GL_LIST_GROUP_SCROLLBAR), NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_GL_LIST_GROUP_SCROLLBAR), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_CREATE_GROUP), SetFill(0, 1), SetDataTip(SPR_GROUP_CREATE_TRAIN, STR_GROUP_CREATE_TOOLTIP), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_DELETE_GROUP), SetFill(0, 1), SetDataTip(SPR_GROUP_DELETE_TRAIN, STR_GROUP_DELETE_TOOLTIP), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_RENAME_GROUP), SetFill(0, 1), SetDataTip(SPR_GROUP_RENAME_TRAIN, STR_GROUP_RENAME_TOOLTIP), NWidget(WWT_PANEL, COLOUR_GREY), SetFill(1, 1), EndContainer(), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_REPLACE_PROTECTION), SetFill(0, 1), SetDataTip(SPR_GROUP_REPLACE_OFF_TRAIN, STR_GROUP_REPLACE_PROTECTION_TOOLTIP), EndContainer(), EndContainer(), /* right part */
this->vscroll->SetCount((int)this->ai_info_list->size() + 1); /* selected goes from -1 .. length of ai list - 1. */ this->selected = min(this->selected, this->vscroll->GetCount() - 2); } }; /** Widgets for the AI list window. */ static const NWidgetPart _nested_ai_list_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_MAUVE), NWidget(WWT_CAPTION, COLOUR_MAUVE), SetDataTip(STR_AI_LIST_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_MATRIX, COLOUR_MAUVE, AIL_WIDGET_LIST), SetMinimalSize(188, 112), SetFill(1, 1), SetResize(1, 1), SetDataTip(0x501, STR_AI_LIST_TOOLTIP), SetScrollbar(AIL_WIDGET_SCROLLBAR), NWidget(NWID_VSCROLLBAR, COLOUR_MAUVE, AIL_WIDGET_SCROLLBAR), EndContainer(), NWidget(WWT_PANEL, COLOUR_MAUVE, AIL_WIDGET_INFO_BG), SetMinimalTextLines(8, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM), SetResize(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_PUSHTXTBTN, COLOUR_MAUVE, AIL_WIDGET_ACCEPT), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_AI_LIST_ACCEPT, STR_AI_LIST_ACCEPT_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_MAUVE, AIL_WIDGET_CANCEL), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_AI_LIST_CANCEL, STR_AI_LIST_CANCEL_TOOLTIP), EndContainer(), NWidget(WWT_RESIZEBOX, COLOUR_MAUVE), EndContainer(), }; /** Window definition for the ai list window. */ static const WindowDesc _ai_list_desc(
void DocHistory::DrawLayout(wxDC& dc) { if (!IsShown()) { // Sometimes OnSize() might get called while control is hidden m_needRedrawing = true; return; } const wxSize size = GetClientSize(); wxRect rect; if (m_isScrolling) { // If there is overlap, then move the image if (m_scrollPos + size.y > m_oldScrollPos && m_scrollPos < m_oldScrollPos + size.y) { const int top = wxMax(m_scrollPos, m_oldScrollPos); const int bottom = wxMin(m_scrollPos, m_oldScrollPos) + size.y; const int overlap_height = bottom - top; m_mdc.Blit(0, (top - m_oldScrollPos) + (m_oldScrollPos - m_scrollPos), size.x, overlap_height, &m_mdc, 0, top - m_oldScrollPos); const int new_height = size.y - overlap_height; const int newtop = (top == m_scrollPos) ? bottom : m_scrollPos; rect = wxRect(0,newtop,size.x,new_height); // Just redraw the revealed part } else { rect = wxRect(0,m_scrollPos,size.x,size.y); } SetScrollPos(wxVERTICAL, m_scrollPos); m_isScrolling = false; } else { // Check if we need a scrollbar bool hasScroll = (GetScrollThumb(wxVERTICAL) != 0); if (m_treeHeight > size.y) { SetScrollbar(wxVERTICAL, m_scrollPos, size.y, m_treeHeight); if (!hasScroll) return; // have sent a size event } else { SetScrollbar(wxVERTICAL, 0, 0, 0); if (hasScroll) return; // have sent a size event } // Can we make room for more of the history? if (m_scrollPos + size.y > m_treeHeight) { m_scrollPos = wxMax(0, m_treeHeight-size.y); } rect = wxRect(0, m_scrollPos, size.x, size.y); } // Resize & scroll the versiontree wxSize timelinesize = m_pTimeline->GetBestSize(); wxSize treesize = m_pTree->GetBestSize(); if (timelinesize.x + treesize.x >= size.x) { timelinesize.x = treesize.x = size.x / 3; } m_pTimeline->Move(0, 0); m_pTimeline->SetSize(wxSize(timelinesize.x, size.y)); m_pTimeline->Scroll(m_scrollPos); m_pTimeline->ReDraw(); // Resize & scroll the versiontree (positioned right of Timeline) m_pTree->Move(timelinesize.x, 0); m_pTree->SetSize(wxSize(treesize.x, size.y)); m_pTree->Scroll(m_scrollPos); m_xposDesc = timelinesize.x + treesize.x; const int textwidth = size.x - m_xposDesc; rect = wxRect(m_xposDesc, rect.y, textwidth, rect.height); // resize the bitmap used for doublebuffering if (m_bitmap.GetWidth() < textwidth || m_bitmap.GetHeight() < size.y) { m_bitmap = wxBitmap(textwidth, size.y); m_mdc.SelectObject(m_bitmap); } // Draw the description area // Notice that the memDc is moved so that m_xposDesc=0 { // Clear the background m_mdc.SetBrush(bgBrush); m_mdc.SetPen(*wxWHITE_PEN); m_mdc.DrawRectangle(0, rect.y - m_scrollPos, textwidth, rect.height); // Find the first visible node unsigned int i; for (i = 0; i < m_items.size(); ++i) { if (m_items[i].ypos+m_lineHeight >= rect.y) break; } const int ybottom = m_scrollPos + size.y; // Draw Label & Description m_mdc.SetTextForeground(*wxBLACK); const int textindent = 3; cxLOCK_READ(m_catalyst) while (i < m_items.size() && m_items[i].ypos < ybottom) { wxString label = catalyst.GetLabel(m_items[i].doc); if (!label.empty()) { label = label.BeforeFirst('\n'); label += wxT(": "); } int x; int y; m_mdc.GetTextExtent(label, &x, &y); m_mdc.DrawText(label, textindent, m_items[i].ypos-m_scrollPos); wxString desc = catalyst.GetDescription(m_items[i].doc); desc = desc.BeforeFirst('\n'); m_mdc.DrawText(desc, textindent+x, m_items[i].ypos-m_scrollPos); ++i; } cxENDLOCK } // Copy MemoryDC to Display dc.Blit(m_xposDesc, 0, textwidth, size.y, &m_mdc, 0, 0); m_needRedrawing = false; }
void cSkinSTTNGDisplayMenu::SetText(const char *Text, bool FixedFont) { textScroller.Set(osd, x3, y3, GetTextAreaWidth(), y4 - y3, Text, GetTextAreaFont(FixedFont), Theme.Color(clrMenuText), Theme.Color(clrBackground)); SetScrollbar(); }
void cSkinSTTNGDisplayMenu::Scroll(bool Up, bool Page) { cSkinDisplayMenu::Scroll(Up, Page); SetScrollbar(); }
void wxScrollBar::SetRange(int range) { SetScrollbar(GetThumbPosition(), GetThumbSize(), range, GetPageSize()); }
HOTKEY_LIST_END }; HotkeyList SignListWindow::hotkeys("signlist", signlist_hotkeys, SignListGlobalHotkeys); static const NWidgetPart _nested_sign_list_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), NWidget(WWT_CAPTION, COLOUR_GREY, WID_SIL_CAPTION), SetDataTip(STR_SIGN_LIST_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(NWID_VERTICAL), NWidget(WWT_PANEL, COLOUR_GREY, WID_SIL_LIST), SetMinimalSize(WD_FRAMETEXT_LEFT + 16 + 255 + WD_FRAMETEXT_RIGHT, 50), SetResize(1, 10), SetFill(1, 0), SetScrollbar(WID_SIL_SCROLLBAR), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_PANEL, COLOUR_GREY), SetFill(1, 1), NWidget(WWT_EDITBOX, COLOUR_GREY, WID_SIL_FILTER_TEXT), SetMinimalSize(80, 12), SetResize(1, 0), SetFill(1, 0), SetPadding(2, 2, 2, 2), SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), EndContainer(), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SIL_FILTER_MATCH_CASE_BTN), SetDataTip(STR_SIGN_LIST_MATCH_CASE, STR_SIGN_LIST_MATCH_CASE_TOOLTIP), EndContainer(), EndContainer(), NWidget(NWID_VERTICAL), NWidget(NWID_VERTICAL), SetFill(0, 1), NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_SIL_SCROLLBAR), EndContainer(), NWidget(WWT_RESIZEBOX, COLOUR_GREY), EndContainer(), EndContainer(),
EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), NWidget(NWID_HORIZONTAL), NWidget(NWID_VERTICAL), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_BV_SORT_ASSENDING_DESCENDING), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), NWidget(NWID_SPACER), SetFill(1, 1), EndContainer(), NWidget(NWID_VERTICAL), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_BV_SORT_DROPDOWN), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_SORT_CRITERIA), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_BV_CARGO_FILTER_DROPDOWN), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_FILTER_CRITERIA), EndContainer(), EndContainer(), EndContainer(), /* Vehicle list. */ NWidget(NWID_HORIZONTAL), NWidget(WWT_MATRIX, COLOUR_GREY, WID_BV_LIST), SetResize(1, 1), SetFill(1, 0), SetDataTip(0x101, STR_NULL), SetScrollbar(WID_BV_SCROLLBAR), NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_BV_SCROLLBAR), EndContainer(), /* Panel with details. */ NWidget(WWT_PANEL, COLOUR_GREY, WID_BV_PANEL), SetMinimalSize(240, 122), SetResize(1, 0), EndContainer(), /* Build/rename buttons, resize button. */ NWidget(NWID_HORIZONTAL), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BV_BUILD_SEL), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_BV_BUILD), SetResize(1, 0), SetFill(1, 0), EndContainer(), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_BV_RENAME), SetResize(1, 0), SetFill(1, 0), NWidget(WWT_RESIZEBOX, COLOUR_GREY), EndContainer(), }; /** Special cargo filter criteria */
DropDownListItem *item = *it; delete item; } delete list; } /** Widget numbers of the dropdown menu. */ enum DropdownMenuWidgets { DDM_ITEMS, ///< Panel showing the dropdown items. DDM_SHOW_SCROLL, ///< Hide scrollbar if too few items. DDM_SCROLL, ///< Scrollbar. }; static const NWidgetPart _nested_dropdown_menu_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_PANEL, COLOUR_END, DDM_ITEMS), SetMinimalSize(1, 1), SetScrollbar(DDM_SCROLL), EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, DDM_SHOW_SCROLL), NWidget(NWID_VSCROLLBAR, COLOUR_END, DDM_SCROLL), EndContainer(), EndContainer(), }; const WindowDesc _dropdown_desc( WDP_MANUAL, 0, 0, WC_DROPDOWN_MENU, WC_NONE, 0, _nested_dropdown_menu_widgets, lengthof(_nested_dropdown_menu_widgets) ); /** Drop-down menu window */ struct DropdownWindow : Window {
{ this->GetWidget<NWidgetStacked>(WID_VT_ARRIVAL_DEPARTURE_SELECTION)->SetDisplayedPlane(_settings_client.gui.timetable_arrival_departure ? 0 : SZSP_NONE); this->GetWidget<NWidgetStacked>(WID_VT_EXPECTED_SELECTION)->SetDisplayedPlane(_settings_client.gui.timetable_arrival_departure ? 0 : 1); } }; static const NWidgetPart _nested_timetable_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), NWidget(WWT_CAPTION, COLOUR_GREY, WID_VT_CAPTION), SetDataTip(STR_TIMETABLE_TITLE, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_ORDER_VIEW), SetMinimalSize(61, 14), SetDataTip( STR_TIMETABLE_ORDER_VIEW, STR_TIMETABLE_ORDER_VIEW_TOOLTIP), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_PANEL, COLOUR_GREY, WID_VT_TIMETABLE_PANEL), SetMinimalSize(388, 82), SetResize(1, 10), SetDataTip(STR_NULL, STR_TIMETABLE_TOOLTIP), SetScrollbar(WID_VT_SCROLLBAR), EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_VT_ARRIVAL_DEPARTURE_SELECTION), NWidget(WWT_PANEL, COLOUR_GREY, WID_VT_ARRIVAL_DEPARTURE_PANEL), SetMinimalSize(110, 0), SetFill(0, 1), SetDataTip(STR_NULL, STR_TIMETABLE_TOOLTIP), SetScrollbar(WID_VT_SCROLLBAR), EndContainer(), EndContainer(), NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_VT_SCROLLBAR), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY, WID_VT_SUMMARY_PANEL), SetMinimalSize(400, 22), SetResize(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(NWID_VERTICAL, NC_EQUALSIZE), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_CHANGE_TIME), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_TIMETABLE_CHANGE_TIME, STR_TIMETABLE_WAIT_TIME_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_CLEAR_TIME), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_TIMETABLE_CLEAR_TIME, STR_TIMETABLE_CLEAR_TIME_TOOLTIP), EndContainer(), NWidget(NWID_VERTICAL, NC_EQUALSIZE), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_CHANGE_SPEED), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_TIMETABLE_CHANGE_SPEED, STR_TIMETABLE_CHANGE_SPEED_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_CLEAR_SPEED), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_TIMETABLE_CLEAR_SPEED, STR_TIMETABLE_CLEAR_SPEED_TOOLTIP),
void wxScrollBar::SetPageSize( int pageLength ) { SetScrollbar(GetThumbPosition(), GetThumbSize(), GetRange(), pageLength); }