From cadaa6ec0d4925484f927cb1e3ce6ee224107b47 Mon Sep 17 00:00:00 2001
From: Rye Mutt <rye@alchemyviewer.org>
Date: Wed, 24 Jun 2020 09:32:18 -0400
Subject: [PATCH] Restore top button bar

---
 indra/llui/lltoolbar.h                        |  3 +-
 indra/newview/lltoolbarview.cpp               | 34 +++++++++++++++++--
 indra/newview/lltoolbarview.h                 |  3 +-
 .../default/xui/en/panel_toolbar_view.xml     | 29 ++++++++++++++++
 4 files changed, 65 insertions(+), 4 deletions(-)

diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h
index 370941c787e..6ba3c662d41 100644
--- a/indra/llui/lltoolbar.h
+++ b/indra/llui/lltoolbar.h
@@ -131,11 +131,12 @@ namespace LLToolBarEnums
 		TOOLBAR_LEFT,
 		TOOLBAR_RIGHT,
 		TOOLBAR_BOTTOM,
+		TOOLBAR_TOP,
 
 		TOOLBAR_COUNT,
 
 		TOOLBAR_FIRST = TOOLBAR_LEFT,
-		TOOLBAR_LAST = TOOLBAR_BOTTOM,
+		TOOLBAR_LAST = TOOLBAR_TOP,
 	};
 
 	LLView::EOrientation getOrientation(SideType sideType);
diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp
index 01d799dcd50..e11f1bd00fa 100644
--- a/indra/newview/lltoolbarview.cpp
+++ b/indra/newview/lltoolbarview.cpp
@@ -64,7 +64,8 @@ LLToolBarView::Toolbar::Toolbar()
 LLToolBarView::ToolbarSet::ToolbarSet()
 :	left_toolbar("left_toolbar"),
 	right_toolbar("right_toolbar"),
-	bottom_toolbar("bottom_toolbar")
+	bottom_toolbar("bottom_toolbar"),
+	top_toolbar("top_toolbar")
 {}
 
 
@@ -105,6 +106,9 @@ BOOL LLToolBarView::postBuild()
 	mToolbars[LLToolBarEnums::TOOLBAR_BOTTOM] = getChild<LLToolBar>("toolbar_bottom");
 	mToolbars[LLToolBarEnums::TOOLBAR_BOTTOM]->getCenterLayoutPanel()->setLocationId(LLToolBarEnums::TOOLBAR_BOTTOM);
 
+	mToolbars[LLToolBarEnums::TOOLBAR_TOP] = getChild<LLToolBar>("toolbar_top");
+	mToolbars[LLToolBarEnums::TOOLBAR_TOP]->getCenterLayoutPanel()->setLocationId(LLToolBarEnums::TOOLBAR_TOP);
+
 	mBottomToolbarPanel = getChild<LLView>("bottom_toolbar_panel");
 
 	for (int i = LLToolBarEnums::TOOLBAR_FIRST; i <= LLToolBarEnums::TOOLBAR_LAST; i++)
@@ -319,6 +323,26 @@ bool LLToolBarView::loadToolbars(bool force_default)
 			}
 		}
 	}
+	if (toolbar_set.top_toolbar.isProvided() && mToolbars[LLToolBarEnums::TOOLBAR_TOP])
+	{
+		if (toolbar_set.top_toolbar.button_display_mode.isProvided())
+		{
+			LLToolBarEnums::ButtonType button_type = toolbar_set.top_toolbar.button_display_mode;
+			mToolbars[LLToolBarEnums::TOOLBAR_TOP]->setButtonType(button_type);
+		}
+		//if (toolbar_set.top_toolbar.button_layout_mode.isProvided())
+		//{
+		//	LLToolBarEnums::LayoutType layout_type = toolbar_set.top_toolbar.button_layout_mode;
+		//	mToolbars[LLToolBarEnums::TOOLBAR_TOP]->setLayoutType(layout_type);
+		//}
+		for (const LLCommandId::Params& command_params : toolbar_set.top_toolbar.commands)
+		{
+			if (addCommandInternal(LLCommandId(command_params), mToolbars[LLToolBarEnums::TOOLBAR_TOP]))
+			{
+				LL_WARNS() << "Error adding command '" << command_params.name() << "' to top toolbar." << LL_ENDL;
+			}
+		}
+	}
 	mToolbarsLoaded = true;
 	return true;
 }
@@ -392,6 +416,12 @@ void LLToolBarView::saveToolbars() const
 		toolbar_set.bottom_toolbar.button_display_mode = mToolbars[LLToolBarEnums::TOOLBAR_BOTTOM]->getButtonType();
 		addToToolset(mToolbars[LLToolBarEnums::TOOLBAR_BOTTOM]->getCommandsList(), toolbar_set.bottom_toolbar);
 	}
+	if (mToolbars[LLToolBarEnums::TOOLBAR_TOP])
+	{
+		toolbar_set.top_toolbar.button_display_mode = mToolbars[LLToolBarEnums::TOOLBAR_TOP]->getButtonType();
+		//toolbar_set.top_toolbar.button_layout_mode = mToolbars[LLToolBarEnums::TOOLBAR_TOP]->getLayoutType();
+		addToToolset(mToolbars[LLToolBarEnums::TOOLBAR_TOP]->getCommandsList(), toolbar_set.top_toolbar);
+	}
 	
 	// Serialize the parameter tree
 	LLXMLNodePtr output_node = new LLXMLNode("toolbars", false);
@@ -548,7 +578,7 @@ void LLToolBarView::draw()
 	// Draw drop zones if drop of a tool is active
 	if (isToolDragged())
 	{
-		LLColor4 drop_color = LLUIColorTable::instance().getColor( "ToolbarDropZoneColor" );
+		static const LLUIColor drop_color = LLUIColorTable::instance().getColor( "ToolbarDropZoneColor" );
 
 		for (S32 i = LLToolBarEnums::TOOLBAR_FIRST; i <= LLToolBarEnums::TOOLBAR_LAST; i++)
 		{
diff --git a/indra/newview/lltoolbarview.h b/indra/newview/lltoolbarview.h
index a230c2fdee7..a4f7039011a 100644
--- a/indra/newview/lltoolbarview.h
+++ b/indra/newview/lltoolbarview.h
@@ -60,7 +60,8 @@ class LLToolBarView : public LLUICtrl
 	{
 		Optional<Toolbar>	left_toolbar,
 							right_toolbar,
-							bottom_toolbar;
+							bottom_toolbar,
+							top_toolbar;
 
 		ToolbarSet();
 	};
diff --git a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml
index f5c559fe1dd..bd445ea836b 100644
--- a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml
@@ -18,6 +18,35 @@
                 height="500"
                 follows="all"
                 mouse_opaque="false">
+  <layout_panel name="top_toolbar_panel"
+                auto_resize="false"
+                height="30"
+                width="1024"
+                mouse_opaque="false">
+    <toolbar layout="topleft"
+             button_panel.bg_opaque_image="Rounded_Rect_Top"
+             name="toolbar_top"
+             height="30"
+             left="40"
+             right="-40"
+             top="1"
+             side="top"
+             follows="left|right|top"
+             button_display_mode="icons_with_text"
+             visible="true">
+             <icon layout="topleft"
+                    height="28"
+                    width="15"
+                    follows="left|top"
+                    top="20"
+                    left="10"
+                    tab_stop="false" 
+                    visible="false"
+                    use_draw_context_alpha="false"
+                    image_name="Caret_Top_Icon"
+                    name="caret" />
+    </toolbar>
+  </layout_panel>
   <layout_panel name="vertical_toolbar_panel"
                 auto_resize="true"
                 width="1024"
-- 
GitLab