X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1aedb1dd8b6e2ace57901cbe0ce70786ddb67947..7052b16dedae79bec878ce41e4607a39a969610c:/src/html/helpfrm.cpp diff --git a/src/html/helpfrm.cpp b/src/html/helpfrm.cpp index 2e17256a5e..d01ec35ffb 100644 --- a/src/html/helpfrm.cpp +++ b/src/html/helpfrm.cpp @@ -35,6 +35,11 @@ #include "wx/radiobox.h" #endif // WXPRECOMP +#ifdef __WXMAC__ + #include "wx/menu.h" + #include "wx/msgdlg.h" +#endif + #include "wx/html/helpfrm.h" #include "wx/html/helpctrl.h" #include "wx/textctrl.h" @@ -51,6 +56,7 @@ #include "wx/stream.h" #include "wx/filedlg.h" #include "wx/artprov.h" +#include "wx/spinctrl.h" // what is considered "small index"? #define INDEX_IS_SMALL 100 @@ -112,6 +118,8 @@ class wxHtmlHelpHtmlWindow : public wxHtmlWindow private: wxHtmlHelpFrame *m_Frame; + + DECLARE_NO_COPY_CLASS(wxHtmlHelpHtmlWindow) }; @@ -202,7 +210,11 @@ void wxHtmlHelpFrame::Init(wxHtmlHelpData* data) m_NormalFonts = m_FixedFonts = NULL; m_NormalFace = m_FixedFace = wxEmptyString; - m_FontSize = 1; +#ifdef __WXMSW__ + m_FontSize = 10; +#else + m_FontSize = 14; +#endif #if wxUSE_PRINTING_ARCHITECTURE m_Printer = NULL; @@ -243,7 +255,26 @@ bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id, GetPosition(&m_Cfg.x, &m_Cfg.y); - SetIcon(wxArtProvider::GetIcon(wxART_FRAME_ICON, wxART_HELP_BROWSER)); + SetIcon(wxArtProvider::GetIcon(wxART_HELP, wxART_HELP_BROWSER)); + + // On the Mac, each modeless frame must have a menubar. + // TODO: add more menu items, and perhaps add a style to show + // the menubar: compulsory on the Mac, optional elsewhere. +#ifdef __WXMAC__ + wxMenuBar* menuBar = new wxMenuBar; + + wxMenu* fileMenu = new wxMenu; + fileMenu->Append(wxID_HTML_OPENFILE, _("&Open...")); + fileMenu->AppendSeparator(); + fileMenu->Append(wxID_CLOSE, _("&Close")); + + wxMenu* helpMenu = new wxMenu; + helpMenu->Append(wxID_ABOUT, _("&About...")); + + menuBar->Append(fileMenu,_("File")); + menuBar->Append(helpMenu,_("Help")); + SetMenuBar(menuBar); +#endif int notebook_page = 0; @@ -822,7 +853,7 @@ void wxHtmlHelpFrame::ReadCustomization(wxConfigBase *cfg, const wxString& path) m_FixedFace = cfg->Read(wxT("hcFixedFace"), m_FixedFace); m_NormalFace = cfg->Read(wxT("hcNormalFace"), m_NormalFace); - m_FontSize = cfg->Read(wxT("hcFontSize"), m_FontSize); + m_FontSize = cfg->Read(wxT("hcBaseFontSize"), m_FontSize); { int i; @@ -873,13 +904,18 @@ void wxHtmlHelpFrame::WriteCustomization(wxConfigBase *cfg, const wxString& path cfg->Write(wxT("hcNavigPanel"), m_Cfg.navig_on); cfg->Write(wxT("hcSashPos"), (long)m_Cfg.sashpos); - cfg->Write(wxT("hcX"), (long)m_Cfg.x); - cfg->Write(wxT("hcY"), (long)m_Cfg.y); - cfg->Write(wxT("hcW"), (long)m_Cfg.w); - cfg->Write(wxT("hcH"), (long)m_Cfg.h); + if ( !IsIconized() ) + { + // Don't write if iconized as this would make the window + // disappear next time it is shown! + cfg->Write(wxT("hcX"), (long)m_Cfg.x); + cfg->Write(wxT("hcY"), (long)m_Cfg.y); + cfg->Write(wxT("hcW"), (long)m_Cfg.w); + cfg->Write(wxT("hcH"), (long)m_Cfg.h); + } cfg->Write(wxT("hcFixedFace"), m_FixedFace); cfg->Write(wxT("hcNormalFace"), m_NormalFace); - cfg->Write(wxT("hcFontSize"), (long)m_FontSize); + cfg->Write(wxT("hcBaseFontSize"), (long)m_FontSize); if (m_Bookmarks) { @@ -910,86 +946,79 @@ void wxHtmlHelpFrame::WriteCustomization(wxConfigBase *cfg, const wxString& path static void SetFontsToHtmlWin(wxHtmlWindow *win, wxString scalf, wxString fixf, int size) { - static int f_sizes[5][7] = - { - { 6, 7, 9, 12, 14, 16, 19}, - { 8, 9, 12, 14, 16, 19, 22}, - {10, 12, 14, 16, 19, 24, 32}, - {14, 16, 18, 24, 32, 38, 45}, - {16, 20, 24, 32, 38, 45, 50} - }; - - win->SetFonts(scalf, fixf, f_sizes[size]); + int f_sizes[7]; + f_sizes[0] = int(size * 0.6); + f_sizes[1] = int(size * 0.8); + f_sizes[2] = size; + f_sizes[3] = int(size * 1.2); + f_sizes[4] = int(size * 1.4); + f_sizes[5] = int(size * 1.6); + f_sizes[6] = int(size * 1.8); + + win->SetFonts(scalf, fixf, f_sizes); } class wxHtmlHelpFrameOptionsDialog : public wxDialog { - public: - wxComboBox *NormalFont, *FixedFont; - wxRadioBox *RadioBox; - wxHtmlWindow *TestWin; - - wxHtmlHelpFrameOptionsDialog(wxWindow *parent) : wxDialog(parent, -1, wxString(_("Help Browser Options"))) - { - wxString choices[5] = {_("very small"), _("small"), _("medium"), _("large"), _("very large")}; - wxBoxSizer *topsizer, *sizer, *sizer2; - - topsizer = new wxBoxSizer(wxVERTICAL); +public: + wxComboBox *NormalFont, *FixedFont; + wxSpinCtrl *FontSize; + wxHtmlWindow *TestWin; - sizer = new wxBoxSizer(wxHORIZONTAL); - - sizer2 = new wxStaticBoxSizer( new wxStaticBox(this, -1, _("Normal font:")), wxVERTICAL); - sizer2->Add(NormalFont = new wxComboBox(this, -1, wxEmptyString, wxDefaultPosition, - wxSize(200, 200), - 0, NULL, wxCB_DROPDOWN | wxCB_READONLY), - 1, wxEXPAND | wxLEFT | wxRIGHT, 10); - - sizer->Add(sizer2, 0, wxEXPAND | wxLEFT|wxRIGHT|wxTOP, 10); - - sizer2 = new wxStaticBoxSizer( new wxStaticBox(this, -1, _("Fixed font:")), wxVERTICAL); - sizer2->Add(FixedFont = new wxComboBox(this, -1, wxEmptyString, wxDefaultPosition, - wxSize(200, 200), - 0, NULL, wxCB_DROPDOWN | wxCB_READONLY), - 1, wxEXPAND | wxLEFT | wxRIGHT, 10); - - sizer->Add(sizer2, 0, wxEXPAND | wxLEFT|wxRIGHT|wxTOP, 10); - - topsizer->Add(sizer); - - topsizer->Add(RadioBox = new wxRadioBox(this, -1, _("Font size:"), - wxDefaultPosition, wxDefaultSize, 5, choices, 5), - 0, wxEXPAND | wxLEFT|wxRIGHT|wxTOP, 10); - - topsizer->Add(new wxStaticText(this, -1, _("Preview:")), - 0, wxLEFT | wxTOP, 10); - topsizer->Add(TestWin = new wxHtmlWindow(this, -1, wxDefaultPosition, wxSize(20, 150), - wxHW_SCROLLBAR_AUTO | wxSUNKEN_BORDER), - 1, wxEXPAND | wxLEFT|wxTOP|wxRIGHT, 10); - - sizer = new wxBoxSizer(wxHORIZONTAL); - wxButton *ok; - sizer->Add(ok = new wxButton(this, wxID_OK, _("OK")), 0, wxALL, 10); - ok->SetDefault(); - sizer->Add(new wxButton(this, wxID_CANCEL, _("Cancel")), 0, wxALL, 10); - topsizer->Add(sizer, 0, wxALIGN_RIGHT); - - SetAutoLayout(TRUE); - SetSizer(topsizer); - topsizer->Fit(this); - Centre(wxBOTH); - } + wxHtmlHelpFrameOptionsDialog(wxWindow *parent) + : wxDialog(parent, -1, wxString(_("Help Browser Options"))) + { + wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL); + wxFlexGridSizer *sizer = new wxFlexGridSizer(2, 3, 2, 5); + + sizer->Add(new wxStaticText(this, -1, _("Normal font:"))); + sizer->Add(new wxStaticText(this, -1, _("Fixed font:"))); + sizer->Add(new wxStaticText(this, -1, _("Font size:"))); + + sizer->Add(NormalFont = new wxComboBox(this, -1, wxEmptyString, wxDefaultPosition, + wxSize(200, 200), + 0, NULL, wxCB_DROPDOWN | wxCB_READONLY)); + + sizer->Add(FixedFont = new wxComboBox(this, -1, wxEmptyString, wxDefaultPosition, + wxSize(200, 200), + 0, NULL, wxCB_DROPDOWN | wxCB_READONLY)); + + sizer->Add(FontSize = new wxSpinCtrl(this, -1)); + FontSize->SetRange(2, 100); + + topsizer->Add(sizer, 0, wxLEFT|wxRIGHT|wxTOP, 10); + + topsizer->Add(new wxStaticText(this, -1, _("Preview:")), + 0, wxLEFT | wxTOP, 10); + topsizer->Add(TestWin = new wxHtmlWindow(this, -1, wxDefaultPosition, wxSize(20, 150), + wxHW_SCROLLBAR_AUTO | wxSUNKEN_BORDER), + 1, wxEXPAND | wxLEFT|wxTOP|wxRIGHT, 10); + + wxBoxSizer *sizer2 = new wxBoxSizer(wxHORIZONTAL); + wxButton *ok; + sizer2->Add(ok = new wxButton(this, wxID_OK, _("OK")), 0, wxALL, 10); + ok->SetDefault(); + sizer2->Add(new wxButton(this, wxID_CANCEL, _("Cancel")), 0, wxALL, 10); + topsizer->Add(sizer2, 0, wxALIGN_RIGHT); + + SetAutoLayout(TRUE); + SetSizer(topsizer); + topsizer->Fit(this); + Centre(wxBOTH); + } - void UpdateTestWin() - { - wxBusyCursor bcur; - SetFontsToHtmlWin(TestWin, - NormalFont->GetStringSelection(), - FixedFont->GetStringSelection(), - RadioBox->GetSelection()); - TestWin->SetPage(_( + void UpdateTestWin() + { + wxBusyCursor bcur; + SetFontsToHtmlWin(TestWin, + NormalFont->GetStringSelection(), + FixedFont->GetStringSelection(), + FontSize->GetValue()); + TestWin->SetPage(_( "\ +
\ Normal face
(and underlined. Italic face. \ Bold face. Bold italic face.
\ font size -2
\ @@ -999,7 +1028,7 @@ Normal face
(and underlined. Italic face. \ font size +2
\ font size +3
\ font size +4
\ -\ +
\

Fixed size face.
bold italic \ bold italic underlined
\ font size -2
\ @@ -1009,21 +1038,26 @@ Normal face
(and underlined. Italic face. \ font size +2
\ font size +3
\ font size +4
\ -" - )); - } +

" + )); + } - void OnUpdate(wxCommandEvent& WXUNUSED(event)) - { - UpdateTestWin(); - } + void OnUpdate(wxCommandEvent& WXUNUSED(event)) + { + UpdateTestWin(); + } + void OnUpdateSpin(wxSpinEvent& WXUNUSED(event)) + { + UpdateTestWin(); + } - DECLARE_EVENT_TABLE() + DECLARE_EVENT_TABLE() + DECLARE_NO_COPY_CLASS(wxHtmlHelpFrameOptionsDialog) }; BEGIN_EVENT_TABLE(wxHtmlHelpFrameOptionsDialog, wxDialog) EVT_COMBOBOX(-1, wxHtmlHelpFrameOptionsDialog::OnUpdate) - EVT_RADIOBOX(-1, wxHtmlHelpFrameOptionsDialog::OnUpdate) + EVT_SPINCTRL(-1, wxHtmlHelpFrameOptionsDialog::OnUpdateSpin) END_EVENT_TABLE() @@ -1048,23 +1082,42 @@ void wxHtmlHelpFrame::OptionsDialog() *m_FixedFonts = *enu.GetFacenames(); m_FixedFonts->Sort(); } + + // VS: We want to show the font that is actually used by wxHtmlWindow. + // If customization dialog wasn't used yet, facenames are empty and + // wxHtmlWindow uses default fonts -- let's find out what they + // are so that we can pass them to the dialog: + if (m_NormalFace.empty()) + { + wxFont fnt(m_FontSize, wxSWISS, wxNORMAL, wxNORMAL, FALSE); + m_NormalFace = fnt.GetFaceName(); + } + if (m_FixedFace.empty()) + { + wxFont fnt(m_FontSize, wxMODERN, wxNORMAL, wxNORMAL, FALSE); + m_FixedFace = fnt.GetFaceName(); + } for (i = 0; i < m_NormalFonts->GetCount(); i++) dlg.NormalFont->Append((*m_NormalFonts)[i]); for (i = 0; i < m_FixedFonts->GetCount(); i++) dlg.FixedFont->Append((*m_FixedFonts)[i]); - if (!m_NormalFace.IsEmpty()) dlg.NormalFont->SetStringSelection(m_NormalFace); - else dlg.NormalFont->SetSelection(0); - if (!m_FixedFace.IsEmpty()) dlg.FixedFont->SetStringSelection(m_FixedFace); - else dlg.FixedFont->SetSelection(0); - dlg.RadioBox->SetSelection(m_FontSize); + if (!m_NormalFace.empty()) + dlg.NormalFont->SetStringSelection(m_NormalFace); + else + dlg.NormalFont->SetSelection(0); + if (!m_FixedFace.empty()) + dlg.FixedFont->SetStringSelection(m_FixedFace); + else + dlg.FixedFont->SetSelection(0); + dlg.FontSize->SetValue(m_FontSize); dlg.UpdateTestWin(); if (dlg.ShowModal() == wxID_OK) { m_NormalFace = dlg.NormalFont->GetStringSelection(); m_FixedFace = dlg.FixedFont->GetStringSelection(); - m_FontSize = dlg.RadioBox->GetSelection(); + m_FontSize = dlg.FontSize->GetValue(); SetFontsToHtmlWin(m_HtmlWin, m_NormalFace, m_FixedFace, m_FontSize); } } @@ -1099,6 +1152,20 @@ EVENT HANDLING : */ +void wxHtmlHelpFrame::OnActivate(wxActivateEvent& event) +{ + // This saves one mouse click when using the + // wxHTML for context sensitive help systems +#ifndef __WXGTK__ + // NB: wxActivateEvent is a bit broken in wxGTK + // and is sometimes sent when it should not be + if (event.GetActive() && m_HtmlWin) + m_HtmlWin->SetFocus(); +#endif + + event.Skip(); +} + void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event) { switch (event.GetId()) @@ -1434,6 +1501,13 @@ void wxHtmlHelpFrame::OnCloseWindow(wxCloseEvent& evt) GetSize(&m_Cfg.w, &m_Cfg.h); GetPosition(&m_Cfg.x, &m_Cfg.y); +#ifdef __WXGTK__ + if (IsGrabbed()) + { + RemoveGrab(); + } +#endif + if (m_Splitter && m_Cfg.navig_on) m_Cfg.sashpos = m_Splitter->GetSashPosition(); if (m_Config) @@ -1447,7 +1521,21 @@ void wxHtmlHelpFrame::OnCloseWindow(wxCloseEvent& evt) evt.Skip(); } +#ifdef __WXMAC__ +void wxHtmlHelpFrame::OnClose(wxCommandEvent& event) +{ + Close(TRUE); +} + +void wxHtmlHelpFrame::OnAbout(wxCommandEvent& event) +{ + wxMessageBox(wxT("wxWindows HTML Help Viewer (c) 1998-2003, Vaclav Slavik et al"), wxT("HelpView"), + wxICON_INFORMATION|wxOK, this); +} +#endif + BEGIN_EVENT_TABLE(wxHtmlHelpFrame, wxFrame) + EVT_ACTIVATE(wxHtmlHelpFrame::OnActivate) EVT_TOOL_RANGE(wxID_HTML_PANEL, wxID_HTML_OPTIONS, wxHtmlHelpFrame::OnToolbar) EVT_BUTTON(wxID_HTML_BOOKMARKSREMOVE, wxHtmlHelpFrame::OnToolbar) EVT_BUTTON(wxID_HTML_BOOKMARKSADD, wxHtmlHelpFrame::OnToolbar) @@ -1461,6 +1549,11 @@ BEGIN_EVENT_TABLE(wxHtmlHelpFrame, wxFrame) EVT_BUTTON(wxID_HTML_INDEXBUTTONALL, wxHtmlHelpFrame::OnIndexAll) EVT_COMBOBOX(wxID_HTML_BOOKMARKSLIST, wxHtmlHelpFrame::OnBookmarksSel) EVT_CLOSE(wxHtmlHelpFrame::OnCloseWindow) +#ifdef __WXMAC__ + EVT_MENU(wxID_CLOSE, wxHtmlHelpFrame::OnClose) + EVT_MENU(wxID_ABOUT, wxHtmlHelpFrame::OnAbout) +#endif + END_EVENT_TABLE() #endif // wxUSE_WXHTML_HELP