1 /* ***** BEGIN LICENSE BLOCK *****
2 * Version: Mozilla-sample-code 1.0
4 * Copyright (c) 2002 Netscape Communications Corporation and
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.
27 * Adam Lock <adamlock@netscape.com>
29 * ***** END LICENSE BLOCK ***** */
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
)
55 EditorFrame::EditorFrame(wxWindow
* aParent
)
57 wxXmlResource::Get()->LoadFrame(this, aParent
, wxT("editor_frame"));
61 SetIcon(wxICON(appicon
));
63 SetupDefaultGeckoWindow();
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
);
86 return;// NS_ERROR_FAILURE;
87 editingSession
->MakeWindowEditable(domWindow
, NULL
, PR_TRUE
, PR_TRUE
,
91 nsresult
EditorFrame::DoCommand(const char *aCommand
, nsICommandParams
*aCommandParams
)
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
)
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
)
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
);
128 nsresult
MakeCommandParams(nsICommandParams
**aParams
)
131 nsCOMPtr
<nsICommandParams
> params
= do_CreateInstance(NS_COMMAND_PARAMS_CONTRACTID
,&rv
);
135 return NS_ERROR_FAILURE
;
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"))
205 else if (event
.GetId() == XRCID("edit_italic"))
209 else if (event
.GetId() == XRCID("edit_underline"))
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
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
)
240 nsCOMPtr
<nsICommandParams
> params
;
241 rv
= MakeCommandParams(getter_AddRefs(params
));
245 return NS_ERROR_FAILURE
;
246 params
->SetCStringValue(kStateAttribute
, aAttribute
);
247 return DoCommand(aCommand
, params
);