Files
SingularityViewer/indra/newview/llfloaterpathfindingobjects.h
Lirusaito 78e1804381 Add Pathfinding UI from v3
Added libpathing to LLPHYSICSEXTENSIONS_INCLUDE_DIRS
llviewermenu updated a bit to be closer to v-d/rlva. Best viewed without space changes.
Updated llresmgr.cpp from v-d to "handle special case of input value being zero"
pipeline update: hideObject, restoreHiddenObject, hideDrawable, and unhideDrawable added.

Thanks to Henri Beauchamp for some UI code touchups, thanks to Zi Ree for Rebake notification.
Thanks to Mobius Ryba and Ansariel Hiller for the V1-style pathfinding icons.

Note: When opening from pie menu object selection is lost, unless the floater is already open..
This provides a more reliable reproduction of the bug we've been having with inspect.
2013-03-08 03:17:11 -05:00

180 lines
6.9 KiB
C++

/**
* @file llfloaterpathfindingobjects.h
* @brief Base class for both the pathfinding linksets and characters floater.
* @author Stinson@lindenlab.com
*
* $LicenseInfo:firstyear=2012&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2012, 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_LLFLOATERPATHFINDINGOBJECTS_H
#define LL_LLFLOATERPATHFINDINGOBJECTS_H
#include <string>
#include <map>
#include <boost/signals2.hpp>
#include "llagent.h"
#include "llfloater.h"
#include "llpathfindingmanager.h"
#include "llpathfindingobject.h"
#include "llpathfindingobjectlist.h"
#include "llselectmgr.h"
#include "lluuid.h"
#include "v4color.h"
class LLAvatarName;
class LLButton;
class LLCheckBoxCtrl;
class LLScrollListCtrl;
class LLScrollListItem;
class LLSD;
class LLTextBox;
class LLFloaterPathfindingObjects : public LLFloater
{
public:
virtual void onOpen(/*const LLSD &pKey*/);
virtual void onClose(bool pIsAppQuitting);
virtual void draw();
protected:
// friend class LLFloaterReg;
typedef enum
{
kMessagingUnknown,
kMessagingGetRequestSent,
kMessagingGetError,
kMessagingSetRequestSent,
kMessagingSetError,
kMessagingComplete,
kMessagingNotEnabled
} EMessagingState;
LLFloaterPathfindingObjects(/*const LLSD &pSeed*/);
virtual ~LLFloaterPathfindingObjects();
virtual BOOL postBuild();
virtual void requestGetObjects();
LLPathfindingManager::request_id_t getNewRequestId();
void handleNewObjectList(LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::ERequestStatus pRequestStatus, LLPathfindingObjectListPtr pObjectList);
void handleUpdateObjectList(LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::ERequestStatus pRequestStatus, LLPathfindingObjectListPtr pObjectList);
void rebuildObjectsScrollList();
virtual void buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr);
void addObjectToScrollList(const LLPathfindingObjectPtr pObjectPr, const LLSD &pScrollListItemData);
virtual void updateControlsOnScrollListChange();
virtual void updateControlsOnInWorldSelectionChange();
virtual S32 getNameColumnIndex() const;
virtual S32 getOwnerNameColumnIndex() const;
virtual std::string getOwnerName(const LLPathfindingObject *pObject) const;
virtual const LLColor4 &getBeaconColor() const;
virtual const LLColor4 &getBeaconTextColor() const;
virtual S32 getBeaconWidth() const;
void showFloaterWithSelectionObjects();
BOOL isShowBeacons() const;
void clearAllObjects();
void selectAllObjects();
void selectNoneObjects();
void teleportToSelectedObject();
virtual LLPathfindingObjectListPtr getEmptyObjectList() const;
int getNumSelectedObjects() const;
LLPathfindingObjectListPtr getSelectedObjects() const;
LLPathfindingObjectPtr getFirstSelectedObject() const;
EMessagingState getMessagingState() const;
private:
LLFloaterPathfindingObjects(const LLFloaterPathfindingObjects &pOther);
void setMessagingState(EMessagingState pMessagingState);
void onRefreshObjectsClicked();
void onSelectAllObjectsClicked();
void onSelectNoneObjectsClicked();
void onTakeClicked();
void onTakeCopyClicked();
void onReturnClicked();
void onDeleteClicked();
void onTeleportClicked();
void onScrollListSelectionChanged();
void onInWorldSelectionListChanged();
void onRegionBoundaryCrossed();
void onGodLevelChange(U8 pGodLevel);
void handleObjectNameResponse(const LLPathfindingObject *pObject);
void updateMessagingStatus();
void updateStateOnListControls();
void updateStateOnActionControls();
void selectScrollListItemsInWorld();
void handleReturnItemsResponse(const LLSD &pNotification, const LLSD &pResponse);
void handleDeleteItemsResponse(const LLSD &pNotification, const LLSD &pResponse);
LLPathfindingObjectPtr findObject(const LLScrollListItem *pListItem) const;
LLScrollListCtrl *mObjectsScrollList;
LLTextBox *mMessagingStatus;
LLButton *mRefreshListButton;
LLButton *mSelectAllButton;
LLButton *mSelectNoneButton;
LLCheckBoxCtrl *mShowBeaconCheckBox;
LLButton *mTakeButton;
LLButton *mTakeCopyButton;
LLButton *mReturnButton;
LLButton *mDeleteButton;
LLButton *mTeleportButton;
LLColor4 mDefaultBeaconColor;
LLColor4 mDefaultBeaconTextColor;
LLColor4 mErrorTextColor;
LLColor4 mWarningTextColor;
EMessagingState mMessagingState;
LLPathfindingManager::request_id_t mMessagingRequestId;
typedef std::map<std::string, LLScrollListItem *> scroll_list_item_map;
scroll_list_item_map mMissingNameObjectsScrollListItems;
LLPathfindingObjectListPtr mObjectList;
LLObjectSelectionHandle mObjectsSelection;
bool mHasObjectsToBeSelected;
uuid_vec_t mObjectsToBeSelected;
boost::signals2::connection mSelectionUpdateSlot;
boost::signals2::connection mRegionBoundaryCrossingSlot;
LLAgent::god_level_change_slot_t mGodLevelChangeSlot;
};
#endif // LL_LLFLOATERPATHFINDINGOBJECTS_H