summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorIma Mechanique <none@none>2011-11-17 23:17:26 +0000
committerIma Mechanique <none@none>2011-11-17 23:17:26 +0000
commitb28492fbffd7bea9e7174260d66d5f52c76d24b2 (patch)
tree754a3fdd3278b363c622b411ac9acda1bd5c3927 /indra/newview
parent4bcdcd02fb7e83a2754084f2fb599b56ea6c8743 (diff)
STORM-1708 Adding ability to save/load scripts from file.
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llfilepicker.cpp15
-rw-r--r--indra/newview/llfilepicker.h2
-rw-r--r--indra/newview/llfloaternamedesc.cpp21
-rw-r--r--indra/newview/llfloaternamedesc.h10
-rw-r--r--indra/newview/llpreviewscript.cpp78
-rw-r--r--indra/newview/llpreviewscript.h2
-rw-r--r--indra/newview/llviewerfloaterreg.cpp3
-rw-r--r--indra/newview/llviewermenufile.cpp22
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml15
-rw-r--r--indra/newview/skins/default/xui/en/panel_script_ed.xml22
10 files changed, 173 insertions, 17 deletions
diff --git a/indra/newview/llfilepicker.cpp b/indra/newview/llfilepicker.cpp
index 4897cf1885..0801871409 100644
--- a/indra/newview/llfilepicker.cpp
+++ b/indra/newview/llfilepicker.cpp
@@ -58,6 +58,7 @@ LLFilePicker LLFilePicker::sInstance;
#define SLOBJECT_FILTER L"Objects (*.slobject)\0*.slobject\0"
#define RAW_FILTER L"RAW files (*.raw)\0*.raw\0"
#define MODEL_FILTER L"Model files (*.dae)\0*.dae\0"
+#define SCRIPT_FILTER L"Script files (*.lsl; *.txt)\0*.lsl;*.txt\0"
#endif
//
@@ -213,6 +214,10 @@ BOOL LLFilePicker::setupFilter(ELoadFilter filter)
mOFN.lpstrFilter = MODEL_FILTER \
L"\0";
break;
+ case FFLOAD_SCRIPT:
+ mOFN.lpstrFilter = SCRIPT_FILTER \
+ L"\0";
+ break;
default:
res = FALSE;
break;
@@ -497,6 +502,16 @@ BOOL LLFilePicker::getSaveFile(ESaveFilter filter, const std::string& filename)
L"Compressed Images (*.j2c)\0*.j2c\0" \
L"\0";
break;
+ case FFSAVE_SCRIPT:
+ if (filename.empty())
+ {
+ wcsncpy( mFilesW,L"untitled.lsl", FILENAME_BUFFER_SIZE);
+ }
+ mOFN.lpstrDefExt = L"txt";
+ mOFN.lpstrFilter =
+ L"LSL Files (*.lsl; *.txt)\0*.lsl;*.txt\0"
+ L"\0";
+ break;
default:
return FALSE;
}
diff --git a/indra/newview/llfilepicker.h b/indra/newview/llfilepicker.h
index cd843a8f33..a4d5d68ff5 100644
--- a/indra/newview/llfilepicker.h
+++ b/indra/newview/llfilepicker.h
@@ -84,6 +84,7 @@ public:
FFLOAD_RAW = 8,
FFLOAD_MODEL = 9,
FFLOAD_COLLADA = 10,
+ FFLOAD_SCRIPT = 11,
};
enum ESaveFilter
@@ -103,6 +104,7 @@ public:
FFSAVE_J2C = 12,
FFSAVE_PNG = 13,
FFSAVE_JPEG = 14,
+ FFSAVE_SCRIPT = 15,
};
// open the dialog. This is a modal operation
diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp
index ae95d4392a..4d4f9f57bf 100644
--- a/indra/newview/llfloaternamedesc.cpp
+++ b/indra/newview/llfloaternamedesc.cpp
@@ -204,3 +204,24 @@ BOOL LLFloaterSoundPreview::postBuild()
getChild<LLUICtrl>("ok_btn")->setCommitCallback(boost::bind(&LLFloaterNameDesc::onBtnOK, this));
return TRUE;
}
+
+
+//-----------------------------------------------------------------------------
+// LLFloaterScriptPreview()
+//-----------------------------------------------------------------------------
+
+LLFloaterScriptPreview::LLFloaterScriptPreview(const LLSD& filename )
+ : LLFloaterNameDesc(filename)
+{
+ mIsAudio = TRUE;
+}
+
+BOOL LLFloaterScriptPreview::postBuild()
+{
+ if (!LLFloaterNameDesc::postBuild())
+ {
+ return FALSE;
+ }
+ getChild<LLUICtrl>("ok_btn")->setCommitCallback(boost::bind(&LLFloaterNameDesc::onBtnOK, this));
+ return TRUE;
+}
diff --git a/indra/newview/llfloaternamedesc.h b/indra/newview/llfloaternamedesc.h
index 7381a6334a..69bbccaf80 100644
--- a/indra/newview/llfloaternamedesc.h
+++ b/indra/newview/llfloaternamedesc.h
@@ -51,6 +51,7 @@ protected:
protected:
BOOL mIsAudio;
+ bool mIsText;
std::string mFilenameAndPath;
std::string mFilename;
@@ -62,5 +63,12 @@ public:
LLFloaterSoundPreview(const LLSD& filename );
virtual BOOL postBuild();
};
-
+
+class LLFloaterScriptPreview : public LLFloaterNameDesc
+{
+public:
+ LLFloaterScriptPreview(const LLSD& filename );
+ virtual BOOL postBuild();
+};
+
#endif // LL_LLFLOATERNAMEDESC_H
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index b19bf5d234..072df39514 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -35,6 +35,7 @@
#include "llcombobox.h"
#include "lldir.h"
#include "llexternaleditor.h"
+#include "llfilepicker.h"
#include "llfloaterreg.h"
#include "llinventorydefines.h"
#include "llinventorymodel.h"
@@ -89,15 +90,15 @@
const std::string HELLO_LSL =
"default\n"
"{\n"
- " state_entry()\n"
- " {\n"
- " llSay(0, \"Hello, Avatar!\");\n"
- " }\n"
+ "\tstate_entry()\n"
+ "\t{\n"
+ "\t\tllOwnerSay(\"Hello, Avatar!\");\n"
+ "\t}\n"
"\n"
- " touch_start(integer total_number)\n"
- " {\n"
- " llSay(0, \"Touched.\");\n"
- " }\n"
+ "\ttouch_start(integer total_number)\n"
+ "\t{\n"
+ "\t\tllSay(llDetectedKey(0), \"Touched.\");\n"
+ "\t}\n"
"}\n";
const std::string HELP_LSL_PORTAL_TOPIC = "LSL_Portal";
@@ -503,6 +504,14 @@ void LLScriptEdCore::initMenu()
menuItem = getChild<LLMenuItemCallGL>("Keyword Help...");
menuItem->setClickCallback(boost::bind(&LLScriptEdCore::onBtnDynamicHelp, this));
+
+ menuItem = getChild<LLMenuItemCallGL>("LoadFromFile");
+ menuItem->setClickCallback(boost::bind(&LLScriptEdCore::onBtnLoadFromFile, this));
+// menuItem->setEnabledCallback(NULL);
+
+ menuItem = getChild<LLMenuItemCallGL>("SaveToFile");
+ menuItem->setClickCallback(boost::bind(&LLScriptEdCore::onBtnSaveToFile, this));
+ menuItem->setEnableCallback(boost::bind(&LLScriptEdCore::hasChanged, this));
}
void LLScriptEdCore::setScriptText(const std::string& text, BOOL is_valid)
@@ -1096,6 +1105,59 @@ BOOL LLScriptEdCore::handleKeyHere(KEY key, MASK mask)
return FALSE;
}
+void LLScriptEdCore::onBtnLoadFromFile( void* data )
+{
+
+ LLScriptEdCore* self = (LLScriptEdCore*) data;
+
+ LLFilePicker& file_picker = LLFilePicker::instance();
+ if( !file_picker.getOpenFile( LLFilePicker::FFLOAD_SCRIPT ) )
+ {
+ return;
+ }
+
+ std::string filename = file_picker.getFirstFile();
+
+ std::ifstream fin(filename.c_str());
+
+ std::string line;
+ std::string linetotal;
+ self->mEditor->clear();
+ while (!fin.eof())
+ {
+ getline(fin,line);
+ line=line+"\n";
+ self->mEditor->insertText(line);
+
+ }
+ fin.close();
+}
+
+void LLScriptEdCore::onBtnSaveToFile( void* userdata )
+{
+
+ LLViewerStats::getInstance()->incStat( LLViewerStats::ST_LSL_SAVE_COUNT );
+
+ LLScriptEdCore* self = (LLScriptEdCore*) userdata;
+
+ if( self->mSaveCallback )
+ {
+ LLFilePicker& file_picker = LLFilePicker::instance();
+ if( !file_picker.getSaveFile( LLFilePicker::FFSAVE_SCRIPT ) )
+ {
+ return;
+ }
+
+ std::string filename = file_picker.getFirstFile();
+ std::string scriptText=self->mEditor->getText();
+ std::ofstream fout(filename.c_str());
+ fout<<(scriptText);
+ fout.close();
+ self->mSaveCallback( self->mUserdata, FALSE );
+ }
+}
+
+
/// ---------------------------------------------------------------------------
/// LLScriptEdContainer
/// ---------------------------------------------------------------------------
diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h
index f86be615c4..f50e9322b0 100644
--- a/indra/newview/llpreviewscript.h
+++ b/indra/newview/llpreviewscript.h
@@ -98,6 +98,8 @@ public:
static void onClickForward(void* userdata);
static void onBtnInsertSample(void*);
static void onBtnInsertFunction(LLUICtrl*, void*);
+ static void onBtnLoadFromFile(void*);
+ static void onBtnSaveToFile(void*);
virtual bool hasAccelerators() const { return true; }
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 273bf822bc..56c79f5b9f 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -292,9 +292,10 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterUIPreviewUtil::registerFloater();
LLFloaterReg::add("upload_anim", "floater_animation_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAnimPreview>, "upload");
LLFloaterReg::add("upload_image", "floater_image_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterImagePreview>, "upload");
- LLFloaterReg::add("upload_sound", "floater_sound_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSoundPreview>, "upload");
LLFloaterReg::add("upload_model", "floater_model_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterModelPreview>, "upload");
LLFloaterReg::add("upload_model_wizard", "floater_model_wizard.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterModelWizard>);
+ LLFloaterReg::add("upload_script", "floater_script_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterScriptPreview>, "upload");
+ LLFloaterReg::add("upload_sound", "floater_sound_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSoundPreview>, "upload");
LLFloaterReg::add("voice_controls", "floater_voice_controls.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLCallFloater>);
LLFloaterReg::add("voice_effect", "floater_voice_effect.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterVoiceEffect>);
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index 7e830e14bf..f23d0f6b72 100644
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -87,6 +87,14 @@ class LLFileEnableUpload : public view_listener_t
}
};
+class LLFileEnableUploadScript : public view_listener_t
+{
+ bool handleEvent(const LLSD& userdata)
+ {
+ return true;
+ }
+};
+
class LLFileEnableUploadModel : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
@@ -391,6 +399,20 @@ class LLFileUploadAnim : public view_listener_t
}
};
+class LLFileUploadScript : public view_listener_t
+{
+ bool handleEvent(const LLSD& userdata)
+ {
+ const std::string filename = upload_pick((void*)LLFilePicker::FFLOAD_SCRIPT);
+ if (!filename.empty())
+ {
+ LLFloaterReg::showInstance("upload_script", LLSD(filename));
+ }
+
+ return true;
+ }
+};
+
class LLFileUploadBulk : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 263d961be1..b9605e1ede 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -1101,7 +1101,20 @@
<menu_item_call.on_visible
function="File.VisibleUploadModel"/>
</menu_item_call>
- <menu_item_call
+ <menu_item_call
+ label="Script (L$ 0)..."
+ layout="topleft"
+ name="Upload Script">
+ <menu_item_call.on_click
+ function="File.UploadScript"
+ parameter="" />
+ <menu_item_call.on_enable
+ function="File.EnableUploadScript" />
+ <!--menu_item_call.on_visible
+ function="Upload.CalculateCosts"
+ parameter="Upload Script" /-->
+ </menu_item_call>
+ <menu_item_call
label="Bulk (L$[COST] per file)..."
layout="topleft"
name="Bulk Upload">
diff --git a/indra/newview/skins/default/xui/en/panel_script_ed.xml b/indra/newview/skins/default/xui/en/panel_script_ed.xml
index 8d42024386..f6a8af0973 100644
--- a/indra/newview/skins/default/xui/en/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/en/panel_script_ed.xml
@@ -54,12 +54,22 @@
label="Save"
layout="topleft"
name="Save" />
- <menu_item_separator
- layout="topleft" />
- <menu_item_call
- label="Revert All Changes"
- layout="topleft"
- name="Revert All Changes" />
+ <menu_item_separator
+ layout="topleft" />
+ <menu_item_call
+ label="Revert All Changes"
+ layout="topleft"
+ name="Revert All Changes" />
+ <menu_item_separator
+ layout="topleft" />
+ <menu_item_call
+ label="Load from file..."
+ layout="topleft"
+ name="LoadFromFile" />
+ <menu_item_call
+ label="Save to file..."
+ layout="topleft"
+ name="SaveToFile" />
</menu>
<menu
top="0"