00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include <locale.h>
00029 #include <libintl.h>
00030
00031
00032 #include "gxsm_app.h"
00033
00034 #include "unit.h"
00035 #include "pcs.h"
00036 #include "xsmtypes.h"
00037 #include <gtk/gtk.h>
00038 #include "glbvars.h"
00039
00040 #include "gtkspinbuttonsci.h"
00041
00042 void callback_view( GtkWidget *widget, gpointer data ){
00043 XSM_DEBUG(DBG_L3, "cb_view");
00044 if (gapp && GTK_TOGGLE_BUTTON (widget)->active)
00045 gapp->xsm->SetVM((long)data);
00046 }
00047
00048 void cbtext( GtkEditable *widget, App *ap ){
00049 XSM_DEBUG(DBG_L3, "ui.comment changed!!");
00050 ap->ui_setcomment();
00051 }
00052
00053 void cbbasename( GtkWidget *widget, App *ap ){
00054 ap->as_setdata();
00055 }
00056
00057 void cb_display_changed( Param_Control* pcs, void *ap ){
00058 XSM_DEBUG(DBG_L3, "cb_display_changed");
00059 ((App*)ap)->xsm->SetVM();
00060 }
00061
00062 void cb_display_changed_hilo( Param_Control* pcs, void *ap ){
00063 XSM_DEBUG(DBG_L3, "cb_display_changed_hilo");
00064 Scan *sc;
00065 if( (sc=((App*)ap)->xsm->ActiveScan) )
00066 ((App*)ap)->xsm->AutoDisplay( ((App*)ap)->xsm->data.display.GetCntHigh(),
00067 ((App*)ap)->xsm->data.display.GetCntLow()
00068 );
00069 }
00070
00071 void cb_setmode( GtkWidget *widget, int data ){
00072 XSM_DEBUG(DBG_L3, "cb_setmode");
00073 if (GTK_TOGGLE_BUTTON (widget)->active)
00074 gapp->xsm->SetModeFlg(data);
00075 else
00076 gapp->xsm->ClrModeFlg(data);
00077
00078 if(IS_SPALEED_CTRL){
00079 gapp->spa_mode_switch_check();
00080 gapp->spa_SeV_unit_switch_check();
00081 gapp->spm_update_all();
00082 }
00083 }
00084
00085 GtkWidget* App::create_control (){
00086 GtkWidget *vbox;
00087 vbox = gtk_vbox_new (FALSE, 0);
00088 gtk_container_border_width (GTK_CONTAINER (vbox), BorderWidth);
00089 gtk_widget_show (vbox);
00090 return(vbox);
00091 }
00092
00093 void App::spm_range_check(Param_Control* pcs, gpointer app){
00094 App* a = (App*)app;
00095 XSM_DEBUG(DBG_L3, "range check" );
00096 XSM_Instrument *Inst = a->xsm->Inst;
00097 SCAN_DATA *data = &(a->xsm->data);
00098
00099 if(IS_SPALEED_CTRL){
00100
00101 data->s.dx = data->s.rx/(data->s.nx-1);
00102
00103 if(0){
00104 data->s.dy = data->s.ry/(data->s.ny-1);
00105 data->s.ry = data->s.dy*(data->s.ny-1);
00106 }else{
00107
00108 if(data->s.ry > 0.){
00109 data->s.dy = data->s.dx;
00110 data->s.ry = (data->s.ny-1)*data->s.dy;
00111 }else{
00112 data->s.dy = 0.;
00113 data->s.ry = 0.;
00114 }
00115
00116 }
00117 }else{
00118 if(a->xsm->IsMode(MODE_SETPOINTS)){
00119
00120 data->s.nx = 1 + R2INT(data->s.rx/data->s.dx);
00121 data->s.dx = MAX(1,R2INT(data->s.dx/Inst->XResolution()))*Inst->XResolution();
00122 data->s.rx = (data->s.nx-1) * data->s.dx;
00123
00124 if(data->s.dy>=Inst->YResolution()/2.){
00125 data->s.ny = 1 + R2INT(data->s.ry/data->s.dy);
00126 data->s.dy = MAX(1,R2INT(data->s.dy/Inst->YResolution()))*Inst->YResolution();
00127 data->s.ry = (data->s.ny-1) * data->s.dy;
00128 }
00129 }else
00130 if(a->xsm->IsMode(MODE_SETSTEPS)){
00131
00132 XSM_DEBUG(DBG_L3, "fixpoints" );
00133 data->s.dx = data->s.rx/(data->s.nx-1);
00134 data->s.dx = MAX(1,R2INT(data->s.dx/Inst->XResolution()))*Inst->XResolution();
00135 data->s.rx = (data->s.nx-1) * data->s.dx;
00136
00137 data->s.dy = data->s.ry/(data->s.ny-1);
00138 data->s.dy = MAX(1,R2INT(data->s.dy/Inst->YResolution()))*Inst->YResolution();
00139 data->s.ry = (data->s.ny-1) * data->s.dy;
00140 }else{
00141
00142 XSM_DEBUG(DBG_L3, "fixsteps" );
00143 data->s.dx = MAX(1,R2INT(data->s.dx/Inst->XResolution()))*Inst->XResolution();
00144 data->s.rx = (data->s.nx-1) * data->s.dx;
00145
00146 data->s.dy = MAX(1,R2INT(data->s.dy/Inst->YResolution()))*Inst->YResolution();
00147 data->s.ry = (data->s.ny-1) * data->s.dy;
00148 }
00149 }
00150 if(gtk_object_get_data ( GTK_OBJECT (a->spm_control), "EC_Rx")){
00151 ((Gtk_EntryControl*)gtk_object_get_data ( GTK_OBJECT (a->spm_control), "EC_Rx"))
00152 ->setMax(a->xsm->XRangeMax());
00153 XSM_DEBUG(DBG_L3, "Rx Max: " << a->xsm->XRangeMax() );
00154 }
00155 if(gtk_object_get_data ( GTK_OBJECT (a->spm_control), "EC_Ry")){
00156 ((Gtk_EntryControl*)gtk_object_get_data ( GTK_OBJECT (a->spm_control), "EC_Ry"))
00157 ->setMax(a->xsm->YRangeMax());
00158 XSM_DEBUG(DBG_L3, "Ry Max: " << a->xsm->YRangeMax() );
00159 }
00160 if(gtk_object_get_data ( GTK_OBJECT (a->spm_control), "EC_Stx"))
00161 ((Gtk_EntryControl*)gtk_object_get_data ( GTK_OBJECT (a->spm_control), "EC_Stx"))
00162 ->setMax(a->xsm->XStepMax());
00163 if(gtk_object_get_data ( GTK_OBJECT (a->spm_control), "EC_Sty"))
00164 ((Gtk_EntryControl*)gtk_object_get_data ( GTK_OBJECT (a->spm_control), "EC_Sty"))
00165 ->setMax(a->xsm->YStepMax());
00166
00167 if(gtk_object_get_data ( GTK_OBJECT (a->spm_control), "EC_Offx")){
00168 ((Gtk_EntryControl*)gtk_object_get_data ( GTK_OBJECT (a->spm_control), "EC_Offx"))
00169 ->setMax(a->xsm->XOffsetMax());
00170 ((Gtk_EntryControl*)gtk_object_get_data ( GTK_OBJECT (a->spm_control), "EC_Offx"))
00171 ->setMin(a->xsm->XOffsetMin());
00172 }
00173 if(gtk_object_get_data ( GTK_OBJECT (a->spm_control), "EC_Offy")){
00174 ((Gtk_EntryControl*)gtk_object_get_data ( GTK_OBJECT (a->spm_control), "EC_Offy"))
00175 ->setMax(a->xsm->YOffsetMax());
00176 ((Gtk_EntryControl*)gtk_object_get_data ( GTK_OBJECT (a->spm_control), "EC_Offy"))
00177 ->setMin(a->xsm->YOffsetMin());
00178 }
00179
00180 a->spm_update_all();
00181
00182
00183
00184 data->s.dz = Inst->ZResolution();
00185
00186 a->SignalSPMRangeEventToPlugins();
00187
00188 if(IS_SPALEED_CTRL)
00189 a->spa_show_scan_time();
00190 }
00191
00192 void App::spm_offset_check(Param_Control* pcs, gpointer app){
00193 App* a = (App*)app;
00194 XSM_DEBUG(DBG_L3, "offset check" );
00195 XSM_Instrument *Inst = ((App*)app)->xsm->Inst;
00196 SCAN_DATA *data = &((App*)app)->xsm->data;
00197
00198
00199 if(IS_SPALEED_CTRL)
00200 ((App*)app)->xsm->hardware->SetOffset
00201 (R2INT(Inst->X0A2Dig(data->s.x0)
00202 + data->s.SPA_OrgX/Inst->X0Resolution()),
00203 R2INT(Inst->Y0A2Dig(data->s.y0)
00204 + data->s.SPA_OrgY/Inst->Y0Resolution()));
00205 else
00206 ((App*)app)->xsm->hardware->SetOffset
00207 (R2INT(Inst->X0A2Dig(data->s.x0)),
00208 R2INT(Inst->Y0A2Dig(data->s.y0)));
00209
00210 ((App*)app)->spm_update_all();
00211
00212 a->SignalSPMRangeEventToPlugins();
00213
00214
00215 ((App*)app)->xsm->hardware->MovetoXY(0, 0);
00216
00217 #if 0
00218
00219
00220
00221
00222
00223
00224 if(IS_SPALEED_CTRL){
00225 ((App*)app)->xsm->hardware->MovetoXY(0, R2INT(Inst->YA2Dig((-data->s.ny/2)*data->s.dy)));
00226 }else{
00227 ((App*)app)->xsm->hardware->MovetoXY(0, 0);
00228 }
00229 #endif
00230 }
00231
00232 void App::spm_nlayer_update(Param_Control* pcs, gpointer app){
00233
00234
00235
00236
00237
00238 }
00239
00240 void App::spm_select_layer(Param_Control* pcs, gpointer app){
00241 gchar *valtxt = NULL;
00242 int i3d = gapp->xsm->data.display.vlayer;
00243 if (i3d < 0)
00244 i3d = 0;
00245
00246
00247
00248 if (((App*)app)->xsm->ActiveScan){
00249 double lastlayer = (double)(((App*)app)->xsm->ActiveScan->mem2d->GetNv ()-1);
00250 if (lastlayer > 1.){
00251 pcs->setMax (lastlayer);
00252 GTK_ADJUSTMENT (((Gtk_EntryControl*)pcs)->GetAdjustment ())->upper = (gfloat)lastlayer;
00253 }
00254 if (i3d < ((App*)app)->xsm->ActiveScan->mem2d->GetNv ()){
00255 ((App*)app)->xsm->ActiveScan->mem2d->SetLayer (i3d);
00256 ((App*)app)->xsm->SetRedraw();
00257 if (((App*)app)->xsm->ActiveScan->data.Vunit)
00258 valtxt = ((App*)app)->xsm->ActiveScan->data.Vunit->UsrString (
00259 ((App*)app)->xsm->ActiveScan->mem2d->data->GetVLookup (i3d));
00260 else
00261 valtxt = g_strdup ("-U-");
00262 }else{
00263 XSM_DEBUG(DBG_L3, "Sorry, requested layer is out of range!" );
00264 valtxt = g_strdup("--");
00265 }
00266
00267
00268 }else{
00269 valtxt = g_strdup("*");
00270 }
00271
00272 gtk_label_set
00273 ( GTK_LABEL ((GtkWidget*) gtk_object_get_data
00274 ( GTK_OBJECT (((App*)app)->spm_control), "LayerSelectValue")),
00275 valtxt
00276 );
00277 g_free (valtxt);
00278
00279 ((App*)app)->xsm->SetVM();
00280 }
00281
00282 void App::spa_energy_check(Param_Control* pcs, gpointer app){
00283 XSM_Instrument *Inst = ((App*)app)->xsm->Inst;
00284 SCAN_DATA *data = &((App*)app)->xsm->data;
00285
00286 XSM_DEBUG(DBG_L3, "energy changed !" );
00287
00288
00289
00290 data->s.Bias = Inst->eV2V(data->s.Energy);
00291
00292
00293
00294 if(((App*)app)->xsm->IsMode(MODE_BZUNIT)){
00295
00296 double etmp=Inst->eV2V(data->s.Energy);
00297 XSM_DEBUG(DBG_L3, "energy check: recalc new Volt from BZ" );
00298 g_slist_foreach (
00299 (GSList*)gtk_object_get_data (
00300 GTK_OBJECT (((App*)app)->spm_control),
00301 "SPA_EnergyDepend_list"),
00302 (GFunc) App::recalc_volt_from_new_Energy, &etmp);
00303 }
00304
00305 ((App*)app)->xsm->BZ_Unit->SetE(data->s.Energy);
00306 ((App*)app)->spm_update_all();
00307 }
00308
00309 void App::spa_show_scan_time(){
00310 double s,m,h;
00311 gchar *t;
00312 s = xsm->data.s.GateTime * xsm->data.s.nx*xsm->data.s.ny;
00313 h = floor(s/3600.);
00314 m = floor((s-h*3600.)/60.);
00315 s-= h*3600.+m*60.;
00316 SetStatus("approx Scantime",
00317 t=g_strdup_printf("%.0f:%02.0f:%02.0f",h,m,s));
00318 g_free(t);
00319 }
00320
00321 void App::spa_gate_check(Param_Control* pcs, gpointer app){
00322 App *a = (App*)app;
00323 a->xsm->data.display.cnttime = a->xsm->data.s.GateTime;
00324
00325 a->xsm->CPSHiLoUnit->Change(1.);
00326 a->spa_show_scan_time();
00327 }
00328
00329 void App::spa_SeV_unit_switch_check(){
00330 static int lastmode=MODE_ENERGY_EV;
00331 if(gapp->xsm->IsMode(MODE_ENERGY_EV)){
00332 if(lastmode == MODE_ENERGY_EV) return;
00333 lastmode = MODE_ENERGY_EV;
00334 ((Gtk_EntryControl *) gtk_object_get_data( GTK_OBJECT (spm_control), "SPA_Energy"))->changeUnit(gapp->xsm->EnergyUnit);
00335 }else{
00336 if(lastmode == MODE_ENERGY_S) return;
00337 lastmode = MODE_ENERGY_S;
00338 ((Gtk_EntryControl *) gtk_object_get_data( GTK_OBJECT (spm_control), "SPA_Energy"))->changeUnit(gapp->xsm->YSUnit);
00339 }
00340 }
00341
00342 void App::recalc_volt_from_new_Energy(double* x, double *Eneu){
00343 BZUnit BZEnew(*gapp->xsm->BZ_Unit);
00344 BZEnew.SetE(*Eneu);
00345
00346 *x = BZEnew.Usr2Base(gapp->xsm->BZ_Unit->Base2Usr(*x));
00347 }
00348
00349
00350 void App::spa_switch_unit(Param_Control* pcs, gpointer data){
00351 pcs->changeUnit((UnitObj*)data);
00352 }
00353
00354 void App::spa_mode_switch_check(){
00355 static int lastmode=MODE_VOLTUNIT;
00356
00357 if(gapp->xsm->IsMode(MODE_BZUNIT)){
00358 if(lastmode == MODE_BZUNIT) return;
00359 lastmode = MODE_BZUNIT;
00360
00361 XSM_DEBUG(DBG_L3, "mode switch check: recalc BZ from Volt" );
00362 g_slist_foreach (
00363 (GSList*)gtk_object_get_data (
00364 GTK_OBJECT (gapp->spm_control),
00365 "SPA_EnergyDependEC_list"),
00366 (GFunc) App::spa_switch_unit, gapp->xsm->BZ_Unit);
00367 gapp->spm_update_all();
00368 }else{
00369 if(lastmode == MODE_VOLTUNIT) return;
00370 lastmode = MODE_VOLTUNIT;
00371 XSM_DEBUG(DBG_L3, "mode switch check: recalc Volt from BZ" );
00372 g_slist_foreach (
00373 (GSList*)gtk_object_get_data (
00374 GTK_OBJECT (gapp->spm_control),
00375 "SPA_EnergyDependEC_list"),
00376 (GFunc) App::spa_switch_unit, gapp->xsm->VoltUnit);
00377 }
00378 spm_range_check(NULL, gapp);
00379 }
00380
00381
00382
00383 GtkWidget* App::create_spm_control (){
00384 GSList *EC_list=NULL;
00385 GSList *EC_ScanFix_list=NULL;
00386
00387 Gtk_EntryControl *ec;
00388
00389 GtkWidget *vbox;
00390 GtkWidget *vbox_side;
00391 GtkWidget *hbox;
00392 GtkWidget *frame_param, *vbox_param, *hbox_param;
00393 GtkWidget *frame_view, *vbox_view;
00394
00395 GtkWidget *input, *inputM, *inputC;
00396 GtkWidget *inputMR, *inputMS, *inputMN;
00397 GtkWidget *inputCR, *inputCS, *inputCN;
00398
00399 GtkWidget *radiobutton;
00400 GSList *radiogroup;
00401
00402 vbox = gtk_vbox_new (FALSE, 0);
00403 gtk_widget_show (vbox);
00404
00405 gtk_box_pack_start (GTK_BOX (main_control), vbox, TRUE, TRUE, 0);
00406
00407 hbox = gtk_hbox_new (FALSE, 0);
00408 gtk_widget_show (hbox);
00409 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
00410
00411 frame_param = gtk_frame_new ("Scan Parameter");
00412 gtk_widget_show (frame_param);
00413 gtk_container_add (GTK_CONTAINER (hbox), frame_param);
00414
00415 vbox_param = gtk_vbox_new (FALSE, 0);
00416 gtk_widget_show (vbox_param);
00417 gtk_container_add (GTK_CONTAINER (frame_param), vbox_param);
00418
00419
00420 XSM_DEBUG(DBG_L3, "creating range controls");
00421 inputMR = mygtk_create_input("Range XY", vbox_param, hbox_param);
00422 ec = new Gtk_EntryControl (xsm->X_Unit, MLD_WERT_NICHT_OK, &xsm->data.s.rx,
00423 0.,
00424
00425 xsm->XRangeMax(),
00426 xsm->AktUnit->prec1, inputMR);
00427 ec->Set_ChangeNoticeFkt(App::spm_range_check, this);
00428 EC_list = g_slist_prepend( EC_list, ec);
00429 EC_ScanFix_list = g_slist_prepend( EC_ScanFix_list, ec);
00430 RemoteEntryList = ec->AddEntry2RemoteList("RangeX", RemoteEntryList);
00431 gtk_object_set_data( GTK_OBJECT (vbox), "EC_Rx", ec);
00432
00433 inputCR= mygtk_add_input(hbox_param);
00434 ec = new Gtk_EntryControl (xsm->Y_Unit, MLD_WERT_NICHT_OK, &xsm->data.s.ry,
00435 0.,
00436
00437 xsm->YRangeMax(),
00438 xsm->AktUnit->prec1, inputCR);
00439 ec->Set_ChangeNoticeFkt(App::spm_range_check, this);
00440 EC_list = g_slist_prepend( EC_list, ec);
00441 EC_ScanFix_list = g_slist_prepend( EC_ScanFix_list, ec);
00442 RemoteEntryList = ec->AddEntry2RemoteList("RangeY", RemoteEntryList);
00443 gtk_object_set_data( GTK_OBJECT (vbox), "EC_Ry", ec);
00444
00445 inputMS = mygtk_create_input("Steps XY", vbox_param, hbox_param);
00446 ec = new Gtk_EntryControl (xsm->X_Unit, MLD_WERT_NICHT_OK,&xsm->data.s.dx,
00447 0.,
00448
00449 xsm->XStepMax(),
00450 xsm->AktUnit->prec2, inputMS);
00451 ec->Set_ChangeNoticeFkt(App::spm_range_check, this);
00452 EC_list = g_slist_prepend( EC_list, ec);
00453 EC_ScanFix_list = g_slist_prepend( EC_ScanFix_list, ec);
00454 inputCS = mygtk_add_input(hbox_param);
00455 RemoteEntryList = ec->AddEntry2RemoteList("StepsX", RemoteEntryList);
00456 gtk_object_set_data( GTK_OBJECT (vbox), "EC_Stx", ec);
00457 ec = new Gtk_EntryControl (xsm->Y_Unit, MLD_WERT_NICHT_OK,&xsm->data.s.dy,
00458 0.,
00459
00460 xsm->YStepMax(),
00461 xsm->AktUnit->prec2, inputCS);
00462 ec->Set_ChangeNoticeFkt(App::spm_range_check, this);
00463 EC_list = g_slist_prepend( EC_list, ec);
00464 EC_ScanFix_list = g_slist_prepend( EC_ScanFix_list, ec);
00465 RemoteEntryList = ec->AddEntry2RemoteList("StepsY", RemoteEntryList);
00466 gtk_object_set_data( GTK_OBJECT (vbox), "EC_Sty", ec);
00467
00468
00469 inputMN = mygtk_create_input("Points XY", vbox_param, hbox_param);
00470 ec = new Gtk_EntryControl (xsm->Unity, MLD_WERT_NICHT_OK,&xsm->data.s.nx,
00471 xsm->XMinPoints(), xsm->XMaxPoints(),
00472 "4.0f", inputMN);
00473 ec->Set_ChangeNoticeFkt(App::spm_range_check, this);
00474 EC_list = g_slist_prepend( EC_list, ec);
00475 EC_ScanFix_list = g_slist_prepend( EC_ScanFix_list, ec);
00476 RemoteEntryList = ec->AddEntry2RemoteList("PointsX", RemoteEntryList);
00477 gtk_object_set_data( GTK_OBJECT (vbox), "EC_Pnx", ec);
00478 inputCN = mygtk_add_input(hbox_param);
00479 ec = new Gtk_EntryControl (xsm->Unity, MLD_WERT_NICHT_OK,&xsm->data.s.ny,
00480 xsm->YMinPoints(), xsm->YMaxPoints(),
00481 "4.0f", inputCN);
00482 ec->Set_ChangeNoticeFkt(App::spm_range_check, this);
00483 EC_list = g_slist_prepend( EC_list, ec);
00484 EC_ScanFix_list = g_slist_prepend( EC_ScanFix_list, ec);
00485 RemoteEntryList = ec->AddEntry2RemoteList("PointsY", RemoteEntryList);
00486 gtk_object_set_data( GTK_OBJECT (vbox), "EC_Pny", ec);
00487
00488
00489
00490
00491
00492 gtk_object_set_data( GTK_OBJECT (inputMR), "HasClient", inputCR);
00493
00494
00495 gtk_object_set_data( GTK_OBJECT (inputMS), "HasClient", inputCS);
00496
00497
00498 gtk_object_set_data( GTK_OBJECT (inputMN), "HasClient", inputCN);
00499
00500
00501 XSM_DEBUG(DBG_L3, "creating Offset controls");
00502 inputM = mygtk_create_input("Offset XY", vbox_param, hbox_param);
00503 ec = new Gtk_EntryControl
00504 (xsm->X_Unit, MLD_WERT_NICHT_OK, &xsm->data.s.x0,
00505 xsm->XOffsetMin(), xsm->XOffsetMax(), xsm->AktUnit->prec1, inputM);
00506 EC_list = g_slist_prepend( EC_list, ec);
00507 RemoteEntryList = ec->AddEntry2RemoteList("OffsetX", RemoteEntryList);
00508 ec->Set_ChangeNoticeFkt(App::spm_offset_check, this);
00509 gtk_object_set_data( GTK_OBJECT (vbox), "EC_Offx", ec);
00510
00511 inputC = mygtk_add_input(hbox_param);
00512 ec = new Gtk_EntryControl
00513 (xsm->Y_Unit, MLD_WERT_NICHT_OK, &xsm->data.s.y0,
00514 xsm->YOffsetMin(), xsm->YOffsetMax(), xsm->AktUnit->prec1, inputC);
00515 EC_list = g_slist_prepend( EC_list, ec);
00516
00517 RemoteEntryList = ec->AddEntry2RemoteList("OffsetY", RemoteEntryList);
00518 ec->Set_ChangeNoticeFkt(App::spm_offset_check, this);
00519 gtk_object_set_data( GTK_OBJECT (vbox), "EC_Offy", ec);
00520
00521
00522
00523 input = mygtk_create_input("Layers", vbox_param, hbox_param, 100, 50);
00524 ec = new Gtk_EntryControl
00525 (xsm->Unity, MLD_WERT_NICHT_OK, &xsm->data.s.nvalues,
00526 1., xsm->MaxValues(), ".0f", input);
00527 EC_list = g_slist_prepend( EC_list, ec);
00528 RemoteEntryList = ec->AddEntry2RemoteList("Layers", RemoteEntryList);
00529
00530 gtk_object_set_data( GTK_OBJECT (vbox), "EC_Layers", ec);
00531
00532 ec->Freeze ();
00533
00534 input = mygtk_add_spin(_(" "), hbox_param, 0, 0);
00535 gtk_object_set_data( GTK_OBJECT (vbox), "LayerSelectSpin", input);
00536 ec = new Gtk_EntryControl (xsm->Unity, _("Layer out of range"), &xsm->data.display.vlayer, 0., 10., ".0f", input, 1., 10.);
00537 ec->Set_ChangeNoticeFkt(App::spm_select_layer, this);
00538 SetupScale (ec->GetAdjustment(), hbox_param);
00539 EC_list = g_slist_prepend( EC_list, ec);
00540 RemoteEntryList = ec->AddEntry2RemoteList("LayerSelect", RemoteEntryList);
00541
00542 input = gtk_label_new ("-.--#");
00543 gtk_widget_set_size_request (input, 50, -1);
00544 gtk_widget_show (input);
00545 gtk_box_pack_start (GTK_BOX (hbox_param), input, TRUE, FALSE, GNOME_PAD);
00546 gtk_object_set_data( GTK_OBJECT (vbox), "LayerSelectValue", input);
00547
00548
00549
00550 XSM_DEBUG(DBG_L3, "creating Rotation controls");
00551 input = mygtk_create_spin_input("Rotation", vbox_param, hbox_param);
00552 gtk_object_set_data( GTK_OBJECT (input), "Adjustment_PCS_Name", (void*)("SPM_Rotation"));
00553 ec = new Gtk_EntryControl
00554 (xsm->ArcUnit, MLD_WERT_NICHT_OK, &xsm->data.s.alpha,
00555 -360., 360., "6g", input, 1., 15.);
00556 SetupScale (ec->GetAdjustment (), hbox_param);
00557 EC_list = g_slist_prepend( EC_list, ec);
00558 EC_ScanFix_list = g_slist_prepend( EC_ScanFix_list, ec);
00559 ec->Set_ChangeNoticeFkt(App::spm_offset_check, this);
00560 RemoteEntryList = ec->AddEntry2RemoteList("Rotation", RemoteEntryList);
00561
00562
00563 XSM_DEBUG(DBG_L3, "creating Display controls");
00564 input = mygtk_create_spin_input("VRange Z", vbox_param, hbox_param);
00565 gtk_object_set_data( GTK_OBJECT (input), "Adjustment_PCS_Name", (void*)("SPM_VRangeZ"));
00566 ec = new Gtk_EntryControl
00567 (xsm->data.Zunit, MLD_WERT_NICHT_OK, &xsm->data.display.vrange_z,
00568 -5000., 5000., ".3g", input, 1., 10.);
00569 SetupScale(ec->GetAdjustment(), hbox_param);
00570 ec->Set_ChangeNoticeFkt(cb_display_changed, this);
00571 EC_list = g_slist_prepend( EC_list, ec);
00572 RemoteEntryList = ec->AddEntry2RemoteList("VRangeZ", RemoteEntryList);
00573 gtk_object_set_data( GTK_OBJECT (vbox), "SPM_EC_VRangeZ", ec);
00574
00575 input = mygtk_create_spin_input("VOffset Z", vbox_param, hbox_param);
00576 gtk_object_set_data( GTK_OBJECT (input), "Adjustment_PCS_Name", (void*)("SPM_VOffsetZ"));
00577 ec = new Gtk_EntryControl
00578 (xsm->data.Zunit, MLD_WERT_NICHT_OK, &xsm->data.display.voffset_z,
00579 -5000., 5000., ".2g", input, 1., 10.);
00580 SetupScale(ec->GetAdjustment(), hbox_param);
00581 ec->Set_ChangeNoticeFkt(cb_display_changed, this);
00582 EC_list = g_slist_prepend( EC_list, ec);
00583 RemoteEntryList = ec->AddEntry2RemoteList("VOffsetZ", RemoteEntryList);
00584 gtk_object_set_data( GTK_OBJECT (vbox), "SPM_EC_VOffsetZ", ec);
00585
00586
00587
00588 vbox_side = gtk_vbox_new (FALSE, 0);
00589 gtk_widget_show (vbox_side);
00590 gtk_box_pack_start (GTK_BOX (hbox), vbox_side, TRUE, TRUE, 0);
00591
00592 frame_view = gtk_frame_new ("Calculate");
00593 gtk_widget_show (frame_view);
00594 gtk_container_add (GTK_CONTAINER (vbox_side), frame_view);
00595
00596 vbox_view = gtk_vbox_new (FALSE, 0);
00597 gtk_widget_show (vbox_view);
00598 gtk_container_add (GTK_CONTAINER (frame_view), vbox_view);
00599
00600
00601 radiobutton = gtk_radio_button_new_with_label( NULL, "Steps");
00602 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
00603 gtk_widget_show (radiobutton);
00604 gtk_signal_connect (GTK_OBJECT (radiobutton), "clicked",
00605 GTK_SIGNAL_FUNC (cb_setmode), (void*)MODE_SETSTEPS);
00606
00607 radiogroup = gtk_radio_button_group (GTK_RADIO_BUTTON (radiobutton));
00608
00609 radiobutton = gtk_radio_button_new_with_label (radiogroup, "Range");
00610 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
00611 gtk_widget_show (radiobutton);
00612 gtk_signal_connect (GTK_OBJECT (radiobutton), "clicked",
00613 GTK_SIGNAL_FUNC (cb_setmode), (void*)MODE_SETRANGE);
00614
00615 radiogroup = gtk_radio_button_group (GTK_RADIO_BUTTON (radiobutton));
00616
00617 radiobutton = gtk_radio_button_new_with_label( radiogroup, "Points");
00618 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
00619 gtk_widget_show (radiobutton);
00620 gtk_signal_connect (GTK_OBJECT (radiobutton), "clicked",
00621 GTK_SIGNAL_FUNC (cb_setmode), (void*)MODE_SETPOINTS);
00622
00623
00624
00625
00626 frame_view = gtk_frame_new ("View");
00627 gtk_widget_show (frame_view);
00628 gtk_container_add (GTK_CONTAINER (vbox_side), frame_view);
00629
00630 vbox_view = gtk_vbox_new (FALSE, 0);
00631 gtk_widget_show (vbox_view);
00632 gtk_container_add (GTK_CONTAINER (frame_view), vbox_view);
00633
00634 radiobutton = gtk_radio_button_new_with_label (NULL, "Quick");
00635 gtk_object_set_data( GTK_OBJECT (vbox), "quickbutton", radiobutton);
00636 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
00637 gtk_widget_show (radiobutton);
00638
00639 gtk_signal_connect (GTK_OBJECT (radiobutton), "clicked",
00640 GTK_SIGNAL_FUNC (callback_view), (gpointer) SCAN_V_QUICK);
00641
00642 radiogroup = gtk_radio_button_group (GTK_RADIO_BUTTON (radiobutton));
00643
00644 radiobutton = gtk_radio_button_new_with_label( radiogroup, "Direct");
00645 gtk_object_set_data( GTK_OBJECT (vbox), "directbutton", radiobutton);
00646 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
00647 gtk_widget_show (radiobutton);
00648 gtk_signal_connect (GTK_OBJECT (radiobutton), "clicked",
00649 GTK_SIGNAL_FUNC (callback_view), (gpointer) SCAN_V_DIRECT);
00650
00651 radiogroup = gtk_radio_button_group (GTK_RADIO_BUTTON (radiobutton));
00652
00653 radiobutton = gtk_radio_button_new_with_label( radiogroup, "Plane");
00654 gtk_object_set_data( GTK_OBJECT (vbox), "planesubbutton", radiobutton);
00655 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
00656 gtk_widget_show (radiobutton);
00657 gtk_signal_connect (GTK_OBJECT (radiobutton), "clicked",
00658 GTK_SIGNAL_FUNC (callback_view), (gpointer) SCAN_V_PLANESUB);
00659
00660 radiogroup = gtk_radio_button_group (GTK_RADIO_BUTTON (radiobutton));
00661
00662 radiobutton = gtk_radio_button_new_with_label( radiogroup, "Logarith.");
00663 gtk_object_set_data( GTK_OBJECT (vbox), "logbutton", radiobutton);
00664 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
00665 gtk_widget_show (radiobutton);
00666 gtk_signal_connect (GTK_OBJECT (radiobutton), "clicked",
00667 GTK_SIGNAL_FUNC (callback_view), (gpointer) SCAN_V_LOG);
00668
00669 radiogroup = gtk_radio_button_group (GTK_RADIO_BUTTON (radiobutton));
00670
00671 radiobutton = gtk_radio_button_new_with_label( radiogroup, "Horizont");
00672 gtk_object_set_data( GTK_OBJECT (vbox), "horizontalbutton", radiobutton);
00673 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
00674
00675 gtk_signal_connect (GTK_OBJECT (radiobutton), "clicked",
00676 GTK_SIGNAL_FUNC (callback_view), (gpointer) SCAN_V_HORIZONTAL);
00677
00678 radiogroup = gtk_radio_button_group (GTK_RADIO_BUTTON (radiobutton));
00679
00680 radiobutton = gtk_radio_button_new_with_label( radiogroup, "Diff.");
00681 gtk_object_set_data( GTK_OBJECT (vbox), "differentialbutton", radiobutton);
00682 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
00683 gtk_widget_show (radiobutton);
00684 gtk_signal_connect (GTK_OBJECT (radiobutton), "clicked",
00685 GTK_SIGNAL_FUNC (callback_view), (gpointer) SCAN_V_DIFFERENTIAL);
00686
00687 radiogroup = gtk_radio_button_group (GTK_RADIO_BUTTON (radiobutton));
00688
00689 radiobutton = gtk_radio_button_new_with_label( radiogroup, "Periodic");
00690 gtk_object_set_data( GTK_OBJECT (vbox), "periodicbutton", radiobutton);
00691 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
00692
00693 gtk_signal_connect (GTK_OBJECT (radiobutton), "clicked",
00694 GTK_SIGNAL_FUNC (callback_view), (gpointer) SCAN_V_HORIZONTAL);
00695
00696
00697
00698
00699 gtk_object_set_data( GTK_OBJECT (vbox), "SPM_EC_list", EC_list);
00700 gtk_object_set_data( GTK_OBJECT (vbox), "SPM_SCANFIX_EC_list", EC_ScanFix_list);
00701
00702 return(vbox);
00703 }
00704
00705
00706 void App::spm_update_all(int Vflg){
00707 if(!spm_control) return;
00708 XSM_DEBUG(DBG_L3, "------ App::spm_update_all -------");
00709 if(gapp){
00710 gapp->xsm->SetRedraw(FALSE);
00711
00712 gapp->xsm->data.UpdateUnits();
00713
00714
00715 if (gtk_object_get_data( GTK_OBJECT (spm_control), "SPM_EC_VRangeZ"))
00716 ((Gtk_EntryControl*)gtk_object_get_data( GTK_OBJECT (spm_control), "SPM_EC_VRangeZ"))->changeUnit(gapp->xsm->data.Zunit);
00717
00718 if (gtk_object_get_data( GTK_OBJECT (spm_control), "SPM_EC_VOffsetZ"))
00719 ((Gtk_EntryControl*)gtk_object_get_data( GTK_OBJECT (spm_control), "SPM_EC_VOffsetZ"))->changeUnit(gapp->xsm->data.Zunit);
00720
00721 g_slist_foreach (
00722 (GSList*)gtk_object_get_data (
00723 GTK_OBJECT (spm_control), "SPM_EC_list"),
00724 (GFunc) App::update_ec, NULL);
00725 }
00726 if(Vflg<0) Vflg=-Vflg;
00727 XSM_DEBUG(DBG_L3, "App::spm_update_all - Vflg=" << Vflg);
00728 switch(Vflg){
00729 case 0: break;
00730 case SCAN_V_DIRECT:
00731 gtk_toggle_button_set_active( (GtkToggleButton*)gtk_object_get_data( GTK_OBJECT (spm_control), "directbutton"), TRUE);
00732 break;
00733 case SCAN_V_QUICK:
00734 gtk_toggle_button_set_active( (GtkToggleButton*)gtk_object_get_data( GTK_OBJECT (spm_control), "quickbutton"), TRUE);
00735 break;
00736 case SCAN_V_PLANESUB:
00737 gtk_toggle_button_set_active( (GtkToggleButton*)gtk_object_get_data( GTK_OBJECT (spm_control), "planesubbutton"), TRUE);
00738 break;
00739 case SCAN_V_LOG:
00740 gtk_toggle_button_set_active( (GtkToggleButton*)gtk_object_get_data( GTK_OBJECT (spm_control), "logbutton"), TRUE);
00741 break;
00742 case SCAN_V_HORIZONTAL:
00743 gtk_toggle_button_set_active( (GtkToggleButton*)gtk_object_get_data( GTK_OBJECT (spm_control), "horziontalbutton"), TRUE);
00744 break;
00745 case SCAN_V_PERIODIC:
00746 gtk_toggle_button_set_active( (GtkToggleButton*)gtk_object_get_data( GTK_OBJECT (spm_control), "periodicbutton"), TRUE);
00747 break;
00748 case SCAN_V_DIFFERENTIAL:
00749 gtk_toggle_button_set_active( (GtkToggleButton*)gtk_object_get_data( GTK_OBJECT (spm_control), "differentialbutton"), TRUE);
00750 break;
00751 }
00752 if(gapp)
00753 gapp->xsm->SetRedraw();
00754
00755 ui_update();
00756 as_update();
00757 XSM_DEBUG(DBG_L3, "App::spm_update_all done");
00758 }
00759
00760 void App::spm_freeze_scanparam(){
00761 g_slist_foreach (
00762 (GSList*)gtk_object_get_data (
00763 GTK_OBJECT (spm_control),
00764 "SPM_SCANFIX_EC_list"),
00765 (GFunc) App::freeze_ec, NULL);
00766 }
00767
00768 void App::spm_thaw_scanparam(){
00769 g_slist_foreach (
00770 (GSList*) gtk_object_get_data (
00771 GTK_OBJECT (spm_control),
00772 "SPM_SCANFIX_EC_list"),
00773 (GFunc) App::thaw_ec, NULL);
00774 }
00775
00776 GtkWidget* App::create_spa_control (){
00777 GSList *EC_list=NULL;
00778 GSList *EC_ScanFix_list=NULL;
00779 GSList *EC_EnergyDep_list=NULL;
00780 GSList *EC_EnergyDepEC_list=NULL;
00781 GSList *EC_Ysize_list=NULL;
00782
00783 Gtk_EntryControl *ec;
00784
00785 GtkWidget *vboxmode;
00786 GtkWidget *vbox;
00787 GtkWidget *hbox;
00788 GtkWidget *frame_param, *vbox_param, *hbox_param;
00789 GtkWidget *frame_view, *vbox_view;
00790
00791 GtkWidget *input, *inputM, *inputC;
00792 GtkWidget *inputMR, *inputMN;
00793 GtkWidget *inputCR, *inputCN;
00794
00795 GtkWidget *radiobutton;
00796 GSList *radiogroup;
00797
00798 vbox = gtk_vbox_new (FALSE, 0);
00799 gtk_widget_show (vbox);
00800
00801 gtk_box_pack_start (GTK_BOX (main_control), vbox, TRUE, TRUE, 0);
00802
00803 hbox = gtk_hbox_new (FALSE, 0);
00804 gtk_widget_show (hbox);
00805 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
00806
00807 frame_param = gtk_frame_new ("Scan Parameter");
00808 gtk_widget_show (frame_param);
00809 gtk_container_add (GTK_CONTAINER (hbox), frame_param);
00810
00811 vbox_param = gtk_vbox_new (FALSE, 0);
00812 gtk_widget_show (vbox_param);
00813 gtk_container_add (GTK_CONTAINER (frame_param), vbox_param);
00814
00815
00816
00817 XSM_DEBUG(DBG_L3, "creating range controls");
00818 inputMR = mygtk_create_input("Length XY", vbox_param, hbox_param);
00819 ec = new Gtk_EntryControl (xsm->X_Unit, MLD_WERT_NICHT_OK, &xsm->data.s.rx,
00820 0.,
00821
00822 xsm->XRangeMax(),
00823 xsm->AktUnit->prec1, inputMR);
00824 ec->Set_ChangeNoticeFkt(App::spm_range_check, this);
00825 EC_list = g_slist_prepend( EC_list, ec);
00826 EC_ScanFix_list = g_slist_prepend( EC_ScanFix_list, ec);
00827 EC_EnergyDep_list = g_slist_prepend( EC_EnergyDep_list, &xsm->data.s.rx);
00828 EC_EnergyDepEC_list = g_slist_prepend( EC_EnergyDepEC_list, ec);
00829 RemoteEntryList = ec->AddEntry2RemoteList("LengthX", RemoteEntryList);
00830 gtk_object_set_data( GTK_OBJECT (vbox), "EC_Rx", ec);
00831
00832 inputCR= mygtk_add_input(hbox_param);
00833 ec = new Gtk_EntryControl (xsm->Y_Unit, MLD_WERT_NICHT_OK, &xsm->data.s.ry,
00834 0.,
00835
00836 xsm->YRangeMax(),
00837 xsm->AktUnit->prec1, inputCR);
00838 ec->Set_ChangeNoticeFkt(App::spm_range_check, this);
00839 EC_list = g_slist_prepend( EC_list, ec);
00840 EC_ScanFix_list = g_slist_prepend( EC_ScanFix_list, ec);
00841 EC_EnergyDep_list = g_slist_prepend( EC_EnergyDep_list, &xsm->data.s.ry);
00842 EC_EnergyDepEC_list = g_slist_prepend( EC_EnergyDepEC_list, ec);
00843 EC_Ysize_list = g_slist_prepend( EC_Ysize_list, inputCR);
00844 RemoteEntryList = ec->AddEntry2RemoteList("LengthY", RemoteEntryList);
00845 gtk_object_set_data( GTK_OBJECT (vbox), "EC_Rlisty", ec);
00846
00847 inputMN = mygtk_create_input("Points XY", vbox_param, hbox_param);
00848 ec = new Gtk_EntryControl (xsm->Unity, MLD_WERT_NICHT_OK,&xsm->data.s.nx,
00849 xsm->XMinPoints(), xsm->XMaxPoints(),
00850 "4.0f", inputMN);
00851 ec->Set_ChangeNoticeFkt(App::spm_range_check, this);
00852 EC_list = g_slist_prepend( EC_list, ec);
00853 EC_ScanFix_list = g_slist_prepend( EC_ScanFix_list, ec);
00854 RemoteEntryList = ec->AddEntry2RemoteList("PointsX", RemoteEntryList);
00855 gtk_object_set_data( GTK_OBJECT (vbox), "EC_Pnx", ec);
00856 inputCN = mygtk_add_input(hbox_param);
00857 ec = new Gtk_EntryControl (xsm->Unity, MLD_WERT_NICHT_OK,&xsm->data.s.ny,
00858 xsm->YMinPoints(), xsm->YMaxPoints(),
00859 "4.0f", inputCN);
00860 ec->Set_ChangeNoticeFkt(App::spm_range_check, this);
00861 EC_list = g_slist_prepend( EC_list, ec);
00862 EC_ScanFix_list = g_slist_prepend( EC_ScanFix_list, ec);
00863 EC_Ysize_list = g_slist_prepend( EC_Ysize_list, inputCN);
00864 RemoteEntryList = ec->AddEntry2RemoteList("PointsY", RemoteEntryList);
00865 gtk_object_set_data( GTK_OBJECT (vbox), "EC_Pny", ec);
00866
00867
00868
00869 gtk_object_set_data( GTK_OBJECT (inputMR), "HasClient", inputCR);
00870
00871 gtk_object_set_data( GTK_OBJECT (inputMN), "HasClient", inputCN);
00872
00873
00874 XSM_DEBUG(DBG_L3, "creating Offset controls");
00875 inputM = mygtk_create_input("Offset XY", vbox_param, hbox_param);
00876 ec = new Gtk_EntryControl
00877 (xsm->X_Unit, MLD_WERT_NICHT_OK, &xsm->data.s.x0,
00878 xsm->XOffsetMin(), xsm->XOffsetMax(), xsm->AktUnit->prec1, inputM);
00879 EC_list = g_slist_prepend( EC_list, ec);
00880 EC_ScanFix_list = g_slist_prepend( EC_ScanFix_list, ec);
00881 EC_EnergyDep_list = g_slist_prepend( EC_EnergyDep_list, &xsm->data.s.x0);
00882 EC_EnergyDepEC_list = g_slist_prepend( EC_EnergyDepEC_list, ec);
00883 RemoteEntryList = ec->AddEntry2RemoteList("OffsetX", RemoteEntryList);
00884 ec->Set_ChangeNoticeFkt(App::spm_offset_check, this);
00885
00886 inputC = mygtk_add_input(hbox_param);
00887 ec = new Gtk_EntryControl
00888 (xsm->Y_Unit, MLD_WERT_NICHT_OK, &xsm->data.s.y0,
00889 xsm->YOffsetMin(), xsm->YOffsetMax(), xsm->AktUnit->prec1, inputC);
00890 EC_list = g_slist_prepend( EC_list, ec);
00891
00892 EC_ScanFix_list = g_slist_prepend( EC_ScanFix_list, ec);
00893 EC_EnergyDep_list = g_slist_prepend( EC_EnergyDep_list, &xsm->data.s.y0);
00894 EC_EnergyDepEC_list = g_slist_prepend( EC_EnergyDepEC_list, ec);
00895 RemoteEntryList = ec->AddEntry2RemoteList("OffsetY", RemoteEntryList);
00896 ec->Set_ChangeNoticeFkt(App::spm_offset_check, this);
00897
00898
00899 XSM_DEBUG(DBG_L3, "creating Rotation controls");
00900 input = mygtk_create_spin_input("Rotation", vbox_param, hbox_param);
00901 gtk_object_set_data( GTK_OBJECT (input), "Adjustment_PCS_Name", (void*)("SPA_Rotation"));
00902 ec = new Gtk_EntryControl
00903 (xsm->ArcUnit, MLD_WERT_NICHT_OK, &xsm->data.s.alpha,
00904 -360., 360., "6g", input, 1., 15.);
00905 EC_list = g_slist_prepend( EC_list, ec);
00906 EC_ScanFix_list = g_slist_prepend( EC_ScanFix_list, ec);
00907 RemoteEntryList = ec->AddEntry2RemoteList("Rotation", RemoteEntryList);
00908
00909
00910 input = mygtk_create_input("Gatetime", vbox_param, hbox_param);
00911 ec = new Gtk_EntryControl
00912 (xsm->TimeUnitms, MLD_WERT_NICHT_OK, &xsm->data.s.GateTime,
00913 1e-4, 60., ".1f", input);
00914 ec->Set_ChangeNoticeFkt(App::spa_gate_check, this);
00915 EC_list = g_slist_prepend( EC_list, ec);
00916 EC_ScanFix_list = g_slist_prepend( EC_ScanFix_list, ec);
00917 RemoteEntryList = ec->AddEntry2RemoteList("Gatetime", RemoteEntryList);
00918
00919
00920 input = mygtk_create_spin_input("Energy", vbox_param, hbox_param);
00921 gtk_object_set_data( GTK_OBJECT (input), "Adjustment_PCS_Name", (void*)("SPA_Energy"));
00922 ec = new Gtk_EntryControl
00923 (xsm->EnergyUnit, MLD_WERT_NICHT_OK, &xsm->data.s.Energy,
00924 0., 500., ".2f", input, 0.1, 1.);
00925 ec->Set_ChangeNoticeFkt(App::spa_energy_check, this);
00926 EC_list = g_slist_prepend( EC_list, ec);
00927 EC_ScanFix_list = g_slist_prepend( EC_ScanFix_list, ec);
00928 spa_energy_check(NULL, this);
00929 RemoteEntryList = ec->AddEntry2RemoteList("Energy", RemoteEntryList);
00930 gtk_object_set_data( GTK_OBJECT (vbox), "SPA_Energy", ec);
00931
00932
00933
00934 XSM_DEBUG(DBG_L3, "creating Display controls");
00935 input = mygtk_create_spin_input("CPS high", vbox_param, hbox_param);
00936 gtk_object_set_data( GTK_OBJECT (input), "Adjustment_PCS_Name", (void*)("SPA_CPS_High"));
00937 ec = new Gtk_EntryControl
00938 (xsm->CPSHiLoUnit, MLD_WERT_NICHT_OK, &xsm->data.display.cpshigh,
00939 10., 10e6, ".0f", input, 1., 100.);
00940 SetupScale(ec->GetAdjustment(), hbox_param);
00941 ec->Set_ChangeNoticeFkt(cb_display_changed_hilo, this);
00942 EC_list = g_slist_prepend( EC_list, ec);
00943 RemoteEntryList = ec->AddEntry2RemoteList("CPShigh", RemoteEntryList);
00944
00945 input = mygtk_create_spin_input("CPS low", vbox_param, hbox_param);
00946 gtk_object_set_data( GTK_OBJECT (input), "Adjustment_PCS_Name", (void*)("SPA_CPS_Low"));
00947 ec = new Gtk_EntryControl
00948 (xsm->CPSHiLoUnit, MLD_WERT_NICHT_OK, &xsm->data.display.cpslow,
00949 0., 10e6,".0f", input, 1., 100.);
00950 SetupScale(ec->GetAdjustment(), hbox_param);
00951 ec->Set_ChangeNoticeFkt(cb_display_changed_hilo, this);
00952 EC_list = g_slist_prepend( EC_list, ec);
00953 RemoteEntryList = ec->AddEntry2RemoteList("CPSlow", RemoteEntryList);
00954
00955
00956 #define SPA_CONTRAST_CONTROLS
00957 #ifdef SPA_CONTRAST_CONTROLS
00958
00959 input = mygtk_create_spin_input("VRange Z", vbox_param, hbox_param);
00960 gtk_object_set_data( GTK_OBJECT (input), "Adjustment_PCS_Name", (void*)("SPA_VRangeZ"));
00961 ec = new Gtk_EntryControl
00962 (xsm->data.Zunit, MLD_WERT_NICHT_OK, &xsm->data.display.vrange_z,
00963 -1e6, 1e6, ".3g", input, 1., 100. );
00964 SetupScale(ec->GetAdjustment(), hbox_param);
00965 ec->Set_ChangeNoticeFkt(cb_display_changed, this);
00966 EC_list = g_slist_prepend( EC_list, ec);
00967 RemoteEntryList = ec->AddEntry2RemoteList("VRangeZ", RemoteEntryList);
00968 gtk_object_set_data( GTK_OBJECT (vbox), "SPM_EC_VRangeZ", ec);
00969
00970 input = mygtk_create_spin_input("VOffset Z", vbox_param, hbox_param);
00971 gtk_object_set_data( GTK_OBJECT (input), "Adjustment_PCS_Name", (void*)("SPA_VOffsetZ"));
00972 ec = new Gtk_EntryControl
00973 (xsm->data.Zunit, MLD_WERT_NICHT_OK, &xsm->data.display.voffset_z,
00974 -1e6, 1e6, ".2g", input, 1., 100.);
00975 SetupScale(ec->GetAdjustment(), hbox_param);
00976 ec->Set_ChangeNoticeFkt(cb_display_changed, this);
00977 EC_list = g_slist_prepend( EC_list, ec);
00978 RemoteEntryList = ec->AddEntry2RemoteList("VOffsetZ", RemoteEntryList);
00979 gtk_object_set_data( GTK_OBJECT (vbox), "SPM_EC_VOffsetZ", ec);
00980 #endif
00981
00982
00983 XSM_DEBUG(DBG_L3, "creating Offset controls");
00984 inputM = mygtk_create_input("Offset (0,0)", vbox_param, hbox_param);
00985 ec = new Gtk_EntryControl
00986 (xsm->VoltUnit, MLD_WERT_NICHT_OK, &xsm->data.s.SPA_OrgX,
00987 xsm->XOffsetMin(), xsm->XOffsetMax(), xsm->AktUnit->prec2, inputM);
00988 EC_list = g_slist_prepend( EC_list, ec);
00989 EC_ScanFix_list = g_slist_prepend( EC_ScanFix_list, ec);
00990 RemoteEntryList = ec->AddEntry2RemoteList("Offset00X", RemoteEntryList);
00991 ec->Set_ChangeNoticeFkt(App::spm_offset_check, this);
00992
00993 inputC = mygtk_add_input(hbox_param);
00994 ec = new Gtk_EntryControl
00995 (xsm->VoltUnit, MLD_WERT_NICHT_OK, &xsm->data.s.SPA_OrgY,
00996 xsm->YOffsetMin(), xsm->YOffsetMax(), xsm->AktUnit->prec2, inputC);
00997 EC_list = g_slist_prepend( EC_list, ec);
00998
00999 EC_ScanFix_list = g_slist_prepend( EC_ScanFix_list, ec);
01000 RemoteEntryList = ec->AddEntry2RemoteList("Offset00Y", RemoteEntryList);
01001 ec->Set_ChangeNoticeFkt(App::spm_offset_check, this);
01002
01003
01004
01005
01006 vboxmode = gtk_vbox_new (FALSE, 0);
01007 gtk_widget_show (vboxmode);
01008 gtk_box_pack_start (GTK_BOX (hbox), vboxmode, TRUE, TRUE, 0);
01009
01010 frame_view = gtk_frame_new ("Modes");
01011 gtk_widget_show (frame_view);
01012 gtk_container_add (GTK_CONTAINER (vboxmode), frame_view);
01013
01014 vbox_view = gtk_vbox_new (FALSE, 0);
01015 gtk_widget_show (vbox_view);
01016 gtk_container_add (GTK_CONTAINER (frame_view), vbox_view);
01017
01018
01019
01020 radiobutton = gtk_radio_button_new_with_label (NULL, "Volt");
01021 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
01022 gtk_widget_show (radiobutton);
01023 gtk_signal_connect (GTK_OBJECT (radiobutton), "clicked",
01024 GTK_SIGNAL_FUNC (cb_setmode), (void*)MODE_VOLTUNIT);
01025
01026 radiogroup = gtk_radio_button_group (GTK_RADIO_BUTTON (radiobutton));
01027
01028 radiobutton = gtk_radio_button_new_with_label( radiogroup, "%BZ");
01029 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
01030 gtk_widget_show (radiobutton);
01031 gtk_signal_connect (GTK_OBJECT (radiobutton), "clicked",
01032 GTK_SIGNAL_FUNC (cb_setmode), (void*)MODE_BZUNIT);
01033
01034
01035
01036 gtk_box_pack_start (GTK_BOX (vbox_view), gtk_hseparator_new (), TRUE, TRUE, 0);
01037
01038
01039
01040 radiobutton = gtk_radio_button_new_with_label (NULL, "Energy");
01041 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
01042 gtk_widget_show (radiobutton);
01043 gtk_signal_connect (GTK_OBJECT (radiobutton), "clicked",
01044 GTK_SIGNAL_FUNC (cb_setmode), (void*)MODE_ENERGY_EV);
01045
01046 radiogroup = gtk_radio_button_group (GTK_RADIO_BUTTON (radiobutton));
01047
01048 radiobutton = gtk_radio_button_new_with_label( radiogroup, "Phase");
01049 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
01050 gtk_widget_show (radiobutton);
01051 gtk_signal_connect (GTK_OBJECT (radiobutton), "clicked",
01052 GTK_SIGNAL_FUNC (cb_setmode), (void*)MODE_ENERGY_S);
01053
01054
01055
01056
01057
01058
01059
01060
01061
01062
01063
01064
01065
01066
01067
01068
01069
01070
01071
01072
01073
01074
01075 frame_view = gtk_frame_new ("View");
01076 gtk_widget_show (frame_view);
01077 gtk_container_add (GTK_CONTAINER (vboxmode), frame_view);
01078
01079 vbox_view = gtk_vbox_new (FALSE, 0);
01080 gtk_widget_show (vbox_view);
01081 gtk_container_add (GTK_CONTAINER (frame_view), vbox_view);
01082
01083 radiobutton = gtk_radio_button_new_with_label (NULL, "Quick");
01084 gtk_object_set_data( GTK_OBJECT (vbox), "quickbutton", radiobutton);
01085 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
01086 gtk_widget_show (radiobutton);
01087
01088
01089 gtk_signal_connect (GTK_OBJECT (radiobutton), "clicked",
01090 GTK_SIGNAL_FUNC (callback_view), (gpointer) SCAN_V_QUICK);
01091
01092 radiogroup = gtk_radio_button_group (GTK_RADIO_BUTTON (radiobutton));
01093
01094 radiobutton = gtk_radio_button_new_with_label( radiogroup, "Direct");
01095 gtk_object_set_data( GTK_OBJECT (vbox), "directbutton", radiobutton);
01096 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
01097 gtk_widget_show (radiobutton);
01098 gtk_signal_connect (GTK_OBJECT (radiobutton), "clicked",
01099 GTK_SIGNAL_FUNC (callback_view), (gpointer) SCAN_V_DIRECT);
01100
01101 radiogroup = gtk_radio_button_group (GTK_RADIO_BUTTON (radiobutton));
01102
01103 radiobutton = gtk_radio_button_new_with_label( radiogroup, "Plane");
01104 gtk_object_set_data( GTK_OBJECT (vbox), "planesubbutton", radiobutton);
01105 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
01106 gtk_widget_show (radiobutton);
01107 gtk_signal_connect (GTK_OBJECT (radiobutton), "clicked",
01108 GTK_SIGNAL_FUNC (callback_view), (gpointer) SCAN_V_PLANESUB);
01109
01110 radiogroup = gtk_radio_button_group (GTK_RADIO_BUTTON (radiobutton));
01111
01112 radiobutton = gtk_radio_button_new_with_label( radiogroup, "Logarith.");
01113 gtk_object_set_data( GTK_OBJECT (vbox), "logbutton", radiobutton);
01114 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
01115 gtk_widget_show (radiobutton);
01116 gtk_signal_connect (GTK_OBJECT (radiobutton), "clicked",
01117 GTK_SIGNAL_FUNC (callback_view), (gpointer) SCAN_V_LOG);
01118
01119 radiogroup = gtk_radio_button_group (GTK_RADIO_BUTTON (radiobutton));
01120
01121 radiobutton = gtk_radio_button_new_with_label( radiogroup, "Horizont");
01122 gtk_object_set_data( GTK_OBJECT (vbox), "horizontbutton", radiobutton);
01123 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
01124 gtk_widget_show (radiobutton);
01125 gtk_signal_connect (GTK_OBJECT (radiobutton), "clicked",
01126 GTK_SIGNAL_FUNC (callback_view), (gpointer) SCAN_V_HORIZONTAL);
01127
01128 radiogroup = gtk_radio_button_group (GTK_RADIO_BUTTON (radiobutton));
01129
01130 radiobutton = gtk_radio_button_new_with_label( radiogroup, "Diff.");
01131 gtk_object_set_data( GTK_OBJECT (vbox), "differentialbutton", radiobutton);
01132 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
01133 gtk_widget_show (radiobutton);
01134 gtk_signal_connect (GTK_OBJECT (radiobutton), "clicked",
01135 GTK_SIGNAL_FUNC (callback_view), (gpointer) SCAN_V_DIFFERENTIAL);
01136
01137 radiogroup = gtk_radio_button_group (GTK_RADIO_BUTTON (radiobutton));
01138
01139 radiobutton = gtk_radio_button_new_with_label( radiogroup, "Periodic");
01140 gtk_object_set_data( GTK_OBJECT (vbox), "periodicbutton", radiobutton);
01141 gtk_box_pack_start (GTK_BOX (vbox_view), radiobutton, TRUE, TRUE, 0);
01142 gtk_widget_show (radiobutton);
01143
01144
01145
01146 gtk_object_set_data( GTK_OBJECT (vbox), "SPM_EC_list", EC_list);
01147 gtk_object_set_data( GTK_OBJECT (vbox), "SPM_SCANFIX_EC_list", EC_ScanFix_list);
01148 gtk_object_set_data( GTK_OBJECT (vbox), "SPA_EnergyDepend_list", EC_EnergyDep_list);
01149 gtk_object_set_data( GTK_OBJECT (vbox), "SPA_EnergyDependEC_list", EC_EnergyDepEC_list);
01150 gtk_object_set_data( GTK_OBJECT (vbox), "SPA_Ysize_entrys", EC_Ysize_list);
01151
01152 return(vbox);
01153 }
01154
01155
01156 void App::spa_update(){
01157 g_slist_foreach (
01158 (GSList*) gtk_object_get_data (
01159 GTK_OBJECT (spm_control), "SPM_EC_list"),
01160 (GFunc) App::update_ec, NULL);
01161 ui_update();
01162 as_update();
01163 }
01164
01165 GtkWidget* App::create_as_control (){
01166 GSList *EC_list=NULL;
01167
01168 GtkWidget *vbox;
01169 GtkWidget *hbox;
01170 GtkWidget *frame_param, *vbox_param, *hbox_param;
01171
01172 GtkWidget *input;
01173
01174 GtkWidget *checkbutton;
01175
01176 vbox = gtk_vbox_new (FALSE, 0);
01177 gtk_widget_show (vbox);
01178
01179 gtk_box_pack_start (GTK_BOX (main_control), vbox, TRUE, TRUE, 0);
01180
01181 hbox = gtk_hbox_new (FALSE, 0);
01182 gtk_widget_show (hbox);
01183 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
01184
01185 frame_param = gtk_frame_new (_("File/Autosave"));
01186 gtk_widget_show (frame_param);
01187 gtk_container_add (GTK_CONTAINER (hbox), frame_param);
01188
01189 vbox_param = gtk_vbox_new (FALSE, 0);
01190 gtk_widget_show (vbox_param);
01191 gtk_container_add (GTK_CONTAINER (frame_param), vbox_param);
01192
01193 input = mygtk_create_input(_("Basename/#"), vbox_param, hbox_param);
01194 gtk_object_set_data( GTK_OBJECT (vbox), "basename", input);
01195 gtk_signal_connect (GTK_OBJECT (input), "changed",
01196 GTK_SIGNAL_FUNC (cbbasename),
01197 this);
01198
01199 input = mygtk_add_input(hbox_param);
01200 static Gtk_EntryControl Counter(xsm->Unity, MLD_WERT_NICHT_OK, &xsm->counter,
01201 0., 99999., "05.0f", input);
01202 EC_list = g_slist_prepend( EC_list, &Counter);
01203 RemoteEntryList = Counter.AddEntry2RemoteList(_("Counter"), RemoteEntryList);
01204
01205 checkbutton = gtk_check_button_new_with_label( _("Auto Save"));
01206 gtk_box_pack_start (GTK_BOX (hbox_param), checkbutton, TRUE, TRUE, 0);
01207 gtk_widget_show (checkbutton);
01208 gtk_signal_connect (GTK_OBJECT (checkbutton), "clicked",
01209 GTK_SIGNAL_FUNC (cb_setmode), (void*)MODE_AUTOSAVE);
01210
01211 input = mygtk_create_input(_("Originalname"), vbox_param, hbox_param);
01212 gtk_object_set_data( GTK_OBJECT (vbox), "originalname", input);
01213 gtk_entry_set_editable(GTK_ENTRY(input), FALSE);
01214
01215
01216 gtk_object_set_data( GTK_OBJECT (vbox), "AS_EC_list", EC_list);
01217
01218 return(vbox);
01219 }
01220
01221
01222 void App::as_update(){
01223 g_slist_foreach (
01224 (GSList*) gtk_object_get_data (
01225 GTK_OBJECT (as_control), "AS_EC_list"),
01226 (GFunc) App::update_ec, NULL);
01227 gtk_entry_set_text ((GTK_ENTRY (gtk_object_get_data( GTK_OBJECT (as_control), "basename"))),
01228 xsm->data.ui.basename);
01229 gtk_entry_set_text ((GTK_ENTRY (gtk_object_get_data( GTK_OBJECT (as_control), "originalname"))),
01230 xsm->data.ui.originalname);
01231 }
01232
01233 void App::as_setdata(){
01234 xsm->data.ui.SetBaseName (
01235 gtk_entry_get_text (GTK_ENTRY
01236 (gtk_object_get_data( GTK_OBJECT (as_control),
01237 "basename") ) )
01238 );
01239 }
01240
01241 GtkWidget* App::create_ui_control (){
01242
01243
01244 GtkWidget *vbox;
01245 GtkWidget *vbox_frame, *h;
01246 GtkWidget *frame;
01247 GtkWidget *text, *input;
01248 GtkWidget *scrolled_window;
01249
01250 vbox = gtk_vbox_new (FALSE, 0);
01251 gtk_box_pack_start (GTK_BOX (main_control), vbox, TRUE, TRUE, 0);
01252
01253 frame = gtk_frame_new (_("User Info & Comment"));
01254 gtk_container_add (GTK_CONTAINER (vbox), frame);
01255
01256 vbox_frame = gtk_vbox_new (FALSE, 0);
01257 gtk_container_add (GTK_CONTAINER (frame), vbox_frame);
01258
01259 text = gtk_text_view_new ();
01260 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
01261 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
01262 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_IN);
01263 gtk_widget_set_size_request (scrolled_window, -1, 70);
01264
01265 gtk_container_add (GTK_CONTAINER (scrolled_window),
01266 GTK_WIDGET (text)) ;
01267 gtk_container_add (GTK_CONTAINER (vbox_frame),
01268 scrolled_window);
01269
01270 GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
01271 gtk_text_buffer_set_text (buffer, _("Hey here is no comment yet!"), -1);
01272 gtk_object_set_data( GTK_OBJECT (vbox), "comment", buffer);
01273
01274
01275
01276 input = mygtk_create_input(_("Date of Scan"), vbox_frame, h);
01277 gtk_object_set_data( GTK_OBJECT (vbox), "dateofscan", input);
01278 gtk_entry_set_editable(GTK_ENTRY(input), FALSE);
01279
01280
01281
01282
01283
01284 gtk_widget_show_all (vbox);
01285 return(vbox);
01286 }
01287
01288 void App::ui_update(){
01289 static gchar* comment_tmp = NULL;
01290 if(xsm->data.ui.comment){
01291 #if 1
01292 if (comment_tmp){
01293 if (!strcmp (comment_tmp, xsm->data.ui.comment))
01294 ui_setcomment ();
01295 g_free (comment_tmp);
01296 comment_tmp = g_strdup (xsm->data.ui.comment);
01297 } else
01298 comment_tmp = g_strdup (xsm->data.ui.comment);
01299 #endif
01300 GtkTextBuffer *buffer = (GtkTextBuffer*)gtk_object_get_data( GTK_OBJECT (ui_control), "comment");
01301
01302 const gchar *ve=NULL;
01303 if (!g_utf8_validate ((const gchar*) xsm->data.ui.comment, -1, &ve)){
01304 gsize br, bw;
01305 g_print ("\nERROR at:\n");
01306 g_print ((const gchar*) ve);
01307
01308 g_print ((const gchar*) xsm->data.ui.comment);
01309
01310 gchar *tmp = g_convert_with_fallback ((const gchar*) xsm->data.ui.comment,
01311 strlen ((const gchar*) xsm->data.ui.comment),
01312 "UTF-8",
01313 "G_LOCALE",
01314 "?",
01315 &br, &bw,
01316 NULL);
01317 if (!tmp)
01318 tmp = g_strdup_printf ("Error while converting to UTF8. <%2x> r%d, w%d, l%d",
01319 *ve, (int)br, (int)bw, (int)strlen ((const gchar*) xsm->data.ui.comment));
01320 g_free(xsm->data.ui.comment);
01321 xsm->data.ui.comment = g_strdup (tmp);
01322 g_free (tmp);
01323 }
01324 gtk_text_buffer_set_text ( buffer, (const gchar*) xsm->data.ui.comment, -1);
01325 }
01326 if(xsm->data.ui.dateofscan){
01327 gtk_entry_set_text ((GTK_ENTRY (gtk_object_get_data( GTK_OBJECT (ui_control),
01328 "dateofscan"))),
01329 xsm->data.ui.dateofscan);
01330 }
01331 XSM_DEBUG(0, "ui.comment updated from data: " << xsm->data.ui.comment);
01332
01333
01334 }
01335
01336 void App::ui_setcomment(){
01337 GtkTextIter s,e;
01338 GtkTextBuffer *buffer = (GtkTextBuffer*)gtk_object_get_data( GTK_OBJECT (ui_control), "comment");
01339 gtk_text_buffer_get_bounds (buffer, &s, &e);
01340
01341 gchar *txt = gtk_text_buffer_get_text (buffer, &s, &e, FALSE);
01342
01343 g_free(xsm->data.ui.comment);
01344 xsm->data.ui.comment = g_strdup (txt);
01345 XSM_DEBUG(0, "ui.comment changed: " << xsm->data.ui.comment);
01346 }