Annotation of Examples/EnterpriseObjects/QueryByExample/QBEPalette/SortOrderSetter.m, revision 1.1.1.1

1.1       root        1: // SortOrderSetter.m
                      2: 
                      3: #import <eointerface/eointerface.h>
                      4: #import "SortOrderSetter.h"
                      5: #import "TableMagic.h"
                      6: 
                      7: @implementation SortOrderSetter
                      8: - (NSArray *)orderingArrayForEntity:(EOEntity *)entity keys:(NSArray *)keys
                      9:                  ordering:(EOOrdering)ordering
                     10: {
                     11:     int count, i;
                     12:     NSMutableArray *orderarray;
                     13:     
                     14:     count = [keys count];
                     15:     orderarray = [NSMutableArray arrayWithCapacity:count];
                     16:     
                     17:     for(i=0; i<count; i++) {
                     18:         EOAttribute *attr = [entity attributeNamed:[keys objectAtIndex:i]];
                     19:         if (attr)
                     20:             [orderarray addObject: [EOAttributeOrdering attributeOrderingWithAttribute:attr
                     21:                ordering:ordering]];
                     22:     }
                     23:     return orderarray;
                     24: }
                     25: 
                     26: - applyOrderingToDataSourceAndFetch:(EOOrdering)ordering
                     27: {
                     28:     id tableView = [NXTableView keyTableView];
                     29:     EOController *controller = [tableView eoController];
                     30:     id dataSource = [controller dataSource];
                     31:     if (controller && [dataSource respondsToSelector:@selector(setFetchOrder:)]) {
                     32:         NSArray *keys = [tableView associationKeysForSelectedColumns];
                     33:         if (!keys) // if none selected, sort by first
                     34:             keys = [NSArray arrayWithObject:[tableView associationKeyForColumn:0]];
                     35:         [dataSource setFetchOrder:[self orderingArrayForEntity:[dataSource entity] keys:keys ordering:ordering]];
                     36: 
                     37:         // nil out the fetch order on the controller (since it will override this one)
                     38:         [controller setSortOrdering:nil];
                     39:         
                     40:         [controller fetch:nil];
                     41:         return self;
                     42:     }
                     43:     
                     44:     NXBeep();
                     45:     return nil;
                     46: }
                     47: 
                     48: - sortDataSourceAscending:sender
                     49: {
                     50:     return [self applyOrderingToDataSourceAndFetch:EOAscendingOrder];
                     51: }
                     52: 
                     53: - sortDataSourceDescending:sender
                     54: {
                     55:     return [self applyOrderingToDataSourceAndFetch:EODescendingOrder];
                     56: }
                     57: 
                     58: - (NSArray *)keyOrderingForKeys:(NSArray *)keys ordering:(NSComparisonResult)ordering
                     59: {
                     60:     int i, count = [keys count];
                     61:     NSMutableArray *result = [NSMutableArray arrayWithCapacity:count];
                     62:     for(i=0; i<count; i++) {
                     63:         [result addObject:[EOKeySortOrdering keyOrderingWithKey:[keys objectAtIndex:i] ordering:ordering]];
                     64:     }
                     65:     return result;
                     66: }
                     67: 
                     68: - applyOrderingToControllerAndFetch:(NSComparisonResult)ordering
                     69: {
                     70:     id tableView = [NXTableView keyTableView];
                     71:     EOController *controller = [tableView eoController];
                     72:     if (controller) {
                     73:         NSArray *keys = [tableView associationKeysForSelectedColumns];
                     74:         if (!keys) // if none selected, sort by first
                     75:             keys = [NSArray arrayWithObject:[tableView associationKeyForColumn:0]];
                     76:         [controller setSortOrdering:[self keyOrderingForKeys:keys ordering:ordering]];
                     77:         [controller resort];
                     78: 
                     79:         if ([[controller dataSource] respondsToSelector:@selector(setFetchOrder:)]) {
                     80:             // unset the fetch order on the dataSource
                     81:             [(EODatabaseDataSource *)[controller dataSource] setFetchOrder:nil];
                     82:         }
                     83:         return self;
                     84:     }
                     85: 
                     86:     NXBeep();
                     87:     return nil;
                     88:     
                     89: }
                     90: 
                     91: - sortControllerAscending:sender
                     92: {
                     93:     return [self applyOrderingToControllerAndFetch:NSOrderedAscending];
                     94: }
                     95: 
                     96: - sortControllerDescending:sender
                     97: {
                     98:     return [self applyOrderingToControllerAndFetch:NSOrderedDescending];
                     99: }
                    100: 
                    101: 
                    102: // switch old style methods to use controller sorting
                    103: - setOrderAscending:sender
                    104: {
                    105:     return [self sortControllerAscending:sender];
                    106: }
                    107: 
                    108: - setOrderDescending:sender
                    109: {
                    110:     return [self sortControllerDescending:sender];
                    111: }
                    112: @end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.