diff --git a/apps/sample-gui/MediaTool.cpp b/apps/sample-gui/MediaTool.cpp index bf6a550..5127f62 100644 --- a/apps/sample-gui/MediaTool.cpp +++ b/apps/sample-gui/MediaTool.cpp @@ -24,36 +24,34 @@ void MediaTool::initializeViews() auto mainWindow = mDesktopManager->getWindowManager()->getMainWindow(); mainWindow->setSize(800, 600); - /* auto tabbedPanel = TabbedPanelWidget::Create(); auto textEditor = TextEditorView::Create(); - auto path = mMainApplication->GetCommandLineArgs()->getLaunchPath(); + auto path = mMainApplication->getCommandLineArgs()->getLaunchPath(); path /= "out.txt"; textEditor->GetController()->SetSavePath(path); textEditor->GetController()->SetLoadPath(path); textEditor->Initialize(); - tabbedPanel->AddPanel(std::move(textEditor), "Text Editor"); + tabbedPanel->addPanel(std::move(textEditor), "Text Editor"); auto audioEditor = AudioEditorView::Create(); - tabbedPanel->AddPanel(std::move(audioEditor), "Audio Editor"); + tabbedPanel->addPanel(std::move(audioEditor), "Audio Editor"); auto imageEditor = ImageEditorView::Create(); - tabbedPanel->AddPanel(std::move(imageEditor), "Image Editor"); + tabbedPanel->addPanel(std::move(imageEditor), "Image Editor"); auto webClient = WebClientView::Create(); - tabbedPanel->AddPanel(std::move(webClient), "Web Client"); + tabbedPanel->addPanel(std::move(webClient), "Web Client"); auto topBar = TopBar::Create(); auto statusBar = StatusBar::Create(); - auto horizontalSpace = HorizontalSpacer::Create(); - horizontalSpace->AddWidgetWithScale(std::move(topBar), 1); - horizontalSpace->AddWidgetWithScale(std::move(tabbedPanel), 20); - horizontalSpace->AddWidgetWithScale(std::move(statusBar), 1); - - */ + auto horizontal_spacer = HorizontalSpacer::Create(); + horizontal_spacer->addWidgetWithScale(std::move(topBar), 1); + horizontal_spacer->addWidgetWithScale(std::move(tabbedPanel), 20); + horizontal_spacer->addWidgetWithScale(std::move(statusBar), 1); + /* auto button = Button::Create(); button->setLabel("Click!"); button->setBounds(100, 200); @@ -66,6 +64,7 @@ void MediaTool::initializeViews() auto horizontal_spacer = HorizontalSpacer::Create(); horizontal_spacer->addWidgetWithScale(std::move(button), 1); horizontal_spacer->addWidgetWithScale(std::move(background_widget), 1); + */ mainWindow->setWidget(std::move(horizontal_spacer)); } diff --git a/src/client/TabbedPanelWidget.cpp b/src/client/TabbedPanelWidget.cpp index 15d156f..5ac5486 100644 --- a/src/client/TabbedPanelWidget.cpp +++ b/src/client/TabbedPanelWidget.cpp @@ -27,25 +27,27 @@ std::unique_ptr TabbedPanelWidget::Create() return std::make_unique(); } -StackWidget* TabbedPanelWidget::GetStack() const +StackWidget* TabbedPanelWidget::getStack() const { return mStack; } -void TabbedPanelWidget::AddPanel(WidgetUPtr panel, const std::string& label) +void TabbedPanelWidget::addPanel(WidgetUPtr panel, const std::string& label) { auto button = Button::Create(); button->setLabel(label); button->setBackgroundColor(Color(156, 156, 156)); button->setMargin({1, 0, 0, 1}); + auto rawPanel = panel.get(); auto onClick = [this, rawPanel](Widget*){ if(this && rawPanel) { - this->GetStack()->ShowChild(rawPanel); + this->getStack()->showChild(rawPanel); } }; button->setOnClickFunction(onClick); + mStack->addWidget(std::move(panel)); mNavPanel->addWidget(std::move(button)); } diff --git a/src/client/TabbedPanelWidget.h b/src/client/TabbedPanelWidget.h index 47350ea..d024722 100644 --- a/src/client/TabbedPanelWidget.h +++ b/src/client/TabbedPanelWidget.h @@ -6,18 +6,19 @@ class TabbedPanelWidget : public Widget { - Widget* mNavPanel; - StackWidget* mStack; public: - TabbedPanelWidget(); static std::unique_ptr Create(); - void AddPanel(WidgetUPtr panel, const std::string& label); + void addPanel(WidgetUPtr panel, const std::string& label); - StackWidget* GetStack() const; + StackWidget* getStack() const; + +private: + Widget* mNavPanel; + StackWidget* mStack; }; using TabbedPanelWidgetUPtr = std::unique_ptr; diff --git a/src/ui_elements/widgets/StackWidget.cpp b/src/ui_elements/widgets/StackWidget.cpp index f7f020c..2086035 100644 --- a/src/ui_elements/widgets/StackWidget.cpp +++ b/src/ui_elements/widgets/StackWidget.cpp @@ -10,7 +10,7 @@ std::unique_ptr StackWidget::Create() return std::make_unique(); } -void StackWidget::ShowChild(Widget* target) +void StackWidget::showChild(Widget* target) { for(auto& child : mChildren) { diff --git a/src/ui_elements/widgets/StackWidget.h b/src/ui_elements/widgets/StackWidget.h index e72f9e9..c2d3746 100644 --- a/src/ui_elements/widgets/StackWidget.h +++ b/src/ui_elements/widgets/StackWidget.h @@ -9,7 +9,7 @@ public: static std::unique_ptr Create(); - void ShowChild(Widget* child); + void showChild(Widget* child); }; using StackWidgetUPtr = std::unique_ptr; diff --git a/src/ui_elements/widgets/Widget.cpp b/src/ui_elements/widgets/Widget.cpp index bbb2cb1..c1fb624 100644 --- a/src/ui_elements/widgets/Widget.cpp +++ b/src/ui_elements/widgets/Widget.cpp @@ -132,6 +132,11 @@ void Widget::setVisible(bool visible) mVisibilityDirty = true; } mVisible = visible; + + for (auto& child : mChildren) + { + child->setVisible(mVisible); + } } bool Widget::isDirty() const @@ -198,6 +203,7 @@ void Widget::updateChildLocations() { child->setBounds(mSize.mWidth, mSize.mHeight); child->setLocation(mLocation); + child->setVisible(mVisible); } } @@ -259,7 +265,7 @@ bool Widget::onMouseEvent(const MouseEvent* event) } if(!inChild) { - if(contains(event->GetClientLocation())) + if(mVisible && contains(event->GetClientLocation())) { onMyMouseEvent(event); return true; diff --git a/src/visual_elements/AbstractVisualNode.h b/src/visual_elements/AbstractVisualNode.h index 7b6bd6f..9f6e237 100644 --- a/src/visual_elements/AbstractVisualNode.h +++ b/src/visual_elements/AbstractVisualNode.h @@ -72,6 +72,11 @@ public: return mName; } + bool getIsVisible() const + { + return mIsVisible; + } + protected: DiscretePoint mLocation; std::unique_ptr mSceneItem; diff --git a/src/visual_elements/Scene.cpp b/src/visual_elements/Scene.cpp index a445109..dd13ea6 100644 --- a/src/visual_elements/Scene.cpp +++ b/src/visual_elements/Scene.cpp @@ -14,6 +14,7 @@ Scene::Scene() void Scene::update(FontsManager* fontsManager) { + mSceneItems.clear(); updateNode(mRootNode.get(), fontsManager); } @@ -21,7 +22,10 @@ void Scene::updateNode(AbstractVisualNode* node, FontsManager* fontsManager) { for (auto child : node->getChildren()) { - updateNode(child, fontsManager); + if (child->getIsVisible()) + { + updateNode(child, fontsManager); + } } node->update(fontsManager);