3 * Copyright (c) 2007, Blue Static <http://www.bluestatic.org>
5 * This program is free software; you can redistribute it and/or modify it under the terms of the GNU
6 * General Public License as published by the Free Software Foundation; either version 2 of the
7 * License, or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
10 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
13 * You should have received a copy of the GNU General Public License along with this program; if not,
14 * write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
17 #import "AppController.h"
19 #import "NSStringAdditions.h"
21 @implementation AppController
24 * Initializes the application and loads the dictionary archive
28 if (self = [super init
])
30 NSString
*path
= [NSString stringWithFormat
:@
"%@/dictionary.ka", [[NSBundle mainBundle
] resourcePath
]];
31 dictionary
= [NSKeyedUnarchiver unarchiveObjectWithFile
:path
];
37 * Action that filters through all the words with the given tiles and then produces
40 - (IBAction
)findWords
:(id)sender
42 [wordlist removeObjects
:[wordlist arrangedObjects
]];
44 NSString
*tileString
= [tilesField stringValue
];
45 int tileCount
= [tileString length
];
47 NSMutableArray
*tiles
= [NSMutableArray arrayWithCapacity
:tileCount
- 1];
48 for (int i
= 0; i
< tileCount
; i
++)
50 [tiles addObject
:[tileString substringWithRange
:NSMakeRange(i
, 1)]];
53 // create character sets from the tiles
54 NSCharacterSet
*charset
= [NSCharacterSet characterSetWithCharactersInString
:tileString
];
55 NSCharacterSet
*charsetInverted
= [charset invertedSet
];
57 // iterate over the dictionary to build our word list
58 for (NSString
*word
in dictionary
)
60 // word is larger than the number of tiles we have, remove
61 if ([word length
] > tileCount
)
66 // if the word contains characters we don't have, then remove it
67 if ([word rangeOfCharacterFromSet
:charsetInverted
].location
!= NSNotFound
)
73 for (NSString
*tile
in tiles
)
75 if ([word occurrenceOfChar
:tile
] > [tileString occurrenceOfChar
:tile
])
83 [wordlist addObject
:[[Word alloc
] initWithWord
:word
]];
88 [wordlistView setSortDescriptors
:nil];
89 [wordlistView setSortDescriptors
:[NSArray arrayWithObject
:[[NSSortDescriptor alloc
] initWithKey
:@
"length" ascending
:NO
]]];