ecere/GlobalSettings: add ECON driver.
authorRejean Loyer <redj@ecere.com>
Wed, 16 Mar 2016 15:07:10 +0000 (11:07 -0400)
committerJerome St-Louis <jerome@ecere.com>
Thu, 28 Jul 2016 22:23:25 +0000 (18:23 -0400)
ecere/src/sys/JSONGlobalSettings.ec

index 89984ae..466a691 100644 (file)
@@ -47,3 +47,51 @@ public:
       return result;
    }
 }
+
+public class ECONGlobalSettings : GlobalSettingsDriver
+{
+   class_property(name) = "ECON";
+
+public:
+   SettingsIOResult ::Load(File f, GlobalSettings globalSettings)
+   {
+      SettingsIOResult result = error;
+      //if(globalSettings.data)
+      {
+         ECONParser parser { f = f };
+         JSONResult jsonResult;
+         subclass(GlobalSettingsData) dataClass = globalSettings.dataClass;
+         if(!dataClass && globalSettings.data)
+            dataClass = (subclass(GlobalSettingsData))globalSettings.data._class;
+         //incref dataBackup;
+         //incref dataBackup;
+         f.Seek(0, start);
+         jsonResult = parser.GetObject(dataClass, &globalSettings.data);
+         if(globalSettings.data)
+         {
+            if(globalSettings.dataOwner)
+            {
+               delete *globalSettings.dataOwner;
+               *globalSettings.dataOwner = globalSettings.data;
+            }
+            result = success;
+         }
+         else if(jsonResult == syntaxError || jsonResult == noItem)
+         {
+            delete globalSettings.data;
+            globalSettings.data = *globalSettings.dataOwner;
+            result = fileNotCompatibleWithDriver;
+         }
+         delete parser;
+      }
+      return result;
+   }
+
+   SettingsIOResult ::Save(File f, GlobalSettings globalSettings)
+   {
+      SettingsIOResult result = error;
+      if(globalSettings && WriteECONObject(f, globalSettings.data._class, globalSettings.data, 0))
+         result = success;
+      return result;
+   }
+}