diff options
| author | Oz Linden <oz@lindenlab.com> | 2013-03-25 10:53:37 -0400 | 
|---|---|---|
| committer | Oz Linden <oz@lindenlab.com> | 2013-03-25 10:53:37 -0400 | 
| commit | 6f2fef886e160d3378a0cf353a7db7eff707e9bf (patch) | |
| tree | f57d04817842688f1171d17b507a749ef046447b | |
| parent | 1057caffaf24790be26376b2794059e7635dde7b (diff) | |
| parent | 005cd4024794752e0cd57714656f76a8208d3105 (diff) | |
merge changes for storm-1911
| -rw-r--r-- | doc/contributions.txt | 1 | ||||
| -rw-r--r-- | indra/newview/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | indra/newview/llfloatergotoline.cpp | 160 | ||||
| -rw-r--r-- | indra/newview/llfloatergotoline.h | 66 | ||||
| -rw-r--r-- | indra/newview/llpreviewscript.cpp | 21 | ||||
| -rw-r--r-- | indra/newview/llpreviewscript.h | 3 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_goto_line.xml | 44 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_script_ed.xml | 4 | 
8 files changed, 301 insertions, 0 deletions
| diff --git a/doc/contributions.txt b/doc/contributions.txt index 1fbde16a47..770b04e805 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -757,6 +757,7 @@ Marine Kelley  MartinRJ Fayray      STORM-1844      STORM-1845 +    STORM-1911      STORM-1934  Matthew Anthony  Matthew Dowd diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index bd0169fb2f..5d2ebc2fc4 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -218,6 +218,7 @@ set(viewer_SOURCE_FILES      llfloaterfonttest.cpp      llfloatergesture.cpp      llfloatergodtools.cpp +    llfloatergotoline.cpp      llfloatergroupinvite.cpp      llfloatergroups.cpp      llfloaterhandler.cpp @@ -806,6 +807,7 @@ set(viewer_HEADER_FILES      llfloaterfonttest.h      llfloatergesture.h      llfloatergodtools.h +    llfloatergotoline.h      llfloatergroupinvite.h      llfloatergroups.h      llfloaterhandler.h diff --git a/indra/newview/llfloatergotoline.cpp b/indra/newview/llfloatergotoline.cpp new file mode 100644 index 0000000000..d66e418926 --- /dev/null +++ b/indra/newview/llfloatergotoline.cpp @@ -0,0 +1,160 @@ +/** + * @file llfloatergotoline.h + * @author MartinRJ + * @brief LLFloaterGotoLine class implementation + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, 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$ + */ + +#include "llviewerprecompiledheaders.h" +#include "llfloatergotoline.h" +#include "llpreviewscript.h" +#include "llfloaterreg.h" +#include "lllineeditor.h" +#include "llviewertexteditor.h" +#include "llviewerwindow.h" + +LLFloaterGotoLine* LLFloaterGotoLine::sInstance = NULL; + +LLFloaterGotoLine::LLFloaterGotoLine(LLScriptEdCore* editor_core) +:       LLFloater(LLSD()), +        mGotoBox(NULL), +        mEditorCore(editor_core) +{ +        buildFromFile("floater_goto_line.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 LLFloaterGotoLine::postBuild() +{ +	mGotoBox = getChild<LLLineEditor>("goto_line"); +	mGotoBox->setCommitCallback(boost::bind(&LLFloaterGotoLine::onGotoBoxCommit, this)); +	mGotoBox->setCommitOnFocusLost(FALSE); +        getChild<LLLineEditor>("goto_line")->setPrevalidate(LLTextValidate::validateNonNegativeS32); +        childSetAction("goto_btn", onBtnGoto,this); +        setDefaultBtn("goto_btn"); + +        return TRUE; +} + +//static  +void LLFloaterGotoLine::show(LLScriptEdCore* editor_core) +{ +        if (sInstance && sInstance->mEditorCore && sInstance->mEditorCore != editor_core) +        { +                sInstance->closeFloater(); +                delete sInstance; +        } + +        if (!sInstance) +        { +                // sInstance will be assigned in the constructor. +                new LLFloaterGotoLine(editor_core); +        } + +        sInstance->openFloater(); +} + +LLFloaterGotoLine::~LLFloaterGotoLine() +{ +        sInstance = NULL; +} + +// static  +void LLFloaterGotoLine::onBtnGoto(void *userdata) +{ +        LLFloaterGotoLine* self = (LLFloaterGotoLine*)userdata; +        self->handleBtnGoto(); +} + +void LLFloaterGotoLine::handleBtnGoto() +{ +        S32 row = 0; +        S32 column = 0; +        row = getChild<LLUICtrl>("goto_line")->getValue().asInteger(); +        if (row >= 0) +        { +                if (mEditorCore && mEditorCore->mEditor) +                { +			mEditorCore->mEditor->deselect(); +			mEditorCore->mEditor->setCursor(row, column); +			mEditorCore->mEditor->setFocus(TRUE); +                } +        } +} + +bool LLFloaterGotoLine::hasAccelerators() const +{ +        if (mEditorCore) +        { +                return mEditorCore->hasAccelerators(); +        } +        return FALSE; +} + +BOOL LLFloaterGotoLine::handleKeyHere(KEY key, MASK mask) +{ +        if (mEditorCore) +        { +                return mEditorCore->handleKeyHere(key, mask); +        } + +        return FALSE; +} + +void LLFloaterGotoLine::onGotoBoxCommit() +{ +        S32 row = 0; +        S32 column = 0; +        row = getChild<LLUICtrl>("goto_line")->getValue().asInteger(); +        if (row >= 0) +        { +                if (mEditorCore && mEditorCore->mEditor) +                { +			mEditorCore->mEditor->setCursor(row, column); + +			S32 rownew = 0; +			S32 columnnew = 0; +			mEditorCore->mEditor->getCurrentLineAndColumn( &rownew, &columnnew, FALSE );  // don't include wordwrap +			if (rownew == row && columnnew == column) +			{ +			        mEditorCore->mEditor->deselect(); +			        mEditorCore->mEditor->setFocus(TRUE); +			        sInstance->closeFloater(); +			} //else do nothing (if the cursor-position didn't change) +                } +        } +} diff --git a/indra/newview/llfloatergotoline.h b/indra/newview/llfloatergotoline.h new file mode 100644 index 0000000000..058d601752 --- /dev/null +++ b/indra/newview/llfloatergotoline.h @@ -0,0 +1,66 @@ +/** + * @file llfloatergotoline.h + * @author MartinRJ + * @brief LLFloaterGotoLine class definition + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, 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$ + */ + +#ifndef LL_LLFLOATERGOTOLINE_H +#define LL_LLFLOATERGOTOLINE_H + +#include "llfloater.h" +#include "lllineeditor.h" +#include "llpreviewscript.h" + +class LLScriptEdCore; + +class LLFloaterGotoLine : public LLFloater +{ +public: +        LLFloaterGotoLine(LLScriptEdCore* editor_core); +        ~LLFloaterGotoLine(); + +        /*virtual*/     BOOL    postBuild(); +        static void show(LLScriptEdCore* editor_core); + +        static void onBtnGoto(void* userdata); +        void handleBtnGoto(); + +        LLScriptEdCore* getEditorCore() { return mEditorCore; } +        static LLFloaterGotoLine* getInstance() { return sInstance; } + +        virtual bool hasAccelerators() const; +        virtual BOOL handleKeyHere(KEY key, MASK mask); + +private: + +        LLScriptEdCore* mEditorCore; + +        static LLFloaterGotoLine*       sInstance; + +protected: +	LLLineEditor*			mGotoBox; +        void onGotoBoxCommit(); +}; + +#endif  // LL_LLFLOATERGOTOLINE_H diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 968a912ea2..e533be7f24 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -86,6 +86,7 @@  #include "lltrans.h"  #include "llviewercontrol.h"  #include "llappviewer.h" +#include "llfloatergotoline.h"  const std::string HELLO_LSL =  	"default\n" @@ -193,12 +194,17 @@ private:  	LLScriptEdCore* mEditorCore;  	static LLFloaterScriptSearch*	sInstance; + +protected: +	LLLineEditor*			mSearchBox; +        void onSearchBoxCommit();  };  LLFloaterScriptSearch* LLFloaterScriptSearch::sInstance = NULL;  LLFloaterScriptSearch::LLFloaterScriptSearch(LLScriptEdCore* editor_core)  :	LLFloater(LLSD()), +	mSearchBox(NULL),  	mEditorCore(editor_core)  {  	buildFromFile("floater_script_search.xml"); @@ -221,6 +227,9 @@ LLFloaterScriptSearch::LLFloaterScriptSearch(LLScriptEdCore* editor_core)  BOOL LLFloaterScriptSearch::postBuild()  { +	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); @@ -315,6 +324,15 @@ BOOL LLFloaterScriptSearch::handleKeyHere(KEY key, MASK mask)  	return FALSE;  } +void LLFloaterScriptSearch::onSearchBoxCommit() +{ +	if (mEditorCore && mEditorCore->mEditor) +	{ +		LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text"); +		mEditorCore->mEditor->selectNext(getChild<LLUICtrl>("search_text")->getValue().asString(), caseChk->get()); +	} +} +  /// ---------------------------------------------------------------------------  /// LLScriptEdCore  /// --------------------------------------------------------------------------- @@ -503,6 +521,9 @@ void LLScriptEdCore::initMenu()  	menuItem = getChild<LLMenuItemCallGL>("Search / Replace...");  	menuItem->setClickCallback(boost::bind(&LLFloaterScriptSearch::show, this)); +	menuItem = getChild<LLMenuItemCallGL>("Go to line..."); +	menuItem->setClickCallback(boost::bind(&LLFloaterGotoLine::show, this)); +  	menuItem = getChild<LLMenuItemCallGL>("Help...");  	menuItem->setClickCallback(boost::bind(&LLScriptEdCore::onBtnHelp, this)); diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h index 7563cecd9d..9fb0a4fb63 100644 --- a/indra/newview/llpreviewscript.h +++ b/indra/newview/llpreviewscript.h @@ -34,6 +34,7 @@  #include "llcombobox.h"  #include "lliconctrl.h"  #include "llframetimer.h" +#include "llfloatergotoline.h"  class LLLiveLSLFile;  class LLMessageSystem; @@ -49,6 +50,7 @@ class LLKeywordToken;  class LLVFS;  class LLViewerInventoryItem;  class LLScriptEdContainer; +class LLFloaterGotoLine;  // Inner, implementation class.  LLPreviewScript and LLLiveLSLEditor each own one of these.  class LLScriptEdCore : public LLPanel @@ -58,6 +60,7 @@ class LLScriptEdCore : public LLPanel  	friend class LLLiveLSLEditor;  	friend class LLFloaterScriptSearch;  	friend class LLScriptEdContainer; +	friend class LLFloaterGotoLine;  protected:  	// Supposed to be invoked only by the container. diff --git a/indra/newview/skins/default/xui/en/floater_goto_line.xml b/indra/newview/skins/default/xui/en/floater_goto_line.xml new file mode 100644 index 0000000000..b236888219 --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_goto_line.xml @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater + legacy_header_height="18" + default_tab_group="1" + height="90" + layout="topleft" + name="script goto" + help_topic="script_goto" + title="GO TO LINE" + width="200"> +    <button +     height="24" +     label="OK" +     label_selected="OK" +     layout="topleft" +     left="55" +     name="goto_btn" +     top="53" +     width="90" /> +    <text +     type="string" +     length="1" +     follows="left|top" +     height="16" +     layout="topleft" +     left="10" +     name="txt" +     top="21" +     width="65"> +        Go to line +    </text> +    <line_editor +     border_style="line" +     border_thickness="1" +     follows="left|top" +     height="16" +     layout="topleft" +     left="75" +     max_length_bytes="9" +     name="goto_line" +     tab_group="1" +     top="21" +     width="85" /> +</floater>
\ No newline at end of file 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 765b07ed8b..bcdef96138 100644 --- a/indra/newview/skins/default/xui/en/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/en/panel_script_ed.xml @@ -125,6 +125,10 @@               label="Search / Replace..."               layout="topleft"               name="Search / Replace..." /> +            <menu_item_call +             label="Go to line..." +             layout="topleft" +             name="Go to line..." />          </menu>          <menu           top="0" | 
