home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1995 August / NEBULA.mdf / SourceCode / MiniExamples / AppKit / AtYourService / DefaultHandler.m < prev    next >
Encoding:
Text File  |  1993-03-10  |  3.8 KB  |  148 lines

  1.  
  2. /* Generated by Interface Builder */
  3.  
  4. #import <appkit/appkit.h>
  5. #import <defaults/defaults.h>
  6. #import "DefaultHandler.h"
  7. #import <strings.h>
  8. extern id NXApp;
  9.  
  10. @implementation DefaultHandler
  11.  
  12. /*
  13.  * The DefaultHandler object contains the data associated with sort
  14.  * defaults,  and the routines that access them.
  15.  */
  16.  
  17. + initialize
  18. {
  19. static NXDefaultsVector Defaults= {
  20.     {  "FieldSort",  "No" },
  21.     {  "Separator", " " },
  22.     {  "Start", "" },
  23.     {  "End", "" },
  24.     {NULL}
  25.     };
  26.  
  27.     NXRegisterDefaults("AtYourService", Defaults);
  28.     return self;
  29. }
  30.  
  31. - writeDefaults:sender
  32. {
  33.     int useFields=(int) [inSwitch selectedCell];
  34.     if (useFields) {
  35.         const char *opt;
  36.         NXWriteDefault("AtYourService", "FieldSort", "Yes");
  37.         opt = [separator stringValue];
  38.         if ( *opt ) {
  39.             char sep[2];
  40.             
  41.             sep[0] = *opt;
  42.             sep[1] = '\0';
  43.             if ( strlen(opt) > 1 ) {
  44.                 [separator setStringValue:sep];
  45.                 NXBeep();
  46.                 }
  47.             NXWriteDefault("AtYourService", "Separator", sep);
  48.             }
  49.         opt = [start stringValue];
  50.         if ( *opt ) {
  51.             char thisOption[100];
  52.           /*
  53.            * Sort asks for number of fields to skip,  we ask for
  54.            * first significant field,  so we have to minus one here.
  55.            */
  56.             float startVal;
  57.             startVal=[start floatValue];
  58.             startVal--;
  59.             sprintf(thisOption,"%g",startVal);
  60.             NXWriteDefault("AtYourService", "Start", thisOption);
  61.             }
  62.         opt = [end stringValue];
  63.         if ( *opt ) NXWriteDefault("AtYourService", "End", opt);
  64.     }
  65.     else NXWriteDefault("AtYourService", "FieldSort", "No");
  66.     return self;
  67. }
  68.  
  69. - readDefaults:sender
  70. {
  71.     int useFields;
  72.     useFields=(strncmp(NXGetDefaultValue("AtYourService","FieldSort"),"Yes",3) == 0);
  73.     [inForm setEnabled:useFields];
  74.     [separator setEnabled:useFields];
  75.     [inSwitch selectCellAt:useFields:0];
  76.     
  77.     [start setStringValue:NXGetDefaultValue("AtYourService","Start")];
  78.     [end setStringValue:NXGetDefaultValue("AtYourService","End")];
  79.     [separator setStringValue:NXGetDefaultValue("AtYourService","Separator")];
  80.     
  81.     // This method is called at startup.  Set up the entry types for the panel
  82.     [start setEntryType:NX_FLOATTYPE];
  83.     [end setEntryType:NX_FLOATTYPE];
  84.     return self;
  85. }
  86.  
  87. - changeState:sender
  88. {
  89.   /*
  90.    * This method enables/disables the row selection based on whether
  91.    * row-based sorting will be done
  92.    */
  93.     [inForm setEnabled:[inSwitch selectedRow]];
  94.     [separator setEnabled:[inSwitch selectedRow]];
  95.     return self;
  96. }
  97.  
  98. - (char *) sortFields
  99. {
  100.   /*
  101.    * Return the sort field information
  102.    */
  103.     char options[100];
  104.     strcpy(options,"");
  105.     if ( [inSwitch selectedRow] ) {
  106.         const char *opt;
  107.         opt = [separator stringValue];
  108.         if ( *opt ) {
  109.             char sep[2];
  110.             
  111.             sep[0] = *opt;
  112.             sep[1] = '\0';
  113.             strcat(options," -t");
  114.             strcat(options,sep);
  115.             if ( strlen(opt) > 1 ) {
  116.                 [separator setStringValue:sep];
  117.                 NXBeep();
  118.                 }
  119.             }
  120.         opt = [start stringValue];
  121.         if ( *opt ) {
  122.             char thisOption[100];
  123.           /*
  124.            * Sort asks for number of fields to skip,  we ask for
  125.            * first significant field,  so we have to minus one here.
  126.            */
  127.             float startVal;
  128.             startVal=[start floatValue];
  129.             startVal--;
  130.             sprintf(thisOption," +%g",startVal);
  131.             strcat(options,thisOption);
  132.             }
  133.         opt = [end stringValue];
  134.         if ( *opt ) {
  135.             strcat(options," -");
  136.             strcat(options,opt);
  137.             }
  138.         }
  139.     return options;
  140. }
  141.  
  142. - showPanel:sender
  143. {
  144.     [optionPanel makeKeyAndOrderFront:self];
  145.     return self;
  146. }
  147. @end
  148.