File: NSSavePanel-test.m

package info (click to toggle)
gnustep-examples 1%3A1.2.0-2
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 1,952 kB
  • ctags: 270
  • sloc: objc: 14,381; makefile: 65
file content (338 lines) | stat: -rw-r--r-- 9,748 bytes parent folder | download | duplicates (4)
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
/* NSSavePanel-test.m: NSSavePanel class demo/test

   Copyright (C) 1999 Free Software Foundation, Inc.

   Author:  Nicola Pero <n.pero@mi.flashnet.it>
   Date: 1999
   
   This file is part of GNUstep.
   
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.
   
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   
   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <Foundation/Foundation.h>
#include <AppKit/AppKit.h>
#include <GNUstepGUI/GSHbox.h>
#include <GNUstepGUI/GSTable.h>
#include <GNUstepGUI/GSVbox.h>
#include "../GSTestProtocol.h"

// A unit rectangle of the little results table
@interface TableEntry: NSTextField
@end

@implementation TableEntry
- (id) initWithFrame: (NSRect)frameRect
{
  [super initWithFrame: frameRect];
  [self setEditable: NO];
  [self setSelectable: NO];
  [self setBezeled: NO];
  [self setDrawsBackground: NO];
  [self setAutoresizingMask: NSViewWidthSizable];
  return self;
}
@end

@interface NSSavePanelTest: NSObject <GSTest>
{
  NSButton *packageButton;
  NSButton *accessoryViewButton;
  NSForm *configureForm;
  NSWindow *win;
  TableEntry *filenameEntry;
  TableEntry *directoryEntry;
  TableEntry *buttonEntry;
}
-(void)restart;
-(void)startSavePanel: (id)sender;
-(NSBox *)accessoryView;
@end

@implementation NSSavePanelTest: NSObject
{
  // for instance variables see above
}
-(id) init
{
  NSButton *button;
  GSVbox *vbox;
  GSVbox *ivbox;
  GSVbox *tmp_box;
  NSBox *configureBox;
  NSBox *resultsBox;
  GSTable *resultsTable;
  TableEntry *entry;
  NSRect winFrame;
  
  vbox = [[GSVbox new] autorelease];
  [vbox setDefaultMinYMargin: 5];
  [vbox setBorder: 5];
 
  button = [[NSButton new] autorelease];
  [button setTitle: @"Start Save Panel"];
  [button sizeToFit];
  [button setAutoresizingMask: NSViewMinXMargin];
  [button setTarget: self];
  [button setAction: @selector (startSavePanel:)];
  [vbox addView: button
	enablingYResizing: NO];

  // The little results table
  resultsTable = [[[GSTable alloc] initWithNumberOfRows: 3
				   numberOfColumns: 2] autorelease];
  // Set resizing properties
  [resultsTable setXResizingEnabled: NO
		forColumn: 0];
  [resultsTable setXResizingEnabled: YES
		forColumn: 1];

  [resultsTable setYResizingEnabled: NO
		forRow: 0];
  [resultsTable setYResizingEnabled: NO
		forRow: 1];
  [resultsTable setYResizingEnabled: NO
		forRow: 2];

  [resultsTable setAutoresizingMask: NSViewWidthSizable | NSViewMinYMargin];
  //Add entries in the table
  entry = [[TableEntry new] autorelease];
  [entry setStringValue: @"Button:"];
  [entry setAlignment: NSRightTextAlignment];
  [entry sizeToFit];
  [resultsTable putView: entry
		atRow: 0
		column: 0
		withMargins: 2];

  entry = [[TableEntry new] autorelease];
  [entry setStringValue: @"Filename:"];
  [entry setAlignment: NSRightTextAlignment];
  [entry sizeToFit];
  [resultsTable putView: entry
		atRow: 1
		column: 0
		withMargins: 2];

  entry = [[TableEntry new] autorelease];
  [entry setStringValue: @"Directory:"];
  [entry setAlignment: NSRightTextAlignment];
  [entry sizeToFit];
  [resultsTable putView: entry
		atRow: 2
		column: 0
		withMargins: 2];

  buttonEntry = [[TableEntry new] autorelease];
  [buttonEntry setStringValue: @" "];
  [buttonEntry setAlignment: NSLeftTextAlignment];
  [buttonEntry sizeToFit];
  [resultsTable putView: buttonEntry
		atRow: 0
		column: 1
		withMargins: 2];

  filenameEntry = [[TableEntry new] autorelease];
  [filenameEntry setStringValue: @" "];
  [filenameEntry setAlignment: NSLeftTextAlignment];
  [filenameEntry sizeToFit];
  [resultsTable putView: filenameEntry
		atRow: 1
		column: 1
		withMargins: 2];

  directoryEntry = [[TableEntry new] autorelease];
  [directoryEntry setStringValue: @" "];
  [directoryEntry setAlignment: NSLeftTextAlignment];
  [directoryEntry sizeToFit];
  [resultsTable putView: directoryEntry
		atRow: 2
		column: 1
		withMargins: 2];
  //  

  resultsBox = [[NSBox new] autorelease];
  [resultsBox setTitle: @"Results"];
  [resultsBox setTitlePosition: NSAtTop];
  [resultsBox addSubview: resultsTable];
  [resultsBox sizeToFit];
  [resultsBox setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];

  [vbox addView: resultsBox
	withMinYMargin: 10];
  
  configureForm = [[NSForm new] autorelease];
  [configureForm addEntry: @"Title:"];
  [configureForm addEntry: @"Prompt:"];
  [configureForm addEntry: @"Directory:"];
  [configureForm addEntry: @"File:"];
  [configureForm sizeToFit];
  [configureForm setAutoresizingMask: NSViewWidthSizable];

  tmp_box = [[GSVbox new] autorelease];
  [tmp_box setDefaultMinYMargin: 4];
  [tmp_box setAutoresizingMask: NSViewMinXMargin | NSViewMaxXMargin];
  
  packageButton = [[NSButton new] autorelease];
  [packageButton setTitle: @"Treat File Packages as Directories"];
  [packageButton setButtonType: NSSwitchButton];
  [packageButton setBordered: NO];
  [packageButton sizeToFit];
  [packageButton setAutoresizingMask: NSViewMaxXMargin];
  [tmp_box addView: packageButton];

  accessoryViewButton = [[NSButton new] autorelease];
  [accessoryViewButton setTitle: @"Add an Accessory View"];
  [accessoryViewButton setButtonType: NSSwitchButton];
  [accessoryViewButton setBordered: NO];
  [accessoryViewButton sizeToFit];
  [accessoryViewButton setAutoresizingMask: NSViewMaxXMargin];
  [tmp_box addView: accessoryViewButton];

  ivbox = [[GSVbox new] autorelease];
  [ivbox setDefaultMinYMargin: 8];
  [ivbox addView: tmp_box
	 enablingYResizing: NO];
  [ivbox addView: configureForm 
	 enablingYResizing: NO];
  [ivbox setAutoresizingMask: NSViewWidthSizable|NSViewMinYMargin];
  
  configureBox = [[NSBox new] autorelease];
  [configureBox setTitle: @"Options"];
  [configureBox setTitlePosition: NSAtTop];
  [configureBox addSubview: ivbox];
  [configureBox sizeToFit];
  [configureBox setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];

  [vbox addView: configureBox];
  [vbox setAutoresizingMask: (NSViewWidthSizable | NSViewMinYMargin)];

  [configureForm setNextKeyView: accessoryViewButton];
  [accessoryViewButton setNextKeyView: packageButton];
  [packageButton setNextKeyView: configureForm];
  
  winFrame.size = [vbox frame].size;
  winFrame.origin = NSMakePoint (100, 100);

  win = [[NSWindow alloc] initWithContentRect: winFrame
			  styleMask: (NSTitledWindowMask 
				      | NSClosableWindowMask 
				      | NSMiniaturizableWindowMask 
				      | NSResizableWindowMask)
			  backing: NSBackingStoreBuffered
			  defer: NO];
  [win setReleasedWhenClosed: NO];  
  [win setContentView: vbox];
  [win setTitle: @"NSSavePanel Test"];
  
  [self restart];
  return self;
}
-(void) dealloc
{
  RELEASE(win);
  [super dealloc];
}
-(void) restart
{
  [win orderFront: nil]; 
  [[NSApplication sharedApplication] addWindowsItem: win
				     title: @"NSSavePanel Test"
				     filename: NO];
}
-(void) startSavePanel: (id) sender 
{
  NSSavePanel *savePanel;
  int packageFlag;
  int accessoryViewFlag;
  int result;
  NSString *string;
  NSString *directory;
  NSString *filename;

  savePanel = [NSSavePanel savePanel];
  string = [[configureForm cellAtIndex: 0] stringValue];
  if ([string length]) 
    [savePanel setTitle: string];
  
  string = [[configureForm cellAtIndex: 1] stringValue];
  if ([string length])
    [savePanel setPrompt: string];
  
  packageFlag = [packageButton state];
  if (packageFlag == 0)
    [savePanel setTreatsFilePackagesAsDirectories: NO];
  else
    [savePanel setTreatsFilePackagesAsDirectories: YES];

  accessoryViewFlag = [accessoryViewButton state];
  if (accessoryViewFlag == 1)
    [savePanel setAccessoryView: [self accessoryView]];

  filename = [[configureForm cellAtIndex: 3] stringValue];
  directory = [[configureForm cellAtIndex: 2] stringValue];

  if ([filename hasPrefix: @"/"])
    {
      NSRunAlertPanel (NULL, @"A valid filename can not begin with / !",
		       @"OK", NULL, NULL);
      return;
    }

  result = [savePanel runModalForDirectory:  directory
		      file: filename];
  switch (result)
    {
    case NSOKButton:
      [buttonEntry setStringValue: @"NSOKButton"];
      break;
    case NSCancelButton:
      [buttonEntry setStringValue: @"NSCancelButton"];
      break;
    default: // There are no other cases.
      [buttonEntry setStringValue: @"<Weird. Report to bug-gnustep@gnu.org>"];
      break;      
    }

  [directoryEntry setStringValue: [savePanel directory]];
  [filenameEntry setStringValue: [savePanel filename]];
}
-(NSBox *) accessoryView
{
  NSTextField *view;
  NSBox *box;

  view = [NSTextField new];
  [view setDrawsBackground: YES];
  [view setBackgroundColor: [NSColor grayColor]];
  [view setEditable: NO];
  [view setSelectable: NO];
  [view setBezeled: NO];
  [view setBordered: YES];
  [view setAlignment: NSCenterTextAlignment];
  [view setStringValue: @"This is the AccessoryView"];
  [view setFrameSize: NSMakeSize (400, 70)]; 
  [view setAutoresizingMask: NSViewWidthSizable];
  
  box = [NSBox new];
  [box setTitle: @"AccessoryView"];
  [box setTitlePosition: NSAtTop];
  [box setBorderType: NSGrooveBorder];
  [box addSubview: view];
  [view release];
  [box sizeToFit];
  [box setAutoresizingMask: NSViewWidthSizable];      
  
  return [box autorelease];
}
@end