Changeset - r9566:2acd10e96f11
[Not reviewed]
master
0 1 0
belugas - 16 years ago 2008-06-20 01:55:00
belugas@openttd.org
(svn r13590) -Codechange: Enumification of the Save/Load menu items
1 file changed with 30 insertions and 13 deletions:
0 comments (0 inline, 0 general)
src/toolbar_gui.cpp
Show inline comments
 
@@ -108,259 +108,276 @@ enum ToolbarScenEditorWidgets {
 
	TBSE_PLANTTREES,
 
	TBSE_PLACESIGNS,
 
};
 

	
 
/** The idea of this enum is to allow a separation between widget position
 
 * and _menu_clicked_procs's entry.  By shifting, the "action" id is extracted and
 
 * kept safe for usage when reuired.
 
 * @see ToolbarMenuWindow::OnMouseLoop */
 
enum ScenarioEditorMenuActions {
 
	SEMA_MAP_CLICK = 17 << 8,
 
};
 

	
 
static ToolbarMode _toolbar_mode;
 

	
 
static void SelectSignTool()
 
{
 
	if (_cursor.sprite == SPR_CURSOR_SIGN) {
 
		ResetObjectToPlace();
 
	} else {
 
		SetObjectToPlace(SPR_CURSOR_SIGN, PAL_NONE, VHM_RECT, WC_MAIN_TOOLBAR, 0);
 
		_place_proc = PlaceProc_Sign;
 
	}
 
}
 

	
 
/** Returns the position where the toolbar wants the menu to appear.
 
 * Make sure the dropdown is fully visible within the window.
 
 * x + w->left because x is supposed to be the offset of the toolbar-button
 
 * we clicked on and w->left the toolbar window itself. So meaning that
 
 * the default position is aligned with the left side of the clicked button */
 
static Point GetToolbarDropdownPos(uint16 parent_button, int width, int height)
 
{
 
	const Window *w = FindWindowById(WC_MAIN_TOOLBAR, 0);
 
	Point pos;
 
	pos.x = w->widget[GB(parent_button, 0, 8)].left;
 
	pos.x = w->left + Clamp(pos.x, 0, w->width - width);
 
	pos.y = w->height;
 

	
 
	return pos;
 
}
 

	
 
/**
 
 * Retrieve the menu item number from a position
 
 * @param w Window holding the menu items
 
 * @param x X coordinate of the position
 
 * @param y Y coordinate of the position
 
 * @return Index number of the menu item, or \c -1 if no valid selection under position
 
 */
 
static int GetMenuItemIndex(const Window *w, int item_count, int disabled_items)
 
{
 
	int x = _cursor.pos.x;
 
	int y = _cursor.pos.y;
 

	
 
	if ((x -= w->left) >= 0 && x < w->width && (y -= w->top + 1) >= 0) {
 
		y /= 10;
 

	
 
		if (y < item_count &&
 
				!HasBit(disabled_items, y)) {
 
			return y;
 
		}
 
	}
 
	return -1;
 
}
 

	
 
/* --- Pausing --- */
 

	
 
static void ToolbarPauseClick(Window *w)
 
{
 
	if (_networking && !_network_server) return; // only server can pause the game
 

	
 
	if (DoCommandP(0, _pause_game ? 0 : 1, 0, NULL, CMD_PAUSE)) SndPlayFx(SND_15_BEEP);
 
}
 

	
 
/* --- Fast forwarding --- */
 

	
 
static void ToolbarFastForwardClick(Window *w)
 
{
 
	_fast_forward ^= true;
 
	SndPlayFx(SND_15_BEEP);
 
}
 

	
 
/* --- Options button menu --- */
 

	
 
enum OptionMenuEntries {
 
	OME_GAMEOPTIONS    = 0,
 
	OME_DIFFICULTIES,
 
	OME_PATCHES,
 
	OME_NEWGRFSETTINGS,
 
	OME_TRANSPARENCIES,
 
	OME_SHOW_TOWNNAMES = 6,
 
	OME_SHOW_STATIONNAMES,
 
	OME_SHOW_SIGNS,
 
	OME_SHOW_WAYPOINTNAMES,
 
	OME_FULL_ANIMATION,
 
	OME_FULL_DETAILS,
 
	OME_TRANSPARENTBUILDINGS,
 
	OME_SHOW_STATIONSIGNS,
 
	OME_END,
 
	OME_MENUCOUNT,
 
};
 

	
 
static void ToolbarOptionsClick(Window *w)
 
{
 
	uint16 x = 0;
 
	if (HasBit(_display_opt, DO_SHOW_TOWN_NAMES))    SetBit(x, OME_SHOW_TOWNNAMES);
 
	if (HasBit(_display_opt, DO_SHOW_STATION_NAMES)) SetBit(x, OME_SHOW_STATIONNAMES);
 
	if (HasBit(_display_opt, DO_SHOW_SIGNS))         SetBit(x, OME_SHOW_SIGNS);
 
	if (HasBit(_display_opt, DO_WAYPOINTS))          SetBit(x, OME_SHOW_WAYPOINTNAMES);
 
	if (HasBit(_display_opt, DO_FULL_ANIMATION))     SetBit(x, OME_FULL_ANIMATION);
 
	if (HasBit(_display_opt, DO_FULL_DETAIL))        SetBit(x, OME_FULL_DETAILS);
 
	if (IsTransparencySet(TO_HOUSES))                SetBit(x, OME_TRANSPARENTBUILDINGS);
 
	if (IsTransparencySet(TO_SIGNS))                 SetBit(x, OME_SHOW_STATIONSIGNS);
 

	
 
	PopupMainToolbMenu(w, TBN_SETTINGS, STR_02C4_GAME_OPTIONS, OME_END, 0, 0, x);
 
	PopupMainToolbMenu(w, TBN_SETTINGS, STR_02C4_GAME_OPTIONS, OME_MENUCOUNT, 0, 0, x);
 
}
 

	
 
static void MenuClickSettings(int index)
 
{
 
	switch (index) {
 
		case OME_GAMEOPTIONS:          ShowGameOptions();                              return;
 
		case OME_DIFFICULTIES:         ShowGameDifficulty();                           return;
 
		case OME_PATCHES:              ShowPatchesSelection();                         return;
 
		case OME_NEWGRFSETTINGS:       ShowNewGRFSettings(!_networking, true, true, &_grfconfig);   return;
 
		case OME_TRANSPARENCIES:       ShowTransparencyToolbar();                      break;
 

	
 
		case OME_SHOW_TOWNNAMES:       ToggleBit(_display_opt, DO_SHOW_TOWN_NAMES);    break;
 
		case OME_SHOW_STATIONNAMES:    ToggleBit(_display_opt, DO_SHOW_STATION_NAMES); break;
 
		case OME_SHOW_SIGNS:           ToggleBit(_display_opt, DO_SHOW_SIGNS);         break;
 
		case OME_SHOW_WAYPOINTNAMES:   ToggleBit(_display_opt, DO_WAYPOINTS);          break;
 
		case OME_FULL_ANIMATION:       ToggleBit(_display_opt, DO_FULL_ANIMATION);     break;
 
		case OME_FULL_DETAILS:         ToggleBit(_display_opt, DO_FULL_DETAIL);        break;
 
		case OME_TRANSPARENTBUILDINGS: ToggleTransparency(TO_HOUSES);                  break;
 
		case OME_SHOW_STATIONSIGNS:    ToggleTransparency(TO_SIGNS);                   break;
 
	}
 
	MarkWholeScreenDirty();
 
}
 

	
 
/* --- Saving/loading button menu --- */
 

	
 
enum SaveLoadEditorMenuEntries {
 
	SLEME_SAVE_SCENARIO   = 0,
 
	SLEME_LOAD_SCENARIO,
 
	SLEME_LOAD_HEIGHTMAP,
 
	SLEME_EXIT_TOINTRO,
 
	SLEME_EXIT_GAME       = 5,
 
	SLEME_MENUCOUNT,
 
};
 

	
 
enum SaveLoadNormalMenuEntries {
 
	SLNME_SAVE_GAME   = 0,
 
	SLNME_LOAD_GAME,
 
	SLNME_EXIT_TOINTRO,
 
	SLNME_EXIT_GAME,
 
	SLNME_MENUCOUNT,
 
};
 

	
 
static void ToolbarSaveClick(Window *w)
 
{
 
	PopupMainToolbMenu(w, TBN_SAVEGAME, STR_015C_SAVE_GAME, 4);
 
	PopupMainToolbMenu(w, TBN_SAVEGAME, STR_015C_SAVE_GAME, SLNME_MENUCOUNT);
 
}
 

	
 
static void ToolbarScenSaveOrLoad(Window *w)
 
{
 
	PopupMainToolbMenu(w, TBSE_SAVESCENARIO, STR_0292_SAVE_SCENARIO, 6);
 
	PopupMainToolbMenu(w, TBSE_SAVESCENARIO, STR_0292_SAVE_SCENARIO, SLEME_MENUCOUNT);
 
}
 

	
 
static void MenuClickSaveLoad(int index)
 
{
 
	if (_game_mode == GM_EDITOR) {
 
		switch (index) {
 
			case 0: ShowSaveLoadDialog(SLD_SAVE_SCENARIO);  break;
 
			case 1: ShowSaveLoadDialog(SLD_LOAD_SCENARIO);  break;
 
			case 2: ShowSaveLoadDialog(SLD_LOAD_HEIGHTMAP); break;
 
			case 3: AskExitToGameMenu();                    break;
 
			case 5: HandleExitGameRequest();                break;
 
			case SLEME_SAVE_SCENARIO:  ShowSaveLoadDialog(SLD_SAVE_SCENARIO);  break;
 
			case SLEME_LOAD_SCENARIO:  ShowSaveLoadDialog(SLD_LOAD_SCENARIO);  break;
 
			case SLEME_LOAD_HEIGHTMAP: ShowSaveLoadDialog(SLD_LOAD_HEIGHTMAP); break;
 
			case SLEME_EXIT_TOINTRO:   AskExitToGameMenu();                    break;
 
			case SLEME_EXIT_GAME:      HandleExitGameRequest();                break;
 
		}
 
	} else {
 
		switch (index) {
 
			case 0: ShowSaveLoadDialog(SLD_SAVE_GAME); break;
 
			case 1: ShowSaveLoadDialog(SLD_LOAD_GAME); break;
 
			case 2: AskExitToGameMenu();               break;
 
			case 3: HandleExitGameRequest();           break;
 
			case SLNME_SAVE_GAME:      ShowSaveLoadDialog(SLD_SAVE_GAME); break;
 
			case SLNME_LOAD_GAME:      ShowSaveLoadDialog(SLD_LOAD_GAME); break;
 
			case SLNME_EXIT_TOINTRO:   AskExitToGameMenu();               break;
 
			case SLNME_EXIT_GAME:      HandleExitGameRequest();           break;
 
		}
 
	}
 
}
 

	
 
/* --- Map button menu --- */
 

	
 
static void ToolbarMapClick(Window *w)
 
{
 
	PopupMainToolbMenu(w, TBN_SMALLMAP, STR_02DE_MAP_OF_WORLD, 3);
 
}
 

	
 
static void MenuClickMap(int index)
 
{
 
	switch (index) {
 
		case 0: ShowSmallMap();            break;
 
		case 1: ShowExtraViewPortWindow(); break;
 
		case 2: ShowSignList();            break;
 
	}
 
}
 

	
 
static void MenuClickScenMap(int index)
 
{
 
	switch (index) {
 
		case 0: ShowSmallMap();            break;
 
		case 1: ShowExtraViewPortWindow(); break;
 
		case 2: ShowSignList();            break;
 
		case 3: ShowTownDirectory();       break;
 
	}
 
}
 

	
 
/* --- Town button menu --- */
 

	
 
static void ToolbarTownClick(Window *w)
 
{
 
	PopupMainToolbMenu(w, TBN_TOWNDIRECTORY, STR_02BB_TOWN_DIRECTORY, 1);
 
}
 

	
 
static void MenuClickTown(int index)
 
{
 
	ShowTownDirectory();
 
}
 

	
 
/* --- Subidies button menu --- */
 

	
 
static void ToolbarSubsidiesClick(Window *w)
 
{
 
	PopupMainToolbMenu(w, TBN_SUBSIDIES, STR_02DD_SUBSIDIES, 1);
 
}
 

	
 
static void MenuClickSubsidies(int index)
 
{
 
	ShowSubsidiesList();
 
}
 

	
 
/* --- Stations button menu --- */
 

	
 
static void ToolbarStationsClick(Window *w)
 
{
 
	PopupMainPlayerToolbMenu(w, TBN_STATIONS);
 
}
 

	
 
static void MenuClickStations(int index)
 
{
 
	ShowPlayerStations((PlayerID)index);
 
}
 

	
 
/* --- Finances button menu --- */
 

	
 
static void ToolbarFinancesClick(Window *w)
 
{
 
	PopupMainPlayerToolbMenu(w, TBN_FINANCES);
 
}
 

	
 
static void MenuClickFinances(int index)
 
{
 
	ShowPlayerFinances((PlayerID)index);
 
}
 

	
 
/* --- Company's button menu --- */
 

	
 
static void ToolbarPlayersClick(Window *w)
 
{
 
	PopupMainPlayerToolbMenu(w, TBN_PLAYERS);
 
}
 

	
 
static void MenuClickCompany(int index)
 
{
 
	if (_networking && index == 0) {
 
		ShowClientList();
 
	} else {
 
		if (_networking) index--;
 
		ShowPlayerCompany((PlayerID)index);
 
	}
 
}
 

	
 
/* --- Graphs button menu --- */
0 comments (0 inline, 0 general)