00001
00025 #include "llviewerprecompiledheaders.h"
00026
00027 #include "llfloaterclassified.h"
00028
00029
00030 #include "llcommandhandler.h"
00031 #include "llpanelclassified.h"
00032 #include "llvieweruictrlfactory.h"
00033
00034
00035 #include "lluuid.h"
00036
00037
00038
00039
00040
00041 LLMap< const LLUUID, LLFloaterClassifiedInfo* > gClassifiedInfoInstances;
00043
00044
00045 class LLClassifiedHandler : public LLCommandHandler
00046 {
00047 public:
00048 LLClassifiedHandler() : LLCommandHandler("classified") { }
00049 bool handle(const std::vector<std::string>& tokens)
00050 {
00051 if (tokens.size() < 2)
00052 {
00053 return false;
00054 }
00055 LLUUID classified_id;
00056 if (!classified_id.set(tokens[0], FALSE))
00057 {
00058 return false;
00059 }
00060
00061 if (tokens[1] == "about")
00062 {
00063 LLFloaterClassifiedInfo::show(classified_id);
00064 return true;
00065 }
00066 return false;
00067 }
00068 };
00069 LLClassifiedHandler gClassifiedHandler;
00070
00071 LLFloaterClassifiedInfo::LLFloaterClassifiedInfo(const std::string& name, const LLUUID &id)
00072 : LLFloater(name),
00073 mClassifiedID( id )
00074 {
00075 mFactoryMap["classified_details_panel"] = LLCallbackMap(LLFloaterClassifiedInfo::createClassifiedDetail, this);
00076 gUICtrlFactory->buildFloater(this, "floater_preview_classified.xml", &getFactoryMap());
00077 gClassifiedInfoInstances.addData(id, this);
00078 }
00079
00080 LLFloaterClassifiedInfo::~LLFloaterClassifiedInfo()
00081 {
00082
00083 gClassifiedInfoInstances.removeData(mClassifiedID);
00084
00085 }
00086
00087 void LLFloaterClassifiedInfo::displayClassifiedInfo(const LLUUID& classified_id)
00088 {
00089 mClassifiedPanel->setClassifiedID(classified_id);
00090 mClassifiedPanel->sendClassifiedInfoRequest();
00091 this->setFrontmost(true);
00092 }
00093
00094
00095 void* LLFloaterClassifiedInfo::createClassifiedDetail(void* userdata)
00096 {
00097 LLFloaterClassifiedInfo *self = (LLFloaterClassifiedInfo*)userdata;
00098 self->mClassifiedPanel = new LLPanelClassified(TRUE, TRUE);
00099 self->mClassifiedPanel->childSetValue("classified_url", self->mClassifiedID);
00100 return self->mClassifiedPanel;
00101 }
00102
00103
00104 LLFloaterClassifiedInfo* LLFloaterClassifiedInfo::show(const LLUUID &classified_id)
00105 {
00106 if (classified_id.isNull())
00107 {
00108 return NULL;
00109 }
00110
00111 LLFloaterClassifiedInfo *floater;
00112 if (gClassifiedInfoInstances.checkData(classified_id))
00113 {
00114
00115 floater = gClassifiedInfoInstances.getData(classified_id);
00116 floater->open();
00117 floater->setFrontmost(true);
00118 }
00119 else
00120 {
00121 floater = new LLFloaterClassifiedInfo("calssifiedinfo", classified_id );
00122 floater->center();
00123 floater->open();
00124 floater->displayClassifiedInfo(classified_id);
00125 floater->setFrontmost(true);
00126 }
00127
00128 return floater;
00129 }
00130
00131