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.cpp3010
1 files changed, 1505 insertions, 1505 deletions
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index 7095275c52..70458af0e8 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -1,25 +1,25 @@
-/**
+/**
* @file llpreviewscript.cpp
* @brief LLPreviewScript class implementation
*
* $LicenseInfo:firstyear=2002&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$
*/
@@ -92,18 +92,18 @@
#include "llinventoryfunctions.h"
const std::string HELLO_LSL =
- "default\n"
- "{\n"
- " state_entry()\n"
- " {\n"
- " llSay(0, \"Hello, Avatar!\");\n"
- " }\n"
- "\n"
- " touch_start(integer total_number)\n"
- " {\n"
- " llSay(0, \"Touched.\");\n"
- " }\n"
- "}\n";
+ "default\n"
+ "{\n"
+ " state_entry()\n"
+ " {\n"
+ " llSay(0, \"Hello, Avatar!\");\n"
+ " }\n"
+ "\n"
+ " touch_start(integer total_number)\n"
+ " {\n"
+ " llSay(0, \"Touched.\");\n"
+ " }\n"
+ "}\n";
const std::string HELP_LSL_PORTAL_TOPIC = "LSL_Portal";
const std::string DEFAULT_SCRIPT_NAME = "New Script"; // *TODO:Translate?
@@ -115,8 +115,8 @@ const F32 LIVE_HELP_REFRESH_TIME = 1.f;
static bool have_script_upload_cap(LLUUID& object_id)
{
- LLViewerObject* object = gObjectList.findObject(object_id);
- return object && (! object->getRegion()->getCapability("UpdateScriptTask").empty());
+ LLViewerObject* object = gObjectList.findObject(object_id);
+ return object && (! object->getRegion()->getCapability("UpdateScriptTask").empty());
}
/// ---------------------------------------------------------------------------
@@ -124,27 +124,27 @@ static bool have_script_upload_cap(LLUUID& object_id)
/// ---------------------------------------------------------------------------
LLLiveLSLFile::LLLiveLSLFile(std::string file_path, change_callback_t change_cb)
-: mOnChangeCallback(change_cb)
-, mIgnoreNextUpdate(false)
-, LLLiveFile(file_path, 1.0)
+: mOnChangeCallback(change_cb)
+, mIgnoreNextUpdate(false)
+, LLLiveFile(file_path, 1.0)
{
- llassert(mOnChangeCallback);
+ llassert(mOnChangeCallback);
}
LLLiveLSLFile::~LLLiveLSLFile()
{
- LLFile::remove(filename());
+ LLFile::remove(filename());
}
bool LLLiveLSLFile::loadFile()
{
- if (mIgnoreNextUpdate)
- {
- mIgnoreNextUpdate = false;
- return true;
- }
+ if (mIgnoreNextUpdate)
+ {
+ mIgnoreNextUpdate = false;
+ return true;
+ }
- return mOnChangeCallback(filename());
+ return mOnChangeCallback(filename());
}
/// ---------------------------------------------------------------------------
@@ -153,176 +153,176 @@ bool LLLiveLSLFile::loadFile()
class LLFloaterScriptSearch : public LLFloater
{
public:
- LLFloaterScriptSearch(LLScriptEdCore* editor_core);
- ~LLFloaterScriptSearch();
+ LLFloaterScriptSearch(LLScriptEdCore* editor_core);
+ ~LLFloaterScriptSearch();
- /*virtual*/ BOOL postBuild();
- static void show(LLScriptEdCore* editor_core);
- static void onBtnSearch(void* userdata);
- void handleBtnSearch();
+ /*virtual*/ BOOL postBuild();
+ static void show(LLScriptEdCore* editor_core);
+ static void onBtnSearch(void* userdata);
+ void handleBtnSearch();
- static void onBtnReplace(void* userdata);
- void handleBtnReplace();
+ static void onBtnReplace(void* userdata);
+ void handleBtnReplace();
- static void onBtnReplaceAll(void* userdata);
- void handleBtnReplaceAll();
+ static void onBtnReplaceAll(void* userdata);
+ void handleBtnReplaceAll();
- LLScriptEdCore* getEditorCore() { return mEditorCore; }
- static LLFloaterScriptSearch* getInstance() { return sInstance; }
+ LLScriptEdCore* getEditorCore() { return mEditorCore; }
+ static LLFloaterScriptSearch* getInstance() { return sInstance; }
- virtual bool hasAccelerators() const;
- virtual BOOL handleKeyHere(KEY key, MASK mask);
+ virtual bool hasAccelerators() const;
+ virtual BOOL handleKeyHere(KEY key, MASK mask);
private:
- LLScriptEdCore* mEditorCore;
- static LLFloaterScriptSearch* sInstance;
+ LLScriptEdCore* mEditorCore;
+ static LLFloaterScriptSearch* sInstance;
protected:
- LLLineEditor* mSearchBox;
- LLLineEditor* mReplaceBox;
- void onSearchBoxCommit();
+ LLLineEditor* mSearchBox;
+ LLLineEditor* mReplaceBox;
+ void onSearchBoxCommit();
};
LLFloaterScriptSearch* LLFloaterScriptSearch::sInstance = NULL;
LLFloaterScriptSearch::LLFloaterScriptSearch(LLScriptEdCore* editor_core)
-: LLFloater(LLSD()),
- mSearchBox(NULL),
- mReplaceBox(NULL),
- mEditorCore(editor_core)
-{
- buildFromFile("floater_script_search.xml");
-
- sInstance = this;
-
- // find floater in which script panel is embedded
- LLView* viewp = (LLView*)editor_core;
- while(viewp)
- {
- LLFloater* floaterp = dynamic_cast<LLFloater*>(viewp);
- if (floaterp)
- {
- floaterp->addDependentFloater(this);
- break;
- }
- viewp = viewp->getParent();
- }
+: LLFloater(LLSD()),
+ mSearchBox(NULL),
+ mReplaceBox(NULL),
+ mEditorCore(editor_core)
+{
+ buildFromFile("floater_script_search.xml");
+
+ sInstance = this;
+
+ // find floater in which script panel is embedded
+ LLView* viewp = (LLView*)editor_core;
+ while(viewp)
+ {
+ LLFloater* floaterp = dynamic_cast<LLFloater*>(viewp);
+ if (floaterp)
+ {
+ floaterp->addDependentFloater(this);
+ break;
+ }
+ viewp = viewp->getParent();
+ }
}
BOOL LLFloaterScriptSearch::postBuild()
{
- mReplaceBox = getChild<LLLineEditor>("replace_text");
- mSearchBox = getChild<LLLineEditor>("search_text");
- mSearchBox->setCommitCallback(boost::bind(&LLFloaterScriptSearch::onSearchBoxCommit, this));
- mSearchBox->setCommitOnFocusLost(FALSE);
- childSetAction("search_btn", onBtnSearch,this);
- childSetAction("replace_btn", onBtnReplace,this);
- childSetAction("replace_all_btn", onBtnReplaceAll,this);
+ mReplaceBox = getChild<LLLineEditor>("replace_text");
+ mSearchBox = getChild<LLLineEditor>("search_text");
+ mSearchBox->setCommitCallback(boost::bind(&LLFloaterScriptSearch::onSearchBoxCommit, this));
+ mSearchBox->setCommitOnFocusLost(FALSE);
+ childSetAction("search_btn", onBtnSearch,this);
+ childSetAction("replace_btn", onBtnReplace,this);
+ childSetAction("replace_all_btn", onBtnReplaceAll,this);
- setDefaultBtn("search_btn");
+ setDefaultBtn("search_btn");
- return TRUE;
+ return TRUE;
}
-//static
+//static
void LLFloaterScriptSearch::show(LLScriptEdCore* editor_core)
{
- LLSD::String search_text;
- LLSD::String replace_text;
- if (sInstance && sInstance->mEditorCore && sInstance->mEditorCore != editor_core)
- {
- search_text=sInstance->mSearchBox->getValue().asString();
- replace_text=sInstance->mReplaceBox->getValue().asString();
- sInstance->closeFloater();
- delete sInstance;
- }
+ LLSD::String search_text;
+ LLSD::String replace_text;
+ if (sInstance && sInstance->mEditorCore && sInstance->mEditorCore != editor_core)
+ {
+ search_text=sInstance->mSearchBox->getValue().asString();
+ replace_text=sInstance->mReplaceBox->getValue().asString();
+ sInstance->closeFloater();
+ delete sInstance;
+ }
- if (!sInstance)
- {
- // sInstance will be assigned in the constructor.
- new LLFloaterScriptSearch(editor_core);
- sInstance->mSearchBox->setValue(search_text);
- sInstance->mReplaceBox->setValue(replace_text);
- }
+ if (!sInstance)
+ {
+ // sInstance will be assigned in the constructor.
+ new LLFloaterScriptSearch(editor_core);
+ sInstance->mSearchBox->setValue(search_text);
+ sInstance->mReplaceBox->setValue(replace_text);
+ }
- sInstance->openFloater();
+ sInstance->openFloater();
}
LLFloaterScriptSearch::~LLFloaterScriptSearch()
{
- sInstance = NULL;
+ sInstance = NULL;
}
-// static
+// static
void LLFloaterScriptSearch::onBtnSearch(void *userdata)
{
- LLFloaterScriptSearch* self = (LLFloaterScriptSearch*)userdata;
- self->handleBtnSearch();
+ LLFloaterScriptSearch* self = (LLFloaterScriptSearch*)userdata;
+ self->handleBtnSearch();
}
void LLFloaterScriptSearch::handleBtnSearch()
{
- LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text");
- mEditorCore->mEditor->selectNext(mSearchBox->getValue().asString(), caseChk->get());
+ LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text");
+ mEditorCore->mEditor->selectNext(mSearchBox->getValue().asString(), caseChk->get());
}
-// static
+// static
void LLFloaterScriptSearch::onBtnReplace(void *userdata)
{
- LLFloaterScriptSearch* self = (LLFloaterScriptSearch*)userdata;
- self->handleBtnReplace();
+ LLFloaterScriptSearch* self = (LLFloaterScriptSearch*)userdata;
+ self->handleBtnReplace();
}
void LLFloaterScriptSearch::handleBtnReplace()
{
- LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text");
- mEditorCore->mEditor->replaceText(mSearchBox->getValue().asString(), mReplaceBox->getValue().asString(), caseChk->get());
+ LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text");
+ mEditorCore->mEditor->replaceText(mSearchBox->getValue().asString(), mReplaceBox->getValue().asString(), caseChk->get());
}
-// static
+// static
void LLFloaterScriptSearch::onBtnReplaceAll(void *userdata)
{
- LLFloaterScriptSearch* self = (LLFloaterScriptSearch*)userdata;
- self->handleBtnReplaceAll();
+ LLFloaterScriptSearch* self = (LLFloaterScriptSearch*)userdata;
+ self->handleBtnReplaceAll();
}
void LLFloaterScriptSearch::handleBtnReplaceAll()
{
- LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text");
- mEditorCore->mEditor->replaceTextAll(mSearchBox->getValue().asString(), mReplaceBox->getValue().asString(), caseChk->get());
+ LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text");
+ mEditorCore->mEditor->replaceTextAll(mSearchBox->getValue().asString(), mReplaceBox->getValue().asString(), caseChk->get());
}
bool LLFloaterScriptSearch::hasAccelerators() const
{
- if (mEditorCore)
- {
- return mEditorCore->hasAccelerators();
- }
- return FALSE;
+ if (mEditorCore)
+ {
+ return mEditorCore->hasAccelerators();
+ }
+ return FALSE;
}
BOOL LLFloaterScriptSearch::handleKeyHere(KEY key, MASK mask)
{
- if (mEditorCore)
- {
- BOOL handled = mEditorCore->handleKeyHere(key, mask);
- if (!handled)
- {
- LLFloater::handleKeyHere(key, mask);
- }
- }
+ if (mEditorCore)
+ {
+ BOOL handled = mEditorCore->handleKeyHere(key, mask);
+ if (!handled)
+ {
+ LLFloater::handleKeyHere(key, mask);
+ }
+ }
- return FALSE;
+ return FALSE;
}
void LLFloaterScriptSearch::onSearchBoxCommit()
{
- if (mEditorCore && mEditorCore->mEditor)
- {
- LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text");
- mEditorCore->mEditor->selectNext(mSearchBox->getValue().asString(), caseChk->get());
- }
+ if (mEditorCore && mEditorCore->mEditor)
+ {
+ LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text");
+ mEditorCore->mEditor->selectNext(mSearchBox->getValue().asString(), caseChk->get());
+ }
}
/// ---------------------------------------------------------------------------
@@ -363,137 +363,137 @@ void LLScriptMovedObserver::changed(U32 mask)
struct LLSECKeywordCompare
{
- bool operator()(const std::string& lhs, const std::string& rhs)
- {
- return (LLStringUtil::compareDictInsensitive( lhs, rhs ) < 0 );
- }
+ bool operator()(const std::string& lhs, const std::string& rhs)
+ {
+ return (LLStringUtil::compareDictInsensitive( lhs, rhs ) < 0 );
+ }
};
LLScriptEdCore::LLScriptEdCore(
- LLScriptEdContainer* container,
- const std::string& sample,
- const LLHandle<LLFloater>& floater_handle,
- void (*load_callback)(void*),
- void (*save_callback)(void*, BOOL),
- void (*search_replace_callback) (void* userdata),
- void* userdata,
- bool live,
- S32 bottom_pad)
- :
- LLPanel(),
- mSampleText(sample),
- mEditor( NULL ),
- mLoadCallback( load_callback ),
- mSaveCallback( save_callback ),
- mSearchReplaceCallback( search_replace_callback ),
- mUserdata( userdata ),
- mForceClose( FALSE ),
- mLastHelpToken(NULL),
- mLiveHelpHistorySize(0),
- mEnableSave(FALSE),
- mLiveFile(NULL),
- mLive(live),
- mContainer(container),
- mHasScriptData(FALSE),
- mScriptRemoved(FALSE),
- mSaveDialogShown(FALSE)
-{
- setFollowsAll();
- setBorderVisible(FALSE);
-
- setXMLFilename("panel_script_ed.xml");
- llassert_always(mContainer != NULL);
+ LLScriptEdContainer* container,
+ const std::string& sample,
+ const LLHandle<LLFloater>& floater_handle,
+ void (*load_callback)(void*),
+ void (*save_callback)(void*, BOOL),
+ void (*search_replace_callback) (void* userdata),
+ void* userdata,
+ bool live,
+ S32 bottom_pad)
+ :
+ LLPanel(),
+ mSampleText(sample),
+ mEditor( NULL ),
+ mLoadCallback( load_callback ),
+ mSaveCallback( save_callback ),
+ mSearchReplaceCallback( search_replace_callback ),
+ mUserdata( userdata ),
+ mForceClose( FALSE ),
+ mLastHelpToken(NULL),
+ mLiveHelpHistorySize(0),
+ mEnableSave(FALSE),
+ mLiveFile(NULL),
+ mLive(live),
+ mContainer(container),
+ mHasScriptData(FALSE),
+ mScriptRemoved(FALSE),
+ mSaveDialogShown(FALSE)
+{
+ setFollowsAll();
+ setBorderVisible(FALSE);
+
+ setXMLFilename("panel_script_ed.xml");
+ llassert_always(mContainer != NULL);
}
LLScriptEdCore::~LLScriptEdCore()
{
- deleteBridges();
+ deleteBridges();
- // If the search window is up for this editor, close it.
- LLFloaterScriptSearch* script_search = LLFloaterScriptSearch::getInstance();
- if (script_search && script_search->getEditorCore() == this)
- {
- script_search->closeFloater();
- delete script_search;
- }
+ // If the search window is up for this editor, close it.
+ LLFloaterScriptSearch* script_search = LLFloaterScriptSearch::getInstance();
+ if (script_search && script_search->getEditorCore() == this)
+ {
+ script_search->closeFloater();
+ delete script_search;
+ }
- delete mLiveFile;
- if (mSyntaxIDConnection.connected())
- {
- mSyntaxIDConnection.disconnect();
- }
+ delete mLiveFile;
+ if (mSyntaxIDConnection.connected())
+ {
+ mSyntaxIDConnection.disconnect();
+ }
}
void LLLiveLSLEditor::experienceChanged()
{
- if(mScriptEd->getAssociatedExperience() != mExperiences->getSelectedValue().asUUID())
- {
- mScriptEd->enableSave(getIsModifiable());
- //getChildView("Save_btn")->setEnabled(TRUE);
- mScriptEd->setAssociatedExperience(mExperiences->getSelectedValue().asUUID());
- updateExperiencePanel();
- }
+ if(mScriptEd->getAssociatedExperience() != mExperiences->getSelectedValue().asUUID())
+ {
+ mScriptEd->enableSave(getIsModifiable());
+ //getChildView("Save_btn")->setEnabled(TRUE);
+ mScriptEd->setAssociatedExperience(mExperiences->getSelectedValue().asUUID());
+ updateExperiencePanel();
+ }
}
void LLLiveLSLEditor::onViewProfile( LLUICtrl *ui, void* userdata )
{
- LLLiveLSLEditor* self = (LLLiveLSLEditor*)userdata;
+ LLLiveLSLEditor* self = (LLLiveLSLEditor*)userdata;
- LLUUID id;
- if(self->mExperienceEnabled->get())
- {
- id=self->mScriptEd->getAssociatedExperience();
- if(id.notNull())
- {
- LLFloaterReg::showInstance("experience_profile", id, true);
- }
- }
+ LLUUID id;
+ if(self->mExperienceEnabled->get())
+ {
+ id=self->mScriptEd->getAssociatedExperience();
+ if(id.notNull())
+ {
+ LLFloaterReg::showInstance("experience_profile", id, true);
+ }
+ }
}
void LLLiveLSLEditor::onToggleExperience( LLUICtrl *ui, void* userdata )
{
- LLLiveLSLEditor* self = (LLLiveLSLEditor*)userdata;
+ LLLiveLSLEditor* self = (LLLiveLSLEditor*)userdata;
- LLUUID id;
- if(self->mExperienceEnabled->get())
- {
- if(self->mScriptEd->getAssociatedExperience().isNull())
- {
- id=self->mExperienceIds.beginArray()->asUUID();
- }
- }
+ LLUUID id;
+ if(self->mExperienceEnabled->get())
+ {
+ if(self->mScriptEd->getAssociatedExperience().isNull())
+ {
+ id=self->mExperienceIds.beginArray()->asUUID();
+ }
+ }
- if(id != self->mScriptEd->getAssociatedExperience())
- {
- self->mScriptEd->enableSave(self->getIsModifiable());
- }
- self->mScriptEd->setAssociatedExperience(id);
+ if(id != self->mScriptEd->getAssociatedExperience())
+ {
+ self->mScriptEd->enableSave(self->getIsModifiable());
+ }
+ self->mScriptEd->setAssociatedExperience(id);
- self->updateExperiencePanel();
+ self->updateExperiencePanel();
}
BOOL LLScriptEdCore::postBuild()
{
- mErrorList = getChild<LLScrollListCtrl>("lsl errors");
+ mErrorList = getChild<LLScrollListCtrl>("lsl errors");
- mFunctions = getChild<LLComboBox>("Insert...");
+ mFunctions = getChild<LLComboBox>("Insert...");
- childSetCommitCallback("Insert...", &LLScriptEdCore::onBtnInsertFunction, this);
+ childSetCommitCallback("Insert...", &LLScriptEdCore::onBtnInsertFunction, this);
- mEditor = getChild<LLScriptEditor>("Script Editor");
+ mEditor = getChild<LLScriptEditor>("Script Editor");
- childSetCommitCallback("lsl errors", &LLScriptEdCore::onErrorList, this);
- childSetAction("Save_btn", boost::bind(&LLScriptEdCore::doSave,this,FALSE));
- childSetAction("Edit_btn", boost::bind(&LLScriptEdCore::openInExternalEditor, this));
+ childSetCommitCallback("lsl errors", &LLScriptEdCore::onErrorList, this);
+ childSetAction("Save_btn", boost::bind(&LLScriptEdCore::doSave,this,FALSE));
+ childSetAction("Edit_btn", boost::bind(&LLScriptEdCore::openInExternalEditor, this));
- initMenu();
+ initMenu();
- mSyntaxIDConnection = LLSyntaxIdLSL::getInstance()->addSyntaxIDCallback(boost::bind(&LLScriptEdCore::processKeywords, this));
+ mSyntaxIDConnection = LLSyntaxIdLSL::getInstance()->addSyntaxIDCallback(boost::bind(&LLScriptEdCore::processKeywords, this));
- // Intialise keyword highlighting for the current simulator's version of LSL
- LLSyntaxIdLSL::getInstance()->initialize();
- processKeywords();
+ // Intialise keyword highlighting for the current simulator's version of LSL
+ LLSyntaxIdLSL::getInstance()->initialize();
+ processKeywords();
mCommitCallbackRegistrar.add("FontSize.Set", boost::bind(&LLScriptEdCore::onChangeFontSize, this, _2));
mEnableCallbackRegistrar.add("FontSize.Check", boost::bind(&LLScriptEdCore::isFontSizeChecked, this, _2));
@@ -502,182 +502,182 @@ BOOL LLScriptEdCore::postBuild()
"menu_lsl_font_size.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
getChild<LLMenuButton>("font_btn")->setMenu(context_menu, LLMenuButton::MP_BOTTOM_LEFT, true);
- return TRUE;
+ return TRUE;
}
void LLScriptEdCore::processKeywords()
{
- LL_DEBUGS("SyntaxLSL") << "Processing keywords" << LL_ENDL;
- mEditor->clearSegments();
- mEditor->initKeywords();
- mEditor->loadKeywords();
-
- string_vec_t primary_keywords;
- string_vec_t 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->getType() == LLKeywordToken::TT_FUNCTION)
- {
- primary_keywords.push_back( wstring_to_utf8str(token->getToken()) );
- }
- else
- {
- secondary_keywords.push_back( wstring_to_utf8str(token->getToken()) );
- }
- }
- for (string_vec_t::const_iterator iter = primary_keywords.begin();
- iter!= primary_keywords.end(); ++iter)
- {
- mFunctions->add(*iter);
- }
- for (string_vec_t::const_iterator iter = secondary_keywords.begin();
- iter!= secondary_keywords.end(); ++iter)
- {
- mFunctions->add(*iter);
- }
+ LL_DEBUGS("SyntaxLSL") << "Processing keywords" << LL_ENDL;
+ mEditor->clearSegments();
+ mEditor->initKeywords();
+ mEditor->loadKeywords();
+
+ string_vec_t primary_keywords;
+ string_vec_t 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->getType() == LLKeywordToken::TT_FUNCTION)
+ {
+ primary_keywords.push_back( wstring_to_utf8str(token->getToken()) );
+ }
+ else
+ {
+ secondary_keywords.push_back( wstring_to_utf8str(token->getToken()) );
+ }
+ }
+ for (string_vec_t::const_iterator iter = primary_keywords.begin();
+ iter!= primary_keywords.end(); ++iter)
+ {
+ mFunctions->add(*iter);
+ }
+ for (string_vec_t::const_iterator iter = secondary_keywords.begin();
+ iter!= secondary_keywords.end(); ++iter)
+ {
+ mFunctions->add(*iter);
+ }
}
void LLScriptEdCore::initMenu()
{
- // *TODO: Skinning - make these callbacks data driven
- LLMenuItemCallGL* menuItem;
-
- menuItem = getChild<LLMenuItemCallGL>("Save");
- menuItem->setClickCallback(boost::bind(&LLScriptEdCore::doSave, this, FALSE));
- menuItem->setEnableCallback(boost::bind(&LLScriptEdCore::hasChanged, this));
-
- menuItem = getChild<LLMenuItemCallGL>("Revert All Changes");
- menuItem->setClickCallback(boost::bind(&LLScriptEdCore::onBtnUndoChanges, this));
- menuItem->setEnableCallback(boost::bind(&LLScriptEdCore::hasChanged, this));
+ // *TODO: Skinning - make these callbacks data driven
+ LLMenuItemCallGL* menuItem;
+
+ menuItem = getChild<LLMenuItemCallGL>("Save");
+ menuItem->setClickCallback(boost::bind(&LLScriptEdCore::doSave, this, FALSE));
+ menuItem->setEnableCallback(boost::bind(&LLScriptEdCore::hasChanged, this));
- menuItem = getChild<LLMenuItemCallGL>("Undo");
- menuItem->setClickCallback(boost::bind(&LLTextEditor::undo, mEditor));
- menuItem->setEnableCallback(boost::bind(&LLTextEditor::canUndo, mEditor));
+ menuItem = getChild<LLMenuItemCallGL>("Revert All Changes");
+ menuItem->setClickCallback(boost::bind(&LLScriptEdCore::onBtnUndoChanges, this));
+ menuItem->setEnableCallback(boost::bind(&LLScriptEdCore::hasChanged, this));
- menuItem = getChild<LLMenuItemCallGL>("Redo");
- menuItem->setClickCallback(boost::bind(&LLTextEditor::redo, mEditor));
- menuItem->setEnableCallback(boost::bind(&LLTextEditor::canRedo, mEditor));
+ menuItem = getChild<LLMenuItemCallGL>("Undo");
+ menuItem->setClickCallback(boost::bind(&LLTextEditor::undo, mEditor));
+ menuItem->setEnableCallback(boost::bind(&LLTextEditor::canUndo, mEditor));
- menuItem = getChild<LLMenuItemCallGL>("Cut");
- menuItem->setClickCallback(boost::bind(&LLTextEditor::cut, mEditor));
- menuItem->setEnableCallback(boost::bind(&LLTextEditor::canCut, mEditor));
+ menuItem = getChild<LLMenuItemCallGL>("Redo");
+ menuItem->setClickCallback(boost::bind(&LLTextEditor::redo, mEditor));
+ menuItem->setEnableCallback(boost::bind(&LLTextEditor::canRedo, mEditor));
- menuItem = getChild<LLMenuItemCallGL>("Copy");
- menuItem->setClickCallback(boost::bind(&LLTextEditor::copy, mEditor));
- menuItem->setEnableCallback(boost::bind(&LLTextEditor::canCopy, mEditor));
+ menuItem = getChild<LLMenuItemCallGL>("Cut");
+ menuItem->setClickCallback(boost::bind(&LLTextEditor::cut, mEditor));
+ menuItem->setEnableCallback(boost::bind(&LLTextEditor::canCut, mEditor));
- menuItem = getChild<LLMenuItemCallGL>("Paste");
- menuItem->setClickCallback(boost::bind(&LLTextEditor::paste, mEditor));
- menuItem->setEnableCallback(boost::bind(&LLTextEditor::canPaste, mEditor));
+ menuItem = getChild<LLMenuItemCallGL>("Copy");
+ menuItem->setClickCallback(boost::bind(&LLTextEditor::copy, mEditor));
+ menuItem->setEnableCallback(boost::bind(&LLTextEditor::canCopy, mEditor));
- menuItem = getChild<LLMenuItemCallGL>("Select All");
- menuItem->setClickCallback(boost::bind(&LLTextEditor::selectAll, mEditor));
- menuItem->setEnableCallback(boost::bind(&LLTextEditor::canSelectAll, mEditor));
+ menuItem = getChild<LLMenuItemCallGL>("Paste");
+ menuItem->setClickCallback(boost::bind(&LLTextEditor::paste, mEditor));
+ menuItem->setEnableCallback(boost::bind(&LLTextEditor::canPaste, mEditor));
- menuItem = getChild<LLMenuItemCallGL>("Deselect");
- menuItem->setClickCallback(boost::bind(&LLTextEditor::deselect, mEditor));
- menuItem->setEnableCallback(boost::bind(&LLTextEditor::canDeselect, mEditor));
+ menuItem = getChild<LLMenuItemCallGL>("Select All");
+ menuItem->setClickCallback(boost::bind(&LLTextEditor::selectAll, mEditor));
+ menuItem->setEnableCallback(boost::bind(&LLTextEditor::canSelectAll, mEditor));
- menuItem = getChild<LLMenuItemCallGL>("Search / Replace...");
- menuItem->setClickCallback(boost::bind(&LLFloaterScriptSearch::show, this));
+ menuItem = getChild<LLMenuItemCallGL>("Deselect");
+ menuItem->setClickCallback(boost::bind(&LLTextEditor::deselect, mEditor));
+ menuItem->setEnableCallback(boost::bind(&LLTextEditor::canDeselect, mEditor));
- menuItem = getChild<LLMenuItemCallGL>("Go to line...");
- menuItem->setClickCallback(boost::bind(&LLFloaterGotoLine::show, this));
+ menuItem = getChild<LLMenuItemCallGL>("Search / Replace...");
+ menuItem->setClickCallback(boost::bind(&LLFloaterScriptSearch::show, this));
- menuItem = getChild<LLMenuItemCallGL>("Keyword Help...");
- menuItem->setClickCallback(boost::bind(&LLScriptEdCore::onBtnDynamicHelp, this));
+ menuItem = getChild<LLMenuItemCallGL>("Go to line...");
+ menuItem->setClickCallback(boost::bind(&LLFloaterGotoLine::show, this));
- menuItem = getChild<LLMenuItemCallGL>("LoadFromFile");
- menuItem->setClickCallback(boost::bind(&LLScriptEdCore::onBtnLoadFromFile, this));
- menuItem->setEnableCallback(boost::bind(&LLScriptEdCore::enableLoadFromFileMenu, this));
+ menuItem = getChild<LLMenuItemCallGL>("Keyword Help...");
+ menuItem->setClickCallback(boost::bind(&LLScriptEdCore::onBtnDynamicHelp, this));
- menuItem = getChild<LLMenuItemCallGL>("SaveToFile");
- menuItem->setClickCallback(boost::bind(&LLScriptEdCore::onBtnSaveToFile, this));
- menuItem->setEnableCallback(boost::bind(&LLScriptEdCore::enableSaveToFileMenu, this));
+ menuItem = getChild<LLMenuItemCallGL>("LoadFromFile");
+ menuItem->setClickCallback(boost::bind(&LLScriptEdCore::onBtnLoadFromFile, this));
+ menuItem->setEnableCallback(boost::bind(&LLScriptEdCore::enableLoadFromFileMenu, this));
+
+ menuItem = getChild<LLMenuItemCallGL>("SaveToFile");
+ menuItem->setClickCallback(boost::bind(&LLScriptEdCore::onBtnSaveToFile, this));
+ menuItem->setEnableCallback(boost::bind(&LLScriptEdCore::enableSaveToFileMenu, this));
}
void LLScriptEdCore::setScriptText(const std::string& text, BOOL is_valid)
{
- if (mEditor)
- {
- mEditor->setText(text);
- mHasScriptData = is_valid;
- }
+ if (mEditor)
+ {
+ mEditor->setText(text);
+ mHasScriptData = is_valid;
+ }
}
void LLScriptEdCore::makeEditorPristine()
{
- if (mEditor)
- {
- mEditor->makePristine();
- }
+ if (mEditor)
+ {
+ mEditor->makePristine();
+ }
}
bool LLScriptEdCore::loadScriptText(const std::string& filename)
{
- if (filename.empty())
- {
- LL_WARNS() << "Empty file name" << LL_ENDL;
- return false;
- }
-
- LLFILE* file = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/
- if (!file)
- {
- LL_WARNS() << "Error opening " << filename << LL_ENDL;
- return false;
- }
-
- // read in the whole file
- fseek(file, 0L, SEEK_END);
- size_t file_length = (size_t) ftell(file);
- fseek(file, 0L, SEEK_SET);
- char* buffer = new char[file_length+1];
- size_t nread = fread(buffer, 1, file_length, file);
- if (nread < file_length)
- {
- LL_WARNS() << "Short read" << LL_ENDL;
- }
- buffer[nread] = '\0';
- fclose(file);
+ if (filename.empty())
+ {
+ LL_WARNS() << "Empty file name" << LL_ENDL;
+ return false;
+ }
+
+ LLFILE* file = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/
+ if (!file)
+ {
+ LL_WARNS() << "Error opening " << filename << LL_ENDL;
+ return false;
+ }
+
+ // read in the whole file
+ fseek(file, 0L, SEEK_END);
+ size_t file_length = (size_t) ftell(file);
+ fseek(file, 0L, SEEK_SET);
+ char* buffer = new char[file_length+1];
+ size_t nread = fread(buffer, 1, file_length, file);
+ if (nread < file_length)
+ {
+ LL_WARNS() << "Short read" << LL_ENDL;
+ }
+ buffer[nread] = '\0';
+ fclose(file);
std::string text = std::string(buffer);
LLStringUtil::replaceTabsWithSpaces(text, LLTextEditor::spacesPerTab());
mEditor->setText(text);
- delete[] buffer;
+ delete[] buffer;
- return true;
+ return true;
}
bool LLScriptEdCore::writeToFile(const std::string& filename)
{
- LLFILE* fp = LLFile::fopen(filename, "wb");
- if (!fp)
- {
- LL_WARNS() << "Unable to write to " << filename << LL_ENDL;
+ LLFILE* fp = LLFile::fopen(filename, "wb");
+ if (!fp)
+ {
+ LL_WARNS() << "Unable to write to " << filename << LL_ENDL;
- LLSD row;
- row["columns"][0]["value"] = "Error writing to local file. Is your hard drive full?";
- row["columns"][0]["font"] = "SANSSERIF_SMALL";
- mErrorList->addElement(row);
- return false;
- }
+ LLSD row;
+ row["columns"][0]["value"] = "Error writing to local file. Is your hard drive full?";
+ row["columns"][0]["font"] = "SANSSERIF_SMALL";
+ mErrorList->addElement(row);
+ return false;
+ }
- std::string utf8text = mEditor->getText();
+ std::string utf8text = mEditor->getText();
- // Special case for a completely empty script - stuff in one space so it can store properly. See SL-46889
- if (utf8text.size() == 0)
- {
- utf8text = " ";
- }
+ // Special case for a completely empty script - stuff in one space so it can store properly. See SL-46889
+ if (utf8text.size() == 0)
+ {
+ utf8text = " ";
+ }
- fputs(utf8text.c_str(), fp);
- fclose(fp);
- return true;
+ fputs(utf8text.c_str(), fp);
+ fclose(fp);
+ return true;
}
void LLScriptEdCore::sync()
@@ -697,393 +697,393 @@ void LLScriptEdCore::sync()
bool LLScriptEdCore::hasChanged()
{
- if (!mEditor) return false;
+ if (!mEditor) return false;
- return ((!mEditor->isPristine() || mEnableSave) && mHasScriptData);
+ return ((!mEditor->isPristine() || mEnableSave) && mHasScriptData);
}
void LLScriptEdCore::draw()
{
- BOOL script_changed = hasChanged();
- getChildView("Save_btn")->setEnabled(script_changed && !mScriptRemoved);
+ BOOL script_changed = hasChanged();
+ getChildView("Save_btn")->setEnabled(script_changed && !mScriptRemoved);
- if( mEditor->hasFocus() )
- {
- S32 line = 0;
- S32 column = 0;
- mEditor->getCurrentLineAndColumn( &line, &column, FALSE ); // don't include wordwrap
- LLStringUtil::format_map_t args;
- std::string cursor_pos;
- args["[LINE]"] = llformat ("%d", line);
- args["[COLUMN]"] = llformat ("%d", column);
- cursor_pos = LLTrans::getString("CursorPos", args);
- getChild<LLUICtrl>("line_col")->setValue(cursor_pos);
- }
- else
- {
- getChild<LLUICtrl>("line_col")->setValue(LLStringUtil::null);
- }
+ if( mEditor->hasFocus() )
+ {
+ S32 line = 0;
+ S32 column = 0;
+ mEditor->getCurrentLineAndColumn( &line, &column, FALSE ); // don't include wordwrap
+ LLStringUtil::format_map_t args;
+ std::string cursor_pos;
+ args["[LINE]"] = llformat ("%d", line);
+ args["[COLUMN]"] = llformat ("%d", column);
+ cursor_pos = LLTrans::getString("CursorPos", args);
+ getChild<LLUICtrl>("line_col")->setValue(cursor_pos);
+ }
+ else
+ {
+ getChild<LLUICtrl>("line_col")->setValue(LLStringUtil::null);
+ }
- updateDynamicHelp();
+ updateDynamicHelp();
- LLPanel::draw();
+ LLPanel::draw();
}
void LLScriptEdCore::updateDynamicHelp(BOOL immediate)
{
- LLFloater* help_floater = mLiveHelpHandle.get();
- if (!help_floater) return;
-
- // update back and forward buttons
- LLButton* fwd_button = help_floater->getChild<LLButton>("fwd_btn");
- LLButton* back_button = help_floater->getChild<LLButton>("back_btn");
- LLMediaCtrl* browser = help_floater->getChild<LLMediaCtrl>("lsl_guide_html");
- back_button->setEnabled(browser->canNavigateBack());
- fwd_button->setEnabled(browser->canNavigateForward());
-
- if (!immediate && !gSavedSettings.getBOOL("ScriptHelpFollowsCursor"))
- {
- return;
- }
-
- LLTextSegmentPtr segment = NULL;
- std::vector<LLTextSegmentPtr> selected_segments;
- mEditor->getSelectedSegments(selected_segments);
- LLKeywordToken* token;
- // try segments in selection range first
- std::vector<LLTextSegmentPtr>::iterator segment_iter;
- for (segment_iter = selected_segments.begin(); segment_iter != selected_segments.end(); ++segment_iter)
- {
- token = (*segment_iter)->getToken();
- if(token && isKeyword(token))
- {
- segment = *segment_iter;
- break;
- }
- }
-
- // then try previous segment in case we just typed it
- if (!segment)
- {
- const LLTextSegmentPtr test_segment = mEditor->getPreviousSegment();
- token = test_segment->getToken();
- if(token && isKeyword(token))
- {
- segment = test_segment;
- }
- }
-
- if (segment)
- {
- if (segment->getToken() != mLastHelpToken)
- {
- mLastHelpToken = segment->getToken();
- mLiveHelpTimer.start();
- }
- if (immediate || (mLiveHelpTimer.getStarted() && mLiveHelpTimer.getElapsedTimeF32() > LIVE_HELP_REFRESH_TIME))
- {
- // Use Wtext since segment's start/end are made for wstring and will
- // result in a shift for case of multi-byte symbols inside std::string.
- LLWString segment_text = mEditor->getWText().substr(segment->getStart(), segment->getEnd() - segment->getStart());
- std::string help_string = wstring_to_utf8str(segment_text);
- setHelpPage(help_string);
- mLiveHelpTimer.stop();
- }
- }
- else
- {
- if (immediate)
- {
- setHelpPage(LLStringUtil::null);
- }
- }
+ LLFloater* help_floater = mLiveHelpHandle.get();
+ if (!help_floater) return;
+
+ // update back and forward buttons
+ LLButton* fwd_button = help_floater->getChild<LLButton>("fwd_btn");
+ LLButton* back_button = help_floater->getChild<LLButton>("back_btn");
+ LLMediaCtrl* browser = help_floater->getChild<LLMediaCtrl>("lsl_guide_html");
+ back_button->setEnabled(browser->canNavigateBack());
+ fwd_button->setEnabled(browser->canNavigateForward());
+
+ if (!immediate && !gSavedSettings.getBOOL("ScriptHelpFollowsCursor"))
+ {
+ return;
+ }
+
+ LLTextSegmentPtr segment = NULL;
+ std::vector<LLTextSegmentPtr> selected_segments;
+ mEditor->getSelectedSegments(selected_segments);
+ LLKeywordToken* token;
+ // try segments in selection range first
+ std::vector<LLTextSegmentPtr>::iterator segment_iter;
+ for (segment_iter = selected_segments.begin(); segment_iter != selected_segments.end(); ++segment_iter)
+ {
+ token = (*segment_iter)->getToken();
+ if(token && isKeyword(token))
+ {
+ segment = *segment_iter;
+ break;
+ }
+ }
+
+ // then try previous segment in case we just typed it
+ if (!segment)
+ {
+ const LLTextSegmentPtr test_segment = mEditor->getPreviousSegment();
+ token = test_segment->getToken();
+ if(token && isKeyword(token))
+ {
+ segment = test_segment;
+ }
+ }
+
+ if (segment)
+ {
+ if (segment->getToken() != mLastHelpToken)
+ {
+ mLastHelpToken = segment->getToken();
+ mLiveHelpTimer.start();
+ }
+ if (immediate || (mLiveHelpTimer.getStarted() && mLiveHelpTimer.getElapsedTimeF32() > LIVE_HELP_REFRESH_TIME))
+ {
+ // Use Wtext since segment's start/end are made for wstring and will
+ // result in a shift for case of multi-byte symbols inside std::string.
+ LLWString segment_text = mEditor->getWText().substr(segment->getStart(), segment->getEnd() - segment->getStart());
+ std::string help_string = wstring_to_utf8str(segment_text);
+ setHelpPage(help_string);
+ mLiveHelpTimer.stop();
+ }
+ }
+ else
+ {
+ if (immediate)
+ {
+ setHelpPage(LLStringUtil::null);
+ }
+ }
}
bool LLScriptEdCore::isKeyword(LLKeywordToken* token)
{
- switch(token->getType())
- {
- case LLKeywordToken::TT_CONSTANT:
- case LLKeywordToken::TT_CONTROL:
- case LLKeywordToken::TT_EVENT:
- case LLKeywordToken::TT_FUNCTION:
- case LLKeywordToken::TT_SECTION:
- case LLKeywordToken::TT_TYPE:
- case LLKeywordToken::TT_WORD:
- return true;
-
- default:
- return false;
- }
+ switch(token->getType())
+ {
+ case LLKeywordToken::TT_CONSTANT:
+ case LLKeywordToken::TT_CONTROL:
+ case LLKeywordToken::TT_EVENT:
+ case LLKeywordToken::TT_FUNCTION:
+ case LLKeywordToken::TT_SECTION:
+ case LLKeywordToken::TT_TYPE:
+ case LLKeywordToken::TT_WORD:
+ return true;
+
+ default:
+ return false;
+ }
}
void LLScriptEdCore::setHelpPage(const std::string& help_string)
{
- LLFloater* help_floater = mLiveHelpHandle.get();
- if (!help_floater) return;
-
- LLMediaCtrl* web_browser = help_floater->getChild<LLMediaCtrl>("lsl_guide_html");
- if (!web_browser) return;
+ LLFloater* help_floater = mLiveHelpHandle.get();
+ if (!help_floater) return;
- LLComboBox* history_combo = help_floater->getChild<LLComboBox>("history_combo");
- if (!history_combo) return;
+ LLMediaCtrl* web_browser = help_floater->getChild<LLMediaCtrl>("lsl_guide_html");
+ if (!web_browser) return;
- LLUIString url_string = gSavedSettings.getString("LSLHelpURL");
+ LLComboBox* history_combo = help_floater->getChild<LLComboBox>("history_combo");
+ if (!history_combo) return;
- url_string.setArg("[LSL_STRING]", help_string.empty() ? HELP_LSL_PORTAL_TOPIC : help_string);
+ LLUIString url_string = gSavedSettings.getString("LSLHelpURL");
- addHelpItemToHistory(help_string);
+ url_string.setArg("[LSL_STRING]", help_string.empty() ? HELP_LSL_PORTAL_TOPIC : help_string);
- web_browser->navigateTo(url_string);
+ addHelpItemToHistory(help_string);
+
+ web_browser->navigateTo(url_string);
}
void LLScriptEdCore::addHelpItemToHistory(const std::string& help_string)
{
- if (help_string.empty()) return;
-
- LLFloater* help_floater = mLiveHelpHandle.get();
- if (!help_floater) return;
-
- LLComboBox* history_combo = help_floater->getChild<LLComboBox>("history_combo");
- if (!history_combo) return;
-
- // separate history items from full item list
- if (mLiveHelpHistorySize == 0)
- {
- history_combo->addSeparator(ADD_TOP);
- }
- // delete all history items over history limit
- while(mLiveHelpHistorySize > MAX_HISTORY_COUNT - 1)
- {
- history_combo->remove(mLiveHelpHistorySize - 1);
- mLiveHelpHistorySize--;
- }
-
- history_combo->setSimple(help_string);
- S32 index = history_combo->getCurrentIndex();
-
- // if help string exists in the combo box
- if (index >= 0)
- {
- S32 cur_index = history_combo->getCurrentIndex();
- if (cur_index < mLiveHelpHistorySize)
- {
- // item found in history, bubble up to top
- history_combo->remove(history_combo->getCurrentIndex());
- mLiveHelpHistorySize--;
- }
- }
- history_combo->add(help_string, LLSD(help_string), ADD_TOP);
- history_combo->selectFirstItem();
- mLiveHelpHistorySize++;
+ if (help_string.empty()) return;
+
+ LLFloater* help_floater = mLiveHelpHandle.get();
+ if (!help_floater) return;
+
+ LLComboBox* history_combo = help_floater->getChild<LLComboBox>("history_combo");
+ if (!history_combo) return;
+
+ // separate history items from full item list
+ if (mLiveHelpHistorySize == 0)
+ {
+ history_combo->addSeparator(ADD_TOP);
+ }
+ // delete all history items over history limit
+ while(mLiveHelpHistorySize > MAX_HISTORY_COUNT - 1)
+ {
+ history_combo->remove(mLiveHelpHistorySize - 1);
+ mLiveHelpHistorySize--;
+ }
+
+ history_combo->setSimple(help_string);
+ S32 index = history_combo->getCurrentIndex();
+
+ // if help string exists in the combo box
+ if (index >= 0)
+ {
+ S32 cur_index = history_combo->getCurrentIndex();
+ if (cur_index < mLiveHelpHistorySize)
+ {
+ // item found in history, bubble up to top
+ history_combo->remove(history_combo->getCurrentIndex());
+ mLiveHelpHistorySize--;
+ }
+ }
+ history_combo->add(help_string, LLSD(help_string), ADD_TOP);
+ history_combo->selectFirstItem();
+ mLiveHelpHistorySize++;
}
BOOL LLScriptEdCore::canClose()
{
- if(mForceClose || !hasChanged() || mScriptRemoved)
- {
- return TRUE;
- }
- else
- {
- if(!mSaveDialogShown)
- {
- mSaveDialogShown = TRUE;
- // Bring up view-modal dialog: Save changes? Yes, No, Cancel
- LLNotificationsUtil::add("SaveChanges", LLSD(), LLSD(), boost::bind(&LLScriptEdCore::handleSaveChangesDialog, this, _1, _2));
- }
- return FALSE;
- }
+ if(mForceClose || !hasChanged() || mScriptRemoved)
+ {
+ return TRUE;
+ }
+ else
+ {
+ if(!mSaveDialogShown)
+ {
+ mSaveDialogShown = TRUE;
+ // Bring up view-modal dialog: Save changes? Yes, No, Cancel
+ LLNotificationsUtil::add("SaveChanges", LLSD(), LLSD(), boost::bind(&LLScriptEdCore::handleSaveChangesDialog, this, _1, _2));
+ }
+ return FALSE;
+ }
}
void LLScriptEdCore::setEnableEditing(bool enable)
{
- mEditor->setEnabled(enable);
- getChildView("Edit_btn")->setEnabled(enable);
+ mEditor->setEnabled(enable);
+ getChildView("Edit_btn")->setEnabled(enable);
}
bool LLScriptEdCore::handleSaveChangesDialog(const LLSD& notification, const LLSD& response )
{
- mSaveDialogShown = FALSE;
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- switch( option )
- {
- case 0: // "Yes"
- // close after saving
- doSave( TRUE );
- break;
-
- case 1: // "No"
- mForceClose = TRUE;
- // This will close immediately because mForceClose is true, so we won't
- // infinite loop with these dialogs. JC
- ((LLFloater*) getParent())->closeFloater();
- break;
-
- case 2: // "Cancel"
- default:
- // If we were quitting, we didn't really mean it.
- LLAppViewer::instance()->abortQuit();
- break;
- }
- return false;
+ mSaveDialogShown = FALSE;
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ switch( option )
+ {
+ case 0: // "Yes"
+ // close after saving
+ doSave( TRUE );
+ break;
+
+ case 1: // "No"
+ mForceClose = TRUE;
+ // This will close immediately because mForceClose is true, so we won't
+ // infinite loop with these dialogs. JC
+ ((LLFloater*) getParent())->closeFloater();
+ break;
+
+ case 2: // "Cancel"
+ default:
+ // If we were quitting, we didn't really mean it.
+ LLAppViewer::instance()->abortQuit();
+ break;
+ }
+ return false;
}
void LLScriptEdCore::onBtnDynamicHelp()
{
- LLFloater* live_help_floater = mLiveHelpHandle.get();
- if (!live_help_floater)
- {
- live_help_floater = new LLFloater(LLSD());
- live_help_floater->buildFromFile("floater_lsl_guide.xml");
- 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();
-
- // re-initialize help variables
- mLastHelpToken = NULL;
- mLiveHelpHandle = live_help_floater->getHandle();
- mLiveHelpHistorySize = 0;
- }
-
- BOOL visible = TRUE;
- BOOL take_focus = TRUE;
- live_help_floater->setVisible(visible);
- live_help_floater->setFrontmost(take_focus);
-
- updateDynamicHelp(TRUE);
-}
-
-//static
+ LLFloater* live_help_floater = mLiveHelpHandle.get();
+ if (!live_help_floater)
+ {
+ live_help_floater = new LLFloater(LLSD());
+ live_help_floater->buildFromFile("floater_lsl_guide.xml");
+ 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();
+
+ // re-initialize help variables
+ mLastHelpToken = NULL;
+ mLiveHelpHandle = live_help_floater->getHandle();
+ mLiveHelpHistorySize = 0;
+ }
+
+ BOOL visible = TRUE;
+ BOOL take_focus = TRUE;
+ live_help_floater->setVisible(visible);
+ live_help_floater->setFrontmost(take_focus);
+
+ updateDynamicHelp(TRUE);
+}
+
+//static
void LLScriptEdCore::onClickBack(void* userdata)
{
- LLScriptEdCore* corep = (LLScriptEdCore*)userdata;
- LLFloater* live_help_floater = corep->mLiveHelpHandle.get();
- if (live_help_floater)
- {
- LLMediaCtrl* browserp = live_help_floater->getChild<LLMediaCtrl>("lsl_guide_html");
- if (browserp)
- {
- browserp->navigateBack();
- }
- }
+ LLScriptEdCore* corep = (LLScriptEdCore*)userdata;
+ LLFloater* live_help_floater = corep->mLiveHelpHandle.get();
+ if (live_help_floater)
+ {
+ LLMediaCtrl* browserp = live_help_floater->getChild<LLMediaCtrl>("lsl_guide_html");
+ if (browserp)
+ {
+ browserp->navigateBack();
+ }
+ }
}
-//static
+//static
void LLScriptEdCore::onClickForward(void* userdata)
{
- LLScriptEdCore* corep = (LLScriptEdCore*)userdata;
- LLFloater* live_help_floater = corep->mLiveHelpHandle.get();
- if (live_help_floater)
- {
- LLMediaCtrl* browserp = live_help_floater->getChild<LLMediaCtrl>("lsl_guide_html");
- if (browserp)
- {
- browserp->navigateForward();
- }
- }
+ LLScriptEdCore* corep = (LLScriptEdCore*)userdata;
+ LLFloater* live_help_floater = corep->mLiveHelpHandle.get();
+ if (live_help_floater)
+ {
+ LLMediaCtrl* browserp = live_help_floater->getChild<LLMediaCtrl>("lsl_guide_html");
+ if (browserp)
+ {
+ browserp->navigateForward();
+ }
+ }
}
// static
void LLScriptEdCore::onCheckLock(LLUICtrl* ctrl, void* userdata)
{
- LLScriptEdCore* corep = (LLScriptEdCore*)userdata;
+ LLScriptEdCore* corep = (LLScriptEdCore*)userdata;
- // clear out token any time we lock the frame, so we will refresh web page immediately when unlocked
- gSavedSettings.setBOOL("ScriptHelpFollowsCursor", ctrl->getValue().asBoolean());
+ // clear out token any time we lock the frame, so we will refresh web page immediately when unlocked
+ gSavedSettings.setBOOL("ScriptHelpFollowsCursor", ctrl->getValue().asBoolean());
- corep->mLastHelpToken = NULL;
+ corep->mLastHelpToken = NULL;
}
-// static
+// static
void LLScriptEdCore::onBtnInsertSample(void* userdata)
{
- LLScriptEdCore* self = (LLScriptEdCore*) userdata;
+ LLScriptEdCore* self = (LLScriptEdCore*) userdata;
- // Insert sample code
- self->mEditor->selectAll();
- self->mEditor->cut();
- self->mEditor->insertText(self->mSampleText);
+ // Insert sample code
+ self->mEditor->selectAll();
+ self->mEditor->cut();
+ self->mEditor->insertText(self->mSampleText);
}
-// static
+// static
void LLScriptEdCore::onHelpComboCommit(LLUICtrl* ctrl, void* userdata)
{
- LLScriptEdCore* corep = (LLScriptEdCore*)userdata;
+ LLScriptEdCore* corep = (LLScriptEdCore*)userdata;
- LLFloater* live_help_floater = corep->mLiveHelpHandle.get();
- if (live_help_floater)
- {
- std::string help_string = ctrl->getValue().asString();
+ LLFloater* live_help_floater = corep->mLiveHelpHandle.get();
+ if (live_help_floater)
+ {
+ std::string help_string = ctrl->getValue().asString();
- corep->addHelpItemToHistory(help_string);
+ corep->addHelpItemToHistory(help_string);
- 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);
- }
+ 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);
+ }
}
-// static
+// static
void LLScriptEdCore::onBtnInsertFunction(LLUICtrl *ui, void* userdata)
{
- LLScriptEdCore* self = (LLScriptEdCore*) userdata;
+ LLScriptEdCore* self = (LLScriptEdCore*) userdata;
- // Insert sample code
- if(self->mEditor->getEnabled())
- {
- self->mEditor->insertText(self->mFunctions->getSimple());
- }
- self->mEditor->setFocus(TRUE);
- self->setHelpPage(self->mFunctions->getSimple());
+ // Insert sample code
+ if(self->mEditor->getEnabled())
+ {
+ self->mEditor->insertText(self->mFunctions->getSimple());
+ }
+ self->mEditor->setFocus(TRUE);
+ self->setHelpPage(self->mFunctions->getSimple());
}
void LLScriptEdCore::doSave( BOOL close_after_save )
{
- add(LLStatViewer::LSL_SAVES, 1);
+ add(LLStatViewer::LSL_SAVES, 1);
- if( mSaveCallback )
- {
- mSaveCallback( mUserdata, close_after_save );
- }
+ if( mSaveCallback )
+ {
+ mSaveCallback( mUserdata, close_after_save );
+ }
}
void LLScriptEdCore::openInExternalEditor()
{
- delete mLiveFile; // deletes file
+ delete mLiveFile; // deletes file
- // Generate a suitable filename
+ // Generate a suitable filename
std::string script_name = mScriptName;
std::string forbidden_chars = "<>:\"\\/|?*";
for (std::string::iterator c = forbidden_chars.begin(); c != forbidden_chars.end(); c++)
{
script_name.erase(std::remove(script_name.begin(), script_name.end(), *c), script_name.end());
}
- std::string filename = mContainer->getTmpFileName(script_name);
+ std::string filename = mContainer->getTmpFileName(script_name);
// Save the script to a temporary file.
if (!writeToFile(filename))
@@ -1096,238 +1096,238 @@ void LLScriptEdCore::openInExternalEditor()
writeToFile(filename);
}
- // Start watching file changes.
- mLiveFile = new LLLiveLSLFile(filename, boost::bind(&LLScriptEdContainer::onExternalChange, mContainer, _1));
- mLiveFile->addToEventTimer();
-
- // Open it in external editor.
- {
- LLExternalEditor ed;
- LLExternalEditor::EErrorCode status;
- std::string msg;
-
- status = ed.setCommand("LL_SCRIPT_EDITOR");
- if (status != LLExternalEditor::EC_SUCCESS)
- {
- if (status == LLExternalEditor::EC_NOT_SPECIFIED) // Use custom message for this error.
- {
- msg = LLTrans::getString("ExternalEditorNotSet");
- }
- else
- {
- msg = LLExternalEditor::getErrorMessage(status);
- }
-
- LLNotificationsUtil::add("GenericAlert", LLSD().with("MESSAGE", msg));
- return;
- }
-
- status = ed.run(filename);
- if (status != LLExternalEditor::EC_SUCCESS)
- {
- msg = LLExternalEditor::getErrorMessage(status);
- LLNotificationsUtil::add("GenericAlert", LLSD().with("MESSAGE", msg));
- }
- }
+ // Start watching file changes.
+ mLiveFile = new LLLiveLSLFile(filename, boost::bind(&LLScriptEdContainer::onExternalChange, mContainer, _1));
+ mLiveFile->addToEventTimer();
+
+ // Open it in external editor.
+ {
+ LLExternalEditor ed;
+ LLExternalEditor::EErrorCode status;
+ std::string msg;
+
+ status = ed.setCommand("LL_SCRIPT_EDITOR");
+ if (status != LLExternalEditor::EC_SUCCESS)
+ {
+ if (status == LLExternalEditor::EC_NOT_SPECIFIED) // Use custom message for this error.
+ {
+ msg = LLTrans::getString("ExternalEditorNotSet");
+ }
+ else
+ {
+ msg = LLExternalEditor::getErrorMessage(status);
+ }
+
+ LLNotificationsUtil::add("GenericAlert", LLSD().with("MESSAGE", msg));
+ return;
+ }
+
+ status = ed.run(filename);
+ if (status != LLExternalEditor::EC_SUCCESS)
+ {
+ msg = LLExternalEditor::getErrorMessage(status);
+ LLNotificationsUtil::add("GenericAlert", LLSD().with("MESSAGE", msg));
+ }
+ }
}
void LLScriptEdCore::onBtnUndoChanges()
{
- if( !mEditor->tryToRevertToPristineState() )
- {
- LLNotificationsUtil::add("ScriptCannotUndo", LLSD(), LLSD(), boost::bind(&LLScriptEdCore::handleReloadFromServerDialog, this, _1, _2));
- }
+ if( !mEditor->tryToRevertToPristineState() )
+ {
+ LLNotificationsUtil::add("ScriptCannotUndo", LLSD(), LLSD(), boost::bind(&LLScriptEdCore::handleReloadFromServerDialog, this, _1, _2));
+ }
}
// static
void LLScriptEdCore::onErrorList(LLUICtrl*, void* user_data)
{
- LLScriptEdCore* self = (LLScriptEdCore*)user_data;
- LLScrollListItem* item = self->mErrorList->getFirstSelected();
- if(item)
- {
- // *FIX: replace with boost grep
- S32 row = 0;
- S32 column = 0;
- const LLScrollListCell* cell = item->getColumn(0);
- std::string line(cell->getValue().asString());
- line.erase(0, 1);
- LLStringUtil::replaceChar(line, ',',' ');
- LLStringUtil::replaceChar(line, ')',' ');
- sscanf(line.c_str(), "%d %d", &row, &column);
- //LL_INFOS() << "LLScriptEdCore::onErrorList() - " << row << ", "
- //<< column << LL_ENDL;
- self->mEditor->setCursor(row, column);
- self->mEditor->setFocus(TRUE);
- }
+ LLScriptEdCore* self = (LLScriptEdCore*)user_data;
+ LLScrollListItem* item = self->mErrorList->getFirstSelected();
+ if(item)
+ {
+ // *FIX: replace with boost grep
+ S32 row = 0;
+ S32 column = 0;
+ const LLScrollListCell* cell = item->getColumn(0);
+ std::string line(cell->getValue().asString());
+ line.erase(0, 1);
+ LLStringUtil::replaceChar(line, ',',' ');
+ LLStringUtil::replaceChar(line, ')',' ');
+ sscanf(line.c_str(), "%d %d", &row, &column);
+ //LL_INFOS() << "LLScriptEdCore::onErrorList() - " << row << ", "
+ //<< column << LL_ENDL;
+ self->mEditor->setCursor(row, column);
+ self->mEditor->setFocus(TRUE);
+ }
}
bool LLScriptEdCore::handleReloadFromServerDialog(const LLSD& notification, const LLSD& response )
{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- switch( option )
- {
- case 0: // "Yes"
- if( mLoadCallback )
- {
- setScriptText(getString("loading"), FALSE);
- mLoadCallback(mUserdata);
- }
- break;
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ switch( option )
+ {
+ case 0: // "Yes"
+ if( mLoadCallback )
+ {
+ setScriptText(getString("loading"), FALSE);
+ mLoadCallback(mUserdata);
+ }
+ break;
- case 1: // "No"
- break;
+ case 1: // "No"
+ break;
- default:
- llassert(0);
- break;
- }
- return false;
+ default:
+ llassert(0);
+ break;
+ }
+ return false;
}
void LLScriptEdCore::selectFirstError()
{
- // Select the first item;
- mErrorList->selectFirstItem();
- onErrorList(mErrorList, this);
+ // Select the first item;
+ mErrorList->selectFirstItem();
+ onErrorList(mErrorList, this);
}
struct LLEntryAndEdCore
{
- LLScriptEdCore* mCore;
- LLEntryAndEdCore(LLScriptEdCore* core) :
- mCore(core)
- {}
+ LLScriptEdCore* mCore;
+ LLEntryAndEdCore(LLScriptEdCore* core) :
+ mCore(core)
+ {}
};
void LLScriptEdCore::deleteBridges()
{
- S32 count = mBridges.size();
- LLEntryAndEdCore* eandc;
- for(S32 i = 0; i < count; i++)
- {
- eandc = mBridges.at(i);
- delete eandc;
- mBridges[i] = NULL;
- }
- mBridges.clear();
+ S32 count = mBridges.size();
+ LLEntryAndEdCore* eandc;
+ for(S32 i = 0; i < count; i++)
+ {
+ eandc = mBridges.at(i);
+ delete eandc;
+ mBridges[i] = NULL;
+ }
+ mBridges.clear();
}
// virtual
BOOL LLScriptEdCore::handleKeyHere(KEY key, MASK mask)
{
- bool just_control = MASK_CONTROL == (mask & MASK_MODIFIERS);
+ bool just_control = MASK_CONTROL == (mask & MASK_MODIFIERS);
- if(('S' == key) && just_control)
- {
- if(mSaveCallback)
- {
- // don't close after saving
- mSaveCallback(mUserdata, FALSE);
- }
+ if(('S' == key) && just_control)
+ {
+ if(mSaveCallback)
+ {
+ // don't close after saving
+ mSaveCallback(mUserdata, FALSE);
+ }
- return TRUE;
- }
+ return TRUE;
+ }
- if(('F' == key) && just_control)
- {
- if(mSearchReplaceCallback)
- {
- mSearchReplaceCallback(mUserdata);
- }
+ if(('F' == key) && just_control)
+ {
+ if(mSearchReplaceCallback)
+ {
+ mSearchReplaceCallback(mUserdata);
+ }
- return TRUE;
- }
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
void LLScriptEdCore::onBtnLoadFromFile( void* data )
{
- LLFilePickerReplyThread::startPicker(boost::bind(&LLScriptEdCore::loadScriptFromFile, _1, data), LLFilePicker::FFLOAD_SCRIPT, false);
+ LLFilePickerReplyThread::startPicker(boost::bind(&LLScriptEdCore::loadScriptFromFile, _1, data), LLFilePicker::FFLOAD_SCRIPT, false);
}
void LLScriptEdCore::loadScriptFromFile(const std::vector<std::string>& filenames, void* data)
{
- std::string filename = filenames[0];
-
- llifstream fin(filename.c_str());
-
- std::string line;
- std::string text;
- std::string linetotal;
- while (!fin.eof())
- {
- getline(fin, line);
- text += line;
- if (!fin.eof())
- {
- text += "\n";
- }
- }
- fin.close();
-
- // Only replace the script if there is something to replace with.
- LLScriptEdCore* self = (LLScriptEdCore*)data;
- if (self && (text.length() > 0))
- {
- self->mEditor->selectAll();
- LLWString script(utf8str_to_wstring(text));
- self->mEditor->insertText(script);
- }
+ std::string filename = filenames[0];
+
+ llifstream fin(filename.c_str());
+
+ std::string line;
+ std::string text;
+ std::string linetotal;
+ while (!fin.eof())
+ {
+ getline(fin, line);
+ text += line;
+ if (!fin.eof())
+ {
+ text += "\n";
+ }
+ }
+ fin.close();
+
+ // Only replace the script if there is something to replace with.
+ LLScriptEdCore* self = (LLScriptEdCore*)data;
+ if (self && (text.length() > 0))
+ {
+ self->mEditor->selectAll();
+ LLWString script(utf8str_to_wstring(text));
+ self->mEditor->insertText(script);
+ }
}
void LLScriptEdCore::onBtnSaveToFile( void* userdata )
{
- add(LLStatViewer::LSL_SAVES, 1);
+ add(LLStatViewer::LSL_SAVES, 1);
- LLScriptEdCore* self = (LLScriptEdCore*) userdata;
+ LLScriptEdCore* self = (LLScriptEdCore*) userdata;
- if( self->mSaveCallback )
- {
- LLFilePickerReplyThread::startPicker(boost::bind(&LLScriptEdCore::saveScriptToFile, _1, userdata), LLFilePicker::FFSAVE_SCRIPT, self->mScriptName);
- }
+ if( self->mSaveCallback )
+ {
+ LLFilePickerReplyThread::startPicker(boost::bind(&LLScriptEdCore::saveScriptToFile, _1, userdata), LLFilePicker::FFSAVE_SCRIPT, self->mScriptName);
+ }
}
void LLScriptEdCore::saveScriptToFile(const std::vector<std::string>& filenames, void* data)
{
- LLScriptEdCore* self = (LLScriptEdCore*)data;
- if (self)
- {
- std::string filename = filenames[0];
- std::string scriptText = self->mEditor->getText();
- llofstream fout(filename.c_str());
- fout << (scriptText);
- fout.close();
- self->mSaveCallback(self->mUserdata, FALSE);
- }
+ LLScriptEdCore* self = (LLScriptEdCore*)data;
+ if (self)
+ {
+ std::string filename = filenames[0];
+ std::string scriptText = self->mEditor->getText();
+ llofstream fout(filename.c_str());
+ fout << (scriptText);
+ fout.close();
+ self->mSaveCallback(self->mUserdata, FALSE);
+ }
}
bool LLScriptEdCore::canLoadOrSaveToFile( void* userdata )
{
- LLScriptEdCore* self = (LLScriptEdCore*) userdata;
- return self->mEditor->canLoadOrSaveToFile();
+ LLScriptEdCore* self = (LLScriptEdCore*) userdata;
+ return self->mEditor->canLoadOrSaveToFile();
}
// static
bool LLScriptEdCore::enableSaveToFileMenu(void* userdata)
{
- LLScriptEdCore* self = (LLScriptEdCore*)userdata;
- if (!self || !self->mEditor) return FALSE;
- return self->mEditor->canLoadOrSaveToFile();
+ LLScriptEdCore* self = (LLScriptEdCore*)userdata;
+ if (!self || !self->mEditor) return FALSE;
+ return self->mEditor->canLoadOrSaveToFile();
}
-// static
+// static
bool LLScriptEdCore::enableLoadFromFileMenu(void* userdata)
{
- LLScriptEdCore* self = (LLScriptEdCore*)userdata;
- return (self && self->mEditor) ? self->mEditor->canLoadOrSaveToFile() : FALSE;
+ LLScriptEdCore* self = (LLScriptEdCore*)userdata;
+ return (self && self->mEditor) ? self->mEditor->canLoadOrSaveToFile() : FALSE;
}
LLUUID LLScriptEdCore::getAssociatedExperience()const
{
- return mAssociatedExperience;
+ return mAssociatedExperience;
}
void LLScriptEdCore::onChangeFontSize(const LLSD &userdata)
@@ -1346,138 +1346,138 @@ bool LLScriptEdCore::isFontSizeChecked(const LLSD &userdata)
void LLLiveLSLEditor::setExperienceIds( const LLSD& experience_ids )
{
- mExperienceIds=experience_ids;
- updateExperiencePanel();
+ mExperienceIds=experience_ids;
+ updateExperiencePanel();
}
void LLLiveLSLEditor::updateExperiencePanel()
{
- if(mScriptEd->getAssociatedExperience().isNull())
- {
- mExperienceEnabled->set(FALSE);
- mExperiences->setVisible(FALSE);
- if(mExperienceIds.size()>0)
- {
- mExperienceEnabled->setEnabled(TRUE);
- mExperienceEnabled->setToolTip(getString("add_experiences"));
- }
- else
- {
- mExperienceEnabled->setEnabled(FALSE);
- mExperienceEnabled->setToolTip(getString("no_experiences"));
- }
- getChild<LLButton>("view_profile")->setVisible(FALSE);
- }
- else
- {
- mExperienceEnabled->setToolTip(getString("experience_enabled"));
- mExperienceEnabled->setEnabled(getIsModifiable());
- mExperiences->setVisible(TRUE);
- mExperienceEnabled->set(TRUE);
- getChild<LLButton>("view_profile")->setToolTip(getString("show_experience_profile"));
- buildExperienceList();
- }
+ if(mScriptEd->getAssociatedExperience().isNull())
+ {
+ mExperienceEnabled->set(FALSE);
+ mExperiences->setVisible(FALSE);
+ if(mExperienceIds.size()>0)
+ {
+ mExperienceEnabled->setEnabled(TRUE);
+ mExperienceEnabled->setToolTip(getString("add_experiences"));
+ }
+ else
+ {
+ mExperienceEnabled->setEnabled(FALSE);
+ mExperienceEnabled->setToolTip(getString("no_experiences"));
+ }
+ getChild<LLButton>("view_profile")->setVisible(FALSE);
+ }
+ else
+ {
+ mExperienceEnabled->setToolTip(getString("experience_enabled"));
+ mExperienceEnabled->setEnabled(getIsModifiable());
+ mExperiences->setVisible(TRUE);
+ mExperienceEnabled->set(TRUE);
+ getChild<LLButton>("view_profile")->setToolTip(getString("show_experience_profile"));
+ buildExperienceList();
+ }
}
void LLLiveLSLEditor::buildExperienceList()
{
- mExperiences->clearRows();
- bool foundAssociated=false;
- const LLUUID& associated = mScriptEd->getAssociatedExperience();
- LLUUID last;
- LLScrollListItem* item;
- for(LLSD::array_const_iterator it = mExperienceIds.beginArray(); it != mExperienceIds.endArray(); ++it)
- {
- LLUUID id = it->asUUID();
- EAddPosition position = ADD_BOTTOM;
- if(id == associated)
- {
- foundAssociated = true;
- position = ADD_TOP;
- }
-
+ mExperiences->clearRows();
+ bool foundAssociated=false;
+ const LLUUID& associated = mScriptEd->getAssociatedExperience();
+ LLUUID last;
+ LLScrollListItem* item;
+ for(LLSD::array_const_iterator it = mExperienceIds.beginArray(); it != mExperienceIds.endArray(); ++it)
+ {
+ LLUUID id = it->asUUID();
+ EAddPosition position = ADD_BOTTOM;
+ if(id == associated)
+ {
+ foundAssociated = true;
+ position = ADD_TOP;
+ }
+
const LLSD& experience = LLExperienceCache::instance().get(id);
- if(experience.isUndefined())
- {
- mExperiences->add(getString("loading"), id, position);
- last = id;
- }
- else
- {
- std::string experience_name_string = experience[LLExperienceCache::NAME].asString();
- if (experience_name_string.empty())
- {
- experience_name_string = LLTrans::getString("ExperienceNameUntitled");
- }
- mExperiences->add(experience_name_string, id, position);
- }
- }
-
- if(!foundAssociated )
- {
+ if(experience.isUndefined())
+ {
+ mExperiences->add(getString("loading"), id, position);
+ last = id;
+ }
+ else
+ {
+ std::string experience_name_string = experience[LLExperienceCache::NAME].asString();
+ if (experience_name_string.empty())
+ {
+ experience_name_string = LLTrans::getString("ExperienceNameUntitled");
+ }
+ mExperiences->add(experience_name_string, id, position);
+ }
+ }
+
+ if(!foundAssociated )
+ {
const LLSD& experience = LLExperienceCache::instance().get(associated);
- if(experience.isDefined())
- {
- std::string experience_name_string = experience[LLExperienceCache::NAME].asString();
- if (experience_name_string.empty())
- {
- experience_name_string = LLTrans::getString("ExperienceNameUntitled");
- }
- item=mExperiences->add(experience_name_string, associated, ADD_TOP);
- }
- else
- {
- item=mExperiences->add(getString("loading"), associated, ADD_TOP);
- last = associated;
- }
- item->setEnabled(FALSE);
- }
-
- if(last.notNull())
- {
- mExperiences->setEnabled(FALSE);
+ if(experience.isDefined())
+ {
+ std::string experience_name_string = experience[LLExperienceCache::NAME].asString();
+ if (experience_name_string.empty())
+ {
+ experience_name_string = LLTrans::getString("ExperienceNameUntitled");
+ }
+ item=mExperiences->add(experience_name_string, associated, ADD_TOP);
+ }
+ else
+ {
+ item=mExperiences->add(getString("loading"), associated, ADD_TOP);
+ last = associated;
+ }
+ item->setEnabled(FALSE);
+ }
+
+ if(last.notNull())
+ {
+ mExperiences->setEnabled(FALSE);
LLExperienceCache::instance().get(last, boost::bind(&LLLiveLSLEditor::buildExperienceList, this));
- }
- else
- {
- mExperiences->setEnabled(TRUE);
- mExperiences->sortByName(TRUE);
- mExperiences->setCurrentByIndex(mExperiences->getCurrentIndex());
- getChild<LLButton>("view_profile")->setVisible(TRUE);
- }
+ }
+ else
+ {
+ mExperiences->setEnabled(TRUE);
+ mExperiences->sortByName(TRUE);
+ mExperiences->setCurrentByIndex(mExperiences->getCurrentIndex());
+ getChild<LLButton>("view_profile")->setVisible(TRUE);
+ }
}
void LLScriptEdCore::setAssociatedExperience( const LLUUID& experience_id )
{
- mAssociatedExperience = experience_id;
+ mAssociatedExperience = experience_id;
}
void LLLiveLSLEditor::requestExperiences()
{
- if (!getIsModifiable())
- {
- return;
- }
-
- LLViewerRegion* region = gAgent.getRegion();
- if (region)
- {
- std::string lookup_url=region->getCapability("GetCreatorExperiences");
- if(!lookup_url.empty())
- {
+ if (!getIsModifiable())
+ {
+ return;
+ }
+
+ LLViewerRegion* region = gAgent.getRegion();
+ if (region)
+ {
+ std::string lookup_url=region->getCapability("GetCreatorExperiences");
+ if(!lookup_url.empty())
+ {
LLCoreHttpUtil::HttpCoroutineAdapter::completionCallback_t success =
boost::bind(&LLLiveLSLEditor::receiveExperienceIds, _1, getDerivedHandle<LLLiveLSLEditor>());
LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet(lookup_url, success);
- }
- }
+ }
+ }
}
-/*static*/
+/*static*/
void LLLiveLSLEditor::receiveExperienceIds(LLSD result, LLHandle<LLLiveLSLEditor> hparent)
{
LLLiveLSLEditor* parent = hparent.get();
@@ -1493,22 +1493,22 @@ void LLLiveLSLEditor::receiveExperienceIds(LLSD result, LLHandle<LLLiveLSLEditor
/// ---------------------------------------------------------------------------
LLScriptEdContainer::LLScriptEdContainer(const LLSD& key) :
- LLPreview(key)
-, mScriptEd(NULL)
+ LLPreview(key)
+, mScriptEd(NULL)
{
}
std::string LLScriptEdContainer::getTmpFileName(const std::string& script_name)
{
- // Take script inventory item id (within the object inventory)
- // to consideration so that it's possible to edit multiple scripts
- // in the same object inventory simultaneously (STORM-781).
- std::string script_id = mObjectUUID.asString() + "_" + mItemUUID.asString();
+ // Take script inventory item id (within the object inventory)
+ // to consideration so that it's possible to edit multiple scripts
+ // in the same object inventory simultaneously (STORM-781).
+ std::string script_id = mObjectUUID.asString() + "_" + mItemUUID.asString();
- // Use MD5 sum to make the file name shorter and not exceed maximum path length.
- char script_id_hash_str[33]; /* Flawfinder: ignore */
- LLMD5 script_id_hash((const U8 *)script_id.c_str());
- script_id_hash.hex_digest(script_id_hash_str);
+ // Use MD5 sum to make the file name shorter and not exceed maximum path length.
+ char script_id_hash_str[33]; /* Flawfinder: ignore */
+ LLMD5 script_id_hash((const U8 *)script_id.c_str());
+ script_id_hash.hex_digest(script_id_hash_str);
if (script_name.empty())
{
@@ -1522,17 +1522,17 @@ std::string LLScriptEdContainer::getTmpFileName(const std::string& script_name)
bool LLScriptEdContainer::onExternalChange(const std::string& filename)
{
- if (!mScriptEd->loadScriptText(filename))
- {
- return false;
- }
+ if (!mScriptEd->loadScriptText(filename))
+ {
+ return false;
+ }
- // Disable sync to avoid recursive load->save->load calls.
- saveIfNeeded(false);
- return true;
+ // Disable sync to avoid recursive load->save->load calls.
+ saveIfNeeded(false);
+ return true;
}
-BOOL LLScriptEdContainer::handleKeyHere(KEY key, MASK mask)
+BOOL LLScriptEdContainer::handleKeyHere(KEY key, MASK mask)
{
if (('A' == key) && (MASK_CONTROL == (mask & MASK_MODIFIERS)))
{
@@ -1540,7 +1540,7 @@ BOOL LLScriptEdContainer::handleKeyHere(KEY key, MASK mask)
return TRUE;
}
- if (!LLPreview::handleKeyHere(key, mask))
+ if (!LLPreview::handleKeyHere(key, mask))
{
return mScriptEd->handleKeyHere(key, mask);
}
@@ -1552,12 +1552,12 @@ BOOL LLScriptEdContainer::handleKeyHere(KEY key, MASK mask)
struct LLScriptSaveInfo
{
- LLUUID mItemUUID;
- std::string mDescription;
- LLTransactionID mTransactionID;
+ LLUUID mItemUUID;
+ std::string mDescription;
+ LLTransactionID mTransactionID;
- LLScriptSaveInfo(const LLUUID& uuid, const std::string& desc, LLTransactionID tid) :
- mItemUUID(uuid), mDescription(desc), mTransactionID(tid) {}
+ LLScriptSaveInfo(const LLUUID& uuid, const std::string& desc, LLTransactionID tid) :
+ mItemUUID(uuid), mDescription(desc), mTransactionID(tid) {}
};
@@ -1565,34 +1565,34 @@ struct LLScriptSaveInfo
//static
void* LLPreviewLSL::createScriptEdPanel(void* userdata)
{
-
- LLPreviewLSL *self = (LLPreviewLSL*)userdata;
- self->mScriptEd = new LLScriptEdCore(
- self,
- HELLO_LSL,
- self->getHandle(),
- LLPreviewLSL::onLoad,
- LLPreviewLSL::onSave,
- LLPreviewLSL::onSearchReplace,
- self,
- false,
- 0);
- return self->mScriptEd;
+ LLPreviewLSL *self = (LLPreviewLSL*)userdata;
+
+ self->mScriptEd = new LLScriptEdCore(
+ self,
+ HELLO_LSL,
+ self->getHandle(),
+ LLPreviewLSL::onLoad,
+ LLPreviewLSL::onSave,
+ LLPreviewLSL::onSearchReplace,
+ self,
+ false,
+ 0);
+ return self->mScriptEd;
}
LLPreviewLSL::LLPreviewLSL(const LLSD& key )
-: LLScriptEdContainer(key),
- mPendingUploads(0)
+: LLScriptEdContainer(key),
+ mPendingUploads(0)
{
- mFactoryMap["script panel"] = LLCallbackMap(LLPreviewLSL::createScriptEdPanel, this);
+ mFactoryMap["script panel"] = LLCallbackMap(LLPreviewLSL::createScriptEdPanel, this);
mItemObserver = new LLScriptMovedObserver(this);
}
-LLPreviewLSL::~LLPreviewLSL()
-{
+LLPreviewLSL::~LLPreviewLSL()
+{
delete mItemObserver;
mItemObserver = NULL;
}
@@ -1600,159 +1600,159 @@ LLPreviewLSL::~LLPreviewLSL()
// virtual
BOOL LLPreviewLSL::postBuild()
{
- const LLInventoryItem* item = getItem();
+ const LLInventoryItem* item = getItem();
- llassert(item);
- if (item)
- {
- getChild<LLUICtrl>("desc")->setValue(item->getDescription());
+ llassert(item);
+ if (item)
+ {
+ getChild<LLUICtrl>("desc")->setValue(item->getDescription());
std::string item_path = get_category_path(item->getParentUUID());
getChild<LLUICtrl>("path_txt")->setValue(item_path);
getChild<LLUICtrl>("path_txt")->setToolTip(item_path);
- }
- childSetCommitCallback("desc", LLPreview::onText, this);
- getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
-
- return LLPreview::postBuild();
+ }
+ childSetCommitCallback("desc", LLPreview::onText, this);
+ getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
+
+ return LLPreview::postBuild();
}
void LLPreviewLSL::draw()
{
- const LLInventoryItem* item = getItem();
- if(!item)
- {
- setTitle(LLTrans::getString("ScriptWasDeleted"));
- mScriptEd->setItemRemoved(TRUE);
- }
- else if (mDirty)
+ const LLInventoryItem* item = getItem();
+ if(!item)
+ {
+ setTitle(LLTrans::getString("ScriptWasDeleted"));
+ mScriptEd->setItemRemoved(TRUE);
+ }
+ else if (mDirty)
{
std::string item_path = get_category_path(item->getParentUUID());
getChild<LLUICtrl>("path_txt")->setValue(item_path);
getChild<LLUICtrl>("path_txt")->setToolTip(item_path);
}
- LLPreview::draw();
+ LLPreview::draw();
}
// virtual
void LLPreviewLSL::callbackLSLCompileSucceeded()
{
- LL_INFOS() << "LSL Bytecode saved" << LL_ENDL;
- mScriptEd->mErrorList->setCommentText(LLTrans::getString("CompileSuccessful"));
- mScriptEd->mErrorList->setCommentText(LLTrans::getString("SaveComplete"));
- closeIfNeeded();
+ LL_INFOS() << "LSL Bytecode saved" << LL_ENDL;
+ mScriptEd->mErrorList->setCommentText(LLTrans::getString("CompileSuccessful"));
+ mScriptEd->mErrorList->setCommentText(LLTrans::getString("SaveComplete"));
+ closeIfNeeded();
}
// virtual
void LLPreviewLSL::callbackLSLCompileFailed(const LLSD& compile_errors)
{
- LL_INFOS() << "Compile failed!" << LL_ENDL;
+ LL_INFOS() << "Compile failed!" << LL_ENDL;
- for(LLSD::array_const_iterator line = compile_errors.beginArray();
- line < compile_errors.endArray();
- line++)
- {
- LLSD row;
- std::string error_message = line->asString();
- LLStringUtil::stripNonprintable(error_message);
- row["columns"][0]["value"] = error_message;
- row["columns"][0]["font"] = "OCRA";
- mScriptEd->mErrorList->addElement(row);
- }
- mScriptEd->selectFirstError();
- closeIfNeeded();
+ for(LLSD::array_const_iterator line = compile_errors.beginArray();
+ line < compile_errors.endArray();
+ line++)
+ {
+ LLSD row;
+ std::string error_message = line->asString();
+ LLStringUtil::stripNonprintable(error_message);
+ row["columns"][0]["value"] = error_message;
+ row["columns"][0]["font"] = "OCRA";
+ mScriptEd->mErrorList->addElement(row);
+ }
+ mScriptEd->selectFirstError();
+ closeIfNeeded();
}
void LLPreviewLSL::loadAsset()
{
- // *HACK: we poke into inventory to see if it's there, and if so,
- // then it might be part of the inventory library. If it's in the
- // library, then you can see the script, but not modify it.
- const LLInventoryItem* item = gInventory.getItem(mItemUUID);
- BOOL is_library = item
- && !gInventory.isObjectDescendentOf(mItemUUID,
- gInventory.getRootFolderID());
- if(!item)
- {
- // do the more generic search.
- getItem();
- }
- if(item)
- {
- BOOL is_copyable = gAgent.allowOperation(PERM_COPY,
- item->getPermissions(), GP_OBJECT_MANIPULATE);
- BOOL is_modifiable = gAgent.allowOperation(PERM_MODIFY,
- item->getPermissions(), GP_OBJECT_MANIPULATE);
- if (gAgent.isGodlike() || (is_copyable && (is_modifiable || is_library)))
- {
- LLUUID* new_uuid = new LLUUID(mItemUUID);
- gAssetStorage->getInvItemAsset(LLHost(),
- gAgent.getID(),
- gAgent.getSessionID(),
- item->getPermissions().getOwner(),
- LLUUID::null,
- item->getUUID(),
- item->getAssetUUID(),
- item->getType(),
- &LLPreviewLSL::onLoadComplete,
- (void*)new_uuid,
- TRUE);
- mAssetStatus = PREVIEW_ASSET_LOADING;
- }
- else
- {
- mScriptEd->setScriptText(mScriptEd->getString("can_not_view"), FALSE);
- mScriptEd->mEditor->makePristine();
- mScriptEd->mFunctions->setEnabled(FALSE);
- mAssetStatus = PREVIEW_ASSET_LOADED;
- }
- getChildView("lock")->setVisible( !is_modifiable);
- mScriptEd->getChildView("Insert...")->setEnabled(is_modifiable);
- }
- else
- {
- mScriptEd->setScriptText(std::string(HELLO_LSL), TRUE);
- mScriptEd->setEnableEditing(TRUE);
- mAssetStatus = PREVIEW_ASSET_LOADED;
- }
+ // *HACK: we poke into inventory to see if it's there, and if so,
+ // then it might be part of the inventory library. If it's in the
+ // library, then you can see the script, but not modify it.
+ const LLInventoryItem* item = gInventory.getItem(mItemUUID);
+ BOOL is_library = item
+ && !gInventory.isObjectDescendentOf(mItemUUID,
+ gInventory.getRootFolderID());
+ if(!item)
+ {
+ // do the more generic search.
+ getItem();
+ }
+ if(item)
+ {
+ BOOL is_copyable = gAgent.allowOperation(PERM_COPY,
+ item->getPermissions(), GP_OBJECT_MANIPULATE);
+ BOOL is_modifiable = gAgent.allowOperation(PERM_MODIFY,
+ item->getPermissions(), GP_OBJECT_MANIPULATE);
+ if (gAgent.isGodlike() || (is_copyable && (is_modifiable || is_library)))
+ {
+ LLUUID* new_uuid = new LLUUID(mItemUUID);
+ gAssetStorage->getInvItemAsset(LLHost(),
+ gAgent.getID(),
+ gAgent.getSessionID(),
+ item->getPermissions().getOwner(),
+ LLUUID::null,
+ item->getUUID(),
+ item->getAssetUUID(),
+ item->getType(),
+ &LLPreviewLSL::onLoadComplete,
+ (void*)new_uuid,
+ TRUE);
+ mAssetStatus = PREVIEW_ASSET_LOADING;
+ }
+ else
+ {
+ mScriptEd->setScriptText(mScriptEd->getString("can_not_view"), FALSE);
+ mScriptEd->mEditor->makePristine();
+ mScriptEd->mFunctions->setEnabled(FALSE);
+ mAssetStatus = PREVIEW_ASSET_LOADED;
+ }
+ getChildView("lock")->setVisible( !is_modifiable);
+ mScriptEd->getChildView("Insert...")->setEnabled(is_modifiable);
+ }
+ else
+ {
+ mScriptEd->setScriptText(std::string(HELLO_LSL), TRUE);
+ mScriptEd->setEnableEditing(TRUE);
+ mAssetStatus = PREVIEW_ASSET_LOADED;
+ }
}
BOOL LLPreviewLSL::canClose()
{
- return mScriptEd->canClose();
+ return mScriptEd->canClose();
}
void LLPreviewLSL::closeIfNeeded()
{
- // Find our window and close it if requested.
- getWindow()->decBusyCount();
- mPendingUploads--;
- if (mPendingUploads <= 0 && mCloseAfterSave)
- {
- closeFloater();
- }
+ // Find our window and close it if requested.
+ getWindow()->decBusyCount();
+ mPendingUploads--;
+ if (mPendingUploads <= 0 && mCloseAfterSave)
+ {
+ closeFloater();
+ }
}
void LLPreviewLSL::onSearchReplace(void* userdata)
{
- LLPreviewLSL* self = (LLPreviewLSL*)userdata;
- LLScriptEdCore* sec = self->mScriptEd;
- LLFloaterScriptSearch::show(sec);
+ LLPreviewLSL* self = (LLPreviewLSL*)userdata;
+ LLScriptEdCore* sec = self->mScriptEd;
+ LLFloaterScriptSearch::show(sec);
}
// static
void LLPreviewLSL::onLoad(void* userdata)
{
- LLPreviewLSL* self = (LLPreviewLSL*)userdata;
- self->loadAsset();
+ LLPreviewLSL* self = (LLPreviewLSL*)userdata;
+ self->loadAsset();
}
// static
void LLPreviewLSL::onSave(void* userdata, BOOL close_after_save)
{
- LLPreviewLSL* self = (LLPreviewLSL*)userdata;
- self->mCloseAfterSave = close_after_save;
- self->saveIfNeeded();
+ LLPreviewLSL* self = (LLPreviewLSL*)userdata;
+ self->mCloseAfterSave = close_after_save;
+ self->saveIfNeeded();
}
/*static*/
@@ -1833,7 +1833,7 @@ void LLPreviewLSL::saveIfNeeded(bool sync /*= true*/)
LLUUID old_asset_id = inv_item->getAssetUUID().isNull() ? mScriptEd->getAssetID() : inv_item->getAssetUUID();
- LLResourceUploadInfo::ptr_t uploadInfo(std::make_shared<LLScriptAssetUpload>(mItemUUID, buffer,
+ LLResourceUploadInfo::ptr_t uploadInfo(std::make_shared<LLScriptAssetUpload>(mItemUUID, buffer,
[old_asset_id](LLUUID itemId, LLUUID, LLUUID, LLSD response) {
LLFileSystem::removeFile(old_asset_id, LLAssetType::AT_LSL_TEXT);
LLPreviewLSL::finishedLSLUpload(itemId, response);
@@ -1847,67 +1847,67 @@ void LLPreviewLSL::saveIfNeeded(bool sync /*= true*/)
// static
void LLPreviewLSL::onLoadComplete(const LLUUID& asset_uuid, LLAssetType::EType type,
- void* user_data, S32 status, LLExtStat ext_status)
-{
- LL_DEBUGS() << "LLPreviewLSL::onLoadComplete: got uuid " << asset_uuid
- << LL_ENDL;
- LLUUID* item_uuid = (LLUUID*)user_data;
- LLPreviewLSL* preview = LLFloaterReg::findTypedInstance<LLPreviewLSL>("preview_script", *item_uuid);
- if( preview )
- {
- if(0 == status)
- {
- LLFileSystem file(asset_uuid, type);
- S32 file_length = file.getSize();
-
- std::vector<char> buffer(file_length+1);
- file.read((U8*)&buffer[0], file_length);
-
- // put a EOS at the end
- buffer[file_length] = 0;
- preview->mScriptEd->setScriptText(LLStringExplicit(&buffer[0]), TRUE);
- preview->mScriptEd->mEditor->makePristine();
-
- std::string script_name = DEFAULT_SCRIPT_NAME;
- LLInventoryItem* item = gInventory.getItem(*item_uuid);
- BOOL is_modifiable = FALSE;
- if (item)
- {
- if (!item->getName().empty())
- {
- script_name = item->getName();
- }
- if (gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), GP_OBJECT_MANIPULATE))
- {
- is_modifiable = TRUE;
- }
- }
- preview->mScriptEd->setScriptName(script_name);
- preview->mScriptEd->setEnableEditing(is_modifiable);
+ void* user_data, S32 status, LLExtStat ext_status)
+{
+ LL_DEBUGS() << "LLPreviewLSL::onLoadComplete: got uuid " << asset_uuid
+ << LL_ENDL;
+ LLUUID* item_uuid = (LLUUID*)user_data;
+ LLPreviewLSL* preview = LLFloaterReg::findTypedInstance<LLPreviewLSL>("preview_script", *item_uuid);
+ if( preview )
+ {
+ if(0 == status)
+ {
+ LLFileSystem file(asset_uuid, type);
+ S32 file_length = file.getSize();
+
+ std::vector<char> buffer(file_length+1);
+ file.read((U8*)&buffer[0], file_length);
+
+ // put a EOS at the end
+ buffer[file_length] = 0;
+ preview->mScriptEd->setScriptText(LLStringExplicit(&buffer[0]), TRUE);
+ preview->mScriptEd->mEditor->makePristine();
+
+ std::string script_name = DEFAULT_SCRIPT_NAME;
+ LLInventoryItem* item = gInventory.getItem(*item_uuid);
+ BOOL is_modifiable = FALSE;
+ if (item)
+ {
+ if (!item->getName().empty())
+ {
+ script_name = item->getName();
+ }
+ if (gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), GP_OBJECT_MANIPULATE))
+ {
+ is_modifiable = TRUE;
+ }
+ }
+ preview->mScriptEd->setScriptName(script_name);
+ preview->mScriptEd->setEnableEditing(is_modifiable);
preview->mScriptEd->setAssetID(asset_uuid);
- preview->mAssetStatus = PREVIEW_ASSET_LOADED;
- }
- else
- {
- if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ||
- LL_ERR_FILE_EMPTY == status)
- {
- LLNotificationsUtil::add("ScriptMissing");
- }
- else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status)
- {
- LLNotificationsUtil::add("ScriptNoPermissions");
- }
- else
- {
- LLNotificationsUtil::add("UnableToLoadScript");
- }
-
- preview->mAssetStatus = PREVIEW_ASSET_ERROR;
- LL_WARNS() << "Problem loading script: " << status << LL_ENDL;
- }
- }
- delete item_uuid;
+ preview->mAssetStatus = PREVIEW_ASSET_LOADED;
+ }
+ else
+ {
+ if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ||
+ LL_ERR_FILE_EMPTY == status)
+ {
+ LLNotificationsUtil::add("ScriptMissing");
+ }
+ else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status)
+ {
+ LLNotificationsUtil::add("ScriptNoPermissions");
+ }
+ else
+ {
+ LLNotificationsUtil::add("UnableToLoadScript");
+ }
+
+ preview->mAssetStatus = PREVIEW_ASSET_ERROR;
+ LL_WARNS() << "Problem loading script: " << status << LL_ENDL;
+ }
+ }
+ delete item_uuid;
}
@@ -1916,396 +1916,396 @@ void LLPreviewLSL::onLoadComplete(const LLUUID& asset_uuid, LLAssetType::EType t
/// ---------------------------------------------------------------------------
-//static
+//static
void* LLLiveLSLEditor::createScriptEdPanel(void* userdata)
{
- LLLiveLSLEditor *self = (LLLiveLSLEditor*)userdata;
+ LLLiveLSLEditor *self = (LLLiveLSLEditor*)userdata;
- self->mScriptEd = new LLScriptEdCore(
- self,
- HELLO_LSL,
- self->getHandle(),
- &LLLiveLSLEditor::onLoad,
- &LLLiveLSLEditor::onSave,
- &LLLiveLSLEditor::onSearchReplace,
- self,
- true,
- 0);
- return self->mScriptEd;
+ self->mScriptEd = new LLScriptEdCore(
+ self,
+ HELLO_LSL,
+ self->getHandle(),
+ &LLLiveLSLEditor::onLoad,
+ &LLLiveLSLEditor::onSave,
+ &LLLiveLSLEditor::onSearchReplace,
+ self,
+ true,
+ 0);
+ return self->mScriptEd;
}
LLLiveLSLEditor::LLLiveLSLEditor(const LLSD& key) :
- LLScriptEdContainer(key),
- mAskedForRunningInfo(FALSE),
- mHaveRunningInfo(FALSE),
- mCloseAfterSave(FALSE),
- mPendingUploads(0),
- mIsModifiable(FALSE),
- mIsNew(false),
- mIsSaving(FALSE),
+ LLScriptEdContainer(key),
+ mAskedForRunningInfo(FALSE),
+ mHaveRunningInfo(FALSE),
+ mCloseAfterSave(FALSE),
+ mPendingUploads(0),
+ mIsModifiable(FALSE),
+ mIsNew(false),
+ mIsSaving(FALSE),
mObjectName("")
{
- mFactoryMap["script ed panel"] = LLCallbackMap(LLLiveLSLEditor::createScriptEdPanel, this);
+ mFactoryMap["script ed panel"] = LLCallbackMap(LLLiveLSLEditor::createScriptEdPanel, this);
}
BOOL LLLiveLSLEditor::postBuild()
{
- childSetCommitCallback("running", LLLiveLSLEditor::onRunningCheckboxClicked, this);
- getChildView("running")->setEnabled(FALSE);
+ childSetCommitCallback("running", LLLiveLSLEditor::onRunningCheckboxClicked, this);
+ getChildView("running")->setEnabled(FALSE);
+
+ childSetAction("Reset",&LLLiveLSLEditor::onReset,this);
+ getChildView("Reset")->setEnabled(TRUE);
+
+ mMonoCheckbox = getChild<LLCheckBoxCtrl>("mono");
+ childSetCommitCallback("mono", &LLLiveLSLEditor::onMonoCheckboxClicked, this);
+ getChildView("mono")->setEnabled(FALSE);
+
+ mScriptEd->mEditor->makePristine();
+ mScriptEd->mEditor->setFocus(TRUE);
- childSetAction("Reset",&LLLiveLSLEditor::onReset,this);
- getChildView("Reset")->setEnabled(TRUE);
- mMonoCheckbox = getChild<LLCheckBoxCtrl>("mono");
- childSetCommitCallback("mono", &LLLiveLSLEditor::onMonoCheckboxClicked, this);
- getChildView("mono")->setEnabled(FALSE);
+ mExperiences = getChild<LLComboBox>("Experiences...");
+ mExperiences->setCommitCallback(boost::bind(&LLLiveLSLEditor::experienceChanged, this));
- mScriptEd->mEditor->makePristine();
- mScriptEd->mEditor->setFocus(TRUE);
+ mExperienceEnabled = getChild<LLCheckBoxCtrl>("enable_xp");
+ childSetCommitCallback("enable_xp", onToggleExperience, this);
+ childSetCommitCallback("view_profile", onViewProfile, this);
- mExperiences = getChild<LLComboBox>("Experiences...");
- mExperiences->setCommitCallback(boost::bind(&LLLiveLSLEditor::experienceChanged, this));
-
- mExperienceEnabled = getChild<LLCheckBoxCtrl>("enable_xp");
-
- childSetCommitCallback("enable_xp", onToggleExperience, this);
- childSetCommitCallback("view_profile", onViewProfile, this);
-
- return LLPreview::postBuild();
+ return LLPreview::postBuild();
}
// virtual
void LLLiveLSLEditor::callbackLSLCompileSucceeded(const LLUUID& task_id,
- const LLUUID& item_id,
- bool is_script_running)
+ const LLUUID& item_id,
+ bool is_script_running)
{
- LL_DEBUGS() << "LSL Bytecode saved" << LL_ENDL;
- mScriptEd->mErrorList->setCommentText(LLTrans::getString("CompileSuccessful"));
- mScriptEd->mErrorList->setCommentText(LLTrans::getString("SaveComplete"));
- getChild<LLCheckBoxCtrl>("running")->set(is_script_running);
- mIsSaving = FALSE;
- closeIfNeeded();
+ LL_DEBUGS() << "LSL Bytecode saved" << LL_ENDL;
+ mScriptEd->mErrorList->setCommentText(LLTrans::getString("CompileSuccessful"));
+ mScriptEd->mErrorList->setCommentText(LLTrans::getString("SaveComplete"));
+ getChild<LLCheckBoxCtrl>("running")->set(is_script_running);
+ mIsSaving = FALSE;
+ closeIfNeeded();
}
// virtual
void LLLiveLSLEditor::callbackLSLCompileFailed(const LLSD& compile_errors)
{
- LL_DEBUGS() << "Compile failed!" << LL_ENDL;
- for(LLSD::array_const_iterator line = compile_errors.beginArray();
- line < compile_errors.endArray();
- line++)
- {
- LLSD row;
- 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);
- }
- mScriptEd->selectFirstError();
- mIsSaving = FALSE;
- closeIfNeeded();
+ LL_DEBUGS() << "Compile failed!" << LL_ENDL;
+ for(LLSD::array_const_iterator line = compile_errors.beginArray();
+ line < compile_errors.endArray();
+ line++)
+ {
+ LLSD row;
+ 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);
+ }
+ mScriptEd->selectFirstError();
+ mIsSaving = FALSE;
+ closeIfNeeded();
}
void LLLiveLSLEditor::loadAsset()
{
- //LL_INFOS() << "LLLiveLSLEditor::loadAsset()" << LL_ENDL;
- if(!mIsNew)
- {
- LLViewerObject* object = gObjectList.findObject(mObjectUUID);
- if(object)
- {
- LLViewerInventoryItem* item = dynamic_cast<LLViewerInventoryItem*>(object->getInventoryObject(mItemUUID));
-
- if(item)
- {
- LLViewerRegion* region = object->getRegion();
- std::string url = std::string();
- if(region)
- {
- url = region->getCapability("GetMetadata");
- }
- LLExperienceCache::instance().fetchAssociatedExperience(item->getParentUUID(), item->getUUID(), url,
- boost::bind(&LLLiveLSLEditor::setAssociatedExperience, getDerivedHandle<LLLiveLSLEditor>(), _1));
-
- bool isGodlike = gAgent.isGodlike();
- bool copyManipulate = gAgent.allowOperation(PERM_COPY, item->getPermissions(), GP_OBJECT_MANIPULATE);
- mIsModifiable = gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), GP_OBJECT_MANIPULATE);
-
- if(!isGodlike && (!copyManipulate || !mIsModifiable))
- {
- mItem = new LLViewerInventoryItem(item);
- mScriptEd->setScriptText(getString("not_allowed"), FALSE);
- mScriptEd->mEditor->makePristine();
- mScriptEd->enableSave(FALSE);
- mAssetStatus = PREVIEW_ASSET_LOADED;
- }
- else if(copyManipulate || isGodlike)
- {
- mItem = new LLViewerInventoryItem(item);
- // request the text from the object
- LLSD* user_data = new LLSD();
- user_data->with("taskid", mObjectUUID).with("itemid", mItemUUID);
- gAssetStorage->getInvItemAsset(object->getRegion()->getHost(),
- gAgent.getID(),
- gAgent.getSessionID(),
- item->getPermissions().getOwner(),
- object->getID(),
- item->getUUID(),
- item->getAssetUUID(),
- item->getType(),
- &LLLiveLSLEditor::onLoadComplete,
- (void*)user_data,
- TRUE);
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessageFast(_PREHASH_GetScriptRunning);
- msg->nextBlockFast(_PREHASH_Script);
- msg->addUUIDFast(_PREHASH_ObjectID, mObjectUUID);
- msg->addUUIDFast(_PREHASH_ItemID, mItemUUID);
- msg->sendReliable(object->getRegion()->getHost());
- mAskedForRunningInfo = TRUE;
- mAssetStatus = PREVIEW_ASSET_LOADING;
- }
- }
-
- if(mItem.isNull())
- {
- mScriptEd->setScriptText(LLStringUtil::null, FALSE);
- mScriptEd->mEditor->makePristine();
- mAssetStatus = PREVIEW_ASSET_LOADED;
- mIsModifiable = FALSE;
- }
-
- refreshFromItem();
+ //LL_INFOS() << "LLLiveLSLEditor::loadAsset()" << LL_ENDL;
+ if(!mIsNew)
+ {
+ LLViewerObject* object = gObjectList.findObject(mObjectUUID);
+ if(object)
+ {
+ LLViewerInventoryItem* item = dynamic_cast<LLViewerInventoryItem*>(object->getInventoryObject(mItemUUID));
+
+ if(item)
+ {
+ LLViewerRegion* region = object->getRegion();
+ std::string url = std::string();
+ if(region)
+ {
+ url = region->getCapability("GetMetadata");
+ }
+ LLExperienceCache::instance().fetchAssociatedExperience(item->getParentUUID(), item->getUUID(), url,
+ boost::bind(&LLLiveLSLEditor::setAssociatedExperience, getDerivedHandle<LLLiveLSLEditor>(), _1));
+
+ bool isGodlike = gAgent.isGodlike();
+ bool copyManipulate = gAgent.allowOperation(PERM_COPY, item->getPermissions(), GP_OBJECT_MANIPULATE);
+ mIsModifiable = gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), GP_OBJECT_MANIPULATE);
+
+ if(!isGodlike && (!copyManipulate || !mIsModifiable))
+ {
+ mItem = new LLViewerInventoryItem(item);
+ mScriptEd->setScriptText(getString("not_allowed"), FALSE);
+ mScriptEd->mEditor->makePristine();
+ mScriptEd->enableSave(FALSE);
+ mAssetStatus = PREVIEW_ASSET_LOADED;
+ }
+ else if(copyManipulate || isGodlike)
+ {
+ mItem = new LLViewerInventoryItem(item);
+ // request the text from the object
+ LLSD* user_data = new LLSD();
+ user_data->with("taskid", mObjectUUID).with("itemid", mItemUUID);
+ gAssetStorage->getInvItemAsset(object->getRegion()->getHost(),
+ gAgent.getID(),
+ gAgent.getSessionID(),
+ item->getPermissions().getOwner(),
+ object->getID(),
+ item->getUUID(),
+ item->getAssetUUID(),
+ item->getType(),
+ &LLLiveLSLEditor::onLoadComplete,
+ (void*)user_data,
+ TRUE);
+ LLMessageSystem* msg = gMessageSystem;
+ msg->newMessageFast(_PREHASH_GetScriptRunning);
+ msg->nextBlockFast(_PREHASH_Script);
+ msg->addUUIDFast(_PREHASH_ObjectID, mObjectUUID);
+ msg->addUUIDFast(_PREHASH_ItemID, mItemUUID);
+ msg->sendReliable(object->getRegion()->getHost());
+ mAskedForRunningInfo = TRUE;
+ mAssetStatus = PREVIEW_ASSET_LOADING;
+ }
+ }
+
+ if(mItem.isNull())
+ {
+ mScriptEd->setScriptText(LLStringUtil::null, FALSE);
+ mScriptEd->mEditor->makePristine();
+ mAssetStatus = PREVIEW_ASSET_LOADED;
+ mIsModifiable = FALSE;
+ }
+
+ refreshFromItem();
getChild<LLUICtrl>("obj_name")->setValue(mObjectName);
- // This is commented out, because we don't completely
- // handle script exports yet.
- /*
- // request the exports from the object
- gMessageSystem->newMessage("GetScriptExports");
- gMessageSystem->nextBlock("ScriptBlock");
- gMessageSystem->addUUID("AgentID", gAgent.getID());
- U32 local_id = object->getLocalID();
- gMessageSystem->addData("LocalID", &local_id);
- gMessageSystem->addUUID("ItemID", mItemUUID);
- LLHost host(object->getRegion()->getIP(),
- object->getRegion()->getPort());
- gMessageSystem->sendReliable(host);
- */
- }
- }
- else
- {
- mScriptEd->setScriptText(std::string(HELLO_LSL), TRUE);
- mScriptEd->enableSave(FALSE);
- LLPermissions perm;
- perm.init(gAgent.getID(), gAgent.getID(), LLUUID::null, gAgent.getGroupID());
- perm.initMasks(PERM_ALL, PERM_ALL, PERM_NONE, PERM_NONE, PERM_MOVE | PERM_TRANSFER);
- mItem = new LLViewerInventoryItem(mItemUUID,
- mObjectUUID,
- perm,
- LLUUID::null,
- LLAssetType::AT_LSL_TEXT,
- LLInventoryType::IT_LSL,
- DEFAULT_SCRIPT_NAME,
- DEFAULT_SCRIPT_DESC,
- LLSaleInfo::DEFAULT,
- LLInventoryItemFlags::II_FLAGS_NONE,
- time_corrected());
- mAssetStatus = PREVIEW_ASSET_LOADED;
- }
-
- requestExperiences();
+ // This is commented out, because we don't completely
+ // handle script exports yet.
+ /*
+ // request the exports from the object
+ gMessageSystem->newMessage("GetScriptExports");
+ gMessageSystem->nextBlock("ScriptBlock");
+ gMessageSystem->addUUID("AgentID", gAgent.getID());
+ U32 local_id = object->getLocalID();
+ gMessageSystem->addData("LocalID", &local_id);
+ gMessageSystem->addUUID("ItemID", mItemUUID);
+ LLHost host(object->getRegion()->getIP(),
+ object->getRegion()->getPort());
+ gMessageSystem->sendReliable(host);
+ */
+ }
+ }
+ else
+ {
+ mScriptEd->setScriptText(std::string(HELLO_LSL), TRUE);
+ mScriptEd->enableSave(FALSE);
+ LLPermissions perm;
+ perm.init(gAgent.getID(), gAgent.getID(), LLUUID::null, gAgent.getGroupID());
+ perm.initMasks(PERM_ALL, PERM_ALL, PERM_NONE, PERM_NONE, PERM_MOVE | PERM_TRANSFER);
+ mItem = new LLViewerInventoryItem(mItemUUID,
+ mObjectUUID,
+ perm,
+ LLUUID::null,
+ LLAssetType::AT_LSL_TEXT,
+ LLInventoryType::IT_LSL,
+ DEFAULT_SCRIPT_NAME,
+ DEFAULT_SCRIPT_DESC,
+ LLSaleInfo::DEFAULT,
+ LLInventoryItemFlags::II_FLAGS_NONE,
+ time_corrected());
+ mAssetStatus = PREVIEW_ASSET_LOADED;
+ }
+
+ requestExperiences();
}
// static
void LLLiveLSLEditor::onLoadComplete(const LLUUID& asset_id,
- LLAssetType::EType type,
- void* user_data, S32 status, LLExtStat ext_status)
-{
- LL_DEBUGS() << "LLLiveLSLEditor::onLoadComplete: got uuid " << asset_id
- << LL_ENDL;
- LLSD* floater_key = (LLSD*)user_data;
-
- LLLiveLSLEditor* instance = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", *floater_key);
-
- if(instance )
- {
- if( LL_ERR_NOERR == status )
- {
- instance->loadScriptText(asset_id, type);
- instance->mScriptEd->setEnableEditing(TRUE);
- instance->mAssetStatus = PREVIEW_ASSET_LOADED;
+ LLAssetType::EType type,
+ void* user_data, S32 status, LLExtStat ext_status)
+{
+ LL_DEBUGS() << "LLLiveLSLEditor::onLoadComplete: got uuid " << asset_id
+ << LL_ENDL;
+ LLSD* floater_key = (LLSD*)user_data;
+
+ LLLiveLSLEditor* instance = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", *floater_key);
+
+ if(instance )
+ {
+ if( LL_ERR_NOERR == status )
+ {
+ instance->loadScriptText(asset_id, type);
+ instance->mScriptEd->setEnableEditing(TRUE);
+ instance->mAssetStatus = PREVIEW_ASSET_LOADED;
instance->mScriptEd->setAssetID(asset_id);
- }
- else
- {
- if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ||
- LL_ERR_FILE_EMPTY == status)
- {
- LLNotificationsUtil::add("ScriptMissing");
- }
- else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status)
- {
- LLNotificationsUtil::add("ScriptNoPermissions");
- }
- else
- {
- LLNotificationsUtil::add("UnableToLoadScript");
- }
- instance->mAssetStatus = PREVIEW_ASSET_ERROR;
- }
- }
-
- delete floater_key;
+ }
+ else
+ {
+ if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ||
+ LL_ERR_FILE_EMPTY == status)
+ {
+ LLNotificationsUtil::add("ScriptMissing");
+ }
+ else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status)
+ {
+ LLNotificationsUtil::add("ScriptNoPermissions");
+ }
+ else
+ {
+ LLNotificationsUtil::add("UnableToLoadScript");
+ }
+ instance->mAssetStatus = PREVIEW_ASSET_ERROR;
+ }
+ }
+
+ delete floater_key;
}
void LLLiveLSLEditor::loadScriptText(const LLUUID &uuid, LLAssetType::EType type)
{
- LLFileSystem file(uuid, type);
- S32 file_length = file.getSize();
- std::vector<char> buffer(file_length + 1);
- file.read((U8*)&buffer[0], file_length);
+ LLFileSystem file(uuid, type);
+ S32 file_length = file.getSize();
+ std::vector<char> buffer(file_length + 1);
+ file.read((U8*)&buffer[0], file_length);
- if (file.getLastBytesRead() != file_length ||
- file_length <= 0)
- {
- LL_WARNS() << "Error reading " << uuid << ":" << type << LL_ENDL;
- }
+ if (file.getLastBytesRead() != file_length ||
+ file_length <= 0)
+ {
+ LL_WARNS() << "Error reading " << uuid << ":" << type << LL_ENDL;
+ }
- buffer[file_length] = '\0';
+ buffer[file_length] = '\0';
- mScriptEd->setScriptText(LLStringExplicit(&buffer[0]), TRUE);
- mScriptEd->makeEditorPristine();
+ mScriptEd->setScriptText(LLStringExplicit(&buffer[0]), TRUE);
+ mScriptEd->makeEditorPristine();
- std::string script_name = DEFAULT_SCRIPT_NAME;
- const LLInventoryItem* inv_item = getItem();
+ std::string script_name = DEFAULT_SCRIPT_NAME;
+ const LLInventoryItem* inv_item = getItem();
- if(inv_item)
- {
- script_name = inv_item->getName();
- }
- mScriptEd->setScriptName(script_name);
+ if(inv_item)
+ {
+ script_name = inv_item->getName();
+ }
+ mScriptEd->setScriptName(script_name);
}
void LLLiveLSLEditor::onRunningCheckboxClicked( LLUICtrl*, void* userdata )
{
- LLLiveLSLEditor* self = (LLLiveLSLEditor*) userdata;
- LLViewerObject* object = gObjectList.findObject( self->mObjectUUID );
- LLCheckBoxCtrl* runningCheckbox = self->getChild<LLCheckBoxCtrl>("running");
- BOOL running = runningCheckbox->get();
- //self->mRunningCheckbox->get();
- if( object )
- {
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessageFast(_PREHASH_SetScriptRunning);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- msg->nextBlockFast(_PREHASH_Script);
- msg->addUUIDFast(_PREHASH_ObjectID, self->mObjectUUID);
- msg->addUUIDFast(_PREHASH_ItemID, self->mItemUUID);
- msg->addBOOLFast(_PREHASH_Running, running);
- msg->sendReliable(object->getRegion()->getHost());
- }
- else
- {
- runningCheckbox->set(!running);
- LLNotificationsUtil::add("CouldNotStartStopScript");
- }
+ LLLiveLSLEditor* self = (LLLiveLSLEditor*) userdata;
+ LLViewerObject* object = gObjectList.findObject( self->mObjectUUID );
+ LLCheckBoxCtrl* runningCheckbox = self->getChild<LLCheckBoxCtrl>("running");
+ BOOL running = runningCheckbox->get();
+ //self->mRunningCheckbox->get();
+ if( object )
+ {
+ LLMessageSystem* msg = gMessageSystem;
+ msg->newMessageFast(_PREHASH_SetScriptRunning);
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+ msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ msg->nextBlockFast(_PREHASH_Script);
+ msg->addUUIDFast(_PREHASH_ObjectID, self->mObjectUUID);
+ msg->addUUIDFast(_PREHASH_ItemID, self->mItemUUID);
+ msg->addBOOLFast(_PREHASH_Running, running);
+ msg->sendReliable(object->getRegion()->getHost());
+ }
+ else
+ {
+ runningCheckbox->set(!running);
+ LLNotificationsUtil::add("CouldNotStartStopScript");
+ }
}
void LLLiveLSLEditor::onReset(void *userdata)
{
- LLLiveLSLEditor* self = (LLLiveLSLEditor*) userdata;
-
- LLViewerObject* object = gObjectList.findObject( self->mObjectUUID );
- if(object)
- {
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessageFast(_PREHASH_ScriptReset);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- msg->nextBlockFast(_PREHASH_Script);
- msg->addUUIDFast(_PREHASH_ObjectID, self->mObjectUUID);
- msg->addUUIDFast(_PREHASH_ItemID, self->mItemUUID);
- msg->sendReliable(object->getRegion()->getHost());
- }
- else
- {
- LLNotificationsUtil::add("CouldNotStartStopScript");
- }
+ LLLiveLSLEditor* self = (LLLiveLSLEditor*) userdata;
+
+ LLViewerObject* object = gObjectList.findObject( self->mObjectUUID );
+ if(object)
+ {
+ LLMessageSystem* msg = gMessageSystem;
+ msg->newMessageFast(_PREHASH_ScriptReset);
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+ msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ msg->nextBlockFast(_PREHASH_Script);
+ msg->addUUIDFast(_PREHASH_ObjectID, self->mObjectUUID);
+ msg->addUUIDFast(_PREHASH_ItemID, self->mItemUUID);
+ msg->sendReliable(object->getRegion()->getHost());
+ }
+ else
+ {
+ LLNotificationsUtil::add("CouldNotStartStopScript");
+ }
}
void LLLiveLSLEditor::draw()
{
- LLViewerObject* object = gObjectList.findObject(mObjectUUID);
- LLCheckBoxCtrl* runningCheckbox = getChild<LLCheckBoxCtrl>( "running");
- if(object && mAskedForRunningInfo && mHaveRunningInfo)
- {
- if(object->permAnyOwner())
- {
- runningCheckbox->setLabel(getString("script_running"));
- runningCheckbox->setEnabled(!mIsSaving);
- }
- else
- {
- runningCheckbox->setLabel(getString("public_objects_can_not_run"));
- runningCheckbox->setEnabled(FALSE);
-
- // *FIX: Set it to false so that the ui is correct for
- // a box that is released to public. It could be
- // incorrect after a release/claim cycle, but will be
- // correct after clicking on it.
- runningCheckbox->set(FALSE);
- mMonoCheckbox->set(FALSE);
- }
- }
- else if(!object)
- {
- // HACK: Display this information in the title bar.
- // Really ought to put in main window.
- setTitle(LLTrans::getString("ObjectOutOfRange"));
- runningCheckbox->setEnabled(FALSE);
- mMonoCheckbox->setEnabled(FALSE);
- // object may have fallen out of range.
- mHaveRunningInfo = FALSE;
- }
-
- LLPreview::draw();
+ LLViewerObject* object = gObjectList.findObject(mObjectUUID);
+ LLCheckBoxCtrl* runningCheckbox = getChild<LLCheckBoxCtrl>( "running");
+ if(object && mAskedForRunningInfo && mHaveRunningInfo)
+ {
+ if(object->permAnyOwner())
+ {
+ runningCheckbox->setLabel(getString("script_running"));
+ runningCheckbox->setEnabled(!mIsSaving);
+ }
+ else
+ {
+ runningCheckbox->setLabel(getString("public_objects_can_not_run"));
+ runningCheckbox->setEnabled(FALSE);
+
+ // *FIX: Set it to false so that the ui is correct for
+ // a box that is released to public. It could be
+ // incorrect after a release/claim cycle, but will be
+ // correct after clicking on it.
+ runningCheckbox->set(FALSE);
+ mMonoCheckbox->set(FALSE);
+ }
+ }
+ else if(!object)
+ {
+ // HACK: Display this information in the title bar.
+ // Really ought to put in main window.
+ setTitle(LLTrans::getString("ObjectOutOfRange"));
+ runningCheckbox->setEnabled(FALSE);
+ mMonoCheckbox->setEnabled(FALSE);
+ // object may have fallen out of range.
+ mHaveRunningInfo = FALSE;
+ }
+
+ LLPreview::draw();
}
void LLLiveLSLEditor::onSearchReplace(void* userdata)
{
- LLLiveLSLEditor* self = (LLLiveLSLEditor*)userdata;
+ LLLiveLSLEditor* self = (LLLiveLSLEditor*)userdata;
- LLScriptEdCore* sec = self->mScriptEd;
- LLFloaterScriptSearch::show(sec);
+ LLScriptEdCore* sec = self->mScriptEd;
+ LLFloaterScriptSearch::show(sec);
}
struct LLLiveLSLSaveData
{
- LLLiveLSLSaveData(const LLUUID& id, const LLViewerInventoryItem* item, BOOL active);
- LLUUID mSaveObjectID;
- LLPointer<LLViewerInventoryItem> mItem;
- BOOL mActive;
+ LLLiveLSLSaveData(const LLUUID& id, const LLViewerInventoryItem* item, BOOL active);
+ LLUUID mSaveObjectID;
+ LLPointer<LLViewerInventoryItem> mItem;
+ BOOL mActive;
};
LLLiveLSLSaveData::LLLiveLSLSaveData(const LLUUID& id,
- const LLViewerInventoryItem* item,
- BOOL active) :
- mSaveObjectID(id),
- mActive(active)
+ const LLViewerInventoryItem* item,
+ BOOL active) :
+ mSaveObjectID(id),
+ mActive(active)
{
- llassert(item);
- mItem = new LLViewerInventoryItem(item);
+ llassert(item);
+ mItem = new LLViewerInventoryItem(item);
}
@@ -2339,20 +2339,20 @@ void LLLiveLSLEditor::finishLSLUpload(LLUUID itemId, LLUUID taskId, LLUUID newAs
// virtual
void LLLiveLSLEditor::saveIfNeeded(bool sync /*= true*/)
{
- LLViewerObject* object = gObjectList.findObject(mObjectUUID);
- if(!object)
- {
- LLNotificationsUtil::add("SaveScriptFailObjectNotFound");
- return;
- }
+ LLViewerObject* object = gObjectList.findObject(mObjectUUID);
+ if(!object)
+ {
+ LLNotificationsUtil::add("SaveScriptFailObjectNotFound");
+ return;
+ }
if (mItem.isNull() || !mItem->isFinished())
- {
- // $NOTE: While the error message may not be exactly correct,
- // it's pretty close.
- LLNotificationsUtil::add("SaveScriptFailObjectNotFound");
- return;
- }
+ {
+ // $NOTE: While the error message may not be exactly correct,
+ // it's pretty close.
+ LLNotificationsUtil::add("SaveScriptFailObjectNotFound");
+ return;
+ }
// get the latest info about it. We used to be losing the script
// name on save, because the viewer object version of the item,
@@ -2393,10 +2393,10 @@ void LLLiveLSLEditor::saveIfNeeded(bool sync /*= true*/)
std::string buffer(mScriptEd->mEditor->getText());
LLUUID old_asset_id = mScriptEd->getAssetID();
- LLResourceUploadInfo::ptr_t uploadInfo(std::make_shared<LLScriptAssetUpload>(mObjectUUID, mItemUUID,
- monoChecked() ? LLScriptAssetUpload::MONO : LLScriptAssetUpload::LSL2,
- isRunning, mScriptEd->getAssociatedExperience(), buffer,
- [isRunning, old_asset_id](LLUUID itemId, LLUUID taskId, LLUUID newAssetId, LLSD response) {
+ LLResourceUploadInfo::ptr_t uploadInfo(std::make_shared<LLScriptAssetUpload>(mObjectUUID, mItemUUID,
+ monoChecked() ? LLScriptAssetUpload::MONO : LLScriptAssetUpload::LSL2,
+ isRunning, mScriptEd->getAssociatedExperience(), buffer,
+ [isRunning, old_asset_id](LLUUID itemId, LLUUID taskId, LLUUID newAssetId, LLSD response) {
LLFileSystem::removeFile(old_asset_id, LLAssetType::AT_LSL_TEXT);
LLLiveLSLEditor::finishLSLUpload(itemId, taskId, newAssetId, response, isRunning);
},
@@ -2408,94 +2408,94 @@ void LLLiveLSLEditor::saveIfNeeded(bool sync /*= true*/)
BOOL LLLiveLSLEditor::canClose()
{
- return (mScriptEd->canClose());
+ return (mScriptEd->canClose());
}
void LLLiveLSLEditor::closeIfNeeded()
{
- getWindow()->decBusyCount();
- mPendingUploads--;
- if (mPendingUploads <= 0 && mCloseAfterSave)
- {
- closeFloater();
- }
+ getWindow()->decBusyCount();
+ mPendingUploads--;
+ if (mPendingUploads <= 0 && mCloseAfterSave)
+ {
+ closeFloater();
+ }
}
// static
void LLLiveLSLEditor::onLoad(void* userdata)
{
- LLLiveLSLEditor* self = (LLLiveLSLEditor*)userdata;
- self->loadAsset();
+ LLLiveLSLEditor* self = (LLLiveLSLEditor*)userdata;
+ self->loadAsset();
}
// static
void LLLiveLSLEditor::onSave(void* userdata, BOOL close_after_save)
{
- LLLiveLSLEditor* self = (LLLiveLSLEditor*)userdata;
- if(self)
- {
- self->mCloseAfterSave = close_after_save;
- self->mScriptEd->mErrorList->setCommentText("");
- self->saveIfNeeded();
- }
+ LLLiveLSLEditor* self = (LLLiveLSLEditor*)userdata;
+ if(self)
+ {
+ self->mCloseAfterSave = close_after_save;
+ self->mScriptEd->mErrorList->setCommentText("");
+ self->saveIfNeeded();
+ }
}
// static
void LLLiveLSLEditor::processScriptRunningReply(LLMessageSystem* msg, void**)
{
- LLUUID item_id;
- LLUUID object_id;
- msg->getUUIDFast(_PREHASH_Script, _PREHASH_ObjectID, object_id);
- msg->getUUIDFast(_PREHASH_Script, _PREHASH_ItemID, item_id);
-
- LLSD floater_key;
- floater_key["taskid"] = object_id;
- floater_key["itemid"] = item_id;
- LLLiveLSLEditor* instance = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", floater_key);
- if(instance)
- {
- instance->mHaveRunningInfo = TRUE;
- BOOL running;
- msg->getBOOLFast(_PREHASH_Script, _PREHASH_Running, running);
- LLCheckBoxCtrl* runningCheckbox = instance->getChild<LLCheckBoxCtrl>("running");
- runningCheckbox->set(running);
- BOOL mono;
- msg->getBOOLFast(_PREHASH_Script, "Mono", mono);
- LLCheckBoxCtrl* monoCheckbox = instance->getChild<LLCheckBoxCtrl>("mono");
- monoCheckbox->setEnabled(instance->getIsModifiable() && have_script_upload_cap(object_id));
- monoCheckbox->set(mono);
- }
+ LLUUID item_id;
+ LLUUID object_id;
+ msg->getUUIDFast(_PREHASH_Script, _PREHASH_ObjectID, object_id);
+ msg->getUUIDFast(_PREHASH_Script, _PREHASH_ItemID, item_id);
+
+ LLSD floater_key;
+ floater_key["taskid"] = object_id;
+ floater_key["itemid"] = item_id;
+ LLLiveLSLEditor* instance = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", floater_key);
+ if(instance)
+ {
+ instance->mHaveRunningInfo = TRUE;
+ BOOL running;
+ msg->getBOOLFast(_PREHASH_Script, _PREHASH_Running, running);
+ LLCheckBoxCtrl* runningCheckbox = instance->getChild<LLCheckBoxCtrl>("running");
+ runningCheckbox->set(running);
+ BOOL mono;
+ msg->getBOOLFast(_PREHASH_Script, "Mono", mono);
+ LLCheckBoxCtrl* monoCheckbox = instance->getChild<LLCheckBoxCtrl>("mono");
+ monoCheckbox->setEnabled(instance->getIsModifiable() && have_script_upload_cap(object_id));
+ monoCheckbox->set(mono);
+ }
}
void LLLiveLSLEditor::onMonoCheckboxClicked(LLUICtrl*, void* userdata)
{
- LLLiveLSLEditor* self = static_cast<LLLiveLSLEditor*>(userdata);
- self->mMonoCheckbox->setEnabled(have_script_upload_cap(self->mObjectUUID));
- self->mScriptEd->enableSave(self->getIsModifiable());
+ LLLiveLSLEditor* self = static_cast<LLLiveLSLEditor*>(userdata);
+ self->mMonoCheckbox->setEnabled(have_script_upload_cap(self->mObjectUUID));
+ self->mScriptEd->enableSave(self->getIsModifiable());
}
BOOL LLLiveLSLEditor::monoChecked() const
{
- if(NULL != mMonoCheckbox)
- {
- return mMonoCheckbox->getValue()? TRUE : FALSE;
- }
- return FALSE;
+ if(NULL != mMonoCheckbox)
+ {
+ return mMonoCheckbox->getValue()? TRUE : FALSE;
+ }
+ return FALSE;
}
void LLLiveLSLEditor::setAssociatedExperience( LLHandle<LLLiveLSLEditor> editor, const LLSD& experience )
{
- LLLiveLSLEditor* scriptEd = editor.get();
- if(scriptEd)
- {
- LLUUID id;
- if(experience.has(LLExperienceCache::EXPERIENCE_ID))
- {
- id=experience[LLExperienceCache::EXPERIENCE_ID].asUUID();
- }
- scriptEd->mScriptEd->setAssociatedExperience(id);
- scriptEd->updateExperiencePanel();
- }
+ LLLiveLSLEditor* scriptEd = editor.get();
+ if(scriptEd)
+ {
+ LLUUID id;
+ if(experience.has(LLExperienceCache::EXPERIENCE_ID))
+ {
+ id=experience[LLExperienceCache::EXPERIENCE_ID].asUUID();
+ }
+ scriptEd->mScriptEd->setAssociatedExperience(id);
+ scriptEd->updateExperiencePanel();
+ }
}