Un navigateur Internet révolutionnaire

Sortir un navigateur, c'est très facile. Surtout lorsque le moteur de rendu est basé sur le travail des autres... Dans wxWidgets, il y a un composant (wxHtmlWindow) qui permet d'afficher des pages web dans des applications.

C'est très pratique par exemple pour afficher un fichier d'aide au format HTML, ou pour générer des rapports tant soit peu jolis. Mais il ne faut pas lui en demander trop.

Pour compiler le code suivant, vous avez besoin de C++ et de wxWidgets. Pour utiliser l'exemple, il faudra créer les images des boutons : back.png, go.png, home.png, next.png, reload.png, stop.png. Pour mes tests, j'ai pompé celles de FireFox, mais comme ce ne sont pas les miennes, je n'y touche pas.

Le code fonctionne sous Windows, Linux, Unix ou Macintosh. Quoi qu'avec ces deux derniers, en utilisant la classe wxWebKit, vous avez directement le rendu de Safari Drôle.

#include "wx/wxprec.h"
#ifdef __BORLANDC__
  #pragma hdrstop
#endif
#ifndef WX_PRECOMP
  #include "wx/wx.h"
#endif

#include "wx/image.h"
#include "wx/fs_inet.h"
#include "wx/html/htmlwin.h"
#include "wx/html/htmlproc.h"

//------------------------------------------

  class wxNavFrame : public wxFrame
  {
    DECLARE_EVENT_TABLE()
    private:
      enum {
        ID_NAV_PREV = 1000,
        ID_NAV_NEXT,
        ID_NAV_REFRESH,
        ID_NAV_STOP,
        ID_NAV_HOME,
        ID_NAV_GO,
        ID_FOX,
      };
      wxPanel *ToolBar;
      wxBitmapButton *buttonPrev, *buttonNext, *buttonRefresh, *buttonStop, *buttonHome, *buttonGo;
      wxTextCtrl *editURL;
      wxHtmlWindow *Fox;
      void OnToolPrevClick(wxCommandEvent& event);
      void OnToolNextClick(wxCommandEvent& event);
      void OnToolRefreshClick(wxCommandEvent& event);
      void OnToolStopClick(wxCommandEvent& event);
      void OnToolHomeClick(wxCommandEvent& event);
      void OnToolGoClick(wxCommandEvent& event);

    public:
      wxNavFrame();
      ~wxNavFrame();
  };

  BEGIN_EVENT_TABLE(wxNavFrame, wxFrame)
    EVT_BUTTON(ID_NAV_PREV, wxNavFrame::OnToolPrevClick)
    EVT_BUTTON(ID_NAV_NEXT, wxNavFrame::OnToolNextClick)
    EVT_BUTTON(ID_NAV_REFRESH, wxNavFrame::OnToolRefreshClick)
    EVT_BUTTON(ID_NAV_STOP, wxNavFrame::OnToolStopClick)
    EVT_BUTTON(ID_NAV_HOME, wxNavFrame::OnToolHomeClick)
    EVT_BUTTON(ID_NAV_GO, wxNavFrame::OnToolGoClick)
  END_EVENT_TABLE()

wxNavFrame::wxNavFrame() : wxFrame(NULL, -1, wxT("Internet Navigator (wxHTML)"), wxDefaultPosition, wxSize(600,500), wxDEFAULT_FRAME_STYLE)
{
  this->SetSizeHints(wxDefaultSize, wxDefaultSize);
  wxBoxSizer *VSizer;
  VSizer = new wxBoxSizer(wxVERTICAL);
  ToolBar = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1,35), wxTAB_TRAVERSAL);
  wxBoxSizer *TSizer;
  TSizer = new wxBoxSizer(wxHORIZONTAL);
  buttonPrev = new wxBitmapButton(ToolBar, ID_NAV_PREV, wxImage(wxT("back.png"), wxBITMAP_TYPE_ANY), wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW);
  TSizer->Add(buttonPrev, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxTOP, 5);
  buttonNext = new wxBitmapButton(ToolBar, ID_NAV_NEXT, wxImage(wxT("next.png"), wxBITMAP_TYPE_ANY), wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW);
  TSizer->Add(buttonNext, 0, wxALIGN_CENTER_VERTICAL, 5);
  buttonRefresh = new wxBitmapButton(ToolBar, ID_NAV_REFRESH, wxImage(wxT("reload.png"), wxBITMAP_TYPE_ANY), wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW);
  TSizer->Add(buttonRefresh, 0, wxALIGN_CENTER_VERTICAL, 5);
  buttonStop = new wxBitmapButton(ToolBar, ID_NAV_STOP, wxImage(wxT("stop.png"), wxBITMAP_TYPE_ANY), wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW);
  TSizer->Add(buttonStop, 0, wxALIGN_CENTER_VERTICAL, 5);
  buttonHome = new wxBitmapButton(ToolBar, ID_NAV_HOME, wxImage(wxT("home.png"), wxBITMAP_TYPE_ANY), wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW);
  TSizer->Add(buttonHome, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxTOP, 5);
  editURL = new wxTextCtrl(ToolBar, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);
  TSizer->Add(editURL, 1, wxALIGN_CENTER_VERTICAL|wxALL, 0);
  buttonGo = new wxBitmapButton(ToolBar, ID_NAV_GO, wxImage(wxT("go.png"), wxBITMAP_TYPE_ANY), wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW);
  TSizer->Add(buttonGo, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5);
  ToolBar->SetSizer(TSizer);
  ToolBar->Layout();
  VSizer->Add(ToolBar, 0, wxALL|wxEXPAND, 0);
  Fox = new wxHtmlWindow(this, ID_FOX, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO);
  VSizer->Add(Fox, 1, wxALL|wxEXPAND, 0);
  this->SetSizer(VSizer);
  this->Layout();
  this->Center();
  this->Show(true);
  Fox->SetFocus();
}

wxNavFrame::~wxNavFrame()
{
}

void wxNavFrame::OnToolPrevClick(wxCommandEvent& event)
{
  Fox->HistoryBack();
}

void wxNavFrame::OnToolNextClick(wxCommandEvent& event)
{
  Fox->HistoryForward();
}

void wxNavFrame::OnToolRefreshClick(wxCommandEvent& event)
{
  //Fox->Reload();
}

void wxNavFrame::OnToolStopClick(wxCommandEvent& event)
{
  //Fox->Stop();
}

void wxNavFrame::OnToolHomeClick(wxCommandEvent& event)
{
  Fox->LoadPage(wxT("http://ecrucru.free.fr"));
}

void wxNavFrame::OnToolGoClick(wxCommandEvent& event)
{
  Fox->LoadPage(editURL->GetValue());
  Fox->SetFocus();
}

//------------------------------------------

  class wxNavApp: public wxApp
  {
    private:
      wxNavFrame *MainFrame;
    public:
      virtual bool OnInit();
  };

DECLARE_APP(wxNavApp)
IMPLEMENT_APP(wxNavApp)

bool wxNavApp::OnInit()
{
  wxApp::OnInit();
  wxInitAllImageHandlers();
  wxFileSystem::AddHandler(new wxInternetFSHandler);
  MainFrame = new wxNavFrame();
  SetTopWindow(MainFrame);
  return true;
}

Il faudra juste taper les URL en entier.

Posté par admin le 22 septembre 2008 à 19:21 - Informatique
Texte soumis à la licence du site, sauf mention contraire
Rechercher plus d'informations

 

Commentaires

Evaluer l'article : * * * *

Ajouter un commentaire

Pseudo:
Site web: http://...
Message:
Avez-vous trouvé l'information que vous cherchiez ? Votre retour d'expérience sur le site nous intéresse.