-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUCFolderOperations.m
More file actions
135 lines (106 loc) · 4.03 KB
/
UCFolderOperations.m
File metadata and controls
135 lines (106 loc) · 4.03 KB
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
//
// UCFolderOperations.m
// Chain
//
// Created by Christoph on 10.08.2009.
// Copyright 2009 Useless Coding. All rights reserved.
//
#import "UCFolderOperations.h"
@implementation UCFolderOperations
+ (NSOpenPanel *)folderChooserWithPrompt:(NSString *)prompt allowingMultiple:(BOOL)multiple;
{
NSOpenPanel * op = [NSOpenPanel openPanel];
[op setCanChooseFiles:NO];
[op setCanChooseDirectories:YES];
[op setAllowsMultipleSelection:multiple];
[op setPrompt:prompt];
return op;
}
+ (NSOpenPanel *)folderChooserWithPrompt:(NSString *)prompt
{
return [self folderChooserWithPrompt:prompt allowingMultiple:NO];
}
+ (NSString *)fileNameFromURL:(NSURL *)fileURL withNameRange:(NSRange *)outRange
{
return [self fileNameFromPath:[fileURL path] withNameRange:outRange];
}
+ (NSString *)fileNameFromPath:(NSString *)aPath withNameRange:(NSRange *)outRange
{
NSString * fileName = [aPath lastPathComponent];
if(outRange!=NULL)
{
*outRange = NSMakeRange(0, [[fileName stringByDeletingPathExtension] length]);
}
return fileName;
}
+ (BOOL)canHaveFileNamed:(NSString *)fileName inFolder:(NSString *)aFolder suggestedName:(NSString **)outName
{
// FIXME: Doesn't reject illegal filenames
if(![[NSFileManager defaultManager] fileExistsAtPath:[aFolder stringByAppendingPathComponent:fileName]])
{
return YES;
}
if(outName!=NULL)
{
// TODO: Find unused filename
// Maybe by appending a number?
*outName = [[[fileName stringByDeletingPathExtension] stringByAppendingString:@" *SUGGEST*"] stringByAppendingPathExtension:[fileName pathExtension]];
}
return NO;
}
#pragma mark -
- (id)init
{
self = [super init];
if(self!=nil)
{
[NSBundle loadNibNamed:@"FileOperations" owner:self];
}
return self;
}
- (void) dealloc
{
[renameView release];
[super dealloc];
}
#pragma mark -
- (NSAlert *)renameSheetForFileURL:(NSURL *)fileURL
{
return [self renameSheetForFileURL:fileURL withDisplayName:[[NSFileManager defaultManager] displayNameAtPath:[fileURL path]]];
}
- (NSAlert *)renameSheetForFileURL:(NSURL *)fileURL withDisplayName:(NSString *)displayName
{
NSAlert * alert = [[NSAlert alloc] init];
[alert setMessageText:[NSString localizedStringWithFormat:NSLocalizedString(@"Rename '%@'", @"Title of renaming sheet"), displayName]];
[alert setInformativeText:NSLocalizedString(@"Type the new name to use for this document.", @"Information for renaming")];
[alert addButtonWithTitle:NSLocalizedString(@"Rename", @"Rename Button")];
[alert addButtonWithTitle:NSLocalizedString(@"Cancel", @"Cancel Button")];
[alert setAccessoryView:renameView];
[renameField setStringValue:[[self class] fileNameFromURL:fileURL withNameRange:&lastRange]];
return [alert autorelease];
}
- (NSAlert *)conflictSheetForName:(NSString *)fileName inFolder:(NSString *)aFolder withSuggestion:(NSString *)suggestedName
{
NSAlert * alert = [[NSAlert alloc] init];
[alert setMessageText:[NSString stringWithFormat:NSLocalizedString(@"A file named '%@' already exists in %@.", @"Title of Conflict sheet"), fileName, [[NSFileManager defaultManager] displayNameAtPath:aFolder]]];
[alert setInformativeText:NSLocalizedString(@"Do you want to replace the existing file or use a new name?", @"Information for conflict")];
[alert addButtonWithTitle:NSLocalizedString(@"Use New Name", @"Resolve Conflict with new name Button")];
[alert addButtonWithTitle:NSLocalizedString(@"Cancel", @"Cancel Button")];
[alert addButtonWithTitle:NSLocalizedString(@"Replace", @"Resolve Conflict by replacing Button")];
[[[alert buttons] objectAtIndex:2] setKeyEquivalent:@"r"];
[[[alert buttons] objectAtIndex:2] setKeyEquivalentModifierMask:NSCommandKeyMask];
[alert setAlertStyle:NSCriticalAlertStyle];
[alert setAccessoryView:renameView];
[renameField setStringValue:[[self class] fileNameFromPath:suggestedName withNameRange:&lastRange]];
return [alert autorelease];
}
- (void)activateSheet:(NSAlert *)alert
{
[[alert window] makeFirstResponder:renameField];
[[renameField currentEditor] setSelectedRange:lastRange];
}
- (NSString *)sheetNameValue
{
return [renameField stringValue];
}
@end