Procházet zdrojové kódy

Added active project selector

Ivan Safrin před 12 roky
rodič
revize
72aa1b9942

+ 1 - 1
IDE/Contents/Include/PolycodeFrame.h

@@ -283,7 +283,7 @@ private:
 	UILabel *dragLabel;
 	bool isDragging;
 	
-	UILabel *currentProjectTitle;
+	UIComboBox *currentProjectSelector;
 	
 	UIImage *welcomeImage;	
 

+ 17 - 9
IDE/Contents/Source/PolycodeFrame.cpp

@@ -879,10 +879,10 @@ PolycodeFrame::PolycodeFrame(PolycodeEditorManager *editorManager) : UIElement()
 	addChild(stopButton);
 	stopButton->setPosition(10,4);
 
-	currentProjectTitle = new UILabel("", 32, "section");
-	addChild(currentProjectTitle);
-	currentProjectTitle->setColor(1.0, 1.0, 1.0, 1.0);
-	currentProjectTitle->setPosition(70, 0);
+	currentProjectSelector = new UIComboBox(globalMenu, 300);
+	currentProjectSelector->addEventListener(this, UIEvent::CHANGE_EVENT);
+	addChild(currentProjectSelector);
+	currentProjectSelector->setPosition(60, 10);
 	
 	resizer = new UIImage("Images/corner_resize.png");	
 	addChild(resizer);
@@ -1104,6 +1104,11 @@ void PolycodeFrame::showAssetBrowser(std::vector<String> extensions) {
 }
 
 void PolycodeFrame::handleEvent(Event *event) {
+
+	if(event->getDispatcher() == currentProjectSelector) {
+		PolycodeProject *project = (PolycodeProject*)currentProjectSelector->getSelectedItem()->data;
+		projectManager->setActiveProject(project);
+	}
 		
 	if(event->getDispatcher() == editorManager) {
 		updateFileSelector();
@@ -1114,11 +1119,14 @@ void PolycodeFrame::handleEvent(Event *event) {
 	}
 	
 	if(event->getDispatcher() == projectManager) {
-        if(projectManager->getActiveProject()) {
-            currentProjectTitle->setText(projectManager->getActiveProject()->getProjectName());
-        } else {
-        	if (projectManager->getProjectCount() == 0) { currentProjectTitle->setText(""); }
-        }
+		currentProjectSelector->clearItems();
+		for(int i=0; i < projectManager->getProjectCount(); i++) {
+			PolycodeProject *project = projectManager->getProjectByIndex(i);
+			currentProjectSelector->addComboItem(project->getProjectName(), (void*) project);
+			if(projectManager->getActiveProject() == project) {
+				currentProjectSelector->setSelectedIndex(i, true);
+			}
+		}
 	}
 	
 	if(event->getDispatcher() == aboutOKButton && event->getEventType() == "UIEvent") {

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

@@ -349,6 +349,9 @@ void PolycodeIDEApp::doCloseProject() {
 	doCloseFiles(tempEditorStore);
 	frame->getProjectBrowser()->removeProject(projectManager->getActiveProject());
 	projectManager->removeProject(projectManager->getActiveProject());
+	if(projectManager->getProjectCount() > 0) {
+		projectManager->setActiveProject(projectManager->getProjectByIndex(0));
+	}
 }
 
 void PolycodeIDEApp::newGroup() {
@@ -736,8 +739,6 @@ void PolycodeIDEApp::handleEvent(Event *event) {
 				}			
 			}
 			
-			projectManager->setActiveProject(selectedData->parentProject);
-			
 			if(selectedData->type == 0)
 				return;			
 			

+ 1 - 0
IDE/Contents/Source/PolycodeProjectManager.cpp

@@ -73,6 +73,7 @@ PolycodeProject* PolycodeProjectManager::openProject(String path) {
 	}
 	
 	projectBrowser->addProject(newProject);
+	dispatchEvent(new Event(), Event::CHANGE_EVENT);	
 	return newProject;
 }
 

+ 1 - 1
Modules/Contents/UI/Include/PolyUIComboBox.h

@@ -57,7 +57,7 @@ namespace Polycode {
 						
 			int getSelectedIndex();
 			UIComboBoxItem *getSelectedItem();
-			void setSelectedIndex(unsigned int newIndex);
+			void setSelectedIndex(unsigned int newIndex, bool suppressChangeEvent = false);
 			void handleEvent(Event *event);
 			
 			void Resize(Number width, Number height);

+ 5 - 3
Modules/Contents/UI/Source/PolyUIComboBox.cpp

@@ -159,11 +159,13 @@ int UIComboBox::getSelectedIndex() {
 	return selectedIndex;
 }
 
-void UIComboBox::setSelectedIndex(unsigned int newIndex) {
+void UIComboBox::setSelectedIndex(unsigned int newIndex, bool suppressChangeEvent) {
 	if(newIndex < items.size()) {
 		selectedIndex = newIndex;				
-		selectedLabel->setText(items[selectedIndex]->label);		
-		dispatchEvent(new UIEvent(), UIEvent::CHANGE_EVENT);
+		selectedLabel->setText(items[selectedIndex]->label);
+		if(!suppressChangeEvent) {
+			dispatchEvent(new UIEvent(), UIEvent::CHANGE_EVENT);
+		}
 	}
 }