summaryrefslogtreecommitdiff
path: root/indra/newview/llpreviewscript.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llpreviewscript.cpp')
-rw-r--r--indra/newview/llpreviewscript.cpp404
1 files changed, 215 insertions, 189 deletions
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index 9de2f38aff..d280cf1625 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -2,31 +2,25 @@
* @file llpreviewscript.cpp
* @brief LLPreviewScript class implementation
*
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- *
- * Copyright (c) 2002-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 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.
*
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
+ * 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.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * 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$
*/
@@ -41,10 +35,12 @@
#include "llcombobox.h"
#include "lldir.h"
#include "llfloaterreg.h"
+#include "llinventorydefines.h"
#include "llinventorymodel.h"
#include "llkeyboard.h"
#include "lllineeditor.h"
-
+#include "llhelp.h"
+#include "llnotificationsutil.h"
#include "llresmgr.h"
#include "llscrollbar.h"
#include "llscrollcontainer.h"
@@ -53,13 +49,13 @@
#include "llscrolllistcell.h"
#include "llslider.h"
#include "lscript_rt_interface.h"
+#include "lscript_library.h"
#include "lscript_export.h"
#include "lltextbox.h"
#include "lltooldraganddrop.h"
#include "llvfile.h"
#include "llagent.h"
-#include "llnotify.h"
#include "llmenugl.h"
#include "roles_constants.h"
#include "llselectmgr.h"
@@ -78,20 +74,16 @@
#include "llslider.h"
#include "lldir.h"
#include "llcombobox.h"
-//#include "llfloaterchat.h"
#include "llviewerstats.h"
#include "llviewertexteditor.h"
#include "llviewerwindow.h"
#include "lluictrlfactory.h"
-#include "llwebbrowserctrl.h"
+#include "llmediactrl.h"
#include "lluictrlfactory.h"
-
+#include "lltrans.h"
#include "llviewercontrol.h"
#include "llappviewer.h"
-#include "llpanelinventory.h"
-#include "lltrans.h"
-
const std::string HELLO_LSL =
"default\n"
"{\n"
@@ -105,7 +97,7 @@ const std::string HELLO_LSL =
" llSay(0, \"Touched.\");\n"
" }\n"
"}\n";
-const std::string HELP_LSL_URL = "http://wiki.secondlife.com/wiki/LSL_Portal";
+const std::string HELP_LSL_PORTAL_TOPIC = "LSL_Portal";
const std::string DEFAULT_SCRIPT_NAME = "New Script"; // *TODO:Translate?
const std::string DEFAULT_SCRIPT_DESC = "(No Description)"; // *TODO:Translate?
@@ -156,10 +148,10 @@ private:
LLFloaterScriptSearch* LLFloaterScriptSearch::sInstance = NULL;
LLFloaterScriptSearch::LLFloaterScriptSearch(LLScriptEdCore* editor_core)
-: LLFloater(),
+: LLFloater(LLSD()),
mEditorCore(editor_core)
{
- LLUICtrlFactory::getInstance()->buildFloater(this,"floater_script_search.xml");
+ LLUICtrlFactory::getInstance()->buildFloater(this,"floater_script_search.xml", NULL);
sInstance = this;
@@ -221,7 +213,7 @@ void LLFloaterScriptSearch::onBtnSearch(void *userdata)
void LLFloaterScriptSearch::handleBtnSearch()
{
LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text");
- mEditorCore->mEditor->selectNext(childGetText("search_text"), caseChk->get());
+ mEditorCore->mEditor->selectNext(getChild<LLUICtrl>("search_text")->getValue().asString(), caseChk->get());
}
// static
@@ -234,7 +226,7 @@ void LLFloaterScriptSearch::onBtnReplace(void *userdata)
void LLFloaterScriptSearch::handleBtnReplace()
{
LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text");
- mEditorCore->mEditor->replaceText(childGetText("search_text"), childGetText("replace_text"), caseChk->get());
+ mEditorCore->mEditor->replaceText(getChild<LLUICtrl>("search_text")->getValue().asString(), getChild<LLUICtrl>("replace_text")->getValue().asString(), caseChk->get());
}
// static
@@ -247,16 +239,25 @@ void LLFloaterScriptSearch::onBtnReplaceAll(void *userdata)
void LLFloaterScriptSearch::handleBtnReplaceAll()
{
LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text");
- mEditorCore->mEditor->replaceTextAll(childGetText("search_text"), childGetText("replace_text"), caseChk->get());
+ mEditorCore->mEditor->replaceTextAll(getChild<LLUICtrl>("search_text")->getValue().asString(), getChild<LLUICtrl>("replace_text")->getValue().asString(), caseChk->get());
}
+
+
/// ---------------------------------------------------------------------------
/// LLScriptEdCore
/// ---------------------------------------------------------------------------
+struct LLSECKeywordCompare
+{
+ bool operator()(const std::string& lhs, const std::string& rhs)
+ {
+ return (LLStringUtil::compareDictInsensitive( lhs, rhs ) < 0 );
+ }
+};
+
LLScriptEdCore::LLScriptEdCore(
const std::string& sample,
- const std::string& help_url,
const LLHandle<LLFloater>& floater_handle,
void (*load_callback)(void*),
void (*save_callback)(void*, BOOL),
@@ -266,7 +267,6 @@ LLScriptEdCore::LLScriptEdCore(
:
LLPanel(),
mSampleText(sample),
- mHelpURL(help_url),
mEditor( NULL ),
mLoadCallback( load_callback ),
mSaveCallback( save_callback ),
@@ -281,40 +281,7 @@ LLScriptEdCore::LLScriptEdCore(
setFollowsAll();
setBorderVisible(FALSE);
-
- LLUICtrlFactory::getInstance()->buildPanel(this, "panel_script_ed.xml");
-
- std::vector<std::string> funcs;
- std::vector<std::string> tooltips;
- for (S32 i = 0; i < gScriptLibrary.mNextNumber; i++)
- {
- // Make sure this isn't a god only function, or the agent is a god.
- if (!gScriptLibrary.mFunctions[i]->mGodOnly || gAgent.isGodlike())
- {
- funcs.push_back(ll_safe_string(gScriptLibrary.mFunctions[i]->mName));
- tooltips.push_back(ll_safe_string(gScriptLibrary.mFunctions[i]->mDesc));
- }
- }
- LLColor3 color(0.5f, 0.0f, 0.15f);
-
- mEditor->loadKeywords(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"keywords.ini"), funcs, tooltips, color);
-
-
- LLKeywordToken *token;
- LLKeywords::keyword_iterator_t token_it;
- for (token_it = mEditor->keywordsBegin(); token_it != mEditor->keywordsEnd(); ++token_it)
- {
- token = token_it->second;
- if (token->getColor() == color)
- mFunctions->add(wstring_to_utf8str(token->getToken()));
- }
-
- for (token_it = mEditor->keywordsBegin(); token_it != mEditor->keywordsEnd(); ++token_it)
- {
- token = token_it->second;
- if (token->getColor() != color)
- mFunctions->add(wstring_to_utf8str(token->getToken()));
- }
+ setXMLFilename("panel_script_ed.xml");
}
LLScriptEdCore::~LLScriptEdCore()
@@ -332,7 +299,6 @@ LLScriptEdCore::~LLScriptEdCore()
BOOL LLScriptEdCore::postBuild()
{
-
mErrorList = getChild<LLScrollListCtrl>("lsl errors");
mFunctions = getChild<LLComboBox>( "Insert...");
@@ -340,15 +306,82 @@ BOOL LLScriptEdCore::postBuild()
childSetCommitCallback("Insert...", &LLScriptEdCore::onBtnInsertFunction, this);
mEditor = getChild<LLViewerTextEditor>("Script Editor");
- mEditor->setFollowsAll();
- mEditor->setHandleEditKeysDirectly(TRUE);
- mEditor->setEnabled(TRUE);
- mEditor->setWordWrap(TRUE);
childSetCommitCallback("lsl errors", &LLScriptEdCore::onErrorList, this);
childSetAction("Save_btn", boost::bind(&LLScriptEdCore::doSave,this,FALSE));
initMenu();
+
+
+ std::vector<std::string> funcs;
+ std::vector<std::string> tooltips;
+ for (std::vector<LLScriptLibraryFunction>::const_iterator i = gScriptLibrary.mFunctions.begin();
+ i != gScriptLibrary.mFunctions.end(); ++i)
+ {
+ // Make sure this isn't a god only function, or the agent is a god.
+ if (!i->mGodOnly || gAgent.isGodlike())
+ {
+ std::string name = i->mName;
+ funcs.push_back(name);
+
+ std::string desc_name = "LSLTipText_";
+ desc_name += name;
+ std::string desc = LLTrans::getString(desc_name);
+
+ F32 sleep_time = i->mSleepTime;
+ if( sleep_time )
+ {
+ desc += "\n";
+
+ LLStringUtil::format_map_t args;
+ args["[SLEEP_TIME]"] = llformat("%.1f", sleep_time );
+ desc += LLTrans::getString("LSLTipSleepTime", args);
+ }
+
+ // A \n linefeed is not part of xml. Let's add one to keep all
+ // the tips one-per-line in strings.xml
+ LLStringUtil::replaceString( desc, "\\n", "\n" );
+
+ tooltips.push_back(desc);
+ }
+ }
+
+ LLColor3 color(0.5f, 0.0f, 0.15f);
+ mEditor->loadKeywords(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"keywords.ini"), funcs, tooltips, color);
+
+ std::vector<std::string> primary_keywords;
+ std::vector<std::string> secondary_keywords;
+ LLKeywordToken *token;
+ LLKeywords::keyword_iterator_t token_it;
+ for (token_it = mEditor->keywordsBegin(); token_it != mEditor->keywordsEnd(); ++token_it)
+ {
+ token = token_it->second;
+ if (token->getColor() == color) // Wow, what a disgusting hack.
+ {
+ primary_keywords.push_back( wstring_to_utf8str(token->getToken()) );
+ }
+ else
+ {
+ secondary_keywords.push_back( wstring_to_utf8str(token->getToken()) );
+ }
+ }
+
+ // Case-insensitive dictionary sort for primary keywords. We don't sort the secondary
+ // keywords. They're intelligently grouped in keywords.ini.
+ std::stable_sort( primary_keywords.begin(), primary_keywords.end(), LLSECKeywordCompare() );
+
+ for (std::vector<std::string>::const_iterator iter= primary_keywords.begin();
+ iter!= primary_keywords.end(); ++iter)
+ {
+ mFunctions->add(*iter);
+ }
+
+ for (std::vector<std::string>::const_iterator iter= secondary_keywords.begin();
+ iter!= secondary_keywords.end(); ++iter)
+ {
+ mFunctions->add(*iter);
+ }
+
return TRUE;
}
@@ -395,7 +428,7 @@ void LLScriptEdCore::initMenu()
menuItem = getChild<LLMenuItemCallGL>("Help...");
menuItem->setClickCallback(boost::bind(&LLScriptEdCore::onBtnHelp, this));
- menuItem = getChild<LLMenuItemCallGL>("LSL Wiki Help...");
+ menuItem = getChild<LLMenuItemCallGL>("Keyword Help...");
menuItem->setClickCallback(boost::bind(&LLScriptEdCore::onBtnDynamicHelp, this));
}
@@ -412,13 +445,13 @@ bool LLScriptEdCore::hasChanged()
{
if (!mEditor) return false;
- return !mEditor->isPristine();
+ return ((!mEditor->isPristine() || mEnableSave) && mHasScriptData);
}
void LLScriptEdCore::draw()
{
BOOL script_changed = hasChanged();
- childSetEnabled("Save_btn", script_changed);
+ getChildView("Save_btn")->setEnabled(script_changed);
if( mEditor->hasFocus() )
{
@@ -430,11 +463,11 @@ void LLScriptEdCore::draw()
args["[LINE]"] = llformat ("%d", line);
args["[COLUMN]"] = llformat ("%d", column);
cursor_pos = LLTrans::getString("CursorPos", args);
- childSetText("line_col", cursor_pos);
+ getChild<LLUICtrl>("line_col")->setValue(cursor_pos);
}
else
{
- childSetText("line_col", LLStringUtil::null);
+ getChild<LLUICtrl>("line_col")->setValue(LLStringUtil::null);
}
updateDynamicHelp();
@@ -450,7 +483,7 @@ void LLScriptEdCore::updateDynamicHelp(BOOL immediate)
// update back and forward buttons
LLButton* fwd_button = help_floater->getChild<LLButton>("fwd_btn");
LLButton* back_button = help_floater->getChild<LLButton>("back_btn");
- LLWebBrowserCtrl* browser = help_floater->getChild<LLWebBrowserCtrl>("lsl_guide_html");
+ LLMediaCtrl* browser = help_floater->getChild<LLMediaCtrl>("lsl_guide_html");
back_button->setEnabled(browser->canNavigateBack());
fwd_button->setEnabled(browser->canNavigateForward());
@@ -459,12 +492,12 @@ void LLScriptEdCore::updateDynamicHelp(BOOL immediate)
return;
}
- const LLTextSegment* segment = NULL;
- std::vector<const LLTextSegment*> selected_segments;
+ LLTextSegmentPtr segment = NULL;
+ std::vector<LLTextSegmentPtr> selected_segments;
mEditor->getSelectedSegments(selected_segments);
// try segments in selection range first
- std::vector<const LLTextSegment*>::iterator segment_iter;
+ std::vector<LLTextSegmentPtr>::iterator segment_iter;
for (segment_iter = selected_segments.begin(); segment_iter != selected_segments.end(); ++segment_iter)
{
if((*segment_iter)->getToken() && (*segment_iter)->getToken()->getType() == LLKeywordToken::WORD)
@@ -477,7 +510,7 @@ void LLScriptEdCore::updateDynamicHelp(BOOL immediate)
// then try previous segment in case we just typed it
if (!segment)
{
- const LLTextSegment* test_segment = mEditor->getPreviousSegment();
+ const LLTextSegmentPtr test_segment = mEditor->getPreviousSegment();
if(test_segment->getToken() && test_segment->getToken()->getType() == LLKeywordToken::WORD)
{
segment = test_segment;
@@ -498,9 +531,12 @@ void LLScriptEdCore::updateDynamicHelp(BOOL immediate)
mLiveHelpTimer.stop();
}
}
- else if (immediate)
+ else
{
- setHelpPage(LLStringUtil::null);
+ if (immediate)
+ {
+ setHelpPage(LLStringUtil::null);
+ }
}
}
@@ -509,13 +545,14 @@ void LLScriptEdCore::setHelpPage(const std::string& help_string)
LLFloater* help_floater = mLiveHelpHandle.get();
if (!help_floater) return;
- LLWebBrowserCtrl* web_browser = help_floater->getChild<LLWebBrowserCtrl>("lsl_guide_html");
+ LLMediaCtrl* web_browser = help_floater->getChild<LLMediaCtrl>("lsl_guide_html");
if (!web_browser) return;
LLComboBox* history_combo = help_floater->getChild<LLComboBox>("history_combo");
if (!history_combo) return;
LLUIString url_string = gSavedSettings.getString("LSLHelpURL");
+
url_string.setArg("[LSL_STRING]", help_string);
addHelpItemToHistory(help_string);
@@ -575,14 +612,14 @@ BOOL LLScriptEdCore::canClose()
else
{
// Bring up view-modal dialog: Save changes? Yes, No, Cancel
- LLNotifications::instance().add("SaveChanges", LLSD(), LLSD(), boost::bind(&LLScriptEdCore::handleSaveChangesDialog, this, _1, _2));
+ LLNotificationsUtil::add("SaveChanges", LLSD(), LLSD(), boost::bind(&LLScriptEdCore::handleSaveChangesDialog, this, _1, _2));
return FALSE;
}
}
bool LLScriptEdCore::handleSaveChangesDialog(const LLSD& notification, const LLSD& response )
{
- S32 option = LLNotification::getSelectedOption(notification, response);
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
switch( option )
{
case 0: // "Yes"
@@ -606,69 +643,54 @@ bool LLScriptEdCore::handleSaveChangesDialog(const LLSD& notification, const LLS
return false;
}
-// static
-bool LLScriptEdCore::onHelpWebDialog(const LLSD& notification, const LLSD& response)
-{
- S32 option = LLNotification::getSelectedOption(notification, response);
-
- switch(option)
- {
- case 0:
- LLWeb::loadURL(notification["payload"]["help_url"]);
- break;
- default:
- break;
- }
- return false;
-}
-
void LLScriptEdCore::onBtnHelp()
{
- LLSD payload;
- payload["help_url"] = mHelpURL;
- LLNotifications::instance().add("WebLaunchLSLGuide", LLSD(), payload, onHelpWebDialog);
+ LLUI::sHelpImpl->showTopic(HELP_LSL_PORTAL_TOPIC);
}
void LLScriptEdCore::onBtnDynamicHelp()
{
LLFloater* live_help_floater = mLiveHelpHandle.get();
- if (live_help_floater)
- {
- live_help_floater->setFocus(TRUE);
- updateDynamicHelp(TRUE);
+ if (!live_help_floater)
+ {
+ live_help_floater = new LLFloater(LLSD());
+ LLUICtrlFactory::getInstance()->buildFloater(live_help_floater, "floater_lsl_guide.xml", NULL);
+ LLFloater* parent = dynamic_cast<LLFloater*>(getParent());
+ llassert(parent);
+ if (parent)
+ parent->addDependentFloater(live_help_floater, TRUE);
+ live_help_floater->childSetCommitCallback("lock_check", onCheckLock, this);
+ live_help_floater->getChild<LLUICtrl>("lock_check")->setValue(gSavedSettings.getBOOL("ScriptHelpFollowsCursor"));
+ live_help_floater->childSetCommitCallback("history_combo", onHelpComboCommit, this);
+ live_help_floater->childSetAction("back_btn", onClickBack, this);
+ live_help_floater->childSetAction("fwd_btn", onClickForward, this);
+
+ LLMediaCtrl* browser = live_help_floater->getChild<LLMediaCtrl>("lsl_guide_html");
+ browser->setAlwaysRefresh(TRUE);
+
+ LLComboBox* help_combo = live_help_floater->getChild<LLComboBox>("history_combo");
+ LLKeywordToken *token;
+ LLKeywords::keyword_iterator_t token_it;
+ for (token_it = mEditor->keywordsBegin();
+ token_it != mEditor->keywordsEnd();
+ ++token_it)
+ {
+ token = token_it->second;
+ help_combo->add(wstring_to_utf8str(token->getToken()));
+ }
+ help_combo->sortByName();
- return;
+ // re-initialize help variables
+ mLastHelpToken = NULL;
+ mLiveHelpHandle = live_help_floater->getHandle();
+ mLiveHelpHistorySize = 0;
}
- live_help_floater = new LLFloater();
- LLUICtrlFactory::getInstance()->buildFloater(live_help_floater, "floater_lsl_guide.xml");
- LLFloater* parent = dynamic_cast<LLFloater*>(getParent());
- parent->addDependentFloater(live_help_floater, TRUE);
- live_help_floater->childSetCommitCallback("lock_check", onCheckLock, this);
- live_help_floater->childSetValue("lock_check", gSavedSettings.getBOOL("ScriptHelpFollowsCursor"));
- live_help_floater->childSetCommitCallback("history_combo", onHelpComboCommit, this);
- live_help_floater->childSetAction("back_btn", onClickBack, this);
- live_help_floater->childSetAction("fwd_btn", onClickForward, this);
+ BOOL visible = TRUE;
+ BOOL take_focus = TRUE;
+ live_help_floater->setVisible(visible);
+ live_help_floater->setFrontmost(take_focus);
- LLWebBrowserCtrl* browser = live_help_floater->getChild<LLWebBrowserCtrl>("lsl_guide_html");
- browser->setAlwaysRefresh(TRUE);
-
- LLComboBox* help_combo = live_help_floater->getChild<LLComboBox>("history_combo");
- LLKeywordToken *token;
- LLKeywords::keyword_iterator_t token_it;
- for (token_it = mEditor->keywordsBegin();
- token_it != mEditor->keywordsEnd();
- ++token_it)
- {
- token = token_it->second;
- help_combo->add(wstring_to_utf8str(token->getToken()));
- }
- help_combo->sortByName();
-
- // re-initialize help variables
- mLastHelpToken = NULL;
- mLiveHelpHandle = live_help_floater->getHandle();
- mLiveHelpHistorySize = 0;
updateDynamicHelp(TRUE);
}
@@ -679,7 +701,7 @@ void LLScriptEdCore::onClickBack(void* userdata)
LLFloater* live_help_floater = corep->mLiveHelpHandle.get();
if (live_help_floater)
{
- LLWebBrowserCtrl* browserp = live_help_floater->getChild<LLWebBrowserCtrl>("lsl_guide_html");
+ LLMediaCtrl* browserp = live_help_floater->getChild<LLMediaCtrl>("lsl_guide_html");
if (browserp)
{
browserp->navigateBack();
@@ -694,7 +716,7 @@ void LLScriptEdCore::onClickForward(void* userdata)
LLFloater* live_help_floater = corep->mLiveHelpHandle.get();
if (live_help_floater)
{
- LLWebBrowserCtrl* browserp = live_help_floater->getChild<LLWebBrowserCtrl>("lsl_guide_html");
+ LLMediaCtrl* browserp = live_help_floater->getChild<LLMediaCtrl>("lsl_guide_html");
if (browserp)
{
browserp->navigateForward();
@@ -736,7 +758,7 @@ void LLScriptEdCore::onHelpComboCommit(LLUICtrl* ctrl, void* userdata)
corep->addHelpItemToHistory(help_string);
- LLWebBrowserCtrl* web_browser = live_help_floater->getChild<LLWebBrowserCtrl>("lsl_guide_html");
+ LLMediaCtrl* web_browser = live_help_floater->getChild<LLMediaCtrl>("lsl_guide_html");
LLUIString url_string = gSavedSettings.getString("LSLHelpURL");
url_string.setArg("[LSL_STRING]", help_string);
web_browser->navigateTo(url_string);
@@ -772,7 +794,7 @@ void LLScriptEdCore::onBtnUndoChanges()
{
if( !mEditor->tryToRevertToPristineState() )
{
- LLNotifications::instance().add("ScriptCannotUndo", LLSD(), LLSD(), boost::bind(&LLScriptEdCore::handleReloadFromServerDialog, this, _1, _2));
+ LLNotificationsUtil::add("ScriptCannotUndo", LLSD(), LLSD(), boost::bind(&LLScriptEdCore::handleReloadFromServerDialog, this, _1, _2));
}
}
@@ -801,7 +823,7 @@ void LLScriptEdCore::onErrorList(LLUICtrl*, void* user_data)
bool LLScriptEdCore::handleReloadFromServerDialog(const LLSD& notification, const LLSD& response )
{
- S32 option = LLNotification::getSelectedOption(notification, response);
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
switch( option )
{
case 0: // "Yes"
@@ -904,7 +926,6 @@ void* LLPreviewLSL::createScriptEdPanel(void* userdata)
self->mScriptEd = new LLScriptEdCore(
HELLO_LSL,
- HELP_LSL_URL,
self->getHandle(),
LLPreviewLSL::onLoad,
LLPreviewLSL::onSave,
@@ -929,9 +950,13 @@ BOOL LLPreviewLSL::postBuild()
{
const LLInventoryItem* item = getItem();
+ llassert(item);
+ if (item)
+ {
+ getChild<LLUICtrl>("desc")->setValue(item->getDescription());
+ }
childSetCommitCallback("desc", LLPreview::onText, this);
- childSetText("desc", item->getDescription());
- childSetPrevalidate("desc", &LLLineEditor::prevalidatePrintableNotPipe);
+ getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
return LLPreview::postBuild();
}
@@ -973,7 +998,7 @@ void LLPreviewLSL::loadAsset()
const LLInventoryItem* item = gInventory.getItem(mItemUUID);
BOOL is_library = item
&& !gInventory.isObjectDescendentOf(mItemUUID,
- gAgent.getInventoryRootID());
+ gInventory.getRootFolderID());
if(!item)
{
// do the more generic search.
@@ -1009,8 +1034,8 @@ void LLPreviewLSL::loadAsset()
mScriptEd->mFunctions->setEnabled(FALSE);
mAssetStatus = PREVIEW_ASSET_LOADED;
}
- childSetVisible("lock", !is_modifiable);
- mScriptEd->childSetEnabled("Insert...", is_modifiable);
+ getChildView("lock")->setVisible( !is_modifiable);
+ mScriptEd->getChildView("Insert...")->setEnabled(is_modifiable);
}
else
{
@@ -1060,8 +1085,7 @@ void LLPreviewLSL::onSave(void* userdata, BOOL close_after_save)
// Save needs to compile the text in the buffer. If the compile
// succeeds, then save both assets out to the database. If the compile
-// fails, go ahead and save the text anyway so that the user doesn't
-// get too fucked.
+// fails, go ahead and save the text anyway.
void LLPreviewLSL::saveIfNeeded()
{
// llinfos << "LLPreviewLSL::saveIfNeeded()" << llendl;
@@ -1234,7 +1258,7 @@ void LLPreviewLSL::onSaveComplete(const LLUUID& asset_uuid, void* user_data, S32
else
{
llwarns << "Inventory item for script " << info->mItemUUID
- << " is no longer in agent inventory." << llendl
+ << " is no longer in agent inventory." << llendl;
}
// Find our window and close it if requested.
@@ -1256,7 +1280,7 @@ void LLPreviewLSL::onSaveComplete(const LLUUID& asset_uuid, void* user_data, S32
llwarns << "Problem saving script: " << status << llendl;
LLSD args;
args["REASON"] = std::string(LLAssetStorage::getErrorString(status));
- LLNotifications::instance().add("SaveScriptFailReason", args);
+ LLNotificationsUtil::add("SaveScriptFailReason", args);
}
delete info;
}
@@ -1294,7 +1318,7 @@ void LLPreviewLSL::onSaveBytecodeComplete(const LLUUID& asset_uuid, void* user_d
llwarns << "Problem saving LSL Bytecode (Preview)" << llendl;
LLSD args;
args["REASON"] = std::string(LLAssetStorage::getErrorString(status));
- LLNotifications::instance().add("SaveBytecodeFailReason", args);
+ LLNotificationsUtil::add("SaveBytecodeFailReason", args);
}
delete instance_uuid;
}
@@ -1339,15 +1363,15 @@ void LLPreviewLSL::onLoadComplete( LLVFS *vfs, const LLUUID& asset_uuid, LLAsset
if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ||
LL_ERR_FILE_EMPTY == status)
{
- LLNotifications::instance().add("ScriptMissing");
+ LLNotificationsUtil::add("ScriptMissing");
}
else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status)
{
- LLNotifications::instance().add("ScriptNoPermissions");
+ LLNotificationsUtil::add("ScriptNoPermissions");
}
else
{
- LLNotifications::instance().add("UnableToLoadScript");
+ LLNotificationsUtil::add("UnableToLoadScript");
}
preview->mAssetStatus = PREVIEW_ASSET_ERROR;
@@ -1357,6 +1381,7 @@ void LLPreviewLSL::onLoadComplete( LLVFS *vfs, const LLUUID& asset_uuid, LLAsset
delete item_uuid;
}
+
/// ---------------------------------------------------------------------------
/// LLLiveLSLEditor
/// ---------------------------------------------------------------------------
@@ -1370,7 +1395,6 @@ void* LLLiveLSLEditor::createScriptEdPanel(void* userdata)
self->mScriptEd = new LLScriptEdCore(
HELLO_LSL,
- HELP_LSL_URL,
self->getHandle(),
&LLLiveLSLEditor::onLoad,
&LLLiveLSLEditor::onSave,
@@ -1399,14 +1423,14 @@ LLLiveLSLEditor::LLLiveLSLEditor(const LLSD& key) :
BOOL LLLiveLSLEditor::postBuild()
{
childSetCommitCallback("running", LLLiveLSLEditor::onRunningCheckboxClicked, this);
- childSetEnabled("running", FALSE);
+ getChildView("running")->setEnabled(FALSE);
childSetAction("Reset",&LLLiveLSLEditor::onReset,this);
- childSetEnabled("Reset", TRUE);
+ getChildView("Reset")->setEnabled(TRUE);
mMonoCheckbox = getChild<LLCheckBoxCtrl>("mono");
childSetCommitCallback("mono", &LLLiveLSLEditor::onMonoCheckboxClicked, this);
- childSetEnabled("mono", FALSE);
+ getChildView("mono")->setEnabled(FALSE);
mScriptEd->mEditor->makePristine();
mScriptEd->mEditor->setFocus(TRUE);
@@ -1424,7 +1448,7 @@ void LLLiveLSLEditor::callbackLSLCompileSucceeded(const LLUUID& task_id,
bool is_script_running)
{
lldebugs << "LSL Bytecode saved" << llendl;
- mScriptEd->mErrorList->setCommentText(LLTrans::getString("Compilesuccessful"));
+ mScriptEd->mErrorList->setCommentText(LLTrans::getString("CompileSuccessful"));
mScriptEd->mErrorList->setCommentText(LLTrans::getString("SaveComplete"));
closeIfNeeded();
}
@@ -1441,6 +1465,7 @@ void LLLiveLSLEditor::callbackLSLCompileFailed(const LLSD& compile_errors)
std::string error_message = line->asString();
LLStringUtil::stripNonprintable(error_message);
row["columns"][0]["value"] = error_message;
+ // *TODO: change to "MONOSPACE" and change llfontgl.cpp?
row["columns"][0]["font"] = "OCRA";
mScriptEd->mErrorList->addElement(row);
}
@@ -1548,7 +1573,7 @@ void LLLiveLSLEditor::loadAsset()
DEFAULT_SCRIPT_NAME,
DEFAULT_SCRIPT_DESC,
LLSaleInfo::DEFAULT,
- LLInventoryItem::II_FLAGS_NONE,
+ LLInventoryItemFlags::II_FLAGS_NONE,
time_corrected());
mAssetStatus = PREVIEW_ASSET_LOADED;
}
@@ -1579,15 +1604,15 @@ void LLLiveLSLEditor::onLoadComplete(LLVFS *vfs, const LLUUID& asset_id,
if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ||
LL_ERR_FILE_EMPTY == status)
{
- LLNotifications::instance().add("ScriptMissing");
+ LLNotificationsUtil::add("ScriptMissing");
}
else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status)
{
- LLNotifications::instance().add("ScriptNoPermissions");
+ LLNotificationsUtil::add("ScriptNoPermissions");
}
else
{
- LLNotifications::instance().add("UnableToLoadScript");
+ LLNotificationsUtil::add("UnableToLoadScript");
}
instance->mAssetStatus = PREVIEW_ASSET_ERROR;
}
@@ -1672,7 +1697,7 @@ void LLLiveLSLEditor::onRunningCheckboxClicked( LLUICtrl*, void* userdata )
else
{
runningCheckbox->set(!running);
- LLNotifications::instance().add("CouldNotStartStopScript");
+ LLNotificationsUtil::add("CouldNotStartStopScript");
}
}
@@ -1695,7 +1720,7 @@ void LLLiveLSLEditor::onReset(void *userdata)
}
else
{
- LLNotifications::instance().add("CouldNotStartStopScript");
+ LLNotificationsUtil::add("CouldNotStartStopScript");
}
}
@@ -1767,7 +1792,7 @@ void LLLiveLSLEditor::onSearchReplace(void* userdata)
struct LLLiveLSLSaveData
{
LLLiveLSLSaveData(const LLUUID& id, const LLViewerInventoryItem* item, BOOL active);
- LLUUID mObjectID;
+ LLUUID mSaveObjectID;
LLPointer<LLViewerInventoryItem> mItem;
BOOL mActive;
};
@@ -1775,7 +1800,7 @@ struct LLLiveLSLSaveData
LLLiveLSLSaveData::LLLiveLSLSaveData(const LLUUID& id,
const LLViewerInventoryItem* item,
BOOL active) :
- mObjectID(id),
+ mSaveObjectID(id),
mActive(active)
{
llassert(item);
@@ -1785,18 +1810,18 @@ LLLiveLSLSaveData::LLLiveLSLSaveData(const LLUUID& id,
void LLLiveLSLEditor::saveIfNeeded()
{
llinfos << "LLLiveLSLEditor::saveIfNeeded()" << llendl;
- LLViewerObject* object = gObjectList.findObject(mObjectID);
+ LLViewerObject* object = gObjectList.findObject(mObjectUUID);
if(!object)
{
- LLNotifications::instance().add("SaveScriptFailObjectNotFound");
+ LLNotificationsUtil::add("SaveScriptFailObjectNotFound");
return;
}
- if(mItem.isNull() || !mItem->isComplete())
+ if(mItem.isNull() || !mItem->isFinished())
{
// $NOTE: While the error message may not be exactly correct,
// it's pretty close.
- LLNotifications::instance().add("SaveScriptFailObjectNotFound");
+ LLNotificationsUtil::add("SaveScriptFailObjectNotFound");
return;
}
@@ -1865,7 +1890,7 @@ void LLLiveLSLEditor::saveIfNeeded()
BOOL is_running = getChild<LLCheckBoxCtrl>( "running")->get();
if (!url.empty())
{
- uploadAssetViaCaps(url, filename, mObjectID, mItemUUID, is_running);
+ uploadAssetViaCaps(url, filename, mObjectUUID, mItemUUID, is_running);
}
else if (gAssetStorage)
{
@@ -1879,7 +1904,7 @@ void LLLiveLSLEditor::uploadAssetViaCaps(const std::string& url,
const LLUUID& item_id,
BOOL is_running)
{
- llinfos << "Update Task Inventory via capability" << llendl;
+ llinfos << "Update Task Inventory via capability " << url << llendl;
LLSD body;
body["task_id"] = task_id;
body["item_id"] = item_id;
@@ -1894,7 +1919,7 @@ void LLLiveLSLEditor::uploadAssetLegacy(const std::string& filename,
const LLTransactionID& tid,
BOOL is_running)
{
- LLLiveLSLSaveData* data = new LLLiveLSLSaveData(mObjectID,
+ LLLiveLSLSaveData* data = new LLLiveLSLSaveData(mObjectUUID,
mItem,
is_running);
gAssetStorage->storeAssetData(filename, tid,
@@ -1965,7 +1990,7 @@ void LLLiveLSLEditor::uploadAssetLegacy(const std::string& filename,
getWindow()->incBusyCount();
mPendingUploads++;
LLLiveLSLSaveData* data = NULL;
- data = new LLLiveLSLSaveData(mObjectID,
+ data = new LLLiveLSLSaveData(mObjectUUID,
mItem,
is_running);
gAssetStorage->storeAssetData(dst_filename,
@@ -1997,11 +2022,11 @@ void LLLiveLSLEditor::onSaveTextComplete(const LLUUID& asset_uuid, void* user_da
llwarns << "Unable to save text for a script." << llendl;
LLSD args;
args["REASON"] = std::string(LLAssetStorage::getErrorString(status));
- LLNotifications::instance().add("CompileQueueSaveText", args);
+ LLNotificationsUtil::add("CompileQueueSaveText", args);
}
else
{
- LLLiveLSLEditor* self = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", data->mItem->getUUID()); // ^ data->mObjectID
+ LLLiveLSLEditor* self = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", data->mItem->getUUID()); // ^ data->mSaveObjectID
if (self)
{
self->getWindow()->decBusyCount();
@@ -2026,7 +2051,7 @@ void LLLiveLSLEditor::onSaveBytecodeComplete(const LLUUID& asset_uuid, void* use
if(0 ==status)
{
llinfos << "LSL Bytecode saved" << llendl;
- LLLiveLSLEditor* self = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", data->mItem->getUUID()); // ^ data->mObjectID
+ LLLiveLSLEditor* self = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", data->mItem->getUUID()); // ^ data->mSaveObjectID
if (self)
{
// Tell the user that the compile worked.
@@ -2040,7 +2065,7 @@ void LLLiveLSLEditor::onSaveBytecodeComplete(const LLUUID& asset_uuid, void* use
self->closeFloater();
}
}
- LLViewerObject* object = gObjectList.findObject(data->mObjectID);
+ LLViewerObject* object = gObjectList.findObject(data->mSaveObjectID);
if(object)
{
object->saveScript(data->mItem, data->mActive, false);
@@ -2056,7 +2081,7 @@ void LLLiveLSLEditor::onSaveBytecodeComplete(const LLUUID& asset_uuid, void* use
LLSD args;
args["REASON"] = std::string(LLAssetStorage::getErrorString(status));
- LLNotifications::instance().add("CompileQueueSaveBytecode", args);
+ LLNotificationsUtil::add("CompileQueueSaveBytecode", args);
}
std::string filepath = gDirUtilp->getExpandedFilename(LL_PATH_CACHE,asset_uuid.asString());
@@ -2119,10 +2144,11 @@ void LLLiveLSLEditor::processScriptRunningReply(LLMessageSystem* msg, void**)
}
}
+
void LLLiveLSLEditor::onMonoCheckboxClicked(LLUICtrl*, void* userdata)
{
LLLiveLSLEditor* self = static_cast<LLLiveLSLEditor*>(userdata);
- self->mMonoCheckbox->setEnabled(have_script_upload_cap(self->mObjectID));
+ self->mMonoCheckbox->setEnabled(have_script_upload_cap(self->mObjectUUID));
self->mScriptEd->enableSave(self->getIsModifiable());
}