U++ framework
Do not panic. Ask here before giving up.

Home » U++ Library support » U++ Widgets - General questions or Mixed problems » Howto create control-collection -control? [SOLVED -good example]
Re: Howto create control-collection -control? [message #1684 is a reply to message #1663] Mon, 13 March 2006 20:42 Go to previous messageGo to previous message
wilho is currently offline  wilho
Messages: 19
Registered: February 2006
Promising Member
Ok, here we go again:
class DblClckBtn : public Button {
public:
	Callback WhenLeftDouble;
	virtual void DblClckBtn::LeftDouble(Point, dword);
};
class ExpressPane : public Ctrl {
	struct SlaveControl {
	    bool isInSplitter;
	    DblClckBtn button;
	    Ctrl* slave;
	};	
	Array<SlaveControl> slaves;
	Splitter splitter;
	static const int BTN_SPACE = 22;
	typedef ExpressPane CLASSNAME;	
	void Toggle(int);
	void OpenOne(int);
public:
	void Add(const char *text, Ctrl& slave);
	void Rearrange();
	ExpressPane();
};
void DblClckBtn::LeftDouble(Point p, dword) {
	if(IsReadOnly()) return;
	WhenLeftDouble();
}
ExpressPane::ExpressPane(){
	Ctrl::Add(splitter);
	splitter.Vert();
}
void ExpressPane::OpenOne(int indx){	
	for(int loopI=slaves.GetCount()-1; loopI>-1; loopI--){
		slaves[loopI].isInSplitter = false; 
	}
	slaves[indx].isInSplitter = true;
	Rearrange();
}
void ExpressPane::Toggle(int indx){
	slaves[indx].isInSplitter = !slaves[indx].isInSplitter; 
	Rearrange();
}
void ExpressPane::Rearrange(){
	for(int loopI=slaves.GetCount()-1; loopI>-1; loopI--){
		splitter.RemoveChild( slaves[loopI].slave );
		if (slaves[loopI].isInSplitter == true){
			splitter << *slaves[loopI].slave;
		}
	}
	splitter.RefreshLayout();
}
void ExpressPane::Add(const char *text, Ctrl& slave){	
	SlaveControl& slvCtrl = slaves.Add();
	int btnIndx = slaves.GetCount()-1;
	slvCtrl.button <<= THISBACK1(Toggle,btnIndx);
	slvCtrl.button.WhenLeftDouble << THISBACK1(OpenOne,btnIndx);
	slvCtrl.button.SetLabel(text);
	slvCtrl.button.HSizePosZ(0, 0).BottomPosZ(BTN_SPACE * (btnIndx), BTN_SPACE -2);
	slvCtrl.isInSplitter = false;
	slvCtrl.slave = &slave;	
	splitter.HSizePosZ(0, 0).VSizePosZ(0, BTN_SPACE * (btnIndx+1));
	Ctrl::Add(slvCtrl.button);
}

Here's rearrange and some use for it in form double-click feature. And I finally got the !visible hint Wink

[Updated on: Mon, 13 March 2006 20:46]

Report message to a moderator

 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: Help needed to deal with Display
Next Topic: Application crush
Goto Forum:
  


Current Time: Fri Sep 18 07:39:20 GMT+2 2026

Total time taken to generate the page: 0.00929 seconds