00001
00002
00003 char *task_adjaxis_cpp = "$Id: sxy_task_adjaxis.cpp,v 1.2 2003/04/07 16:56:29 clinio Exp $";
00004
00005
00006
00007 #include <assert.h>
00008 #include <iup.h>
00009 #include <iupgc.h>
00010 #include <cd.h>
00011 #include <xy.h>
00012
00013 #include "sxy_chart.h"
00014 #include "sxy_graph.h"
00015 #include "sxy_task.h"
00016 #include "sxy_task_adjaxis.h"
00017
00018
00019 #define HIDDEN_GRAPH "HIDDEN_GRAPH"
00020 #define HIDDEN_AXIS "HIDDEN_AXIS"
00021 #define NO_COLOR ((long int)(0xFFFFFFFF))
00022
00023
00024
00025 static int pick_axis( SXYAxis* ax, int x, int y );
00026 static long int get_color( long int color );
00027
00028
00029
00030 static int cb_title_end_rotated( Ihandle* h ) {
00031 SXYGraph* graph = (SXYGraph*)IupGetAttribute(h, HIDDEN_GRAPH);
00032 SXYAxis* axis = (SXYAxis*)IupGetAttribute(h, HIDDEN_AXIS);
00033 axis->setTitleStyle(AT_END_ROTATED);
00034 graph->redrawGraph();
00035 return IUP_DEFAULT;
00036 }
00037
00038
00039
00040 static int cb_scale_color( Ihandle* h ) {
00041 SXYGraph* graph = (SXYGraph*)IupGetAttribute(h, HIDDEN_GRAPH);
00042 SXYAxis* axis = (SXYAxis*)IupGetAttribute(h, HIDDEN_AXIS);
00043
00044 long int color = axis->getScaleColor();
00045 color = get_color( color );
00046 if ( color != NO_COLOR ) {
00047 axis->setScaleColor(color);
00048 graph->redrawGraph();
00049 }
00050 return IUP_DEFAULT;
00051 }
00052
00053
00054
00055 static int cb_title_color( Ihandle* h ) {
00056 SXYGraph* graph = (SXYGraph*)IupGetAttribute(h, HIDDEN_GRAPH);
00057 SXYAxis* axis = (SXYAxis*)IupGetAttribute(h, HIDDEN_AXIS);
00058
00059 long int color = axis->getTitleColor();
00060 color = get_color( color );
00061 if ( color != NO_COLOR ) {
00062 axis->setTitleColor(color);
00063 graph->redrawGraph();
00064 }
00065 return IUP_DEFAULT;
00066 }
00067
00068
00069
00070 static int cb_axis_color( Ihandle* h ) {
00071 SXYGraph* graph = (SXYGraph*)IupGetAttribute(h, HIDDEN_GRAPH);
00072 SXYAxis* axis = (SXYAxis*)IupGetAttribute(h, HIDDEN_AXIS);
00073
00074 long int color = axis->getColor();
00075 color = get_color( color );
00076 if ( color != NO_COLOR ) {
00077 axis->setColor(color);
00078 graph->redrawGraph();
00079 }
00080 return IUP_DEFAULT;
00081 }
00082
00083
00084
00085 static int cb_title_end( Ihandle* h ) {
00086 SXYGraph* graph = (SXYGraph*)IupGetAttribute(h, HIDDEN_GRAPH);
00087 SXYAxis* axis = (SXYAxis*)IupGetAttribute(h, HIDDEN_AXIS);
00088 axis->setTitleStyle(AT_END);
00089 graph->redrawGraph();
00090 return IUP_DEFAULT;
00091 }
00092
00093
00094
00095 static int cb_title_middle( Ihandle* h ) {
00096 SXYGraph* graph = (SXYGraph*)IupGetAttribute(h, HIDDEN_GRAPH);
00097 SXYAxis* axis = (SXYAxis*)IupGetAttribute(h, HIDDEN_AXIS);
00098 axis->setTitleStyle(AT_MIDDLE);
00099 graph->redrawGraph();
00100 return IUP_DEFAULT;
00101 }
00102
00103
00104
00105 static int cb_scale_aligned( Ihandle* h ) {
00106 SXYGraph* graph = (SXYGraph*)IupGetAttribute(h, HIDDEN_GRAPH);
00107 SXYAxis* axis = (SXYAxis*)IupGetAttribute(h, HIDDEN_AXIS);
00108 axis->setScaleOrientation(ALIGNED);
00109 graph->redrawGraph();
00110 return IUP_DEFAULT;
00111 }
00112
00113
00114
00115 static int cb_scale_rotated( Ihandle* h ) {
00116 SXYGraph* graph = (SXYGraph*)IupGetAttribute(h, HIDDEN_GRAPH);
00117 SXYAxis* axis = (SXYAxis*)IupGetAttribute(h, HIDDEN_AXIS);
00118 axis->setScaleOrientation(ROTATED);
00119 graph->redrawGraph();
00120 return IUP_DEFAULT;
00121 }
00122
00123
00124
00125
00126
00127 static int pick_axis( SXYAxis* ax, int x, int y ) {
00128 XYAxis* xy_ax = ax->getXyAxis();
00129 XYRasterText* xy_tit = ax->getXyTitle();
00130 XYRasterText* xy_dec = ax->getXyDecorator();
00131 if ( xy_ax->pick(x,y) == xytrue || xy_tit->pick(x,y) == xytrue ||
00132 xy_dec->pick(x,y) == xytrue )
00133 return 1;
00134 return 0;
00135 }
00136
00137
00138
00139 static long int get_color( long int color ) {
00140 unsigned char r, g, b;
00141 r = (color & 0xFF0000) >> 16;
00142 g = (color & 0x00FF00) >> 8;
00143 b = (color & 0x0000FF);
00144 int answer = IupGetColor (IUP_CENTER, IUP_CENTER, &r, &g, &b);
00145 if (answer == 1) color = r << 16 | g << 8 | b;
00146 else color = NO_COLOR;
00147 return color;
00148 }
00149
00150
00151
00152
00153
00154 SXYTaskReturn SXYTaskAdjustAxis::mouseClick(SXYGraph* graph, int b, int x, int y,
00155 int sft, int ctr) {
00156 if ( b != 3 ) return CALLBACK_NOT_TREATED;
00157 int cht = graph->getChartOfEvent(x, y);
00158 if (cht < 0) return CALLBACK_NOT_TREATED;
00159
00160 SXYChart* chart = graph->getChart(cht);
00161 if (chart == NULL) return CALLBACK_NOT_TREATED;
00162
00163 int nhaxes = chart->getNumAxes(HORIZONTAL_AXIS);
00164 for( int ha = 0; ha < nhaxes; ha++ ) {
00165 SXYAxis* ax = chart->getAxis(HORIZONTAL_AXIS, ha);
00166 if ( pick_axis(ax,x,y) ) return openMenu(graph,ax);
00167 }
00168 int nvaxes = chart->getNumAxes(VERTICAL_AXIS);
00169 for( int va = 0; va < nvaxes; va++ ) {
00170 SXYAxis* ax = chart->getAxis(VERTICAL_AXIS, va);
00171 if ( pick_axis(ax,x,y) ) return openMenu(graph,ax);
00172 }
00173
00174 return CALLBACK_NOT_TREATED;
00175 }
00176
00177
00178
00179 SXYTaskReturn SXYTaskAdjustAxis::openMenu(SXYGraph* graph, SXYAxis* ax) {
00180 int language = ( !strcmp( IupGetLanguage(), IUP_ENGLISH ) ) ? 1 : 0;
00181
00182 char* scales_strings[][64] = {
00183 { "Alinhada com o eixo", "Ortogonal ao eixo" },
00184 { "Aligned to axis", "Orthogonal to axis" }
00185 };
00186 Ihandle* scale_aligned_item = IupItem(
00187 scales_strings[language][0], "cb_scale_aligned" );
00188 Ihandle* scale_rotated_item = IupItem(
00189 scales_strings[language][1], "cb_scale_rotated" );
00190
00191 IupSetAttribute(scale_aligned_item, HIDDEN_AXIS, (char*)ax);
00192 IupSetAttribute(scale_aligned_item, HIDDEN_GRAPH, (char*)graph);
00193 IupSetAttribute(scale_rotated_item, HIDDEN_AXIS, (char*)ax);
00194 IupSetAttribute(scale_rotated_item, HIDDEN_GRAPH, (char*)graph);
00195 if (ax->getScaleOrientation() == ALIGNED )
00196 IupSetAttribute(scale_aligned_item, IUP_VALUE, IUP_ON);
00197 else
00198 IupSetAttribute(scale_rotated_item, IUP_VALUE, IUP_ON);
00199
00200 char* title_strings[][64] = {
00201 { "Na extremidade", "Na extremidade e rotacionada", "No centro" },
00202 { "At edge", "At edge and rotated", "centralized" }
00203 };
00204 Ihandle* title_end_item = IupItem( title_strings[language][0],
00205 "cb_title_end" );
00206 Ihandle* title_end_rotated_item = IupItem( title_strings[language][1],
00207 "cb_title_end_rotated" );
00208 Ihandle* title_middle_item = IupItem( title_strings[language][2],
00209 "cb_title_middle" );
00210
00211 IupSetAttribute(title_end_item, HIDDEN_AXIS, (char*)ax);
00212 IupSetAttribute(title_end_item, HIDDEN_GRAPH, (char*)graph);
00213 IupSetAttribute(title_end_rotated_item, HIDDEN_AXIS, (char*)ax);
00214 IupSetAttribute(title_end_rotated_item, HIDDEN_GRAPH, (char*)graph);
00215 IupSetAttribute(title_middle_item, HIDDEN_AXIS, (char*)ax);
00216 IupSetAttribute(title_middle_item, HIDDEN_GRAPH, (char*)graph);
00217
00218 SXYAxisTitleStyle sty = ax->getTitleStyle();
00219 if ( sty == AT_MIDDLE )
00220 IupSetAttribute(title_middle_item, IUP_VALUE, IUP_ON);
00221 else if ( sty == AT_END )
00222 IupSetAttribute(title_end_item, IUP_VALUE, IUP_ON);
00223 else if ( sty == AT_END_ROTATED )
00224 IupSetAttribute(title_end_rotated_item, IUP_VALUE, IUP_ON);
00225
00226 char* item_strings[][64] = {
00227 { "Escala", "Título", "Eixo" },
00228 { "Scale", "Title", "SXYAxis" }
00229 };
00230 Ihandle* scale_color_item = IupItem( item_strings[language][0],
00231 "cb_scale_color" );
00232 Ihandle* title_color_item = IupItem( item_strings[language][1],
00233 "cb_title_color" );
00234 Ihandle* axis_color_item = IupItem( item_strings[language][2],
00235 "cb_axis_color" );
00236
00237 IupSetAttribute(axis_color_item, HIDDEN_AXIS, (char*)ax);
00238 IupSetAttribute(axis_color_item, HIDDEN_GRAPH, (char*)graph);
00239 IupSetAttribute(title_color_item, HIDDEN_AXIS, (char*)ax);
00240 IupSetAttribute(title_color_item, HIDDEN_GRAPH, (char*)graph);
00241 IupSetAttribute(scale_color_item, HIDDEN_AXIS, (char*)ax);
00242 IupSetAttribute(scale_color_item, HIDDEN_GRAPH, (char*)graph);
00243
00244
00245 Ihandle* scale_menu = IupMenu( scale_aligned_item,
00246 scale_rotated_item, NULL );
00247 Ihandle* title_menu = IupMenu( title_end_item,
00248 title_end_rotated_item, title_middle_item, NULL );
00249 Ihandle* color_menu = IupMenu( axis_color_item,
00250 title_color_item, scale_color_item, NULL );
00251
00252
00253 char* submenu_strings[][64] = {
00254 { "Orientar a escala", "Posicionar o título", "Definir cores" },
00255 { "Scale orientation", "title position", "Colors" }
00256 };
00257 Ihandle* scale_submenu = IupSubmenu(
00258 submenu_strings[language][0], scale_menu );
00259 Ihandle* title_submenu = IupSubmenu(
00260 submenu_strings[language][1], title_menu );
00261 Ihandle* color_submenu = IupSubmenu(
00262 submenu_strings[language][2], color_menu );
00263
00264
00265 IupSetFunction( "cb_scale_aligned", (Icallback)cb_scale_aligned );
00266 IupSetFunction( "cb_scale_rotated", (Icallback)cb_scale_rotated );
00267
00268 IupSetFunction( "cb_axis_color", (Icallback)cb_axis_color );
00269 IupSetFunction( "cb_title_color", (Icallback)cb_title_color );
00270 IupSetFunction( "cb_scale_color", (Icallback)cb_scale_color );
00271
00272 IupSetFunction( "cb_title_middle", (Icallback)cb_title_middle );
00273 IupSetFunction( "cb_title_end", (Icallback)cb_title_end );
00274 IupSetFunction( "cb_title_end_rotated", (Icallback)cb_title_end_rotated );
00275
00276
00277 Ihandle* menu = IupMenu(color_submenu, scale_submenu, title_submenu, NULL);
00278 IupPopup(menu, IUP_MOUSEPOS, IUP_MOUSEPOS);
00279 IupDestroy(menu);
00280
00281 return CALLBACK_TREATED;
00282 }
00283
00284
00285
00286 SXYTaskAdjustAxis::SXYTaskAdjustAxis(void) {
00287 }
00288
00289
00290
00291 SXYTaskAdjustAxis::~SXYTaskAdjustAxis() {
00292 }
00293
00294
00295
00296 SXYTaskReturn SXYTaskAdjustAxis::mouseUnclick(SXYGraph* graph, int b, int x, int y,
00297 int sft, int ctr) {
00298 return CALLBACK_NOT_TREATED;
00299 }
00300
00301
00302 SXYTaskReturn SXYTaskAdjustAxis::mouseMotion(SXYGraph* graph, int x, int y,
00303 int sft, int ctr) {
00304 return CALLBACK_NOT_TREATED;
00305 }
00306
00307
00308
00309 SXYTaskReturn SXYTaskAdjustAxis::mouseEnter(SXYGraph* graph) {
00310 return CALLBACK_NOT_TREATED;
00311 }
00312
00313
00314
00315 SXYTaskReturn SXYTaskAdjustAxis::mouseLeave(SXYGraph* graph) {
00316 return CALLBACK_NOT_TREATED;
00317 }
00318