]> git.saurik.com Git - wxWidgets.git/commitdiff
Add history list to the sample.
authorSteve Lamerton <steve.lamerton@gmail.com>
Sat, 13 Aug 2011 14:11:32 +0000 (14:11 +0000)
committerSteve Lamerton <steve.lamerton@gmail.com>
Sat, 13 Aug 2011 14:11:32 +0000 (14:11 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/SOC2011_WEBVIEW@68681 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

samples/web/web.cpp

index 6f9955dbe1353bf6acefd079c214844464212911..99a275488b3e4a967873a0bcbd603a9c579198cd 100644 (file)
 
 #include "wxlogo.xpm"
 
+
+//We map menu items to their history items
+WX_DECLARE_HASH_MAP(int, wxSharedPtr<wxWebHistoryItem>,
+                    wxIntegerHash, wxIntegerEqual, wxMenuHistoryMap);
+
 class WebApp : public wxApp
 {
 public:
@@ -85,6 +90,7 @@ public:
     void OnRedo(wxCommandEvent& evt);
     void OnMode(wxCommandEvent& evt);
     void OnZoomLayout(wxCommandEvent& evt);
+    void OnHistory(wxCommandEvent& evt);
 
 private:
     wxTextCtrl* m_url;
@@ -98,6 +104,7 @@ private:
     wxToolBarToolBase* m_toolbar_tools;
 
     wxMenu* m_tools_menu;
+    wxMenu* m_tools_history_menu;
     wxMenuItem* m_tools_layout;
     wxMenuItem* m_tools_tiny;
     wxMenuItem* m_tools_small;
@@ -119,6 +126,8 @@ private:
 
     wxInfoBar *m_info;
     wxStaticText* m_info_text;
+
+    wxMenuHistoryMap m_histMenuItems;
 };
 
 class SourceViewDialog : public wxDialog
@@ -220,8 +229,14 @@ WebFrame::WebFrame() : wxFrame(NULL, wxID_ANY, "wxWebView Sample")
     m_tools_handle_navigation = m_tools_menu->AppendCheckItem(wxID_ANY, _("Handle Navigation"));
     m_tools_handle_new_window = m_tools_menu->AppendCheckItem(wxID_ANY, _("Handle New Windows"));
     m_tools_menu->AppendSeparator();
-    wxMenuItem* clearhist =  m_tools_menu->Append(wxID_ANY, _("Clear History"));
-    m_tools_enable_history = m_tools_menu->AppendCheckItem(wxID_ANY, _("Enable History"));
+
+    //History menu
+    m_tools_history_menu = new wxMenu();
+    wxMenuItem* clearhist =  m_tools_history_menu->Append(wxID_ANY, _("Clear History"));
+    m_tools_enable_history = m_tools_history_menu->AppendCheckItem(wxID_ANY, _("Enable History"));
+    m_tools_history_menu->AppendSeparator();
+
+    wxMenuItem* history = m_tools_menu->AppendSubMenu(m_tools_history_menu, "History");
 
     //Create an editing menu
     wxMenu* editmenu = new wxMenu();
@@ -578,6 +593,41 @@ void WebFrame::OnToolsClicked(wxCommandEvent& WXUNUSED(evt))
 
     m_edit_undo->Enable(m_browser->CanUndo());
     m_edit_redo->Enable(m_browser->CanRedo());
+
+    //Firstly we clear the existing menu items, then we add the current ones
+    wxMenuHistoryMap::const_iterator it;
+    for( it = m_histMenuItems.begin(); it != m_histMenuItems.end(); ++it )
+    {
+        m_tools_history_menu->Destroy(it->first);
+    }
+    m_histMenuItems.clear();
+
+    wxVector<wxSharedPtr<wxWebHistoryItem> > back = m_browser->GetBackwardHistory();
+    wxVector<wxSharedPtr<wxWebHistoryItem> > forward = m_browser->GetForwardHistory();
+
+    wxMenuItem* item;
+
+    for(unsigned int i = 0; i < back.size(); i++)
+    {
+        item = m_tools_history_menu->AppendRadioItem(wxID_ANY, back[i]->GetTitle());
+        m_histMenuItems[item->GetId()] = back[i];
+        Connect(item->GetId(), wxEVT_COMMAND_MENU_SELECTED,
+                wxCommandEventHandler(WebFrame::OnHistory), NULL, this );
+    }
+
+    item = m_tools_history_menu->AppendRadioItem(wxID_ANY, m_browser->GetCurrentTitle());
+    item->Check();
+
+    //No need to connect the current item
+    m_histMenuItems[item->GetId()] = wxSharedPtr<wxWebHistoryItem>(new wxWebHistoryItem(m_browser->GetCurrentURL(), m_browser->GetCurrentTitle()));
+
+    for(unsigned int i = 0; i < forward.size(); i++)
+    {
+        item = m_tools_history_menu->AppendRadioItem(wxID_ANY, forward[i]->GetTitle());
+        m_histMenuItems[item->GetId()] = forward[i];
+        Connect(item->GetId(), wxEVT_COMMAND_TOOL_CLICKED,
+                wxCommandEventHandler(WebFrame::OnHistory), NULL, this );
+    }
     
     wxPoint position = ScreenToClient( wxGetMousePosition() );
     PopupMenu(m_tools_menu, position.x, position.y);
@@ -622,6 +672,11 @@ void WebFrame::OnZoomLayout(wxCommandEvent& WXUNUSED(evt))
         m_browser->SetZoomType(wxWEB_VIEW_ZOOM_TYPE_TEXT);
 }
 
+void WebFrame::OnHistory(wxCommandEvent& evt)
+{
+    m_browser->LoadHistoryItem(m_histMenuItems[evt.GetId()]);
+}
+
 /**
   * Callback invoked when a loading error occurs
   */