This is xmTextFieldCell.m in view mode; [Download] [Up]
/* WidgetSet category for TextFieldCell class
*
* Copyright (C) 1994, 1995 The Board of Trustees of
* The Leland Stanford Junior University. All Rights Reserved.
*
* Authors: Scott Francis, Paul Kunz, and Libing Wang
*
* This file is part of an Objective-C class library for X/Motif
*
* xmTextFieldCell.m,v 1.9 1995/04/22 23:12:48 pfkeb Exp
*/
#include "TextFieldCell.h"
#include "xtCell.h"
#include "Motif.h"
#include <Xm/TextF.h>
#include <Xm/Label.h>
#include "Text.h"
char *TextFieldCellInstanceName( void )
{
return "TextFieldCell";
}
static void
theCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
TextFieldCell *tfc = (TextFieldCell *) client_data;
XmAnyCallbackStruct *cb = (XmAnyCallbackStruct *) call_data;
switch (cb->reason) {
case XmCR_ACTIVATE:
[tfc sendAction];
break;
default:
}
return;
}
@implementation TextFieldCell(WidgetSet)
/* Private methods not declared in interface */
- _alignSelf
{
switch (cFlags1.alignment) {
case NX_LEFTALIGNED :
[self _setArg:XmNalignment to:XmALIGNMENT_BEGINNING];
break;
case NX_RIGHTALIGNED :
[self _setArg:XmNalignment to:XmALIGNMENT_END];
break;
case NX_CENTERED :
[self _setArg:XmNalignment to:XmALIGNMENT_CENTER];
break;
default:
break;
}
return self;
}
/* Public Methods */
- _init
{
// [super _init];
classname = xmTextFieldWidgetClass;
_isLabel = NO;
return self;
}
- _initAsLabel
{
instancename = TextFieldCellInstanceName();
classname = xmLabelWidgetClass;
_isLabel = YES;
return self;
}
- _setAsLabel:(BOOL)aFlag
{
_isLabel = aFlag;
return self;
}
- (const char *)_stringValue
{
char *temp;
if ( widgetid ) {
if ( _isLabel ) {
temp = (char *)[super stringValue];
} else {
XtVaGetValues(widgetid, XmNvalue, &temp, NULL);
}
} else {
temp = contents;
}
return ((temp) ? (temp) : "");
}
- _getSizeAdjust:(NXSize *)size
{
if ( _isLabel ) {
size->width = 0;
size->height = 0;
} else {
size->width = 4;
size->height = 4;
}
return self;
}
- _setStringValue
{
if ( contents ) {
if (_isLabel) {
// Note the following gave left aligned widget even when alignment
// was centered
// xs = XmStringCreateSimple(contents);
// [self _setArg:XmNlabelString to:(void *)xs];
// [self _alignSelf];
// So replaced it with this hack
if ( widgetid ) {
XtUnmanageChild((Widget) widgetid);
XtDestroyWidget((Widget) widgetid);
widgetid = NULL;
[self _managedBy:parentid];
}
} else {
[self _setArg:XmNvalue to:(XtArgVal)contents];
}
}
return self;
}
- _addCallback
{
if ( _isLabel ) {
return self;
}
XtAddCallback(widgetid, XmNactivateCallback, theCallback, self);
return self;
}
- _managedBy:parent
{
XmString xs;
[self _setArg:XmNmarginWidth to:0];
[self _setArg:XmNmarginHeight to:0];
if ( _isLabel ) {
xs = XmStringCreateSimple(contents);
[self _addArg:XmNlabelString:(XtArgVal)xs];
[self _alignSelf];
} else {
[self _addArg:XmNvalue :(XtArgVal)contents];
}
[super _managedBy:parent];
return self;
}
- _selectText
{
if (_isLabel)
return self;
XmTextFieldSetSelection(widgetid,
0, XmTextFieldGetLastPosition(widgetid), 0);
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.