This is Programm.m in view mode; [Download] [Up]
// Programm.m
// By Jayson Adams, NeXT Developer Support Team
// You may freely copy, distribute and reuse the code in this example.
// NeXT disclaims any warranty of any kind, expressed or implied, as to its
// fitness for any particular use.
// …nderungen för ModPlayer von Matthias Zepf, 1992
#import "Programm.h"
@implementation Programm:Object
- init:sender
{
NXRect winFrame;
MeineHerkunft = sender;
if(!MeinPrgNib)
MeinPrgNib = [NXApp loadNibLanguageFile:"Programm.nib"
owner:self withNames:NO];
[self createScrollingMatrix];
[MeinPrgPanel getFrame:&winFrame];
Breite = winFrame.size.width;
Hoehe = winFrame.size.height;
AnzahlMatrixFelder = 0;
return self;
}
- windowWillResize:sender toSize:(NXSize *)frameSize
{
if(frameSize->width < Breite)
frameSize->width = Breite;
if(frameSize->height < Hoehe)
frameSize->height = Hoehe;
return self;
}
- createScrollingMatrix
{
NXRect scrollRect, matrixRect;
NXSize interCellSpacing = {0.0, 0.0}, cellSize;
[MeinScrollView setBorderType:NX_BEZEL];
[MeinScrollView setVertScrollerRequired:YES];
[MeinScrollView setHorizScrollerRequired:NO];
[MeinScrollView getFrame:&scrollRect];
[ScrollView getContentSize:&(matrixRect.size)
forFrameSize:&(scrollRect.size)
horizScroller:NO
vertScroller:YES
borderType:NX_BEZEL];
MeineMatrix = [[NiftyMatrix alloc] initFrame:&matrixRect
mode:NX_LISTMODE
cellClass:[CustomCell class]
numRows:0
numCols:1];
[MeineMatrix setIntercell:&interCellSpacing];
[MeineMatrix getCellSize:&cellSize];
cellSize.width = NX_WIDTH(&matrixRect);
[MeineMatrix setCellSize:&cellSize];
[MeineMatrix sizeToCells];
[MeineMatrix setAutosizeCells:YES];
[MeineMatrix setAutoscroll:YES];
[MeinScrollView setDocView:MeineMatrix];
[[MeineMatrix superview] setAutoresizeSubviews:YES];
[MeineMatrix setAutosizing:NX_WIDTHSIZABLE];
[MeineMatrix setTarget:self];
return self;
}
- (BOOL)multipleCellsSelected
{
/* reset the counter */
selectedCount = 0;
/* get each selected cell to send the incrementCount method to us */
[MeineMatrix sendAction:@selector(incrementCount:) to:self forAllCells:NO];
/* if more than one, return true */
return (selectedCount > 1);
}
- (BOOL)incrementCount:sender
{
/*
* once the counter reaches two, we know that more than one cell's
* selected; if that's the case, return NO so that the matrix will
* discontinue having selected cells send incrementCount: to us
*/
return (++selectedCount < 2);
}
- zeigeProgrammFenster:sender
{
[MeinPrgPanel makeKeyAndOrderFront:self];
return self;
}
- mischenKlick:sender
{
int i, r;
long z;
id zelle;
if (AnzahlMatrixFelder > 1)
{
for (i = 0; i < AnzahlMatrixFelder - 1; i++)
{
z = random() % (long) (AnzahlMatrixFelder - i);
r = (int) z + i;
zelle = [MeineMatrix cellAt:r:0];
zelle = [MeineMatrix putCell:zelle at:i:0];
zelle = [MeineMatrix putCell:zelle at:r:0];
}
[MeineMatrix nummernAendern];
[MeineMatrix update];
}
return self;
}
- hinzufuegenKlick:sender
{
const char *const suffix[] = {"mod", "pp", "MOD", "PP", NULL};
const char *const *modname;
char pfad[4096];
id newCell;
id openPanel;
NXSize cellSize;
NXRect matrixRect, scrollRect;
openPanel = [OpenPanel new];
[openPanel setTitle:[MeineStringTab valueForStringKey:"ladenMod"]];
[openPanel allowMultipleFiles:YES];
if ([openPanel runModalForDirectory:[MeineHerkunft GibStdPfad]
file:NULL types:suffix] &&
(modname = [openPanel filenames]) != NULL)
{
while (*modname != NULL)
{
strcpy(pfad, [openPanel directory]);
strcat(pfad, "/");
strcat(pfad, *modname);
[MeineMatrix addRow];
newCell = [MeineMatrix cellAt:AnzahlMatrixFelder :0];
[newCell setTag:(AnzahlMatrixFelder + 1)];
[newCell setStringValue:pfad];
AnzahlMatrixFelder++;
modname++;
}
[MeinScrollView getFrame:&scrollRect];
[ScrollView getContentSize:&(matrixRect.size)
forFrameSize:&(scrollRect.size)
horizScroller:NO
vertScroller:YES
borderType:NX_BEZEL];
[MeineMatrix getCellSize:&cellSize];
cellSize.width = NX_WIDTH(&matrixRect);
[MeineMatrix setCellSize:&cellSize];
[MeineMatrix sizeToCells];
[MeineMatrix setAutosizeCells:YES];
[MeinScrollView update];
}
return self;
}
- (BOOL) entfernen:zelle
{
int r, c;
if ([MeineMatrix getRow: &r andCol: &c ofCell: zelle])
{
[zelle setTag:(-1)];
// [MeineMatrix removeRowAt:r andFree:YES];
// AnzahlMatrixFelder--;
}
return YES;
}
- entfernenKlick:sender
{
NXSize cellSize;
NXRect matrixRect, scrollRect;
int meinTag = 0, i = 0;
id zelle;
[MeineMatrix sendAction:@selector(entfernen:)
to:self forAllCells:NO];
while (i < AnzahlMatrixFelder)
{
zelle = [MeineMatrix cellAt:i:0];
meinTag = [zelle tag];
if (meinTag == -1)
{
[MeineMatrix removeRowAt:i andFree:YES];
AnzahlMatrixFelder--;
}
else
{
i++;
}
}
[MeinScrollView getFrame:&scrollRect];
[ScrollView getContentSize:&(matrixRect.size)
forFrameSize:&(scrollRect.size)
horizScroller:NO
vertScroller:YES
borderType:NX_BEZEL];
[MeineMatrix getCellSize:&cellSize];
cellSize.width = NX_WIDTH(&matrixRect);
[MeineMatrix setCellSize:&cellSize];
[MeineMatrix sizeToCells];
[MeineMatrix setAutosizeCells:YES];
[MeineMatrix nummernAendern];
[MeinScrollView update];
return self;
}
- (BOOL) prgSpeichern:sender //TODO
{
return NO;
}
- (BOOL) prgLaden:sender //TODO
{
return NO;
}
- (const char *) naechstesModule:(int) i
{
const char *mod;
if ((i <= AnzahlMatrixFelder) && (i > 0))
mod = [[MeineMatrix cellAt:i-1 :0] stringValue];
else
mod = NULL;
return mod;
}
@endThese are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.