REBOL [ Title: "Layout Writer" Date: 18-Mar-2008 Version: 0.1.1 File: %layout-writer.r Author: "R.v.d.Zee" Owner: "R.v.d.Zee" Rights: "Copyright (C) R. v.d.Zee 2008" Usage: {The script loads a layout, but not the REBOL header portion of a REBOL script. An mp3 file or other media should be in the same directory as the script.} Purpose: {The script was intended as a method for writing scripts. A layout may be written in the editor and then displayed in the same script. Writers can change the script and view the changes without leaving the editor. Reference material may be drawn into the program, reviewed, and even copied and pasted into the editor.} Notes: {The background effect was generated by Pattern Generator, (Cyphre). http://www.rebol.com/view/tools/patterns.r The player script is an adaptation of the original by C. Sassenrath, originally presented as an introductory script, REBOL Quick Start: Part 5 - Files, Directories, and Playing Music, http://www.rebol.com/docs/quick-start5.html. The shell command requires the file to be played to be in quotation marks. This script achieves this construction with the rejoin statement. "to-local-file" translates the Rebol file format to the operating system file format. "clean-path" provides the full path to the file. Using the Rebol "call" command to play the file requires that the files be in the format of the operating system, and not the Rebol file format normally used in scripts. There are no error controls built into this script.} History: [ 1.1.0 [18-Mar-2008 "Written"] 1.1.1 [19-Mar-2008 "add writers as global variable & if not empty? writers [writer/text: writers]"] ] Library: [ level: 'beginner platform: 'all type: [demo tool how-to reference] domain: [gui shell] support: none tested-under: [View 1.3.2.3.1 [Windows]] license: none ] ] instructions: [ {Welcome to the Rebol Layout Writer! The "Add File list" button will add some sample script to make a layout, one that should make Rebol script writing even more enjoyable. Write the script for your layout in editor area to the left and then click the "Load" Button. Note the example starts with an empty layout, but still has brackets, "[ ]". Ensure your layout scripts have one left bracket, or "[", at the start of the layout, and one right bracket "]", at the end of the layout. At the moment, you must remove any headers from scripts before attempting to view the layout here. The "Reference" button will load your notes, scripts, or other text files. Most changes made to the attributes of the faces in the editor can be viewed when the layout is reloaded. Ctrl + C keys copies highlighted text to the clipboard. Ctrl + X keys cuts highlighted text from the text area and copies that text to the clipboard. Ctrl + V pastes clipboard text into the text area. Clicking the mouse in a text area (no highlight) & then Ctrl + C copies all of the text of the area to the clipboard. Similarly, all of the text can be cut, one click then Ctrl + X. Windows Media Player will remember it's mode and offset when set to compact mode, placing it initially at least, where you choose to view it in this script.} { across audio-list: text-list 250x150 orange navy data array 14 [ player: "C:\Program Files\Windows Media Player\wmplayer.exe" play-file: rejoin [ {"} to-local-file clean-path audio-list/picked/1 {"} ] call reform [player play-file] ]} { return pad 120x5 btn wheat "Find Audio Files" [ clear audio-list/data audio-list-formats: [%.wma %.mp3 %.wav] all-files: read %. foreach file all-files [ if find audio-list-formats suffix? file [ append audio-list/data file ] ] reset-face audio-list ]} {[ audio-list/pane/pane/2/color: 86.101.130 ;track color audio-list/sld/pane/1/color: red ;dragger color audio-list/sld/pane/2/colors/1: ;top arrow square color audio-list/sld/pane/3/colors/1: 17.132.205 ;bottom arrow square color ;;audio-list/pane/effect: ;can be set if color & sub-area/color are none audio-list/color: teal ;none audio-list/sub-area/color: purple ;olive ;none ]} ] writers: make string! 200 top-screen: layout [ backdrop khaki + 30 across space 0 ] bottom-screen: layout [ size 800x700 backdrop effect [ gradient 0x1 255.255.255 190.190.190 draw [ pen none fill-pen diamond 1015x1017 0 271 128 1 5 255.255.255.222 128.128.128.168 255.255.255.138 100.136.116.180 0.255.255.220 245.222.129.141 222.184.135.191 255.150.10.180 100.136.116.195 245.222.129.131 175.155.120.141 170.170.170.174 0.48.0.165 0.128.0.133 128.0.0.216 76.26.0.224 0.0.0.188 255.80.37.133 80.108.142.208 160.180.160.168 0.128.0.180 72.72.16.137 255.255.255.130 box 0x0 800x700 pen none fill-pen conic 70x993 0 154 154 5 1 255.80.37.136 44.80.132.174 64.64.64.196 255.255.0.167 240.240.240.139 44.80.132.163 128.128.128.178 255.255.255.202 64.64.64.144 0.48.0.181 64.64.64.136 72.72.16.150 255.80.37.196 44.80.132.197 76.26.0.196 box 0x0 800x700 ] ] origin 0x0 across space 0 blackboard: box 760x800 return pad 0x-330 editor-box: box 420x185 ;790 pad 5 reader-box: box 395x185 return pad 0x5 btn wheat"Show Editor" [ ;---move the boxes in & out of view - show [editor-box reader-box] is ok, ; hide editor-box & hide reader-box was not used, since the boxes did not hide together either face/text = "Show Editor" [ editors-place: editor-box/offset readers-place: reader-box/offset editor-box/pane: editor reader-box/pane: researcher show [editor-box reader-box] face/text: "Hide Editor" ][ editor-box/offset/y: 1000 reader-box/offset/y: 1000 show [editor-box reader-box] face/text: "Show Editor" editor-box/offset: editors-place reader-box/offset: readers-place ] ] sample-script: btn wheat 90 "Add Playlist" ivory left [ add-to-script: func [instruction button-text][ poke writer/text (length? writer/text) newline append writer/text pick instructions instruction append writer/text join newline "]" show writer writers: copy writer/text new-script: layout load first to-block writer/text new-script/offset: 0x0 blackboard/pane: new-script writer/text: writers show blackboard face/text: button-text show face ] if face/text = "Colors" [ append writer/text join newline instructions/4 writers: copy writer/text kr: to-block writer/text new-script: layout load first kr new-script/offset: 0x0 blackboard/pane: new-script do form kr/2 writer/text: writers show blackboard face/text: "Done" show face ] if face/text = "Add File Button" [add-to-script 3 "Colors"] if face/text = "Add Playlist" [add-to-script 2 "Add File Button"] ] btn wheat "View" [ kr: load to-block writer/text new-script: layout load first kr new-script/offset: 0x0 blackboard/pane: new-script do form kr/2 if not empty? writers [writer/text: writers] show blackboard ] btn wheat "Load Layout" [ reset-face reader reset-face scroll-reader read-layout: request-file if not none? read-layout [ writer/text: read first read-layout writers: copy writer/text focus writer ] ] btn wheat "Save Layout" [ layout-to-save: request-file/title/save "Save Layout" "" if not none? layout-to-save [ save first layout-to-save to-block writer/text ] ] btn wheat "Quit" [quit] pad 200 btn wheat - 10 "Reference" [ web-pages: [%.html %.htm] text-pages: [%.r %.txt] file-to-read: request-file if not none? file-to-read [ if find web-pages suffix? first file-to-read [browse first file-to-read] if find text-pages suffix? first file-to-read [ reset-face reader reset-face scroll-reader reader/text: read first file-to-read show reader ] ] ] btn wheat - 10 "Save Note" [ file-name: request-file/save/title/filter "Save Note" "REBOL" "*.txt *.r" if not none? file-name [ write first file-name reader/text ] ] btn wheat - 10 "?" [ reset-face reader reset-face scroll-reader reader/text: first instructions show reader ] ] blackboard/pane: top-screen top-screen/offset: 0x0 blackboard/show?: false editor: layout [ backdrop brown + 30 origin 0x0 across space 0 writer: area 400x185 khaki + 30 khaki + 40 wrap with [ edge/effect: none edge/size: 1x1 edge/color: brown ] "[ ]" scroll-writer: scroller 15x185 olive brown [scroll-para writer scroll-writer] ] editor/offset: 0x0 researcher: layout [ backdrop brown + 30 origin 0x0 across space 0 reader: area 350x185 khaki + 30 khaki + 40 font-color black font-size 12 wrap with [ edge/size: 1x1 edge/color: brown ] instructions/1 scroll-reader: scroller 15x185 olive brown [scroll-para reader scroll-reader] ] researcher/offset: 0x0 view/offset bottom-screen 300x30