home *** CD-ROM | disk | FTP | other *** search
/ PC-Online 1996 May / PCOnline_05_1996.bin / linux / source / xap / xfm / xfm-1.000 / xfm-1 / xfm-1.3.2 / src / FmAwCb.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-13  |  8.4 KB  |  293 lines

  1. /*---------------------------------------------------------------------------
  2.   Module FmAwCb
  3.  
  4.   (c) S.Marlow 1990-92
  5.   (c) A.Graef 1994
  6.  
  7.   Callback routines for widgets in the application window
  8. ---------------------------------------------------------------------------*/
  9.  
  10. #include <stdio.h>
  11. #include <memory.h>
  12.  
  13. #include <X11/Intrinsic.h>
  14. #include <X11/StringDefs.h>
  15.  
  16. #include "Am.h"
  17.  
  18. /*---------------------------------------------------------------------------
  19.   PUBLIC FUNCTIONS
  20. ---------------------------------------------------------------------------*/
  21.  
  22. void appInstallAppCb(Widget w, FileWindowRec *fw, XtPointer call_data)
  23. {
  24.   installNewAppPopup();
  25. }
  26.  
  27. /*---------------------------------------------------------------------------*/
  28.  
  29. void appInstallGroupCb(Widget w, FileWindowRec *fw, XtPointer call_data)
  30. {
  31.   installGroupPopup();
  32. }
  33.  
  34. /*---------------------------------------------------------------------------*/
  35.  
  36. void appEditCb(Widget w, FileWindowRec *fw, XtPointer call_data)
  37. {
  38.   installExistingAppPopup();
  39. }
  40.  
  41. /*---------------------------------------------------------------------------*/
  42.  
  43. void appCutCb(Widget w, FileWindowRec *fw, XtPointer call_data)
  44. {
  45.   char s[0xff];
  46.   FILE *fp;
  47.   int i, j;
  48.   char name[2*MAXAPPSTRINGLEN], directory[2*MAXAPPSTRINGLEN],
  49.     fname[2*MAXAPPSTRINGLEN], icon[2*MAXAPPSTRINGLEN],
  50.     push_action[2*MAXAPPSTRINGLEN], drop_action[2*MAXAPPSTRINGLEN];
  51.  
  52.   if (resources.confirm_moves) {
  53.     sprintf(s, "Cutting %d item%s from", aw.n_selections,
  54.         aw.n_selections > 1 ? "s" : "" );
  55.     if (!confirm(s, "the application window", ""))
  56.       return;
  57.   }
  58.  
  59.   if (! (fp = fopen(resources.app_clip, "w") )) {
  60.     sysError("Error writing clip file:");
  61.     return;
  62.   }
  63.  
  64.   fprintf(fp, "#XFM\n");
  65.  
  66.   for (i=j=0; j<aw.n_apps; j++)
  67.     if (!aw.apps[j].selected) {
  68.       if (i != j)
  69.     memcpy(&aw.apps[i], &aw.apps[j], sizeof(AppRec));
  70.       i++;
  71.     } else {
  72.       expand(name, aw.apps[j].name, "\\:");
  73.       expand(directory, aw.apps[j].directory, "\\:");
  74.       expand(fname, aw.apps[j].fname, "\\:");
  75.       expand(icon, aw.apps[j].icon, "\\:");
  76.       expand(push_action, aw.apps[j].push_action, "\\:");
  77.       expand(drop_action, aw.apps[j].drop_action, "\\:");
  78.       fprintf(fp, "%s:%s:%s:%s:%s:%s\n", name, directory, fname, icon,
  79.           push_action, drop_action);
  80.       freeApplicationResources(&aw.apps[j]);
  81.     }
  82.   aw.n_apps =i;
  83.   updateApplicationDisplay();
  84.   writeApplicationData(resources.app_file);
  85.  
  86.   if (fclose(fp))
  87.     sysError("Error writing clip file:");
  88. }
  89.  
  90. /*---------------------------------------------------------------------------*/
  91.  
  92. void appCopyCb(Widget w, FileWindowRec *fw, XtPointer call_data)
  93. {
  94.   char s[0xff];
  95.   FILE *fp;
  96.   int i;
  97.   char name[2*MAXAPPSTRINGLEN], directory[2*MAXAPPSTRINGLEN],
  98.     fname[2*MAXAPPSTRINGLEN], icon[2*MAXAPPSTRINGLEN],
  99.     push_action[2*MAXAPPSTRINGLEN], drop_action[2*MAXAPPSTRINGLEN];
  100.  
  101.   if (resources.confirm_copies) {
  102.     sprintf(s, "Copying %d item%s from", aw.n_selections,
  103.         aw.n_selections > 1 ? "s" : "" );
  104.     if (!confirm(s, "the application window", ""))
  105.       return;
  106.   }
  107.  
  108.   if (! (fp = fopen(resources.app_clip, "w") )) {
  109.     sysError("Error writing clip file:");
  110.     return;
  111.   }
  112.  
  113.   fprintf(fp, "#XFM\n");
  114.  
  115.   for (i=0; i < aw.n_apps; i++)
  116.     if (aw.apps[i].selected) {
  117.       expand(name, aw.apps[i].name, "\\:");
  118.       expand(directory, aw.apps[i].directory, "\\:");
  119.       expand(fname, aw.apps[i].fname, "\\:");
  120.       expand(icon, aw.apps[i].icon, "\\:");
  121.       expand(push_action, aw.apps[i].push_action, "\\:");
  122.       expand(drop_action, aw.apps[i].drop_action, "\\:");
  123.       fprintf(fp, "%s:%s:%s:%s:%s:%s\n", name, directory, fname, icon,
  124.           push_action, drop_action);
  125.     }
  126.   
  127.   if (fclose(fp))
  128.     sysError("Error writing clip file:");
  129. }
  130.  
  131. /*---------------------------------------------------------------------------*/
  132.  
  133. void appPasteCb(Widget w, FileWindowRec *fw, XtPointer call_data)
  134. {
  135.   FILE *fp;
  136.   char *name, *directory, *fname, *icon, *push_action, *drop_action;
  137.   char s[MAXAPPSTRINGLEN];
  138.   int p;
  139.   
  140.   if (!(fp = fopen(resources.app_clip, "r"))) return;
  141.  
  142.   for (; (p = parseApp(fp, &name, &directory, &fname, &icon, &push_action,
  143.                &drop_action)) > 0; aw.n_apps++) {
  144.     aw.apps = (AppList) XTREALLOC(aw.apps, (aw.n_apps+1)*sizeof(AppRec) );
  145.     aw.apps[aw.n_apps].name = XtNewString(strparse(s, name, "\\:"));
  146.     aw.apps[aw.n_apps].directory = XtNewString(strparse(s, directory, "\\:"));
  147.     aw.apps[aw.n_apps].fname = XtNewString(strparse(s, fname, "\\:"));
  148.     aw.apps[aw.n_apps].icon = XtNewString(strparse(s, icon, "\\:"));
  149.     aw.apps[aw.n_apps].push_action = XtNewString(strparse(s, push_action,
  150.                               "\\:"));
  151.     aw.apps[aw.n_apps].drop_action = XtNewString(strparse(s, drop_action,
  152.                               "\\:"));
  153.     aw.apps[aw.n_apps].loaded = False;
  154.     if (!aw.apps[aw.n_apps].icon[0])
  155.       aw.apps[aw.n_apps].icon_bm = defaultIcon(aw.apps[aw.n_apps].name,
  156.                            aw.apps[aw.n_apps].directory,
  157.                            aw.apps[aw.n_apps].fname);
  158.     else if ((aw.apps[aw.n_apps].icon_bm = readIcon(aw.apps[aw.n_apps].icon))
  159.          == None) {
  160.       fprintf(stderr, "%s: can't read icon for application %s\n",
  161.           progname, aw.apps[aw.n_apps].name);
  162.       aw.apps[aw.n_apps].icon_bm = defaultIcon(aw.apps[aw.n_apps].name,
  163.                            aw.apps[aw.n_apps].directory,
  164.                            aw.apps[aw.n_apps].fname);
  165.     } else
  166.       aw.apps[aw.n_apps].loaded = True;
  167.   }
  168.  
  169.   if (p == -1)
  170.     error("Error in clip file", "");
  171.  
  172.   if (fclose(fp))
  173.     sysError("Error reading clip file:");
  174.  
  175.   updateApplicationDisplay();
  176.   writeApplicationData(resources.app_file);
  177. }
  178.  
  179. /*---------------------------------------------------------------------------*/
  180.  
  181. void appRemoveCb(Widget w, FileWindowRec *fw, XtPointer call_data)
  182. {
  183.   char s[0xff];
  184.   int i, j;
  185.  
  186.   if (resources.confirm_deletes) {
  187.     sprintf(s, "Deleting %d item%s from", aw.n_selections,
  188.         aw.n_selections > 1 ? "s" : "" );
  189.     if (!confirm(s, "the application window", ""))
  190.       return;
  191.   }
  192.  
  193.   for (i=j=0; j<aw.n_apps; j++)
  194.     if (!aw.apps[j].selected) {
  195.       if (i != j)
  196.     memcpy(&aw.apps[i], &aw.apps[j], sizeof(AppRec));
  197.       i++;
  198.     } else
  199.       freeApplicationResources(&aw.apps[j]);
  200.   aw.n_apps =i;
  201.   updateApplicationDisplay();
  202.   writeApplicationData(resources.app_file);
  203. }
  204.  
  205. /*---------------------------------------------------------------------------*/
  206.  
  207. void appSelectAllCb(Widget w, FileWindowRec *fw, XtPointer call_data)
  208. {
  209.   int i;
  210.   Pixel pix;
  211.   
  212.   for (i=0; i < aw.n_apps; i++)
  213.     if (!aw.apps[i].selected) {
  214.       XtVaGetValues(aw.apps[i].toggle, XtNforeground, &pix, NULL);
  215.       XtVaSetValues(aw.apps[i].toggle, XtNborder, (XtArgVal) pix, NULL);
  216.       aw.apps[i].selected = True;
  217.     }
  218.   aw.n_selections = aw.n_apps;
  219. }
  220.  
  221. /*---------------------------------------------------------------------------*/
  222.  
  223. void appDeselectCb(Widget w, FileWindowRec *fw, XtPointer call_data)
  224. {
  225.   int i;
  226.   Pixel pix;
  227.   
  228.   for (i=0; i < aw.n_apps; i++)
  229.     if (aw.apps[i].selected) {
  230.       XtVaGetValues(aw.apps[i].toggle, XtNbackground, &pix, NULL);
  231.       XtVaSetValues(aw.apps[i].toggle, XtNborder, (XtArgVal) pix, NULL);
  232.       aw.apps[i].selected = False;
  233.     }
  234.   aw.n_selections = 0;
  235. }
  236.  
  237. /*---------------------------------------------------------------------------*/
  238.  
  239. void appLoadCb(Widget w, FileWindowRec *fw, XtPointer call_data)
  240. {
  241.   int i;
  242.  
  243.   for(i=0; i<aw.n_apps; i++)
  244.     freeApplicationResources(&aw.apps[i]);
  245.   XTFREE(aw.apps);
  246.  
  247.   readApplicationData(resources.app_file);
  248.   updateApplicationDisplay();
  249. }
  250.  
  251. /*---------------------------------------------------------------------------*/
  252.  
  253. void appMainCb(Widget w, FileWindowRec *fw, XtPointer call_data)
  254. {
  255.   strcpy(resources.app_file, resources.main_app_file);
  256.   clearApplicationsStack();
  257.   appLoadCb(w, fw, call_data);
  258. }
  259.  
  260. /*---------------------------------------------------------------------------*/
  261.  
  262. void appBackCb(Widget w, FileWindowRec *fw, XtPointer call_data)
  263. {
  264.   int i;
  265.  
  266.   if (n_appst > 0) {
  267.     for(i=0; i<aw.n_apps; i++)
  268.       freeApplicationResources(&aw.apps[i]);
  269.     XTFREE(aw.apps);
  270.  
  271.     popApplicationsFile();
  272.     readApplicationData(resources.app_file);
  273.     updateApplicationDisplay();
  274.   }
  275. }
  276.  
  277. /*---------------------------------------------------------------------------*/
  278.  
  279. void appOpenCb(Widget w, FileWindowRec *fw, XtPointer call_data)
  280. {
  281.   newFileWindow(user.home,resources.initial_display_type,False);
  282. }
  283.  
  284. /*---------------------------------------------------------------------------*/
  285.  
  286. void appCloseCb(Widget w, FileWindowRec *fw, XtPointer call_data)
  287. {
  288.   if (resources.confirm_quit && !confirm("", "Exit file manager?", ""))
  289.     return;
  290.  
  291.   quit();
  292. }
  293.