(svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
buttons depending on calling window, game-mode); handle it by broadcasting messages
to the calling window, because that knows how and what buttons to set.
--- a/genworld.c Tue Nov 07 13:01:36 2006 +0000
+++ b/genworld.c Tue Nov 07 13:06:02 2006 +0000
@@ -260,14 +260,11 @@
ShowGenerateWorldProgress();
}
- /* Zoom out and center on the map (is pretty ;)) */
+ /* Hide vital windows, because we don't allow to use them */
+ if (_gw.thread != NULL) HideVitalWindows();
+
+ /* Centre the view on the map */
if (FindWindowById(WC_MAIN_WINDOW, 0) != NULL) {
- while (DoZoomInOutWindow(ZOOM_OUT, FindWindowById(WC_MAIN_WINDOW, 0) ) ) {}
ScrollMainWindowToTile(TileXY(MapSizeX() / 2, MapSizeY() / 2));
}
-
- /* Hide vital windows, because we don't allow to use them */
- /* XXX -- Ideal it is done after ShowGenerateWorldProgress, but stupid
- * enough, DoZoomInOutWindow _needs_ the toolbar to exist... */
- if (_gw.thread != NULL) HideVitalWindows();
}
--- a/main_gui.c Tue Nov 07 13:01:36 2006 +0000
+++ b/main_gui.c Tue Nov 07 13:06:02 2006 +0000
@@ -855,15 +855,8 @@
bool DoZoomInOutWindow(int how, Window *w)
{
ViewPort *vp;
- int button;
-
- switch (_game_mode) {
- case GM_EDITOR: button = 9; break;
- case GM_NORMAL: button = 17; break;
- default: return false;
- }
-
- assert(w);
+
+ assert(w != NULL);
vp = w->viewport;
switch (how) {
@@ -890,31 +883,8 @@
}
SetWindowDirty(w);
-
- // routine to disable/enable the zoom buttons. Didn't know where to place these otherwise
- {
- Window *wt = NULL;
-
- switch (w->window_class) {
- case WC_MAIN_WINDOW:
- wt = FindWindowById(WC_MAIN_TOOLBAR, 0);
- break;
-
- case WC_EXTRA_VIEW_PORT:
- wt = FindWindowById(WC_EXTRA_VIEW_PORT, w->window_number);
- button = 5;
- break;
- }
-
- assert(wt);
-
- // update the toolbar button too
- SetWindowWidgetDisabledState(wt, button, vp->zoom == 0);
- SetWindowWidgetDisabledState(wt, button + 1, vp->zoom == 2);
-
- SetWindowDirty(wt);
- }
-
+ /* Update the windows that have zoom-buttons to perhaps disable their buttons */
+ SendWindowMessageClass(w->window_class, how, w->window_number, 0);
return true;
}
@@ -1891,6 +1861,10 @@
}
break;
}
+
+ case WE_MESSAGE:
+ HandleZoomMessage(w, FindWindowById(WC_MAIN_WINDOW, 0)->viewport, 17, 18);
+ break;
}
}
@@ -2078,6 +2052,9 @@
}
break;
+ case WE_MESSAGE:
+ HandleZoomMessage(w, FindWindowById(WC_MAIN_WINDOW, 0)->viewport, 9, 10);
+ break;
}
}
@@ -2380,6 +2357,11 @@
case WE_MOUSEWHEEL:
ZoomInOrOutToCursorWindow(e->we.wheel.wheel < 0, w);
break;
+
+ case WE_MESSAGE:
+ /* Forward the message to the appropiate toolbar (ingame or scenario editor) */
+ SendWindowMessage(WC_MAIN_TOOLBAR, 0, e->we.message.msg, e->we.message.wparam, e->we.message.lparam);
+ break;
}
}
--- a/smallmap_gui.c Tue Nov 07 13:01:36 2006 +0000
+++ b/smallmap_gui.c Tue Nov 07 13:06:02 2006 +0000
@@ -1070,6 +1070,13 @@
case WE_MOUSEWHEEL:
ZoomInOrOutToCursorWindow(e->we.wheel.wheel < 0, w);
break;
+
+
+ case WE_MESSAGE:
+ /* Only handle zoom message if intended for us (msg ZOOM_IN/ZOOM_OUT) */
+ if (e->we.message.wparam != w->window_number) break;
+ HandleZoomMessage(w, w->viewport, 5, 6);
+ break;
}
}
--- a/viewport.c Tue Nov 07 13:01:36 2006 +0000
+++ b/viewport.c Tue Nov 07 13:06:02 2006 +0000
@@ -375,6 +375,21 @@
return GetTileFromScreenXY(_cursor.pos.x, _cursor.pos.y, x + vp->left, y + vp->top);
}
+/** Update the status of the zoom-buttons according to the zoom-level
+ * of the viewport. This will update their status and invalidate accordingly
+ * @param window pointer to the window that has the zoom buttons
+ * @param vp pointer to the viewport whose zoom-level the buttons represent
+ * @param widget_zoom_in widget index for window with zoom-in button
+ * @param widget_zoom_out widget index for window with zoom-out button */
+void HandleZoomMessage(Window *w, const ViewPort *vp, byte widget_zoom_in, byte widget_zoom_out)
+{
+ SetWindowWidgetDisabledState(w, widget_zoom_in, vp->zoom == 0);
+ InvalidateWidget(w, widget_zoom_in);
+
+ SetWindowWidgetDisabledState(w, widget_zoom_out, vp->zoom == 2);
+ InvalidateWidget(w, widget_zoom_out);
+}
+
void DrawGroundSpriteAt(uint32 image, int32 x, int32 y, byte z)
{
ViewportDrawer *vd = _cur_vd;
--- a/viewport.h Tue Nov 07 13:01:36 2006 +0000
+++ b/viewport.h Tue Nov 07 13:06:02 2006 +0000
@@ -31,6 +31,7 @@
bool DoZoomInOutWindow(int how, Window *w);
void ZoomInOrOutToCursorWindow(bool in, Window * w);
Point GetTileZoomCenterWindow(bool in, Window * w);
+void HandleZoomMessage(Window *w, const ViewPort *vp, byte widget_zoom_in, byte widget_zoom_out);
void OffsetGroundSprite(int x, int y);