Преглед изворни кода

Initial commit for switching between open editors via the keyboard. Moved file selector update code out of event handler and into updateFileSelector(). Added ability to toggle between project path and file name display in file selector.

Ethan M пре 12 година
родитељ
комит
2226a275ee
2 измењених фајлова са 61 додато и 17 уклоњено
  1. 2 0
      IDE/Contents/Include/PolycodeFrame.h
  2. 59 17
      IDE/Contents/Source/PolycodeFrame.cpp

+ 2 - 0
IDE/Contents/Include/PolycodeFrame.h

@@ -214,8 +214,10 @@ public:
 	
 	UIWindow *aboutWindow;
 	UIButton *aboutOKButton;
+	void updateFileSelector();
 	void showNextEditor();
 	void showPreviousEditor();
+	
 private:
 	
 	int frameSizeX;

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

@@ -635,6 +635,7 @@ PolycodeFrame::PolycodeFrame() : ScreenEntity() {
 		
 	CoreServices::getInstance()->getCore()->getInput()->addEventListener(this, InputEvent::EVENT_MOUSEUP);
 	CoreServices::getInstance()->getCore()->getInput()->addEventListener(this, InputEvent::EVENT_MOUSEMOVE);
+	CoreServices::getInstance()->getCore()->getInput()->addEventListener(this, InputEvent::EVENT_KEYDOWN);
 	
 	curveEditor = new CurveEditor();
 	addChild(curveEditor);
@@ -663,6 +664,8 @@ PolycodeFrame::PolycodeFrame() : ScreenEntity() {
 	addChild(fileBrowserRoot);
 
 	fileDialog = NULL;
+	
+	displayFilePathInSelector = false;
 }
 
 void PolycodeFrame::showFileBrowser(String baseDir, bool foldersOnly, std::vector<String> extensions, bool allowMultiple) {
@@ -793,22 +796,8 @@ void PolycodeFrame::handleEvent(Event *event) {
 		showEditor(editor);
 	}
 	
-	if(event->getDispatcher() == editorManager) {	
-		currentFileSelector->clearItems();
-		
-		for(int i=0; i < editorManager->openEditors.size(); i++) {
-			OSFileEntry entry(editorManager->openEditors[i]->getFilePath(), OSFileEntry::TYPE_FILE);
-			
-			if(editorManager->openEditors[i]->hasChanges()) {
-				currentFileSelector->addComboItem("* " +entry.name);			
-			} else {
-				currentFileSelector->addComboItem(entry.name);
-			}
-			
-			if(editorManager->getCurrentEditor() == editorManager->openEditors[i]) {
-				currentFileSelector->setSelectedIndex(i);
-			}			
-		}
+	if(event->getDispatcher() == editorManager) {
+		updateFileSelector();
 	}
 	
 	if(event->getDispatcher() == projectManager) {
@@ -847,7 +836,32 @@ void PolycodeFrame::handleEvent(Event *event) {
 				if(isDragging) {
 					dragEntity->setPosition(((InputEvent*)event)->mousePosition);
 				}
-			break;	
+			break;
+			// TODO: add in key combos to switch editors in reverse order
+			case InputEvent::EVENT_KEYDOWN:
+				CoreInput *input = CoreServices::getInstance()->getCore()->getInput();
+				
+				if (input->getKeyState(KEY_LSUPER) || input->getKeyState(KEY_RSUPER)) {
+					InputEvent *inEv = (InputEvent*)event;
+					// commenting this out for now until issue with KEY_BACKQUOTE is figured out
+					/*if (inEv->getKey() == KEY_BACKQUOTE) {
+						showNextEditor();
+					}*/
+					if (inEv->getKey() == KEY_SLASH) {
+						displayFilePathInSelector = (displayFilePathInSelector ? false : true);
+						updateFileSelector();
+					}
+				} else if (input->getKeyState(KEY_LCTRL) || input->getKeyState(KEY_RCTRL)) {
+					InputEvent *inEv = (InputEvent*)event;
+					if (inEv->getKey() == KEY_TAB) {
+						showNextEditor();
+					} else if (inEv->getKey() == KEY_SLASH) {
+						displayFilePathInSelector = (displayFilePathInSelector ? false : true);
+						updateFileSelector();
+					}
+				}
+			break;
+				
 		}
 	}
 
@@ -930,3 +944,31 @@ void PolycodeFrame::showPreviousEditor() {
 		currentFileSelector->setSelectedIndex(currentFileSelector->getSelectedIndex()-1);
 }
 
+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 = 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);
+		}
+	}
+}