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