1:
37:
38:
39: package ;
40:
41: import ;
42: import ;
43: import ;
44: import ;
45: import ;
46: import ;
47: import ;
48:
49: public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
50: {
51: static final String FS = System.getProperty("file.separator");
52:
53: private String currentFile = null;
54: private String currentDirectory = null;
55: private FilenameFilter filter;
56:
57: native void create (GtkContainerPeer parent, int mode);
58: native void connectSignals ();
59: native void nativeSetFile (String file);
60: public native String nativeGetDirectory();
61: public native void nativeSetDirectory(String directory);
62: native void nativeSetFilenameFilter (FilenameFilter filter);
63:
64: public void create()
65: {
66: create((GtkContainerPeer) awtComponent.getParent().getPeer(),
67: ((FileDialog) awtComponent).getMode());
68:
69: FileDialog fd = (FileDialog) awtComponent;
70:
71: nativeSetDirectory(System.getProperty("user.dir"));
72: setDirectory(fd.getDirectory());
73: setFile(fd.getFile());
74:
75: FilenameFilter filter = fd.getFilenameFilter();
76: if (filter != null)
77: setFilenameFilter(filter);
78: }
79:
80: public GtkFileDialogPeer (FileDialog fd)
81: {
82: super (fd);
83: }
84:
85: void setComponentBounds ()
86: {
87: if (awtComponent.getHeight () == 0
88: && awtComponent.getWidth () == 0)
89: {
90: int[] dims = new int[2];
91: gtkWidgetGetPreferredDimensions (dims);
92:
93: if (dims[0] != awtComponent.getWidth()
94: || dims[1] != awtComponent.getHeight())
95: awtComponent.setSize(dims[0], dims[1]);
96: }
97: super.setComponentBounds ();
98: }
99:
100: public void setFile (String fileName)
101: {
102:
105: if ((fileName == null && currentFile == null)
106: || (fileName != null && fileName.equals (currentFile)))
107: return;
108:
109: if (fileName == null || fileName.equals (""))
110: {
111: currentFile = "";
112: nativeSetFile ("");
113: return;
114: }
115:
116:
117:
118: currentFile = fileName;
119: if (fileName.indexOf(FS) == 0)
120: nativeSetFile(fileName);
121: else
122: nativeSetFile(nativeGetDirectory() + FS + fileName);
123: }
124:
125: public void setDirectory (String directory)
126: {
127:
130: if ((directory == null && currentDirectory == null)
131: || (directory != null && directory.equals(currentDirectory)))
132: return;
133:
134: if (directory == null || directory.equals(""))
135: {
136: currentDirectory = FS;
137: nativeSetDirectory(FS);
138: return;
139: }
140:
141:
142:
143:
144: currentDirectory = directory;
145: if (directory.indexOf(FS) == 0)
146: nativeSetDirectory(directory);
147: else
148: nativeSetDirectory(nativeGetDirectory() + FS + directory);
149: }
150:
151: public void setFilenameFilter (FilenameFilter filter)
152: {
153: this.filter = filter;
154: nativeSetFilenameFilter(filter);
155: }
156:
157:
162:
163: boolean filenameFilterCallback (String fullname) {
164: String filename = fullname.substring(fullname.lastIndexOf(FS) + 1);
165: String dirname = fullname.substring(0, fullname.lastIndexOf(FS));
166: File dir = new File(dirname);
167: return filter.accept(dir, filename);
168: }
169:
170:
171: protected void updateComponent (PaintEvent event)
172: {
173:
174: }
175:
176:
177:
178: void gtkHideFileDialog ()
179: {
180:
181:
182: ((Dialog) awtComponent).hide();
183: }
184:
185:
186: void gtkDisposeFileDialog ()
187: {
188: ((Dialog) awtComponent).dispose();
189: }
190:
191:
192:
193:
194: void gtkSetFilename (String fileName)
195: {
196: FileDialog fd = (FileDialog) awtWidget;
197: if (fileName == null)
198: {
199: currentFile = null;
200: fd.setFile(null);
201: return;
202: }
203:
204: int sepIndex = fileName.lastIndexOf (FS);
205: if (sepIndex < 0)
206: {
207:
208: currentFile = fileName;
209: }
210: else
211: {
212: if (fileName.length() > (sepIndex + 1))
213: {
214: String fn = fileName.substring (sepIndex + 1);
215: currentFile = fn;
216: }
217: else
218: {
219: currentFile = null;
220: }
221:
222: String dn = fileName.substring (0, sepIndex + 1);
223: currentDirectory = dn;
224: fd.setDirectory(dn);
225: }
226:
227: fd.setFile (currentFile);
228: }
229: }