filename | src/cocoaui/cocoa_prefs.m |
changeset | 964:f2f3c7612d06 |
next | 1034:7044e01148f0 |
author | nkeynes |
date | Thu Jan 15 04:15:11 2009 +0000 (15 years ago) |
permissions | -rw-r--r-- |
last change | Add support for the Intel ICC compiler (C only, icc doesn't support Obj-C) - Rename Obj-C source to .m - Separate paths.c into paths_unix.c and paths_osx.m - Add configuration detection of ICC, along with specific opt flags |
file | annotate | diff | log | raw |
nkeynes@964 | 1 | /** |
nkeynes@964 | 2 | * $Id$ |
nkeynes@964 | 3 | * |
nkeynes@964 | 4 | * Construct and manage the preferences panel under cocoa. |
nkeynes@964 | 5 | * |
nkeynes@964 | 6 | * Copyright (c) 2008 Nathan Keynes. |
nkeynes@964 | 7 | * |
nkeynes@964 | 8 | * This program is free software; you can redistribute it and/or modify |
nkeynes@964 | 9 | * it under the terms of the GNU General Public License as published by |
nkeynes@964 | 10 | * the Free Software Foundation; either version 2 of the License, or |
nkeynes@964 | 11 | * (at your option) any later version. |
nkeynes@964 | 12 | * |
nkeynes@964 | 13 | * This program is distributed in the hope that it will be useful, |
nkeynes@964 | 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
nkeynes@964 | 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
nkeynes@964 | 16 | * GNU General Public License for more details. |
nkeynes@964 | 17 | */ |
nkeynes@964 | 18 | |
nkeynes@964 | 19 | #include "cocoaui/cocoaui.h" |
nkeynes@964 | 20 | #include "lxdream.h" |
nkeynes@964 | 21 | #include "config.h" |
nkeynes@964 | 22 | |
nkeynes@964 | 23 | static LxdreamPrefsPanel *prefs_panel = NULL; |
nkeynes@964 | 24 | |
nkeynes@964 | 25 | @implementation LxdreamPrefsPane |
nkeynes@964 | 26 | - (int)contentHeight |
nkeynes@964 | 27 | { |
nkeynes@964 | 28 | return [self frame].size.height - headerHeight; |
nkeynes@964 | 29 | } |
nkeynes@964 | 30 | |
nkeynes@964 | 31 | - (id)initWithFrame: (NSRect)frameRect title:(NSString *)title |
nkeynes@964 | 32 | { |
nkeynes@964 | 33 | if( [super initWithFrame: frameRect ] == nil ) { |
nkeynes@964 | 34 | return nil; |
nkeynes@964 | 35 | } else { |
nkeynes@964 | 36 | int height = frameRect.size.height - TEXT_GAP; |
nkeynes@964 | 37 | |
nkeynes@964 | 38 | NSFont *titleFont = [NSFont fontWithName: @"Helvetica-Bold" size: 16.0]; |
nkeynes@964 | 39 | NSRect fontRect = [titleFont boundingRectForFont]; |
nkeynes@964 | 40 | int titleHeight = fontRect.size.height + [titleFont descender]; |
nkeynes@964 | 41 | NSTextField *label = cocoa_gui_add_label(self, title, |
nkeynes@964 | 42 | NSMakeRect( TEXT_GAP, height-titleHeight, |
nkeynes@964 | 43 | frameRect.size.width - (TEXT_GAP*2), titleHeight )); |
nkeynes@964 | 44 | [label setFont: titleFont]; |
nkeynes@964 | 45 | height -= (titleHeight + TEXT_GAP); |
nkeynes@964 | 46 | |
nkeynes@964 | 47 | NSBox *rule = [[NSBox alloc] initWithFrame: NSMakeRect(1, height, frameRect.size.width-2, 1)]; |
nkeynes@964 | 48 | [rule setAutoresizingMask: (NSViewMinYMargin|NSViewWidthSizable)]; |
nkeynes@964 | 49 | [rule setBoxType: NSBoxSeparator]; |
nkeynes@964 | 50 | [self addSubview: rule]; |
nkeynes@964 | 51 | height -= TEXT_GAP; |
nkeynes@964 | 52 | |
nkeynes@964 | 53 | headerHeight = frameRect.size.height - height; |
nkeynes@964 | 54 | return self; |
nkeynes@964 | 55 | } |
nkeynes@964 | 56 | } |
nkeynes@964 | 57 | @end |
nkeynes@964 | 58 | |
nkeynes@964 | 59 | /**************************** Main preferences window ************************/ |
nkeynes@964 | 60 | |
nkeynes@964 | 61 | @interface LxdreamPrefsPanel (Private) |
nkeynes@964 | 62 | - (void) initToolbar; |
nkeynes@964 | 63 | - (NSToolbarItem *) createToolbarItem: (NSString *)id label: (NSString *) label |
nkeynes@964 | 64 | tooltip: (NSString *)tooltip icon: (NSString *)icon action: (SEL) action; |
nkeynes@964 | 65 | @end |
nkeynes@964 | 66 | |
nkeynes@964 | 67 | @implementation LxdreamPrefsPanel |
nkeynes@964 | 68 | |
nkeynes@964 | 69 | - (NSView *)createControlsPane |
nkeynes@964 | 70 | { |
nkeynes@964 | 71 | NSView *pane = [[NSView alloc] initWithFrame: NSMakeRect(0,0,640,400)]; |
nkeynes@964 | 72 | return pane; |
nkeynes@964 | 73 | } |
nkeynes@964 | 74 | |
nkeynes@964 | 75 | - (id)initWithContentRect:(NSRect)contentRect |
nkeynes@964 | 76 | { |
nkeynes@964 | 77 | if( [super initWithContentRect: contentRect |
nkeynes@964 | 78 | styleMask: ( NSTitledWindowMask | NSClosableWindowMask | |
nkeynes@964 | 79 | NSMiniaturizableWindowMask | NSResizableWindowMask | |
nkeynes@964 | 80 | NSUnifiedTitleAndToolbarWindowMask ) |
nkeynes@964 | 81 | backing: NSBackingStoreBuffered defer: NO ] == nil ) { |
nkeynes@964 | 82 | return nil; |
nkeynes@964 | 83 | } else { |
nkeynes@964 | 84 | [self setTitle: NS_("Preferences")]; |
nkeynes@964 | 85 | [self setDelegate: self]; |
nkeynes@964 | 86 | [self setMinSize: NSMakeSize(400,300)]; |
nkeynes@964 | 87 | [self initToolbar]; |
nkeynes@964 | 88 | path_pane = cocoa_gui_create_prefs_path_pane(); |
nkeynes@964 | 89 | ctrl_pane = cocoa_gui_create_prefs_controller_pane(); |
nkeynes@964 | 90 | binding_editor = nil; |
nkeynes@964 | 91 | [self setContentView: path_pane]; |
nkeynes@964 | 92 | return self; |
nkeynes@964 | 93 | } |
nkeynes@964 | 94 | } |
nkeynes@964 | 95 | - (void)dealloc |
nkeynes@964 | 96 | { |
nkeynes@964 | 97 | if( binding_editor != nil ) { |
nkeynes@964 | 98 | [binding_editor release]; |
nkeynes@964 | 99 | binding_editor = nil; |
nkeynes@964 | 100 | } |
nkeynes@964 | 101 | [super dealloc]; |
nkeynes@964 | 102 | } |
nkeynes@964 | 103 | - (void)windowWillClose: (NSNotification *)notice |
nkeynes@964 | 104 | { |
nkeynes@964 | 105 | prefs_panel = NULL; |
nkeynes@964 | 106 | } |
nkeynes@964 | 107 | - (id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)view |
nkeynes@964 | 108 | { |
nkeynes@964 | 109 | if( [view isKindOfClass: [KeyBindingField class]] ) { |
nkeynes@964 | 110 | if( binding_editor == nil ) { |
nkeynes@964 | 111 | binding_editor = [[[KeyBindingEditor alloc] init] retain]; |
nkeynes@964 | 112 | } |
nkeynes@964 | 113 | return binding_editor; |
nkeynes@964 | 114 | } |
nkeynes@964 | 115 | return nil; |
nkeynes@964 | 116 | } |
nkeynes@964 | 117 | - (void) initToolbar |
nkeynes@964 | 118 | { |
nkeynes@964 | 119 | NSToolbar *toolbar = [[NSToolbar alloc] initWithIdentifier: @"LxdreamPrefsToolbar"]; |
nkeynes@964 | 120 | |
nkeynes@964 | 121 | NSToolbarItem *paths = [self createToolbarItem: @"Paths" label: @"Paths" |
nkeynes@964 | 122 | tooltip: @"Configure system paths" icon: @"tb-paths" |
nkeynes@964 | 123 | action: @selector(paths_action:)]; |
nkeynes@964 | 124 | NSToolbarItem *ctrls = [self createToolbarItem: @"Controllers" label: @"Controllers" |
nkeynes@964 | 125 | tooltip: @"Configure controllers" icon: @"tb-ctrls" |
nkeynes@964 | 126 | action: @selector(controllers_action:)]; |
nkeynes@964 | 127 | toolbar_ids = [NSArray arrayWithObjects: @"Paths", @"Controllers", nil ]; |
nkeynes@964 | 128 | toolbar_defaults = [NSArray arrayWithObjects: @"Paths", @"Controllers", nil ]; |
nkeynes@964 | 129 | NSArray *values = [NSArray arrayWithObjects: paths, ctrls, nil ]; |
nkeynes@964 | 130 | toolbar_items = [NSDictionary dictionaryWithObjects: values forKeys: toolbar_ids]; |
nkeynes@964 | 131 | |
nkeynes@964 | 132 | [toolbar setDelegate: self]; |
nkeynes@964 | 133 | [toolbar setDisplayMode: NSToolbarDisplayModeIconOnly]; |
nkeynes@964 | 134 | [toolbar setSizeMode: NSToolbarSizeModeSmall]; |
nkeynes@964 | 135 | [toolbar setSelectedItemIdentifier: @"Paths"]; |
nkeynes@964 | 136 | [self setToolbar: toolbar]; |
nkeynes@964 | 137 | } |
nkeynes@964 | 138 | |
nkeynes@964 | 139 | - (void)paths_action: (id)sender |
nkeynes@964 | 140 | { |
nkeynes@964 | 141 | [self setContentView: path_pane]; |
nkeynes@964 | 142 | } |
nkeynes@964 | 143 | - (void)controllers_action: (id)sender |
nkeynes@964 | 144 | { |
nkeynes@964 | 145 | [self setContentView: ctrl_pane]; |
nkeynes@964 | 146 | } |
nkeynes@964 | 147 | |
nkeynes@964 | 148 | /***************************** Toolbar methods ***************************/ |
nkeynes@964 | 149 | - (NSToolbarItem *) createToolbarItem: (NSString *)id label: (NSString *) label |
nkeynes@964 | 150 | tooltip: (NSString *)tooltip icon: (NSString *)icon action: (SEL) action |
nkeynes@964 | 151 | { |
nkeynes@964 | 152 | NSToolbarItem *item = [[NSToolbarItem alloc] initWithItemIdentifier: id]; |
nkeynes@964 | 153 | [item setLabel: label]; |
nkeynes@964 | 154 | [item setToolTip: tooltip]; |
nkeynes@964 | 155 | [item setTarget: self]; |
nkeynes@964 | 156 | NSString *iconFile = [[NSBundle mainBundle] pathForResource:icon ofType:@"png"]; |
nkeynes@964 | 157 | NSImage *image = [[NSImage alloc] initWithContentsOfFile: iconFile]; |
nkeynes@964 | 158 | [item setImage: image]; |
nkeynes@964 | 159 | [item setAction: action]; |
nkeynes@964 | 160 | return item; |
nkeynes@964 | 161 | } |
nkeynes@964 | 162 | - (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *)toolbar |
nkeynes@964 | 163 | { |
nkeynes@964 | 164 | return toolbar_ids; |
nkeynes@964 | 165 | } |
nkeynes@964 | 166 | |
nkeynes@964 | 167 | - (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *)toolbar |
nkeynes@964 | 168 | { |
nkeynes@964 | 169 | return toolbar_defaults; |
nkeynes@964 | 170 | } |
nkeynes@964 | 171 | |
nkeynes@964 | 172 | - (NSArray *)toolbarSelectableItemIdentifiers: (NSToolbar *)toolbar |
nkeynes@964 | 173 | { |
nkeynes@964 | 174 | return [NSArray arrayWithObjects: @"Paths", @"Controllers", nil ]; |
nkeynes@964 | 175 | } |
nkeynes@964 | 176 | |
nkeynes@964 | 177 | - (NSToolbarItem *) toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier |
nkeynes@964 | 178 | willBeInsertedIntoToolbar:(BOOL)flag |
nkeynes@964 | 179 | { |
nkeynes@964 | 180 | return [toolbar_items objectForKey: itemIdentifier]; |
nkeynes@964 | 181 | } |
nkeynes@964 | 182 | @end |
nkeynes@964 | 183 | |
nkeynes@964 | 184 | void cocoa_gui_show_preferences() |
nkeynes@964 | 185 | { |
nkeynes@964 | 186 | if( prefs_panel == NULL ) { |
nkeynes@964 | 187 | prefs_panel = [[LxdreamPrefsPanel alloc] initWithContentRect: NSMakeRect(0,0,640,400)]; |
nkeynes@964 | 188 | } |
nkeynes@964 | 189 | [prefs_panel makeKeyAndOrderFront: prefs_panel]; |
nkeynes@964 | 190 | } |
.