From e5d6a14f05f857ecbbbd9b464db3ece82d1d099f Mon Sep 17 00:00:00 2001
From: pavelk_productengine <none@none>
Date: Fri, 9 Jan 2015 20:17:39 +0200
Subject: [PATCH] MAINT-4734 (Separate transaction notices from group
 notice/invites) - initial version Works: 1) All new notices shown on
 "Invites" tab of new floater "NOTIFICATIONS TABBED" in condensed view To be
 done: 1) Show other types of notices, like transactions and system 2)
 Separate notices between tabs "Invites", "System", "Transactions" 3) Design
 full notice view (in addition to condensed view)

---
 indra/newview/CMakeLists.txt                  |   2 +
 indra/newview/llchannelmanager.cpp            |   4 +-
 indra/newview/llchiclet.cpp                   |  10 +-
 indra/newview/llchicletbar.cpp                |   4 +-
 .../newview/llfloaternotificationstabbed.cpp  | 377 ++++++++++++++++++
 indra/newview/llfloaternotificationstabbed.h  | 143 +++++++
 indra/newview/llsyswellitem.cpp               |  80 ++++
 indra/newview/llsyswellitem.h                 |  54 +++
 indra/newview/llviewerfloaterreg.cpp          |   6 +-
 .../textures/icons/Icon_Attachment_Large.png  | Bin 0 -> 4182 bytes
 .../textures/icons/Icon_Attachment_Small.png  | Bin 0 -> 3774 bytes
 .../textures/icons/Icon_Group_Large.png       | Bin 0 -> 12280 bytes
 .../textures/icons/Icon_Group_Small.png       | Bin 0 -> 4473 bytes
 .../icons/Icon_Notification_Condense.png      | Bin 0 -> 262 bytes
 .../icons/Icon_Notification_Expand.png        | Bin 0 -> 239 bytes
 .../skins/default/textures/textures.xml       |   7 +
 .../xui/en/floater_notifications_tabbed.xml   | 134 +++++++
 .../default/xui/en/language_settings.xml      |   2 +-
 .../skins/default/xui/en/menu_login.xml       |   2 +-
 .../xui/en/panel_notification_tabbed_item.xml |  53 +++
 20 files changed, 870 insertions(+), 8 deletions(-)
 create mode 100644 indra/newview/llfloaternotificationstabbed.cpp
 create mode 100644 indra/newview/llfloaternotificationstabbed.h
 create mode 100644 indra/newview/skins/default/textures/icons/Icon_Attachment_Large.png
 create mode 100644 indra/newview/skins/default/textures/icons/Icon_Attachment_Small.png
 create mode 100644 indra/newview/skins/default/textures/icons/Icon_Group_Large.png
 create mode 100644 indra/newview/skins/default/textures/icons/Icon_Group_Small.png
 create mode 100644 indra/newview/skins/default/textures/icons/Icon_Notification_Condense.png
 create mode 100644 indra/newview/skins/default/textures/icons/Icon_Notification_Expand.png
 create mode 100644 indra/newview/skins/default/xui/en/floater_notifications_tabbed.xml
 create mode 100644 indra/newview/skins/default/xui/en/panel_notification_tabbed_item.xml

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index e8f4144e70d..b17811d6448 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -262,6 +262,7 @@ set(viewer_SOURCE_FILES
     llfloatermodeluploadbase.cpp
     llfloaternamedesc.cpp
     llfloaternotificationsconsole.cpp
+    llfloaternotificationstabbed.cpp 
     llfloaterobjectweights.cpp
     llfloateropenobject.cpp
     llfloateroutbox.cpp
@@ -870,6 +871,7 @@ set(viewer_HEADER_FILES
     llfloatermodeluploadbase.h
     llfloaternamedesc.h
     llfloaternotificationsconsole.h
+    llfloaternotificationstabbed.h 
     llfloaterobjectweights.h
     llfloateropenobject.h
     llfloateroutbox.h
diff --git a/indra/newview/llchannelmanager.cpp b/indra/newview/llchannelmanager.cpp
index b0537a83f16..49a71b0018a 100755
--- a/indra/newview/llchannelmanager.cpp
+++ b/indra/newview/llchannelmanager.cpp
@@ -35,6 +35,7 @@
 #include "llviewerwindow.h"
 #include "llrootview.h"
 #include "llsyswellwindow.h"
+#include "llfloaternotificationstabbed.h"
 #include "llfloaterreg.h"
 
 #include <algorithm>
@@ -131,7 +132,8 @@ 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(&LLNotificationWellWindow::onStartUpToastClick, LLNotificationWellWindow::getInstance(), _2, _3, _4));
+			//mStartUpChannel->setMouseDownCallback(boost::bind(&LLNotificationWellWindow::onStartUpToastClick, LLNotificationWellWindow::getInstance(), _2, _3, _4));
+            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 c0823182c04..6435c934b98 100755
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -35,6 +35,7 @@
 #include "llscriptfloater.h"
 #include "llsingleton.h"
 #include "llsyswellwindow.h"
+#include "llfloaternotificationstabbed.h"
 
 static LLDefaultChildRegistry::Register<LLChicletPanel> t1("chiclet_panel");
 static LLDefaultChildRegistry::Register<LLNotificationChiclet> t2("chiclet_notification");
@@ -165,7 +166,8 @@ LLNotificationChiclet::LLNotificationChiclet(const Params& p)
 	mNotificationChannel.reset(new ChicletNotificationChannel(this));
 	// ensure that notification well window exists, to synchronously
 	// handle toast add/delete events.
-	LLNotificationWellWindow::getInstance()->setSysWellChiclet(this);
+	//LLNotificationWellWindow::getInstance()->setSysWellChiclet(this);
+    LLFloaterNotificationsTabbed::getInstance()->setSysWellChiclet(this);
 }
 
 void LLNotificationChiclet::onMenuItemClicked(const LLSD& user_data)
@@ -173,7 +175,8 @@ void LLNotificationChiclet::onMenuItemClicked(const LLSD& user_data)
 	std::string action = user_data.asString();
 	if("close all" == action)
 	{
-		LLNotificationWellWindow::getInstance()->closeAll();
+		//LLNotificationWellWindow::getInstance()->closeAll();
+        LLFloaterNotificationsTabbed::getInstance()->closeAll();
 		LLIMWellWindow::getInstance()->closeAll();
 	}
 }
@@ -224,7 +227,8 @@ 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()))
+		//|| (!LLNotificationWellWindow::getInstance()->findItemByID(notification->getID()))
+        || (!LLFloaterNotificationsTabbed::getInstance()->findItemByID(notification->getID()))
 		)
 	{
 		displayNotification = false;
diff --git a/indra/newview/llchicletbar.cpp b/indra/newview/llchicletbar.cpp
index 28e367fbe1a..45510d08243 100755
--- a/indra/newview/llchicletbar.cpp
+++ b/indra/newview/llchicletbar.cpp
@@ -31,6 +31,7 @@
 #include "lllayoutstack.h"
 #include "llpaneltopinfobar.h"
 #include "llsyswellwindow.h"
+#include "llfloaternotificationstabbed.h"
 
 namespace
 {
@@ -59,7 +60,8 @@ BOOL LLChicletBar::postBuild()
 	mToolbarStack = getChild<LLLayoutStack>("toolbar_stack");
 	mChicletPanel = getChild<LLChicletPanel>("chiclet_list");
 
-	showWellButton("notification_well", !LLNotificationWellWindow::getInstance()->isWindowEmpty());
+	//showWellButton("notification_well", !LLNotificationWellWindow::getInstance()->isWindowEmpty());
+    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/llfloaternotificationstabbed.cpp b/indra/newview/llfloaternotificationstabbed.cpp
new file mode 100644
index 00000000000..09f0a0ed5e0
--- /dev/null
+++ b/indra/newview/llfloaternotificationstabbed.cpp
@@ -0,0 +1,377 @@
+/** 
+ * @file llfloaternotificationstabbed.cpp
+ * @brief                                    // TODO
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h" // must be first include
+#include "llfloaternotificationstabbed.h"
+
+#include "llchiclet.h"
+#include "llchicletbar.h"
+#include "llflatlistview.h"
+#include "llfloaterreg.h"
+#include "llnotificationmanager.h"
+#include "llnotificationsutil.h"
+#include "llscriptfloater.h"
+#include "llspeakers.h"
+#include "lltoastpanel.h"
+#include "lltoastnotifypanel.h"
+
+//---------------------------------------------------------------------------------
+LLFloaterNotificationsTabbed::LLFloaterNotificationsTabbed(const LLSD& key) : LLTransientDockableFloater(NULL, true,  key),
+    mChannel(NULL),
+    mMessageList(NULL),
+    mSysWellChiclet(NULL),
+    NOTIFICATION_TABBED_ANCHOR_NAME("notification_well_panel"),
+    IM_WELL_ANCHOR_NAME("im_well_panel"),
+    mIsReshapedByUser(false)
+
+{
+	setOverlapsScreenChannel(true);
+    mNotificationUpdates.reset(new NotificationTabbedChannel(this));
+}
+
+//---------------------------------------------------------------------------------
+BOOL LLFloaterNotificationsTabbed::postBuild()
+{
+    mMessageList = getChild<LLFlatListView>("notification_list");
+
+    // get a corresponding channel
+    initChannel();
+    BOOL rv = LLTransientDockableFloater::postBuild();
+    
+    //LLNotificationWellWindow::postBuild()
+    //--------------------------
+    setTitle(getString("title_notification_tabbed_window"));
+	return rv;
+}
+
+//---------------------------------------------------------------------------------
+void LLFloaterNotificationsTabbed::setMinimized(BOOL minimize)
+{
+    LLTransientDockableFloater::setMinimized(minimize);
+}
+
+//---------------------------------------------------------------------------------
+void LLFloaterNotificationsTabbed::handleReshape(const LLRect& rect, bool by_user)
+{
+    mIsReshapedByUser |= by_user; // mark floater that it is reshaped by user
+    LLTransientDockableFloater::handleReshape(rect, by_user);
+}
+
+//---------------------------------------------------------------------------------
+void LLFloaterNotificationsTabbed::onStartUpToastClick(S32 x, S32 y, MASK mask)
+{
+    // just set floater visible. Screen channels will be cleared.
+    setVisible(TRUE);
+}
+
+void LLFloaterNotificationsTabbed::setSysWellChiclet(LLSysWellChiclet* chiclet) 
+{ 
+    mSysWellChiclet = chiclet;
+    if(NULL != mSysWellChiclet)
+    {
+        mSysWellChiclet->updateWidget(isWindowEmpty());
+    }
+}
+
+//---------------------------------------------------------------------------------
+LLFloaterNotificationsTabbed::~LLFloaterNotificationsTabbed()
+{
+}
+
+//---------------------------------------------------------------------------------
+void LLFloaterNotificationsTabbed::removeItemByID(const LLUUID& id)
+{
+    if(mMessageList->removeItemByValue(id))
+    {
+        if (NULL != mSysWellChiclet)
+        {
+            mSysWellChiclet->updateWidget(isWindowEmpty());
+        }
+        reshapeWindow();
+    }
+    else
+    {
+        LL_WARNS() << "Unable to remove notification from the list, ID: " << id
+            << LL_ENDL;
+    }
+
+    // hide chiclet window if there are no items left
+    if(isWindowEmpty())
+    {
+        setVisible(FALSE);
+    }
+}
+
+//---------------------------------------------------------------------------------
+LLPanel * LLFloaterNotificationsTabbed::findItemByID(const LLUUID& id)
+{
+    return mMessageList->getItemByValue(id);
+}
+
+//---------------------------------------------------------------------------------
+void LLFloaterNotificationsTabbed::initChannel() 
+{
+    LLNotificationsUI::LLScreenChannelBase* channel = LLNotificationsUI::LLChannelManager::getInstance()->findChannelByID(
+        LLUUID(gSavedSettings.getString("NotificationChannelUUID")));
+    mChannel = dynamic_cast<LLNotificationsUI::LLScreenChannel*>(channel);
+    if(NULL == mChannel)
+    {
+        LL_WARNS() << "LLSysWellWindow::initChannel() - could not get a requested screen channel" << LL_ENDL;
+    }
+
+    //LLSysWellWindow::initChannel();
+    //---------------------------------------------------------------------------------
+    if(mChannel)
+    {
+        mChannel->addOnStoreToastCallback(boost::bind(&LLFloaterNotificationsTabbed::onStoreToast, this, _1, _2));
+    }
+}
+
+//---------------------------------------------------------------------------------
+void LLFloaterNotificationsTabbed::setVisible(BOOL visible)
+{
+    //LLNotificationWellWindow::setVisible
+    //--------------------------
+    if (visible)
+    {
+        // when Notification channel is cleared, storable toasts will be added into the list.
+        clearScreenChannels();
+    }
+    //--------------------------
+    if (visible)
+    {
+        if (NULL == getDockControl() && getDockTongue().notNull())
+        {
+            setDockControl(new LLDockControl(
+                LLChicletBar::getInstance()->getChild<LLView>(getAnchorViewName()), this,
+                getDockTongue(), LLDockControl::BOTTOM));
+        }
+    }
+
+    // do not show empty window
+    if (NULL == mMessageList || isWindowEmpty()) visible = FALSE;
+
+    LLTransientDockableFloater::setVisible(visible);
+
+    // update notification channel state	
+    initChannel(); // make sure the channel still exists
+    if(mChannel)
+    {
+        mChannel->updateShowToastsState();
+        mChannel->redrawToasts();
+    }
+}
+
+//---------------------------------------------------------------------------------
+void LLFloaterNotificationsTabbed::setDocked(bool docked, bool pop_on_undock)
+{
+    LLTransientDockableFloater::setDocked(docked, pop_on_undock);
+
+    // update notification channel state
+    if(mChannel)
+    {
+        mChannel->updateShowToastsState();
+        mChannel->redrawToasts();
+    }
+}
+
+//---------------------------------------------------------------------------------
+void LLFloaterNotificationsTabbed::reshapeWindow()
+{
+    // save difference between floater height and the list height to take it into account while calculating new window height
+    // it includes height from floater top to list top and from floater bottom and list bottom
+    static S32 parent_list_delta_height = getRect().getHeight() - mMessageList->getRect().getHeight();
+
+    if (!mIsReshapedByUser) // Don't reshape Well window, if it ever was reshaped by user. See EXT-5715.
+    {
+        S32 notif_list_height = mMessageList->getItemsRect().getHeight() + 2 * mMessageList->getBorderWidth();
+
+        LLRect curRect = getRect();
+
+        S32 new_window_height = notif_list_height + parent_list_delta_height;
+
+        if (new_window_height > MAX_WINDOW_HEIGHT)
+        {
+            new_window_height = MAX_WINDOW_HEIGHT;
+        }
+        S32 newWidth = curRect.getWidth() < MIN_WINDOW_WIDTH ? MIN_WINDOW_WIDTH	: curRect.getWidth();
+
+        curRect.setLeftTopAndSize(curRect.mLeft, curRect.mTop, newWidth, new_window_height);
+        reshape(curRect.getWidth(), curRect.getHeight(), TRUE);
+        setRect(curRect);
+    }
+
+    // update notification channel state
+    // update on a window reshape is important only when a window is visible and docked
+    if(mChannel && getVisible() && isDocked())
+    {
+        mChannel->updateShowToastsState();
+    }
+}
+
+//---------------------------------------------------------------------------------
+bool LLFloaterNotificationsTabbed::isWindowEmpty()
+{
+    return mMessageList->size() == 0;
+}
+
+LLFloaterNotificationsTabbed::NotificationTabbedChannel::NotificationTabbedChannel(LLFloaterNotificationsTabbed* notifications_tabbed_window)
+    :	LLNotificationChannel(LLNotificationChannel::Params().name(notifications_tabbed_window->getPathname())),
+    mNotificationsTabbedWindow(notifications_tabbed_window)
+{
+    connectToChannel("Notifications");
+    connectToChannel("Group Notifications");
+    connectToChannel("Offer");
+}
+
+/*
+LLFloaterNotificationsTabbed::LLNotificationWellWindow(const LLSD& key)
+    :	LLSysWellWindow(key)
+{
+    mNotificationUpdates.reset(new NotificationTabbedChannel(this));
+}
+*/
+
+// static
+LLFloaterNotificationsTabbed* LLFloaterNotificationsTabbed::getInstance(const LLSD& key /*= LLSD()*/)
+{
+    return LLFloaterReg::getTypedInstance<LLFloaterNotificationsTabbed>("notification_well_window", key);
+}
+
+//---------------------------------------------------------------------------------
+void LLFloaterNotificationsTabbed::addItem(LLNotificationTabbedItem::Params p)
+{
+    LLSD value = p.notification_id;
+    // do not add clones
+    if( mMessageList->getItemByValue(value))
+        return;
+
+    LLNotificationTabbedItem* new_item = new LLNotificationTabbedItem(p);
+    if (mMessageList->addItem(new_item, value, ADD_TOP))
+    {
+        mSysWellChiclet->updateWidget(isWindowEmpty());
+        reshapeWindow();
+        new_item->setOnItemCloseCallback(boost::bind(&LLFloaterNotificationsTabbed::onItemClose, this, _1));
+        new_item->setOnItemClickCallback(boost::bind(&LLFloaterNotificationsTabbed::onItemClick, this, _1));
+    }
+    else
+    {
+        LL_WARNS() << "Unable to add Notification into the list, notification ID: " << p.notification_id
+            << ", title: " << p.title
+            << LL_ENDL;
+
+        new_item->die();
+    }
+}
+
+//---------------------------------------------------------------------------------
+void LLFloaterNotificationsTabbed::closeAll()
+{
+    // Need to clear notification channel, to add storable toasts into the list.
+    clearScreenChannels();
+    std::vector<LLPanel*> items;
+    mMessageList->getItems(items);
+    for (std::vector<LLPanel*>::iterator
+        iter = items.begin(),
+        iter_end = items.end();
+    iter != iter_end; ++iter)
+    {
+        LLNotificationTabbedItem* sys_well_item = dynamic_cast<LLNotificationTabbedItem*>(*iter);
+        if (sys_well_item)
+            onItemClose(sys_well_item);
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////
+// PRIVATE METHODS
+//void LLFloaterNotificationsTabbed::initChannel() 
+//{
+//    LLFloaterNotificationsTabbed::initChannel();
+//    if(mChannel)
+//    {
+//        mChannel->addOnStoreToastCallback(boost::bind(&LLFloaterNotificationsTabbed::onStoreToast, this, _1, _2));
+//    }
+//}
+
+//---------------------------------------------------------------------------------
+void LLFloaterNotificationsTabbed::clearScreenChannels()
+{
+    // 1 - remove StartUp toast and channel if present
+    if(!LLNotificationsUI::LLScreenChannel::getStartUpToastShown())
+    {
+        LLNotificationsUI::LLChannelManager::getInstance()->onStartUpToastClose();
+    }
+
+    // 2 - remove toasts in Notification channel
+    if(mChannel)
+    {
+        mChannel->removeAndStoreAllStorableToasts();
+    }
+}
+
+//---------------------------------------------------------------------------------
+void LLFloaterNotificationsTabbed::onStoreToast(LLPanel* info_panel, LLUUID id)
+{
+    LLNotificationTabbedItem::Params p;	
+    p.notification_id = id;
+    p.title = static_cast<LLToastPanel*>(info_panel)->getTitle();
+    LLNotificationsUI::LLToast* toast = mChannel->getToastByNotificationID(id);
+    LLSD payload = toast->getNotification()->getPayload();
+    LLDate time_stamp = toast->getNotification()->getDate();
+    p.group_id = payload["group_id"];
+    p.sender = payload["name"];
+    p.time_stamp = time_stamp;
+    addItem(p);
+}
+
+//---------------------------------------------------------------------------------
+void LLFloaterNotificationsTabbed::onItemClick(LLNotificationTabbedItem* item)
+{
+    LLUUID id = item->getID();
+    LLFloaterReg::showInstance("inspect_toast", id);
+}
+
+//---------------------------------------------------------------------------------
+void LLFloaterNotificationsTabbed::onItemClose(LLNotificationTabbedItem* item)
+{
+    LLUUID id = item->getID();
+
+    if(mChannel)
+    {
+        // removeItemByID() is invoked from killToastByNotificationID() and item will removed;
+        mChannel->killToastByNotificationID(id);
+    }
+    else
+    {
+        // removeItemByID() should be called one time for each item to remove it from notification well
+        removeItemByID(id);
+    }
+
+}
+
+void LLFloaterNotificationsTabbed::onAdd( LLNotificationPtr notify )
+{
+    removeItemByID(notify->getID());
+}
diff --git a/indra/newview/llfloaternotificationstabbed.h b/indra/newview/llfloaternotificationstabbed.h
new file mode 100644
index 00000000000..1fd60826cbb
--- /dev/null
+++ b/indra/newview/llfloaternotificationstabbed.h
@@ -0,0 +1,143 @@
+/** 
+ * @file llfloaternotificationstabbed.h
+ * @brief                                    // TODO
+ *
+ * $LicenseInfo:firstyear=2003&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_FLOATERNOTIFICATIONSTABBED_H
+#define LL_FLOATERNOTIFICATIONSTABBED_H
+
+#include "llimview.h"
+#include "llnotifications.h"
+#include "llscreenchannel.h"
+#include "llsyswellitem.h"
+#include "lltransientdockablefloater.h"
+
+class LLAvatarName;
+class LLChiclet;
+class LLFlatListView;
+class LLIMChiclet;
+class LLScriptChiclet;
+class LLSysWellChiclet;
+
+class LLFloaterNotificationsTabbed : public LLTransientDockableFloater
+{
+public:
+	LOG_CLASS(LLFloaterNotificationsTabbed);
+
+    LLFloaterNotificationsTabbed(const LLSD& key);
+    virtual ~LLFloaterNotificationsTabbed();
+	BOOL postBuild();
+
+    // other interface functions
+    // check is window empty
+    bool isWindowEmpty();
+
+    // Operating with items
+    void removeItemByID(const LLUUID& id);
+    LLPanel * findItemByID(const LLUUID& id);
+
+    // Operating with outfit
+    virtual void setVisible(BOOL visible);
+    void adjustWindowPosition();//not used - ?
+
+    /*virtual*/ void	setDocked(bool docked, bool pop_on_undock = true);
+    // override LLFloater's minimization according to EXT-1216
+    /*virtual*/ void	setMinimized(BOOL minimize);
+    /*virtual*/ void	handleReshape(const LLRect& rect, bool by_user);
+
+    void onStartUpToastClick(S32 x, S32 y, MASK mask);
+
+    void setSysWellChiclet(LLSysWellChiclet* chiclet);
+
+    // size constants for the window and for its elements
+    static const S32 MAX_WINDOW_HEIGHT		= 200;
+    static const S32 MIN_WINDOW_WIDTH		= 318;
+
+protected:
+    // init Window's channel
+    virtual void initChannel();
+
+    const std::string NOTIFICATION_TABBED_ANCHOR_NAME;
+    const std::string IM_WELL_ANCHOR_NAME;
+    //virtual const std::string& getAnchorViewName() = 0;
+
+    void reshapeWindow();
+
+    // pointer to a corresponding channel's instance
+    LLNotificationsUI::LLScreenChannel*	mChannel;
+    LLFlatListView*	mMessageList;
+
+    /**
+	 * Reference to an appropriate Well chiclet to release "new message" state. EXT-3147
+	 */
+	LLSysWellChiclet* mSysWellChiclet;
+
+    bool mIsReshapedByUser;
+
+public:
+    static LLFloaterNotificationsTabbed* getInstance(const LLSD& key = LLSD());
+
+    /*virtual*/ //BOOL postBuild();
+    /*virtual*/ //void setVisible(BOOL visible);
+    /*virtual*/ void onAdd(LLNotificationPtr notify);
+    // Operating with items
+    void addItem(LLNotificationTabbedItem::Params p);
+
+    // Closes all notifications and removes them from the Notification Well
+    void closeAll();
+
+protected:
+    struct NotificationTabbedChannel : public LLNotificationChannel
+    {
+        NotificationTabbedChannel(LLFloaterNotificationsTabbed*);
+        void onDelete(LLNotificationPtr notify)
+        {
+            mNotificationsTabbedWindow->removeItemByID(notify->getID());
+        } 
+
+        LLFloaterNotificationsTabbed* mNotificationsTabbedWindow;
+    };
+
+    LLNotificationChannelPtr mNotificationUpdates;
+    virtual const std::string& getAnchorViewName() { return NOTIFICATION_TABBED_ANCHOR_NAME; }
+
+private:
+    // init Window's channel
+    // void initChannel();
+    void clearScreenChannels();
+
+    void onStoreToast(LLPanel* info_panel, LLUUID id);
+
+    // Handlers
+    void onItemClick(LLNotificationTabbedItem* item);
+    void onItemClose(LLNotificationTabbedItem* item);
+
+    // ID of a toast loaded by user (by clicking notification well item)
+    LLUUID mLoadedToastId;
+};
+
+#endif // LL_FLOATERNOTIFICATIONSTABBED_H
+
+
+
diff --git a/indra/newview/llsyswellitem.cpp b/indra/newview/llsyswellitem.cpp
index 057d80457c6..bc8333d5fcd 100755
--- a/indra/newview/llsyswellitem.cpp
+++ b/indra/newview/llsyswellitem.cpp
@@ -31,6 +31,7 @@
 
 #include "llwindow.h"
 #include "v4color.h"
+#include "lltrans.h"
 #include "lluicolortable.h"
 
 //---------------------------------------------------------------------------------
@@ -90,4 +91,83 @@ void LLSysWellItem::onMouseLeave(S32 x, S32 y, MASK mask)
 
 //---------------------------------------------------------------------------------
 
+//---------------------------------------------------------------------------------
+LLNotificationTabbedItem::LLNotificationTabbedItem(const Params& p) : LLPanel(p),
+    mTitle(NULL),
+    mSender(NULL),
+    mCloseBtn(NULL)
+{
+    buildFromFile( "panel_notification_tabbed_item.xml");
+
+    mTitle = getChild<LLTextBox>("GroupName_NoticeTitle");
+    mSender = getChild<LLTextBox>("Sender_Resident");
+    mTimeBox = getChild<LLTextBox>("Time_Box");
+    mGroupIcon = getChild<LLIconCtrl>("group_icon_small");
+    mCloseBtn = getChild<LLButton>("close_btn");
+
+    mTitle->setValue(p.title);
+    mSender->setValue("Sender: " + p.sender);
+    mTimeBox->setValue(buildNotificationDate(p.time_stamp));
+    mGroupIcon->setValue(p.group_id);
+
+    mCloseBtn->setClickedCallback(boost::bind(&LLNotificationTabbedItem::onClickCloseBtn,this));
+
+    mID = p.notification_id;
+}
+
+//---------------------------------------------------------------------------------
+LLNotificationTabbedItem::~LLNotificationTabbedItem()
+{
+}
 
+//---------------------------------------------------------------------------------
+//static
+std::string LLNotificationTabbedItem::buildNotificationDate(const LLDate& time_stamp)
+{
+    std::string timeStr = "[" + LLTrans::getString("LTimeMthNum") + "]/["
+        +LLTrans::getString("LTimeDay")+"]/["
+        +LLTrans::getString("LTimeYear")+"] ["
+        +LLTrans::getString("LTimeHour")+"]:["
+        +LLTrans::getString("LTimeMin")+"]";
+
+    LLSD substitution;
+    substitution["datetime"] = time_stamp;
+    LLStringUtil::format(timeStr, substitution);
+    return timeStr;
+}
+
+//---------------------------------------------------------------------------------
+void LLNotificationTabbedItem::setTitle( std::string title )
+{
+    mTitle->setValue(title);
+}
+
+//---------------------------------------------------------------------------------
+void LLNotificationTabbedItem::onClickCloseBtn()
+{
+    mOnItemClose(this);
+}
+
+//---------------------------------------------------------------------------------
+BOOL LLNotificationTabbedItem::handleMouseDown(S32 x, S32 y, MASK mask)
+{
+    BOOL res = LLPanel::handleMouseDown(x, y, mask);
+    if(!mCloseBtn->getRect().pointInRect(x, y))
+    //if(!mCloseBtn->getRect().pointInRect(x, y))
+    //if(!mCloseBtn->getLocalRect().pointInRect(x, y))
+        mOnItemClick(this);
+
+    return res;
+}
+
+//---------------------------------------------------------------------------------
+void LLNotificationTabbedItem::onMouseEnter(S32 x, S32 y, MASK mask)
+{
+    //setTransparentColor(LLUIColorTable::instance().getColor( "SysWellItemSelected" ));
+}
+
+//---------------------------------------------------------------------------------
+void LLNotificationTabbedItem::onMouseLeave(S32 x, S32 y, MASK mask)
+{
+    //setTransparentColor(LLUIColorTable::instance().getColor( "SysWellItemUnselected" ));
+}
diff --git a/indra/newview/llsyswellitem.h b/indra/newview/llsyswellitem.h
index d961708a01d..4379b8dc224 100755
--- a/indra/newview/llsyswellitem.h
+++ b/indra/newview/llsyswellitem.h
@@ -32,6 +32,8 @@
 #include "llbutton.h"
 #include "lliconctrl.h"
 
+#include "llgroupmgr.h"
+
 #include <string>
 
 class LLSysWellItem : public LLPanel
@@ -76,6 +78,58 @@ class LLSysWellItem : public LLPanel
 	LLUUID		mID;
 };
 
+class LLNotificationTabbedItem : public LLPanel
+{
+public:
+    struct Params :	public LLInitParam::Block<Params, LLPanel::Params>
+    {
+        LLUUID        	notification_id;
+        LLUUID          group_id;
+        std::string		title;
+        std::string		sender;
+        LLDate time_stamp;
+        Params()        {};
+    };
+
+
+    LLNotificationTabbedItem(const Params& p);
+    virtual	~LLNotificationTabbedItem();
+
+    // title
+    void setTitle( std::string title );
+    void setGroupID(const LLUUID& group_id);
+    void setGroupIconID(const LLUUID& group_icon_id);
+    void setGroupName(const std::string& group_name);
+
+    // get item's ID
+    LLUUID getID() { return mID; }
+
+    // handlers
+    virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+    virtual void onMouseEnter(S32 x, S32 y, MASK mask);
+    virtual void onMouseLeave(S32 x, S32 y, MASK mask);
+
+    //callbacks
+    typedef boost::function<void (LLNotificationTabbedItem* item)> item_callback_t;
+    typedef boost::signals2::signal<void (LLNotificationTabbedItem* item)> item_signal_t;
+    item_signal_t mOnItemClose;	
+    item_signal_t mOnItemClick;	
+    boost::signals2::connection setOnItemCloseCallback(item_callback_t cb) { return mOnItemClose.connect(cb); }
+    boost::signals2::connection setOnItemClickCallback(item_callback_t cb) { return mOnItemClick.connect(cb); }
+
+private:
+    static std::string buildNotificationDate(const LLDate&);
+    void onClickCloseBtn();
+
+    LLTextBox*	mTitle;
+    LLTextBox*	mSender;
+    LLTextBox*  mTimeBox;
+    LLIconCtrl* mGroupIcon;
+    LLButton*	mCloseBtn;
+    LLUUID		mID;
+    LLUUID		mGroupID;
+};
+
 #endif // LL_LLSYSWELLITEM_H
 
 
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index e19fe9ca754..d20b8e342a0 100755
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -85,6 +85,7 @@
 #include "llfloatermodelpreview.h"
 #include "llfloaternamedesc.h"
 #include "llfloaternotificationsconsole.h"
+#include "llfloaternotificationstabbed.h"
 #include "llfloaterobjectweights.h"
 #include "llfloateropenobject.h"
 #include "llfloateroutbox.h"
@@ -255,7 +256,10 @@ void LLViewerFloaterReg::registerFloaters()
 	LLFloaterReg::add("mini_map", "floater_map.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMap>);
 
 	LLFloaterReg::add("notifications_console", "floater_notifications_console.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNotificationConsole>);
-	LLFloaterReg::add("notification_well_window", "floater_sys_well.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLNotificationWellWindow>);
+	
+    LLFloaterReg::add("notification_well_window", "floater_notifications_tabbed.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNotificationsTabbed>);
+    //LLFloaterReg::add("notification_well_window", "floater_sys_well.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLNotificationWellWindow>);
+	//LLFloaterReg::add("notifications_tabbed", "floater_notifications_tabbed.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNotificationsTabbed>);
 
 	LLFloaterReg::add("object_weights", "floater_object_weights.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterObjectWeights>);
 	LLFloaterReg::add("openobject", "floater_openobject.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterOpenObject>);
diff --git a/indra/newview/skins/default/textures/icons/Icon_Attachment_Large.png b/indra/newview/skins/default/textures/icons/Icon_Attachment_Large.png
new file mode 100644
index 0000000000000000000000000000000000000000..0732a33d933b3ed6f8f7c62ea2a31f0656b3392f
GIT binary patch
literal 4182
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

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icons/Icon_Attachment_Small.png b/indra/newview/skins/default/textures/icons/Icon_Attachment_Small.png
new file mode 100644
index 0000000000000000000000000000000000000000..81245549022bde22e658b3efe4ecb26b7cffc2a7
GIT binary patch
literal 3774
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

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icons/Icon_Group_Large.png b/indra/newview/skins/default/textures/icons/Icon_Group_Large.png
new file mode 100644
index 0000000000000000000000000000000000000000..6dc0cbda0b062692d0defa18749563e9e505dadc
GIT binary patch
literal 12280
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
S?{4n^0000<MNUMnLSTZ3zw-qE

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icons/Icon_Group_Small.png b/indra/newview/skins/default/textures/icons/Icon_Group_Small.png
new file mode 100644
index 0000000000000000000000000000000000000000..ef2b521a1f15a86454a7dffaf7770bfc35f37666
GIT binary patch
literal 4473
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
LNkvXXu0mjfE!cXW

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icons/Icon_Notification_Condense.png b/indra/newview/skins/default/textures/icons/Icon_Notification_Condense.png
new file mode 100644
index 0000000000000000000000000000000000000000..4d245eb57abb42d8f5cca5fd779680ecc75971a7
GIT binary patch
literal 262
zcmeAS@N?(olHy`uVBq!ia0vp^{2<K11|+SoP4xm&k|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*D5XR(QHNhE&{2N=ZoI`1$|;e?x_{XB?z{oMuY>!}LgACF@y3
z=0E<UOB()fxvZnAn##RszHN2c43)D&LPFavFY|rfzKJ_-Peo(ifqFHQvk5v{T3O6j
zEF3*NJh)pNb0$davQjJA&LDd8+#JhdB@baAo+E6XjZY?AHFA1fDXz1MPtInC^oi|<
z#hiM2dfMN-eH)t?$a;BCvBXhh%~>~3UgF_#&1W-WaA;s;NPQg;KQ+a=2Iyu6Pgg&e
IbxsLQ0Lc4c^Z)<=

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icons/Icon_Notification_Expand.png b/indra/newview/skins/default/textures/icons/Icon_Notification_Expand.png
new file mode 100644
index 0000000000000000000000000000000000000000..186822da431c71df9f504ea1b76a43ff50b2ce3b
GIT binary patch
literal 239
zcmeAS@N?(olHy`uVBq!ia0vp^{2<K11|+SoP4xm&k|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*D5XCVIL!hE&{2N=ZoINK_Es(9rS!|9^Srpff73{+?z^{loM~
zUM1^UL*_sJqe~k8U%9HIs+#)y@o|2^HSeB0sQCQm=H|l|ruy;w_DD%Il-)2fHZqc9
z3VLT?>yt6-|LxnicRPwEX0V)8T%CF-jd>TNhg2X#+gT620@lo?tdgV4+61Q@YN)$o
mdF1iTn6qz|WU+A=Fnr1LnRx4;*ioS47(8A5T-G@yGywprieB3Q

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 1f10d966d5d..07449620642 100755
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -795,4 +795,11 @@ with the same filename but different name
   <texture name="Camera_Drag_Dot" file_name="world/CameraDragDot.png"/>
   <texture name="NavBar Separator" file_name="navbar/separator.png"/>
 
+  <texture name="Notification_Condense" file_name="icons/Icon_Notification_Condense.png"	preload="true" scale.left="2" scale.top="13" scale.right="13" scale.bottom="2" />
+  <texture name="Notification_Expand" file_name="icons/Icon_Notification_Expand.png"	preload="true" scale.left="2" scale.top="13" scale.right="13" scale.bottom="2" />
+  <texture name="Icon_Group_Small" file_name="icons/Icon_Group_Small.png"	preload="true" scale.left="2" scale.top="13" scale.right="13" scale.bottom="2" />
+  <texture name="Icon_Group_Large" file_name="icons/Icon_Group_Large.png"	preload="true" scale.left="2" scale.top="13" scale.right="13" scale.bottom="2" />
+  <texture name="Icon_Attachment_Small" file_name="icons/Icon_Attachment_Small.png"	preload="true" scale.left="2" scale.top="13" scale.right="13" scale.bottom="2" />
+  <texture name="Icon_Attachment_Large" file_name="icons/Icon_Attachment_Large.png"	preload="true" scale.left="2" scale.top="13" scale.right="13" scale.bottom="2" />
+
 </textures>
diff --git a/indra/newview/skins/default/xui/en/floater_notifications_tabbed.xml b/indra/newview/skins/default/xui/en/floater_notifications_tabbed.xml
new file mode 100644
index 00000000000..b6277070560
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_notifications_tabbed.xml
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater
+ legacy_header_height="18"
+ bevel_style="in"
+ layout="topleft"
+ name="floater_notifications_tabbed"
+ help_topic="notification_chiclet"
+ save_rect="true"
+ title="NOTIFICATIONS"
+ width="350"
+ min_width="320"
+ height="550"
+ 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_notification_tabbed_window">
+    NOTIFICATIONS TABBED
+  </string>
+  <layout_stack width="336" height="550" enabled="true" orientation="vertical" name="TabButtonsStack" follows="left|top|right|bottom">
+  <layout_panel width="336" height="550" enabled="true" name="TabButtonsLayoutPanel">
+    <tab_container
+     follows="left|top|right|bottom"
+     halign="center"
+     layout="topleft"
+     tab_position="top"
+     left="7"
+     top="24"
+     width="336"
+     height="491"
+     mouse_opaque="true"
+     name="NotificationsTab">
+      <panel
+       border="true"
+       bevel_style="none"
+       follows="left|top|right|bottom"
+       label="System (2)"
+       layout="topleft"
+       name="SystemNotificationsTab">        
+      </panel>
+      <panel
+       border="true"
+       bevel_style="none"
+       follows="left|top|right|bottom"
+       label="Transactions (15)"
+       layout="topleft"
+       name="TransactionNotificationsTab">
+      </panel>
+      <panel
+       border="true"
+       bevel_style="none"
+       follows="left|top|right|bottom"
+       label="Invites (2)"
+       layout="topleft"
+       name="InviteNotificationsTab">
+        <flat_list_view
+          color="FloaterDefaultBackgroundColor"
+          follows="all"
+          layout="topleft"
+          name="notification_list"
+          left="0"
+          top="5"
+          height="0"
+          width="330"/>
+      </panel>
+    </tab_container>
+    
+    <layout_stack width="336" height="26" enabled="true" orientation="horizontal"  follows="left|right" name="ButtonsStack">
+      <layout_panel width="336" height="30" enabled="true" orientation="horizontal" name="CondenseAllButtonPanel">
+        <button width="93" height="21" left="2" label="Condense All" name="CondenseAllButton">
+        </button>
+      </layout_panel>
+      <layout_panel width="336" height="30" enabled="true" orientation="horizontal" name="GapLayoutPanel">
+        <panel width="90" height="21" left="2" label="Condense All" border="false" name="GapPanel">
+        </panel>
+      </layout_panel>
+      <layout_panel width="336" height="30" enabled="true" orientation="horizontal" name="DeleteAllButtonPanel">
+        <button width="93" height="21" left="2" label="Delete All" name="DeleteAllButton">
+        </button>
+      </layout_panel>
+    </layout_stack>
+  </layout_panel>
+  </layout_stack>
+  </floater>
+
+<!--
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater
+ legacy_header_height="18"
+ bevel_style="in"
+ layout="topleft"
+ name="notifications_tabbed_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">
+    NOTIFICATIONS1
+  </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/language_settings.xml b/indra/newview/skins/default/xui/en/language_settings.xml
index 51779e4bfd2..3ad0f04469b 100755
--- a/indra/newview/skins/default/xui/en/language_settings.xml
+++ b/indra/newview/skins/default/xui/en/language_settings.xml
@@ -50,7 +50,7 @@
 	<string name="LTimeSec">second,datetime,local</string>
 	<string name="LTimeHour">hour,datetime,local</string>
 	<string name="LTimeMin">min,datetime,local</string>	
-	<string name="LTimeYear">year,datetime,local</string>	
+	<string name="LTimeYear">year,datetime,local</string>
 	
 	<string name="UTCTimeWeek">weekday,datetime,utc</string>
 	<string name="UTCTimeDay">day,datetime,utc</string>
diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml
index e91eea04d13..0d9612990d6 100755
--- a/indra/newview/skins/default/xui/en/menu_login.xml
+++ b/indra/newview/skins/default/xui/en/menu_login.xml
@@ -303,7 +303,7 @@
       <menu_item_call
         label="Show Notifications Console"
         name="Show Notifications Console"
-        visible="false"
+        visible="true"
         shortcut="control|shift|5">
         <on_click
          function="Floater.Toggle"
diff --git a/indra/newview/skins/default/xui/en/panel_notification_tabbed_item.xml b/indra/newview/skins/default/xui/en/panel_notification_tabbed_item.xml
new file mode 100644
index 00000000000..bc4f90858b6
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_notification_tabbed_item.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- All our XML is utf-8 encoded. -->
+<panel
+  translate="false"
+  name="sys_well_item"
+  title="sys_well_item"
+  visible="true"
+  top="0"
+  left="0"
+  width="331"
+  height="50"
+  can_resize="false"
+  layout="topleft"
+  follows="left|right"
+  background_opaque="false"
+  background_visible="true"
+  bg_alpha_color="SysWellItemUnselected" >
+
+  <panel border="true" top="0" left="3" width="327" height="44" bevel_style="none" follows="left|top|right|bottom" layout="topleft" name="GroupNameNoticeTitlePanel">
+    <layout_stack top="0" left="0" width="325" height="50" orientation="horizontal" follows="left|top|right|bottom" name="HorizontalStack">
+      <layout_panel width="30" height="22" orientation="horizontal" follows="left|top|right|bottom" name="LayoutPanel">
+        <group_icon left="5" top="6" width="25" height="25" mouse_opaque="true" name="group_icon_small" tool_tip="Group" default_icon_name="Generic_Group"/>
+      </layout_panel>
+      <layout_panel width="260" height="50" orientation="horizontal" follows="left|top|right|bottom" name="LayoutPanel">
+        <panel border="false" top="0" width="260" height="38" bevel_style="none" follows="left|top|right|bottom" layout="topleft" name="MainInfoBlockPanel">
+          <panel border="false" top="0" left="0" width="260" height="19" bevel_style="none" follows="left|top|right|bottom" layout="topleft" name="GroupNameNoticeTitlePanel">
+            <text allow_scroll="false" font="SansSerifLarge" top="2" left="0" width="267" height="17" layout="topleft" follows="right|left" text_color="White"
+              use_ellipses="true" word_wrap="true" mouse_opaque="false" name="GroupName_NoticeTitle" >
+              Group Name:Notice Title
+            </text>
+            <icon top="0" right="-1" width="21" height="21" image_name="Icon_Attachment_Small" follows="right" mouse_opaque="true" name="icon_attachment_small" tool_tip="Attachment"/>
+          </panel>
+          <panel border="false" top="23" left="0" width="260" bevel_style="none" follows="left|top|right|bottom" layout="topleft" name="SenderAndTimePanel" height="15">
+            <text allow_scroll="false" font="SansSerifSmall" top="0" left="0" width="250" height="13"    layout="topleft"    follows="right|left"
+              use_ellipses="true" word_wrap="true" mouse_opaque="false" name="Sender_Resident" >
+              Sender.Resident
+            </text>
+            <text allow_scroll="false" font="SansSerifSmall" top="0" width="95" height="13" follows="right" halign="right" layout="topleft" left_pad="5"
+              name="Time_Box" right="-5" value="2014/12/24 23:30" />
+          </panel>
+        </panel>
+      </layout_panel>
+      <layout_panel name="LayoutPanel3" width="18" height="39" orientation="horizontal" follows="left|top|right|bottom">
+        <panel name="CloseExpandButtonsPanel" border="false" top="0" left="0" width="17"  height="39" bevel_style="none" follows="left|top|right|bottom" layout="topleft">
+          <button top="0" left="0" width="17" height="17" layout="topleft" follows="top" name="close_btn" mouse_opaque="true"
+            tab_stop="false" image_unselected="Icon_Close_Foreground" image_selected="Icon_Close_Press" />
+          <button top="22" left="0" width="17" height="17" layout="topleft" follows="top" name="expand_btn" mouse_opaque="true"
+            tab_stop="false" image_unselected="Notification_Expand" image_selected="Notification_Expand" />
+        </panel>
+      </layout_panel>
+    </layout_stack>
+  </panel>
+</panel>
-- 
GitLab