Refactor more script editor properties away from LLTextEditor to LLScriptEditor

master
Cinder 2014-05-14 14:08:24 -06:00
parent c073bad6b2
commit e776b600b1
7 changed files with 106 additions and 90 deletions

View File

@ -75,8 +75,6 @@ template class LLTextEditor* LLView::getChild<class LLTextEditor>(
//
// Constants
//
const S32 UI_TEXTEDITOR_LINE_NUMBER_MARGIN = 32;
const S32 UI_TEXTEDITOR_LINE_NUMBER_DIGITS = 4;
const S32 SPACES_PER_TAB = 4;
const F32 SPELLCHECK_DELAY = 0.5f; // delay between the last keypress and spell checking the word the cursor is on
@ -236,7 +234,6 @@ LLTextEditor::Params::Params()
prevalidate_callback("prevalidate_callback"),
embedded_items("embedded_items", false),
ignore_tab("ignore_tab", true),
show_line_numbers("show_line_numbers", false),
auto_indent("auto_indent", true),
default_color("default_color"),
commit_on_focus_lost("commit_on_focus_lost", false),
@ -252,8 +249,7 @@ LLTextEditor::LLTextEditor(const LLTextEditor::Params& p) :
mBaseDocIsPristine(TRUE),
mPristineCmd( NULL ),
mLastCmd( NULL ),
mDefaultColor( p.default_color() ),
mShowLineNumbers ( p.show_line_numbers ),
mDefaultColor( p.default_color() ),
mAutoIndent(p.auto_indent),
mCommitOnFocusLost( p.commit_on_focus_lost),
mAllowEmbeddedItems( p.embedded_items ),
@ -277,14 +273,7 @@ LLTextEditor::LLTextEditor(const LLTextEditor::Params& p) :
params.visible = p.border_visible;
mBorder = LLUICtrlFactory::create<LLViewBorder> (params);
addChild( mBorder );
setText(p.default_text());
if (mShowLineNumbers)
{
mHPad += UI_TEXTEDITOR_LINE_NUMBER_MARGIN;
updateRects();
}
mParseOnTheFly = TRUE;
}
@ -2196,69 +2185,6 @@ void LLTextEditor::drawPreeditMarker()
}
}
void LLTextEditor::drawLineNumbers()
{
LLGLSUIDefault gls_ui;
LLRect scrolled_view_rect = getVisibleDocumentRect();
LLRect content_rect = getVisibleTextRect();
LLLocalClipRect clip(content_rect);
S32 first_line = getFirstVisibleLine();
S32 num_lines = getLineCount();
if (first_line >= num_lines)
{
return;
}
S32 cursor_line = mLineInfoList[getLineNumFromDocIndex(mCursorPos)].mLineNum;
if (mShowLineNumbers)
{
S32 left = 0;
S32 top = getRect().getHeight();
S32 bottom = 0;
gl_rect_2d(left, top, UI_TEXTEDITOR_LINE_NUMBER_MARGIN, bottom, mReadOnlyBgColor.get() ); // line number area always read-only
gl_rect_2d(UI_TEXTEDITOR_LINE_NUMBER_MARGIN, top, UI_TEXTEDITOR_LINE_NUMBER_MARGIN-1, bottom, LLColor4::grey3); // separator
S32 last_line_num = -1;
for (S32 cur_line = first_line; cur_line < num_lines; cur_line++)
{
line_info& line = mLineInfoList[cur_line];
if ((line.mRect.mTop - scrolled_view_rect.mBottom) < mVisibleTextRect.mBottom)
{
break;
}
S32 line_bottom = line.mRect.mBottom - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom;
// draw the line numbers
if(line.mLineNum != last_line_num && line.mRect.mTop <= scrolled_view_rect.mTop)
{
const LLFontGL *num_font = LLFontGL::getFontMonospace();
const LLWString ltext = utf8str_to_wstring(llformat("%d", line.mLineNum ));
BOOL is_cur_line = cursor_line == line.mLineNum;
const U8 style = is_cur_line ? LLFontGL::BOLD : LLFontGL::NORMAL;
const LLColor4 fg_color = is_cur_line ? mCursorColor : mReadOnlyFgColor;
num_font->render(
ltext, // string to draw
0, // begin offset
UI_TEXTEDITOR_LINE_NUMBER_MARGIN - 2, // x
line_bottom, // y
fg_color,
LLFontGL::RIGHT, // horizontal alignment
LLFontGL::BOTTOM, // vertical alignment
style,
LLFontGL::NO_SHADOW,
S32_MAX, // max chars
UI_TEXTEDITOR_LINE_NUMBER_MARGIN - 2); // max pixels
last_line_num = line.mLineNum;
}
}
}
}
void LLTextEditor::draw()
{
{
@ -2270,7 +2196,6 @@ void LLTextEditor::draw()
}
LLTextBase::draw();
drawLineNumbers();
drawPreeditMarker();

View File

@ -58,7 +58,6 @@ public:
Optional<bool> embedded_items,
ignore_tab,
show_line_numbers,
commit_on_focus_lost,
show_context_menu,
enable_tooltip_paste,
@ -279,11 +278,11 @@ protected:
protected:
LLUIColor mDefaultColor;
BOOL mShowLineNumbers;
bool mAutoIndent;
bool mParseOnTheFly;
void updateLinkSegments();
class LLViewBorder* mBorder;
private:
//
@ -293,8 +292,6 @@ private:
void cleanStringForPaste(LLWString & clean_string);
void pasteTextWithLinebreaks(LLWString & clean_string);
void drawLineNumbers();
void onKeyStroke();
// Concrete TextCmd sub-classes used by the LLTextEditor base class
@ -303,8 +300,6 @@ private:
class TextCmdOverwriteChar;
class TextCmdRemove;
class LLViewBorder* mBorder;
BOOL mBaseDocIsPristine;
TextCmd* mPristineCmd;

View File

@ -25,8 +25,8 @@
* $/LicenseInfo$
*/
#ifndef LLFLOATERSCRIPTEDPREFS_H
#define LLFLOATERSCRIPTEDPREFS_H
#ifndef LL_FLOATERSCRIPTEDPREFS_H
#define LL_FLOATERSCRIPTEDPREFS_H
#include "llfloater.h"

View File

@ -29,19 +29,109 @@
#include "llscripteditor.h"
#include "llsyntaxid.h"
#include "lllocalcliprect.h"
const S32 UI_TEXTEDITOR_LINE_NUMBER_MARGIN = 32;
const S32 UI_TEXTEDITOR_LINE_NUMBER_DIGITS = 4;
static LLDefaultChildRegistry::Register<LLScriptEditor> r("script_editor");
LLScriptEditor::Params::Params()
{
}
: show_line_numbers("show_line_numbers", true)
{}
LLScriptEditor::LLScriptEditor(const Params& p)
: LLTextEditor(p)
, mShowLineNumbers(p.show_line_numbers)
{
if (mShowLineNumbers)
{
mHPad += UI_TEXTEDITOR_LINE_NUMBER_MARGIN;
updateRects();
}
}
void LLScriptEditor::draw()
{
{
// pad clipping rectangle so that cursor can draw at full width
// when at left edge of mVisibleTextRect
LLRect clip_rect(mVisibleTextRect);
clip_rect.stretch(1);
LLLocalClipRect clip(clip_rect);
}
LLTextBase::draw();
drawLineNumbers();
drawPreeditMarker();
//RN: the decision was made to always show the orange border for keyboard focus but do not put an insertion caret
// when in readonly mode
mBorder->setKeyboardFocusHighlight( hasFocus() );// && !mReadOnly);
}
void LLScriptEditor::drawLineNumbers()
{
LLGLSUIDefault gls_ui;
LLRect scrolled_view_rect = getVisibleDocumentRect();
LLRect content_rect = getVisibleTextRect();
LLLocalClipRect clip(content_rect);
S32 first_line = getFirstVisibleLine();
S32 num_lines = getLineCount();
if (first_line >= num_lines)
{
return;
}
S32 cursor_line = mLineInfoList[getLineNumFromDocIndex(mCursorPos)].mLineNum;
if (mShowLineNumbers)
{
S32 left = 0;
S32 top = getRect().getHeight();
S32 bottom = 0;
gl_rect_2d(left, top, UI_TEXTEDITOR_LINE_NUMBER_MARGIN, bottom, mReadOnlyBgColor.get() ); // line number area always read-only
gl_rect_2d(UI_TEXTEDITOR_LINE_NUMBER_MARGIN, top, UI_TEXTEDITOR_LINE_NUMBER_MARGIN-1, bottom, LLColor4::grey3); // separator
S32 last_line_num = -1;
for (S32 cur_line = first_line; cur_line < num_lines; cur_line++)
{
line_info& line = mLineInfoList[cur_line];
if ((line.mRect.mTop - scrolled_view_rect.mBottom) < mVisibleTextRect.mBottom)
{
break;
}
S32 line_bottom = line.mRect.mBottom - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom;
// draw the line numbers
if(line.mLineNum != last_line_num && line.mRect.mTop <= scrolled_view_rect.mTop)
{
const LLFontGL *num_font = LLFontGL::getFontMonospace();
const LLWString ltext = utf8str_to_wstring(llformat("%d", line.mLineNum ));
BOOL is_cur_line = cursor_line == line.mLineNum;
const U8 style = is_cur_line ? LLFontGL::BOLD : LLFontGL::NORMAL;
const LLColor4 fg_color = is_cur_line ? mCursorColor : mReadOnlyFgColor;
num_font->render(
ltext, // string to draw
0, // begin offset
UI_TEXTEDITOR_LINE_NUMBER_MARGIN - 2, // x
line_bottom, // y
fg_color,
LLFontGL::RIGHT, // horizontal alignment
LLFontGL::BOTTOM, // vertical alignment
style,
LLFontGL::NO_SHADOW,
S32_MAX, // max chars
UI_TEXTEDITOR_LINE_NUMBER_MARGIN - 2); // max pixels
last_line_num = line.mLineNum;
}
}
}
}
void LLScriptEditor::initKeywords()

View File

@ -36,10 +36,16 @@ public:
struct Params : public LLInitParam::Block<Params, LLTextEditor::Params>
{
Optional<bool> show_line_numbers;
Params();
};
virtual ~LLScriptEditor() {};
// LLView override
virtual void draw();
void initKeywords();
void loadKeywords();
void clearSegments();
@ -51,11 +57,13 @@ protected:
LLScriptEditor(const Params& p);
private:
void drawLineNumbers();
void updateSegments();
void loadKeywords(const std::string& filename_keywords,
const std::string& filename_colors);
LLKeywords mKeywords;
bool mShowLineNumbers;
};
#endif // LL_SCRIPTEDITOR_H

View File

@ -464,7 +464,6 @@
bg_readonly_color="ScriptBackground"
bg_selected_color="ScriptSelectedColor"
cursor_color="ScriptCursorColor"
show_line_numbers="true"
enable_tooltip_paste="true"
word_wrap="true">
default

View File

@ -172,8 +172,7 @@
width="487"
enable_tooltip_paste="true"
word_wrap="true"
show_context_menu="true"
show_line_numbers="true">
show_context_menu="true">
Loading...
</script_editor>
<scroll_list