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

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

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

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

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

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

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

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

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

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

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

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

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

@@ -44,6 +44,17 @@ PolycodeEditor *PolycodeEditorManager::createEditorForExtension(String extension
 	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() {
 	for(int i=0; i < openEditors.size();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->setColorInt(21, 18, 17, 255);
 	topBarBg->setPositionMode(ScreenEntity::POSITION_TOPLEFT);
+	topBarBg->processInputEvents = true;
+	topBarBg->blockMouseInput = true;
 	addChild(topBarBg);
 	
 	logo = new ScreenImage("Images/barlogo.png");	
@@ -695,6 +697,19 @@ PolycodeProjectBrowser *PolycodeFrame::getProjectBrowser() {
 	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) {
 	editors.push_back(editor);
 	editorHolder->addChild(editor);
@@ -762,8 +777,7 @@ void PolycodeFrame::handleEvent(Event *event) {
 			
 			if(editorManager->getCurrentEditor() == editorManager->openEditors[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() {
 	if(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() {
-
+	delete nameInput;
+	delete framesInput;
+	delete speedInput;
+	delete removeButton;
+	delete playButton;
 }
 
 PolycodeSpriteEditor::PolycodeSpriteEditor() : PolycodeEditor(true){
@@ -101,6 +105,7 @@ PolycodeSpriteEditor::PolycodeSpriteEditor() : PolycodeEditor(true){
 	headerBg->setPositionMode(ScreenEntity::POSITION_TOPLEFT);
 	headerBg->color.setColorHexFromString(CoreServices::getInstance()->getConfig()->getStringValue("Polycode", "uiHeaderBgColor"));
 	
+	initialLoad = false;
 
 	propList = new PropList("SPRITE EDITOR");
 	addChild(propList);
@@ -117,7 +122,7 @@ PolycodeSpriteEditor::PolycodeSpriteEditor() : PolycodeEditor(true){
 	baseProps->addProp(widthProp);	
 
 	heightProp = new NumberProp("Frame height");
-	heightProp->set(32);	
+	heightProp->set(32);
 	baseProps->addProp(heightProp);	
 	
 	widthProp->addEventListener(this, Event::CHANGE_EVENT);	
@@ -144,7 +149,7 @@ PolycodeSpriteEditor::PolycodeSpriteEditor() : PolycodeEditor(true){
 	animationsAnchor->addChild(addAnimationButton);
 	addAnimationButton->addEventListener(this, UIEvent::CLICK_EVENT);
 	
-	propList->updateProps();	
+	propList->updateProps();
 	
 	zoomBox = new UIComboBox(globalMenu, 100);
 	addChild(zoomBox);
@@ -188,6 +193,8 @@ void PolycodeSpriteEditor::handleEvent(Event *event) {
 		}
 	}
 	
+	if(!initialLoad) {
+	
 	if(event->getDispatcher() == textureProp) {
 		previewSprite->setTexture(textureProp->get());
 		previewSprite->recalculateSpriteDimensions();
@@ -204,6 +211,8 @@ void PolycodeSpriteEditor::handleEvent(Event *event) {
 		previewSprite->setShapeSize(widthProp->get(), heightProp->get());
 		previewSprite->recalculateSpriteDimensions();		
 	}
+	
+	}
 
 	if(event->getDispatcher() == addAnimationButton) {
 		SpriteAnimationEntry *newEntry = new SpriteAnimationEntry(previewSprite->addAnimation("default", "0", 0.5));
@@ -236,11 +245,25 @@ void PolycodeSpriteEditor::handleEvent(Event *event) {
 }
 
 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) {
 					
+	initialLoad = true;
+	
 	previewSprite = new ScreenSprite(filePath.fullPath);
 	addChild(previewSprite);
 	previewSprite->setPositionMode(ScreenEntity::POSITION_TOPLEFT);
@@ -268,6 +291,8 @@ bool PolycodeSpriteEditor::openFile(OSFileEntry filePath) {
 	refreshAnimationEntries();	
 				
 	PolycodeEditor::openFile(filePath);
+	
+	initialLoad = false;
 	return true;
 }
 
@@ -296,6 +321,7 @@ void PolycodeSpriteEditor::saveFile() {
 void PolycodeSpriteEditor::Resize(int x, int y) {
 	headerBg->setShapeSize(x, 30);
 	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() {
+	delete textInput;
+	delete findBar;
 	if(syntaxHighligher)
 		delete syntaxHighligher;
 }
@@ -473,7 +475,11 @@ void FindBar::onKeyDown(PolyKEY key, wchar_t charCode) {
 }
 
 FindBar::~FindBar(){
-
+	delete findInput;
+	delete replaceInput;
+	delete closeButton;
+	delete replaceAllButton;
+	delete barBg;
 }
 
 void FindBar::setBarWidth(int width) {

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

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

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

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