Replace Old Widgets
This commit is contained in:
parent
cce8f0e1bc
commit
fcd5eb2d2a
81 changed files with 388 additions and 278 deletions
|
|
@ -2,7 +2,8 @@
|
|||
|
||||
#include "Library.hpp"
|
||||
#include "Player.hpp"
|
||||
#include "Widgets.hpp"
|
||||
#include "FloatingWidget.hpp"
|
||||
#include "DockWidget.hpp"
|
||||
|
||||
#include "imgui.h"
|
||||
|
||||
|
|
@ -10,54 +11,83 @@ namespace tp {
|
|||
|
||||
class TrackWidget : public Widget {
|
||||
public:
|
||||
explicit TrackWidget(const Track* track = nullptr) :
|
||||
mTrack(track) {
|
||||
this->mArea.w = 70;
|
||||
col.mColor.setAnimTime(0);
|
||||
col.mColor.setNoTransition({ 0.15f, 0.15f, 0.15f, 0.f });
|
||||
enum State {
|
||||
IDLE,
|
||||
HOVER,
|
||||
SELECTED,
|
||||
};
|
||||
|
||||
void eventProcess(const Events& events) override {
|
||||
mSelected = false;
|
||||
if (!mTrack) return;
|
||||
if (this->mArea.isInside(events.getPointer())) {
|
||||
col.set({ 0.15f, 0.15f, 0.15f, 1.f });
|
||||
mSelected = events.isReleased(InputID::MOUSE1);
|
||||
} else {
|
||||
col.set({ 0.15f, 0.15f, 0.15f, 0.f });
|
||||
explicit TrackWidget(const Track* track = nullptr) :
|
||||
mTrack(track) {
|
||||
|
||||
getLayout()->setMinSize({ 70, 70 });
|
||||
};
|
||||
|
||||
void process(const EventHandler& events) override {
|
||||
mState = IDLE;
|
||||
|
||||
if (!mTrack) {
|
||||
mState = IDLE;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (mState) {
|
||||
case HOVER:
|
||||
case IDLE:
|
||||
mState = getArea().relative().isInside(events.getPointer()) ? HOVER : IDLE;
|
||||
if (events.isPressed(InputID::MOUSE1)) {
|
||||
mState = SELECTED;
|
||||
}
|
||||
break;
|
||||
|
||||
case SELECTED:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void eventDraw(Canvas& canvas) override {
|
||||
void draw(Canvas& canvas) override {
|
||||
if (!mTrack) return;
|
||||
auto area = getArea().relative();
|
||||
|
||||
canvas.rect(this->mArea, col.get(), 4.f);
|
||||
switch (mState) {
|
||||
case IDLE: canvas.rect(area, colorIdle, rounding); break;
|
||||
case HOVER: canvas.rect(area, colorHover, rounding); break;
|
||||
case SELECTED: canvas.rect(area, colorSelected, rounding); break;
|
||||
}
|
||||
|
||||
const RectF imageArea = {
|
||||
this->mArea.x + margin, this->mArea.y + margin, this->mArea.w - margin * 2, this->mArea.w - margin * 2
|
||||
|
||||
const RectF imageArea = { area.x + margin, area.y + margin, area.w - margin * 2, area.w - margin * 2 };
|
||||
canvas.rect(imageArea, colorImage, rounding);
|
||||
|
||||
const RectF textArea = {
|
||||
area.x + area.w + margin, area.y + margin, area.z - area.w - margin * 2, area.w - margin * 2
|
||||
};
|
||||
|
||||
canvas.rect(imageArea, { 0.25f, 0.25f, 0.25f, 1.f }, 4.f);
|
||||
|
||||
const RectF textArea = { this->mArea.x + this->mArea.w + margin,
|
||||
this->mArea.y + margin,
|
||||
this->mArea.z - this->mArea.w - margin * 2,
|
||||
this->mArea.w - margin * 2 };
|
||||
|
||||
// canvas.rect(textArea, { 0.25f, 0.25f, 0.25f, 1.f }, 4.f);
|
||||
|
||||
const RectF textAreaName = { textArea.x, textArea.y, textArea.z, textArea.w * 0.5f };
|
||||
const RectF textAreaAuthor = { textArea.x, textArea.y + textArea.w * 0.5f, textArea.z, textArea.w * 0.5f };
|
||||
|
||||
canvas.text(mTrack->mName.c_str(), textAreaName, 15.f, Canvas::LC, 4.f, { 0.9f, 0.9f, 0.9f, 1.f });
|
||||
canvas.text(mTrack->mArtist.c_str(), textAreaAuthor, 12.f, Canvas::LC, 4.f, { 0.8f, 0.8f, 0.8f, 1.f });
|
||||
canvas.text(mTrack->mName.c_str(), textAreaName, 15.f, Canvas::LC, rounding, colorNameTrack);
|
||||
canvas.text(mTrack->mArtist.c_str(), textAreaAuthor, 12.f, Canvas::LC, rounding, colorNameArtist);
|
||||
}
|
||||
|
||||
[[nodiscard]] bool processesEvents() const override { return true; }
|
||||
|
||||
public:
|
||||
halnf margin = 5.f;
|
||||
AnimColor col;
|
||||
const Track* mTrack;
|
||||
bool mSelected = false;
|
||||
State mState = IDLE;
|
||||
|
||||
private:
|
||||
halnf margin = 5.f;
|
||||
halnf rounding = 5.f;
|
||||
|
||||
RGBA colorIdle = 0;
|
||||
RGBA colorNameTrack = { 0.9f, 0.9f, 0.9f, 1.f };
|
||||
RGBA colorNameArtist = { 0.8f, 0.8f, 0.8f, 1.f };
|
||||
RGBA colorImage = { 0.5, 0.5, 0.5, 1.0 };
|
||||
RGBA colorHover = { 0.13, 0.13, 0.13, 0.9 };
|
||||
RGBA colorSelected = { 0.43, 0.43, 0.43, 0.9 };
|
||||
};
|
||||
|
||||
class TrackInfoWidget : public Widget {
|
||||
|
|
@ -74,21 +104,23 @@ namespace tp {
|
|||
items.append({ "Date Last Played" });
|
||||
}
|
||||
|
||||
void eventDraw(Canvas&) override {
|
||||
void draw(Canvas&) override {
|
||||
if (!mTrack) return;
|
||||
// canvas.rect(this->mArea, { 0.13f, 0.13f, 0.13f, 1.f }, 4.f);
|
||||
renderUI();
|
||||
}
|
||||
|
||||
void renderUI() {
|
||||
ImGui::SetNextWindowPos({ this->mArea.x, this->mArea.y });
|
||||
ImGui::SetNextWindowSize({ this->mArea.z, this->mArea.w });
|
||||
// auto area = getArea();
|
||||
|
||||
// ImGui::SetNextWindowPos({ area.x, this->mArea.y });
|
||||
// ImGui::SetNextWindowSize({ area.z, this->mArea.w });
|
||||
|
||||
ImGui::Begin(
|
||||
"InfoWindow",
|
||||
nullptr,
|
||||
ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoBackground |
|
||||
ImGuiWindowFlags_NoResize
|
||||
nullptr //,
|
||||
//ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoBackground |
|
||||
// ImGuiWindowFlags_NoResize
|
||||
);
|
||||
|
||||
if (mTrack) {
|
||||
|
|
@ -184,18 +216,18 @@ namespace tp {
|
|||
int filterExisting = 0; // all existing no-existing
|
||||
};
|
||||
|
||||
class LibraryWidget : public WorkspaceWidget {
|
||||
class LibraryWidget : public DockWidget {
|
||||
public:
|
||||
LibraryWidget(Library* lib, Player* player) {
|
||||
mLibrary = (lib);
|
||||
mPlayer = (player);
|
||||
|
||||
updateTracks();
|
||||
// updateTracks();
|
||||
|
||||
mCurrentTrackInfo.mPlayer = mPlayer;
|
||||
|
||||
mDockSpace.setCenterWidget(&mSongList);
|
||||
mDockSpace.addSideWidget(&mCurrentTrackInfo, DockWidget::RIGHT);
|
||||
setCenterWidget(&mSongList);
|
||||
dockWidget(&mCurrentTrackInfo, DockLayout::RIGHT);
|
||||
|
||||
// this->mChildWidgets.pushBack(&mCurrentTrackInfo);
|
||||
// this->mChildWidgets.pushBack(&mCurrentTrack);
|
||||
|
|
@ -203,24 +235,30 @@ namespace tp {
|
|||
|
||||
void updateTracks() {
|
||||
mTracks.clear();
|
||||
|
||||
for (auto track : mTracks) {
|
||||
delete track.data();
|
||||
}
|
||||
|
||||
for (auto track : mLibrary->mTraks) {
|
||||
mTracks.append(TrackWidget(&track.data()));
|
||||
mTracks.append(new TrackWidget(&track.data()));
|
||||
}
|
||||
}
|
||||
|
||||
void eventProcess(const Events& events) override {
|
||||
void process(const EventHandler& events) override {
|
||||
filter();
|
||||
|
||||
for (auto track : mSongList.getContent()) {
|
||||
auto trackWidget = (TrackWidget*) track.data();
|
||||
if (trackWidget->mSelected) {
|
||||
mCurrentTrackInfo.mTrack = trackWidget->mTrack;
|
||||
if (auto trackWidget = dynamic_cast<TrackWidget*>(track.data())) {
|
||||
if (trackWidget->mState == TrackWidget::SELECTED) {
|
||||
mCurrentTrackInfo.mTrack = trackWidget->mTrack;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// mCurrentTrack.proc(events, this->mArea, mSplitView.getFirst());
|
||||
|
||||
WorkspaceWidget::eventProcess(events);
|
||||
DockWidget::process(events);
|
||||
}
|
||||
|
||||
// void eventDraw(Canvas& canvas) override {
|
||||
|
|
@ -230,7 +268,7 @@ namespace tp {
|
|||
void filter() {
|
||||
if (!mCurrentTrackInfo.isSongFilterChanged) return;
|
||||
|
||||
mSongList.clearContent();
|
||||
mSongList.clearChildren();
|
||||
|
||||
for (auto track : mTracks) {
|
||||
if (!mCurrentTrackInfo.songFilter.PassFilter(track->mTrack->mName.c_str()) &&
|
||||
|
|
@ -252,7 +290,7 @@ namespace tp {
|
|||
break;
|
||||
}
|
||||
|
||||
mSongList.addWidget(&track.data());
|
||||
mSongList.addToMenu(track.data());
|
||||
}
|
||||
|
||||
mCurrentTrackInfo.isSongFilterChanged = false;
|
||||
|
|
@ -262,9 +300,9 @@ namespace tp {
|
|||
Library* mLibrary = nullptr;
|
||||
Player* mPlayer = nullptr;
|
||||
|
||||
Buffer<TrackWidget> mTracks;
|
||||
Buffer<TrackWidget*> mTracks;
|
||||
|
||||
ScrollableWindow mSongList;
|
||||
FloatingMenu mSongList;
|
||||
TrackInfoWidget mCurrentTrackInfo;
|
||||
TrackWidget mCurrentTrack;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue