function text_insert_random (text)
{
local i, c;
for (i = 0; i < 10; i++)
{
c = int('A') + (random() * 24);
text.set_point(1);
text.set_point(random() * text.get_length());
text.insert(nil, nil, nil, char(c), 1);
}
}
function make_color(r, g, b)
{
local color = new(GdkColor);
color.red = r;
color.green = g;
color.blue = b;
color;
}
function create_text ()
{
local box1, box2, hbox, button, check, separator, scrolled_window,
text, font, infile, text_colors;
win_text = new (GtkWindow);
win_text.signal ("destroy", #win_text = nil);
win_text.name = "text window";
win_text.set_policy(TRUE, TRUE, FALSE);
win_text.set_usize(500, 500);
win_text.title = "test";
win_text.border_width = 0;
box1 = new(GtkVBox);
win_text.add(box1);
box1.show();
box2 = new(GtkVBox);
box2.spacing = 10;
box2.border_width = 10;
box1.pack_start(box2, TRUE, TRUE, 0);
box2.show();
scrolled_window = new(GtkScrolledWindow);
box2.pack_start(scrolled_window, TRUE, TRUE, 0);
scrolled_window.set_policy(GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
scrolled_window.show();
text = new(GtkText);
text.set_editable(TRUE);
scrolled_window.add(text);
text.grab_focus();
text.show();
font = gdk_font_load ("-adobe-courier-medium-r-normal--*-120-*-*-*-*-*-*");
text.freeze();
/* Create and insert the colored foreground/background display text. */
text_colors = array(cons("black", make_color(0,0,0)),
cons("white", make_color(0xffff,0xffff,0xffff)),
cons("red", make_color(0xffff,0,0)),
cons("green", make_color(0, 0xffff,0)),
cons("blue", make_color(0, 0, 0xffff)),
cons("cyan", make_color(0, 0xffff, 0xffff)),
cons("magenta", make_color(0xffff, 0, 0xffff)),
cons("yellow", make_color(0xffff, 0xffff, 0)));
with i in text_colors do
{
text.insert(font, nil, nil, car(i), -1);
text.insert(font, nil, nil, "\t", -1);
with j in text_colors do
text.insert(font, cdr(j), cdr(i), "XYZ", -1);
text.insert(font, nil, nil, "\n", -1);
}
/* Read and insert the sample text. */
if ((infile = open("gtkenums.h", "r")) ||
(infile = open("../gtkenums.h", "r")))
{
line = nil;
while(line != _eof_)
{
line = read_line(infile);
line_ret = string(line,"\n");
if (line_ret != "Unexpected end of file\n")
text.insert(font, nil, nil, line_ret, -1);
}
}
text.thaw();
hbox = new(GtkHButtonBox);
box2.pack_start(hbox, FALSE, FALSE, 0);
hbox.show();
check = new(GtkCheckButton);
check.label = "Editable";
hbox.pack_start(check, FALSE, FALSE, 0);
check.signal("toggled", `(@text).set_editable((@check).get_active()));
check.set_active(TRUE);
check.show();
check = new(GtkCheckButton);
check.label = "Wrap Words";
hbox.pack_start(check, FALSE, FALSE, 0);
check.signal("toggled", `(@text).set_word_wrap((@check).get_active()));
check.set_active(FALSE);
check.show();
separator = new(GtkHSeparator);
box1.pack_start(separator, FALSE, TRUE, 0);
separator.show();
box2 = new(GtkVBox);
box2.spacing = 10;
box2.border_width = 10;
box1.pack_start(box2, FALSE, TRUE, 0);
box2.show();
button = new(GtkButton);
button.label = "insert random";
button.signal("clicked", `text_insert_random(@text));
box2.pack_start(button, TRUE, TRUE, 0);
button.show();
button = new (GtkButton);
button.label = "close";
button.signal ("clicked", `(@win_text).destroy());
box2.pack_start (button, TRUE, TRUE, 0);
button.can_default = TRUE;
button.grab_default();
win_text.show_all();
win_text;
}
function main ()
{
local window, win_text;
TRUE=1;
FALSE=0;
window = create_text ();
window.signal ("destroy", #exit_program(0));
init_ipc("text", "textq");
gtk_main ();
}