This is WidePopupManager.h in view mode; [Download] [Up]
{\rtf0\ansi{\fonttbl\f0\fmodern Courier;\f1\ftech Symbol;\f2\fmodern Ohlfs;}
\margl40
\margr40
{\colortbl;\red0\green0\blue0;}
\pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b0\i0\ulnone\fs24\fc0\cf0 //ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
//
\i
\b FILENAME
\b0 :
\b\i0 WidePopupManager.h\
\b0 //
\i
\b SUMMARY
\b0 :
\b\i0 Header for an AndrewStone
\f1\b0 Ô
\f0\b PopUp Hack
\b0 \
//
\b\i SUPERCLASS
\b0 :
\i0
\b Object:WidePopupManager
\b0 \
//
\b\i PROTOCOLS
\b0 :
\i0
\b None
\b0 \
//
\b\i INTERFACE
\b0 :
\i0
\b None
\b0 \
//
\b\i AUTHOR
\b0 :
\b\i0 Andrew Stone & Charles Perkins
\b0 \
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
//
\b\i Description\
\b0\i0\fc1\cf1 // > 2) How can I make the pop-up list resize to the longest string in the\
// > list? I have tried various combinations of sizeToFit to both the\
// > pop-up list and the button, but none give the desired results.\
// \
// Charles Perkins and I wrote a hack to do this [IE, when it's not popped,\
// it's a certain fixed size in your UI, but when it's popped, it sizes to\
// the widest entry] by creating a class which goes between the button and\
// the pop up list as manager, and munges the frame of the Menu before it\
// shows itself.\
//\
// Here's how you'd invoke it:\
// \
// - initializeFindButton:theButton\
// \{ \
// NXAttachPopUpList(theButton,findPopUp);\
// [[WidePopupManager allocFromZone:[theButton \
// zone]]initForButton:theButton andList:findPopUp];\
// .....\
// \}\
\fc0\cf0 //ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
//
\b\i History
\b0\i0 \
// 09/27/94:
\b Snarfed from mlist.next-programmer archives.
\b0 \
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
//
\b Imported Interfaces
\b0 \
//\
#import <appkit/
\b appkit.h
\b0 >\
\i \
/*************************************************************************\
* Copyright (c) 1989,1990 Stone Design Corp. All rights reserved. \
* programmer: Andrew C. Stone/ Charles L. Perkins \
* Date: Feb 2 1992 \
* Purpose: To fool a popup into being wider than normal as needed \
***************************************************************************/\
\
@interface WidePopupManager:Object
\i0 \{\
id
\b button
\b0 ;\
id
\b popupList
\b0 ;\
\}\
\
-
\b initForButton
\b0 :aButton
\b andList
\b0 :aPopupList;\
-
\b popUp
\b0 :sender;\
\
\i @end\
\i0 \
\i @implementation WidePopupManager\
\i0 \
-
\b initForButton
\b0 :aButton
\b andList
\b0 :aPopupList\
\{\
button = aButton;\
popupList = aPopupList;\
\
[popupList sizeToFit]; \
\
[button setAction:@selector(popUp:)];\
[button setTarget:self];\
\
return self;\
\}\
\
//ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ\
//
\b The Fake-Out Stuff
\b0 \
//\
\
-
\b popUp
\b0 :sender\
\{\
return [popupList popUp: self]; // we are the surrogate button\
\}\
\
\
-
\b getBounds
\b0 :(NXRect *)theRect\
\{ /* so we have the correct width */\
NXRect popupFrame;\
\
[popupList getFrame: &popupFrame];\
[button getBounds: theRect];\
if (theRect->size.width < popupFrame.size.width - 1)\
theRect->size.width = popupFrame.size.width - 1; \
return self;\
\}\
\
//
\i this and next 4 messages so we can masquerade as Button to PopUpList\
\i0 -
\b convertPoint
\b0 :(NXPoint *)aPoint
\b toView
\b0 :aView\
\{\
return [button convertPoint:aPoint toView:aView];\
\} \
\
-
\b window
\b0 \
\{\
return [button window];\
\}\
\
-
\b display
\b0 \
\{\
return [button display];\
\}\
\
- (BOOL)
\b needsDisplay
\b0 \
\{\
return [button needsDisplay];\
\}\
\
- (const char *)
\b title
\b0 \
\{\
return [button title];\
\}\
\
-
\b setTitle
\b0 :(const char *)aString\
\{\
[button setTitle: aString];\
return self;\
\}\
\
\i @end
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.