Mon Jun 3 15:21:17 PDT 2002
[netwalk.git] / options_window.e
blob33afe317d9bcb303bbea82dc8dd9aad70379577c
1 class OPTIONS_WINDOW
2 inherit
3 WINDOW
4 creation make
5 feature
6 preset_lb : LISTBOX
7 wrap_cb : CHECKBOX
8 width_tb : TEXTBOX
9 height_tb : TEXTBOX
11 setting : SETTING
12 preset : PRESET
13 preset_list : LINKED_LIST[PRESET]
15 custom : SETTING is
16 once
17 !!Result.make
18 end
20 put_preset_list(l : LINKED_LIST[PRESET]) is
21 local
22 it : ITERATOR[PRESET]
23 sl : LINKED_LIST[STRING]
25 !!sl.make
26 it := l.get_new_iterator
27 from it.start
28 until it.is_off
29 loop
30 sl.add_last(it.item.name)
31 it.next
32 end
33 sl.add_last("Custom")
34 preset_lb.put_list(sl)
35 preset_list := l
36 end
38 make is
39 local
40 b : BUTTON
41 c : COMMAND
42 l : LABEL
44 widget_init
46 put_size(200, 200)
47 !!b.make("Ok")
48 b.put_size(60, 20)
49 !COMMAND_ACTIVATE!c.make(Current)
50 b.put_command(c, b.signal_activate)
51 add_widget(b, 30, 175)
53 !!b.make("Cancel")
54 b.put_size(60, 20)
55 !COMMAND_CANCEL!c.make(Current)
56 b.put_command(c, b.signal_activate)
57 add_widget(b, 100, 175)
59 !!l.make("Level")
60 l.put_size(50, 20)
61 add_widget(l, 10, 10)
62 !!preset_lb.make
63 !COMMAND_PRESET_CHANGE!c.make(Current)
64 preset_lb.put_command(c, preset_lb.signal_change)
65 preset_lb.put_size(70, 16)
66 add_widget(preset_lb, 70, 10)
68 !!l.make("Width")
69 l.put_size(50, 20)
70 add_widget(l, 10, 30)
71 !!width_tb.make
72 !COMMAND_CUSTOM_CHANGE!c.make(Current)
73 width_tb.put_command(c, width_tb.signal_change)
74 width_tb.put_size(40, 16)
75 add_widget(width_tb, 70, 30)
77 !!l.make("Height")
78 l.put_size(50, 20)
79 add_widget(l, 10, 50)
80 !!height_tb.make
81 !COMMAND_CUSTOM_CHANGE!c.make(Current)
82 height_tb.put_command(c, height_tb.signal_change)
83 height_tb.put_size(40, 16)
84 add_widget(height_tb, 70, 50)
86 !!l.make("Wrap")
87 l.put_size(50, 20)
88 add_widget(l, 10, 70)
89 !!wrap_cb.make
90 !COMMAND_CUSTOM_CHANGE!c.make(Current)
91 wrap_cb.put_command(c, wrap_cb.signal_change)
92 wrap_cb.put_size(12, 12)
93 add_widget(wrap_cb, 75, 75)
94 end
96 custom_change is
98 preset := Void
99 preset_lb.put_string("Custom")
102 preset_change is
103 local
104 p : PRESET
106 --TODO: see if list_i = list.upper
107 if preset_lb.string.is_equal("Custom") then
108 put_info(Void, custom)
109 else
110 p := get_preset(preset_lb.string)
111 put_info(p, p.setting)
115 --TODO: repeated code; make new PRESET_TABLE class
116 get_preset(s : STRING) : PRESET is
117 local
118 it : ITERATOR[PRESET]
120 it := preset_list.get_new_iterator
121 from it.start
122 until it.is_off
123 loop
124 if it.item.name.is_equal(s) then
125 Result := it.item
127 it.next
131 put_info(p : PRESET; s : SETTING) is
133 preset := p
134 if p = Void then
135 preset_lb.put_string("Custom")
136 else
137 preset_lb.put_string(p.name)
139 wrap_cb.put_value(s.wrap)
140 width_tb.put_string(s.width.to_string)
141 height_tb.put_string(s.height.to_string)
144 update_setting is
145 local
146 s : STRING
147 i : INTEGER
149 if preset = Void then
150 setting := custom
151 setting.put_wrap(wrap_cb.value)
153 s := width_tb.string
154 if s.is_integer then
155 i := setting.clip_width(s.to_integer)
156 setting.put_width(i)
159 s := height_tb.string
160 if s.is_integer then
161 i := setting.clip_height(s.to_integer)
162 setting.put_height(i)
164 else
165 setting := preset.setting