1 | /* |
---|
2 | * AIInterfaceControllerProtocol.h |
---|
3 | * Adium |
---|
4 | * |
---|
5 | * Created by Evan Schoenberg on 7/31/06. |
---|
6 | * |
---|
7 | */ |
---|
8 | |
---|
9 | #import <Adium/AIControllerProtocol.h> |
---|
10 | #import <Adium/AIPlugin.h> |
---|
11 | |
---|
12 | #define Interface_ContactSelectionChanged @"Interface_ContactSelectionChanged" |
---|
13 | |
---|
14 | /*! |
---|
15 | * @brief AIContactInfoInspectorDidChangeInspectedObject notification name |
---|
16 | * |
---|
17 | * userinfo is an NSDictionary with keys KEY_PREVIOUS_INSPECTED_OBJECT and KEY_NEW_INSPECTED_OBJECT and objects of class AIListObject |
---|
18 | */ |
---|
19 | #define AIContactInfoInspectorDidChangeInspectedObject @"AIContactInfoInspectorWillChangeInspectedObject" |
---|
20 | #define KEY_PREVIOUS_INSPECTED_OBJECT @"PreviousInspectedObject" |
---|
21 | #define KEY_NEW_INSPECTED_OBJECT @"NewInspectedObject" |
---|
22 | |
---|
23 | #define Interface_SendEnteredMessage @"Interface_SendEnteredMessage" |
---|
24 | #define Interface_WillSendEnteredMessage @"Interface_WillSendEnteredMessage" |
---|
25 | #define Interface_DidSendEnteredMessage @"Interface_DidSendEnteredMessage" |
---|
26 | #define Interface_ShouldDisplayErrorMessage @"Interface_ShouldDisplayErrorMessage" |
---|
27 | #define Interface_ShouldDisplayQuestion @"Interface_ShouldDisplayQuestion" |
---|
28 | #define Interface_ContactListDidBecomeMain @"Interface_ContactListDidBecomeMain" |
---|
29 | #define Interface_ContactListDidResignMain @"Interface_contactListDidResignMain" |
---|
30 | #define Interface_ContactListDidClose @"Interface_contactListDidClose" |
---|
31 | #define Interface_TabArrangingPreferenceChanged @"Interface_TabArrangingPreferenceChanged" |
---|
32 | #define AIViewDesiredSizeDidChangeNotification @"AIViewDesiredSizeDidChangeNotification" |
---|
33 | |
---|
34 | #define PREF_GROUP_INTERFACE @"Interface" |
---|
35 | #define KEY_TABBED_CHATTING @"Tabbed Chatting" |
---|
36 | #define KEY_GROUP_CHATS_BY_GROUP @"Group Chats By Group" |
---|
37 | #define KEY_SAVE_CONTAINERS @"Save Containers On Quit" |
---|
38 | #define KEY_CONTAINERS @"Containers" |
---|
39 | |
---|
40 | #define PREF_GROUP_CONTACT_LIST @"Contact List" |
---|
41 | #define KEY_CL_WINDOW_LEVEL @"Window Level" |
---|
42 | #define KEY_CL_HIDE @"Hide While in Background" |
---|
43 | #define KEY_CL_EDGE_SLIDE @"Hide On Screen Edges" |
---|
44 | #define KEY_CL_FLASH_UNVIEWED_CONTENT @"Flash Unviewed Content" |
---|
45 | #define KEY_CL_ANIMATE_CHANGES @"Animate Changes" |
---|
46 | #define KEY_CL_SHOW_TOOLTIPS @"Show Tooltips" |
---|
47 | #define KEY_CL_SHOW_TOOLTIPS_IN_BACKGROUND @"Show Tooltips in Background" |
---|
48 | #define KEY_CL_WINDOW_HAS_SHADOW @"Window Has Shadow" |
---|
49 | |
---|
50 | typedef enum { |
---|
51 | AINormalWindowLevel = 0, |
---|
52 | AIFloatingWindowLevel = 1, |
---|
53 | AIDesktopWindowLevel = 2 |
---|
54 | } AIWindowLevel; |
---|
55 | |
---|
56 | //Identifiers for the various message views |
---|
57 | typedef enum { |
---|
58 | DCStandardMessageView = 1, //webkit is not available |
---|
59 | DCWebkitMessageView //Preferred message view |
---|
60 | } DCMessageViewType; |
---|
61 | |
---|
62 | @protocol AIInterfaceComponent, AIContactListComponent, AIMessageDisplayController, AIMessageDisplayPlugin; |
---|
63 | @protocol AIContactListTooltipEntry, AIFlashObserver; |
---|
64 | |
---|
65 | @class AIListWindowController, AIMessageWindowController; |
---|
66 | |
---|
67 | @class AIChat, AIListObject, AIListGroup; |
---|
68 | |
---|
69 | @protocol AIInterfaceController <AIController> |
---|
70 | - (void)registerInterfaceController:(id <AIInterfaceComponent>)inController; |
---|
71 | - (void)registerContactListController:(id <AIContactListComponent>)inController; |
---|
72 | |
---|
73 | /*! @brief Implement handling of the reopen Apple Event. |
---|
74 | * |
---|
75 | * @par The reopen handler should respond by making sure that at least one of Adium's windows is visible. |
---|
76 | * |
---|
77 | * @par Adium.app's implementation handles this event this way: |
---|
78 | * |
---|
79 | * @li If there are no chat windows, shows the Contact List. |
---|
80 | * @li Else, if the foremost chat window and chat tab has unviewed content, make sure it stays foremost (bringing it forward of the Contact List, if necessary). |
---|
81 | * @li Else, if any chat window has unviewed content, bring foremost the chat window and chat tab with the most recent unviewed content. |
---|
82 | * @li Else, if all chat windows are minimized, unminimize one of them. |
---|
83 | * @li If the application is hidden, unhide it. |
---|
84 | * |
---|
85 | * @return A value suitable for returning from the \c NSApplication delegate method <code>applicationShouldHandleReopen:hasVisibleWindows: |
---|
86 | </code>. Specifically: \c YES if AppKit should perform its usual response to the event; \c NO if AppKit should do nothing. |
---|
87 | */ |
---|
88 | - (BOOL)handleReopenWithVisibleWindows:(BOOL)visibleWindows; |
---|
89 | |
---|
90 | //Contact List |
---|
91 | /*! @name Contact List */ |
---|
92 | /* @{ */ |
---|
93 | /*! |
---|
94 | * @brief Brings contact list to the front |
---|
95 | */ |
---|
96 | - (IBAction)showContactList:(id)sender; |
---|
97 | /*! |
---|
98 | * @brief Close the contact list window |
---|
99 | */ |
---|
100 | - (IBAction)closeContactList:(id)sender; |
---|
101 | /*! |
---|
102 | * @returns YES if contact list is visible and selected, otherwise NO |
---|
103 | */ |
---|
104 | - (BOOL)contactListIsVisibleAndMain; |
---|
105 | /*! |
---|
106 | * @returns YES if contact list is visible, otherwise NO |
---|
107 | */ |
---|
108 | - (BOOL)contactListIsVisible; |
---|
109 | /*! @} */ |
---|
110 | |
---|
111 | #pragma mark Detachable Contact List |
---|
112 | /*! |
---|
113 | * @brief Create a new AIListWindowController to display a given contact list group in a detached window |
---|
114 | * |
---|
115 | * @result Created contact list controller for detached contact list |
---|
116 | */ |
---|
117 | - (AIListWindowController *)detachContactList:(AIListGroup *)aContactList; |
---|
118 | |
---|
119 | #pragma mark Messaging |
---|
120 | /*! |
---|
121 | * @brief Opens tab or window for a chat (following user's preferences) |
---|
122 | * |
---|
123 | * @param inChat The chat. If already open, the chat will be brought to the front. |
---|
124 | */ |
---|
125 | - (void)openChat:(AIChat *)inChat; |
---|
126 | |
---|
127 | /*! |
---|
128 | * @brief Opens a chat in a given container at a specific index |
---|
129 | * |
---|
130 | * NOTE: If the chat is already open, this won't move it and instead does nothing. Perhaps it should, though :) |
---|
131 | * |
---|
132 | * @param inChat The chat. |
---|
133 | * @param containerID The name of the container window. |
---|
134 | * @param index The index within that containter window. |
---|
135 | */ |
---|
136 | - (id)openChat:(AIChat *)inChat inContainerWithID:(NSString *)containerID atIndex:(int)index; |
---|
137 | |
---|
138 | /*! |
---|
139 | * @brief Move a chat to a new window container |
---|
140 | * |
---|
141 | * NOTE: The chat must already be open. That's a bug. |
---|
142 | */ |
---|
143 | - (void)moveChatToNewContainer:(AIChat *)inChat; |
---|
144 | |
---|
145 | /*! |
---|
146 | * @brief Close the interface for a chat |
---|
147 | * |
---|
148 | * @param inChat The chat |
---|
149 | */ |
---|
150 | - (void)closeChat:(AIChat *)inChat; |
---|
151 | |
---|
152 | /*! |
---|
153 | * @brief Consolidate all open chats into a single container |
---|
154 | */ |
---|
155 | - (void)consolidateChats; |
---|
156 | |
---|
157 | /*! |
---|
158 | * @brief Brings the tab/window for a chat to the front and sets it as active |
---|
159 | * @param inChat The chat |
---|
160 | */ |
---|
161 | - (void)setActiveChat:(AIChat *)inChat; |
---|
162 | |
---|
163 | /*! |
---|
164 | * @brief Get the active chat. |
---|
165 | * |
---|
166 | * @result The active chat. If no chat is active (a non-chat window is focued, or Adium is not focused), returns nil. |
---|
167 | */ |
---|
168 | - (AIChat *)activeChat; |
---|
169 | |
---|
170 | /*! |
---|
171 | * @brief Get the chat which was most recently active |
---|
172 | * |
---|
173 | * If -[self activeChat] is non-nil, this will be the same as activeChat. However, if no chat is active, so long |
---|
174 | * as any chat is open, this will return the chat most recently active. If no chats are open, this will return nil. |
---|
175 | */ |
---|
176 | - (AIChat *)mostRecentActiveChat; |
---|
177 | |
---|
178 | /*! |
---|
179 | * @brief Get all open chats |
---|
180 | * |
---|
181 | * @result The open chats. Returns an empty array if no chats are open. |
---|
182 | */ |
---|
183 | - (NSArray *)openChats; |
---|
184 | |
---|
185 | /*! |
---|
186 | * @brief Get all open chats in a given container. |
---|
187 | * |
---|
188 | * @result The array of open chats. Returns nil if no container with containerID exists. |
---|
189 | */ |
---|
190 | - (NSArray *)openChatsInContainerWithID:(NSString *)containerID; |
---|
191 | |
---|
192 | /*! |
---|
193 | * @brief Get an array of the containerIDs of all open containers |
---|
194 | */ |
---|
195 | - (NSArray *)openContainerIDs; |
---|
196 | |
---|
197 | /*! |
---|
198 | * @brief Open a new container with a given ID and name |
---|
199 | * |
---|
200 | * @param containerID The container's ID. Pass nil to let Adium generate one |
---|
201 | * @param containerName THe name of the container. Pass nil to not specify one. |
---|
202 | * |
---|
203 | * @result The newly created AIMessageWindowController |
---|
204 | */ |
---|
205 | - (AIMessageWindowController *)openContainerWithID:(NSString *)containerID name:(NSString *)containerName; |
---|
206 | |
---|
207 | /*! |
---|
208 | * @brief Cycles to the next open chat, making it active |
---|
209 | * |
---|
210 | * This crosses container boundaries. |
---|
211 | */ |
---|
212 | - (void)nextChat:(id)sender; |
---|
213 | |
---|
214 | /*! |
---|
215 | * @brief Cycles to the previous open chat, making it active |
---|
216 | * |
---|
217 | * This crosses container boundaries. |
---|
218 | */ |
---|
219 | - (void)previousChat:(id)sender; |
---|
220 | |
---|
221 | #pragma mark Interface plugin callbacks |
---|
222 | /*! |
---|
223 | * @brief A chat window did open: rebuild our window menu to show the new chat |
---|
224 | * |
---|
225 | * This should be called by the interface plugin (e.g. AIDualWindowInterfacePlugin) after a chat opens |
---|
226 | * |
---|
227 | * @param inChat Newly created chat |
---|
228 | */ |
---|
229 | - (void)chatDidOpen:(AIChat *)inChat; |
---|
230 | |
---|
231 | /*! |
---|
232 | * @brief A chat has become active: update our chat closing keys and flag this chat as selected in the window menu |
---|
233 | * |
---|
234 | * This should be called by the interface plugin (e.g. AIDualWindowInterfacePlugin) |
---|
235 | * |
---|
236 | * @param inChat Chat which has become active |
---|
237 | */ |
---|
238 | - (void)chatDidBecomeActive:(AIChat *)inChat; |
---|
239 | |
---|
240 | /*! |
---|
241 | * @brief A chat has become visible: send out a notification for components and plugins to take action |
---|
242 | * |
---|
243 | * This should be called by the interface plugin (e.g. AIDualWindowInterfacePlugin) |
---|
244 | * |
---|
245 | * @param inChat Chat that has become active |
---|
246 | * @param inWindow Containing chat window |
---|
247 | */ |
---|
248 | - (void)chatDidBecomeVisible:(AIChat *)inChat inWindow:(NSWindow *)inWindow; |
---|
249 | |
---|
250 | /*! |
---|
251 | * @brief A chat window did close: rebuild our window menu to remove the chat |
---|
252 | * |
---|
253 | * This should be called by the interface plugin (e.g. AIDualWindowInterfacePlugin) |
---|
254 | * |
---|
255 | * @param inChat Chat that closed |
---|
256 | */ |
---|
257 | - (void)chatDidClose:(AIChat *)inChat; |
---|
258 | |
---|
259 | /*! |
---|
260 | * @brief The order of chats has changed: rebuild our window menu to reflect the new order |
---|
261 | * |
---|
262 | * This should be called by the interface plugin (e.g. AIDualWindowInterfacePlugin) |
---|
263 | */ |
---|
264 | - (void)chatOrderDidChange; |
---|
265 | |
---|
266 | #pragma mark Chat window access |
---|
267 | /*! |
---|
268 | * @brief Find the window currently displaying a chat |
---|
269 | * |
---|
270 | * @returns Window for chat otherwise if the chat is not in any window, or is not visible in any window, returns nil |
---|
271 | */ |
---|
272 | - (NSWindow *)windowForChat:(AIChat *)inChat; |
---|
273 | |
---|
274 | |
---|
275 | /*! |
---|
276 | * @brief Find the chat active in a window |
---|
277 | * |
---|
278 | * If the window does not have an active chat, nil is returned |
---|
279 | */ |
---|
280 | - (AIChat *)activeChatInWindow:(NSWindow *)window; |
---|
281 | |
---|
282 | #pragma mark Interface selection |
---|
283 | /*! |
---|
284 | * @brief Get the list object currently focused in the interface |
---|
285 | * |
---|
286 | * We find the first responder that knows about list objects and get its selected object. |
---|
287 | * This may be, for example, the contact list or a chat window. |
---|
288 | */ |
---|
289 | - (AIListObject *)selectedListObject; |
---|
290 | |
---|
291 | /*! |
---|
292 | * @brief Get the list object currently selected in the contact list |
---|
293 | * |
---|
294 | * If multiple objects are selected, this returns the first one. If possible, use arrayOfSelectedListObjectsInContactList and |
---|
295 | * handle multiple selections. |
---|
296 | */ |
---|
297 | - (AIListObject *)selectedListObjectInContactList; |
---|
298 | |
---|
299 | /*! |
---|
300 | * @brief Get the list objects currently selected in the contact list |
---|
301 | * |
---|
302 | * @result An NSArray of selected objects |
---|
303 | */ |
---|
304 | - (NSArray *)arrayOfSelectedListObjectsInContactList; |
---|
305 | |
---|
306 | #pragma mark Message View |
---|
307 | /*! |
---|
308 | * @brief Register an object which can handle displaying messages |
---|
309 | * |
---|
310 | * See @protocol AIMessageDisplayPlugin for details. An example of such an object is the WebKit Message View plugin. |
---|
311 | * |
---|
312 | * @param inPlugin The object, which must conform to @protocol(AIMessageDisplayPlugin) |
---|
313 | */ |
---|
314 | - (void)registerMessageDisplayPlugin:(id <AIMessageDisplayPlugin>)inPlugin; |
---|
315 | |
---|
316 | /*! |
---|
317 | * @brief Unregister an object previously registered with registerMessageDisplayPlugin. |
---|
318 | */ |
---|
319 | - (void)unregisterMessageDisplayPlugin:(id <AIMessageDisplayPlugin>)inPlugin; |
---|
320 | |
---|
321 | /*! |
---|
322 | * @brief Get the AIMessageDisplayController-conforming object for a chat |
---|
323 | * |
---|
324 | * Every chat has exactly one. You can get it! |
---|
325 | */ |
---|
326 | - (id <AIMessageDisplayController>)messageDisplayControllerForChat:(AIChat *)inChat; |
---|
327 | |
---|
328 | #pragma mark Error Display |
---|
329 | - (void)handleErrorMessage:(NSString *)inTitle withDescription:(NSString *)inDesc; |
---|
330 | - (void)handleMessage:(NSString *)inTitle withDescription:(NSString *)inDesc withWindowTitle:(NSString *)inWindowTitle; |
---|
331 | |
---|
332 | #pragma mark Question Display |
---|
333 | - (void)displayQuestion:(NSString *)inTitle withAttributedDescription:(NSAttributedString *)inDesc withWindowTitle:(NSString *)inWindowTitle |
---|
334 | defaultButton:(NSString *)inDefaultButton alternateButton:(NSString *)inAlternateButton otherButton:(NSString *)inOtherButton |
---|
335 | target:(id)inTarget selector:(SEL)inSelector userInfo:(id)inUserInfo; |
---|
336 | - (void)displayQuestion:(NSString *)inTitle withDescription:(NSString *)inDesc withWindowTitle:(NSString *)inWindowTitle |
---|
337 | defaultButton:(NSString *)inDefaultButton alternateButton:(NSString *)inAlternateButton otherButton:(NSString *)inOtherButton |
---|
338 | target:(id)inTarget selector:(SEL)inSelector userInfo:(id)inUserInfo; |
---|
339 | |
---|
340 | #pragma mark Synchronized Flashing |
---|
341 | - (void)registerFlashObserver:(id <AIFlashObserver>)inObserver; |
---|
342 | - (void)unregisterFlashObserver:(id <AIFlashObserver>)inObserver; |
---|
343 | - (int)flashState; |
---|
344 | |
---|
345 | #pragma mark Tooltips |
---|
346 | /*! |
---|
347 | * @brief Register a tooltip-supplying object |
---|
348 | * |
---|
349 | * @param inEntry The object which will be queried for information when building a tooltip. Must conform to the AIContactListTooltipEntry protocol. |
---|
350 | * @param isSecondary Most tooltips are secondary; this means they are displayed in the bottom half of the tooltip which can expand as needed. |
---|
351 | */ |
---|
352 | - (void)registerContactListTooltipEntry:(id <AIContactListTooltipEntry>)inEntry secondaryEntry:(BOOL)isSecondary; |
---|
353 | |
---|
354 | /*! |
---|
355 | * @brief Unregister a previously reigstered tooltip-supplying object |
---|
356 | * |
---|
357 | * @param inEntry The object to unregister |
---|
358 | * @param isSecondary This should match the value passed to registerContactListTooltipEntry:secondaryEntry: |
---|
359 | */ |
---|
360 | - (void)unregisterContactListTooltipEntry:(id <AIContactListTooltipEntry>)inEntry secondaryEntry:(BOOL)isSecondary; |
---|
361 | |
---|
362 | /*! |
---|
363 | * @brief Get an array of all primary contact list tooltip entries |
---|
364 | * |
---|
365 | * @result An NSArray of objects conforming to AIContactListTooltipEntry |
---|
366 | */ |
---|
367 | - (NSArray *)contactListTooltipPrimaryEntries; |
---|
368 | |
---|
369 | /*! |
---|
370 | * @brief Get an array of all secondary contact list tooltip entries |
---|
371 | * |
---|
372 | * @result An NSArray of objects conforming to AIContactListTooltipEntry |
---|
373 | */ |
---|
374 | - (NSArray *)contactListTooltipSecondaryEntries; |
---|
375 | |
---|
376 | /*! |
---|
377 | * @brief Show an object's tooltip at a given point |
---|
378 | * |
---|
379 | * If object is not nil, the tooltip box will be shown for that object at the given point. It is created if needed; |
---|
380 | * if there is an existing object tooltip, that window is moved to the given point and reconfigured for object. |
---|
381 | * This is a rich-text, information-rich tooltip, not a simple text tooltip as seen elsewhere in Mac OS X. |
---|
382 | * |
---|
383 | * @param object The object for which the tooltip should be shown. Pass nil to hide any existing tooltip. |
---|
384 | * @param point The point in screen coordinates for the tooltip's origin. If object is nil, this value is ignored. |
---|
385 | * @param inWindow The window from which the tooltip is originating. If object is nil, this value is ignored. |
---|
386 | */ |
---|
387 | - (void)showTooltipForListObject:(AIListObject *)object atScreenPoint:(NSPoint)point onWindow:(NSWindow *)inWindow; |
---|
388 | |
---|
389 | #pragma mark Window level menu |
---|
390 | /*! |
---|
391 | * @brief Build a menu of possible window levels |
---|
392 | * |
---|
393 | * Window levels may be, for example, 'Above other windows' or 'Normally'. |
---|
394 | * |
---|
395 | * @param target The target on which @selector(selectedWindowLevel:) will be called when a menu item is selected |
---|
396 | */ |
---|
397 | - (NSMenu *)menuForWindowLevelsNotifyingTarget:(id)target; |
---|
398 | |
---|
399 | @end |
---|
400 | |
---|
401 | //Controls a contact list view |
---|
402 | @protocol AIContactListViewController <NSObject> |
---|
403 | - (NSView *)contactListView; |
---|
404 | @end |
---|
405 | |
---|
406 | //Manages contact list view controllers |
---|
407 | @protocol AIContactListController <NSObject> |
---|
408 | - (id <AIContactListViewController>)contactListViewController; |
---|
409 | @end |
---|
410 | |
---|
411 | /*! |
---|
412 | * @protocol AIMessageDisplayController |
---|
413 | * @brief The message display controller is responsible for, unsurprisingly, the actual display of messages. |
---|
414 | * |
---|
415 | * The display controller manages a view ("messageView") which will be inserted along with other UI elements such |
---|
416 | * as a text entry area into a window. The Interface Plugin knows nothing about how the AIMessageDisplayController |
---|
417 | * keeps its messageView up to date, nor should it, but knows that the view will show messages. |
---|
418 | * |
---|
419 | * The AIMessageDisplayController is informed when the message view which is using it is closing. |
---|
420 | * |
---|
421 | * This is, for example, the AIWebKitMessageViewController. |
---|
422 | */ |
---|
423 | @protocol AIMessageDisplayController <NSObject> |
---|
424 | - (void)setChatContentSource:(NSString *)source; |
---|
425 | - (NSString *)chatContentSource; |
---|
426 | - (NSString *)contentSourceName; // Unique name for this particular style of "content source". |
---|
427 | |
---|
428 | - (NSView *)messageView; |
---|
429 | - (NSView *)messageScrollView; |
---|
430 | - (void)messageViewIsClosing; |
---|
431 | - (void)clearView; |
---|
432 | @end |
---|
433 | |
---|
434 | /* |
---|
435 | * @protocol AIMessageDisplayPlugin |
---|
436 | * @brief A AIMessageDisplayPlugin provides AIMessageDisplayController objects on demand. |
---|
437 | * |
---|
438 | * The WebKit display plugin is one example. |
---|
439 | */ |
---|
440 | @protocol AIMessageDisplayPlugin <NSObject, AIPlugin> |
---|
441 | - (id <AIMessageDisplayController>)messageDisplayControllerForChat:(AIChat *)inChat; |
---|
442 | @end |
---|
443 | |
---|
444 | @protocol AIContactListTooltipEntry <NSObject> |
---|
445 | - (NSString *)labelForObject:(AIListObject *)inObject; |
---|
446 | - (NSAttributedString *)entryForObject:(AIListObject *)inObject; |
---|
447 | - (BOOL)shouldDisplayInContactInspector; |
---|
448 | @end |
---|
449 | |
---|
450 | @protocol AIFlashObserver <NSObject> |
---|
451 | - (void)flash:(int)value; |
---|
452 | @end |
---|
453 | |
---|
454 | //Handles any attributed text entry |
---|
455 | @protocol AITextEntryView |
---|
456 | - (void)setAttributedString:(NSAttributedString *)inAttributedString; |
---|
457 | - (void)setTypingAttributes:(NSDictionary *)attrs; |
---|
458 | - (BOOL)availableForSending; |
---|
459 | - (AIChat *)chat; |
---|
460 | @end |
---|
461 | |
---|
462 | @protocol AIInterfaceComponent <NSObject> |
---|
463 | - (void)openInterface; |
---|
464 | - (void)closeInterface; |
---|
465 | - (id)openChat:(AIChat *)chat inContainerWithID:(NSString *)containerID withName:(NSString *)containerName atIndex:(int)index; |
---|
466 | - (void)setActiveChat:(AIChat *)inChat; |
---|
467 | - (void)moveChat:(AIChat *)chat toContainerWithID:(NSString *)containerID index:(int)index; |
---|
468 | - (void)moveChatToNewContainer:(AIChat *)inChat; |
---|
469 | - (void)closeChat:(AIChat *)chat; |
---|
470 | - (AIMessageWindowController *)openContainerWithID:(NSString *)containerID name:(NSString *)containerName; |
---|
471 | /*! |
---|
472 | * @brief Return an array of NSDictionary objects for all open containers with associated information |
---|
473 | * |
---|
474 | * The returned array has zero or more NSDictionary objects with the following information for each container |
---|
475 | * Key Value |
---|
476 | * @"ID" NSString of the containerID |
---|
477 | * @"Frame" NSString of the window's [NSWindow frame] |
---|
478 | * @"Content" NSArray of the AIChat objects within that container |
---|
479 | * @"ActiveChat" AIChat that is currently active |
---|
480 | * @"Name" NSString of the container's name |
---|
481 | */ |
---|
482 | - (NSArray *)openContainersAndChats; |
---|
483 | - (NSArray *)openContainerIDs; |
---|
484 | - (NSArray *)openChats; |
---|
485 | - (NSArray *)openChatsInContainerWithID:(NSString *)containerID; |
---|
486 | - (NSString *)containerIDForChat:(AIChat *)chat; |
---|
487 | - (NSWindow *)windowForChat:(AIChat *)chat; |
---|
488 | - (AIChat *)activeChatInWindow:(NSWindow *)window; |
---|
489 | @end |
---|
490 | |
---|
491 | /*! |
---|
492 | * @protocol AIInterfaceContainer |
---|
493 | * @brief This protocol is for a general interface element such as the contact list or the container of a chat |
---|
494 | */ |
---|
495 | @protocol AIInterfaceContainer <NSObject> |
---|
496 | - (void)makeActive:(id)sender; //Make the container active/front |
---|
497 | - (void)close:(id)sender; //Close the container |
---|
498 | @end |
---|
499 | |
---|
500 | /*! |
---|
501 | * @brief AIChatWindow defines the protocol for an object which contains one or more AIChatContainers |
---|
502 | */ |
---|
503 | @protocol AIChatWindowController <NSObject> |
---|
504 | /* |
---|
505 | * @brief Get an array of all the chats within this window controller's window. |
---|
506 | */ |
---|
507 | - (NSArray *)containedChats; |
---|
508 | |
---|
509 | /* |
---|
510 | * @brief The window |
---|
511 | */ |
---|
512 | - (NSWindow *)window; |
---|
513 | @end |
---|
514 | |
---|
515 | /*! |
---|
516 | * @protocol AIChatViewController |
---|
517 | * @brief A AIChatViewController manages everything pertaining to a chat's view area |
---|
518 | * |
---|
519 | * It will manage this view, text input, and any associated controls. |
---|
520 | */ |
---|
521 | @protocol AIChatViewController <NSObject> |
---|
522 | - (NSView *)view; |
---|
523 | - (NSScrollView *)messagesScrollView; |
---|
524 | - (AIChat *)chat; |
---|
525 | |
---|
526 | /*! |
---|
527 | * @brief Show/hide the user list for a group chat. |
---|
528 | * Does nothing if not in a group chat. |
---|
529 | */ |
---|
530 | - (void)toggleUserList; |
---|
531 | |
---|
532 | /*! |
---|
533 | * @brief Is the user list visible for a group chat? |
---|
534 | */ |
---|
535 | - (BOOL)userListVisible; |
---|
536 | @end |
---|
537 | |
---|
538 | /*! |
---|
539 | * @protocol AIChatContainer |
---|
540 | * @brief This protocol is for an object which displays a single chat (e.g. a tab in a chat window) |
---|
541 | */ |
---|
542 | @protocol AIChatContainer <AIInterfaceContainer> |
---|
543 | /* |
---|
544 | * @brief Get the window controller which holds this AIChatContainer |
---|
545 | */ |
---|
546 | - (id <AIChatWindowController>)windowController; |
---|
547 | |
---|
548 | /* |
---|
549 | * @brief Get the view controller for this AIChatContainer |
---|
550 | */ |
---|
551 | - (id <AIChatViewController>)chatViewController; |
---|
552 | @end |
---|
553 | |
---|
554 | @protocol AIContactListComponent <NSObject> |
---|
555 | /*! |
---|
556 | * @brief Show the contact list window and bring Adium to the front |
---|
557 | */ |
---|
558 | - (void)showContactListAndBringToFront:(BOOL)bringToFront; |
---|
559 | - (BOOL)contactListIsVisibleAndMain; |
---|
560 | - (BOOL)contactListIsVisible; |
---|
561 | - (void)closeContactList; |
---|
562 | @end |
---|
563 | |
---|
564 | @protocol AIMultiContactListComponent <AIContactListComponent> |
---|
565 | - (id)detachContactList:(AIListGroup *)contactList; |
---|
566 | - (void)nextDetachedContactList; |
---|
567 | - (void)previousDetachedContactList; |
---|
568 | - (unsigned)detachedContactListCount; |
---|
569 | @end |
---|
570 | |
---|
571 | //Custom printing informal protocol |
---|
572 | @interface NSObject (AdiumPrinting) |
---|
573 | - (void)adiumPrint:(id)sender; |
---|
574 | - (BOOL)validatePrintMenuItem:(NSMenuItem *)menuItem; |
---|
575 | @end |
---|
576 | |
---|
577 | @interface NSWindowController (AdiumBorderlessWindowClosing) |
---|
578 | - (BOOL)windowPermitsClose; |
---|
579 | @end |
---|