Browse Source

Added a main editor window

Marko Pintera 12 years ago
parent
commit
255648d6c9

+ 3 - 0
CamelotClient/CamelotClient.cpp

@@ -26,6 +26,7 @@
 
 
 // Editor includes
 // Editor includes
 #include "BsEditorWindowManager.h"
 #include "BsEditorWindowManager.h"
+#include "BsMainEditorWindow.h"
 // End editor includes
 // End editor includes
 
 
 
 
@@ -56,6 +57,7 @@ int CALLBACK WinMain(
 	renderWindowDesc.height = 720;
 	renderWindowDesc.height = 720;
 	renderWindowDesc.title = "Banshee";
 	renderWindowDesc.title = "Banshee";
 	renderWindowDesc.fullscreen = false;
 	renderWindowDesc.fullscreen = false;
+	renderWindowDesc.border = WindowBorder::None;
 
 
 #ifdef DX11
 #ifdef DX11
 	gBansheeApp().startUp(renderWindowDesc, "CamelotD3D11RenderSystem", "BansheeForwardRenderer", "D:\\CamelotResourceMetas");
 	gBansheeApp().startUp(renderWindowDesc, "CamelotD3D11RenderSystem", "BansheeForwardRenderer", "D:\\CamelotResourceMetas");
@@ -294,6 +296,7 @@ int CALLBACK WinMain(
 	/* 								EDITOR INIT                      		*/
 	/* 								EDITOR INIT                      		*/
 	/************************************************************************/
 	/************************************************************************/
 
 
+	MainEditorWindow mainWindow(gApplication().getPrimaryWindow());
 	EditorWindowManager::startUp(cm_new<EditorWindowManager>());
 	EditorWindowManager::startUp(cm_new<EditorWindowManager>());
 
 
 	/************************************************************************/
 	/************************************************************************/

+ 2 - 0
CamelotClient/CamelotClient.vcxproj

@@ -266,6 +266,7 @@
     <ClInclude Include="Include\BsEditorWindowManager.h" />
     <ClInclude Include="Include\BsEditorWindowManager.h" />
     <ClInclude Include="Include\BsGUITabbedTitleBar.h" />
     <ClInclude Include="Include\BsGUITabbedTitleBar.h" />
     <ClInclude Include="Include\BsGUIWindowFrameWidget.h" />
     <ClInclude Include="Include\BsGUIWindowFrameWidget.h" />
+    <ClInclude Include="Include\BsMainEditorWindow.h" />
     <ClInclude Include="Include\DbgEditorWidget1.h" />
     <ClInclude Include="Include\DbgEditorWidget1.h" />
     <ClInclude Include="Include\DbgEditorWidget2.h" />
     <ClInclude Include="Include\DbgEditorWidget2.h" />
     <ClInclude Include="stdafx.h" />
     <ClInclude Include="stdafx.h" />
@@ -283,6 +284,7 @@
     <ClCompile Include="Source\BsEditorWindowManager.cpp" />
     <ClCompile Include="Source\BsEditorWindowManager.cpp" />
     <ClCompile Include="Source\BsGUITabbedTitleBar.cpp" />
     <ClCompile Include="Source\BsGUITabbedTitleBar.cpp" />
     <ClCompile Include="Source\BsGUIWindowFrameWidget.cpp" />
     <ClCompile Include="Source\BsGUIWindowFrameWidget.cpp" />
+    <ClCompile Include="Source\BsMainEditorWindow.cpp" />
     <ClCompile Include="Source\DbgEditorWidget1.cpp" />
     <ClCompile Include="Source\DbgEditorWidget1.cpp" />
     <ClCompile Include="Source\DbgEditorWidget2.cpp" />
     <ClCompile Include="Source\DbgEditorWidget2.cpp" />
     <ClCompile Include="stdafx.cpp" />
     <ClCompile Include="stdafx.cpp" />

+ 6 - 0
CamelotClient/CamelotClient.vcxproj.filters

@@ -69,6 +69,9 @@
     <ClInclude Include="Include\BsDockManager.h">
     <ClInclude Include="Include\BsDockManager.h">
       <Filter>Header Files\Editor</Filter>
       <Filter>Header Files\Editor</Filter>
     </ClInclude>
     </ClInclude>
+    <ClInclude Include="Include\BsMainEditorWindow.h">
+      <Filter>Header Files\Editor</Filter>
+    </ClInclude>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClCompile Include="stdafx.cpp">
     <ClCompile Include="stdafx.cpp">
@@ -113,5 +116,8 @@
     <ClCompile Include="Source\BsDockManager.cpp">
     <ClCompile Include="Source\BsDockManager.cpp">
       <Filter>Source Files\Editor</Filter>
       <Filter>Source Files\Editor</Filter>
     </ClCompile>
     </ClCompile>
+    <ClCompile Include="Source\BsMainEditorWindow.cpp">
+      <Filter>Source Files\Editor</Filter>
+    </ClCompile>
   </ItemGroup>
   </ItemGroup>
 </Project>
 </Project>

+ 1 - 1
CamelotClient/Include/BsDockManager.h

@@ -45,7 +45,7 @@ namespace BansheeEditor
 
 
 		void insert(EditorWidgetContainer* relativeTo, EditorWidget* widgetToInsert, DockLocation location);
 		void insert(EditorWidgetContainer* relativeTo, EditorWidget* widgetToInsert, DockLocation location);
 
 
-		void setSize(CM::UINT32 width, CM::UINT32 height);
+		void setArea(CM::INT32 x, CM::INT32 y, CM::UINT32 width, CM::UINT32 height);
 
 
 	private:
 	private:
 		BS::GUIWidget* mParent;
 		BS::GUIWidget* mParent;

+ 1 - 0
CamelotClient/Include/BsEditorPrerequisites.h

@@ -12,4 +12,5 @@ namespace BansheeEditor
 	class GUITabbedTitleBar;
 	class GUITabbedTitleBar;
 	class EditorWindowManager;
 	class EditorWindowManager;
 	class DockManager;
 	class DockManager;
+	class MainEditorWindow;
 }
 }

+ 3 - 0
CamelotClient/Include/BsEditorWindowBase.h

@@ -21,8 +21,11 @@ namespace BansheeEditor
 		virtual void close();
 		virtual void close();
 	protected:
 	protected:
 		EditorWindowBase();
 		EditorWindowBase();
+		EditorWindowBase(CM::RenderWindowPtr renderWindow);
 		BS::HGUIWidget mGUI;
 		BS::HGUIWidget mGUI;
+		bool mOwnsRenderWindow;
 
 
+		void construct(CM::RenderWindowPtr renderWindow);
 		virtual void initialize();
 		virtual void initialize();
 		virtual void movedOrResized() { }
 		virtual void movedOrResized() { }
 	private:
 	private:

+ 19 - 0
CamelotClient/Include/BsMainEditorWindow.h

@@ -0,0 +1,19 @@
+#pragma once
+
+#include "BsEditorPrerequisites.h"
+#include "BsEditorWindowBase.h"
+
+namespace BansheeEditor
+{
+	class MainEditorWindow : public EditorWindowBase
+	{
+	public:
+		MainEditorWindow(CM::RenderWindowPtr renderWindow);
+		~MainEditorWindow();
+
+	protected:
+		DockManager* mDockManager;
+
+		virtual void movedOrResized();
+	};
+}

+ 2 - 2
CamelotClient/Source/BsDockManager.cpp

@@ -192,8 +192,8 @@ namespace BansheeEditor
 		}
 		}
 	}
 	}
 
 
-	void DockManager::setSize(CM::UINT32 width, CM::UINT32 height)
+	void DockManager::setArea(INT32 x, INT32 y, UINT32 width, UINT32 height)
 	{
 	{
-		mRootContainer.setArea(0, 0, width, height);
+		mRootContainer.setArea(x, y, width, height);
 	}
 	}
 }
 }

+ 35 - 20
CamelotClient/Source/BsEditorWindowBase.cpp

@@ -16,6 +16,7 @@ using namespace BansheeEngine;
 namespace BansheeEditor
 namespace BansheeEditor
 {
 {
 	EditorWindowBase::EditorWindowBase()
 	EditorWindowBase::EditorWindowBase()
+		:mOwnsRenderWindow(true)
 	{
 	{
 		RENDER_WINDOW_DESC renderWindowDesc;
 		RENDER_WINDOW_DESC renderWindowDesc;
 		renderWindowDesc.width = 200;
 		renderWindowDesc.width = 200;
@@ -27,31 +28,20 @@ namespace BansheeEditor
 
 
 		mRenderWindow = RenderWindow::create(renderWindowDesc, gApplication().getPrimaryWindow());
 		mRenderWindow = RenderWindow::create(renderWindowDesc, gApplication().getPrimaryWindow());
 
 
-		mSceneObject = SceneObject::create("EditorWindow");
-
-		HCamera camera = mSceneObject->addComponent<Camera>();
-		camera->initialize(mRenderWindow, 0.0f, 0.0f, 1.0f, 1.0f, 0);
-		camera->setNearClipDistance(5);
-		camera->setAspectRatio(1.0f);
-		camera->setIgnoreSceneRenderables(true);
-
-		mGUI = mSceneObject->addComponent<GUIWidget>();
-		mGUI->initialize(camera->getViewport().get(), mRenderWindow.get());
-		mGUI->setDepth(128);
-
-		mGUI->setSkin(&EngineGUI::instance().getSkin());
-
-		GameObjectHandle<WindowFrameWidget> frame = mSceneObject->addComponent<WindowFrameWidget>();
-		frame->setSkin(&EngineGUI::instance().getSkin());
-		frame->initialize(camera->getViewport().get(), mRenderWindow.get());
-		frame->setDepth(129);
+		construct(mRenderWindow);
+	}
 
 
-		RenderWindowManager::instance().onMovedOrResized.connect(boost::bind(&EditorWindowBase::movedOrResized, this, _1));
+	EditorWindowBase::EditorWindowBase(CM::RenderWindowPtr renderWindow)
+		:mOwnsRenderWindow(false)
+	{
+		construct(renderWindow);
 	}
 	}
 
 
 	EditorWindowBase::~EditorWindowBase()
 	EditorWindowBase::~EditorWindowBase()
 	{
 	{
-		mRenderWindow->destroy();
+		if(mOwnsRenderWindow)
+			mRenderWindow->destroy();
+
 		mSceneObject->destroy();
 		mSceneObject->destroy();
 	}
 	}
 
 
@@ -66,6 +56,31 @@ namespace BansheeEditor
 		EditorWindowManager::instance().destroy(this);
 		EditorWindowManager::instance().destroy(this);
 	}
 	}
 
 
+	void EditorWindowBase::construct(CM::RenderWindowPtr renderWindow)
+	{
+		mRenderWindow = renderWindow;
+		mSceneObject = SceneObject::create("EditorWindow");
+
+		HCamera camera = mSceneObject->addComponent<Camera>();
+		camera->initialize(renderWindow, 0.0f, 0.0f, 1.0f, 1.0f, 0);
+		camera->setNearClipDistance(5);
+		camera->setAspectRatio(1.0f);
+		camera->setIgnoreSceneRenderables(true);
+
+		mGUI = mSceneObject->addComponent<GUIWidget>();
+		mGUI->initialize(camera->getViewport().get(), renderWindow.get());
+		mGUI->setDepth(128);
+
+		mGUI->setSkin(&EngineGUI::instance().getSkin());
+
+		GameObjectHandle<WindowFrameWidget> frame = mSceneObject->addComponent<WindowFrameWidget>();
+		frame->setSkin(&EngineGUI::instance().getSkin());
+		frame->initialize(camera->getViewport().get(), renderWindow.get());
+		frame->setDepth(129);
+
+		RenderWindowManager::instance().onMovedOrResized.connect(boost::bind(&EditorWindowBase::movedOrResized, this, _1));
+	}
+
 	void EditorWindowBase::movedOrResized(RenderWindow& renderWindow)
 	void EditorWindowBase::movedOrResized(RenderWindow& renderWindow)
 	{
 	{
 		if(&renderWindow == mRenderWindow.get())
 		if(&renderWindow == mRenderWindow.get())

+ 29 - 0
CamelotClient/Source/BsMainEditorWindow.cpp

@@ -0,0 +1,29 @@
+#include "BsMainEditorWindow.h"
+#include "BsDockManager.h"
+
+using namespace CamelotFramework;
+using namespace BansheeEngine;
+
+namespace BansheeEditor
+{
+	MainEditorWindow::MainEditorWindow(CM::RenderWindowPtr renderWindow)
+		:EditorWindowBase(renderWindow), mDockManager(cm_new<DockManager>(mGUI.get()))
+	{
+
+	}
+
+	MainEditorWindow::~MainEditorWindow()
+	{
+		cm_delete(mDockManager);
+	}
+
+	void MainEditorWindow::movedOrResized()
+	{
+		EditorWindowBase::movedOrResized();
+
+		UINT32 widgetWidth = (UINT32)std::max(0, (INT32)getWidth() - 2);
+		UINT32 widgetHeight = (UINT32)std::max(0, (INT32)getHeight() - 2);
+
+		mDockManager->setArea(1, 1, widgetWidth, widgetHeight);
+	}
+}

+ 2 - 0
TODO.txt

@@ -12,6 +12,8 @@ I call waitUntilLoaded too many times. Sometimes 5-6 times in a single function.
 GUIWidget::updateMeshes leaks. If I leave the game running I can see memory continously going up
 GUIWidget::updateMeshes leaks. If I leave the game running I can see memory continously going up
  - Resizing from the top doesn't work
  - Resizing from the top doesn't work
  - Resizing from the left actually resizes the right side
  - Resizing from the left actually resizes the right side
+ - BansheeApplication should probably derive from Camlelot application. Right now user needs to know the difference between 
+   gApplication and gBansheeApp, which is non-intuitive (e.g. retrieving a window can be done on gApplication, but running main loop can happen on both
 
 
 Over the holidays:
 Over the holidays:
  - Get release mode working
  - Get release mode working