llfloaterclassified.cpp

Go to the documentation of this file.
00001 
00025 #include "llviewerprecompiledheaders.h"
00026 
00027 #include "llfloaterclassified.h"
00028 
00029 // viewer project includes
00030 #include "llcommandhandler.h"
00031 #include "llpanelclassified.h"
00032 #include "llvieweruictrlfactory.h"
00033 
00034 // linden library includes
00035 #include "lluuid.h"
00036 
00037 //-----------------------------------------------------------------------------
00038 // Globals
00039 //-----------------------------------------------------------------------------
00040 
00041 LLMap< const LLUUID, LLFloaterClassifiedInfo* > gClassifiedInfoInstances;
00043 // LLFloaterEventDisplay
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         // child views automatically deleted
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 // static
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 // static
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                 // ...bring that window to front
00115                 floater = gClassifiedInfoInstances.getData(classified_id);
00116                 floater->open();        /*Flawfinder: ignore*/
00117                 floater->setFrontmost(true);
00118         }
00119         else
00120         {
00121                 floater =  new LLFloaterClassifiedInfo("calssifiedinfo", classified_id );
00122                 floater->center();
00123                 floater->open();        /*Flawfinder: ignore*/
00124                 floater->displayClassifiedInfo(classified_id);
00125                 floater->setFrontmost(true);
00126         }
00127 
00128         return floater;
00129 }
00130 
00131 

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