Subversion Repositories Kolibri OS

Rev

Rev 8097 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
7983 leency 1
(*
8859 leency 2
    Copyright 2016, 2018, 2020, 2021 Anton Krotov
6613 leency 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 .
16
*)
17
 
18
MODULE OpenDlg;
19
 
20
IMPORT sys := SYSTEM, KOSAPI;
21
 
8859 leency 22
CONST
23
  topen* = 0;
24
  tsave* = 1;
25
  tdir* = 2;
26
 
6613 leency 27
TYPE
28
 
29
  DRAW_WINDOW = PROCEDURE;
30
 
31
  TDialog = RECORD
8859 leency 32
    _type*,
6613 leency 33
    procinfo,
34
    com_area_name,
35
    com_area,
36
    opendir_path,
37
    dir_default_path,
38
    start_path: INTEGER;
39
    draw_window: DRAW_WINDOW;
40
    status*,
41
    openfile_path,
42
    filename_area: INTEGER;
43
    filter_area:
44
      POINTER TO RECORD
45
        size: INTEGER;
46
        filter: ARRAY 4096 OF CHAR
47
      END;
48
    X, Y: INTEGER;
49
 
50
    procinf: ARRAY 1024 OF CHAR;
51
    s_com_area_name: ARRAY 32 OF CHAR;
52
    s_opendir_path,
53
    s_dir_default_path,
54
    FilePath*,
55
    FileName*: ARRAY 4096 OF CHAR
56
  END;
57
 
58
  Dialog* = POINTER TO TDialog;
59
 
60
VAR
61
 
62
  Dialog_start, Dialog_init: PROCEDURE [stdcall] (od: Dialog);
63
 
64
 
65
PROCEDURE Show*(od: Dialog; Width, Height: INTEGER);
66
BEGIN
67
  IF od # NIL THEN
68
    od.X := Width;
69
    od.Y := Height;
70
    Dialog_start(od)
71
  END
72
END Show;
73
 
8097 maxcodehac 74
PROCEDURE Create*(draw_window: DRAW_WINDOW; _type: INTEGER; def_path, filter: ARRAY OF CHAR): Dialog;
6613 leency 75
VAR res: Dialog; n, i: INTEGER;
76
 
77
  PROCEDURE replace(VAR str: ARRAY OF CHAR; c1, c2: CHAR);
78
  VAR i: INTEGER;
79
  BEGIN
80
    i := LENGTH(str) - 1;
81
    WHILE i >= 0 DO
82
      IF str[i] = c1 THEN
83
        str[i] := c2
84
      END;
85
      DEC(i)
86
    END
87
  END replace;
88
 
89
BEGIN
90
  NEW(res);
91
  IF res # NIL THEN
92
    NEW(res.filter_area);
93
    IF res.filter_area # NIL THEN
94
      res.s_com_area_name    := "FFFFFFFF_open_dialog";
95
      res.com_area           := 0;
8097 maxcodehac 96
      res._type              := _type;
6613 leency 97
      res.draw_window        := draw_window;
98
      COPY(def_path, res.s_dir_default_path);
99
      COPY(filter,   res.filter_area.filter);
100
 
101
      n := LENGTH(res.filter_area.filter);
102
      FOR i := 0 TO 3 DO
103
        res.filter_area.filter[n + i] := "|"
104
      END;
105
      res.filter_area.filter[n + 4] := 0X;
106
 
107
      res.X                  := 0;
108
      res.Y                  := 0;
109
      res.s_opendir_path     := res.s_dir_default_path;
110
      res.FilePath           := "";
111
      res.FileName           := "";
112
      res.status             := 0;
113
      res.filter_area.size   := LENGTH(res.filter_area.filter);
114
      res.procinfo           := sys.ADR(res.procinf[0]);
115
      res.com_area_name      := sys.ADR(res.s_com_area_name[0]);
7597 akron1 116
      res.start_path         := sys.SADR("/rd/1/File managers/opendial");
6613 leency 117
      res.opendir_path       := sys.ADR(res.s_opendir_path[0]);
118
      res.dir_default_path   := sys.ADR(res.s_dir_default_path[0]);
119
      res.openfile_path      := sys.ADR(res.FilePath[0]);
120
      res.filename_area      := sys.ADR(res.FileName[0]);
121
 
122
      replace(res.filter_area.filter, "|", 0X);
123
      Dialog_init(res)
124
    ELSE
125
      DISPOSE(res)
126
    END
127
  END
128
  RETURN res
129
END Create;
130
 
131
PROCEDURE Destroy*(VAR od: Dialog);
132
BEGIN
133
  IF od # NIL THEN
134
    DISPOSE(od.filter_area);
135
    DISPOSE(od)
136
  END
137
END Destroy;
138
 
139
PROCEDURE Load;
140
VAR Lib: INTEGER;
141
 
7597 akron1 142
  PROCEDURE GetProc(Lib, v: INTEGER; name: ARRAY OF CHAR);
6613 leency 143
  VAR a: INTEGER;
144
  BEGIN
145
    a := KOSAPI.GetProcAdr(name, Lib);
146
    ASSERT(a # 0);
147
    sys.PUT(v, a)
148
  END GetProc;
149
 
150
BEGIN
151
  Lib := KOSAPI.LoadLib("/rd/1/Lib/Proc_lib.obj");
7597 akron1 152
  GetProc(Lib, sys.ADR(Dialog_init),  "OpenDialog_init");
153
  GetProc(Lib, sys.ADR(Dialog_start), "OpenDialog_start");
6613 leency 154
END Load;
155
 
156
BEGIN
157
  Load
7983 leency 158
END OpenDlg.