This is PowerMenu.h in view mode; [Download] [Up]
#if !defined(PowerMenu_h_)
#define PowerMenu_h_
#import <objc/Object.h>
#import <appkit/Window.h>
#import <appkit/View.h>
#import <appkit/graphics.h>
#import <appkit/color.h>
#import <appkit/Font.h>
#import <appkit/ButtonCell.h>
#import <appkit/ActionCell.h>
#import <appkit/Text.h> // to get alignment defines
#define NX_BUTTONBUTTON 121212
@interface StupidBoxView : View
{
id contentView;
int border; // valid box or BUTTONBUTTON above
float edge; // for NXDrawTiledRects()
float hOffset, vOffset;
NXColor foregroundColor;
NXColor backgroundColor;
}
- init;
- initFrame:(const NXRect*)frameRect;
- drawSelf:(const NXRect*)r :(int)count;
- setContentView:nv;
- contentView;
- sizeToFit;
- setTitlePosition:(int)b;
- setBorderType:(int)b;
- setOffsets:(float)a :(float)b;
- adjustContentViewFrame:(NXRect*)r toView:v;
- setEdgeThickness:(float)e;
@end
#define MAXICONDIM 64
// something like XmGadget
@interface PowerMenuPrimitiveCell : ActionCell
{
float borderWidth;
BOOL sensitive;
BOOL isHighlighted;
NXColor bottomShadowColor;
NXColor highlightColor;
float highlightThickness;
float shadowThickness;
NXColor topShadowColor;
}
- init;
- computeColors:(NXColor)newBackgroundColor;
// does both highlighting via NXFrameRect() and shadows
- drawInside:(const NXRect*)cellFrame inView:aView;
- drawShadow:(const NXRect*)cellFrame inView:aView;
- drawHighlight:(const NXRect*)cellFrame inView:aView;
- drawSelf:(const NXRect*)cellFrame inView:aView;
- setSensitive:(BOOL)f;
- (BOOL)sensitive;
- (BOOL)isSensitive;
- setEnabled:(BOOL)f; // same as setSensitive
- (BOOL)isEnabled;
- highlight;
- unhighlight;
- setIsHighlighted:(BOOL)f;
- (BOOL)isHighlighted;
- highlight:(const NXRect *)cellFrame inView:controlView lit:(BOOL)flag;
- setBottomShadowColor:(NXColor)c;
- (NXColor)bottomShadowColor;
- setTopShadowColor:(NXColor)c;
- (NXColor)topShadowColor;
- setShadowThickness:(float)sst;
- (float)shadowThickness;
- setHighlightThickness:(float)sht;
- (float)highlightThickness;
- setBorderWidth:(float)bw;
- (float)borderWidth;
@end
#define NX_ARROW_UP 0
#define NX_ARROW_DOWN 1
#define NX_ARROW_LEFT 2
#define NX_ARROW_RIGHT 3
@interface PowerMenuArrowCell : PowerMenuPrimitiveCell
{
int arrowDirection;
}
+ newUpArrow;
+ newUpArrowFromZone:(NXZone*)z;
+ newDownArrow;
+ newDownArrowFromZone:(NXZone*)z;
+ newLeftArrow;
+ newLeftArrowFromZone:(NXZone*)z;
+ newRightArrow;
+ newRightArrowFromZone:(NXZone*)z;
- init;
- setDirection:(int)newDir;
- drawInside:(const NXRect*)cellFrame inView:aView;
@end
@interface PowerMenuLabelCell : PowerMenuPrimitiveCell
{
char *accelerator;
char *label;
// some stuff for handling the display of the label
float marginBottom;
float marginHeight;
float marginTop;
float marginLeft;
float marginRight;
float marginWidth;
Font *font;
}
- init;
- setLabelString:(char*)newLabel;
- drawLabel:(const NXRect*)cellFrame inView:aView;
- drawInside:(const NXRect*)cellFrame inView:aView;
- drawShadow:(const NXRect*)cellFrame inView:aView;
- drawHighlight:(const NXRect*)cellFrame inView:aView;
- (const char*)label;
- free;
- setFont:font;
- font;
- getTitleRect:(NXRect*)r;
- getDrawRect:(NXRect*)r;
@end
@interface PowerMenuPushButtonCell : PowerMenuLabelCell
{
id _target;
SEL _msg;
}
- init;
- setTarget:t;
- target;
- setAction:(SEL)msg;
- (SEL)action;
- drawInside:(const NXRect*)cellFrame inView:aView;
@end
// assumes flipped view for drawing
@interface PowerMenuCell : PowerMenuPushButtonCell
{
float height;
int seqNum;
BOOL active;
BOOL displayable;
NXColor inactiveForegroundColor;
char *shortcut;
BOOL isSeparator;
BOOL alwaysDisplayWithForeground;
int alignment;
float pretendIconDim; // for good alignment
id submenu;
id icon;
int mappingDelay;
}
+ initialize;
- setAssumeIconDim:(float)f;
- setBezeled:(BOOL)f; // not allowed
- setBordered:(BOOL)f; // not allowed
- setSeparator:(BOOL)f;
- (BOOL)isSeparator;
- init;
- setLabel:(const char*)l;
- setIcon:(const char*)iconName;
- (const char*)title;
- free;
- (const char*)icon;
- submenu;
- setSubmenu:s;
- (BOOL)hasSubmenu;
- (BOOL)hasIcon;
- (const char*)label;
- (const char*)title;
- calcCellSize:(NXSize*)s;
- getPullmenuArrowRect:(NXRect*)r;
- getDrawRect:(NXRect*)r;
- getTitleRect:(NXRect*)r;
- getIconRect:(NXRect*)r;
- drawInside:(const NXRect *)cellFrame inView:controlView;
- drawLabel:(const NXRect*)cellFrame inView:aView; // override
- drawSelf:(const NXRect*)cellFrame inView:aView;
- titleOnly; // for text, but not a menu option
- blank; // for space in your menu
- separator; // only draws a solid line
@end
@interface PowerMenuCascadeCell : PowerMenuCell
{
id cascadeIcon;
NXSize cascadeIconSize;
//float mappingDelay;
}
- init;
- drawInside:(const NXRect*)cellFrame inView:aView;
- drawCascadeIcon:(const NXRect*)cellFrame inView:aView;
- setCascadeIcon:newIcon;
- calcCellSize:(NXSize*)s;
@end
@interface CoreView : View
{
NXColor backgroundColor;
NXColor borderColor;
float borderWidth;
BOOL sensitive;
}
- initFrame:(const NXRect*)r;
- setBorderWidth:(float)f;
- (float)borderWidth;
- setBackgroundColor:(NXColor)fc;
- (NXColor)backgroundColor;
- setSensitive:(BOOL)f;
- (BOOL)sensitive;
- (BOOL)isSensitive;
@end
@interface PrimitiveView : CoreView
{
NXColor bottomShadowColor;
NXColor foregroundColor;
NXColor highlightColor;
float highlightThickness;
float shadowThickness;
NXColor topShadowColor;
}
- initFrame:(const NXRect*)r;
- drawSelf:(const NXRect*)r :(int)c;
- computeColors:(NXColor)newBackgroundColor;
- setForegroundColor:(NXColor)fc;
- (NXColor)foregroundColor;
- setShadowThickness:(float)sst;
- (float)shadowThickness;
- setHighlightThickness:(float)sht;
- (float)highlightThickness;
@end
@interface PowerMenu : Window
{
BOOL inited;
id view;
id matrix; // really the PowerMenuView
id boxView;
Window *window; // really just self, old code needs it
float defaultCellWidth;
float defaultCellHeight;
id defaultTarget;
SEL defaultMsg;
id attachedMenu; // used during mouse navigation
id supermenu; // if nil then root menu, else submenu to some menu
int lastrow;
int lastItem;
BOOL shouldLoop;
int lastSelection;
BOOL cellsAreDirty;
BOOL cellsNeedDisplay;
NXPoint popupPoint;
}
+ newPopupMenu;
+ newPopupMenuFromZone:(NXZone*)zone;
+ newSubmenuOf:theSupermenu attachToCell:(int)cellIndex;
+ newSubmenuOf:theSupermenu attachToCell:(int)cellIndex fromZone:(NXZone*)zone;
- setDefaultAction:(SEL)msg;
- setDefaultTarget:t;
- setTarget:t;
- selectionAt:(int)index; // returns a menu cell
- addSelectionAt:(int)index;
- addCascadeSelectionAt:(int)index;
- (Font*)defaultFont;
- init;
- window;
- popUp:senderView; // should be view where mouse action occurred
- popDown:sender;
- setMenuPopupPoint:(const NXPoint*)p;
- setMenuCellClass:newClass;
- recache;
- dump;
- defaultTarget;
- (SEL)defaultAction;
- cellAt:(int)row :(int)col;
- getLocation:(NXPoint *)theLocation forSubmenu:aSubmenu;;
- (BOOL)trackMouse:(NXPoint*)viewPoint ofView: aView;
- (BOOL)rightMouseUp:(NXPoint*)viewPoint ofView:aView;
- getLocation:(NXPoint *)theLocation forSubmenu:aSubmenu;
- setSupermenu:sm;
- supermenu;
- addSubmenu:sm toSelection:(int)i;
@end
// This will mostly act like a matrix
@interface PowerMenuView : PrimitiveView
{
id menu;
float minimumMenuHeight;
float minimumMenuWidth;
float pullmenuIconWidth;
BOOL drawButtonBorder;
float *topOfCells; // a cache for speedy mouse ops
PowerMenuCell **cells;
int numCells;
id menuCellClass;
id cascadeMenuCellClass;
float defaultCellWidth;
float defaultCellHeight;
id defaultTarget;
SEL defaultMsg;
Font *defaultFont;
BOOL cellsAreDirty;
int selectedCol;
int selectedRow;
id selectedCell;
}
- defaultFont;
- recache;
- setMenuCellClass:newClass;
- setCascadeMenuCellClass:newClass;
- addCascadeSelectionAt:(int)index;
- addSelectionAt:(int)index;
- makeCellAt:(int)row :(int)col;
- selectedCell;
- selectCellAt:(int)row :(int)col;
- selectCell:c;
- initFrame:(const NXRect*)r;
- drawSelf:(const NXRect*)r :(int)c;
- setMenu:m;
- menu;
- highlightCellAt:(int)r :(int)c lit:(BOOL)f;
- getCellFrame:(NXRect*)rect at:(int)r :(int)c;
- sizeToFit;
- sizeToCells;
- getRow:(int *)row andCol:(int *)col ofCell:aCell;
- getRow:(int *)row andCol:(int *)col forPoint:(const NXPoint *)aPoint;
- cellAt:(int)row :(int)col;
@end
@interface PowerMenuBar : PrimitiveView
{
id cell; // the title cell
NXRect cellRect;
}
- initFrame:(const NXRect*)r;
- drawSelf:(const NXRect*)r :(int)c;
- mouseDown:(NXEvent*)e;
- setCell:newCell;
- cell;
@end
#endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.