From 3e3317d26f6b4cc21072801398403c8ed0495f9e Mon Sep 17 00:00:00 2001 From: Hirek193 Date: Fri, 9 Oct 2026 12:49:45 +0200 Subject: [PATCH] feat(editor): the toolbar as buttons with icons and names, the chosen tool standing out as the chosen field of work does, the names left out when the row is too narrow for them; the fields of work with icons of their own (surroundings, tracks, roads, terrain) and both rows captioned at their left end (work modes, tools); the tools of the toolbar and of the left edge of the 3d view from one list; Polish translation --- application/editormode.cpp | 81 ++--------- application/editormode.h | 17 ++- application/editormoderoad.cpp | 34 ----- application/editormodetrack.cpp | 39 ----- application/editormodeviewport.cpp | 226 +++++++++++++++++++++++------ application/editoruilayer.cpp | 23 +-- editor/editorIcons.hpp | 5 + editor/icons/editor_icons.png | Bin 44886 -> 52589 bytes editor/icons/editor_icons.py | 57 +++++++- lang/editor_pl.po | 20 +++ 10 files changed, 299 insertions(+), 203 deletions(-) diff --git a/application/editormode.cpp b/application/editormode.cpp index 0d2b6acc..c7d36c8b 100644 --- a/application/editormode.cpp +++ b/application/editormode.cpp @@ -29,6 +29,7 @@ extern char **environ; #include "editor/editorGroundMesh.hpp" #include "editor/editorFormat.hpp" #include "editor/editorGeometry.hpp" +#include "editor/editorIcons.hpp" #include "utilities/translation.h" #include "utilities/Globals.h" #include "simulation/simulation.h" @@ -3792,13 +3793,14 @@ void editor_mode::render_workspaces() { char const *label; work_area which; + editor_icons::icon picture; char const *tooltip; }; area const areas[] = { - {STR_C("Surroundings"), work_area::surroundings, STR_C("Models around the line: select, insert, brush, area fill, copy to the node bank")}, - {STR_C("Tracks"), work_area::tracks, STR_C("Tracks and switches, signals, objects along the track, checks of the line")}, - {STR_C("Roads"), work_area::roads, STR_C("Roads and junctions, level crossings, the points where the traffic comes and goes")}, - {STR_C("Terrain"), work_area::terrain, STR_C("Terrain patches and chunks, sculpting, streaming, orthophoto")}, + {STR_C("Surroundings"), work_area::surroundings, editor_icons::icon::work_surroundings, STR_C("Models around the line: select, insert, brush, area fill, copy to the node bank")}, + {STR_C("Tracks"), work_area::tracks, editor_icons::icon::work_tracks, STR_C("Tracks and switches, signals, objects along the track, checks of the line")}, + {STR_C("Roads"), work_area::roads, editor_icons::icon::work_roads, STR_C("Roads and junctions, level crossings, the points where the traffic comes and goes")}, + {STR_C("Terrain"), work_area::terrain, editor_icons::icon::work_terrain, STR_C("Terrain patches and chunks, sculpting, streaming, orthophoto")}, }; char const *const keys[] = {"F2", "F3", "F4", "F5"}; auto const current{current_work_area()}; @@ -3809,11 +3811,14 @@ void editor_mode::render_workspaces() auto const fontsize{ui_layer::font_bold != nullptr ? ui_layer::font_bold->FontSize : ImGui::GetFontSize() * 1.25f}; auto const height{ImGui::GetWindowHeight()}; auto const padding{style.FramePadding.x * 3.0f}; - ImGui::SetCursorPos(ImVec2(style.ItemSpacing.x, 0.0f)); + // the icon of the field of work before its name + auto const iconside{editor_icons::size()}; + auto const spacing{style.ItemInnerSpacing.x * 1.5f}; + render_toolbar_caption(STR_C("Work modes")); for (auto const &entry : areas) { auto const text{font->CalcTextSizeA(fontsize, FLT_MAX, 0.0f, entry.label)}; - ImVec2 const size{text.x + padding * 2.0f, height}; + ImVec2 const size{text.x + iconside + spacing + padding * 2.0f, height}; auto const position{ImGui::GetCursorScreenPos()}; ImGui::PushID(static_cast(entry.which)); if (ImGui::InvisibleButton("##area", size)) @@ -3826,8 +3831,9 @@ void editor_mode::render_workspaces() list->AddRectFilled(position, end, ImGui::GetColorU32(chosen ? ImGuiCol_Header : ImGuiCol_HeaderHovered)); if (chosen) list->AddRectFilled(ImVec2(position.x, end.y - 3.0f), end, ImGui::GetColorU32(ImGuiCol_CheckMark)); - ImVec2 const textposition{position.x + padding, position.y + (height - text.y) * 0.5f}; + ImVec2 const textposition{position.x + padding + iconside + spacing, position.y + (height - text.y) * 0.5f}; auto const color{ImGui::GetColorU32(chosen ? ImGuiCol_Text : ImGuiCol_TextDisabled)}; + editor_icons::draw(list, entry.picture, ImVec2(position.x + padding + iconside * 0.5f, position.y + height * 0.5f), color); list->AddText(font, fontsize, textposition, color, entry.label); if (ui_layer::font_bold == nullptr) list->AddText(font, fontsize, ImVec2(textposition.x + 1.0f, textposition.y), color, entry.label); @@ -3837,69 +3843,10 @@ void editor_mode::render_workspaces() } } -void editor_mode::render_terrain_toolbar() -{ - // what the left button does on the terrain: picks the models as it does elsewhere, raises and lowers, evens out, adds chunks - struct tool - { - char const *label; - bool chosen; - bool sculpt; - bool smooth; - bool chunks; - char const *tooltip; - }; - tool const tools[] = { - {STR_C("Select"), false == m_terrain_sculpt && false == m_chunk_edit, false, m_terrain_brush_smooth, false, STR_C("LMB picks the models, as in the surroundings")}, - {STR_C("Sculpt"), m_terrain_sculpt && false == m_terrain_brush_smooth, true, false, false, STR_C("LMB raises the terrain under the brush, Shift+LMB lowers it")}, - {STR_C("Smooth"), m_terrain_sculpt && m_terrain_brush_smooth, true, true, false, STR_C("LMB evens the terrain out under the brush")}, - {STR_C("Chunks"), m_chunk_edit, false, m_terrain_brush_smooth, true, STR_C("LMB adds a chunk next to the clicked one, Shift+LMB deletes it")}, - }; - for (auto const &entry : tools) - { - if (ImGui::MenuItem(entry.label, nullptr, entry.chosen)) - { - m_terrain_sculpt = entry.sculpt; - m_terrain_brush_smooth = entry.smooth; - m_chunk_edit = entry.chunks; - } - if (ImGui::IsItemHovered()) - ImGui::SetTooltip("%s", entry.tooltip); - } - ImGui::Separator(); - auto const orthophoto{m_orthophoto.enabled()}; - if (ImGui::MenuItem(STR_C("Orthophoto"), nullptr, orthophoto)) - m_orthophoto.enabled(false == orthophoto); - if (ImGui::IsItemHovered()) - ImGui::SetTooltip("%s", STR_C("Aerial imagery of geoportal.gov.pl under the scenery, laid out by the origin of the scenery")); - ImGui::MenuItem(STR_C("Orthophoto settings..."), nullptr, &m_orthophoto_window); -} - void editor_mode::render_toolbar() { - auto const area{current_work_area()}; - switch (area) - { - case work_area::surroundings: - { - // edit modes of the node bank - std::pair const modes[] = { - {STR_C("Select"), nodebank_panel::MODIFY}, {STR_C("Insert"), nodebank_panel::ADD}, {STR_C("Brush"), nodebank_panel::BRUSH}, {STR_C("Area fill"), nodebank_panel::FILL}, {STR_C("Copy to bank"), nodebank_panel::COPY}}; - for (std::size_t index = 0; index < std::size(modes); ++index) - { - auto const &mode{modes[index]}; - if (ImGui::MenuItem(mode.first, nullptr, ui()->mode() == mode.second)) - choose_edit_mode(mode.second); - if (ImGui::IsItemHovered()) - ImGui::SetTooltip("%s (%d)", mode.first, static_cast(index + 1)); - } - break; - } - case work_area::tracks: render_track_toolbar(); break; - case work_area::roads: render_road_toolbar(); break; - case work_area::terrain: render_terrain_toolbar(); break; - } // the modes of the gizmo and the top view are over the 3d view, see render_viewport_overlays() + render_toolbar_tools(); } void editor_mode::render_edit_menu() diff --git a/application/editormode.h b/application/editormode.h index edc45daa..6c7b9776 100644 --- a/application/editormode.h +++ b/application/editormode.h @@ -38,6 +38,8 @@ http://mozilla.org/MPL/2.0/. #include class TAnimModel; +// a tool of a field of work of the editor, a button in the toolbar and over the 3d view +struct editor_tool_button; class TTrack; namespace ui { @@ -280,8 +282,6 @@ class editor_mode : public application_mode, private editor_track::observer void render_terrain_ui(); // the terrain as a field of work of its own: the terrain tools and the orthophoto in the tool options window void render_terrain_tool_options(); - // tools of the terrain in the toolbar: picking, sculpting, smoothing, chunks, orthophoto - void render_terrain_toolbar(); // opens or leaves the terrain; leaving it puts the sculpting and the chunk editing away, so the mouse doesn't stay with them void terrain_workspace(bool const Open); // creates a large terrain as a grid of adjacent chunks (each its own editable patch) @@ -389,6 +389,12 @@ class editor_mode : public application_mode, private editor_track::observer // world and the top view in its top right corner void render_viewport_overlays(); void render_viewport_tools(); + // the tools of the field of work, in the order of the toolbar + void work_area_tools(std::vector &Buttons); + // the tools of the field of work in the toolbar, as icons with their names + void render_toolbar_tools(); + // what the row of the toolbar holds, written at its left end: the fields of work, the tools + static void render_toolbar_caption(char const *Text); void render_viewport_gizmo(); void render_view_axes(); // the camera looking along an axis of the world (0: x, 1: y, 2: z) from its positive or negative side @@ -491,7 +497,7 @@ class editor_mode : public application_mode, private editor_track::observer void render_gizmo(); // gizmo settings, drawn in the toolset window void render_gizmo_options(); - // edit modes, editor windows and gizmo settings in the toolbar under the menu + // the tools of the field of work in the toolbar under the menu void render_toolbar(); // an edit mode of the node bank as the field of work, from the toolbar or its key (1-5) void choose_edit_mode(nodebank_panel::edit_mode const Mode); @@ -915,8 +921,6 @@ class editor_mode : public application_mode, private editor_track::observer // the track tools in the tool options window, and the selected path in the inspector void render_track_tool_options(); void render_track_selection(); - // tools of the track mode in the toolbar, in groups: building, by the track, checks - void render_track_toolbar(); void show_track_tab(track_tab const Tab); bool track_analysis_tab() const { return m_track_tab == track_tab::profile || m_track_tab == track_tab::speed || m_track_tab == track_tab::joints || m_track_tab == track_tab::infra; } bool track_shortcut(int const Key); @@ -1828,8 +1832,7 @@ class editor_mode : public application_mode, private editor_track::observer char islandtext[128]{"none"}; }; void render_road_tool_options(); - // tools of the roads in the toolbar, and the change of the tool - void render_road_toolbar(); + // the change of the road tool void road_choose_tool(int const Tool); void render_road_selection(); bool render_road_layout(road_node::state &State); diff --git a/application/editormoderoad.cpp b/application/editormoderoad.cpp index 8c800d90..a07da795 100644 --- a/application/editormoderoad.cpp +++ b/application/editormoderoad.cpp @@ -2264,40 +2264,6 @@ void editor_mode::road_choose_tool(int const Tool) } } -void editor_mode::render_road_toolbar() -{ - auto &tool{m_roadtool}; - struct entry - { - char const *label; - char const *tooltip; - }; - entry const tools[] = {{"Select", "LMB: a road piece, a junction, a point where pieces meet, a level crossing or a traffic point"}, - {"Build", "LMB: start a road, then each next point; on a loose end, the side of a road or a junction it's joined to them"}, - {"Place", "Level crossings, and the points where vehicles appear on the roads or are taken off them"}}; - for (int index = 0; index < static_cast(std::size(tools)); ++index) - { - if (ImGui::MenuItem(tools[index].label, nullptr, tool.tool == index)) - road_choose_tool(index); - if (ImGui::IsItemHovered()) - ImGui::SetTooltip("%s", tools[index].tooltip); - } - if (tool.tool == 2) - { - // what the place tool puts - ImGui::Separator(); - char const *const kinds[] = {"Level crossing", "Spawn point", "Removal point", "Pedestrian crossing"}; - for (int index = 0; index < static_cast(std::size(kinds)); ++index) - { - if (ImGui::MenuItem(kinds[index], nullptr, tool.placekind == index)) - tool.placekind = index; - } - } - ImGui::Separator(); - if (ImGui::MenuItem("Show lanes", nullptr, tool.lanes)) - tool.lanes = !tool.lanes; -} - // the road tools and what the next pieces get, in the tool options window; the selection is drawn in the inspector by render_road_selection() void editor_mode::render_road_tool_options() { diff --git a/application/editormodetrack.cpp b/application/editormodetrack.cpp index 0172fbe9..0dc68a75 100644 --- a/application/editormodetrack.cpp +++ b/application/editormodetrack.cpp @@ -814,45 +814,6 @@ void editor_mode::render_track_selection() render_path_ui(); } -void editor_mode::render_track_toolbar() -{ - auto const &modes{track_modes()}; - auto const vehicle{m_track_tab == track_tab::lineside && m_vehicle.open}; - // a tool chosen again gives way to the select one - auto const tool = [&](track_tab const Tab) { - auto const found{std::find_if(modes.begin(), modes.end(), [&](track_mode const &Mode) { return Mode.tab == Tab; })}; - if (found == modes.end()) - return; - auto const chosen{m_track_tab == Tab && false == (Tab == track_tab::lineside && vehicle)}; - auto const label{std::string{STR_C(found->label)} + "###tracktool" + std::to_string(static_cast(found - modes.begin()))}; - if (ImGui::MenuItem(label.c_str(), nullptr, chosen)) - show_track_tab(chosen ? track_tab::path : Tab); - if (ImGui::IsItemHovered()) - ImGui::SetTooltip("%s [%s]", STR_C(found->tooltip), found->key); - }; - // building the track, what goes by it, the checks - for (auto const tab : {track_tab::path, track_tab::lay, track_tab::turnout, track_tab::straights, track_tab::route, track_tab::turntable}) - tool(tab); - ImGui::Separator(); - tool(track_tab::signals); - tool(track_tab::lineside); - // the vehicle to drive is one of the objects along the track - if (ImGui::MenuItem(STR_C("Vehicle"), nullptr, vehicle)) - { - show_track_tab(vehicle ? track_tab::path : track_tab::lineside); - m_vehicle.expand = false == vehicle; - } - if (ImGui::IsItemHovered()) - ImGui::SetTooltip("%s", STR_C("A vehicle to drive, put on the selected track; it isn't written to the scenery files")); - ImGui::Separator(); - for (auto const tab : {track_tab::profile, track_tab::speed, track_tab::joints, track_tab::infra}) - tool(tab); - if (ImGui::MenuItem(STR_C("Structure gauge"), nullptr, m_gauge.open)) - m_gauge.open = !m_gauge.open; - if (ImGui::IsItemHovered()) - ImGui::SetTooltip("%s", STR_C("Checks which models enter the structure gauge of the tracks and the clearance over the roads (skrajnia budowli)")); -} - void editor_mode::render_track_guide() { auto const hints{track_key_hints(false)}; diff --git a/application/editormodeviewport.cpp b/application/editormodeviewport.cpp index 17434652..7c9a3491 100644 --- a/application/editormodeviewport.cpp +++ b/application/editormodeviewport.cpp @@ -8,7 +8,7 @@ http://mozilla.org/MPL/2.0/. */ // over the 3d view: the tools of the field of work along its left edge, the modes of the gizmo at its top, the axes of the -// world and the top view in its top right corner +// world and the top view in its top right corner. the same tools in the toolbar under the menu, with their names #include "stdafx.h" #include "application/editormode.h" @@ -25,14 +25,9 @@ http://mozilla.org/MPL/2.0/. #include #include -namespace +struct editor_tool_button { - -using editor_icons::icon; - -struct tool_button -{ - icon picture; + editor_icons::icon picture; // icon::count if it has none: then it's only in the toolbar, as its name char const *label; char const *key; // nullptr if there's none char const *tooltip; // nullptr if the label says enough @@ -42,6 +37,12 @@ struct tool_button bool enabled{true}; }; +namespace +{ + +using editor_icons::icon; +using tool_button = editor_tool_button; + float scale() { return std::max(1.0f, Global.ui_scale); @@ -69,6 +70,27 @@ bool begin_overlay(char const *Name, ImVec2 const &Position, ImVec2 const &Size) return open; } +// the name of the tool with its key, and what it does +void button_tooltip(tool_button const &Button) +{ + std::string tip{Button.label}; + if (Button.key != nullptr) + tip += std::string{" ["} + Button.key + "]"; + if (Button.tooltip != nullptr) + tip += std::string{"\n"} + Button.tooltip; + ImGui::SetTooltip("%s", tip.c_str()); +} + +// the first letters of the label in place of the icon, if the renderer can't show images +void icon_or_letters(ImDrawList *List, tool_button const &Button, ImVec2 const &Center, ImU32 const Color) +{ + if (editor_icons::draw(List, Button.picture, Center, Color)) + return; + char const text[]{Button.label[0], (Button.label[0] != '\0' ? Button.label[1] : '\0'), '\0'}; + auto const size{ImGui::CalcTextSize(text)}; + List->AddText(ImVec2(Center.x - size.x * 0.5f, Center.y - size.y * 0.5f), Color, text); +} + // the button with the icon at the place; the label stands in for the icon if the renderer can't show images void icon_button(tool_button const &Button, ImVec2 const &Position, int const Id) { @@ -88,22 +110,9 @@ void icon_button(tool_button const &Button, ImVec2 const &Position, int const Id if (Button.chosen) list->AddRect(Position, end, ImGui::GetColorU32(ImGuiCol_CheckMark), rounding, 0, 1.5f * scale()); auto const color{Button.enabled ? (Button.chosen || hovered ? IM_COL32(255, 255, 255, 255) : IM_COL32(215, 220, 225, 235)) : IM_COL32(150, 150, 150, 110)}; - ImVec2 const center{Position.x + side * 0.5f, Position.y + side * 0.5f}; - if (false == editor_icons::draw(list, Button.picture, center, color)) - { - char const text[]{Button.label[0], (Button.label[0] != '\0' ? Button.label[1] : '\0'), '\0'}; - auto const size{ImGui::CalcTextSize(text)}; - list->AddText(ImVec2(center.x - size.x * 0.5f, center.y - size.y * 0.5f), color, text); - } + icon_or_letters(list, Button, ImVec2(Position.x + side * 0.5f, Position.y + side * 0.5f), color); if (hovered) - { - std::string tip{Button.label}; - if (Button.key != nullptr) - tip += std::string{" ["} + Button.key + "]"; - if (Button.tooltip != nullptr) - tip += std::string{"\n"} + Button.tooltip; - ImGui::SetTooltip("%s", tip.c_str()); - } + button_tooltip(Button); if (clicked && Button.enabled && Button.action) Button.action(); } @@ -122,13 +131,9 @@ void editor_mode::render_viewport_overlays() render_view_axes(); } -void editor_mode::render_viewport_tools() +void editor_mode::work_area_tools(std::vector &Buttons) { - // the tools of the field of work, as in the toolbar - std::vector buttons; - buttons.reserve(16); - auto const area{current_work_area()}; - switch (area) + switch (current_work_area()) { case work_area::surroundings: { @@ -145,7 +150,7 @@ void editor_mode::render_viewport_tools() {icon::area_fill, STR_C("Area fill"), "4", nodebank_panel::FILL}, {icon::copy_to_bank, STR_C("Copy to bank"), "5", nodebank_panel::COPY}}; for (auto const &entry : modes) - buttons.push_back({entry.picture, entry.label, entry.key, nullptr, ui()->mode() == entry.which, [this, which = entry.which]() { choose_edit_mode(which); }}); + Buttons.push_back({entry.picture, entry.label, entry.key, nullptr, ui()->mode() == entry.which, [this, which = entry.which]() { choose_edit_mode(which); }}); break; } case work_area::tracks: @@ -156,9 +161,9 @@ void editor_mode::render_viewport_tools() auto const found{std::find_if(modes.begin(), modes.end(), [&](track_mode const &Mode) { return Mode.tab == Tab; })}; if (found == modes.end()) return; - // a tool chosen again gives way to the select one, as in the toolbar + // a tool chosen again gives way to the select one auto const chosen{m_track_tab == Tab && false == (Tab == track_tab::lineside && vehicle)}; - buttons.push_back({Picture, STR_C(found->label), found->key, STR_C(found->tooltip), chosen, [this, Tab, chosen]() { show_track_tab(chosen ? track_tab::path : Tab); }, Group}); + Buttons.push_back({Picture, STR_C(found->label), found->key, STR_C(found->tooltip), chosen, [this, Tab, chosen]() { show_track_tab(chosen ? track_tab::path : Tab); }, Group}); }; add(track_tab::path, icon::select, false); add(track_tab::lay, icon::lay_track, false); @@ -168,7 +173,7 @@ void editor_mode::render_viewport_tools() add(track_tab::turntable, icon::turntable, false); add(track_tab::signals, icon::signal, true); add(track_tab::lineside, icon::objects, false); - buttons.push_back({icon::vehicle, STR_C("Vehicle"), nullptr, STR_C("A vehicle to drive, put on the selected track; it isn't written to the scenery files"), vehicle, [this, vehicle]() { + Buttons.push_back({icon::vehicle, STR_C("Vehicle"), nullptr, STR_C("A vehicle to drive, put on the selected track; it isn't written to the scenery files"), vehicle, [this, vehicle]() { show_track_tab(vehicle ? track_tab::path : track_tab::lineside); m_vehicle.expand = false == vehicle; }}); @@ -176,22 +181,29 @@ void editor_mode::render_viewport_tools() add(track_tab::speed, icon::speed, false); add(track_tab::joints, icon::joints, false); add(track_tab::infra, icon::infra, false); - buttons.push_back({icon::gauge, STR_C("Structure gauge"), nullptr, STR_C("Checks which models enter the structure gauge of the tracks and the clearance over the roads (skrajnia budowli)"), m_gauge.open, + Buttons.push_back({icon::gauge, STR_C("Structure gauge"), nullptr, STR_C("Checks which models enter the structure gauge of the tracks and the clearance over the roads (skrajnia budowli)"), m_gauge.open, [this]() { m_gauge.open = !m_gauge.open; }}); break; } case work_area::roads: { auto &tool{m_roadtool}; - buttons.push_back({icon::select, STR_C("Select"), nullptr, STR_C("LMB: a road piece, a junction, a point where pieces meet, a level crossing or a traffic point"), tool.tool == 0, [this]() { road_choose_tool(0); }}); - buttons.push_back({icon::road, STR_C("Build"), nullptr, STR_C("LMB: start a road, then each next point; on a loose end, the side of a road or a junction it's joined to them"), tool.tool == 1, [this]() { road_choose_tool(1); }}); - buttons.push_back({icon::place, STR_C("Place"), nullptr, STR_C("Level crossings, and the points where vehicles appear on the roads or are taken off them"), tool.tool == 2, [this]() { road_choose_tool(2); }}); - buttons.push_back({icon::lanes, STR_C("Show lanes"), nullptr, STR_C("The lanes of the roads drawn as the paths the vehicles take"), tool.lanes, [&tool]() { tool.lanes = !tool.lanes; }, true}); + Buttons.push_back({icon::select, STR_C("Select"), nullptr, STR_C("LMB: a road piece, a junction, a point where pieces meet, a level crossing or a traffic point"), tool.tool == 0, [this]() { road_choose_tool(0); }}); + Buttons.push_back({icon::road, STR_C("Build"), nullptr, STR_C("LMB: start a road, then each next point; on a loose end, the side of a road or a junction it's joined to them"), tool.tool == 1, [this]() { road_choose_tool(1); }}); + Buttons.push_back({icon::place, STR_C("Place"), nullptr, STR_C("Level crossings, and the points where vehicles appear on the roads or are taken off them"), tool.tool == 2, [this]() { road_choose_tool(2); }}); + if (tool.tool == 2) + { + // what the place tool puts + char const *const kinds[] = {STR_C("Level crossing"), STR_C("Spawn point"), STR_C("Removal point"), STR_C("Pedestrian crossing")}; + for (int index = 0; index < static_cast(std::size(kinds)); ++index) + Buttons.push_back({icon::count, kinds[index], nullptr, nullptr, tool.placekind == index, [&tool, index]() { tool.placekind = index; }, index == 0}); + } + Buttons.push_back({icon::lanes, STR_C("Show lanes"), nullptr, STR_C("The lanes of the roads drawn as the paths the vehicles take"), tool.lanes, [&tool]() { tool.lanes = !tool.lanes; }, true}); break; } case work_area::terrain: { - // what the left button does on the terrain, as in the toolbar + // what the left button does on the terrain auto const choose = [this](bool const Sculpt, bool const Smooth, bool const Chunks) { return [this, Sculpt, Smooth, Chunks]() { m_terrain_sculpt = Sculpt; @@ -199,16 +211,26 @@ void editor_mode::render_viewport_tools() m_chunk_edit = Chunks; }; }; - buttons.push_back({icon::select, STR_C("Select"), nullptr, STR_C("LMB picks the models, as in the surroundings"), false == m_terrain_sculpt && false == m_chunk_edit, choose(false, m_terrain_brush_smooth, false)}); - buttons.push_back({icon::sculpt, STR_C("Sculpt"), nullptr, STR_C("LMB raises the terrain under the brush, Shift+LMB lowers it"), m_terrain_sculpt && false == m_terrain_brush_smooth, choose(true, false, false)}); - buttons.push_back({icon::smooth, STR_C("Smooth"), nullptr, STR_C("LMB evens the terrain out under the brush"), m_terrain_sculpt && m_terrain_brush_smooth, choose(true, true, false)}); - buttons.push_back({icon::chunks, STR_C("Chunks"), nullptr, STR_C("LMB adds a chunk next to the clicked one, Shift+LMB deletes it"), m_chunk_edit, choose(false, m_terrain_brush_smooth, true)}); + Buttons.push_back({icon::select, STR_C("Select"), nullptr, STR_C("LMB picks the models, as in the surroundings"), false == m_terrain_sculpt && false == m_chunk_edit, choose(false, m_terrain_brush_smooth, false)}); + Buttons.push_back({icon::sculpt, STR_C("Sculpt"), nullptr, STR_C("LMB raises the terrain under the brush, Shift+LMB lowers it"), m_terrain_sculpt && false == m_terrain_brush_smooth, choose(true, false, false)}); + Buttons.push_back({icon::smooth, STR_C("Smooth"), nullptr, STR_C("LMB evens the terrain out under the brush"), m_terrain_sculpt && m_terrain_brush_smooth, choose(true, true, false)}); + Buttons.push_back({icon::chunks, STR_C("Chunks"), nullptr, STR_C("LMB adds a chunk next to the clicked one, Shift+LMB deletes it"), m_chunk_edit, choose(false, m_terrain_brush_smooth, true)}); auto const orthophoto{m_orthophoto.enabled()}; - buttons.push_back({icon::orthophoto, STR_C("Orthophoto"), nullptr, STR_C("Aerial imagery of geoportal.gov.pl under the scenery, laid out by the origin of the scenery"), orthophoto, + Buttons.push_back({icon::orthophoto, STR_C("Orthophoto"), nullptr, STR_C("Aerial imagery of geoportal.gov.pl under the scenery, laid out by the origin of the scenery"), orthophoto, [this, orthophoto]() { m_orthophoto.enabled(false == orthophoto); }, true}); + Buttons.push_back({icon::count, STR_C("Orthophoto settings..."), nullptr, nullptr, m_orthophoto_window, [this]() { m_orthophoto_window = !m_orthophoto_window; }}); break; } } +} + +void editor_mode::render_viewport_tools() +{ + // the tools of the field of work which have icons, as in the toolbar + std::vector buttons; + buttons.reserve(24); + work_area_tools(buttons); + std::erase_if(buttons, [](tool_button const &Button) { return Button.picture == icon::count; }); if (buttons.empty()) return; @@ -244,6 +266,122 @@ void editor_mode::render_viewport_tools() ImGui::End(); } +void editor_mode::render_toolbar_caption(char const *Text) +{ + // as wide in both rows, so the buttons of the rows start one under the other. the rows are drawn with no spacing of items + auto const margin{std::round(ImGui::GetFontSize() * 0.75f)}; + auto const width{std::max(ImGui::CalcTextSize(STR_C("Work modes")).x, ImGui::CalcTextSize(STR_C("Tools")).x) + 2.0f * margin}; + auto const position{ImGui::GetWindowPos()}; + auto const height{ImGui::GetWindowHeight()}; + auto *list{ImGui::GetWindowDrawList()}; + auto const text{ImGui::CalcTextSize(Text)}; + list->AddText(ImVec2(position.x + margin, std::round(position.y + (height - text.y) * 0.5f)), ImGui::GetColorU32(ImGuiCol_TextDisabled), Text); + list->AddLine(ImVec2(position.x + width, position.y + height * 0.2f), ImVec2(position.x + width, position.y + height * 0.8f), ImGui::GetColorU32(ImGuiCol_Separator)); + ImGui::SetCursorScreenPos(position); + ImGui::Dummy(ImVec2(width + margin * 0.5f, height)); + ImGui::SameLine(0.0f, 0.0f); +} + +void editor_mode::render_toolbar_tools() +{ + render_toolbar_caption(STR_C("Tools")); + std::vector buttons; + buttons.reserve(24); + work_area_tools(buttons); + if (buttons.empty()) + return; + + auto const s{scale()}; + auto const iconside{editor_icons::size()}; + auto const height{ImGui::GetWindowHeight()}; + auto const margin{3.0f * s}; // over and under the buttons + auto const pad{7.0f * s}; // inside the button, at its ends + auto const spacing{5.0f * s}; // between the icon and the name + auto const gap{3.0f * s}; + auto const groupgap{15.0f * s}; + auto const buttonheight{height - 2.0f * margin}; + auto const left{ImGui::GetCursorScreenPos().x}; + auto const top{ImGui::GetWindowPos().y + margin}; + auto const right{ImGui::GetWindowPos().x + ImGui::GetWindowWidth() - 4.0f * s}; + // the names next to the icons if there's room for them; if there isn't, the name of the chosen tool only, or none + enum class names + { + all, + chosen, + none + }; + auto const named = [](tool_button const &Button, names const Names) { + return Button.picture == icon::count || Names == names::all || (Names == names::chosen && Button.chosen); + }; + auto const width = [&](tool_button const &Button, names const Names) { + if (false == named(Button, Names)) + return std::max(buttonheight, iconside + pad); + auto result{2.0f * pad + ImGui::CalcTextSize(Button.label).x}; + if (Button.picture != icon::count) + result += iconside + spacing; + return result; + }; + auto const total = [&](names const Names) { + auto result{0.0f}; + for (std::size_t index = 0; index < buttons.size(); ++index) + result += width(buttons[index], Names) + (index == 0 ? 0.0f : buttons[index].group ? groupgap : gap); + return result; + }; + auto shown{names::none}; + for (auto const option : {names::all, names::chosen}) + if (left + total(option) <= right) + { + shown = option; + break; + } + + auto *list{ImGui::GetWindowDrawList()}; + auto const rounding{3.0f * s}; + auto x{left}; + for (std::size_t index = 0; index < buttons.size(); ++index) + { + auto const &button{buttons[index]}; + if (index > 0) + { + x += button.group ? groupgap : gap; + if (button.group) + list->AddLine(ImVec2(std::round(x - groupgap * 0.5f), top + buttonheight * 0.15f), ImVec2(std::round(x - groupgap * 0.5f), top + buttonheight * 0.85f), ImGui::GetColorU32(ImGuiCol_Separator)); + } + auto const size{ImVec2(width(button, shown), buttonheight)}; + ImVec2 const position{x, top}; + ImGui::SetCursorScreenPos(position); + ImGui::PushID(static_cast(index)); + auto const clicked{ImGui::InvisibleButton("##tool", size)}; + ImGui::PopID(); + auto const hovered{ImGui::IsItemHovered()}; + ImVec2 const end{position.x + size.x, position.y + size.y}; + // the chosen one stands out as the chosen field of work does, the others as buttons + auto const background{button.chosen ? ImGui::GetColorU32(ImGuiCol_Header) : hovered && button.enabled ? ImGui::GetColorU32(ImGuiCol_HeaderHovered) : ImGui::GetColorU32(ImGuiCol_FrameBg)}; + list->AddRectFilled(position, end, background, rounding); + if (button.chosen) + list->AddRectFilled(ImVec2(position.x, end.y - 2.0f * s), end, ImGui::GetColorU32(ImGuiCol_CheckMark), rounding, ImDrawFlags_RoundCornersBottom); + auto const color{button.enabled ? ImGui::GetColorU32(ImGuiCol_Text, button.chosen || hovered ? 1.0f : 0.85f) : ImGui::GetColorU32(ImGuiCol_TextDisabled)}; + auto const center{position.y + size.y * 0.5f}; + if (named(button, shown)) + { + auto textx{position.x + pad}; + if (button.picture != icon::count) + { + editor_icons::draw(list, button.picture, ImVec2(textx + iconside * 0.5f, center), color); + textx += iconside + spacing; + } + list->AddText(ImVec2(textx, std::round(center - ImGui::GetFontSize() * 0.5f)), color, button.label); + } + else + icon_or_letters(list, button, ImVec2(position.x + size.x * 0.5f, center), color); + if (hovered) + button_tooltip(button); + if (clicked && button.enabled && button.action) + button.action(); + x = end.x; + } +} + void editor_mode::render_viewport_gizmo() { // the gizmo moves the models and the tracks; on the terrain the mouse is the brush's diff --git a/application/editoruilayer.cpp b/application/editoruilayer.cpp index ee203dda..7a7c4332 100644 --- a/application/editoruilayer.cpp +++ b/application/editoruilayer.cpp @@ -19,6 +19,7 @@ http://mozilla.org/MPL/2.0/. #include "utilities/translation.h" #include "imgui/imgui_internal.h" #include "editor/editorSettings.hpp" +#include "editor/editorIcons.hpp" #include #include @@ -602,16 +603,16 @@ void editor_ui::render_() ImGui::End(); ImGui::PopStyleVar(2); } - // toolbar under them: the tools of the field of work - if (ImGui::BeginViewportSideBar("##editortoolbar", viewport, ImGuiDir_Up, ImGui::GetFrameHeight(), flags)) - { - if (ImGui::BeginMenuBar()) - { - if (m_toolbaroptions) - m_toolbaroptions(); - ImGui::EndMenuBar(); - } - } + // toolbar under them: the tools of the field of work, as buttons with their icons, high enough for them. + // the buttons are laid out by hand, the padding is given back for their tooltips + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f)); + ImGui::PushStyleColor(ImGuiCol_WindowBg, ImGui::GetStyleColorVec4(ImGuiCol_MenuBarBg)); + auto const toolbarheight{std::max(ImGui::GetFrameHeight(), editor_icons::size() + 12.0f * std::max(1.0f, Global.ui_scale))}; + auto const toolbar{ImGui::BeginViewportSideBar("##editortoolbar", viewport, ImGuiDir_Up, toolbarheight, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoScrollWithMouse)}; + ImGui::PopStyleColor(); + ImGui::PopStyleVar(); + if (toolbar && m_toolbaroptions) + m_toolbaroptions(); ImGui::End(); render_tool_options(); render_inspector(); @@ -1094,4 +1095,4 @@ float editor_ui::rot_val() bool editor_ui::rot_from_last() { return m_functionspanel.rot_from_last; -} \ No newline at end of file +} \ No newline at end of file diff --git a/editor/editorIcons.hpp b/editor/editorIcons.hpp index 3734d465..91c9a5f3 100644 --- a/editor/editorIcons.hpp +++ b/editor/editorIcons.hpp @@ -50,6 +50,11 @@ enum class icon infra, gauge, turntable, + // the fields of work + work_surroundings, + work_tracks, + work_roads, + work_terrain, count }; diff --git a/editor/icons/editor_icons.png b/editor/icons/editor_icons.png index 80b7013b1d6941acdfa1e00a8bac910d91eb69ee..50878092d771399b35673dff962b91e6b053b04e 100644 GIT binary patch delta 47669 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 diff --git a/editor/icons/editor_icons.py b/editor/icons/editor_icons.py index 9b035485..9ef66aa1 100644 --- a/editor/icons/editor_icons.py +++ b/editor/icons/editor_icons.py @@ -321,10 +321,53 @@ def turntable(d): line(d, [(32 + math.cos(r) * 24, 32 + math.sin(r) * 24), (32 + math.cos(r) * 31, 32 + math.sin(r) * 31)], W - 4) +# the fields of work of the editor, in the row over the toolbar + + +def work_surroundings(d): + # a tree and a house by it + poly(d, [(18, 4), (32, 30), (4, 30)]) + poly(d, [(18, 14), (34, 44), (2, 44)]) + line(d, [(18, 44), (18, 60)], W - 2) + poly(d, [(36, 34), (49, 22), (62, 34)]) + rect(d, 39, 34, 59, 60) + + +def work_tracks(d): + # the track going away, rails on sleepers + line(d, [(8, 60), (26, 4)], W - 4) + line(d, [(56, 60), (38, 4)], W - 4) + for y, half in ((54, 28), (40, 22), (28, 17), (18, 13), (10, 10)): + line(d, [(32 - half, y), (32 + half, y)], W - 8 if y > 20 else W - 10) + + +def work_roads(d): + # a car seen from its side + poly(d, [(4, 44), (4, 34), (14, 30), (22, 18), (44, 18), (52, 30), (60, 34), (60, 44)]) + circle(d, 17, 46, 8) + circle(d, 47, 46, 8) + + +def work_terrain(d): + # the mesh of the ground over a hill + def at(u, v): + # u across 0..1, v from the back (0) to the front (1) + half = 18 + 12 * v + x = 32 + (u - 0.5) * 2 * half + hill = 18 * math.exp(-((u - 0.5) ** 2) / 0.07 - ((v - 0.35) ** 2) / 0.15) + return (x, 24 + 34 * v - hill) + steps = [i / 12 for i in range(13)] + for v in (0.0, 0.33, 0.66, 1.0): + line(d, [at(u, v) for u in steps], W - 6) + for u in (0.0, 0.33, 0.66, 1.0): + line(d, [at(u, v) for v in steps], W - 6) + + ICONS = [select, insert, brush, area_fill, copy_to_bank, translate, rotate, scale, local_space, ortho, perspective, sculpt, smooth, chunks, orthophoto, road, place, lanes, lay_track, switch, straight, curve, signal, objects, - vehicle, profile, speed, joints, infra, gauge, turntable] + vehicle, profile, speed, joints, infra, gauge, turntable, work_surroundings, + work_tracks, work_roads, work_terrain] def cutouts(name, d): @@ -341,6 +384,18 @@ def cutouts(name, d): rect(d, 10, 27, 20, 35) rect(d, 26, 27, 36, 35) rect(d, 42, 27, 50, 35) + elif name == "work_surroundings": + # the door and the gap between the crowns of the tree + rect(d, 46, 46, 52, 60) + line(d, [(9, 31), (27, 31)], 8) + elif name == "work_roads": + # the windows, and the gaps around the wheels + poly(d, [(25, 22), (31, 22), (31, 30), (19, 30)]) + poly(d, [(35, 22), (42, 22), (47, 30), (35, 30)]) + circle(d, 17, 46, 11, outline=True, width=12) + circle(d, 47, 46, 11, outline=True, width=12) + circle(d, 17, 46, 3) + circle(d, 47, 46, 3) def main(): diff --git a/lang/editor_pl.po b/lang/editor_pl.po index b043f4e2..442756c6 100644 --- a/lang/editor_pl.po +++ b/lang/editor_pl.po @@ -5061,3 +5061,23 @@ msgstr "Upuść go na zestaw modeli albo na listę pędzla lub wypełniania obsz msgid "or drag models here from the node bank" msgstr "albo przeciągnij tu modele z banku obiektów" + +# scenery editor: the toolbar with icons, the rows captioned + +msgid "Work modes" +msgstr "Tryby pracy" + +msgid "Tools" +msgstr "Narzędzia" + +msgid "Level crossing" +msgstr "Przejazd kolejowy" + +msgid "Spawn point" +msgstr "Punkt pojawiania" + +msgid "Removal point" +msgstr "Punkt znikania" + +msgid "Pedestrian crossing" +msgstr "Przejście dla pieszych"