/**
GSThemeInspector
Utility fgor inspecting themes
Copyright (C) 2008 Free Software Foundation, Inc.
Author: Richard Frith-Macdonald
Date: 2007,2008
This file is part of the GNU Objective C User interface library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; see the file COPYING.LIB.
If not, see or write to the
Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#import "AppKit/NSImageView.h"
#import "AppKit/NSScrollView.h"
#import "AppKit/NSTextField.h"
#import "AppKit/NSTextContainer.h"
#import "AppKit/NSTextView.h"
#import "AppKit/NSWindow.h"
#import "GSThemePrivate.h"
#import "GSGuiPrivate.h"
static NSTextField *
new_label (NSString *value)
{
NSTextField *t;
t = AUTORELEASE([NSTextField new]);
[t setStringValue: value];
[t setDrawsBackground: NO];
[t setEditable: NO];
[t setSelectable: NO];
[t setBezeled: NO];
[t setBordered: NO];
[t setAlignment: NSLeftTextAlignment];
return t;
}
/* Implemented in GSInfoPanel.m
* An object that displays a list of left-aligned strings (used for the authors)
*/
@interface _GSLabelListView: NSView
{
}
/* After initialization, its size is the size it needs, just move it
where we want it to show */
- (id) initWithStringArray: (NSArray *)array
font: (NSFont *)font;
@end
@implementation GSThemeInspector
static GSThemeInspector *sharedInspector = nil;
+ (GSThemeInspector*) sharedThemeInspector
{
if (sharedInspector == nil)
{
sharedInspector = [self new];
}
return sharedInspector;
}
- (id) init
{
NSRect frame;
frame.size = NSMakeSize(272,388);
frame.origin = NSZeroPoint;
self = [super initWithContentRect: frame
styleMask: (NSTitledWindowMask | NSClosableWindowMask
| NSMiniaturizableWindowMask | NSResizableWindowMask)
backing: NSBackingStoreBuffered
defer: NO];
[self setReleasedWhenClosed: NO];
return self;
}
- (void) update: (id)sender
{
GSTheme *theme = [GSTheme theme];
NSString *version;
NSString *details;
NSArray *authors;
NSView *content = [self contentView];
NSRect cFrame = [content frame];
NSView *view;
NSImageView *iv;
NSTextField *tf;
NSRect nameFrame;
NSRect frame;
int width;
int fsize = 32;
while ((view = [[content subviews] lastObject]) != nil)
{
[view removeFromSuperview];
}
frame = NSMakeRect(cFrame.size.width - 58, cFrame.size.height - 58, 48, 48);
iv = [[NSImageView alloc] initWithFrame: frame];
[iv setImage: [[GSTheme theme] icon]];
[content addSubview: iv];
RELEASE(iv);
width = cFrame.size.width - 58;
tf = new_label([theme name]);
do
{
[tf setFont: [NSFont boldSystemFontOfSize: fsize]];
fsize -= 2;
[tf sizeToFit];
nameFrame = [tf frame];
}
while (nameFrame.size.width > width && fsize > 8);
nameFrame.origin.x = (width - nameFrame.size.width) / 2;
nameFrame.origin.y = cFrame.size.height - nameFrame.size.height - 25;
[tf setFrame: nameFrame];
[content addSubview: tf];
version = [[theme infoDictionary] objectForKey: @"GSThemeVersion"];
if ([version length] > 0)
{
version = [NSString stringWithFormat: _(@"Version: %@"), version];
tf = new_label(version);
[tf setFont: [NSFont systemFontOfSize: 12]];
[tf sizeToFit];
frame = [tf frame];
frame.origin.x = (cFrame.size.width - frame.size.width) / 2;
frame.origin.y = nameFrame.origin.y - frame.size.height - 25;
[tf setFrame: frame];
[content addSubview: tf];
nameFrame = [tf frame];
}
authors = [[theme infoDictionary] objectForKey: @"GSThemeAuthors"];
if ([authors count] > 0)
{
view = [[_GSLabelListView alloc] initWithStringArray: authors
font: [NSFont systemFontOfSize: 14]];
frame = [view frame];
frame.origin.x = (cFrame.size.width - frame.size.width) / 2;
frame.origin.y = nameFrame.origin.y - frame.size.height - 25;
[view setFrame: frame];
[content addSubview: view];
RELEASE(view);
}
details = [[theme infoDictionary] objectForKey: @"GSThemeDetails"];
if ([details length] > 0)
{
NSScrollView *s;
NSTextView *v;
NSRect r;
r = NSMakeRect(10, 10, cFrame.size.width - 20, frame.origin.y - 20);
s = [[NSScrollView alloc] initWithFrame: r];
[s setHasHorizontalScroller: NO];
[s setHasVerticalScroller: YES];
[s setBorderType: NSBezelBorder];
[s setAutoresizingMask: (NSViewWidthSizable | NSViewHeightSizable)];
[content addSubview: s];
RELEASE(s);
r = [[s documentView] frame];
v = [[NSTextView alloc] initWithFrame: r];
[v setBackgroundColor: [self backgroundColor]];
[v setHorizontallyResizable: YES];
[v setVerticallyResizable: YES];
[v setEditable: NO];
[v setRichText: YES];
[v setMinSize: NSMakeSize (0, 0)];
[v setMaxSize: NSMakeSize (1E7, 1E7)];
[v setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable];
[[v textContainer] setContainerSize:
NSMakeSize (r.size.width, 1e7)];
[[v textContainer] setWidthTracksTextView: YES];
[v setString: details];
[s setDocumentView: v];
RELEASE(v);
}
[content setNeedsDisplay: YES];
}
@end