// =========================================================================== // CSimlabEditListRec.cp // ©1995 J. Rodden, DD/MF & Associates. All rights reserved // =========================================================================== #include "RuntimeResources.h" #include "CSimlabEditListRec.h" #include const Boolean kEditFields = false; const short kTextHOffset = 7; const short kTextVOffset = 12; //---------------------------------------------------------------------------- // € CSimlabEditListRec //---------------------------------------------------------------------------- CSimlabEditListRec::CSimlabEditListRec( SimlabListTag inTag, ConstStr255Param inString) : CSimlabListRec(inTag,inString) { CopyPStr( "\p0", data); editField = nil; } //---------------------------------------------------------------------------- // € GetDescriptor //---------------------------------------------------------------------------- void CSimlabEditListRec::GetDescriptor(Str255 outDescriptor) { CSimlabListRec::GetDescriptor(outDescriptor); ConcatPStr( outDescriptor, "\p\t"); ConcatPStr( outDescriptor, data); } //---------------------------------------------------------------------------- // € Draw //---------------------------------------------------------------------------- void CSimlabEditListRec::Draw(Rect *lRect, Int32 inEditFieldPos) { Rect theRect = *lRect; if ( editField != nil ) theRect.right = inEditFieldPos; CSimlabListRec::Draw(&theRect); if ( editField != nil && editField->IsActive() ) { DrawEditField( inEditFieldPos, theRect.top); } else if ( inEditFieldPos != kNoEditField ) { ::MoveTo( inEditFieldPos + 3, theRect.top + kSimlabEditBoxTop + kSimlabEditBoxHeight - 3); short maxWidth = lRect->right - (inEditFieldPos + 3) - kTextSelSlop; short i; for ( i = data[0] ; i > 0 && ::TextWidth( data, 1, i) > maxWidth ; i-- ) ; ::DrawText( data, 1, i); } } //---------------------------------------------------------------------------- // € DrawEditField //---------------------------------------------------------------------------- void CSimlabEditListRec::DrawEditField( Int32 inLeftPos, Int32 inTopPos) { if ( editField != nil ) { editField->PlaceInSuperFrameAt( inLeftPos, inTopPos + kSimlabEditBoxTop, true); editField->Show(); } } //---------------------------------------------------------------------------- // € AttachEditField //---------------------------------------------------------------------------- void CSimlabEditListRec::AttachEditField(LEditField *inEditField) { editField = inEditField; editField->SetDescriptor(data); } //---------------------------------------------------------------------------- // € DetachEditField //---------------------------------------------------------------------------- void CSimlabEditListRec::DetachEditField() { if ( editField ) { editField->GetDescriptor(data); editField->Hide(); editField = nil; } }