void LLPanelClassifiedEdit::processProperties(void* data, EAvatarProcessorType type) { if(APT_CLASSIFIED_INFO == type) { LLAvatarClassifiedInfo* c_info = static_cast<LLAvatarClassifiedInfo*>(data); if(c_info && getClassifiedId() == c_info->classified_id) { // see LLPanelClassifiedEdit::sendUpdate() for notes mIsNewWithErrors = false; // for just created classified - panel will probably be closed when we get here. if(!getVisible()) { return; } enableEditing(true); setClassifiedName(c_info->name); setDescription(c_info->description); setSnapshotId(c_info->snapshot_id); setPosGlobal(c_info->pos_global); setClassifiedLocation(createLocationText(c_info->parcel_name, c_info->sim_name, c_info->pos_global)); // *HACK see LLPanelClassifiedEdit::sendUpdate() setCategory(c_info->category - 1); bool mature = is_cf_mature(c_info->flags); bool auto_renew = is_cf_auto_renew(c_info->flags); setContentType(mature ? CB_ITEM_MATURE : CB_ITEM_PG); getChild<LLUICtrl>("auto_renew")->setValue(auto_renew); getChild<LLUICtrl>("price_for_listing")->setValue(c_info->price_for_listing); getChildView("price_for_listing")->setEnabled(isNew()); resetDirty(); setInfoLoaded(true); enableVerbs(false); // for just created classified - in case user opened edit panel before processProperties() callback getChild<LLUICtrl>("save_changes_btn")->setLabelArg("[LABEL]", getString("save_label")); } } }
void LLPanelClassifiedInfo::processProperties(void* data, EAvatarProcessorType type) { if(APT_CLASSIFIED_INFO == type) { LLAvatarClassifiedInfo* c_info = static_cast<LLAvatarClassifiedInfo*>(data); if(c_info && getClassifiedId() == c_info->classified_id) { setClassifiedName(c_info->name); setDescription(c_info->description); setSnapshotId(c_info->snapshot_id); setParcelId(c_info->parcel_id); setPosGlobal(c_info->pos_global); setSimName(c_info->sim_name); setClassifiedLocation(createLocationText(c_info->parcel_name, c_info->sim_name, c_info->pos_global)); getChild<LLUICtrl>("category")->setValue(LLClassifiedInfo::sCategories[c_info->category]); static std::string mature_str = getString("type_mature"); static std::string pg_str = getString("type_pg"); static LLUIString price_str = getString("l$_price"); static std::string date_fmt = getString("date_fmt"); bool mature = is_cf_mature(c_info->flags); getChild<LLUICtrl>("content_type")->setValue(mature ? mature_str : pg_str); getChild<LLIconCtrl>("content_type_moderate")->setVisible(mature); getChild<LLIconCtrl>("content_type_general")->setVisible(!mature); std::string auto_renew_str = is_cf_auto_renew(c_info->flags) ? getString("auto_renew_on") : getString("auto_renew_off"); getChild<LLUICtrl>("auto_renew")->setValue(auto_renew_str); price_str.setArg("[PRICE]", llformat("%d", c_info->price_for_listing)); getChild<LLUICtrl>("price_for_listing")->setValue(LLSD(price_str)); std::string date_str = date_fmt; LLStringUtil::format(date_str, LLSD().with("datetime", (S32) c_info->creation_date)); getChild<LLUICtrl>("creation_date")->setValue(date_str); setInfoLoaded(true); } } }
//static void LLPanelClassified::processClassifiedInfoReply(LLMessageSystem *msg, void **) { lldebugs << "processClassifiedInfoReply()" << llendl; // Extract the agent id and verify the message is for this // client. LLUUID agent_id; msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id ); if (agent_id != gAgent.getID()) { llwarns << "Agent ID mismatch in processClassifiedInfoReply" << llendl; return; } LLUUID classified_id; msg->getUUIDFast(_PREHASH_Data, _PREHASH_ClassifiedID, classified_id); LLUUID creator_id; msg->getUUIDFast(_PREHASH_Data, _PREHASH_CreatorID, creator_id); LLUUID parcel_id; msg->getUUIDFast(_PREHASH_Data, _PREHASH_ParcelID, parcel_id); std::string name; msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name); std::string desc; msg->getStringFast(_PREHASH_Data, _PREHASH_Desc, desc); LLUUID snapshot_id; msg->getUUIDFast(_PREHASH_Data, _PREHASH_SnapshotID, snapshot_id); // "Location text" is actually the original // name that owner gave the parcel, and the location. std::string location_text; msg->getStringFast(_PREHASH_Data, _PREHASH_ParcelName, location_text); if (!location_text.empty()) { location_text.append(", "); } std::string sim_name; msg->getStringFast(_PREHASH_Data, _PREHASH_SimName, sim_name); LLVector3d pos_global; msg->getVector3dFast(_PREHASH_Data, _PREHASH_PosGlobal, pos_global); S32 region_x = llround((F32)pos_global.mdV[VX]) % REGION_WIDTH_UNITS; S32 region_y = llround((F32)pos_global.mdV[VY]) % REGION_WIDTH_UNITS; S32 region_z = llround((F32)pos_global.mdV[VZ]); std::string buffer = llformat("%s (%d, %d, %d)", sim_name.c_str(), region_x, region_y, region_z); location_text.append(buffer); U8 flags; msg->getU8Fast(_PREHASH_Data, _PREHASH_ClassifiedFlags, flags); //BOOL enabled = is_cf_enabled(flags); bool mature = is_cf_mature(flags); bool auto_renew = is_cf_auto_renew(flags); U32 date = 0; msg->getU32Fast(_PREHASH_Data, _PREHASH_CreationDate, date); time_t tim = date; tm *now=localtime(&tim); // future use U32 expiration_date = 0; msg->getU32("Data", "ExpirationDate", expiration_date); U32 category = 0; msg->getU32Fast(_PREHASH_Data, _PREHASH_Category, category); S32 price_for_listing = 0; msg->getS32("Data", "PriceForListing", price_for_listing); // Look up the panel to fill in for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter) { LLPanelClassified* self = *iter; // For top picks, must match pick id if (self->mClassifiedID != classified_id) { continue; } // Found the panel, now fill in the information self->mClassifiedID = classified_id; self->mCreatorID = creator_id; self->mParcelID = parcel_id; self->mPriceForListing = price_for_listing; self->mSimName.assign(sim_name); self->mPosGlobal = pos_global; // Update UI controls self->mNameEditor->setText(name); self->mDescEditor->setText(desc); self->mSnapshotCtrl->setImageAssetID(snapshot_id); self->mLocationEditor->setText(location_text); self->mLocationChanged = false; self->mCategoryCombo->setCurrentByIndex(category - 1); if(mature) { self->mMatureCombo->setCurrentByIndex(MATURE_CONTENT); } else { self->mMatureCombo->setCurrentByIndex(PG_CONTENT); } if (self->mAutoRenewCheck) { self->mAutoRenewCheck->set(auto_renew); } std::string datestr; timeStructToFormattedString(now, gSavedSettings.getString("ShortDateFormat"), datestr); LLStringUtil::format_map_t string_args; string_args["[DATE]"] = datestr; string_args["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol(); string_args["[AMT]"] = llformat("%d", price_for_listing); self->childSetText("classified_info_text", self->getString("ad_placed_paid", string_args)); // If we got data from the database, we know the listing is paid for. self->mPaidFor = TRUE; self->mUpdateBtn->setLabel(self->getString("update_txt")); self->resetDirty(); // I don't know if a second call is deliberate or a bad merge, so I'm leaving it here. self->resetDirty(); } }
void LLPanelClassified::processProperties(void* data, EAvatarProcessorType type) { if(APT_CLASSIFIED_INFO == type) { lldebugs << "processClassifiedInfoReply()" << llendl; LLAvatarClassifiedInfo* c_info = static_cast<LLAvatarClassifiedInfo*>(data); if(c_info && mClassifiedID == c_info->classified_id) { LLAvatarPropertiesProcessor::getInstance()->removeObserver(LLUUID::null, this); // "Location text" is actually the original // name that owner gave the parcel, and the location. std::string location_text = c_info->parcel_name; if (!location_text.empty()) location_text.append(", "); S32 region_x = llround((F32)c_info->pos_global.mdV[VX]) % REGION_WIDTH_UNITS; S32 region_y = llround((F32)c_info->pos_global.mdV[VY]) % REGION_WIDTH_UNITS; S32 region_z = llround((F32)c_info->pos_global.mdV[VZ]); std::string buffer = llformat("%s (%d, %d, %d)", c_info->sim_name.c_str(), region_x, region_y, region_z); location_text.append(buffer); //BOOL enabled = is_cf_enabled(flags); time_t tim = c_info->creation_date; tm *now=localtime(&tim); // Found the panel, now fill in the information mClassifiedID = c_info->classified_id; mCreatorID = c_info->creator_id; mParcelID = c_info->parcel_id; mPriceForListing = c_info->price_for_listing; mSimName = c_info->sim_name; mPosGlobal = c_info->pos_global; // Update UI controls mNameEditor->setText(c_info->name); mDescEditor->setText(c_info->description); mSnapshotCtrl->setImageAssetID(c_info->snapshot_id); mLocationEditor->setText(location_text); mLocationChanged = false; mCategoryCombo->setCurrentByIndex(c_info->category - 1); mMatureCombo->setCurrentByIndex(is_cf_mature(c_info->flags) ? MATURE_CONTENT : PG_CONTENT); if (mAutoRenewCheck) { mAutoRenewCheck->set(is_cf_auto_renew(c_info->flags)); } std::string datestr; timeStructToFormattedString(now, gSavedSettings.getString("ShortDateFormat"), datestr); LLStringUtil::format_map_t string_args; string_args["[DATE]"] = datestr; string_args["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol(); string_args["[AMT]"] = llformat("%d", c_info->price_for_listing); childSetText("classified_info_text", getString("ad_placed_paid", string_args)); // If we got data from the database, we know the listing is paid for. mPaidFor = TRUE; mUpdateBtn->setLabel(getString("update_txt")); resetDirty(); // I don't know if a second call is deliberate or a bad merge, so I'm leaving it here. resetDirty(); } } }