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