]>
git.saurik.com Git - wxWidgets.git/blob - src/html/helpfrm.cpp
3e8da6b12cf79dc903dfdac9c44a56676aa75e80
   1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        src/html/helpfrm.cpp 
   3 // Purpose:     wxHtmlHelpFrame 
   4 // Notes:       Based on htmlhelp.cpp, implementing a monolithic 
   5 //              HTML Help controller class,  by Vaclav Slavik 
   6 // Author:      Harm van der Heijden and Vaclav Slavik 
   8 // Copyright:   (c) Harm van der Heijden and Vaclav Slavik 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 // For compilers that support precompilation, includes "wx.h" 
  14 #include "wx/wxprec.h" 
  23     #include "wx/object.h" 
  24     #include "wx/dynarray.h" 
  28         #include "wx/stream.h" 
  33     #include "wx/bmpbuttn.h" 
  34     #include "wx/statbox.h" 
  35     #include "wx/radiobox.h" 
  37     #include "wx/settings.h" 
  38     #include "wx/msgdlg.h" 
  39     #include "wx/textctrl.h" 
  42 #include "wx/html/helpfrm.h" 
  43 #include "wx/html/helpctrl.h" 
  44 #include "wx/notebook.h" 
  45 #include "wx/imaglist.h" 
  46 #include "wx/treectrl.h" 
  47 #include "wx/tokenzr.h" 
  48 #include "wx/wfstream.h" 
  49 #include "wx/html/htmlwin.h" 
  50 #include "wx/busyinfo.h" 
  51 #include "wx/progdlg.h" 
  52 #include "wx/toolbar.h" 
  53 #include "wx/fontenum.h" 
  54 #include "wx/filedlg.h" 
  55 #include "wx/artprov.h" 
  56 #include "wx/spinctrl.h" 
  57 #include "wx/choicdlg.h" 
  59 IMPLEMENT_DYNAMIC_CLASS(wxHtmlHelpFrame
, wxFrame
) 
  61 BEGIN_EVENT_TABLE(wxHtmlHelpFrame
, wxFrame
) 
  62     EVT_ACTIVATE(wxHtmlHelpFrame::OnActivate
) 
  63     EVT_CLOSE(wxHtmlHelpFrame::OnCloseWindow
) 
  65     EVT_MENU(wxID_CLOSE
, wxHtmlHelpFrame::OnClose
) 
  66     EVT_MENU(wxID_ABOUT
, wxHtmlHelpFrame::OnAbout
) 
  67     EVT_MENU(wxID_HELP_CONTENTS
, wxHtmlHelpFrame::OnAbout
) 
  71 wxHtmlHelpFrame::wxHtmlHelpFrame(wxWindow
* parent
, wxWindowID id
, const wxString
& title
, 
  72                                  int style
, wxHtmlHelpData
* data
) 
  75     Create(parent
, id
, title
, style
); 
  78 void wxHtmlHelpFrame::Init(wxHtmlHelpData
* data
) 
  80     // Simply pass the pointer on to the help window 
  83     m_helpController 
= (wxHtmlHelpController
*) NULL
; 
  86 // Create: builds the GUI components. 
  87 bool wxHtmlHelpFrame::Create(wxWindow
* parent
, wxWindowID id
, 
  88                              const wxString
& WXUNUSED(title
), int style
) 
  90     m_HtmlHelpWin 
= new wxHtmlHelpWindow(m_Data
); 
  92     wxFrame::Create(parent
, id
, _("Help"), 
  93                     wxPoint(m_HtmlHelpWin
->GetCfgData().x
, m_HtmlHelpWin
->GetCfgData().y
), 
  94                     wxSize(m_HtmlHelpWin
->GetCfgData().w
, m_HtmlHelpWin
->GetCfgData().h
), 
  95                     wxDEFAULT_FRAME_STYLE
, wxT("wxHtmlHelp")); 
  99     m_HtmlHelpWin
->Create(this, wxID_ANY
, wxDefaultPosition
, wxDefaultSize
, 
 100         wxTAB_TRAVERSAL
|wxNO_BORDER
, style
); 
 102     GetPosition(& (m_HtmlHelpWin
->GetCfgData().x
), & (m_HtmlHelpWin
->GetCfgData()).y
); 
 104     SetIcon(wxArtProvider::GetIcon(wxART_HELP
, wxART_HELP_BROWSER
)); 
 106     // On the Mac, each modeless frame must have a menubar. 
 107     // TODO: add more menu items, and perhaps add a style to show 
 108     // the menubar: compulsory on the Mac, optional elsewhere. 
 110     wxMenuBar
* menuBar 
= new wxMenuBar
; 
 112     wxMenu
* fileMenu 
= new wxMenu
; 
 113     fileMenu
->Append(wxID_HTML_OPENFILE
, _("&Open...")); 
 114     fileMenu
->AppendSeparator(); 
 115     fileMenu
->Append(wxID_CLOSE
, _("&Close")); 
 117     wxMenu
* helpMenu 
= new wxMenu
; 
 118     helpMenu
->Append(wxID_ABOUT
, _("&About...")); 
 119     // Ensures we don't get an empty help menu 
 120     helpMenu
->Append(wxID_HELP_CONTENTS
, _("&About...")); 
 122     menuBar
->Append(fileMenu
,_("&File")); 
 123     menuBar
->Append(helpMenu
,_("&Help")); 
 127     m_HtmlHelpWin
->GetHtmlWindow()->SetRelatedFrame(this, m_TitleFormat
); 
 129     m_HtmlHelpWin
->GetHtmlWindow()->SetRelatedStatusBar(0); 
 134 wxHtmlHelpFrame::~wxHtmlHelpFrame() 
 138 void wxHtmlHelpFrame::SetTitleFormat(const wxString
& format
) 
 140     if (GetHelpWindow() && GetHelpWindow()->GetHtmlWindow()) 
 141         GetHelpWindow()->GetHtmlWindow()->SetRelatedFrame(this, format
); 
 142     m_TitleFormat 
= format
; 
 150 void wxHtmlHelpFrame::OnActivate(wxActivateEvent
& event
) 
 152     // This saves one mouse click when using the 
 153     // wxHTML for context sensitive help systems 
 155     // NB: wxActivateEvent is a bit broken in wxGTK 
 156     //     and is sometimes sent when it should not be 
 157     if (event
.GetActive() && m_HtmlHelpWin
) 
 158         m_HtmlHelpWin
->GetHtmlWindow()->SetFocus(); 
 164 void wxHtmlHelpFrame::OnCloseWindow(wxCloseEvent
& evt
) 
 168         GetSize(& (m_HtmlHelpWin
->GetCfgData().w
), &(m_HtmlHelpWin
->GetCfgData().h
)); 
 169         GetPosition(& (m_HtmlHelpWin
->GetCfgData().x
), & (m_HtmlHelpWin
->GetCfgData().y
)); 
 179     if (m_HtmlHelpWin
->GetSplitterWindow() && m_HtmlHelpWin
->GetCfgData().navig_on
) 
 180         m_HtmlHelpWin
->GetCfgData().sashpos 
= m_HtmlHelpWin
->GetSplitterWindow()->GetSashPosition(); 
 182     if (m_helpController 
&& m_helpController
->IsKindOf(CLASSINFO(wxHtmlHelpController
))) 
 184         ((wxHtmlHelpController
*) m_helpController
)->OnCloseFrame(evt
); 
 190 // Make the help controller's frame 'modal' if 
 192 void wxHtmlHelpFrame::AddGrabIfNeeded() 
 194     // So far, wxGTK only 
 196     bool needGrab 
= false; 
 198     // Check if there are any modal windows present, 
 199     // in which case we need to add a grab. 
 200     for ( wxWindowList::iterator it 
= wxTopLevelWindows
.begin(); 
 201           it 
!= wxTopLevelWindows
.end(); 
 205         wxDialog 
*dialog 
= wxDynamicCast(win
, wxDialog
); 
 207         if (dialog 
&& dialog
->IsModal()) 
 217 void wxHtmlHelpFrame::UseConfig(wxConfigBase 
*config
, const wxString
& rootPath
) 
 220         m_HtmlHelpWin
->UseConfig(config
, rootPath
); 
 224 void wxHtmlHelpFrame::OnClose(wxCommandEvent
& event
) 
 229 void wxHtmlHelpFrame::OnAbout(wxCommandEvent
& event
) 
 231     wxMessageBox(wxT("wxWidgets HTML Help Viewer (c) 1998-2006, Vaclav Slavik et al"), wxT("HelpView"), 
 232         wxICON_INFORMATION
|wxOK
, this); 
 236 #endif // wxUSE_WXHTML_HELP