This commit is contained in:
IlyaShurupov 2024-06-23 17:57:14 +03:00 committed by Ilya Shurupov
parent c87e5a25d5
commit a55a5ec5cc
7 changed files with 151 additions and 51 deletions

View file

@ -15,18 +15,10 @@ namespace tp {
void eventProcess(const Events&) override {
if (mHeader.isReleased()) {
mCollapsed = !mCollapsed;
toggleCollapsed();
}
mHeader.setArea(getHeaderRect());
mBody.mEnable = !mCollapsed;
if (mCollapsed) {
this->mArea.size.y = headerHeight;
} else {
this->mArea.size.y = headerHeight + getBodyRect().size.y + mPadding * 2;
mBody.setArea(getBodyRect());
}
updateGeometry();
}
void eventDraw(Canvas& canvas) override {
@ -43,6 +35,36 @@ namespace tp {
mHeader.mLabel = string;
}
void toggleCollapsed() {
setCollapsed(!getCollapsed());
}
void setCollapsed(bool collapsed) {
if (mLocked) return;
if (collapsed && !mCollapsed) mPrevHeight = this->mArea.size.y;
if (!collapsed && mCollapsed) this->mArea.size.y = mPrevHeight;
mCollapsed = collapsed;
}
[[nodiscard]] bool getCollapsed() const{
return mCollapsed;
}
void updateGeometry() {
mHeader.setArea(getHeaderRect());
mBody.mEnable = !mCollapsed;
if (mCollapsed) {
this->mArea.size.y = headerHeight;
} else {
if (mAdjustHeight) {
this->mArea.size.y = headerHeight + getBodyRect().size.y + mPadding * 2;
}
mBody.setArea(getBodyRect());
}
}
private:
RectF getHeaderRect() {
RectF out = { this->mArea.pos, { this->mArea.size.x, headerHeight } };
@ -51,9 +73,13 @@ namespace tp {
RectF getBodyRect() {
RectF out = { { this->mArea.pos.x, this->mArea.pos.y + headerHeight },
{ this->mArea.size.x, mBody.getContentSize() }
{ this->mArea.size.x, this->mArea.size.y - headerHeight - mPadding }
};
out.size.y -= mBorderSize * 2;
if (mAdjustHeight) out.size.y = mBody.getContentSize();
if (mBody.getContentSize()) {
out = out.shrink(mPadding);
out.size.y += mPadding * 2 + 1;
@ -86,6 +112,10 @@ namespace tp {
halnf mBorderSize = 0;
halnf mPadding = 0;
halnf mPrevHeight = 200;
bool mCollapsed = true;
bool mLocked = false;
bool mAdjustHeight = true;
};
}