viewerpanel.cpp

00001 
00002 // Name:        viewerpanel.cpp
00003 // Purpose:     wxPackageViewerPanel
00004 // Author:      Julian Smart, Francesco Montorsi
00005 // Modified by:
00006 // Created:     04/06/2006 15:41:31
00007 // RCS-ID:      $Id: viewerpanel.cpp,v 1.4 2007/02/01 11:56:54 frm Exp $
00008 // Copyright:   (c) 2004 Francesco Montorsi
00009 // Licence:     wxWidgets license
00011 
00012 
00013 // For compilers that support precompilation, includes "wx/wx.h".
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 // wxPackageViewerPanel
00047 // ----------------------------------------------------------------------------
00048 
00049 IMPLEMENT_DYNAMIC_CLASS( wxPackageViewerPanel, wxPanel )
00050 BEGIN_EVENT_TABLE( wxPackageViewerPanel, wxPanel )
00051 
00052     // NB: the ID of the html windows are important to avoid intercepting
00053     //     the link events for the wxHtmlHelpWindow!
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     // Create reference tab
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     // Create the download tab
00163     m_pDownloadQueuePanel = new wxPackageDownloadQueuePanel(m_pNotebook, wxID_ANY);
00164     m_pNotebook->AddPage(m_pDownloadQueuePanel, _("Downloads"), FALSE);
00165 
00166     // Create the build tab
00167     m_pTaskQueuePanel = new wxPackageCommandQueuePanel(m_pNotebook, wxID_ANY);
00168     m_pNotebook->AddPage(m_pTaskQueuePanel, _("Builds"), FALSE);
00169 
00170     // Create the web browser
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     // init the html windows
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     // load view formats
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 // wxPackageViewerPanel - additional functions
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         // just set default msg
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                 // FIXME - need some way to make this list nicer
00253                 /*summary += wxString::Format(wxT("<b>%s</b><br>"),
00254                                 m_arrPkg[i].GetName().c_str());*/
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     // update the summary HTML description
00269     m_pSummaryHtmlWin->SetPage(summary);
00270 
00271     // update the details HTML description
00272     m_pDetailsHtmlWin->SetPage(details);
00273 }
00274 
00275 void wxPackageViewerPanel::Reset()
00276 {
00277     // default messages
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     //m_embeddedHelpController->UseConfig(m_pCfg, m_strPath + wxT("/EmbeddedHelp"));
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 // wxPackageViewerPanel - event handlers
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 

Generated on Thu Feb 1 22:14:31 2007 for wxWidgets Package Manager by  doxygen 1.5.1-p1