Răsfoiți Sursa

Editor splitting basics

Ivan Safrin 12 ani în urmă
părinte
comite
b2fa7919c8

+ 6 - 0
IDE/Contents/Include/PolycodeEditor.h

@@ -32,6 +32,8 @@
 
 
 using namespace Polycode;
 using namespace Polycode;
 
 
+class EditorHolder;
+
 class PolycodeEditorActionData {
 class PolycodeEditorActionData {
 	public:
 	public:
 		PolycodeEditorActionData(){}
 		PolycodeEditorActionData(){}
@@ -87,9 +89,13 @@ public:
 	void setHasChanges(bool newVal);
 	void setHasChanges(bool newVal);
 	
 	
 	PolycodeProject *parentProject;
 	PolycodeProject *parentProject;
+	
+	void setEditorHolder(EditorHolder *holder);
+	EditorHolder *getEditorHolder();
 		
 		
 protected:
 protected:
 
 
+	EditorHolder *editorHolder;
 	bool _hasChanges;
 	bool _hasChanges;
 
 
 	String filePath;
 	String filePath;

+ 38 - 12
IDE/Contents/Include/PolycodeFrame.h

@@ -142,26 +142,55 @@ class CurveEditor : public UIWindow {
 
 
 class EditorHolder : public UIElement {
 class EditorHolder : public UIElement {
 	public:
 	public:
-		EditorHolder();
+		EditorHolder(PolycodeEditorManager *editorManager, EditorHolder *parentHolder);
 		~EditorHolder();
 		~EditorHolder();
 		
 		
-		void Resize(Number width, Number height);
+		void handleEvent(Event *event);
+		void Resize(Number width, Number height);		
+		
+		void _mergeSides(EditorHolder *mainHolder);
+		void mergeSides(EditorHolder *mainHolder);
+		
+		void Update();
+				
+		void updateFileSelector();
+		
+		void setEditor(PolycodeEditor *newEditor);		
+		PolycodeEditor *getEditor();
+						
+	protected:
+	
+		EditorHolder *parentHolder;
+		PolycodeEditorManager *editorManager;
 		
 		
 		PolycodeEditor *currentEditor;
 		PolycodeEditor *currentEditor;
+		EditorHolder *editorToMerge;
 		
 		
-};
-
-class PolycodeEditorContainer : public UIElement {
-	public:
-		PolycodeEditorContainer();
-		~PolycodeEditorContainer();
+		UIElement *holderBar;
+		
+		UIRect *headerBg;
+		UIImageButton *vSplitButton;
+		UIImageButton *hSplitButton;
+		UIImageButton *mergeSplitButton;
+		
+		UIVSizer *vSizer;
+		UIHSizer *hSizer;	
+		
+		EditorHolder *firstChildHolder;
+		EditorHolder *secondChildHolder;
+		
+		UIImageButton *closeFileButton;		
+		UIComboBox *currentFileSelector;
+		
+		bool displayFilePathInSelector;
+		bool initialUpdate;
 };
 };
 
 
 
 
 class PolycodeFrame : public UIElement {
 class PolycodeFrame : public UIElement {
 public:
 public:
 	
 	
-	PolycodeFrame();
+	PolycodeFrame(PolycodeEditorManager *editorManager);
 	~PolycodeFrame();
 	~PolycodeFrame();
 	
 	
 	void Resize(int x, int y);
 	void Resize(int x, int y);
@@ -224,8 +253,6 @@ public:
 	UIWindow *aboutWindow;
 	UIWindow *aboutWindow;
 	UIButton *aboutOKButton;
 	UIButton *aboutOKButton;
 	
 	
-	UIImageButton *closeFileButton;
-	
 	void updateFileSelector();
 	void updateFileSelector();
 	void showNextEditor();
 	void showNextEditor();
 	void showPreviousEditor();
 	void showPreviousEditor();
@@ -252,7 +279,6 @@ private:
 	bool isDragging;
 	bool isDragging;
 	
 	
 	UILabel *currentProjectTitle;
 	UILabel *currentProjectTitle;
-	UIComboBox *currentFileSelector;
 	
 	
 	UIImage *welcomeImage;	
 	UIImage *welcomeImage;	
 	
 	

BIN
IDE/Contents/Resources/Images/editor_hsplit.png


BIN
IDE/Contents/Resources/Images/editor_mergesplit.png


BIN
IDE/Contents/Resources/Images/editor_vsplit.png


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

@@ -51,6 +51,8 @@ PolycodeEditor::PolycodeEditor(bool _isReadOnly) : UIElement(), ClipboardProvide
 	processInputEvents = true;
 	processInputEvents = true;
 	_hasChanges = false;
 	_hasChanges = false;
 	
 	
+	editorHolder = NULL;
+	
 	currentUndoPosition = 0;
 	currentUndoPosition = 0;
 	
 	
 	Core *core = CoreServices::getInstance()->getCore();
 	Core *core = CoreServices::getInstance()->getCore();
@@ -68,6 +70,15 @@ void PolycodeEditor::setHasChanges(bool newVal) {
 	}
 	}
 }
 }
 
 
+void PolycodeEditor::setEditorHolder(EditorHolder *holder) {
+	editorHolder = holder;
+}
+
+EditorHolder *PolycodeEditor::getEditorHolder() {
+	return editorHolder;
+}
+
+
 void PolycodeEditor::handleEvent(Event *event) {
 void PolycodeEditor::handleEvent(Event *event) {
 	if(event->getDispatcher() == CoreServices::getInstance()->getCore() && enabled) {
 	if(event->getDispatcher() == CoreServices::getInstance()->getCore() && enabled) {
 		switch(event->getEventCode()) {
 		switch(event->getEventCode()) {

+ 292 - 73
IDE/Contents/Source/PolycodeFrame.cpp

@@ -28,14 +28,6 @@ PolycodeFrame *globalFrame;
 
 
 extern UIGlobalMenu *globalMenu;
 extern UIGlobalMenu *globalMenu;
 
 
-PolycodeEditorContainer::PolycodeEditorContainer() {
-
-}
-
-PolycodeEditorContainer::~PolycodeEditorContainer() {
-
-}
-
 EditPoint::EditPoint(BezierPoint *point, unsigned int type) : Entity() {
 EditPoint::EditPoint(BezierPoint *point, unsigned int type) : Entity() {
 	this->point = point;
 	this->point = point;
 	this->type = type;
 	this->type = type;
@@ -487,22 +479,295 @@ CurveEditor::~CurveEditor() {
 
 
 }
 }
 
 
-EditorHolder::EditorHolder() : UIElement() {
+EditorHolder::EditorHolder(PolycodeEditorManager *editorManager, EditorHolder *parentHolder) : UIElement() {
+	this->editorManager = editorManager;
+	this->parentHolder = parentHolder;
+	
 	currentEditor = NULL;
 	currentEditor = NULL;
+	
+	holderBar = new UIElement();
+	addChild(holderBar);
+	
+	snapToPixels = true;
+	
+	headerBg = new UIRect(30, 30);
+	holderBar->addChild(headerBg);
+	headerBg->color.setColorHexFromString(CoreServices::getInstance()->getConfig()->getStringValue("Polycode", "uiHeaderBgColor"));
+	
+	vSplitButton = new UIImageButton("Images/editor_vsplit.png");
+	holderBar->addChild(vSplitButton);
+	vSplitButton->addEventListener(this, UIEvent::CLICK_EVENT);
+
+	hSplitButton = new UIImageButton("Images/editor_hsplit.png");
+	holderBar->addChild(hSplitButton);
+	hSplitButton->addEventListener(this, UIEvent::CLICK_EVENT);	
+
+	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);
+			
+	vSizer = NULL;
+	hSizer = NULL;
+	
+	firstChildHolder = NULL;
+	secondChildHolder = NULL;
+	
+	displayFilePathInSelector = false;
+	
+	initialUpdate = true;
+	updateFileSelector();
+	
+	editorToMerge = NULL;
+	
 }
 }
 
 
-EditorHolder::~EditorHolder() {
+void EditorHolder::updateFileSelector() {
+	currentFileSelector->removeAllHandlersForListener(this);
+	currentFileSelector->clearItems();
+	
+	for(int i=0; i < editorManager->openEditors.size(); i++) {
+		OSFileEntry entry(editorManager->openEditors[i]->getFilePath(), OSFileEntry::TYPE_FILE);
+		
+		String projName = editorManager->openEditors[i]->parentProject->getProjectName();
+		String rootFolder = editorManager->openEditors[i]->parentProject->getRootFolder();
+		String filePath = editorManager->openEditors[i]->getFilePath();
+		
+		String fullEntry = filePath;
+		if(filePath.find(rootFolder) != -1) {
+			fullEntry = projName + filePath.substr(rootFolder.size(), filePath.size()-1);
+		}
+		if(editorManager->openEditors[i]->hasChanges()) {
+			if (displayFilePathInSelector)
+				currentFileSelector->addComboItem("* "+fullEntry);
+			else
+				currentFileSelector->addComboItem("* "+entry.name);
+		} else {
+			if (displayFilePathInSelector)
+				currentFileSelector->addComboItem(fullEntry);
+			else
+				currentFileSelector->addComboItem(entry.name);
+		}
+		
+		if(currentEditor == editorManager->openEditors[i]) {
+			if(!initialUpdate) {
+				currentFileSelector->setSelectedIndex(i);
+			}
+		}
+	}
+	
+	if(firstChildHolder) {
+		firstChildHolder->updateFileSelector();
+	}
+	if(secondChildHolder) {
+		secondChildHolder->updateFileSelector();
+	}
+	currentFileSelector->addEventListener(this, UIEvent::CHANGE_EVENT);
+	initialUpdate = false;
+}
+
+void EditorHolder::setEditor(PolycodeEditor *newEditor) {
+
+	if(vSizer || hSizer) {
+		firstChildHolder->setEditor(newEditor);
+		return;
+	}
+
+	if(currentEditor) {
+		removeChild(currentEditor);
+		currentEditor->setEditorHolder(NULL);
+	}
+	currentEditor = newEditor;
+	if(currentEditor) {	
+		EditorHolder *currentEditorHolder = currentEditor->getEditorHolder();
+		if(currentEditorHolder) {
+			currentEditorHolder->setEditor(NULL);
+		}
+		if(currentEditor) {
+			currentEditor->setEditorHolder(this);	
+		}
+		addChild(currentEditor);
+	}
+	updateFileSelector();
+	Resize(getWidth(), getHeight());
+}
+
+PolycodeEditor *EditorHolder::getEditor() {
+	return currentEditor;
+}
+
+void EditorHolder::handleEvent(Event *event) {
+	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);
+		secondChildHolder = new EditorHolder(editorManager, this);
+		vSizer->addBottomChild(secondChildHolder);
+		
+		
+		if(currentEditor) {
+			removeChild(currentEditor);
+			currentEditor->setEditorHolder(NULL);			
+			firstChildHolder->setEditor(currentEditor);
+			currentEditor = NULL;
+		}
+		
+	} else if(event->getDispatcher() == hSplitButton) {
+		holderBar->visible = false;
+		holderBar->enabled = false;
+		
+		hSizer = new UIHSizer(getWidth(), getHeight(), getWidth()/2.0, true);
+		addChild(hSizer);
+		firstChildHolder = new EditorHolder(editorManager, this);
+		hSizer->addLeftChild(firstChildHolder);
+		secondChildHolder = new EditorHolder(editorManager, this);
+		hSizer->addRightChild(secondChildHolder);
+		
+		if(currentEditor) {
+			removeChild(currentEditor);
+			currentEditor->setEditorHolder(NULL);
+			firstChildHolder->setEditor(currentEditor);
+			currentEditor = NULL;
+		}
+				
+								
+	} else if(event->getDispatcher() == currentFileSelector) {
+		PolycodeEditor *editor = editorManager->openEditors[currentFileSelector->getSelectedIndex()];		
+		if(currentEditor != editor) {
+			setEditor(editor);
+		}
+	
+	} else if(event->getDispatcher() == mergeSplitButton) {
+		if(parentHolder) {
+			parentHolder->mergeSides(this);
+		}
+	}
+	
+	Resize(getWidth(), getHeight());
+	UIElement::handleEvent(event);
+}
+
+void EditorHolder::Update() {
+	if(editorToMerge) {
+		_mergeSides(editorToMerge);
+		editorToMerge = NULL;
+	}
+}
+
+void EditorHolder::mergeSides(EditorHolder *mainHolder) {
+	editorToMerge = mainHolder;
+}
+
+void EditorHolder::_mergeSides(EditorHolder *mainHolder) {
+	holderBar->visible = true;
+	holderBar->enabled = true;
+
+	PolycodeEditor *mainHolderEditor = mainHolder->getEditor();
+		
+	if(firstChildHolder) {
+		PolycodeEditor *holderEditor = firstChildHolder->getEditor();
+		if(holderEditor) {
+			holderEditor->setEditorHolder(NULL);
+		}
+	}
+
+	if(secondChildHolder) {
+		PolycodeEditor *holderEditor = secondChildHolder->getEditor();
+		if(holderEditor) {		
+			holderEditor->setEditorHolder(NULL);
+		}
+	}
+	
+	if(vSizer) {
+		removeChild(vSizer);
+		delete vSizer;
+	}
+	if(hSizer) {
+		removeChild(hSizer);
+		delete hSizer;
+	}	
+	delete firstChildHolder;
+	delete secondChildHolder;
+	
+	firstChildHolder = NULL;
+	secondChildHolder = NULL;
+	vSizer = NULL;
+	hSizer = NULL;
+	
+	setEditor(mainHolderEditor);
+}
 
 
+EditorHolder::~EditorHolder() {
+	if(vSizer) {
+		removeChild(vSizer);
+		delete vSizer;
+	}
+	if(hSizer) {
+		removeChild(hSizer);
+		delete hSizer;
+	}	
+	
+	if(firstChildHolder) {
+		delete firstChildHolder;
+	}
+	if(secondChildHolder) {
+		delete secondChildHolder;
+	}
 }
 }
 		
 		
 void EditorHolder::Resize(Number width, Number height) {
 void EditorHolder::Resize(Number width, Number height) {
+
+	if(headerBg->visible) {
+		headerBg->Resize(width, 30);	
+		hSplitButton->setPosition(width - 30, 7);
+		vSplitButton->setPosition(width - 55, 7);
+		if(parentHolder) {
+			mergeSplitButton->visible = true;
+			mergeSplitButton->enabled = true;
+			mergeSplitButton->setPosition(width - 80, 7);
+			currentFileSelector->Resize(width - 125, currentFileSelector->getHeight());
+		} else {
+			mergeSplitButton->visible = false;
+			mergeSplitButton->enabled = false;			
+			currentFileSelector->Resize(width - 100, currentFileSelector->getHeight());			
+		}
+	}
+		
+	
 	if(currentEditor) {
 	if(currentEditor) {
-		currentEditor->Resize(width, height);
+		currentEditor->setPosition(0, 30);
+		currentEditor->Resize(width, height-30);
 	}
 	}
+	
+	if(vSizer) {
+		vSizer->Resize(width, height);
+	}
+	if(hSizer) {
+		hSizer->Resize(width, height);
+	}
+	
+	UIElement::Resize(width, height);
 }
 }
 
 
 
 
-PolycodeFrame::PolycodeFrame() : UIElement() {
+PolycodeFrame::PolycodeFrame(PolycodeEditorManager *editorManager) : UIElement() {
+
+	this->editorManager = editorManager;
 
 
 	globalFrame = this;
 	globalFrame = this;
 	processInputEvents = true;
 	processInputEvents = true;
@@ -540,7 +805,7 @@ PolycodeFrame::PolycodeFrame() : UIElement() {
 	projectBrowser = new PolycodeProjectBrowser();
 	projectBrowser = new PolycodeProjectBrowser();
 	mainSizer->addLeftChild(projectBrowser);
 	mainSizer->addLeftChild(projectBrowser);
 
 
-	editorHolder = new EditorHolder();
+	editorHolder = new EditorHolder(editorManager, NULL);
 	consoleSizer->addTopChild(editorHolder);
 	consoleSizer->addTopChild(editorHolder);
 	
 	
 	console = new PolycodeConsole();	
 	console = new PolycodeConsole();	
@@ -572,13 +837,6 @@ PolycodeFrame::PolycodeFrame() : UIElement() {
 	addChild(currentProjectTitle);
 	addChild(currentProjectTitle);
 	currentProjectTitle->setColor(1.0, 1.0, 1.0, 1.0);
 	currentProjectTitle->setColor(1.0, 1.0, 1.0, 1.0);
 	currentProjectTitle->setPosition(70, 0);
 	currentProjectTitle->setPosition(70, 0);
-
-	currentFileSelector = new UIComboBox(globalMenu, 350);
-	currentFileSelector->addEventListener(this, UIEvent::CHANGE_EVENT);
-	addChild(currentFileSelector);
-
-	closeFileButton = new UIImageButton("Images/remove_icon.png");
-	addChild(closeFileButton);
 	
 	
 	resizer = new UIImage("Images/corner_resize.png");	
 	resizer = new UIImage("Images/corner_resize.png");	
 	addChild(resizer);
 	addChild(resizer);
@@ -727,8 +985,8 @@ void PolycodeFrame::removeEditor(PolycodeEditor *editor) {
 		if(editors[i] == editor) {
 		if(editors[i] == editor) {
 			editors.erase(editors.begin()+i);
 			editors.erase(editors.begin()+i);
 			editorHolder->removeChild(editor);
 			editorHolder->removeChild(editor);
-			if(editor == editorHolder->currentEditor) {
-				editorHolder->currentEditor = NULL;
+			if(editor == editorHolder->getEditor()) {
+				editorHolder->setEditor(NULL);
 			}
 			}
 			return;
 			return;
 		}
 		}
@@ -737,20 +995,15 @@ void PolycodeFrame::removeEditor(PolycodeEditor *editor) {
 
 
 void PolycodeFrame::addEditor(PolycodeEditor *editor) {
 void PolycodeFrame::addEditor(PolycodeEditor *editor) {
 	editors.push_back(editor);
 	editors.push_back(editor);
-	editorHolder->addChild(editor);
-	editor->enabled = false;
 }
 }
 
 
 void PolycodeFrame::showEditor(PolycodeEditor *editor) {
 void PolycodeFrame::showEditor(PolycodeEditor *editor) {
-	if(editorHolder->currentEditor) {
-		editorHolder->currentEditor->enabled = false;
-		editorHolder->currentEditor = NULL;
+	if(editorHolder->getEditor()) {
+		editorHolder->setEditor(NULL);
 	}
 	}
 	
 	
-	editorHolder->currentEditor = editor;
-	editorHolder->currentEditor->enabled = true;
-	editorHolder->currentEditor->Activate();	
-	
+	editorHolder->setEditor(editor);
+	editor->Activate();		
 	Resize(frameSizeX, frameSizeY);
 	Resize(frameSizeX, frameSizeY);
 }
 }
 
 
@@ -805,16 +1058,7 @@ void PolycodeFrame::showAssetBrowser(std::vector<String> extensions) {
 }
 }
 
 
 void PolycodeFrame::handleEvent(Event *event) {
 void PolycodeFrame::handleEvent(Event *event) {
-	
-	if(event->getDispatcher() == currentFileSelector && event->getEventType() == "UIEvent") {
-		PolycodeEditor *editor = editorManager->openEditors[currentFileSelector->getSelectedIndex()];
 		
 		
-		if(editorManager->getCurrentEditor() != editor) {
-			editorManager->setCurrentEditor(editor, false);
-			showEditor(editor);
-		}
-	}
-	
 	if(event->getDispatcher() == editorManager) {
 	if(event->getDispatcher() == editorManager) {
 		updateFileSelector();
 		updateFileSelector();
 	}
 	}
@@ -845,12 +1089,14 @@ void PolycodeFrame::handleEvent(Event *event) {
 		switch(event->getEventCode()) {
 		switch(event->getEventCode()) {
 			case InputEvent::EVENT_MOUSEUP:
 			case InputEvent::EVENT_MOUSEUP:
 				if(isDragging) {
 				if(isDragging) {
+				/*
 					if(editorHolder->currentEditor) {
 					if(editorHolder->currentEditor) {
 						InputEvent *inputEvent = (InputEvent*) event;						
 						InputEvent *inputEvent = (InputEvent*) event;						
 						Number posX = inputEvent->mousePosition.x;
 						Number posX = inputEvent->mousePosition.x;
 						Number posY = inputEvent->mousePosition.y;			
 						Number posY = inputEvent->mousePosition.y;			
 						editorHolder->currentEditor->handleDroppedFile(draggedFile, posX, posY);
 						editorHolder->currentEditor->handleDroppedFile(draggedFile, posX, posY);
 					}
 					}
+				*/
 				}
 				}
 				isDragging = false;
 				isDragging = false;
 				dragEntity->visible = false;
 				dragEntity->visible = false;
@@ -939,10 +1185,7 @@ void PolycodeFrame::Resize(int x, int y) {
 	
 	
 	modalBlocker->Resize(x, y);
 	modalBlocker->Resize(x, y);
 	fileDialogBlocker->Resize(x, y);
 	fileDialogBlocker->Resize(x, y);
-		
-	currentFileSelector->setPosition(x-400, 11);
-	closeFileButton->setPosition(currentFileSelector->getPosition().x-20, currentFileSelector->getPosition().y+6);
-	
+			
 	if(this->modalChild) {
 	if(this->modalChild) {
 		modalChild->setPosition((x-modalChild->getWidth())/2.0f, (y-modalChild->getHeight())/2.0f);
 		modalChild->setPosition((x-modalChild->getWidth())/2.0f, (y-modalChild->getHeight())/2.0f);
 	}
 	}
@@ -953,46 +1196,22 @@ PolycodeFrame::~PolycodeFrame() {
 }
 }
 
 
 void PolycodeFrame::showNextEditor() {
 void PolycodeFrame::showNextEditor() {
+/*
 	if (currentFileSelector->getSelectedIndex() == currentFileSelector->getNumItems()-1)
 	if (currentFileSelector->getSelectedIndex() == currentFileSelector->getNumItems()-1)
 		currentFileSelector->setSelectedIndex(0);
 		currentFileSelector->setSelectedIndex(0);
 	else
 	else
 		currentFileSelector->setSelectedIndex(currentFileSelector->getSelectedIndex()+1);
 		currentFileSelector->setSelectedIndex(currentFileSelector->getSelectedIndex()+1);
+		*/
 }
 }
 void PolycodeFrame::showPreviousEditor() {
 void PolycodeFrame::showPreviousEditor() {
+/*
 	if (currentFileSelector->getSelectedIndex() == 0)
 	if (currentFileSelector->getSelectedIndex() == 0)
 		currentFileSelector->setSelectedIndex(currentFileSelector->getNumItems()-1);
 		currentFileSelector->setSelectedIndex(currentFileSelector->getNumItems()-1);
 	else
 	else
 		currentFileSelector->setSelectedIndex(currentFileSelector->getSelectedIndex()-1);
 		currentFileSelector->setSelectedIndex(currentFileSelector->getSelectedIndex()-1);
+		*/
 }
 }
 
 
 void PolycodeFrame::updateFileSelector() {
 void PolycodeFrame::updateFileSelector() {
-	currentFileSelector->clearItems();
-	
-	for(int i=0; i < editorManager->openEditors.size(); i++) {
-		OSFileEntry entry(editorManager->openEditors[i]->getFilePath(), OSFileEntry::TYPE_FILE);
-		
-		String projName = editorManager->openEditors[i]->parentProject->getProjectName();
-		String rootFolder = editorManager->openEditors[i]->parentProject->getRootFolder();
-		String filePath = editorManager->openEditors[i]->getFilePath();
-		
-		String fullEntry = filePath;
-		if(filePath.find(rootFolder) != -1) {
-			fullEntry = projName + filePath.substr(rootFolder.size(), filePath.size()-1);
-		}
-		if(editorManager->openEditors[i]->hasChanges()) {
-			if (displayFilePathInSelector)
-				currentFileSelector->addComboItem("* "+fullEntry);
-			else
-				currentFileSelector->addComboItem("* "+entry.name);
-		} else {
-			if (displayFilePathInSelector)
-				currentFileSelector->addComboItem(fullEntry);
-			else
-				currentFileSelector->addComboItem(entry.name);
-		}
-		
-		if(editorManager->getCurrentEditor() == editorManager->openEditors[i]) {
-			currentFileSelector->setSelectedIndex(i);
-		}
-	}
+	editorHolder->updateFileSelector();
 }
 }

+ 3 - 4
IDE/Contents/Source/PolycodeIDEApp.cpp

@@ -90,10 +90,9 @@ PolycodeIDEApp::PolycodeIDEApp(PolycodeView *view) : EventDispatcher() {
 	
 	
 	editorManager = new PolycodeEditorManager();
 	editorManager = new PolycodeEditorManager();
 	
 	
-	frame = new PolycodeFrame();
+	frame = new PolycodeFrame(editorManager);
 	frame->setAnchorPoint(-1.0, -1.0, 0.0);
 	frame->setAnchorPoint(-1.0, -1.0, 0.0);
 
 
-	frame->editorManager = editorManager;
 	editorManager->addEventListener(frame, Event::CHANGE_EVENT);
 	editorManager->addEventListener(frame, Event::CHANGE_EVENT);
 
 
 	frame->console->backtraceWindow->addEventListener(this, BackTraceEvent::EVENT_BACKTRACE_SELECTED);
 	frame->console->backtraceWindow->addEventListener(this, BackTraceEvent::EVENT_BACKTRACE_SELECTED);
@@ -204,8 +203,6 @@ PolycodeIDEApp::PolycodeIDEApp(PolycodeView *view) : EventDispatcher() {
 	needsRedraw = false;
 	needsRedraw = false;
 	lastConnected = false;
 	lastConnected = false;
 	
 	
-	frame->closeFileButton->addEventListener(this, UIEvent::CLICK_EVENT);
-	
 	quittingApp = false;
 	quittingApp = false;
 	
 	
 	CoreServices::getInstance()->getCore()->getInput()->addEventListener(this, InputEvent::EVENT_KEYDOWN);
 	CoreServices::getInstance()->getCore()->getInput()->addEventListener(this, InputEvent::EVENT_KEYDOWN);
@@ -963,6 +960,7 @@ void PolycodeIDEApp::handleEvent(Event *event) {
 	}
 	}
 	
 	
 	// close files and editors after the close file button is pressed
 	// close files and editors after the close file button is pressed
+	/*
 	if (event->getDispatcher() == frame->closeFileButton) {
 	if (event->getDispatcher() == frame->closeFileButton) {
 		if (event->getEventCode() == UIEvent::CLICK_EVENT) {
 		if (event->getEventCode() == UIEvent::CLICK_EVENT) {
 			if (core->getInput()->getKeyState(KEY_RSHIFT) || core->getInput()->getKeyState(KEY_LSHIFT))
 			if (core->getInput()->getKeyState(KEY_RSHIFT) || core->getInput()->getKeyState(KEY_LSHIFT))
@@ -971,6 +969,7 @@ void PolycodeIDEApp::handleEvent(Event *event) {
 				closeFile();
 				closeFile();
 		}
 		}
 	}
 	}
+	*/
 	
 	
 	// open an editor/file if project browser has focus and user hits enter or right-arrow key
 	// open an editor/file if project browser has focus and user hits enter or right-arrow key
 	if (event->getDispatcher() == CoreServices::getInstance()->getCore()->getInput()) {
 	if (event->getDispatcher() == CoreServices::getInstance()->getCore()->getInput()) {