Search
lxdream.org :: lxdream/src/cocoaui/cocoa_path.m
lxdream 0.9.1
released Jun 29
Download Now
filename src/cocoaui/cocoa_path.m
changeset 1041:5fcc39857c5c
prev1039:98b9f0791bff
next1070:f543ee84dceb
author nkeynes
date Fri Jun 26 05:47:04 2009 +0000 (14 years ago)
permissions -rw-r--r--
last change Refactor path operations into lxpaths.[ch]
file annotate diff log raw
nkeynes@964
     1
/**
nkeynes@964
     2
 * $Id$
nkeynes@964
     3
 *
nkeynes@964
     4
 * Construct and manage the paths configuration pane
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.h"
nkeynes@964
    20
#include "config.h"
nkeynes@1041
    21
#include "lxpaths.h"
nkeynes@964
    22
#include "dreamcast.h"
nkeynes@964
    23
nkeynes@964
    24
@interface LxdreamPrefsPathPane: LxdreamPrefsPane 
nkeynes@964
    25
{
nkeynes@1039
    26
    NSTextField *fields[CONFIG_KEY_MAX];
nkeynes@964
    27
}
nkeynes@964
    28
+ (LxdreamPrefsPathPane *)new;
nkeynes@964
    29
@end
nkeynes@964
    30
nkeynes@964
    31
@implementation LxdreamPrefsPathPane
nkeynes@964
    32
+ (LxdreamPrefsPathPane *)new
nkeynes@964
    33
{
nkeynes@964
    34
    return [[LxdreamPrefsPathPane alloc] initWithFrame: NSMakeRect(0,0,600,400)];
nkeynes@964
    35
}
nkeynes@964
    36
- (id)initWithFrame: (NSRect)frameRect
nkeynes@964
    37
{
nkeynes@964
    38
    if( [super initWithFrame: frameRect title: NS_("Paths")] == nil ) {
nkeynes@964
    39
        return nil;
nkeynes@964
    40
    } else {
nkeynes@964
    41
        int i;
nkeynes@964
    42
        int height = [self contentHeight] - TEXT_HEIGHT - TEXT_GAP;
nkeynes@1039
    43
        int y = height;
nkeynes@964
    44
        
nkeynes@964
    45
        for( i=0; i<=CONFIG_KEY_MAX; i++ ) {
nkeynes@1036
    46
            const struct lxdream_config_entry *entry = lxdream_get_global_config_entry(i);
nkeynes@964
    47
            if( entry->label != NULL ) {
nkeynes@1039
    48
                NSRect frame = NSMakeRect( TEXT_GAP, y - 2, 150, LABEL_HEIGHT );
nkeynes@964
    49
                NSTextField *label = cocoa_gui_add_label(self, NS_(entry->label), frame);
nkeynes@964
    50
                [label setAlignment: NSRightTextAlignment];
nkeynes@964
    51
nkeynes@1039
    52
                frame = NSMakeRect( 150 + (TEXT_GAP*2), y, 360, TEXT_HEIGHT ); 
nkeynes@964
    53
                NSTextField *field = [[NSTextField alloc] initWithFrame: frame];
nkeynes@964
    54
                [field setTag: i];
nkeynes@964
    55
                [field setStringValue: [NSString stringWithCString: entry->value]]; 
nkeynes@964
    56
                [field setDelegate: self];
nkeynes@964
    57
                [field setAutoresizingMask: (NSViewMinYMargin|NSViewWidthSizable)];
nkeynes@1039
    58
                
nkeynes@1039
    59
                frame = NSMakeRect( 510 + (TEXT_GAP*3), y,  TEXT_HEIGHT, TEXT_HEIGHT );
nkeynes@1039
    60
                NSButton *button = [[NSButton alloc] initWithFrame: frame];
nkeynes@1039
    61
                [button setTag: i];
nkeynes@1039
    62
                [button setTitle: @""];
nkeynes@1039
    63
                [button setButtonType: NSMomentaryPushInButton];
nkeynes@1039
    64
                [button setBezelStyle: NSRoundedDisclosureBezelStyle];
nkeynes@1039
    65
                [button setAutoresizingMask: (NSViewMinYMargin|NSViewMinXMargin)];
nkeynes@1039
    66
                [button setTarget: self];
nkeynes@1039
    67
                if( entry->type == CONFIG_TYPE_FILE ) {
nkeynes@1039
    68
                    [button setAction: @selector(openFileDialog:)];
nkeynes@1039
    69
                } else {
nkeynes@1039
    70
                    [button setAction: @selector(openDirDialog:)];
nkeynes@1039
    71
                }
nkeynes@1039
    72
                
nkeynes@964
    73
                [self addSubview: label];
nkeynes@964
    74
                [self addSubview: field];
nkeynes@1039
    75
                [self addSubview: button];
nkeynes@1039
    76
                fields[i] = field;
nkeynes@1039
    77
                y -= (TEXT_HEIGHT + TEXT_GAP);
nkeynes@964
    78
            }
nkeynes@964
    79
        }
nkeynes@964
    80
    }
nkeynes@964
    81
    return self;
nkeynes@964
    82
}
nkeynes@964
    83
- (void)controlTextDidEndEditing:(NSNotification *)notify
nkeynes@964
    84
{
nkeynes@964
    85
    int tag = [[notify object] tag];
nkeynes@964
    86
    const char *str = [[[notify object] stringValue] UTF8String];
nkeynes@1036
    87
    const char *oldval = lxdream_get_global_config_value(tag);
nkeynes@964
    88
    if( str[0] == '\0' )
nkeynes@964
    89
        str = NULL;
nkeynes@964
    90
    if( oldval == NULL ? str != NULL : (str == NULL || strcmp(oldval,str) != 0 ) ) {   
nkeynes@964
    91
        lxdream_set_global_config_value(tag, str);
nkeynes@964
    92
        lxdream_save_config();
nkeynes@964
    93
        dreamcast_config_changed();
nkeynes@964
    94
    }
nkeynes@964
    95
}
nkeynes@1039
    96
- (void)openFileDialog: (id)sender
nkeynes@1039
    97
{
nkeynes@1039
    98
    int tag = [sender tag];
nkeynes@1039
    99
    NSString *text = [fields[tag] stringValue]; 
nkeynes@1039
   100
    NSOpenPanel *panel = [NSOpenPanel openPanel];
nkeynes@1039
   101
    int result = [panel runModalForDirectory: nil file: nil types: nil];
nkeynes@1039
   102
    if( result == NSOKButton && [[panel filenames] count] > 0 ) {
nkeynes@1039
   103
        NSString *filename = [[panel filenames] objectAtIndex: 0];
nkeynes@1039
   104
        gchar *str = get_escaped_path( [filename UTF8String] );
nkeynes@1039
   105
        [fields[tag] setStringValue: [NSString stringWithUTF8String: str]];
nkeynes@1039
   106
        lxdream_set_global_config_value(tag,str);
nkeynes@1039
   107
        lxdream_save_config();
nkeynes@1039
   108
        dreamcast_config_changed();
nkeynes@1039
   109
    }
nkeynes@1039
   110
}
nkeynes@1039
   111
- (void)openDirDialog: (id)sender
nkeynes@1039
   112
{
nkeynes@1039
   113
    int tag = [sender tag];
nkeynes@1039
   114
    NSString *text = [fields[tag] stringValue]; 
nkeynes@1039
   115
    NSOpenPanel *panel = [NSOpenPanel openPanel];
nkeynes@1039
   116
    [panel setCanChooseDirectories: YES];
nkeynes@1039
   117
    [panel setCanCreateDirectories: YES];
nkeynes@1039
   118
    int result = [panel runModalForDirectory: nil file: nil types: nil];
nkeynes@1039
   119
    if( result == NSOKButton && [[panel filenames] count] > 0 ) {
nkeynes@1039
   120
        NSString *filename = [[panel filenames] objectAtIndex: 0];
nkeynes@1039
   121
        gchar *str = get_escaped_path( [filename UTF8String] );
nkeynes@1039
   122
        [fields[tag] setStringValue: [NSString stringWithUTF8String: str]];
nkeynes@1039
   123
        lxdream_set_global_config_value(tag,str);
nkeynes@1039
   124
        lxdream_save_config();
nkeynes@1039
   125
        dreamcast_config_changed();
nkeynes@1039
   126
    }
nkeynes@1039
   127
}
nkeynes@1039
   128
nkeynes@964
   129
@end
nkeynes@964
   130
nkeynes@964
   131
nkeynes@964
   132
NSView *cocoa_gui_create_prefs_path_pane()
nkeynes@964
   133
{
nkeynes@964
   134
    return [LxdreamPrefsPathPane new];
nkeynes@964
   135
}
.