use mvvm
Switch the Testbed GUI architecture pattern to MVVM (Model-View-ModelView).
This commit is contained in:
@ -17,8 +17,10 @@
|
||||
*/
|
||||
|
||||
#include <testbed/framework/view.h>
|
||||
#include <testbed/framework/model.h>
|
||||
#include <testbed/framework/view_model.h>
|
||||
#include <testbed/framework/test.h>
|
||||
|
||||
#include <imgui/imgui.h>
|
||||
#if defined (U_OPENGL_2)
|
||||
#include <imgui/imgui_impl_glfw_gl2.h>
|
||||
#elif defined (U_OPENGL_4)
|
||||
@ -28,7 +30,7 @@
|
||||
|
||||
#include <glfw/glfw3.h>
|
||||
|
||||
static bool GetTestName(void* userData, int idx, const char** name)
|
||||
static inline bool GetTestName(void* userData, int idx, const char** name)
|
||||
{
|
||||
assert(u32(idx) < g_testCount);
|
||||
*name = g_tests[idx].name;
|
||||
@ -111,8 +113,9 @@ static inline void ImGui_GLFW_GL_RenderDrawData(ImDrawData* draw_data)
|
||||
|
||||
}
|
||||
|
||||
View::View(GLFWwindow* window, Model* model) : m_presenter(model, this)
|
||||
View::View(GLFWwindow* window)
|
||||
{
|
||||
m_viewModel = nullptr;
|
||||
m_window = window;
|
||||
|
||||
// Create UI
|
||||
@ -127,9 +130,6 @@ View::View(GLFWwindow* window, Model* model) : m_presenter(model, this)
|
||||
|
||||
ImGui::StyleColorsDark();
|
||||
|
||||
m_leftDown = false;
|
||||
m_rightDown = false;
|
||||
m_shiftDown = false;
|
||||
m_ps0.SetZero();
|
||||
}
|
||||
|
||||
@ -141,88 +141,60 @@ View::~View()
|
||||
ImGui::DestroyContext();
|
||||
}
|
||||
|
||||
b3Vec2 View::GetCursorPosition() const
|
||||
{
|
||||
double x, y;
|
||||
glfwGetCursorPos(m_window, &x, &y);
|
||||
return b3Vec2(float32(x), float32(y));
|
||||
}
|
||||
|
||||
void View::Event_SetWindowSize(int w, int h)
|
||||
{
|
||||
m_presenter.Event_SetWindowSize(float32(w), float32(h));
|
||||
m_viewModel->Event_SetWindowSize(w, h);
|
||||
}
|
||||
|
||||
void View::Event_Press_Key(int button)
|
||||
{
|
||||
if (button == GLFW_KEY_LEFT_SHIFT)
|
||||
{
|
||||
m_shiftDown = true;
|
||||
}
|
||||
|
||||
m_presenter.Event_Press_Key(button);
|
||||
m_viewModel->Event_Press_Key(button);
|
||||
}
|
||||
|
||||
void View::Event_Release_Key(int button)
|
||||
{
|
||||
if (button == GLFW_KEY_LEFT_SHIFT)
|
||||
{
|
||||
m_shiftDown = false;
|
||||
}
|
||||
|
||||
m_presenter.Event_Release_Key(button);
|
||||
m_viewModel->Event_Release_Key(button);
|
||||
}
|
||||
|
||||
void View::Event_Press_Mouse(int button)
|
||||
{
|
||||
if (button == GLFW_MOUSE_BUTTON_LEFT)
|
||||
{
|
||||
m_leftDown = true;
|
||||
}
|
||||
|
||||
if (button == GLFW_MOUSE_BUTTON_RIGHT)
|
||||
{
|
||||
m_rightDown = true;
|
||||
}
|
||||
|
||||
m_presenter.Event_Press_Mouse(button);
|
||||
m_viewModel->Event_Press_Mouse(button);
|
||||
}
|
||||
|
||||
void View::Event_Release_Mouse(int button)
|
||||
{
|
||||
if (button == GLFW_MOUSE_BUTTON_LEFT)
|
||||
{
|
||||
m_leftDown = false;
|
||||
}
|
||||
|
||||
if (button == GLFW_MOUSE_BUTTON_RIGHT)
|
||||
{
|
||||
m_rightDown = false;
|
||||
}
|
||||
|
||||
m_presenter.Event_Release_Mouse(button);
|
||||
m_viewModel->Event_Release_Mouse(button);
|
||||
}
|
||||
|
||||
void View::Event_Move_Cursor(float x, float y)
|
||||
{
|
||||
b3Vec2 ps(x, y);
|
||||
|
||||
m_presenter.Event_Move_Cursor(ps.x, ps.y);
|
||||
|
||||
m_ps0 = ps;
|
||||
m_viewModel->Event_Move_Cursor(x, y);
|
||||
m_ps0.Set(x, y);
|
||||
}
|
||||
|
||||
void View::Event_Scroll(float dx, float dy)
|
||||
{
|
||||
m_presenter.Event_Scroll(dx, dy);
|
||||
m_viewModel->Event_Scroll(dx, dy);
|
||||
}
|
||||
|
||||
void View::Command_PreDraw()
|
||||
void View::BeginInterface()
|
||||
{
|
||||
ImGui_GLFW_GL_NewFrame();
|
||||
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
|
||||
}
|
||||
|
||||
void View::Command_Draw()
|
||||
void View::Interface()
|
||||
{
|
||||
Model* model = m_presenter.m_model;
|
||||
Settings& settings = model->m_settings;
|
||||
TestSettings& testSettings = model->m_testSettings;
|
||||
Camera& camera = model->m_camera;
|
||||
Settings& settings = m_viewModel->m_settings;
|
||||
TestSettings& testSettings = m_viewModel->m_testSettings;
|
||||
|
||||
bool openControls = false;
|
||||
bool openAbout = false;
|
||||
@ -232,7 +204,7 @@ void View::Command_Draw()
|
||||
{
|
||||
if (ImGui::MenuItem("Save"))
|
||||
{
|
||||
model->Action_SaveTest();
|
||||
m_viewModel->Action_SaveTest();
|
||||
}
|
||||
|
||||
ImGui::Separator();
|
||||
@ -354,7 +326,7 @@ void View::Command_Draw()
|
||||
|
||||
if (ImGui::Combo("##Test", &settings.testID, GetTestName, NULL, g_testCount, g_testCount))
|
||||
{
|
||||
model->Action_SelectTest(settings.testID);
|
||||
m_viewModel->Action_SetTest();
|
||||
}
|
||||
|
||||
ImGui::PopItemWidth();
|
||||
@ -365,38 +337,38 @@ void View::Command_Draw()
|
||||
|
||||
if (ImGui::Button("Previous", menuButtonSize))
|
||||
{
|
||||
model->Action_PreviousTest();
|
||||
m_viewModel->Action_PreviousTest();
|
||||
}
|
||||
|
||||
if (ImGui::Button("Next", menuButtonSize))
|
||||
{
|
||||
model->Action_NextTest();
|
||||
m_viewModel->Action_NextTest();
|
||||
}
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
if (ImGui::Button("Play/Pause", menuButtonSize))
|
||||
{
|
||||
model->Action_PlayPause();
|
||||
m_viewModel->Action_PlayPause();
|
||||
}
|
||||
|
||||
if (ImGui::Button("Single Step", menuButtonSize))
|
||||
if (ImGui::Button("Single Play", menuButtonSize))
|
||||
{
|
||||
model->Action_SingleStep();
|
||||
m_viewModel->Action_SinglePlay();
|
||||
}
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
if (ImGui::Button("Restart", menuButtonSize))
|
||||
{
|
||||
model->Action_RestartTest();
|
||||
m_viewModel->Action_SetTest();
|
||||
}
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
if (ImGui::Button("Reset Camera", menuButtonSize))
|
||||
{
|
||||
model->Action_DefaultCamera();
|
||||
m_viewModel->Action_ResetCamera();
|
||||
}
|
||||
|
||||
ImGui::EndMenuBar();
|
||||
@ -406,8 +378,8 @@ void View::Command_Draw()
|
||||
|
||||
ImGui::PopStyleVar();
|
||||
|
||||
ImGui::SetNextWindowPos(ImVec2(camera.m_width - 250.0f, 40.0f));
|
||||
ImGui::SetNextWindowSize(ImVec2(250.0f, camera.m_height - 40.0f));
|
||||
ImGui::SetNextWindowPos(ImVec2(g_camera->m_width - 250.0f, 40.0f));
|
||||
ImGui::SetNextWindowSize(ImVec2(250.0f, g_camera->m_height - 40.0f));
|
||||
ImGui::Begin("Test Settings", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize);
|
||||
|
||||
ImGui::PushItemWidth(-1.0f);
|
||||
@ -430,7 +402,7 @@ void View::Command_Draw()
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
void View::Command_PostDraw()
|
||||
void View::EndInterface()
|
||||
{
|
||||
ImGui::PopStyleVar();
|
||||
|
||||
|
Reference in New Issue
Block a user