Logo Search packages:      
Sourcecode: etoile version File versions  Download package

Camaelon.m

#include "Camaelon.h"

@implementation Camaelon

static Camaelon* theme;

+ (Camaelon*) sharedTheme
{
      if (theme == nil)
      {
            theme = [[self alloc] init];
      }
      return theme;
}

- (NSString *) themePath 
{ 
      if (themePath == nil)
      {
            NSArray* paths = NSSearchPathForDirectoriesInDomains(NSAllLibrariesDirectory, 
                  NSAllDomainsMask & ~NSNetworkDomainMask, YES);   
            NSString *path;
            NSEnumerator *e = [paths objectEnumerator];
            NSFileManager *fm = [NSFileManager defaultManager];
            BOOL themeFound = NO;
            
            while ((path = [e nextObject]) != nil)
            {
                  BOOL isDir;
                  
                  path = [path stringByAppendingPathComponent: @"Themes"];
                  path = [path stringByAppendingPathComponent: themeName];
                  path = [path stringByAppendingPathExtension: @"theme"];     
                  if ([fm fileExistsAtPath: path isDirectory:     &isDir])
                  {
                        themeFound = YES;
                        break;
                  }
            }
            
            if (themeFound == NO)
            {
               NSLog (@"No theme %@ found in search paths: %@", themeName, paths);
               
               // FIXME: Implement fall back on NeXT default theme. We probably need to 
               // hack a bit with the runtime in order to reactivate overriden methods (by
               // Camaelon categories).
               
               return nil;
            }
            
            ASSIGN (themePath, path);     
            NSLog (@"Found theme with path: %@", themePath);            
      }
      
      return themePath;
}

+ (void) initialize
{
    [CLImage setNSImageClass : [NSImage class]];
    [CLImage poseAsClass: [NSImage class]];
    [NSColor setSystemColorList];
}

- (id) init
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSDictionary* dict = [defaults persistentDomainForName: @"Camaelon"];
    
    NSLog(@"Camaelon Theme Engine v2.0pre 20/11/05 - nicolas@roard.com\n");
    
    self = [super init];
    
    //[CLImage setNSImageClass : [NSImage class]];
    //[CLImage poseAsClass: [NSImage class]];
    
    //NSLog (@"Camaelon dictionary: %@", dict);
   
    NSNumber* themeActive = [dict objectForKey: @"Activated"];
    if ((themeActive == nil) || ([themeActive boolValue] == YES))
    {   
      /* Preventive check: Remove possible incorrect path extension set by user in 
               NSDefaults. */
        ASSIGN (themeName, [[dict objectForKey: @"Theme"] stringByDeletingPathExtension]);
      NSLog (@"Theme named %@ is set in defaults", themeName);
      themePath = [self themePath];
      if (themePath == nil)
      {
            RELEASE(self);
            return nil;
      }
            
      theme = self;
    }
    else
    {
      NSLog (@"Camaelon is not activated");
      return nil;
    }
    
//    [GSDrawFunctions setTheme: [CamaelonDrawFunctions new]];
//    [NSApplication setTheme: [GSDrawFunctions new]];
    
    return self;
}

@end

Generated by  Doxygen 1.6.0   Back to index