summaryrefslogtreecommitdiff
path: root/indra/newview/lltoastnotifypanel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/lltoastnotifypanel.cpp')
-rw-r--r--indra/newview/lltoastnotifypanel.cpp62
1 files changed, 52 insertions, 10 deletions
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index 9017f5ec55..51f32331d8 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -33,6 +33,7 @@
// library includes
#include "lldbstrings.h"
+#include "lllslconstants.h"
#include "llnotifications.h"
#include "lluiconstants.h"
#include "llrect.h"
@@ -54,6 +55,7 @@ LLToastNotifyPanel::button_click_signal_t LLToastNotifyPanel::sButtonClickSignal
LLToastNotifyPanel::LLToastNotifyPanel(LLNotificationPtr& notification, const LLRect& rect, bool show_images) :
LLToastPanel(notification),
mTextBox(NULL),
+mUserInputBox(NULL),
mInfoPanel(NULL),
mControlPanel(NULL),
mNumOptions(0),
@@ -66,15 +68,43 @@ mCloseNotificationOnDestroy(true)
{
this->setShape(rect);
}
+ // get a form for the notification
+ LLNotificationFormPtr form(notification->getForm());
+ // get number of elements
+ mNumOptions = form->getNumElements();
+
mInfoPanel = getChild<LLPanel>("info_panel");
mControlPanel = getChild<LLPanel>("control_panel");
BUTTON_WIDTH = gSavedSettings.getS32("ToastButtonWidth");
+
// customize panel's attributes
- // is it intended for displaying a tip
+
+ // is it intended for displaying a tip?
mIsTip = notification->getType() == "notifytip";
- // is it a script dialog
+ // is it a script dialog?
mIsScriptDialog = (notification->getName() == "ScriptDialog" || notification->getName() == "ScriptDialogGroup");
- // is it a caution
+ // is it a script dialog with llTextBox()?
+ mIsScriptTextBox = false;
+ if (mIsScriptDialog)
+ {
+ // if ANY of the buttons have the magic lltextbox string as name, then
+ // treat the whole dialog as a simple text entry box (i.e. mixed button
+ // and textbox forms are not supported)
+ for (int i=0; i<mNumOptions; ++i)
+ {
+ LLSD form_element = form->getElement(i);
+ llwarns << form_element << llendl;
+ if (form_element["name"].asString() == TEXTBOX_MAGIC_TOKEN)
+ {
+ mIsScriptTextBox = true;
+ break;
+ }
+ }
+ }
+ llwarns << "FORM ELEMS " << int(form->getNumElements()) << llendl;
+ llwarns << "isScriptDialog? " << int(mIsScriptDialog) << llendl;
+ llwarns << "isScriptTextBox? " << int(mIsScriptTextBox) << llendl;
+ // is it a caution?
//
// caution flag can be set explicitly by specifying it in the notification payload, or it can be set implicitly if the
// notify xml template specifies that it is a caution
@@ -94,10 +124,6 @@ mCloseNotificationOnDestroy(true)
setIsChrome(TRUE);
// initialize
setFocusRoot(!mIsTip);
- // get a form for the notification
- LLNotificationFormPtr form(notification->getForm());
- // get number of elements
- mNumOptions = form->getNumElements();
// customize panel's outfit
// preliminary adjust panel's layout
@@ -123,6 +149,11 @@ mCloseNotificationOnDestroy(true)
mTextBox->setPlainText(!show_images);
mTextBox->setValue(notification->getMessage());
+ mUserInputBox = getChild<LLTextEditor>("user_input_box");
+ mUserInputBox->setMaxTextLength(254);// FIXME
+ mUserInputBox->setVisible(FALSE);
+ mUserInputBox->setEnabled(FALSE);
+
// add buttons for a script notification
if (mIsTip)
{
@@ -139,6 +170,17 @@ mCloseNotificationOnDestroy(true)
LLSD form_element = form->getElement(i);
if (form_element["type"].asString() != "button")
{
+ // not a button.
+ continue;
+ }
+ if (form_element["name"].asString() == TEXTBOX_MAGIC_TOKEN)
+ {
+ // a textbox pretending to be a button.
+ // (re)enable the textbox for this panel, and continue.
+ mUserInputBox->setVisible(TRUE);
+ mUserInputBox->setEnabled(TRUE);
+ mUserInputBox->setFocus(TRUE);
+ mUserInputBox->insertText("FOOOOOO!!!!");
continue;
}
LLButton* new_button = createButton(form_element, TRUE);
@@ -159,7 +201,7 @@ mCloseNotificationOnDestroy(true)
if(h_pad < 2*HPAD)
{
/*
- * Probably it is a scriptdialog toast
+ * Probably it is a scriptdialog toast
* for a scriptdialog toast h_pad can be < 2*HPAD if we have a lot of buttons.
* In last case set default h_pad to avoid heaping of buttons
*/
@@ -253,7 +295,7 @@ LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_opt
p.image_color(LLUIColorTable::instance().getColor("ButtonCautionImageColor"));
p.image_color_disabled(LLUIColorTable::instance().getColor("ButtonCautionImageColor"));
}
- // for the scriptdialog buttons we use fixed button size. This is a limit!
+ // for the scriptdialog buttons we use fixed button size. This is a limit!
if (!mIsScriptDialog && font->getWidth(form_element["text"].asString()) > BUTTON_WIDTH)
{
p.rect.width = 1;
@@ -261,7 +303,7 @@ LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_opt
}
else if (mIsScriptDialog && is_ignore_btn)
{
- // this is ignore button,make it smaller
+ // this is ignore button, make it smaller
p.rect.height = BTN_HEIGHT_SMALL;
p.rect.width = 1;
p.auto_resize = true;