From aa11f5f12003d667fd7402d4e0404bf4941b0714 Mon Sep 17 00:00:00 2001 From: MusicalProgrammer Date: Mon, 4 Nov 2019 23:57:31 -0500 Subject: [PATCH] GUI separated from Application.cpp --- Application.cpp | 497 +++----------------------------------- Application.h | 14 +- ButtonListener.cpp | 1 + ButtonListener.h | 27 ++- CameraButtonListener.h | 1 + DataModelInstance.cpp | 5 +- DataModelInstance.h | 7 +- ErrorFunctions.h | 1 + G3DTest.sln | 14 +- G3DTest.vcproj | 12 + GUDButtonListener.h | 1 + Globals.cpp | 4 +- Globals.h | 4 +- GuiRoot.cpp | 485 +++++++++++++++++++++++++++++++++++++ GuiRoot.h | 23 ++ Instance.cpp | 4 +- Instance.h | 1 + ModeSelectionListener.cpp | 6 +- ModeSelectionListener.h | 1 + PropertyWindow.cpp | 34 +-- PropertyWindow.h | 1 + RotateButtonListener.cpp | 1 + RotateButtonListener.h | 1 + StringFunctions.cpp | 34 +++ StringFunctions.h | 33 +-- main.cpp | 4 +- 26 files changed, 674 insertions(+), 542 deletions(-) create mode 100644 GuiRoot.cpp create mode 100644 GuiRoot.h create mode 100644 StringFunctions.cpp diff --git a/Application.cpp b/Application.cpp index ad4c89e..75f6064 100644 --- a/Application.cpp +++ b/Application.cpp @@ -24,6 +24,7 @@ #include "PropertyWindow.h" #include #include "StringFunctions.h" +#include "GuiRoot.h" #include "GUDButtonListener.h" #include "ModeSelectionListener.h" @@ -53,27 +54,11 @@ PartInstance* Application::makePart() return part; } -TextButtonInstance* Application::makeTextButton() -{ - TextButtonInstance* part = new TextButtonInstance(); - return part; -} - -ImageButtonInstance* Application::makeImageButton(G3D::TextureRef newImage = NULL, G3D::TextureRef overImage = NULL, G3D::TextureRef downImage = NULL, G3D::TextureRef disableImage = NULL) -{ - ImageButtonInstance* part = new ImageButtonInstance(newImage,overImage, downImage, disableImage); -// instances.push_back(part); -// instances_2D.push_back(part); - return part; -} - -Application::Application(HWND parentWindow) : _message(""), _messageTime(0) { //: GApp(settings,window) { +Application::Application(HWND parentWindow) { //: GApp(settings,window) { std::string tempPath = ((std::string)getenv("temp")) + "/"+g_PlaceholderName; CreateDirectory(tempPath.c_str(), NULL); - _message = tempPath; - _messageTime = System::time(); _hWndMain = parentWindow; HMODULE hThisInstance = GetModuleHandle(NULL); @@ -167,342 +152,6 @@ void Application::deleteInstance() g_usableApp->_propWindow->ClearProperties(); } -void Application::initGUI() -{ - TextButtonInstance* button = makeTextButton(); - button->boxBegin = Vector2(0, -24); - button->boxEnd = Vector2(80, 0); - button->floatBottom = true; - button->setParent(_dataModel->getGuiRoot()); - button->font = fntlighttrek; - button->textColor = Color3(0,255,255); - button->textOutlineColor = Color4::clear(); - button->title = "Hopper"; - button->fontLocationRelativeTo = Vector2(10, 3); - button->setAllColorsSame(); - - button = makeTextButton(); - button->boxBegin = Vector2(0, -48); - button->boxEnd = Vector2(80, -24); - button->floatBottom = true; - button->setParent(_dataModel->getGuiRoot()); - button->font = fntlighttrek; - button->textColor = Color3(0,255,255); - button->textOutlineColor = Color4::clear(); - button->title = "Controller"; - button->fontLocationRelativeTo = Vector2(10, 3); - button->setAllColorsSame(); - - button = makeTextButton(); - button->boxBegin = Vector2(0, -72); - button->boxEnd = Vector2(80, -48); - button->floatBottom = true; - button->setParent(_dataModel->getGuiRoot()); - button->font = fntlighttrek; - button->textColor = Color3(0,255,255); - button->textOutlineColor = Color4::clear(); - button->title = "Color"; - button->fontLocationRelativeTo = Vector2(10, 3); - button->setAllColorsSame(); - - button = makeTextButton(); - button->boxBegin = Vector2(0, -96); - button->boxEnd = Vector2(80, -72); - button->floatBottom = true; - button->setParent(_dataModel->getGuiRoot()); - button->font = fntlighttrek; - button->textColor = Color3(0,255,255); - button->textOutlineColor = Color4::clear(); - button->title = "Surface"; - button->fontLocationRelativeTo = Vector2(10, 3); - button->setAllColorsSame(); - - button = makeTextButton(); - button->boxBegin = Vector2(0, -120); - button->boxEnd = Vector2(80, -96); - button->floatBottom = true; - button->setParent(_dataModel->getGuiRoot()); - button->font = fntlighttrek; - button->textColor = Color3(0,255,255); - button->boxOutlineColor = Color3(0,255,255); - button->title = "Model"; - button->fontLocationRelativeTo = Vector2(10, 3); - button->setAllColorsSame(); - - button = makeTextButton(); - button->boxBegin = Vector2(0, 0); - button->boxEnd = Vector2(125, 25); - button->setParent(_dataModel->getGuiRoot()); - button->font = fntlighttrek; - button->textColor = Color3::white(); - button->boxColor = Color4::clear(); - button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); - button->title = "File"; - button->textSize = 16; - button->fontLocationRelativeTo = Vector2(10, 0); - button->setAllColorsSame(); - - button = makeTextButton(); - button->boxBegin = Vector2(125, 0); - button->boxEnd = Vector2(250, 25); - button->setParent(_dataModel->getGuiRoot()); - button->font = fntlighttrek; - button->textColor = Color3::white(); - button->boxColor = Color4::clear(); - button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); - button->title = "Edit"; - button->textSize = 16; - button->fontLocationRelativeTo = Vector2(10, 0); - button->setAllColorsSame(); - - button = makeTextButton(); - button->boxBegin = Vector2(250, 0); - button->boxEnd = Vector2(375, 25); - button->setParent(_dataModel->getGuiRoot()); - button->font = fntlighttrek; - button->textColor = Color3::white(); - button->boxColor = Color4::clear(); - button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); - button->title = "View"; - button->textSize = 16; - button->fontLocationRelativeTo = Vector2(10, 0); - button->setAllColorsSame(); - - button = makeTextButton(); - button->boxBegin = Vector2(375, 0); - button->boxEnd = Vector2(500, 25); - button->setParent(_dataModel->getGuiRoot()); - button->font = fntlighttrek; - button->textColor = Color3::white(); - button->boxColor = Color4::clear(); - button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); - button->title = "Insert"; - button->textSize = 16; - button->fontLocationRelativeTo = Vector2(10, 0); - button->setAllColorsSame(); - - button = makeTextButton(); - button->boxBegin = Vector2(500, 0); - button->boxEnd = Vector2(625, 25); - button->setParent(_dataModel->getGuiRoot()); - button->font = fntlighttrek; - button->textColor = Color3::white(); - button->boxColor = Color4::clear(); - button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); - button->title = "Format"; - button->textSize = 16; - button->fontLocationRelativeTo = Vector2(10, 0); - button->setAllColorsSame(); - - - - button = makeTextButton(); - button->boxBegin = Vector2(0,215); - button->boxEnd = Vector2(80,235); - button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); - button->textColor = Color3::white(); - button->boxColor = Color4::clear(); - button->textSize = 12; - button->title = "Group"; - button->name = "Group"; - button->setAllColorsSame(); - button->textColorDis = Color3(0.8F,0.8F,0.8F); - button->font = fntlighttrek; - button->fontLocationRelativeTo = Vector2(10, 0); - button->setParent(_dataModel->getGuiRoot()); - - - button = makeTextButton(); - button->boxBegin = Vector2(0,240); - button->boxEnd = Vector2(80,260); - button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); - button->textColor = Color3::white(); - button->boxColor = Color4::clear(); - button->textSize = 12; - button->title = "UnGroup"; - button->name = "UnGroup"; - button->setAllColorsSame(); - button->textColorDis = Color3(0.8F,0.8F,0.8F); - button->font = fntlighttrek; - button->fontLocationRelativeTo = Vector2(10, 0); - button->setParent(_dataModel->getGuiRoot()); - - button = makeTextButton(); - button->boxBegin = Vector2(0,265); - button->boxEnd = Vector2(80,285); - button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); - button->textColor = Color3::white(); - button->boxColor = Color4::clear(); - button->textSize = 12; - button->title = "Duplicate"; - button->setAllColorsSame(); - button->textColorDis = Color3(0.8F,0.8F,0.8F); - button->font = fntlighttrek; - button->fontLocationRelativeTo = Vector2(10, 0); - button->setParent(_dataModel->getGuiRoot()); - button->name = "Duplicate"; - button->setButtonListener(new GUDButtonListener()); - - ImageButtonInstance* instance = makeImageButton( - Texture::fromFile(GetFileInPath("/content/images/Run.png")), - Texture::fromFile(GetFileInPath("/content/images/Run_ovr.png")), - Texture::fromFile(GetFileInPath("/content/images/Run_dn.png"))); - instance->name = "go"; - instance->size = Vector2(65,65); - instance->position = Vector2(6.5, 25); - instance->setParent(_dataModel->getGuiRoot()); - - - instance = makeImageButton( - Texture::fromFile(GetFileInPath("/content/images/ArrowTool.png")), - Texture::fromFile(GetFileInPath("/content/images/ArrowTool_ovr.png")), - Texture::fromFile(GetFileInPath("/content/images/ArrowTool_dn.png")), - Texture::fromFile(GetFileInPath("/content/images/ArrowTool_ds.png"))); - instance->size = Vector2(50,50); - instance->position = Vector2(15, 90); - instance->setParent(_dataModel->getGuiRoot()); - instance->name = "Cursor"; - instance->setButtonListener(new ModeSelectionListener()); - - instance = makeImageButton(Texture::fromFile(GetFileInPath("/content/images/ScaleTool.png")),Texture::fromFile(GetFileInPath("/content/images/ScaleTool_ovr.png")),Texture::fromFile(GetFileInPath("/content/images/ScaleTool_dn.png")),Texture::fromFile(GetFileInPath("/content/images/ScaleTool_ds.png"))); - instance->size = Vector2(40,40); - instance->position = Vector2(0, 140); - instance->setParent(_dataModel->getGuiRoot()); - instance->name = "Resize"; - instance->setButtonListener(new ModeSelectionListener()); - - - instance = makeImageButton( - Texture::fromFile(GetFileInPath("/content/images/MoveTool.png")), - Texture::fromFile(GetFileInPath("/content/images/MoveTool_ovr.png")), - Texture::fromFile(GetFileInPath("/content/images/MoveTool_dn.png")), - Texture::fromFile(GetFileInPath("/content/images/MoveTool_ds.png"))); - instance->size = Vector2(40,40); - instance->position = Vector2(40, 140); - instance->setParent(_dataModel->getGuiRoot()); - instance->name = "Arrows"; - instance->setButtonListener(new ModeSelectionListener()); - - instance = makeImageButton( - Texture::fromFile(GetFileInPath("/content/images/SelectionRotate.png")), - Texture::fromFile(GetFileInPath("/content/images/SelectionRotate_ovr.png")), - NULL, - Texture::fromFile(GetFileInPath("/content/images/SelectionRotate_ds.png"))); - instance->size = Vector2(30,30); - instance->position = Vector2(10, 175); - instance->setParent(_dataModel->getGuiRoot()); - instance->name = "Rotate"; - instance->setButtonListener(new RotateButtonListener()); - - instance = makeImageButton( - Texture::fromFile(GetFileInPath("/content/images/SelectionTilt.png")), - Texture::fromFile(GetFileInPath("/content/images/SelectionTilt_ovr.png")), - NULL, - Texture::fromFile(GetFileInPath("/content/images/SelectionTilt_ds.png"))); - instance->size = Vector2(30,30); - instance->position = Vector2(40, 175); - instance->setParent(_dataModel->getGuiRoot()); - instance->name = "Tilt"; - instance->setButtonListener(new RotateButtonListener()); - - - instance = makeImageButton( - Texture::fromFile(GetFileInPath("/content/images/Delete.png")), - Texture::fromFile(GetFileInPath("/content/images/Delete_ovr.png")), - Texture::fromFile(GetFileInPath("/content/images/Delete_dn.png")), - Texture::fromFile(GetFileInPath("/content/images/Delete_ds.png"))); - instance->size = Vector2(40,46); - instance->position = Vector2(20, 284); - instance->setParent(_dataModel->getGuiRoot()); - instance->name = "Delete"; - instance->setButtonListener(new DeleteListener()); - - instance = makeImageButton( - Texture::fromFile(GetFileInPath("/content/images/CameraZoomIn.png")), - Texture::fromFile(GetFileInPath("/content/images/CameraZoomIn_ovr.png")), - Texture::fromFile(GetFileInPath("/content/images/CameraZoomIn_dn.png"))); - instance->size = Vector2(34,25); - instance->floatBottom = true; - instance->floatRight = true; - instance->position = Vector2(-77, -90); - instance->setParent(_dataModel->getGuiRoot()); - instance->name = "ZoomIn"; - instance->setButtonListener(new CameraButtonListener()); - - instance = makeImageButton( - Texture::fromFile(GetFileInPath("/content/images/CameraZoomOut.png")), - Texture::fromFile(GetFileInPath("/content/images/CameraZoomOut_ovr.png")), - Texture::fromFile(GetFileInPath("/content/images/CameraZoomOut_dn.png"))); - instance->size = Vector2(34,26); - instance->floatBottom = true; - instance->floatRight = true; - instance->position = Vector2(-77, -31); - instance->setParent(_dataModel->getGuiRoot()); - instance->name = "ZoomOut"; - instance->setButtonListener(new CameraButtonListener()); - - instance = makeImageButton( - Texture::fromFile(GetFileInPath("/content/images/CameraPanLeft.png")), - Texture::fromFile(GetFileInPath("/content/images/CameraPanLeft_ovr.png")), - Texture::fromFile(GetFileInPath("/content/images/CameraPanLeft_dn.png"))); - instance->size = Vector2(34,34); - instance->floatBottom = true; - instance->floatRight = true; - instance->position = Vector2(-110, -50); - instance->setParent(_dataModel->getGuiRoot()); - instance->name = "PanLeft"; - instance->setButtonListener(new CameraButtonListener()); - - instance = makeImageButton( - Texture::fromFile(GetFileInPath("/content/images/CameraPanRight.png")), - Texture::fromFile(GetFileInPath("/content/images/CameraPanRight_ovr.png")), - Texture::fromFile(GetFileInPath("/content/images/CameraPanRight_dn.png"))); - instance->size = Vector2(34,34); - instance->floatBottom = true; - instance->floatRight = true; - instance->position = Vector2(-45, -50); - instance->setParent(_dataModel->getGuiRoot()); - instance->name = "PanRight"; - instance->setButtonListener(new CameraButtonListener()); - - instance = makeImageButton( - Texture::fromFile(GetFileInPath("/content/images/CameraCenter.png")), - Texture::fromFile(GetFileInPath("/content/images/CameraCenter_ovr.png")), - Texture::fromFile(GetFileInPath("/content/images/CameraCenter_dn.png"))); - instance->size = Vector2(34,20); - instance->floatBottom = true; - instance->floatRight = true; - instance->position = Vector2(-77, -60); - instance->setParent(_dataModel->getGuiRoot()); - instance->name = "CenterCam"; - instance->setButtonListener(new CameraButtonListener()); - - instance = makeImageButton( - Texture::fromFile(GetFileInPath("/content/images/CameraTiltUp.png")), - Texture::fromFile(GetFileInPath("/content/images/CameraTiltUp_ovr.png")), - Texture::fromFile(GetFileInPath("/content/images/CameraTiltUp_dn.png"))); - instance->size = Vector2(24,24); - instance->floatBottom = true; - instance->floatRight = true; - instance->position = Vector2(-105, -75); - instance->setParent(_dataModel->getGuiRoot()); - instance->name = "TiltUp"; - instance->setButtonListener(new CameraButtonListener()); - - instance = makeImageButton( - Texture::fromFile(GetFileInPath("/content/images/CameraTiltDown.png")), - Texture::fromFile(GetFileInPath("/content/images/CameraTiltDown_ovr.png")), - Texture::fromFile(GetFileInPath("/content/images/CameraTiltDown_dn.png"))); - instance->size = Vector2(24,24); - instance->floatBottom = true; - instance->floatRight = true; - instance->position = Vector2(-40, -75); - instance->setParent(_dataModel->getGuiRoot()); - instance->name = "TiltDown"; - instance->setButtonListener(new CameraButtonListener()); -} - - void Application::onInit() { // Called before Application::run() beings @@ -510,10 +159,10 @@ void Application::onInit() { _dataModel = new DataModelInstance(); _dataModel->setParent(NULL); _dataModel->name = "undefined"; - _dataModel->font = fntdominant; + _dataModel->font = g_fntdominant; g_dataModel = _dataModel; - initGUI(); + //initGUI(); #ifdef LEGACY_LOAD_G3DFUN_LEVEL PartInstance* test = makePart(); @@ -648,39 +297,7 @@ void Application::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) { - Instance * obj6 = _dataModel->getGuiRoot()->findFirstChild("Delete"); - Instance * obj = _dataModel->getGuiRoot()->findFirstChild("Duplicate"); - Instance * obj2 = _dataModel->getGuiRoot()->findFirstChild("Group"); - Instance * obj3 = _dataModel->getGuiRoot()->findFirstChild("UnGroup"); - Instance * obj4 = _dataModel->getGuiRoot()->findFirstChild("Rotate"); - Instance * obj5 = _dataModel->getGuiRoot()->findFirstChild("Tilt"); - if(obj != NULL && obj2 != NULL && obj3 != NULL && obj4 !=NULL && obj5 != NULL && obj6 != NULL) - { - BaseButtonInstance* button = (BaseButtonInstance*)obj; - BaseButtonInstance* button2 = (BaseButtonInstance*)obj2; - BaseButtonInstance* button3 = (BaseButtonInstance*)obj3; - BaseButtonInstance* button4 = (BaseButtonInstance*)obj4; - BaseButtonInstance* button5 = (BaseButtonInstance*)obj5; - BaseButtonInstance* button6 = (BaseButtonInstance*)obj6; - button->disabled = true; - button2->disabled = true; - button3->disabled = true; - button4->disabled = true; - button5->disabled = true; - button6->disabled = true; - for(size_t i = 0; i < g_selectedInstances.size(); i++) - if(g_selectedInstances.at(i)->canDelete) - { - button->disabled = false; - button2->disabled = false; - button3->disabled = false; - button4->disabled = false; - button5->disabled = false; - button6->disabled = false; - break; - } - } - + _dataModel->getGuiRoot()->update(); if(_dataModel->name != _title) { @@ -730,9 +347,7 @@ void Application::onUserInput(UserInput* ui) { */ if(GetHoldKeyState(VK_F8)) { - _messageTime = System::time(); - _message = "FOV Set to 10"; - + _dataModel->getGuiRoot()->setDebugMessage("FOV Set to 10", System::time()); } //} @@ -810,19 +425,15 @@ void Application::makeFlag(Vector3 &vec, RenderDevice* &rd) //I know how i will approach this now } +void Application::setMode(int mode) +{ + _mode = mode; +} int Application::getMode() { return _mode; } -void Application::drawButtons(RenderDevice* rd) -{ - rd->pushState(); - rd->beforePrimitive(); - _dataModel->getGuiRoot()->render(rd); - rd->afterPrimitive(); - rd->popState(); -} void Application::drawOutline(Vector3 from, Vector3 to, RenderDevice* rd, LightingParameters lighting, Vector3 size, Vector3 pos, CoordinateFrame c) { @@ -986,7 +597,7 @@ void Application::onGraphics(RenderDevice* rd) { { Vector3 size = part->getSize(); Vector3 pos = part->getPosition(); - drawOutline(Vector3(0+size.x/2, 0+size.y/2, 0+size.z/2) ,Vector3(0-size.x/2,0-size.y/2,0-size.z/2), rd, lighting, Vector3(size.x/2, size.y/2, size.z/2), Vector3(pos.x/2, pos.y/2, pos.z/2), part->getCFrameRenderBased()); + drawOutline(Vector3(0+size.x/2, 0+size.y/2, 0+size.z/2) ,Vector3(0-size.x/2,0-size.y/2,0-size.z/2), rd, lighting, Vector3(size.x/2, size.y/2, size.z/2), Vector3(pos.x, pos.y, pos.z), part->getCFrameRenderBased()); } } } @@ -1009,33 +620,7 @@ void Application::onGraphics(RenderDevice* rd) { sky->renderLensFlare(renderDevice, lighting); } renderDevice->push2D(); - if(System::time() - 3 < _messageTime) - { - fntdominant->draw2D(rd, _message, Vector2((rd->getWidth()/2)-(fntdominant->get2DStringBounds(_message, 20).x/2),(rd->getHeight()/2)-(fntdominant->get2DStringBounds(_message, 20).y/2)), 20, Color3::yellow(), Color3::black()); - } - - //TODO--Move these to their own instance - - std::stringstream stream; - stream << std::fixed << std::setprecision(1) << _dataModel->getLevel()->timer; - fntdominant->draw2D(rd, "Timer: " + stream.str(), Vector2(rd->getWidth() - 120, 25), 20, Color3::fromARGB(0x81C518), Color3::black()); - fntdominant->draw2D(rd, "Score: " + Convert(_dataModel->getLevel()->score), Vector2(rd->getWidth() - 120, 50), 20, Color3::fromARGB(0x81C518), Color3::black()); - - //GUI Boxes - Draw::box(G3D::Box(Vector3(0,25,0),Vector3(80,355,0)),rd,Color4(0.6F,0.6F,0.6F,0.4F), Color4(0,0,0,0)); - Draw::box(G3D::Box(Vector3(rd->getWidth() - 120,rd->getHeight() - 120,0),Vector3(rd->getWidth(),rd->getHeight(),0)),rd,Color4(0.6F,0.6F,0.6F,0.4F), Color4(0,0,0,0)); - - //Camera menu title - fntlighttrek->draw2D(rd, "CameraMenu", Vector2(rd->getWidth()-(fntlighttrek->get2DStringBounds("CameraMenu", 14).x+1),rd->getHeight() - 120), 14, Color3::white(), Color4(0.5F,0.5F,0.5F,0.5F)); - - //Tools menu - Draw::box(G3D::Box(Vector3(5, 210,0),Vector3(75, 210,0)),rd,Color4(0.6F,0.6F,0.6F,0.4F), Color4(0.6F,0.6F,0.6F,0.4F)); - fntlighttrek->draw2D(rd,"MENU", Vector2(10,332), 14, Color3::white(), Color4(0.5F,0.5F,0.5F,0.5F)); - - - drawButtons(rd); - - _dataModel->drawMessage(rd); + _dataModel->getGuiRoot()->renderGUI(renderDevice); rd->pushState(); rd->beforePrimitive(); @@ -1110,19 +695,9 @@ void Application::onMouseLeftPressed(HWND hwnd,int x,int y) std::cout << "Click: " << x << "," << y << std::endl; - bool onGUI = false; - std::vector instances_2D = _dataModel->getGuiRoot()->getAllChildren(); - for(size_t i = 0; i < instances_2D.size(); i++) - { - if(BaseButtonInstance* button = dynamic_cast(instances_2D.at(i))) - { - if(button->mouseInButton(x,y, renderDevice)) - { - onGUI = true; - break; - } - } - } + bool onGUI = _dataModel->getGuiRoot()->mouseInGUI(renderDevice, x, y); + + if(!onGUI) { testRay = cameraController.getCamera()->worldRay(_dataModel->mousex, _dataModel->mousey, renderDevice->getViewport()); @@ -1159,7 +734,7 @@ void Application::onMouseLeftPressed(HWND hwnd,int x,int y) g_selectedInstances.clear(); g_selectedInstances.push_back(test); } - _propWindow->UpdateSelected(test); + selectInstance(test, _propWindow); //_message = "Dragging = true."; //_messageTime = System::time(); //_dragging = true; @@ -1168,34 +743,32 @@ void Application::onMouseLeftPressed(HWND hwnd,int x,int y) } } if(!objFound) - { - g_selectedInstances.clear(); - g_selectedInstances.push_back(_dataModel); - _propWindow->UpdateSelected(_dataModel); - - } + selectInstance(_dataModel,_propWindow); } } -void Application::onMouseLeftUp(int x,int y) + +void Application::selectInstance(Instance* selectedInstance, PropertyWindow* propWindow) +{ + g_selectedInstances.clear(); + g_selectedInstances.push_back(selectedInstance); + propWindow->UpdateSelected(selectedInstance); + +} +G3D::RenderDevice* Application::getRenderDevice() +{ + return renderDevice; +} + +void Application::onMouseLeftUp(G3D::RenderDevice* renderDevice, int x, int y) { //std::cout << "Release: " << x << "," << y << std::endl; - + _dataModel->getGuiRoot()->onMouseLeftUp(renderDevice, x, y); _dragging = false; //_message = "Dragging = false."; //_messageTime = System::time(); - std::vector instances_2D = _dataModel->getGuiRoot()->getAllChildren(); - //std::vector instances = _dataModel->getWorkspace()->getAllChildren(); - for(size_t i = 0; i < instances_2D.size(); i++) - { - if(BaseButtonInstance* button = dynamic_cast(instances_2D[i])) - { - if(button->mouseInButton(x, y, renderDevice)) - { - button->onMouseClick(); - } - } - } + } + void Application::onMouseRightPressed(int x,int y) { } @@ -1243,8 +816,6 @@ void Application::run() { cursorOvr = Texture::fromFile(GetFileInPath("/content/images/DragCursor.png")); Globals::surface = Texture::fromFile(GetFileInPath("/content/images/surfacebr.png")); Globals::surfaceId = Globals::surface->getOpenGLID(); - fntdominant = GFont::fromFile(GetFileInPath("/content/font/dominant.fnt")); - fntlighttrek = GFont::fromFile(GetFileInPath("/content/font/lighttrek.fnt")); cameraSound = GetFileInPath("/content/sounds/SWITCH3.wav"); clickSound = GetFileInPath("/content/sounds/switch.wav"); dingSound = GetFileInPath("/content/sounds/electronicpingshort.wav"); diff --git a/Application.h b/Application.h index abd1523..0662264 100644 --- a/Application.h +++ b/Application.h @@ -4,6 +4,7 @@ #include "TextButtonInstance.h" #include "ImageButtonInstance.h" #include "CameraController.h" +//#include "GuiRoot.h" class TextButtonInstance; class ImageButtonInstance; @@ -28,8 +29,6 @@ class Application { // : public GApp { void drawButtons(RenderDevice* rd); void drawOutline(Vector3 from, Vector3 to, RenderDevice* rd, LightingParameters lighting, Vector3 size, Vector3 pos, CoordinateFrame c); void makeFlag(Vector3 &vec, RenderDevice* &rd); - TextButtonInstance* makeTextButton(); - ImageButtonInstance* makeImageButton(G3D::TextureRef newImage, G3D::TextureRef overImage, G3D::TextureRef downImage, G3D::TextureRef disableImage); std::vector getSelection(); void deleteInstance(); void run(); @@ -39,19 +38,22 @@ class Application { // : public GApp { void onKeyPressed(int key); void onKeyUp(int key); void onMouseLeftPressed(HWND hwnd,int x, int y); - void onMouseLeftUp(int x, int y); + void onMouseLeftUp(RenderDevice* renderDevice, int x, int y); void onMouseRightPressed(int x, int y); void onMouseRightUp(int x, int y); void onMouseMoved(int x, int y); void onMouseWheel(int x, int y, short delta); int getMode(); CameraController cameraController; - RenderDevice* renderDevice; UserInput* userInput; PropertyWindow* _propWindow; void generateShadowMap(const CoordinateFrame& lightViewMatrix) const; + RenderDevice* getRenderDevice(); + void selectInstance(Instance* selectedInstance,PropertyWindow* propWindow); + void setMode(int mode); private: - void initGUI(); + RenderDevice* renderDevice; + //void initGUI(); HWND _hWndMain; SkyRef sky; bool quit; @@ -63,8 +65,6 @@ class Application { // : public GApp { HWND _buttonTest; HWND _hwndRenderer; DataModelInstance* _dataModel; - std::string _message; - G3D::RealTime _messageTime; G3D::TextureRef shadowMap; std::string _title; bool _dragging; diff --git a/ButtonListener.cpp b/ButtonListener.cpp index ea99c09..8d6c5d0 100644 --- a/ButtonListener.cpp +++ b/ButtonListener.cpp @@ -1,3 +1,4 @@ +#include "BaseButtonInstance.h" #include "ButtonListener.h" diff --git a/ButtonListener.h b/ButtonListener.h index 94c0492..bbf2e40 100644 --- a/ButtonListener.h +++ b/ButtonListener.h @@ -1,20 +1,21 @@ #pragma once //#include "Application.h" -#include "BaseButtonInstance.h" +//#include "BaseButtonInstance.h" + class BaseButtonInstance; class ButtonListener { -public: - ButtonListener(); - ~ButtonListener(void); - virtual void onButton1MouseClick(BaseButtonInstance*); - //virtual void onMouseOver(); //TODO - //virtual void onMouseOut(); //TODO - //virtual void onButton1MouseDown(); //TODO - //virtual void onButton1MouseUp(); //TODO - //virtual void onButton2MouseClick(); //TODO - //virtual void onButton2MouseDown(); //TODO - //virtual void onButton2MouseUp(); //TODO - //What to do now... + public: + ButtonListener(); + ~ButtonListener(void); + virtual void onButton1MouseClick(BaseButtonInstance*); + //virtual void onMouseOver(); //TODO + //virtual void onMouseOut(); //TODO + //virtual void onButton1MouseDown(); //TODO + //virtual void onButton1MouseUp(); //TODO + //virtual void onButton2MouseClick(); //TODO + //virtual void onButton2MouseDown(); //TODO + //virtual void onButton2MouseUp(); //TODO + //What to do now... }; diff --git a/CameraButtonListener.h b/CameraButtonListener.h index 36ccaf5..27a1aac 100644 --- a/CameraButtonListener.h +++ b/CameraButtonListener.h @@ -1,3 +1,4 @@ +#pragma once #include "ButtonListener.h" class CameraButtonListener : public ButtonListener { diff --git a/DataModelInstance.cpp b/DataModelInstance.cpp index a201ceb..af669e1 100644 --- a/DataModelInstance.cpp +++ b/DataModelInstance.cpp @@ -1,4 +1,5 @@ #include +#include "GuiRoot.h" #include "DataModelInstance.h" #include #include @@ -13,7 +14,7 @@ DataModelInstance::DataModelInstance(void) { Instance::Instance(); workspace = new WorkspaceInstance(); - guiRoot = new Instance(); + guiRoot = new GuiRoot(); level = new LevelInstance(); //children.push_back(workspace); //children.push_back(level); @@ -540,7 +541,7 @@ void DataModelInstance::setMousePos(Vector2 pos) mousex=pos.x; mousey=pos.y; } -Instance* DataModelInstance::getGuiRoot() +GuiRoot* DataModelInstance::getGuiRoot() { return guiRoot; } diff --git a/DataModelInstance.h b/DataModelInstance.h index e319274..aa91b5b 100644 --- a/DataModelInstance.h +++ b/DataModelInstance.h @@ -3,6 +3,9 @@ #include "LevelInstance.h" #include "PartInstance.h" #include "rapidxml/rapidxml.hpp" +#include "GuiRoot.h" + +class GuiRoot; class DataModelInstance : public Instance @@ -22,12 +25,12 @@ public: WorkspaceInstance* workspace; LevelInstance * level; LevelInstance * getLevel(); - Instance* guiRoot; + GuiRoot* guiRoot; std::string message; std::string _loadedFileName; bool showMessage; G3D::GFontRef font; - Instance* getGuiRoot(); + GuiRoot* getGuiRoot(); float mousex; float mousey; Vector2 getMousePos(); diff --git a/ErrorFunctions.h b/ErrorFunctions.h index c73590b..e3a838d 100644 --- a/ErrorFunctions.h +++ b/ErrorFunctions.h @@ -1,3 +1,4 @@ +#pragma once #include void OnError(int err, std::string msg = ""); \ No newline at end of file diff --git a/G3DTest.sln b/G3DTest.sln index 20ae2ac..c5b9c23 100644 --- a/G3DTest.sln +++ b/G3DTest.sln @@ -1,8 +1,12 @@  Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 +# Visual C++ Express 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "G3DTest", "G3DTest.vcproj", "{6C4D6EEF-B1D1-456A-B850-92CAB17124BE}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "graphics3D", "..\..\..\..\SDK\VisualC\VS2005\g3d-src-6_10\source\graphics3D.vcproj", "{FD379372-8DB2-4C2C-A4D8-4694BAA94640}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GLG3D", "..\..\..\..\SDK\VisualC\VS2005\g3d-src-6_10\source\GLG3D.vcproj", "{EF60D11E-36A7-43EB-B198-DD3906DCFDBF}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -13,6 +17,14 @@ Global {6C4D6EEF-B1D1-456A-B850-92CAB17124BE}.Debug|Win32.Build.0 = Debug|Win32 {6C4D6EEF-B1D1-456A-B850-92CAB17124BE}.Release|Win32.ActiveCfg = Release|Win32 {6C4D6EEF-B1D1-456A-B850-92CAB17124BE}.Release|Win32.Build.0 = Release|Win32 + {FD379372-8DB2-4C2C-A4D8-4694BAA94640}.Debug|Win32.ActiveCfg = Debug|Win32 + {FD379372-8DB2-4C2C-A4D8-4694BAA94640}.Debug|Win32.Build.0 = Debug|Win32 + {FD379372-8DB2-4C2C-A4D8-4694BAA94640}.Release|Win32.ActiveCfg = Release|Win32 + {FD379372-8DB2-4C2C-A4D8-4694BAA94640}.Release|Win32.Build.0 = Release|Win32 + {EF60D11E-36A7-43EB-B198-DD3906DCFDBF}.Debug|Win32.ActiveCfg = Debug|Win32 + {EF60D11E-36A7-43EB-B198-DD3906DCFDBF}.Debug|Win32.Build.0 = Debug|Win32 + {EF60D11E-36A7-43EB-B198-DD3906DCFDBF}.Release|Win32.ActiveCfg = Release|Win32 + {EF60D11E-36A7-43EB-B198-DD3906DCFDBF}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/G3DTest.vcproj b/G3DTest.vcproj index ef71aad..b154990 100644 --- a/G3DTest.vcproj +++ b/G3DTest.vcproj @@ -270,6 +270,10 @@ RelativePath=".\GroupInstance.cpp" > + + @@ -306,6 +310,10 @@ RelativePath=".\PropertyWindow.cpp" > + + @@ -419,6 +427,10 @@ RelativePath=".\Globals.h" > + + diff --git a/GUDButtonListener.h b/GUDButtonListener.h index ef0623e..d151e2c 100644 --- a/GUDButtonListener.h +++ b/GUDButtonListener.h @@ -1,3 +1,4 @@ +#pragma once #include "ButtonListener.h" class GUDButtonListener : public ButtonListener { diff --git a/Globals.cpp b/Globals.cpp index 79c3195..419ee23 100644 --- a/Globals.cpp +++ b/Globals.cpp @@ -17,8 +17,8 @@ bool running = false; G3D::TextureRef Globals::surface; POINT Globals::mousepoint; -GFontRef fntdominant = NULL; -GFontRef fntlighttrek = NULL; +GFontRef g_fntdominant = NULL; +GFontRef g_fntlighttrek = NULL; Globals::Globals(void){} diff --git a/Globals.h b/Globals.h index 60d3c5d..b3dba1c 100644 --- a/Globals.h +++ b/Globals.h @@ -28,8 +28,8 @@ extern bool running; extern DataModelInstance* g_dataModel; extern Application* g_usableApp; -extern GFontRef fntdominant; -extern GFontRef fntlighttrek; +extern GFontRef g_fntdominant; +extern GFontRef g_fntlighttrek; extern std::string cameraSound; extern std::string clickSound; diff --git a/GuiRoot.cpp b/GuiRoot.cpp new file mode 100644 index 0000000..1c84884 --- /dev/null +++ b/GuiRoot.cpp @@ -0,0 +1,485 @@ +#include +#include +#include "G3DAll.h" +#include "BaseButtonInstance.h" +#include "TextButtonInstance.h" +#include "ImageButtonInstance.h" +#include "GuiRoot.h" +#include "Globals.h" +#include "StringFunctions.h" + +#include "GUDButtonListener.h" +#include "ModeSelectionListener.h" +#include "RotateButtonListener.h" +#include "CameraButtonListener.h" +#include "DeleteListener.h" + +#include "ImageButtonInstance.h" + +ImageButtonInstance* GuiRoot::makeImageButton(G3D::TextureRef newImage = NULL, G3D::TextureRef overImage = NULL, G3D::TextureRef downImage = NULL, G3D::TextureRef disableImage = NULL) +{ + ImageButtonInstance* part = new ImageButtonInstance(newImage,overImage, downImage, disableImage); +// instances.push_back(part); +// instances_2D.push_back(part); + return part; +} + +TextButtonInstance* GuiRoot::makeTextButton() +{ + TextButtonInstance* part = new TextButtonInstance(); + return part; +} + +GuiRoot::GuiRoot() : _message(""), _messageTime(0) +{ + g_fntdominant = GFont::fromFile(GetFileInPath("/content/font/dominant.fnt")); + g_fntlighttrek = GFont::fromFile(GetFileInPath("/content/font/lighttrek.fnt")); + + TextButtonInstance* button = makeTextButton(); + button->boxBegin = Vector2(0, -24); + button->boxEnd = Vector2(80, 0); + button->floatBottom = true; + button->setParent(this); + button->font = g_fntlighttrek; + button->textColor = Color3(0,255,255); + button->textOutlineColor = Color4::clear(); + button->title = "Hopper"; + button->fontLocationRelativeTo = Vector2(10, 3); + button->setAllColorsSame(); + + button = makeTextButton(); + button->boxBegin = Vector2(0, -48); + button->boxEnd = Vector2(80, -24); + button->floatBottom = true; + button->setParent(this); + button->font = g_fntlighttrek; + button->textColor = Color3(0,255,255); + button->textOutlineColor = Color4::clear(); + button->title = "Controller"; + button->fontLocationRelativeTo = Vector2(10, 3); + button->setAllColorsSame(); + + button = makeTextButton(); + button->boxBegin = Vector2(0, -72); + button->boxEnd = Vector2(80, -48); + button->floatBottom = true; + button->setParent(this); + button->font = g_fntlighttrek; + button->textColor = Color3(0,255,255); + button->textOutlineColor = Color4::clear(); + button->title = "Color"; + button->fontLocationRelativeTo = Vector2(10, 3); + button->setAllColorsSame(); + + button = makeTextButton(); + button->boxBegin = Vector2(0, -96); + button->boxEnd = Vector2(80, -72); + button->floatBottom = true; + button->setParent(this); + button->font = g_fntlighttrek; + button->textColor = Color3(0,255,255); + button->textOutlineColor = Color4::clear(); + button->title = "Surface"; + button->fontLocationRelativeTo = Vector2(10, 3); + button->setAllColorsSame(); + + button = makeTextButton(); + button->boxBegin = Vector2(0, -120); + button->boxEnd = Vector2(80, -96); + button->floatBottom = true; + button->setParent(this); + button->font = g_fntlighttrek; + button->textColor = Color3(0,255,255); + button->boxOutlineColor = Color3(0,255,255); + button->title = "Model"; + button->fontLocationRelativeTo = Vector2(10, 3); + button->setAllColorsSame(); + + button = makeTextButton(); + button->boxBegin = Vector2(0, 0); + button->boxEnd = Vector2(125, 25); + button->setParent(this); + button->font = g_fntlighttrek; + button->textColor = Color3::white(); + button->boxColor = Color4::clear(); + button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); + button->title = "File"; + button->textSize = 16; + button->fontLocationRelativeTo = Vector2(10, 0); + button->setAllColorsSame(); + + button = makeTextButton(); + button->boxBegin = Vector2(125, 0); + button->boxEnd = Vector2(250, 25); + button->setParent(this); + button->font = g_fntlighttrek; + button->textColor = Color3::white(); + button->boxColor = Color4::clear(); + button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); + button->title = "Edit"; + button->textSize = 16; + button->fontLocationRelativeTo = Vector2(10, 0); + button->setAllColorsSame(); + + button = makeTextButton(); + button->boxBegin = Vector2(250, 0); + button->boxEnd = Vector2(375, 25); + button->setParent(this); + button->font = g_fntlighttrek; + button->textColor = Color3::white(); + button->boxColor = Color4::clear(); + button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); + button->title = "View"; + button->textSize = 16; + button->fontLocationRelativeTo = Vector2(10, 0); + button->setAllColorsSame(); + + button = makeTextButton(); + button->boxBegin = Vector2(375, 0); + button->boxEnd = Vector2(500, 25); + button->setParent(this); + button->font = g_fntlighttrek; + button->textColor = Color3::white(); + button->boxColor = Color4::clear(); + button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); + button->title = "Insert"; + button->textSize = 16; + button->fontLocationRelativeTo = Vector2(10, 0); + button->setAllColorsSame(); + + button = makeTextButton(); + button->boxBegin = Vector2(500, 0); + button->boxEnd = Vector2(625, 25); + button->setParent(this); + button->font = g_fntlighttrek; + button->textColor = Color3::white(); + button->boxColor = Color4::clear(); + button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); + button->title = "Format"; + button->textSize = 16; + button->fontLocationRelativeTo = Vector2(10, 0); + button->setAllColorsSame(); + + + + button = makeTextButton(); + button->boxBegin = Vector2(0,215); + button->boxEnd = Vector2(80,235); + button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); + button->textColor = Color3::white(); + button->boxColor = Color4::clear(); + button->textSize = 12; + button->title = "Group"; + button->name = "Group"; + button->setAllColorsSame(); + button->textColorDis = Color3(0.8F,0.8F,0.8F); + button->font = g_fntlighttrek; + button->fontLocationRelativeTo = Vector2(10, 0); + button->setParent(this); + + + button = makeTextButton(); + button->boxBegin = Vector2(0,240); + button->boxEnd = Vector2(80,260); + button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); + button->textColor = Color3::white(); + button->boxColor = Color4::clear(); + button->textSize = 12; + button->title = "UnGroup"; + button->name = "UnGroup"; + button->setAllColorsSame(); + button->textColorDis = Color3(0.8F,0.8F,0.8F); + button->font = g_fntlighttrek; + button->fontLocationRelativeTo = Vector2(10, 0); + button->setParent(this); + + button = makeTextButton(); + button->boxBegin = Vector2(0,265); + button->boxEnd = Vector2(80,285); + button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); + button->textColor = Color3::white(); + button->boxColor = Color4::clear(); + button->textSize = 12; + button->title = "Duplicate"; + button->setAllColorsSame(); + button->textColorDis = Color3(0.8F,0.8F,0.8F); + button->font = g_fntlighttrek; + button->fontLocationRelativeTo = Vector2(10, 0); + button->setParent(this); + button->name = "Duplicate"; + button->setButtonListener(new GUDButtonListener()); + + ImageButtonInstance* instance = makeImageButton( + Texture::fromFile(GetFileInPath("/content/images/Run.png")), + Texture::fromFile(GetFileInPath("/content/images/Run_ovr.png")), + Texture::fromFile(GetFileInPath("/content/images/Run_dn.png"))); + instance->name = "go"; + instance->size = Vector2(65,65); + instance->position = Vector2(6.5, 25); + instance->setParent(this); + + + instance = makeImageButton( + Texture::fromFile(GetFileInPath("/content/images/ArrowTool.png")), + Texture::fromFile(GetFileInPath("/content/images/ArrowTool_ovr.png")), + Texture::fromFile(GetFileInPath("/content/images/ArrowTool_dn.png")), + Texture::fromFile(GetFileInPath("/content/images/ArrowTool_ds.png"))); + instance->size = Vector2(50,50); + instance->position = Vector2(15, 90); + instance->setParent(this); + instance->name = "Cursor"; + instance->setButtonListener(new ModeSelectionListener()); + + instance = makeImageButton(Texture::fromFile(GetFileInPath("/content/images/ScaleTool.png")),Texture::fromFile(GetFileInPath("/content/images/ScaleTool_ovr.png")),Texture::fromFile(GetFileInPath("/content/images/ScaleTool_dn.png")),Texture::fromFile(GetFileInPath("/content/images/ScaleTool_ds.png"))); + instance->size = Vector2(40,40); + instance->position = Vector2(0, 140); + instance->setParent(this); + instance->name = "Resize"; + instance->setButtonListener(new ModeSelectionListener()); + + + instance = makeImageButton( + Texture::fromFile(GetFileInPath("/content/images/MoveTool.png")), + Texture::fromFile(GetFileInPath("/content/images/MoveTool_ovr.png")), + Texture::fromFile(GetFileInPath("/content/images/MoveTool_dn.png")), + Texture::fromFile(GetFileInPath("/content/images/MoveTool_ds.png"))); + instance->size = Vector2(40,40); + instance->position = Vector2(40, 140); + instance->setParent(this); + instance->name = "Arrows"; + instance->setButtonListener(new ModeSelectionListener()); + + instance = makeImageButton( + Texture::fromFile(GetFileInPath("/content/images/SelectionRotate.png")), + Texture::fromFile(GetFileInPath("/content/images/SelectionRotate_ovr.png")), + NULL, + Texture::fromFile(GetFileInPath("/content/images/SelectionRotate_ds.png"))); + instance->size = Vector2(30,30); + instance->position = Vector2(10, 175); + instance->setParent(this); + instance->name = "Rotate"; + instance->setButtonListener(new RotateButtonListener()); + + instance = makeImageButton( + Texture::fromFile(GetFileInPath("/content/images/SelectionTilt.png")), + Texture::fromFile(GetFileInPath("/content/images/SelectionTilt_ovr.png")), + NULL, + Texture::fromFile(GetFileInPath("/content/images/SelectionTilt_ds.png"))); + instance->size = Vector2(30,30); + instance->position = Vector2(40, 175); + instance->setParent(this); + instance->name = "Tilt"; + instance->setButtonListener(new RotateButtonListener()); + + + instance = makeImageButton( + Texture::fromFile(GetFileInPath("/content/images/Delete.png")), + Texture::fromFile(GetFileInPath("/content/images/Delete_ovr.png")), + Texture::fromFile(GetFileInPath("/content/images/Delete_dn.png")), + Texture::fromFile(GetFileInPath("/content/images/Delete_ds.png"))); + instance->size = Vector2(40,46); + instance->position = Vector2(20, 284); + instance->setParent(this); + instance->name = "Delete"; + instance->setButtonListener(new DeleteListener()); + + instance = makeImageButton( + Texture::fromFile(GetFileInPath("/content/images/CameraZoomIn.png")), + Texture::fromFile(GetFileInPath("/content/images/CameraZoomIn_ovr.png")), + Texture::fromFile(GetFileInPath("/content/images/CameraZoomIn_dn.png"))); + instance->size = Vector2(34,25); + instance->floatBottom = true; + instance->floatRight = true; + instance->position = Vector2(-77, -90); + instance->setParent(this); + instance->name = "ZoomIn"; + instance->setButtonListener(new CameraButtonListener()); + + instance = makeImageButton( + Texture::fromFile(GetFileInPath("/content/images/CameraZoomOut.png")), + Texture::fromFile(GetFileInPath("/content/images/CameraZoomOut_ovr.png")), + Texture::fromFile(GetFileInPath("/content/images/CameraZoomOut_dn.png"))); + instance->size = Vector2(34,26); + instance->floatBottom = true; + instance->floatRight = true; + instance->position = Vector2(-77, -31); + instance->setParent(this); + instance->name = "ZoomOut"; + instance->setButtonListener(new CameraButtonListener()); + + instance = makeImageButton( + Texture::fromFile(GetFileInPath("/content/images/CameraPanLeft.png")), + Texture::fromFile(GetFileInPath("/content/images/CameraPanLeft_ovr.png")), + Texture::fromFile(GetFileInPath("/content/images/CameraPanLeft_dn.png"))); + instance->size = Vector2(34,34); + instance->floatBottom = true; + instance->floatRight = true; + instance->position = Vector2(-110, -50); + instance->setParent(this); + instance->name = "PanLeft"; + instance->setButtonListener(new CameraButtonListener()); + + instance = makeImageButton( + Texture::fromFile(GetFileInPath("/content/images/CameraPanRight.png")), + Texture::fromFile(GetFileInPath("/content/images/CameraPanRight_ovr.png")), + Texture::fromFile(GetFileInPath("/content/images/CameraPanRight_dn.png"))); + instance->size = Vector2(34,34); + instance->floatBottom = true; + instance->floatRight = true; + instance->position = Vector2(-45, -50); + instance->setParent(this); + instance->name = "PanRight"; + instance->setButtonListener(new CameraButtonListener()); + + instance = makeImageButton( + Texture::fromFile(GetFileInPath("/content/images/CameraCenter.png")), + Texture::fromFile(GetFileInPath("/content/images/CameraCenter_ovr.png")), + Texture::fromFile(GetFileInPath("/content/images/CameraCenter_dn.png"))); + instance->size = Vector2(34,20); + instance->floatBottom = true; + instance->floatRight = true; + instance->position = Vector2(-77, -60); + instance->setParent(this); + instance->name = "CenterCam"; + instance->setButtonListener(new CameraButtonListener()); + + instance = makeImageButton( + Texture::fromFile(GetFileInPath("/content/images/CameraTiltUp.png")), + Texture::fromFile(GetFileInPath("/content/images/CameraTiltUp_ovr.png")), + Texture::fromFile(GetFileInPath("/content/images/CameraTiltUp_dn.png"))); + instance->size = Vector2(24,24); + instance->floatBottom = true; + instance->floatRight = true; + instance->position = Vector2(-105, -75); + instance->setParent(this); + instance->name = "TiltUp"; + instance->setButtonListener(new CameraButtonListener()); + + instance = makeImageButton( + Texture::fromFile(GetFileInPath("/content/images/CameraTiltDown.png")), + Texture::fromFile(GetFileInPath("/content/images/CameraTiltDown_ovr.png")), + Texture::fromFile(GetFileInPath("/content/images/CameraTiltDown_dn.png"))); + instance->size = Vector2(24,24); + instance->floatBottom = true; + instance->floatRight = true; + instance->position = Vector2(-40, -75); + instance->setParent(this); + instance->name = "TiltDown"; + instance->setButtonListener(new CameraButtonListener()); +} + + +void GuiRoot::drawButtons(RenderDevice* rd) +{ + rd->pushState(); + rd->beforePrimitive(); + this->render(rd); + rd->afterPrimitive(); + rd->popState(); +} + +void GuiRoot::setDebugMessage(std::string msg, G3D::RealTime msgTime) +{ + _messageTime = msgTime; + _message = msg; +} + +//void GuiRoot::render(G3D::RenderDevice* renderDevice) {} + +void GuiRoot::renderGUI(G3D::RenderDevice* rd) +{ + //TODO--Move these to their own instance + + std::stringstream stream; + stream << std::fixed << std::setprecision(1) << g_dataModel->getLevel()->timer; + g_fntdominant->draw2D(rd, "Timer: " + stream.str(), Vector2(rd->getWidth() - 120, 25), 20, Color3::fromARGB(0x81C518), Color3::black()); + g_fntdominant->draw2D(rd, "Score: " + Convert(g_dataModel->getLevel()->score), Vector2(rd->getWidth() - 120, 50), 20, Color3::fromARGB(0x81C518), Color3::black()); + + //GUI Boxes + Draw::box(G3D::Box(Vector3(0,25,0),Vector3(80,355,0)),rd,Color4(0.6F,0.6F,0.6F,0.4F), Color4(0,0,0,0)); + Draw::box(G3D::Box(Vector3(rd->getWidth() - 120,rd->getHeight() - 120,0),Vector3(rd->getWidth(),rd->getHeight(),0)),rd,Color4(0.6F,0.6F,0.6F,0.4F), Color4(0,0,0,0)); + + //Camera menu title + g_fntlighttrek->draw2D(rd, "CameraMenu", Vector2(rd->getWidth()-(g_fntlighttrek->get2DStringBounds("CameraMenu", 14).x+1),rd->getHeight() - 120), 14, Color3::white(), Color4(0.5F,0.5F,0.5F,0.5F)); + + //Tools menu + Draw::box(G3D::Box(Vector3(5, 210,0),Vector3(75, 210,0)),rd,Color4(0.6F,0.6F,0.6F,0.4F), Color4(0.6F,0.6F,0.6F,0.4F)); + g_fntlighttrek->draw2D(rd,"MENU", Vector2(10,332), 14, Color3::white(), Color4(0.5F,0.5F,0.5F,0.5F)); + + + drawButtons(rd); + if(System::time() - 3 < _messageTime) + { + g_fntdominant->draw2D(rd, _message, Vector2((rd->getWidth()/2)-(g_fntdominant->get2DStringBounds(_message, 20).x/2),(rd->getHeight()/2)-(g_fntdominant->get2DStringBounds(_message, 20).y/2)), 20, Color3::yellow(), Color3::black()); + } + + g_dataModel->drawMessage(rd); + render(rd); +} + +bool GuiRoot::mouseInGUI(G3D::RenderDevice* renderDevice,int x,int y) +{ + std::vector instances_2D = g_dataModel->getGuiRoot()->getAllChildren(); + for(size_t i = 0; i < instances_2D.size(); i++) + { + if(BaseButtonInstance* button = dynamic_cast(instances_2D.at(i))) + { + if(button->mouseInButton(x,y, renderDevice)) + { + return true; + } + } + } + return false; +} + +void GuiRoot::update() +{ + Instance * obj6 = this->findFirstChild("Delete"); + Instance * obj = this->findFirstChild("Duplicate"); + Instance * obj2 = this->findFirstChild("Group"); + Instance * obj3 = this->findFirstChild("UnGroup"); + Instance * obj4 = this->findFirstChild("Rotate"); + Instance * obj5 = this->findFirstChild("Tilt"); + if(obj != NULL && obj2 != NULL && obj3 != NULL && obj4 !=NULL && obj5 != NULL && obj6 != NULL) + { + BaseButtonInstance* button = (BaseButtonInstance*)obj; + BaseButtonInstance* button2 = (BaseButtonInstance*)obj2; + BaseButtonInstance* button3 = (BaseButtonInstance*)obj3; + BaseButtonInstance* button4 = (BaseButtonInstance*)obj4; + BaseButtonInstance* button5 = (BaseButtonInstance*)obj5; + BaseButtonInstance* button6 = (BaseButtonInstance*)obj6; + button->disabled = true; + button2->disabled = true; + button3->disabled = true; + button4->disabled = true; + button5->disabled = true; + button6->disabled = true; + for(size_t i = 0; i < g_selectedInstances.size(); i++) + if(g_selectedInstances.at(i)->canDelete) + { + button->disabled = false; + button2->disabled = false; + button3->disabled = false; + button4->disabled = false; + button5->disabled = false; + button6->disabled = false; + break; + } + } +} + +void GuiRoot::onMouseLeftUp(G3D::RenderDevice* renderDevice, int x,int y) +{ + std::vector instances_2D = this->getAllChildren(); + for(size_t i = 0; i < instances_2D.size(); i++) + { + if(BaseButtonInstance* button = dynamic_cast(instances_2D[i])) + { + if(button->mouseInButton(x, y, renderDevice)) + { + button->onMouseClick(); + } + } + } +} diff --git a/GuiRoot.h b/GuiRoot.h new file mode 100644 index 0000000..48a3ce0 --- /dev/null +++ b/GuiRoot.h @@ -0,0 +1,23 @@ +#pragma once +#include "Instance.h" + +class ImageButtonInstance; + +class TextButtonInstance; + +class GuiRoot : public Instance +{ +public: + GuiRoot(); + TextButtonInstance* makeTextButton(); + void drawButtons(RenderDevice* rd); + ImageButtonInstance* makeImageButton(G3D::TextureRef newImage, G3D::TextureRef overImage, G3D::TextureRef downImage, G3D::TextureRef disableImage); + void renderGUI(G3D::RenderDevice* rd); + void setDebugMessage(std::string msg, G3D::RealTime msgTime); + void update(); + bool mouseInGUI(G3D::RenderDevice* renderDevice,int x,int y); + void onMouseLeftUp(G3D::RenderDevice* renderDevice, int x,int y); +private: + std::string _message; + G3D::RealTime _messageTime; +}; \ No newline at end of file diff --git a/Instance.cpp b/Instance.cpp index 7893acf..a6ece35 100644 --- a/Instance.cpp +++ b/Instance.cpp @@ -39,7 +39,9 @@ void Instance::render(RenderDevice* rd) glDisableClientState(GL_NORMAL_ARRAY); } - +void Instance::update() +{ +} PROPGRIDITEM Instance::createPGI(LPSTR catalog, LPSTR propName, LPSTR propDesc, LPARAM curVal, INT type) { diff --git a/Instance.h b/Instance.h index 14dac66..7044abf 100644 --- a/Instance.h +++ b/Instance.h @@ -11,6 +11,7 @@ public: virtual ~Instance(void); std::string name; virtual void render(RenderDevice*); + virtual void update(); std::vector children; // All children. std::string getClassName(); Instance* findFirstChild(std::string); diff --git a/ModeSelectionListener.cpp b/ModeSelectionListener.cpp index 1128ca2..653cd8e 100644 --- a/ModeSelectionListener.cpp +++ b/ModeSelectionListener.cpp @@ -20,9 +20,9 @@ void ModeSelectionListener::onButton1MouseClick(BaseButtonInstance* button) button->selected = true; if(button->name == "Cursor") - mode = CURSOR; + g_usableApp->setMode(CURSOR); else if(button->name == "Resize") - mode = RESIZE; + g_usableApp->setMode(RESIZE); else if(button->name == "Arrows") - mode = ARROWS; + g_usableApp->setMode(ARROWS); } diff --git a/ModeSelectionListener.h b/ModeSelectionListener.h index c3aa8a6..2c33d73 100644 --- a/ModeSelectionListener.h +++ b/ModeSelectionListener.h @@ -1,3 +1,4 @@ +#pragma once #include "ButtonListener.h" #define CURSOR 0 diff --git a/PropertyWindow.cpp b/PropertyWindow.cpp index bb0f3ce..d32641b 100644 --- a/PropertyWindow.cpp +++ b/PropertyWindow.cpp @@ -5,6 +5,7 @@ #include "PropertyWindow.h" #include "Globals.h" #include "strsafe.h" +#include "Application.h" /*typedef struct typPRGP { Instance* instance; // Declare member types @@ -177,7 +178,7 @@ LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) CHAR ListItem[256]; SendMessage((HWND) lParam, (UINT) CB_GETLBTEXT, (WPARAM) ItemIndex, (LPARAM) ListItem); propWind->ClearProperties(); - propWind->UpdateSelected(children.at(ItemIndex)); + g_usableApp->selectInstance(children.at(ItemIndex),propWind); } } break; @@ -212,7 +213,7 @@ void PropertyWindow::refreshExplorer(Instance* selectedInstance) SendMessage(_explorerComboBox,CB_RESETCONTENT,0,0); parent = NULL; children.clear(); - g_selectedInstances.clear(); + //g_selectedInstances.clear(); //for (unsigned int i=0;iname.c_str()); @@ -233,7 +234,7 @@ void PropertyWindow::refreshExplorer(Instance* selectedInstance) children.push_back(selectedChildren.at(z)); SendMessage(_explorerComboBox,CB_ADDSTRING, 0,(LPARAM)selectedChildren.at(z)->name.c_str()); } - g_selectedInstances.push_back(selectedInstance); + //g_usableApp->selectInstance(selectedInstance, this); SendMessage(_explorerComboBox,CB_SETCURSEL,0,(LPARAM)0); //} } @@ -346,20 +347,23 @@ void PropertyWindow::UpdateSelected(Instance * instance) { PropGrid_ResetContent(_propGrid); prop = instance->getProperties(); - selectedInstance = instance; - for(size_t i = 0; i < prop.size(); i++) + if (selectedInstance != instance) { - ::PROPGRIDITEM item = prop.at(i); - PropGrid_AddItem(_propGrid, &item); - //PRGP propgp; - //propgp.instance = instance; - //propgp.prop = prop.at(i); - } - PropGrid_ExpandAllCatalogs(_propGrid); - //SetWindowLongPtr(_propGrid,GWL_USERDATA,(LONG)this); + selectedInstance = instance; + for(size_t i = 0; i < prop.size(); i++) + { + ::PROPGRIDITEM item = prop.at(i); + PropGrid_AddItem(_propGrid, &item); + //PRGP propgp; + //propgp.instance = instance; + //propgp.prop = prop.at(i); + } + PropGrid_ExpandAllCatalogs(_propGrid); + //SetWindowLongPtr(_propGrid,GWL_USERDATA,(LONG)this); - refreshExplorer(instance); - _resize(); + refreshExplorer(instance); + _resize(); + } } void PropertyWindow::ClearProperties() diff --git a/PropertyWindow.h b/PropertyWindow.h index 568a0f8..6495ad8 100644 --- a/PropertyWindow.h +++ b/PropertyWindow.h @@ -1,5 +1,6 @@ #pragma once #include "Instance.h" + class PropertyWindow { public: PropertyWindow(int x, int y, int sx, int sy, HMODULE hThisInstance); diff --git a/RotateButtonListener.cpp b/RotateButtonListener.cpp index 0a408e4..485582e 100644 --- a/RotateButtonListener.cpp +++ b/RotateButtonListener.cpp @@ -1,3 +1,4 @@ +#include "BaseButtonInstance.h" #include "RotateButtonListener.h" #include "Globals.h" #include "AudioPlayer.h" diff --git a/RotateButtonListener.h b/RotateButtonListener.h index b836239..3209702 100644 --- a/RotateButtonListener.h +++ b/RotateButtonListener.h @@ -1,3 +1,4 @@ +#pragma once #include "ButtonListener.h" class RotateButtonListener : public ButtonListener { diff --git a/StringFunctions.cpp b/StringFunctions.cpp new file mode 100644 index 0000000..5e9025b --- /dev/null +++ b/StringFunctions.cpp @@ -0,0 +1,34 @@ +#include +#include +#include "ErrorFunctions.h" +#include "StringFunctions.h" +#include + +std::string Convert (float number) +{ + std::ostringstream buff; + buff< -#include -#include "ErrorFunctions.h" -std::string Convert (float number){ - std::ostringstream buff; - buff<onMouseLeftPressed(hwnd,LOWORD(lParam),HIWORD(lParam)); break; case WM_LBUTTONUP: - app->onMouseLeftUp(LOWORD(lParam),HIWORD(lParam)); + app->onMouseLeftUp(app->getRenderDevice(),LOWORD(lParam),HIWORD(lParam)); break; case WM_RBUTTONDOWN: app->onMouseRightPressed(LOWORD(lParam),HIWORD(lParam)); @@ -155,7 +155,7 @@ LRESULT CALLBACK G3DProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) } case WM_SIZE: { - app->onGraphics(app->renderDevice); + app->onGraphics(app->getRenderDevice()); } break; default: