NOT PART OF BUILD. Improve editor functionality, fix focus problems in editor/browser, add editor icons

This commit is contained in:
locka%iol.ie 2003-06-27 19:50:10 +00:00
Родитель 775e423c59
Коммит db77f87fe4
30 изменённых файлов: 311 добавлений и 39 удалений

Просмотреть файл

@ -37,9 +37,7 @@
class BrowserFrame :
public GeckoFrame
{
public :
BrowserFrame(wxWindow* aParent);
protected:
DECLARE_EVENT_TABLE()
void OnBrowserUrl(wxCommandEvent &event);
@ -52,6 +50,8 @@ public :
void OnUpdateBrowserBack(wxUpdateUIEvent &event);
void OnUpdateBrowserForward(wxUpdateUIEvent &event);
void OnUpdateBrowserStop(wxUpdateUIEvent &event);
public :
BrowserFrame(wxWindow* aParent);
// GeckoContainerUI overrides
virtual nsresult CreateBrowserWindow(PRUint32 aChromeFlags,

Просмотреть файл

@ -45,6 +45,8 @@ ChatFrame::ChatFrame(wxWindow* aParent)
{
wxXmlResource::Get()->LoadFrame(this, aParent, wxT("chat_frame"));
SetName("chat");
SetIcon(wxICON(appicon));
SetupDefaultGeckoWindow();

Просмотреть файл

@ -40,29 +40,175 @@
#include "EditorFrame.h"
BEGIN_EVENT_TABLE(EditorFrame, GeckoFrame)
//EVT_TEXT_ENTER(XRCID("chat"), ChatFrame::OnChat)
EVT_MENU(XRCID("edit_bold"), EditorFrame::OnEditBold)
EVT_MENU(XRCID("edit_italic"), EditorFrame::OnEditItalic)
EVT_MENU(XRCID("edit_underline"), EditorFrame::OnEditUnderline)
EVT_UPDATE_UI(XRCID("edit_bold"), EditorFrame::OnUpdateToggleCmd)
EVT_UPDATE_UI(XRCID("edit_italic"), EditorFrame::OnUpdateToggleCmd)
EVT_UPDATE_UI(XRCID("edit_underline"), EditorFrame::OnUpdateToggleCmd)
EVT_MENU(XRCID("edit_indent"), EditorFrame::OnEditIndent)
EVT_MENU(XRCID("edit_outdent"), EditorFrame::OnEditOutdent)
END_EVENT_TABLE()
EditorFrame::EditorFrame(wxWindow* aParent)
{
wxXmlResource::Get()->LoadFrame(this, aParent, wxT("editor_frame"));
SetName("editor");
SetIcon(wxICON(appicon));
SetupDefaultGeckoWindow();
SendSizeEvent(); //
MakeEditable();
mCommandManager = do_GetInterface(mWebBrowser);
nsCOMPtr<nsIWebNavigation> webNav = do_QueryInterface(mWebBrowser);
webNav->LoadURI(NS_ConvertASCIItoUCS2("www.mozilla.org").get(),
nsIWebNavigation::LOAD_FLAGS_NONE, nsnull, nsnull, nsnull);
}
void EditorFrame::MakeEditable()
{
nsCOMPtr<nsIDOMWindow> domWindow;
mWebBrowser->GetContentDOMWindow(getter_AddRefs(domWindow));
nsCOMPtr<nsIEditingSession> editingSession = do_GetInterface(mWebBrowser);
if (!editingSession)
return;// NS_ERROR_FAILURE;
editingSession->MakeWindowEditable(domWindow, NULL, PR_TRUE);
}
void EditorFrame::DoCommand(const char *aCommand, nsICommandParams *aCommandParams)
{
if (mCommandManager)
{
nsCOMPtr<nsIDOMWindow> domWindow;
mWebBrowser->GetContentDOMWindow(getter_AddRefs(domWindow));
mCommandManager->DoCommand(aCommand, aCommandParams, domWindow);
}
}
void EditorFrame::IsCommandEnabled(const char *aCommand, PRBool *retval)
{
if (mCommandManager)
{
nsCOMPtr<nsIDOMWindow> domWindow;
mWebBrowser->GetContentDOMWindow(getter_AddRefs(domWindow));
mCommandManager->IsCommandEnabled(aCommand, domWindow, retval);
}
}
void EditorFrame::GetCommandState(const char *aCommand, nsICommandParams *aCommandParams)
{
if (mCommandManager)
{
nsCOMPtr<nsIDOMWindow> domWindow;
mWebBrowser->GetContentDOMWindow(getter_AddRefs(domWindow));
mCommandManager->GetCommandState(aCommand, domWindow, aCommandParams);
}
}
static
nsresult MakeCommandParams(nsICommandParams **aParams)
{
nsresult rv;
nsCOMPtr<nsICommandParams> params = do_CreateInstance(NS_COMMAND_PARAMS_CONTRACTID,&rv);
if (NS_FAILED(rv))
return rv;
if (!params)
return NS_ERROR_FAILURE;
*aParams = params;
NS_ADDREF(*aParams);
return rv;
}
const char kCmdBold[] = "cmd_bold";
const char kCmdItalic[] = "cmd_italic";
const char kCmdUnderline[] = "cmd_underline";
const char kCmdIndent[] = "cmd_indent";
const char kCmdOutdent[] = "cmd_outdent";
void EditorFrame::OnEditBold(wxCommandEvent &event)
{
// command manager cmd_bold
DoCommand(kCmdBold, nsnull);
}
void EditorFrame::OnEditItalic(wxCommandEvent &event)
{
// command manager cmd_bold
DoCommand(kCmdItalic, nsnull);
}
void EditorFrame::OnEditUnderline(wxCommandEvent &event)
{
// command manager cmd_bold
DoCommand(kCmdUnderline, nsnull);
}
void EditorFrame::OnEditIndent(wxCommandEvent &event)
{
// command manager cmd_bold
DoCommand(kCmdIndent, nsnull);
}
void EditorFrame::OnEditOutdent(wxCommandEvent &event)
{
// command manager cmd_bold
DoCommand(kCmdOutdent, nsnull);
}
#define STATE_ALL "state_all"
#define STATE_MIXED "state_mixed"
#define STATE_ATTRIBUTE "state_attribute"
#define STATE_ENABLED "state_enabled"
void EditorFrame::OnUpdateToggleCmd(wxUpdateUIEvent &event)
{
const char *cmd = NULL;
if (event.GetId() == XRCID("edit_bold"))
{
cmd = kCmdBold;
}
else if (event.GetId() == XRCID("edit_italic"))
{
cmd = kCmdItalic;
}
else if (event.GetId() == XRCID("edit_underline"))
{
cmd = kCmdUnderline;
}
// command manager GetCommandState cmd_bold
nsCOMPtr<nsICommandParams> params;
if (NS_SUCCEEDED(MakeCommandParams(getter_AddRefs(params))))
{
GetCommandState(cmd, params);
// Does our current selection span mixed styles?
// If so, set the toolbar button to an indeterminate
// state
//
PRBool bMixedStyle = PR_FALSE;
params->GetBooleanValue(STATE_MIXED, &bMixedStyle);
// We're not in STATE_MIXED. Enable/Disable the
// toolbar button based on it's current state
//
PRBool bCmdEnabled = PR_FALSE;
params->GetBooleanValue(STATE_ALL, &bCmdEnabled);
event.Check((bMixedStyle || bCmdEnabled) ? TRUE : FALSE);
}
}

Просмотреть файл

@ -34,13 +34,29 @@
#include "GeckoFrame.h"
#include "nsICommandManager.h"
#include "nsICommandParams.h"
class EditorFrame :
public GeckoFrame
{
protected:
DECLARE_EVENT_TABLE()
void OnEditBold(wxCommandEvent &event);
void OnEditItalic(wxCommandEvent &event);
void OnEditUnderline(wxCommandEvent &event);
void OnEditIndent(wxCommandEvent &event);
void OnEditOutdent(wxCommandEvent &event);
void OnUpdateToggleCmd(wxUpdateUIEvent &event);
public :
EditorFrame(wxWindow* aParent);
DECLARE_EVENT_TABLE()
nsCOMPtr<nsICommandManager> mCommandManager;
void MakeEditable();
void DoCommand(const char *aCommand, nsICommandParams *aCommandParams);
void IsCommandEnabled(const char *aCommand, PRBool *retval);
void GetCommandState(const char *aCommand, nsICommandParams *aCommandParams);
};
#endif

Просмотреть файл

@ -169,7 +169,7 @@ void EmbedApp::OnAbout(wxCommandEvent & WXUNUSED(event))
void EmbedApp::OnMail(wxCommandEvent & WXUNUSED(event))
{
// Create the mail frame window
static MailFrame * frame = NULL;
MailFrame * frame = (MailFrame *) wxWindow::FindWindowByName("mail", NULL);;
if (!frame)
frame = new MailFrame(NULL);
if (frame)
@ -178,7 +178,7 @@ void EmbedApp::OnMail(wxCommandEvent & WXUNUSED(event))
void EmbedApp::OnChat(wxCommandEvent & WXUNUSED(event))
{
static ChatFrame * frame = NULL;
ChatFrame * frame = (ChatFrame *) wxWindow::FindWindowByName("chat", NULL);
if (!frame)
frame = new ChatFrame(NULL);
if (frame)
@ -187,7 +187,7 @@ void EmbedApp::OnChat(wxCommandEvent & WXUNUSED(event))
void EmbedApp::OnEditor(wxCommandEvent & WXUNUSED(event))
{
static EditorFrame * frame = NULL;
EditorFrame * frame = (EditorFrame *) wxWindow::FindWindowByName("editor", NULL);
if (!frame)
frame = new EditorFrame(NULL);
if (frame)

Просмотреть файл

@ -34,11 +34,18 @@
#include "GeckoFrame.h"
#include "GeckoContainer.h"
#include "nsIWebBrowserFocus.h"
GeckoFrame::GeckoFrame() :
mGeckoWnd(NULL)
{
}
BEGIN_EVENT_TABLE(GeckoFrame, wxFrame)
EVT_ACTIVATE(GeckoFrame::OnActivate)
END_EVENT_TABLE()
bool GeckoFrame::SetupDefaultGeckoWindow()
{
mGeckoWnd = (GeckoWindow *) FindWindowById(XRCID("gecko"), this);
@ -68,7 +75,34 @@ bool GeckoFrame::SetupGeckoWindow(GeckoWindow *aGeckoWindow, GeckoContainerUI *a
geckoContainer->CreateBrowser(0, 0, size.GetWidth(), size.GetHeight(),
(nativeWindow) aGeckoWindow->GetHWND(), aWebBrowser);
aUI->ShowWindow(PR_TRUE);
nsCOMPtr<nsIBaseWindow> webBrowserAsWin = do_QueryInterface(*aWebBrowser);
if (webBrowserAsWin)
{
webBrowserAsWin->SetVisibility(PR_TRUE);
}
return TRUE;
}
}
void GeckoFrame::OnActivate(wxActivateEvent &event)
{
nsCOMPtr<nsIWebBrowserFocus> focus(do_GetInterface(mWebBrowser));
if (focus)
{
if (event.GetActive())
focus->Activate();
else
focus->Deactivate();
}
wxFrame::OnActivate(event);
}
///////////////////////////////////////////////////////////////////////////////
// GeckoContainerUI overrides
void GeckoFrame::SetFocus()
{
mGeckoWnd->SetFocus();
}

Просмотреть файл

@ -47,6 +47,9 @@ protected:
public:
GeckoFrame();
DECLARE_EVENT_TABLE()
void OnActivate(wxActivateEvent &event);
// This method searches for a "gecko" wxWindow and sets it up with the frame
// as the container UI. The results are stored in the mGeckoWnd and mWebBrowser
// member variables.
@ -54,6 +57,9 @@ public:
// This method sets up the specified window with the specified container UI
// and returns the nsIWebBrowser interface to it.
bool SetupGeckoWindow(GeckoWindow *aGeckoWindow, GeckoContainerUI *aUI, nsIWebBrowser **aWebBrowser) const;
// GeckoContainerUI overrides
void SetFocus();
};
#endif

Просмотреть файл

@ -32,6 +32,7 @@
#include "global.h"
#include "GeckoWindow.h"
#include "nsIWebBrowserFocus.h"
IMPLEMENT_DYNAMIC_CLASS(GeckoWindow, wxPanel)
@ -56,7 +57,9 @@ void GeckoWindow::SetGeckoContainer(GeckoContainer *aGeckoContainer)
}
BEGIN_EVENT_TABLE(GeckoWindow, wxPanel)
EVT_SIZE(GeckoWindow::OnSize)
EVT_SIZE( GeckoWindow::OnSize)
EVT_SET_FOCUS( GeckoWindow::OnSetFocus)
EVT_KILL_FOCUS(GeckoWindow::OnKillFocus)
END_EVENT_TABLE()
void GeckoWindow::OnSize(wxSizeEvent &event)
@ -77,3 +80,11 @@ void GeckoWindow::OnSize(wxSizeEvent &event)
webBrowserAsWin->SetVisibility(PR_TRUE);
}
}
void GeckoWindow::OnSetFocus(wxFocusEvent &event)
{
}
void GeckoWindow::OnKillFocus(wxFocusEvent &event)
{
}

Просмотреть файл

@ -41,6 +41,8 @@ class GeckoWindow : public wxPanel
protected:
DECLARE_EVENT_TABLE()
void OnSize(wxSizeEvent &event);
void OnSetFocus(wxFocusEvent &event);
void OnKillFocus(wxFocusEvent &event);
GeckoContainer *mGeckoContainer;

Просмотреть файл

@ -148,6 +148,8 @@ MailFrame::MailFrame(wxWindow* aParent)
{
wxXmlResource::Get()->LoadFrame(this, aParent, wxT("mail_frame"));
SetName("mail");
SetIcon(wxICON(appicon));
if (!gMailChannelCallbackRegistered)

Просмотреть файл

@ -9,10 +9,11 @@ embedding functionality of Gecko not an end solution.
To build wxEmbed you must:
1. Get the latest 2.4 release from wxwindows.org
1. Get the latest 2.4 (at least 2.4.1) release from wxwindows.org
2. Build the debug/release static lib versions
3. cd into wxWindows/control and build src/xrc and utils/wxrc
4. Set your WXWIN environment variable to point to the wxWindows dir
5. Build Mozilla
6. Set MOZ_SRC environment variable to point to it.
7. Call nmake /f makefile.vc

Просмотреть файл

@ -45,6 +45,7 @@ MOZINC = \
-I$(MOZSDK)\include\embed_base \
-I$(MOZSDK)\include\windowwatcher \
-I$(MOZSDK)\include\composer \
-I$(MOZSDK)\include\commandhandler \
$(NULL)
# This isn't much better either!

Двоичные данные
embedding/tests/wxEmbed/rc/aligncenter.gif Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 116 B

Двоичные данные
embedding/tests/wxEmbed/rc/alignleft.gif Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 117 B

Двоичные данные
embedding/tests/wxEmbed/rc/alignright.gif Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 117 B

Двоичные данные
embedding/tests/wxEmbed/rc/anchor.gif Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 141 B

Двоичные данные
embedding/tests/wxEmbed/rc/background.gif Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 145 B

Двоичные данные
embedding/tests/wxEmbed/rc/bold.gif Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 126 B

Просмотреть файл

@ -5,7 +5,7 @@
<object class="wxFrame" name="browser_frame">
<title>wxEmbed Browser</title>
<size>300,300</size>
<style>wxCAPTION|wxSYSTEM_MENU|wxRESIZE_BORDER|wxRESIZE_BOX|wxCLIP_CHILDREN</style>
<style>wxCAPTION|wxSYSTEM_MENU|wxRESIZE_BORDER|wxRESIZE_BOX|wxMINIMIZE_BOX|wxMAXIMIZE_BOX|wxCLIP_CHILDREN</style>
<pos>-1,-1</pos>
<!-- Browser context menus -->
@ -160,7 +160,7 @@
<object class="sizeritem">
<flag>wxGROW|wxALL</flag>
<object class="wxPanel" name="gecko" subclass="GeckoWindow">
<style>wxCLIP_CHILDREN|wxSUNKEN_BORDER</style>
<style>wxCLIP_CHILDREN|wxSUNKEN_BORDER|wxTAB_TRAVERSAL</style>
<size>500,280</size>
</object>
</object>

Просмотреть файл

@ -3,9 +3,9 @@
<resource version="2.3.0.1">
<object class="wxFrame" name="chat_frame">
<title>wxEmbed Mail</title>
<title>wxEmbed Chat</title>
<size>300,300</size>
<style>wxCAPTION|wxSYSTEM_MENU|wxRESIZE_BORDER|wxRESIZE_BOX|wxCLIP_CHILDREN</style>
<style>wxCAPTION|wxSYSTEM_MENU|wxRESIZE_BORDER|wxRESIZE_BOX|wxMINIMIZE_BOX|wxMAXIMIZE_BOX|wxCLIP_CHILDREN</style>
<pos>-1,-1</pos>
<!-- Mail menu -->

Двоичные данные
embedding/tests/wxEmbed/rc/decreasefont.gif Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 123 B

Просмотреть файл

@ -3,9 +3,9 @@
<resource version="2.3.0.1">
<object class="wxFrame" name="editor_frame">
<title>wxEmbed Mail</title>
<title>wxEmbed Editor</title>
<size>300,300</size>
<style>wxCAPTION|wxSYSTEM_MENU|wxRESIZE_BORDER|wxRESIZE_BOX|wxCLIP_CHILDREN</style>
<style>wxCAPTION|wxSYSTEM_MENU|wxRESIZE_BORDER|wxRESIZE_BOX|wxMINIMIZE_BOX|wxMAXIMIZE_BOX|wxCLIP_CHILDREN</style>
<pos>-1,-1</pos>
<!-- Editor menu -->
@ -21,25 +21,24 @@
<bitmapsize>20,18</bitmapsize>
<object class="tool" name="edit_bold">
<bitmap>home.gif</bitmap>
<bitmap>bold.gif</bitmap>
<tooltip>Bold</tooltip>
</object>
<object class="tool" name="browse_italic">
<bitmap>home.gif</bitmap>
<object class="tool" name="edit_italic">
<bitmap>italic.gif</bitmap>
<tooltip>Italic</tooltip>
</object>
<object class="separator"/>
<object class="tool" name="browse_underline">
<bitmap>home.gif</bitmap>
<object class="tool" name="edit_underline">
<bitmap>underline.gif</bitmap>
<tooltip>Underline</tooltip>
</object>
<object class="separator"/>
<object class="tool" name="browse_indent">
<bitmap>home.gif</bitmap>
<object class="tool" name="edit_indent">
<bitmap>indent.gif</bitmap>
<tooltip>Indent paragraph</tooltip>
</object>
<object class="tool" name="browse_outdent">
<bitmap>home.gif</bitmap>
<object class="tool" name="edit_outdent">
<bitmap>outdent.gif</bitmap>
<tooltip>Outdent paragraph</tooltip>
</object>
</object>
@ -58,7 +57,7 @@
<object class="sizeritem">
<flag>wxGROW|wxALL</flag>
<object class="wxPanel" name="gecko" subclass="GeckoWindow">
<style>wxCLIP_CHILDREN|wxSUNKEN_BORDER</style>
<style>wxCLIP_CHILDREN|wxSUNKEN_BORDER|wxTAB_TRAVERSAL|wxWANTS_CHARS</style>
<size>500,280</size>
</object>
</object>

Двоичные данные
embedding/tests/wxEmbed/rc/increasefont.gif Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 131 B

Двоичные данные
embedding/tests/wxEmbed/rc/indent.gif Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 121 B

Двоичные данные
embedding/tests/wxEmbed/rc/italic.gif Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 117 B

Просмотреть файл

@ -5,7 +5,7 @@
<object class="wxFrame" name="mail_frame">
<title>wxEmbed Mail</title>
<size>300,300</size>
<style>wxCAPTION|wxSYSTEM_MENU|wxRESIZE_BORDER|wxRESIZE_BOX|wxCLIP_CHILDREN</style>
<style>wxCAPTION|wxSYSTEM_MENU|wxRESIZE_BORDER|wxRESIZE_BOX|wxMINIMIZE_BOX|wxMAXIMIZE_BOX|wxCLIP_CHILDREN</style>
<pos>-1,-1</pos>
<!-- Mail menu -->

Двоичные данные
embedding/tests/wxEmbed/rc/outdent.gif Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 120 B

Двоичные данные
embedding/tests/wxEmbed/rc/pen.gif Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 146 B

Двоичные данные
embedding/tests/wxEmbed/rc/underline.gif Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 124 B

Просмотреть файл

@ -176,21 +176,40 @@ SOURCE=.\MailFrame.h
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# Begin Group "Image Files"
# PROP Default_Filter ""
# Begin Source File
SOURCE=.\rc\aligncenter.gif
# End Source File
# Begin Source File
SOURCE=.\rc\alignleft.gif
# End Source File
# Begin Source File
SOURCE=.\rc\alignright.gif
# End Source File
# Begin Source File
SOURCE=.\rc\anchor.gif
# End Source File
# Begin Source File
SOURCE=.\rc\back.gif
# End Source File
# Begin Source File
SOURCE=.\rc\browser.xrc
SOURCE=.\rc\background.gif
# End Source File
# Begin Source File
SOURCE=.\rc\chat.xrc
SOURCE=.\rc\bold.gif
# End Source File
# Begin Source File
SOURCE=.\rc\editor.xrc
SOURCE=.\rc\decreasefont.gif
# End Source File
# Begin Source File
@ -206,7 +225,23 @@ SOURCE=.\rc\home.gif
# End Source File
# Begin Source File
SOURCE=.\rc\mail.xrc
SOURCE=.\rc\increasefont.gif
# End Source File
# Begin Source File
SOURCE=.\rc\indent.gif
# End Source File
# Begin Source File
SOURCE=.\rc\italic.gif
# End Source File
# Begin Source File
SOURCE=.\rc\outdent.gif
# End Source File
# Begin Source File
SOURCE=.\rc\pen.gif
# End Source File
# Begin Source File
@ -218,6 +253,27 @@ SOURCE=.\rc\stop.gif
# End Source File
# Begin Source File
SOURCE=.\rc\underline.gif
# End Source File
# End Group
# Begin Source File
SOURCE=.\rc\browser.xrc
# End Source File
# Begin Source File
SOURCE=.\rc\chat.xrc
# End Source File
# Begin Source File
SOURCE=.\rc\editor.xrc
# End Source File
# Begin Source File
SOURCE=.\rc\mail.xrc
# End Source File
# Begin Source File
SOURCE=.\wxEmbed.rc
# End Source File
# End Group
@ -232,10 +288,6 @@ SOURCE=.\resource.cpp
# Begin Group "External Files"
# PROP Default_Filter ""
# Begin Source File
SOURCE="..\wxWindows-2.4.0\docs\tech\tn0014.txt"
# End Source File
# End Group
# Begin Source File