Changeset 20201

Show
Ignore:
Timestamp:
05/10/07 17:47:46 (1 year ago)
Author:
patrick
Message:

Fixed the "Open Recent" menu handling. Things are still not quite working the
way that I want, but at least the menu shows the right information now.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • juggler/trunk/modules/vrjuggler/vrj/Kernel/VRJBasicDelegate.h

    r20153 r20201  
    6565 
    6666   /** 
    67     * Action connected to menu items for recently loaded configuration files. 
    68     * This simply passes on the load request to -kernelLoadConfigFile:. 
    69     * 
    70     * @see -kernelLoadConfigFile: 
    71     */ 
    72    -(IBAction) loadConfigFile:(id) sender; 
    73  
    74    /** 
    7567    * Loads the named VR Juggler configuration file using 
    7668    * vrj::Kernel::loadConfigFile(). 
    7769    */ 
    7870   -(void) kernelLoadConfigFile:(NSString*) fileName; 
    79  
    80    /** 
    81     * Returns a pointer to the NSMenu object that is the submenu listing the 
    82     * recently loaded configuration files or nil if no such submenu exists. 
    83     * In other words, this returns the File -> Open Recent submenu object. 
    84     * This is a convenice method. 
    85     */ 
    86    -(NSMenu*) getRecentFilesMenu; 
    87  
    88    -(NSMenuItem*) insertCfgFileItem:(NSString*) title 
    89                               accel:(NSString*) accel 
    90                               index:(int) index; 
    9171@end 
    9272 
  • juggler/trunk/modules/vrjuggler/vrj/Kernel/VRJBasicDelegate.mm

    r20153 r20201  
    109109      } 
    110110 
    111       NSMenu* file_menu = [self getRecentFilesMenu]; 
    112  
    113       if ( file_menu ) 
    114       { 
    115          const unsigned int count = [mRecentCfgFiles count]; 
    116  
    117          for ( unsigned int i = 0; i < count; ++i ) 
    118          { 
    119             [self insertCfgFileItem:[mRecentCfgFiles objectAtIndex:i] 
    120                               accel:[NSString stringWithFormat:@"%d", i] 
    121                               index:i]; 
    122          } 
     111      const unsigned int count = [mRecentCfgFiles count]; 
     112 
     113      NSDocumentController* doc_ctrl = 
     114         [NSDocumentController sharedDocumentController]; 
     115 
     116      for ( unsigned int i = 0; i < count; ++i ) 
     117      { 
     118         NSURL* url = 
     119            [NSURL fileURLWithPath:[mRecentCfgFiles objectAtIndex:i]]; 
     120         [doc_ctrl noteNewRecentDocumentURL:url]; 
    123121      } 
    124122 
     
    210208   } 
    211209 
    212    -(IBAction) loadConfigFile:(id) sender 
    213    { 
    214       [self kernelLoadConfigFile:[sender title]]; 
    215    } 
    216  
    217210   -(void) kernelLoadConfigFile:(NSString*) fileName 
    218211   { 
     
    235228      [mRecentCfgFiles addObject:fileName]; 
    236229 
    237       NSMenu* files_menu = [self getRecentFilesMenu]; 
    238  
    239       // NOTE: The mMaxRecentFiles + 2 accounts for the separator item and the 
    240       // "Clear Menu" item after the separator. 
    241       if ( files_menu && [files_menu numberOfItems] > mMaxRecentFiles + 2 ) 
    242       { 
    243          [files_menu removeItemAtIndex:0]; 
    244  
    245          for ( int i = 0; i < mMaxRecentFiles; ++i ) 
    246          { 
    247             NSMenuItem* item = [files_menu itemAtIndex:i]; 
    248             [item setKeyEquivalent:[NSString stringWithFormat:@"%d", i]]; 
    249          } 
    250       } 
    251  
    252       if ( files_menu ) 
    253       { 
    254          const int index = [files_menu indexOfItemWithTitle:fileName]; 
    255  
    256          if ( index == NSNotFound ) 
    257          { 
    258             int insert_index(0); 
    259             const int count = [files_menu numberOfItems]; 
    260  
    261             for ( int i = 0; i < count; ++i ) 
    262             { 
    263                NSMenuItem* item = [files_menu itemAtIndex:i]; 
    264  
    265                if ( [item isSeparatorItem] ) 
    266                { 
    267                   insert_index = i - 1; 
    268                   break; 
    269                } 
    270             } 
    271  
    272             [self insertCfgFileItem:fileName 
    273                               accel:[NSString stringWithFormat:@"%d", 0] 
    274                               index:insert_index]; 
    275          } 
    276       } 
     230      NSDocumentController* doc_ctrl = 
     231         [NSDocumentController sharedDocumentController]; 
     232      [doc_ctrl noteNewRecentDocumentURL:[NSURL fileURLWithPath:fileName]]; 
    277233   } 
    278234 
     
    329285   -(IBAction) clearRecentDocuments:(id) sender 
    330286   { 
    331       NSMenu* menu = [sender menu]; 
    332       const int init_size = [menu numberOfItems]; 
    333  
    334       for ( int i = 0; i < init_size; ++i ) 
    335       { 
    336          NSMenuItem* item = [menu itemAtIndex:0]; 
    337  
    338          if ( [item isSeparatorItem] || 
    339               [[item title] isEqualToString:@"Clear Menu"] ) 
    340          { 
    341             break; 
    342          } 
    343          else 
    344          { 
    345             [menu removeItem:item]; 
    346          } 
    347       } 
    348  
     287      NSDocumentController* doc_ctrl = 
     288         [NSDocumentController sharedDocumentController]; 
     289      [doc_ctrl clearRecentDocuments:sender]; 
    349290      [mRecentCfgFiles removeAllObjects]; 
    350291   } 
    351  
    352    -(NSMenu*) getRecentFilesMenu 
    353    { 
    354       NSMenu* files_menu = nil; 
    355       NSApplication* app = [NSApplication sharedApplication]; 
    356       NSMenuItem* item   = [[app mainMenu] itemWithTitle:@"File"]; 
    357  
    358       if ( item ) 
    359       { 
    360          item = [[item submenu] itemWithTitle:@"Open Recent"]; 
    361  
    362          if ( item ) 
    363          { 
    364             files_menu = [item submenu]; 
    365          } 
    366       } 
    367  
    368       return files_menu; 
    369    } 
    370  
    371    -(NSMenuItem*) insertCfgFileItem:(NSString*) title 
    372                               accel:(NSString*) accel 
    373                               index:(int) index 
    374    { 
    375       NSMenu* menu     = [self getRecentFilesMenu]; 
    376       NSMenuItem* item = [menu insertItemWithTitle:title 
    377                                             action:@selector(loadConfigFile:) 
    378                                      keyEquivalent:accel 
    379                                            atIndex:index]; 
    380       [item setKeyEquivalentModifierMask:NSCommandKeyMask]; 
    381       NSLog(@"Inserted item %@ at index %d in menu %@\n", item, index, menu); 
    382  
    383       return item; 
    384    } 
    385292@end