1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
diff -Naur espws-2.0-orig/FileChooser.cxx espws-2.0/FileChooser.cxx
--- espws-2.0-orig/FileChooser.cxx Tue Feb 29 10:45:55 2000
+++ espws-2.0/FileChooser.cxx Mon Jul 23 18:27:45 2001
@@ -128,7 +128,7 @@
{ Fl_Choice* o = dirMenu = new Fl_Choice(75, 10, 200, 25, "Directory:");
o->callback((Fl_Callback*)cb_dirMenu);
}
- { Fl_Button* o = new Fl_Button(340, 10, 25, 25);
+ { Fl_Button* o = allFiles = new Fl_Button(340, 10, 25, 25);
bitmap_allfiles.label(o);
o->labelsize(28);
o->labelcolor(4);
@@ -140,6 +140,7 @@
o->end();
}
window->size_range(345, 270, 345);
+directory_chooser_ = false;
fileList->filter(p);
type(t);
value(d);
@@ -216,6 +217,14 @@
}
void FileChooser::type(int t) {
+ if (t == DIRECTORY)
+ {
+ t = SINGLE;
+ directory_chooser_ = true;
+ allFiles->deactivate();
+ fileList->filter("-_-_-_-_-_-"); /* Match that! */
+ }
+
type_ = t;
if (t == MULTI)
fileList->type(FL_MULTI_BROWSER);
diff -Naur espws-2.0-orig/FileChooser.h espws-2.0/FileChooser.h
--- espws-2.0-orig/FileChooser.h Tue Feb 29 10:45:55 2000
+++ espws-2.0/FileChooser.h Mon Jul 23 18:27:45 2001
@@ -15,7 +15,7 @@
class FileChooser {
public:
- enum { SINGLE, MULTI, CREATE };
+ enum { SINGLE, MULTI, CREATE, DIRECTORY };
FileChooser(const char *d, const char *p, int t, const char *title);
private:
Fl_Window *window;
@@ -41,10 +41,12 @@
Fl_Choice *dirMenu;
inline void cb_dirMenu_i(Fl_Choice*, void*);
static void cb_dirMenu(Fl_Choice*, void*);
+ Fl_Button *allFiles;
inline void cb_allfiles_i(Fl_Button*, void*);
static void cb_allfiles(Fl_Button*, void*);
char directory_[1024];
int type_;
+ int directory_chooser_;
void fileListCB();
void fileNameCB();
void newdir();
diff -Naur espws-2.0-orig/FileChooser2.cxx espws-2.0/FileChooser2.cxx
--- espws-2.0-orig/FileChooser2.cxx Tue Jan 4 05:45:51 2000
+++ espws-2.0/FileChooser2.cxx Mon Jul 23 18:27:45 2001
@@ -170,7 +170,7 @@
pathname[sizeof(pathname) - 1] = '\0';
}
- if (filename_isdir(pathname))
+ if (filename_isdir(pathname) && !directory_chooser_)
return (0);
else
return (1);
@@ -189,7 +189,7 @@
pathname[sizeof(pathname) - 1] = '\0';
}
- if (!filename_isdir(pathname))
+ if (!filename_isdir(pathname) || directory_chooser_)
count ++;
}
@@ -209,6 +209,16 @@
const char *name; // Current filename
static char pathname[1024]; // Filename + directory
+// There seems to be a little bit of a bug...sometimes
+// the returned path can start with '//'. I think the
+// Unix file system handles this OK ("ls //tmp" works),
+// but lets clean it up anyway.
+
+ if (strlen (directory_) >= 2 &&
+ directory_[0] == '/' && directory_[1] == '/')
+ {
+ memmove (directory_, directory_ + 1, strlen (directory_));
+ }
if (type_ != MULTI)
{
@@ -227,7 +237,7 @@
name = fileList->text(i);
sprintf(pathname, "%s/%s", directory_, name);
- if (!filename_isdir(pathname))
+ if (!filename_isdir(pathname) || directory_chooser_)
{
// Nope, see if this this is "the one"...
count ++;
@@ -427,7 +437,7 @@
{
fileName->value(filename);
- if (!filename_isdir(pathname))
+ if (!filename_isdir(pathname) || directory_chooser_)
okButton->activate();
}
}
@@ -487,10 +497,10 @@
// Enter pressed - select or change directory...
#if defined(WIN32) || defined(__EMX__)
- if ((strlen(pathname) == 2 && pathname[1] == ':') ||
- filename_isdir(pathname))
+ if (((strlen(pathname) == 2 && pathname[1] == ':') ||
+ filename_isdir(pathname)) && !directory_chooser_)
#else
- if (filename_isdir(pathname))
+ if (filename_isdir(pathname) && !directory_chooser_)
#endif /* WIN32 || __EMX__ */
directory(pathname);
else if (type_ == CREATE || access(pathname, 0) == 0)
@@ -622,7 +632,7 @@
sprintf(pathname, "%s/%s", directory_, fileName->value());
if ((type_ == CREATE || access(pathname, 0) == 0) &&
- !filename_isdir(pathname))
+ (!filename_isdir(pathname) || directory_chooser_))
okButton->activate();
else
okButton->deactivate();
|