FIRE-30934: Add filter editor to group titles window
parent
c370a21508
commit
5859e4aa6e
|
|
@ -27,6 +27,7 @@
|
|||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "fsfloatergrouptitles.h"
|
||||
#include "llfiltereditor.h"
|
||||
#include "llgroupactions.h"
|
||||
#include "llscrolllistctrl.h"
|
||||
#include "lltrans.h"
|
||||
|
|
@ -34,7 +35,7 @@
|
|||
/////////////////////////////////////////////////////
|
||||
// FSGroupTitlesObserver class
|
||||
//
|
||||
FSGroupTitlesObserver::FSGroupTitlesObserver(const LLGroupData& group_data, FSFloaterGroupTitles* parent) :
|
||||
FSGroupTitlesObserver::FSGroupTitlesObserver(const LLGroupData& group_data, LLHandle<FSFloaterGroupTitles> parent) :
|
||||
LLGroupMgrObserver(group_data.mID),
|
||||
mGroupData(group_data),
|
||||
mParent(parent)
|
||||
|
|
@ -49,9 +50,9 @@ FSGroupTitlesObserver::~FSGroupTitlesObserver()
|
|||
|
||||
void FSGroupTitlesObserver::changed(LLGroupChange gc)
|
||||
{
|
||||
if (mParent)
|
||||
if (!mParent.isDead())
|
||||
{
|
||||
mParent->processGroupTitleResults(mGroupData);
|
||||
mParent.get()->processGroupTitleResults(mGroupData);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -60,7 +61,9 @@ void FSGroupTitlesObserver::changed(LLGroupChange gc)
|
|||
// FSGroupTitles class
|
||||
//
|
||||
FSFloaterGroupTitles::FSFloaterGroupTitles(const LLSD& key) :
|
||||
LLFloater(key)
|
||||
LLFloater(key),
|
||||
mFilterSubString(LLStringUtil::null),
|
||||
mFilterSubStringOrig(LLStringUtil::null)
|
||||
{
|
||||
// Register observer and event listener
|
||||
LLGroupMgr::getInstance()->addObserver(this);
|
||||
|
|
@ -85,14 +88,17 @@ BOOL FSFloaterGroupTitles::postBuild()
|
|||
mRefreshButton = getChild<LLButton>("btnRefresh");
|
||||
mInfoButton = getChild<LLButton>("btnInfo");
|
||||
mTitleList = getChild<LLScrollListCtrl>("title_list");
|
||||
mFilterEditor = getChild<LLFilterEditor>("filter_input");
|
||||
|
||||
mActivateButton->setCommitCallback(boost::bind(&FSFloaterGroupTitles::activateGroupTitle, this));
|
||||
mRefreshButton->setCommitCallback(boost::bind(&FSFloaterGroupTitles::refreshGroupTitles, this));
|
||||
mInfoButton->setCommitCallback(boost::bind(&FSFloaterGroupTitles::openGroupInfo, this));
|
||||
mTitleList->setDoubleClickCallback(boost::bind(&FSFloaterGroupTitles::activateGroupTitle, this));
|
||||
mTitleList->setCommitCallback(boost::bind(&FSFloaterGroupTitles::selectedTitleChanged, this));
|
||||
mFilterEditor->setCommitCallback(boost::bind(&FSFloaterGroupTitles::onFilterEdit, this, _2));
|
||||
|
||||
mTitleList->sortByColumn("title_sort_column", TRUE);
|
||||
mTitleList->setFilterColumn(0);
|
||||
|
||||
refreshGroupTitles();
|
||||
|
||||
|
|
@ -231,7 +237,7 @@ void FSFloaterGroupTitles::refreshGroupTitles()
|
|||
for (std::vector<LLGroupData>::iterator it = gAgent.mGroups.begin(); it != gAgent.mGroups.end(); ++it)
|
||||
{
|
||||
LLGroupData& group_data = *it;
|
||||
FSGroupTitlesObserver* roleObserver = new FSGroupTitlesObserver(group_data, this);
|
||||
FSGroupTitlesObserver* roleObserver = new FSGroupTitlesObserver(group_data, getDerivedHandle<FSFloaterGroupTitles>());
|
||||
mGroupTitleObserverMap[group_data.mID] = roleObserver;
|
||||
LLGroupMgr::getInstance()->sendGroupTitlesRequest(group_data.mID);
|
||||
}
|
||||
|
|
@ -256,3 +262,22 @@ void FSFloaterGroupTitles::openGroupInfo()
|
|||
LLGroupActions::show(group_id);
|
||||
}
|
||||
}
|
||||
|
||||
void FSFloaterGroupTitles::onFilterEdit(const std::string& search_string)
|
||||
{
|
||||
mFilterSubStringOrig = search_string;
|
||||
LLStringUtil::trimHead(mFilterSubStringOrig);
|
||||
// Searches are case-insensitive
|
||||
std::string search_upper = mFilterSubStringOrig;
|
||||
LLStringUtil::toUpper(search_upper);
|
||||
|
||||
if (mFilterSubString == search_upper)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
mFilterSubString = search_upper;
|
||||
|
||||
// Apply new filter.
|
||||
mTitleList->setFilterString(mFilterSubStringOrig);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,20 +33,21 @@
|
|||
#include "llgroupmgr.h"
|
||||
|
||||
class FSFloaterGroupTitles;
|
||||
class LLFilterEditor;
|
||||
class LLScrollListCtrl;
|
||||
|
||||
class FSGroupTitlesObserver : LLGroupMgrObserver
|
||||
{
|
||||
|
||||
public:
|
||||
FSGroupTitlesObserver(const LLGroupData& group_data, FSFloaterGroupTitles* parent);
|
||||
FSGroupTitlesObserver(const LLGroupData& group_data, LLHandle<FSFloaterGroupTitles> parent);
|
||||
virtual ~FSGroupTitlesObserver();
|
||||
|
||||
virtual void changed(LLGroupChange gc);
|
||||
|
||||
protected:
|
||||
FSFloaterGroupTitles* mParent;
|
||||
LLGroupData mGroupData;
|
||||
LLHandle<FSFloaterGroupTitles> mParent;
|
||||
LLGroupData mGroupData;
|
||||
};
|
||||
|
||||
class FSFloaterGroupTitles : public LLFloater, public LLGroupMgrObserver, public LLOldEvents::LLSimpleListener
|
||||
|
|
@ -73,11 +74,16 @@ private:
|
|||
void activateGroupTitle();
|
||||
void selectedTitleChanged();
|
||||
void openGroupInfo();
|
||||
void onFilterEdit(const std::string& search_string);
|
||||
|
||||
LLButton* mActivateButton;
|
||||
LLButton* mRefreshButton;
|
||||
LLButton* mInfoButton;
|
||||
LLScrollListCtrl* mTitleList;
|
||||
LLFilterEditor* mFilterEditor;
|
||||
|
||||
std::string mFilterSubString;
|
||||
std::string mFilterSubStringOrig;
|
||||
|
||||
typedef std::map<LLUUID, FSGroupTitlesObserver*> observer_map_t;
|
||||
observer_map_t mGroupTitleObserverMap;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="group_titles" title="Gruppentitel">
|
||||
<floater.string name="NoGroupTitle" value="<Kein Titel>"/>
|
||||
<filter_editor label="Nach Gruppentiteln filtern" name="filter_input"/>
|
||||
<scroll_list name="title_list">
|
||||
<column name="grouptitle" label="Titel"/>
|
||||
<column name="groupname" label="Gruppe"/>
|
||||
|
|
|
|||
|
|
@ -16,14 +16,25 @@
|
|||
|
||||
<floater.string name="NoGroupTitle" value="<No group title>"/>
|
||||
|
||||
<filter_editor
|
||||
follows="left|top|right"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="5"
|
||||
label="Filter Group Titles"
|
||||
max_length_bytes="20"
|
||||
name="filter_input"
|
||||
top="5"
|
||||
right="-5" />
|
||||
|
||||
<scroll_list
|
||||
name="title_list"
|
||||
follows="all"
|
||||
draw_heading="true"
|
||||
layout="topleft"
|
||||
width="240"
|
||||
right="-5"
|
||||
left="5"
|
||||
height="265">
|
||||
height="238">
|
||||
<column
|
||||
name="grouptitle"
|
||||
sort_column="title_sort_column"
|
||||
|
|
|
|||
Loading…
Reference in New Issue