#include "olbasewindow.h" #include "component.h" #include "olbutton.h" #include "olmenubutton.h" #include "olscrollbar.h" #include "oltextfield.h" #include "group.h" #include "statictext.h" #include "scrollable_statictext.h" #include "selectable_statictext.h" #include "edittext.h" #include "olsetting.h" #include "settings.h" #include "ollist.h" #include "layout.h" #include "label.h" #include "menu.h" extern object hn; char *contents = "The first line This is the second, and iit is very long. So long it should be broken somewhere, or cut off. The third is quite short. 4 5 6 7 8 9 10 BOTTOM" olbasewindow newwindow(char *str, char *footer) { olbasewindow win = (olbasewindow)hn.newmember(/olbasewindow); olbutton b; edittext stext; win.framelabel = str; win.resizable = true; win.footer = true; win.reshape(10,10,600,320); win.@current_layout.setscript("","/OnOpen {[FOOT number 10 string cvs] /setfooters @parent Send} def"); win.@current_layout[/FOOT] = footer; /* Quit button */ b = (olbutton)win.@window_layout.newmember(/olbutton); b.setlabel("Quit"); b.setscript("","/Action {systemdict /hn undef} def"); b.setposition(20,5,null,null); b.map(); /* next button on Window layout */ b = (olbutton)win.@window_layout.newmember(/olbutton); b.setlabel("Next"); b.setscript("","/Action {[] /goto_next_layout self Send} def"); b.setposition(null,5,20,null); b.map(); stext = (edittext)win.@window_layout.newmember(/edittext); stext.reshape(10,40,300,150); stext.rename(/@test_text); stext.set_value(contents); stext.map(); hn[/stext] = stext; return win; } void newlayout(olbasewindow win, char *footer) { win.new_layout(); win.@current_layout.setscript("","/OnOpen {[FOOT number 10 string cvs] /setfooters @parent Send} def"); win.@current_layout[/FOOT] = footer; } void static_demo(olbasewindow win) { olbutton clear_button,revert; olmenubutton wrap,tabs,justify; ollist fonts,sizes; group buttons,font_changes,bbox_group; settings bbox_setting; olsetting on,off; label l; /* Create a group of buttons, arrange left ot right */ buttons = (group)win.@current_layout.newmember(/group); buttons.setplacement(/left2right); buttons.reshape(150,210,400,20); bbox_group = (group)win.@current_layout.newmember(/group); l = (label)bbox_group.newmember(/label); l.setlabel("Bounding Box"); l.fixedwidth = true; l.setposition(0,null,0,0); l.map(); bbox_setting = (settings)bbox_group.newmember(/settings); bbox_setting.setscript(""," /Action { 0 get (Show) eq [exch] /set_bounding_box [/@window_layout /@test_text] Send } def "); on = (olsetting)bbox_setting.newmember(/olsetting); on.setlabel("Show"); on.map(); off = (olsetting)bbox_setting.newmember(/olsetting); off.setlabel("Hide"); off.map(); bbox_setting.setposition(5,0,5,null); bbox_setting.reshape(0,0,110,20); bbox_group.reshape(10,210,110,40); bbox_setting.map(); bbox_group.map(); tabs = (olmenubutton)buttons.newmember(/olmenubutton); tabs.setscript(""," /MenuAction { [exch cvi ] /set_tabs [/@window_layout /@test_text] Send pop pop } def"); tabs.setlabel("Tabs"); tabs.map(); tabs.setmenu([ null, MCOMMAND, "0", MACTIVE, null, "32", MDEFAULT, null, "72", MACTIVE, null ]); wrap = (olmenubutton)buttons.newmember(/olmenubutton); wrap.setscript(""," /MenuAction { pop exch pop dup 0 eq {pop [/none] } { 1 eq {[/char]} {[/word]} ifelse} ifelse /set_line_wrap [/@window_layout /@test_text] Send } def"); wrap.setlabel("Line Wrap"); wrap.map(); wrap.setmenu([ null, MCOMMAND, "None", MACTIVE, null, "Character", MACTIVE, null, "Word", MDEFAULT, null ]); justify = (olmenubutton)buttons.newmember(/olmenubutton); justify.setscript(""," /MenuAction { pop exch pop dup 0 eq {pop [/Left] } { 1 eq {[/Centered]} {[/Right]} ifelse} ifelse /set_justification [/@window_layout /@test_text] Send } def "); justify.setlabel("Justify"); justify.map(); justify.setmenu([ null, MCOMMAND, "Left", MDEFAULT, null, "Centre", MACTIVE, null, "Right", MACTIVE, null ]); clear_button = (olbutton)buttons.newmember(/olbutton); clear_button.setscript(""," /Action { [] /clearvalue [/@window_layout /@test_text] Send } def "); clear_button.setlabel("Clear"); clear_button.map(); revert = (olbutton)buttons.newmember(/olbutton); revert.setscript("","/Action { [ (The first line This is the second, and iit is very long. So long it should be broken somewhere or cut off. The third is quite short. 4 5 6 7 8 9 10 BOTTOM) ] /set_value [/@window_layout /@test_text] Send } def"); revert.setlabel("Revert"); revert.map(); buttons.map(); /* Create the group of olist for mainpulating the fonts */ font_changes = (group)win.@current_layout.newmember(/group); font_changes.setplacement(/left2right); font_changes.reshape(320,40,320,150); font_changes.FG = rgbcolor(0,0,0.75); fonts = (ollist)font_changes.newmember(/ollist); fonts.setscript("","/Action { [ /selected_strings @sizes send 0 get cvi ] append /set_font [/@window_layout /@test_text] Send } def"); fonts.setchoicemode(/Exclusive); fonts.setitems(["LucidaSans","LucidaSans-Bold","LucidaSans-Italic","LucidaSans-BoldItalic","Helvetica-Bold","Helvetica-Oblique","Palatino-Roman","Palatino-Bold","Palatino-Italic","Palatino-BoldItalic","Times-Roman","Times-Bold","Times-BoldItalic","Times-Italic"]); fonts.setdefaultchoice(0); fonts.setselection([0]); fonts.rename(/@fonts); fonts.reshape(0,0,180,150); fonts.map(); sizes = (ollist)font_changes.newmember(/ollist); sizes.setscript("","/Action { 0 get cvi [ exch ] /selected_strings @fonts send exch append /set_font [/@window_layout /@test_text] Send } def"); sizes.setchoicemode(/Exclusive); sizes.setitems(["6","8","10","12","14","18","24","32","48"]); sizes.minwidth = 60; sizes.setdefaultchoice(3); sizes.setselection([3]); sizes.reshape(0,0,60,150); sizes.rename(/@sizes); sizes.map(); font_changes.map(); } void selectable_demo(olbasewindow win) { olbutton move_up,move_down,move_left,move_right,start_text,end_text, start_line,end_line,start_word,end_word,append_string; group buttons,controls; newlayout(win,"selectable features"); controls = (group)win.@current_layout.newmember(/group); controls.reshape(380,80,100,81); controls.setjustification(/Centered); move_up = (olbutton)controls.newmember(/olbutton); move_up.setscript("","/Action {[/up] /move_to [/@window_layout /@test_text] Send} def"); move_up.setlabel("^"); move_up.fixedwidth = true; move_up.setposition(0,null,0,0); move_up.map(); move_left = (olbutton)controls.newmember(/olbutton); move_left.setscript("","/Action {[/left] /move_to [/@window_layout /@test_text] Send } def"); move_left.setlabel("<"); move_left.setposition(0,0,null,0); move_left.map(); move_right = (olbutton)controls.newmember(/olbutton); move_right.setscript("","/Action {[/right] /move_to [/@window_layout /@test_text] Send} def"); move_right.setlabel(">"); move_right.setposition(null,0,0,0); move_right.map(); move_down = (olbutton)controls.newmember(/olbutton); move_down.setscript("","/Action {[/down] /move_to [/@window_layout /@test_text] Send} def"); move_down.setlabel("v"); move_down.fixedwidth = true; move_down.setposition(0,0,0,null); move_down.map(); controls.map(); buttons = (group)win.@current_layout.newmember(/group); buttons.setplacement(/left2right); buttons.reshape(10,200,550,60); start_text = (olbutton)buttons.newmember(/olbutton); start_text.setscript("","/Action {[/start_text] /move_to [/@window_layout /@test_text] Send} def"); start_text.setlabel("^ text"); start_text.map(); end_text = (olbutton)buttons.newmember(/olbutton); end_text.setscript("","/Action {[/end_text] /move_to [/@window_layout /@test_text] Send} def"); end_text.setlabel("text v"); end_text.map(); start_line = (olbutton)buttons.newmember(/olbutton); start_line.setscript("","/Action {[/start_line] /move_to [/@window_layout /@test_text] Send} def"); start_line.setlabel("<- line"); start_line.map(); end_line = (olbutton)buttons.newmember(/olbutton); end_line.setscript("","/Action {[/end_line] /move_to [/@window_layout /@test_text] Send} def"); end_line.setlabel("line ->"); end_line.map(); start_word = (olbutton)buttons.newmember(/olbutton); start_word.setscript("","/Action {[/start_word] /move_to [/@window_layout /@test_text] Send} def"); start_word.setlabel("<- word"); start_word.map(); end_word = (olbutton)buttons.newmember(/olbutton); end_word.setscript("","/Action {[/end_word] /move_to [/@window_layout /@test_text] Send} def"); end_word.setlabel("word ->"); end_word.map(); append_string = (olbutton)buttons.newmember(/olbutton); append_string.setscript("","/Action {[(\nAnother line)] /append_string [/@window_layout /@test_text] Send} def"); append_string.setlabel("Append_String"); append_string.map(); buttons.map(); } void editable_demo(olbasewindow win) { olbutton cut,paste,copy_button,clear_button,delword,delline,delchar; settings editable_setting; olsetting on,off; scrollable_statictext clipboard; group buttons; newlayout(win,"editable features"); buttons = (group)win.@current_layout.newmember(/group); buttons.setplacement(/left2right); buttons.reshape(10,200,550,60); cut = (olbutton)buttons.newmember(/olbutton); cut.setscript("","/Action {[] /cut_selection [/@window_layout /@test_text] Send [/clipboard_contents [/@window_layout /@test_text] find_object send ] /set_value /@clipboard Send} def"); cut.setlabel("Cut"); cut.map(); paste = (olbutton)buttons.newmember(/olbutton); paste.setscript("","/Action {[] /paste_selection [/@window_layout /@test_text] Send [/clipboard_contents [/@window_layout /@test_text] find_object send ] /set_value /@clipboard Send} def"); paste.setlabel("Paste"); paste.map(); copy_button = (olbutton)buttons.newmember(/olbutton); copy_button.setscript("","/Action {[] /copy_selection [/@window_layout /@test_text] Send [/clipboard_contents [/@window_layout /@test_text] find_object send ] /set_value /@clipboard Send} def"); copy_button.setlabel("Copy"); copy_button.map(); clear_button = (olbutton)buttons.newmember(/olbutton); clear_button.setscript("","/Action {[] /clear_selection [/@window_layout /@test_text] Send [/clipboard_contents [/@window_layout /@test_text] find_object send ] /set_value /@clipboard Send} def"); clear_button.setlabel("Clear"); clear_button.map(); delchar = (olbutton)buttons.newmember(/olbutton); delchar.setscript("","/Action {[127] /onkey [/@window_layout /@test_text] Send} def"); delchar.setlabel("Delete Char (Del)"); delchar.map(); delword = (olbutton)buttons.newmember(/olbutton); delword.setscript("","/Action {[23] /onkey [/@window_layout /@test_text] Send} def"); delword.setlabel("Delete Word (Ctrl-W)"); delword.map(); delline = (olbutton)buttons.newmember(/olbutton); delline.setscript("","/Action {[21] /onkey [/@window_layout /@test_text] Send} def"); delline.setlabel("Delete Line (Ctrl-U)"); delline.map(); editable_setting = (settings)buttons.newmember(/settings); editable_setting.setscript(""," /Action { 0 get (Editable) eq [exch] /set_editable [/@window_layout /@test_text] Send } def "); on = (olsetting)editable_setting.newmember(/olsetting); on.setlabel("Editable"); on.map(); off = (olsetting)editable_setting.newmember(/olsetting); off.setlabel("Not Editable"); off.map(); editable_setting.reshape(0,0,220,20); editable_setting.setposition(10,30,10,10); /* editable_setting.map(); Does not work properly */ buttons.map(); clipboard = (scrollable_statictext)win.@current_layout.newmember(/scrollable_statictext); clipboard.reshape(350,50,200,100); clipboard.set_value("Clip board contents go here ..."); clipboard.rename(/@clipboard); clipboard.map(); } void main() { olbasewindow base_win; base_win = newwindow("Text Demo","static text features"); static_demo(base_win); selectable_demo(base_win); editable_demo(base_win); base_win.goto_first_layout(); base_win.map(); }