listbox.sa
Generated by gen_html_sa_files from ICSI. Contact gomes@icsi.berkeley.edu for details
---------------------------> Sather 1.1 source file <--------------------------
-- listbox.sa: listbox widget
-- Author: Matthias Ernst <mernst@x4u.desy.de>
-- Copyright (C) 1995, International Computer Science Institute
-- $Id: listbox.sa,v 1.2 1996/06/14 04:18:52 holger Exp $
--
-- COPYRIGHT NOTICE: This code is provided WITHOUT ANY WARRANTY
-- and is subject to the terms of the SATHER LIBRARY GENERAL PUBLIC
-- LICENSE contained in the file: Sather/Doc/License of the
-- Sather distribution. The license is also available from ICSI,
-- 1947 Center St., Suite 600, Berkeley CA 94704, USA.
class TK_LISTBOX_CFG
class TK_LISTBOX_CFG is
include TK_WIDGET_CFG_INCL
background->background,
foreground->foreground,
font->font,
char_width->char_width,
borderwidth->borderwidth,
height->height,
width->width,
justify_left->justify_left,justify_right->justify_right,
justify_center->justify_center,
relief_none->relief_none,relief_raised->relief_raised,
relief_sunken->relief_sunken,
relief_flat->relief_flat,relief_ridge->relief_ridge,
relief_groove->relief_groove,
highlightcolor->highlightcolor,
highlightbackground->highlightbackground,
highlightthickness->highlightthickness,
insertwidth->insertwidth,
insertborderwidth->insertborderwidth,
selectforeground->selectforeground,
selectbackground->selectbackground,
selectborderwidth->selectborderwidth;
selectmode_single is
selectmode("single");
end;
selectmode_browse is
selectmode("browse");
end;
selectmode_multiple is
selectmode("multiple");
end;
selectmode_extended is
selectmode("extended");
end;
selectmode_single: SAME is
selectmode_single;
return self
end;
selectmode_browse: SAME is
selectmode_browse;
return self
end;
selectmode_multiple: SAME is
selectmode_multiple;
return self
end;
selectmode_extended: SAME is
selectmode_extended;
return self
end;
private selectmode(s: STR) is
config("selectmode", s);
end;
attr hscroll,vscroll: BOOL; -- Treated differently
hscroll(v: BOOL): SAME is hscroll := v; return self end;
vscroll(v: BOOL): SAME is vscroll := v; return self end;
std: SAME is
return new.vscroll(true).selectmode_single
end;
end; -- class TK_LISTBOX_CFG
class TK_LISTBOX < $TK_WIDGET
class TK_LISTBOX < $TK_WIDGET is
-- a tk listbox with a vertical scrollbar
include TK_SCROLL_WIDGET_INCL{TK_LISTBOX_CFG};
private const tk_widget_type: STR := "listbox";
private default_init(c: TK_LISTBOX_CFG) is
if c.vscroll then vscroll end;
if c.hscroll then hscroll end;
end;
-- indices into the list are integers
-- some special indices:
-- (see listbox manual page for explanation)
-- instead of feeding special strings to index
-- you call these and give Tk the result.
-- Note that these values may change any time,
-- so saving them somewhere is impractical:
-- list_end ::= list.index_end;
-- ...
-- list.insert(list_end, "YES");
-- may not work as expected
private index(s: STR): INT is
return #(GUI_APP_END::eval(actual_widget_name+" index " + s));
end;
index_active: INT is
return index("active");
end;
index_anchor: INT is
return index("anchor");
end;
index_end: INT is
return index("end");
end;
index_at(x, y: FLT): INT is
return index("@"+x+","+y);
end;
activate(index: INT) is
-- make index the active element
eval(actual_widget_name, "activate", index);
end;
curselection: ARRAY{INT} is
-- the indices of all currently selected elements
cursel: STR := GUI_APP_END::eval(actual_widget_name + " curselection");
length_str ::= GUI_APP_END::eval("llength " + quote(cursel));
length: INT := length_str.cursor.int;
res ::= #ARRAY{INT}(length);
loop ind ::= length.times!;
res[ind] := #(GUI_APP_END::eval("lindex "+quote(cursel)+" "+ind));
end;
return res;
end;
curselection!: INT is
loop yield curselection.elt! end;
end;
delete(first: INT) is
eval(actual_widget_name, "delete", first);
end;
delete(first, last: INT) is
eval(actual_widget_name, "delete", first, last);
end;
get(first: INT): STR is
return GUI_APP_END::eval(actual_widget_name + " get " + first);
end;
get(first, last: INT): ARRAY{STR} is
list ::= GUI_APP_END::eval(actual_widget_name+" get "+first+" "+last);
length ::= #INT(GUI_APP_END::eval("llength " + quote(list)));
res ::= #ARRAY{STR}(length);
loop ind ::= length.times!;
res[ind] := GUI_APP_END::eval("lindex "+quote(list)+" "+ind);
end;
return res;
end;
get!( once first,once last: INT): STR is
loop yield get(first, last).elt! end;
end;
insert(index: INT, s: STR)
-- Inserts `s' at index `i'
-- see above for index functions
is
eval(actual_widget_name, "insert", index, quote(s));
end;
insert(index: INT, s: ARRAY{STR})
-- Inserts all s's at index i
-- see above for index functions
is
list: FSTR;
loop
list := list + " ".separate!(quote(s.elt!))
end;
eval(actual_widget_name, "insert", index, list);
end;
see(index: INT)
-- Makes element i visible (and scrolls if neccessary).
is
eval(actual_widget_name, "see", index);
end;
size: INT is
-- Returns number of elements in the list box.
return #(GUI_APP_END::eval(actual_widget_name + " size"));
end;
set_selection(i:INT)
-- Sets the selection to the `i'th element .
is
eval(actual_widget_name,"selection set",i);
end;
clear_selection(i:INT)
-- Disselects the selection at `i'.
is
GUI_APP_END::eval(actual_widget_name+" selection clear "+i);
end;
is_selected(i:INT): BOOL
-- Returns true if the index `i' is selcted.
is
return
GUI_APP_END::eval(actual_widget_name+" selection includes "+i)
="true"
end;
nearest(y:INT): INT
-- Returns the index number which is nearest to the `y' coordinate.
is
return GUI_APP_END::eval(actual_widget_name+" nearest "+y).cursor.int;
end;
end; -- class TK_LISTBOX