home *** CD-ROM | disk | FTP | other *** search
/ OpenStep (Enterprise) / OpenStepENTCD.toast / OEDEV / DEV.Z / PBBundleHost.h < prev    next >
Text File  |  1996-09-09  |  7KB  |  166 lines

  1. // PBBundleHost.h - Functionality available to ProjectBuilder extension bundles
  2. //
  3. // Copyright (c) 1995, 1996, NeXT Software, Inc.
  4. // All rights reserved.
  5.  
  6. #import <AppKit/AppKit.h>
  7. #import "PBSystem.h"
  8.  
  9. // PB Bundle Loading
  10. //    At launch time, a single PBBundleHost inside ProjectBuilder attempts to
  11. //    load all bundle wrappers specified in the user's preferences (ProjectBuilder's
  12. //    "BundlesLoadedAtLaunch" preference).  Functionality in these bundles can be
  13. //    registered with the application via calls made from bundle initialization
  14. //    method - the preferred method is +initialize on the bundle's principal class,
  15. //    since +load can be fired too early before NSBundle methods are guaranteed to 
  16. //    work.  These calls should be made to the PBBundleHost, which is accessible as NSApp.
  17.  
  18. // PB SCM Integration
  19. // The PBBundleHost can host bundles of any sort.  However, it is especially useful
  20. // for loading interfaces to Software Configuration Management systems, such as CVS.
  21. // The PBBundleHost interface was explicitly designed with this capability in mind.
  22. // To register an implementer of the PBConfigManager protocol, call
  23. // registerConfigManager: on the PBBundleHost.  Bundles providing a ConfigManager
  24. // are encouraged to also register a series of project- and file-specific
  25. // operations in PB's menus and provide an inspector panel.  Preferences specific
  26. // to the integration can be managed with a preferences panel registered with the
  27. // PBBundleHost.
  28.  
  29. @protocol PBConfigManager <NSObject>
  30. - (BOOL) managesPath: (NSString *) path;
  31.      // Should return YES iff this bundle can grant the user write permission to
  32.      // path under normal circumstances.  Should be a cheap call to just check
  33.      // if calling the following more expensive method has a chance in succeeding.
  34.  
  35. - (BOOL) makePathWritable: (NSString *) path;
  36.      // This actually requests the per-file "check out" from the SCM system.
  37.      // Called when a file transitions from saved to unsaved (dirty) state and
  38.      // the associated file is read only. Should return YES if file was made
  39.      // writable to PB.
  40. @end
  41.  
  42. // PB Panel Controllers
  43. // The PBBundleHost will inform controllers of inspector and preference views that
  44. // they are in need of refreshing their contents.  This might happen on initial
  45. // exposure of the panel or if relevant data affecting the browser changes
  46. // (e.g. the selected file/project, in the case of the inspector).
  47.  
  48. @interface PBInspectorController : NSObject
  49. {
  50.     NSWindow *window;
  51.     NSView *contentView;
  52.     id tool;
  53. }
  54. - (NSString *) inspectorName;
  55.      // Name that will appear on pop-up to select this panel.
  56. - (NSView *)contentView;
  57.    // Lazily called to provide panel as needed.
  58. - (void)revert;
  59.    // Called when panel displayed or relevant data changes (e.g. selectedFile)
  60. @end
  61.  
  62. // Preferences specific to the operation of a PB Bundle can be managed
  63. // and storing preferences as a sub-dictionary of PB's preferences, such as:
  64. //   [[NSUserDefaults standardUserDefaults] persistentDomainForName: @"MyConfigMgr"]
  65.  
  66. @interface PBPreferenceController : NSObject
  67. {
  68.     NSWindow *window;
  69.     NSView *contentView;
  70.     id prefController;
  71. }
  72. - (NSString *) viewName;
  73. - (NSView *)contentView;
  74. - (void)revert;
  75. @end
  76.  
  77.  
  78. @protocol PBBundleHost
  79. // Register bundle functionality
  80. - (BOOL) registerConfigManager: (id<PBConfigManager>) configManager;
  81. - (BOOL) registerProjectSubmenu: (NSMenu *) menu;
  82. - (BOOL) registerFileSubmenu: (NSMenu *) menu;
  83. - (BOOL) registerInspectorController: (PBInspectorController *) inspector;
  84. - (BOOL) registerPreferenceController: (PBPreferenceController*) prefPanel;
  85.  
  86. // Query app's state:
  87. - (NSString*) selectedProjectName;
  88.      // Returns name (as set in inspector panel) of the active project
  89. - (NSString*) selectedProject;
  90.      // Returns path to currently active project or nil if none.
  91. - (NSString*) currentlyActiveFile;
  92.      // Returns path to currently active file or nil if none.  This is the file
  93.      // that would receive key events from the user typing.
  94. - (NSArray*) selectedFiles;
  95.      // Returns array of paths for all currently selected files or nil if none.
  96. - (NSArray*) dirtiedFiles;
  97.      // Returns array of paths of files (including PB.project files)
  98.      // that are "unsaved".
  99.  
  100. // Change app's state:
  101. - (BOOL) openFileOrProject: (NSString *) path;
  102.      // equivalent to using Cmd-D and typing in path
  103. - (BOOL) revertPath: (NSString *) path;
  104.      // Revert file or all files under directory named by path.
  105.      // If files have been modified releative to a loaded buffer, the user
  106.      // will be prompted to have the files re-loaded into PB.
  107.      // Returns YES on successful reload.
  108. - (BOOL) queryDirtiedFiles;
  109.      // Prompts user to save all files and projects with dirtied buffers.
  110.      // Returns YES if any files were saved.
  111. - (NSTextView*) viewForFile: (NSString *) path;
  112.      // Calls openFileOrProject: on path if not already loaded.
  113.      // Returns nil if file could not be loaded as text.  This
  114.      // allows access to the underlying file contents, the selection, and
  115.      // the associated NSTextStorage.  Files can be edited programmatically
  116.      // this way.
  117.  
  118. // Project editing:
  119. - (BOOL) addFileWithPath: (NSString *) filePath
  120.                toProject: (NSString *) projectPath;
  121. - (BOOL) removeFileFromProject: (NSString *) filePath;
  122. @end
  123.  
  124. // PB Notifications
  125. // The following notifications can be observed by PB Bundles from the
  126. // [NSNotificationCenter defaultCenter].  The following notification names
  127. // may be used.  The object provided in the subscription to the notification
  128. // should be nil to get all notifications or an NSString containing the path
  129. // to the file or "PB.project" project file in which the observer is specifically
  130. // interested.  The object of the notifications is an NSString containing the
  131. // path of the referenced file or project.
  132.  
  133. // The following four notifications are only sent for top-level projects.
  134. PB_EXTERN NSString * PBProjectWillOpenNotification; 
  135. PB_EXTERN NSString * PBProjectDidOpenNotification;
  136.  
  137. PB_EXTERN NSString * PBProjectWillCloseNotification;
  138. PB_EXTERN NSString * PBProjectDidCloseNotification;
  139.  
  140. PB_EXTERN NSString * PBFileWillOpenNotification;
  141. PB_EXTERN NSString * PBFileDidOpenNotification;
  142.  
  143. PB_EXTERN NSString * PBFileWillCloseNotification;
  144. PB_EXTERN NSString * PBFileDidCloseNotification;
  145.  
  146. PB_EXTERN NSString * PBFileDidChangeNotification;
  147. PB_EXTERN NSString * PBFileWillSaveNotification;
  148. PB_EXTERN NSString * PBFileDidSaveNotification;
  149. PB_EXTERN NSString * PBFileSaveDidFailNotification;
  150. PB_EXTERN NSString * PBFileDirtiedNotification;  // File transitioned from saved to unsaved
  151. PB_EXTERN NSString * PBFileWillRevertNotification;
  152. PB_EXTERN NSString * PBFileDidRevertNotification;
  153. PB_EXTERN NSString * PBFileDeletedNotification;
  154. PB_EXTERN NSString * PBFileRenamedNotification;
  155.  
  156. PB_EXTERN NSString * PBProjectBuildWillBeginNotification;
  157. PB_EXTERN NSString * PBProjectBuildDidBeginNotification;
  158. PB_EXTERN NSString * PBProjectBuildDidSucceedNotification;
  159. PB_EXTERN NSString * PBProjectBuildDidFailNotification;
  160. PB_EXTERN NSString * PBProjectBuildDidStopNotification;
  161.  
  162. PB_EXTERN NSString * PBSelectedProjectDidChangeNotification;
  163. PB_EXTERN NSString * PBSelectedFileDidChangeNotification;
  164.  
  165.  
  166.