WIP do not compile - split toolbar into two vertical toolbars
This commit is contained in:
@@ -1184,6 +1184,8 @@ STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Select on which
|
||||
STR_CONFIG_SETTING_SIGNALSIDE_LEFT :On the left
|
||||
STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :On the driving side
|
||||
STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :On the right
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR :Vertical toolbar
|
||||
STR_CONFIG_SETTING_VERTICAL_TOOLBAR_HELPTEXT :Main toolbar is split into two vertical toolbars on the sides of the screen
|
||||
STR_CONFIG_SETTING_TOUCHSCREEN_MODE :Control mode for touchscreen devices: {STRING2}
|
||||
STR_CONFIG_SETTING_TOUCHSCREEN_MODE_HELPTEXT :If playing with a mouse, choose no adaptation. Other modes are for touchscreen devices. Associated hotkey: N
|
||||
STR_CONFIG_SETTING_TOUCHSCREEN_NONE :no adaptation
|
||||
|
||||
@@ -1070,6 +1070,12 @@ static bool ZoomMinMaxChanged(int32 p1)
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool VerticalToolbarChanged(int32 p1)
|
||||
{
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool TouchscreenModeChanged(int32 p1)
|
||||
{
|
||||
//ResetTabletWindow();
|
||||
|
||||
@@ -78,6 +78,7 @@ struct GUISettings {
|
||||
bool lost_vehicle_warn; ///< if a vehicle can't find its destination, show a warning
|
||||
uint8 order_review_system; ///< perform order reviews on vehicles
|
||||
bool vehicle_income_warn; ///< if a vehicle isn't generating income, show a warning
|
||||
bool vertical_toolbar; ///< main toolbar is split into two vertical toolbars
|
||||
TouchscreenModeByte touchscreen_mode; ///< touchscreen mode for toolbars
|
||||
uint min_button; ///< min size of most button widgets
|
||||
uint min_step; ///< min size of scrollbar/dropdown elements
|
||||
|
||||
@@ -2497,6 +2497,15 @@ str = STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES
|
||||
strhelp = STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT
|
||||
strval = STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG
|
||||
|
||||
[SDTC_BOOL]
|
||||
var = gui.vertical_toolbar
|
||||
flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
|
||||
def = true
|
||||
str = STR_CONFIG_SETTING_VERTICAL_TOOLBAR
|
||||
strhelp = STR_CONFIG_SETTING_VERTICAL_TOOLBAR_HELPTEXT
|
||||
proc = VerticalToolbarChanged
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTC_VAR]
|
||||
var = gui.touchscreen_mode
|
||||
flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
|
||||
|
||||
@@ -1339,7 +1339,7 @@ protected:
|
||||
uint spacers; ///< Number of spacer widgets in this toolbar
|
||||
|
||||
public:
|
||||
NWidgetToolbarContainer() : NWidgetContainer(NWID_HORIZONTAL)
|
||||
NWidgetToolbarContainer(enum widgetType = NWID_HORIZONTAL) : NWidgetContainer(widgetType)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -1916,48 +1916,48 @@ static Hotkey maintoolbar_hotkeys[] = {
|
||||
};
|
||||
HotkeyList MainToolbarWindow::hotkeys("maintoolbar", maintoolbar_hotkeys);
|
||||
|
||||
/** Sprites to use for the different toolbar buttons */
|
||||
static const SpriteID _toolbar_button_sprites[] = {
|
||||
SPR_IMG_PAUSE, // WID_TN_PAUSE
|
||||
SPR_IMG_FASTFORWARD, // WID_TN_FAST_FORWARD
|
||||
SPR_IMG_SETTINGS, // WID_TN_SETTINGS
|
||||
SPR_IMG_SAVE, // WID_TN_SAVE
|
||||
SPR_IMG_SMALLMAP, // WID_TN_SMALL_MAP
|
||||
SPR_IMG_TOWN, // WID_TN_TOWNS
|
||||
SPR_IMG_SUBSIDIES, // WID_TN_SUBSIDIES
|
||||
SPR_IMG_COMPANY_LIST, // WID_TN_STATIONS
|
||||
SPR_IMG_COMPANY_FINANCE, // WID_TN_FINANCES
|
||||
SPR_IMG_COMPANY_GENERAL, // WID_TN_COMPANIES
|
||||
SPR_IMG_STORY_BOOK, // WID_TN_STORY
|
||||
SPR_IMG_GOAL, // WID_TN_GOAL
|
||||
SPR_IMG_GRAPHS, // WID_TN_GRAPHS
|
||||
SPR_IMG_COMPANY_LEAGUE, // WID_TN_LEAGUE
|
||||
SPR_IMG_INDUSTRY, // WID_TN_INDUSTRIES
|
||||
SPR_IMG_TRAINLIST, // WID_TN_TRAINS
|
||||
SPR_IMG_TRUCKLIST, // WID_TN_ROADVEHS
|
||||
SPR_IMG_SHIPLIST, // WID_TN_SHIPS
|
||||
SPR_IMG_AIRPLANESLIST, // WID_TN_AIRCRAFT
|
||||
SPR_IMG_ZOOMIN, // WID_TN_ZOOMIN
|
||||
SPR_IMG_ZOOMOUT, // WID_TN_ZOOMOUT
|
||||
SPR_IMG_BUILDRAIL, // WID_TN_RAILS
|
||||
SPR_IMG_BUILDROAD, // WID_TN_ROADS
|
||||
SPR_IMG_BUILDWATER, // WID_TN_WATER
|
||||
SPR_IMG_BUILDAIR, // WID_TN_AIR
|
||||
SPR_IMG_LANDSCAPING, // WID_TN_LANDSCAPE
|
||||
SPR_IMG_MUSIC, // WID_TN_MUSIC_SOUND
|
||||
SPR_IMG_MESSAGES, // WID_TN_MESSAGES
|
||||
SPR_IMG_QUERY, // WID_TN_HELP
|
||||
SPR_IMG_SWITCH_TOOLBAR, // WID_TN_SWITCH_BAR
|
||||
};
|
||||
|
||||
static NWidgetBase *MakeMainToolbar(int *biggest_index)
|
||||
{
|
||||
/** Sprites to use for the different toolbar buttons */
|
||||
static const SpriteID toolbar_button_sprites[] = {
|
||||
SPR_IMG_PAUSE, // WID_TN_PAUSE
|
||||
SPR_IMG_FASTFORWARD, // WID_TN_FAST_FORWARD
|
||||
SPR_IMG_SETTINGS, // WID_TN_SETTINGS
|
||||
SPR_IMG_SAVE, // WID_TN_SAVE
|
||||
SPR_IMG_SMALLMAP, // WID_TN_SMALL_MAP
|
||||
SPR_IMG_TOWN, // WID_TN_TOWNS
|
||||
SPR_IMG_SUBSIDIES, // WID_TN_SUBSIDIES
|
||||
SPR_IMG_COMPANY_LIST, // WID_TN_STATIONS
|
||||
SPR_IMG_COMPANY_FINANCE, // WID_TN_FINANCES
|
||||
SPR_IMG_COMPANY_GENERAL, // WID_TN_COMPANIES
|
||||
SPR_IMG_STORY_BOOK, // WID_TN_STORY
|
||||
SPR_IMG_GOAL, // WID_TN_GOAL
|
||||
SPR_IMG_GRAPHS, // WID_TN_GRAPHS
|
||||
SPR_IMG_COMPANY_LEAGUE, // WID_TN_LEAGUE
|
||||
SPR_IMG_INDUSTRY, // WID_TN_INDUSTRIES
|
||||
SPR_IMG_TRAINLIST, // WID_TN_TRAINS
|
||||
SPR_IMG_TRUCKLIST, // WID_TN_ROADVEHS
|
||||
SPR_IMG_SHIPLIST, // WID_TN_SHIPS
|
||||
SPR_IMG_AIRPLANESLIST, // WID_TN_AIRCRAFT
|
||||
SPR_IMG_ZOOMIN, // WID_TN_ZOOMIN
|
||||
SPR_IMG_ZOOMOUT, // WID_TN_ZOOMOUT
|
||||
SPR_IMG_BUILDRAIL, // WID_TN_RAILS
|
||||
SPR_IMG_BUILDROAD, // WID_TN_ROADS
|
||||
SPR_IMG_BUILDWATER, // WID_TN_WATER
|
||||
SPR_IMG_BUILDAIR, // WID_TN_AIR
|
||||
SPR_IMG_LANDSCAPING, // WID_TN_LANDSCAPE
|
||||
SPR_IMG_MUSIC, // WID_TN_MUSIC_SOUND
|
||||
SPR_IMG_MESSAGES, // WID_TN_MESSAGES
|
||||
SPR_IMG_QUERY, // WID_TN_HELP
|
||||
SPR_IMG_SWITCH_TOOLBAR, // WID_TN_SWITCH_BAR
|
||||
};
|
||||
|
||||
NWidgetMainToolbarContainer *hor = new NWidgetMainToolbarContainer();
|
||||
for (uint i = 0; i <= WID_TN_SWITCH_BAR; i++) {
|
||||
switch (i) {
|
||||
case 4: case 8: case 15: case 19: case 21: case 26: hor->Add(new NWidgetSpacer(0, 0)); break;
|
||||
}
|
||||
hor->Add(new NWidgetLeaf(i == WID_TN_SAVE ? WWT_IMGBTN_2 : WWT_IMGBTN, COLOUR_GREY, i, toolbar_button_sprites[i], STR_TOOLBAR_TOOLTIP_PAUSE_GAME + i));
|
||||
hor->Add(new NWidgetLeaf(i == WID_TN_SAVE ? WWT_IMGBTN_2 : WWT_IMGBTN, COLOUR_GREY, i, _toolbar_button_sprites[i], STR_TOOLBAR_TOOLTIP_PAUSE_GAME + i));
|
||||
}
|
||||
|
||||
hor->Add(new NWidgetSpacer(0, 0));
|
||||
@@ -1981,6 +1981,55 @@ static WindowDesc _toolb_normal_desc(
|
||||
&MainToolbarWindow::hotkeys
|
||||
);
|
||||
|
||||
static NWidgetBase *MakeVerticalLeftToolbar(int *biggest_index)
|
||||
{
|
||||
NWidgetVerticalToolbarContainer *tb = new NWidgetVerticalToolbarContainer(0);
|
||||
for (uint i = 0; i <= WID_TN_SWITCH_BAR; i++) {
|
||||
tb->Add(new NWidgetLeaf(i == WID_TN_SAVE ? WWT_IMGBTN_2 : WWT_IMGBTN, COLOUR_GREY, i, _toolbar_button_sprites[i], STR_TOOLBAR_TOOLTIP_PAUSE_GAME + i));
|
||||
}
|
||||
|
||||
tb->Add(new NWidgetLeaf(WWT_TEXTBTN, COLOUR_GREY, WID_TN_CTRL, STR_TABLET_CTRL, STR_TABLET_CTRL_TOOLTIP));
|
||||
tb->Add(new NWidgetLeaf(WWT_TEXTBTN, COLOUR_GREY, WID_TN_SHIFT, STR_TABLET_SHIFT, STR_TABLET_SHIFT_TOOLTIP));
|
||||
tb->Add(new NWidgetLeaf(WWT_PUSHTXTBTN, COLOUR_GREY, WID_TN_DELETE, STR_TABLET_CLOSE, STR_TABLET_CLOSE_TOOLTIP));
|
||||
|
||||
*biggest_index = max<int>(*biggest_index, WID_TN_DELETE);
|
||||
return tb;
|
||||
}
|
||||
|
||||
static NWidgetBase *MakeVerticalRigthToolbar(int *biggest_index)
|
||||
{
|
||||
NWidgetVerticalToolbarContainer *tb = new NWidgetVerticalToolbarContainer(1);
|
||||
for (uint i = 0; i <= WID_TN_SWITCH_BAR; i++) {
|
||||
tb->Add(new NWidgetLeaf(i == WID_TN_SAVE ? WWT_IMGBTN_2 : WWT_IMGBTN, COLOUR_GREY, i, _toolbar_button_sprites[i], STR_TOOLBAR_TOOLTIP_PAUSE_GAME + i));
|
||||
}
|
||||
|
||||
*biggest_index = max<int>(*biggest_index, WID_TN_DELETE);
|
||||
return tb;
|
||||
}
|
||||
|
||||
static const NWidgetPart _nested_toolbar_vertical_left_widgets[] = {
|
||||
NWidgetFunction(MakeVerticalLeftToolbar),
|
||||
};
|
||||
|
||||
static WindowDesc _toolb_vertical_left_desc(
|
||||
WDP_MANUAL, NULL, 22, 480,
|
||||
WC_MAIN_TOOLBAR, WC_NONE,
|
||||
WDF_NO_FOCUS,
|
||||
_nested_toolbar_vertical1_widgets, lengthof(_nested_toolbar_vertical_left_widgets),
|
||||
&MainToolbarWindow::hotkeys
|
||||
);
|
||||
|
||||
static const NWidgetPart _nested_toolbar_vertical_right_widgets[] = {
|
||||
NWidgetFunction(MakeVerticalRightToolbar),
|
||||
};
|
||||
|
||||
static WindowDesc _toolb_vertical_right_desc(
|
||||
WDP_MANUAL, NULL, 22, 480,
|
||||
WC_MAIN_TOOLBAR, WC_NONE,
|
||||
WDF_NO_FOCUS,
|
||||
_nested_toolbar_vertical_right_widgets, lengthof(_nested_toolbar_vertical_right_widgets),
|
||||
&MainToolbarWindow::hotkeys
|
||||
);
|
||||
|
||||
/* --- Toolbar handling for the scenario editor */
|
||||
|
||||
@@ -2301,6 +2350,11 @@ void AllocateToolbar()
|
||||
if (_game_mode == GM_EDITOR) {
|
||||
new ScenarioEditorToolbarWindow(&_toolb_scen_desc);
|
||||
} else {
|
||||
new MainToolbarWindow(&_toolb_normal_desc);
|
||||
if (_settings_client.gui.vertical_toolbar) {
|
||||
new MainToolbarWindow(&_toolb_vertical_left_desc);
|
||||
new MainToolbarWindow(&_toolb_vertical_right_desc);
|
||||
} else {
|
||||
new MainToolbarWindow(&_toolb_normal_desc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1594,7 +1594,11 @@ static Point GetAutoPlacePosition(int width, int height)
|
||||
|
||||
/* First attempt, try top-left of the screen */
|
||||
const Window *main_toolbar = FindWindowByClass(WC_MAIN_TOOLBAR);
|
||||
if (IsGoodAutoPlace1(0, main_toolbar != NULL ? main_toolbar->height : 0, width, height, pt)) return pt;
|
||||
if (_settings_client.gui.vertical_toolbar) {
|
||||
if (IsGoodAutoPlace1(main_toolbar != NULL ? main_toolbar->width : 0, 0, width, height, pt)) return pt;
|
||||
} else {
|
||||
if (IsGoodAutoPlace1(0, main_toolbar != NULL ? main_toolbar->height : 0, width, height, pt)) return pt;
|
||||
}
|
||||
|
||||
/* Second attempt, try around all existing windows with a distance of 2 pixels.
|
||||
* The new window must be entirely on-screen, and not overlap with an existing window.
|
||||
|
||||
Reference in New Issue
Block a user