]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/list.cpp
no message
[wxWidgets.git] / src / common / list.cpp
index ac936bb26570a3d1b6b1de7304c059d9c1ae2012..80841b6ea68e270160ed0450dcd558f039a6942c 100644 (file)
@@ -24,6 +24,7 @@
 #include "wx/defs.h"
 #include "wx/list.h"
 #include "wx/utils.h"
+#include <wx/intl.h>
 #endif
 
 // Sun CC compatibility (interference with xview/pkg.h, apparently...)
@@ -51,7 +52,7 @@ wxNode::wxNode (wxList * the_list, wxNode * last_one, wxNode * next_one,
   previous = last_one;
   next = next_one;
   list = the_list;
-  key.string = NULL;
+  key.string = (char *) NULL;
 
   if (previous)
     previous->next = this;
@@ -125,21 +126,21 @@ wxNode::~wxNode (void)
 
 wxList::wxList (void)
 {
-  first_node = NULL;
-  last_node = NULL;
+  first_node = (wxNode *) NULL;
+  last_node = (wxNode *) NULL;
   n = 0;
   destroy_data = 0;
   key_type = wxKEY_NONE;
 }
 
-wxList::wxList (const int N, wxObject * Objects[])
+wxList::wxList (int N, wxObject * Objects[])
 {
-  wxNode *last = NULL;
+  wxNode *last = (wxNode *) NULL;
 
   int i;
   for (i = 0; i < N; i++)
     {
-      wxNode *next = new wxNode (this, last, NULL, Objects[i]);
+      wxNode *next = new wxNode (this, last, (wxNode *) NULL, Objects[i]);
       last = next;
       if (i == 0)
        first_node = next;
@@ -153,8 +154,8 @@ wxList::wxList (const unsigned int the_key_type)
 {
   n = 0;
   destroy_data = 0;
-  first_node = NULL;
-  last_node = NULL;
+  first_node = (wxNode *) NULL;
+  last_node = (wxNode *) NULL;
   key_type = the_key_type;
 }
 
@@ -166,7 +167,7 @@ wxList::wxList (wxObject * first_one...)
 
   va_start (ap, first_one);
 
-  wxNode *last = new wxNode (this, NULL, NULL, first_one);
+  wxNode *last = new wxNode (this, (wxNode *) NULL, (wxNode *) NULL, first_one);
   first_node = last;
   n = 1;
 
@@ -174,7 +175,7 @@ wxList::wxList (wxObject * first_one...)
     {
       wxObject *object = va_arg (ap, wxObject *);
 //    if (object == NULL) // Doesn't work in Windows -- segment is non-zero for NULL!
-#ifdef __WINDOWS__
+#ifdef __WXMSW__
       if ((int) object == 0)
 #else
       if ((long) object == 0)
@@ -182,7 +183,7 @@ wxList::wxList (wxObject * first_one...)
        break;
       else
        {
-         wxNode *node = new wxNode (this, last, NULL, object);
+         wxNode *node = new wxNode (this, last, (wxNode *) NULL, object);
          last = node;
          n++;
        }
@@ -210,43 +211,9 @@ wxList::~wxList (void)
     }
 }
 
-#ifdef USE_STORABLE_CLASSES
-wxList::wxList( istream &stream, char *WXUNUSED(data) )
-{
-  char buf[200];
-  unsigned int num;
-  stream.read( (char*)(&num), sizeof(num) );
-  for (unsigned int i = 0; i < num; i++)
-  {
-    int len;
-    stream.read( (char*)(&len), sizeof(len) );
-    stream.read( (char*)(&buf), len );
-    buf[len] = 0;
-    Append( wxCreateStoredObject( buf, stream, NULL ) );
-  };
-};
-
-void wxList::StoreObject( ostream &stream )
-{
-  unsigned int num = Number();
-  stream.write( (char*)(&num), sizeof(num) );
-  wxNode *node = First();
-  while (node)
-  {
-    wxObject *obj = (wxObject*) node->Data();
-    wxClassInfo *obj_info = obj->GetClassInfo();
-    int len = strlen(obj_info->className);
-    stream.write( (char*)(&len), sizeof(len) );
-    stream.write( obj_info->className, len );
-    obj->StoreObject( stream );
-    node = node->Next();
-  };
-};
-#endif
-  
 wxNode *wxList::Append(wxObject *object)
 {
-    wxNode *node = new wxNode(this, last_node, NULL, object);
+    wxNode *node = new wxNode(this, last_node, (wxNode *) NULL, object);
     if (!first_node)
       first_node = node;
     last_node = node;
@@ -254,7 +221,7 @@ wxNode *wxList::Append(wxObject *object)
     return node;
 }
 
-wxNode *wxList::Nth (const int i) const
+wxNode *wxList::Nth (int i) const
 {
   int j = 0;
   for (wxNode * current = First (); current; current = current->Next ())
@@ -262,11 +229,11 @@ wxNode *wxList::Nth (const int i) const
       if (j++ == i)
        return current;
     }
-  return NULL;                 // No such element
+  return (wxNode *) NULL;                      // No such element
 
 }
 
-wxNode *wxList::Find (const long key) const
+wxNode *wxList::Find (long key) const
 {
   wxNode *current = First();
   while (current)
@@ -276,7 +243,7 @@ wxNode *wxList::Find (const long key) const
     current = current->Next();
   }
     
-  return NULL;                 // Not found!
+  return (wxNode *) NULL;                      // Not found!
 }
 
 wxNode *wxList::Find (const char *key) const
@@ -286,7 +253,7 @@ wxNode *wxList::Find (const char *key) const
   {
       if (!current->key.string)
        {
-         wxFatalError ("wxList: string key not present, probably did not Append correctly!");
+         wxFatalError (_("wxList: string key not present, probably did not Append correctly!"));
          break;
        }
       if (strcmp (current->key.string, key) == 0)
@@ -294,7 +261,7 @@ wxNode *wxList::Find (const char *key) const
       current = current->Next();
   }
 
-  return NULL;                 // Not found!
+  return (wxNode *) NULL;                      // Not found!
 
 }
 
@@ -306,7 +273,7 @@ wxNode *wxList::Member (wxObject * object) const
       if (each == object)
        return current;
     }
-  return NULL;
+  return (wxNode *) NULL;
 }
 
 bool wxList::DeleteNode (wxNode * node)
@@ -338,7 +305,7 @@ bool wxList::DeleteObject (wxObject * object)
 // Insert new node at front of list
 wxNode *wxList::Insert (wxObject * object)
 {
-  wxNode *node = new wxNode (this, NULL, First (), object);
+  wxNode *node = new wxNode (this, (wxNode *) NULL, First (), object);
   first_node = node;
 
   if (!(node->Next ()))
@@ -352,7 +319,7 @@ wxNode *wxList::Insert (wxObject * object)
 // Insert new node before given node.
 wxNode *wxList::Insert (wxNode * position, wxObject * object)
 {
-  wxNode *prev = NULL;
+  wxNode *prev = (wxNode *) NULL;
   if (position)
     prev = position->Previous ();
 
@@ -370,9 +337,9 @@ wxNode *wxList::Insert (wxNode * position, wxObject * object)
 }
 
 // Keyed append
-wxNode *wxList::Append (const long key, wxObject * object)
+wxNode *wxList::Append (long key, wxObject * object)
 {
-  wxNode *node = new wxNode (this, last_node, NULL, object, key);
+  wxNode *node = new wxNode (this, last_node, (wxNode *) NULL, object, key);
   if (!first_node)
     first_node = node;
   last_node = node;
@@ -382,7 +349,7 @@ wxNode *wxList::Append (const long key, wxObject * object)
 
 wxNode *wxList::Append (const char *key, wxObject * object)
 {
-  wxNode *node = new wxNode (this, last_node, NULL, object, key);
+  wxNode *node = new wxNode (this, last_node, (wxNode *) NULL, object, key);
   if (!first_node)
     first_node = node;
   last_node = node;
@@ -399,8 +366,8 @@ void wxList::Clear (void)
       delete current;
       current = next;
     }
-  first_node = NULL;
-  last_node = NULL;
+  first_node = (wxNode *) NULL;
+  last_node = (wxNode *) NULL;
   n = 0;
 }
 
@@ -422,7 +389,7 @@ wxObject *wxList::FirstThat(wxListIterateFunction F)
     { if ((*F)( each->Data ())) return each->Data();
       each = each->Next();
     }
-  return NULL;
+  return (wxNode *) NULL;
 }
 // Like FirstThat, but proceeds from the end backward
 wxObject *wxList::LastThat(wxListIterateFunction F)
@@ -432,7 +399,7 @@ wxObject *wxList::LastThat(wxListIterateFunction F)
     { if ((*F)( each->Data ())) return each->Data();
       each = each->Previous();
     }
-  return NULL;
+  return (wxNode *) NULL;
 }
 
 // (stefan.hammes@urz.uni-heidelberg.de)
@@ -499,6 +466,11 @@ wxList ()
 {
 }
 
+wxStringList::wxStringList (const wxStringList& list)
+{
+    (*this) = list;
+}
+
 // Variable argument list, terminated by a zero
 // Makes new storage for the strings
 wxStringList::wxStringList (const char *first...)
@@ -507,8 +479,8 @@ wxStringList::wxStringList (const char *first...)
   n = 0;
   destroy_data = 0;
   key_type = wxKEY_NONE;
-  first_node = NULL;
-  last_node = NULL;
+  first_node = (wxNode *) NULL;
+  last_node = (wxNode *) NULL;
 
   if (!first)
     return;
@@ -517,7 +489,7 @@ wxStringList::wxStringList (const char *first...)
 
   va_start (ap, first);
 
-  wxNode *last = new wxNode (this, NULL, NULL, (wxObject *) copystring (first));
+  wxNode *last = new wxNode (this, (wxNode *) NULL, (wxNode *) NULL, (wxObject *) copystring (first));
   first_node = last;
   n = 1;
 
@@ -525,7 +497,7 @@ wxStringList::wxStringList (const char *first...)
     {
       char *s = va_arg (ap, char *);
 //    if (s == NULL)
-#ifdef __WINDOWS__
+#ifdef __WXMSW__
       if ((int) s == 0)
 #else
       if ((long) s == 0)
@@ -533,7 +505,7 @@ wxStringList::wxStringList (const char *first...)
        break;
       else
        {
-         wxNode *node = new wxNode (this, last, NULL, (wxObject *) copystring (s));
+         wxNode *node = new wxNode (this, last, (wxNode *) NULL, (wxObject *) copystring (s));
          last = node;
          n++;
        }
@@ -549,7 +521,12 @@ wxStringList::wxStringList (const char *first...)
 
 wxStringList::~wxStringList (void)
 {
-  wxNode *each = first_node;
+    Clear();
+}
+
+void wxStringList::Clear(void)
+{
+  wxNode *each = First();
   while (each)
     {
       char *s = (char *) each->Data ();
@@ -558,6 +535,7 @@ wxStringList::~wxStringList (void)
       delete each;
       each = next;
     }
+  wxList::Clear();
 }
 
 wxNode *wxStringList::Add (const char *s)
@@ -582,7 +560,7 @@ void wxStringList::Delete (const char *s)
 }
 
 // Only makes new strings if arg is TRUE
-char **wxStringList::ListToArray (const bool new_copies) const
+char **wxStringList::ListToArray (bool new_copies) const
 {
   char **string_array = new char *[Number ()];
   wxNode *node = First ();
@@ -638,3 +616,24 @@ bool wxStringList::Member (const char *s) const
     }
   return FALSE;
 }
+
+void wxStringList::operator= (const wxStringList& list)
+{
+    Clear();
+
+    wxNode *node = list.First();
+    while (node)
+    {
+        char *s = (char *) node->Data ();
+        Add(s);
+        node = node->Next();
+    }
+}
+
+char* wxStringList::operator[] (int i) const
+{
+    wxASSERT_MSG( (i < Number()), "Invalid index for wxStringList" );
+
+    return (char*) (Nth(i)->Data());
+}
+