Discussion:
Creating an LTextButton
(too old to reply)
garg
2006-07-11 07:35:37 UTC
Permalink
Hello,

I'm trying to create an LTextButton and place it inside a specific
pane, after running the code the button doesn't appear

here's the code (the tmpBut->PutInside was omitted)

LStream* l = new LStream();

SPaneInfo paneInfo = {0, 115, 16, true, true, {0,0,0,0}, 14, 91 + 26 ,
0, FlowsScroller};

SControlInfo conInfo;
conInfo.valueMessage = kSwitch2Panel1;
conInfo.value = 0;
conInfo.minValue = 1; //?
conInfo.maxValue = 0; //?

ResIDT textTraitsID = Txtr_SystemFont;
SInt16 selectedStyle = bold || underline;
LStr255 lButText = "abcd";

l->WriteData(&paneInfo, sizeof(SPaneInfo));
l->WriteData(&conInfo, sizeof(SControlInfo));
l->WritePString(lButText);
l->WriteData(&textTraitsID, sizeof(ResIDT));
l->WriteData(&selectedStyle, sizeof(SInt16));

l->SetMarker(0, streamFrom_End);

LTextButton* tmpBut = new LTextButton(l);

I'm sure the problem is within the LStream, but couldn't figure out
what it is
I also tried creating the LTextButton using the default ctor and then
apply to it some attributes, but no luck there either

does anyone know how to solve this?

thanks in advance
Elad
David Phillip Oster
2006-07-11 14:35:51 UTC
Permalink
Post by garg
Hello,
I'm trying to create an LTextButton and place it inside a specific
pane, after running the code the button doesn't appear
here's the code (the tmpBut->PutInside was omitted)
LStream* l = new LStream();
SPaneInfo paneInfo = {0, 115, 16, true, true, {0,0,0,0}, 14, 91 + 26 ,
0, FlowsScroller};
SControlInfo conInfo;
conInfo.valueMessage = kSwitch2Panel1;
conInfo.value = 0;
conInfo.minValue = 1; //?
conInfo.maxValue = 0; //?
ResIDT textTraitsID = Txtr_SystemFont;
SInt16 selectedStyle = bold || underline;
LStr255 lButText = "abcd";
l->WriteData(&paneInfo, sizeof(SPaneInfo));
l->WriteData(&conInfo, sizeof(SControlInfo));
l->WritePString(lButText);
l->WriteData(&textTraitsID, sizeof(ResIDT));
l->WriteData(&selectedStyle, sizeof(SInt16));
l->SetMarker(0, streamFrom_End);
LTextButton* tmpBut = new LTextButton(l);
I'm sure the problem is within the LStream, but couldn't figure out
what it is
I also tried creating the LTextButton using the default ctor and then
apply to it some attributes, but no luck there either
does anyone know how to solve this?
thanks in advance
Elad
The easiest way is draw the button in Constructor in a separate
top-level view, then instantiate that view into your view. Here's a code
fragment from a working program:

/* CreateSubPane -
installs the pane verticaly after its predecessors, and visually
moves
those that follow it down to make room.
*/
LPane* CViewColumn::CreateSubPane(SInt32 index, ResIDT inPPobID, Boolean
inRefresh){
SetDefaultAttachable(NULL);

void *valp = NULL;
LPane *pane;
LPane *pIth;
SInt32 height;
SDimension16 dim;
SDimension32 mySize;
LCommander* saveCommander;

saveCommander = LCommander::GetDefaultCommander();
try{
valp = UReanimator::ReadObjects('PPob', inPPobID);
}catch(LException &err){
LCommander::SetDefaultCommander(saveCommander);
throw;
}
LCommander::SetDefaultCommander(saveCommander);
pane = reinterpret_cast<LPane*>(valp);
pane = dynamic_cast<LPane*>(pane);

Assert_(pane);
ThrowIfNil_(pane);

pane->PutInside(this, false);

// make an attempt to order the subPanes array the way the caller
asked.
if(NULL == (pIth = GetSubPane(index)) || pane != pIth){
mSubPanes.Remove(pane);
mSubPanes.InsertItemsAt(1, index, pane);
}

// visually place after previous pane
height = 0;
if(NULL != (pIth = GetSubPane(index-1))){
SPoint32 ithLoc;
SPoint32 myLoc;
SPoint32 myScroll;
SDimension16 ithSiz;
GetFrameLocation(myLoc);
GetScrollPosition(myScroll);
pIth->GetFrameLocation(ithLoc);
pIth->GetFrameSize(ithSiz);
height = ithLoc.v + myScroll.v - myLoc.v + ithSiz.height;
}
pane->GetFrameSize(dim);
GetImageSize(mySize);
if(mySize.height < height + dim.height){
ResizeImageBy(0, height + dim.height - mySize.height, inRefresh);
}
pane->PlaceInSuperImageAt(0, height, inRefresh);

// place panes after this visually after this
if(index != mSubPanes.GetCount()){
SInt32 i;

for(i = index+1;i <= mSubPanes.GetCount();i++){
if(NULL != (pIth = GetSubPane(i))){
pIth->MoveBy(0, dim.height, inRefresh);
}
}
}

pane->FinishCreate();
pane->Show();

return pane;
}
garg
2006-07-12 15:29:45 UTC
Permalink
I'm sorry, but I didn't understand your reply

my problem is not inserting visual elements into a created view
I have no problem creating LStaticText or LPushButton.

I have problems creating an LTextButton

The avialable ctors are LTextButton() and LTextButton(LStream*)
I tried both with no success

does anyone have a working code that creates LTextButton???

thanks in advance
Elad
garg
2006-07-13 06:23:03 UTC
Permalink
Finally, I have managed to create a button and see it
the problem is that when creating the button with the default ctor, you
cannot change the textTraits and the SelectedStyle

does anyone knows how it can be changed? (I don't know how to use the
LStream* ctor so I cannot use it)


Thanks
Elad
David Phillip Oster
2006-07-13 06:26:43 UTC
Permalink
Post by garg
Hello,
I'm trying to create an LTextButton and place it inside a specific
pane, after running the code the button doesn't appear
here's the code (the tmpBut->PutInside was omitted)
LStream* l = new LStream();
SPaneInfo paneInfo = {0, 115, 16, true, true, {0,0,0,0}, 14, 91 + 26 ,
0, FlowsScroller};
SControlInfo conInfo;
conInfo.valueMessage = kSwitch2Panel1;
conInfo.value = 0;
conInfo.minValue = 1; //?
conInfo.maxValue = 0; //?
ResIDT textTraitsID = Txtr_SystemFont;
SInt16 selectedStyle = bold || underline;
LStr255 lButText = "abcd";
l->WriteData(&paneInfo, sizeof(SPaneInfo));
l->WriteData(&conInfo, sizeof(SControlInfo));
l->WritePString(lButText);
l->WriteData(&textTraitsID, sizeof(ResIDT));
l->WriteData(&selectedStyle, sizeof(SInt16));
l->SetMarker(0, streamFrom_End);
LTextButton* tmpBut = new LTextButton(l);
I'm sure the problem is within the LStream, but couldn't figure out
what it is
I also tried creating the LTextButton using the default ctor and then
apply to it some attributes, but no luck there either
does anyone know how to solve this?
thanks in advance
Elad
The following works fine for me:

{
LStream* l = new LHandleStream();

SPaneInfo paneInfo = {0, 115, 16, true, true, {0,0,0,0}, 14, 61 + 26
,
0, (LView*) -1};
SControlInfo conInfo = {0, 0, 0, 1};
ResIDT textTraitsID = Txtr_SystemFont;
SInt16 selectedStyle = bold || underline;
l->WriteData(&paneInfo, sizeof paneInfo);
l->WriteData(&conInfo, sizeof conInfo);
l->WritePString("\pHello World!");
l->WriteData(&textTraitsID, sizeof textTraitsID);
l->WriteData(&selectedStyle, sizeof selectedStyle);
l->SetMarker(0, streamFrom_Start);
LTextButton* tmpBut = new LTextButton(l);
tmpBut->PutInside(theWindow);
delete l;
}
garg
2006-07-13 06:57:07 UTC
Permalink
thank you, thank you, thank you!!!

Elad

Loading...