mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-04-22 18:11:06 +00:00
Added NSInterfaceStyle stuff
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@4139 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
38dc6c52f5
commit
f508c6559f
4 changed files with 203 additions and 4 deletions
|
@ -6,6 +6,9 @@ Mon Apr 26 7:05:00 1999 Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
|||
* Headers/AppKit/NSGraphicsContext.h: place in #ifndef STRICT_OPENSTEP
|
||||
* Headers/AppKit/NSInterfaceStyle.h: new file.
|
||||
* Headers/AppKit/NSResponder.h: new interface_style ivar.
|
||||
* Headers/AppKit/AppKit.h: Added NSInterfaceStyle.
|
||||
* Source/NSInterfaceStyle.m: new file - implemented class.
|
||||
* Source/GNUmakefile: Added NSInterfaceStyle stuff.
|
||||
|
||||
Fri Apr 23 16:30:00 1999 Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
||||
|
||||
|
|
|
@ -33,10 +33,10 @@
|
|||
@class NSString;
|
||||
|
||||
typedef enum {
|
||||
NSNextStepInterfaceStyle = 0,
|
||||
NSMacintoshInterfaceStyle = 1,
|
||||
NSWindows95InterfaceStyle = 2,
|
||||
NSNoInterfaceStyle = -1
|
||||
NSNoInterfaceStyle = 0,
|
||||
NSNextStepInterfaceStyle = 1,
|
||||
NSMacintoshInterfaceStyle = 2,
|
||||
NSWindows95InterfaceStyle = 3
|
||||
} NSInterfaceStyle;
|
||||
|
||||
extern NSString *NSInterfaceStyleDefault;
|
||||
|
|
|
@ -75,6 +75,7 @@ NSHelpPanel.m \
|
|||
NSImage.m \
|
||||
NSImageRep.m \
|
||||
NSImageView.m \
|
||||
NSInterfaceStyle.m \
|
||||
NSMatrix.m \
|
||||
NSMenu.m \
|
||||
NSMenuItem.m \
|
||||
|
@ -160,6 +161,7 @@ AppKit/NSHelpPanel.h \
|
|||
AppKit/NSImage.h \
|
||||
AppKit/NSImageRep.h \
|
||||
AppKit/NSImageView.h \
|
||||
AppKit/NSInterfaceStyle.h \
|
||||
AppKit/NSLayoutManager.h \
|
||||
AppKit/NSMatrix.h \
|
||||
AppKit/NSMenu.h \
|
||||
|
|
194
Source/NSInterfaceStyle.m
Normal file
194
Source/NSInterfaceStyle.m
Normal file
|
@ -0,0 +1,194 @@
|
|||
/*
|
||||
NSInterfaceStyle.m
|
||||
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
|
||||
Author: Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
||||
Date: 1999
|
||||
|
||||
This file is part of the GNUstep GUI Library.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; see the file COPYING.LIB.
|
||||
If not, write to the Free Software Foundation,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <gnustep/gui/config.h>
|
||||
#include <Foundation/NSString.h>
|
||||
#include <Foundation/NSDictionary.h>
|
||||
#include <Foundation/NSException.h>
|
||||
#include <Foundation/NSNotification.h>
|
||||
#include <Foundation/NSUserDefaults.h>
|
||||
#include <Foundation/NSMapTable.h>
|
||||
|
||||
#include <AppKit/NSResponder.h>
|
||||
#include <AppKit/NSInterfaceStyle.h>
|
||||
|
||||
NSString *NSInterfaceStyleDefault = @"NSInterfaceStyleDefault";
|
||||
|
||||
static NSMapTable *styleMap = 0;
|
||||
static NSInterfaceStyle defStyle;
|
||||
|
||||
static NSInterfaceStyle
|
||||
styleFromString(NSString* str)
|
||||
{
|
||||
if ([str isEqualToString: @"NSNextStepInterfaceStyle"])
|
||||
return NSNextStepInterfaceStyle;
|
||||
if ([str isEqualToString: @"NSMacintoshInterfaceStyle"])
|
||||
return NSMacintoshInterfaceStyle;
|
||||
if ([str isEqualToString: @"NSWindows95InterfaceStyle"])
|
||||
return NSWindows95InterfaceStyle;
|
||||
return NSNoInterfaceStyle;
|
||||
}
|
||||
|
||||
@interface GSInterfaceStyle : NSObject
|
||||
+ (void) defaultsDidChange: (NSNotification*)notification;
|
||||
@end
|
||||
|
||||
|
||||
|
||||
typedef struct {
|
||||
@defs(NSResponder)
|
||||
} *accessToResponder;
|
||||
|
||||
extern NSInterfaceStyle
|
||||
NSInterfaceStyleForKey(NSString *key, NSResponder *responder)
|
||||
{
|
||||
NSInterfaceStyle style;
|
||||
|
||||
/*
|
||||
* If the specified responder has a style set, return it.
|
||||
*/
|
||||
if (responder)
|
||||
{
|
||||
style = (NSInterfaceStyle)((accessToResponder)responder)->interface_style;
|
||||
if (style != NSNoInterfaceStyle)
|
||||
{
|
||||
return style;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If there is no style map, the defaults/cache management class must be
|
||||
* initialised.
|
||||
*/
|
||||
if (styleMap == 0)
|
||||
[GSInterfaceStyle class];
|
||||
|
||||
/*
|
||||
* If there is a style for the given defaults key, return it - after
|
||||
* caching it in a map table if necessary.
|
||||
*/
|
||||
if (key)
|
||||
{
|
||||
/*
|
||||
* First try the cache - then, if no style is found, use the
|
||||
* defaults system and add the results into the cache.
|
||||
*/
|
||||
style = (NSInterfaceStyle)NSMapGet(styleMap, key);
|
||||
if (style == NSNoInterfaceStyle)
|
||||
{
|
||||
NSUserDefaults *defs;
|
||||
NSString *def;
|
||||
|
||||
defs = [NSUserDefaults standardUserDefaults];
|
||||
def = [defs stringForKey: key];
|
||||
if (def == nil
|
||||
|| (style = styleFromString(def)) == NSNoInterfaceStyle)
|
||||
{
|
||||
style = NSNextStepInterfaceStyle;
|
||||
}
|
||||
NSMapInsert(styleMap, (void*)key, (void*)style);
|
||||
}
|
||||
return style;
|
||||
}
|
||||
|
||||
/*
|
||||
* No responder and no key - return the default style.
|
||||
*/
|
||||
return defStyle;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* The GSInterfaceStyle class is used solely to maintain our map of
|
||||
* know interface styles by updating when user defaults change.
|
||||
*/
|
||||
@implementation GSInterfaceStyle
|
||||
|
||||
+ (void) initialize
|
||||
{
|
||||
if (self == [GSInterfaceStyle class])
|
||||
{
|
||||
styleMap = NSCreateMapTable(NSObjectMapKeyCallBacks,
|
||||
NSIntMapValueCallBacks, 8);
|
||||
|
||||
[NSUserDefaults standardUserDefaults];
|
||||
[self defaultsDidChange: nil];
|
||||
[NSNotificationCenter addObserver: self
|
||||
selector: @selector(defaultsDidChange:)
|
||||
name: NSUserDefaultsDidChangeNotification
|
||||
object: nil];
|
||||
}
|
||||
}
|
||||
|
||||
+ (void) defaultsDidChange: (NSNotification*)notification
|
||||
{
|
||||
NSUserDefaults *defs;
|
||||
NSMapEnumerator enumerator;
|
||||
NSString *key;
|
||||
NSInterfaceStyle val;
|
||||
|
||||
defs = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
/*
|
||||
* Determine the default interface style for the application.
|
||||
*/
|
||||
key = [defs stringForKey: NSInterfaceStyleDefault];
|
||||
if (key == nil || (defStyle = styleFromString(key)) == NSNoInterfaceStyle)
|
||||
defStyle = NSNextStepInterfaceStyle;
|
||||
|
||||
/*
|
||||
* Now check the interface styles for all the keys in use and adjust our
|
||||
* map table for any changes.
|
||||
*/
|
||||
enumerator = NSEnumerateMapTable(styleMap);
|
||||
while (NSNextMapEnumeratorPair(&enumerator, (void**)&key, (void**)&val))
|
||||
{
|
||||
NSInterfaceStyle newStyle;
|
||||
NSString *def = [defs stringForKey: key];
|
||||
|
||||
if (def == nil)
|
||||
{
|
||||
newStyle = defStyle;
|
||||
}
|
||||
else
|
||||
{
|
||||
newStyle = styleFromString(def);
|
||||
if (newStyle == NSNoInterfaceStyle)
|
||||
{
|
||||
newStyle = defStyle;
|
||||
}
|
||||
}
|
||||
|
||||
if (newStyle != val)
|
||||
{
|
||||
NSMapInsert(styleMap, (void*)key, (void*)newStyle);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
Loading…
Reference in a new issue