1/* 2 3 PreferencesController.m 4 Zipper 5 6 Copyright (C) 2012 Free Software Foundation, Inc 7 8 Authors: Dirk Olmes <dirk@xanthippe.ping.de> 9 Riccardo Mottola <rm@gnu.org> 10 11 This application is free software; you can redistribute it and/or modify it 12 under the terms of the GNU General Public License as published by the Free 13 Software Foundation; either version 2 of the License, or (at your option) 14 any later version. 15 16 This program is distributed in the hope that it will be useful, but 17 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 18 or FITNESS FOR A PARTICULAR PURPOSE. 19 See the GNU General Public License for more details 20 21 */ 22 23#import <Foundation/Foundation.h> 24#import <AppKit/AppKit.h> 25 26#import "PreferencesController.h" 27#import "Preferences.h" 28#import "Archive.h" 29 30#define TAG_TAR 1 31#define TAG_UNZIP 2 32#define TAG_RAR 3 33#define TAG_LHA 4 34#define TAG_LZX 5 35#define TAG_SEVEN_ZIP 6 36#define TAG_ZIP 7 37#define TAG_GZIP 8 38#define TAG_GUNZIP 9 39#define TAG_BZIP2 10 40#define TAG_BUNZIP2 11 41#define TAG_UNARJ 12 42#define TAG_UNACE 13 43#define TAG_ZOO 14 44#define TAG_XZ 15 45 46@implementation PreferencesController : NSObject 47 48- (id)init 49{ 50 NSString *string; 51 BOOL tarFlag; 52 53 [super init]; 54 [NSBundle loadNibNamed: @"Preferences" owner: self]; 55 56 // tar 57 string = [Preferences tarExecutable]; 58 if (!string) 59 string = @""; 60 [_tarTextField setStringValue:string]; 61 62 // unzip 63 string = [Preferences unzipExecutable]; 64 if (!string) 65 string = @""; 66 [_unzipTextField setStringValue:string]; 67 68 // zip 69 string = [Preferences zipExecutable]; 70 if (!string) 71 string = @""; 72 [_zipTextField setStringValue:string]; 73 74 // rar 75 string = [Preferences rarExecutable]; 76 if (!string) 77 string = @""; 78 [_rarTextField setStringValue:string]; 79 80 // lha 81 string = [Preferences lhaExecutable]; 82 if (!string) 83 string = @""; 84 [_lhaTextField setStringValue:string]; 85 86 // lzx 87 string = [Preferences lzxExecutable]; 88 if (!string) 89 string = @""; 90 [_lzxTextField setStringValue:string]; 91 92 // 7z 93 string = [Preferences sevenZipExecutable]; 94 if (!string) 95 string = @""; 96 [_sevenZipTextField setStringValue:string]; 97 98 // gzip 99 string = [Preferences gzipExecutable]; 100 if (!string) 101 string = @""; 102 [_gzipTextField setStringValue:string]; 103 104 // gunzip 105 string = [Preferences gunzipExecutable]; 106 if (!string) 107 string = @""; 108 [_gunzipTextField setStringValue:string]; 109 110 // bzip2 111 string = [Preferences bzip2Executable]; 112 if (!string) 113 string = @""; 114 [_bzip2TextField setStringValue:string]; 115 116 // bunzip2 117 string = [Preferences bunzip2Executable]; 118 if (!string) 119 string = @""; 120 [_bunzip2TextField setStringValue:string]; 121 122 // unarj 123 string = [Preferences unarjExecutable]; 124 if (!string) 125 string = @""; 126 [_unarjTextField setStringValue:string]; 127 128 // unace 129 string = [Preferences unaceExecutable]; 130 if (!string) 131 string = @""; 132 [_unaceTextField setStringValue:string]; 133 134 // zoo 135 string = [Preferences zooExecutable]; 136 if (!string) 137 string = @""; 138 [_zooTextField setStringValue:string]; 139 140 // xz 141 string = [Preferences xzExecutable]; 142 if (!string) 143 string = @""; 144 [_xzTextField setStringValue:string]; 145 146 // bsd tar checkbox 147 tarFlag = [Preferences isBsdTar]; 148 [_bsdTarButton setState:tarFlag]; 149 150 // default open app text field 151 string = [[Preferences defaultOpenApp] lastPathComponent]; 152 if (!string) 153 string = @""; 154 [_defaultOpenApp setStringValue:string]; 155 156 return self; 157} 158 159- (void)awakeFromNib 160{ 161 NSClipView *cView; 162 163 NSLog(@"fix scroll"); 164 cView = [scrollView contentView]; 165 [cView scrollToPoint: NSMakePoint(0.0, NSMaxY([[scrollView documentView] frame])-NSHeight([cView bounds]))]; 166 [scrollView reflectScrolledClipView: cView]; 167} 168 169- (void)dealloc 170{ 171 [_panel release]; 172 [_archiveClass release]; 173 [super dealloc]; 174} 175 176/** 177 * runs the Preferences Panel in a modal event loop 178 */ 179- (void)showPreferencesPanel 180{ 181 [NSApp runModalForWindow:_panel]; 182 // control flow returns to the panel ... until 'ok' or 'cancel' is pressed 183 184 [_panel close]; 185} 186 187-(void)windowWillClose:(NSNotification *)aNotification 188{ 189 [NSApp stopModal]; 190} 191 192- (IBAction)okPressed:(id)sender 193{ 194 NSString *string; 195 196 NS_DURING 197 string = [_tarTextField stringValue]; 198 [Preferences setTarExecutable:string]; 199 200 string = [_unzipTextField stringValue]; 201 [Preferences setUnzipExecutable:string]; 202 203 string = [_zipTextField stringValue]; 204 [Preferences setZipExecutable:string]; 205 206 string = [_rarTextField stringValue]; 207 [Preferences setRarExecutable:string]; 208 209 string = [_lhaTextField stringValue]; 210 [Preferences setLhaExecutable:string]; 211 212 string = [_lzxTextField stringValue]; 213 [Preferences setLzxExecutable:string]; 214 215 string = [_sevenZipTextField stringValue]; 216 [Preferences setSevenZipExecutable:string]; 217 218 string = [_gzipTextField stringValue]; 219 [Preferences setGzipExecutable:string]; 220 221 string = [_gunzipTextField stringValue]; 222 [Preferences setGunzipExecutable:string]; 223 224 string = [_bzip2TextField stringValue]; 225 [Preferences setBzip2Executable:string]; 226 227 string = [_bunzip2TextField stringValue]; 228 [Preferences setBunzip2Executable:string]; 229 230 string = [_unarjTextField stringValue]; 231 [Preferences setUnarjExecutable:string]; 232 233 string = [_unaceTextField stringValue]; 234 [Preferences setUnaceExecutable:string]; 235 236 string = [_zooTextField stringValue]; 237 [Preferences setZooExecutable:string]; 238 239 string = [_xzTextField stringValue]; 240 [Preferences setXzExecutable:string]; 241 242 [Preferences setIsBsdTar:[_bsdTarButton state]]; 243 [Preferences save]; 244 245 [_panel performClose:self]; 246 NS_HANDLER 247 NSRunAlertPanel(@"Error in Preferences", [localException reason], nil, nil, nil); 248 NS_ENDHANDLER 249} 250 251- (IBAction)cancelPressed:(id)sender 252{ 253 [_panel performClose:self]; 254} 255 256- (IBAction)findExecutable:(id)sender 257{ 258 NSOpenPanel *openPanel; 259 int rc; 260 261 openPanel = [NSOpenPanel openPanel]; 262 [openPanel setTitle:@"Find executable"]; 263 [openPanel setCanChooseFiles:YES]; 264 [openPanel setCanChooseDirectories:NO]; 265 266 rc = [openPanel runModalForDirectory:@"/" file:nil types:nil]; 267 if (rc == NSOKButton) 268 { 269 NSString *path = [openPanel filename]; 270 271 NS_DURING 272 switch ([sender tag]) 273 { 274 case TAG_TAR: 275 [_tarTextField setStringValue:path]; 276 [Preferences setTarExecutable:path]; 277 break; 278 279 case TAG_UNZIP: 280 [_unzipTextField setStringValue:path]; 281 [Preferences setUnzipExecutable:path]; 282 break; 283 284 case TAG_ZIP: 285 [_zipTextField setStringValue:path]; 286 [Preferences setZipExecutable:path]; 287 break; 288 289 case TAG_RAR: 290 [_rarTextField setStringValue:path]; 291 [Preferences setRarExecutable:path]; 292 break; 293 294 case TAG_LHA: 295 [_lhaTextField setStringValue:path]; 296 [Preferences setLhaExecutable:path]; 297 break; 298 299 case TAG_LZX: 300 [_lzxTextField setStringValue:path]; 301 [Preferences setLzxExecutable:path]; 302 break; 303 304 case TAG_SEVEN_ZIP: 305 [_sevenZipTextField setStringValue:path]; 306 [Preferences setSevenZipExecutable:path]; 307 break; 308 309 case TAG_GZIP: 310 [_gzipTextField setStringValue:path]; 311 [Preferences setGzipExecutable:path]; 312 break; 313 314 case TAG_GUNZIP: 315 [_gunzipTextField setStringValue:path]; 316 [Preferences setGunzipExecutable:path]; 317 break; 318 319 case TAG_BZIP2: 320 [_bzip2TextField setStringValue:path]; 321 [Preferences setBzip2Executable:path]; 322 break; 323 324 case TAG_BUNZIP2: 325 [_bunzip2TextField setStringValue:path]; 326 [Preferences setBunzip2Executable:path]; 327 break; 328 329 case TAG_UNARJ: 330 [_unarjTextField setStringValue:path]; 331 [Preferences setUnarjExecutable:path]; 332 break; 333 334 case TAG_UNACE: 335 [_unaceTextField setStringValue:path]; 336 [Preferences setUnaceExecutable:path]; 337 break; 338 339 case TAG_ZOO: 340 [_zooTextField setStringValue:path]; 341 [Preferences setZooExecutable:path]; 342 break; 343 344 case TAG_XZ: 345 [_xzTextField setStringValue:path]; 346 [Preferences setXzExecutable:path]; 347 break; 348 349 default: 350 [NSException raise:NSInvalidArgumentException 351 format:@"invalid tag of find button"]; 352 } 353 NS_HANDLER 354 NSRunAlertPanel(@"Error in Preferences", [localException reason], nil, nil, nil); 355 NS_ENDHANDLER 356 } 357} 358 359- (IBAction)findDefaultOpenApp:(id)sender 360{ 361 NSOpenPanel *openPanel; 362 NSString *gnustepSystemApps; 363 int rc; 364 365 gnustepSystemApps = [NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, 366 NSSystemDomainMask, YES) objectAtIndex:0]; 367 368 openPanel = [NSOpenPanel openPanel]; 369 [openPanel setTitle:@"Find default open app"]; 370 [openPanel setTreatsFilePackagesAsDirectories:YES]; 371 [openPanel setCanChooseFiles:NO]; 372 [openPanel setCanChooseDirectories:YES]; 373 374 rc = [openPanel runModalForDirectory:gnustepSystemApps file:nil types:nil]; 375 if (rc == NSOKButton) 376 { 377 [_defaultOpenApp setStringValue:[[openPanel filename] lastPathComponent]]; 378 [Preferences setDefaultOpenApp:[openPanel filename]]; 379 } 380} 381 382@end 383