Selaa lähdekoodia

Editor split fixes

Ivan Safrin 12 vuotta sitten
vanhempi
sitoutus
6f1ff51c61

+ 5 - 4
IDE/Contents/Include/PolycodeFrame.h

@@ -152,11 +152,13 @@ class EditorHolder : public UIElement {
 		void mergeSides(EditorHolder *mainHolder);
 		
 		void Update();
+		void setActive(bool val);
 				
 		void updateFileSelector();
 		
 		void setEditor(PolycodeEditor *newEditor);		
 		PolycodeEditor *getEditor();
+		
 						
 	protected:
 	
@@ -184,6 +186,7 @@ class EditorHolder : public UIElement {
 		
 		bool displayFilePathInSelector;
 		bool initialUpdate;
+		bool isActive;
 };
 
 
@@ -257,6 +260,8 @@ public:
 	void showNextEditor();
 	void showPreviousEditor();
 	
+	EditorHolder *editorHolder;	
+	
 private:
 	
 	int frameSizeX;
@@ -281,10 +286,6 @@ private:
 	UILabel *currentProjectTitle;
 	
 	UIImage *welcomeImage;	
-	
-	
-	EditorHolder *editorHolder;
-	
 
 	vector<PolycodeEditor*> editors;
 	

+ 1 - 0
IDE/Contents/Resources/UIThemes/default/theme.xml

@@ -4,6 +4,7 @@
 	<uiDefaultFontColor>0x000000c8</uiDefaultFontColor>
 
 	<uiBgColor>0xc8c8c8ff</uiBgColor>
+	<uiAccentColor>0x31687fff</uiAccentColor>	
 	<uiHeaderBgColor>0x616161ff</uiHeaderBgColor>
 	<uiSmallHeaderBgColor>0x868686ff</uiSmallHeaderBgColor>
 	<uiHeaderFontColor>0x000000c8</uiHeaderFontColor>

+ 4 - 0
IDE/Contents/Source/PolycodeEditor.cpp

@@ -21,6 +21,7 @@
  */
 
 #include "PolycodeEditor.h"
+#include "PolycodeFrame.h"
 
 extern PolycodeClipboard *globalClipboard;
 
@@ -166,6 +167,9 @@ void PolycodeEditor::Resize(int x, int y) {
 }
 
 PolycodeEditor::~PolycodeEditor() {
+	if(editorHolder) {
+		editorHolder->setEditor(NULL);
+	}
 	Core *core = CoreServices::getInstance()->getCore();
 	core->removeAllHandlersForListener(this);
 }

+ 56 - 10
IDE/Contents/Source/PolycodeFrame.cpp

@@ -28,6 +28,8 @@ PolycodeFrame *globalFrame;
 
 extern UIGlobalMenu *globalMenu;
 
+EditorHolder *activeEditorHolder = NULL;
+
 EditPoint::EditPoint(BezierPoint *point, unsigned int type) : Entity() {
 	this->point = point;
 	this->type = type;
@@ -505,18 +507,18 @@ EditorHolder::EditorHolder(PolycodeEditorManager *editorManager, EditorHolder *p
 	mergeSplitButton = new UIImageButton("Images/editor_mergesplit.png");
 	holderBar->addChild(mergeSplitButton);
 	mergeSplitButton->addEventListener(this, UIEvent::CLICK_EVENT);	
-	
-	
+		
 	closeFileButton = new UIImageButton("Images/remove_icon.png");
 	holderBar->addChild(closeFileButton);
 	closeFileButton->setPosition(10, 8);
 	closeFileButton->addEventListener(this, UIEvent::CLICK_EVENT);
 	
-	
 	currentFileSelector = new UIComboBox(globalMenu, 350);
 	currentFileSelector->addEventListener(this, UIEvent::CHANGE_EVENT);
 	holderBar->addChild(currentFileSelector);
 	currentFileSelector->setPosition(30, 3);
+
+	addEventListener(this, InputEvent::EVENT_MOUSEDOWN);
 			
 	vSizer = NULL;
 	hSizer = NULL;
@@ -529,8 +531,23 @@ EditorHolder::EditorHolder(PolycodeEditorManager *editorManager, EditorHolder *p
 	initialUpdate = true;
 	updateFileSelector();
 	
-	editorToMerge = NULL;
+	editorToMerge = NULL;	
 	
+	isActive = false;
+}
+
+void EditorHolder::setActive(bool val) {
+	isActive = val;
+	if(val) {	
+		headerBg->color.setColorHexFromString(CoreServices::getInstance()->getConfig()->getStringValue("Polycode", "uiAccentColor"));
+		if(activeEditorHolder && activeEditorHolder != this) {
+			activeEditorHolder->setActive(false);
+		}
+		activeEditorHolder = this;
+		editorManager->setCurrentEditor(currentEditor);
+	} else {
+		headerBg->color.setColorHexFromString(CoreServices::getInstance()->getConfig()->getStringValue("Polycode", "uiHeaderBgColor"));
+	}
 }
 
 void EditorHolder::updateFileSelector() {
@@ -601,6 +618,10 @@ void EditorHolder::setEditor(PolycodeEditor *newEditor) {
 	}
 	updateFileSelector();
 	Resize(getWidth(), getHeight());
+	
+	if(isActive) {
+		editorManager->setCurrentEditor(currentEditor);	
+	}
 }
 
 PolycodeEditor *EditorHolder::getEditor() {
@@ -608,15 +629,25 @@ PolycodeEditor *EditorHolder::getEditor() {
 }
 
 void EditorHolder::handleEvent(Event *event) {
-	if(event->getDispatcher() == vSplitButton) {
+
+	if(event->getDispatcher() == this) {
+		if(holderBar->visible) {
+			setActive(true);
+		}
+	} else if(event->getDispatcher() == vSplitButton) {
 		holderBar->visible = false;
 		holderBar->enabled = false;
 		
 		vSizer = new UIVSizer(getWidth(), getHeight(), getHeight()/2.0, true);
 		addChild(vSizer);
 		firstChildHolder = new EditorHolder(editorManager, this);
-		vSizer->addTopChild(firstChildHolder);
+		firstChildHolder->addEventListener(this, UIEvent::CLOSE_EVENT);
+		vSizer->addTopChild(firstChildHolder);		
+		if(isActive) {
+			firstChildHolder->setActive(true);
+		}		
 		secondChildHolder = new EditorHolder(editorManager, this);
+		secondChildHolder->addEventListener(this, UIEvent::CLOSE_EVENT);
 		vSizer->addBottomChild(secondChildHolder);
 		
 		
@@ -634,9 +665,14 @@ void EditorHolder::handleEvent(Event *event) {
 		hSizer = new UIHSizer(getWidth(), getHeight(), getWidth()/2.0, true);
 		addChild(hSizer);
 		firstChildHolder = new EditorHolder(editorManager, this);
+		firstChildHolder->addEventListener(this, UIEvent::CLOSE_EVENT);		
 		hSizer->addLeftChild(firstChildHolder);
 		secondChildHolder = new EditorHolder(editorManager, this);
+		secondChildHolder->addEventListener(this, UIEvent::CLOSE_EVENT);		
 		hSizer->addRightChild(secondChildHolder);
+		if(isActive) {
+			firstChildHolder->setActive(true);
+		}		
 		
 		if(currentEditor) {
 			removeChild(currentEditor);
@@ -656,6 +692,12 @@ void EditorHolder::handleEvent(Event *event) {
 		if(parentHolder) {
 			parentHolder->mergeSides(this);
 		}
+	} else if(event->getDispatcher() == closeFileButton) {
+		dispatchEvent(new UIEvent(), UIEvent::CLOSE_EVENT);
+	} else if(event->getDispatcher() == firstChildHolder || event->getDispatcher() == secondChildHolder) {
+		if(event->getEventCode() == UIEvent::CLOSE_EVENT) {
+			dispatchEvent(new UIEvent(), UIEvent::CLOSE_EVENT);		
+		}
 	}
 	
 	Resize(getWidth(), getHeight());
@@ -693,6 +735,8 @@ void EditorHolder::_mergeSides(EditorHolder *mainHolder) {
 		}
 	}
 	
+	setActive(true);
+	
 	if(vSizer) {
 		removeChild(vSizer);
 		delete vSizer;
@@ -806,6 +850,8 @@ PolycodeFrame::PolycodeFrame(PolycodeEditorManager *editorManager) : UIElement()
 	mainSizer->addLeftChild(projectBrowser);
 
 	editorHolder = new EditorHolder(editorManager, NULL);
+	editorHolder->setActive(true);
+	
 	consoleSizer->addTopChild(editorHolder);
 	
 	console = new PolycodeConsole();	
@@ -998,12 +1044,12 @@ void PolycodeFrame::addEditor(PolycodeEditor *editor) {
 }
 
 void PolycodeFrame::showEditor(PolycodeEditor *editor) {
-	if(editorHolder->getEditor()) {
-		editorHolder->setEditor(NULL);
+	if(activeEditorHolder->getEditor()) {
+		activeEditorHolder->setEditor(NULL);
 	}
 	
-	editorHolder->setEditor(editor);
-	editor->Activate();		
+	activeEditorHolder->setEditor(editor);
+	editor->Activate();
 	Resize(frameSizeX, frameSizeY);
 }
 

+ 19 - 7
IDE/Contents/Source/PolycodeIDEApp.cpp

@@ -115,6 +115,8 @@ PolycodeIDEApp::PolycodeIDEApp(PolycodeView *view) : EventDispatcher() {
 	
 	frame->playButton->addEventListener(this, UIEvent::CLICK_EVENT);
 	frame->stopButton->addEventListener(this, UIEvent::CLICK_EVENT);
+	
+	frame->editorHolder->addEventListener(this, UIEvent::CLOSE_EVENT);
 
 	screen->addChild(frame);
 
@@ -283,13 +285,9 @@ void PolycodeIDEApp::removeEditor(PolycodeEditor *editor) {
 		return;
 	
 	frame->removeEditor(editor);
-	editorManager->destroyEditor(editor);
-	if(editorManager->openEditors.size() > 0) {
-		editorManager->setCurrentEditor(editorManager->openEditors[0]);
-		frame->showEditor(editorManager->openEditors[0]);
-	} else {
-		editorManager->setCurrentEditor(NULL);
-	}
+	editorManager->destroyEditor(editor);		
+	editorManager->setCurrentEditor(NULL);
+	
 }
 
 void PolycodeIDEApp::closeFile() {
@@ -593,6 +591,10 @@ void PolycodeIDEApp::openFile(OSFileEntry file) {
 
 void PolycodeIDEApp::handleEvent(Event *event) {
 
+	if(event->getDispatcher() == frame->editorHolder && event->getEventCode() == UIEvent::CLOSE_EVENT) {
+		closeFile();
+	}
+
 	if(event->getDispatcher() == frame->fileDialog) {
 		if(event->getEventCode() == UIEvent::OK_EVENT && event->getEventType() == "UIEvent") {
 			String path = frame->fileDialog->getSelection();
@@ -794,6 +796,11 @@ void PolycodeIDEApp::handleEvent(Event *event) {
 					if(editor) {
 						editor->saveFile();
 						closeFile();
+						if(editorManager->openEditors.size() > 0) {
+							editorManager->setCurrentEditor(editorManager->openEditors[0]);
+						} else{
+							editorManager->setCurrentEditor(NULL);
+						}						
 					}
 					frame->yesNoCancelPopup->action = "";
 					frame->hideModal();
@@ -808,6 +815,11 @@ void PolycodeIDEApp::handleEvent(Event *event) {
 					if(editor) {
 						editor->setHasChanges(false);
 						closeFile();
+						if(editorManager->openEditors.size() > 0) {
+							editorManager->setCurrentEditor(editorManager->openEditors[0]);
+						} else{
+							editorManager->setCurrentEditor(NULL);
+						}						
 					}
 					frame->yesNoCancelPopup->action = "";					
 					frame->hideModal();

+ 0 - 3
Modules/Contents/UI/Include/PolyUIWindow.h

@@ -67,12 +67,9 @@ namespace Polycode {
 			SceneLabel *titleLabel;
 		
 			Font *font;
-			Tween *windowTween;
 			UIImageButton *closeBtn;
 			UIBox *windowRect;
 			UIRect *titlebarRect;
-		
-			bool tweenClosing;
 			void resetTween();
 	};
 }

+ 6 - 22
Modules/Contents/UI/Source/PolyUIWindow.cpp

@@ -27,11 +27,12 @@
 #include "PolyLabel.h"
 #include "PolyCore.h"
 #include "PolyCoreServices.h"
+#include "PolyTweenManager.h"
 
 using namespace Polycode;
 
 
-UIWindow::UIWindow(String windowName, Number width, Number height) : UIElement(), windowTween(NULL) {
+UIWindow::UIWindow(String windowName, Number width, Number height) : UIElement() {
 	closeOnEscape = false;
 	
 	snapToPixels = true;
@@ -117,7 +118,6 @@ void UIWindow::setWindowSize(Number w, Number h) {
 
 UIWindow::~UIWindow() {
 	if(!ownsChildren) {
-		delete windowTween;
 		delete windowRect;
 		delete titlebarRect;
 		delete titleLabel;
@@ -159,23 +159,15 @@ void UIWindow::onMouseDown(Number x, Number y) {
 }
 
 void UIWindow::showWindow() {
-	if (windowTween)
-		delete windowTween;
-
 	enabled = true;
 	visible = true;
-	tweenClosing = false;
-	windowTween = new Tween(&color.a, Tween::EASE_IN_QUAD, 0.0f, 1.0f, 0.01f, false, true);
-	windowTween->addEventListener(this, Event::COMPLETE_EVENT);
+	color.a = 1.0;
 }
 
 void UIWindow::hideWindow() {
-	if (windowTween)
-		delete windowTween;
-
-	tweenClosing = true;
-	windowTween = new Tween(&color.a, Tween::EASE_IN_QUAD, 1.0f, 0.0f, 0.01f, false, true);
-	windowTween->addEventListener(this, Event::COMPLETE_EVENT);
+	color.a = 0.0;
+	visible = false;
+	enabled = false;
 }
 
 void UIWindow::handleEvent(Event *event) {
@@ -203,12 +195,4 @@ void UIWindow::handleEvent(Event *event) {
 		onClose();
 		dispatchEvent(new UIEvent(), UIEvent::CLOSE_EVENT);
 	}
-	if(event->getDispatcher() == windowTween) {
-		if (tweenClosing) {
-			visible = false;
-			enabled = false;
-		}
-		
-		windowTween = NULL;
-	}
 }