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:
parent
2b2f4dc0f7
commit
3862ae61c1
14
LoadSave.h
14
LoadSave.h
@ -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
|
||||
|
||||
|
110
LoadSave.m
110
LoadSave.m
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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];
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user