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 » ArrayCtrl, HeaderCtrl & GridCtrl » HeaderCtrl crashes on serialization
HeaderCtrl crashes on serialization [message #23719] Tue, 17 November 2009 10:51 Go to next message
zsolt is currently offline  zsolt
Messages: 696
Registered: December 2005
Location: Budapest, Hungary
Contributor
HeaderCtrl serialization is buggy when adding or removing columns.
When you remove a column, it tries to set non existing columns.

On the other side, if you add new columns, but not at the end of the list, the newly loaded setup is absolutely messy. It would be better to fall back to default setup in this case, I think.

I changed the code to load states only when number of coluns aren't changed.
Re: HeaderCtrl crashes on serialization [message #23726 is a reply to message #23719] Wed, 18 November 2009 08:45 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
Pushing things to limits, are we? Smile

Well, patch definitely makes sense, it is in uppsrc now.

Mirek
Re: HeaderCtrl crashes on serialization [message #23730 is a reply to message #23726] Wed, 18 November 2009 10:00 Go to previous messageGo to next message
zsolt is currently offline  zsolt
Messages: 696
Registered: December 2005
Location: Budapest, Hungary
Contributor
Smile
This ArrayCtrl class is extremely useful, it was a very minor bug, I think.
Re: HeaderCtrl crashes on serialization [message #23731 is a reply to message #23726] Wed, 18 November 2009 11:13 Go to previous messageGo to next message
zsolt is currently offline  zsolt
Messages: 696
Registered: December 2005
Location: Budapest, Hungary
Contributor
BTW, what is your opinion about putting serialization of column visibility setup here?
Re: HeaderCtrl crashes on serialization [message #23741 is a reply to message #23731] Wed, 18 November 2009 17:18 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
I am ok with that. Patch is welcome.

I guess HeaderCtrl::Serialize is versioned, so it should not pose any BW issues....
Re: HeaderCtrl crashes on serialization [message #23744 is a reply to message #23741] Thu, 19 November 2009 01:15 Go to previous messageGo to next message
zsolt is currently offline  zsolt
Messages: 696
Registered: December 2005
Location: Budapest, Hungary
Contributor
OK, here is the patch. It uses a new version number, so it shouldn't be harmful.

I will upload a newer version of my tester app (Array Hide/Show Column Menu demonstration) also.
Re: HeaderCtrl crashes on serialization [message #23798 is a reply to message #23744] Sun, 22 November 2009 23:28 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
I have tried to optimize it a little, please check:

void HeaderCtrl::Serialize(Stream& s) {
	int version = 0x03;
	s / version;
	if(version < 0x01) {
		int n = col.GetCount();
		s / n;
		for(int i = 0; i < n; i++)
			if(i < col.GetCount()) {
				int n;
				s / n;
				col[i].ratio = n;
			}
			else {
				int dummy = 0;
				s / dummy;
			}
	}
	else {
		int n = col.GetCount();
		s / n;
		if(version < 0x02)
			for(int i = 0; i < n; i++)
				if(i < col.GetCount())
					s % col[i].ratio;
				else {
					int dummy = 0;
					s % dummy;
				}
		else {
			int t = 0;
			for(int i = 0; i < n; i++) {
				if(n == col.GetCount()) {
					int ndx = col[i].index;
					double r = col[i].ratio;
					s % ndx;
					s % r;
					int q = FindIndex(ndx);
					if(q >= 0) {
						col[q].ratio = r;
						col.Swap(t++, q);
					}
					if(version >= 0x03) {
						bool visible = IsTabVisible(i);
						s % visible;
						if(i<GetCount()) ShowTab(i, visible);
					}
				}
				else {
					int dummy = 0;
					double dummy2 = 1.0;
					bool dummy3 = false;
					s % dummy;
					s % dummy2;
					if(version >= 0x03)
						s % dummy3;
				}
			}
		}
	}
	if(s.IsLoading()) {
		Refresh();
		WhenLayout();
	}
}


Re: HeaderCtrl crashes on serialization [message #23802 is a reply to message #23798] Mon, 23 November 2009 11:01 Go to previous message
zsolt is currently offline  zsolt
Messages: 696
Registered: December 2005
Location: Budapest, Hungary
Contributor
Thanks, it seems to be good for me.
This was my original idea also. I just don't know your style too deeply Smile
Previous Topic: Problem in DropGrid
Next Topic: Array Hide/Show Column Menu demonstration
Goto Forum:
  


Current Time: Thu Apr 18 09:54:09 CEST 2024

Total time taken to generate the page: 0.02435 seconds