Просмотр исходного кода

Added ability to close open files in the IDE, UIComboBox now resets selected name to None on clearItems(), fixed sprite editor not setting height properly on load

Ivan Safrin 12 лет назад
Родитель
Сommit
b6aa9c7ffb

+ 17 - 6
IDE/Build/Mac OS X/English.lproj/MainMenu.xib

@@ -666,7 +666,7 @@
 				<nil key="NSUserInterfaceItemIdentifier"/>
 				<nil key="NSUserInterfaceItemIdentifier"/>
 				<string key="NSWindowContentMinSize">{400, 200}</string>
 				<string key="NSWindowContentMinSize">{400, 200}</string>
 				<object class="NSView" key="NSWindowView" id="439893737">
 				<object class="NSView" key="NSWindowView" id="439893737">
-					<reference key="NSNextResponder"/>
+					<nil key="NSNextResponder"/>
 					<int key="NSvFlags">256</int>
 					<int key="NSvFlags">256</int>
 					<object class="NSMutableArray" key="NSSubviews">
 					<object class="NSMutableArray" key="NSSubviews">
 						<bool key="EncodedWithXMLCoder">YES</bool>
 						<bool key="EncodedWithXMLCoder">YES</bool>
@@ -676,8 +676,6 @@
 							<object class="NSPSMatrix" key="NSDrawMatrix"/>
 							<object class="NSPSMatrix" key="NSDrawMatrix"/>
 							<string key="NSFrameSize">{800, 600}</string>
 							<string key="NSFrameSize">{800, 600}</string>
 							<reference key="NSSuperview" ref="439893737"/>
 							<reference key="NSSuperview" ref="439893737"/>
-							<reference key="NSWindow"/>
-							<reference key="NSNextKeyView"/>
 							<object class="NSOpenGLPixelFormat" key="NSPixelFormat">
 							<object class="NSOpenGLPixelFormat" key="NSPixelFormat">
 								<object class="NSMutableData" key="NSPixelAttributes">
 								<object class="NSMutableData" key="NSPixelAttributes">
 									<bytes key="NS.bytes">AAAAYAAAAAA</bytes>
 									<bytes key="NS.bytes">AAAAYAAAAAA</bytes>
@@ -686,8 +684,6 @@
 						</object>
 						</object>
 					</object>
 					</object>
 					<string key="NSFrameSize">{800, 600}</string>
 					<string key="NSFrameSize">{800, 600}</string>
-					<reference key="NSSuperview"/>
-					<reference key="NSWindow"/>
 					<reference key="NSNextKeyView" ref="633009941"/>
 					<reference key="NSNextKeyView" ref="633009941"/>
 				</object>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
 				<string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
@@ -1132,6 +1128,14 @@
 					</object>
 					</object>
 					<int key="connectionID">593</int>
 					<int key="connectionID">593</int>
 				</object>
 				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">closeFile:</string>
+						<reference key="source" ref="976324537"/>
+						<reference key="destination" ref="463542598"/>
+					</object>
+					<int key="connectionID">594</int>
+				</object>
 			</object>
 			</object>
 			<object class="IBMutableOrderedSet" key="objectRecords">
 			<object class="IBMutableOrderedSet" key="objectRecords">
 				<object class="NSArray" key="orderedObjects">
 				<object class="NSArray" key="orderedObjects">
@@ -1897,7 +1901,7 @@
 				<reference key="dict.values" ref="0"/>
 				<reference key="dict.values" ref="0"/>
 			</object>
 			</object>
 			<nil key="sourceID"/>
 			<nil key="sourceID"/>
-			<int key="maxID">593</int>
+			<int key="maxID">594</int>
 		</object>
 		</object>
 		<object class="IBClassDescriber" key="IBDocument.Classes">
 		<object class="IBClassDescriber" key="IBDocument.Classes">
 			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
 			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -1910,6 +1914,7 @@
 						<object class="NSArray" key="dict.sortedKeys">
 						<object class="NSArray" key="dict.sortedKeys">
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<string>browseExamples:</string>
 							<string>browseExamples:</string>
+							<string>closeFile:</string>
 							<string>closeProject:</string>
 							<string>closeProject:</string>
 							<string>exportProject:</string>
 							<string>exportProject:</string>
 							<string>findText:</string>
 							<string>findText:</string>
@@ -1942,6 +1947,7 @@
 							<string>id</string>
 							<string>id</string>
 							<string>id</string>
 							<string>id</string>
 							<string>id</string>
 							<string>id</string>
+							<string>id</string>
 						</object>
 						</object>
 					</object>
 					</object>
 					<object class="NSMutableDictionary" key="actionInfosByName">
 					<object class="NSMutableDictionary" key="actionInfosByName">
@@ -1949,6 +1955,7 @@
 						<object class="NSArray" key="dict.sortedKeys">
 						<object class="NSArray" key="dict.sortedKeys">
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<string>browseExamples:</string>
 							<string>browseExamples:</string>
+							<string>closeFile:</string>
 							<string>closeProject:</string>
 							<string>closeProject:</string>
 							<string>exportProject:</string>
 							<string>exportProject:</string>
 							<string>findText:</string>
 							<string>findText:</string>
@@ -1970,6 +1977,10 @@
 								<string key="name">browseExamples:</string>
 								<string key="name">browseExamples:</string>
 								<string key="candidateClassName">id</string>
 								<string key="candidateClassName">id</string>
 							</object>
 							</object>
+							<object class="IBActionInfo">
+								<string key="name">closeFile:</string>
+								<string key="candidateClassName">id</string>
+							</object>
 							<object class="IBActionInfo">
 							<object class="IBActionInfo">
 								<string key="name">closeProject:</string>
 								<string key="name">closeProject:</string>
 								<string key="candidateClassName">id</string>
 								<string key="candidateClassName">id</string>

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

@@ -62,6 +62,7 @@ public:
 -(IBAction) exportProject: (id) sender;
 -(IBAction) exportProject: (id) sender;
 -(IBAction) newProject: (id) sender;
 -(IBAction) newProject: (id) sender;
 -(IBAction) closeProject: (id) sender;
 -(IBAction) closeProject: (id) sender;
+-(IBAction) closeFile: (id) sender;
 -(IBAction) newFile: (id) sender;
 -(IBAction) newFile: (id) sender;
 -(IBAction) openProject: (id) sender;
 -(IBAction) openProject: (id) sender;
 -(IBAction) saveFile: (id) sender;
 -(IBAction) saveFile: (id) sender;

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

@@ -138,6 +138,10 @@
 	app->closeProject();
 	app->closeProject();
 }
 }
 
 
+-(IBAction) closeFile: (id) sender {
+	app->closeFile();
+}
+
 -(IBAction) saveFile: (id) sender {
 -(IBAction) saveFile: (id) sender {
 	app->saveFile();
 	app->saveFile();
 }
 }

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

@@ -37,6 +37,8 @@ class PolycodeEditorManager : public EventDispatcher {
 		void registerEditorFactory(PolycodeEditorFactory *editorFactory);
 		void registerEditorFactory(PolycodeEditorFactory *editorFactory);
 	
 	
 		void handleEvent(Event *event);
 		void handleEvent(Event *event);
+		
+		void destroyEditor(PolycodeEditor* editor);
 	
 	
 		void setCurrentEditor(PolycodeEditor *editor, bool sendChangeEvent = true);
 		void setCurrentEditor(PolycodeEditor *editor, bool sendChangeEvent = true);
 		PolycodeEditor *getCurrentEditor() { return currentEditor; }
 		PolycodeEditor *getCurrentEditor() { return currentEditor; }

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

@@ -168,6 +168,8 @@ public:
 	void handleEvent(Event *event);
 	void handleEvent(Event *event);
 	
 	
 	void addEditor(PolycodeEditor *editor);
 	void addEditor(PolycodeEditor *editor);
+	void removeEditor(PolycodeEditor *editor);
+		
 	void showEditor(PolycodeEditor *editor);
 	void showEditor(PolycodeEditor *editor);
 	
 	
 	void showAssetBrowser(std::vector<String> extensions);
 	void showAssetBrowser(std::vector<String> extensions);

+ 4 - 1
IDE/Contents/Include/PolycodeIDEApp.h

@@ -81,13 +81,16 @@ public:
 	
 	
 	void newGroup();	
 	void newGroup();	
 	void openProject();
 	void openProject();
-	void closeProject();	
+	void closeProject();
+	void closeFile();
 	void saveFile();
 	void saveFile();
 	void findText();
 	void findText();
 	void runProject();
 	void runProject();
 	void doRunProject();
 	void doRunProject();
 	void exportProject();	
 	void exportProject();	
 	
 	
+	void removeEditor(PolycodeEditor *editor);
+	
 	// system callbacks
 	// system callbacks
 	
 	
 	void openProject(String projectFile);
 	void openProject(String projectFile);

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

@@ -77,6 +77,8 @@ class PolycodeSpriteEditor : public PolycodeEditor {
 	NumberProp *widthProp;
 	NumberProp *widthProp;
 	NumberProp *heightProp;	
 	NumberProp *heightProp;	
 	
 	
+	bool initialLoad;
+	
 	ScreenSprite *previewSprite;
 	ScreenSprite *previewSprite;
 };
 };
 
 

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

@@ -44,6 +44,17 @@ PolycodeEditor *PolycodeEditorManager::createEditorForExtension(String extension
 	return NULL;
 	return NULL;
 }
 }
 
 
+void PolycodeEditorManager::destroyEditor(PolycodeEditor* editor) {
+	for(int i=0; i < openEditors.size();i++) {
+		if(openEditors[i] == editor) {
+			openEditors.erase(openEditors.begin()+i);
+			delete editor;
+			dispatchEvent(new Event(), Event::CHANGE_EVENT);			
+			return;
+		}
+	}
+}
+
 bool PolycodeEditorManager::hasUnsavedFiles() {
 bool PolycodeEditorManager::hasUnsavedFiles() {
 	for(int i=0; i < openEditors.size();i++) {
 	for(int i=0; i < openEditors.size();i++) {
 		PolycodeEditor *editor = openEditors[i];
 		PolycodeEditor *editor = openEditors[i];

+ 16 - 2
IDE/Contents/Source/PolycodeFrame.cpp

@@ -541,6 +541,8 @@ PolycodeFrame::PolycodeFrame() : ScreenEntity() {
 	topBarBg = new ScreenShape(ScreenShape::SHAPE_RECT, 2,2);
 	topBarBg = new ScreenShape(ScreenShape::SHAPE_RECT, 2,2);
 	topBarBg->setColorInt(21, 18, 17, 255);
 	topBarBg->setColorInt(21, 18, 17, 255);
 	topBarBg->setPositionMode(ScreenEntity::POSITION_TOPLEFT);
 	topBarBg->setPositionMode(ScreenEntity::POSITION_TOPLEFT);
+	topBarBg->processInputEvents = true;
+	topBarBg->blockMouseInput = true;
 	addChild(topBarBg);
 	addChild(topBarBg);
 	
 	
 	logo = new ScreenImage("Images/barlogo.png");	
 	logo = new ScreenImage("Images/barlogo.png");	
@@ -695,6 +697,19 @@ PolycodeProjectBrowser *PolycodeFrame::getProjectBrowser() {
 	return projectBrowser;
 	return projectBrowser;
 }
 }
 
 
+void PolycodeFrame::removeEditor(PolycodeEditor *editor) {
+	for(int i=0; i < editors.size(); i++) {
+		if(editors[i] == editor) {
+			editors.erase(editors.begin()+i);
+			editorHolder->removeChild(editor);
+			if(editor == editorHolder->currentEditor) {
+				editorHolder->currentEditor = NULL;
+			}
+			return;
+		}
+	}
+}
+
 void PolycodeFrame::addEditor(PolycodeEditor *editor) {
 void PolycodeFrame::addEditor(PolycodeEditor *editor) {
 	editors.push_back(editor);
 	editors.push_back(editor);
 	editorHolder->addChild(editor);
 	editorHolder->addChild(editor);
@@ -762,8 +777,7 @@ void PolycodeFrame::handleEvent(Event *event) {
 			
 			
 			if(editorManager->getCurrentEditor() == editorManager->openEditors[i]) {
 			if(editorManager->getCurrentEditor() == editorManager->openEditors[i]) {
 				currentFileSelector->setSelectedIndex(i);
 				currentFileSelector->setSelectedIndex(i);
-			}
-			
+			}			
 		}
 		}
 	}
 	}
 	
 	

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

@@ -223,6 +223,22 @@ void PolycodeIDEApp::refreshProject() {
 	}
 	}
 }
 }
 
 
+void PolycodeIDEApp::removeEditor(PolycodeEditor *editor) {
+	frame->removeEditor(editor);
+	editorManager->destroyEditor(editor);
+	if(editorManager->openEditors.size() > 0) {
+		editorManager->setCurrentEditor(editorManager->openEditors[0]);
+		frame->showEditor(editorManager->openEditors[0]);
+	}
+}
+
+void PolycodeIDEApp::closeFile() {
+	PolycodeEditor *editor = editorManager->getCurrentEditor();
+	if(editor) {
+		removeEditor(editor);
+	}
+}
+
 void PolycodeIDEApp::closeProject() {
 void PolycodeIDEApp::closeProject() {
 	if(projectManager->getActiveProject()) {
 	if(projectManager->getActiveProject()) {
 		frame->getProjectBrowser()->removeProject(projectManager->getActiveProject());
 		frame->getProjectBrowser()->removeProject(projectManager->getActiveProject());

+ 30 - 4
IDE/Contents/Source/PolycodeSpriteEditor.cpp

@@ -92,7 +92,11 @@ void SpriteAnimationEntry::handleEvent(Event *event) {
 }
 }
 
 
 SpriteAnimationEntry::~SpriteAnimationEntry() {
 SpriteAnimationEntry::~SpriteAnimationEntry() {
-
+	delete nameInput;
+	delete framesInput;
+	delete speedInput;
+	delete removeButton;
+	delete playButton;
 }
 }
 
 
 PolycodeSpriteEditor::PolycodeSpriteEditor() : PolycodeEditor(true){
 PolycodeSpriteEditor::PolycodeSpriteEditor() : PolycodeEditor(true){
@@ -101,6 +105,7 @@ PolycodeSpriteEditor::PolycodeSpriteEditor() : PolycodeEditor(true){
 	headerBg->setPositionMode(ScreenEntity::POSITION_TOPLEFT);
 	headerBg->setPositionMode(ScreenEntity::POSITION_TOPLEFT);
 	headerBg->color.setColorHexFromString(CoreServices::getInstance()->getConfig()->getStringValue("Polycode", "uiHeaderBgColor"));
 	headerBg->color.setColorHexFromString(CoreServices::getInstance()->getConfig()->getStringValue("Polycode", "uiHeaderBgColor"));
 	
 	
+	initialLoad = false;
 
 
 	propList = new PropList("SPRITE EDITOR");
 	propList = new PropList("SPRITE EDITOR");
 	addChild(propList);
 	addChild(propList);
@@ -117,7 +122,7 @@ PolycodeSpriteEditor::PolycodeSpriteEditor() : PolycodeEditor(true){
 	baseProps->addProp(widthProp);	
 	baseProps->addProp(widthProp);	
 
 
 	heightProp = new NumberProp("Frame height");
 	heightProp = new NumberProp("Frame height");
-	heightProp->set(32);	
+	heightProp->set(32);
 	baseProps->addProp(heightProp);	
 	baseProps->addProp(heightProp);	
 	
 	
 	widthProp->addEventListener(this, Event::CHANGE_EVENT);	
 	widthProp->addEventListener(this, Event::CHANGE_EVENT);	
@@ -144,7 +149,7 @@ PolycodeSpriteEditor::PolycodeSpriteEditor() : PolycodeEditor(true){
 	animationsAnchor->addChild(addAnimationButton);
 	animationsAnchor->addChild(addAnimationButton);
 	addAnimationButton->addEventListener(this, UIEvent::CLICK_EVENT);
 	addAnimationButton->addEventListener(this, UIEvent::CLICK_EVENT);
 	
 	
-	propList->updateProps();	
+	propList->updateProps();
 	
 	
 	zoomBox = new UIComboBox(globalMenu, 100);
 	zoomBox = new UIComboBox(globalMenu, 100);
 	addChild(zoomBox);
 	addChild(zoomBox);
@@ -188,6 +193,8 @@ void PolycodeSpriteEditor::handleEvent(Event *event) {
 		}
 		}
 	}
 	}
 	
 	
+	if(!initialLoad) {
+	
 	if(event->getDispatcher() == textureProp) {
 	if(event->getDispatcher() == textureProp) {
 		previewSprite->setTexture(textureProp->get());
 		previewSprite->setTexture(textureProp->get());
 		previewSprite->recalculateSpriteDimensions();
 		previewSprite->recalculateSpriteDimensions();
@@ -204,6 +211,8 @@ void PolycodeSpriteEditor::handleEvent(Event *event) {
 		previewSprite->setShapeSize(widthProp->get(), heightProp->get());
 		previewSprite->setShapeSize(widthProp->get(), heightProp->get());
 		previewSprite->recalculateSpriteDimensions();		
 		previewSprite->recalculateSpriteDimensions();		
 	}
 	}
+	
+	}
 
 
 	if(event->getDispatcher() == addAnimationButton) {
 	if(event->getDispatcher() == addAnimationButton) {
 		SpriteAnimationEntry *newEntry = new SpriteAnimationEntry(previewSprite->addAnimation("default", "0", 0.5));
 		SpriteAnimationEntry *newEntry = new SpriteAnimationEntry(previewSprite->addAnimation("default", "0", 0.5));
@@ -236,11 +245,25 @@ void PolycodeSpriteEditor::handleEvent(Event *event) {
 }
 }
 
 
 PolycodeSpriteEditor::~PolycodeSpriteEditor() {
 PolycodeSpriteEditor::~PolycodeSpriteEditor() {
+	for(int i=0; i < animationEntries.size(); i++) {
+		delete animationEntries[i];
+	}
 	
 	
+	delete animationsAnchor;
+	delete addAnimationButton;
+	delete propList;
+	delete headerBg;
+	delete zoomBox;
+	delete textureProp;
+	delete widthProp;
+	delete heightProp;
+	delete previewSprite;
 }
 }
 
 
 bool PolycodeSpriteEditor::openFile(OSFileEntry filePath) {
 bool PolycodeSpriteEditor::openFile(OSFileEntry filePath) {
 					
 					
+	initialLoad = true;
+	
 	previewSprite = new ScreenSprite(filePath.fullPath);
 	previewSprite = new ScreenSprite(filePath.fullPath);
 	addChild(previewSprite);
 	addChild(previewSprite);
 	previewSprite->setPositionMode(ScreenEntity::POSITION_TOPLEFT);
 	previewSprite->setPositionMode(ScreenEntity::POSITION_TOPLEFT);
@@ -268,6 +291,8 @@ bool PolycodeSpriteEditor::openFile(OSFileEntry filePath) {
 	refreshAnimationEntries();	
 	refreshAnimationEntries();	
 				
 				
 	PolycodeEditor::openFile(filePath);
 	PolycodeEditor::openFile(filePath);
+	
+	initialLoad = false;
 	return true;
 	return true;
 }
 }
 
 
@@ -296,6 +321,7 @@ void PolycodeSpriteEditor::saveFile() {
 void PolycodeSpriteEditor::Resize(int x, int y) {
 void PolycodeSpriteEditor::Resize(int x, int y) {
 	headerBg->setShapeSize(x, 30);
 	headerBg->setShapeSize(x, 30);
 	propList->Resize(370, y);
 	propList->Resize(370, y);
-	PolycodeEditor::Resize(x,y);
+	propList->updateProps();	
+	PolycodeEditor::Resize(x,y);	
 }
 }
 
 

+ 7 - 1
IDE/Contents/Source/PolycodeTextEditor.cpp

@@ -277,6 +277,8 @@ PolycodeTextEditor::PolycodeTextEditor() : PolycodeEditor(true){
 }
 }
 
 
 PolycodeTextEditor::~PolycodeTextEditor() {
 PolycodeTextEditor::~PolycodeTextEditor() {
+	delete textInput;
+	delete findBar;
 	if(syntaxHighligher)
 	if(syntaxHighligher)
 		delete syntaxHighligher;
 		delete syntaxHighligher;
 }
 }
@@ -473,7 +475,11 @@ void FindBar::onKeyDown(PolyKEY key, wchar_t charCode) {
 }
 }
 
 
 FindBar::~FindBar(){
 FindBar::~FindBar(){
-
+	delete findInput;
+	delete replaceInput;
+	delete closeButton;
+	delete replaceAllButton;
+	delete barBg;
 }
 }
 
 
 void FindBar::setBarWidth(int width) {
 void FindBar::setBarWidth(int width) {

+ 1 - 0
Modules/Contents/UI/Source/PolyUIButton.cpp

@@ -96,6 +96,7 @@ void UIButton::Update() {
 }
 }
 
 
 UIButton::~UIButton() {
 UIButton::~UIButton() {
+	coreInput->removeAllHandlersForListener(this);
 	delete buttonRect;
 	delete buttonRect;
 	delete buttonFocusedRect;
 	delete buttonFocusedRect;
 	delete buttonLabel;
 	delete buttonLabel;

+ 1 - 0
Modules/Contents/UI/Source/PolyUIComboBox.cpp

@@ -111,6 +111,7 @@ UIComboBox::~UIComboBox() {
 
 
 void UIComboBox::clearItems() {
 void UIComboBox::clearItems() {
 	items.clear();
 	items.clear();
+	selectedLabel->setText("<None>");
 }
 }
 			
 			
 int UIComboBox::addComboItem(String itemName, void *data) {
 int UIComboBox::addComboItem(String itemName, void *data) {