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 #1692 is a reply to message #1684] Mon, 13 March 2006 22:04 Go to previous messageGo to previous message
mirek is currently offline  mirek
Messages: 13980
Registered: November 2005
Ultimate Member
wilho wrote on Mon, 13 March 2006 14:42

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



Well, now this actually looks like some U++ code Smile

Mirek
 
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: Mon May 20 15:59:21 CEST 2024

Total time taken to generate the page: 0.00862 seconds