Subversion Repositories Kolibri OS

Rev

Rev 7597 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. (*
  2.     Copyright 2016, 2018 Anton Krotov
  3.  
  4.     This program is free software: you can redistribute it and/or modify
  5.     it under the terms of the GNU Lesser General Public License as published by
  6.     the Free Software Foundation, either version 3 of the License, or
  7.     (at your option) any later version.
  8.  
  9.     This program is distributed in the hope that it will be useful,
  10.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.     GNU Lesser General Public License for more details.
  13.  
  14.     You should have received a copy of the GNU Lesser General Public License
  15.     along with this program.  If not, see <http://www.gnu.org/licenses/>.
  16. *)
  17.  
  18. MODULE OpenDlg;
  19.  
  20. IMPORT sys := SYSTEM, KOSAPI;
  21.  
  22. TYPE
  23.  
  24.   DRAW_WINDOW = PROCEDURE;
  25.  
  26.   TDialog = RECORD
  27.     type,
  28.     procinfo,
  29.     com_area_name,
  30.     com_area,
  31.     opendir_path,
  32.     dir_default_path,
  33.     start_path: INTEGER;
  34.     draw_window: DRAW_WINDOW;
  35.     status*,
  36.     openfile_path,
  37.     filename_area: INTEGER;
  38.     filter_area:
  39.       POINTER TO RECORD
  40.         size: INTEGER;
  41.         filter: ARRAY 4096 OF CHAR
  42.       END;
  43.     X, Y: INTEGER;
  44.  
  45.     procinf: ARRAY 1024 OF CHAR;
  46.     s_com_area_name: ARRAY 32 OF CHAR;
  47.     s_opendir_path,
  48.     s_dir_default_path,
  49.     FilePath*,
  50.     FileName*: ARRAY 4096 OF CHAR
  51.   END;
  52.  
  53.   Dialog* = POINTER TO TDialog;
  54.  
  55. VAR
  56.  
  57.   Dialog_start, Dialog_init: PROCEDURE [stdcall] (od: Dialog);
  58.  
  59.  
  60. PROCEDURE Show*(od: Dialog; Width, Height: INTEGER);
  61. BEGIN
  62.   IF od # NIL THEN
  63.     od.X := Width;
  64.     od.Y := Height;
  65.     Dialog_start(od)
  66.   END
  67. END Show;
  68.  
  69. PROCEDURE Create*(draw_window: DRAW_WINDOW; type: INTEGER; def_path, filter: ARRAY OF CHAR): Dialog;
  70. VAR res: Dialog; n, i: INTEGER;
  71.  
  72.   PROCEDURE replace(VAR str: ARRAY OF CHAR; c1, c2: CHAR);
  73.   VAR i: INTEGER;
  74.   BEGIN
  75.     i := LENGTH(str) - 1;
  76.     WHILE i >= 0 DO
  77.       IF str[i] = c1 THEN
  78.         str[i] := c2
  79.       END;
  80.       DEC(i)
  81.     END
  82.   END replace;
  83.  
  84. BEGIN
  85.   NEW(res);
  86.   IF res # NIL THEN
  87.     NEW(res.filter_area);
  88.     IF res.filter_area # NIL THEN
  89.       res.s_com_area_name    := "FFFFFFFF_open_dialog";
  90.       res.com_area           := 0;
  91.       res.type               := type;
  92.       res.draw_window        := draw_window;
  93.       COPY(def_path, res.s_dir_default_path);
  94.       COPY(filter,   res.filter_area.filter);
  95.  
  96.       n := LENGTH(res.filter_area.filter);
  97.       FOR i := 0 TO 3 DO
  98.         res.filter_area.filter[n + i] := "|"
  99.       END;
  100.       res.filter_area.filter[n + 4] := 0X;
  101.  
  102.       res.X                  := 0;
  103.       res.Y                  := 0;
  104.       res.s_opendir_path     := res.s_dir_default_path;
  105.       res.FilePath           := "";
  106.       res.FileName           := "";
  107.       res.status             := 0;
  108.       res.filter_area.size   := LENGTH(res.filter_area.filter);
  109.       res.procinfo           := sys.ADR(res.procinf[0]);
  110.       res.com_area_name      := sys.ADR(res.s_com_area_name[0]);
  111.       res.start_path         := sys.SADR("/rd/1/File managers/opendial");
  112.       res.opendir_path       := sys.ADR(res.s_opendir_path[0]);
  113.       res.dir_default_path   := sys.ADR(res.s_dir_default_path[0]);
  114.       res.openfile_path      := sys.ADR(res.FilePath[0]);
  115.       res.filename_area      := sys.ADR(res.FileName[0]);
  116.  
  117.       replace(res.filter_area.filter, "|", 0X);
  118.       Dialog_init(res)
  119.     ELSE
  120.       DISPOSE(res)
  121.     END
  122.   END
  123.   RETURN res
  124. END Create;
  125.  
  126. PROCEDURE Destroy*(VAR od: Dialog);
  127. BEGIN
  128.   IF od # NIL THEN
  129.     DISPOSE(od.filter_area);
  130.     DISPOSE(od)
  131.   END
  132. END Destroy;
  133.  
  134. PROCEDURE Load;
  135. VAR Lib: INTEGER;
  136.  
  137.   PROCEDURE GetProc(Lib, v: INTEGER; name: ARRAY OF CHAR);
  138.   VAR a: INTEGER;
  139.   BEGIN
  140.     a := KOSAPI.GetProcAdr(name, Lib);
  141.     ASSERT(a # 0);
  142.     sys.PUT(v, a)
  143.   END GetProc;
  144.  
  145. BEGIN
  146.   Lib := KOSAPI.LoadLib("/rd/1/Lib/Proc_lib.obj");
  147.   GetProc(Lib, sys.ADR(Dialog_init),  "OpenDialog_init");
  148.   GetProc(Lib, sys.ADR(Dialog_start), "OpenDialog_start");
  149. END Load;
  150.  
  151. BEGIN
  152.   Load
  153. END OpenDlg.
  154.