00001
00032 #include "llviewerprecompiledheaders.h"
00033
00034 #include "llfloaterpermissionsmgr.h"
00035
00036 #include "llscrollcontainer.h"
00037 #include "lltextbox.h"
00038 #include "llbutton.h"
00039 #include "llagent.h"
00040 #include "llviewerobjectlist.h"
00041 #include "llviewerregion.h"
00042 #include "llstl.h"
00043
00044
00045 const S32 MIN_PERM_MGR_WIDTH = 100;
00046 const S32 MIN_PERM_MGR_HEIGHT = 100;
00047 const S32 VPAD = 8;
00048 const S32 HPAD = 8;
00049 const S32 LINE = 16;
00050
00051
00052 LLFloaterPermissionsMgr* LLFloaterPermissionsMgr::sInstance = NULL;
00053
00054 LLFloaterPermissionsMgr* LLFloaterPermissionsMgr::show()
00055 {
00056 if (!sInstance)
00057 {
00058 sInstance = new LLFloaterPermissionsMgr();
00059
00060 sInstance->open();
00061 gFloaterView->adjustToFitScreen(sInstance, TRUE);
00062 }
00063 else
00064 {
00065 sInstance->open();
00066 }
00067
00068 return sInstance;
00069 }
00070
00071 void LLFloaterPermissionsMgr::processPermissionsList(LLMessageSystem* msg, void**)
00072 {
00073 }
00074
00075 LLFloaterPermissionsMgr::LLFloaterPermissionsMgr() : LLFloater("floater_perm_mgr", "PermissionsManagerRect", "Permissions Manager", TRUE, MIN_PERM_MGR_WIDTH,
00076 MIN_PERM_MGR_HEIGHT)
00077 {
00078 S32 y = mRect.getHeight() - VPAD - LINE;
00079 LLRect scrollable_container_rect(0, y, mRect.getWidth(), 0);
00080 LLRect permissions_rect(0, 0, mRect.getWidth() - HPAD - HPAD, 0);
00081 mPermissions = new LLPermissionsView(permissions_rect);
00082 mScroller = new LLScrollableContainerView(
00083 "permissions container",
00084 scrollable_container_rect,
00085 mPermissions
00086 );
00087 mScroller->setFollowsAll();
00088 mScroller->setReserveScrollCorner(TRUE);
00089 addChild(mScroller);
00090 }
00091
00092 LLFloaterPermissionsMgr::~LLFloaterPermissionsMgr()
00093 {
00094 }
00095
00096
00097
00098
00099
00100
00101 LLPermissionsView::LLPermissionsView(const LLRect &rect) : LLView("permissions_view", rect, TRUE, FOLLOWS_NONE)
00102 {
00103 }
00104
00105 EWidgetType LLPermissionsView::getWidgetType() const
00106 {
00107 return WIDGET_TYPE_PERMISSIONS_VIEW;
00108 }
00109
00110 LLString LLPermissionsView::getWidgetTag() const
00111 {
00112 return LL_PERMISSIONS_VIEW_TAG;
00113 }
00114
00115 void LLPermissionsView::clearPermissionsData()
00116 {
00117 deleteAllChildren();
00118 std::for_each(mPermData.begin(), mPermData.end(), DeletePairedPointer());
00119 mPermData.clear();
00120 }
00121
00122 void LLPermissionsView::addPermissionsData(const LLString& object_name, const LLUUID& object_id, U32 permissions_flags)
00123 {
00124
00125 LLPermissionsData* perm_datap = new LLPermissionsData(object_id, permissions_flags);
00126
00127 reshape(mRect.getWidth(), mRect.getHeight() + LINE + VPAD + BTN_HEIGHT + VPAD);
00128 S32 y = mRect.getHeight() - LINE - VPAD;
00129 LLRect label_rect(HPAD, y + LINE, mRect.getWidth(), y);
00130 LLTextBox* text = new LLTextBox("perm_label", label_rect, object_name.c_str());
00131 text->setFollows(FOLLOWS_LEFT | FOLLOWS_RIGHT | FOLLOWS_BOTTOM);
00132 addChild(text);
00133
00134 y -= LINE + VPAD;
00135
00136 LLRect btn_rect(HPAD, y + BTN_HEIGHT, 120, y);
00137 LLButton* button = new LLButton("Revoke permissions", btn_rect, "", revokePermissions, (void*)perm_datap);
00138 button->setFollows(FOLLOWS_LEFT | FOLLOWS_BOTTOM);
00139 addChild(button);
00140
00141 btn_rect.set(HPAD + 120 + HPAD, y + BTN_HEIGHT, HPAD + 120 + HPAD + 120, y);
00142 button = new LLButton("Find in world", btn_rect, "", findObject, (void*)perm_datap);
00143 button->setFollows(FOLLOWS_LEFT | FOLLOWS_BOTTOM);
00144 addChild(button);
00145
00146 mPermData.insert(std::make_pair(object_id, perm_datap));
00147 }
00148
00149 void LLPermissionsView::revokePermissions(void *userdata)
00150 {
00151 LLPermissionsData* perm_data = (LLPermissionsData*)userdata;
00152 if (perm_data)
00153 {
00154 LLViewerObject* objectp = gObjectList.findObject(perm_data->mObjectID);
00155 if (objectp)
00156 {
00157 LLMessageSystem* msg = gMessageSystem;
00158 msg->newMessageFast(_PREHASH_RevokePermissions);
00159 msg->nextBlockFast(_PREHASH_AgentData);
00160 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
00161 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
00162 msg->nextBlockFast(_PREHASH_Data);
00163 msg->addUUIDFast(_PREHASH_ObjectID, perm_data->mObjectID);
00164 msg->addU32Fast(_PREHASH_ObjectPermissions, perm_data->mPermFlags);
00165 msg->sendReliable(objectp->getRegion()->getHost());
00166 }
00167 }
00168 }
00169
00170 void LLPermissionsView::findObject(void *userdata)
00171 {
00172 }