--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/osswebengine/WebKit/win/Interfaces/IWebUIDelegate.idl Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,783 @@
+/*
+ * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+cpp_quote("/*")
+cpp_quote(" * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.")
+cpp_quote(" *")
+cpp_quote(" * Redistribution and use in source and binary forms, with or without")
+cpp_quote(" * modification, are permitted provided that the following conditions")
+cpp_quote(" * are met:")
+cpp_quote(" * 1. Redistributions of source code must retain the above copyright")
+cpp_quote(" * notice, this list of conditions and the following disclaimer.")
+cpp_quote(" * 2. Redistributions in binary form must reproduce the above copyright")
+cpp_quote(" * notice, this list of conditions and the following disclaimer in the")
+cpp_quote(" * documentation and/or other materials provided with the distribution.")
+cpp_quote(" *")
+cpp_quote(" * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY")
+cpp_quote(" * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE")
+cpp_quote(" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR")
+cpp_quote(" * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR")
+cpp_quote(" * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,")
+cpp_quote(" * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,")
+cpp_quote(" * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR")
+cpp_quote(" * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY")
+cpp_quote(" * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT")
+cpp_quote(" * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE")
+cpp_quote(" * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ")
+cpp_quote(" */")
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "IWebUndoTarget.idl";
+import "IWebURLRequest.idl";
+import "IWebFrame.idl";
+
+interface IWebFrame;
+interface IWebView;
+interface IWebURLRequest;
+
+/*!
+ @enum WebMenuItemTag
+ @discussion Each menu item in the default menu items array passed in
+ contextMenuItemsForElement:defaultMenuItems: has its tag set to one of the WebMenuItemTags.
+ When iterating through the default menu items array, use the tag to differentiate between them.
+*/
+typedef enum WebMenuItemTag {
+ WebMenuItemTagOpenLinkInNewWindow=1,
+ WebMenuItemTagDownloadLinkToDisk,
+ WebMenuItemTagCopyLinkToClipboard,
+ WebMenuItemTagOpenImageInNewWindow,
+ WebMenuItemTagDownloadImageToDisk,
+ WebMenuItemTagCopyImageToClipboard,
+ WebMenuItemTagOpenFrameInNewWindow,
+ WebMenuItemTagCopy,
+ WebMenuItemTagGoBack,
+ WebMenuItemTagGoForward,
+ WebMenuItemTagStop,
+ WebMenuItemTagReload,
+ WebMenuItemTagCut,
+ WebMenuItemTagPaste,
+ WebMenuItemTagSpellingGuess,
+ WebMenuItemTagNoGuessesFound,
+ WebMenuItemTagIgnoreSpelling,
+ WebMenuItemTagLearnSpelling,
+ WebMenuItemTagOther,
+ WebMenuItemTagSearchInSpotlight,
+ WebMenuItemTagSearchWeb,
+ WebMenuItemTagLookUpInDictionary,
+ WebMenuItemTagOpenWithDefaultApplication,
+ WebMenuItemPDFActualSize,
+ WebMenuItemPDFZoomIn,
+ WebMenuItemPDFZoomOut,
+ WebMenuItemPDFAutoSize,
+ WebMenuItemPDFSinglePage,
+ WebMenuItemPDFFacingPages,
+ WebMenuItemPDFContinuous,
+ WebMenuItemPDFNextPage,
+ WebMenuItemPDFPreviousPage,
+ // FIXME: Review these names before release!
+ WebMenuItemTagOpenLink = 2000,
+ WebMenuItemTagIgnoreGrammar,
+ WebtMenuItemTagSpellingMenu,
+ WebMenuItemTagShowSpellingPanel,
+ WebMenuItemTagCheckSpelling,
+ WebMenuItemTagCheckSpellingWhileTyping,
+ WebMenuItemTagCheckGrammarWithSpelling,
+ WebMenuItemTagFontMenu,
+ WebMenuItemTagShowFonts,
+ WebMenuItemTagBold,
+ WebMenuItemTagItalic,
+ WebMenuItemTagUnderline,
+ WebMenuItemTagOutline,
+ WebMenuItemTagStyles,
+ WebMenuItemTagShowColors,
+ WebMenuItemTagSpeechMenu,
+ WebMenuItemTagStartSpeaking,
+ WebMenuItemTagStopSpeaking,
+ WebMenuItemTagWritingDirectionMenu,
+ WebMenuItemTagDefaultDirection,
+ WebMenuItemTagLeftToRight,
+ WebMenuItemTagRightToLeft,
+ WebMenuItemTagPDFSinglePageScrolling,
+ WebMenuItemTagPDFFacingPagesScrolling,
+ WebMenuItemTagInspectElement,
+ WebMenuItemBaseApplicationTag=10000
+} WebMenuItemTag;
+
+/*!
+ @enum WebDragDestinationAction
+ @abstract Actions that the destination of a drag can perform.
+ @constant WebDragDestinationActionNone No action
+ @constant WebDragDestinationActionDHTML Allows DHTML (such as JavaScript) to handle the drag
+ @constant WebDragDestinationActionEdit Allows editable documents to be edited from the drag
+ @constant WebDragDestinationActionLoad Allows a location change from the drag
+ @constant WebDragDestinationActionAny Allows any of the above to occur
+*/
+typedef enum WebDragDestinationAction {
+ WebDragDestinationActionNone = 0,
+ WebDragDestinationActionDHTML = 1,
+ WebDragDestinationActionEdit = 2,
+ WebDragDestinationActionLoad = 4,
+ WebDragDestinationActionAny = (unsigned long)-1
+} WebDragDestinationAction;
+
+/*!
+ @enum WebDragSourceAction
+ @abstract Actions that the source of a drag can perform.
+ @constant WebDragSourceActionNone No action
+ @constant WebDragSourceActionDHTML Allows DHTML (such as JavaScript) to start a drag
+ @constant WebDragSourceActionImage Allows an image drag to occur
+ @constant WebDragSourceActionLink Allows a link drag to occur
+ @constant WebDragSourceActionSelection Allows a selection drag to occur
+ @constant WebDragSourceActionAny Allows any of the above to occur
+*/
+typedef enum WebDragSourceAction {
+ WebDragSourceActionNone = 0,
+ WebDragSourceActionDHTML = 1,
+ WebDragSourceActionImage = 2,
+ WebDragSourceActionLink = 4,
+ WebDragSourceActionSelection = 8,
+ WebDragSourceActionAny = (unsigned long)-1
+} WebDragSourceAction;
+
+
+/*!
+ @protocol WebOpenPanelResultListener
+ @discussion This protocol is used to call back with the results of
+ the file open panel requested by runOpenPanelForFileButtonWithResultListener:
+ @protocol WebOpenPanelResultListener <NSObject>
+*/
+[
+ object,
+ oleautomation,
+ uuid(634198C7-9DFC-4aba-9E8C-90AEEA7A4144),
+ pointer_default(unique)
+]
+interface IWebOpenPanelResultListener : IUnknown
+{
+ /*!
+ @method chooseFilename:
+ @abstract Call this method to return a filename from the file open panel.
+ @param fileName
+ - (void)chooseFilename:(NSString *)fileName;
+ */
+ HRESULT chooseFilename([out, retval] BSTR* fileName);
+
+ /*!
+ @method cancel
+ @abstract Call this method to indicate that the file open panel was cancelled.
+ - (void)cancel;
+ */
+ HRESULT cancel();
+}
+
+/*!
+ @category WebUIDelegate
+ @discussion A class that implements WebUIDelegate provides
+ window-related methods that may be used by Javascript, plugins and
+ other aspects of web pages. These methods are used to open new
+ windows and control aspects of existing windows.
+ @interface NSObject (WebUIDelegate)
+*/
+[
+ object,
+ oleautomation,
+ uuid(2452A889-A74A-4fbc-9617-326A0A953630),
+ pointer_default(unique)
+]
+interface IWebUIDelegate : IUnknown
+{
+ /*!
+ @method webView:createWebViewWithRequest:
+ @abstract Create a new window and begin to load the specified request.
+ @discussion The newly created window is hidden, and the window operations delegate on the
+ new WebViews will get a webViewShow: call.
+ @param sender The WebView sending the delegate method.
+ @param request The request to load.
+ @result The WebView for the new window.
+ - (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request;
+ */
+ HRESULT createWebViewWithRequest([in] IWebView* sender, [in] IWebURLRequest* request, [out, retval] IWebView** newWebView);
+
+ /*!
+ @method webViewShow:
+ @param sender The WebView sending the delegate method.
+ @abstract Show the window that contains the top level view of the WebView,
+ ordering it frontmost.
+ @discussion This will only be called just after createWindowWithRequest:
+ is used to create a new window.
+ - (void)webViewShow:(WebView *)sender;
+ */
+ HRESULT webViewShow([in] IWebView* sender);
+
+ /*!
+ @method webViewClose:
+ @abstract Close the current window.
+ @param sender The WebView sending the delegate method.
+ @discussion Clients showing multiple views in one window may
+ choose to close only the one corresponding to this
+ WebView. Other clients may choose to ignore this method
+ entirely.
+ - (void)webViewClose:(WebView *)sender;
+ */
+ HRESULT webViewClose([in] IWebView* sender);
+
+ /*!
+ @method webViewFocus:
+ @abstract Focus the current window (i.e. makeKeyAndOrderFront:).
+ @param The WebView sending the delegate method.
+ @discussion Clients showing multiple views in one window may want to
+ also do something to focus the one corresponding to this WebView.
+ - (void)webViewFocus:(WebView *)sender;
+ */
+ HRESULT webViewFocus([in] IWebView* sender);
+
+ /*!
+ @method webViewUnfocus:
+ @abstract Unfocus the current window.
+ @param sender The WebView sending the delegate method.
+ @discussion Clients showing multiple views in one window may want to
+ also do something to unfocus the one corresponding to this WebView.
+ - (void)webViewUnfocus:(WebView *)sender;
+ */
+ HRESULT webViewUnfocus([in] IWebView* sender);
+
+ /*!
+ @method webViewFirstResponder:
+ @abstract Get the first responder for this window.
+ @param sender The WebView sending the delegate method.
+ @discussion This method should return the focused control in the
+ WebView's view, if any. If the view is out of the window
+ hierarchy, this might return something than calling firstResponder
+ on the real NSWindow would. It's OK to return either nil or the
+ real first responder if some control not in the window has focus.
+ - (NSResponder *)webViewFirstResponder:(WebView *)sender;
+ */
+ HRESULT webViewFirstResponder([in] IWebView* sender, [out, retval] OLE_HANDLE* responderHWnd);
+
+ /*!
+ @method webView:makeFirstResponder:
+ @abstract Set the first responder for this window.
+ @param sender The WebView sending the delegate method.
+ @param responder The responder to make first (will always be a view)
+ @discussion responder will always be a view that is in the view
+ subhierarchy of the top-level web view for this WebView. If the
+ WebView's top level view is currently out of the view
+ hierarchy, it may be desirable to save the first responder
+ elsewhere, or possibly ignore this call.
+ - (void)webView:(WebView *)sender makeFirstResponder:(NSResponder *)responder;
+ */
+ HRESULT makeFirstResponder([in] IWebView* sender, [in] OLE_HANDLE responderHWnd);
+
+ /*!
+ @method webView:setStatusText:
+ @abstract Set the window's status display, if any, to the specified string.
+ @param sender The WebView sending the delegate method.
+ @param text The status text to set
+ - (void)webView:(WebView *)sender setStatusText:(NSString *)text;
+ */
+ HRESULT setStatusText([in] IWebView* sender, [in] BSTR text);
+
+ /*!
+ @method webViewStatusText:
+ @abstract Get the currently displayed status text.
+ @param sender The WebView sending the delegate method.
+ @result The status text
+ - (NSString *)webViewStatusText:(WebView *)sender;
+ */
+ HRESULT webViewStatusText([in] IWebView* sender, [out, retval] BSTR* text);
+
+ /*!
+ @method webViewAreToolbarsVisible:
+ @abstract Determine whether the window's toolbars are currently visible
+ @param sender The WebView sending the delegate method.
+ @discussion This method should return YES if the window has any
+ toolbars that are currently on, besides the status bar. If the app
+ has more than one toolbar per window, for example a regular
+ command toolbar and a favorites bar, it should return YES from
+ this method if at least one is on.
+ @result YES if at least one toolbar is visible, otherwise NO.
+ - (BOOL)webViewAreToolbarsVisible:(WebView *)sender;
+ */
+ HRESULT webViewAreToolbarsVisible([in] IWebView* sender, [out, retval] BOOL* visible);
+
+ /*!
+ @method webView:setToolbarsVisible:
+ @param sender The WebView sending the delegate method.
+ @abstract Set whether the window's toolbars are currently visible.
+ @param visible New value for toolbar visibility
+ @discussion Setting this to YES should turn on all toolbars
+ (except for a possible status bar). Setting it to NO should turn
+ off all toolbars (with the same exception).
+ - (void)webView:(WebView *)sender setToolbarsVisible:(BOOL)visible;
+ */
+ HRESULT setToolbarsVisible([in] IWebView* sender, [in] BOOL visible);
+
+ /*!
+ @method webViewIsStatusBarVisible:
+ @abstract Determine whether the status bar is visible.
+ @param sender The WebView sending the delegate method.
+ @result YES if the status bar is visible, otherwise NO.
+ - (BOOL)webViewIsStatusBarVisible:(WebView *)sender;
+ */
+ HRESULT webViewIsStatusBarVisible([in] IWebView* sender, [out, retval] BOOL* visible);
+
+ /*!
+ @method webView:setStatusBarVisible:
+ @abstract Set whether the status bar is currently visible.
+ @param visible The new visibility value
+ @discussion Setting this to YES should show the status bar,
+ setting it to NO should hide it.
+ - (void)webView:(WebView *)sender setStatusBarVisible:(BOOL)visible;
+ */
+ HRESULT setStatusBarVisible([in] IWebView* sender, [in] BOOL visible);
+
+ /*!
+ @method webViewIsResizable:
+ @abstract Determine whether the window is resizable or not.
+ @param sender The WebView sending the delegate method.
+ @result YES if resizable, NO if not.
+ @discussion If there are multiple views in the same window, they
+ have have their own separate resize controls and this may need to
+ be handled specially.
+ - (BOOL)webViewIsResizable:(WebView *)sender;
+ */
+ HRESULT webViewIsResizable([in] IWebView* sender, [out, retval] BOOL* resizable);
+
+ /*!
+ @method webView:setResizable:
+ @abstract Set the window to resizable or not
+ @param sender The WebView sending the delegate method.
+ @param resizable YES if the window should be made resizable, NO if not.
+ @discussion If there are multiple views in the same window, they
+ have have their own separate resize controls and this may need to
+ be handled specially.
+ - (void)webView:(WebView *)sender setResizable:(BOOL)resizable;
+ */
+ HRESULT setResizable([in] IWebView* sender, [in] BOOL resizable);
+
+ /*!
+ @method webView:setFrame:
+ @abstract Set the window's frame rect
+ @param sender The WebView sending the delegate method.
+ @param frame The new window frame size
+ @discussion Even though a caller could set the frame directly using the NSWindow,
+ this method is provided so implementors of this protocol can do special
+ things on programmatic move/resize, like avoiding autosaving of the size.
+ - (void)webView:(WebView *)sender setFrame:(NSRect)frame;
+ */
+ HRESULT setFrame([in] IWebView* sender, [in] RECT* frame);
+
+ /*!
+ @method webViewFrame:
+ @param sender The WebView sending the delegate method.
+ @abstract REturn the window's frame rect
+ @discussion
+ - (NSRect)webViewFrame:(WebView *)sender;
+ */
+ HRESULT webViewFrame([in] IWebView* sender, [out, retval] RECT* frame);
+
+ /*!
+ @method webView:setContentRect:
+ @abstract Set the window's content rect
+ @param sender The WebView sending the delegate method.
+ @param frame The new window content rect
+ @discussion Even though a caller could set the content rect
+ directly using the NSWindow, this method is provided so
+ implementors of this protocol can do special things on
+ programmatic move/resize, like avoiding autosaving of the size.
+ - (void)webView:(WebView *)sender setContentRect:(NSRect)contentRect;
+ */
+ HRESULT setContentRect([in] IWebView* sender, [in] RECT* contentRect);
+
+ /*!
+ @method webViewContentRect:
+ @abstract Return the window's content rect
+ @discussion
+ - (NSRect)webViewContentRect:(WebView *)sender;
+ */
+ HRESULT webViewContentRect([in] IWebView* sender, [out, retval] RECT* contentRect);
+
+ /*!
+ @method webView:runJavaScriptAlertPanelWithMessage:
+ @abstract Display a JavaScript alert panel
+ @param sender The WebView sending the delegate method.
+ @param message The message to display
+ @discussion Clients should visually indicate that this panel comes
+ from JavaScript. The panel should have a single OK button.
+ - (void)webView:(WebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message;
+ */
+ HRESULT runJavaScriptAlertPanelWithMessage([in] IWebView* sender, [in] BSTR message);
+
+ /*!
+ @method webView:runJavaScriptConfirmPanelWithMessage:
+ @abstract Display a JavaScript confirm panel
+ @param sender The WebView sending the delegate method.
+ @param message The message to display
+ @result YES if the user hit OK, no if the user chose Cancel.
+ @discussion Clients should visually indicate that this panel comes
+ from JavaScript. The panel should have two buttons, e.g. "OK" and
+ "Cancel".
+ - (BOOL)webView:(WebView *)sender runJavaScriptConfirmPanelWithMessage:(NSString *)message;
+ */
+ HRESULT runJavaScriptConfirmPanelWithMessage([in] IWebView* sender, [in] BSTR message, [out, retval] BOOL* result);
+
+ /*!
+ @method webView:runJavaScriptTextInputPanelWithPrompt:defaultText:
+ @abstract Display a JavaScript text input panel
+ @param sender The WebView sending the delegate method.
+ @param message The message to display
+ @param defaultText The initial text for the text entry area.
+ @result The typed text if the user hit OK, otherwise nil.
+ @discussion Clients should visually indicate that this panel comes
+ from JavaScript. The panel should have two buttons, e.g. "OK" and
+ "Cancel", and an area to type text.
+ - (NSString *)webView:(WebView *)sender runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText;
+ */
+ HRESULT runJavaScriptTextInputPanelWithPrompt([in] IWebView* sender, [in] BSTR message, [in] BSTR defaultText, [out, retval] BSTR* result);
+
+ /*!
+ @method webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:
+ @abstract Display a confirm panel by an "before unload" event handler.
+ @param sender The WebView sending the delegate method.
+ @param message The message to display.
+ @param frame The WebFrame whose JavaScript initiated this call.
+ @result YES if the user hit OK, NO if the user chose Cancel.
+ @discussion Clients should include a message in addition to the one
+ supplied by the web page that indicates. The panel should have
+ two buttons, e.g. "OK" and "Cancel".
+ - (BOOL)webView:(WebView *)sender runBeforeUnloadConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame;
+ */
+ HRESULT runBeforeUnloadConfirmPanelWithMessage([in] IWebView* sender, [in] BSTR message, [in] IWebFrame* initiatedByFrame, [out, retval] BOOL* result);
+
+ /*!
+ @method webView:runOpenPanelForFileButtonWithResultListener:
+ @abstract Display a file open panel for a file input control.
+ @param sender The WebView sending the delegate method.
+ @param resultListener The object to call back with the results.
+ @discussion This method is passed a callback object instead of giving a return
+ value so that it can be handled with a sheet.
+ - (void)webView:(WebView *)sender runOpenPanelForFileButtonWithResultListener:(id<WebOpenPanelResultListener>)resultListener;
+ */
+ HRESULT runOpenPanelForFileButtonWithResultListener([in] IWebView* sender, [in] IWebOpenPanelResultListener* resultListener);
+
+ /*!
+ @method webView:mouseDidMoveOverElement:modifierFlags:
+ @abstract Update the window's feedback for mousing over links to reflect a new item the mouse is over
+ or new modifier flags.
+ @param sender The WebView sending the delegate method.
+ @param elementInformation Dictionary that describes the element that the mouse is over, or nil.
+ @param modifierFlags The modifier flags as in NSEvent.
+ - (void)webView:(WebView *)sender mouseDidMoveOverElement:(NSDictionary *)elementInformation modifierFlags:(WebNSUInt)modifierFlags;
+ */
+ HRESULT mouseDidMoveOverElement([in] IWebView* sender, [in] IPropertyBag* elementInformation, [in] UINT modifierFlags);
+
+ /*!
+ @method webView:contextMenuItemsForElement:defaultMenuItems:
+ @abstract Returns the menu items to display in an element's contextual menu.
+ @param sender The WebView sending the delegate method.
+ @param element A dictionary representation of the clicked element.
+ @param defaultMenuItems An array of default NSMenuItems to include in all contextual menus.
+ @result An array of NSMenuItems to include in the contextual menu.
+ - (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems;
+ */
+ HRESULT contextMenuItemsForElement([in] IWebView* sender, [in] IPropertyBag* element, [in] OLE_HANDLE defaultItemsHMenu, [out, retval] OLE_HANDLE* resultHMenu);
+
+ /*!
+ @method webView:validateUserInterfaceItem:defaultValidation:
+ @abstract Controls UI validation
+ @param webView The WebView sending the delegate method
+ @param item The user interface item being validated
+ @pararm defaultValidation Whether or not the WebView thinks the item is valid
+ @discussion This method allows the UI delegate to control WebView's validation of user interface items.
+ See WebView.h to see the methods to that WebView can currently validate. See NSUserInterfaceValidations and
+ NSValidatedUserInterfaceItem for information about UI validation.
+ - (BOOL)webView:(WebView *)webView validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)item defaultValidation:(BOOL)defaultValidation;
+ */
+ HRESULT validateUserInterfaceItem([in] IWebView* webView, [in] UINT itemCommandID, [in] BOOL defaultValidation, [out, retval] BOOL* isValid);
+
+ /*!
+ @method webView:shouldPerformAction:fromSender:
+ @abstract Controls actions
+ @param webView The WebView sending the delegate method
+ @param action The action being sent
+ @param sender The sender of the action
+ @discussion This method allows the UI delegate to control WebView's behavior when an action is being sent.
+ For example, if the action is copy:, the delegate can return YES to allow WebView to perform its default
+ copy behavior or return NO and perform copy: in some other way. See WebView.h to see the actions that
+ WebView can perform.
+ - (BOOL)webView:(WebView *)webView shouldPerformAction:(SEL)action fromSender:(id)sender;
+ */
+ HRESULT shouldPerformAction([in] IWebView* webView, [in] UINT itemCommandID, [in] UINT sender);
+
+ /*!
+ @method webView:dragDestinationActionMaskForDraggingInfo:
+ @abstract Controls behavior when dragging to a WebView
+ @param webView The WebView sending the delegate method
+ @param draggingInfo The dragging info of the drag
+ @discussion This method is called periodically as something is dragged over a WebView. The UI delegate can return a mask
+ indicating which drag destination actions can occur, WebDragDestinationActionAny to allow any kind of action or
+ WebDragDestinationActionNone to not accept the drag.
+ - (unsigned)webView:(WebView *)webView dragDestinationActionMaskForDraggingInfo:(id <NSDraggingInfo>)draggingInfo;
+ */
+ HRESULT dragDestinationActionMaskForDraggingInfo([in] IWebView* webView, [in] IDataObject* draggingInfo, [out, retval] WebDragDestinationAction* action);
+
+ /*!
+ @method webView:willPerformDragDestinationAction:forDraggingInfo:
+ @abstract Informs that WebView will perform a drag destination action
+ @param webView The WebView sending the delegate method
+ @param action The drag destination action
+ @param draggingInfo The dragging info of the drag
+ @discussion This method is called after the last call to webView:dragDestinationActionMaskForDraggingInfo: after something is dropped on a WebView.
+ This method informs the UI delegate of the drag destination action that WebView will perform.
+ - (void)webView:(WebView *)webView willPerformDragDestinationAction:(WebDragDestinationAction)action forDraggingInfo:(id <NSDraggingInfo>)draggingInfo;
+ */
+ HRESULT willPerformDragDestinationAction([in] IWebView* webView, [in] WebDragDestinationAction action, [in] IDataObject* draggingInfo);
+
+ /*!
+ @method webView:dragSourceActionMaskForPoint:
+ @abstract Controls behavior when dragging from a WebView
+ @param webView The WebView sending the delegate method
+ @param point The point where the drag started in the coordinates of the WebView
+ @discussion This method is called after the user has begun a drag from a WebView. The UI delegate can return a mask indicating
+ which drag source actions can occur, WebDragSourceActionAny to allow any kind of action or WebDragSourceActionNone to not begin a drag.
+ - (unsigned)webView:(WebView *)webView dragSourceActionMaskForPoint:(NSPoint)point;
+ */
+ HRESULT dragSourceActionMaskForPoint([in] IWebView* webView, [in] LPPOINT point, [out, retval] WebDragSourceAction* action);
+
+ /*!
+ @method webView:willPerformDragSourceAction:fromPoint:withPasteboard:
+ @abstract Informs that a drag a has begun from a WebView
+ @param webView The WebView sending the delegate method
+ @param action The drag source action
+ @param point The point where the drag started in the coordinates of the WebView
+ @param pasteboard The drag pasteboard
+ @discussion This method is called after webView:dragSourceActionMaskForPoint: is called after the user has begun a drag from a WebView.
+ This method informs the UI delegate of the drag source action that will be performed and gives the delegate an opportunity to modify
+ the contents of the dragging pasteboard.
+ - (void)webView:(WebView *)webView willPerformDragSourceAction:(WebDragSourceAction)action fromPoint:(NSPoint)point withPasteboard:(NSPasteboard *)pasteboard;
+ */
+ HRESULT willPerformDragSourceAction([in] IWebView* webView, [in] WebDragSourceAction action, [in] LPPOINT point, [in] IDataObject* pasteboard);
+
+ /*!
+ @method webView:contextMenuItemSelected:ForElement:
+ @abstract Perform the action associated with the selected item.
+ @param sender The WebView sending the delegate method.
+ @param item The menu item that was selected.
+ @param element A dictionary representation of the clicked element.
+ */
+ [local] HRESULT contextMenuItemSelected([in] IWebView* sender, [in] void* item, [in] IPropertyBag* element);
+
+ /*
+ @method hasCustomMenuImplementation:
+ @abstract Returns whether the application uses the following functions to create a custom menu impementation.
+ */
+ HRESULT hasCustomMenuImplementation([out, retval] BOOL* hasCustomMenus);
+
+ /*
+ @method webView:trackCutsomPopupMenu
+ @abstract Adds custom draw data to the menu items and calls a custom trackPopupMenu.
+ @param sender The WebView sending the delegate method.
+ @param menu The menu that we want to pop up.
+ @param point The point associated with the context menu event in the coordinates of the WebView
+ */
+ HRESULT trackCustomPopupMenu([in] IWebView* sender, [in] OLE_HANDLE hMenu, [in] LPPOINT point);
+
+ /*
+ @method webView:measureCustomMenuItem
+ @abstract This is called when the WM_MEASUREITEM command is received to measure the custom menu items
+ @param sender The WebView sending the delegate method.
+ @param measureItem The LPMEASUREITEMSTRUCT associated with the item.
+ */
+ [local] HRESULT measureCustomMenuItem([in] IWebView* sender, [in] void* measureItem);
+
+ /*
+ @method webView:drawCustomMenuItem
+ @abstract This is called when the WM_DRAWITEM command is received to draw the custom menu item
+ @param sender The WebView sending the delegate method.
+ @param drawItem The LPDRAWITEMSTRUCT associated with the item.
+ */
+ [local] HRESULT drawCustomMenuItem([in] IWebView* sender, [in] void* drawItem);
+
+ /*
+ @method webView:addCustomMenuDrawingData
+ @abstract Add custom data to the menu that the delegate can use when asked to draw.
+ @param sender The WebView sending the delegate method.
+ @param menu The cutsom menu to clean up.
+ @discussion This method is called for submenus as well.
+ */
+ HRESULT addCustomMenuDrawingData([in] IWebView* sender, [in] OLE_HANDLE hMenu);
+
+ /*
+ @method webView:cleanUpCustomMenuDrawingData
+ @abstract Clean up any custom data added to the menu items
+ @param sender The WebView sending the delegate method.
+ @param menu The cutsom menu to clean up.
+ */
+ HRESULT cleanUpCustomMenuDrawingData([in] IWebView* sender, [in] OLE_HANDLE hMenu);
+
+ /*!
+ @method webView:canTakeFocus:
+ @abstract Informs whether focus can be transferred out of the WebView in the specified direction
+ @param sender The WebView sending the delegate method.
+ @param forward Whether focus is moving forward or backward.
+ */
+ HRESULT canTakeFocus([in] IWebView* sender, [in] BOOL forward, [out] BOOL* result);
+
+ /*!
+ @method webView:takeFocus:
+ @abstract Instructs the delegate to take focus out of the WebView
+ @param sender The WebView sending the delegate method.
+ @param forward Whether focus is moving forward or backward.
+ */
+ HRESULT takeFocus([in] IWebView* sender, [in] BOOL forward);
+
+ /// Undo related UI delegate methods --------------------------------------------------------------------------------
+
+ /*!
+ @method registerUndoWithTarget:
+ @abstract Registers an undo operation of a IWebUndoTarget on the undo/redo stack.
+ @param target The target that will be called back when the action is undone
+ @param actionName The name of the action - this will be passed back to the target when we need to undo the operation
+ @param actionArg An object that target used to save undo information
+ */
+ HRESULT registerUndoWithTarget([in] IWebUndoTarget* target, [in] BSTR actionName, [in] IUnknown* actionArg);
+
+ /*!
+ @method removeAllActionsWithTarget:
+ @abstract remove all the undo operations that are registered for the passed in target on the undo/redo stack.
+ @param target
+ */
+ HRESULT removeAllActionsWithTarget([in] IWebUndoTarget* target);
+
+ /*!
+ @method setActionTitle:
+ @abstract Sets the name of the action for the current group of undo operations
+ @param actionName Name of the action
+ */
+ HRESULT setActionTitle([in] BSTR actionTitle);
+
+ /*!
+ @method undo:
+ @abstract Undo the last group of operations
+ */
+ HRESULT undo();
+
+ /*!
+ @method redo:
+ @abstract Redo the last group of operations
+ */
+ HRESULT redo();
+
+ /*!
+ @method canUndo:
+ @abstract Returns whether there's anything on the undo stack to be undone
+ */
+ HRESULT canUndo([out, retval] BOOL* result);
+
+ /*!
+ @method canRedo:
+ @abstract Returns whether there's anything on the redo stack to be redone
+ */
+ HRESULT canRedo([out, retval] BOOL* result);
+}
+
+/*!
+ @category WebUIDelegate2
+ @discussion A class that supplements the IWebUIDelegate interface
+*/
+[
+ object,
+ oleautomation,
+ uuid(C6FF73E1-304D-4129-A60C-66326C2578DB),
+ pointer_default(unique)
+]
+interface IWebUIDelegate2 : IWebUIDelegate
+{
+/*!
+ @method webView:printFrame:
+ @abstract Informs that a WebFrame needs to be printed
+ @param webView The WebView sending the delegate method
+ @param frame The WebFrame needing to be printed
+ @discussion This method is called when a script or user requests the page to be printed.
+ In this method the delegate can prepare the WebFrame to be printed.
+*/
+ HRESULT printFrame([in] IWebView* webView, [in] IWebFrame* frame);
+
+/*!
+ @method webView:ftpDirectoryTemplatePath
+ @abstract Returns the path to the FTP directory listing template document
+ @param webView The WebView sending the delegate method
+ @param path The path to the template document
+ @discussion This method is called when an FTP directory listing is viewed in a webView.
+ In practice, all WebViews show the same template document data that was loaded for the very
+ first WebView that displayed a directory listing, so this will only be called once.
+*/
+ HRESULT ftpDirectoryTemplatePath([in] IWebView* webView, [out, retval] BSTR* path);
+
+/*!
+ @method webViewHeaderHeight:
+ @param webView The WebView sending the delegate method
+ @abstract Reserve a height for the printed page header.
+ @result The height to reserve for the printed page header, return 0.0 to not reserve any space for a header.
+ @discussion The height returned will be used to calculate the rect passed to webView:drawHeaderInRect:.
+
+ - (float)webViewHeaderHeight:(WebView *)sender;
+*/
+ HRESULT webViewHeaderHeight([in] IWebView* webView, [out, retval] float* result);
+
+/*!
+ @method webViewFooterHeight:
+ @param webView The WebView sending the delegate method
+ @abstract Reserve a height for the printed page footer.
+ @result The height to reserve for the printed page footer, return 0.0 to not reserve any space for a footer.
+ @discussion The height returned will be used to calculate the rect passed to webView:drawFooterInRect:.
+
+ - (float)webViewFooterHeight:(WebView *)sender;
+*/
+ HRESULT webViewFooterHeight([in] IWebView* webView, [out, retval] float* result);
+
+/*!
+ @method webView:drawHeaderInRect:
+ @param webView The WebView sending the delegate method
+ @param rect The NSRect reserved for the header of the page
+ @abstract The delegate should draw a header for the sender in the supplied rect.
+
+ - (void)webView:(WebView *)sender drawHeaderInRect:(NSRect)rect;
+*/
+ HRESULT drawHeaderInRect([in] IWebView* webView, [in] RECT* rect, [in] OLE_HANDLE drawingContext);
+
+/*!
+ @method webView:drawFooterInRect:
+ @param webView The WebView sending the delegate method
+ @param rect The NSRect reserved for the footer of the page
+ @abstract The delegate should draw a footer for the sender in the supplied rect.
+
+ - (void)webView:(WebView *)sender drawFooterInRect:(NSRect)rect;
+*/
+ HRESULT drawFooterInRect([in] IWebView* webView, [in] RECT* rect, [in] OLE_HANDLE drawingContext, [in] UINT pageIndex, [in] UINT pageCount);
+
+ HRESULT webViewPrintingMarginRect([in] IWebView* webView, [out, retval] RECT* rect);
+}