1 /*
2 * This file is part of the Code::Blocks IDE and licensed under the GNU General Public License, version 3
3 * http://www.gnu.org/licenses/gpl-3.0.html
4 *
5 * $Revision: 10268 $
6 * $Id: EmbeddedHtmlPanel.cpp 10268 2015-05-15 10:56:55Z jenslody $
7 * $HeadURL: svn://svn.code.sf.net/p/codeblocks/code/branches/release-20.xx/src/plugins/defaultmimehandler/EmbeddedHtmlPanel.cpp $
8 */
9
10 #include "sdk.h"
11 #include "EmbeddedHtmlPanel.h"
12
13 #ifndef CB_PRECOMP
14 //(*InternalHeadersPCH(EmbeddedHtmlPanel)
15 #include <wx/bmpbuttn.h>
16 #include <wx/sizer.h>
17 #include <wx/string.h>
18 #include <wx/intl.h>
19 #include <wx/stattext.h>
20 //*)
21 #endif
22 //(*InternalHeaders(EmbeddedHtmlPanel)
23 #include <wx/bitmap.h>
24 #include <wx/image.h>
25 #include <wx/html/htmlwin.h>
26 #include <wx/artprov.h>
27 //*)
28
29 //(*IdInit(EmbeddedHtmlPanel)
30 const long EmbeddedHtmlPanel::ID_BITMAPBUTTON2 = wxNewId();
31 const long EmbeddedHtmlPanel::ID_BITMAPBUTTON3 = wxNewId();
32 const long EmbeddedHtmlPanel::ID_STATICTEXT1 = wxNewId();
33 const long EmbeddedHtmlPanel::ID_PANEL1 = wxNewId();
34 const long EmbeddedHtmlPanel::ID_HTMLWINDOW1 = wxNewId();
35 //*)
36
37 // (shamelessly stolen from help plugin)
38 // build all HTML font sizes (1..7) from the given base size
wxBuildFontSizes(int * sizes,int size)39 inline void wxBuildFontSizes(int *sizes, int size)
40 {
41 // using a fixed factor (1.2, from CSS2) is a bad idea as explained at
42 // http://www.w3.org/TR/CSS21/fonts.html#font-size-props but this is by far
43 // simplest thing to do so still do it like this for now
44 sizes[0] = int(size * 0.75); // exception to 1.2 rule, otherwise too small
45 sizes[1] = int(size * 0.83);
46 sizes[2] = size;
47 sizes[3] = int(size * 1.2);
48 sizes[4] = int(size * 1.44);
49 sizes[5] = int(size * 1.73);
50 sizes[6] = int(size * 2);
51 }
52
53 // (shamelessly stolen from help plugin)
wxGetDefaultHTMLFontSize()54 inline int wxGetDefaultHTMLFontSize()
55 {
56 // base the default font size on the size of the default system font but
57 // also ensure that we have a font of reasonable size, otherwise small HTML
58 // fonts are unreadable
59 int size = wxNORMAL_FONT->GetPointSize();
60 if ( size < 10 )
61 size = 10;
62
63 return size;
64 }
65
BEGIN_EVENT_TABLE(EmbeddedHtmlPanel,wxPanel)66 BEGIN_EVENT_TABLE(EmbeddedHtmlPanel,wxPanel)
67 //(*EventTable(EmbeddedHtmlPanel)
68 //*)
69 EVT_UPDATE_UI(-1, EmbeddedHtmlPanel::OnUpdateUI)
70 EVT_HTML_LINK_CLICKED(ID_HTMLWINDOW1, EmbeddedHtmlPanel::OnLinkClicked)
71 END_EVENT_TABLE()
72
73 EmbeddedHtmlPanel::EmbeddedHtmlPanel(wxWindow* parent)
74 {
75 //(*Initialize(EmbeddedHtmlPanel)
76 wxBoxSizer* BoxSizer2;
77 wxBoxSizer* BoxSizer1;
78
79 Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, _T("wxID_ANY"));
80 BoxSizer1 = new wxBoxSizer(wxVERTICAL);
81 Panel1 = new wxPanel(this, ID_PANEL1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL1"));
82 BoxSizer2 = new wxBoxSizer(wxHORIZONTAL);
83 btnBack = new wxBitmapButton(Panel1, ID_BITMAPBUTTON2, wxArtProvider::GetBitmap(wxART_MAKE_ART_ID_FROM_STR(_T("wxART_GO_BACK")),wxART_BUTTON), wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW, wxDefaultValidator, _T("ID_BITMAPBUTTON2"));
84 BoxSizer2->Add(btnBack, 0, wxALIGN_CENTER_VERTICAL, 5);
85 btnForward = new wxBitmapButton(Panel1, ID_BITMAPBUTTON3, wxArtProvider::GetBitmap(wxART_MAKE_ART_ID_FROM_STR(_T("wxART_GO_FORWARD")),wxART_BUTTON), wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW, wxDefaultValidator, _T("ID_BITMAPBUTTON3"));
86 BoxSizer2->Add(btnForward, 0, wxALIGN_CENTER_VERTICAL, 5);
87 lblStatus = new wxStaticText(Panel1, ID_STATICTEXT1, _("Label"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT1"));
88 BoxSizer2->Add(lblStatus, 1, wxLEFT|wxALIGN_CENTER_VERTICAL, 5);
89 Panel1->SetSizer(BoxSizer2);
90 BoxSizer2->Fit(Panel1);
91 BoxSizer2->SetSizeHints(Panel1);
92 BoxSizer1->Add(Panel1, 0, wxEXPAND, 5);
93 winHtml = new wxHtmlWindow(this, ID_HTMLWINDOW1, wxDefaultPosition, wxSize(340,180), wxHW_SCROLLBAR_AUTO, _T("ID_HTMLWINDOW1"));
94 BoxSizer1->Add(winHtml, 1, wxEXPAND, 5);
95 SetSizer(BoxSizer1);
96 BoxSizer1->Fit(this);
97 BoxSizer1->SetSizeHints(this);
98
99 Connect(ID_BITMAPBUTTON2,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&EmbeddedHtmlPanel::OnbtnBackClick);
100 Connect(ID_BITMAPBUTTON3,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&EmbeddedHtmlPanel::OnbtnForwardClick);
101 //*)
102
103 int sizes[7] = {};
104 wxBuildFontSizes(sizes, wxGetDefaultHTMLFontSize());
105 winHtml->SetFonts(wxEmptyString, wxEmptyString, &sizes[0]);
106
107 lblStatus->SetLabel(wxEmptyString);
108 }
109
~EmbeddedHtmlPanel()110 EmbeddedHtmlPanel::~EmbeddedHtmlPanel()
111 {
112 //(*Destroy(EmbeddedHtmlPanel)
113 //*)
114 }
115
OnLinkClicked(wxHtmlLinkEvent & event)116 void EmbeddedHtmlPanel::OnLinkClicked(wxHtmlLinkEvent &event)
117 {
118 Open(event.GetLinkInfo().GetHref());
119 }
120
OnUpdateUI(wxUpdateUIEvent & event)121 void EmbeddedHtmlPanel::OnUpdateUI(wxUpdateUIEvent& event)
122 {
123 btnBack->Enable(winHtml->HistoryCanBack());
124 btnForward->Enable(winHtml->HistoryCanForward());
125
126 event.Skip();
127 }
128
OnbtnBackClick(cb_unused wxCommandEvent & event)129 void EmbeddedHtmlPanel::OnbtnBackClick(cb_unused wxCommandEvent& event)
130 {
131 if (winHtml->HistoryCanBack())
132 {
133 lblStatus->SetLabel(_("Going back..."));
134 Update();
135
136 winHtml->HistoryBack();
137
138 lblStatus->SetLabel(_("Ready"));
139 }
140 }
141
OnbtnForwardClick(cb_unused wxCommandEvent & event)142 void EmbeddedHtmlPanel::OnbtnForwardClick(cb_unused wxCommandEvent& event)
143 {
144 if (winHtml->HistoryCanForward())
145 {
146 lblStatus->SetLabel(_("Going forward..."));
147 Update();
148
149 winHtml->HistoryForward();
150
151 lblStatus->SetLabel(_("Ready"));
152 }
153 }
154
Open(const wxString & url)155 void EmbeddedHtmlPanel::Open(const wxString& url)
156 {
157 lblStatus->SetLabel(_("Opening ") + url);
158 Update();
159
160 winHtml->LoadPage(url);
161
162 lblStatus->SetLabel(_("Ready"));
163 }
164