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:
@@ -3,6 +3,13 @@
|
|||||||
% -----------------------------------------------------------------------------
|
% -----------------------------------------------------------------------------
|
||||||
\section{\class{wxFileInputStream}}\label{wxfileinputstream}
|
\section{\class{wxFileInputStream}}\label{wxfileinputstream}
|
||||||
|
|
||||||
|
This classes represent data streams to and from a file. There are actually
|
||||||
|
two such groups of classes: those documented here, and another group called
|
||||||
|
wxFFileInputStream, wxFFileOutputStream and wxFFileStream which are not
|
||||||
|
based on file descriptors (and their wxWindows equivalent wxFile) but the
|
||||||
|
FILE* type (and wxFFile). Apart from the different constructor ("FILE *file"
|
||||||
|
instead if "int fd") their interface is identical.
|
||||||
|
|
||||||
\wxheading{Derived from}
|
\wxheading{Derived from}
|
||||||
|
|
||||||
\helpref{wxInputStream}{wxinputstream}
|
\helpref{wxInputStream}{wxinputstream}
|
||||||
|
@@ -91,14 +91,14 @@ $\backslash$n or $\backslash$r$\backslash$n or $\backslash$r.
|
|||||||
This class provides functions that write text datas using an output stream.
|
This class provides functions that write text datas using an output stream.
|
||||||
So, you can write \it{text} floats, integers.
|
So, you can write \it{text} floats, integers.
|
||||||
|
|
||||||
For example:
|
You can also simulate the C++ cout class:
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
wxFileOutputStream output( "mytext.txt" );
|
wxFFileOutputStream output( stderr );
|
||||||
wxTextOutputStream text( output );
|
wxTextOutputStream cout( output );
|
||||||
|
|
||||||
output << "This is a text line" << endl;
|
cout << "This is a text line" << endl;
|
||||||
output << 1234;
|
cout << 1234;
|
||||||
output << 1.23456;
|
cout << 1.23456;
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
The wxTextOutputStream writes text files (or streams) on DOS, Macintosh
|
The wxTextOutputStream writes text files (or streams) on DOS, Macintosh
|
||||||
|
@@ -127,6 +127,7 @@ public:
|
|||||||
bool IsOwnGtkWindow( GdkWindow *window );
|
bool IsOwnGtkWindow( GdkWindow *window );
|
||||||
void ApplyWidgetStyle();
|
void ApplyWidgetStyle();
|
||||||
void CalculateScrollbar();
|
void CalculateScrollbar();
|
||||||
|
void OnInternalIdle();
|
||||||
|
|
||||||
void SetModified() { m_modified = TRUE; }
|
void SetModified() { m_modified = TRUE; }
|
||||||
|
|
||||||
|
@@ -127,6 +127,7 @@ public:
|
|||||||
bool IsOwnGtkWindow( GdkWindow *window );
|
bool IsOwnGtkWindow( GdkWindow *window );
|
||||||
void ApplyWidgetStyle();
|
void ApplyWidgetStyle();
|
||||||
void CalculateScrollbar();
|
void CalculateScrollbar();
|
||||||
|
void OnInternalIdle();
|
||||||
|
|
||||||
void SetModified() { m_modified = TRUE; }
|
void SetModified() { m_modified = TRUE; }
|
||||||
|
|
||||||
|
@@ -20,6 +20,14 @@
|
|||||||
|
|
||||||
#if wxUSE_STREAMS
|
#if wxUSE_STREAMS
|
||||||
|
|
||||||
|
class WXDLLEXPORT wxTextInputStream;
|
||||||
|
class WXDLLEXPORT wxTextOutputStream;
|
||||||
|
|
||||||
|
typedef wxTextInputStream& (*__wxTextInputManip)(wxTextInputStream&);
|
||||||
|
typedef wxTextOutputStream& (*__wxTextOutputManip)(wxTextOutputStream&);
|
||||||
|
|
||||||
|
WXDLLEXPORT wxTextOutputStream &endl( wxTextOutputStream &stream );
|
||||||
|
|
||||||
class WXDLLEXPORT wxTextInputStream {
|
class WXDLLEXPORT wxTextInputStream {
|
||||||
public:
|
public:
|
||||||
wxTextInputStream(wxInputStream& s);
|
wxTextInputStream(wxInputStream& s);
|
||||||
@@ -41,6 +49,8 @@ public:
|
|||||||
wxTextInputStream& operator>>(double& i);
|
wxTextInputStream& operator>>(double& i);
|
||||||
wxTextInputStream& operator>>(float& f);
|
wxTextInputStream& operator>>(float& f);
|
||||||
|
|
||||||
|
wxTextInputStream& operator>>( __wxTextInputManip func) { return func(*this); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
wxInputStream *m_input;
|
wxInputStream *m_input;
|
||||||
|
|
||||||
@@ -69,12 +79,12 @@ class WXDLLEXPORT wxTextOutputStream {
|
|||||||
wxTextOutputStream& operator<<(double f);
|
wxTextOutputStream& operator<<(double f);
|
||||||
wxTextOutputStream& operator<<(float f);
|
wxTextOutputStream& operator<<(float f);
|
||||||
|
|
||||||
|
wxTextOutputStream& operator<<( __wxTextOutputManip func) { return func(*this); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
wxOutputStream *m_output;
|
wxOutputStream *m_output;
|
||||||
};
|
};
|
||||||
|
|
||||||
wxTextOutputStream &endl( wxTextOutputStream &stream );
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
// wxUSE_STREAMS
|
// wxUSE_STREAMS
|
||||||
|
|
||||||
|
@@ -24,6 +24,11 @@
|
|||||||
#include "wx/string.h"
|
#include "wx/string.h"
|
||||||
#include "wx/stream.h"
|
#include "wx/stream.h"
|
||||||
#include "wx/file.h"
|
#include "wx/file.h"
|
||||||
|
#include "wx/ffile.h"
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxFileStream using wxFile
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
class wxFileInputStream: public wxInputStream {
|
class wxFileInputStream: public wxInputStream {
|
||||||
public:
|
public:
|
||||||
@@ -81,6 +86,65 @@ class wxFileStream: public wxFileInputStream, public wxFileOutputStream {
|
|||||||
wxFileStream(const wxString& fileName);
|
wxFileStream(const wxString& fileName);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxFFileStream using wxFFile
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class wxFFileInputStream: public wxInputStream {
|
||||||
|
public:
|
||||||
|
wxFFileInputStream(const wxString& ifileName);
|
||||||
|
wxFFileInputStream(wxFFile& file);
|
||||||
|
wxFFileInputStream(FILE *file);
|
||||||
|
~wxFFileInputStream();
|
||||||
|
|
||||||
|
size_t GetSize() const;
|
||||||
|
|
||||||
|
bool Ok() const { return m_file->IsOpened(); }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
wxFFileInputStream();
|
||||||
|
|
||||||
|
size_t OnSysRead(void *buffer, size_t size);
|
||||||
|
off_t OnSysSeek(off_t pos, wxSeekMode mode);
|
||||||
|
off_t OnSysTell() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
wxFFile *m_file;
|
||||||
|
bool m_file_destroy;
|
||||||
|
};
|
||||||
|
|
||||||
|
class wxFFileOutputStream: public wxOutputStream {
|
||||||
|
public:
|
||||||
|
wxFFileOutputStream(const wxString& fileName);
|
||||||
|
wxFFileOutputStream(wxFFile& file);
|
||||||
|
wxFFileOutputStream(FILE *file);
|
||||||
|
virtual ~wxFFileOutputStream();
|
||||||
|
|
||||||
|
// To solve an ambiguity on GCC
|
||||||
|
// inline wxOutputStream& Write(const void *buffer, size_t size)
|
||||||
|
// { return wxOutputStream::Write(buffer, size); }
|
||||||
|
|
||||||
|
void Sync();
|
||||||
|
size_t GetSize() const;
|
||||||
|
|
||||||
|
bool Ok() const { return m_file->IsOpened(); }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
wxFFileOutputStream();
|
||||||
|
|
||||||
|
size_t OnSysWrite(const void *buffer, size_t size);
|
||||||
|
off_t OnSysSeek(off_t pos, wxSeekMode mode);
|
||||||
|
off_t OnSysTell() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
wxFFile *m_file;
|
||||||
|
bool m_file_destroy;
|
||||||
|
};
|
||||||
|
|
||||||
|
class wxFFileStream: public wxFFileInputStream, public wxFFileOutputStream {
|
||||||
|
public:
|
||||||
|
wxFFileStream(const wxString& fileName);
|
||||||
|
};
|
||||||
#endif
|
#endif
|
||||||
// wxUSE_STREAMS && wxUSE_FILE
|
// wxUSE_STREAMS && wxUSE_FILE
|
||||||
|
|
||||||
|
@@ -518,9 +518,9 @@ void MyPanel::OnPageChanging( wxNotebookEvent &event )
|
|||||||
int selOld = event.GetOldSelection();
|
int selOld = event.GetOldSelection();
|
||||||
if ( selOld == 2 )
|
if ( selOld == 2 )
|
||||||
{
|
{
|
||||||
if ( wxMessageBox("This demonstrates how a program may prevent the "
|
if ( wxMessageBox("This demonstrates how a program may prevent the\n"
|
||||||
"page change from taking place - if you select "
|
"page change from taking place - if you select\n"
|
||||||
"[No] the current page will stay the third one",
|
"[No] the current page will stay the third one\n",
|
||||||
"Control sample",
|
"Control sample",
|
||||||
wxICON_QUESTION | wxYES_NO) != wxYES )
|
wxICON_QUESTION | wxYES_NO) != wxYES )
|
||||||
{
|
{
|
||||||
|
@@ -15,7 +15,7 @@ program_dir = samples/text
|
|||||||
|
|
||||||
DATAFILES = text.cpp
|
DATAFILES = text.cpp
|
||||||
|
|
||||||
PROGRAM=controls
|
PROGRAM=text
|
||||||
|
|
||||||
OBJECTS=$(PROGRAM).o
|
OBJECTS=$(PROGRAM).o
|
||||||
|
|
||||||
|
@@ -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
|
#endif
|
||||||
// wxUSE_STREAMS && wxUSE_FILE
|
// wxUSE_STREAMS && wxUSE_FILE
|
||||||
|
|
||||||
|
@@ -193,6 +193,13 @@ gtk_listbox_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxLis
|
|||||||
// "select" and "deselect"
|
// "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 )
|
static void gtk_listitem_select_callback( GtkWidget *WXUNUSED(widget), wxListBox *listbox )
|
||||||
{
|
{
|
||||||
if (g_isIdle) wxapp_install_idle_handler();
|
if (g_isIdle) wxapp_install_idle_handler();
|
||||||
@@ -310,7 +317,7 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id,
|
|||||||
|
|
||||||
if (style & wxLB_MULTIPLE)
|
if (style & wxLB_MULTIPLE)
|
||||||
gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
|
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),
|
gtk_signal_connect( GTK_OBJECT(list_item),
|
||||||
"button_press_event",
|
"button_press_event",
|
||||||
@@ -480,7 +487,7 @@ void wxListBox::AppendCommon( const wxString &item )
|
|||||||
|
|
||||||
if (HasFlag(wxLB_MULTIPLE))
|
if (HasFlag(wxLB_MULTIPLE))
|
||||||
gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
|
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),
|
gtk_signal_connect( GTK_OBJECT(list_item),
|
||||||
"button_press_event",
|
"button_press_event",
|
||||||
@@ -917,7 +924,7 @@ void wxListBox::DisableEvents()
|
|||||||
|
|
||||||
if (HasFlag(wxLB_MULTIPLE))
|
if (HasFlag(wxLB_MULTIPLE))
|
||||||
gtk_signal_disconnect_by_func( GTK_OBJECT(child->data),
|
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;
|
child = child->next;
|
||||||
}
|
}
|
||||||
@@ -933,7 +940,7 @@ void wxListBox::EnableEvents()
|
|||||||
|
|
||||||
if (HasFlag(wxLB_MULTIPLE))
|
if (HasFlag(wxLB_MULTIPLE))
|
||||||
gtk_signal_connect( GTK_OBJECT(child->data), "deselect",
|
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;
|
child = child->next;
|
||||||
}
|
}
|
||||||
|
@@ -189,6 +189,10 @@ void wxSpinButton::SetRange(int minVal, int maxVal)
|
|||||||
m_adjust->upper = fmax;
|
m_adjust->upper = fmax;
|
||||||
|
|
||||||
gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "changed" );
|
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) )
|
void wxSpinButton::OnSize( wxSizeEvent &WXUNUSED(event) )
|
||||||
|
@@ -36,6 +36,7 @@ extern bool g_isIdle;
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
extern bool g_blockEventsOnDrag;
|
extern bool g_blockEventsOnDrag;
|
||||||
|
extern wxCursor g_globalCursor;
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// "changed"
|
// "changed"
|
||||||
@@ -248,6 +249,8 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
|
|||||||
SetBackgroundColour( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW) );
|
SetBackgroundColour( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW) );
|
||||||
SetForegroundColour( parent->GetForegroundColour() );
|
SetForegroundColour( parent->GetForegroundColour() );
|
||||||
|
|
||||||
|
m_cursor = wxCursor( wxCURSOR_IBEAM );
|
||||||
|
|
||||||
Show( TRUE );
|
Show( TRUE );
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -922,3 +925,30 @@ void wxTextCtrl::OnUpdateRedo(wxUpdateUIEvent& event)
|
|||||||
{
|
{
|
||||||
event.Enable( CanRedo() );
|
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() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -132,7 +132,7 @@ extern bool g_blockEventsOnDrag;
|
|||||||
extern bool g_blockEventsOnScroll;
|
extern bool g_blockEventsOnScroll;
|
||||||
extern wxCursor g_globalCursor;
|
extern wxCursor g_globalCursor;
|
||||||
static wxWindow *g_captureWindow = (wxWindow*) NULL;
|
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
|
/* hack: we need something to pass to gtk_menu_popup, so we store the time of
|
||||||
the last click here */
|
the last click here */
|
||||||
|
@@ -193,6 +193,13 @@ gtk_listbox_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxLis
|
|||||||
// "select" and "deselect"
|
// "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 )
|
static void gtk_listitem_select_callback( GtkWidget *WXUNUSED(widget), wxListBox *listbox )
|
||||||
{
|
{
|
||||||
if (g_isIdle) wxapp_install_idle_handler();
|
if (g_isIdle) wxapp_install_idle_handler();
|
||||||
@@ -310,7 +317,7 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id,
|
|||||||
|
|
||||||
if (style & wxLB_MULTIPLE)
|
if (style & wxLB_MULTIPLE)
|
||||||
gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
|
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),
|
gtk_signal_connect( GTK_OBJECT(list_item),
|
||||||
"button_press_event",
|
"button_press_event",
|
||||||
@@ -480,7 +487,7 @@ void wxListBox::AppendCommon( const wxString &item )
|
|||||||
|
|
||||||
if (HasFlag(wxLB_MULTIPLE))
|
if (HasFlag(wxLB_MULTIPLE))
|
||||||
gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
|
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),
|
gtk_signal_connect( GTK_OBJECT(list_item),
|
||||||
"button_press_event",
|
"button_press_event",
|
||||||
@@ -917,7 +924,7 @@ void wxListBox::DisableEvents()
|
|||||||
|
|
||||||
if (HasFlag(wxLB_MULTIPLE))
|
if (HasFlag(wxLB_MULTIPLE))
|
||||||
gtk_signal_disconnect_by_func( GTK_OBJECT(child->data),
|
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;
|
child = child->next;
|
||||||
}
|
}
|
||||||
@@ -933,7 +940,7 @@ void wxListBox::EnableEvents()
|
|||||||
|
|
||||||
if (HasFlag(wxLB_MULTIPLE))
|
if (HasFlag(wxLB_MULTIPLE))
|
||||||
gtk_signal_connect( GTK_OBJECT(child->data), "deselect",
|
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;
|
child = child->next;
|
||||||
}
|
}
|
||||||
|
@@ -189,6 +189,10 @@ void wxSpinButton::SetRange(int minVal, int maxVal)
|
|||||||
m_adjust->upper = fmax;
|
m_adjust->upper = fmax;
|
||||||
|
|
||||||
gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "changed" );
|
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) )
|
void wxSpinButton::OnSize( wxSizeEvent &WXUNUSED(event) )
|
||||||
|
@@ -36,6 +36,7 @@ extern bool g_isIdle;
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
extern bool g_blockEventsOnDrag;
|
extern bool g_blockEventsOnDrag;
|
||||||
|
extern wxCursor g_globalCursor;
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// "changed"
|
// "changed"
|
||||||
@@ -248,6 +249,8 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
|
|||||||
SetBackgroundColour( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW) );
|
SetBackgroundColour( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW) );
|
||||||
SetForegroundColour( parent->GetForegroundColour() );
|
SetForegroundColour( parent->GetForegroundColour() );
|
||||||
|
|
||||||
|
m_cursor = wxCursor( wxCURSOR_IBEAM );
|
||||||
|
|
||||||
Show( TRUE );
|
Show( TRUE );
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -922,3 +925,30 @@ void wxTextCtrl::OnUpdateRedo(wxUpdateUIEvent& event)
|
|||||||
{
|
{
|
||||||
event.Enable( CanRedo() );
|
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() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -132,7 +132,7 @@ extern bool g_blockEventsOnDrag;
|
|||||||
extern bool g_blockEventsOnScroll;
|
extern bool g_blockEventsOnScroll;
|
||||||
extern wxCursor g_globalCursor;
|
extern wxCursor g_globalCursor;
|
||||||
static wxWindow *g_captureWindow = (wxWindow*) NULL;
|
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
|
/* hack: we need something to pass to gtk_menu_popup, so we store the time of
|
||||||
the last click here */
|
the last click here */
|
||||||
|
Reference in New Issue
Block a user