Readded file tabs
This commit is contained in:
parent
26c9be8318
commit
3c5e41af94
17 changed files with 297 additions and 213 deletions
|
|
@ -3,65 +3,83 @@
|
|||
#include "../GUIManager.hpp"
|
||||
#include <iostream>
|
||||
|
||||
#include "../ElementHelpers/ButtonHelpers.hpp"
|
||||
#include "../ElementHelpers/TextLabelHelpers.hpp"
|
||||
#include "SVGIcon.hpp"
|
||||
|
||||
namespace GUIStuff {
|
||||
|
||||
using namespace ElementHelpers;
|
||||
|
||||
MovableTabList::MovableTabList(GUIManager& gui): Element(gui) {}
|
||||
|
||||
void MovableTabList::layout(const Clay_ElementId& id, const Data& d) {
|
||||
//CLAY_AUTO_ID({.layout = {
|
||||
// .sizing = {.width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(GUIStuff::GUIManager::BIG_BUTTON_SIZE)},
|
||||
// .padding = CLAY_PADDING_ALL(0),
|
||||
// .childGap = 4,
|
||||
// .childAlignment = { .x = CLAY_ALIGN_X_LEFT, .y = CLAY_ALIGN_Y_CENTER },
|
||||
// .layoutDirection = CLAY_LEFT_TO_RIGHT
|
||||
// },
|
||||
// .clip = {.horizontal = true, .childOffset = Clay_GetScrollOffset()}
|
||||
//}) {
|
||||
// for(size_t i = 0; i < d.tabNames.size(); i++) {
|
||||
// CLAY_AUTO_ID({.layout = {
|
||||
// .sizing = {.width = CLAY_SIZING_FIT(200), .height = CLAY_SIZING_GROW(0)},
|
||||
// }
|
||||
// }) {
|
||||
// buttons[i].update(io, SelectableButton::DrawType::FILLED, [&](SelectionHelper& s, bool iS) {
|
||||
// CLAY_AUTO_ID({.layout = {
|
||||
// .sizing = {.width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_GROW(0)},
|
||||
// .padding = CLAY_PADDING_ALL(0),
|
||||
// .childGap = 4,
|
||||
// .childAlignment = { .x = CLAY_ALIGN_X_CENTER, .y = CLAY_ALIGN_Y_CENTER },
|
||||
// .layoutDirection = CLAY_LEFT_TO_RIGHT
|
||||
// }
|
||||
// }) {
|
||||
// if(!tabNames[i].first.empty()) {
|
||||
// CLAY_AUTO_ID({.layout = {
|
||||
// .sizing = {.width = CLAY_SIZING_FIXED(GUIStuff::GUIManager::SMALL_BUTTON_SIZE), .height = CLAY_SIZING_FIXED(GUIStuff::GUIManager::SMALL_BUTTON_SIZE)},
|
||||
// .childAlignment = { .x = CLAY_ALIGN_X_CENTER, .y = CLAY_ALIGN_Y_CENTER },
|
||||
// .layoutDirection = CLAY_LEFT_TO_RIGHT
|
||||
// }
|
||||
// }) {
|
||||
// tabIcons[i].update(io, tabNames[i].first, iS, nullptr);
|
||||
// }
|
||||
// }
|
||||
// CLAY_TEXT(io.strArena->std_str_to_clay_str(tabNames[i].second), CLAY_TEXT_CONFIG({.textColor = convert_vec4<Clay_Color>(io.theme->frontColor1), .fontSize = io.fontSize }));
|
||||
// if(s.clicked)
|
||||
// selectedTab = i;
|
||||
// CLAY_AUTO_ID({.layout = {.sizing = {.width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_GROW(0)}}}) {}
|
||||
// CLAY_AUTO_ID({.layout = {
|
||||
// .sizing = {.width = CLAY_SIZING_FIXED(GUIStuff::GUIManager::SMALL_BUTTON_SIZE), .height = CLAY_SIZING_FIXED(GUIStuff::GUIManager::SMALL_BUTTON_SIZE)},
|
||||
// .childAlignment = { .x = CLAY_ALIGN_X_CENTER, .y = CLAY_ALIGN_Y_CENTER },
|
||||
// .layoutDirection = CLAY_LEFT_TO_RIGHT
|
||||
// }
|
||||
// }) {
|
||||
// closeButtons[i].update(io, SelectableButton::DrawType::TRANSPARENT_ALL, [&](SelectionHelper& s, bool iS) {
|
||||
// if(s.clicked)
|
||||
// closedTab = i;
|
||||
// closeIcons[i].update(io, "data/icons/close.svg", s.held || s.hovered, nullptr);
|
||||
// }, false);
|
||||
// }
|
||||
// }
|
||||
// }, currentSelectedTab == i);
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
void MovableTabList::layout(const Clay_ElementId& id, const MovableTabListData& newData) {
|
||||
d = newData;
|
||||
CLAY(id, {.layout = {
|
||||
.sizing = {.width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(BIG_BUTTON_SIZE)},
|
||||
.padding = CLAY_PADDING_ALL(0),
|
||||
.childGap = 4,
|
||||
.childAlignment = { .x = CLAY_ALIGN_X_LEFT, .y = CLAY_ALIGN_Y_CENTER },
|
||||
.layoutDirection = CLAY_LEFT_TO_RIGHT
|
||||
},
|
||||
.clip = {.horizontal = true, .childOffset = Clay_GetScrollOffset()}
|
||||
}) {
|
||||
for(size_t i = 0; i < d.tabNames.size(); i++) {
|
||||
CLAY_AUTO_ID({.layout = {
|
||||
.sizing = {.width = CLAY_SIZING_FIT(200), .height = CLAY_SIZING_GROW(0)},
|
||||
}
|
||||
}) {
|
||||
gui.new_id(i, [&] {
|
||||
gui.element<SelectableButton>("b", SelectableButton::Data{
|
||||
.drawType = SelectableButton::DrawType::FILLED,
|
||||
.isSelected = d.selectedTab == i,
|
||||
.onClick = [&, i] {
|
||||
if(d.selectedTab != i && d.changeSelectedTab) d.changeSelectedTab(i);
|
||||
},
|
||||
.innerContent = [&] (const SelectableButton::InnerContentCallbackParameters&) {
|
||||
CLAY_AUTO_ID({.layout = {
|
||||
.sizing = {.width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_GROW(0)},
|
||||
.padding = CLAY_PADDING_ALL(0),
|
||||
.childGap = 4,
|
||||
.childAlignment = { .x = CLAY_ALIGN_X_CENTER, .y = CLAY_ALIGN_Y_CENTER },
|
||||
.layoutDirection = CLAY_LEFT_TO_RIGHT
|
||||
}
|
||||
}) {
|
||||
if(!d.tabNames[i].iconPath.empty()) {
|
||||
CLAY_AUTO_ID({.layout = {
|
||||
.sizing = {.width = CLAY_SIZING_FIXED(SMALL_BUTTON_SIZE), .height = CLAY_SIZING_FIXED(SMALL_BUTTON_SIZE)},
|
||||
.childAlignment = { .x = CLAY_ALIGN_X_CENTER, .y = CLAY_ALIGN_Y_CENTER },
|
||||
.layoutDirection = CLAY_LEFT_TO_RIGHT
|
||||
}
|
||||
}) {
|
||||
gui.element<SVGIcon>("icon", d.tabNames[i].iconPath);
|
||||
}
|
||||
}
|
||||
text_label(gui, d.tabNames[i].name);
|
||||
CLAY_AUTO_ID({.layout = {.sizing = {.width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_GROW(0)}}}) {}
|
||||
CLAY_AUTO_ID({.layout = {
|
||||
.sizing = {.width = CLAY_SIZING_FIXED(SMALL_BUTTON_SIZE), .height = CLAY_SIZING_FIXED(SMALL_BUTTON_SIZE)},
|
||||
.childAlignment = { .x = CLAY_ALIGN_X_CENTER, .y = CLAY_ALIGN_Y_CENTER },
|
||||
.layoutDirection = CLAY_LEFT_TO_RIGHT
|
||||
}
|
||||
}) {
|
||||
gui.element<SelectableButton>("close button", SelectableButton::Data {
|
||||
.drawType = SelectableButton::DrawType::TRANSPARENT_ALL,
|
||||
.onClick = [&, i] {
|
||||
if(d.closeTab) d.closeTab(i);
|
||||
},
|
||||
.innerContent = [&] (const SelectableButton::InnerContentCallbackParameters&) {
|
||||
gui.element<SVGIcon>("close", "data/icons/close.svg");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,17 +5,23 @@
|
|||
|
||||
namespace GUIStuff {
|
||||
|
||||
struct MovableTabListData {
|
||||
struct IconNamePair {
|
||||
std::string iconPath;
|
||||
std::string name;
|
||||
};
|
||||
std::vector<IconNamePair> tabNames;
|
||||
size_t selectedTab = 0;
|
||||
std::function<void(size_t)> changeSelectedTab;
|
||||
std::function<void(size_t)> closeTab;
|
||||
};
|
||||
|
||||
class MovableTabList : public Element {
|
||||
public:
|
||||
struct Data {
|
||||
std::vector<std::pair<std::string, std::string>> tabNames;
|
||||
size_t selectedTab = 0;
|
||||
std::function<void(size_t)> changeSelectedTab;
|
||||
std::function<void(size_t)> closeTab;
|
||||
};
|
||||
|
||||
MovableTabList(GUIManager& gui);
|
||||
void layout(const Clay_ElementId& id, const Data& d);
|
||||
void layout(const Clay_ElementId& id, const MovableTabListData& newData = {});
|
||||
private:
|
||||
MovableTabListData d;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ namespace GUIStuff {
|
|||
class SVGIcon : public Element {
|
||||
public:
|
||||
SVGIcon(GUIManager& gui);
|
||||
void layout(const Clay_ElementId& id, const std::string& newSvgPath, bool newIsHighlighted);
|
||||
void layout(const Clay_ElementId& id, const std::string& newSvgPath, bool newIsHighlighted = false);
|
||||
virtual void clay_draw(SkCanvas* canvas, UpdateInputData& io, Clay_RenderCommand* command, bool skiaAA) override;
|
||||
private:
|
||||
bool highlighted;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue