-//-----------------------------------------------------------------------------
-// wxFontNameItem
-//-----------------------------------------------------------------------------
-
-class wxFontNameItem : public wxObject
-{
- DECLARE_DYNAMIC_CLASS(wxFontNameItem)
-public:
- wxFontNameItem(const char *name, int id, int family);
- ~wxFontNameItem();
-
- inline char* GetScreenName(int w, int s) {return screen.GetName(w, s);}
- inline char* GetPostScriptName(int w, int s) {return printing.GetName(w, s);}
- inline char* GetAFMName(int w, int s) {return afm.GetName(w, s);}
- inline char* GetName() {return name;}
- inline int GetFamily() {return family;}
- inline int GetId() {return id;}
- inline bool IsRoman() {return isroman;}
-#if defined(__WXDEBUG__)
- void Dump(ostream& str);
-#endif
-
- int id;
- int family;
- char *name;
- wxSuffixMap screen, printing, afm;
- bool isroman;
-};
-
-IMPLEMENT_ABSTRACT_CLASS(wxFontNameItem, wxObject)
-
-wxFontNameItem::wxFontNameItem(const char *Name, int Id, int Family)
-{
- name = copystring(Name);
- id = Id;
- family = Family;
-
- screen. Initialize(name, "Screen");
- printing.Initialize(name, "PostScript");
- afm. Initialize(name, "Afm");
-}
-
-wxFontNameItem::~wxFontNameItem()
-{
- if (name)
- delete[] name;
- name = (char *) NULL;
-}
-
-#if defined(__WXDEBUG__)
-void wxFontNameItem::Dump(ostream& str)
-{
- str << "wxFontNameItem(" << name << ")";
-}
-#endif
-
-//-----------------------------------------------------------------------------
-// wxFontDirectory
-//-----------------------------------------------------------------------------
-
-IMPLEMENT_DYNAMIC_CLASS(wxFontNameDirectory, wxObject)
-
-wxFontNameDirectory::wxFontNameDirectory()
-{
- table = new wxHashTable(wxKEY_INTEGER, 20);
- nextFontId = -1;
-}
-
-wxFontNameDirectory::~wxFontNameDirectory()
-{
- // Cleanup wxFontNameItems allocated
- table->BeginFind();
- wxNode *node = table->Next();
- while (node)
- {
- wxFontNameItem *item = (wxFontNameItem*)node->Data();
- delete item;
- node = table->Next();
- }
- delete table;
-}
-
-int wxFontNameDirectory::GetNewFontId()
-{
- return (nextFontId--);
-}
-
-void wxFontNameDirectory::Initialize()
-{
- Initialize(wxDEFAULT, wxDEFAULT, "Default");
- Initialize(wxDECORATIVE, wxDECORATIVE, "Decorative");
- Initialize(wxROMAN, wxROMAN, "Roman");
- Initialize(wxMODERN, wxMODERN, "Modern");
- Initialize(wxTELETYPE, wxTELETYPE, "Teletype");
- Initialize(wxSWISS, wxSWISS, "Swiss");
- Initialize(wxSCRIPT, wxSCRIPT, "Script");
-}
-
-void wxFontNameDirectory::Initialize(int fontid, int family, const char *resname)
-{
- char *fam, resource[256];
-
- sprintf(resource, "Family%s", resname);
- SearchResource((const char *)resource, (const char **) NULL, 0, (char **)&fam);
-
- if (fam)
- {
- if (!strcmp(fam, "Default")) family = wxDEFAULT;
- else if (!strcmp(fam, "Roman")) family = wxROMAN;
- else if (!strcmp(fam, "Decorative")) family = wxDECORATIVE;
- else if (!strcmp(fam, "Modern")) family = wxMODERN;
- else if (!strcmp(fam, "Teletype")) family = wxTELETYPE;
- else if (!strcmp(fam, "Swiss")) family = wxSWISS;
- else if (!strcmp(fam, "Script")) family = wxSCRIPT;
- delete[] fam; // free resource
- }
- table->Put(fontid, new wxFontNameItem(resname, fontid, family));
-}
-
-int wxFontNameDirectory::FindOrCreateFontId(const char *name, int family)
-{
- int id;
-
- // font exists -> return id
- if ( (id = GetFontId(name)) ) return id;
-
- // create new font
- Initialize(id=GetNewFontId(), family, name);
- return id;
-}
-
-char *wxFontNameDirectory::GetScreenName(int fontid, int weight, int style)
-{
- wxFontNameItem *item = (wxFontNameItem*)table->Get(fontid); // find font
- if (item)
- return item->GetScreenName(weight, style);
-
- // font does not exist
- return (char *) NULL;
-}
-
-char *wxFontNameDirectory::GetPostScriptName(int fontid, int weight, int style)
-{
- wxFontNameItem *item = (wxFontNameItem*)table->Get(fontid); // find font
- if (item)
- return item->GetPostScriptName(weight, style);
-
- // font does not exist
- return (char *) NULL;
-}
-
-char *wxFontNameDirectory::GetAFMName(int fontid, int weight, int style)
-{
- wxFontNameItem *item = (wxFontNameItem *)table->Get(fontid); // find font
- if (item)
- return item->GetAFMName(weight, style);
- // font does not exist
- return (char *) NULL;
-}
-
-char *wxFontNameDirectory::GetFontName(int fontid)
-{
- wxFontNameItem *item = (wxFontNameItem *)table->Get(fontid); // find font
- if (item)
- return item->GetName();
-
- // font does not exist
- return (char *) NULL;
-}
-
-int wxFontNameDirectory::GetFontId(const char *name)
-{
- wxNode *node;
-
- table->BeginFind();
-
- while ( (node = table->Next()) )
- {
- wxFontNameItem *item = (wxFontNameItem*)node->Data();
- if (!strcmp(name, item->name))
- return item->id;