load/save GUI basics integrated. needs more work though

git-svn-id: http://svn.berlios.de/svnroot/repos/oolite-linux/trunk@107 127b21dd-08f5-0310-b4b7-95ae10353056
This commit is contained in:
Dylan Smith 2005-08-28 17:48:39 +00:00
parent 2b2f4dc0f7
commit 3862ae61c1
5 changed files with 122 additions and 32 deletions

View File

@ -18,20 +18,24 @@
#import "MyOpenGLView.h"
#import "Universe.h"
#define BACKROW 1
#define STARTROW 2
#define ENDROW 14
#define ENDROW 18
#define MOREROW 18
#define NUMROWS 16
#define COLUMNS 2
#define INPUTROW 16
#define INPUTROW 20
@interface PlayerEntity (LoadSave)
- (void) setGuiToLoadCommanderScreen;
- (void) setGuiToSaveCommanderScreen: (NSString *)cdrName;
- (void) lsCommanders: (GuiDisplayGen *)gui;
- (void) lsCommanders: (GuiDisplayGen *)gui pageNumber: (int)page;
- (NSString *) commanderSelector: (GuiDisplayGen *)gui
: (MyOpenGLView *)gameView;
- (void) saveCommanderInputHandler: (GuiDisplayGen *)gui
: (MyOpenGLView *)gameView;
: (MyOpenGLView *)gameView;
- (void) nativeSavePlayer: (NSString *)cdrName;
@end

View File

@ -29,7 +29,7 @@
[gui clear];
[gui setTitle:[NSString stringWithFormat:@"Select Commander"]];
[self lsCommanders: gui];
[self lsCommanders:gui pageNumber:0];
[gui setSelectedRow: STARTROW];
[universe guiUpdated];
[[universe gameView] supressKeysUntilKeyUp];
@ -46,12 +46,12 @@
[gui clear];
[gui setTitle:[NSString stringWithFormat:@"Save Commander"]];
[self lsCommanders: gui];
[self lsCommanders: gui pageNumber:0];
[gui setSelectedRow: STARTROW];
[gui setText:@"Commander name: " forRow: INPUTROW];
[gui setColor:[NSColor cyanColor] forRow:16];
[gui setColor:[NSColor cyanColor] forRow:INPUTROW];
[gui setShowTextCursor: YES];
[gui setCurrentRow: 16];
[gui setCurrentRow: INPUTROW];
[gameView setTypedString: cdrName];
[gameView supressKeysUntilKeyUp];
@ -59,23 +59,46 @@
}
- (void) lsCommanders: (GuiDisplayGen *)gui
pageNumber: (int)page
{
NSFileManager *cdrFileManager=[NSFileManager defaultManager];
NSEnumerator *cdrEnum;
NSString *cdrName;
int rangeStart=STARTROW;
int firstIndex=page * NUMROWS;
int lastIndex;
int i;
int row=STARTROW;
// cdrArray defined in PlayerEntity.h
cdrArray=[cdrFileManager commanderContents];
cdrEnum=[cdrArray objectEnumerator];
while((cdrName=[cdrEnum nextObject]) != nil)
{
[gui setText:cdrName forRow:row align:GUI_ALIGN_CENTER];
if(page)
{
[gui setText:@"<- Back" forRow:STARTROW-1 align:GUI_ALIGN_CENTER];
[gui setKey:GUI_KEY_OK forRow:STARTROW-1];
rangeStart=STARTROW-1;
}
if(firstIndex + NUMROWS > [cdrArray count])
{
lastIndex=[cdrArray count];
[gui setSelectableRange: NSMakeRange(rangeStart, lastIndex)];
}
else
{
lastIndex=(page * NUMROWS) + NUMROWS;
[gui setText:@"More ->" forRow:ENDROW align:GUI_ALIGN_CENTER];
[gui setKey:GUI_KEY_OK forRow:ENDROW];
[gui setSelectableRange: NSMakeRange(rangeStart, NUMROWS+1)];
}
for(i=firstIndex; i < lastIndex; i++)
{
[gui setText:[cdrArray objectAtIndex: i] forRow:row align:GUI_ALIGN_CENTER];
[gui setKey:GUI_KEY_OK forRow:row];
row++;
}
[gui setSelectableRange:
NSMakeRange(STARTROW, [cdrArray count])];
[gui setSelectedRow: rangeStart];
// need this later, make sure it's not garbage collected.
[cdrArray retain];
@ -85,24 +108,45 @@
: (GuiDisplayGen *)gui
: (MyOpenGLView *)gameView
{
[self handleGUIUpDownArrowKeys: gui :gameView :-1];
int idx;
[self handleGUIUpDownArrowKeys: gui :gameView];
// Enter pressed - find the commander name underneath.
if ([gameView isDown:13])
{
int idx=[gui selectedRow] - STARTROW;
NSString *cdr=[NSString stringWithString:[cdrArray objectAtIndex: idx]];
NSLog(@"Row = %d", [gui selectedRow]);
switch ([gui selectedRow])
{
case BACKROW:
currentPage--;
[gui clear];
[self lsCommanders: gui pageNumber: currentPage];
[gameView supressKeysUntilKeyUp];
break;
case MOREROW:
NSLog(@"Plus one page");
[gui clear];
currentPage++;
[self lsCommanders: gui pageNumber: currentPage];
[gameView supressKeysUntilKeyUp];
break;
default:
idx=([gui selectedRow] - STARTROW) + (currentPage * NUMROWS);
NSLog(@"Loading idx = %d", idx);
NSString *cdr=[NSString stringWithString:[cdrArray objectAtIndex: idx]];
[cdrArray release];
return cdr;
[cdrArray release];
return cdr;
}
}
return nil;
}
- (void) saveCommanderInputHandler
: (GuiDisplayGen *)gui
: (MyOpenGLView *)gameView
{
[self handleGUIUpDownArrowKeys: gui :gameView :-1];
[self handleGUIUpDownArrowKeys: gui :gameView];
commanderNameString=[gameView typedString];
if([commanderNameString length])
{
@ -110,6 +154,36 @@
[NSString stringWithFormat:@"Commander name: %@", commanderNameString]
forRow: INPUTROW];
}
if([gameView isDown: 13])
{
[self nativeSavePlayer: commanderNameString];
}
}
// essentially the same as savePlayer but omitting all the AppKit dialog
// stuff and taking a string instead.
- (void) nativeSavePlayer
: (NSString *)cdrName
{
NSMutableString *saveString=[[NSMutableString alloc] initWithString: cdrName];
[saveString appendString: @".oolite-save"];
if (player_name) [player_name release];
player_name=[cdrName retain];
if(![[self commanderDataDictionary] writeToFile:saveString atomically:YES])
{
NSBeep();
NSLog(@"***** ERROR: Save to %@ failed!", saveString);
NSException *myException=
[NSException exceptionWithName:@"ooliteException"
reason:[NSString stringWithFormat:@"Attempt to save '%@' failed",
saveString]
userInfo:nil];
[myException raise];
return;
}
[self setGuiToStatusScreen];
}
@end

View File

@ -251,6 +251,7 @@ Your fair use and other rights are in no way affected by the above.
// For GUI/SDL based save screen
NSString *commanderNameString;
NSArray *cdrArray;
int currentPage;
#endif
StationEntity *docked_station;

View File

@ -3464,28 +3464,27 @@ static BOOL queryPressed;
{
disc_operation_in_progress = YES;
// DJS: WIP
//#ifdef GNUSTEP
// [gameView clearKeys];
// [self setGuiToSaveCommanderScreen: player_name];
//#else
#ifdef GNUSTEP
[self setGuiToSaveCommanderScreen: player_name];
#else
if ([[universe gameController] inFullScreenMode])
[[universe gameController] pauseFullScreenModeToPerform:@selector(savePlayer) onTarget:self];
else
[self savePlayer];
//#endif
#endif
}
if (([gui selectedRow] == load_row)&&(!disc_operation_in_progress))
{
disc_operation_in_progress = YES;
// DJS: WIP
//#ifdef GNUSTEP
// [self setGuiToLoadCommanderScreen];
//#else
#ifdef GNUSTEP
[self setGuiToLoadCommanderScreen];
#else
if ([[universe gameController] inFullScreenMode])
[[universe gameController] pauseFullScreenModeToPerform:@selector(loadPlayer) onTarget:self];
else
[self loadPlayer];
//#endif
#endif
}
if (([gui selectedRow] == begin_new_row)&&(!disc_operation_in_progress))
{
@ -4324,12 +4323,19 @@ static BOOL toggling_music;
[themeMusic stop];
}
disc_operation_in_progress = YES;
#ifdef GNUSTEP
[self setStatus:STATUS_DOCKED];
[universe removeDemoShips];
[gui setBackgroundImage:nil];
[self setGuiToLoadCommanderScreen];
#else
if ([[universe gameController] inFullScreenMode])
[[universe gameController] pauseFullScreenModeToPerform:@selector(loadPlayer) onTarget:self];
else
[self loadPlayer];
[self setStatus:STATUS_DOCKED];
[self setGuiToStatusScreen];
#endif
[universe setDisplayText:YES];
}
}

View File

@ -605,9 +605,14 @@ NSMutableDictionary* surface_cache;
if (finalFilename != nil)
{
NSLog(@"finalFilename:");
NSLog(@"%s", [finalFilename cString]);
surface = IMG_Load([finalFilename cString]);
NSLog(@"IMG_Load complete");
result = [[SDLImage alloc] initWithSurface: surface];
NSLog(@"SDLImage alloc complete");
[surface_cache setObject:result forKey:image_key];
NSLog(@"surface_cache added to");
}
return result;