From b336ba79f1f7896b14dc97799d0928e67c6f9a0a Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Sat, 11 Sep 2010 17:35:25 +0900 Subject: [PATCH] Finally, everything does compile. However, it still won't work (no gorm, commented code, ...). Borrow an old implementation of the Storage class until I figure out just what it's being used for. --- tools/Forge/Bundles/MapEdit/Dict.h | 2 + tools/Forge/Bundles/MapEdit/Dict.m | 10 +- tools/Forge/Bundles/MapEdit/DictList.h | 4 +- tools/Forge/Bundles/MapEdit/DictList.m | 13 +- tools/Forge/Bundles/MapEdit/GNUmakefile | 2 +- .../Forge/Bundles/MapEdit/InspectorControl.m | 44 +-- tools/Forge/Bundles/MapEdit/Preferences.h | 2 + tools/Forge/Bundles/MapEdit/Preferences.m | 65 ++-- tools/Forge/Bundles/MapEdit/Project.m | 91 +++--- tools/Forge/Bundles/MapEdit/QuakeEd.m | 209 +++++++------ tools/Forge/Bundles/MapEdit/QuakeEd_main.m | 18 +- tools/Forge/Bundles/MapEdit/SetBrush.m | 9 +- tools/Forge/Bundles/MapEdit/Storage.h | 85 ++++++ tools/Forge/Bundles/MapEdit/Storage.m | 284 ++++++++++++++++++ tools/Forge/Bundles/MapEdit/TexturePalette.m | 70 +++-- tools/Forge/Bundles/MapEdit/TextureView.h | 2 + tools/Forge/Bundles/MapEdit/TextureView.m | 30 +- 17 files changed, 694 insertions(+), 246 deletions(-) create mode 100644 tools/Forge/Bundles/MapEdit/Storage.h create mode 100644 tools/Forge/Bundles/MapEdit/Storage.m diff --git a/tools/Forge/Bundles/MapEdit/Dict.h b/tools/Forge/Bundles/MapEdit/Dict.h index 1d3aa3408..af89ca985 100644 --- a/tools/Forge/Bundles/MapEdit/Dict.h +++ b/tools/Forge/Bundles/MapEdit/Dict.h @@ -3,6 +3,8 @@ #include +#include "Storage.h" + typedef struct { char *key; diff --git a/tools/Forge/Bundles/MapEdit/Dict.m b/tools/Forge/Bundles/MapEdit/Dict.m index aa126f643..c79197b1c 100644 --- a/tools/Forge/Bundles/MapEdit/Dict.m +++ b/tools/Forge/Bundles/MapEdit/Dict.m @@ -1,5 +1,5 @@ -#include "qedefs.h" +#include "Dict.h" @implementation Dict @@ -31,14 +31,14 @@ copyFromZone JDC =========== */ -- copyFromZone:(NSZone *)zone +- copy { id new; int i; dict_t *d; char *old; - new = [super copyFromZone: zone]; + new = [super copy]; for (i=0 ; ivalue); d->value = [self convertListToString:temp]; - [temp free]; + [temp release]; break; } diff --git a/tools/Forge/Bundles/MapEdit/DictList.h b/tools/Forge/Bundles/MapEdit/DictList.h index 8bdb55468..7b3b70e21 100644 --- a/tools/Forge/Bundles/MapEdit/DictList.h +++ b/tools/Forge/Bundles/MapEdit/DictList.h @@ -1,9 +1,9 @@ #ifndef DictList_h -#endif DictList_h +#define DictList_h #include -@interface DictList:List +@interface DictList:NSMutableArray { } diff --git a/tools/Forge/Bundles/MapEdit/DictList.m b/tools/Forge/Bundles/MapEdit/DictList.m index 66f78b4b7..00ae27b66 100644 --- a/tools/Forge/Bundles/MapEdit/DictList.m +++ b/tools/Forge/Bundles/MapEdit/DictList.m @@ -1,5 +1,6 @@ -#include "qedefs.h" +#include "DictList.h" +#include "Dict.h" @implementation DictList @@ -17,7 +18,7 @@ if (d != NULL) [self addObject:d]; } while(d != NULL); - [d free]; + [d release]; return self; } @@ -37,9 +38,9 @@ fprintf(fp,"// Object List written by QuakeEd\n"); - for (i = 0;i < maxElements;i++) + for (i = 0;i < [self count];i++) { - obj = [self objectAt:i]; + obj = [self objectAtIndex:i]; [obj writeBlockTo:fp]; } fclose(fp); @@ -56,9 +57,9 @@ dict_t *d; id dict; - for (i = 0;i < maxElements;i++) + for (i = 0;i < [self count];i++) { - dict = [self objectAt:i]; + dict = [self objectAtIndex:i]; d = [(Dict *)dict findKeyword:key]; if (d != NULL) return dict; diff --git a/tools/Forge/Bundles/MapEdit/GNUmakefile b/tools/Forge/Bundles/MapEdit/GNUmakefile index a7c686726..5483856ab 100644 --- a/tools/Forge/Bundles/MapEdit/GNUmakefile +++ b/tools/Forge/Bundles/MapEdit/GNUmakefile @@ -12,7 +12,7 @@ MapEdit_RESOURCE_FILES= \ MapEdit.gorm MapEdit_OBJC_FILES= \ - CameraView.m Clipper.m Entity.m EntityClass.m KeypairView.m Map.m PopScrollView.m Things.m XYView.m ZScrollView.m ZView.m render.m + CameraView.m Clipper.m Dict.m DictList.m Entity.m EntityClass.m InspectorControl.m KeypairView.m Map.m PopScrollView.m Preferences.m Project.m QuakeEd.m QuakeEd_main.m SetBrush.m Storage.m TexturePalette.m TextureView.m Things.m XYView.m ZScrollView.m ZView.m render.m MapEdit_HEADERS= \ EntityClass.h diff --git a/tools/Forge/Bundles/MapEdit/InspectorControl.m b/tools/Forge/Bundles/MapEdit/InspectorControl.m index b0dfbe8bd..66aa8da2b 100644 --- a/tools/Forge/Bundles/MapEdit/InspectorControl.m +++ b/tools/Forge/Bundles/MapEdit/InspectorControl.m @@ -1,5 +1,5 @@ -#include "qedefs.h" +#include "InspectorControl.h" // Add .h-files here for new inspectors #include "Things.h" @@ -16,52 +16,52 @@ id inspcontrol_i; currentInspectorType = -1; - contentList = [[List alloc] init]; - windowList = [[List alloc] init]; - itemList = [[List alloc] init]; + contentList = [[NSArray alloc] init]; + windowList = [[NSArray alloc] init]; + itemList = [[NSArray alloc] init]; // ADD NEW INSPECTORS HERE... [windowList addObject:win_project_i]; [contentList addObject:[win_project_i contentView]]; - [itemProject_i setKeyEquivalent:'1']; + [itemProject_i setKeyEquivalent:@"1"]; [itemList addObject:itemProject_i]; [windowList addObject:win_textures_i]; [contentList addObject:[win_textures_i contentView]]; - [itemTextures_i setKeyEquivalent:'2']; + [itemTextures_i setKeyEquivalent:@"2"]; [itemList addObject:itemTextures_i]; [windowList addObject:win_things_i]; [contentList addObject:[win_things_i contentView]]; - [itemThings_i setKeyEquivalent:'3']; + [itemThings_i setKeyEquivalent:@"3"]; [itemList addObject:itemThings_i]; [windowList addObject:win_prefs_i]; [contentList addObject:[win_prefs_i contentView]]; - [itemPrefs_i setKeyEquivalent:'4']; + [itemPrefs_i setKeyEquivalent:@"4"]; [itemList addObject:itemPrefs_i]; [windowList addObject:win_settings_i]; [contentList addObject:[win_settings_i contentView]]; - [itemSettings_i setKeyEquivalent:'5']; + [itemSettings_i setKeyEquivalent:@"5"]; [itemList addObject:itemSettings_i]; [windowList addObject:win_output_i]; [contentList addObject:[win_output_i contentView]]; - [itemOutput_i setKeyEquivalent:'6']; + [itemOutput_i setKeyEquivalent:@"6"]; [itemList addObject:itemOutput_i]; [windowList addObject:win_help_i]; [contentList addObject:[win_help_i contentView]]; - [itemHelp_i setKeyEquivalent:'7']; + [itemHelp_i setKeyEquivalent:@"7"]; [itemList addObject:itemHelp_i]; // Setup inspector window with project subview first - [inspectorView_i setAutoresizeSubviews:YES]; + [inspectorView_i setAutoresizesSubviews:YES]; - inspectorSubview_i = [contentList objectAt:i_project]; + inspectorSubview_i = [contentList objectAtIndex:i_project]; [inspectorView_i addSubview:inspectorSubview_i]; currentInspectorType = -1; @@ -98,21 +98,23 @@ id inspcontrol_i; return self; currentInspectorType = which; - newView = [contentList objectAt:which]; + newView = [contentList objectAtIndex:which]; - cell = [itemList objectAt:which]; // set PopUpButton title + cell = [itemList objectAtIndex:which]; // set PopUpButton title [popUpButton_i setTitle:[cell title]]; [inspectorView_i replaceSubview:inspectorSubview_i with:newView]; - [inspectorView_i getFrame:&r]; + r = [inspectorView_i frame]; inspectorSubview_i = newView; - [inspectorSubview_i setAutosizing:NS_WIDTHSIZABLE | NS_HEIGHTSIZABLE]; - [inspectorSubview_i sizeTo:r.size.width - 4 :r.size.height - 4]; + [inspectorSubview_i setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; + r.size.width -= 4; + r.size.height -= 4; + [inspectorSubview_i setFrameSize:r.size]; [inspectorSubview_i lockFocus]; - [inspectorSubview_i getBounds:&f]; - PSsetgray(NS_LTGRAY); - NSRectFill(&f); + f = [inspectorSubview_i bounds]; + PSsetgray(NSLightGray); + NSRectFill(f); [inspectorSubview_i unlockFocus]; [inspectorView_i display]; diff --git a/tools/Forge/Bundles/MapEdit/Preferences.h b/tools/Forge/Bundles/MapEdit/Preferences.h index 9893de15c..f82719c45 100644 --- a/tools/Forge/Bundles/MapEdit/Preferences.h +++ b/tools/Forge/Bundles/MapEdit/Preferences.h @@ -1,6 +1,8 @@ #ifndef Preferences_h #define Preferences_h +#include + extern id preferences_i; extern float lightaxis[3]; diff --git a/tools/Forge/Bundles/MapEdit/Preferences.m b/tools/Forge/Bundles/MapEdit/Preferences.m index ba241cb9b..cdef119af 100644 --- a/tools/Forge/Bundles/MapEdit/Preferences.m +++ b/tools/Forge/Bundles/MapEdit/Preferences.m @@ -1,5 +1,8 @@ -#include "qedefs.h" +#include "Preferences.h" +#include "Map.h" +#include "QuakeEd.h" +#include "Project.h" id preferences_i; @@ -35,11 +38,11 @@ void WriteNumericDefault (char *name, float value) char str[128]; sprintf (str,"%f", value); - NSWriteDefault (DEFOWNER, name, str); + //XXX NSWriteDefault (DEFOWNER, name, str); } void WriteStringDefault (char *name, char *value) { - NSWriteDefault (DEFOWNER, name, value); + //XXX NSWriteDefault (DEFOWNER, name, value); } // @@ -47,31 +50,31 @@ void WriteStringDefault (char *name, char *value) // - readDefaults { - char *string; - float value; + char *string = ""; + float value = 0; - string = (char *)NSGetDefaultValue(DEFOWNER,"ProjectPath"); + //XXX string = (char *)NSGetDefaultValue(DEFOWNER,"ProjectPath"); [self setProjectPath: string]; - string = (char *)NSGetDefaultValue(DEFOWNER,"BspSoundPath"); + //XXX string = (char *)NSGetDefaultValue(DEFOWNER,"BspSoundPath"); [self setBspSoundPath:string]; - value = _atoi((char *)NSGetDefaultValue(DEFOWNER,"ShowBSPOutput")); + //XXX value = _atoi((char *)NSGetDefaultValue(DEFOWNER,"ShowBSPOutput")); [self setShowBSP:value]; - value = _atoi((char *)NSGetDefaultValue(DEFOWNER,"OffsetBrushCopy")); + //XXX value = _atoi((char *)NSGetDefaultValue(DEFOWNER,"OffsetBrushCopy")); [self setBrushOffset:value]; - value = _atoi((char *)NSGetDefaultValue(DEFOWNER,"StartWad")); + //XXX value = _atoi((char *)NSGetDefaultValue(DEFOWNER,"StartWad")); [self setStartWad:value]; - value = _atof((char *)NSGetDefaultValue(DEFOWNER,"Xlight")); + //XXX value = _atof((char *)NSGetDefaultValue(DEFOWNER,"Xlight")); [self setXlight:value]; - value = _atof((char *)NSGetDefaultValue(DEFOWNER,"Ylight")); + //XXX value = _atof((char *)NSGetDefaultValue(DEFOWNER,"Ylight")); [self setYlight:value]; - value = _atof((char *)NSGetDefaultValue(DEFOWNER,"Zlight")); + //XXX value = _atof((char *)NSGetDefaultValue(DEFOWNER,"Zlight")); [self setZlight:value]; return self; @@ -83,14 +86,14 @@ void WriteStringDefault (char *name, char *value) if (!path) path = ""; strcpy (projectpath, path); - [startproject_i setStringValue: path]; + [startproject_i setStringValue: [NSString stringWithCString:path]]; WriteStringDefault ("ProjectPath", path); return self; } - setCurrentProject:sender { - [startproject_i setStringValue: [project_i currentProjectFile]]; + [startproject_i setStringValue: [NSString stringWithCString:[project_i currentProjectFile]]]; [self UIChanged: self]; return self; } @@ -111,27 +114,27 @@ void WriteStringDefault (char *name, char *value) - setBspSound:sender { id panel; - char *types[]={"snd",NULL}; + NSString *types[] = {@"snd"}; int rtn; - char **filename; + NSArray *filenames; char path[1024], file[64]; - panel = [OpenPanel new]; + panel = [NSOpenPanel new]; - ExtractFilePath (bspSound, path); - ExtractFileBase (bspSound, file); + //XXX ExtractFilePath (bspSound, path); + //XXX ExtractFileBase (bspSound, file); rtn = [panel - runModalForDirectory:path - file: file - types: types]; + runModalForDirectory:[NSString stringWithCString:path] + file: [NSString stringWithCString:file] + types: [NSArray arrayWithObjects:types count:1]]; if (rtn) { - filename = (char **)[panel filenames]; - strcpy(bspSound,[panel directory]); + filenames = [panel filenames]; + strcpy(bspSound,[[panel directory] cString]); strcat(bspSound,"/"); - strcat(bspSound,filename[0]); + strcat(bspSound, [[filenames objectAtIndex:0] cString]); [self setBspSoundPath:bspSound]; [self playBspSound]; } @@ -160,15 +163,15 @@ void WriteStringDefault (char *name, char *value) strcpy(bspSound,path); if (bspSound_i) - [bspSound_i free]; - bspSound_i = [[Sound alloc] initFromSoundfile:bspSound]; + [bspSound_i release]; + bspSound_i = [[NSSound alloc] initWithContentsOfFile:[NSString stringWithCString:bspSound]]; if (!bspSound_i) { strcpy (bspSound, "/NextLibrary/Sounds/Funk.snd"); - bspSound_i = [[Sound alloc] initFromSoundfile:bspSound]; + bspSound_i = [[NSSound alloc] initWithContentsOfFile:[NSString stringWithCString:bspSound]]; } - [bspSoundField_i setStringValue:bspSound]; + [bspSoundField_i setStringValue:[NSString stringWithCString:bspSound]]; WriteStringDefault ("BspSoundPath", bspSound); @@ -233,7 +236,7 @@ void WriteStringDefault (char *name, char *value) if (startwad<0 || startwad>2) startwad = 0; - [startwad_i selectCellAt:startwad : 0]; + [startwad_i selectCellAtRow:startwad column: 0]; WriteNumericDefault ("StartWad", value); return self; diff --git a/tools/Forge/Bundles/MapEdit/Project.m b/tools/Forge/Bundles/MapEdit/Project.m index 4095c87ab..ff18170a8 100644 --- a/tools/Forge/Bundles/MapEdit/Project.m +++ b/tools/Forge/Bundles/MapEdit/Project.m @@ -4,7 +4,17 @@ // //====================================== -#include "qedefs.h" +#include + +#include "QF/sys.h" + +#include "Project.h" +#include "Map.h" +#include "QuakeEd.h" +#include "Preferences.h" +#include "Dict.h" +#include "Things.h" +#include "TexturePalette.h" id project_i; @@ -28,7 +38,7 @@ id project_i; char *s; s = [preferences_i getProjectPath]; - StripFilename(s); + //XXX StripFilename(s); strcpy(path_basepath,s); strcpy(path_progdir,s); @@ -40,7 +50,7 @@ id project_i; strcpy(path_finalmapdir,s); strcat(path_finalmapdir,"/"SUBDIR_MAPS); // dest dir - [basepathinfo_i setStringValue:s]; // in Project Inspector + [basepathinfo_i setStringValue:[NSString stringWithCString:s]]; // in Project Inspector #if 0 if ((s = [projectInfo getStringFor:BASEPATHKEY])) @@ -114,12 +124,12 @@ id project_i; // - initProjSettings { - [pis_basepath_i setStringValue:path_basepath]; - [pis_fullvis_i setStringValue:string_fullvis]; - [pis_fastvis_i setStringValue:string_fastvis]; - [pis_novis_i setStringValue:string_novis]; - [pis_relight_i setStringValue:string_relight]; - [pis_leaktest_i setStringValue:string_leaktest]; + [pis_basepath_i setStringValue:[NSString stringWithCString:path_basepath]]; + [pis_fullvis_i setStringValue:[NSString stringWithCString:string_fullvis]]; + [pis_fastvis_i setStringValue:[NSString stringWithCString:string_fastvis]]; + [pis_novis_i setStringValue:[NSString stringWithCString:string_novis]]; + [pis_relight_i setStringValue:[NSString stringWithCString:string_relight]]; + [pis_leaktest_i setStringValue:[NSString stringWithCString:string_leaktest]]; return self; } @@ -132,27 +142,28 @@ id project_i; int end; end = [BSPoutput_i textLength]; - [BSPoutput_i setSel:end :end]; - [BSPoutput_i replaceSel:string]; + [BSPoutput_i replaceCharactersInRange:NSMakeRange (end, 0) withString:[NSString stringWithCString:string]]; end = [BSPoutput_i textLength]; - [BSPoutput_i setSel:end :end]; - [BSPoutput_i scrollSelToVisible]; + [BSPoutput_i setSelectedRange:NSMakeRange (end, 0)]; + //XXX [BSPoutput_i scrollSelToVisible]; return self; } - clearBspOutput:sender { - [BSPoutput_i selectAll:self]; - [BSPoutput_i replaceSel:"\0"]; + int end; + + end = [BSPoutput_i textLength]; + [BSPoutput_i replaceCharactersInRange:NSMakeRange (0, end) withString:@""]; return self; } - print { - [BSPoutput_i printPSCode:self]; + //XXX [BSPoutput_i printPSCode:self]; return self; } @@ -163,9 +174,9 @@ id project_i; if (projectInfo == NULL) return self; [self initVars]; - [mapbrowse_i reuseColumns:YES]; + [mapbrowse_i setReusesColumns:YES]; [mapbrowse_i loadColumnZero]; - [pis_wads_i reuseColumns:YES]; + [pis_wads_i setReusesColumns:YES]; [pis_wads_i loadColumnZero]; [things_i initEntities]; @@ -209,7 +220,7 @@ id project_i; else { list = nil; - Error ("Project: unknown browser to fill"); + Sys_Error ("Project: unknown browser to fill"); } max = [list count]; @@ -217,8 +228,8 @@ id project_i; { name = [list elementAt:i]; [matrix addRow]; - cell = [matrix cellAt:i :0]; - [cell setStringValue:name]; + cell = [matrix cellAtRow:i column:0]; + [cell setStringValue:[NSString stringWithCString:name]]; [cell setLeaf:YES]; [cell setLoaded:YES]; } @@ -240,14 +251,14 @@ id project_i; sprintf(fname,"%s/%s.map",path_mapdirectory, (char *)[mapList elementAt:row]); - panel = NSGetAlertPanel("Loading...", - "Loading map. Please wait.",NULL,NULL,NULL); + panel = NSGetAlertPanel(@"Loading...", + @"Loading map. Please wait.",NULL,NULL,NULL); [panel orderFront:NULL]; [quakeed_i doOpen:fname]; [panel performClose:NULL]; - NSFreeAlertPanel(panel); + //NSFreeAlertPanel(panel); return self; } @@ -266,14 +277,14 @@ id project_i; name = (char *)[wadList elementAt:i]; if (!strcmp(name, wf)) { - [[pis_wads_i matrixInColumn:0] selectCellAt: i : 0]; + [[pis_wads_i matrixInColumn:0] selectCellAtRow: i column: 0]; break; } } // update the texture inspector [texturepalette_i initPaletteFromWadfile:wf ]; - [[map_i objectAt: 0] setKey:"wad" toValue: wf]; + [[map_i objectAtIndex: 0] setKey:"wad" toValue: wf]; // [inspcontrol_i changeInspectorTo:i_textures]; [quakeed_i updateAll]; @@ -311,9 +322,9 @@ id project_i; path = [preferences_i getProjectPath]; if (!path || !path[0] || access(path,0)) { - rtn = NSRunAlertPanel("Project Error!", - "A default project has not been found.\n" - , "Open Project", NULL, NULL); + rtn = NSRunAlertPanel(@"Project Error!", + @"A default project has not been found.\n" + , @"Open Project", NULL, NULL); if ([self openProject] == nil) while (1) // can't run without a project [NSApp terminate: self]; @@ -361,19 +372,19 @@ id project_i; char path[128]; id openpanel; int rtn; - char *projtypes[2] = {"qpr",NULL}; - char **filenames; - char *dir; + NSString *projtypes[] ={ @"qpr"}; + NSArray *filenames; + const char *dir; - openpanel = [OpenPanel new]; - [openpanel allowMultipleFiles:NO]; - [openpanel chooseDirectories:NO]; - rtn = [openpanel runModalForTypes:projtypes]; - if (rtn == NS_OKTAG) + openpanel = [NSOpenPanel new]; + //[openpanel allowMultipleFiles:NO]; + //[openpanel chooseDirectories:NO]; + rtn = [openpanel runModalForTypes:[NSArray arrayWithObjects: projtypes count:1]]; + if (rtn == NSOKButton) { - (const char *const *)filenames = [openpanel filenames]; - dir = (char *)[openpanel directory]; - sprintf(path,"%s/%s",dir,filenames[0]); + filenames = [openpanel filenames]; + dir = [[openpanel directory] cString]; + sprintf (path, "%s/%s", dir, [[filenames objectAtIndex:0] cString]); strcpy(path_projectinfo,path); [self openProjectFile:path]; return self; diff --git a/tools/Forge/Bundles/MapEdit/QuakeEd.m b/tools/Forge/Bundles/MapEdit/QuakeEd.m index 0d42b61f7..9daae1085 100644 --- a/tools/Forge/Bundles/MapEdit/QuakeEd.m +++ b/tools/Forge/Bundles/MapEdit/QuakeEd.m @@ -1,9 +1,25 @@ +#include +#include +#include +#include +#include + +#include "QF/quakeio.h" #include "QuakeEd.h" +#include "Clipper.h" +#include "XYView.h" +#include "Map.h" +#include "CameraView.h" +#include "ZView.h" +#include "Preferences.h" +#include "InspectorControl.h" +#include "Project.h" id quakeed_i; id entclasses_i; +extern NSBezierPath *path; id g_cmd_out_i; BOOL autodirty; @@ -36,30 +52,18 @@ void My_Malloc_Error (int code) write (1, "malloc error!\n", strlen("malloc error!\n")+1); } -/* -=============== -AutoSave - -Every five minutes, save a modified map -=============== -*/ -void AutoSave(DPSTimedEntry tag, double now, void *userData) -{ -// automatic backup - if (autodirty) - { - autodirty = NO; - [map_i writeMapFile: FN_AUTOSAVE useRegion: NO]; - } - [map_i writeStats]; -} - - +#define FN_CMDOUT "/tmp/QuakeEdCmd.txt" void DisplayCmdOutput (void) { char *buffer; + QFile *file; + int size; - LoadFile (FN_CMDOUT, (void **)&buffer); + file = Qopen (FN_CMDOUT, "rt"); + size = Qfilesize (file); + buffer = malloc (size + 1); + size = Qread (file, buffer, size); + Qclose (file); unlink (FN_CMDOUT); [project_i addToOutput:buffer]; free (buffer); @@ -69,7 +73,6 @@ void DisplayCmdOutput (void) [preferences_i playBspSound]; - NSPing (); } /* @@ -79,8 +82,8 @@ CheckCmdDone See if the BSP is done =============== */ -DPSTimedEntry cmdte; -void CheckCmdDone(DPSTimedEntry tag, double now, void *userData) +//DPSTimedEntry cmdte; +void CheckCmdDone(/*DPSTimedEntry tag,*/ double now, void *userData) { union wait statusp; struct rusage rusage; @@ -89,49 +92,71 @@ void CheckCmdDone(DPSTimedEntry tag, double now, void *userData) return; DisplayCmdOutput (); bsppid = 0; - DPSRemoveTimedEntry( cmdte ); +// DPSRemoveTimedEntry( cmdte ); } //============================================================================ @implementation QuakeEd +/* +=============== +AutoSave + +Every five minutes, save a modified map +=============== +*/ +-(void) AutoSave +{ +// automatic backup + if (autodirty) + { + autodirty = NO; + #define FN_AUTOSAVE "/qcache/AutoSaveMap.map" + [map_i writeMapFile: FN_AUTOSAVE useRegion: NO]; + } + [map_i writeStats]; +} + /* =============== init =============== */ -- initContent:(const NSRect *)contentRect +- initContent:(NSRect)contentRect style:(int)aStyle backing:(int)backingType buttonMask:(int)mask defer:(BOOL)flag { - [super initContent:contentRect - style:aStyle + [super initWithContentRect:contentRect + styleMask:aStyle backing:backingType - buttonMask:mask defer:flag]; - [self addToEventMask: - NS_RMOUSEDRAGGEDMASK|NS_LMOUSEDRAGGEDMASK]; + //XXX [self addToEventMask: + //XXX NSRightMouseDragged|NSLeftMouseDragged]; - malloc_error(My_Malloc_Error); + //XXX malloc_error(My_Malloc_Error); quakeed_i = self; dirty = autodirty = NO; - DPSAddTimedEntry(5*60, AutoSave, self, NS_BASETHRESHOLD); + [NSTimer timerWithTimeInterval: 5 * 60 + target: self + selector: @selector(AutoSave) + userInfo: nil + repeats: YES]; - upath = newUserPath (); + path = [NSBezierPath new]; return self; } - +#define FN_TEMPSAVE "/qcache/temp.map" - setDefaultFilename { strcpy (filename, FN_TEMPSAVE); - [self setTitleAsFilename:filename]; + [self setTitleWithRepresentedFilename:[NSString stringWithCString:filename]]; return self; } @@ -160,15 +185,22 @@ BOOL updatecamera; void postappdefined (void) { - NSEvent ev; + NSEvent *ev; if (updateinflight) return; // post an event at the end of the que - ev.type = NS_APPDEFINED; - if (DPSPostEvent(&ev, 0) == -1) - printf ("WARNING: DPSPostEvent: full\n"); + ev = [NSEvent otherEventWithType: NSApplicationDefined + location: NSZeroPoint + modifierFlags: 0 + timestamp: [[NSDate date] timeIntervalSinceReferenceDate] + windowNumber: 0 + context: [NSApp context] + subtype: 0 + data1: 0 + data2: 0]; + [NSApp postEvent: ev atStart: NO]; //printf ("posted\n"); updateinflight = YES; } @@ -237,44 +269,44 @@ instance draw the brush after each flush { [super flushWindow]; - if (!running || in_error) + if (!running) return self; // don't lock focus before nib is finished loading - if (_flushDisabled) - return self; + //if (_flushDisabled) + // return self; [cameraview_i lockFocus]; if (clearinstance) { - PSnewinstance (); + //XXX PSnewinstance (); clearinstance = NO; } - PSsetinstance (1); + //XXX PSsetinstance (1); linestart (0,0,0); [map_i makeSelectedPerform: @selector(CameraDrawSelf)]; [clipper_i cameraDrawSelf]; lineflush (); - PSsetinstance (0); + //XXX PSsetinstance (0); [cameraview_i unlockFocus]; [xyview_i lockFocus]; - PSsetinstance (1); + //XXX PSsetinstance (1); linestart (0,0,0); [map_i makeSelectedPerform: @selector(XYDrawSelf)]; lineflush (); [cameraview_i XYDrawSelf]; [zview_i XYDrawSelf]; [clipper_i XYDrawSelf]; - PSsetinstance (0); + //XXX PSsetinstance (0); [xyview_i unlockFocus]; [zview_i lockFocus]; - PSsetinstance (1); + //XXX PSsetinstance (1); [map_i makeSelectedPerform: @selector(ZDrawSelf)]; [cameraview_i ZDrawSelf]; [clipper_i ZDrawSelf]; - PSsetinstance (0); + //XXX PSsetinstance (0); [zview_i unlockFocus]; return self; @@ -291,14 +323,17 @@ App delegate methods - applicationDefined:(NSEvent *)theEvent { - NSEvent ev, *evp; + NSEvent *evp; updateinflight = NO; //printf ("serviced\n"); // update screen - evp = [NSApp peekNextEvent:-1 into:&ev]; + evp = [NSApp nextEventMatchingMask: NSAnyEventMask + untilDate: [NSDate distantPast] + inMode: NSEventTrackingRunLoopMode + dequeue: NO]; if (evp) { postappdefined(); @@ -322,7 +357,7 @@ App delegate methods updatecamera = updatexy = updatez = NO; - [self reenableFlushWindow]; + [self enableFlushWindow]; [self flushWindow]; // NSPing (); @@ -332,8 +367,8 @@ App delegate methods - appDidInit:sender { - NSScreen const *screens; - int screencount; + NSArray *screens; + NSScreen *scrn; running = YES; g_cmd_out_i = cmd_out_i; // for qprintf @@ -345,14 +380,16 @@ App delegate methods // scrollview and can't be // connected directly in IB - [self setFrameAutosaveName:"EditorWinFrame"]; + [self setFrameAutosaveName:@"EditorWinFrame"]; [self clear: self]; // go to my second monitor - [NSApp getScreens:&screens count:&screencount]; - if (screencount == 2) - [self moveTopLeftTo:0 : screens[1].screenBounds.size.height - screen:screens+1]; + screens = [NSScreen screens]; + if ([screens count] == 2) { + scrn = [screens objectAtIndex: 1]; + //XXX [self moveTopLeftTo:0 : [scrn frame].size.height + //XXX screen:scrn]; + } [self makeKeyAndOrderFront: self]; @@ -379,7 +416,7 @@ App delegate methods { char const *t; - t = [sender stringValue]; + t = [[sender stringValue] cString]; if (!strcmp (t, "texname")) { @@ -425,7 +462,7 @@ App delegate methods { NSRect sbounds; - [[xyview_i _super_view] getBounds: &sbounds]; + sbounds = [[xyview_i superview] bounds]; sbounds.origin.x += sbounds.size.width/2; sbounds.origin.y += sbounds.size.height/2; @@ -440,7 +477,7 @@ App delegate methods { NSRect sbounds; - [[xyview_i _super_view] getBounds: &sbounds]; + sbounds = [[xyview_i superview] bounds]; sbounds.origin.x += sbounds.size.width/2; sbounds.origin.y += sbounds.size.height/2; @@ -529,7 +566,7 @@ applyRegion: NSRect bounds; // get xy size - [[xyview_i _super_view] getBounds: &bounds]; + bounds = [[xyview_i superview] bounds]; region_min[0] = bounds.origin.x; region_min[1] = bounds.origin.y; @@ -624,7 +661,7 @@ saveBSP if ([regionbutton_i intValue]) { strcpy (mappath, filename); - StripExtension (mappath); + //XXX StripExtension (mappath); strcat (mappath, ".reg"); [map_i writeMapFile: mappath useRegion: YES]; wt = YES; // allways pop the dialog on region ops @@ -646,7 +683,7 @@ saveBSP strcpy (bsppath, destdir); strcat (bsppath, "/"); - ExtractFileBase (mappath, bsppath + strlen(bsppath)); + //XXX ExtractFileBase (mappath, bsppath + strlen(bsppath)); strcat (bsppath, ".bsp"); ExpandCommand (cmdline, expandedcmd, mappath, bsppath); @@ -666,16 +703,16 @@ saveBSP { id panel; - panel = NSGetAlertPanel("BSP In Progress",expandedcmd,NULL,NULL,NULL); + panel = NSGetAlertPanel(@"BSP In Progress",[NSString stringWithCString:expandedcmd],NULL,NULL,NULL); [panel makeKeyAndOrderFront:NULL]; system(expandedcmd); - NSFreeAlertPanel(panel); + [panel release]; [self makeKeyAndOrderFront:NULL]; DisplayCmdOutput (); } else { - cmdte = DPSAddTimedEntry(1, CheckCmdDone, self, NS_BASETHRESHOLD); + //cmdte = DPSAddTimedEntry(1, CheckCmdDone, self, NS_BASETHRESHOLD); if (! (bsppid = fork ()) ) { system (expandedcmd); @@ -726,7 +763,7 @@ saveBSP } kill (bsppid, 9); - CheckCmdDone (cmdte, 0, NULL); + //CheckCmdDone (cmdte, 0, NULL); [project_i addToOutput: "\n\n========= STOPPED =========\n\n"]; return self; @@ -748,7 +785,7 @@ Called by open or the project panel [map_i readMapFile:filename]; [regionbutton_i setIntValue: 0]; - [self setTitleAsFilename:fname]; + [self setTitleWithRepresentedFilename:[NSString stringWithCString:fname]]; [self updateAll]; qprintf ("%s loaded\n", fname); @@ -765,17 +802,17 @@ open - open: sender; { id openpanel; - static char *suffixlist[] = {"map", 0}; + NSString *suffixlist[] = {@"map"}; - openpanel = [OpenPanel new]; + openpanel = [NSOpenPanel new]; if ( [openpanel - runModalForDirectory: [project_i getMapDirectory] - file: "" - types: suffixlist] != NS_OKTAG) + runModalForDirectory: [NSString stringWithCString:[project_i getMapDirectory]] + file: @"" + types: [NSArray arrayWithObjects:suffixlist count:1]] != NSOKButton) return self; - [self doOpen: (char *)[openpanel filename]]; + [self doOpen: (char *)[[openpanel filename] cString]]; return self; } @@ -797,7 +834,7 @@ save: dirty = autodirty = NO; strcpy (backup, filename); - StripExtension (backup); + //XXX StripExtension (backup); strcat (backup, ".bak"); rename (filename, backup); // copy old to .bak @@ -817,15 +854,15 @@ saveAs id panel_i; char dir[1024]; - panel_i = [SavePanel new]; - ExtractFileBase (filename, dir); - [panel_i setRequiredFileType: "map"]; - if ( [panel_i runModalForDirectory:[project_i getMapDirectory] file: dir] != NS_OKTAG) + panel_i = [NSSavePanel new]; + //XXX ExtractFileBase (filename, dir); + [panel_i setRequiredFileType: @"map"]; + if ( [panel_i runModalForDirectory:[NSString stringWithCString:[project_i getMapDirectory]] file: [NSString stringWithCString:dir]] != NSOKButton) return self; - strcpy (filename, [panel_i filename]); + strcpy (filename, [[panel_i filename] cString]); - [self setTitleAsFilename:filename]; + [self setTitleWithRepresentedFilename:[NSString stringWithCString:filename]]; [self save: self]; @@ -855,7 +892,7 @@ saveAs if ([clipper_i hide]) // first click hides only the clipper return [self updateAll]; - [map_i setCurrentEntity: [map_i objectAt: 0]]; // make world selected + [map_i setCurrentEntity: [map_i objectAtIndex: 0]]; // make world selected [map_i makeSelectedPerform: @selector(deselect)]; [self updateAll]; @@ -879,7 +916,7 @@ keyDown int ch; // function keys - switch (theEvent->data.key.keyCode) + switch ([theEvent keyCode]) { case 60: // F2 [cameraview_i setDrawMode: dr_wire]; @@ -924,7 +961,7 @@ keyDown } // portable things - ch = tolower(theEvent->data.key.charCode); + ch = tolower([[theEvent characters] cString][0]); switch (ch) { diff --git a/tools/Forge/Bundles/MapEdit/QuakeEd_main.m b/tools/Forge/Bundles/MapEdit/QuakeEd_main.m index c28b31ef8..85734b4a6 100644 --- a/tools/Forge/Bundles/MapEdit/QuakeEd_main.m +++ b/tools/Forge/Bundles/MapEdit/QuakeEd_main.m @@ -1,15 +1,7 @@ -/* Generated by the NeXT Project Builder - NOTE: Do NOT change this file -- Project Builder maintains it. -*/ +#include -#include - -void main(int argc, char *argv[]) { - - [Application new]; - if ([NSApp loadNibSection:"QuakeEd.nib" owner:NSApp withNames:NO]) - [NSApp run]; - - [NSApp free]; - exit(0); +int +main(int argc, const char *argv[]) +{ + return NSApplicationMain (argc, argv); } diff --git a/tools/Forge/Bundles/MapEdit/SetBrush.m b/tools/Forge/Bundles/MapEdit/SetBrush.m index 5a126983f..160da9323 100644 --- a/tools/Forge/Bundles/MapEdit/SetBrush.m +++ b/tools/Forge/Bundles/MapEdit/SetBrush.m @@ -6,6 +6,11 @@ #include "EntityClass.h" #include "Map.h" #include "Preferences.h" +#include "XYView.h" +#include "ZView.h" +#include "CameraView.h" +#include "Clipper.h" +#include "QuakeEd.h" @implementation SetBrush @@ -1091,7 +1096,7 @@ BOOL fakebrush; copy = [copy addFace: &face]; if (copy) { - [copy perform:call]; + [copy performSelector:call]; [copy dealloc]; } fakebrush = NO; @@ -1720,7 +1725,7 @@ id sb_newowner; parent = sb_newowner; // hack to allow them to be copied to another map - if ( [parent respondsTo:@selector(valueForQKey:)]) + if ( [parent respondsToSelector:@selector(valueForQKey:)]) { eclass = [entity_classes_i classForName: [parent valueForQKey: "classname"]]; c = [eclass drawColor]; diff --git a/tools/Forge/Bundles/MapEdit/Storage.h b/tools/Forge/Bundles/MapEdit/Storage.h new file mode 100644 index 000000000..1b7f0810e --- /dev/null +++ b/tools/Forge/Bundles/MapEdit/Storage.h @@ -0,0 +1,85 @@ +/* Interface for Objective C NeXT-compatible Storage object + Copyright (C) 1993,1994 Free Software Foundation, Inc. + + Written by: Kresten Krab Thorup + Dept. of Mathematics and Computer Science, Aalborg U., Denmark + + This file is part of the Gnustep Base Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +/****************************************************************** + TODO: + Does not implement methods for archiving itself. +******************************************************************/ + +#ifndef __Storage_h_INCLUDE_GNU +#define __Storage_h_INCLUDE_GNU + +#include + +@interface Storage : NSObject +{ +@public + void *dataPtr; /* data of the Storage object */ + const char *description; /* Element description */ + NSUInteger numElements; /* Actual number of elements */ + NSUInteger maxElements; /* Total allocated elements */ + NSUInteger elementSize; /* Element size */ +} + +/* Creating, freeing, initializing, and emptying */ + +- init; +- initCount:(NSUInteger)numSlots elementSize:(NSUInteger)sizeInBytes + description:(const char*)elemDesc; +- (void)dealloc; +- empty; +- copy; + +/* Manipulating the elements */ + +- (BOOL)isEqual: anObject; +- (const char *)description; +- (NSUInteger)count; +- (void *)elementAt:(NSUInteger)index; +- replaceElementAt:(NSUInteger)index with:(void *)anElement; +- setNumSlots:(NSUInteger)numSlots; +- setAvailableCapacity:(NSUInteger)numSlots; +- addElement:(void *)anElement; +- removeLastElement; +- insertElement:(void *)anElement at:(NSUInteger)index; +- removeElementAt:(NSUInteger)index; + +/* Archiving */ + +- write:(TypedStream *)stream; +- read:(TypedStream *)stream; + +/* old-style creation */ + ++ new; ++ newCount:(NSUInteger)count elementSize:(NSUInteger)sizeInBytes + description:(const char *)descriptor; + +@end + +typedef struct { + @defs(Storage) + } NXStorageId; + + +#endif /* __Storage_h_INCLUDE_GNU */ diff --git a/tools/Forge/Bundles/MapEdit/Storage.m b/tools/Forge/Bundles/MapEdit/Storage.m new file mode 100644 index 000000000..a109bf194 --- /dev/null +++ b/tools/Forge/Bundles/MapEdit/Storage.m @@ -0,0 +1,284 @@ +/* Implementation of Objective C NeXT-compatible Storage object + Copyright (C) 1993,1994, 1996 Free Software Foundation, Inc. + + Written by: Kresten Krab Thorup + Dept. of Mathematics and Computer Science, Aalborg U., Denmark + + This file is part of the GNUstep Base Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +/* #include */ +#include "Storage.h" +#include +#include + + +#define GNU_STORAGE_NTH(x,N) \ + ({ GNUStorageId* __s=(GNUStorageId*)(x); \ + (void*)(((char*)__s->dataPtr)+(__s->elementSize*(N))); }) +#define STORAGE_NTH(N) GNU_STORAGE_NTH (self, N) + +typedef struct { + @defs(Storage) +} GNUStorageId; + +@implementation Storage + ++ initialize +{ + if (self == [Storage class]) + [self setVersion:0]; /* beta release */ + return self; +} + +// INITIALIZING, FREEING; + +- initCount: (NSUInteger)numSlots + elementSize: (NSUInteger)sizeInBytes + description: (const char*)elemDesc; +{ + [super init]; + numElements = numSlots; + maxElements = (numSlots > 0) ? numSlots : 1; + elementSize = sizeInBytes; + description = elemDesc; + dataPtr = (void*) objc_malloc (maxElements * elementSize); + bzero(dataPtr, numElements * elementSize); + return self; +} + +- init +{ + return [self initCount:1 + elementSize:sizeof(id) + description:@encode(id)]; +} + + +- (void)dealloc +{ + if (dataPtr) + free(dataPtr); + [super dealloc]; +} + +- (const char*) description +{ + return description; +} + + +// COPYING; + +- copy +{ + Storage *c = [super copy]; + c->dataPtr = (void*) objc_malloc (maxElements * elementSize); + memcpy(c->dataPtr, dataPtr, numElements * elementSize); + return c; +} + +// COMPARING TWO STORAGES; + +- (BOOL)isEqual: anObject +{ + if ([anObject isKindOfClass: [Storage class]] + && [anObject count] == [self count] + && !memcmp(((GNUStorageId*)anObject)->dataPtr, + dataPtr, numElements*elementSize)) + return YES; + else + return NO; +} + +// MANAGING THE STORAGE CAPACITY; + +static inline void _makeRoomForAnotherIfNecessary(Storage *self) +{ + if (self->numElements == self->maxElements) + { + self->maxElements *= 2; + self->dataPtr = (void*) + objc_realloc (self->dataPtr, self->maxElements*self->elementSize); + } +} + +static inline void _shrinkIfDesired(Storage *self) +{ + if (self->numElements < (self->maxElements / 2)) + { + self->maxElements /= 2; + self->dataPtr = (void *) + objc_realloc (self->dataPtr, self->maxElements*self->elementSize); + } +} + +- setAvailableCapacity:(NSUInteger)numSlots +{ + if (numSlots > numElements) + { + maxElements = numSlots; + dataPtr = (void*) objc_realloc (dataPtr, maxElements * elementSize); + } + return self; +} + +- setNumSlots:(NSUInteger)numSlots +{ + if (numSlots > numElements) + { + maxElements = numSlots; + dataPtr = (void*) objc_realloc (dataPtr, maxElements * elementSize); + bzero(STORAGE_NTH(numElements), (maxElements-numElements)*elementSize); + } + else if (numSlots < numElements) + { + numElements = numSlots; + _shrinkIfDesired (self); + } + return self; +} + +/* Manipulating objects by index */ + +#define CHECK_INDEX(IND) if (IND >= numElements) return 0 + +- (NSUInteger) count +{ + return numElements; +} + +- (void*) elementAt: (NSUInteger)index +{ + CHECK_INDEX(index); + return STORAGE_NTH (index); +} + +- addElement: (void*)anElement +{ + _makeRoomForAnotherIfNecessary(self); + memcpy(STORAGE_NTH(numElements), anElement, elementSize); + numElements++; + return self; +} + +- insertElement: (void*)anElement at: (NSUInteger)index +{ + int i; + + CHECK_INDEX(index); + _makeRoomForAnotherIfNecessary(self); +#ifndef STABLE_MEMCPY + for (i = numElements; i >= index; i--) + memcpy (STORAGE_NTH(i+1), STORAGE_NTH(i), elementSize); +#else + memcpy (STORAGE_NTH (index+1), + STORAGE_NTH (index), + elementSize*(numElements-index)); +#endif + memcpy(STORAGE_NTH(i), anElement, elementSize); + numElements++; + return self; +} + +- removeElementAt: (NSUInteger)index +{ + int i; + + CHECK_INDEX(index); + numElements--; +#ifndef STABLE_MEMCPY + for (i = index; i < numElements; i++) + memcpy(STORAGE_NTH(i), + STORAGE_NTH(i+1), + elementSize); +#else + memcpy (STORAGE_NTH (index), + STORAGE_NTH (index+1), + elementSize*(numElements-index-1)); +#endif + _shrinkIfDesired(self); + return self; +} + +- removeLastElement +{ + if (numElements) + { + numElements--; + _shrinkIfDesired(self); + } + return self; +} + +- replaceElementAt:(NSUInteger)index with:(void*)newElement +{ + CHECK_INDEX(index); + memcpy(STORAGE_NTH(index), newElement, elementSize); + return self; +} + +/* Emptying the Storage */ + +- empty +{ + numElements = 0; + maxElements = 1; + dataPtr = (void*) objc_realloc (dataPtr, maxElements * elementSize); + return self; +} + +/* Archiving */ + +- write: (TypedStream*)aStream +{ + int i; + + [super write:aStream]; + objc_write_types(aStream, "III*", + &numElements, &maxElements, &elementSize, &description); + for (i = 0; i < numElements; i++) + objc_write_type(aStream, description, STORAGE_NTH(i)); + return self; +} + +- read: (TypedStream*)aStream +{ + int i; + + [super read:aStream]; + objc_read_types(aStream, "III*", + &numElements, &maxElements, &elementSize, &description); + dataPtr = (void*) objc_malloc (maxElements * elementSize); + for (i = 0; i < numElements; i++) + objc_read_type(aStream, description, STORAGE_NTH(i)); + return self; +} + ++ new +{ + return [[self alloc] init]; +} + ++ newCount:(NSUInteger)count elementSize:(NSUInteger)sizeInBytes + description:(const char *)descriptor +{ + return [[self alloc] initCount:count elementSize:sizeInBytes + description:descriptor]; +} + +@end diff --git a/tools/Forge/Bundles/MapEdit/TexturePalette.m b/tools/Forge/Bundles/MapEdit/TexturePalette.m index 647fd6494..d345de3dd 100644 --- a/tools/Forge/Bundles/MapEdit/TexturePalette.m +++ b/tools/Forge/Bundles/MapEdit/TexturePalette.m @@ -1,6 +1,17 @@ +#include + #include "QF/qendian.h" +#include "QF/quakeio.h" +#include "QF/sys.h" #include "TexturePalette.h" +#include "Preferences.h" +#include "Map.h" +#include "Entity.h" +#include "QuakeEd.h" +#include "SetBrush.h" + +#include "Storage.h" id texturepalette_i; @@ -101,18 +112,18 @@ void TEX_ImageFromMiptex (miptex_t *qtex) height = LittleLong(qtex->height); bm = [[NSBitmapImageRep alloc] - initData: NULL + initWithBitmapDataPlanes: NULL pixelsWide: width pixelsHigh: height bitsPerSample: 8 samplesPerPixel:3 hasAlpha: NO isPlanar: NO - colorSpace: NS_RGBColorSpace + colorSpaceName: NSCalibratedRGBColorSpace bytesPerRow: width*4 bitsPerPixel: 32]; - dest = (unsigned *)[bm data]; + dest = (unsigned *)[bm bitmapData]; count = width*height; source = (byte *)qtex + LittleLong(qtex->offsets[0]); @@ -176,6 +187,8 @@ void TEX_InitFromWad (char *path) lumpinfo_t *lumpinfo; int numlumps; float start, stop; + QFile *file; + size_t size; start = I_FloatTime (); @@ -185,21 +198,25 @@ void TEX_InitFromWad (char *path) // free any textures for (i=0 ; inumlumps); @@ -208,7 +225,7 @@ void TEX_InitFromWad (char *path) if (strcmp (lumpinfo->name, "PALETTE")) { unlink (local); - Error ("TEX_InitFromWad: %s doesn't have palette as 0",path); + Sys_Error ("TEX_InitFromWad: %s doesn't have palette as 0",path); } TEX_InitPalette (wadfile + LittleLong(lumpinfo->filepos)); @@ -217,8 +234,8 @@ void TEX_InitFromWad (char *path) for (i=1 ; itype != TYP_MIPTEX) - Error ("TEX_InitFromWad: %s is not a miptex!",lumpinfo->name); - CleanupName (lumpinfo->name,qtextures[tex_count].name); + Sys_Error ("TEX_InitFromWad: %s is not a miptex!",lumpinfo->name); + //XXX CleanupName (lumpinfo->name,qtextures[tex_count].name); TEX_ImageFromMiptex ( (miptex_t *)(wadfile + LittleLong(lumpinfo->filepos) )); } @@ -237,11 +254,11 @@ TEX_NumForName */ qtexture_t *TEX_ForName (char *name) { - char newname[16]; + //XXX char newname[16]; int i; qtexture_t *q; - CleanupName (name, newname); + //XXX CleanupName (name, newname); for (i=0,q = qtextures ; i< tex_count ; i++, q++) { @@ -266,10 +283,9 @@ qtexture_t *TEX_ForName (char *name) return self; } -- display +- (void)display { [[textureView_i superview] display]; - return self; } @@ -384,7 +400,7 @@ qtexture_t *TEX_ForName (char *name) x = TEX_INDENT; view = [textureView_i superview]; - [view getBounds:&b]; + b = [view bounds]; maxwidth = b.size.width; for (i = 0;i < max; i++) @@ -407,9 +423,9 @@ qtexture_t *TEX_ForName (char *name) viewWidth = maxwidth; viewHeight = y + TEX_SPACING; - [textureView_i sizeTo:viewWidth :viewHeight]; + [textureView_i setBoundsSize:NSMakeSize (viewWidth, viewHeight)]; pt.x = pt.y = 0; - [textureView_i scrollPoint:&pt]; + [textureView_i scrollPoint:pt]; return self; } @@ -471,11 +487,11 @@ qtexture_t *TEX_ForName (char *name) r.size.height += TEX_INDENT*2; r.origin.x -= TEX_INDENT; r.origin.y -= TEX_INDENT; - [textureView_i scrollRectToVisible:&r]; + [textureView_i scrollRectToVisible:r]; [textureView_i display]; sprintf(string,"%d x %d",(int)t->r.size.width, (int)t->r.size.height - TEX_SPACING); - [sizeField_i setStringValue:string]; + [sizeField_i setStringValue:[NSString stringWithCString:string]]; } [self texturedefChanged:self]; @@ -528,7 +544,7 @@ qtexture_t *TEX_ForName (char *name) int max; max = [textureList_i count]; - CleanupName(name,name); + //XXX CleanupName(name,name); for (i = 0;i < max;i++) { t = [textureList_i elementAt:i]; @@ -556,7 +572,7 @@ qtexture_t *TEX_ForName (char *name) int i; int max; int len; - char name[32]; + char name[32], *n; texpal_t *t; if (selectedTexture == -1) @@ -564,7 +580,9 @@ qtexture_t *TEX_ForName (char *name) max = [textureList_i count]; strcpy(name,(const char *)[sender stringValue]); - [sender setStringValue:strupr(name)]; + for (n = name; *n; n++) + *n = toupper (*n); + [sender setStringValue:[NSString stringWithCString:name]]; len = strlen(name); for (i = selectedTexture-1;i >= 0; i--) @@ -779,11 +797,11 @@ qtexture_t *TEX_ForName (char *name) for (i = 0;i < max; i++) [self setDisplayFlag:i to:0]; - brushes = [map_i objectAt:0]; + brushes = [map_i objectAtIndex:0]; max = [brushes count]; for (i = 0;i < max; i++) { - b = (SetBrush *)[brushes objectAt:i]; + b = (SetBrush *)[brushes objectAtIndex:i]; numfaces = [b getNumBrushFaces]; for (j = 0; j < numfaces; j++) { diff --git a/tools/Forge/Bundles/MapEdit/TextureView.h b/tools/Forge/Bundles/MapEdit/TextureView.h index 17400ebed..46b5e49fe 100644 --- a/tools/Forge/Bundles/MapEdit/TextureView.h +++ b/tools/Forge/Bundles/MapEdit/TextureView.h @@ -1,6 +1,8 @@ #ifndef TextureView_h #define TextureView_h +#include + @interface TextureView:NSView { id parent_i; diff --git a/tools/Forge/Bundles/MapEdit/TextureView.m b/tools/Forge/Bundles/MapEdit/TextureView.m index 57db12be3..f982bf12b 100644 --- a/tools/Forge/Bundles/MapEdit/TextureView.m +++ b/tools/Forge/Bundles/MapEdit/TextureView.m @@ -1,5 +1,9 @@ -#include "qedefs.h" +#include "KeypairView.h" +#include "TextureView.h" +#include "TexturePalette.h" + +#include "Storage.h" /* @@ -40,10 +44,10 @@ NOTE: I am specifically not using cached image reps, because the data is also ne selected = [parent_i getSelectedTexture]; list_i = [parent_i getList]; - PSselectfont("Helvetica-Medium",FONTSIZE); + GSSetFont (DEFCTXT, [NSFont fontWithName:@"Helvetica-Medium" size:FONTSIZE]); PSrotate(0); - PSsetgray(NS_LTGRAY); + PSsetgray(NSLightGray); PSrectfill(rects->origin.x, rects->origin.y, rects->size.width, rects->size.height); @@ -59,12 +63,12 @@ NOTE: I am specifically not using cached image reps, because the data is also ne r.size.width += TEX_INDENT*2; r.size.height += TEX_INDENT*2; - PSsetgray(NSGrayComponent(NS_COLORLTGRAY)); + //XXX PSsetgray(NSGrayComponent(NS_COLORLTGRAY)); PSrectfill(r.origin.x, r.origin.y, r.size.width, r.size.height); p = t->r.origin; p.y += TEX_SPACING; - [t->image drawAt:&p]; + [t->image drawAtPoint:p fromRect:r operation:NSCompositeCopy fraction:1.0]; PSsetgray(0); x = t->r.origin.x; y = t->r.origin.y + 7; @@ -84,7 +88,7 @@ NOTE: I am specifically not using cached image reps, because the data is also ne r.origin.x -= TEX_INDENT/2; r.size.width += TEX_INDENT; r.origin.y += 4; - if (NSIntersectsRect(&rects[0],&r) == YES && + if (NSIntersectsRect(rects[0],r) == YES && t->display) { if (selected == i) @@ -100,7 +104,7 @@ NOTE: I am specifically not using cached image reps, because the data is also ne p = t->r.origin; p.y += TEX_SPACING; - [t->image drawAt:&p]; + [t->image drawAtPoint:p fromRect:r operation:NSCompositeCopy fraction:1.0]; x = t->r.origin.x; y = t->r.origin.y + 7; PSmoveto(x,y); @@ -122,14 +126,14 @@ NOTE: I am specifically not using cached image reps, because the data is also ne NSPoint loc; int i; int max; - int oldwindowmask; + //int oldwindowmask; texpal_t *t; id list; NSRect r; - oldwindowmask = [window addToEventMask:NS_LMOUSEDRAGGEDMASK]; - loc = theEvent->location; - [self convertPoint:&loc fromView:NULL]; + //oldwindowmask = [window addToEventMask:NSLeftMouseDraggedMask]; + loc = [theEvent locationInWindow]; + [self convertPoint:loc fromView:NULL]; list = [parent_i getList]; max = [list count]; @@ -137,7 +141,7 @@ NOTE: I am specifically not using cached image reps, because the data is also ne { t = [list elementAt:i]; r = t->r; - if (NSPointInRect(&loc,&r) == YES) + if (NSPointInRect(loc,r) == YES) { [self deselect]; [parent_i setSelectedTexture:i]; @@ -145,7 +149,7 @@ NOTE: I am specifically not using cached image reps, because the data is also ne } } - [window setEventMask:oldwindowmask]; + //[window setEventMask:oldwindowmask]; return self; }