diff options
Diffstat (limited to 'indra/llui/lltextbox.cpp')
-rw-r--r-- | indra/llui/lltextbox.cpp | 366 |
1 files changed, 183 insertions, 183 deletions
diff --git a/indra/llui/lltextbox.cpp b/indra/llui/lltextbox.cpp index f143d619c5..b3b97c00b4 100644 --- a/indra/llui/lltextbox.cpp +++ b/indra/llui/lltextbox.cpp @@ -1,183 +1,183 @@ -/** - * @file lltextbox.cpp - * @brief A text display widget - * - * $LicenseInfo:firstyear=2001&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * 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. - * - * 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. - * - * 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$ - */ - -#include "linden_common.h" - -#define LLTEXTBOX_CPP -#include "lltextbox.h" - -#include "lluictrlfactory.h" -#include "llfocusmgr.h" -#include "llwindow.h" -#include "llurlregistry.h" -#include "llstyle.h" - -static LLDefaultChildRegistry::Register<LLTextBox> r("text"); - -// Compiler optimization, generate extern template -template class LLTextBox* LLView::getChild<class LLTextBox>( - const std::string& name, bool recurse) const; - -LLTextBox::LLTextBox(const LLTextBox::Params& p) -: LLTextBase(p), - mClickedCallback(NULL), - mShowCursorHand(true) -{ - mSkipTripleClick = true; -} - -LLTextBox::~LLTextBox() -{} - -bool LLTextBox::handleMouseDown(S32 x, S32 y, MASK mask) -{ - bool handled = LLTextBase::handleMouseDown(x, y, mask); - - if (getSoundFlags() & MOUSE_DOWN) - { - make_ui_sound("UISndClick"); - } - - if (!handled && mClickedCallback) - { - handled = true; - } - - if (handled) - { - // Route future Mouse messages here preemptively. (Release on mouse up.) - gFocusMgr.setMouseCapture( this ); - } - - return handled; -} - -bool LLTextBox::handleMouseUp(S32 x, S32 y, MASK mask) -{ - bool handled = LLTextBase::handleMouseUp(x, y, mask); - - if (getSoundFlags() & MOUSE_UP) - { - make_ui_sound("UISndClickRelease"); - } - - // We only handle the click if the click both started and ended within us - if (hasMouseCapture()) - { - // Release the mouse - gFocusMgr.setMouseCapture( NULL ); - - // DO THIS AT THE VERY END to allow the button to be destroyed - // as a result of being clicked. If mouseup in the widget, - // it's been clicked - if (mClickedCallback && !handled) - { - mClickedCallback(); - handled = true; - } - } - - return handled; -} - -bool LLTextBox::handleHover(S32 x, S32 y, MASK mask) -{ - bool handled = LLTextBase::handleHover(x, y, mask); - if (!handled && mClickedCallback && mShowCursorHand) - { - // Clickable text boxes change the cursor to a hand - LLUI::getInstance()->getWindow()->setCursor(UI_CURSOR_HAND); - return true; - } - return handled; -} - -void LLTextBox::setEnabled(bool enabled) -{ - // just treat enabled as read-only flag - bool read_only = !enabled; - if (read_only != mReadOnly) - { - LLTextBase::setReadOnly(read_only); - updateSegments(); - } - LLTextBase::setEnabled(enabled); -} - -void LLTextBox::setText(const LLStringExplicit& text , const LLStyle::Params& input_params ) -{ - // does string argument insertion - mText.assign(text); - - LLTextBase::setText(mText.getString(), input_params ); -} - -void LLTextBox::setClickedCallback( boost::function<void (void*)> cb, void* userdata /*= NULL */ ) -{ - mClickedCallback = boost::bind(cb, userdata); -} - -S32 LLTextBox::getTextPixelWidth() -{ - return getTextBoundingRect().getWidth(); -} - -S32 LLTextBox::getTextPixelHeight() -{ - return getTextBoundingRect().getHeight(); -} - - -LLSD LLTextBox::getValue() const -{ - return getViewModel()->getValue(); -} - -bool LLTextBox::setTextArg( const std::string& key, const LLStringExplicit& text ) -{ - mText.setArg(key, text); - LLTextBase::setText(mText.getString()); - - return true; -} - - -void LLTextBox::reshapeToFitText(bool called_from_parent) -{ - reflow(); - - S32 width = getTextPixelWidth(); - S32 height = getTextPixelHeight(); - //consider investigating reflow() to find missing width pixel (see SL-17045 changes) - reshape( width + 2 * mHPad + 1, height + 2 * mVPad, called_from_parent ); -} - - -void LLTextBox::onUrlLabelUpdated(const std::string &url, const std::string &label) -{ - needsReflow(); -} - +/**
+ * @file lltextbox.cpp
+ * @brief A text display widget
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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$
+ */
+
+#include "linden_common.h"
+
+#define LLTEXTBOX_CPP
+#include "lltextbox.h"
+
+#include "lluictrlfactory.h"
+#include "llfocusmgr.h"
+#include "llwindow.h"
+#include "llurlregistry.h"
+#include "llstyle.h"
+
+static LLDefaultChildRegistry::Register<LLTextBox> r("text");
+
+// Compiler optimization, generate extern template
+template class LLTextBox* LLView::getChild<class LLTextBox>(
+ const std::string& name, bool recurse) const;
+
+LLTextBox::LLTextBox(const LLTextBox::Params& p)
+: LLTextBase(p),
+ mClickedCallback(NULL),
+ mShowCursorHand(true)
+{
+ mSkipTripleClick = true;
+}
+
+LLTextBox::~LLTextBox()
+{}
+
+bool LLTextBox::handleMouseDown(S32 x, S32 y, MASK mask)
+{
+ bool handled = LLTextBase::handleMouseDown(x, y, mask);
+
+ if (getSoundFlags() & MOUSE_DOWN)
+ {
+ make_ui_sound("UISndClick");
+ }
+
+ if (!handled && mClickedCallback)
+ {
+ handled = true;
+ }
+
+ if (handled)
+ {
+ // Route future Mouse messages here preemptively. (Release on mouse up.)
+ gFocusMgr.setMouseCapture( this );
+ }
+
+ return handled;
+}
+
+bool LLTextBox::handleMouseUp(S32 x, S32 y, MASK mask)
+{
+ bool handled = LLTextBase::handleMouseUp(x, y, mask);
+
+ if (getSoundFlags() & MOUSE_UP)
+ {
+ make_ui_sound("UISndClickRelease");
+ }
+
+ // We only handle the click if the click both started and ended within us
+ if (hasMouseCapture())
+ {
+ // Release the mouse
+ gFocusMgr.setMouseCapture( NULL );
+
+ // DO THIS AT THE VERY END to allow the button to be destroyed
+ // as a result of being clicked. If mouseup in the widget,
+ // it's been clicked
+ if (mClickedCallback && !handled)
+ {
+ mClickedCallback();
+ handled = true;
+ }
+ }
+
+ return handled;
+}
+
+bool LLTextBox::handleHover(S32 x, S32 y, MASK mask)
+{
+ bool handled = LLTextBase::handleHover(x, y, mask);
+ if (!handled && mClickedCallback && mShowCursorHand)
+ {
+ // Clickable text boxes change the cursor to a hand
+ LLUI::getInstance()->getWindow()->setCursor(UI_CURSOR_HAND);
+ return true;
+ }
+ return handled;
+}
+
+void LLTextBox::setEnabled(bool enabled)
+{
+ // just treat enabled as read-only flag
+ bool read_only = !enabled;
+ if (read_only != mReadOnly)
+ {
+ LLTextBase::setReadOnly(read_only);
+ updateSegments();
+ }
+ LLTextBase::setEnabled(enabled);
+}
+
+void LLTextBox::setText(const LLStringExplicit& text , const LLStyle::Params& input_params )
+{
+ // does string argument insertion
+ mText.assign(text);
+
+ LLTextBase::setText(mText.getString(), input_params );
+}
+
+void LLTextBox::setClickedCallback( boost::function<void (void*)> cb, void* userdata /*= NULL */ )
+{
+ mClickedCallback = boost::bind(cb, userdata);
+}
+
+S32 LLTextBox::getTextPixelWidth()
+{
+ return getTextBoundingRect().getWidth();
+}
+
+S32 LLTextBox::getTextPixelHeight()
+{
+ return getTextBoundingRect().getHeight();
+}
+
+
+LLSD LLTextBox::getValue() const
+{
+ return getViewModel()->getValue();
+}
+
+bool LLTextBox::setTextArg( const std::string& key, const LLStringExplicit& text )
+{
+ mText.setArg(key, text);
+ LLTextBase::setText(mText.getString());
+
+ return true;
+}
+
+
+void LLTextBox::reshapeToFitText(bool called_from_parent)
+{
+ reflow();
+
+ S32 width = getTextPixelWidth();
+ S32 height = getTextPixelHeight();
+ //consider investigating reflow() to find missing width pixel (see SL-17045 changes)
+ reshape( width + 2 * mHPad + 1, height + 2 * mVPad, called_from_parent );
+}
+
+
+void LLTextBox::onUrlLabelUpdated(const std::string &url, const std::string &label)
+{
+ needsReflow();
+}
+
|