]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/paper.cpp
adding support for wxCB_SORT
[wxWidgets.git] / src / common / paper.cpp
index faa4941dbb669375f833a43f4298b4e6c52adac0..126dcc282f05fe6d7738f171933d90cf338c0dba 100644 (file)
@@ -1,15 +1,15 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        paper.cpp
 // Purpose:     Paper size classes
-// Author:      Julian Smart 
+// Author:      Julian Smart
 // Modified by:
 // Created:     04/01/98
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart
-// Licence:    wxWindows licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
 #pragma implementation "paper.h"
 #endif
 
 #include <string.h>
 
 #ifdef __WXMSW__
-#include <windows.h>
-#include <commdlg.h>
-
-#ifndef __WIN32__
-#include <print.h>
-#endif
-
+    #include "wx/msw/wrapcdlg.h"
+    #ifndef __WIN32__
+        #include <print.h>
+    #endif
 #endif
  // End __WXMSW__
 
 IMPLEMENT_DYNAMIC_CLASS(wxPrintPaperType, wxObject)
-IMPLEMENT_DYNAMIC_CLASS(wxPrintPaperDatabase, wxList)
+// IMPLEMENT_DYNAMIC_CLASS(wxPrintPaperDatabase, wxList)
 
 /*
  * Paper size database for all platforms
@@ -59,7 +56,7 @@ wxPrintPaperType::wxPrintPaperType()
 {
     m_paperId = wxPAPER_NONE;
     m_platformId = 0;
-    m_paperName = wxT("");
+    m_paperName = wxEmptyString;
     m_width = 0;
     m_height = 0;
 }
@@ -83,11 +80,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 +182,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
@@ -263,7 +280,7 @@ wxSize wxPrintPaperDatabase::GetSize(wxPaperSize paperId)
     if (type)
         return type->GetSize();
     else
-        return wxSize(0, 0);
+        return wxSize(0,0);
 }
 
 // Get the paper size
@@ -276,6 +293,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.
 
@@ -299,7 +327,7 @@ bool wxPrintPaperModule::OnInit()
     wxThePrintPaperDatabase = new wxPrintPaperDatabase;
     wxThePrintPaperDatabase->CreateDatabase();
 
-    return TRUE;
+    return true;
 }
 
 void wxPrintPaperModule::OnExit()