00001
00002
00003
00004
00005
00006
00007
00008
00009
00011
00012
00013
00014 #include "wx/wxprec.h"
00015
00016 #ifdef __BORLANDC__
00017 #pragma hdrstop
00018 #endif
00019
00020 #ifndef WX_PRECOMP
00021 #include "wx/wx.h"
00022 #endif
00023
00024 #include "wx/tokenzr.h"
00025 #include "wx/stdpaths.h"
00026 #include "wx/ffile.h"
00027
00028 #include "guipm/viewerpanel.h"
00029 #include "wxp/package.h"
00030 #include "wx/webbrowser.h"
00031
00032 #ifdef __WXMSW__
00033 #include "wx/msw/helpchm.h"
00034 #include "wx/msw/private.h"
00035 #include "wx/msw/uxtheme.h"
00036 #else
00037 #include "wx/html/helpctrl.h"
00038 #endif
00039
00040 #include "wx/html/helpwnd.h"
00041 #include "wx/html/helpctrl.h"
00042 #include "wx/html/helpfrm.h"
00043
00044
00045
00046
00047
00048
00049 IMPLEMENT_DYNAMIC_CLASS( wxPackageViewerPanel, wxPanel )
00050 BEGIN_EVENT_TABLE( wxPackageViewerPanel, wxPanel )
00051
00052
00053
00054 EVT_HTML_LINK_CLICKED(ID_VIEWER_SUMMARY, wxPackageViewerPanel::OnLinkClicked)
00055 EVT_HTML_LINK_CLICKED(ID_VIEWER_DETAILS, wxPackageViewerPanel::OnLinkClicked)
00056
00057 EVT_NOTEBOOK_PAGE_CHANGED(ID_VIEWER_NOTEBOOK, wxPackageViewerPanel::OnPageChanged)
00058 END_EVENT_TABLE()
00059
00060 wxPackageViewerPanel::wxPackageViewerPanel( )
00061 {
00062 }
00063
00064 wxPackageViewerPanel::wxPackageViewerPanel( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style )
00065 {
00066 Create(parent, id, pos, size, style);
00067 }
00068
00069 wxPackageViewerPanel::~wxPackageViewerPanel()
00070 {
00071 if (m_embeddedHelpController)
00072 {
00073 m_embeddedHelpController->SetHelpWindow(NULL);
00074 wxDELETE(m_embeddedHelpController);
00075 }
00076 }
00077
00078 bool wxPackageViewerPanel::Create( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style )
00079 {
00081 m_pNotebook = NULL;
00082 m_pSummaryHtmlWin = NULL;
00083 m_pDetailsHtmlWin = NULL;
00085 m_embeddedHelpWindow = NULL;
00086 m_embeddedHelpController = NULL;
00087
00089 SetExtraStyle(GetExtraStyle()|wxWS_EX_BLOCK_EVENTS);
00090 wxPanel::Create( parent, id, pos, size, style );
00091
00092 CreateControls();
00093 if (GetSizer())
00094 {
00095 GetSizer()->SetSizeHints(this);
00096 }
00097 Centre();
00099
00100 return true;
00101 }
00102
00103 bool wxPackageViewerPanel::IsOk() const
00104 {
00105 if (!m_viewMode.IsOk())
00106 return false;
00107 return true;
00108 }
00109
00110 void wxPackageViewerPanel::CreateControls()
00111 {
00113 wxPackageViewerPanel* itemPanel1 = this;
00114
00115 wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
00116 itemPanel1->SetSizer(itemBoxSizer2);
00117
00118 m_pNotebook = new wxNotebook( itemPanel1, ID_VIEWER_NOTEBOOK, wxDefaultPosition, wxDefaultSize, wxNB_TOP );
00119
00120 wxPanel* itemPanel4 = new wxPanel( m_pNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
00121 wxBoxSizer* itemBoxSizer5 = new wxBoxSizer(wxVERTICAL);
00122 itemPanel4->SetSizer(itemBoxSizer5);
00123
00124 m_pSummaryHtmlWin = new wxHtmlWindow( itemPanel4, ID_VIEWER_SUMMARY, wxDefaultPosition, wxSize(200, 150), wxHW_SCROLLBAR_AUTO|wxSUNKEN_BORDER|wxHSCROLL|wxVSCROLL );
00125 itemBoxSizer5->Add(m_pSummaryHtmlWin, 1, wxGROW|wxALL, 5);
00126
00127 m_pNotebook->AddPage(itemPanel4, _("Summary"));
00128
00129 wxPanel* itemPanel7 = new wxPanel( m_pNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
00130 wxBoxSizer* itemBoxSizer8 = new wxBoxSizer(wxVERTICAL);
00131 itemPanel7->SetSizer(itemBoxSizer8);
00132
00133 m_pDetailsHtmlWin = new wxHtmlWindow( itemPanel7, ID_VIEWER_DETAILS, wxDefaultPosition, wxSize(200, 150), wxHW_SCROLLBAR_AUTO|wxSUNKEN_BORDER|wxHSCROLL|wxVSCROLL );
00134 itemBoxSizer8->Add(m_pDetailsHtmlWin, 1, wxGROW|wxALL, 5);
00135
00136 m_pNotebook->AddPage(itemPanel7, _("Details"));
00137
00138 itemBoxSizer2->Add(m_pNotebook, 1, wxGROW, 5);
00139
00141
00142
00143
00144 m_embeddedHelpController = new wxHtmlHelpController;
00145 m_embeddedHelpWindow = new wxHtmlHelpWindow;
00146 m_embeddedHelpWindow->SetController(m_embeddedHelpController);
00147 m_embeddedHelpController->SetHelpWindow(m_embeddedHelpWindow);
00148 m_embeddedHelpWindow->Create(m_pNotebook, wxID_ANY, wxDefaultPosition,
00149 wxSize(200, 100), wxTAB_TRAVERSAL|wxNO_BORDER,
00150 wxHF_DEFAULT_STYLE);
00151 m_pNotebook->AddPage(m_embeddedHelpWindow, _("Documentation"), FALSE);
00152
00153 #ifdef __WXMSW__
00154 if (wxUxThemeEngine::Get()->IsThemeActive())
00155 {
00156 wxColour backColour = m_pNotebook->GetThemeBackgroundColour();
00157 if (m_embeddedHelpWindow->GetToolBar())
00158 m_embeddedHelpWindow->GetToolBar()->SetBackgroundColour(backColour);
00159 }
00160 #endif
00161
00162
00163 m_pDownloadQueuePanel = new wxPackageDownloadQueuePanel(m_pNotebook, wxID_ANY);
00164 m_pNotebook->AddPage(m_pDownloadQueuePanel, _("Downloads"), FALSE);
00165
00166
00167 m_pTaskQueuePanel = new wxPackageCommandQueuePanel(m_pNotebook, wxID_ANY);
00168 m_pNotebook->AddPage(m_pTaskQueuePanel, _("Builds"), FALSE);
00169
00170
00171 #if wxPM_HAS_EMBEDDED_BROWSER
00172 wxWebBrowserWindow* webBrowserWindow = new wxWebBrowserWindow(m_pNotebook, wxID_ANY);
00173 webBrowserWindow->CreateWindows();
00174 m_pNotebook->AddPage(webBrowserWindow, _("Browser"), FALSE);
00175 #endif
00176
00177
00178 #ifdef __WXMSW__
00179 m_pSummaryHtmlWin->SetFonts(wxT("Trebuchet MS"), wxEmptyString, NULL);
00180 #endif
00181 Reset();
00182 }
00183
00184 bool wxPackageViewerPanel::ShowToolTips()
00185 {
00186 return true;
00187 }
00188
00189 bool wxPackageViewerPanel::LoadViewFormats()
00190 {
00191 m_viewMode = wxPackageInfo::s_hashmapHTMLFormats[wxT("simple")];
00192
00193
00194 wxPackageHTMLOutputFormat temp;
00195 if (!temp.Load(wxStandardPaths::Get().GetDataDir() +
00196 wxFileName::GetPathSeparator() +
00197 wxT("defaultpages")))
00198 return false;
00199
00200 m_strDefaultSummary = temp.GetSummary();
00201 m_strDefaultDetails = temp.GetDetails();
00202
00203 return true;
00204 }
00205
00206
00207
00208
00209
00210
00211 void wxPackageViewerPanel::InitReference()
00212 {
00213 for (size_t i=0; i<m_arrDocs.GetCount(); i++)
00214 {
00215 wxString f = m_arrDocs[i];
00216 if (!wxIsAbsolutePath(f))
00217 {
00218 wxString sep(wxFileName::GetPathSeparator());
00219 wxFileName fn(wxStandardPaths::Get().GetDataDir() + sep +
00220 wxT("docs") + sep + f);
00221 fn.Normalize(wxPATH_NORM_DOTS|wxPATH_NORM_ABSOLUTE);
00222 f = fn.GetFullPath();
00223 }
00224 GetEmbeddedHelpController()->AddBook(wxFileName(f), true);
00225 }
00226 }
00227
00228 void wxPackageViewerPanel::UpdateSummaryAndDesc()
00229 {
00230 wxString summary, details;
00231
00232 if (m_arrPkg.GetCount() == 0)
00233 {
00234
00235 Reset();
00236 return;
00237 }
00238 else if (m_arrPkg.GetCount() == 1)
00239 {
00240 summary = m_viewMode.GetSummaryFor(m_arrPkg[0]);
00241 details = m_viewMode.GetDetailsFor(m_arrPkg[0]);
00242 summary = wxT("<html><body>") + summary + wxT("</body></html>");
00243 }
00244 else
00245 {
00246 summary = wxT("<html><body><div align='center'>")
00247 wxT("<h2><u>Summary of selected packages</u></h2>")
00248 wxT("</div>");
00249
00250 for (size_t i=0; i<m_arrPkg.GetCount(); i++)
00251 {
00252
00253
00254
00255 summary += m_viewMode.GetSummaryFor(m_arrPkg[i]);
00256
00257 if (i < m_arrPkg.GetCount() - 1)
00258 summary += wxT("<br><hr width='90%' align='center'>");
00259 }
00260
00261 summary += wxT("</body></html>");
00262
00263 details = wxT("<html><body>")
00264 wxT("<p>For details about a single package, select only that one.</p>")
00265 wxT("</body></html>");
00266 }
00267
00268
00269 m_pSummaryHtmlWin->SetPage(summary);
00270
00271
00272 m_pDetailsHtmlWin->SetPage(details);
00273 }
00274
00275 void wxPackageViewerPanel::Reset()
00276 {
00277
00278 m_pSummaryHtmlWin->SetPage(m_strDefaultSummary);
00279 m_pDetailsHtmlWin->SetPage(m_strDefaultDetails);
00280 }
00281
00282 bool wxPackageViewerPanel::Load(wxConfigBase *p, const wxString &path)
00283 {
00284 m_arrDocs = wxString2Array(
00285 p->Read(path + wxT("/ViewerPanel/Files/ExtraHelpFiles"), wxT("pm.htb")));
00286
00287 SetViewMode(p->Read(path + wxT("/ViewerPanel/ViewMode"), wxT("simple")));
00288 GetEmbeddedHelpController()->ReadCustomization(p, path + wxT("/EmbeddedHelp"));
00289
00290
00291 return true;
00292 }
00293
00294 void wxPackageViewerPanel::Save(wxConfigBase *p, const wxString &path) const
00295 {
00296 p->Write(path + wxT("/ViewerPanel/Files/ExtraHelpFiles"), wxArray2String(m_arrDocs));
00297 p->Write(path + wxT("/ViewerPanel/ViewMode"), m_strViewModeName);
00298
00299 GetEmbeddedHelpController()->WriteCustomization(p, path + wxT("/EmbeddedHelp"));
00300 }
00301
00302
00303
00304
00305
00306
00307 void wxPackageViewerPanel::OnLinkClicked(wxHtmlLinkEvent &ev)
00308 {
00309 wxString href = ev.GetLinkInfo().GetHref();
00310 if (href == wxT("details"))
00311 SelectDetailsPage();
00312 else if (href == wxT("summary"))
00313 SelectSummaryPage();
00314 else if (href == wxT("docs"))
00315 SelectReferencePage();
00316 else
00317 {
00318 #if wxPM_HAS_EMBEDDED_BROWSER
00319 SelectBrowserPage();
00320 GetBrowser()->LoadPage(href);
00321 #else
00322 wxLaunchDefaultBrowser(href);
00323 #endif
00324 }
00325 }
00326
00327 void wxPackageViewerPanel::OnPageChanged(wxNotebookEvent &ev)
00328 {
00329 static bool initialized = false;
00330 if (ev.GetSelection() == 2 && !initialized)
00331 {
00332 InitReference();
00333 initialized = true;
00334 }
00335 }
00336