Bug 460926 A11y hierachy is broken on Ubuntu 8.10 (GNOME 2.24), r=Evan.Yan sr=roc
[wine-gecko.git] / embedding / tests / wxEmbed / EditorFrame.cpp
blob8eb273511d023082050dc338ab077fde2122b4d7
1 /* ***** BEGIN LICENSE BLOCK *****
2 * Version: Mozilla-sample-code 1.0
4 * Copyright (c) 2002 Netscape Communications Corporation and
5 * other contributors
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this Mozilla sample software and associated documentation files
9 * (the "Software"), to deal in the Software without restriction, including
10 * without limitation the rights to use, copy, modify, merge, publish,
11 * distribute, sublicense, and/or sell copies of the Software, and to permit
12 * persons to whom the Software is furnished to do so, subject to the
13 * following conditions:
15 * The above copyright notice and this permission notice shall be included
16 * in all copies or substantial portions of the Software.
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24 * DEALINGS IN THE SOFTWARE.
26 * Contributor(s):
27 * Adam Lock <adamlock@netscape.com>
29 * ***** END LICENSE BLOCK ***** */
31 #include "global.h"
33 #include "nsIWebNavigation.h"
34 #include "nsIDOMDocument.h"
35 #include "nsIDOMHTMLDocument.h"
36 #include "nsIDOMWindow.h"
37 #include "nsIEditingSession.h"
39 #include "EditorFrame.h"
41 BEGIN_EVENT_TABLE(EditorFrame, GeckoFrame)
42 EVT_MENU(XRCID("edit_bold"), EditorFrame::OnEditBold)
43 EVT_MENU(XRCID("edit_italic"), EditorFrame::OnEditItalic)
44 EVT_MENU(XRCID("edit_underline"), EditorFrame::OnEditUnderline)
45 EVT_UPDATE_UI(XRCID("edit_bold"), EditorFrame::OnUpdateToggleCmd)
46 EVT_UPDATE_UI(XRCID("edit_italic"), EditorFrame::OnUpdateToggleCmd)
47 EVT_UPDATE_UI(XRCID("edit_underline"), EditorFrame::OnUpdateToggleCmd)
48 EVT_MENU(XRCID("edit_indent"), EditorFrame::OnEditIndent)
49 EVT_MENU(XRCID("edit_outdent"), EditorFrame::OnEditOutdent)
50 EVT_MENU(XRCID("edit_aleft"), EditorFrame::OnEditAlignLeft)
51 EVT_MENU(XRCID("edit_acenter"), EditorFrame::OnEditAlignCenter)
52 EVT_MENU(XRCID("edit_aright"), EditorFrame::OnEditAlignRight)
53 END_EVENT_TABLE()
55 EditorFrame::EditorFrame(wxWindow* aParent)
57 wxXmlResource::Get()->LoadFrame(this, aParent, wxT("editor_frame"));
59 SetName("editor");
61 SetIcon(wxICON(appicon));
63 SetupDefaultGeckoWindow();
65 SendSizeEvent(); //
67 CreateStatusBar();
69 MakeEditable();
71 mCommandManager = do_GetInterface(mWebBrowser);
73 nsCOMPtr<nsIWebNavigation> webNav = do_QueryInterface(mWebBrowser);
74 webNav->LoadURI(NS_ConvertASCIItoUTF16("www.mozilla.org").get(),
75 nsIWebNavigation::LOAD_FLAGS_NONE, nsnull, nsnull, nsnull);
79 void EditorFrame::MakeEditable()
81 nsCOMPtr<nsIDOMWindow> domWindow;
82 mWebBrowser->GetContentDOMWindow(getter_AddRefs(domWindow));
84 nsCOMPtr<nsIEditingSession> editingSession = do_GetInterface(mWebBrowser);
85 if (!editingSession)
86 return;// NS_ERROR_FAILURE;
87 editingSession->MakeWindowEditable(domWindow, NULL, PR_TRUE, PR_TRUE,
88 PR_FALSE);
91 nsresult EditorFrame::DoCommand(const char *aCommand, nsICommandParams *aCommandParams)
93 if (mCommandManager)
95 nsCOMPtr<nsIDOMWindow> domWindow;
96 mWebBrowser->GetContentDOMWindow(getter_AddRefs(domWindow));
97 return mCommandManager->DoCommand(aCommand, aCommandParams, domWindow);
99 return NS_ERROR_FAILURE;
102 void EditorFrame::IsCommandEnabled(const char *aCommand, PRBool *retval)
104 if (mCommandManager)
106 nsCOMPtr<nsIDOMWindow> domWindow;
107 mWebBrowser->GetContentDOMWindow(getter_AddRefs(domWindow));
108 mCommandManager->IsCommandEnabled(aCommand, domWindow, retval);
112 void EditorFrame::GetCommandState(const char *aCommand, nsICommandParams *aCommandParams)
114 if (mCommandManager)
116 nsCOMPtr<nsIDOMWindow> domWindow;
117 mWebBrowser->GetContentDOMWindow(getter_AddRefs(domWindow));
118 mCommandManager->GetCommandState(aCommand, domWindow, aCommandParams);
122 void EditorFrame::UpdateStatusBarText(const PRUnichar* aStatusText)
124 SetStatusText(aStatusText);
127 static
128 nsresult MakeCommandParams(nsICommandParams **aParams)
130 nsresult rv;
131 nsCOMPtr<nsICommandParams> params = do_CreateInstance(NS_COMMAND_PARAMS_CONTRACTID,&rv);
132 if (NS_FAILED(rv))
133 return rv;
134 if (!params)
135 return NS_ERROR_FAILURE;
136 *aParams = params;
137 NS_ADDREF(*aParams);
138 return rv;
141 static const char kCmdBold[] = "cmd_bold";
142 static const char kCmdItalic[] = "cmd_italic";
143 static const char kCmdUnderline[] = "cmd_underline";
144 static const char kCmdIndent[] = "cmd_indent";
145 static const char kCmdOutdent[] = "cmd_outdent";
146 static const char kCmdAlign[] = "cmd_align";
148 void EditorFrame::OnEditBold(wxCommandEvent &event)
150 DoCommand(kCmdBold, nsnull);
153 void EditorFrame::OnEditItalic(wxCommandEvent &event)
155 DoCommand(kCmdItalic, nsnull);
158 void EditorFrame::OnEditUnderline(wxCommandEvent &event)
160 DoCommand(kCmdUnderline, nsnull);
163 void EditorFrame::OnEditIndent(wxCommandEvent &event)
165 DoCommand(kCmdIndent, nsnull);
168 void EditorFrame::OnEditOutdent(wxCommandEvent &event)
170 DoCommand(kCmdOutdent, nsnull);
173 const char kAlignLeft[] = "left";
174 const char kAlignRight[] = "right";
175 const char kAlignCenter[] = "center";
178 void EditorFrame::OnEditAlignLeft(wxCommandEvent &event)
180 ExecuteAttribParam(kCmdAlign, kAlignLeft);
183 void EditorFrame::OnEditAlignRight(wxCommandEvent &event)
185 ExecuteAttribParam(kCmdAlign, kAlignRight);
188 void EditorFrame::OnEditAlignCenter(wxCommandEvent &event)
190 ExecuteAttribParam(kCmdAlign, kAlignCenter);
193 const char kStateAll[] = "state_all";
194 const char kStateMixed[] = "state_mixed";
195 const char kStateAttribute[] = "state_attribute";
196 const char kStateEnabled[] = "state_enabled";
198 void EditorFrame::OnUpdateToggleCmd(wxUpdateUIEvent &event)
200 const char *cmd = NULL;
201 if (event.GetId() == XRCID("edit_bold"))
203 cmd = kCmdBold;
205 else if (event.GetId() == XRCID("edit_italic"))
207 cmd = kCmdItalic;
209 else if (event.GetId() == XRCID("edit_underline"))
211 cmd = kCmdUnderline;
214 // command manager GetCommandState cmd_bold
215 nsCOMPtr<nsICommandParams> params;
216 if (NS_SUCCEEDED(MakeCommandParams(getter_AddRefs(params))))
218 GetCommandState(cmd, params);
220 // Does our current selection span mixed styles?
221 // If so, set the toolbar button to an indeterminate
222 // state
224 PRBool bMixedStyle = PR_FALSE;
225 params->GetBooleanValue(kStateMixed, &bMixedStyle);
227 // We're not in STATE_MIXED. Enable/Disable the
228 // toolbar button based on it's current state
230 PRBool bCmdEnabled = PR_FALSE;
231 params->GetBooleanValue(kStateAll, &bCmdEnabled);
233 event.Check((bMixedStyle || bCmdEnabled) ? TRUE : FALSE);
237 nsresult EditorFrame::ExecuteAttribParam(const char *aCommand, const char *aAttribute)
239 nsresult rv;
240 nsCOMPtr<nsICommandParams> params;
241 rv = MakeCommandParams(getter_AddRefs(params));
242 if (NS_FAILED(rv))
243 return rv;
244 if (!params)
245 return NS_ERROR_FAILURE;
246 params->SetCStringValue(kStateAttribute, aAttribute);
247 return DoCommand(aCommand, params);