summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/newview/llfolderviewitem.cpp34
-rw-r--r--indra/newview/llimfloatercontainer.cpp82
-rw-r--r--indra/newview/llimfloatercontainer.h81
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