From 369e736e3f0cc5ca043c5f29dfc5193f688a637f Mon Sep 17 00:00:00 2001 From: McCabe Maxsted Date: Wed, 14 Jul 2010 05:37:58 -0700 Subject: Added basic File menu to notecards (save, import, export) and made the script editor File menu consistent with it. TODO: create new notecard format that includes attached inventory --- linden/indra/newview/llfilepicker.cpp | 12 +- linden/indra/newview/llfilepicker.h | 1 + linden/indra/newview/llpreviewnotecard.cpp | 126 ++++++++++++++++++++- linden/indra/newview/llpreviewnotecard.h | 6 + linden/indra/newview/llpreviewscript.cpp | 45 ++++---- linden/indra/newview/llpreviewscript.h | 1 + .../default/xui/en-us/floater_preview_notecard.xml | 6 + .../floater_preview_notecard_keep_discard.xml | 6 + .../default/xui/en-us/floater_script_ed_panel.xml | 14 +-- 9 files changed, 183 insertions(+), 34 deletions(-) (limited to 'linden') diff --git a/linden/indra/newview/llfilepicker.cpp b/linden/indra/newview/llfilepicker.cpp index 7b4caa8..d953e45 100644 --- a/linden/indra/newview/llfilepicker.cpp +++ b/linden/indra/newview/llfilepicker.cpp @@ -329,6 +329,17 @@ BOOL LLFilePicker::getSaveFile(ESaveFilter filter, const std::string& filename) L"Targa, Bitmap Images (*.tga; *.bmp)\0*.tga;*.bmp\0" \ L"\0"; break; + case FFSAVE_LSL: + if (filename.empty()) + { + wcsncpy( mFilesW,L"untitled.lsl", FILENAME_BUFFER_SIZE); /*Flawfinder: ignore*/ + } + mOFN.lpstrDefExt = L"lsl"; + mOFN.lpstrFilter = + L"LSL Files (*.lsl)\0*.lsl\0" + L"Text files (*.txt)\0*.txt\0" + L"\0"; + break; case FFSAVE_TEXT: if (filename.empty()) { @@ -338,7 +349,6 @@ BOOL LLFilePicker::getSaveFile(ESaveFilter filter, const std::string& filename) mOFN.lpstrFilter = L"Text files (*.txt)\0*.txt\0" L"RTF Files (*.rtf)\0*.rtf\0" - L"LSL Files (*.lsl)\0*.lsl\0" L"\0"; break; case FFSAVE_WAV: diff --git a/linden/indra/newview/llfilepicker.h b/linden/indra/newview/llfilepicker.h index 63699b2..fb20ed3 100644 --- a/linden/indra/newview/llfilepicker.h +++ b/linden/indra/newview/llfilepicker.h @@ -113,6 +113,7 @@ public: FFSAVE_JPEG = 14, FFSAVE_HPA = 15, FFSAVE_TEXT = 16, + FFSAVE_LSL = 17 }; // open the dialog. This is a modal operation diff --git a/linden/indra/newview/llpreviewnotecard.cpp b/linden/indra/newview/llpreviewnotecard.cpp index 4260434..be5d801 100644 --- a/linden/indra/newview/llpreviewnotecard.cpp +++ b/linden/indra/newview/llpreviewnotecard.cpp @@ -40,6 +40,7 @@ #include "llassetuploadresponders.h" #include "llviewerwindow.h" #include "llbutton.h" +#include "llfilepicker.h" #include "llfloatersearchreplace.h" #include "llinventorymodel.h" #include "lllineeditor.h" @@ -664,7 +665,23 @@ LLTextEditor* LLPreviewNotecard::getEditor() void LLPreviewNotecard::initMenu() { - LLMenuItemCallGL* menuItem = getChild("Undo"); + // File menu + + LLMenuItemCallGL* menuItem = getChild("Save Menu"); + menuItem->setMenuCallback(onSaveMenu, this); + menuItem->setEnabledCallback(enableSaveMenu); + + menuItem = getChild("Export Text..."); + menuItem->setMenuCallback(onExportTextMenu, this); + menuItem->setEnabledCallback(enableExportTextMenu); + + menuItem = getChild("Import Text..."); + menuItem->setMenuCallback(onImportTextMenu, this); + menuItem->setEnabledCallback(enableImportTextMenu); + + // Edit menu + + menuItem = getChild("Undo"); menuItem->setMenuCallback(onUndoMenu, this); menuItem->setEnabledCallback(enableUndoMenu); @@ -697,6 +714,77 @@ void LLPreviewNotecard::initMenu() menuItem->setEnabledCallback(NULL); } +//static +void LLPreviewNotecard::onSaveMenu(void* userdata) +{ + LLPreviewNotecard* preview = (LLPreviewNotecard*)userdata; + if (preview) + { + preview->saveIfNeeded(); + } +} + +//static +void LLPreviewNotecard::onExportTextMenu(void* userdata) +{ + LLPreviewNotecard* preview = (LLPreviewNotecard*)userdata; + + if (preview) + { + LLViewerTextEditor* editor = preview->getChild("Notecard Editor"); + if (editor) + { + LLFilePicker& file_picker = LLFilePicker::instance(); + const LLViewerInventoryItem *item = preview->getItem(); + if (!file_picker.getSaveFile(LLFilePicker::FFSAVE_TEXT, item ? LLDir::getScrubbedFileName(item->getName()) : LLStringUtil::null)) + { + return; + } + + std::string filename = file_picker.getFirstFile(); + std::string scriptText = editor->getText(); + std::ofstream fout(filename.c_str()); + fout << scriptText; + fout.close(); + } + } +} + +//static +void LLPreviewNotecard::onImportTextMenu(void* userdata) +{ + LLPreviewNotecard* preview = (LLPreviewNotecard*)userdata; + + if (preview) + { + LLViewerTextEditor* editor = preview->getChild("Notecard Editor"); + if (editor) + { + LLFilePicker& file_picker = LLFilePicker::instance(); + if (!file_picker.getOpenFile(LLFilePicker::FFLOAD_TEXT)) + { + return; + } + + std::string filename = file_picker.getFirstFile(); + std::ifstream fin(filename.c_str()); + + editor->clear(); + + std::string line; + while (!fin.eof()) + { + getline(fin, line); + line = line + "\n"; + editor->insertText(line); + } + fin.close(); + + preview->saveIfNeeded(); + } + } +} + // static void LLPreviewNotecard::onSearchMenu(void* userdata) { @@ -809,6 +897,42 @@ void LLPreviewNotecard::onDeselectMenu(void* userdata) } } +//static +BOOL LLPreviewNotecard::enableSaveMenu(void* userdata) +{ + LLPreviewNotecard* self = (LLPreviewNotecard*)userdata; + if (!self) return FALSE; + LLViewerTextEditor* editor = self->getChild("Notecard Editor"); + if (!editor) return FALSE; + return !editor->isPristine(); +} + +//static +BOOL LLPreviewNotecard::enableExportTextMenu(void* userdata) +{ + LLPreviewNotecard* self = (LLPreviewNotecard*)userdata; + if (!self) return FALSE; + LLViewerTextEditor* editor = self->getChild("Notecard Editor"); + if (!editor) return FALSE; + + // request the asset + const LLInventoryItem* item = self->getItem(); + return (item && (gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), GP_OBJECT_MANIPULATE) || gAgent.isGodlike())); +} + +//static +BOOL LLPreviewNotecard::enableImportTextMenu(void* userdata) +{ + LLPreviewNotecard* self = (LLPreviewNotecard*)userdata; + if (!self) return FALSE; + LLViewerTextEditor* editor = self->getChild("Notecard Editor"); + if (!editor) return FALSE; + + // request the asset + const LLInventoryItem* item = self->getItem(); + return (item && (gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), GP_OBJECT_MANIPULATE) || gAgent.isGodlike())); +} + // static BOOL LLPreviewNotecard::enableUndoMenu(void* userdata) { diff --git a/linden/indra/newview/llpreviewnotecard.h b/linden/indra/newview/llpreviewnotecard.h index a879fec..e3129ec 100644 --- a/linden/indra/newview/llpreviewnotecard.h +++ b/linden/indra/newview/llpreviewnotecard.h @@ -112,6 +112,9 @@ protected: void initMenu(); + static void onSaveMenu(void* userdata); + static void onExportTextMenu(void* userdata); + static void onImportTextMenu(void* userdata); static void onSearchMenu(void* userdata); static void onUndoMenu(void* userdata); static void onRedoMenu(void* userdata); @@ -121,6 +124,9 @@ protected: static void onSelectAllMenu(void* userdata); static void onDeselectMenu(void* userdata); + static BOOL enableSaveMenu(void* userdata); + static BOOL enableExportTextMenu(void* userdata); + static BOOL enableImportTextMenu(void* userdata); static BOOL enableUndoMenu(void* userdata); static BOOL enableRedoMenu(void* userdata); static BOOL enableCutMenu(void* userdata); diff --git a/linden/indra/newview/llpreviewscript.cpp b/linden/indra/newview/llpreviewscript.cpp index d200e32..c77f7ff 100644 --- a/linden/indra/newview/llpreviewscript.cpp +++ b/linden/indra/newview/llpreviewscript.cpp @@ -294,11 +294,11 @@ void LLScriptEdCore::initMenu() menuItem->setMenuCallback(onBtnHelp, this); menuItem->setEnabledCallback(NULL); - menuItem = getChild("Load from Disk"); + menuItem = getChild("Import Script..."); menuItem->setMenuCallback(onBtnLoadFromDisc, this); menuItem->setEnabledCallback(NULL); - menuItem = getChild("Save to Disk"); + menuItem = getChild("Export Script..."); menuItem->setMenuCallback(onBtnSaveToDisc, this); menuItem->setEnabledCallback(NULL); @@ -732,36 +732,34 @@ void LLScriptEdCore::onBtnUndoChanges( void* userdata ) void LLScriptEdCore::onBtnSaveToDisc( void* userdata ) { - LLViewerStats::getInstance()->incStat( LLViewerStats::ST_LSL_SAVE_COUNT ); - LLScriptEdCore* self = (LLScriptEdCore*) userdata; + LLScriptEdCore* self = (LLScriptEdCore*) userdata; - if( self->mSaveCallback ) - { - LLFilePicker& file_picker = LLFilePicker::instance(); - if( !file_picker.getSaveFile( LLFilePicker::FFSAVE_TEXT ) ) + if (self->mSaveCallback) { - return; - } - + LLFilePicker& file_picker = LLFilePicker::instance(); + const LLViewerInventoryItem *item = ((LLPreviewLSL*)self->getParent())->getItem(); + if (!file_picker.getSaveFile(LLFilePicker::FFSAVE_LSL, item ? LLDir::getScrubbedFileName(item->getName()) : LLStringUtil::null)) + { + 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 ); - - } - + std::string scriptText=self->mEditor->getText(); + std::ofstream fout(filename.c_str()); + fout << scriptText; + fout.close(); + self->mSaveCallback(self->mUserdata, FALSE); + } } + void LLScriptEdCore::onBtnLoadFromDisc( void* data ) { - LLScriptEdCore* self = (LLScriptEdCore*) data; LLFilePicker& file_picker = LLFilePicker::instance(); - if( !file_picker.getOpenFile( LLFilePicker::FFLOAD_TEXT ) ) + if (!file_picker.getOpenFile(LLFilePicker::FFLOAD_TEXT)) { return; } @@ -771,17 +769,14 @@ void LLScriptEdCore::onBtnLoadFromDisc( void* data ) std::ifstream fin(filename.c_str()); std::string line; - std::string linetotal; self->mEditor->clear(); while (!fin.eof()) { getline(fin,line); - line=line+"\n"; + line = line + "\n"; self->mEditor->insertText(line); - } fin.close(); - } void LLScriptEdCore::onSearchMenu(void* userdata) diff --git a/linden/indra/newview/llpreviewscript.h b/linden/indra/newview/llpreviewscript.h index 0d5c300..8e61435 100644 --- a/linden/indra/newview/llpreviewscript.h +++ b/linden/indra/newview/llpreviewscript.h @@ -138,6 +138,7 @@ protected: private: std::string mSampleText; std::string mHelpURL; + std::string mScriptTitle; LLTextEditor* mEditor; void (*mLoadCallback)(void* userdata); void (*mSaveCallback)(void* userdata, BOOL close_after_save); diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_preview_notecard.xml b/linden/indra/newview/skins/default/xui/en-us/floater_preview_notecard.xml index ed26e11..a625598 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_preview_notecard.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_preview_notecard.xml @@ -20,6 +20,12 @@ + + + + + + + + + + + + - - + + - - - -- cgit v1.1