Mercurial > hg > openttd
changeset 9196:7f58b98c86c5 draft
(svn r13062) -Codechange: make a class of the TransparencyToolbar.
author | belugas <belugas@openttd.org> |
---|---|
date | Tue, 13 May 2008 00:37:29 +0000 |
parents | 35451e3679a6 |
children | 7b6607adc42d |
files | src/transparency_gui.cpp |
diffstat | 1 files changed, 70 insertions(+), 66 deletions(-) [+] |
line wrap: on
line diff
--- a/src/transparency_gui.cpp +++ b/src/transparency_gui.cpp @@ -17,82 +17,86 @@ TransparencyOptionBits _transparency_lock; TransparencyOptionBits _invisibility_opt; -enum TransparencyToolbarWidgets{ - TTW_WIDGET_SIGNS = 3, ///< Make signs background transparent - TTW_WIDGET_TREES, ///< Make trees transparent - TTW_WIDGET_HOUSES, ///< Make houses transparent - TTW_WIDGET_INDUSTRIES, ///< Make Industries transparent - TTW_WIDGET_BUILDINGS, ///< Make player buildings and structures transparent - TTW_WIDGET_BRIDGES, ///< Make bridges transparent - TTW_WIDGET_STRUCTURES, ///< Make unmovable structures transparent - TTW_WIDGET_CATENARY, ///< Make catenary transparent - TTW_WIDGET_LOADING, ///< Make loading indicators transparent - TTW_WIDGET_END, ///< End of toggle buttons +class TransparenciesWindow : public Window +{ + enum TransparencyToolbarWidgets{ + TTW_WIDGET_SIGNS = 3, ///< Make signs background transparent + TTW_WIDGET_TREES, ///< Make trees transparent + TTW_WIDGET_HOUSES, ///< Make houses transparent + TTW_WIDGET_INDUSTRIES, ///< Make Industries transparent + TTW_WIDGET_BUILDINGS, ///< Make player buildings and structures transparent + TTW_WIDGET_BRIDGES, ///< Make bridges transparent + TTW_WIDGET_STRUCTURES, ///< Make unmovable structures transparent + TTW_WIDGET_CATENARY, ///< Make catenary transparent + TTW_WIDGET_LOADING, ///< Make loading indicators transparent + TTW_WIDGET_END, ///< End of toggle buttons + + /* Panel with buttons for invisibility */ + TTW_BUTTONS = 12, ///< Panel with 'invisibility' buttons + }; - /* Panel with buttons for invisibility */ - TTW_BUTTONS = 12, ///< Panel with 'invisibility' buttons -}; +public: + TransparenciesWindow(const WindowDesc *desc, void *data, int window_number) : Window(desc, data, window_number) + { + this->FindWindowPlacementAndResize(desc); + } -static void TransparencyToolbWndProc(Window *w, WindowEvent *e) -{ - switch (e->event) { - case WE_PAINT: - /* must be sure that the widgets show the transparency variable changes - * also when we use shortcuts */ - for (uint i = TTW_WIDGET_SIGNS; i < TTW_WIDGET_END; i++) { - w->SetWidgetLoweredState(i, IsTransparencySet((TransparencyOption)(i - TTW_WIDGET_SIGNS))); - } + virtual void OnPaint() + { + /* must be sure that the widgets show the transparency variable changes + * also when we use shortcuts */ + for (uint i = TTW_WIDGET_SIGNS; i < TTW_WIDGET_END; i++) { + this->SetWidgetLoweredState(i, IsTransparencySet((TransparencyOption)(i - TTW_WIDGET_SIGNS))); + } - DrawWindowWidgets(w); - for (uint i = TO_SIGNS; i < TO_END; i++) { - if (HasBit(_transparency_lock, i)) DrawSprite(SPR_LOCK, PAL_NONE, w->widget[TTW_WIDGET_SIGNS + i].left + 1, w->widget[TTW_WIDGET_SIGNS + i].top + 1); - } + DrawWindowWidgets(this); + for (uint i = TO_SIGNS; i < TO_END; i++) { + if (HasBit(_transparency_lock, i)) DrawSprite(SPR_LOCK, PAL_NONE, this->widget[TTW_WIDGET_SIGNS + i].left + 1, this->widget[TTW_WIDGET_SIGNS + i].top + 1); + } - /* Do not draw button for invisible loading indicators */ - for (uint i = 0; i < 8; i++) { - if (i < TTW_WIDGET_BRIDGES - TTW_WIDGET_SIGNS) { - DrawFrameRect(i * 22, 38, i * 22 + 19, 46, true, HasBit(_invisibility_opt, i) ? FR_LOWERED : FR_NONE); - } else if (i == TTW_WIDGET_BRIDGES - TTW_WIDGET_SIGNS) { - DrawFrameRect(i * 22, 38, i * 22 + 41, 46, true, HasBit(_invisibility_opt, i) ? FR_LOWERED : FR_NONE); - } else { // i > TTW_WIDGET_BRIDGES - TTW_WIDGET_SIGNS - DrawFrameRect((i + 1) * 22, 38, (i + 1) * 22 + 19, 46, true, HasBit(_invisibility_opt, i) ? FR_LOWERED : FR_NONE); - } + /* Do not draw button for invisible loading indicators */ + for (uint i = 0; i < 8; i++) { + if (i < TTW_WIDGET_BRIDGES - TTW_WIDGET_SIGNS) { + DrawFrameRect(i * 22, 38, i * 22 + 19, 46, true, HasBit(_invisibility_opt, i) ? FR_LOWERED : FR_NONE); + } else if (i == TTW_WIDGET_BRIDGES - TTW_WIDGET_SIGNS) { + DrawFrameRect(i * 22, 38, i * 22 + 41, 46, true, HasBit(_invisibility_opt, i) ? FR_LOWERED : FR_NONE); + } else { // i > TTW_WIDGET_BRIDGES - TTW_WIDGET_SIGNS + DrawFrameRect((i + 1) * 22, 38, (i + 1) * 22 + 19, 46, true, HasBit(_invisibility_opt, i) ? FR_LOWERED : FR_NONE); } - - break; + } + } - case WE_CLICK: - if (e->we.click.widget >= TTW_WIDGET_SIGNS && e->we.click.widget < TTW_WIDGET_END) { - if (_ctrl_pressed) { - /* toggle the bit of the transparencies lock variable */ - ToggleTransparencyLock((TransparencyOption)(e->we.click.widget - TTW_WIDGET_SIGNS)); - w->SetDirty(); - } else { - /* toggle the bit of the transparencies variable and play a sound */ - ToggleTransparency((TransparencyOption)(e->we.click.widget - TTW_WIDGET_SIGNS)); - SndPlayFx(SND_15_BEEP); - MarkWholeScreenDirty(); - } - } else if (e->we.click.widget == TTW_BUTTONS) { - uint x = e->we.click.pt.x / 22; + virtual void OnClick(Point pt, int widget) + { + if (widget >= TTW_WIDGET_SIGNS && widget < TTW_WIDGET_END) { + if (_ctrl_pressed) { + /* toggle the bit of the transparencies lock variable */ + ToggleTransparencyLock((TransparencyOption)(widget - TTW_WIDGET_SIGNS)); + this->SetDirty(); + } else { + /* toggle the bit of the transparencies variable and play a sound */ + ToggleTransparency((TransparencyOption)(widget - TTW_WIDGET_SIGNS)); + SndPlayFx(SND_15_BEEP); + MarkWholeScreenDirty(); + } + } else if (widget == TTW_BUTTONS) { + uint x = pt.x / 22; - if (x > TTW_WIDGET_BRIDGES - TTW_WIDGET_SIGNS) x--; - if (x > TTW_WIDGET_CATENARY - TTW_WIDGET_SIGNS) break; + if (x > TTW_WIDGET_BRIDGES - TTW_WIDGET_SIGNS) x--; + if (x > TTW_WIDGET_CATENARY - TTW_WIDGET_SIGNS) return; - ToggleInvisibility((TransparencyOption)x); - SndPlayFx(SND_15_BEEP); + ToggleInvisibility((TransparencyOption)x); + SndPlayFx(SND_15_BEEP); - /* Redraw whole screen only if transparency is set */ - if (IsTransparencySet((TransparencyOption)x)) { - MarkWholeScreenDirty(); - } else { - w->InvalidateWidget(TTW_BUTTONS); - } + /* Redraw whole screen only if transparency is set */ + if (IsTransparencySet((TransparencyOption)x)) { + MarkWholeScreenDirty(); + } else { + this->InvalidateWidget(TTW_BUTTONS); } - - break; + } } -} +}; static const Widget _transparency_widgets[] = { { WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, @@ -126,5 +130,5 @@ void ShowTransparencyToolbar(void) { - AllocateWindowDescFront<Window>(&_transparency_desc, 0); + AllocateWindowDescFront<TransparenciesWindow>(&_transparency_desc, 0); }