1
0
Fork 0

(svn r13062) -Codechange: make a class of the TransparencyToolbar.

release/0.7
belugas 2008-05-13 00:37:29 +00:00
parent ca4d92e2f2
commit 6c0d2b9132
1 changed files with 77 additions and 73 deletions

View File

@ -17,6 +17,8 @@ TransparencyOptionBits _transparency_opt;
TransparencyOptionBits _transparency_lock; TransparencyOptionBits _transparency_lock;
TransparencyOptionBits _invisibility_opt; TransparencyOptionBits _invisibility_opt;
class TransparenciesWindow : public Window
{
enum TransparencyToolbarWidgets{ enum TransparencyToolbarWidgets{
TTW_WIDGET_SIGNS = 3, ///< Make signs background transparent TTW_WIDGET_SIGNS = 3, ///< Make signs background transparent
TTW_WIDGET_TREES, ///< Make trees transparent TTW_WIDGET_TREES, ///< Make trees transparent
@ -33,19 +35,23 @@ enum TransparencyToolbarWidgets{
TTW_BUTTONS = 12, ///< Panel with 'invisibility' buttons TTW_BUTTONS = 12, ///< Panel with 'invisibility' buttons
}; };
static void TransparencyToolbWndProc(Window *w, WindowEvent *e) public:
TransparenciesWindow(const WindowDesc *desc, void *data, int window_number) : Window(desc, data, window_number)
{
this->FindWindowPlacementAndResize(desc);
}
virtual void OnPaint()
{ {
switch (e->event) {
case WE_PAINT:
/* must be sure that the widgets show the transparency variable changes /* must be sure that the widgets show the transparency variable changes
* also when we use shortcuts */ * also when we use shortcuts */
for (uint i = TTW_WIDGET_SIGNS; i < TTW_WIDGET_END; i++) { for (uint i = TTW_WIDGET_SIGNS; i < TTW_WIDGET_END; i++) {
w->SetWidgetLoweredState(i, IsTransparencySet((TransparencyOption)(i - TTW_WIDGET_SIGNS))); this->SetWidgetLoweredState(i, IsTransparencySet((TransparencyOption)(i - TTW_WIDGET_SIGNS)));
} }
DrawWindowWidgets(w); DrawWindowWidgets(this);
for (uint i = TO_SIGNS; i < TO_END; i++) { 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); 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 */ /* Do not draw button for invisible loading indicators */
@ -58,26 +64,26 @@ static void TransparencyToolbWndProc(Window *w, WindowEvent *e)
DrawFrameRect((i + 1) * 22, 38, (i + 1) * 22 + 19, 46, true, HasBit(_invisibility_opt, i) ? FR_LOWERED : FR_NONE); DrawFrameRect((i + 1) * 22, 38, (i + 1) * 22 + 19, 46, true, HasBit(_invisibility_opt, i) ? FR_LOWERED : FR_NONE);
} }
} }
}
break; virtual void OnClick(Point pt, int widget)
{
case WE_CLICK: if (widget >= TTW_WIDGET_SIGNS && widget < TTW_WIDGET_END) {
if (e->we.click.widget >= TTW_WIDGET_SIGNS && e->we.click.widget < TTW_WIDGET_END) {
if (_ctrl_pressed) { if (_ctrl_pressed) {
/* toggle the bit of the transparencies lock variable */ /* toggle the bit of the transparencies lock variable */
ToggleTransparencyLock((TransparencyOption)(e->we.click.widget - TTW_WIDGET_SIGNS)); ToggleTransparencyLock((TransparencyOption)(widget - TTW_WIDGET_SIGNS));
w->SetDirty(); this->SetDirty();
} else { } else {
/* toggle the bit of the transparencies variable and play a sound */ /* toggle the bit of the transparencies variable and play a sound */
ToggleTransparency((TransparencyOption)(e->we.click.widget - TTW_WIDGET_SIGNS)); ToggleTransparency((TransparencyOption)(widget - TTW_WIDGET_SIGNS));
SndPlayFx(SND_15_BEEP); SndPlayFx(SND_15_BEEP);
MarkWholeScreenDirty(); MarkWholeScreenDirty();
} }
} else if (e->we.click.widget == TTW_BUTTONS) { } else if (widget == TTW_BUTTONS) {
uint x = e->we.click.pt.x / 22; uint x = pt.x / 22;
if (x > TTW_WIDGET_BRIDGES - TTW_WIDGET_SIGNS) x--; if (x > TTW_WIDGET_BRIDGES - TTW_WIDGET_SIGNS) x--;
if (x > TTW_WIDGET_CATENARY - TTW_WIDGET_SIGNS) break; if (x > TTW_WIDGET_CATENARY - TTW_WIDGET_SIGNS) return;
ToggleInvisibility((TransparencyOption)x); ToggleInvisibility((TransparencyOption)x);
SndPlayFx(SND_15_BEEP); SndPlayFx(SND_15_BEEP);
@ -86,13 +92,11 @@ static void TransparencyToolbWndProc(Window *w, WindowEvent *e)
if (IsTransparencySet((TransparencyOption)x)) { if (IsTransparencySet((TransparencyOption)x)) {
MarkWholeScreenDirty(); MarkWholeScreenDirty();
} else { } else {
w->InvalidateWidget(TTW_BUTTONS); this->InvalidateWidget(TTW_BUTTONS);
} }
} }
break;
}
} }
};
static const Widget _transparency_widgets[] = { static const Widget _transparency_widgets[] = {
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, { WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
@ -126,5 +130,5 @@ static const WindowDesc _transparency_desc = {
void ShowTransparencyToolbar(void) void ShowTransparencyToolbar(void)
{ {
AllocateWindowDescFront<Window>(&_transparency_desc, 0); AllocateWindowDescFront<TransparenciesWindow>(&_transparency_desc, 0);
} }