Browse Source

Status bar working

Marko Pintera 10 years ago
parent
commit
abdc256dcf

+ 3 - 1
BansheeEditor/Include/BsGUIStatusBar.h

@@ -87,7 +87,9 @@ namespace BansheeEngine
 		void messageBtnClicked();
 		void messageBtnClicked();
 
 
 	private:
 	private:
-		static const UINT32 DEFAULT_LABEL_WIDTH;
+		static const Color COLOR_INFO;
+		static const Color COLOR_WARNING;
+		static const Color COLOR_ERROR;
 
 
 		GUIPanel* mPanel;
 		GUIPanel* mPanel;
 		GUIPanel* mBgPanel;
 		GUIPanel* mBgPanel;

+ 3 - 2
BansheeEditor/Source/BsBuiltinEditorResources.cpp

@@ -224,8 +224,8 @@ namespace BansheeEngine
 
 
 	const WString BuiltinEditorResources::TextureDropTex = L"TextureDrop.psd";
 	const WString BuiltinEditorResources::TextureDropTex = L"TextureDrop.psd";
 
 
-	const WString BuiltinEditorResources::XButtonNormalTex = L"XButtonNormal.psd";
-	const WString BuiltinEditorResources::XButtonHoverTex = L"XButtonHover.psd";
+	const WString BuiltinEditorResources::XButtonNormalTex = L"XBtnNormal.psd";
+	const WString BuiltinEditorResources::XButtonHoverTex = L"XBtnHover.psd";
 
 
 	const WString BuiltinEditorResources::StatusBarBgTex = L"StatusBarBg.psd";
 	const WString BuiltinEditorResources::StatusBarBgTex = L"StatusBarBg.psd";
 
 
@@ -1290,6 +1290,7 @@ namespace BansheeEngine
 		statusBarMessageBtnStyle.height = 13;
 		statusBarMessageBtnStyle.height = 13;
 		statusBarMessageBtnStyle.minWidth = 10;
 		statusBarMessageBtnStyle.minWidth = 10;
 		statusBarMessageBtnStyle.textHorzAlign = THA_Left;
 		statusBarMessageBtnStyle.textHorzAlign = THA_Left;
+		statusBarMessageBtnStyle.textVertAlign = TVA_Center;
 		statusBarMessageBtnStyle.imagePosition = GUIImagePosition::Left;
 		statusBarMessageBtnStyle.imagePosition = GUIImagePosition::Left;
 
 
 		skin->setStyle(GUIStatusBar::getGUIMessageTypeName(), statusBarMessageBtnStyle);
 		skin->setStyle(GUIStatusBar::getGUIMessageTypeName(), statusBarMessageBtnStyle);

+ 38 - 2
BansheeEditor/Source/BsGUIStatusBar.cpp

@@ -13,6 +13,10 @@ using namespace std::placeholders;
 
 
 namespace BansheeEngine
 namespace BansheeEngine
 {
 {
+	const Color GUIStatusBar::COLOR_INFO = Color(1.0f, 1.0f, 1.0f, 1.0f);
+	const Color GUIStatusBar::COLOR_WARNING = Color(192 / 255.0f, 176 / 255.0f, 0.0f, 1.0f);
+	const Color GUIStatusBar::COLOR_ERROR = Color(192 / 255.0f, 36 / 255.0f, 0.0f, 1.0f);
+
 	GUIStatusBar::GUIStatusBar(const PrivatelyConstruct& dummy,
 	GUIStatusBar::GUIStatusBar(const PrivatelyConstruct& dummy,
 		const String& style, const GUIDimensions& dimensions)
 		const String& style, const GUIDimensions& dimensions)
 		:GUIElementContainer(dimensions, style)
 		:GUIElementContainer(dimensions, style)
@@ -89,6 +93,7 @@ namespace BansheeEngine
 	void GUIStatusBar::logEntryAdded(const LogEntry& entry)
 	void GUIStatusBar::logEntryAdded(const LogEntry& entry)
 	{
 	{
 		HSpriteTexture iconTexture;
 		HSpriteTexture iconTexture;
+		Color textColor = COLOR_INFO;
 
 
 		UINT32 logChannel = entry.getChannel();
 		UINT32 logChannel = entry.getChannel();
 		switch (logChannel)
 		switch (logChannel)
@@ -99,14 +104,45 @@ namespace BansheeEngine
 			break;
 			break;
 		case (UINT32)DebugChannel::Warning:
 		case (UINT32)DebugChannel::Warning:
 			iconTexture = BuiltinEditorResources::instance().getLogMessageIcon(LogMessageIcon::Warning);
 			iconTexture = BuiltinEditorResources::instance().getLogMessageIcon(LogMessageIcon::Warning);
+			textColor = COLOR_WARNING;
 			break;
 			break;
 		case (UINT32)DebugChannel::Error:
 		case (UINT32)DebugChannel::Error:
 			iconTexture = BuiltinEditorResources::instance().getLogMessageIcon(LogMessageIcon::Error);
 			iconTexture = BuiltinEditorResources::instance().getLogMessageIcon(LogMessageIcon::Error);
+			textColor = COLOR_ERROR;
 			break;
 			break;
 		}
 		}
 
 
-		GUIContent messageContent(HString(toWString(entry.getMessage())), iconTexture);
-		mMessage->setContent(messageContent);
+		WString message = toWString(entry.getMessage());
+		WString::size_type lfPos = message.find_first_of('\n');
+		WString::size_type crPos = message.find_first_of('\r');
+		WString::size_type newlinePos;
+
+		if (lfPos >= 0)
+		{
+			if (crPos >= 0)
+				newlinePos = std::min(lfPos, crPos);
+			else
+				newlinePos = lfPos;
+		}
+		else if (crPos >= 0)
+			newlinePos = crPos;
+		else
+			newlinePos = -1;
+
+		if (newlinePos == -1)
+		{
+			GUIContent messageContent(HString(message), iconTexture);
+			mMessage->setContent(messageContent);
+			mMessage->setTint(textColor);
+		}
+		else
+		{
+			WString firstLine = message.substr(0, newlinePos);
+
+			GUIContent messageContent(HString(firstLine), iconTexture);
+			mMessage->setContent(messageContent);
+			mMessage->setTint(textColor);
+		}		
 	}
 	}
 
 
 	void GUIStatusBar::messageBtnClicked()
 	void GUIStatusBar::messageBtnClicked()

+ 28 - 8
BansheeEngine/Source/BsGUIButtonBase.cpp

@@ -14,12 +14,12 @@ namespace BansheeEngine
 	GUIButtonBase::GUIButtonBase(const String& styleName, const GUIContent& content, const GUIDimensions& dimensions)
 	GUIButtonBase::GUIButtonBase(const String& styleName, const GUIContent& content, const GUIDimensions& dimensions)
 		:GUIElement(styleName, dimensions), mContent(content), mContentImageSprite(nullptr), mActiveState(GUIButtonState::Normal)
 		:GUIElement(styleName, dimensions), mContent(content), mContentImageSprite(nullptr), mActiveState(GUIButtonState::Normal)
 	{
 	{
-		mImageSprite = bs_new<ImageSprite, PoolAlloc>();
-		mTextSprite = bs_new<TextSprite, PoolAlloc>();
+		mImageSprite = bs_new<ImageSprite>();
+		mTextSprite = bs_new<TextSprite>();
 
 
 		HSpriteTexture contentTex = content.getImage();
 		HSpriteTexture contentTex = content.getImage();
 		if(SpriteTexture::checkIsLoaded(contentTex))
 		if(SpriteTexture::checkIsLoaded(contentTex))
-			mContentImageSprite = bs_new<ImageSprite, PoolAlloc>();
+			mContentImageSprite = bs_new<ImageSprite>();
 
 
 		mLocStringUpdatedConn = mContent.getText().addOnStringModifiedCallback(std::bind(&GUIButtonBase::_markContentAsDirty, this));
 		mLocStringUpdatedConn = mContent.getText().addOnStringModifiedCallback(std::bind(&GUIButtonBase::_markContentAsDirty, this));
 	}
 	}
@@ -28,11 +28,11 @@ namespace BansheeEngine
 	{
 	{
 		mLocStringUpdatedConn.disconnect();
 		mLocStringUpdatedConn.disconnect();
 
 
-		bs_delete<PoolAlloc>(mTextSprite);
-		bs_delete<PoolAlloc>(mImageSprite);
+		bs_delete(mTextSprite);
+		bs_delete(mImageSprite);
 
 
 		if(mContentImageSprite != nullptr)
 		if(mContentImageSprite != nullptr)
-			bs_delete<PoolAlloc>(mContentImageSprite);
+			bs_delete(mContentImageSprite);
 	}
 	}
 
 
 	void GUIButtonBase::setContent(const GUIContent& content)
 	void GUIButtonBase::setContent(const GUIContent& content)
@@ -42,6 +42,21 @@ namespace BansheeEngine
 
 
 		mContent = content;
 		mContent = content;
 
 
+		HSpriteTexture contentTex = content.getImage();
+		if (SpriteTexture::checkIsLoaded(contentTex))
+		{
+			if (mContentImageSprite == nullptr)
+				mContentImageSprite = bs_new<ImageSprite>();
+		}
+		else
+		{
+			if (mContentImageSprite != nullptr)
+			{
+				bs_delete(mContentImageSprite);
+				mContentImageSprite = nullptr;
+			}
+		}
+
 		_markContentAsDirty();
 		_markContentAsDirty();
 	}
 	}
 
 
@@ -233,8 +248,13 @@ namespace BansheeEngine
 		if(mContentImageSprite != nullptr)
 		if(mContentImageSprite != nullptr)
 		{
 		{
 			Rect2I imageBounds = mContentImageSprite->getBounds(Vector2I(), Rect2I());
 			Rect2I imageBounds = mContentImageSprite->getBounds(Vector2I(), Rect2I());
-			UINT32 freeWidth = (UINT32)std::max(0, contentBounds.width - textBounds.width - imageBounds.width);
-			INT32 imageXOffset = (INT32)(freeWidth / 2);
+			INT32 imageXOffset = 0;
+			
+			if (textBounds.width == 0)
+			{
+				UINT32 freeWidth = (UINT32)std::max(0, contentBounds.width - textBounds.width - imageBounds.width);
+				imageXOffset = (INT32)(freeWidth / 2);
+			}
 
 
 			if(_getStyle()->imagePosition == GUIImagePosition::Right)
 			if(_getStyle()->imagePosition == GUIImagePosition::Right)
 			{
 			{

+ 1 - 0
TODO.txt

@@ -78,6 +78,7 @@ First screenshot work:
  - Component (also add to inspector context): Camera, Renderable, Point/Spot/Directional light, all other components from scripts
  - Component (also add to inspector context): Camera, Renderable, Point/Spot/Directional light, all other components from scripts
  - Help - About, API Reference (link to site)
  - Help - About, API Reference (link to site)
 - Camera & Renderable inspector
 - Camera & Renderable inspector
+- Normalize colors between project and hierarchy windows (both blue or both orange selection + same ping color)
 - (Optionally) New UI look (tabs, component/array containers, better buttons)
 - (Optionally) New UI look (tabs, component/array containers, better buttons)
 - (Optionally) Console window
 - (Optionally) Console window