Added wxFFileStream base on wxFFile (as opposed to wxFile)

Implemented the "endl" thing for text streams,
  Corrected cursor display for text ctrls,
  Corrected the strange spin button behaviour when dynamically
    changing its range
  Corrcected bug in wxListBox when programmatically unselecting
   an item in multi-select mode (bug reports are getting esoteric)


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3440 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
1999-08-22 16:12:48 +00:00
parent e2acb9ae1c
commit 65045edde4
17 changed files with 332 additions and 25 deletions

View File

@@ -169,6 +169,148 @@ wxFileStream::wxFileStream(const wxString& fileName)
{
}
// ----------------------------------------------------------------------------
// wxFFileInputStream
// ----------------------------------------------------------------------------
wxFFileInputStream::wxFFileInputStream(const wxString& fileName)
: wxInputStream()
{
m_file = new wxFFile(fileName, "r");
m_file_destroy = TRUE;
}
wxFFileInputStream::wxFFileInputStream()
: wxInputStream()
{
m_file_destroy = FALSE;
m_file = NULL;
}
wxFFileInputStream::wxFFileInputStream(wxFFile& file)
{
m_file = &file;
m_file_destroy = FALSE;
}
wxFFileInputStream::wxFFileInputStream(FILE *file)
{
m_file = new wxFFile(file);
m_file_destroy = TRUE;
}
wxFFileInputStream::~wxFFileInputStream()
{
if (m_file_destroy)
delete m_file;
}
size_t wxFFileInputStream::GetSize() const
{
return m_file->Length();
}
size_t wxFFileInputStream::OnSysRead(void *buffer, size_t size)
{
off_t ret;
ret = m_file->Read(buffer, size);
if (m_file->Eof())
m_lasterror = wxStream_EOF;
if (ret == wxInvalidOffset) {
m_lasterror = wxStream_READ_ERR;
ret = 0;
}
return ret;
}
off_t wxFFileInputStream::OnSysSeek(off_t pos, wxSeekMode mode)
{
return m_file->Seek(pos, mode);
}
off_t wxFFileInputStream::OnSysTell() const
{
return m_file->Tell();
}
// ----------------------------------------------------------------------------
// wxFFileOutputStream
// ----------------------------------------------------------------------------
wxFFileOutputStream::wxFFileOutputStream(const wxString& fileName)
{
m_file = new wxFFile(fileName, "w+");
m_file_destroy = TRUE;
}
wxFFileOutputStream::wxFFileOutputStream(wxFFile& file)
{
m_file = &file;
m_file_destroy = FALSE;
}
wxFFileOutputStream::wxFFileOutputStream()
: wxOutputStream()
{
m_file_destroy = FALSE;
m_file = NULL;
}
wxFFileOutputStream::wxFFileOutputStream(FILE *file)
{
m_file = new wxFFile(file);
m_file_destroy = TRUE;
}
wxFFileOutputStream::~wxFFileOutputStream()
{
if (m_file_destroy) {
Sync();
delete m_file;
}
}
size_t wxFFileOutputStream::OnSysWrite(const void *buffer, size_t size)
{
size_t ret = m_file->Write(buffer, size);
if (m_file->Error())
m_lasterror = wxStream_WRITE_ERR;
else
m_lasterror = wxStream_NOERROR;
return ret;
}
off_t wxFFileOutputStream::OnSysTell() const
{
return m_file->Tell();
}
off_t wxFFileOutputStream::OnSysSeek(off_t pos, wxSeekMode mode)
{
return m_file->Seek(pos, mode);
}
void wxFFileOutputStream::Sync()
{
wxOutputStream::Sync();
m_file->Flush();
}
size_t wxFFileOutputStream::GetSize() const
{
return m_file->Length();
}
// ----------------------------------------------------------------------------
// wxFFileStream
// ----------------------------------------------------------------------------
wxFFileStream::wxFFileStream(const wxString& fileName)
: wxFFileInputStream(fileName), wxFFileOutputStream(*wxFFileInputStream::m_file)
{
}
#endif
// wxUSE_STREAMS && wxUSE_FILE

View File

@@ -193,6 +193,13 @@ gtk_listbox_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxLis
// "select" and "deselect"
//-----------------------------------------------------------------------------
static void gtk_listitem_select_callback( GtkWidget *WXUNUSED(widget), wxListBox *listbox );
static void gtk_listitem_deselect_callback( GtkWidget *widget, wxListBox *listbox )
{
gtk_listitem_select_callback( widget, listbox );
}
static void gtk_listitem_select_callback( GtkWidget *WXUNUSED(widget), wxListBox *listbox )
{
if (g_isIdle) wxapp_install_idle_handler();
@@ -310,7 +317,7 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id,
if (style & wxLB_MULTIPLE)
gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
GTK_SIGNAL_FUNC(gtk_listitem_deselect_callback), (gpointer)this );
gtk_signal_connect( GTK_OBJECT(list_item),
"button_press_event",
@@ -480,7 +487,7 @@ void wxListBox::AppendCommon( const wxString &item )
if (HasFlag(wxLB_MULTIPLE))
gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
GTK_SIGNAL_FUNC(gtk_listitem_deselect_callback), (gpointer)this );
gtk_signal_connect( GTK_OBJECT(list_item),
"button_press_event",
@@ -917,7 +924,7 @@ void wxListBox::DisableEvents()
if (HasFlag(wxLB_MULTIPLE))
gtk_signal_disconnect_by_func( GTK_OBJECT(child->data),
GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
GTK_SIGNAL_FUNC(gtk_listitem_deselect_callback), (gpointer)this );
child = child->next;
}
@@ -933,7 +940,7 @@ void wxListBox::EnableEvents()
if (HasFlag(wxLB_MULTIPLE))
gtk_signal_connect( GTK_OBJECT(child->data), "deselect",
GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
GTK_SIGNAL_FUNC(gtk_listitem_deselect_callback), (gpointer)this );
child = child->next;
}

View File

@@ -189,6 +189,10 @@ void wxSpinButton::SetRange(int minVal, int maxVal)
m_adjust->upper = fmax;
gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "changed" );
// these two calls are required due to some bug in GTK
Refresh();
SetFocus();
}
void wxSpinButton::OnSize( wxSizeEvent &WXUNUSED(event) )

View File

@@ -35,7 +35,8 @@ extern bool g_isIdle;
// data
//-----------------------------------------------------------------------------
extern bool g_blockEventsOnDrag;
extern bool g_blockEventsOnDrag;
extern wxCursor g_globalCursor;
//-----------------------------------------------------------------------------
// "changed"
@@ -248,6 +249,8 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
SetBackgroundColour( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW) );
SetForegroundColour( parent->GetForegroundColour() );
m_cursor = wxCursor( wxCURSOR_IBEAM );
Show( TRUE );
return TRUE;
@@ -922,3 +925,30 @@ void wxTextCtrl::OnUpdateRedo(wxUpdateUIEvent& event)
{
event.Enable( CanRedo() );
}
void wxTextCtrl::OnInternalIdle()
{
wxCursor cursor = m_cursor;
if (g_globalCursor.Ok()) cursor = g_globalCursor;
if (cursor.Ok() && m_currentGdkCursor != cursor)
{
m_currentGdkCursor = cursor;
GdkWindow *window = (GdkWindow*) NULL;
if (HasFlag(wxTE_MULTILINE))
window = GTK_TEXT(m_text)->text_area;
else
window = GTK_ENTRY(m_text)->text_area;
if (window)
gdk_window_set_cursor( window, cursor.GetCursor() );
if (!g_globalCursor.Ok())
cursor = *wxSTANDARD_CURSOR;
window = m_widget->window;
if (window)
gdk_window_set_cursor( window, cursor.GetCursor() );
}
}

View File

@@ -132,7 +132,7 @@ extern bool g_blockEventsOnDrag;
extern bool g_blockEventsOnScroll;
extern wxCursor g_globalCursor;
static wxWindow *g_captureWindow = (wxWindow*) NULL;
wxWindow *g_focusWindow = (wxWindow*) NULL;
wxWindow *g_focusWindow = (wxWindow*) NULL;
/* hack: we need something to pass to gtk_menu_popup, so we store the time of
the last click here */

View File

@@ -193,6 +193,13 @@ gtk_listbox_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxLis
// "select" and "deselect"
//-----------------------------------------------------------------------------
static void gtk_listitem_select_callback( GtkWidget *WXUNUSED(widget), wxListBox *listbox );
static void gtk_listitem_deselect_callback( GtkWidget *widget, wxListBox *listbox )
{
gtk_listitem_select_callback( widget, listbox );
}
static void gtk_listitem_select_callback( GtkWidget *WXUNUSED(widget), wxListBox *listbox )
{
if (g_isIdle) wxapp_install_idle_handler();
@@ -310,7 +317,7 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id,
if (style & wxLB_MULTIPLE)
gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
GTK_SIGNAL_FUNC(gtk_listitem_deselect_callback), (gpointer)this );
gtk_signal_connect( GTK_OBJECT(list_item),
"button_press_event",
@@ -480,7 +487,7 @@ void wxListBox::AppendCommon( const wxString &item )
if (HasFlag(wxLB_MULTIPLE))
gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
GTK_SIGNAL_FUNC(gtk_listitem_deselect_callback), (gpointer)this );
gtk_signal_connect( GTK_OBJECT(list_item),
"button_press_event",
@@ -917,7 +924,7 @@ void wxListBox::DisableEvents()
if (HasFlag(wxLB_MULTIPLE))
gtk_signal_disconnect_by_func( GTK_OBJECT(child->data),
GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
GTK_SIGNAL_FUNC(gtk_listitem_deselect_callback), (gpointer)this );
child = child->next;
}
@@ -933,7 +940,7 @@ void wxListBox::EnableEvents()
if (HasFlag(wxLB_MULTIPLE))
gtk_signal_connect( GTK_OBJECT(child->data), "deselect",
GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
GTK_SIGNAL_FUNC(gtk_listitem_deselect_callback), (gpointer)this );
child = child->next;
}

View File

@@ -189,6 +189,10 @@ void wxSpinButton::SetRange(int minVal, int maxVal)
m_adjust->upper = fmax;
gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "changed" );
// these two calls are required due to some bug in GTK
Refresh();
SetFocus();
}
void wxSpinButton::OnSize( wxSizeEvent &WXUNUSED(event) )

View File

@@ -35,7 +35,8 @@ extern bool g_isIdle;
// data
//-----------------------------------------------------------------------------
extern bool g_blockEventsOnDrag;
extern bool g_blockEventsOnDrag;
extern wxCursor g_globalCursor;
//-----------------------------------------------------------------------------
// "changed"
@@ -248,6 +249,8 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
SetBackgroundColour( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW) );
SetForegroundColour( parent->GetForegroundColour() );
m_cursor = wxCursor( wxCURSOR_IBEAM );
Show( TRUE );
return TRUE;
@@ -922,3 +925,30 @@ void wxTextCtrl::OnUpdateRedo(wxUpdateUIEvent& event)
{
event.Enable( CanRedo() );
}
void wxTextCtrl::OnInternalIdle()
{
wxCursor cursor = m_cursor;
if (g_globalCursor.Ok()) cursor = g_globalCursor;
if (cursor.Ok() && m_currentGdkCursor != cursor)
{
m_currentGdkCursor = cursor;
GdkWindow *window = (GdkWindow*) NULL;
if (HasFlag(wxTE_MULTILINE))
window = GTK_TEXT(m_text)->text_area;
else
window = GTK_ENTRY(m_text)->text_area;
if (window)
gdk_window_set_cursor( window, cursor.GetCursor() );
if (!g_globalCursor.Ok())
cursor = *wxSTANDARD_CURSOR;
window = m_widget->window;
if (window)
gdk_window_set_cursor( window, cursor.GetCursor() );
}
}

View File

@@ -132,7 +132,7 @@ extern bool g_blockEventsOnDrag;
extern bool g_blockEventsOnScroll;
extern wxCursor g_globalCursor;
static wxWindow *g_captureWindow = (wxWindow*) NULL;
wxWindow *g_focusWindow = (wxWindow*) NULL;
wxWindow *g_focusWindow = (wxWindow*) NULL;
/* hack: we need something to pass to gtk_menu_popup, so we store the time of
the last click here */