From c0f8169c9d56ce65323170b6a748c03c6b3c102d Mon Sep 17 00:00:00 2001
From: cinder <cinder@cinderblocks.biz>
Date: Sun, 18 Dec 2022 11:21:45 -0600
Subject: [PATCH] Legacy notification well wired up

---
 indra/newview/llchannelmanager.cpp            |  13 +-
 indra/newview/llchiclet.cpp                   |  25 ++-
 indra/newview/llchicletbar.cpp                |  11 +-
 .../lllegacynotificationwellwindow.cpp        |  37 ++--
 .../newview/lllegacynotificationwellwindow.h  |  10 +-
 indra/newview/llviewerfloaterreg.cpp          |   2 +-
 .../xui/en/floater_legacy_sys_well.xml        |  40 ++++
 .../default/xui/en/panel_chiclet_bar.xml      |   2 +-
 .../heretic/xui/en/panel_chiclet_bar.xml      | 125 ++++++++++++
 .../heretic/xui/en/panel_toolbar_view.xml     | 188 ++++++++++++++++++
 10 files changed, 420 insertions(+), 33 deletions(-)
 create mode 100644 indra/newview/skins/default/xui/en/floater_legacy_sys_well.xml
 create mode 100644 indra/newview/skins/heretic/xui/en/panel_chiclet_bar.xml
 create mode 100644 indra/newview/skins/heretic/xui/en/panel_toolbar_view.xml

diff --git a/indra/newview/llchannelmanager.cpp b/indra/newview/llchannelmanager.cpp
index 9e7a8ba95c3..37d093dd189 100644
--- a/indra/newview/llchannelmanager.cpp
+++ b/indra/newview/llchannelmanager.cpp
@@ -36,6 +36,7 @@
 #include "llrootview.h"
 #include "llsyswellwindow.h"
 #include "llfloaternotificationstabbed.h"
+#include "lllegacynotificationwellwindow.h"
 #include "llfloaterreg.h"
 
 #include <algorithm>
@@ -146,8 +147,16 @@ void LLChannelManager::onLoginCompleted()
 			S32 channel_right_bound = gViewerWindow->getWorldViewRectScaled().mRight - gSavedSettings.getS32("NotificationChannelRightMargin"); 
 			S32 channel_width = gSavedSettings.getS32("NotifyBoxWidth");
 			mStartUpChannel->init(channel_right_bound - channel_width, channel_right_bound);
-			mStartUpChannel->setMouseDownCallback(boost::bind(&LLFloaterNotificationsTabbed::onStartUpToastClick, LLFloaterNotificationsTabbed::getInstance(), _2, _3, _4));
-
+            if (gSkinSettings.getBool("LegacyNotificationWell"))
+            {
+                mStartUpChannel->setMouseDownCallback(boost::bind(&LLLegacyNotificationWellWindow::onStartUpToastClick, 
+					LLLegacyNotificationWellWindow::getInstance(), _2, _3, _4));
+            }
+            else
+            {
+                mStartUpChannel->setMouseDownCallback(boost::bind(&LLFloaterNotificationsTabbed::onStartUpToastClick, 
+					LLFloaterNotificationsTabbed::getInstance(), _2, _3, _4));
+            }
 			mStartUpChannel->setCommitCallback(boost::bind(&LLChannelManager::onStartUpToastClose, this));
 			mStartUpChannel->createStartUpToast(away_notifications, gSavedSettings.getS32("StartUpToastLifeTime"));
 		}
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index a0e656e2a21..3a4fbc4c836 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -37,6 +37,7 @@
 #include "llsyswellwindow.h"
 #include "llfloaternotificationstabbed.h"
 #include "llviewermenu.h"
+#include "lllegacynotificationwellwindow.h"
 // [SL:KB] - Patch: UI-Notifications | Checked: 2013-05-09 (Catznip-3.5)
 #include "llchannelmanager.h"
 // [/SL:KB]
@@ -177,7 +178,14 @@ LLNotificationChiclet::LLNotificationChiclet(const Params& p)
 	mNotificationChannel.reset(new ChicletNotificationChannel(this));
 	// ensure that notification well window exists, to synchronously
 	// handle toast add/delete events.
-	LLFloaterNotificationsTabbed::getInstance()->setSysWellChiclet(this);
+    if (gSkinSettings.getBool("LegacyNotificationWell"))
+    {
+        LLLegacyNotificationWellWindow::getInstance()->setSysWellChiclet(this);
+    }
+    else
+    {
+        LLFloaterNotificationsTabbed::getInstance()->setSysWellChiclet(this);
+    }
 }
 
 void LLNotificationChiclet::onMenuItemClicked(const LLSD& user_data)
@@ -185,7 +193,14 @@ void LLNotificationChiclet::onMenuItemClicked(const LLSD& user_data)
 	std::string action = user_data.asString();
 	if("close all" == action)
 	{
-		LLFloaterNotificationsTabbed::getInstance()->closeAll();
+        if (gSkinSettings.getBool("LegacyNotificationWell"))
+        {
+            LLLegacyNotificationWellWindow::getInstance()->closeAll();
+        }
+        else
+        {
+            LLFloaterNotificationsTabbed::getInstance()->closeAll();
+        }
 		LLIMWellWindow::getInstance()->closeAll();
 	}
 }
@@ -240,8 +255,10 @@ bool LLNotificationChiclet::ChicletNotificationChannel::filterNotification( LLNo
 	bool displayNotification;
 	if (   (notification->getName() == "ScriptDialog") // special case for scripts
 		// if there is no toast window for the notification, filter it
-		//|| (!LLNotificationWellWindow::getInstance()->findItemByID(notification->getID()))
-        || (!LLFloaterNotificationsTabbed::getInstance()->findItemByID(notification->getID(), notification->getName()))
+        || (gSkinSettings.getBool("LegacyNotificationWell")
+            && !LLLegacyNotificationWellWindow::getInstance()->findItemByID(notification->getID()))
+        || (!gSkinSettings.getBool("LegacyNotificationWell") 
+			&& !LLFloaterNotificationsTabbed::getInstance()->findItemByID(notification->getID(), notification->getName()))
 		)
 	{
 		displayNotification = false;
diff --git a/indra/newview/llchicletbar.cpp b/indra/newview/llchicletbar.cpp
index 91b9d68fd25..32e5ef7051f 100644
--- a/indra/newview/llchicletbar.cpp
+++ b/indra/newview/llchicletbar.cpp
@@ -32,6 +32,7 @@
 #include "llpaneltopinfobar.h"
 #include "llsyswellwindow.h"
 #include "llfloaternotificationstabbed.h"
+#include "lllegacynotificationwellwindow.h"
 
 namespace
 {
@@ -50,8 +51,14 @@ BOOL LLChicletBar::postBuild()
 	mToolbarStack = getChild<LLLayoutStack>("toolbar_stack");
 	mChicletPanel = getChild<LLChicletPanel>("chiclet_list");
 
-	showWellButton("notification_well", !LLFloaterNotificationsTabbed::getInstance()->isWindowEmpty());
-
+	if (gSkinSettings.getBool("LegacyNotificationWell"))
+	{
+        showWellButton("notification_well", !LLLegacyNotificationWellWindow::getInstance()->isWindowEmpty());
+	}
+    else
+    {
+        showWellButton("notification_well", !LLFloaterNotificationsTabbed::getInstance()->isWindowEmpty());
+    }
 	LLPanelTopInfoBar::instance().setResizeCallback(boost::bind(&LLChicletBar::fitWithTopInfoBar, this));
 	LLPanelTopInfoBar::instance().setVisibleCallback(boost::bind(&LLChicletBar::fitWithTopInfoBar, this));
 
diff --git a/indra/newview/lllegacynotificationwellwindow.cpp b/indra/newview/lllegacynotificationwellwindow.cpp
index ea3cf13fbf5..5c963e44047 100644
--- a/indra/newview/lllegacynotificationwellwindow.cpp
+++ b/indra/newview/lllegacynotificationwellwindow.cpp
@@ -33,7 +33,7 @@
 #include "llnotificationhandler.h"
 #include "lltoastpanel.h"
 
-LLNotificationWellWindow::WellNotificationChannel::WellNotificationChannel(LLNotificationWellWindow* well_window)
+LLLegacyNotificationWellWindow::WellNotificationChannel::WellNotificationChannel(LLLegacyNotificationWellWindow* well_window)
 :	LLNotificationChannel(LLNotificationChannel::Params().name(well_window->getPathname()))
 ,	mWellWindow(well_window)
 {
@@ -42,20 +42,20 @@ LLNotificationWellWindow::WellNotificationChannel::WellNotificationChannel(LLNot
 	connectToChannel("Offer");
 }
 
-LLNotificationWellWindow::LLNotificationWellWindow(const LLSD& key)
+LLLegacyNotificationWellWindow::LLLegacyNotificationWellWindow(const LLSD& key)
 :	LLSysWellWindow(key)
 {
 	mNotificationUpdates.reset(new WellNotificationChannel(this));
 }
 
 // static
-LLNotificationWellWindow* LLNotificationWellWindow::getInstance(const LLSD& key /*= LLSD()*/)
+LLLegacyNotificationWellWindow* LLLegacyNotificationWellWindow::getInstance(const LLSD& key /*= LLSD()*/)
 {
-	return LLFloaterReg::getTypedInstance<LLNotificationWellWindow>("legacy_notification_well_window", key);
+	return LLFloaterReg::getTypedInstance<LLLegacyNotificationWellWindow>("legacy_notification_well_window", key);
 }
 
 // virtual
-BOOL LLNotificationWellWindow::postBuild()
+BOOL LLLegacyNotificationWellWindow::postBuild()
 {
 	BOOL rv = LLSysWellWindow::postBuild();
 	setTitle(getString("title_notification_well_window"));
@@ -63,7 +63,7 @@ BOOL LLNotificationWellWindow::postBuild()
 }
 
 // virtual
-void LLNotificationWellWindow::setVisible(BOOL visible)
+void LLLegacyNotificationWellWindow::setVisible(BOOL visible)
 {
 	if (visible)
 	{
@@ -74,7 +74,7 @@ void LLNotificationWellWindow::setVisible(BOOL visible)
 	LLSysWellWindow::setVisible(visible);
 }
 
-void LLNotificationWellWindow::addItem(const LLSysWellItem::Params& p)
+void LLLegacyNotificationWellWindow::addItem(const LLSysWellItem::Params& p)
 {
 	LLSD value = p.notification_id;
 	// do not add clones
@@ -84,10 +84,11 @@ void LLNotificationWellWindow::addItem(const LLSysWellItem::Params& p)
 	LLSysWellItem* new_item = new LLSysWellItem(p);
 	if (mMessageList->addItem(new_item, value, ADD_TOP))
 	{
-		mSysWellChiclet->updateWidget(isWindowEmpty());
+
+	    mSysWellChiclet->updateWidget(isWindowEmpty());
 		reshapeWindow();
-		new_item->setOnItemCloseCallback(boost::bind(&LLNotificationWellWindow::onItemClose, this, _1));
-		new_item->setOnItemClickCallback(boost::bind(&LLNotificationWellWindow::onItemClick, this, _1));
+		new_item->setOnItemCloseCallback(boost::bind(&LLLegacyNotificationWellWindow::onItemClose, this, _1));
+		new_item->setOnItemClickCallback(boost::bind(&LLLegacyNotificationWellWindow::onItemClick, this, _1));
 	}
 	else
 	{
@@ -99,7 +100,7 @@ void LLNotificationWellWindow::addItem(const LLSysWellItem::Params& p)
 	}
 }
 
-void LLNotificationWellWindow::closeAll()
+void LLLegacyNotificationWellWindow::closeAll()
 {
 	// Need to clear notification channel, to add storable toasts into the list.
 	clearScreenChannels();
@@ -116,16 +117,16 @@ void LLNotificationWellWindow::closeAll()
 	}
 }
 
-void LLNotificationWellWindow::initChannel()
+void LLLegacyNotificationWellWindow::initChannel()
 {
 	LLSysWellWindow::initChannel();
 	if(mChannel)
 	{
-		mChannel->addOnStoreToastCallback(boost::bind(&LLNotificationWellWindow::onStoreToast, this, _1, _2));
+		mChannel->addOnStoreToastCallback(boost::bind(&LLLegacyNotificationWellWindow::onStoreToast, this, _1, _2));
 	}
 }
 
-void LLNotificationWellWindow::clearScreenChannels()
+void LLLegacyNotificationWellWindow::clearScreenChannels()
 {
 	// 1 - remove StartUp toast and channel if present
 	if(!LLNotificationsUI::LLScreenChannel::getStartUpToastShown())
@@ -140,7 +141,7 @@ void LLNotificationWellWindow::clearScreenChannels()
 	}
 }
 
-void LLNotificationWellWindow::onStoreToast(LLPanel* info_panel, LLUUID id)
+void LLLegacyNotificationWellWindow::onStoreToast(LLPanel* info_panel, LLUUID id)
 {
 	LLSysWellItem::Params p;
 	p.notification_id = id;
@@ -148,13 +149,13 @@ void LLNotificationWellWindow::onStoreToast(LLPanel* info_panel, LLUUID id)
 	addItem(p);
 }
 
-void LLNotificationWellWindow::onItemClick(LLSysWellItem* item)
+void LLLegacyNotificationWellWindow::onItemClick(LLSysWellItem* item)
 {
 	LLUUID id = item->getID();
 	LLFloaterReg::showInstance("inspect_toast", id);
 }
 
-void LLNotificationWellWindow::onItemClose(LLSysWellItem* item)
+void LLLegacyNotificationWellWindow::onItemClose(LLSysWellItem* item)
 {
 	LLUUID id = item->getID();
 	
@@ -171,7 +172,7 @@ void LLNotificationWellWindow::onItemClose(LLSysWellItem* item)
 	
 }
 
-void LLNotificationWellWindow::onAdd( LLNotificationPtr notify )
+void LLLegacyNotificationWellWindow::onAdd( LLNotificationPtr notify )
 {
 	removeItemByID(notify->getID());
 }
diff --git a/indra/newview/lllegacynotificationwellwindow.h b/indra/newview/lllegacynotificationwellwindow.h
index 32f2597a0b5..fae0cd94a89 100644
--- a/indra/newview/lllegacynotificationwellwindow.h
+++ b/indra/newview/lllegacynotificationwellwindow.h
@@ -33,11 +33,11 @@
 
 class LLPanel;
 
-class LLNotificationWellWindow : public LLSysWellWindow
+class LLLegacyNotificationWellWindow : public LLSysWellWindow
 {
 public:
-	LLNotificationWellWindow(const LLSD& key);
-	static LLNotificationWellWindow* getInstance(const LLSD& key = LLSD());
+	LLLegacyNotificationWellWindow(const LLSD& key);
+	static LLLegacyNotificationWellWindow* getInstance(const LLSD& key = LLSD());
 	
 	BOOL postBuild() override;
 	void setVisible(BOOL visible) override;
@@ -51,13 +51,13 @@ class LLNotificationWellWindow : public LLSysWellWindow
 protected:
 	struct WellNotificationChannel : public LLNotificationChannel
 	{
-		WellNotificationChannel(LLNotificationWellWindow*);
+		WellNotificationChannel(LLLegacyNotificationWellWindow*);
 		void onDelete(LLNotificationPtr notify)
 		{
 			mWellWindow->removeItemByID(notify->getID());
 		}
 		
-		LLNotificationWellWindow* mWellWindow;
+		LLLegacyNotificationWellWindow* mWellWindow;
 	};
 	
 	LLNotificationChannelPtr mNotificationUpdates;
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index ae91fc4c93f..6cc3f7e73c0 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -443,7 +443,7 @@ void LLViewerFloaterReg::registerFloaters()
 	LLFloaterReg::add("delete_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterDeleteQueue>);
 	LLFloaterReg::add("generic_text", "floater_generic_text.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterGenericText>);
     LLFloaterReg::add("legacy_profile", "floater_profile_legacy.xml", (LLFloaterBuildFunc) &LLFloaterReg::build<LLFloaterProfileLegacy>);
-	LLFloaterReg::add("legacy_notification_well_window", "floater_sys_well.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLNotificationWellWindow>);
+	LLFloaterReg::add("legacy_notification_well_window", "floater_legacy_sys_well.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLLegacyNotificationWellWindow>);
 	LLFloaterReg::add("lightbox", "floater_lightbox_settings.xml", (LLFloaterBuildFunc) &LLFloaterReg::build<ALFloaterLightBox>);
 	LLFloaterReg::add("message_builder", "floater_message_builder.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMessageBuilder>);
 	LLFloaterReg::add("message_log", "floater_message_log.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMessageLog>);
diff --git a/indra/newview/skins/default/xui/en/floater_legacy_sys_well.xml b/indra/newview/skins/default/xui/en/floater_legacy_sys_well.xml
new file mode 100644
index 00000000000..dad3d813cde
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_legacy_sys_well.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater
+ legacy_header_height="18"
+ bevel_style="in"
+ layout="topleft"
+ name="legacy_sys_well_window"
+ help_topic="notification_chiclet"
+ save_rect="true"
+ title="NOTIFICATIONS"
+ width="320"
+ min_width="320"
+ height="23"
+ can_minimize="false"
+ can_tear_off="false"
+ can_resize="true"
+ can_drag_on_left="false"
+ can_dock="true"
+ save_dock_state="true"
+ save_visibility="true"
+ single_instance="true"
+>
+    <string
+     name="title_im_well_window">
+        CONVERSATIONS
+    </string>
+	<string
+     name="title_notification_well_window">
+		NOTIFICATIONS
+	</string>
+
+    <flat_list_view
+	    color="FloaterDefaultBackgroundColor"
+	    follows="all"
+	    layout="topleft"
+	    name="notification_list"
+	    left="1"
+	    top="20"
+	    height="0"
+	    width="318"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/en/panel_chiclet_bar.xml b/indra/newview/skins/default/xui/en/panel_chiclet_bar.xml
index fc321fdd235..a6051b6ae37 100644
--- a/indra/newview/skins/default/xui/en/panel_chiclet_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_chiclet_bar.xml
@@ -115,7 +115,7 @@
                  name="Unread"
                  tool_tip="Notifications"
                  width="34">
-          <init_callback
+          <button.init_callback
                      function="Button.SetDockableFloaterToggle"
                      parameter="notification_well_window" />
         </button>
diff --git a/indra/newview/skins/heretic/xui/en/panel_chiclet_bar.xml b/indra/newview/skins/heretic/xui/en/panel_chiclet_bar.xml
new file mode 100644
index 00000000000..e0a773ee302
--- /dev/null
+++ b/indra/newview/skins/heretic/xui/en/panel_chiclet_bar.xml
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="false"
+ chrome="true"
+ follows="left|top|right"
+ height="30"
+ layout="topleft"
+ mouse_opaque="false"
+ name="chiclet_bar"
+ width="1310">
+  <layout_stack
+     border_size="0"
+     clip="false"
+     follows="all"
+     height="30"
+     layout="topleft"
+     left="0"
+     mouse_opaque="false"
+     name="toolbar_stack"
+     orientation="horizontal"
+     top="0"
+     width="1310">
+        <layout_panel
+         follows="left|right"
+         height="30"
+         layout="topleft"
+         min_width="95"
+         mouse_opaque="false"
+         name="chiclet_list_panel"
+         auto_resize="true"
+         top="0"
+         width="189">
+      <chiclet_panel
+             chiclet_padding="4"
+             follows="left|right"
+             height="24"
+             layout="topleft"
+             left="1"
+             min_width="95"
+             mouse_opaque="false"
+             name="chiclet_list"
+             top="7"
+             width="189">
+        <button
+                 auto_resize="false"
+                 follows="right"
+                 height="29"
+                 image_hover_selected="SegmentedBtn_Left_Over"
+                 image_hover_unselected="SegmentedBtn_Left_Over"
+                 image_overlay="Arrow_Small_Left"
+                 image_pressed="SegmentedBtn_Left_Press"
+                 image_pressed_selected="SegmentedBtn_Left_Press"
+                 image_selected="SegmentedBtn_Left_Off"
+                 image_unselected="SegmentedBtn_Left_Off"
+                 layout="topleft"
+                 name="chicklet_left_scroll_button"
+                 tab_stop="false"
+                 top="-28"
+                 visible="false"
+                 width="12" />
+        <button
+                 auto_resize="false"
+                 follows="right"
+                 height="29"
+                 image_hover_selected="SegmentedBtn_Right_Over"
+                 image_hover_unselected="SegmentedBtn_Right_Over"
+                 image_overlay="Arrow_Small_Right"
+                 image_pressed="SegmentedBtn_Right_Press"
+                 image_pressed_selected="SegmentedBtn_Right_Press"
+                 image_selected="SegmentedBtn_Right_Off"
+                 image_unselected="SegmentedBtn_Right_Off"
+                 layout="topleft"
+                 name="chicklet_right_scroll_button"
+                 tab_stop="false"
+                 top="-28"
+                 visible="false"
+                 width="12" />
+      </chiclet_panel>
+    </layout_panel>
+    <layout_panel auto_resize="false"
+                      width="4"
+                      min_width="4"/>
+    <layout_panel
+         auto_resize="false"
+         follows="right"
+         height="28"
+         layout="topleft"
+         min_height="28"
+         min_width="37"
+         name="notification_well_panel"
+         top="0"
+         width="37">
+      <chiclet_notification
+             follows="right"
+             height="23"
+             layout="topleft"
+             left="0"
+             max_displayed_count="99"
+             name="notification_well"
+             top="5"
+             width="35">
+        <button
+                 auto_resize="false"
+                 bottom_pad="3"
+                 follows="right"
+                 halign="center"
+                 height="23"
+                 image_overlay="Notices_Unread"
+                 image_overlay_alignment="center"
+                 image_pressed="WellButton_Lit"
+                 image_pressed_selected="WellButton_Lit_Selected"
+                 image_selected="PushButton_Press"
+                 label_color="Black"
+                 left="0"
+                 name="Unread"
+                 tool_tip="Notifications"
+                 width="34">
+          <button.init_callback
+                     function="Button.SetDockableFloaterToggle"
+                     parameter="legacy_notification_well_window" />
+        </button>
+      </chiclet_notification>
+    </layout_panel>
+  </layout_stack>
+</panel>
diff --git a/indra/newview/skins/heretic/xui/en/panel_toolbar_view.xml b/indra/newview/skins/heretic/xui/en/panel_toolbar_view.xml
new file mode 100644
index 00000000000..9f9ae71beb4
--- /dev/null
+++ b/indra/newview/skins/heretic/xui/en/panel_toolbar_view.xml
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toolbar_view
+ follows="all"
+ layout="topleft"
+ name="toolbar view"
+ height="500"
+ width="1024"
+ left="0"
+ top="0" 
+ mouse_opaque="false"
+ tab_stop="false"
+ visible="true">
+  <layout_stack name="bottom_toolbar_stack"
+                orientation="vertical"
+                left="0"
+                top="0"
+                width="1024"
+                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="transparent.j2c"
+             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"
+                height="500"
+                mouse_opaque="false">
+    <layout_stack name="vertical_toolbar_stack"
+                  orientation="horizontal"
+                  left="0"
+                  top="0"
+                  width="1024"
+                  height="500"
+                  follows="all"
+                  mouse_opaque="false">
+      <layout_panel name="left_toolbar_panel"
+                    auto_resize="false"
+                    height="500"
+                    width="30"
+                    mouse_opaque="false">
+        <toolbar follows="left|top|bottom"
+                 button_panel.bg_opaque_image="transparent.j2c"
+                 name="toolbar_left"
+                 width="30"
+                 left="0"
+                 top="10"
+                 bottom="-10"
+                 side="left"
+                 button_display_mode="icons_only">
+	             <icon layout="topleft"
+	                   height="15"
+	                   width="28"
+	                   follows="left|top"
+	                   top="20"
+	                   left="10"
+	                   tab_stop="false" 
+                       visible="false"
+	                   image_name="Caret_Left_Icon"
+                       name="caret" />
+        </toolbar>
+      </layout_panel>
+      <layout_panel name="non_toolbar_panel"
+                    auto_resize="true"
+                    mouse_opaque="false"
+                    height="100"
+                    width="200">
+        <view top="0"
+              follows="all"
+              height="100"
+              left="0"
+              mouse_opaque="false"
+              name="floater_snap_region"
+              width="200"/>
+        <view top="0"
+              follows="left|top|bottom"
+              height="100"
+              left="0"
+              mouse_opaque="false"
+              name="minimized_floaters_region"
+              width="160"/>
+        <panel follows="left|top|right"
+               layout="topleft"
+               height="30"
+               left_pad="10"
+               mouse_opaque="false"
+               name="chiclet_container"
+               tab_stop="false"
+               top="0"
+               bg_visible="false"
+               width="20">
+        </panel>          
+        <panel bottom="100"
+               follows="left|right|bottom"
+               height="25"
+               left="0"
+               mouse_opaque="false"
+               tab_stop="false"
+               name="state_management_buttons_container"
+               visible="false"
+               width="200"/>
+      </layout_panel>
+       <layout_panel name="right_toolbar_panel"
+                    auto_resize="false"
+                    height="500"
+                    width="30"
+                    mouse_opaque="false">
+        <toolbar
+          button_panel.bg_opaque_image="transparent.j2c"
+          follows="right|top|bottom"
+          name="toolbar_right"
+          width="30"
+          left="0"
+          top="10"
+          bottom="-10"
+          side="right"
+          button_display_mode="icons_only">
+	      <icon layout="topleft"
+	            height="15"
+	            width="28"
+	            follows="left|top"
+	            top="20"
+	            left="10"
+	            tab_stop="false" 
+                visible="false"
+	            image_name="Caret_Right_Icon"
+	            name="caret" />
+        </toolbar>
+      </layout_panel>
+    </layout_stack>
+  </layout_panel>
+  <layout_panel name="bottom_toolbar_panel"
+                auto_resize="false"
+                height="30"
+                width="1024"
+                mouse_opaque="false">
+    <toolbar layout="topleft"
+             button_panel.bg_opaque_image="transparent.j2c"
+             name="toolbar_bottom"
+             height="30"
+             left="40"
+             right="-40"
+             top="0"
+             side="bottom"
+             follows="left|right|bottom"
+             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_Bottom_Icon"
+	            name="caret" />
+    </toolbar>
+  </layout_panel>
+  </layout_stack>
+</toolbar_view>
-- 
GitLab