[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