]> err.no Git - sope/blobdiff - sope-core/EOControl/EOSortOrdering.m
Add libxml2-dev to libsope-xml4.7-dev deps
[sope] / sope-core / EOControl / EOSortOrdering.m
index 909d188e9b09786104b5f374ba3a4280885a6082..1611e7057e4325db99bab295a23dec96e9fdbc26 100644 (file)
@@ -117,11 +117,34 @@ EOControl_DECLARE SEL EOCompareCaseInsensitiveDescending =
                         selector:self->selector];
 }
 
+/* key/value archiving */
+
+- (id)initWithKeyValueUnarchiver:(EOKeyValueUnarchiver *)_unarchiver {
+  if ((self = [super init]) != nil) {
+    NSString *s;
+    
+    self->key = [[_unarchiver decodeObjectForKey:@"key"] copy];
+    
+    if ((s = [_unarchiver decodeObjectForKey:@"selector"]) != nil)
+      self->selector = NSSelectorFromString(s);
+    else if ((s = [_unarchiver decodeObjectForKey:@"selectorName"]) != nil) {
+      if (![s hasSuffix:@":"]) s = [s stringByAppendingString:@":"];
+      self->selector = NSSelectorFromString(s);
+    }
+  }
+  return self;
+}
+- (void)encodeWithKeyValueArchiver:(EOKeyValueArchiver *)_archiver {
+  [_archiver encodeObject:[self key] forKey:@"key"];
+  [_archiver encodeObject:NSStringFromSelector([self selector])
+             forKey:@"selectorName"];
+}
+
 /* description */
 
 - (NSString *)description {
   return [NSString stringWithFormat:
-                     @"<0x%08X[%@]: key=%@ selector=%@>",
+                     @"<0x%p[%@]: key=%@ selector=%@>",
                      self, NSStringFromClass([self class]),
                      [self key], NSStringFromSelector([self selector])];
 }
@@ -172,8 +195,8 @@ static int keyOrderComparator(id o1, id o2, EOSortOrderingContext *context) {
     key = [context->orderings[i] key];
     sel = [context->orderings[i] selector];
     
-    v1 = [o1 valueForKey:key];
-    v2 = [o2 valueForKey:key];
+    v1 = [o1 valueForKeyPath:key];
+    v2 = [o2 valueForKeyPath:key];
 
     if (v1 == v2)
       result = NSOrderedSame;
@@ -186,7 +209,7 @@ static int keyOrderComparator(id o1, id o2, EOSortOrderingContext *context) {
     else if ((ccmp = (void *)[v1 methodForSelector:sel]))
       result = ccmp(v1, sel, v2);
     else
-      result = (int)[v1 performSelector:sel withObject:v2];
+      result = (unsigned long)[v1 performSelector:sel withObject:v2];
 
     if (result != NSOrderedSame)
       return result;