1
0
forked from 0ad/0ad
0ad/source/tools/fontbuilder/platform/msw/fontselect.cpp

143 lines
4.5 KiB
C++
Raw Normal View History

// $Id: fontselect.cpp,v 1.4 2004/08/10 15:51:06 philip Exp $
#include "stdafx.h"
#include "../fontselect.h"
#include "wx/sizer.h"
#include "wx/listbox.h"
#include "wx/stattext.h"
#include "wx/button.h"
#include "wx/regex.h"
#include "wx/msw/registry.h"
enum
{
ID_FontList = wxID_HIGHEST+1,
ID_FontPreview
};
BEGIN_EVENT_TABLE(FontSelectorDialog, wxDialog)
EVT_LISTBOX(ID_FontList, FontSelectorDialog::OnFontSelect)
EVT_BUTTON(wxID_OK, FontSelectorDialog::OnOK)
END_EVENT_TABLE()
FontSelectorDialog::FontSelectorDialog(wxWindow* parent)
: wxDialog(parent, -1, wxString(wxT("Font selector")), wxDefaultPosition, wxSize(400, 200), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
{
wxBoxSizer* MainSizer = new wxBoxSizer(wxVERTICAL);
wxString PreviewString;
PreviewString += wxT("Aa");
PreviewString += (wchar_t)0x0105; // LATIN SMALL LETTER A WITH OGONEK
PreviewString += wxT("\nBb");
PreviewString += (wchar_t)0x00DF; // LATIN SMALL LETTER SHARP S
PreviewString += wxT("\nCc");
PreviewString += (wchar_t)0x00E7; // LATIN SMALL LETTER C WITH CEDILLA
PreviewString += (wchar_t)0x033F; // COMBINING DOUBLE OVERLINE
PreviewString += wxT("\n");
PreviewString += (wchar_t)0xFB4E; // HEBREW LETTER PE WITH RAFE
PreviewString += (wchar_t)0xFB6B; // ARABIC LETTER VEH FINAL FORM
PreviewString += (wchar_t)0xF915; // CJK COMPATIBILITY IDEOGRAPH-F915
PreviewString += (wchar_t)0x3342; // SQUARE HOON
wxBoxSizer* TopSizer = new wxBoxSizer(wxHORIZONTAL);
wxListBox* FontListBox = new wxListBox(this, ID_FontList, wxDefaultPosition, wxSize(200, 100));
TopSizer->Add(FontListBox, 0, wxGROW);
TopSizer->Add(new wxStaticText(this, ID_FontPreview, PreviewString), 1, wxGROW);
MainSizer->Add(TopSizer, 1);
wxBoxSizer* ButtonSizer = new wxBoxSizer(wxHORIZONTAL);
ButtonSizer->Add(new wxButton(this, wxID_OK, wxT("OK")), 0, wxALL, 10);
ButtonSizer->Add(new wxButton(this, wxID_CANCEL, wxT("Cancel")), 0, wxALL, 10);
MainSizer->Add(ButtonSizer, 0, wxALIGN_CENTER);
SetSizer(MainSizer);
// Get a list of all the fonts installed on the system
wxRegKey FontKey (wxT("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts"));
// Get the list of keys (= font names)
wxString ValueName;
long ValueIndex;
FontKey.GetFirstValue(ValueName, ValueIndex);
do {
if (! ValueName.IsEmpty())
FontNames.Add(ValueName);
} while (FontKey.GetNextValue(ValueName, ValueIndex));
FontNames.Sort();
// Get all the filenames, and store in the listbox's client data
FontFilenames = new wxCharBuffer*[FontNames.Count()];
for (size_t i = 0; i < FontNames.Count(); ++i)
{
wxString t;
FontKey.QueryValue(FontNames[i], t);
wxCharBuffer* b = new wxCharBuffer(t.mb_str());
FontFilenames[i] = b;
}
FontListBox->Set(FontNames, (void**)FontFilenames);
}
FontSelectorDialog::~FontSelectorDialog()
{
for (size_t i = 0; i < FontNames.Count(); ++i)
delete FontFilenames[i];
delete[] FontFilenames;
}
void FontSelectorDialog::OnOK(wxCommandEvent& WXUNUSED(event))
{
// Find where the fonts are on the disk
wxRegKey FontPathKey (wxT("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"));
wxString FontPath;
FontPathKey.QueryValue(wxT("Fonts"), FontPath);
wxListBox* FontList = (wxListBox*)wxWindow::FindWindowById(ID_FontList);
int Selection = FontList->GetSelection();
FontFilename = FontPath + wxT("\\");
FontFilename += wxString::FromAscii( ((wxCharBuffer*) FontList->GetClientData(Selection))->data() );
FontName = FontList->GetStringSelection();
EndModal(wxID_OK);
}
void FontSelectorDialog::OnFontSelect(wxCommandEvent& event)
{
wxString FontName = event.GetString();
// Translate "Arial (TrueType)" into "Arial", etc
wxRegEx ThingyRemove;
ThingyRemove.Compile(wxT(" \\(.+\\)$"));
ThingyRemove.Replace(&FontName, wxT(""));
// Set the preview box to use that font
wxFont PreviewFont (18, wxDEFAULT, wxNORMAL, wxNORMAL, false, FontName, wxFONTENCODING_SYSTEM);
wxStaticText* PreviewText = (wxStaticText*)wxWindow::FindWindowById(ID_FontPreview);
PreviewText->SetFont(PreviewFont);
}
void FontSelectorDialog::DefaultFonts(wxString& Name0, wxString& Filename0, wxString& Name1, wxString& Filename1)
{
// Find where the fonts are on the disk
wxRegKey FontPathKey (wxT("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"));
wxString FontPath;
FontPathKey.QueryValue(wxT("Fonts"), FontPath);
Name0 = wxT("Verdana (TrueType)");
Filename0 = FontPath + wxT("\\verdana.ttf");
Name1 = wxT("Arial Unicode MS (TrueType)");
Filename1 = FontPath + wxT("\\arialuni.ttf");
}