[Scummvm-cvs-logs] CVS: scummvm/common config-manager.h,1.17,1.18 config-manager.cpp,1.22,1.23 array.h,1.2,1.3

Max Horn fingolfin at users.sourceforge.net
Tue Sep 28 05:32:54 CEST 2004


Update of /cvsroot/scummvm/scummvm/common
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22631/common

Modified Files:
	config-manager.h config-manager.cpp array.h 
Log Message:
Preserve the order of config file sections -> to suite people who manually edit the config file

Index: config-manager.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/common/config-manager.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- config-manager.h	28 Sep 2004 11:30:17 -0000	1.17
+++ config-manager.h	28 Sep 2004 12:10:48 -0000	1.18
@@ -127,6 +127,8 @@
 	DomainMap		_globalDomains;
 	Domain			_defaultsDomain;
 	
+	StringList		_domainSaveOrder;
+
 	String			_activeDomain;
 	String			_filename;
 };

Index: config-manager.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/common/config-manager.cpp,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- config-manager.cpp	31 Mar 2004 18:00:46 -0000	1.22
+++ config-manager.cpp	28 Sep 2004 12:10:48 -0000	1.23
@@ -103,6 +103,7 @@
 #endif
 
 	_filename = filename;
+	_domainSaveOrder.clear();
 	loadFile(_filename);
 	debug(1, "Switched to configuration %s", _filename.c_str());
 }
@@ -159,6 +160,8 @@
 					_gameDomains[domain].setDomainComment(comment);
 				}
 				comment.clear();
+				
+				_domainSaveOrder.push_back(domain);
 			} else {
 				// Skip leading & trailing whitespaces
 				char *t = rtrim(ltrim(buf));
@@ -204,16 +207,31 @@
 	if (!(cfg_file = fopen(_filename.c_str(), "w"))) {
 		warning("Unable to write configuration file: %s", _filename.c_str());
 	} else {
+		
+		// First write the domains in _domainSaveOrder, in that order.
+		// Note: It's possible for _domainSaveOrder to list domains which
+		// are not present anymore.
+		StringList::const_iterator i;
+		for (i = _domainSaveOrder.begin(); i != _domainSaveOrder.end(); ++i) {
+			if (_globalDomains.contains(*i)) {
+				writeDomain(cfg_file, *i, _globalDomains[*i]);
+			} else if (_gameDomains.contains(*i)) {
+				writeDomain(cfg_file, *i, _gameDomains[*i]);
+			}
+		}
+
 		DomainMap::const_iterator d;
 
-		// First write the global domains
+		// Now write the global domains which weren't written yet
 		for (d = _globalDomains.begin(); d != _globalDomains.end(); ++d) {
-			writeDomain(cfg_file, d->_key, d->_value);
+			if (!_domainSaveOrder.contains(d->_key))
+				writeDomain(cfg_file, d->_key, d->_value);
 		}
 		
-		// Second, write the game domains
+		// Finally write the remaining game domains
 		for (d = _gameDomains.begin(); d != _gameDomains.end(); ++d) {
-			writeDomain(cfg_file, d->_key, d->_value);
+			if (!_domainSaveOrder.contains(d->_key))
+				writeDomain(cfg_file, d->_key, d->_value);
 		}
 
 		fclose(cfg_file);

Index: array.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/common/array.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- array.h	12 Aug 2004 21:33:58 -0000	1.2
+++ array.h	28 Sep 2004 12:10:49 -0000	1.3
@@ -145,6 +145,15 @@
 		return _data + _size;
 	}
 
+	bool contains(const T &key) const {
+		for (const_iterator i = begin(); i != end(); ++i) {
+			if (*i == key)
+				return true;
+		}
+		return false;
+	}
+
+
 protected:
 	void ensureCapacity(int new_len) {
 		if (new_len <= _capacity)





More information about the Scummvm-git-logs mailing list