View in color | License | Download script | History |
30-Apr 17:51 UTC
[0.085] 14.65k
[0.085] 14.65k
s-field.rREBOL [
Title: "Enhanced field"
Date: 8-Jul-2001
Version: 0.1.0
File: %s-field.r
Author: "oldes"
Purpose: {To get a field where is possible to switch between normal and secure mode and which is able to remember the history (if not in secure mode)}
Email: %oldes--bigfoot--com
library: [
level: 'advanced
platform: none
type: none
domain: [GUI]
tested-under: none
support: none
license: none
see-also: none
]
]
EnhancedField: func [/local f1 f2 f h def-style][
def-style: [
offset: 0x0
size: 570x24
color: none
colors: [0.48.0 0.75.0]
font: make font [color: 0.200.0 style: 'bold]
edge: make edge [size: 1x1 color: 51.0.0]
]
layout [ h: field 'hide]
f1: make get-style 'field copy append def-style [flags: [field return]]
f2: make h copy append def-style [flags: [hide field return] ]
f: make face [
offset: 0x0
size: f1/size
text: ""
hidden?: false
edge: none
hidden: func[state [logic!]][
if (state <> hidden?) [
insert head pane pane/2
remove back tail pane
either state = true [
pane/2/text: copy ""
if string? pane/1/text [
insert/dup pane/2/text "*" length? pane/1/text
pane/2/data: copy pane/1/text
]
][
pane/2/text: copy pane/1/data
pane/2/data: copy ""
]
show self
focus pane/2
hidden?: state
]
]
submit: func[t][
text: copy trim t
history/add
do onsubmit
]
onsubmit: [
;enter your action here
]
history: make object! [
data: make block! 100
i: 1
add: does[
if any [
(data/1 = text)
(empty? text)
(hidden? = true)
][return false]
i: 0
insert head data copy text
]
move: func[step face][
if (not empty? data) and (not hidden?) [
i: (i + step)
either i > length? data [i: length? data][if i < 1 [i: 1]]
setText face copy pick data i
]
]
]
setText: func[face new /local f][
face/text: new
system/view/highlight-start:
system/view/caret: either found? f: find/tail new " " [f][head new]
system/view/highlight-end: tail new
show face
new
]
pane: make block! []
]
my-engage: [
engage: func [f a e /local view* pf][
view*: ctx-text/view*
switch a [
down [
either not-equal? f view*/focal-face [
focus f
view*/caret: offset-to-caret f e/offset
] [
view*/highlight-start:
view*/highlight-end: none
view*/caret: offset-to-caret f e/offset
]
show f
]
over [
if not-equal? view*/caret offset-to-caret f e/offset [
if not view*/highlight-start [view*/highlight-start: view*/caret]
view*/highlight-end: view*/caret: offset-to-caret f e/offset
show f
]
]
key [
pf: f/parent-face
switch/default e/key [
#"^M" [
pf/submit either any [none? f/data empty? f/data] [trim f/text][f/data]
f/text: copy ""
f/data: either pf/hidden? = false [f/text][copy ""]
view*/highlight-start: view*/highlight-end: none
view*/caret: f/text
show f
]
up [pf/history/move 1 f]
down [pf/history/move -1 f]
][ ctx-text/edit-text f e get in f 'action]
]
]
]
]
f1/feel: make ctx-text/edit my-engage
f2/feel: make ctx-text/edit my-engage
repend f/pane [f2 f1]
f
]
;And now one example, how to use it:
myField: EnhancedField
myField/onsubmit: [
prin "HISTORY: " probe myField/history/data
print rejoin ["COMMAND: " myField/text]
]
l: layout/size [
across
at 0x24 r: rotary data ["Normal" "Secure"][myField/hidden (index? r/data) = 2]
h4 500 "enhanced (switchable) field with history for R-Mud coded by %Oldes--bigfoot--com"
] 570x48
repend l/pane myField
view/title center-face l "Enhanced field example" Notes
|