mkicons.C

Go to the documentation of this file.
00001 /* Gnome gxsm - Gnome X Scanning Microscopy universal
00002  * STM/AFM/SARLS/SPALEED/... controlling and data analysis software
00003  *
00004  * Gxsm Plugin Name: mkicons.C
00005  * ========================================
00006  * 
00007  * Copyright (C) 1999 The Free Software Foundation
00008  *
00009  * Authors: Percy Zahl <zahl@fkp.uni-hannover.de>
00010  * additional features: Andreas Klust <klust@fkp.uni-hannover.de>
00011  *
00012  * This program is free software; you can redistribute it and/or modify
00013  * it under the terms of the GNU General Public License as published by
00014  * the Free Software Foundation; either version 2 of the License, or
00015  * (at your option) any later version.
00016  *
00017  * This program is distributed in the hope that it will be useful,
00018  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00020  * GNU General Public License for more details.
00021  *
00022  * You should have received a copy of the GNU General Public License
00023  * along with this program; if not, write to the Free Software
00024  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
00025  */
00026 /* Please do not change the Begin/End lines of this comment section!
00027  * this is a LaTeX style section used for auto generation of the PlugIn Manual 
00028  * Chapter. Add a complete PlugIn documentation inbetween the Begin/End marks!
00029  * All "% PlugInXXX" commentary tags are mandatory
00030  * All "% OptPlugInXXX" tags are optional
00031  * --------------------------------------------------------------------------------
00032 % BeginPlugInDocuSection
00033 % PlugInDocuCaption: MkIcons -- Make icons
00034 % PlugInName: mkicons
00035 % PlugInAuthor: Stefan Schr\"oder
00036 % PlugInAuthorEmail: stefan_fkp@users.sf.net
00037 % PlugInMenuPath: Tools
00038 
00039 % PlugInDescription
00040 This plugin helps you printing several nc-images on one page.
00041 
00042 % PlugInUsage
00043  Choose Mkicons from the \GxsmMenu{Tools} menu. 
00044 
00045 % EndPlugInDocuSection
00046  *
00047  --------------------------------------------------------------------------------
00048 */
00049 
00050 #include <gtk/gtk.h>
00051 #include <dirent.h>
00052 #include <fnmatch.h>
00053 #include "config.h"
00054 #include "gxsm/plugin.h"
00055 #include "epsfutils.h"
00056 #include "gxsm/glbvars.h"
00057 #include "mkicons.h"
00058 #include "pyremote.h"
00059 
00060 #include "gxsm/action_id.h" 
00061 // wegen ID_CH_*
00062 
00063 // Plugin Prototypes
00064 static void mkicons_init( void );
00065 static void mkicons_about( void );
00066 static void mkicons_configure( void );
00067 static void mkicons_query( void );
00068 static void mkicons_cleanup( void );
00069 static void mkicons_run(GtkWidget *w, void *data);
00070 
00071 // for remotecontrolPI
00072 static void mkicons_run_non_interactive(GtkWidget *w, gpointer mki);
00073 
00074 // Fill in the GxsmPlugin Description here
00075 GxsmPlugin mkicons_pi = {
00076         NULL,                   // filled in and used by Gxsm, don't touch !
00077         NULL,                   // filled in and used by Gxsm, don't touch !
00078         0,                      // filled in and used by Gxsm, don't touch !
00079         NULL,                   // The Gxsm-App Class Ref.pointer (called "gapp" in Gxsm) is 
00080         // filled in here by Gxsm on Plugin load, 
00081         // just after init() is called !!!
00082         // ----------------------------------------------------------------------
00083         // Plugins Name, CodeStly is like: Name-M1S[ND]|M2S-BG|F1D|F2D|ST|TR|Misc
00084         "Mkicons",
00085         NULL,
00086         // Description, is shown by PluginViewer (Plugin: listplugin, Tools->Plugin Details)
00087         "Mkicons PI.",
00088         // Author(s)
00089         "Stefan Schroeder",
00090         // Menupath to position where it is appended to
00091         N_("_Tools/"),
00092         // Menuentry
00093         N_("Makeicons"),
00094         // help text shown on menu
00095         N_("make icons."),
00096         // more info...
00097         "no more info",
00098         NULL,          // error msg, plugin may put error status msg here later
00099         NULL,          // Plugin Status, managed by Gxsm, plugin may manipulate it too
00100         // init-function pointer, can be "NULL", 
00101         // called if present at plugin load
00102         mkicons_init,  
00103         // query-function pointer, can be "NULL", 
00104         // called if present after plugin init to let plugin manage it install itself
00105         mkicons_query, // query should be "NULL" for Gxsm-Math-Plugin !!!
00106         // about-function, can be "NULL"
00107         // can be called by "Plugin Details"
00108         mkicons_about,
00109         // configure-function, can be "NULL"
00110         // can be called by "Plugin Details"
00111         mkicons_configure,
00112         // run-function, can be "NULL", if non-Zero and no query defined, 
00113         // it is called on menupath->"plugin"
00114         NULL, // run should be "NULL" for Gxsm-Math-Plugin !!!
00115         // cleanup-function, can be "NULL"
00116         // called if present at plugin removeal
00117         mkicons_cleanup
00118 };
00119 
00120 // Text used in Aboutbox, please update!!a
00121 static const char *about_text = N_("Gxsm Plugin\n\n"
00122                                    "Printer Plugin + Control.");
00123 
00124 // Symbol "get_gxsm_plugin_info" is resolved by dlsym from Gxsm, used to get Plugin's info!! 
00125 GxsmPlugin *get_gxsm_plugin_info ( void ){ 
00126         mkicons_pi.description = g_strdup_printf(N_("Gxsm mkicons plugin %s"), VERSION);
00127         return &mkicons_pi; 
00128 }
00129 
00130 // 5.) Start here with the plugins code, vars def., etc.... here.
00131 // ----------------------------------------------------------------------
00132 //
00133 
00134 
00135 static void mkicons_init(void)
00136 {
00137   PI_DEBUG (DBG_L2, "mkicons Plugin Init");
00138 }
00139 
00140 static void mkicons_about(void)
00141 {
00142         const gchar *authors[] = { mkicons_pi.authors, NULL};
00143         gtk_widget_show(gnome_about_new ( mkicons_pi.name,
00144                                           VERSION,
00145                                           N_("(C) 2000 the Free Software Foundation"),
00146                                           about_text,
00147                                           authors,
00148                                           NULL,NULL,NULL
00149                                 ));
00150 }
00151 
00152 static void mkicons_configure(void)
00153 {
00154         if(mkicons_pi.app)
00155                 mkicons_pi.app->message("Mkicons Plugin Configuration");
00156 }
00157 
00158 static void mkicons_query(void)
00159 {
00160         mkicons_pi.app->ConnectPluginToMkiconsEvent (mkicons_run); // connect
00161 }
00162 
00163 
00164 static void mkicons_cleanup(void)
00165 {
00166         mkicons_pi.app->ConnectPluginToMkiconsEvent (NULL); // disconnect
00167 }
00168 
00169 static void mkicons_run( GtkWidget *w, void *data )
00170 {
00171         static MkIconsPIControl *mki = NULL;
00172           if(w){
00173                   if(!mki)
00174                           mki = new MkIconsPIControl();
00175                   if(!mki->running()){
00176                 mki->run();
00177                 }
00178           }
00179 else
00180                   if(mki){ // destroy if exists
00181                           delete mki;
00182                                 }
00183                                 return;
00184 }
00186 
00187 //============================================================//
00188 //  MkIconsPIControl class 
00189 //============================================================//
00190 
00191  typedef union OptIndex {
00192    struct { unsigned char oi, x, y, z; } s;
00193    unsigned long   l; // default Eintrag
00194  };
00195  
00196  char *Opt_Paper[]       = {"A4", "Letter", NULL};
00197  char *Opt_Resolution[]  = {"300dpi", "600dpi", "1200dpi", NULL};
00198  char *Opt_ERegression[] = {"no", "E 30% margin", "E 5% margin", NULL};
00199  char *Opt_LRegression[] = {"no", "lin.Reg.", NULL};
00200  char *Opt_ViewMode[]    = {"default", "quick", "direct", "logarithmic", "perodic", "horizontal", NULL};
00201  char *Opt_AutoScaling[] = {"default", "auto 5% margin", "auto 20% margin", "auto 30% margin", NULL};
00202  char *Opt_Scaling[]     = {"no", "min-max", "Cps-lo-hi", NULL};
00203  
00204  
00205 #define MK_ICONS_KEYBASE "MkIcons"
00206  
00207  MKICONSPI_OPTIONS OptionsList[] = {
00208         { "Paper",   Opt_Paper,  "AL", 0 },
00209         { "Resolution",   Opt_Resolution,  "36C", 1 },
00210         { "E-Regression", Opt_ERegression, "-Ee", 0 },
00211         { "L-Regression", Opt_LRegression, "-l",  0 },
00212         { "View-Mode",    Opt_ViewMode,    "-qdlph", 0 },
00213         { "Auto-Scaling", Opt_AutoScaling, "-123",  0 },
00214         { "Scaling",      Opt_Scaling,     "-ac",  0 },
00215         { NULL, NULL, NULL, 0 }
00216  };
00217  
00218  
00219  MkIconsPIControl::MkIconsPIControl (){
00220         PI_DEBUG(DBG_L4, "MkIconsPIControl::MkIconsPIControl");
00221 
00222         XsmRescourceManager xrm(MK_ICONS_KEYBASE);
00223         
00224         icondata = new MkIconsPIData(
00225                 xrm.GetStr("SourcePath","."),
00226                 xrm.GetStr("DestPath","/tmp/icons.ps"),
00227                 xrm.GetStr("SourceMask","*.nc"),
00228                 xrm.GetStr("Options","----------"),
00229                 xrm.GetStr("IconFile","icons.ps")
00230                 );
00231         icondata = new MkIconsPIData();
00232  
00233         PI_DEBUG(DBG_L4, "MkIconsPIControl::MkIconsPIControl OK.");
00234  }
00235  
00236  MkIconsPIControl::~MkIconsPIControl (){
00237         // save defaults to resource-database
00238 
00239         PI_DEBUG(DBG_L4, "MkIconsPIControl::~MkIconsPIControl");
00240         MKICONSPI_OPTIONS *opt;
00241         XsmRescourceManager xrm(MK_ICONS_KEYBASE);
00242         for(opt = OptionsList; opt->name; ++opt)
00243                 xrm.Put(opt->name, opt->init);
00244         
00245         xrm.Put("SourcePath", icondata->pathname);
00246         xrm.Put("DestPath", icondata->outputname);
00247         xrm.Put("SourceMask", icondata->mask);
00248         xrm.Put("Options", icondata->options);
00249         xrm.Put("IconFile", icondata->name);
00250         
00251         PI_DEBUG(DBG_L4, "MkIconsPIControl::~MkIconsPIControl done.");
00252         delete icondata;
00253  }
00254 
00255 void MkIconsPIControl::run(){
00256         GtkWidget *dialog;
00257         GtkWidget *vbox;
00258         GtkWidget *hbox;
00259         GtkWidget *VarName;
00260         GtkWidget *variable;
00261         GtkWidget *help;
00262         GtkWidget *separator;
00263 
00264         PI_DEBUG(DBG_L4, "MkIconsPIControl::run");
00265         
00266         dialog = gtk_dialog_new_with_buttons (_("GXSM make icons"),
00267                                               NULL,
00268                                               (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT),
00269                                               _("1x1"), 1, _("2x3"), 2, _("4x6"), 4, _("6x9"), 6,
00270                                               GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
00271                                               NULL); 
00272           
00273         vbox = gtk_vbox_new (FALSE, 0);
00274         gtk_widget_show (vbox);
00275         
00276         gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
00277                      vbox, TRUE, TRUE, GNOME_PAD);
00278           
00279   
00280         hbox = gtk_hbox_new (FALSE, 0);
00281         gtk_widget_show (hbox);
00282         gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
00283         
00284         VarName = gtk_label_new (_("Source Path"));
00285         gtk_widget_set_size_request (VarName, 100, -1);
00286         gtk_widget_show (VarName);
00287         gtk_label_set_justify(GTK_LABEL(VarName), GTK_JUSTIFY_LEFT);
00288         gtk_misc_set_alignment (GTK_MISC (VarName), 0.0, 0.5);
00289         gtk_misc_set_padding (GTK_MISC (VarName), 5, 0);
00290         gtk_box_pack_start (GTK_BOX (hbox), VarName, TRUE, TRUE, 0);
00291         
00292         SrcPath = variable = gtk_entry_new ();
00293         gtk_widget_show (variable);
00294         gtk_box_pack_start (GTK_BOX (hbox), variable, TRUE, TRUE, 0);
00295         gtk_entry_set_text (GTK_ENTRY (variable), icondata->pathname);
00296  //     gtk_entry_set_text (GTK_ENTRY (variable), "otto");
00297         
00298         help = gtk_button_new_with_label (_("Help"));
00299         gtk_widget_show (help);
00300         gtk_box_pack_start (GTK_BOX (hbox), help, TRUE, TRUE, 0);
00301         gtk_signal_connect (GTK_OBJECT (help), "clicked",
00302                             GTK_SIGNAL_FUNC (show_info_callback),
00303                             (void*)(_("Set to full pathname of data source directory.")));
00304         
00305         hbox = gtk_hbox_new (FALSE, 0);
00306         gtk_widget_show (hbox);
00307         gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
00308     
00309         VarName = gtk_label_new (_("Selection Mask"));
00310         gtk_widget_set_size_request (VarName, 100, -1);
00311         gtk_widget_show (VarName);
00312         gtk_label_set_justify(GTK_LABEL(VarName), GTK_JUSTIFY_LEFT);
00313         gtk_misc_set_alignment (GTK_MISC (VarName), 0.0, 0.5);
00314         gtk_misc_set_padding (GTK_MISC (VarName), 5, 0);
00315         gtk_box_pack_start (GTK_BOX (hbox), VarName, TRUE, TRUE, 0);
00316     
00317         SrcMask = variable = gtk_entry_new ();
00318         gtk_widget_show (variable);
00319         gtk_box_pack_start (GTK_BOX (hbox), variable, TRUE, TRUE, 0);
00320         gtk_entry_set_text (GTK_ENTRY (variable), icondata->mask);
00321  //     gtk_entry_set_text (GTK_ENTRY (variable), "*.ncFritz");
00322   
00323         help = gtk_button_new_with_label (_("Help"));
00324         gtk_widget_show (help);
00325         gtk_box_pack_start (GTK_BOX (hbox), help, TRUE, TRUE, 0);
00326         gtk_signal_connect (GTK_OBJECT (help), "clicked",
00327                             GTK_SIGNAL_FUNC (show_info_callback),
00328                             (void*)(_("Select subset of files via wildcard.")));
00329         
00330         hbox = gtk_hbox_new (FALSE, 0);
00331         gtk_widget_show (hbox);
00332         gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
00333         
00334         VarName = gtk_label_new (_("Icon Filename"));
00335         gtk_widget_set_size_request (VarName, 100, -1);
00336         gtk_widget_show (VarName);
00337         gtk_label_set_justify(GTK_LABEL(VarName), GTK_JUSTIFY_LEFT);
00338         gtk_misc_set_alignment (GTK_MISC (VarName), 0.0, 0.5);
00339         gtk_misc_set_padding (GTK_MISC (VarName), 5, 0);
00340         gtk_box_pack_start (GTK_BOX (hbox), VarName, TRUE, TRUE, 0);
00341     
00342         IconName = variable = gtk_entry_new ();
00343         gtk_widget_show (variable);
00344         gtk_box_pack_start (GTK_BOX (hbox), variable, TRUE, TRUE, 0);
00345         gtk_entry_set_text (GTK_ENTRY (variable), icondata->outputname);
00346  //     gtk_entry_set_text (GTK_ENTRY (variable), "asd");
00347         
00348         help = gtk_button_new_with_label (_("Help"));
00349         gtk_widget_show (help);
00350         gtk_box_pack_start (GTK_BOX (hbox), help, TRUE, TRUE, 0);
00351         gtk_signal_connect (GTK_OBJECT (help), "clicked",
00352                             GTK_SIGNAL_FUNC (show_info_callback),
00353                             (void*)(_("Full Pathname to Iconfile, openmode is append !")));
00354         
00355         separator = gtk_hseparator_new ();
00356         /* The last 3 arguments to gtk_box_pack_start are:
00357          * expand, fill, padding. */
00358         gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 5);
00359         gtk_widget_show (separator);
00360         
00361         // make Option Menus
00362         hbox = gtk_hbox_new (FALSE, 0);
00363         gtk_widget_show (hbox);
00364         gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
00365   
00366         GtkWidget *mvbox, *label, *wid, *menu, *menuitem;
00367         MKICONSPI_OPTIONS *opt;
00368         char **item;
00369         OptIndex OptI;
00370         int i,j;
00371   
00372         PI_DEBUG(DBG_L4, "MkIconsPIControl::run - Setting options");
00373   
00374   
00375         XsmRescourceManager xrm(MK_ICONS_KEYBASE);
00376         for(j=0, opt = OptionsList; opt->name; ++j, ++opt){
00377                 // Init from rescources
00378                 gchar *idefault=g_strdup_printf("%d", opt->init);
00379                 xrm.Get(opt->name, &opt->init, idefault);
00380                 g_free(idefault);
00381   
00382                 mvbox = gtk_vbox_new (FALSE, 0);
00383                 gtk_widget_show (mvbox);
00384                 gtk_box_pack_start (GTK_BOX (hbox), mvbox, TRUE, TRUE, 0);
00385                 
00386                 label = gtk_label_new (opt->name);
00387                 gtk_widget_show (label);
00388                 gtk_container_add (GTK_CONTAINER (mvbox), label);
00389                 
00390                 wid = gtk_option_menu_new ();
00391                 gtk_widget_show (wid);
00392                 gtk_container_add (GTK_CONTAINER (mvbox), wid);
00393                 
00394                 menu = gtk_menu_new ();
00395                 
00396                 // fill options in
00397                 for(i=0, item=opt->list; *item; ++i, ++item){
00398                         // make menuitem
00399                         menuitem = gtk_menu_item_new_with_label (*item);
00400                         gtk_widget_show (menuitem);
00401                         gtk_menu_append (GTK_MENU (menu), menuitem);
00402                         /* connect with signal-handler if selected */
00403                         OptI.l = 0L;
00404                         OptI.s.oi = j;
00405                         OptI.s.x  = i;
00406                         gtk_object_set_data(GTK_OBJECT (menuitem), "optindex", (gpointer)OptI.l);
00407                         gtk_signal_connect (GTK_OBJECT (menuitem), "activate",
00408                                             GTK_SIGNAL_FUNC (MkIconsPIControl::option_choice_callback),
00409                                             this);
00410                 }
00411                 gtk_option_menu_set_menu (GTK_OPTION_MENU (wid), menu);
00412                 gtk_option_menu_set_history (GTK_OPTION_MENU (wid), opt->init);
00413         }
00414   
00415         PI_DEBUG(DBG_L4, "MkIconsPIControl::run - Setting options ... OK");
00416         
00417         PI_DEBUG(DBG_L4, "MkIconsPIControl::run - Dlg show, run");
00418   
00419         gtk_widget_show(dialog);
00420         dlg_clicked (gtk_dialog_run (GTK_DIALOG(dialog)));
00421         gtk_widget_destroy (dialog);
00422 
00423 }
00424 
00425 void MkIconsPIControl::option_choice_callback(GtkWidget *widget, MkIconsPIControl *mki){
00426         OptIndex i;
00427         i.l=(long)gtk_object_get_data( GTK_OBJECT (widget), "optindex");
00428         mki->icondata->options[i.s.oi] = OptionsList[i.s.oi].id[OptionsList[i.s.oi].init=i.s.x];
00429         PI_DEBUG(DBG_L2, "MkIconsPIControl::option_choice_callback=" << mki->icondata->options );
00430 }
00431 
00432 void MkIconsPIControl::dlg_clicked(gint response){
00433 
00434         PI_DEBUG(DBG_L4, "MkIconsPIControl::clicked - " << response);
00435 
00436         g_free(icondata->pathname); 
00437         icondata->pathname = g_strdup(gtk_entry_get_text (GTK_ENTRY (SrcPath)));
00438         
00439         g_free(icondata->mask); 
00440         icondata->mask = g_strdup(gtk_entry_get_text (GTK_ENTRY (SrcMask)));
00441         
00442         g_free(icondata->outputname); 
00443         icondata->outputname = g_strdup(gtk_entry_get_text (GTK_ENTRY (IconName)));
00444 
00445         switch(response){
00446         case 1:
00447                 show_info_callback(NULL, _("Generating 1x1 Icon Pages !"));
00448                 icondata->nix=1;
00449                 MkIconsPI(icondata);
00450                 break;
00451         case 2:
00452                 show_info_callback(NULL, _("Generating 2x3 Icon Pages !"));
00453                 icondata->nix=2;
00454                 MkIconsPI(icondata);
00455                 break;
00456         case 4: 
00457                 show_info_callback(NULL, _("Generating 4x6 Icon Pages !"));
00458                 icondata->nix=4;
00459                 MkIconsPI(icondata);
00460                 break;
00461         case 6: 
00462                 show_info_callback(NULL, _("Generating 6x9 Icon Pages !"));
00463                 icondata->nix=6;
00464                 MkIconsPI(icondata);
00465                 break;
00466         case GTK_RESPONSE_CANCEL: 
00467                 break;
00468         }
00469 }
00470 
00471 
00472 //============================================================//
00473 //  MkIconsPIData class 
00474 //============================================================//
00475 
00476 // Directory File Selection Stuff
00477 char select_mask[256];
00478 #ifdef IS_MACOSX
00479 int gxsm_select(struct dirent *item){ return !fnmatch(select_mask, item->d_name, 0); }
00480 #else
00481 int gxsm_select(const struct dirent *item){ return !fnmatch(select_mask, item->d_name, 0); }
00482 #endif
00483 
00484 // //  This is a parameter container class with no methods.
00485 MkIconsPIData::MkIconsPIData(gchar *InPath, gchar *OutPath, gchar *InMask, 
00486                          gchar *Opt, gchar *IconName){
00487   
00488         pathname   = InPath   ? InPath   : g_strdup(".") ;
00489         outputname = OutPath  ? OutPath  : g_strdup("/tmp/icons.ps") ;
00490         name       = IconName ? IconName : g_strdup("icons.ps") ;
00491         mask       = InMask   ? InMask   : g_strdup("*.nc") ;
00492         options    = Opt      ? Opt      : g_strdup("--------") ;
00493     
00494         redres = 0;
00495         nix = 4;
00496 }
00497   
00498 MkIconsPIData::~MkIconsPIData(){
00499         g_free(pathname);
00500         g_free(outputname);
00501         g_free(name);
00502         g_free(mask);
00503         g_free(options);
00504 }
00505 
00506 // //  
00507 // //  // Options: ...out of date...
00508 // //  // EReg:              
00509 // //  //0       [-Ee] do E-Regression, '-': keine 'E': 30% Rand, 'e': 5% Rand
00510 // //  //  HighRes 1200DPI:  
00511 // //  //1       [-h]  Hi Resolution, '-': RedRes=250, 'h': =700 Pixel in A4 Breite
00512 // //  //   AutoSkl
00513 // //  //2       [-a]  Auto Skaling to Min-Max, '-' use defaults, 'a': do skl
00514 // //  //    Lin1D
00515 // //  //3       [-l]  do LineRegression, '-': keine, 'l': do LinReg
00516 // //  //4     [-0123] eps=0.1, 0.05, 0.25, 0.3
00517 // //  // ----
00518 // //  // ehal
00519 // //  // E
00520 // //  // x
00521 
00522 //============================================================//
00523 //  MkIconsPI function 
00524 //============================================================//
00525 
00526 void MkIconsPI(MkIconsPIData *mid){
00527         struct dirent **namelist;
00528         int n;
00529         double hi0,lo0;
00530         lo0=gapp->xsm->data.display.cpslow;
00531         hi0=gapp->xsm->data.display.cpshigh;
00532   
00533         // auto activate Channel or use active one
00534         if(!gapp->xsm->ActiveScan){
00535                 int Ch;
00536                 if((Ch=gapp->xsm->FindChan(ID_CH_M_OFF)) < 0){
00537                         XSM_SHOW_ALERT(ERR_SORRY, ERR_NOFREECHAN,"for Mk Icons",1);
00538                         return;
00539                 }
00540                 if(gapp->xsm->ActivateChannel(Ch))
00541                         return;
00542                 gapp->xsm->ActiveScan->create();
00543         }
00544         gapp->xsm->ActiveScan->CpyDataSet(gapp->xsm->data);
00545   
00546         if(mid->nix && gapp->xsm->ActiveScan){
00547                 int redres;
00548                 const double dpifac=72.*6./300.; // 72.dpi grey bei 300dpi Auflösung und 6in nutzbarer Breite
00549                 // calulate needed resolution
00550                 switch(mid->options[MkIconOpt_Resolution]){
00551                 case '3': redres = (int)(300.*dpifac); break;
00552                 case '6': redres = (int)(600.*dpifac); break;
00553                 case 'C': redres = (int)(1200.*dpifac); break;
00554                 default:  redres = (int)(600.*dpifac); break;
00555                 }
00556                 redres /= mid->nix;
00557                 PI_DEBUG (DBG_L2,  "N Icons in X: " << mid->nix << ", Reduce to Pixels less than " << redres );
00558   
00559                 // setup selection mask for "gxsm_select()"
00560                 strcpy(select_mask, mid->mask);
00561                 n = scandir(mid->pathname, &namelist, gxsm_select, alphasort);
00562                 if (n < 0)
00563                         perror("scandir");
00564                 else{
00565                         Scan *Original=NULL, *Icon, *TmpSc, *HlpSc;
00566                         char fname[256];
00567   
00568                         EpsfTools *epsf;
00569                         if(IS_SPALEED_CTRL)
00570                                 epsf = new SPA_epsftools;
00571                         else
00572                                 epsf = new SPM_epsftools;
00573   
00574                         epsf->SetPaperTyp (mid->options[MkIconOpt_Paper] == 'A' ? A4PAPER:LETTERPAPER);
00575                         epsf->open(mid->outputname, TRUE);
00576                         epsf->NIcons(mid->nix);
00577                         while(n--){
00578                                 PI_DEBUG(DBG_L2, "Loading " << namelist[n]->d_name );
00579         
00580                                 // Load
00581                                 sprintf(fname,"%s/%s",mid->pathname,namelist[n]->d_name);
00582                                 PI_DEBUG (DBG_L2, "Icon: " << namelist[n]->d_name);
00583                                 gapp->xsm->load(fname);
00584         
00585                                 Original = gapp->xsm->ActiveScan;
00586                                 G_FREE_STRDUP_PRINTF(Original->data.ui.name, namelist[n]->d_name); // ohne Pfad !!
00587         
00588                                 Icon = gapp->xsm->NewScan(0, gapp->xsm->data.display.ViewFlg, 0, &gapp->xsm->data);
00589                                 Icon->create();
00590                                 TmpSc = gapp->xsm->NewScan(0, gapp->xsm->data.display.ViewFlg, 0, &gapp->xsm->data);
00591                                 TmpSc->create();
00592   
00593                                 // Copy all data
00594                                 Icon->CpyDataSet(Original->data);
00595                                 TmpSc->CpyDataSet(Original->data);
00596   
00597                                 // scale down to lower than redres
00598                                 // [0] "Resolution"
00599                                 // ========================================
00600                                 if(CopyScan(Original, Icon))
00601                                         XSM_SHOW_ALERT(ERR_MATH, "", "", 1);
00602   
00603                                 PI_DEBUG (DBG_L2,  "W00:" << "nx:" << Icon->data.s.nx << " GetNx:" << Icon->mem2d->GetNx() );
00604   
00605                                 while(Icon->data.s.nx > redres && Icon->data.s.ny > redres){
00606                                         // Excange Icon <=> TmpSc
00607                                         HlpSc = Icon; Icon = TmpSc; TmpSc = HlpSc;
00608                                         // TmpSc => Quench2 => Icon
00609                                         if(TR_QuenchScan(TmpSc, Icon))
00610                                                 XSM_SHOW_ALERT(ERR_MATH, "", "", 1);
00611                                         PI_DEBUG (DBG_L2,  "WOK:" << "nx:" << Icon->data.s.nx << " GetNx:" << Icon->mem2d->GetNx() );
00612                                         memcpy( &TmpSc->data, &Icon->data, sizeof(SCAN_DATA));
00613                                 }
00614                                 if(CopyScan(Icon, TmpSc))
00615                                         XSM_SHOW_ALERT(ERR_MATH, "", "", 1);
00616   
00617                                 PI_DEBUG (DBG_L2,  "Icon :" << "nx:" << Icon->data.s.nx << " GetNx:" << Icon->mem2d->GetNx() );
00618                                 PI_DEBUG (DBG_L2,  "TmpSc:" << "nx:" << TmpSc->data.s.nx << " GetNx:" << TmpSc->mem2d->GetNx() );
00619         
00620                                 // do some more math...
00621   
00622                                 // [1] "E Regression"
00623                                 // ========================================
00624                                 if(mid->options[MkIconOpt_EReg] != '-'){
00625                                         double eps=0.1;
00626                                         PI_DEBUG (DBG_L2,  "doing E regress ..." );
00627                                         // Excange Icon <=> TmpSc
00628                                         HlpSc = Icon; Icon = TmpSc; TmpSc = HlpSc; 
00629                                         // TmpSc => Quench2 => Icon
00630                                         if(mid->options[MkIconOpt_EReg] == 'e') eps=0.05; 
00631                                         if(mid->options[MkIconOpt_EReg] == 'E') eps=0.3; 
00632                                         TmpSc->Pkt2d[0].x = (int)(eps*TmpSc->mem2d->GetNx());
00633                                         TmpSc->Pkt2d[0].y = (int)(eps*TmpSc->mem2d->GetNy());
00634                                         TmpSc->Pkt2d[1].x = (int)((1.-eps)*TmpSc->mem2d->GetNx());
00635                                         TmpSc->Pkt2d[1].y = (int)((1.-eps)*TmpSc->mem2d->GetNy());
00636                                         if(BgERegress(TmpSc, Icon))
00637                                                 XSM_SHOW_ALERT(ERR_MATH, "", "", 1);
00638                                         PI_DEBUG (DBG_L2,  "Ereg - Icon :" << "nx:" << Icon->data.s.nx << " GetNx:" << Icon->mem2d->GetNx() );
00639                                         PI_DEBUG (DBG_L2,  "Ereg - TmpSc:" << "nx:" << TmpSc->data.s.nx << " GetNx:" << TmpSc->mem2d->GetNx() );
00640                                 }
00641                                 // [2] "Line Regression"
00642                                 // ========================================
00643                                 if(mid->options[MkIconOpt_LReg] == 'l'){
00644                                         PI_DEBUG (DBG_L2,  "doing BgLin1D ..." );
00645                                         // Excange Icon <=> TmpSc
00646                                         HlpSc = Icon; Icon = TmpSc; TmpSc = HlpSc; 
00647                                         // TmpSc => Quench2 => Icon
00648                                         if(BgLin1DScan(TmpSc, Icon))
00649                                                 XSM_SHOW_ALERT(ERR_MATH, "", "", 1);
00650                                         PI_DEBUG (DBG_L2,  "BgLin1D - Icon :" << "nx:" << Icon->data.s.nx << " GetNx:" << Icon->mem2d->GetNx() );
00651                                         PI_DEBUG (DBG_L2,  "BgLin1D - TmpSc:" << "nx:" << TmpSc->data.s.nx << " GetNx:" << TmpSc->mem2d->GetNx() );
00652                                 }
00653                                 // [3] "View Mode" override: -qdlph
00654                                 // ========================================
00655                                 switch(mid->options[MkIconOpt_ViewMode]){
00656                                 case 'q': Icon->mem2d->SetDataPktMode (SCAN_V_QUICK); break;
00657                                 case 'd': Icon->mem2d->SetDataPktMode (SCAN_V_DIRECT); break;
00658                                 case 'l': Icon->mem2d->SetDataPktMode (SCAN_V_LOG); break;
00659                                 case 'h': Icon->mem2d->SetDataPktMode (SCAN_V_HORIZONTAL); break;
00660                                 case 'p': Icon->mem2d->SetDataPktMode (SCAN_V_PERIODIC); break;
00661                                 }
00662                                 // [4] "Auto Scaling" -123
00663                                 // ========================================
00664                                 if(mid->options[MkIconOpt_AutoSkl] != '-'){
00665                                         double eps=0.1;
00666                                         PI_DEBUG (DBG_L2,  "doing Skl ..." );
00667                                         // Excange Icon <=> TmpSc
00668                                         HlpSc = gapp->xsm->ActiveScan; gapp->xsm->ActiveScan = Icon; 
00669                                         if(mid->options[MkIconOpt_AutoSkl] == '1') eps=0.05; 
00670                                         if(mid->options[MkIconOpt_AutoSkl] == '2') eps=0.20; 
00671                                         if(mid->options[MkIconOpt_AutoSkl] == '3') eps=0.30; 
00672                                         Icon->Pkt2d[0].x = (int)(eps*(double)Icon->mem2d->GetNx());
00673                                         Icon->Pkt2d[0].y = (int)(eps*(double)Icon->mem2d->GetNy());
00674                                         Icon->Pkt2d[1].x = (int)((1.-eps)*(double)Icon->mem2d->GetNx());
00675                                         Icon->Pkt2d[1].y = (int)((1.-eps)*(double)Icon->mem2d->GetNy());
00676                                         Icon->PktVal=2;
00677                                         Icon->mem2d->AutoHistogrammEvalMode (&Icon->Pkt2d[0], &Icon->Pkt2d[1]);
00678                                         // AutoDisplay();
00679                                         Icon->PktVal=0;
00680                                         gapp->xsm->ActiveScan = HlpSc;
00681                                         PI_DEBUG (DBG_L2,  "AutoSkl - Icon :" << "nx:" << Icon->data.s.nx << " GetNx:" << Icon->mem2d->GetNx() );
00682                                         Original->data.display.contrast = gapp->xsm->data.display.contrast;
00683                                         Original->data.display.bright   = gapp->xsm->data.display.bright;
00684                                         PI_DEBUG (DBG_L2, "Contrast=" << Original->data.display.contrast);
00685                                 }
00686                                 if(mid->options[MkIconOpt_Scaling] == 'c'){
00687                                         PI_DEBUG (DBG_L2,  "doing manual Cps hi=" << hi0 << " ... lo=" << lo0 << " Gate=" << gapp->xsm->data.display.cnttime);
00688                                         // Excange Icon <=> TmpSc
00689                                         HlpSc = gapp->xsm->ActiveScan; gapp->xsm->ActiveScan = Icon; 
00690                                         gapp->xsm->AutoDisplay(hi0*gapp->xsm->data.display.cnttime, lo0*gapp->xsm->data.display.cnttime);
00691                                         gapp->xsm->ActiveScan = HlpSc;
00692           
00693                                 }
00694   
00695                                 // Put Icon
00696                                 epsf->init();
00697         
00698                                 //          epsf->SetAbbWidth(figwidth);
00699                                 //          epsf->SetFontSize(fontsize);
00700         
00701                                 epsf->placeimage();
00702         
00703                                 epsf->putsize(Original);
00704                                 epsf->putframe();
00705                                 epsf->putticks(Original);
00706                                 //        epsf->putbar(gapp->xsm->ActiveScan);
00707                                 //        epsf->putmore(gapp->xsm->ActiveScan, title);
00708                                 //        epsf->putgrey(Original, Icon->mem2d, options[MkIconOpt_ELReg] == 'a', FALSE);
00709                                 PI_DEBUG (DBG_L2,  "-Original:" << "nx:" << Original->data.s.nx << " GetNx:" << Original->mem2d->GetNx() );
00710                                 PI_DEBUG (DBG_L2,  "-Icon    :" << "nx:" << Icon->data.s.nx << " GetNx:" << Icon->mem2d->GetNx() );
00711                                 // [5] "Scaling": -a
00712   
00713                                 //      gapp->check_events();
00714   
00715                                 epsf->putgrey(Original, Icon->mem2d, mid->options[MkIconOpt_Scaling] == 'a', FALSE);
00716                                 epsf->endimage();
00717                                 epsf->FootLine(Original);
00718         
00719                                 //      delete Icon;
00720                                 delete TmpSc;
00721                         }
00722                         epsf->FootLine(Original, TRUE);
00723                         epsf->close();
00724                         delete epsf;
00725                 }
00726         }
00727 }

Generated on Sat Apr 1 09:04:10 2006 for GXSM by  doxygen 1.4.6