X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b1d4dd7add411ebff1ce4a8d1d992e0e43ee26b1..7873ca319146f39b4685e8727fde91cf601f4bbe:/src/common/paper.cpp diff --git a/src/common/paper.cpp b/src/common/paper.cpp index faa4941dbb..8aeb3adac2 100644 --- a/src/common/paper.cpp +++ b/src/common/paper.cpp @@ -9,7 +9,7 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "paper.h" #endif @@ -38,7 +38,7 @@ #include #ifdef __WXMSW__ -#include +#include "wx/msw/wrapwin.h" #include #ifndef __WIN32__ @@ -49,7 +49,7 @@ // End __WXMSW__ IMPLEMENT_DYNAMIC_CLASS(wxPrintPaperType, wxObject) -IMPLEMENT_DYNAMIC_CLASS(wxPrintPaperDatabase, wxList) +// IMPLEMENT_DYNAMIC_CLASS(wxPrintPaperDatabase, wxList) /* * Paper size database for all platforms @@ -83,11 +83,21 @@ wxSize wxPrintPaperType::GetSizeDeviceUnits() const * Print paper database for PostScript */ +WX_DECLARE_LIST(wxPrintPaperType, wxPrintPaperTypeList); +#include "wx/listimpl.cpp" +WX_DEFINE_LIST(wxPrintPaperTypeList); + wxPrintPaperDatabase* wxThePrintPaperDatabase = (wxPrintPaperDatabase*) NULL; -wxPrintPaperDatabase::wxPrintPaperDatabase():wxList(wxKEY_STRING) +wxPrintPaperDatabase::wxPrintPaperDatabase() +{ + m_map = new wxStringToPrintPaperTypeHashMap; + m_list = new wxPrintPaperTypeList; +} + +wxPrintPaperDatabase::~wxPrintPaperDatabase() { - DeleteContents(TRUE); + ClearDatabase(); } void wxPrintPaperDatabase::CreateDatabase() @@ -175,65 +185,75 @@ void wxPrintPaperDatabase::CreateDatabase() void wxPrintPaperDatabase::ClearDatabase() { - Clear(); + delete m_list; + WX_CLEAR_HASH_MAP(wxStringToPrintPaperTypeHashMap, *m_map); + delete m_map; } void wxPrintPaperDatabase::AddPaperType(wxPaperSize paperId, const wxString& name, int w, int h) { - Append(name, new wxPrintPaperType(paperId, 0, name, w, h)); + wxPrintPaperType* tmp = new wxPrintPaperType(paperId, 0, name, w, h); + (*m_map)[name] = tmp; + m_list->push_back(tmp); } void wxPrintPaperDatabase::AddPaperType(wxPaperSize paperId, int platformId, const wxString& name, int w, int h) { - Append(name, new wxPrintPaperType(paperId, platformId, name, w, h)); + wxPrintPaperType* tmp = new wxPrintPaperType(paperId, platformId, name, w, h); + (*m_map)[name] = tmp; + m_list->push_back(tmp); } wxPrintPaperType *wxPrintPaperDatabase::FindPaperType(const wxString& name) { - wxNode *node = Find(name); - if (node) - return (wxPrintPaperType *)node->GetData(); + wxStringToPrintPaperTypeHashMap::iterator it = m_map->find(name); + if (it != m_map->end()) + return it->second; else - return (wxPrintPaperType *) NULL; + return NULL; } wxPrintPaperType *wxPrintPaperDatabase::FindPaperType(wxPaperSize id) { - wxNode *node = GetFirst(); - while (node) + typedef wxStringToPrintPaperTypeHashMap::iterator iterator; + + for (iterator it = m_map->begin(), en = m_map->end(); it != en; ++it) { - wxPrintPaperType* paperType = (wxPrintPaperType*) node->GetData(); + wxPrintPaperType* paperType = it->second; if (paperType->GetId() == id) return paperType; - node = node->GetNext(); } - return (wxPrintPaperType *) NULL; + + return NULL; } wxPrintPaperType *wxPrintPaperDatabase::FindPaperTypeByPlatformId(int id) { - wxNode *node = GetFirst(); - while (node) + typedef wxStringToPrintPaperTypeHashMap::iterator iterator; + + for (iterator it = m_map->begin(), en = m_map->end(); it != en; ++it) { - wxPrintPaperType* paperType = (wxPrintPaperType*) node->GetData(); + wxPrintPaperType* paperType = it->second; if (paperType->GetPlatformId() == id) return paperType; - node = node->GetNext(); } - return (wxPrintPaperType *) NULL; + + return NULL; } wxPrintPaperType *wxPrintPaperDatabase::FindPaperType(const wxSize& sz) { - wxNode *node = GetFirst(); - while (node) + typedef wxStringToPrintPaperTypeHashMap::iterator iterator; + + for (iterator it = m_map->begin(), en = m_map->end(); it != en; ++it) { - wxPrintPaperType* paperType = (wxPrintPaperType*) node->GetData(); - if (paperType->GetSize() == sz) + wxPrintPaperType* paperType = it->second; + wxSize paperSize = paperType->GetSize() ; + if ( abs( paperSize.x - sz.x ) < 10 && abs( paperSize.y - sz.y ) < 10 ) return paperType; - node = node->GetNext(); } - return (wxPrintPaperType *) NULL; + + return NULL; } // Convert name to size id @@ -276,6 +296,17 @@ wxPaperSize wxPrintPaperDatabase::GetSize(const wxSize& size) return wxPAPER_NONE; } +// QUICK and DIRTY +size_t wxPrintPaperDatabase::GetCount() const +{ + return m_list->GetCount(); +} + +wxPrintPaperType* wxPrintPaperDatabase::Item(size_t index) const +{ + return m_list->Item(index)->GetData(); +} + // A module to allow initialization/cleanup of print paper // things without calling these functions from app.cpp.