]> git.saurik.com Git - wxWidgets.git/blobdiff - src/stubs/textctrl.cpp
Added stubs .cpp files.
[wxWidgets.git] / src / stubs / textctrl.cpp
diff --git a/src/stubs/textctrl.cpp b/src/stubs/textctrl.cpp
new file mode 100644 (file)
index 0000000..fb522df
--- /dev/null
@@ -0,0 +1,439 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        textctrl.cpp
+// Purpose:     wxTextCtrl
+// Author:      AUTHOR
+// Modified by:
+// Created:     ??/??/98
+// RCS-ID:      $Id$
+// Copyright:   (c) AUTHOR
+// Licence:    wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifdef __GNUG__
+#pragma implementation "textctrl.h"
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fstream.h>
+
+#include "wx/textctrl.h"
+#include "wx/settings.h"
+
+#if defined(__BORLANDC__) && !defined(__WIN32__)
+#include <alloc.h>
+#else
+#ifndef __GNUWIN32__
+#include <malloc.h>
+#endif
+#endif
+
+#if !USE_SHARED_LIBRARY
+IMPLEMENT_DYNAMIC_CLASS(wxTextCtrl, wxControl)
+
+BEGIN_EVENT_TABLE(wxTextCtrl, wxControl)
+       EVT_CHAR(wxTextCtrl::OnChar)
+       EVT_DROP_FILES(wxTextCtrl::OnDropFiles)
+       EVT_ERASE_BACKGROUND(wxTextCtrl::OnEraseBackground)
+END_EVENT_TABLE()
+#endif
+
+// Text item
+wxTextCtrl::wxTextCtrl()
+#ifndef NO_TEXT_WINDOW_STREAM
+ :streambuf()
+#endif
+{
+    m_fileName = "";
+}
+
+bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
+                  const wxString& value,
+           const wxPoint& pos,
+           const wxSize& size, long style,
+           const wxValidator& validator,
+           const wxString& name)
+{
+    m_fileName = "";
+    SetName(name);
+    SetValidator(validator);
+    if (parent) parent->AddChild(this);
+
+    m_windowStyle = style;
+
+    if ( id == -1 )
+           m_windowId = (int)NewControlId();
+    else
+           m_windowId = id;
+
+    return TRUE;
+}
+
+wxString wxTextCtrl::GetValue() const
+{
+    // TODO
+    return wxString("");
+}
+
+void wxTextCtrl::SetValue(const wxString& value)
+{
+    // TODO
+}
+
+void wxTextCtrl::SetSize(int x, int y, int width, int height, int sizeFlags)
+{
+    // TODO
+}
+
+// Clipboard operations
+void wxTextCtrl::Copy()
+{
+    // TODO
+}
+
+void wxTextCtrl::Cut()
+{
+    // TODO
+}
+
+void wxTextCtrl::Paste()
+{
+    // TODO
+}
+
+void wxTextCtrl::SetEditable(bool editable)
+{
+    // TODO
+}
+
+void wxTextCtrl::SetInsertionPoint(long pos)
+{
+    // TODO
+}
+
+void wxTextCtrl::SetInsertionPointEnd()
+{
+    long pos = GetLastPosition();
+    SetInsertionPoint(pos);
+}
+
+long wxTextCtrl::GetInsertionPoint() const
+{
+    // TODO
+    return 0;
+}
+
+long wxTextCtrl::GetLastPosition() const
+{
+    // TODO
+    return 0;
+}
+
+void wxTextCtrl::Replace(long from, long to, const wxString& value)
+{
+    // TODO
+    return 0;
+}
+
+void wxTextCtrl::Remove(long from, long to)
+{
+    // TODO
+}
+
+void wxTextCtrl::SetSelection(long from, long to)
+{
+    // TODO
+}
+
+bool wxTextCtrl::LoadFile(const wxString& file)
+{
+    if (!wxFileExists(file))
+        return FALSE;
+
+    m_fileName = file;
+
+    Clear();
+
+    ifstream input((char*) (const char*) file, ios::nocreate | ios::in);
+
+    if (!input.bad())
+    {
+        struct stat stat_buf;
+        if (stat(file, &stat_buf) < 0)
+            return FALSE;
+        // This may need to be a bigger buffer than the file size suggests,
+        // if it's a UNIX file. Give it an extra 1000 just in case.
+        char *tmp_buffer = (char*)malloc((size_t)(stat_buf.st_size+1+1000));
+        long no_lines = 0;
+        long pos = 0;
+        while (!input.eof() && input.peek() != EOF)
+        {
+            input.getline(wxBuffer, 500);
+               int len = strlen(wxBuffer);
+               wxBuffer[len] = 13;
+               wxBuffer[len+1] = 10;
+               wxBuffer[len+2] = 0;
+               strcpy(tmp_buffer+pos, wxBuffer);
+               pos += strlen(wxBuffer);
+               no_lines++;
+         }
+
+         // TODO add line
+
+         free(tmp_buffer);
+
+         return TRUE;
+    }
+    return FALSE;
+}
+
+// If file is null, try saved file name first
+// Returns TRUE if succeeds.
+bool wxTextCtrl::SaveFile(const wxString& file)
+{
+    wxString theFile(file);
+    if (theFile == "")
+        theFile = m_fileName;
+    if (theFile == "")
+        return FALSE;
+    m_fileName = theFile;
+
+    ofstream output((char*) (const char*) theFile);
+    if (output.bad())
+           return FALSE;
+
+    // TODO get and save text
+
+    return FALSE;
+}
+
+void wxTextCtrl::WriteText(const wxString& text)
+{
+    // TODO write text to control
+}
+
+void wxTextCtrl::Clear()
+{
+    // TODO
+}
+
+bool wxTextCtrl::IsModified() const
+{
+    // TODO
+    return FALSE;
+}
+
+// Makes 'unmodified'
+void wxTextCtrl::DiscardEdits()
+{
+    // TODO
+}
+
+int wxTextCtrl::GetNumberOfLines() const
+{
+    // TODO
+    return 0;
+}
+
+long wxTextCtrl::XYToPosition(long x, long y) const
+{
+    // TODO
+    return 0;
+}
+
+void wxTextCtrl::PositionToXY(long pos, long *x, long *y) const
+{
+    // TODO
+}
+
+void wxTextCtrl::ShowPosition(long pos)
+{
+    // TODO
+}
+
+int wxTextCtrl::GetLineLength(long lineNo) const
+{
+    // TODO
+    return 0;
+}
+
+wxString wxTextCtrl::GetLineText(long lineNo) const
+{
+    // TODO
+    return wxString("");
+}
+
+/*
+ * Text item
+ */
+void wxTextCtrl::Command(wxCommandEvent & event)
+{
+    SetValue (event.GetString());
+    ProcessCommand (event);
+}
+
+void wxTextCtrl::OnDropFiles(wxDropFilesEvent& event)
+{
+    // By default, load the first file into the text window.
+    if (event.GetNumberOfFiles() > 0)
+    {
+        LoadFile(event.GetFiles()[0]);
+    }
+}
+
+// The streambuf code was partly taken from chapter 3 by Jerry Schwarz of
+// AT&T's "C++ Lanuage System Release 3.0 Library Manual" - Stein Somers
+
+//=========================================================================
+// Called then the buffer is full (gcc 2.6.3) 
+// or when "endl" is output (Borland 4.5)
+//=========================================================================
+// Class declaration using multiple inheritance doesn't work properly for
+// Borland. See note in wb_text.h.
+#ifndef NO_TEXT_WINDOW_STREAM
+int wxTextCtrl::overflow(int c)
+{
+  // Make sure there is a holding area
+  if ( allocate()==EOF )
+  {
+    wxError("Streambuf allocation failed","Internal error");
+    return EOF;
+  }
+  
+  // Verify that there are no characters in get area
+  if ( gptr() && gptr() < egptr() )
+  {
+     wxError("Who's trespassing my get area?","Internal error");
+     return EOF;
+  }
+
+  // Reset get area
+  setg(0,0,0);
+
+  // Make sure there is a put area
+  if ( ! pptr() )
+  {
+/* This doesn't seem to be fatal so comment out error message */
+//    wxError("Put area not opened","Internal error");
+    setp( base(), base() );
+  }
+
+  // Determine how many characters have been inserted but no consumed
+  int plen = pptr() - pbase();
+
+  // Now Jerry relies on the fact that the buffer is at least 2 chars
+  // long, but the holding area "may be as small as 1" ???
+  // And we need an additional \0, so let's keep this inefficient but
+  // safe copy.
+
+  // If c!=EOF, it is a character that must also be comsumed
+  int xtra = c==EOF? 0 : 1;
+
+  // Write temporary C-string to wxTextWindow
+  {
+  char *txt = new char[plen+xtra+1];
+  memcpy(txt, pbase(), plen);
+  txt[plen] = (char)c;     // append c
+  txt[plen+xtra] = '\0';   // append '\0' or overwrite c
+    // If the put area already contained \0, output will be truncated there
+  WriteText(txt);
+    delete[] txt;
+  }
+
+  // Reset put area
+  setp(pbase(), epptr());
+
+#if defined(__WATCOMC__)
+  return __NOT_EOF;
+#elif defined(zapeof)     // HP-UX (all cfront based?)
+  return zapeof(c);
+#else
+  return c!=EOF ? c : 0;  // this should make everybody happy
+#endif
+}
+
+//=========================================================================
+// called then "endl" is output (gcc) or then explicit sync is done (Borland)
+//=========================================================================
+int wxTextCtrl::sync()
+{
+  // Verify that there are no characters in get area
+  if ( gptr() && gptr() < egptr() )
+  {
+     wxError("Who's trespassing my get area?","Internal error");
+     return EOF;
+  }
+
+  if ( pptr() && pptr() > pbase() ) return overflow(EOF);
+
+  return 0;
+/* OLD CODE
+  int len = pptr() - pbase();
+  char *txt = new char[len+1];
+  strncpy(txt, pbase(), len);
+  txt[len] = '\0';
+  (*this) << txt;
+  setp(pbase(), epptr());
+  delete[] txt;
+  return 0;
+*/
+}
+
+//=========================================================================
+// Should not be called by a "ostream". Used by a "istream"
+//=========================================================================
+int wxTextCtrl::underflow()
+{
+  return EOF;
+}
+#endif
+
+wxTextCtrl& wxTextCtrl::operator<<(const wxString& s)
+{
+    WriteText(s);
+    return *this;
+}
+
+wxTextCtrl& wxTextCtrl::operator<<(float f)
+{
+    wxString str;
+    str.Printf("%.2f", f);
+    WriteText(str);
+    return *this;
+}
+
+wxTextCtrl& wxTextCtrl::operator<<(double d)
+{
+    wxString str;
+    str.Printf("%.2f", d);
+    WriteText(str);
+    return *this;
+}
+
+wxTextCtrl& wxTextCtrl::operator<<(int i)
+{
+    wxString str;
+    str.Printf("%d", i);
+    WriteText(str);
+    return *this;
+}
+
+wxTextCtrl& wxTextCtrl::operator<<(long i)
+{
+    wxString str;
+    str.Printf("%ld", i);
+    WriteText(str);
+    return *this;
+}
+
+wxTextCtrl& wxTextCtrl::operator<<(const char c)
+{
+    char buf[2];
+
+    buf[0] = c;
+    buf[1] = 0;
+    WriteText(buf);
+    return *this;
+}
+