summaryrefslogtreecommitdiff
path: root/indra/newview/llpanelclassified.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llpanelclassified.h')
-rw-r--r--indra/newview/llpanelclassified.h364
1 files changed, 229 insertions, 135 deletions
diff --git a/indra/newview/llpanelclassified.h b/indra/newview/llpanelclassified.h
index 417eddf460..cedd65c405 100644
--- a/indra/newview/llpanelclassified.h
+++ b/indra/newview/llpanelclassified.h
@@ -2,139 +2,188 @@
* @file llpanelclassified.h
* @brief LLPanelClassified class definition
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
// Display of a classified used both for the global view in the
// Find directory, and also for each individual user's classified in their
// profile.
-
#ifndef LL_LLPANELCLASSIFIED_H
#define LL_LLPANELCLASSIFIED_H
-#include "llpanel.h"
+#include "llavatarpropertiesprocessor.h"
#include "llclassifiedinfo.h"
-#include "v3dmath.h"
-#include "lluuid.h"
#include "llfloater.h"
-//#include "llrect.h"
-
-class LLButton;
-class LLCheckBoxCtrl;
-class LLComboBox;
-class LLIconCtrl;
-class LLLineEditor;
-class LLTextBox;
-class LLTextEditor;
+#include "llpanel.h"
+#include "llrect.h"
+#include "lluuid.h"
+#include "v3dmath.h"
+
+class LLScrollContainer;
class LLTextureCtrl;
class LLUICtrl;
-class LLMessageSystem;
-class LLPanelClassified : public LLPanel
+class LLPublishClassifiedFloater : public LLFloater
{
public:
- LLPanelClassified(bool in_finder, bool from_search);
- /*virtual*/ ~LLPanelClassified();
+ LLPublishClassifiedFloater(const LLSD& key);
+ virtual ~LLPublishClassifiedFloater();
- void reset();
+ /*virtual*/ BOOL postBuild();
- /*virtual*/ BOOL postBuild();
+ void setPrice(S32 price);
+ S32 getPrice();
- /*virtual*/ void draw();
+ void setPublishClickedCallback(const commit_signal_t::slot_type& cb);
+ void setCancelClickedCallback(const commit_signal_t::slot_type& cb);
- /*virtual*/ void refresh();
+private:
+};
- void apply();
+class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver
+{
+ LOG_CLASS(LLPanelClassifiedInfo);
+public:
+
+ static LLPanelClassifiedInfo* create();
+
+ virtual ~LLPanelClassifiedInfo();
+
+ /*virtual*/ void onOpen(const LLSD& key);
+
+ /*virtual*/ BOOL postBuild();
- // If can close, return TRUE. If cannot close, pop save/discard dialog
- // and return FALSE.
- BOOL canClose();
+ /*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
- // Setup a new classified, including creating an id, giving a sane
- // initial position, etc.
- void initNewClassified();
+ void setAvatarId(const LLUUID& avatar_id) { mAvatarId = avatar_id; }
- void setClassifiedID(const LLUUID& id);
- void setClickThroughText(const std::string& text);
- static void setClickThrough(const LLUUID& classified_id,
- S32 teleport, S32 map, S32 profile, bool from_new_table);
+ LLUUID& getAvatarId() { return mAvatarId; }
- // check that the title is valid (E.G. starts with a number or letter)
- BOOL titleIsValid();
+ void setSnapshotId(const LLUUID& id);
- // Schedules the panel to request data
- // from the server next time it is drawn.
- void markForServerRequest();
+ LLUUID getSnapshotId();
+
+ void setClassifiedId(const LLUUID& id) { mClassifiedId = id; }
+
+ LLUUID& getClassifiedId() { return mClassifiedId; }
+
+ void setClassifiedName(const std::string& name);
std::string getClassifiedName();
- const LLUUID& getClassifiedID() const { return mClassifiedID; }
- void sendClassifiedInfoRequest();
- void sendClassifiedInfoUpdate();
- void resetDirty();
+ void setDescription(const std::string& desc);
- static void processClassifiedInfoReply(LLMessageSystem* msg, void**);
+ std::string getDescription();
- // Confirmation dialogs flow in this order
- bool confirmMature(const LLSD& notification, const LLSD& response);
- void gotMature();
- static void callbackGotPriceForListing(S32 option, std::string text, void* data);
- bool confirmPublish(const LLSD& notification, const LLSD& response);
+ void setClassifiedLocation(const std::string& location);
- void sendClassifiedClickMessage(const std::string& type);
+ std::string getClassifiedLocation();
-protected:
- bool saveCallback(const LLSD& notification, const LLSD& response);
+ void setPosGlobal(const LLVector3d& pos) { mPosGlobal = pos; }
+
+ LLVector3d& getPosGlobal() { return mPosGlobal; }
+
+ void setParcelId(const LLUUID& id) { mParcelId = id; }
- static void onClickUpdate(void* data);
- static void onClickTeleport(void* data);
- static void onClickMap(void* data);
- static void onClickProfile(void* data);
- static void onClickSet(void* data);
+ LLUUID getParcelId() { return mParcelId; }
- static void focusReceived(LLFocusableElement* ctrl, void* data);
- static void onCommitAny(LLUICtrl* ctrl, void* data);
+ void setSimName(const std::string& sim_name) { mSimName = sim_name; }
- void setDefaultAccessCombo(); // Default AO and PG regions to proper classified access
-
- BOOL checkDirty(); // Update and return mDirty
+ std::string getSimName() { return mSimName; }
+
+ void setFromSearch(bool val) { mFromSearch = val; }
+
+ bool fromSearch() { return mFromSearch; }
+
+ bool getInfoLoaded() { return mInfoLoaded; }
+
+ void setInfoLoaded(bool loaded) { mInfoLoaded = loaded; }
+
+ static void setClickThrough(
+ const LLUUID& classified_id,
+ S32 teleport,
+ S32 map,
+ S32 profile,
+ bool from_new_table);
+
+ static void sendClickMessage(
+ const std::string& type,
+ bool from_search,
+ const LLUUID& classified_id,
+ const LLUUID& parcel_id,
+ const LLVector3d& global_pos,
+ const std::string& sim_name);
+
+ void setExitCallback(const commit_callback_t& cb);
+
+ void setEditClassifiedCallback(const commit_callback_t& cb);
+
+ /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
+
+ /*virtual*/ void draw();
protected:
- bool mInFinder;
- bool mFromSearch; // from web-based "All" search sidebar
- BOOL mDirty;
- bool mForceClose;
- bool mLocationChanged;
- LLUUID mClassifiedID;
- LLUUID mRequestedID;
- LLUUID mCreatorID;
- LLUUID mParcelID;
- S32 mPriceForListing;
+
+ LLPanelClassifiedInfo();
+
+ virtual void resetData();
+
+ virtual void resetControls();
+
+ static std::string createLocationText(
+ const std::string& original_name,
+ const std::string& sim_name,
+ const LLVector3d& pos_global);
+
+ void stretchSnapshot();
+ void sendClickMessage(const std::string& type);
+
+ LLRect getDefaultSnapshotRect();
+
+ void scrollToTop();
+
+ void onMapClick();
+ void onTeleportClick();
+ void onExit();
+
+ bool mSnapshotStreched;
+ LLRect mSnapshotRect;
+ LLTextureCtrl* mSnapshotCtrl;
+
+private:
+
+ LLUUID mAvatarId;
+ LLUUID mClassifiedId;
+ LLVector3d mPosGlobal;
+ LLUUID mParcelId;
+ std::string mSimName;
+ bool mFromSearch;
+ bool mInfoLoaded;
+
+ LLScrollContainer* mScrollContainer;
+ LLPanel* mScrollingPanel;
+
+ S32 mScrollingPanelMinHeight;
+ S32 mScrollingPanelWidth;
// Needed for stat tracking
S32 mTeleportClicksOld;
@@ -144,59 +193,104 @@ protected:
S32 mMapClicksNew;
S32 mProfileClicksNew;
- // Data will be requested on first draw
- BOOL mDataRequested;
-
- // For avatar panel classifieds only, has the user been charged
- // yet for this classified? That is, have they saved once?
- BOOL mPaidFor;
-
- std::string mSimName;
- LLVector3d mPosGlobal;
-
- // Values the user may change
- LLTextureCtrl* mSnapshotCtrl;
- LLLineEditor* mNameEditor;
- LLTextEditor* mDescEditor;
- LLLineEditor* mLocationEditor;
- LLComboBox* mCategoryCombo;
- LLComboBox* mMatureCombo;
- LLCheckBoxCtrl* mAutoRenewCheck;
-
- LLButton* mUpdateBtn;
- LLButton* mTeleportBtn;
- LLButton* mMapBtn;
- LLButton* mProfileBtn;
-
- LLTextBox* mInfoText;
- LLButton* mSetBtn;
- LLTextBox* mClickThroughText;
-
- LLRect mSnapshotSize;
- typedef std::list<LLPanelClassified*> panel_list_t;
+ typedef std::list<LLPanelClassifiedInfo*> panel_list_t;
static panel_list_t sAllPanels;
};
-
-class LLFloaterPriceForListing
-: public LLFloater
+class LLPanelClassifiedEdit : public LLPanelClassifiedInfo
{
+ LOG_CLASS(LLPanelClassifiedEdit);
public:
- LLFloaterPriceForListing();
- virtual ~LLFloaterPriceForListing();
- virtual BOOL postBuild();
- static void show( void (*callback)(S32 option, std::string value, void* userdata), void* userdata );
+ static LLPanelClassifiedEdit* create();
-private:
- static void onClickSetPrice(void*);
- static void onClickCancel(void*);
- static void buttonCore(S32 button, void* data);
+ virtual ~LLPanelClassifiedEdit();
+
+ /*virtual*/ BOOL postBuild();
+
+ void fillIn(const LLSD& key);
+
+ /*virtual*/ void onOpen(const LLSD& key);
+
+ /*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
+
+ /*virtual*/ BOOL isDirty() const;
+
+ /*virtual*/ void resetDirty();
+
+ void setSaveCallback(const commit_signal_t::slot_type& cb);
+
+ void setCancelCallback(const commit_signal_t::slot_type& cb);
+
+ /*virtual*/ void resetControls();
+
+ bool isNew() { return mIsNew; }
+
+ bool isNewWithErrors() { return mIsNewWithErrors; }
+
+ bool canClose();
+
+ void draw();
+
+ void stretchSnapshot();
+
+ U32 getCategory();
+
+ void setCategory(U32 category);
+
+ U32 getContentType();
+
+ void setContentType(U32 content_type);
+
+ bool getAutoRenew();
+
+ S32 getPriceForListing();
+
+protected:
+
+ LLPanelClassifiedEdit();
+
+ void sendUpdate();
+
+ void enableVerbs(bool enable);
+
+ void enableEditing(bool enable);
+
+ void showEditing(bool show);
+
+ std::string makeClassifiedName();
+
+ void setPriceForListing(S32 price);
+
+ U8 getFlags();
+
+ std::string getLocationNotice();
+
+ bool isValidName();
+
+ void notifyInvalidName();
+
+ void onSetLocationClick();
+ void onChange();
+ void onSaveClick();
+
+ void doSave();
+
+ void onPublishFloaterPublishClicked();
+
+ void onTexturePickerMouseEnter(LLUICtrl* ctrl);
+ void onTexturePickerMouseLeave(LLUICtrl* ctrl);
+
+ void onTextureSelected();
private:
- void (*mCallback)(S32 option, std::string, void*);
- void* mUserData;
-};
+ bool mIsNew;
+ bool mIsNewWithErrors;
+ bool mCanClose;
+
+ LLPublishClassifiedFloater* mPublishFloater;
+ commit_signal_t mSaveButtonClickedSignal;
+};
#endif // LL_LLPANELCLASSIFIED_H