Ivan Safrin пре 14 година
родитељ
комит
d26cf8d996

+ 110 - 13
IDE/Build/Mac OS X/English.lproj/MainMenu.xib

@@ -210,6 +210,15 @@
 									<reference key="NSOnImage" ref="35465992"/>
 									<reference key="NSMixedImage" ref="502551668"/>
 								</object>
+								<object class="NSMenuItem" id="241372282">
+									<reference key="NSMenu" ref="720053764"/>
+									<string key="NSTitle">New Folder</string>
+									<string key="NSKeyEquiv">F</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="35465992"/>
+									<reference key="NSMixedImage" ref="502551668"/>
+								</object>
 								<object class="NSMenuItem" id="425164168">
 									<reference key="NSMenu" ref="720053764"/>
 									<bool key="NSIsDisabled">YES</bool>
@@ -268,6 +277,15 @@
 									<reference key="NSOnImage" ref="35465992"/>
 									<reference key="NSMixedImage" ref="502551668"/>
 								</object>
+								<object class="NSMenuItem" id="174789659">
+									<reference key="NSMenu" ref="720053764"/>
+									<string key="NSTitle">Remove File</string>
+									<string type="base64-UTF8" key="NSKeyEquiv">CA</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="35465992"/>
+									<reference key="NSMixedImage" ref="502551668"/>
+								</object>
 								<object class="NSMenuItem" id="268409637">
 									<reference key="NSMenu" ref="720053764"/>
 									<bool key="NSIsDisabled">YES</bool>
@@ -679,6 +697,14 @@
 						<reference key="NSOnImage" ref="35465992"/>
 						<reference key="NSMixedImage" ref="502551668"/>
 					</object>
+					<object class="NSMenuItem" id="7599453">
+						<reference key="NSMenu" ref="1048220208"/>
+						<string key="NSTitle">Add New Folder</string>
+						<string key="NSKeyEquiv"/>
+						<int key="NSMnemonicLoc">2147483647</int>
+						<reference key="NSOnImage" ref="35465992"/>
+						<reference key="NSMixedImage" ref="502551668"/>
+					</object>
 					<object class="NSMenuItem" id="26940596">
 						<reference key="NSMenu" ref="1048220208"/>
 						<bool key="NSIsDisabled">YES</bool>
@@ -943,14 +969,6 @@
 					</object>
 					<int key="connectionID">564</int>
 				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">newProject:</string>
-						<reference key="source" ref="976324537"/>
-						<reference key="destination" ref="548023385"/>
-					</object>
-					<int key="connectionID">565</int>
-				</object>
 				<object class="IBConnectionRecord">
 					<object class="IBActionConnection" key="connection">
 						<string key="label">closeProject:</string>
@@ -983,6 +1001,54 @@
 					</object>
 					<int key="connectionID">572</int>
 				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">newGroup:</string>
+						<reference key="source" ref="976324537"/>
+						<reference key="destination" ref="241372282"/>
+					</object>
+					<int key="connectionID">574</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">removeFile:</string>
+						<reference key="source" ref="976324537"/>
+						<reference key="destination" ref="174789659"/>
+					</object>
+					<int key="connectionID">576</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">removeFile:</string>
+						<reference key="source" ref="976324537"/>
+						<reference key="destination" ref="901265223"/>
+					</object>
+					<int key="connectionID">577</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">newProject:</string>
+						<reference key="source" ref="976324537"/>
+						<reference key="destination" ref="548023385"/>
+					</object>
+					<int key="connectionID">578</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">newFile:</string>
+						<reference key="source" ref="976324537"/>
+						<reference key="destination" ref="921894302"/>
+					</object>
+					<int key="connectionID">579</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">newGroup:</string>
+						<reference key="source" ref="976324537"/>
+						<reference key="destination" ref="7599453"/>
+					</object>
+					<int key="connectionID">581</int>
+				</object>
 			</object>
 			<object class="IBMutableOrderedSet" key="objectRecords">
 				<object class="NSArray" key="orderedObjects">
@@ -1081,6 +1147,8 @@
 							<reference ref="164447311"/>
 							<reference ref="810242391"/>
 							<reference ref="1071799412"/>
+							<reference ref="241372282"/>
+							<reference ref="174789659"/>
 						</object>
 						<reference key="parent" ref="379814623"/>
 					</object>
@@ -1470,6 +1538,7 @@
 							<reference ref="548023385"/>
 							<reference ref="901265223"/>
 							<reference ref="26940596"/>
+							<reference ref="7599453"/>
 						</object>
 						<reference key="parent" ref="0"/>
 					</object>
@@ -1503,6 +1572,21 @@
 						<reference key="object" ref="1071799412"/>
 						<reference key="parent" ref="720053764"/>
 					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">573</int>
+						<reference key="object" ref="241372282"/>
+						<reference key="parent" ref="720053764"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">575</int>
+						<reference key="object" ref="174789659"/>
+						<reference key="parent" ref="720053764"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">580</int>
+						<reference key="object" ref="7599453"/>
+						<reference key="parent" ref="1048220208"/>
+					</object>
 				</object>
 			</object>
 			<object class="NSMutableDictionary" key="flattenedProperties">
@@ -1579,7 +1663,10 @@
 					<string>57.IBPluginDependency</string>
 					<string>570.IBPluginDependency</string>
 					<string>571.IBPluginDependency</string>
+					<string>573.IBPluginDependency</string>
+					<string>575.IBPluginDependency</string>
 					<string>58.IBPluginDependency</string>
+					<string>580.IBPluginDependency</string>
 					<string>72.IBPluginDependency</string>
 					<string>73.IBPluginDependency</string>
 					<string>75.IBPluginDependency</string>
@@ -1670,6 +1757,9 @@
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 				</object>
 			</object>
 			<object class="NSMutableDictionary" key="unlocalizedProperties">
@@ -1684,7 +1774,7 @@
 				<reference key="dict.values" ref="0"/>
 			</object>
 			<nil key="sourceID"/>
-			<int key="maxID">572</int>
+			<int key="maxID">581</int>
 		</object>
 		<object class="IBClassDescriber" key="IBDocument.Classes">
 			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -1766,9 +1856,10 @@
 							<string>browseExamples:</string>
 							<string>closeProject:</string>
 							<string>newFile:</string>
+							<string>newGroup:</string>
 							<string>newProject:</string>
-							<string>open:</string>
 							<string>openProject:</string>
+							<string>removeFile:</string>
 							<string>runProject:</string>
 							<string>saveFile:</string>
 						</object>
@@ -1782,6 +1873,7 @@
 							<string>id</string>
 							<string>id</string>
 							<string>id</string>
+							<string>id</string>
 						</object>
 					</object>
 					<object class="NSMutableDictionary" key="actionInfosByName">
@@ -1791,9 +1883,10 @@
 							<string>browseExamples:</string>
 							<string>closeProject:</string>
 							<string>newFile:</string>
+							<string>newGroup:</string>
 							<string>newProject:</string>
-							<string>open:</string>
 							<string>openProject:</string>
+							<string>removeFile:</string>
 							<string>runProject:</string>
 							<string>saveFile:</string>
 						</object>
@@ -1812,17 +1905,21 @@
 								<string key="candidateClassName">id</string>
 							</object>
 							<object class="IBActionInfo">
-								<string key="name">newProject:</string>
+								<string key="name">newGroup:</string>
 								<string key="candidateClassName">id</string>
 							</object>
 							<object class="IBActionInfo">
-								<string key="name">open:</string>
+								<string key="name">newProject:</string>
 								<string key="candidateClassName">id</string>
 							</object>
 							<object class="IBActionInfo">
 								<string key="name">openProject:</string>
 								<string key="candidateClassName">id</string>
 							</object>
+							<object class="IBActionInfo">
+								<string key="name">removeFile:</string>
+								<string key="candidateClassName">id</string>
+							</object>
 							<object class="IBActionInfo">
 								<string key="name">runProject:</string>
 								<string key="candidateClassName">id</string>

+ 2 - 0
IDE/Build/Mac OS X/PolycodeAppDelegate.h

@@ -52,6 +52,8 @@ public:
 
 // Menu accessors
 
+-(IBAction) removeFile: (id) sender;
+-(IBAction) newGroup: (id) sender;
 -(IBAction) browseExamples: (id) sender;
 -(IBAction) runProject: (id) sender;
 -(IBAction) newProject: (id) sender;

+ 8 - 0
IDE/Build/Mac OS X/PolycodeAppDelegate.m

@@ -71,6 +71,14 @@
 	return YES;
 }
 
+-(IBAction) removeFile: (id) sender {
+	app->removeFile();
+}
+
+-(IBAction) newGroup: (id) sender {
+	app->newGroup();
+}
+
 -(IBAction) browseExamples: (id) sender {
 	app->browseExamples();
 }

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

@@ -50,9 +50,11 @@ public:
 	void loadConfigFile();
 	
 	// menu commands
+	void removeFile();
 	void browseExamples();
 	void newProject();
 	void newFile();	
+	void newGroup();
 	void openProject();
 	void closeProject();	
 	void saveFile();

+ 5 - 0
IDE/Contents/Include/PolycodeProjectBrowser.h

@@ -57,6 +57,11 @@ public:
 	void addProject(PolycodeProject *project);
 	void removeProject(PolycodeProject *project);
 	
+	UITree *nodeHasName(UITree *node, String name);
+	bool listHasFileEntry(vector<OSFileEntry> files, OSFileEntry fileEntry);
+	
+	void refreshProject(PolycodeProject *project);
+	
 	void handleEvent(Event *event);
 	
 	void parseFolderIntoNode(UITree *node, String spath, PolycodeProject *parentProject);

+ 8 - 1
IDE/Contents/Include/PolycodeProjectManager.h

@@ -39,15 +39,22 @@ class PolycodeProjectManager {
 	void setProjectBrowser(PolycodeProjectBrowser *projectBrowser) { this->projectBrowser = projectBrowser; }
 	
 	PolycodeProject* getActiveProject() { return activeProject; }
-	void setActiveProject(PolycodeProject* project) { if(project) printf("setting active project: %s\n", project->getProjectName().c_str()); activeProject = project; }
+	void setActiveProject(PolycodeProject* project) {
+//		if(project) printf("setting active project: %s\n", project->getProjectName().c_str());
+		activeProject = project;
+	}
 	
 	int getProjectCount() { return projects.size(); }
 	PolycodeProject *getProjectByIndex(int index) { return projects[index]; }
 	
 	int removeProject(PolycodeProject *project);
 	
+	String activeFolder;
+	String selectedFile;
+	
 protected:
 	
+	
 	PolycodeProject* activeProject;
 	
 	PolycodeProjectBrowser *projectBrowser;

+ 34 - 0
IDE/Contents/Source/PolycodeIDEApp.cpp

@@ -79,6 +79,15 @@ PolycodeIDEApp::PolycodeIDEApp(PolycodeView *view) : EventDispatcher() {
 	loadConfigFile();
 }
 
+void PolycodeIDEApp::removeFile() {
+	if(projectManager->selectedFile != "") {
+		core->removeDiskItem(projectManager->selectedFile);
+		if(projectManager->getActiveProject()) {
+			frame->projectBrowser->refreshProject(projectManager->getActiveProject());
+		}
+	}
+}
+
 void PolycodeIDEApp::newProject() {
 	frame->newProjectWindow->ResetForm();
 	frame->showModal(frame->newProjectWindow);
@@ -99,6 +108,15 @@ void PolycodeIDEApp::closeProject() {
 	}
 }
 
+void PolycodeIDEApp::newGroup() {
+	if(projectManager->activeFolder != "") {
+		core->createFolder(projectManager->activeFolder+"/New Folder");
+		if(projectManager->getActiveProject()) {
+			frame->getProjectBrowser()->refreshProject(projectManager->getActiveProject());
+		}
+	}
+}
+
 void PolycodeIDEApp::openProject() {
 	
 	vector<CoreFileExtension> extensions;
@@ -155,8 +173,24 @@ void PolycodeIDEApp::handleEvent(Event *event) {
 		
 		if(event->getEventCode() == Event::CHANGE_EVENT) {
 			BrowserUserData *selectedData = frame->getProjectBrowser()->getSelectedData();
+						
+			if(selectedData->type == 3) {
+				projectManager->activeFolder = selectedData->parentProject->getRootFolder();
+				projectManager->selectedFile = "";				
+			} else if(selectedData->type == 0) {
+				projectManager->activeFolder = "";
+				projectManager->selectedFile = "";
+			} else {
+				projectManager->selectedFile = selectedData->fileEntry.fullPath;			
+				if(selectedData->fileEntry.type == OSFileEntry::TYPE_FILE) {
+					projectManager->activeFolder = selectedData->fileEntry.basePath;
+				} else {
+					projectManager->activeFolder = selectedData->fileEntry.fullPath;
+				}			
+			}
 			
 			projectManager->setActiveProject(selectedData->parentProject);
+			
 			if(selectedData->type == 0)
 				return;			
 			

+ 64 - 13
IDE/Contents/Source/PolycodeProjectBrowser.cpp

@@ -43,6 +43,21 @@ PolycodeProjectBrowser::~PolycodeProjectBrowser() {
 	
 }
 
+void PolycodeProjectBrowser::refreshProject(PolycodeProject *project) {
+	
+	UITree *projectTree = treeContainer->getRootNode();
+	
+	for(int i=0; i < projectTree->getNumTreeChildren(); i++) {
+		UITree *projectChild = projectTree->getTreeChild(i);
+		BrowserUserData *userData = (BrowserUserData*)projectChild->getUserData();
+		if(userData->parentProject == project) {
+			parseFolderIntoNode(projectChild, project->getRootFolder(), project);		
+			return;
+		}
+	}	
+	
+}
+
 void PolycodeProjectBrowser::removeProject(PolycodeProject *project) {
 	
 	UITree *projectTree = treeContainer->getRootNode();
@@ -62,7 +77,7 @@ void PolycodeProjectBrowser::addProject(PolycodeProject *project) {
 	projectTree->toggleCollapsed();
 	
 	BrowserUserData *data = new BrowserUserData();
-	data->type = 0;
+	data->type = 3;
 	data->parentProject = project;
 	projectTree->setUserData((void*) data)	;
 	
@@ -92,26 +107,62 @@ void PolycodeProjectBrowser::handleEvent(Event *event) {
 	ScreenEntity::handleEvent(event);
 }
 
+UITree *PolycodeProjectBrowser::nodeHasName(UITree *node, String name) {
+	for(int i=0; i < node->getNumTreeChildren(); i++) {
+		UITree *projectChild = node->getTreeChild(i);
+		if(projectChild->getLabelText() == name) {
+			return projectChild;
+		}
+	}
+	return NULL;
+}
+
+bool PolycodeProjectBrowser::listHasFileEntry(vector<OSFileEntry> files, OSFileEntry fileEntry) {
+	for(int i=0; i < files.size(); i++) {
+		if(files[i].fullPath == fileEntry.fullPath && files[i].type == fileEntry.type) {
+			return true;
+		}
+	}
+	return false;
+}
+
 void PolycodeProjectBrowser::parseFolderIntoNode(UITree *node, String spath, PolycodeProject *parentProject) {
 	printf("Parsing %s\n", spath.c_str());
 	vector<OSFileEntry> files = OSBasics::parseFolder(spath, false);
+	
+	// check if files got deleted
+	for(int i=0; i < node->getNumTreeChildren(); i++) {
+		UITree *projectChild = node->getTreeChild(i);
+		if(!listHasFileEntry(files, ((BrowserUserData*)projectChild->getUserData())->fileEntry)) {
+			node->removeTreeChild(projectChild);
+		}
+	}	
+	
 	for(int i=0; i < files.size(); i++) {
 		OSFileEntry entry = files[i];
 		if(entry.type == OSFileEntry::TYPE_FOLDER) {
-			BrowserUserData *data = new BrowserUserData();
-			data->fileEntry = entry;
-			UITree *newChild = node->addTreeChild("folder.png", entry.name, (void*) data);
-			data->type = 2;	
-			data->parentProject = parentProject;
-			parseFolderIntoNode(newChild, entry.fullPath, parentProject);
+			UITree *existing = nodeHasName(node, entry.name);
+			if(!existing) {		
+				BrowserUserData *data = new BrowserUserData();
+				data->fileEntry = entry;
+				UITree *newChild = node->addTreeChild("folder.png", entry.name, (void*) data);
+				data->type = 2;	
+				data->parentProject = parentProject;
+				parseFolderIntoNode(newChild, entry.fullPath, parentProject);				
+			} else {
+				parseFolderIntoNode(existing, entry.fullPath, parentProject);							
+			}
 		} else {
-			BrowserUserData *data = new BrowserUserData();
-			data->fileEntry = entry;
-			data->type = 1;
-			data->parentProject = parentProject;			
-			UITree *newChild = node->addTreeChild("file.png", entry.name, (void*) data);			
+			if(!nodeHasName(node, entry.name)) {
+				BrowserUserData *data = new BrowserUserData();
+				data->fileEntry = entry;
+				data->type = 1;
+				data->parentProject = parentProject;			
+				UITree *newChild = node->addTreeChild("file.png", entry.name, (void*) data);
+			}
 		}
-	}	
+	}		
+	
 }
 
 void PolycodeProjectBrowser::Resize(int newWidth, int newHeight) {

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

@@ -24,6 +24,8 @@
 
 PolycodeProjectManager::PolycodeProjectManager() {
 	activeProject = NULL;
+	activeFolder = "";
+	selectedFile = "";
 }
 
 PolycodeProjectManager::~PolycodeProjectManager() {

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

@@ -59,10 +59,13 @@ namespace Polycode {
 			UITree *getTreeChild(int index) { return treeChildren[index]; }
 			void removeTreeChild(UITree *child);
 		
+			String getLabelText();
+			
 			Number handleRotation;
 		
 		private:
 		
+			String labelText;
 			void *userData;
 			Number treeWidth;
 			Number treeOffset;

+ 6 - 2
Modules/Contents/UI/Source/PolyUITree.cpp

@@ -31,7 +31,7 @@ using namespace Polycode;
 
 UITree::UITree(String icon, String text, Number treeWidth, Number treeOffset) : ScreenEntity() {
 		
-	
+	labelText = text;
 	Config *conf = CoreServices::getInstance()->getConfig();
 	
 	handleRotation = 0;
@@ -109,6 +109,10 @@ UITree::UITree(String icon, String text, Number treeWidth, Number treeOffset) :
 	refreshTree();
 }
 
+String UITree::getLabelText() {
+	return labelText;
+}
+
 void UITree::removeTreeChild(UITree *child) {
 	for(int i=0; i < treeChildren.size(); i++) {
 		if(treeChildren[i] == child) {			
@@ -172,7 +176,6 @@ void UITree::handleEvent(Event *event) {
 			break;
 			case UITreeEvent::NEED_REFRESH_EVENT:
 				refreshTree();
-				dispatchEvent(new UITreeEvent(), UITreeEvent::NEED_REFRESH_EVENT);
 			break;
 		}
 		}
@@ -231,6 +234,7 @@ void UITree::refreshTree() {
 	hitheight = height;
 	
 	selection->visible = selected;
+	dispatchEvent(new UITreeEvent(), UITreeEvent::NEED_REFRESH_EVENT);	
 }
 
 Number UITree::getTreeHeight() {