rail_gui.c
changeset 1738 6c7f9d12197d
parent 1656 9dd38e83c003
child 1781 92e08797c84b
--- a/rail_gui.c	Sun May 01 19:37:20 2005 +0000
+++ b/rail_gui.c	Sun May 01 20:16:52 2005 +0000
@@ -13,6 +13,7 @@
 #include "vehicle.h"
 #include "station.h"
 #include "waypoint.h"
+#include "debug.h"
 
 static uint _cur_railtype;
 static bool _remove_button_clicked;
@@ -256,7 +257,7 @@
 {
 	_waypoint_count = GetCustomStationsCount(STAT_CLASS_WAYP);
 	if (HandlePlacePushButton(w, 11, SPR_OPENTTD_BASE + 7, 1, PlaceRail_Waypoint)
-	    && _waypoint_count > 1)
+	    && _waypoint_count > 0)
 		ShowBuildWaypointPicker();
 }
 
@@ -859,32 +860,22 @@
 
 static void BuildWaypointWndProc(Window *w, WindowEvent *e)
 {
-	switch(e->event) {
+	switch (e->event) {
 	case WE_PAINT: {
-		int r;
-
-		w->click_state = (1 << 3) << _cur_waypoint_type;
+		w->click_state = (1 << 3) << (_cur_waypoint_type - w->hscroll.pos);
 		DrawWindowWidgets(w);
 
-		r = 4*w->hscroll.pos;
-		if(r+0<=_waypoint_count) DrawWaypointSprite(2,   25, r + 0, _cur_railtype);
-		if(r+1<=_waypoint_count) DrawWaypointSprite(70,  25, r + 1, _cur_railtype);
-		if(r+2<=_waypoint_count) DrawWaypointSprite(138, 25, r + 2, _cur_railtype);
-		if(r+3<=_waypoint_count) DrawWaypointSprite(206, 25, r + 3, _cur_railtype);
-		if(r+4<=_waypoint_count) DrawWaypointSprite(274, 25, r + 4, _cur_railtype);
+		if(w->hscroll.pos + 0 <= _waypoint_count) DrawWaypointSprite(2,   25, w->hscroll.pos + 0, _cur_railtype);
+		if(w->hscroll.pos + 1 <= _waypoint_count) DrawWaypointSprite(70,  25, w->hscroll.pos + 1, _cur_railtype);
+		if(w->hscroll.pos + 2 <= _waypoint_count) DrawWaypointSprite(138, 25, w->hscroll.pos + 2, _cur_railtype);
+		if(w->hscroll.pos + 3 <= _waypoint_count) DrawWaypointSprite(206, 25, w->hscroll.pos + 3, _cur_railtype);
+		if(w->hscroll.pos + 4 <= _waypoint_count) DrawWaypointSprite(274, 25, w->hscroll.pos + 4, _cur_railtype);
 		break;
-		}
+	}
 	case WE_CLICK: {
-		switch(e->click.widget) {
-		case 0:
-			ResetObjectToPlace();
-			break;
-		case 3:
-		case 4:
-		case 5:
-		case 6:
-		case 7:
-			_cur_waypoint_type = e->click.widget - 3;
+		switch (e->click.widget) {
+		case 3: case 4: case 5: case 6: case 7:
+			_cur_waypoint_type = e->click.widget - 3 + w->hscroll.pos;
 			SndPlayFx(SND_15_BEEP);
 			SetWindowDirty(w);
 			break;
@@ -895,10 +886,11 @@
 	case WE_MOUSELOOP:
 		if (WP(w,def_d).close)
 			DeleteWindow(w);
-		return;
+		break;
 
 	case WE_DESTROY:
-		ResetObjectToPlace();
+		if (!WP(w,def_d).close)
+			ResetObjectToPlace();
 		break;
 	}
 }
@@ -930,7 +922,7 @@
 {
 	Window *w = AllocateWindowDesc(&_build_waypoint_desc);
 	w->hscroll.cap = 5;
-	w->hscroll.count = (uint) (_waypoint_count+4) / 5;
+	w->hscroll.count = _waypoint_count + 1;
 }