1. new wxFFile class - as wxFile but uses fopen/fread/fseek... instead of
open/read/seek... 2. wxTextCtrlBase appears, several bug fixes in MSW wxTextCtrl and made LoadFile() behave in the same way under GTK and MSW (fixed it for MSW too) 3. Corrected the sash position calculation in sashwin.cpp - seems to work now but I wonder how it could ever work before? 4. new, tmake generated, MSW makefiles. They probably don't work - will fix them as soon as people start complaining. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3004 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
186
src/common/textcmn.cpp
Normal file
186
src/common/textcmn.cpp
Normal file
@@ -0,0 +1,186 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: common/textcmn.cpp
|
||||
// Purpose: implementation of platform-independent functions of wxTextCtrl
|
||||
// Author: Julian Smart
|
||||
// Modified by:
|
||||
// Created: 13.07.99
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) wxWindows team
|
||||
// Licence: wxWindows license
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// ============================================================================
|
||||
// declarations
|
||||
// ============================================================================
|
||||
|
||||
// for compilers that support precompilation, includes "wx.h".
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
#pragma hdrstop
|
||||
#endif
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/textctrl.h"
|
||||
#endif // WX_PRECOMP
|
||||
|
||||
#include "wx/ffile.h"
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// macros
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// we don't have any objects of type wxTextCtrlBase in the program, only
|
||||
// wxTextCtrl, so this cast is safe
|
||||
#define TEXTCTRL(ptr) ((wxTextCtrl *)(ptr))
|
||||
|
||||
// ============================================================================
|
||||
// implementation
|
||||
// ============================================================================
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// ctor
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
wxTextCtrlBase::wxTextCtrlBase()
|
||||
{
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// file IO functions
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
bool wxTextCtrlBase::LoadFile(const wxString& filename)
|
||||
{
|
||||
wxFFile file(filename);
|
||||
if ( file.IsOpened() )
|
||||
{
|
||||
wxString text;
|
||||
if ( file.ReadAll(&text) )
|
||||
{
|
||||
SetValue(text);
|
||||
|
||||
DiscardEdits();
|
||||
|
||||
m_filename = filename;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
wxLogError(_("File couldn't be loaded."));
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool wxTextCtrlBase::SaveFile(const wxString& filename)
|
||||
{
|
||||
wxString filenameToUse = filename.IsEmpty() ? m_filename : filename;
|
||||
if ( !filenameToUse )
|
||||
{
|
||||
// what kind of message to give? is it an error or a program bug?
|
||||
wxLogDebug(_T("Can't save textctrl to file without filename."));
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
wxFFile file(filename, "w");
|
||||
if ( file.IsOpened() && file.Write(GetValue()) )
|
||||
{
|
||||
// it's not modified any longer
|
||||
DiscardEdits();
|
||||
|
||||
m_filename = filename;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
wxLogError(_("The text couldn't be saved."));
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// stream-like insertion operator
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
wxTextCtrl& wxTextCtrlBase::operator<<(const wxString& s)
|
||||
{
|
||||
AppendText(s);
|
||||
return *TEXTCTRL(this);
|
||||
}
|
||||
|
||||
wxTextCtrl& wxTextCtrlBase::operator<<(float f)
|
||||
{
|
||||
wxString str;
|
||||
str.Printf(_T("%.2f"), f);
|
||||
AppendText(str);
|
||||
return *TEXTCTRL(this);
|
||||
}
|
||||
|
||||
wxTextCtrl& wxTextCtrlBase::operator<<(double d)
|
||||
{
|
||||
wxString str;
|
||||
str.Printf(_T("%.2f"), d);
|
||||
AppendText(str);
|
||||
return *TEXTCTRL(this);
|
||||
}
|
||||
|
||||
wxTextCtrl& wxTextCtrlBase::operator<<(int i)
|
||||
{
|
||||
wxString str;
|
||||
str.Printf(_T("%d"), i);
|
||||
AppendText(str);
|
||||
return *TEXTCTRL(this);
|
||||
}
|
||||
|
||||
wxTextCtrl& wxTextCtrlBase::operator<<(long i)
|
||||
{
|
||||
wxString str;
|
||||
str.Printf(_T("%ld"), i);
|
||||
AppendText(str);
|
||||
return *TEXTCTRL(this);
|
||||
}
|
||||
|
||||
wxTextCtrl& wxTextCtrlBase::operator<<(const char c)
|
||||
{
|
||||
return operator<<(wxString(c));
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// streambuf methods implementation
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#ifndef NO_TEXT_WINDOW_STREAM
|
||||
|
||||
int wxTextCtrlBase::overflow( int WXUNUSED(c) )
|
||||
{
|
||||
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 EOF;
|
||||
}
|
||||
|
||||
int wxTextCtrlBase::sync()
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
int wxTextCtrlBase::underflow()
|
||||
{
|
||||
return EOF;
|
||||
}
|
||||
|
||||
#endif // NO_TEXT_WINDOW_STREAM
|
||||
|
Reference in New Issue
Block a user