diff options
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llfolderviewitem.cpp | 34 | ||||
| -rw-r--r-- | indra/newview/llimfloatercontainer.cpp | 82 | ||||
| -rw-r--r-- | indra/newview/llimfloatercontainer.h | 81 | 
3 files changed, 185 insertions, 12 deletions
| diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index f40f051537..d7d5195c14 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -293,7 +293,7 @@ void LLFolderViewItem::refreshFromListener()  			setCreationDate(creation_date);  			dirtyFilter();  		} -		if (mRoot->useLabelSuffix()) +		if (mRoot && mRoot->useLabelSuffix())  		{  			mLabelStyle = mListener->getLabelStyle();  			mLabelSuffix = mListener->getLabelSuffix(); @@ -383,7 +383,10 @@ void LLFolderViewItem::setSelectionFromRoot(LLFolderViewItem* selection,  											BOOL openitem,  											BOOL take_keyboard_focus)  { -	getRoot()->setSelection(selection, openitem, take_keyboard_focus); +	if (getRoot()) +	{ +		getRoot()->setSelection(selection, openitem, take_keyboard_focus); +	}  }  // helper function to change the selection from the root. @@ -760,7 +763,10 @@ BOOL LLFolderViewItem::handleHover( S32 x, S32 y, MASK mask )  	}  	else  	{ -		getRoot()->setShowSelectionContext(FALSE); +		if (getRoot()) +		{ +			getRoot()->setShowSelectionContext(FALSE); +		}  		gViewerWindow->setCursor(UI_CURSOR_ARROW);  		// let parent handle this then...  		return FALSE; @@ -803,7 +809,10 @@ BOOL LLFolderViewItem::handleMouseUp( S32 x, S32 y, MASK mask )  	if( hasMouseCapture() )  	{ -		getRoot()->setShowSelectionContext(FALSE); +		if (getRoot()) +		{ +			getRoot()->setShowSelectionContext(FALSE); +		}  		gFocusMgr.setMouseCapture( NULL );  	}  	return TRUE; @@ -870,8 +879,9 @@ void LLFolderViewItem::draw()  	const S32 FOCUS_LEFT = 1;  	const LLFontGL* font = getLabelFontForStyle(mLabelStyle); -	const BOOL in_inventory = getListener() && gInventory.isObjectDescendentOf(getListener()->getUUID(), gInventory.getRootFolderID()); -	const BOOL in_library = getListener() && gInventory.isObjectDescendentOf(getListener()->getUUID(), gInventory.getLibraryRootFolderID()); +	const LLUUID uuid = (getListener() ? getListener()->getUUID() : LLUUID::null); +	const BOOL in_inventory = (uuid.notNull() ? gInventory.isObjectDescendentOf(uuid, gInventory.getRootFolderID()) : FALSE); +	const BOOL in_library   = (uuid.notNull() ? gInventory.isObjectDescendentOf(uuid, gInventory.getLibraryRootFolderID()) : FALSE);  	//--------------------------------------------------------------------------------//  	// Draw open folder arrow @@ -891,8 +901,8 @@ void LLFolderViewItem::draw()  	//--------------------------------------------------------------------------------//  	// Draw highlight for selected items  	// -	const BOOL show_context = getRoot()->getShowSelectionContext(); -	const BOOL filled = show_context || (getRoot()->getParentPanel()->hasFocus()); // If we have keyboard focus, draw selection filled +	const BOOL show_context = (getRoot() ? getRoot()->getShowSelectionContext() : FALSE); +	const BOOL filled = show_context || (getRoot() ? getRoot()->getParentPanel()->hasFocus() : FALSE); // If we have keyboard focus, draw selection filled  	const S32 focus_top = getRect().getHeight();  	const S32 focus_bottom = getRect().getHeight() - mItemHeight;  	const bool folder_open = (getRect().getHeight() > mItemHeight + 4); @@ -903,8 +913,8 @@ void LLFolderViewItem::draw()  		if (!mIsCurSelection)  		{  			// do time-based fade of extra objects -			F32 fade_time = getRoot()->getSelectionFadeElapsedTime(); -			if (getRoot()->getShowSingleSelection()) +			F32 fade_time = (getRoot() ? getRoot()->getSelectionFadeElapsedTime() : 0.0f); +			if (getRoot() && getRoot()->getShowSingleSelection())  			{  				// fading out  				bg_color.mV[VALPHA] = clamp_rescale(fade_time, 0.f, 0.4f, bg_color.mV[VALPHA], 0.f); @@ -1015,7 +1025,7 @@ void LLFolderViewItem::draw()  	//--------------------------------------------------------------------------------//  	// Highlight filtered text  	// -	if (getRoot()->getDebugFilters()) +	if (getRoot() && getRoot()->getDebugFilters())  	{  		if (!getFiltered() && !possibly_has_children)  		{ @@ -1076,7 +1086,7 @@ void LLFolderViewItem::draw()  	if (mStringMatchOffset != std::string::npos)  	{  		// don't draw backgrounds for zero-length strings -		S32 filter_string_length = getRoot()->getFilterSubString().size(); +		S32 filter_string_length = (getRoot() ? getRoot()->getFilterSubString().size() : 0);  		if (filter_string_length > 0)  		{  			std::string combined_string = mLabel + mLabelSuffix; diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp index 3b6240de44..cd19105860 100644 --- a/indra/newview/llimfloatercontainer.cpp +++ b/indra/newview/llimfloatercontainer.cpp @@ -71,6 +71,8 @@ BOOL LLIMFloaterContainer::postBuild()  	mConversationsStack = getChild<LLLayoutStack>("conversations_stack");  	mConversationsPane = getChild<LLLayoutPanel>("conversations_layout_panel");  	mMessagesPane = getChild<LLLayoutPanel>("messages_layout_panel"); +	 +	mConversationsListPanel = getChild<LLPanel>("conversations_list_panel");  	mExpandCollapseBtn = getChild<LLButton>("expand_collapse_btn");  	mExpandCollapseBtn->setClickedCallback(boost::bind(&LLIMFloaterContainer::onExpandCollapseButtonClicked, this)); @@ -112,6 +114,25 @@ void LLIMFloaterContainer::addFloater(LLFloater* floaterp,  	LLMultiFloater::addFloater(floaterp, select_added_floater, insertion_point); +	// CHUI-137 +	// Create a conversation item +	LLConversationItem* item = new LLConversationItem(floaterp->getTitle()); +	mConversationsItems.push_back(item); +	// Create a widget from it +	LLFolderViewItem* widget = createConversationItemWidget(item); +	mConversationsWidgets.push_back(widget); +	// Add it to the UI +	widget->setVisible(TRUE); +	mConversationsListPanel->addChild(widget); +	LLRect panel_rect = mConversationsListPanel->getRect(); +	S32 item_height = 16; +	S32 index = mConversationsWidgets.size() - 1; +	widget->setRect(LLRect(0, +						   panel_rect.getHeight() - item_height*index, +						   panel_rect.getWidth(), +						   panel_rect.getHeight() - item_height*(index+1))); +	// CHUI-137 : end +	  	LLView* floater_contents = floaterp->getChild<LLView>("contents_view");  	// we don't show the header when the floater is hosted, @@ -150,6 +171,8 @@ void LLIMFloaterContainer::removeFloater(LLFloater* floaterp)  {  	LLMultiFloater::removeFloater(floaterp); +	llinfos << "Merov debug : removeFloater, title = " << floaterp->getTitle() << llendl; +  	LLRect contents_rect = floaterp->getRect();  	// reduce the floater contents height by header height @@ -313,4 +336,63 @@ void LLIMFloaterContainer::updateState(bool collapse, S32 delta_width)  	setCanMinimize(is_left_pane_expanded || is_right_pane_expanded);  } +// CHUI-137 : Temp implementation of conversations list +LLFolderViewItem* LLIMFloaterContainer::createConversationItemWidget(LLConversationItem* item) +{ +	LLFolderViewItem::Params params; +	 +	params.name = item->getDisplayName(); +	//params.icon = bridge->getIcon(); +	//params.icon_open = bridge->getOpenIcon(); +		 +	//params.creation_date = bridge->getCreationDate(); +	//params.root = mFolderRoot; +	params.listener = item; +	params.rect = LLRect (0, 0, 0, 0); +	params.tool_tip = params.name; +	 +	return LLUICtrlFactory::create<LLFolderViewItem>(params); +} + +// Conversation items +LLConversationItem::LLConversationItem(std::string name) : +	mName(name), +	mUUID(LLUUID::null) +{ +	if (name == "") +		mName = "Nearby Chat"; +} + +// Virtual action callbacks +void LLConversationItem::performAction(LLInventoryModel* model, std::string action) +{ +	llinfos << "Merov debug : performAction, title = " << mName << ", action = " << action << llendl; +} + +void LLConversationItem::openItem( void ) +{ +	llinfos << "Merov debug : openItem, title = " << mName << llendl; +} + +void LLConversationItem::closeItem( void ) +{ +	llinfos << "Merov debug : closeItem, title = " << mName << llendl; +} + +void LLConversationItem::previewItem( void ) +{ +	llinfos << "Merov debug : previewItem, title = " << mName << llendl; +} + +void LLConversationItem::selectItem(void) +{ +	llinfos << "Merov debug : selectItem, title = " << mName << llendl; +} + +void LLConversationItem::showProperties(void) +{ +	llinfos << "Merov debug : showProperties, title = " << mName << llendl; +} + +  // EOF diff --git a/indra/newview/llimfloatercontainer.h b/indra/newview/llimfloatercontainer.h index 92938ff405..d04ac873fa 100644 --- a/indra/newview/llimfloatercontainer.h +++ b/indra/newview/llimfloatercontainer.h @@ -35,11 +35,85 @@  #include "llavatarpropertiesprocessor.h"  #include "llgroupmgr.h" +#include "llfolderviewitem.h" +#include "llfoldervieweventlistener.h" +  class LLButton;  class LLLayoutPanel;  class LLLayoutStack;  class LLTabContainer; +// CHUI-137 : Temporary implementation of conversations list +class LLConversationItem; + +typedef std::list<LLConversationItem*> conversations_items_list_t; +typedef std::list<LLFolderViewItem*> conversations_widgets_list_t; + +// Conversation items: we hold a list of those and create an LLFolderViewItem widget for each that we tuck  +// into the mConversationsListPanel.  +class LLConversationItem : public LLFolderViewEventListener +{ +public: +	LLConversationItem(std::string name); +	virtual ~LLConversationItem() {} + +	// Stub those things we won't really be using in this conversation context +	virtual const std::string& getName() const { return mName; } +	virtual const std::string& getDisplayName() const { return mName; } +	virtual const LLUUID& getUUID() const { return mUUID; } +	virtual time_t getCreationDate() const { return 0; } +	virtual PermissionMask getPermissionMask() const { return PERM_ALL; } +	virtual LLFolderType::EType getPreferredType() const { return LLFolderType::FT_NONE; } +	virtual LLPointer<LLUIImage> getIcon() const { return NULL; } +	virtual LLPointer<LLUIImage> getOpenIcon() const { return getIcon(); } +	virtual LLFontGL::StyleFlags getLabelStyle() const { return LLFontGL::NORMAL; } +	virtual std::string getLabelSuffix() const { return LLStringUtil::null; } +	virtual BOOL isItemRenameable() const { return FALSE; } +	virtual BOOL renameItem(const std::string& new_name) { return FALSE; } +	virtual BOOL isItemMovable( void ) const { return FALSE; } +	virtual BOOL isItemRemovable( void ) const { return FALSE; } +	virtual BOOL isItemInTrash( void) const { return FALSE; } +	virtual BOOL removeItem() { return FALSE; } +	virtual void removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch) { } +	virtual void move( LLFolderViewEventListener* parent_listener ) { } +	virtual BOOL isItemCopyable() const { return FALSE; } +	virtual BOOL copyToClipboard() const { return FALSE; } +	virtual void cutToClipboard() { } +	virtual BOOL isClipboardPasteable() const { return FALSE; } +	virtual void pasteFromClipboard() { } +	virtual void pasteLinkFromClipboard() { } +	virtual void buildContextMenu(LLMenuGL& menu, U32 flags) { } +	virtual BOOL isUpToDate() const { return TRUE; } +	virtual BOOL hasChildren() const { return FALSE; } +	virtual LLInventoryType::EType getInventoryType() const { return LLInventoryType::IT_NONE; } +	virtual LLWearableType::EType getWearableType() const { return LLWearableType::WT_NONE; } + +	// The action callbacks (or so we think...) +	virtual void performAction(LLInventoryModel* model, std::string action); +	virtual void openItem( void ); +	virtual void closeItem( void ); +	virtual void previewItem( void ); +	virtual void selectItem(void); +	virtual void showProperties(void); +	 +	// This method should be called when a drag begins. returns TRUE +	// if the drag can begin, otherwise FALSE. +	virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const { return FALSE; } +	 +	// This method will be called to determine if a drop can be +	// performed, and will set drop to TRUE if a drop is +	// requested. Returns TRUE if a drop is possible/happened, +	// otherwise FALSE. +	virtual BOOL dragOrDrop(MASK mask, BOOL drop, +							EDragAndDropType cargo_type, +							void* cargo_data, +							std::string& tooltip_msg) { return FALSE; } +private: +	std::string mName; +	const LLUUID mUUID; +}; +	// CHUI-137 : End +  class LLIMFloaterContainer : public LLMultiFloater  {  public: @@ -64,6 +138,8 @@ public:  	virtual void setMinimized(BOOL b);  	void collapseMessagesPane(bool collapse); +	 +	LLFolderViewItem* createConversationItemWidget(LLConversationItem* item);  private:  	typedef std::map<LLUUID,LLFloater*> avatarID_panel_map_t; @@ -84,6 +160,11 @@ private:  	LLLayoutPanel* mMessagesPane;  	LLLayoutPanel* mConversationsPane;  	LLLayoutStack* mConversationsStack; +	 +	// CHUI-137 : Data +	LLPanel* mConversationsListPanel;	// The widget we add list item to (title of each conversation) +	conversations_items_list_t mConversationsItems; +	conversations_widgets_list_t mConversationsWidgets;  };  #endif // LL_LLIMFLOATERCONTAINER_H | 
