summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexanderP ProductEngine <apaschenko@productengine.com>2012-11-16 22:36:12 +0200
committerAlexanderP ProductEngine <apaschenko@productengine.com>2012-11-16 22:36:12 +0200
commite298c2ded8e25a28127c668cf30a74a25c139041 (patch)
tree0517349a365864905a68ba6bf9f66ee05ddc41f4
parent50b69c3f97c0b58791f7dd67f8b2fbdc9e8ef503 (diff)
CHUI-487, CHUI-488 FIXED (Enable flashing FUI button behavior and Implement Flashing Conversations panel line item behavior): implemented FUI button flashing; clean up code
-rw-r--r--indra/llui/CMakeLists.txt2
-rw-r--r--indra/llui/llbutton.cpp46
-rw-r--r--indra/llui/llbutton.h6
-rw-r--r--indra/llui/llflashtimer.cpp (renamed from indra/newview/llflashtimer.cpp)6
-rw-r--r--indra/llui/llflashtimer.h (renamed from indra/newview/llflashtimer.h)3
-rwxr-xr-xindra/llui/llfolderviewitem.cpp15
-rwxr-xr-xindra/llui/llfolderviewitem.h3
-rw-r--r--indra/llui/lltabcontainer.cpp4
-rwxr-xr-xindra/newview/CMakeLists.txt2
-rw-r--r--indra/newview/llfloaterimcontainer.cpp14
-rw-r--r--indra/newview/llfloaterimcontainer.h2
-rw-r--r--indra/newview/llfloaterimsessiontab.cpp10
12 files changed, 63 insertions, 50 deletions
diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt
index 80cec6c9f3..ccc7aa8cec 100644
--- a/indra/llui/CMakeLists.txt
+++ b/indra/llui/CMakeLists.txt
@@ -47,6 +47,7 @@ set(llui_SOURCE_FILES
lleditmenuhandler.cpp
llf32uictrl.cpp
llfiltereditor.cpp
+ llflashtimer.cpp
llflatlistview.cpp
llfloater.cpp
llfloaterreg.cpp
@@ -153,6 +154,7 @@ set(llui_HEADER_FILES
lleditmenuhandler.h
llf32uictrl.h
llfiltereditor.h
+ llflashtimer.h
llflatlistview.h
llfloater.h
llfloaterreg.h
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 3b9076ee54..8a34e221b1 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -170,17 +170,18 @@ LLButton::LLButton(const LLButton::Params& p)
mMouseUpSignal(NULL),
mHeldDownSignal(NULL),
mUseDrawContextAlpha(p.use_draw_context_alpha),
- mHandleRightMouse(p.handle_right_mouse),
- mButtonFlashCount(p.button_flash_count),
- mButtonFlashRate(p.button_flash_rate)
+ mHandleRightMouse(p.handle_right_mouse)
{
+ // If optional parameter "p.button_flash_count" is not provided, LLFlashTimer will be
+ // used instead it a "default" value from gSavedSettings.getS32("FlashCount")).
+ // Likewise, missing "p.button_flash_rate" is replaced by gSavedSettings.getF32("FlashPeriod");
+ S32 flash_count = p.button_flash_count || 0;
+ F32 flash_rate = p.button_flash_rate || 0.0; //
+ mFlashingTimer = new LLFlashTimer ((LLFlashTimer::callback_t)NULL, flash_count, flash_rate);
+
static LLUICachedControl<S32> llbutton_orig_h_pad ("UIButtonOrigHPad", 0);
static Params default_params(LLUICtrlFactory::getDefaultParams<LLButton>());
-if (this->getName() == "chat")
-{
-bool q = false;
-q = !q;
-}
+
if (!p.label_selected.isProvided())
{
mSelectedLabel = mUnselectedLabel;
@@ -271,6 +272,7 @@ LLButton::~LLButton()
delete mMouseDownSignal;
delete mMouseUpSignal;
delete mHeldDownSignal;
+ delete mFlashingTimer;
}
// HACK: Committing a button is the same as instantly clicking it.
@@ -595,22 +597,11 @@ void LLButton::draw()
{
static LLCachedControl<bool> sEnableButtonFlashing(*LLUI::sSettingGroups["config"], "EnableButtonFlashing", true);
F32 alpha = mUseDrawContextAlpha ? getDrawContext().mAlpha : getCurrentTransparency();
- bool flash = FALSE;
- if( mFlashing)
- {
- if ( sEnableButtonFlashing)
- {
- F32 elapsed = mFlashingTimer.getElapsedTimeF32();
- S32 flash_count = S32(elapsed * mButtonFlashRate * 2.f);
- // flash on or off?
- flash = (flash_count % 2 == 0) || flash_count > S32((F32)mButtonFlashCount * 2.f);
- }
- else
- { // otherwise just highlight button in flash color
- flash = true;
- }
- }
+ mFlashing = mFlashingTimer->isFlashing();
+
+ bool flash = mFlashing &&
+ (!sEnableButtonFlashing || mFlashingTimer->isHighlight());
bool pressed_by_keyboard = FALSE;
if (hasFocus())
@@ -955,10 +946,13 @@ void LLButton::setToggleState(BOOL b)
void LLButton::setFlashing( BOOL b )
{
- if ((bool)b != mFlashing)
+ if (b)
+ {
+ mFlashingTimer->startFlashing();
+ }
+ else
{
- mFlashing = b;
- mFlashingTimer.reset();
+ mFlashingTimer->stopFlashing();
}
}
diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h
index deaa0823c6..92548298f5 100644
--- a/indra/llui/llbutton.h
+++ b/indra/llui/llbutton.h
@@ -30,6 +30,7 @@
#include "lluuid.h"
#include "llbadgeowner.h"
#include "llcontrol.h"
+#include "llflashtimer.h"
#include "lluictrl.h"
#include "v4color.h"
#include "llframetimer.h"
@@ -201,6 +202,7 @@ public:
void setHighlight(bool b);
void setFlashing( BOOL b );
BOOL getFlashing() const { return mFlashing; }
+ LLFlashTimer* getFlashTimer() {return mFlashingTimer;}
void setHAlign( LLFontGL::HAlign align ) { mHAlign = align; }
LLFontGL::HAlign getHAlign() const { return mHAlign; }
@@ -285,8 +287,6 @@ protected:
LLFrameTimer mMouseDownTimer;
bool mNeedsHighlight;
- S32 mButtonFlashCount;
- F32 mButtonFlashRate;
void drawBorder(LLUIImage* imagep, const LLColor4& color, S32 size);
void resetMouseDownTimer();
@@ -373,7 +373,7 @@ protected:
bool mForcePressedState;
bool mDisplayPressedState;
- LLFrameTimer mFlashingTimer;
+ LLFlashTimer* mFlashingTimer;
bool mHandleRightMouse;
};
diff --git a/indra/newview/llflashtimer.cpp b/indra/llui/llflashtimer.cpp
index 2feacfa218..c572a83ff5 100644
--- a/indra/newview/llflashtimer.cpp
+++ b/indra/llui/llflashtimer.cpp
@@ -23,12 +23,10 @@
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
-
-
-#include "llviewerprecompiledheaders.h"
+#include "../newview/llviewerprecompiledheaders.h"
#include "llflashtimer.h"
-#include "llviewercontrol.h"
+#include "../newview/llviewercontrol.h"
#include "lleventtimer.h"
LLFlashTimer::LLFlashTimer(callback_t cb, S32 count, F32 period)
diff --git a/indra/newview/llflashtimer.h b/indra/llui/llflashtimer.h
index c030edfc52..2ef6ebcc8a 100644
--- a/indra/newview/llflashtimer.h
+++ b/indra/llui/llflashtimer.h
@@ -49,13 +49,14 @@ public:
void startFlashing();
void stopFlashing();
+
bool isFlashing() {return mIsFlashing;}
bool isHighlight() {return mIsHighlight;}
private:
callback_t mCallback;
/**
- * How many times Well will blink.
+ * How many times parent will blink.
*/
S32 mFlashCount;
S32 mCurrentTickCount;
diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp
index 90568f344a..d65f53cd4d 100755
--- a/indra/llui/llfolderviewitem.cpp
+++ b/indra/llui/llfolderviewitem.cpp
@@ -23,8 +23,9 @@
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
+#include "../newview/llviewerprecompiledheaders.h"
-#include "../newview/llflashtimer.h"
+#include "llflashtimer.h"
#include "linden_common.h"
#include "llfolderviewitem.h"
@@ -164,17 +165,19 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p)
}
}
+// Destroys the object
+LLFolderViewItem::~LLFolderViewItem()
+{
+ delete mFlashTimer;
+ mViewModelItem = NULL;
+}
+
BOOL LLFolderViewItem::postBuild()
{
refresh();
return TRUE;
}
-// Destroys the object
-LLFolderViewItem::~LLFolderViewItem( void )
-{
- mViewModelItem = NULL;
-}
LLFolderView* LLFolderViewItem::getRoot()
{
diff --git a/indra/llui/llfolderviewitem.h b/indra/llui/llfolderviewitem.h
index c16d65206f..c8d6c37b04 100755
--- a/indra/llui/llfolderviewitem.h
+++ b/indra/llui/llfolderviewitem.h
@@ -26,10 +26,10 @@
#ifndef LLFOLDERVIEWITEM_H
#define LLFOLDERVIEWITEM_H
+#include "llflashtimer.h"
#include "llview.h"
#include "lluiimage.h"
-class LLFlashTimer;
class LLFolderView;
class LLFolderViewModelItem;
class LLFolderViewFolder;
@@ -163,6 +163,7 @@ public:
S32 getIconPad();
S32 getTextPad();
+ LLFlashTimer* getFlashTimer() {return mFlashTimer;}
// If 'selection' is 'this' then note that otherwise ignore.
// Returns TRUE if this item ends up being selected.
virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem, BOOL take_keyboard_focus);
diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp
index c24eb2ee90..d1f77830a6 100644
--- a/indra/llui/lltabcontainer.cpp
+++ b/indra/llui/lltabcontainer.cpp
@@ -506,8 +506,8 @@ void LLTabContainer::draw()
}
}
- mPrevArrowBtn->setFlashing(FALSE);
- mNextArrowBtn->setFlashing(FALSE);
+ mPrevArrowBtn->getFlashTimer()->stopFlashing();
+ mNextArrowBtn->getFlashTimer()->stopFlashing();
}
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 574fdc495a..f652c9e50c 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -178,7 +178,6 @@ set(viewer_SOURCE_FILES
llfilepicker.cpp
llfilteredwearablelist.cpp
llfirstuse.cpp
- llflashtimer.cpp
llflexibleobject.cpp
llfloaterabout.cpp
llfloaterbvhpreview.cpp
@@ -763,7 +762,6 @@ set(viewer_HEADER_FILES
llfilepicker.h
llfilteredwearablelist.h
llfirstuse.h
- llflashtimer.h
llflexibleobject.h
llfloaterabout.h
llfloaterbvhpreview.h
diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp
index da6f3a484d..90ddeef5bb 100644
--- a/indra/newview/llfloaterimcontainer.cpp
+++ b/indra/newview/llfloaterimcontainer.cpp
@@ -41,6 +41,7 @@
#include "llcallbacklist.h"
#include "llgroupactions.h"
#include "llgroupiconctrl.h"
+#include "llflashtimer.h"
#include "llfloateravatarpicker.h"
#include "llfloaterpreference.h"
#include "llimview.h"
@@ -1594,17 +1595,22 @@ void LLFloaterIMContainer::reSelectConversation()
{
selectFloater(session_floater);
}
-
}
-void LLFloaterIMContainer::flashConversationItemWidget(const LLUUID& session_id)
+void LLFloaterIMContainer::flashConversationItemWidget(const LLUUID& session_id, bool is_flashes)
{
LLFolderViewItem* widget = get_ptr_in_map(mConversationsWidgets,session_id);
if (widget)
{
- widget->;
+ if (is_flashes)
+ {
+ widget->getFlashTimer()->startFlashing();
+ }
+ else
+ {
+ widget->getFlashTimer()->stopFlashing();
+ }
}
-
}
// EOF
diff --git a/indra/newview/llfloaterimcontainer.h b/indra/newview/llfloaterimcontainer.h
index 443688668b..9112b54018 100644
--- a/indra/newview/llfloaterimcontainer.h
+++ b/indra/newview/llfloaterimcontainer.h
@@ -164,7 +164,7 @@ public:
void setTimeNow(const LLUUID& session_id, const LLUUID& participant_id);
void setNearbyDistances();
void reSelectConversation();
- void flashConversationItemWidget(const LLUUID& session_id);
+ void flashConversationItemWidget(const LLUUID& session_id, bool is_flashes);
private:
LLConversationViewSession* createConversationItemWidget(LLConversationItem* item);
diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp
index 69b42cdd6d..42e7e6cb55 100644
--- a/indra/newview/llfloaterimsessiontab.cpp
+++ b/indra/newview/llfloaterimsessiontab.cpp
@@ -40,6 +40,7 @@
#include "llfloaterimsession.h"
#include "llfloaterimcontainer.h" // to replace separate IM Floaters with multifloater container
#include "lllayoutstack.h"
+#include "lltoolbarview.h"
#include "llfloaterimnearbychat.h"
const F32 REFRESH_INTERVAL = 0.2f;
@@ -328,11 +329,20 @@ std::string LLFloaterIMSessionTab::appendTime()
void LLFloaterIMSessionTab::appendMessage(const LLChat& chat, const LLSD &args)
{
+
// Update the participant activity time
LLFloaterIMContainer* im_box = LLFloaterIMContainer::findInstance();
if (im_box)
{
im_box->setTimeNow(mSessionID,chat.mFromID);
+
+ // TODO: Warning! The next two lines of code are included below only temporarily
+ // to demonstrate the correct format call the appropriate functions.
+ // They should be moved to the right places when working on CHUI-486. ~Alex ProductEngine.
+ // ---- start demo ----
+ im_box->flashConversationItemWidget(mSessionID, true); // flashing of the conversation's item
+ gToolBarView->flashCommand(LLCommandId("chat"), true); // flashing of the FUI button "Chat"
+ // ---- end demo -----
}