1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
|
/**
AdaptorsPanel.m
Author: Matt Rice <ratmice@gmail.com>
Date: Apr 2005
This file is part of DBModeler.
<license>
DBModeler 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 3 of the License, or
(at your option) any later version.
DBModeler 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 DBModeler; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
</license>
**/
#include "AdaptorsPanel.h"
#include <AppKit/AppKit.h>
#include <GNUstepBase/GNUstep.h>
static NSArray *_adaptorNames;
@implementation AdaptorsPanel
- (void) dealloc
{
DESTROY(_window);
DESTROY(_adaptorNames);
/* released by window
_label
brws_adaptors
btn_ok
btn_cancel
*/
[super dealloc];
}
- (id) init
{
if ((self = [super init]))
{
NSRect fr1, fr2;
_adaptorNames = RETAIN([EOAdaptor availableAdaptorNames]);
/* redo all these numbers so buttons and labels are on the right? */
_window = [[NSWindow alloc]
initWithContentRect: NSMakeRect(200,200,200,300)
styleMask: NSBorderlessWindowMask | NSTitledWindowMask
backing: NSBackingStoreBuffered
defer: YES];
[_window setTitle: @"Select adaptor"];
[_window setReleasedWhenClosed:NO];
brws_adaptors = [[NSBrowser alloc] initWithFrame: NSMakeRect(5,30,190,240)];
[brws_adaptors setDelegate: self];
[brws_adaptors addColumn];
[brws_adaptors setTitle: @"Available adaptors" ofColumn: 0];
[brws_adaptors setAllowsEmptySelection: NO];
[brws_adaptors setTarget:self];
[brws_adaptors setDoubleAction:@selector(ok:)];
btn_ok = [[NSButton alloc] initWithFrame: NSMakeRect(5,5,50,20)];
[btn_ok setTitle: @"ok"];
[btn_ok setTarget: self];
[btn_ok setAction: @selector(ok:)];
btn_cancel = [[NSButton alloc] initWithFrame: NSMakeRect(60,5,50,20)];
[btn_cancel setTitle: @"cancel"];
[btn_cancel setTarget: self];
[btn_cancel setAction: @selector(cancel:)];
[[_window contentView] addSubview: brws_adaptors];
[[_window contentView] addSubview: btn_ok];
[[_window contentView] addSubview: btn_cancel];
[_window setInitialFirstResponder:brws_adaptors];
[brws_adaptors setNextResponder:btn_ok];
[btn_ok setNextResponder:btn_cancel];
// hmm.. this seems to cause an infinate loop in the responder chain somehow
// when in the modal loop.
// [btn_cancel setNextResponder:brws_adaptors];
[btn_ok setKeyEquivalent:@"\r"];
[btn_ok setImage:[NSImage imageNamed:@"common_ret"]];
[btn_ok setAlternateImage:[NSImage imageNamed:@"common_retH"]];
[btn_ok setImagePosition:NSImageRight];
[btn_ok sizeToFit];
fr1 = [btn_ok frame];
fr2 = [btn_cancel frame];
fr1.size.width = fr2.size.width = fr1.size.width > fr2.size.width
? fr1.size.width
: fr2.size.width;
fr1.size.height = fr2.size.height = fr1.size.height > fr2.size.height
? fr1.size.height
: fr2.size.height;
fr2.origin.x = NSMaxX(fr1) + 8;
[btn_ok setFrame:fr1];
[btn_cancel setFrame:fr2];
fr2 = [brws_adaptors frame];
fr2.origin.y = NSMaxY(fr1) + 8;
[brws_adaptors setFrame:fr2];
RELEASE(_label);
RELEASE(brws_adaptors);
RELEASE(btn_ok);
RELEASE(btn_cancel);
}
return self;
}
- (NSString *) runAdaptorsPanel
{
NSString *selection;
if ([NSApp runModalForWindow:_window] == NSRunAbortedResponse)
{
selection = nil;
[_window orderOut:self];
}
else
{
selection = [[brws_adaptors selectedCell] stringValue];
[_window orderOut:self];
}
return selection;
}
/* button actions */
- (void) ok: (id)sender
{
[NSApp stopModalWithCode:NSRunStoppedResponse];
}
- (void) cancel: (id)sender
{
[NSApp stopModalWithCode:NSRunAbortedResponse];
}
/* NSBrowser delegate stuff */
- (int) browser:(id)sender numberOfRowsInColumn:(int)column
{
return [_adaptorNames count];
}
- (void)browser:(NSBrowser*)sender
willDisplayCell:(NSBrowserCell*)cell
atRow:(int)row
column:(int)column
{
[cell setLeaf:YES];
[cell setTitle: [_adaptorNames objectAtIndex:row]];
}
@end
|