+
+
+
+static void SetFontsToHtmlWin(wxHtmlWindow *win, wxString scalf, wxString fixf, int 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;
+ wxSpinCtrl *FontSize;
+ wxHtmlWindow *TestWin;
+
+ wxHtmlHelpFrameOptionsDialog(wxWindow *parent)
+ : wxDialog(parent, wxID_ANY, wxString(_("Help Browser Options")))
+ {
+ wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL);
+ wxFlexGridSizer *sizer = new wxFlexGridSizer(2, 3, 2, 5);
+
+ sizer->Add(new wxStaticText(this, wxID_ANY, _("Normal font:")));
+ sizer->Add(new wxStaticText(this, wxID_ANY, _("Fixed font:")));
+ sizer->Add(new wxStaticText(this, wxID_ANY, _("Font size:")));
+
+ sizer->Add(NormalFont = new wxComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition,
+ wxSize(200, wxDefaultCoord),
+ 0, NULL, wxCB_DROPDOWN | wxCB_READONLY));
+
+ sizer->Add(FixedFont = new wxComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition,
+ wxSize(200, wxDefaultCoord),
+ 0, NULL, wxCB_DROPDOWN | wxCB_READONLY));
+
+ sizer->Add(FontSize = new wxSpinCtrl(this, wxID_ANY));
+ FontSize->SetRange(2, 100);
+
+ topsizer->Add(sizer, 0, wxLEFT|wxRIGHT|wxTOP, 10);
+
+ topsizer->Add(new wxStaticText(this, wxID_ANY, _("Preview:")),
+ 0, wxLEFT | wxTOP, 10);
+ topsizer->Add(TestWin = new wxHtmlWindow(this, wxID_ANY, 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), 0, wxALL, 10);
+ ok->SetDefault();
+ sizer2->Add(new wxButton(this, wxID_CANCEL), 0, wxALL, 10);
+ topsizer->Add(sizer2, 0, wxALIGN_RIGHT);
+
+ SetSizer(topsizer);
+ topsizer->Fit(this);
+ Centre(wxBOTH);
+ }
+
+
+ void UpdateTestWin()
+ {
+ wxBusyCursor bcur;
+ SetFontsToHtmlWin(TestWin,
+ NormalFont->GetStringSelection(),
+ FixedFont->GetStringSelection(),
+ FontSize->GetValue());
+
+ wxString content(_("font size"));
+
+ content = _T("<font size=-2>") + content + _T(" -2</font><br>")
+ _T("<font size=-1>") + content + _T(" -1</font><br>")
+ _T("<font size=+0>") + content + _T(" +0</font><br>")
+ _T("<font size=+1>") + content + _T(" +1</font><br>")
+ _T("<font size=+2>") + content + _T(" +2</font><br>")
+ _T("<font size=+3>") + content + _T(" +3</font><br>")
+ _T("<font size=+4>") + content + _T(" +4</font><br>") ;
+
+ content = wxString( _T("<html><body><table><tr><td>") ) +
+ _("Normal face<br>and <u>underlined</u>. ") +
+ _("<i>Italic face.</i> ") +
+ _("<b>Bold face.</b> ") +
+ _("<b><i>Bold italic face.</i></b><br>") +
+ content +
+ wxString( _T("</td><td><tt>") ) +
+ _("Fixed size face.<br> <b>bold</b> <i>italic</i> ") +
+ _("<b><i>bold italic <u>underlined</u></i></b><br>") +
+ content +
+ _T("</tt></td></tr></table></body></html>");
+
+ TestWin->SetPage( content );
+ }
+
+ void OnUpdate(wxCommandEvent& WXUNUSED(event))
+ {
+ UpdateTestWin();
+ }
+ void OnUpdateSpin(wxSpinEvent& WXUNUSED(event))
+ {
+ UpdateTestWin();
+ }
+
+ DECLARE_EVENT_TABLE()
+ DECLARE_NO_COPY_CLASS(wxHtmlHelpFrameOptionsDialog)
+};
+
+BEGIN_EVENT_TABLE(wxHtmlHelpFrameOptionsDialog, wxDialog)
+ EVT_COMBOBOX(wxID_ANY, wxHtmlHelpFrameOptionsDialog::OnUpdate)
+ EVT_SPINCTRL(wxID_ANY, wxHtmlHelpFrameOptionsDialog::OnUpdateSpin)
+END_EVENT_TABLE()
+
+void wxHtmlHelpFrame::OptionsDialog()
+{
+ wxHtmlHelpFrameOptionsDialog dlg(this);
+ unsigned i;
+
+ if (m_NormalFonts == NULL)
+ {
+ wxFontEnumerator enu;
+ enu.EnumerateFacenames();
+ m_NormalFonts = new wxArrayString;
+ *m_NormalFonts = *enu.GetFacenames();
+ m_NormalFonts->Sort(); // ascending sort
+ }
+ if (m_FixedFonts == NULL)
+ {
+ wxFontEnumerator enu;
+ enu.EnumerateFacenames(wxFONTENCODING_SYSTEM, true /*enum fixed width only*/);
+ m_FixedFonts = new wxArrayString;
+ *m_FixedFonts = *enu.GetFacenames();
+ m_FixedFonts->Sort(); // ascending 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.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.FontSize->GetValue();
+ SetFontsToHtmlWin(m_HtmlWin, m_NormalFace, m_FixedFace, m_FontSize);
+ }
+}
+
+
+
+void wxHtmlHelpFrame::NotifyPageChanged()
+{
+ if (m_UpdateContents && m_PagesHash)
+ {
+ wxString an = m_HtmlWin->GetOpenedAnchor();
+ wxHtmlHelpHashData *ha;
+ if (an.IsEmpty())
+ ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage());
+ else
+ ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage() + wxT("#") + an);
+ if (ha)
+ {
+ bool olduc = m_UpdateContents;
+ m_UpdateContents = false;
+ m_ContentsBox->SelectItem(ha->m_Id);
+ m_ContentsBox->EnsureVisible(ha->m_Id);
+ m_UpdateContents = olduc;
+ }
+ }
+}
+
+
+