]> git.saurik.com Git - wxWidgets.git/commitdiff
Implement undo and redo for the ie and gtk webkit backends. Extend the sample to...
authorSteve Lamerton <steve.lamerton@gmail.com>
Sat, 2 Jul 2011 15:07:46 +0000 (15:07 +0000)
committerSteve Lamerton <steve.lamerton@gmail.com>
Sat, 2 Jul 2011 15:07:46 +0000 (15:07 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/SOC2011_WEBVIEW@68135 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/webview_webkit.h
include/wx/msw/webview_ie.h
include/wx/webview.h
samples/web/web.cpp
src/gtk/webview_webkit.cpp
src/msw/webview_ie.cpp

index 69fef706f891ac5d63d13f54f01dd61636673b00..07d71e2310e5f53e533f61520ec93750d818c1dd 100644 (file)
@@ -128,6 +128,12 @@ public:
     virtual void Copy();
     virtual void Paste();
 
     virtual void Copy();
     virtual void Paste();
 
+    //Undo / redo functionality
+    virtual bool CanUndo();
+    virtual bool CanRedo();
+    virtual void Undo();
+    virtual void Redo();
+
     /** FIXME: hack to work around signals being received too early */
     bool m_ready;
 
     /** FIXME: hack to work around signals being received too early */
     bool m_ready;
 
index c288314f03748b7bcf4d49c4bb562b83820d62a6..522690c88ef765269917d67810d6fe89a507f52d 100644 (file)
@@ -85,6 +85,12 @@ public:
     virtual void Copy();
     virtual void Paste();
 
     virtual void Copy();
     virtual void Paste();
 
+    //Undo / redo functionality
+    virtual bool CanUndo();
+    virtual bool CanRedo();
+    virtual void Undo();
+    virtual void Redo();
+
     // ---- IE-specific methods
 
     // FIXME: I seem to be able to access remote webpages even in offline mode...
     // ---- IE-specific methods
 
     // FIXME: I seem to be able to access remote webpages even in offline mode...
index 3dadea6a328423e7c89c874a20a3f4e48c2d71d4..0eeb5c1acfbade5f1c660fa3740e305fa70f3805 100644 (file)
@@ -333,6 +333,12 @@ public:
     virtual void Cut() = 0;
     virtual void Copy() = 0;
     virtual void Paste() = 0;
     virtual void Cut() = 0;
     virtual void Copy() = 0;
     virtual void Paste() = 0;
+
+    //Undo / redo functionality
+    virtual bool CanUndo() = 0;
+    virtual bool CanRedo() = 0;
+    virtual void Undo() = 0;
+    virtual void Redo() = 0;
 };
 
 class WXDLLIMPEXP_WEB wxWebNavigationEvent : public wxCommandEvent
 };
 
 class WXDLLIMPEXP_WEB wxWebNavigationEvent : public wxCommandEvent
index f2f8f6a04b4455e0e36ad77ccac957a4e5bad406..4e99892b4c71840be30fbed2b64883d8924f2290 100644 (file)
@@ -74,6 +74,8 @@ public:
     void OnCut(wxCommandEvent& evt);
     void OnCopy(wxCommandEvent& evt);
     void OnPaste(wxCommandEvent& evt);
     void OnCut(wxCommandEvent& evt);
     void OnCopy(wxCommandEvent& evt);
     void OnPaste(wxCommandEvent& evt);
+    void OnUndo(wxCommandEvent& evt);
+    void OnRedo(wxCommandEvent& evt);
 
 private:
     wxTextCtrl* m_url;
 
 private:
     wxTextCtrl* m_url;
@@ -98,6 +100,8 @@ private:
     wxMenuItem* m_edit_cut;
     wxMenuItem* m_edit_copy;
     wxMenuItem* m_edit_paste;
     wxMenuItem* m_edit_cut;
     wxMenuItem* m_edit_copy;
     wxMenuItem* m_edit_paste;
+    wxMenuItem* m_edit_undo;
+    wxMenuItem* m_edit_redo;
 
     wxTimer* m_timer;
     int m_animation_angle;
 
     wxTimer* m_timer;
     int m_animation_angle;
@@ -206,6 +210,9 @@ WebFrame::WebFrame() : wxFrame(NULL, wxID_ANY, "wxWebView Sample")
     m_edit_cut = editmenu->Append(wxID_ANY, _("Cut"));
     m_edit_copy = editmenu->Append(wxID_ANY, _("Copy"));
     m_edit_paste = editmenu->Append(wxID_ANY, _("Paste"));
     m_edit_cut = editmenu->Append(wxID_ANY, _("Cut"));
     m_edit_copy = editmenu->Append(wxID_ANY, _("Copy"));
     m_edit_paste = editmenu->Append(wxID_ANY, _("Paste"));
+    editmenu->AppendSeparator();
+    m_edit_undo = editmenu->Append(wxID_ANY, _("Undo"));
+    m_edit_redo = editmenu->Append(wxID_ANY, _("Redo"));
 
     m_tools_menu->AppendSeparator();
     m_tools_menu->AppendSubMenu(editmenu, "Edit");
 
     m_tools_menu->AppendSeparator();
     m_tools_menu->AppendSubMenu(editmenu, "Edit");
@@ -268,6 +275,10 @@ WebFrame::WebFrame() : wxFrame(NULL, wxID_ANY, "wxWebView Sample")
             wxCommandEventHandler(WebFrame::OnCopy),  NULL, this );
     Connect(m_edit_paste->GetId(), wxEVT_COMMAND_MENU_SELECTED,
             wxCommandEventHandler(WebFrame::OnPaste),  NULL, this );
             wxCommandEventHandler(WebFrame::OnCopy),  NULL, this );
     Connect(m_edit_paste->GetId(), wxEVT_COMMAND_MENU_SELECTED,
             wxCommandEventHandler(WebFrame::OnPaste),  NULL, this );
+    Connect(m_edit_undo->GetId(), wxEVT_COMMAND_MENU_SELECTED,
+            wxCommandEventHandler(WebFrame::OnUndo),  NULL, this );
+    Connect(m_edit_redo->GetId(), wxEVT_COMMAND_MENU_SELECTED,
+            wxCommandEventHandler(WebFrame::OnRedo),  NULL, this );
 }
 
 void WebFrame::OnAnimationTimer(wxTimerEvent& evt)
 }
 
 void WebFrame::OnAnimationTimer(wxTimerEvent& evt)
@@ -407,6 +418,16 @@ void WebFrame::OnPaste(wxCommandEvent& evt)
     m_browser->Paste();
 }
 
     m_browser->Paste();
 }
 
+void WebFrame::OnUndo(wxCommandEvent& evt)
+{
+    m_browser->Undo();
+}
+
+void WebFrame::OnRedo(wxCommandEvent& evt)
+{
+    m_browser->Redo();
+}
+
 /**
   * Callback invoked when there is a request to load a new page (for instance
   * when the user clicks a link)
 /**
   * Callback invoked when there is a request to load a new page (for instance
   * when the user clicks a link)
@@ -509,6 +530,9 @@ void WebFrame::OnToolsClicked(wxCommandEvent& evt)
     m_edit_cut->Enable(m_browser->CanCut());
     m_edit_copy->Enable(m_browser->CanCopy());
     m_edit_paste->Enable(m_browser->CanPaste());
     m_edit_cut->Enable(m_browser->CanCut());
     m_edit_copy->Enable(m_browser->CanCopy());
     m_edit_paste->Enable(m_browser->CanPaste());
+
+    m_edit_undo->Enable(m_browser->CanUndo());
+    m_edit_redo->Enable(m_browser->CanRedo());
     
     wxPoint position = ScreenToClient( wxGetMousePosition() );
     PopupMenu(m_tools_menu, position.x, position.y);
     
     wxPoint position = ScreenToClient( wxGetMousePosition() );
     PopupMenu(m_tools_menu, position.x, position.y);
index 3e53beaa259fa059bb4469b2287896513c4ea926..d4f0c20071e9849e209a13741b63a132900a53dd 100644 (file)
@@ -519,6 +519,26 @@ void wxWebViewWebKit::Paste()
     webkit_web_view_paste_clipboard(WEBKIT_WEB_VIEW(web_view));
 }
 
     webkit_web_view_paste_clipboard(WEBKIT_WEB_VIEW(web_view));
 }
 
+bool wxWebViewWebKit::CanUndo()
+{
+    return webkit_web_view_can_undo(WEBKIT_WEB_VIEW(web_view));
+}
+
+bool wxWebViewWebKit::CanRedo()
+{
+    return webkit_web_view_can_redo(WEBKIT_WEB_VIEW(web_view));
+}
+
+void wxWebViewWebKit::Undo()
+{
+    webkit_web_view_undo(WEBKIT_WEB_VIEW(web_view));
+}
+
+void wxWebViewWebKit::Redo()
+{
+    webkit_web_view_redo(WEBKIT_WEB_VIEW(web_view));
+}
+
 wxString wxWebViewWebKit::GetCurrentURL()
 {
     // FIXME: check which encoding the web kit control uses instead of
 wxString wxWebViewWebKit::GetCurrentURL()
 {
     // FIXME: check which encoding the web kit control uses instead of
index dcb8437654d811d46b565d6b4219bc64dc6a24af..c3b53be9d88c94e01dfd1a7fbd793a35e02da490 100644 (file)
@@ -539,6 +539,25 @@ void wxWebViewIE::Paste()
     ExecCommand("Paste");
 }
 
     ExecCommand("Paste");
 }
 
+bool wxWebViewIE::CanUndo()
+{
+    return CanExecCommand("Undo");
+}
+bool wxWebViewIE::CanRedo()
+{
+    return CanExecCommand("Redo");
+}
+
+void wxWebViewIE::Undo()
+{
+    ExecCommand("Undo");
+}
+
+void wxWebViewIE::Redo()
+{
+    ExecCommand("Redo");
+}
+
 bool wxWebViewIE::CanExecCommand(wxString command)
 {
     wxVariant documentVariant = m_ie.GetProperty("Document");
 bool wxWebViewIE::CanExecCommand(wxString command)
 {
     wxVariant documentVariant = m_ie.GetProperty("Document");