00001
00023 #include "llviewerprecompiledheaders.h"
00024
00025 #include "llfloaterparcel.h"
00026
00027
00028 #include "llcommandhandler.h"
00029 #include "llpanelplace.h"
00030 #include "llvieweruictrlfactory.h"
00031
00032
00033 #include "lluuid.h"
00034
00035
00036
00037
00038
00039 LLMap< const LLUUID, LLFloaterParcelInfo* > gPlaceInfoInstances;
00040
00041 class LLParcelHandler : public LLCommandHandler
00042 {
00043 public:
00044 LLParcelHandler() : LLCommandHandler("parcel") { }
00045 bool handle(const std::vector<std::string>& params)
00046 {
00047 if (params.size() < 2)
00048 {
00049 return false;
00050 }
00051 LLUUID parcel_id;
00052 if (!parcel_id.set(params[0], FALSE))
00053 {
00054 return false;
00055 }
00056 if (params[1] == "about")
00057 {
00058 LLFloaterParcelInfo::show(parcel_id);
00059 return true;
00060 }
00061 return false;
00062 }
00063 };
00064 LLParcelHandler gParcelHandler;
00065
00066
00067
00068
00069
00070
00071
00072 void* LLFloaterParcelInfo::createPanelPlace(void* data)
00073 {
00074 LLFloaterParcelInfo* self = (LLFloaterParcelInfo*)data;
00075 self->mPanelParcelp = new LLPanelPlace();
00076 gUICtrlFactory->buildPanel(self->mPanelParcelp, "panel_place.xml");
00077 return self->mPanelParcelp;
00078 }
00079
00080
00081
00082
00083 LLFloaterParcelInfo::LLFloaterParcelInfo(const std::string& name, const LLUUID &parcel_id)
00084 : LLFloater(name),
00085 mParcelID( parcel_id )
00086 {
00087 mFactoryMap["place_details_panel"] = LLCallbackMap(LLFloaterParcelInfo::createPanelPlace, this);
00088 gUICtrlFactory->buildFloater(this, "floater_preview_url.xml", &getFactoryMap());
00089 gPlaceInfoInstances.addData(parcel_id, this);
00090 }
00091
00092
00093 LLFloaterParcelInfo::~LLFloaterParcelInfo()
00094 {
00095
00096 gPlaceInfoInstances.removeData(mParcelID);
00097
00098 }
00099
00100 void LLFloaterParcelInfo::displayParcelInfo(const LLUUID& parcel_id)
00101 {
00102 mPanelParcelp->setParcelID(parcel_id);
00103 }
00104
00105
00106 LLFloaterParcelInfo* LLFloaterParcelInfo::show(const LLUUID &parcel_id)
00107 {
00108 if (parcel_id.isNull())
00109 {
00110 return NULL;
00111 }
00112
00113 LLFloaterParcelInfo *floater;
00114 if (gPlaceInfoInstances.checkData(parcel_id))
00115 {
00116
00117 floater = gPlaceInfoInstances.getData(parcel_id);
00118 floater->open();
00119 floater->setFrontmost(true);
00120 }
00121 else
00122 {
00123 floater = new LLFloaterParcelInfo("parcelinfo", parcel_id );
00124 floater->center();
00125 floater->open();
00126 floater->displayParcelInfo(parcel_id);
00127 floater->setFrontmost(true);
00128 }
00129
00130 return floater;
00131 }
00132
00133