1 /*
2 * This file is part of XForms.
3 *
4 * XForms is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License as
6 * published by the Free Software Foundation; either version 2.1, or
7 * (at your option) any later version.
8 *
9 * XForms is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with XForms; see the file COPYING. If not, write to
16 * the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
17 * MA 02111-1307, USA.
18 */
19
20
21 #ifdef HAVE_CONFIG_H
22 #include "config.h"
23 #endif
24
25 #include "include/forms.h"
26 #include <stdlib.h>
27 #include <math.h>
28
29 /**** Forms and Objects ****/
30
31 typedef struct {
32 FL_FORM * axypform;
33 void * vdata;
34 long ldata;
35 FL_OBJECT * xyplot;
36 FL_OBJECT * status;
37 } FD_axypform;
38
39
40 extern FD_axypform * create_form_axypform( void );
41
42 #define LOG
43
44 FD_axypform *xypui;
45
46
47 /* callbacks for form axypform */
48
49 /***************************************
50 ***************************************/
51
52 void
xyplot_cb(FL_OBJECT * ob,long data FL_UNUSED_ARG)53 xyplot_cb( FL_OBJECT * ob,
54 long data FL_UNUSED_ARG )
55 {
56 float x,
57 y;
58 int i;
59 char buf[ 64 ];
60
61 fl_get_xyplot( ob, &x, &y, &i );
62 fl_object_ps_dump( ob, "test.ps" );
63 if ( i < 0 )
64 return ;
65 sprintf( buf, "X=%g Y=%g", x, y );
66 fl_set_object_label( xypui->status, buf );
67 }
68
69
70 /***************************************
71 ***************************************/
72
73 void
alwaysreturn_cb(FL_OBJECT * ob,long data FL_UNUSED_ARG)74 alwaysreturn_cb( FL_OBJECT * ob,
75 long data FL_UNUSED_ARG )
76 {
77 fl_set_xyplot_return( xypui->xyplot, fl_get_button( ob ) );
78 }
79
80
81 /***************************************
82 ***************************************/
83
84 void
interpolate_cb(FL_OBJECT * ob,long data FL_UNUSED_ARG)85 interpolate_cb( FL_OBJECT * ob,
86 long data FL_UNUSED_ARG )
87 {
88 #ifdef LOG
89 fl_set_xyplot_interpolate( xypui->xyplot, 0,
90 fl_get_button(ob) ? 2 : 0, 20000 );
91 #else
92 fl_set_xyplot_interpolate( xypui->xyplot, 0,
93 fl_get_button( ob ) ? 2 : 0, 0.2 );
94 #endif
95 }
96
97
98 /***************************************
99 ***************************************/
100
101 void
inspect_cb(FL_OBJECT * ob,long data FL_UNUSED_ARG)102 inspect_cb( FL_OBJECT * ob,
103 long data FL_UNUSED_ARG )
104 {
105 fl_set_xyplot_inspect( xypui->xyplot, fl_get_button( ob ) );
106 }
107
108
109 /***************************************
110 ***************************************/
111
112 void
notic_cb(FL_OBJECT * ob,long data FL_UNUSED_ARG)113 notic_cb( FL_OBJECT * ob,
114 long data FL_UNUSED_ARG )
115 {
116 int notic = fl_get_button( ob );
117
118 if ( notic )
119 {
120 fl_set_xyplot_xtics( xypui->xyplot, -1, -1 );
121 fl_set_xyplot_ytics( xypui->xyplot, -1, -1 );
122 }
123 else
124 {
125 fl_set_xyplot_xtics( xypui->xyplot, 0, 0 );
126 fl_set_xyplot_ytics( xypui->xyplot, 0, 0 );
127 }
128 }
129
130
131 /***************************************
132 ***************************************/
133
134 int
main(int argc,char * argv[])135 main( int argc,
136 char * argv[ ] )
137 {
138 float x[ 25 ],
139 y[ 25 ];
140 int i;
141
142 fl_initialize( &argc, argv, "FormDemo", 0, 0 );
143 xypui = create_form_axypform( );
144
145 fl_set_object_dblbuffer( xypui->status, 1 );
146 for ( i = 0; i <= 10; i++ )
147 #ifdef LOG
148 x[ i ] = y[ i ] = pow( 10, i - 12 );
149 #else
150 x[ i ] = y[ i ] = i;
151 #endif
152 fl_set_xyplot_data( xypui->xyplot, x, y, 11, "", "", "" );
153
154 #ifdef LOG
155 fl_set_xyplot_xscale( xypui->xyplot, FL_LOG, 5 );
156 fl_set_xyplot_yscale( xypui->xyplot, FL_LOG, 5 );
157 fl_set_xyplot_xbounds( xypui->xyplot, 0.01, 10 );
158 fl_set_xyplot_ytics( xypui->xyplot, 3, 5 );
159 fl_set_xyplot_xgrid( xypui->xyplot, FL_GRID_MINOR );
160 /* fl_set_xyplot_ygrid( xypui->xyplot, 2 ); */
161 #endif
162
163 fl_show_form( xypui->axypform, FL_PLACE_MOUSE, FL_TRANSIENT, "axypform" );
164
165 fl_do_forms( );
166 fl_finish( );
167 return 0;
168 }
169
170
171 /***************************************
172 ***************************************/
173
174 FD_axypform *
create_form_axypform(void)175 create_form_axypform( void )
176 {
177 FL_OBJECT *obj;
178 FD_axypform *fdui = fl_calloc( 1, sizeof *fdui );
179
180 fdui->axypform = fl_bgn_form( FL_NO_BOX, 431, 301 );
181
182 fl_add_box( FL_UP_BOX, 0, 0, 431, 301, "" );
183
184 fdui->xyplot = obj = fl_add_xyplot( FL_ACTIVE_XYPLOT,
185 20, 50, 285, 235, "" );
186 fl_set_object_boxtype( obj, FL_DOWN_BOX );
187 fl_set_object_color( obj, FL_BLACK, FL_GREEN );
188 fl_set_object_lalign( obj, fl_to_inside_lalign( FL_ALIGN_BOTTOM ) );
189 fl_set_object_callback( obj, xyplot_cb, 0 );
190
191 obj = fl_add_checkbutton( FL_PUSH_BUTTON, 315, 40, 80, 25, "AlwaysReturn" );
192 fl_set_object_color( obj, FL_COL1, FL_BLUE );
193 fl_set_object_callback( obj, alwaysreturn_cb, 0 );
194
195 obj = fl_add_checkbutton( FL_PUSH_BUTTON, 315, 65, 80, 25, "Interpolate" );
196 fl_set_object_color( obj, FL_COL1, FL_BLUE );
197 fl_set_object_callback( obj, interpolate_cb, 0 );
198
199 obj = fl_add_checkbutton( FL_PUSH_BUTTON, 315, 90, 85, 25, "InspectOnly" );
200 fl_set_object_color( obj, FL_COL1, FL_BLUE );
201 fl_set_object_callback( obj, inspect_cb, 0 );
202
203 fdui->status = obj = fl_add_text( FL_NORMAL_TEXT, 45, 15, 170, 25, "" );
204 fl_set_object_boxtype( obj, FL_DOWN_BOX );
205
206 fl_add_button( FL_NORMAL_BUTTON, 325, 250, 90, 30, "Done" );
207
208 obj = fl_add_checkbutton( FL_PUSH_BUTTON, 315, 120, 85, 25, "NoTics" );
209 fl_set_object_color( obj, FL_COL1, FL_BLUE );
210 fl_set_object_callback( obj, notic_cb, 0 );
211
212 fl_end_form( );
213
214 return fdui;
215 }
216
217
218 /*
219 * Local variables:
220 * tab-width: 4
221 * indent-tabs-mode: nil
222 * End:
223 */
224