/*
* STPreferences.m
*
* SafariTabs
*
* Copyright (c) 2007 Stuart Connolly. All rights reserved.
*
* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#import "STPreferences.h"
#import "STSafariPlugin.h"
#import "STConstants.h"
@implementation STPreferences
////////////////////////////////////////////// *** initialize
+ (void)initialize
{
[defaults setObject
:[NSNumber numberWithBool
:YES] forKey
:STEnableCloseWindowWarning
];
[defaults setObject
:[NSNumber numberWithBool
:YES] forKey
:STEnableQuitSafariWarning
];
[defaults setObject
:[NSNumber numberWithBool
:YES] forKey
:STAddCloseNoWarningMenuItem
];
[defaults setObject
:[NSNumber numberWithBool
:YES] forKey
:STAddQuitNoWarningMenuItem
];
[defaults setObject
:[NSNumber numberWithInt
:0] forKey
:STNewTabsLoadOption
];
}
////////////////////////////////////////////// *** preloadImage
{
NSString *imagePath
= [[NSBundle bundleWithIdentifier
:@"com.connolly.SafariTabs"] pathForImageResource
:_name
];
if (!imagePath) {
NSLog(@"SafariTabs: imagePath for %@ is nil", _name);
NSRunAlertPanel
(@"ImagePath nil",
[NSString stringWithFormat
:@"%@", _name
],
@"OK",
NULL,
NULL);
return nil;
}
image
= [[NSImage alloc
] initByReferencingFile
:imagePath
];
if (!image) {
NSLog(@"SafariTabs: image for %@ is nil", _name);
return nil;
}
[image setName:_name];
return image;
}
////////////////////////////////////////////// *** awakeFromNib
- (void)awakeFromNib
{
[authorTextField setStringValue
:[NSString stringWithFormat
:[authorTextField stringValue
],
[info objectForKey
:@"CFBundleVersion"]]];
[enableCloseWindowWarning setState:[defaults boolForKey:STEnableCloseWindowWarning]];
[enableQuitSafariWarning setState:[defaults boolForKey:STEnableQuitSafariWarning]];
[addCloseNoWarningCheckbox setState:[defaults boolForKey:STAddCloseNoWarningMenuItem]];
[addQuitNoWarningCheckbox setState:[defaults boolForKey:STAddQuitNoWarningMenuItem]];
[newTabsLoadOptionPopUpButtonx selectItemAtIndex:[defaults integerForKey:STNewTabsLoadOption]];
}
////////////////////////////////////////////// *** imageForPreferenceNamed
{
if (!image) {
image = [STPreferences preloadImage:_name];
}
return image;
}
////////////////////////////////////////////// *** preferencesNibName
{
return @"STPreferences";
}
////////////////////////////////////////////// *** didChange
- (void)didChange
{
[super didChange];
}
////////////////////////////////////////////// *** viewForPreferenceNamed
{
if (![[STSafariPlugin sharedInstance] isLoaded]) {
return nil;
}
return [super viewForPreferenceNamed:name];
}
////////////////////////////////////////////// *** hasChangesPending
- (BOOL)hasChangesPending
{
return [super hasChangesPending];
}
////////////////////////////////////////////// *** moduleWillBeRemoved
- (void)moduleWillBeRemoved
{
[super moduleWillBeRemoved];
}
////////////////////////////////////////////// *** moduleWasInstalled
- (void)moduleWasInstalled
{
[super moduleWasInstalled];
if (![[STSafariPlugin sharedInstance] isLoaded]) {
NSLog(@"SafariTabs: Failed To Load");
}
}
////////////////////////////////////////////// *** changeEnableCloseWindowWarning
- (IBAction)changeEnableCloseWindowWarning:(id)sender
{
[[NSUserDefaults standardUserDefaults
] setBool
:[sender state
] forKey
:STEnableCloseWindowWarning
];
if (([sender state] == 0) && ([addCloseNoWarningCheckbox state] == 1)) {
[addCloseNoWarningCheckbox setEnabled:[sender state]];
[addCloseNoWarningCheckbox setState:[sender state]];
[self addRemoveCloseMenuItem:[sender state]];
}
[addCloseNoWarningCheckbox setEnabled:[sender state]];
}
////////////////////////////////////////////// *** changeEnableQuitSafariWarning
- (IBAction)changeEnableQuitSafariWarning:(id)sender
{
[[NSUserDefaults standardUserDefaults
] setBool
:[sender state
] forKey
:STEnableQuitSafariWarning
];
if (([sender state] == 0) && ([addQuitNoWarningCheckbox state] == 1)) {
[addQuitNoWarningCheckbox setEnabled:[sender state]];
[addQuitNoWarningCheckbox setState:[sender state]];
[self addRemoveQuitMenuItem:[sender state]];
}
[addQuitNoWarningCheckbox setEnabled:[sender state]];
}
////////////////////////////////////////////// *** changeAddCloseNoWarningMenuItem
- (IBAction)changeAddCloseNoWarningMenuItem:(id)sender
{
[[NSUserDefaults standardUserDefaults
] setBool
:[sender state
] forKey
:STAddCloseNoWarningMenuItem
];
[self addRemoveCloseMenuItem:[sender state]];
}
////////////////////////////////////////////// *** changeAddQuitNoWarningMenuItem
- (IBAction)changeAddQuitNoWarningMenuItem:(id)sender
{
[[NSUserDefaults standardUserDefaults
] setBool
:[sender state
] forKey
:STAddQuitNoWarningMenuItem
];
[self addRemoveQuitMenuItem:[sender state]];
}
////////////////////////////////////////////// *** changeNewTabsLoadOption
- (IBAction)changeNewTabsLoadOption:(id)sender
{
[[NSUserDefaults standardUserDefaults
] setInteger
:[sender indexOfSelectedItem
] forKey
:STNewTabsLoadOption
];
}
////////////////////////////////////////////// *** closeWindowWithoutWarning
- (IBAction)closeWindowWithoutWarning:(id)sender
{
}
////////////////////////////////////////////// *** quitWithoutWarning
- (IBAction)quitWithoutWarning:(id)sender
{
[[STSafariPlugin sharedInstance] setTerminateWithoutWarning:YES];
[[STSafariPlugin sharedInstance] quitWithoutWarning:self];
}
////////////////////////////////////////////// *** addRemoveCloseMenuItem
- (void)addRemoveCloseMenuItem:(BOOL)flag
{
NSMenu *fileMenu
= [[safariMenuBar itemAtIndex
:1] submenu
];
NSEnumerator *itemEnumerator
= [[fileMenu itemArray
] objectEnumerator
];
// Add/remove the menu item depending on the flag
while (item = [itemEnumerator nextObject]) {
if (flag) {
if ([item action] == @selector(performClose:)) {
int index = [fileMenu indexOfItem:item];
[fileMenu insertItem:[closeMenuItem copy] atIndex:(index + 1)];
break;
}
}
else {
if ([item action] == @selector(closeWindowWithoutWarning:)) {
[fileMenu removeItemAtIndex:[fileMenu indexOfItem:item]];
break;
}
}
}
}
////////////////////////////////////////////// *** addRemoveQuitMenuItem
- (void)addRemoveQuitMenuItem:(BOOL)flag
{
NSMenu *safariMenu
= [[safariMenuBar itemAtIndex
:0] submenu
];
NSEnumerator *itemEnumerator
= [[safariMenu itemArray
] objectEnumerator
];
// Add/remove the menu item depending on the flag
while (item = [itemEnumerator nextObject]) {
if (flag) {
[safariMenu addItem:[quitMenuItem copy]];
break;
}
else {
if ([item action] == @selector(quitWithoutWarning:)) {
[safariMenu removeItemAtIndex:[safariMenu indexOfItem:item]];
break;
}
}
}
}
@end