1:
37:
38:
39: package ;
40:
41: import ;
42: import ;
43: import ;
44: import ;
45: import ;
46: import ;
47: import ;
48: import ;
49:
50: public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
51: {
52: static final String FS = System.getProperty("file.separator");
53:
54: private String currentFile = null;
55: private String currentDirectory = null;
56: private FilenameFilter filter;
57:
58: native void create (GtkContainerPeer parent, int mode);
59: native void connectSignals ();
60: native void nativeSetFile (String file);
61: public native String nativeGetDirectory();
62: public native void nativeSetDirectory(String directory);
63: native void nativeSetFilenameFilter (FilenameFilter filter);
64:
65: public void create()
66: {
67: create((GtkContainerPeer) awtComponent.getParent().getPeer(),
68: ((FileDialog) awtComponent).getMode());
69:
70: FileDialog fd = (FileDialog) awtComponent;
71:
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: {
121: nativeSetFile (fileName);
122: }
123: else
124: {
125: nativeSetFile (nativeGetDirectory() + FS + fileName);
126: }
127: }
128:
129: public void setDirectory (String directory)
130: {
131:
134: if ((directory == null && currentDirectory == null)
135: || (directory != null && directory.equals (currentDirectory)))
136: return;
137:
138: if (directory == null || directory.equals (""))
139: {
140: currentDirectory = FS;
141: nativeSetFile (FS);
142: return;
143: }
144:
145: currentDirectory = directory;
146: nativeSetDirectory (directory);
147: }
148:
149: public void setFilenameFilter (FilenameFilter filter)
150: {
151: this.filter = filter;
152: nativeSetFilenameFilter(filter);
153: }
154:
155:
160:
161: boolean filenameFilterCallback (String fullname) {
162: String filename = fullname.substring(fullname.lastIndexOf(FS) + 1);
163: String dirname = fullname.substring(0, fullname.lastIndexOf(FS));
164: File dir = new File(dirname);
165: return filter.accept(dir, filename);
166: }
167:
168: public Graphics getGraphics ()
169: {
170:
171: return null;
172: }
173:
174:
175:
176: void gtkHideFileDialog ()
177: {
178:
179:
180: ((Dialog) awtComponent).hide();
181: }
182:
183:
184: void gtkDisposeFileDialog ()
185: {
186: ((Dialog) awtComponent).dispose();
187: }
188:
189:
190:
191:
192: void gtkSetFilename (String fileName)
193: {
194: FileDialog fd = (FileDialog) awtWidget;
195: if (fileName == null)
196: {
197: currentFile = null;
198: fd.setFile(null);
199: return;
200: }
201:
202: int sepIndex = fileName.lastIndexOf (FS);
203: if (sepIndex < 0)
204: {
205:
206: currentFile = fileName;
207: }
208: else
209: {
210: if (fileName.length() > (sepIndex + 1))
211: {
212: String fn = fileName.substring (sepIndex + 1);
213: currentFile = fn;
214: }
215: else
216: {
217: currentFile = null;
218: }
219:
220: String dn = fileName.substring (0, sepIndex + 1);
221: currentDirectory = dn;
222: fd.setDirectory(dn);
223: }
224:
225: fd.setFile (currentFile);
226: }
227: }