aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornyamatongwe <unknown>2001-12-20 02:29:36 +0000
committernyamatongwe <unknown>2001-12-20 02:29:36 +0000
commit4eefbc39519d93c5c2857ccd61299909d021c640 (patch)
tree88d99ad316492def0de5e7a72da7916842bebb09
parentacfe7e573b8f6d875324ffc4011575200dcd0f47 (diff)
downloadscintilla-mirror-4eefbc39519d93c5c2857ccd61299909d021c640.tar.gz
Added changeable attribute to styles that defaults to true. When it is
false, text in this style is read only.
-rw-r--r--include/Scintilla.h1
-rw-r--r--include/Scintilla.iface3
-rw-r--r--src/Editor.cxx10
-rw-r--r--src/Style.cxx15
-rw-r--r--src/Style.h5
-rw-r--r--src/ViewStyle.cxx2
6 files changed, 27 insertions, 9 deletions
diff --git a/include/Scintilla.h b/include/Scintilla.h
index 20c5f267a..2a51f84f6 100644
--- a/include/Scintilla.h
+++ b/include/Scintilla.h
@@ -205,6 +205,7 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_SETCARETLINEVISIBLE 2096
#define SCI_GETCARETLINEBACK 2097
#define SCI_SETCARETLINEBACK 2098
+#define SCI_STYLESETCHANGEABLE 2099
#define SCI_AUTOCSHOW 2100
#define SCI_AUTOCCANCEL 2101
#define SCI_AUTOCACTIVE 2102
diff --git a/include/Scintilla.iface b/include/Scintilla.iface
index 9e30673d7..d83c71321 100644
--- a/include/Scintilla.iface
+++ b/include/Scintilla.iface
@@ -472,6 +472,9 @@ get colour GetCaretLineBack=2097(,)
# Set the colour of the background of the line containing the caret.
set void SetCaretLineBack=2098(colour back,)
+# Set a style to be changeable or not (read only).
+set void StyleSetChangeable=2099(int style, bool changeable)
+
# Display a auto-completion list.
# The lenEntered parameter indicates how many characters before
# the caret should be used to provide context.
diff --git a/src/Editor.cxx b/src/Editor.cxx
index 1f7588a28..439e1388d 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -549,11 +549,11 @@ int Editor::MovePositionOutsideChar(int pos, int moveDir, bool checkLineEnd) {
int mask = pdoc->stylingBitsMask;
if (moveDir > 0) {
while ((pos < pdoc->Length()) &&
- (!vs.styles[pdoc->StyleAt(pos - 1) & mask].visible))
+ (vs.styles[pdoc->StyleAt(pos - 1) & mask].IsProtected()))
pos++;
} else {
while ((pos > 0) &&
- (!vs.styles[pdoc->StyleAt(pos - 1) & mask].visible))
+ (vs.styles[pdoc->StyleAt(pos - 1) & mask].IsProtected()))
pos--;
}
return pos;
@@ -4542,6 +4542,12 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
InvalidateStyleRedraw();
}
break;
+ case SCI_STYLESETCHANGEABLE:
+ if (wParam <= STYLE_MAX) {
+ vs.styles[wParam].changeable = lParam;
+ InvalidateStyleRedraw();
+ }
+ break;
case SCI_STYLERESETDEFAULT:
vs.ResetDefaultStyle();
diff --git a/src/Style.cxx b/src/Style.cxx
index 5989dae80..2ee09f57d 100644
--- a/src/Style.cxx
+++ b/src/Style.cxx
@@ -16,13 +16,13 @@ Style::Style() {
aliasOfDefaultFont = true;
Clear(ColourDesired(0, 0, 0), ColourDesired(0xff, 0xff, 0xff),
Platform::DefaultFontSize(), 0, SC_CHARSET_DEFAULT,
- false, false, false, false, caseMixed, true);
+ false, false, false, false, caseMixed, true, true);
}
Style::Style(const Style &source) {
Clear(ColourDesired(0, 0, 0), ColourDesired(0xff, 0xff, 0xff),
0, 0, 0,
- false, false, false, false, caseMixed, true);
+ false, false, false, false, caseMixed, true, true);
fore.desired = source.fore.desired;
back.desired = source.back.desired;
characterSet = source.characterSet;
@@ -33,6 +33,7 @@ Style::Style(const Style &source) {
underline = source.underline;
caseForce = source.caseForce;
visible = source.visible;
+ changeable = source.changeable;
}
Style::~Style() {
@@ -48,7 +49,7 @@ Style &Style::operator=(const Style &source) {
return * this;
Clear(ColourDesired(0, 0, 0), ColourDesired(0xff, 0xff, 0xff),
0, 0, SC_CHARSET_DEFAULT,
- false, false, false, false, caseMixed, true);
+ false, false, false, false, caseMixed, true, true);
fore.desired = source.fore.desired;
back.desired = source.back.desired;
characterSet = source.characterSet;
@@ -59,13 +60,15 @@ Style &Style::operator=(const Style &source) {
underline = source.underline;
caseForce = source.caseForce;
visible = source.visible;
+ changeable = source.changeable;
return *this;
}
void Style::Clear(ColourDesired fore_, ColourDesired back_, int size_,
const char *fontName_, int characterSet_,
bool bold_, bool italic_, bool eolFilled_,
- bool underline_, ecaseForced caseForce_, bool visible_) {
+ bool underline_, ecaseForced caseForce_,
+ bool visible_, bool changeable_) {
fore.desired = fore_;
back.desired = back_;
characterSet = characterSet_;
@@ -77,6 +80,7 @@ void Style::Clear(ColourDesired fore_, ColourDesired back_, int size_,
underline = underline_;
caseForce = caseForce_;
visible = visible_;
+ changeable = changeable_;
if (aliasOfDefaultFont)
font.SetID(0);
else
@@ -96,7 +100,8 @@ void Style::ClearTo(const Style &source) {
source.eolFilled,
source.underline,
source.caseForce,
- source.visible);
+ source.visible,
+ source.changeable);
}
bool Style::EquivalentFontTo(const Style *other) const {
diff --git a/src/Style.h b/src/Style.h
index 17d32ac33..63259b1a9 100644
--- a/src/Style.h
+++ b/src/Style.h
@@ -25,6 +25,7 @@ public:
enum ecaseForced {caseMixed, caseUpper, caseLower};
ecaseForced caseForce;
bool visible;
+ bool changeable;
Font font;
int sizeZoomed;
@@ -43,10 +44,12 @@ public:
int size_,
const char *fontName_, int characterSet_,
bool bold_, bool italic_, bool eolFilled_,
- bool underline_, ecaseForced caseForce_, bool visible_);
+ bool underline_, ecaseForced caseForce_,
+ bool visible_, bool changeable_);
void ClearTo(const Style &source);
bool EquivalentFontTo(const Style *other) const;
void Realise(Surface &surface, int zoomLevel, Style *defaultStyle = 0);
+ bool IsProtected() { return !(changeable && visible);} ;
};
#endif
diff --git a/src/ViewStyle.cxx b/src/ViewStyle.cxx
index 40615da65..7937e1fca 100644
--- a/src/ViewStyle.cxx
+++ b/src/ViewStyle.cxx
@@ -219,7 +219,7 @@ void ViewStyle::ResetDefaultStyle() {
ColourDesired(0xff,0xff,0xff),
Platform::DefaultFontSize(), fontNames.Save(Platform::DefaultFont()),
SC_CHARSET_DEFAULT,
- false, false, false, false, Style::caseMixed, true);
+ false, false, false, false, Style::caseMixed, true, true);
}
void ViewStyle::ClearStyles() {