llfloaterpermissionsmgr.cpp

Go to the documentation of this file.
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 // constants
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 // statics
00052 LLFloaterPermissionsMgr* LLFloaterPermissionsMgr::sInstance = NULL;
00053 
00054 LLFloaterPermissionsMgr* LLFloaterPermissionsMgr::show()
00055 {
00056         if (!sInstance)
00057         {
00058                 sInstance = new LLFloaterPermissionsMgr();
00059 
00060                 sInstance->open();      /* Flawfinder: ignore */
00061                 gFloaterView->adjustToFitScreen(sInstance, TRUE);
00062         }
00063         else
00064         {
00065                 sInstance->open();              /* Flawfinder: ignore */
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 // LLPermissionsView
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         // grow to make room for new element
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 }

Generated on Thu Jul 1 06:08:35 2010 for Second Life Viewer by  doxygen 1.4.7