Overview
Examples
Screenshots
Comparisons
Applications
Download
Documentation
Tutorials
Bazaar
Status & Roadmap
FAQ
Authors & License
Forums
Funding Ultimate++
Search on this site
Search in forums












SourceForge.net Logo
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: Tue Jun 04 04:16:14 CEST 2024

Total time taken to generate the page: 0.04108 seconds