src/main_gui.cpp
branchNewGRF_ports
changeset 6743 cabfaa4a0295
parent 6725 23339968083f
child 6800 6c09e1e86fcb
equal deleted inserted replaced
6742:1337d6c9b97b 6743:cabfaa4a0295
   742 
   742 
   743 	SndPlayFx(SND_15_BEEP);
   743 	SndPlayFx(SND_15_BEEP);
   744 	return w;
   744 	return w;
   745 }
   745 }
   746 
   746 
   747 static Window *PopupMainPlayerToolbMenu(Window *w, int x, int main_button, int gray)
   747 static Window *PopupMainPlayerToolbMenu(Window *w, int main_button, int gray)
   748 {
   748 {
   749 	x += w->left;
   749 	int x = w->widget[main_button].left + w->left;
   750 
   750 
   751 	LowerWindowWidget(w, main_button);
   751 	LowerWindowWidget(w, main_button);
   752 	InvalidateWidget(w, main_button);
   752 	InvalidateWidget(w, main_button);
   753 
   753 
   754 	DeleteWindowById(WC_TOOLBAR_MENU, 0);
   754 	DeleteWindowById(WC_TOOLBAR_MENU, 0);
   793 	PopupMainToolbMenu(w, 6, STR_02DD_SUBSIDIES, 1, 0);
   793 	PopupMainToolbMenu(w, 6, STR_02DD_SUBSIDIES, 1, 0);
   794 }
   794 }
   795 
   795 
   796 static void ToolbarStationsClick(Window *w)
   796 static void ToolbarStationsClick(Window *w)
   797 {
   797 {
   798 	PopupMainPlayerToolbMenu(w, 162, 7, 0);
   798 	PopupMainPlayerToolbMenu(w, 7, 0);
   799 }
   799 }
   800 
   800 
   801 static void ToolbarMoneyClick(Window *w)
   801 static void ToolbarMoneyClick(Window *w)
   802 {
   802 {
   803 	PopupMainPlayerToolbMenu(w, 191, 8, 0);
   803 	PopupMainPlayerToolbMenu(w, 8, 0);
   804 }
   804 }
   805 
   805 
   806 static void ToolbarPlayersClick(Window *w)
   806 static void ToolbarPlayersClick(Window *w)
   807 {
   807 {
   808 	PopupMainPlayerToolbMenu(w, 213, 9, 0);
   808 	PopupMainPlayerToolbMenu(w, 9, 0);
   809 }
   809 }
   810 
   810 
   811 static void ToolbarGraphsClick(Window *w)
   811 static void ToolbarGraphsClick(Window *w)
   812 {
   812 {
   813 	PopupMainToolbMenu(w, 10, STR_0154_OPERATING_PROFIT_GRAPH, 6, 0);
   813 	PopupMainToolbMenu(w, 10, STR_0154_OPERATING_PROFIT_GRAPH, 6, 0);
   830 	int dis = -1;
   830 	int dis = -1;
   831 
   831 
   832 	FOR_ALL_VEHICLES(v) {
   832 	FOR_ALL_VEHICLES(v) {
   833 		if (v->type == VEH_TRAIN && IsFrontEngine(v)) CLRBIT(dis, v->owner);
   833 		if (v->type == VEH_TRAIN && IsFrontEngine(v)) CLRBIT(dis, v->owner);
   834 	}
   834 	}
   835 	PopupMainPlayerToolbMenu(w, 310, 13, dis);
   835 	PopupMainPlayerToolbMenu(w, 13, dis);
   836 }
   836 }
   837 
   837 
   838 static void ToolbarRoadClick(Window *w)
   838 static void ToolbarRoadClick(Window *w)
   839 {
   839 {
   840 	const Vehicle *v;
   840 	const Vehicle *v;
   841 	int dis = -1;
   841 	int dis = -1;
   842 
   842 
   843 	FOR_ALL_VEHICLES(v) {
   843 	FOR_ALL_VEHICLES(v) {
   844 		if (v->type == VEH_ROAD && IsRoadVehFront(v)) CLRBIT(dis, v->owner);
   844 		if (v->type == VEH_ROAD && IsRoadVehFront(v)) CLRBIT(dis, v->owner);
   845 	}
   845 	}
   846 	PopupMainPlayerToolbMenu(w, 332, 14, dis);
   846 	PopupMainPlayerToolbMenu(w, 14, dis);
   847 }
   847 }
   848 
   848 
   849 static void ToolbarShipClick(Window *w)
   849 static void ToolbarShipClick(Window *w)
   850 {
   850 {
   851 	const Vehicle *v;
   851 	const Vehicle *v;
   852 	int dis = -1;
   852 	int dis = -1;
   853 
   853 
   854 	FOR_ALL_VEHICLES(v) {
   854 	FOR_ALL_VEHICLES(v) {
   855 		if (v->type == VEH_SHIP) CLRBIT(dis, v->owner);
   855 		if (v->type == VEH_SHIP) CLRBIT(dis, v->owner);
   856 	}
   856 	}
   857 	PopupMainPlayerToolbMenu(w, 354, 15, dis);
   857 	PopupMainPlayerToolbMenu(w, 15, dis);
   858 }
   858 }
   859 
   859 
   860 static void ToolbarAirClick(Window *w)
   860 static void ToolbarAirClick(Window *w)
   861 {
   861 {
   862 	const Vehicle *v;
   862 	const Vehicle *v;
   863 	int dis = -1;
   863 	int dis = -1;
   864 
   864 
   865 	FOR_ALL_VEHICLES(v) {
   865 	FOR_ALL_VEHICLES(v) {
   866 		if (v->type == VEH_AIRCRAFT) CLRBIT(dis, v->owner);
   866 		if (v->type == VEH_AIRCRAFT) CLRBIT(dis, v->owner);
   867 	}
   867 	}
   868 	PopupMainPlayerToolbMenu(w, 376, 16, dis);
   868 	PopupMainPlayerToolbMenu(w, 16, dis);
   869 }
   869 }
   870 
   870 
   871 /* Zooms a viewport in a window in or out */
   871 /* Zooms a viewport in a window in or out */
   872 /* No button handling or what so ever */
   872 /* No button handling or what so ever */
   873 bool DoZoomInOutWindow(int how, Window *w)
   873 bool DoZoomInOutWindow(int how, Window *w)
  1402 		break;
  1402 		break;
  1403 	}
  1403 	}
  1404 }
  1404 }
  1405 
  1405 
  1406 static const WindowDesc _scen_edit_land_gen_desc = {
  1406 static const WindowDesc _scen_edit_land_gen_desc = {
  1407 	WDP_AUTO, WDP_AUTO, 182, 103,
  1407 	WDP_AUTO, WDP_AUTO, 182, 103, 182, 103,
  1408 	WC_SCEN_LAND_GEN, WC_NONE,
  1408 	WC_SCEN_LAND_GEN, WC_NONE,
  1409 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
  1409 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
  1410 	_scen_edit_land_gen_widgets,
  1410 	_scen_edit_land_gen_widgets,
  1411 	ScenEditLandGenWndProc,
  1411 	ScenEditLandGenWndProc,
  1412 };
  1412 };
  1523 		break;
  1523 		break;
  1524 	}
  1524 	}
  1525 }
  1525 }
  1526 
  1526 
  1527 static const WindowDesc _scen_edit_town_gen_desc = {
  1527 static const WindowDesc _scen_edit_town_gen_desc = {
  1528 	WDP_AUTO, WDP_AUTO, 160, 95,
  1528 	WDP_AUTO, WDP_AUTO, 160, 95, 160, 95,
  1529 	WC_SCEN_TOWN_GEN, WC_NONE,
  1529 	WC_SCEN_TOWN_GEN, WC_NONE,
  1530 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
  1530 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
  1531 	_scen_edit_town_gen_widgets,
  1531 	_scen_edit_town_gen_widgets,
  1532 	ScenEditTownGenWndProc,
  1532 	ScenEditTownGenWndProc,
  1533 };
  1533 };
  1647 		case WKC_F12: ShowBuildIndustryWindow(); break;
  1647 		case WKC_F12: ShowBuildIndustryWindow(); break;
  1648 		case WKC_SHIFT | WKC_F1: ShowVehicleListWindow(_local_player, VEH_TRAIN); break;
  1648 		case WKC_SHIFT | WKC_F1: ShowVehicleListWindow(_local_player, VEH_TRAIN); break;
  1649 		case WKC_SHIFT | WKC_F2: ShowVehicleListWindow(_local_player, VEH_ROAD); break;
  1649 		case WKC_SHIFT | WKC_F2: ShowVehicleListWindow(_local_player, VEH_ROAD); break;
  1650 		case WKC_SHIFT | WKC_F3: ShowVehicleListWindow(_local_player, VEH_SHIP); break;
  1650 		case WKC_SHIFT | WKC_F3: ShowVehicleListWindow(_local_player, VEH_SHIP); break;
  1651 		case WKC_SHIFT | WKC_F4: ShowVehicleListWindow(_local_player, VEH_AIRCRAFT); break;
  1651 		case WKC_SHIFT | WKC_F4: ShowVehicleListWindow(_local_player, VEH_AIRCRAFT); break;
       
  1652 		case WKC_NUM_PLUS: // Fall through
       
  1653 		case WKC_EQUALS: // Fall through
       
  1654 		case WKC_SHIFT | WKC_EQUALS: // Fall through
  1652 		case WKC_SHIFT | WKC_F5: ToolbarZoomInClick(w); break;
  1655 		case WKC_SHIFT | WKC_F5: ToolbarZoomInClick(w); break;
       
  1656 		case WKC_NUM_MINUS: // Fall through
       
  1657 		case WKC_MINUS: // Fall through
       
  1658 		case WKC_SHIFT | WKC_MINUS: // Fall through
  1653 		case WKC_SHIFT | WKC_F6: ToolbarZoomOutClick(w); break;
  1659 		case WKC_SHIFT | WKC_F6: ToolbarZoomOutClick(w); break;
  1654 		case WKC_SHIFT | WKC_F7: if (CanBuildVehicleInfrastructure(VEH_TRAIN)) ShowBuildRailToolbar(_last_built_railtype, -1); break;
  1660 		case WKC_SHIFT | WKC_F7: if (CanBuildVehicleInfrastructure(VEH_TRAIN)) ShowBuildRailToolbar(_last_built_railtype, -1); break;
  1655 		case WKC_SHIFT | WKC_F8: ShowBuildRoadToolbar(_last_built_roadtype); break;
  1661 		case WKC_SHIFT | WKC_F8: ShowBuildRoadToolbar(_last_built_roadtype); break;
  1656 		case WKC_SHIFT | WKC_F9: ShowBuildDocksToolbar(); break;
  1662 		case WKC_SHIFT | WKC_F9: ShowBuildDocksToolbar(); break;
  1657 		case WKC_SHIFT | WKC_F10: if (CanBuildVehicleInfrastructure(VEH_AIRCRAFT)) ShowBuildAirToolbar(); break;
  1663 		case WKC_SHIFT | WKC_F10: if (CanBuildVehicleInfrastructure(VEH_AIRCRAFT)) ShowBuildAirToolbar(); break;
  1658 		case WKC_SHIFT | WKC_F11: ShowBuildTreesToolbar(); break;
  1664 		case WKC_SHIFT | WKC_F11: ShowBuildTreesToolbar(); break;
  1659 		case WKC_SHIFT | WKC_F12: ShowMusicWindow(); break;
  1665 		case WKC_SHIFT | WKC_F12: ShowMusicWindow(); break;
  1660 		case WKC_CTRL  | 'S': MenuClickSmallScreenshot(); break;
  1666 		case WKC_CTRL  | 'S': MenuClickSmallScreenshot(); break;
  1661 		case WKC_CTRL  | 'G': MenuClickWorldScreenshot(); break;
  1667 		case WKC_CTRL  | 'G': MenuClickWorldScreenshot(); break;
  1662 		case WKC_CTRL | WKC_ALT | 'C': if (!_networking) ShowCheatWindow(); break;
  1668 		case WKC_CTRL | WKC_ALT | 'C': if (!_networking) ShowCheatWindow(); break;
  1663 		case 'A': if (CanBuildVehicleInfrastructure(VEH_TRAIN)) ShowBuildRailToolbar(_last_built_railtype, 4); break; /* Invoke Autorail */
  1669 		case 'A': if (CanBuildVehicleInfrastructure(VEH_TRAIN)) ShowBuildRailToolbar(_last_built_railtype, 4); break; // Invoke Autorail
  1664 		case 'L': ShowTerraformToolbar(); break;
  1670 		case 'L': ShowTerraformToolbar(); break;
       
  1671 		case 'M': ShowSmallMap(); break;
       
  1672 		case 'V': ShowExtraViewPortWindow(); break;
  1665 		default: return;
  1673 		default: return;
  1666 		}
  1674 		}
  1667 		e->we.keypress.cont = false;
  1675 		e->we.keypress.cont = false;
  1668 	} break;
  1676 	} break;
  1669 
  1677 
  1685 		if (IsWindowWidgetLowered(w, 1) != !!_fast_forward) {
  1693 		if (IsWindowWidgetLowered(w, 1) != !!_fast_forward) {
  1686 			ToggleWidgetLoweredState(w, 1);
  1694 			ToggleWidgetLoweredState(w, 1);
  1687 			InvalidateWidget(w, 1);
  1695 			InvalidateWidget(w, 1);
  1688 		}
  1696 		}
  1689 		break;
  1697 		break;
       
  1698 
       
  1699 	case WE_RESIZE: {
       
  1700 		/* There are 27 buttons plus some spacings if the space allows it */
       
  1701 		uint button_width;
       
  1702 		uint spacing;
       
  1703 		if (w->width >= 27 * 22) {
       
  1704 			button_width = 22;
       
  1705 			spacing = w->width - (27 * button_width);
       
  1706 		} else {
       
  1707 			button_width = w->width / 27;
       
  1708 			spacing = 0;
       
  1709 		}
       
  1710 		uint extra_spacing_at[] = { 4, 8, 13, 17, 19, 24, 0 };
       
  1711 
       
  1712 		for (uint i = 0, x = 0, j = 0; i < 27; i++) {
       
  1713 			if (extra_spacing_at[j] == i) {
       
  1714 				j++;
       
  1715 				uint add = spacing / (lengthof(extra_spacing_at) - j);
       
  1716 				spacing -= add;
       
  1717 				x += add;
       
  1718 			}
       
  1719 
       
  1720 			w->widget[i].left = x;
       
  1721 			x += (spacing != 0) ? button_width : (w->width - x) / (27 - i);
       
  1722 			w->widget[i].right = x - 1;
       
  1723 		}
       
  1724 	} break;
  1690 
  1725 
  1691 	case WE_TIMEOUT: {
  1726 	case WE_TIMEOUT: {
  1692 		uint i;
  1727 		uint i;
  1693 		for (i = 2; i < w->widget_count; i++) {
  1728 		for (i = 2; i < w->widget_count; i++) {
  1694 			if (IsWindowWidgetLowered(w, i)) {
  1729 			if (IsWindowWidgetLowered(w, i)) {
  1704 			break;
  1739 			break;
  1705 	}
  1740 	}
  1706 }
  1741 }
  1707 
  1742 
  1708 static const Widget _toolb_normal_widgets[] = {
  1743 static const Widget _toolb_normal_widgets[] = {
  1709 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,    21,     0,    21, SPR_IMG_PAUSE,           STR_0171_PAUSE_GAME},
  1744 {     WWT_IMGBTN,   RESIZE_LEFT,    14,     0,     0,     0,    21, SPR_IMG_PAUSE,           STR_0171_PAUSE_GAME},
  1710 {     WWT_IMGBTN,   RESIZE_NONE,    14,    22,    43,     0,    21, SPR_IMG_FASTFORWARD,     STR_FAST_FORWARD},
  1745 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_FASTFORWARD,     STR_FAST_FORWARD},
  1711 {     WWT_IMGBTN,   RESIZE_NONE,    14,    44,    65,     0,    21, SPR_IMG_SETTINGS,        STR_0187_OPTIONS},
  1746 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_SETTINGS,        STR_0187_OPTIONS},
  1712 {   WWT_IMGBTN_2,   RESIZE_NONE,    14,    66,    87,     0,    21, SPR_IMG_SAVE,            STR_0172_SAVE_GAME_ABANDON_GAME},
  1747 {   WWT_IMGBTN_2,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_SAVE,            STR_0172_SAVE_GAME_ABANDON_GAME},
  1713 
  1748 
  1714 {     WWT_IMGBTN,   RESIZE_NONE,    14,    96,   117,     0,    21, SPR_IMG_SMALLMAP,        STR_0174_DISPLAY_MAP},
  1749 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_SMALLMAP,        STR_0174_DISPLAY_MAP},
  1715 {     WWT_IMGBTN,   RESIZE_NONE,    14,   118,   139,     0,    21, SPR_IMG_TOWN,            STR_0176_DISPLAY_TOWN_DIRECTORY},
  1750 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_TOWN,            STR_0176_DISPLAY_TOWN_DIRECTORY},
  1716 {     WWT_IMGBTN,   RESIZE_NONE,    14,   140,   161,     0,    21, SPR_IMG_SUBSIDIES,       STR_02DC_DISPLAY_SUBSIDIES},
  1751 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_SUBSIDIES,       STR_02DC_DISPLAY_SUBSIDIES},
  1717 {     WWT_IMGBTN,   RESIZE_NONE,    14,   162,   183,     0,    21, SPR_IMG_COMPANY_LIST,    STR_0173_DISPLAY_LIST_OF_COMPANY},
  1752 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_COMPANY_LIST,    STR_0173_DISPLAY_LIST_OF_COMPANY},
  1718 
  1753 
  1719 {     WWT_IMGBTN,   RESIZE_NONE,    14,   191,   212,     0,    21, SPR_IMG_COMPANY_FINANCE, STR_0177_DISPLAY_COMPANY_FINANCES},
  1754 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_COMPANY_FINANCE, STR_0177_DISPLAY_COMPANY_FINANCES},
  1720 {     WWT_IMGBTN,   RESIZE_NONE,    14,   213,   235,     0,    21, SPR_IMG_COMPANY_GENERAL, STR_0178_DISPLAY_COMPANY_GENERAL},
  1755 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_COMPANY_GENERAL, STR_0178_DISPLAY_COMPANY_GENERAL},
  1721 {     WWT_IMGBTN,   RESIZE_NONE,    14,   236,   257,     0,    21, SPR_IMG_GRAPHS,          STR_0179_DISPLAY_GRAPHS},
  1756 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_GRAPHS,          STR_0179_DISPLAY_GRAPHS},
  1722 {     WWT_IMGBTN,   RESIZE_NONE,    14,   258,   279,     0,    21, SPR_IMG_COMPANY_LEAGUE,  STR_017A_DISPLAY_COMPANY_LEAGUE},
  1757 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_COMPANY_LEAGUE,  STR_017A_DISPLAY_COMPANY_LEAGUE},
  1723 {     WWT_IMGBTN,   RESIZE_NONE,    14,   280,   301,     0,    21, SPR_IMG_INDUSTRY,        STR_0312_FUND_CONSTRUCTION_OF_NEW},
  1758 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_INDUSTRY,        STR_0312_FUND_CONSTRUCTION_OF_NEW},
  1724 
  1759 
  1725 {     WWT_IMGBTN,   RESIZE_NONE,    14,   310,   331,     0,    21, SPR_IMG_TRAINLIST,       STR_017B_DISPLAY_LIST_OF_COMPANY},
  1760 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_TRAINLIST,       STR_017B_DISPLAY_LIST_OF_COMPANY},
  1726 {     WWT_IMGBTN,   RESIZE_NONE,    14,   332,   353,     0,    21, SPR_IMG_TRUCKLIST,       STR_017C_DISPLAY_LIST_OF_COMPANY},
  1761 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_TRUCKLIST,       STR_017C_DISPLAY_LIST_OF_COMPANY},
  1727 {     WWT_IMGBTN,   RESIZE_NONE,    14,   354,   375,     0,    21, SPR_IMG_SHIPLIST,        STR_017D_DISPLAY_LIST_OF_COMPANY},
  1762 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_SHIPLIST,        STR_017D_DISPLAY_LIST_OF_COMPANY},
  1728 {     WWT_IMGBTN,   RESIZE_NONE,    14,   376,   397,     0,    21, SPR_IMG_AIRPLANESLIST,   STR_017E_DISPLAY_LIST_OF_COMPANY},
  1763 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_AIRPLANESLIST,   STR_017E_DISPLAY_LIST_OF_COMPANY},
  1729 
  1764 
  1730 {     WWT_IMGBTN,   RESIZE_NONE,    14,   406,   427,     0,    21, SPR_IMG_ZOOMIN,          STR_017F_ZOOM_THE_VIEW_IN},
  1765 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_ZOOMIN,          STR_017F_ZOOM_THE_VIEW_IN},
  1731 {     WWT_IMGBTN,   RESIZE_NONE,    14,   428,   449,     0,    21, SPR_IMG_ZOOMOUT,         STR_0180_ZOOM_THE_VIEW_OUT},
  1766 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_ZOOMOUT,         STR_0180_ZOOM_THE_VIEW_OUT},
  1732 
  1767 
  1733 {     WWT_IMGBTN,   RESIZE_NONE,    14,   457,   478,     0,    21, SPR_IMG_BUILDRAIL,       STR_0181_BUILD_RAILROAD_TRACK},
  1768 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_BUILDRAIL,       STR_0181_BUILD_RAILROAD_TRACK},
  1734 {     WWT_IMGBTN,   RESIZE_NONE,    14,   479,   500,     0,    21, SPR_IMG_BUILDROAD,       STR_0182_BUILD_ROADS},
  1769 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_BUILDROAD,       STR_0182_BUILD_ROADS},
  1735 {     WWT_IMGBTN,   RESIZE_NONE,    14,   501,   522,     0,    21, SPR_IMG_BUILDWATER,      STR_0183_BUILD_SHIP_DOCKS},
  1770 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_BUILDWATER,      STR_0183_BUILD_SHIP_DOCKS},
  1736 {     WWT_IMGBTN,   RESIZE_NONE,    14,   523,   544,     0,    21, SPR_IMG_BUILDAIR,        STR_0184_BUILD_AIRPORTS},
  1771 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_BUILDAIR,        STR_0184_BUILD_AIRPORTS},
  1737 {     WWT_IMGBTN,   RESIZE_NONE,    14,   545,   566,     0,    21, SPR_IMG_LANDSCAPING,     STR_LANDSCAPING_TOOLBAR_TIP}, // tree icon is 0x2E6
  1772 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_LANDSCAPING,     STR_LANDSCAPING_TOOLBAR_TIP}, // tree icon is 0x2E6
  1738 
  1773 
  1739 {     WWT_IMGBTN,   RESIZE_NONE,    14,   574,   595,     0,    21, SPR_IMG_MUSIC,           STR_01D4_SHOW_SOUND_MUSIC_WINDOW},
  1774 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_MUSIC,           STR_01D4_SHOW_SOUND_MUSIC_WINDOW},
  1740 {     WWT_IMGBTN,   RESIZE_NONE,    14,   596,   617,     0,    21, SPR_IMG_MESSAGES,        STR_0203_SHOW_LAST_MESSAGE_NEWS},
  1775 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_MESSAGES,        STR_0203_SHOW_LAST_MESSAGE_NEWS},
  1741 {     WWT_IMGBTN,   RESIZE_NONE,    14,   618,   639,     0,    21, SPR_IMG_QUERY,           STR_0186_LAND_BLOCK_INFORMATION},
  1776 {     WWT_IMGBTN,   RESIZE_NONE,    14,     0,     0,     0,    21, SPR_IMG_QUERY,           STR_0186_LAND_BLOCK_INFORMATION},
  1742 {   WIDGETS_END},
  1777 {   WIDGETS_END},
  1743 };
  1778 };
  1744 
  1779 
  1745 static const WindowDesc _toolb_normal_desc = {
  1780 static const WindowDesc _toolb_normal_desc = {
  1746 	0, 0, 640, 22,
  1781 	0, 0, 0, 22, 640, 22,
  1747 	WC_MAIN_TOOLBAR, WC_NONE,
  1782 	WC_MAIN_TOOLBAR, WC_NONE,
  1748 	WDF_STD_TOOLTIPS | WDF_DEF_WIDGET,
  1783 	WDF_STD_TOOLTIPS | WDF_DEF_WIDGET,
  1749 	_toolb_normal_widgets,
  1784 	_toolb_normal_widgets,
  1750 	MainToolbarWndProc
  1785 	MainToolbarWndProc
  1751 };
  1786 };
  1752 
  1787 
  1753 
  1788 
  1754 static const Widget _toolb_scen_widgets[] = {
  1789 static const Widget _toolb_scen_widgets[] = {
  1755 {  WWT_IMGBTN, RESIZE_NONE, 14,   0,  21,  0, 21, SPR_IMG_PAUSE,       STR_0171_PAUSE_GAME},
  1790 {  WWT_IMGBTN, RESIZE_LEFT, 14,   0,   0,  0, 21, SPR_IMG_PAUSE,       STR_0171_PAUSE_GAME},
  1756 {  WWT_IMGBTN, RESIZE_NONE, 14,  22,  43,  0, 21, SPR_IMG_FASTFORWARD, STR_FAST_FORWARD},
  1791 {  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_FASTFORWARD, STR_FAST_FORWARD},
  1757 {  WWT_IMGBTN, RESIZE_NONE, 14,  44,  65,  0, 21, SPR_IMG_SETTINGS,    STR_0187_OPTIONS},
  1792 {  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_SETTINGS,    STR_0187_OPTIONS},
  1758 {WWT_IMGBTN_2, RESIZE_NONE, 14,  66,  87,  0, 21, SPR_IMG_SAVE,        STR_0297_SAVE_SCENARIO_LOAD_SCENARIO},
  1793 {WWT_IMGBTN_2, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_SAVE,        STR_0297_SAVE_SCENARIO_LOAD_SCENARIO},
  1759 
  1794 
  1760 {   WWT_PANEL, RESIZE_NONE, 14,  96, 225,  0, 21, 0x0,                 STR_NULL},
  1795 {   WWT_PANEL, RESIZE_NONE, 14,   0,   0,  0, 21, 0x0,                 STR_NULL},
  1761 
  1796 
  1762 {   WWT_PANEL, RESIZE_NONE, 14, 233, 362,  0, 21, 0x0,                 STR_NULL},
  1797 {   WWT_PANEL, RESIZE_NONE, 14,   0, 129,  0, 21, 0x0,                 STR_NULL},
  1763 {  WWT_IMGBTN, RESIZE_NONE, 14, 236, 247,  5, 16, SPR_ARROW_DOWN,      STR_029E_MOVE_THE_STARTING_DATE},
  1798 {  WWT_IMGBTN, RESIZE_NONE, 14,   3,  14,  5, 16, SPR_ARROW_DOWN,      STR_029E_MOVE_THE_STARTING_DATE},
  1764 {  WWT_IMGBTN, RESIZE_NONE, 14, 347, 358,  5, 16, SPR_ARROW_UP,        STR_029F_MOVE_THE_STARTING_DATE},
  1799 {  WWT_IMGBTN, RESIZE_NONE, 14, 113, 125,  5, 16, SPR_ARROW_UP,        STR_029F_MOVE_THE_STARTING_DATE},
  1765 
  1800 
  1766 {  WWT_IMGBTN, RESIZE_NONE, 14, 371, 392,  0, 21, SPR_IMG_SMALLMAP,    STR_0175_DISPLAY_MAP_TOWN_DIRECTORY},
  1801 {  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_SMALLMAP,    STR_0175_DISPLAY_MAP_TOWN_DIRECTORY},
  1767 
  1802 
  1768 {  WWT_IMGBTN, RESIZE_NONE, 14, 400, 421,  0, 21, SPR_IMG_ZOOMIN,      STR_017F_ZOOM_THE_VIEW_IN},
  1803 {  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_ZOOMIN,      STR_017F_ZOOM_THE_VIEW_IN},
  1769 {  WWT_IMGBTN, RESIZE_NONE, 14, 422, 443,  0, 21, SPR_IMG_ZOOMOUT,     STR_0180_ZOOM_THE_VIEW_OUT},
  1804 {  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_ZOOMOUT,     STR_0180_ZOOM_THE_VIEW_OUT},
  1770 
  1805 
  1771 {  WWT_IMGBTN, RESIZE_NONE, 14, 452, 473,  0, 21, SPR_IMG_LANDSCAPING, STR_022E_LANDSCAPE_GENERATION},
  1806 {  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_LANDSCAPING, STR_022E_LANDSCAPE_GENERATION},
  1772 {  WWT_IMGBTN, RESIZE_NONE, 14, 474, 495,  0, 21, SPR_IMG_TOWN,        STR_022F_TOWN_GENERATION},
  1807 {  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_TOWN,        STR_022F_TOWN_GENERATION},
  1773 {  WWT_IMGBTN, RESIZE_NONE, 14, 496, 517,  0, 21, SPR_IMG_INDUSTRY,    STR_0230_INDUSTRY_GENERATION},
  1808 {  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_INDUSTRY,    STR_0230_INDUSTRY_GENERATION},
  1774 {  WWT_IMGBTN, RESIZE_NONE, 14, 518, 539,  0, 21, SPR_IMG_BUILDROAD,   STR_0231_ROAD_CONSTRUCTION},
  1809 {  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_BUILDROAD,   STR_0231_ROAD_CONSTRUCTION},
  1775 {  WWT_IMGBTN, RESIZE_NONE, 14, 540, 561,  0, 21, SPR_IMG_PLANTTREES,  STR_0288_PLANT_TREES},
  1810 {  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_PLANTTREES,  STR_0288_PLANT_TREES},
  1776 {  WWT_IMGBTN, RESIZE_NONE, 14, 562, 583,  0, 21, SPR_IMG_SIGN,        STR_0289_PLACE_SIGN},
  1811 {  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_SIGN,        STR_0289_PLACE_SIGN},
  1777 
  1812 
  1778 {   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
  1813 {   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
  1779 {   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
  1814 {   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
  1780 {   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
  1815 {   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
  1781 {   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
  1816 {   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
  1782 {   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
  1817 {   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
  1783 {   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
  1818 {   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
  1784 {   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
  1819 {   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
  1785 {  WWT_IMGBTN, RESIZE_NONE, 14, 596, 617,  0, 21, SPR_IMG_MUSIC,       STR_01D4_SHOW_SOUND_MUSIC_WINDOW},
  1820 {  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_MUSIC,       STR_01D4_SHOW_SOUND_MUSIC_WINDOW},
  1786 {   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
  1821 {   WWT_EMPTY, RESIZE_NONE,  0,   0,   0,  0,  0, 0x0,                 STR_NULL},
  1787 {  WWT_IMGBTN, RESIZE_NONE, 14, 618, 639,  0, 21, SPR_IMG_QUERY,       STR_0186_LAND_BLOCK_INFORMATION},
  1822 {  WWT_IMGBTN, RESIZE_NONE, 14,   0,   0,  0, 21, SPR_IMG_QUERY,       STR_0186_LAND_BLOCK_INFORMATION},
  1788 {WIDGETS_END},
  1823 {WIDGETS_END},
  1789 };
  1824 };
  1790 
  1825 
  1791 static ToolbarButtonProc * const _scen_toolbar_button_procs[] = {
  1826 static ToolbarButtonProc * const _scen_toolbar_button_procs[] = {
  1792 	ToolbarPauseClick,
  1827 	ToolbarPauseClick,
  1830 		GfxFillRect(0, 0, w->width-1, w->height-1, 0xB4 | (1 << PALETTE_MODIFIER_GREYOUT));
  1865 		GfxFillRect(0, 0, w->width-1, w->height-1, 0xB4 | (1 << PALETTE_MODIFIER_GREYOUT));
  1831 
  1866 
  1832 		DrawWindowWidgets(w);
  1867 		DrawWindowWidgets(w);
  1833 
  1868 
  1834 		SetDParam(0, ConvertYMDToDate(_patches_newgame.starting_year, 0, 1));
  1869 		SetDParam(0, ConvertYMDToDate(_patches_newgame.starting_year, 0, 1));
  1835 		DrawStringCentered(298, 6, STR_00AF, 0);
  1870 		DrawStringCenteredTruncated(w->widget[6].right, w->widget[7].left, 6, STR_00AF, 0);
  1836 
  1871 
  1837 		SetDParam(0, ConvertYMDToDate(_patches_newgame.starting_year, 0, 1));
  1872 		/* We hide this panel when the toolbar space gets too small */
  1838 		DrawStringCentered(161, 1, STR_0221_OPENTTD, 0);
  1873 		if (w->widget[4].left != w->widget[4].right) {
  1839 		DrawStringCentered(161, 11,STR_0222_SCENARIO_EDITOR, 0);
  1874 			DrawStringCenteredTruncated(w->widget[4].left + 1, w->widget[4].right - 1,  1, STR_0221_OPENTTD, 0);
       
  1875 			DrawStringCenteredTruncated(w->widget[4].left + 1, w->widget[4].right - 1, 11, STR_0222_SCENARIO_EDITOR, 0);
       
  1876 		}
  1840 
  1877 
  1841 		break;
  1878 		break;
  1842 
  1879 
  1843 	case WE_CLICK: {
  1880 	case WE_CLICK: {
  1844 		if (_game_mode == GM_MENU) return;
  1881 		if (_game_mode == GM_MENU) return;
  1873 	case WE_ABORT_PLACE_OBJ: {
  1910 	case WE_ABORT_PLACE_OBJ: {
  1874 		RaiseWindowWidget(w, 25);
  1911 		RaiseWindowWidget(w, 25);
  1875 		SetWindowDirty(w);
  1912 		SetWindowDirty(w);
  1876 	} break;
  1913 	} break;
  1877 
  1914 
       
  1915 	case WE_RESIZE: {
       
  1916 		/* There are 15 buttons plus some spacings if the space allows it.
       
  1917 		 * Furthermore there are two panels of which one is non-essential
       
  1918 		 * and that one can be removed is the space is too small. */
       
  1919 		uint buttons_width;
       
  1920 		uint spacing;
       
  1921 
       
  1922 		static int normal_min_width = (15 * 22) + (2 * 130);
       
  1923 		static int one_less_panel_min_width = (15 * 22) + 130;
       
  1924 
       
  1925 		if (w->width >= one_less_panel_min_width) {
       
  1926 			buttons_width = 15 * 22;
       
  1927 			spacing = w->width - ((w->width >= normal_min_width) ? normal_min_width : one_less_panel_min_width);
       
  1928 		} else {
       
  1929 			buttons_width = w->width - 130;
       
  1930 			spacing = 0;
       
  1931 		}
       
  1932 		uint extra_spacing_at[] = { 3, 4, 7, 8, 10, 16, 0 };
       
  1933 
       
  1934 		/* Yes, it defines about 27 widgets for this toolbar */
       
  1935 		for (uint i = 0, x = 0, j = 0, b = 0; i < 27; i++) {
       
  1936 			switch (i) {
       
  1937 				case 4:
       
  1938 					w->widget[i].left = x;
       
  1939 					if (w->width < normal_min_width) {
       
  1940 						w->widget[i].right = x;
       
  1941 						j++;
       
  1942 						continue;
       
  1943 					}
       
  1944 
       
  1945 					x += 130;
       
  1946 					w->widget[i].right = x - 1;
       
  1947 					break;
       
  1948 
       
  1949 				case 5: {
       
  1950 					int offset = x - w->widget[i].left;
       
  1951 					w->widget[i + 1].left  += offset;
       
  1952 					w->widget[i + 1].right += offset;
       
  1953 					w->widget[i + 2].left  += offset;
       
  1954 					w->widget[i + 2].right += offset;
       
  1955 					w->widget[i].left = x;
       
  1956 					x += 130;
       
  1957 					w->widget[i].right = x - 1;
       
  1958 					i += 2;
       
  1959 				} break;
       
  1960 
       
  1961 				default:
       
  1962 					if (w->widget[i].bottom == 0) continue;
       
  1963 
       
  1964 					w->widget[i].left = x;
       
  1965 					x += buttons_width / (15 - b);
       
  1966 					w->widget[i].right = x - 1;
       
  1967 					buttons_width -= buttons_width / (15 - b);
       
  1968 					b++;
       
  1969 					break;
       
  1970 			}
       
  1971 
       
  1972 			if (extra_spacing_at[j] == i) {
       
  1973 				j++;
       
  1974 				uint add = spacing / (lengthof(extra_spacing_at) - j);
       
  1975 				spacing -= add;
       
  1976 				x += add;
       
  1977 			}
       
  1978 		}
       
  1979 	} break;
       
  1980 
  1878 	case WE_MOUSELOOP:
  1981 	case WE_MOUSELOOP:
  1879 		if (IsWindowWidgetLowered(w, 0) != !!_pause_game) {
  1982 		if (IsWindowWidgetLowered(w, 0) != !!_pause_game) {
  1880 			ToggleWidgetLoweredState(w, 0);
  1983 			ToggleWidgetLoweredState(w, 0);
  1881 			SetWindowDirty(w);
  1984 			SetWindowDirty(w);
  1882 		}
  1985 		}
  1892 			break;
  1995 			break;
  1893 	}
  1996 	}
  1894 }
  1997 }
  1895 
  1998 
  1896 static const WindowDesc _toolb_scen_desc = {
  1999 static const WindowDesc _toolb_scen_desc = {
  1897 	0, 0, 640, 22,
  2000 	0, 0, 130, 22, 640, 22,
  1898 	WC_MAIN_TOOLBAR, WC_NONE,
  2001 	WC_MAIN_TOOLBAR, WC_NONE,
  1899 	WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
  2002 	WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
  1900 	_toolb_scen_widgets,
  2003 	_toolb_scen_widgets,
  1901 	ScenEditToolbarWndProc
  2004 	ScenEditToolbarWndProc
  1902 };
  2005 };
  1903 
  2006 
  1904 extern GetNewsStringCallbackProc * const _get_news_string_callback[];
  2007 extern GetNewsStringCallbackProc * const _get_news_string_callback[];
  1905 
  2008 
  1906 
  2009 
  1907 static bool DrawScrollingStatusText(const NewsItem *ni, int pos)
  2010 static bool DrawScrollingStatusText(const NewsItem *ni, int pos, int width)
  1908 {
  2011 {
  1909 	char buf[512];
  2012 	char buf[512];
  1910 	StringID str;
  2013 	StringID str;
  1911 	const char *s;
  2014 	const char *s;
  1912 	char *d;
  2015 	char *d;
  1937 		} else if (IsPrintable(c)) {
  2040 		} else if (IsPrintable(c)) {
  1938 			d += Utf8Encode(d, c);
  2041 			d += Utf8Encode(d, c);
  1939 		}
  2042 		}
  1940 	}
  2043 	}
  1941 
  2044 
  1942 	if (!FillDrawPixelInfo(&tmp_dpi, 141, 1, 358, 11)) return true;
  2045 	if (!FillDrawPixelInfo(&tmp_dpi, 141, 1, width, 11)) return true;
  1943 
  2046 
  1944 	old_dpi = _cur_dpi;
  2047 	old_dpi = _cur_dpi;
  1945 	_cur_dpi = &tmp_dpi;
  2048 	_cur_dpi = &tmp_dpi;
  1946 
  2049 
  1947 	x = DoDrawString(buffer, pos, 0, 13);
  2050 	x = DoDrawString(buffer, pos, 0, 13);
  1963 		);
  2066 		);
  1964 
  2067 
  1965 		if (p != NULL) {
  2068 		if (p != NULL) {
  1966 			/* Draw player money */
  2069 			/* Draw player money */
  1967 			SetDParam(0, p->player_money);
  2070 			SetDParam(0, p->player_money);
  1968 			DrawStringCentered(570, 1, p->player_money >= 0 ? STR_0004 : STR_0005, 0);
  2071 			DrawStringCentered(w->widget[2].left + 70, 1, p->player_money >= 0 ? STR_0004 : STR_0005, 0);
  1969 		}
  2072 		}
  1970 
  2073 
  1971 		/* Draw status bar */
  2074 		/* Draw status bar */
  1972 		if (w->message.msg) { // true when saving is active
  2075 		if (w->message.msg) { // true when saving is active
  1973 			DrawStringCentered(320, 1, STR_SAVING_GAME, 0);
  2076 			DrawStringCenteredTruncated(w->widget[1].left + 1, w->widget[1].right - 1, 1, STR_SAVING_GAME, 0);
  1974 		} else if (_do_autosave) {
  2077 		} else if (_do_autosave) {
  1975 			DrawStringCentered(320, 1, STR_032F_AUTOSAVE, 0);
  2078 			DrawStringCenteredTruncated(w->widget[1].left + 1, w->widget[1].right - 1, 1, STR_032F_AUTOSAVE, 0);
  1976 		} else if (_pause_game) {
  2079 		} else if (_pause_game) {
  1977 			DrawStringCentered(320, 1, STR_0319_PAUSED, 0);
  2080 			DrawStringCenteredTruncated(w->widget[1].left + 1, w->widget[1].right - 1, 1, STR_0319_PAUSED, 0);
  1978 		} else if (WP(w,def_d).data_1 > -1280 && FindWindowById(WC_NEWS_WINDOW,0) == NULL && _statusbar_news_item.string_id != 0) {
  2081 		} else if (WP(w,def_d).data_1 > -1280 && FindWindowById(WC_NEWS_WINDOW,0) == NULL && _statusbar_news_item.string_id != 0) {
  1979 			/* Draw the scrolling news text */
  2082 			/* Draw the scrolling news text */
  1980 			if (!DrawScrollingStatusText(&_statusbar_news_item, WP(w,def_d).data_1))
  2083 			if (!DrawScrollingStatusText(&_statusbar_news_item, WP(w,def_d).data_1, w->widget[1].right - w->widget[1].left - 2)) {
  1981 				WP(w,def_d).data_1 = -1280;
  2084 				WP(w,def_d).data_1 = -1280;
       
  2085 				if (p != NULL) {
       
  2086 					/* This is the default text */
       
  2087 					SetDParam(0, p->index);
       
  2088 					DrawStringCenteredTruncated(w->widget[1].left + 1, w->widget[1].right - 1, 1, STR_02BA, 0);
       
  2089 				}
       
  2090 			}
  1982 		} else {
  2091 		} else {
  1983 			if (p != NULL) {
  2092 			if (p != NULL) {
  1984 				/* This is the default text */
  2093 				/* This is the default text */
  1985 				SetDParam(0, p->index);
  2094 				SetDParam(0, p->index);
  1986 				DrawStringCentered(320, 1, STR_02BA, 0);
  2095 				DrawStringCenteredTruncated(w->widget[1].left + 1, w->widget[1].right - 1, 1, STR_02BA, 0);
  1987 			}
  2096 			}
  1988 		}
  2097 		}
  1989 
  2098 
  1990 		if (WP(w, def_d).data_2 > 0) DrawSprite(SPR_BLOT, PALETTE_TO_RED, 489, 2);
  2099 		if (WP(w, def_d).data_2 > 0) DrawSprite(SPR_BLOT, PALETTE_TO_RED, w->widget[1].right - 11, 2);
  1991 	} break;
  2100 	} break;
  1992 
  2101 
  1993 	case WE_MESSAGE:
  2102 	case WE_MESSAGE:
  1994 		w->message.msg = e->we.message.msg;
  2103 		w->message.msg = e->we.message.msg;
  1995 		SetWindowDirty(w);
  2104 		SetWindowDirty(w);
  2023 	}
  2132 	}
  2024 }
  2133 }
  2025 
  2134 
  2026 static const Widget _main_status_widgets[] = {
  2135 static const Widget _main_status_widgets[] = {
  2027 {      WWT_PANEL,   RESIZE_NONE,    14,     0,   139,     0,    11, 0x0, STR_NULL},
  2136 {      WWT_PANEL,   RESIZE_NONE,    14,     0,   139,     0,    11, 0x0, STR_NULL},
  2028 {    WWT_PUSHBTN,   RESIZE_NONE,    14,   140,   499,     0,    11, 0x0, STR_02B7_SHOW_LAST_MESSAGE_OR_NEWS},
  2137 {    WWT_PUSHBTN,   RESIZE_RIGHT,   14,   140,   179,     0,    11, 0x0, STR_02B7_SHOW_LAST_MESSAGE_OR_NEWS},
  2029 {    WWT_PUSHBTN,   RESIZE_NONE,    14,   500,   639,     0,    11, 0x0, STR_NULL},
  2138 {    WWT_PUSHBTN,   RESIZE_LR,      14,   180,   319,     0,    11, 0x0, STR_NULL},
  2030 {   WIDGETS_END},
  2139 {   WIDGETS_END},
  2031 };
  2140 };
  2032 
  2141 
  2033 static WindowDesc _main_status_desc = {
  2142 static WindowDesc _main_status_desc = {
  2034 	WDP_CENTER, 0, 640, 12,
  2143 	WDP_CENTER, 0, 320, 12, 640, 12,
  2035 	WC_STATUS_BAR, WC_NONE,
  2144 	WC_STATUS_BAR, WC_NONE,
  2036 	WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
  2145 	WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
  2037 	_main_status_widgets,
  2146 	_main_status_widgets,
  2038 	StatusBarWndProc
  2147 	StatusBarWndProc
  2039 };
  2148 };