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

Added minum sizes to UI sizers

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

+ 3 - 0
IDE/Contents/Source/PolycodeFrame.cpp

@@ -706,6 +706,7 @@ void EditorHolder::makeVSplit() {
 	holderBar->enabled = false;
 
 	vSizer = new UIVSizer(getWidth(), getHeight(), getHeight()/2.0, true);
+	vSizer->setMinimumSize(200);
 	addChild(vSizer);
 	firstChildHolder = new EditorHolder(project, editorManager, this);
 	firstChildHolder->addEventListener(this, UIEvent::CLOSE_EVENT);
@@ -731,6 +732,7 @@ void EditorHolder::makeHSplit() {
 	holderBar->enabled = false;
 	
 	hSizer = new UIHSizer(getWidth(), getHeight(), getWidth()/2.0, true);
+	hSizer->setMinimumSize(200);
 	addChild(hSizer);
 	firstChildHolder = new EditorHolder(project, editorManager, this);
 	firstChildHolder->addEventListener(this, UIEvent::CLOSE_EVENT);		
@@ -897,6 +899,7 @@ PolycodeProjectTab::PolycodeProjectTab(String caption, PolycodeProject *project,
 	editorHolder->addEventListener(this, UIEvent::CLOSE_EVENT);
 	
 	mainSizer = new UIHSizer(100,100,200,true);
+	mainSizer->setMinimumSize(100);
 	addChild(mainSizer);					
 	projectBrowser = new PolycodeProjectBrowser(project);
 	mainSizer->addLeftChild(projectBrowser);

+ 6 - 0
Modules/Contents/UI/Include/PolyUIHSizer.h

@@ -37,6 +37,8 @@ namespace Polycode {
 			void handleEvent(Event *event);
 			
 			void setMainWidth(Number width);
+			void setMainWidthWithMinimum(Number newWidth);
+						
 			Number getMainWidth();
 			
 			void addLeftChild(UIElement *element);
@@ -51,6 +53,8 @@ namespace Polycode {
 			
 			void updateSizer();
 			
+			void setMinimumSize(Number minimumSize);
+			
 		protected:
 		
 			Entity *childElements;			
@@ -58,6 +62,8 @@ namespace Polycode {
 			
 			CoreInput *coreInput;
 			
+			Number minimumSize;
+			
 			bool resizing;
 			Number baseMouseX;
 			Number baseMainWidth;

+ 5 - 0
Modules/Contents/UI/Include/PolyUIVSizer.h

@@ -37,6 +37,7 @@ namespace Polycode {
 			void handleEvent(Event *event);
 			
 			void setMainHeight(Number height);
+			void setMainHeightWithMinimum(Number newHeight);	
 			Number getMainHeight();
 			
 			void addTopChild(UIElement *element);
@@ -50,11 +51,15 @@ namespace Polycode {
 			
 			void updateSizer();
 			
+			void setMinimumSize(Number minimumSize);
+			
 		protected:
 		
 			Entity *childElements;			
 			Number mainHeight;
 			
+			Number minimumSize;
+			
 			bool topSizer;
 			
 			CoreInput *coreInput;

+ 20 - 2
Modules/Contents/UI/Source/PolyUIHSizer.cpp

@@ -26,11 +26,14 @@
 #include "PolyInputEvent.h"
 #include "PolyCoreServices.h"
 #include "PolyCore.h"
+#include "PolyUIEvent.h"
 
 using namespace Polycode;
 
 UIHSizer::UIHSizer(Number width, Number height, Number mainWidth, bool leftSizer) : UIElement() {
 
+	minimumSize = 100;
+
 	setWidth(width);
 	setHeight(height);
 	this->leftSizer = leftSizer;
@@ -113,9 +116,9 @@ void UIHSizer::handleEvent(Event *event) {
 			case InputEvent::EVENT_MOUSEMOVE:
 				if(resizing == true) {
 					if(leftSizer) {
-						setMainWidth(baseMainWidth + (inputEvent->mousePosition.x-baseMouseX));
+						setMainWidthWithMinimum(baseMainWidth + (inputEvent->mousePosition.x-baseMouseX));
 					} else {
-						setMainWidth(baseMainWidth - (inputEvent->mousePosition.x-baseMouseX));
+						setMainWidthWithMinimum(baseMainWidth - (inputEvent->mousePosition.x-baseMouseX));
 					}
 				} else {
 					baseMouseX = inputEvent->mousePosition.x;				
@@ -137,9 +140,24 @@ Number UIHSizer::getMainWidth() {
 	return mainWidth;
 }
 
+void UIHSizer::setMainWidthWithMinimum(Number newWidth) {
+	if(newWidth < minimumSize) {
+		newWidth = minimumSize;
+	}
+	if(newWidth > getWidth()-minimumSize) {
+		newWidth = getWidth()-minimumSize;
+	}
+	setMainWidth(newWidth);
+}
+
 void UIHSizer::setMainWidth(Number width) {
 	mainWidth = width;
 	updateSizer();
+	dispatchEvent(new UIEvent(), UIEvent::CHANGE_EVENT);	
+}
+
+void UIHSizer::setMinimumSize(Number minimumSize) {
+	this->minimumSize = minimumSize;
 }
 			
 void UIHSizer::addLeftChild(UIElement *element) {

+ 18 - 2
Modules/Contents/UI/Source/PolyUIVSizer.cpp

@@ -32,6 +32,8 @@ using namespace Polycode;
 
 UIVSizer::UIVSizer(Number width, Number height, Number mainHeight, bool topSizer) : UIElement() {
 
+	minimumSize = 100;
+
 	setWidth(width);
 	setHeight(height);
 	this->topSizer = topSizer;
@@ -116,9 +118,9 @@ void UIVSizer::handleEvent(Event *event) {
 			case InputEvent::EVENT_MOUSEMOVE:
 				if(resizing == true) {
 					if(topSizer) {
-						setMainHeight(baseMainHeight + (inputEvent->mousePosition.y-baseMouseY));
+						setMainHeightWithMinimum(baseMainHeight + (inputEvent->mousePosition.y-baseMouseY));
 					} else {
-						setMainHeight(baseMainHeight - (inputEvent->mousePosition.y-baseMouseY));		
+						setMainHeightWithMinimum(baseMainHeight - (inputEvent->mousePosition.y-baseMouseY));		
 					}
 				} else {
 					baseMouseY = inputEvent->mousePosition.y;
@@ -140,6 +142,20 @@ Number UIVSizer::getMainHeight() {
 	return mainHeight;
 }
 
+void UIVSizer::setMainHeightWithMinimum(Number newHeight) {
+	if(newHeight < minimumSize) {
+		newHeight = minimumSize;
+	}	
+	if(newHeight > getHeight()-minimumSize) {
+		newHeight = getHeight()-minimumSize;
+	}
+	setMainHeight(newHeight);
+}
+
+void UIVSizer::setMinimumSize(Number minimumSize) {
+	this->minimumSize = minimumSize;
+}
+
 void UIVSizer::setMainHeight(Number height) {
 	mainHeight = height;
 	updateSizer();