Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
7597 akron1 1
(*
2
    Copyright 2016, 2018 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
 
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]);
7597 akron1 111
      res.start_path         := sys.SADR("/rd/1/File managers/opendial");
6613 leency 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
 
7597 akron1 137
  PROCEDURE GetProc(Lib, v: INTEGER; name: ARRAY OF CHAR);
6613 leency 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");
7597 akron1 147
  GetProc(Lib, sys.ADR(Dialog_init),  "OpenDialog_init");
148
  GetProc(Lib, sys.ADR(Dialog_start), "OpenDialog_start");
6613 leency 149
END Load;
150
 
151
BEGIN
152
  Load
153
END OpenDlg.