This is SqButton.m in view mode; [Download] [Up]
/******************************************************************************
FILE
SqButton.m
DESCRIPTION
NeXTstep user Interface for Squeak.
This class reifies a Smalltalk mouse button.
AUTHOR
<PJB> Pascal J. Bourguignon
MODIFICATIONS
1998/06/25 <PJB> Creation .
LEGAL
Copyright Pascal J. Bourguignon 1998 - 1998
This program is free software; you can redistribute it and/or
modify it under the terms of the version 2 of the GNU General Public
License as published by the Free Software Foundation.
This program 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 General Public License
hereafter for more details.
******************************************************************************/
#import "SqButton.h"
// ------------------------------------------------------------------------- //
@interface SqButton(Private)
-(void)setMask:(int)newMask;
-(void)updateTeam;
@end //SqButton(Private).
// ------------------------------------------------------------------------- //
@implementation SqButton(Private)
-(void)setMask:(int)newMask
{
if(mask!=newMask){
mask=flags|newMask;
[nextButton setMask:mask];
}
}//setMask:;
-(void)updateTeam
{
mask=flags;
[nextButton setMask:mask];
}//updateTeam;
@end //SqButton(Private).
// ------------------------------------------------------------------------- //
@implementation SqButton
static struct {
SEL needer;
char code;
} Needers[7];
+initialize
{
int i=0;
Needers[i].needer=@selector(needsLeftMouse);
Needers[i].code='l';
i++;
Needers[i].needer=@selector(needsRightMouse);
Needers[i].code='r';
i++;
Needers[i].needer=@selector(needsCommand);
Needers[i].code='m';
i++;
Needers[i].needer=@selector(needsAlternate);
Needers[i].code='a';
i++;
Needers[i].needer=@selector(needsControl);
Needers[i].code='c';
i++;
Needers[i].needer=@selector(needsShift);
Needers[i].code='s';
i++;
Needers[i].needer=0;
Needers[i].code='\0';
i++;
return(self);
}//initialize;
-(id)init
{
self=[super init];
if(self!=0){
flags=0;
mask=0;
nextButton=0;
}
return(self);
}//init;
-(id)free
{
return([super free]);
}//free;
-(void)setNextButton:(SqButton*)next
{
nextButton=next;
}//setNextButton:;
-(BOOL)needsLeftMouse
{
return((flags&SqButton_LeftMouseEventFlag)!=0);
}//needsLeftMouse;
-(BOOL)needsRightMouse
{
return((flags&SqButton_RightMouseEventFlag)!=0);
}//needsRightMouse;
-(BOOL)needsCommand
{
return((flags&NX_COMMANDMASK)!=0);
}//needsCommand;
-(BOOL)needsAlternate
{
return((flags&NX_ALTERNATEMASK)!=0);
}//needsAlternate;
-(BOOL)needsControl
{
return((flags&NX_CONTROLMASK)!=0);
}//needsControl;
-(BOOL)needsShift
{
return((flags&NX_SHIFTMASK)!=0);
}//needsShift;
-(void)setNeedsLeftMouse:(BOOL)bit
{
if(bit){
flags|=SqButton_LeftMouseEventFlag;
}else{
flags&=(~SqButton_LeftMouseEventFlag);
}
[self updateTeam];
}//setNeedsLeftMouse:;
-(void)setNeedsRightMouse:(BOOL)bit
{
if(bit){
flags|=SqButton_RightMouseEventFlag;
}else{
flags&=(~SqButton_RightMouseEventFlag);
}
[self updateTeam];
}//setNeedsRightMouse:;
-(void)setNeedsCommand:(BOOL)bit
{
if(bit){
flags|=NX_COMMANDMASK;
}else{
flags&=(~NX_COMMANDMASK);
}
[self updateTeam];
}//setNeedsCommand:;
-(void)setNeedsAlternate:(BOOL)bit
{
if(bit){
flags|=NX_ALTERNATEMASK;
}else{
flags&=(~NX_ALTERNATEMASK);
}
[self updateTeam];
}//setNeedsAlternate:;
-(void)setNeedsControl:(BOOL)bit
{
if(bit){
flags|=NX_CONTROLMASK;
}else{
flags&=(~NX_CONTROLMASK);
}
[self updateTeam];
}//setNeedsControl:;
-(void)setNeedsShift:(BOOL)bit
{
if(bit){
flags|=NX_SHIFTMASK;
}else{
flags&=(~NX_SHIFTMASK);
}
[self updateTeam];
}//setNeedsShift:;
-(BOOL)isPressedWhen:(int)eventFlags
{
return((eventFlags&mask)==flags);
}//isPressedWhen:;
-(void)configureMatrix:(Matrix*)matrix
{
[[matrix findCellWithTag:0]setState:[self needsLeftMouse]?1:0];
[[matrix findCellWithTag:1]setState:[self needsRightMouse]?1:0];
[[matrix findCellWithTag:2]setState:[self needsCommand]?1:0];
[[matrix findCellWithTag:3]setState:[self needsAlternate]?1:0];
[[matrix findCellWithTag:4]setState:[self needsControl]?1:0];
[[matrix findCellWithTag:5]setState:[self needsShift]?1:0];
}//matrix;
-(void)takeFromMatrix:(Matrix*)matrix
{
[self setNeedsLeftMouse: [[matrix findCellWithTag:0]state]!=0];
[self setNeedsRightMouse:[[matrix findCellWithTag:1]state]!=0];
[self setNeedsCommand: [[matrix findCellWithTag:2]state]!=0];
[self setNeedsAlternate: [[matrix findCellWithTag:3]state]!=0];
[self setNeedsControl: [[matrix findCellWithTag:4]state]!=0];
[self setNeedsShift: [[matrix findCellWithTag:5]state]!=0];
[self updateTeam];
}//takeFromMatrix:;
-(const char*)stringConfiguration
{
int i=0,j=0;;
while(Needers[i].code!=0){
if([self perform:Needers[i].needer]){
configuration[j++]=Needers[i].code;
}
i++;
}
configuration[j++]='\0';
return(configuration);
}//stringConfiguration;
-(void)takeFromString:(const char*)string
{
int i=0;
flags=0;
while(string[i]!='\0'){
switch(string[i]){
case 'l':case 'L':
[self setNeedsLeftMouse:YES];
break;
case 'r':case 'R':
[self setNeedsRightMouse:YES];
break;
case 'm':case 'M':
[self setNeedsCommand:YES];
break;
case 'a':case 'A':
[self setNeedsAlternate:YES];
break;
case 'c':case 'C':
[self setNeedsControl:YES];
break;
case 's':case 'S':
[self setNeedsShift:YES];
break;
default:
break;
}
i++;
}
[self updateTeam];
}//takeFromString:;
@end // SqButton.
/*** SqButton.m / Thu Aug 27 23:20:21 MET 1998 / PJB ***/
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.