]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/state.cpp
Rework how widget ownership works in Container
[libs/gltk.git] / source / state.cpp
index 9e44e14d200ff00a3c9b804baf29d8af59ef94b8..556970d561c13b3c624ef307de2cf9ed53ef5d9d 100644 (file)
@@ -9,16 +9,33 @@ istream &operator>>(istream &is, State &state)
 {
        string str;
        is>>str;
-       if(str=="NORMAL")
-               state=NORMAL;
-       else if(str=="HOVER")
-               state=HOVER;
-       else if(str=="ACTIVE")
-               state=ACTIVE;
-       else if(str=="DISABLED")
-               state=DISABLED;
-       else
-               is.setstate(ios_base::failbit);
+
+       unsigned start = 0;
+       state = NORMAL;
+
+       while(1)
+       {
+               string::size_type underscore = str.find('_', start);
+               if(!str.compare(start, underscore-start, "NORMAL"))
+                       state |= NORMAL;
+               else if(!str.compare(start, underscore-start, "HOVER"))
+                       state |= HOVER;
+               else if(!str.compare(start, underscore-start, "ACTIVE"))
+                       state |= ACTIVE;
+               else if(!str.compare(start, underscore-start, "FOCUS"))
+                       state |= FOCUS;
+               else if(!str.compare(start, underscore-start, "DISABLED"))
+                       state |= DISABLED;
+               else
+               {
+                       is.setstate(ios_base::failbit);
+                       break;
+               }
+
+               if(underscore==std::string::npos)
+                       break;
+               start = underscore+1;
+       }
 
        return is;
 }