From 683e96ed61692d26b3eba2b08fe9978de998cb41 Mon Sep 17 00:00:00 2001
From: Maxim Nikolenko <maximnproductengine@lindenlab.com>
Date: Mon, 9 Oct 2023 12:35:53 +0300
Subject: [PATCH] SL-20380 Add group notices button as hover button on Groups
 floater

---
 indra/llui/llaccordionctrl.cpp                 |  17 +++++++++++++++++
 indra/llui/llaccordionctrl.h                   |   2 ++
 indra/newview/llgroupactions.cpp               |   6 +++++-
 indra/newview/llgroupactions.h                 |   2 +-
 indra/newview/llgrouplist.cpp                  |  12 ++++++++++++
 indra/newview/llgrouplist.h                    |   2 ++
 indra/newview/llpanelgroup.cpp                 |   9 +++++++++
 .../default/textures/icons/Group_Notices.png   | Bin 0 -> 3502 bytes
 .../skins/default/textures/textures.xml        |   2 ++
 .../default/xui/en/panel_group_list_item.xml   |  16 ++++++++++++++--
 .../xui/en/panel_group_list_item_short.xml     |  14 +++++++++++++-
 11 files changed, 77 insertions(+), 5 deletions(-)
 create mode 100644 indra/newview/skins/default/textures/icons/Group_Notices.png

diff --git a/indra/llui/llaccordionctrl.cpp b/indra/llui/llaccordionctrl.cpp
index 809d72208f0..d0146910b66 100644
--- a/indra/llui/llaccordionctrl.cpp
+++ b/indra/llui/llaccordionctrl.cpp
@@ -936,3 +936,20 @@ S32 LLAccordionCtrl::calcExpandedTabHeight(S32 tab_index /* = 0 */, S32 availabl
 	expanded_tab_height /= num_expanded;
 	return expanded_tab_height;
 }
+
+void LLAccordionCtrl::collapseAllTabs() 
+{
+    if (mAccordionTabs.size() > 0)
+    {
+        for (size_t i = 0; i < mAccordionTabs.size(); ++i)
+        {
+            LLAccordionCtrlTab *tab = mAccordionTabs[i];
+
+            if (tab->getDisplayChildren())
+            {
+                tab->setDisplayChildren(false);
+            }
+        }
+        arrange();
+    }
+}
diff --git a/indra/llui/llaccordionctrl.h b/indra/llui/llaccordionctrl.h
index 28282544724..cc49ac80868 100644
--- a/indra/llui/llaccordionctrl.h
+++ b/indra/llui/llaccordionctrl.h
@@ -122,6 +122,8 @@ class LLAccordionCtrl: public LLPanel
 	void	setComparator(const LLTabComparator* comp) { mTabComparator = comp; }
 	void	sort();
 
+    void collapseAllTabs();
+
 	/**
 	 * Sets filter substring as a search_term for help text when there are no any visible tabs.
 	 */
diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp
index b588d6eaa1f..5db8424b993 100644
--- a/indra/newview/llgroupactions.cpp
+++ b/indra/newview/llgroupactions.cpp
@@ -398,7 +398,7 @@ void LLGroupActions::inspect(const LLUUID& group_id)
 }
 
 // static
-void LLGroupActions::show(const LLUUID& group_id)
+void LLGroupActions::show(const LLUUID &group_id, bool expand_notices_tab)
 {
 	if (group_id.isNull())
 		return;
@@ -406,6 +406,10 @@ void LLGroupActions::show(const LLUUID& group_id)
 	LLSD params;
 	params["group_id"] = group_id;
 	params["open_tab_name"] = "panel_group_info_sidetray";
+    if (expand_notices_tab) 
+    {
+        params["action"] = "show_notices";
+    }
 
 	LLFloaterSidePanelContainer::showPanel("people", "panel_group_info_sidetray", params);
     LLFloater *floater = LLFloaterReg::getTypedInstance<LLFloaterSidePanelContainer>("people");
diff --git a/indra/newview/llgroupactions.h b/indra/newview/llgroupactions.h
index afc4686dd77..44513199c16 100644
--- a/indra/newview/llgroupactions.h
+++ b/indra/newview/llgroupactions.h
@@ -57,7 +57,7 @@ class LLGroupActions
 	/**
 	 * Show group information panel.
 	 */
-	static void show(const LLUUID& group_id);
+	static void show(const LLUUID& group_id, bool expand_notices_tab = false);
 
 	/**
 	 * Show group inspector floater.
diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp
index 32af2592d32..d1374405473 100644
--- a/indra/newview/llgrouplist.cpp
+++ b/indra/newview/llgrouplist.cpp
@@ -303,6 +303,7 @@ void LLGroupList::addNewItem(const LLUUID& id, const std::string& name, const LL
 
 	item->getChildView("info_btn")->setVisible( false);
 	item->getChildView("profile_btn")->setVisible( false);
+    item->getChildView("notices_btn")->setVisible(false);
 	item->setGroupIconVisible(mShowIcons);
     if (!mShowIcons)
     {
@@ -403,6 +404,7 @@ mGroupIcon(NULL),
 mGroupNameBox(NULL),
 mInfoBtn(NULL),
 mProfileBtn(NULL),
+mNoticesBtn(NULL),
 mVisibilityHideBtn(NULL),
 mVisibilityShowBtn(NULL),
 mGroupID(LLUUID::null),
@@ -435,6 +437,9 @@ BOOL  LLGroupListItem::postBuild()
     mProfileBtn = getChild<LLButton>("profile_btn");
     mProfileBtn->setClickedCallback([this](LLUICtrl *, const LLSD &) { onProfileBtnClick(); });
 
+    mNoticesBtn = getChild<LLButton>("notices_btn");
+    mNoticesBtn->setClickedCallback([this](LLUICtrl *, const LLSD &) { onNoticesBtnClick(); });
+
     mVisibilityHideBtn = findChild<LLButton>("visibility_hide_btn");
     if (mVisibilityHideBtn)
     {
@@ -470,6 +475,7 @@ void LLGroupListItem::onMouseEnter(S32 x, S32 y, MASK mask)
 	{
 		mInfoBtn->setVisible(true);
         mProfileBtn->setVisible(true);
+        mNoticesBtn->setVisible(true);
         if (mForAgent && mVisibilityHideBtn)
         {
             LLGroupData agent_gdatap;
@@ -489,6 +495,7 @@ void LLGroupListItem::onMouseLeave(S32 x, S32 y, MASK mask)
 	getChildView("hovered_icon")->setVisible( false);
 	mInfoBtn->setVisible(false);
     mProfileBtn->setVisible(false);
+    mNoticesBtn->setVisible(false);
     if (mVisibilityHideBtn)
     {
         mVisibilityHideBtn->setVisible(false);
@@ -583,6 +590,11 @@ void LLGroupListItem::onProfileBtnClick()
 	LLGroupActions::show(mGroupID);
 }
 
+void LLGroupListItem::onNoticesBtnClick()
+{
+    LLGroupActions::show(mGroupID, true);
+}
+
 void LLGroupListItem::onVisibilityBtnClick(bool new_visibility)
 {
     LLGroupData agent_gdatap;
diff --git a/indra/newview/llgrouplist.h b/indra/newview/llgrouplist.h
index 5cbabb712fd..1bc2caff334 100644
--- a/indra/newview/llgrouplist.h
+++ b/indra/newview/llgrouplist.h
@@ -123,6 +123,7 @@ class LLGroupListItem : public LLPanel
 	void setBold(bool bold);
 	void onInfoBtnClick();
 	void onProfileBtnClick();
+    void onNoticesBtnClick();
     void onVisibilityBtnClick(bool new_visibility);
 
 	LLTextBox*	mGroupNameBox;
@@ -130,6 +131,7 @@ class LLGroupListItem : public LLPanel
 	LLGroupIconCtrl* mGroupIcon;
     LLButton*	mInfoBtn;
     LLButton*	mProfileBtn;
+    LLButton*	mNoticesBtn;
     LLButton*	mVisibilityHideBtn;
     LLButton*	mVisibilityShowBtn;
 
diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
index ab255d52151..57742f16a71 100644
--- a/indra/newview/llpanelgroup.cpp
+++ b/indra/newview/llpanelgroup.cpp
@@ -134,6 +134,15 @@ void LLPanelGroup::onOpen(const LLSD& key)
 		if(panel_notices)
 			panel_notices->refreshNotices();
 	}
+    if (str_action == "show_notices")
+    {
+        setGroupID(group_id);
+
+        LLAccordionCtrl *tab_ctrl = getChild<LLAccordionCtrl>("groups_accordion");
+        tab_ctrl->collapseAllTabs();
+        getChild<LLAccordionCtrlTab>("group_notices_tab")->setDisplayChildren(true);
+        tab_ctrl->arrange();
+    }
 
 }
 
diff --git a/indra/newview/skins/default/textures/icons/Group_Notices.png b/indra/newview/skins/default/textures/icons/Group_Notices.png
new file mode 100644
index 0000000000000000000000000000000000000000..601502d374fef0744e3f9110f55f3631e8cde7ce
GIT binary patch
literal 3502
zcmV;f4N>xmP)<h;3K|Lk000e1NJLTq000yK000yS1^@s6jfou%000U@X+uL$Nkc;*
zaB^>EX>4Tx0C?J+Q+HUC_ZB|i_hk=OLfG)Jmu!ImA|tE_$Pihg5Rw34gb)%y#f69p
zRumNxoJdu~g4GI0orvO~D7a@qiilc^Ra`jkAKa(4eR}Wh?fcjJyyu+f{LXpL4}cL8
zCXwc%Y5+M>g*-agACFH+#L2yY0u@N$1RxOR%fe>`#Q*^C19^CUbg)1C0k3ZW0swH;
zE+i7i;s1lWP$pLZAdvvzA`<5d0gzGv$SzdK6adH=0I*ZDWC{S3003-xd_p1ssto|_
z^hrJi0NAOM+!p}Yq8zCR0F40vnJ7mj0zkU}U{!%qECRs70HCZuA}$2Lt^t5qwlYTo
zfV~9(c8*w(4?ti5fSE!p%m5%b0suoE6U_r4Oaq`W(!b!TUvP!ENC5!A%azTSOVTqG
zxRuZvck=My;vwR~Y_URN7by^C3FIQ2mzyIKNaq7g&I|wm8u`(|{y0C7=jP<$=4R(?
z@ASo@{%i1WB0eGU-~POe0t5gMPS5Y!U*+Z218~Oyuywy{sapWrRsd+<`CT*H37}dE
z(0cicc{uz)9-g64$UGe!3JVMEC1RnyFyo6p|1;rl;ER6t{6HT5+j{T-ahgDxt-zy$
z{c&M#cCJ#6=gR~_F>d$gBmT#QfBlXr(c(0*Tr3re@mPttP$EsodAU-NL?OwQ;u7h9
zGVvdl{RxwI4FIf$Pry#L2er#=z<%xl0*ek<(slqqe)BDi8VivC5N9+pdG`PSlfU_o
zKq~<N&6lL(006w`7+k277fi+o002awfhw>;2Moa!tiTSO!5zH77Xo1hL_iEAz&sE_
z2IPPo3ZWR5K^auQI@koYumc*P5t`u;w81er4d>tzT!HIw7Y1M$p28Tsh6w~g$Osc*
zAv%Z=Vvg7%&IlKojszlMNHmgwq#)^t6j36@$a16tsX}UzT}UJHEpik&ja)$bklV;0
zGK&0)yhkyVfwEBp)B<%txu_o+ipHRG(R4HqU4WLNYtb6C9zB4zqNmYI=yh}eeTt4_
zfYC7yW{lZkT#ScBV2M~7CdU?I<ybXVk2PZ*ST}YR8^E4n?+7FUi+~gC2wsE`!fb+&
zkVjZdSVO2K>?5=ix(HVZgM=}{CnA%mPqZa^68Xe<Vmh&qSVpWS?jar_o+Vx<4ijIK
zNF)x)lH^VbAtjJ9NefA9NZUv)q*J6m(hzB!OeX7)ZOPu`2(o~zAeWK1kPnbglKaWS
z<hK+$#faie38ExYq?8g$HDy2L1f`!cLYbhdQO&8I)Cj7GI-goeZJ>5gFH?u96Et<2
zCC!@_L(8Nsqt(!wX=iEoXfNq>x(VHb9z~bXm(pwK2kGbOgY<U{4TcSa$4Fu*8EYAP
z8K)Sx884YkrUlcNnaETy*D@QKXP6I|Z&g?-_9}c8k;)R4I+a$HewF8{R8@0TKh=4v
z3skFB5362QeWpfLvryxy3Dg#=)u|m-yQwy=&Qf<$k5JE1U!%TX{et>q4YG!XMxcgB
zqf}$J#u<$v7REAV@mNCEa#jQDENhreVq3EL>`ZnA`x|yIdrVV9bE;;nW|3x{=5fsd
z4#u(I@HyF>O3oq94bFQl11&!-vDRv>X03j$H`;pIzS?5#a_tuF>)P*iaGgM%ES>c_
zZ94aL3A#4AQM!e?+jY<CKGS3CdFcuD%JmNE-O)$&ZS<q{7wYfU@6jJOFf<4@kQr<-
zIAie4kYng;m}$7t@Py&05zA=0k;G`D(Mh8xxF+t0XX7<^7d~dJZyaK*G~Q+0Ydm3M
zX)@cS#H7XKzA4R=Yno=d(X`Wa%*@Cv+^pEF$?T3f)tqadVZPbC+x(4%rA3^@N{cp&
z$Clcbe9HxvO_ukpm{vYkc~<pS*Q`m_T<a|BZPr(8P#ag944XQe%eJVko2|rln{D3|
z;uMc5(kb;*ZrU;I{Ok(sn(PMcIrd@pCH8Ih&mGJh5*^k%bUS=<bal*jY;e5mq~SEf
zsl=(n=~rhPXQ6YQ^EDTyOOVSFmv)yIQ*Eb;r*5Bm%a!FC?z+;o)Agg9yPMpt*=^L_
z%ss_@tNTqZn;Xep!#(do^zips;&II5ou`|p!t;>lFJ5+DSzi0S9#6BJCZ5(XZOGfi
zTj0IRdtf>~J!SgN=>tB-J_4V5pNGDtz9Qc}z9W9tewls;{GR(e`pf-~_`l(K@)q$<
z1z-We0p$U`ff|9c18V~x1epY-2Q>wa1-k|>3_cY?3<(WcA99m#z!&lx`C~KOXDpi0
z70L*m6<QnmFw7=Q9@Y_#hR+D!5Pol_`Aq4|wg`yeM{J0=A88qx7x{e@DJn9mF6vRV
zQ*?23_bk?|<XQV?y^isZsf@Wh+iJFQc4w?=Y*K7v?3=iNxT?5;c!&5!@s|>G6C?@k
ziR8rC#65}Qa{}jVnlqf_npBo_W3J`gqPZ95>CVfZcRX1&S&)1<g_shTvOnd6AVN?t
z7*FM=ZcQB%@`Rg(Pes0>jiOPpx423?lIEROmG(H@JAFg?XogQlb;dIZPf{y+kr|S?
zBlAsGMAqJ{&)IR=Ejg5&l$@hd4QZCNE7vf$D7Q~$D=U)?<ay?8${Ul1%J<|W`E&Ez
z6>Nn}(WA6du22pZOfRS_cv~1-c(_QtNLti0-)8>m`6CO07JR*suu!<Lv)H(JS@GZ^
zzeT$iBa2fPcP=qqQo3Y#Y4Fm0%V^88mi<uTSW;E;YI)r9j#7itrKLkFf>$(^sg%jf
zZm#rNxnmV!m1I@#YM0epR(~oNm0zrItf;Q|utvD%;#W>z)qM4NZQ9!2O1H}G>qzUQ
z>u#*~S--DJy=p<#(1!30tsC);<r`mZO5Sv#dTRBK&9u$R%>y-IHSJr>wyfLop*ExT
zdYyk=%U1oZtGB+{Cfe4&-FJKQ4uc&PJKpb<?7X!rcvow^MSb;d((Z!Yj~Zedy1(Xr
z-MB}0PsN^(d!>5^_C@dOYIJXG+^@gCvI%WcHjN%gI&kHifN$EH?V5MBa9S!3!a?Q1
zC*P)gd*e{(q0YnH!_D8Bf4B7r>qvPk(mKC&tSzH$pgp0z@92!9ogH2sN4~fJe(y2k
zV|B+hk5`_cohUu=`Q(C=<ELb&o}ErVJ=B@pdG}2GnQL89UA<>R&z?UQbnZ;IU-!xL
z-sg{9@Vs#JBKKn3CAUkhJ+3`ResKNaNUvLO>t*-L?N>ambo5Q@JJIjcfBI^`)pOVQ
z*DhV3dA;w(>>IakCfyvkCA#(acJ}QTcM9%I++BK)c(44v+WqPW`VZ=VwEnSWz-{38
zV8CF{!&wjS4he^z{*?dIhvCvk%tzHDMk9@nogW_?4H~`jWX_Y}r?RIL&&qyQ|9R_k
ztLNYS;`>X_Sp3-V3;B!Bzpi<y^K$R2sjoW6BgY@S&UroYru?nW+kNl2@4DZ|y&st<
z{6PLt^U?Za$EVOw_de%*{`@cZg!B7=IVBMQ000?uMObuGZ)S9NVRB^vL1b@YWgtmy
zVP|DhWnpA_ami&o00094Nkl<Zc-qWVT}YEr7(VCQ#@N)1u_l3o#7X5Y)QOsz21Qsw
z3q;LiWj96?dZ8DhxMA+1%Vg`SD>LUWs4!BYi!sbOnmSNv!=G6S-p%FzrhWT*-%+q?
z=gx}`9KP>6@B2OP&-1*83W7jRb8+O9mpJ|-DJhBQ^?IVy>CVp2&x<A|CW86-`MR#I
zt{zG$XEYk0cs!oZrKP0`@DUak7DA(=qhx=7KXHcPaG0d0r(dtCs``?dnRy?6q$ZQe
zxW2xwU0q$h+}zx3Dkv!6GBPsmf{#zFR^L22I%1bxR8*v?t*!kqG&J-YKwRzZ?GB|<
zsh^#l<>%(+_|(+YJ8f-k&dtqDZ-0OPtLo}%JN$Do9)re{GB7aEb9{V!rn9rNvb($6
zx4pfsnVg&y;EbYOB9RE?<>geRQhlwftGm?N+WI~vB_#^k)+Ed@H#hg5*Xy-3HZ~fg
z(Wqu*WF!VA5{U@zlamuVHZ~?iB9RMCO-(PMht`~&oZHNjA;T932M505;^GI>)6)cq
zh=KiH_>N~Tmx~k@7FI&Awc+96=S)Dq-`@vhgr!ocYIk>+aNNJDLQu3p`6`V@^J8UY
zrH=`iot;f&G8qSb6(A9&*3bqnQ3%XsWo5BhURqirfk5CKN)jcMC_@B88$9KZof7oQ
z1_Y@PD7hvS3Q2c%b`oZZLH73cgkUfz0X;s1Hn9N}3PoB;Ny#&}+f9IF$|@T>GBYzn
z%F4=~!XTVy0vZg48z7A|pU;PFB*0?A4Z)B=l#jBaqT&{FmK_d90Ca_sDfWrydE7iS
zKc*c3hyu$TG7V=GXMb^Vag8}C$;rv2qoczBfR8seHl#4CY8W?c{3rCw%geh87r}S1
zeS=aXPN&mmHk;qYUk-m{2vN!M@^bIi)>g08Y9%mIS6W(HKEm|80YF}>)n2n$ERO~U
z2dC=m>&fBaArXtk?Ca~-yvCg5ayc0vA9sT`O$`kVZ?PJi&1SaS?New&AN2j3IQrk;
c*gpjr00@n9gMxl*2mk;807*qoM6N<$f^_<|hX4Qo

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index aa99fe38cdc..615816ed997 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -239,6 +239,8 @@ with the same filename but different name
   <texture name="Generic_Person" file_name="icons/Generic_Person.png" preload="false" />
   <texture name="Generic_Person_Large" file_name="icons/Generic_Person_Large.png" preload="false" />
 
+  <texture name="Group_Notices" file_name="icons/Group_Notices.png" preload="false" />
+
   <texture name="Hand" file_name="icons/hand.png" preload="false" />
   
   <texture name="Help_Press" file_name="navbar/Help_Press.png" preload="false" />
diff --git a/indra/newview/skins/default/xui/en/panel_group_list_item.xml b/indra/newview/skins/default/xui/en/panel_group_list_item.xml
index e758a8ce302..c8b165e8691 100644
--- a/indra/newview/skins/default/xui/en/panel_group_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_list_item.xml
@@ -48,6 +48,18 @@
      use_ellipses="true"
      value="Unknown"
      width="242" />
+    <button
+     name="notices_btn"
+     tool_tip="Group Notices"
+     top_delta="-4"
+     left_pad="3"
+     right="-53"
+     height="20"
+     width="20"
+     follows="right"
+     image_pressed="Group_Notices"
+     image_unselected="Group_Notices"
+     tab_stop="false"/>
     <button
      follows="right"
      height="16"
@@ -58,7 +70,7 @@
      name="info_btn"
      tool_tip="More info"
      tab_stop="false"
-     top_delta="-2"
+     top_delta="2"
      width="16" />
    <!--*TODO: Should only appear on rollover-->
     <button
@@ -71,6 +83,6 @@
      name="profile_btn"
      tab_stop="false"
      tool_tip="View profile"
-     top_delta="-2"
+     top_delta="0"
      width="20" />
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_list_item_short.xml b/indra/newview/skins/default/xui/en/panel_group_list_item_short.xml
index b72af7221e4..042a5f388be 100644
--- a/indra/newview/skins/default/xui/en/panel_group_list_item_short.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_list_item_short.xml
@@ -53,10 +53,22 @@
      text_color="ScrollUnselectedColor"
      use_ellipses="true"
     />
+    <button
+     name="notices_btn"
+     tool_tip="Group Notices"
+     top_delta="-4"
+     left_pad="3"
+     right="-80"
+     height="20"
+     width="20"
+     follows="right"
+     image_pressed="Group_Notices"
+     image_unselected="Group_Notices"
+     tab_stop="false"/>
     <button
      name="visibility_hide_btn"
      tool_tip="Hide group on my profile"
-     top_delta="-3"
+     top_delta="0"
      left_pad="3"
      right="-53"
      height="20"
-- 
GitLab