*/
// Set/Get listbox/choice client data
- inline void SetClientData(char* clientData) { m_clientData = clientData; }
- inline char *GetClientData() const { return m_clientData; }
+ inline void SetClientData(void* clientData) { m_clientData = clientData; }
+ inline void *GetClientData() const { return m_clientData; }
// Get listbox selection if single-choice
inline int GetSelection() const { return m_commandInt; }
char* m_commandString; // String event argument
int m_commandInt;
long m_extraLong; // Additional information (e.g. select/deselect)
- char* m_clientData; // Arbitrary client data
+ void* m_clientData; // Arbitrary client data
};
// Scroll event class
// Because the objects of this class are deleted by the tree, they should
// always be allocated on the heap!
// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxTreeItemData
+class WXDLLEXPORT wxTreeItemData: public wxClientData
{
friend class wxTreeCtrl;
public:
// default copy ctor/assignment operator are ok
- // dtor is virtual and all the items are deleted by the tree control
- // when it's deleted, so you normally don't have to care about freeing
- // memory allocated in your wxTreeItemData-derived class
- virtual ~wxTreeItemData() { }
-
// accessor: get the item associated with us
const wxTreeItemId& GetId() const { return m_pItem; }
void SetId(const wxTreeItemId& id) { m_pItem = id; }
{
DECLARE_DYNAMIC_CLASS(wxMask)
- public:
-
- wxMask();
- wxMask( const wxBitmap& bitmap, const wxColour& colour );
- wxMask( const wxBitmap& bitmap, int paletteIndex );
- wxMask( const wxBitmap& bitmap );
- ~wxMask();
-
- // implementation
+public:
+ wxMask();
+ wxMask( const wxBitmap& bitmap, const wxColour& colour );
+ wxMask( const wxBitmap& bitmap, int paletteIndex );
+ wxMask( const wxBitmap& bitmap );
+ ~wxMask();
+
+ // implementation
- GdkBitmap *GetBitmap() const;
-
- protected:
-
- friend wxBitmap;
-
- GdkBitmap *m_bitmap;
-
+ GdkBitmap *m_bitmap;
+ GdkBitmap *GetBitmap() const;
};
//-----------------------------------------------------------------------------
{
DECLARE_DYNAMIC_CLASS(wxBitmap)
- public:
-
- wxBitmap();
- wxBitmap( int width, int height, int depth = -1 );
- wxBitmap( const char bits[], int width, int height, int depth = 1 );
- wxBitmap( const wxImage &image );
- wxBitmap( char **bits );
- wxBitmap( const wxBitmap& bmp );
- wxBitmap( const wxBitmap* bmp );
- wxBitmap( const wxString &filename, int type = wxBITMAP_TYPE_XPM);
- ~wxBitmap();
- wxBitmap& operator = ( const wxBitmap& bmp );
- bool operator == ( const wxBitmap& bmp );
- bool operator != ( const wxBitmap& bmp );
- bool Ok() const;
+public:
+ wxBitmap();
+ wxBitmap( int width, int height, int depth = -1 );
+ wxBitmap( const char bits[], int width, int height, int depth = 1 );
+ wxBitmap( const wxImage &image );
+ wxBitmap( char **bits );
+ wxBitmap( const wxBitmap& bmp );
+ wxBitmap( const wxBitmap* bmp );
+ wxBitmap( const wxString &filename, int type = wxBITMAP_TYPE_XPM );
+ ~wxBitmap();
+ wxBitmap& operator = ( const wxBitmap& bmp );
+ bool operator == ( const wxBitmap& bmp );
+ bool operator != ( const wxBitmap& bmp );
+ bool Ok() const;
- wxImage ConvertToImage() const;
+ wxImage ConvertToImage() const;
- int GetHeight() const;
- int GetWidth() const;
- int GetDepth() const;
- void SetHeight( int height );
- void SetWidth( int width );
- void SetDepth( int depth );
+ int GetHeight() const;
+ int GetWidth() const;
+ int GetDepth() const;
+ void SetHeight( int height );
+ void SetWidth( int width );
+ void SetDepth( int depth );
- wxMask *GetMask() const;
- void SetMask( wxMask *mask );
+ wxMask *GetMask() const;
+ void SetMask( wxMask *mask );
- bool SaveFile( const wxString &name, int type, wxPalette *palette = (wxPalette *) NULL );
- bool LoadFile( const wxString &name, int type = wxBITMAP_TYPE_XPM);
+ bool SaveFile( const wxString &name, int type, wxPalette *palette = (wxPalette *) NULL );
+ bool LoadFile( const wxString &name, int type = wxBITMAP_TYPE_XPM );
- wxPalette *GetPalette() const;
- wxPalette *GetColourMap() const
- { return GetPalette(); };
+ wxPalette *GetPalette() const;
+ wxPalette *GetColourMap() const
+ { return GetPalette(); };
- // implementation
+// implementation
- GdkPixmap *GetPixmap() const;
- GdkBitmap *GetBitmap() const;
+ GdkPixmap *GetPixmap() const;
+ GdkBitmap *GetBitmap() const;
// no data :-)
};
public:
- wxButton(void);
+ wxButton();
inline wxButton(wxWindow *parent, wxWindowID id, const wxString& label,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, long style = 0,
{
Create(parent, id, label, pos, size, style, validator, name);
}
+ ~wxButton();
bool Create(wxWindow *parent, wxWindowID id, const wxString& label,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, long style = 0,
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxButtonNameStr);
- void SetDefault(void);
+ void SetDefault();
void SetLabel( const wxString &label );
void Enable( bool enable );
-
+
// implementation
void ApplyWidgetStyle();
-
};
#endif // __GTKBUTTONH__
{
DECLARE_DYNAMIC_CLASS(wxChoice)
- public:
+public:
- wxChoice(void);
- inline wxChoice( wxWindow *parent, wxWindowID id,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- int n = 0, const wxString choices[] = (const wxString *) NULL,
- long style = 0,
- const wxValidator& validator = wxDefaultValidator,
- const wxString& name = wxChoiceNameStr )
- {
+ wxChoice();
+ inline wxChoice( wxWindow *parent, wxWindowID id,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ int n = 0, const wxString choices[] = (const wxString *) NULL,
+ long style = 0,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxChoiceNameStr )
+ {
Create(parent, id, pos, size, n, choices, style, validator, name);
- }
- bool Create( wxWindow *parent, wxWindowID id,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- int n = 0, const wxString choices[] = (wxString *) NULL,
- long style = 0,
- const wxValidator& validator = wxDefaultValidator,
- const wxString& name = wxChoiceNameStr );
- void Append( const wxString &item );
- void Clear(void);
- void Delete(int n);
- int FindString( const wxString &string ) const;
- int GetColumns(void) const;
- int GetSelection(void);
- wxString GetString( int n ) const;
- wxString GetStringSelection(void) const;
- int Number(void) const;
- void SetColumns( int n = 1 );
- void SetSelection( int n );
- void SetStringSelection( const wxString &string );
+ }
+ ~wxChoice();
+ bool Create( wxWindow *parent, wxWindowID id,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ int n = 0, const wxString choices[] = (wxString *) NULL,
+ long style = 0,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxChoiceNameStr );
+
+ void Append( const wxString &item );
+ void Append( const wxString &item, void* clientData );
+ void Append( const wxString &item, wxClientData* clientData );
+
+ void SetClientData( int n, void* clientData );
+ void* GetClientData( int n );
+ void SetClientObject( int n, wxClientData* clientData );
+ wxClientData* GetClientObject( int n );
+
+ void Clear();
+ void Delete(int n);
+
+ int FindString( const wxString &string ) const;
+ int GetColumns() const;
+ int GetSelection();
+ wxString GetString( int n ) const;
+ wxString GetStringSelection() const;
+ int Number() const;
+ void SetColumns( int n = 1 );
+ void SetSelection( int n );
+ void SetStringSelection( const wxString &string );
- // implementation
+// implementation
- void ApplyWidgetStyle();
+ wxList m_clientDataList;
+
+ void AppendCommon( const wxString &item );
+ void ApplyWidgetStyle();
};
#endif // __GTKCHOICEH__
// wxComboBox
//-----------------------------------------------------------------------------
-class wxComboBox: public wxControl
+class wxComboBox : public wxControl
{
DECLARE_DYNAMIC_CLASS(wxComboBox)
- public:
- inline wxComboBox(void) {}
+public:
+ inline wxComboBox() {}
inline wxComboBox(wxWindow *parent, wxWindowID id,
const wxString& value = wxEmptyString,
const wxPoint& pos = wxDefaultPosition,
{
Create(parent, id, value, pos, size, n, choices, style, validator, name);
}
+ ~wxComboBox();
bool Create(wxWindow *parent, wxWindowID id,
const wxString& value = wxEmptyString,
const wxPoint& pos = wxDefaultPosition,
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxComboBoxNameStr);
- void Clear(void);
void Append( const wxString &item );
- void Append( const wxString &item, char* clientData );
+ void Append( const wxString &item, void* clientData );
+ void Append( const wxString &item, wxClientData* clientData );
+
+ void SetClientData( int n, void* clientData );
+ void* GetClientData( int n );
+ void SetClientObject( int n, wxClientData* clientData );
+ wxClientData* GetClientObject( int n );
+
+ void Clear();
void Delete( int n );
+
int FindString( const wxString &item );
- char* GetClientData( int n );
- void SetClientData( int n, char * clientData );
- int GetSelection(void) const;
+ int GetSelection() const;
wxString GetString( int n ) const;
- wxString GetStringSelection(void) const;
- int Number(void) const;
+ wxString GetStringSelection() const;
+ int Number() const;
void SetSelection( int n );
void SetStringSelection( const wxString &string );
- wxString GetValue(void) const ;
+ wxString GetValue() const;
void SetValue(const wxString& value);
- void Copy(void);
- void Cut(void);
- void Paste(void);
- void SetInsertionPoint(long pos);
- void SetInsertionPointEnd(void);
- long GetInsertionPoint(void) const ;
- long GetLastPosition(void) const ;
- void Replace(long from, long to, const wxString& value);
- void Remove(long from, long to);
- void SetSelection(long from, long to);
- void SetEditable(bool editable);
+ void Copy();
+ void Cut();
+ void Paste();
+ void SetInsertionPoint( long pos );
+ void SetInsertionPointEnd();
+ long GetInsertionPoint() const;
+ long GetLastPosition() const;
+ void Replace( long from, long to, const wxString& value );
+ void Remove( long from, long to );
+ void SetSelection( long from, long to );
+ void SetEditable( bool editable );
void OnSize( wxSizeEvent &event );
- // implementation
+// implementation
- bool m_alreadySent;
- wxList m_clientData;
+ bool m_alreadySent;
+ wxList m_clientDataList;
- GtkWidget* GetConnectWidget(void);
- bool IsOwnGtkWindow( GdkWindow *window );
- void ApplyWidgetStyle();
+ void AppendCommon( const wxString &item );
+ GtkWidget* GetConnectWidget();
+ bool IsOwnGtkWindow( GdkWindow *window );
+ void ApplyWidgetStyle();
DECLARE_EVENT_TABLE()
};
// wxListBox
//-----------------------------------------------------------------------------
-class wxListBox: public wxControl
+class wxListBox : public wxControl
{
DECLARE_DYNAMIC_CLASS(wxListBox)
- public:
+public:
- wxListBox(void);
- inline wxListBox( wxWindow *parent, wxWindowID id,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- int n = 0, const wxString choices[] = (const wxString *) NULL,
- long style = 0,
- const wxValidator& validator = wxDefaultValidator,
- const wxString& name = wxListBoxNameStr )
- {
+ wxListBox();
+ inline wxListBox( wxWindow *parent, wxWindowID id,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ int n = 0, const wxString choices[] = (const wxString *) NULL,
+ long style = 0,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxListBoxNameStr )
+ {
Create(parent, id, pos, size, n, choices, style, validator, name);
- }
- bool Create( wxWindow *parent, wxWindowID id,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- int n = 0, const wxString choices[] = (const wxString *) NULL,
- long style = 0,
- const wxValidator& validator = wxDefaultValidator,
- const wxString& name = wxListBoxNameStr );
- void Append( const wxString &item );
- void Append( const wxString &item, char *clientData );
- void Clear(void);
- void Delete( int n );
- void Deselect( int n );
- int FindString( const wxString &item ) const;
- char *GetClientData( int n ) const;
- int GetSelection(void) const;
- int GetSelections( class wxArrayInt &) const;
- wxString GetString( int n ) const;
- wxString GetStringSelection(void) const;
- int Number(void);
- bool Selected( int n );
- void Set( int n, const wxString *choices );
- void SetClientData( int n, char *clientData );
- void SetFirstItem( int n );
- void SetFirstItem( const wxString &item );
- void SetSelection( int n, bool select = TRUE );
- void SetString( int n, const wxString &string );
- void SetStringSelection( const wxString &string, bool select = TRUE );
+ }
+ ~wxListBox();
+ bool Create( wxWindow *parent, wxWindowID id,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ int n = 0, const wxString choices[] = (const wxString *) NULL,
+ long style = 0,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxListBoxNameStr );
+
+ void Append( const wxString &item );
+ void Append( const wxString &item, void* clientData );
+ void Append( const wxString &item, wxClientData* clientData );
+
+ void SetClientData( int n, void* clientData );
+ void* GetClientData( int n );
+ void SetClientObject( int n, wxClientData* clientData );
+ wxClientData* GetClientObject( int n );
+
+ void Clear();
+ void Delete( int n );
+
+ void Deselect( int n );
+ int FindString( const wxString &item ) const;
+ int GetSelection(void) const;
+ int GetSelections( class wxArrayInt &) const;
+ wxString GetString( int n ) const;
+ wxString GetStringSelection(void) const;
+ int Number();
+ bool Selected( int n );
+ void Set( int n, const wxString *choices );
+ void SetFirstItem( int n );
+ void SetFirstItem( const wxString &item );
+ void SetSelection( int n, bool select = TRUE );
+ void SetString( int n, const wxString &string );
+ void SetStringSelection( const wxString &string, bool select = TRUE );
- void SetDropTarget( wxDropTarget *dropTarget );
+ void SetDropTarget( wxDropTarget *dropTarget );
- // implementation
+// implementation
- int GetIndex( GtkWidget *item ) const;
- GtkWidget *GetConnectWidget(void);
- bool IsOwnGtkWindow( GdkWindow *window );
- void ApplyWidgetStyle();
-
- GtkList *m_list;
- wxList m_clientData;
+ void AppendCommon( const wxString &item );
+ int GetIndex( GtkWidget *item ) const;
+ GtkWidget *GetConnectWidget();
+ bool IsOwnGtkWindow( GdkWindow *window );
+ void ApplyWidgetStyle();
+ GtkList *m_list;
+ wxList m_clientDataList;
};
#endif // __GTKLISTBOXH__
class wxResourceTable;
class wxItemResource;
+class wxClientData;
+class wxVoidClientData;
class wxWindow;
-class wxCanvas;
//-----------------------------------------------------------------------------
-// callback definition for inserting a window
+// callback definition for inserting a window (internal)
//-----------------------------------------------------------------------------
typedef void (*wxInsertChildFunction)( wxWindow*, wxWindow* );
extern const wxSize wxDefaultSize;
extern const wxPoint wxDefaultPosition;
+//-----------------------------------------------------------------------------
+// wxClientData
+//-----------------------------------------------------------------------------
+
+class wxClientData
+{
+public:
+ wxClientData() { }
+ virtual ~wxClientData() { }
+};
+
+//-----------------------------------------------------------------------------
+// wxVoidClientData
+//-----------------------------------------------------------------------------
+
+class wxVoidClientData : public wxClientData
+{
+public:
+ wxVoidClientData() { m_data = NULL; }
+ wxVoidClientData( void *data ) { m_data = data; }
+ void SetData( void* data ) { m_data = data; }
+ void *GetData() const { return m_data; }
+
+private:
+ void *m_data;
+};
+
+//-----------------------------------------------------------------------------
+// wxStringClientData
+//-----------------------------------------------------------------------------
+
+class wxStringClientData: public wxClientData
+{
+public:
+ wxStringClientData() { }
+ wxStringClientData( wxString &data ) { m_data = data; }
+ void SetData( wxString &data ) { m_data = data; }
+ wxString GetData() const { return m_data; }
+
+private:
+ wxString m_data;
+};
+
//-----------------------------------------------------------------------------
// wxWindow
//-----------------------------------------------------------------------------
virtual void Enable( bool enable );
virtual void MakeModal( bool modal );
virtual bool IsEnabled() const { return m_isEnabled; }
- inline bool Enabled(void) const { return IsEnabled(); }
+ inline bool Enabled() const { return IsEnabled(); }
virtual void SetFocus();
virtual bool OnClose();
int GetReturnCode();
wxWindow *GetParent() const
{ return m_parent; }
- wxWindow *GetGrandParent(void) const
+ wxWindow *GetGrandParent() const
{ return (m_parent ? m_parent->m_parent : (wxWindow*)NULL); }
void SetParent( wxWindow *p )
{ m_parent = p; }
virtual wxValidator *GetValidator();
virtual void SetValidator( const wxValidator &validator );
+ virtual void SetClientObject( wxClientData *data );
+ virtual wxClientData *GetClientObject();
+
+ virtual void SetClientData( void *data );
+ virtual void *GetClientData();
+
+
virtual void SetAcceleratorTable( const wxAcceleratorTable& accel );
virtual wxAcceleratorTable *GetAcceleratorTable() { return &m_acceleratorTable; }
virtual wxColour GetForegroundColour() const;
virtual void SetForegroundColour( const wxColour &colour );
- virtual int GetCharHeight(void) const;
- virtual int GetCharWidth(void) const;
+ virtual int GetCharHeight() const;
+ virtual int GetCharWidth() const;
virtual void GetTextExtent( const wxString& string, int *x, int *y,
int *descent = (int *) NULL,
int *externalLeading = (int *) NULL,
virtual void SetFont( const wxFont &font );
virtual wxFont *GetFont();
- // For backward compatibility
+
+ // For backward compatibility
inline virtual void SetButtonFont(const wxFont& font) { SetFont(font); }
inline virtual void SetLabelFont(const wxFont& font) { SetFont(font); }
inline virtual wxFont *GetLabelFont() { return GetFont(); };
inline virtual wxFont *GetButtonFont() { return GetFont(); };
+
virtual void SetWindowStyleFlag( long flag );
virtual long GetWindowStyleFlag() const;
+
virtual void CaptureMouse();
virtual void ReleaseMouse();
+
virtual void SetTitle( const wxString &title );
virtual wxString GetTitle() const;
virtual void SetName( const wxString &name );
virtual bool IsShown() const;
- virtual void Raise(void);
- virtual void Lower(void);
+ virtual void Raise();
+ virtual void Lower();
virtual bool IsRetained();
virtual wxWindow *FindWindow( long id );
virtual wxWindow *FindWindow( const wxString& name );
+
void AllowDoubleClick( bool WXUNUSED(allow) ) {};
void SetDoubleClick( bool WXUNUSED(allow) ) {};
+
virtual void ClientToScreen( int *x, int *y );
virtual void ScreenToClient( int *x, int *y );
virtual void ScrollWindow( int dx, int dy, const wxRect* rect = (wxRect *) NULL );
virtual bool AcceptsFocus() const;
+
void UpdateWindowUI();
// implementation
- virtual GtkWidget *GetConnectWidget(void);
+ void PreCreation( wxWindow *parent, wxWindowID id, const wxPoint &pos,
+ const wxSize &size, long style, const wxString &name );
+ void PostCreation();
+ virtual GtkWidget *GetConnectWidget();
virtual bool IsOwnGtkWindow( GdkWindow *window );
void ConnectWidget( GtkWidget *widget );
void ConnectDnDWidget( GtkWidget *widget );
void DisconnectDnDWidget( GtkWidget *widget );
- void PreCreation( wxWindow *parent, wxWindowID id, const wxPoint &pos,
- const wxSize &size, long style, const wxString &name );
- void PostCreation();
bool HasVMT();
virtual void ImplementSetSize();
int m_retCode;
wxEvtHandler *m_eventHandler;
wxValidator *m_windowValidator;
- wxDropTarget *m_pDropTarget;
+ wxDropTarget *m_dropTarget;
wxWindowID m_windowId;
wxCursor *m_cursor;
wxFont m_font;
bool m_isEnabled;
wxString m_windowName;
wxAcceleratorTable m_acceleratorTable;
+ wxClientData *m_clientData;
GtkWidget *m_widget;
GtkWidget *m_wxwindow;
{
DECLARE_DYNAMIC_CLASS(wxMask)
- public:
-
- wxMask();
- wxMask( const wxBitmap& bitmap, const wxColour& colour );
- wxMask( const wxBitmap& bitmap, int paletteIndex );
- wxMask( const wxBitmap& bitmap );
- ~wxMask();
-
- // implementation
+public:
+ wxMask();
+ wxMask( const wxBitmap& bitmap, const wxColour& colour );
+ wxMask( const wxBitmap& bitmap, int paletteIndex );
+ wxMask( const wxBitmap& bitmap );
+ ~wxMask();
+
+ // implementation
- GdkBitmap *GetBitmap() const;
-
- protected:
-
- friend wxBitmap;
-
- GdkBitmap *m_bitmap;
-
+ GdkBitmap *m_bitmap;
+ GdkBitmap *GetBitmap() const;
};
//-----------------------------------------------------------------------------
{
DECLARE_DYNAMIC_CLASS(wxBitmap)
- public:
-
- wxBitmap();
- wxBitmap( int width, int height, int depth = -1 );
- wxBitmap( const char bits[], int width, int height, int depth = 1 );
- wxBitmap( const wxImage &image );
- wxBitmap( char **bits );
- wxBitmap( const wxBitmap& bmp );
- wxBitmap( const wxBitmap* bmp );
- wxBitmap( const wxString &filename, int type = wxBITMAP_TYPE_XPM);
- ~wxBitmap();
- wxBitmap& operator = ( const wxBitmap& bmp );
- bool operator == ( const wxBitmap& bmp );
- bool operator != ( const wxBitmap& bmp );
- bool Ok() const;
+public:
+ wxBitmap();
+ wxBitmap( int width, int height, int depth = -1 );
+ wxBitmap( const char bits[], int width, int height, int depth = 1 );
+ wxBitmap( const wxImage &image );
+ wxBitmap( char **bits );
+ wxBitmap( const wxBitmap& bmp );
+ wxBitmap( const wxBitmap* bmp );
+ wxBitmap( const wxString &filename, int type = wxBITMAP_TYPE_XPM );
+ ~wxBitmap();
+ wxBitmap& operator = ( const wxBitmap& bmp );
+ bool operator == ( const wxBitmap& bmp );
+ bool operator != ( const wxBitmap& bmp );
+ bool Ok() const;
- wxImage ConvertToImage() const;
+ wxImage ConvertToImage() const;
- int GetHeight() const;
- int GetWidth() const;
- int GetDepth() const;
- void SetHeight( int height );
- void SetWidth( int width );
- void SetDepth( int depth );
+ int GetHeight() const;
+ int GetWidth() const;
+ int GetDepth() const;
+ void SetHeight( int height );
+ void SetWidth( int width );
+ void SetDepth( int depth );
- wxMask *GetMask() const;
- void SetMask( wxMask *mask );
+ wxMask *GetMask() const;
+ void SetMask( wxMask *mask );
- bool SaveFile( const wxString &name, int type, wxPalette *palette = (wxPalette *) NULL );
- bool LoadFile( const wxString &name, int type = wxBITMAP_TYPE_XPM);
+ bool SaveFile( const wxString &name, int type, wxPalette *palette = (wxPalette *) NULL );
+ bool LoadFile( const wxString &name, int type = wxBITMAP_TYPE_XPM );
- wxPalette *GetPalette() const;
- wxPalette *GetColourMap() const
- { return GetPalette(); };
+ wxPalette *GetPalette() const;
+ wxPalette *GetColourMap() const
+ { return GetPalette(); };
- // implementation
+// implementation
- GdkPixmap *GetPixmap() const;
- GdkBitmap *GetBitmap() const;
+ GdkPixmap *GetPixmap() const;
+ GdkBitmap *GetBitmap() const;
// no data :-)
};
public:
- wxButton(void);
+ wxButton();
inline wxButton(wxWindow *parent, wxWindowID id, const wxString& label,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, long style = 0,
{
Create(parent, id, label, pos, size, style, validator, name);
}
+ ~wxButton();
bool Create(wxWindow *parent, wxWindowID id, const wxString& label,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, long style = 0,
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxButtonNameStr);
- void SetDefault(void);
+ void SetDefault();
void SetLabel( const wxString &label );
void Enable( bool enable );
-
+
// implementation
void ApplyWidgetStyle();
-
};
#endif // __GTKBUTTONH__
{
DECLARE_DYNAMIC_CLASS(wxChoice)
- public:
+public:
- wxChoice(void);
- inline wxChoice( wxWindow *parent, wxWindowID id,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- int n = 0, const wxString choices[] = (const wxString *) NULL,
- long style = 0,
- const wxValidator& validator = wxDefaultValidator,
- const wxString& name = wxChoiceNameStr )
- {
+ wxChoice();
+ inline wxChoice( wxWindow *parent, wxWindowID id,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ int n = 0, const wxString choices[] = (const wxString *) NULL,
+ long style = 0,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxChoiceNameStr )
+ {
Create(parent, id, pos, size, n, choices, style, validator, name);
- }
- bool Create( wxWindow *parent, wxWindowID id,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- int n = 0, const wxString choices[] = (wxString *) NULL,
- long style = 0,
- const wxValidator& validator = wxDefaultValidator,
- const wxString& name = wxChoiceNameStr );
- void Append( const wxString &item );
- void Clear(void);
- void Delete(int n);
- int FindString( const wxString &string ) const;
- int GetColumns(void) const;
- int GetSelection(void);
- wxString GetString( int n ) const;
- wxString GetStringSelection(void) const;
- int Number(void) const;
- void SetColumns( int n = 1 );
- void SetSelection( int n );
- void SetStringSelection( const wxString &string );
+ }
+ ~wxChoice();
+ bool Create( wxWindow *parent, wxWindowID id,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ int n = 0, const wxString choices[] = (wxString *) NULL,
+ long style = 0,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxChoiceNameStr );
+
+ void Append( const wxString &item );
+ void Append( const wxString &item, void* clientData );
+ void Append( const wxString &item, wxClientData* clientData );
+
+ void SetClientData( int n, void* clientData );
+ void* GetClientData( int n );
+ void SetClientObject( int n, wxClientData* clientData );
+ wxClientData* GetClientObject( int n );
+
+ void Clear();
+ void Delete(int n);
+
+ int FindString( const wxString &string ) const;
+ int GetColumns() const;
+ int GetSelection();
+ wxString GetString( int n ) const;
+ wxString GetStringSelection() const;
+ int Number() const;
+ void SetColumns( int n = 1 );
+ void SetSelection( int n );
+ void SetStringSelection( const wxString &string );
- // implementation
+// implementation
- void ApplyWidgetStyle();
+ wxList m_clientDataList;
+
+ void AppendCommon( const wxString &item );
+ void ApplyWidgetStyle();
};
#endif // __GTKCHOICEH__
// wxComboBox
//-----------------------------------------------------------------------------
-class wxComboBox: public wxControl
+class wxComboBox : public wxControl
{
DECLARE_DYNAMIC_CLASS(wxComboBox)
- public:
- inline wxComboBox(void) {}
+public:
+ inline wxComboBox() {}
inline wxComboBox(wxWindow *parent, wxWindowID id,
const wxString& value = wxEmptyString,
const wxPoint& pos = wxDefaultPosition,
{
Create(parent, id, value, pos, size, n, choices, style, validator, name);
}
+ ~wxComboBox();
bool Create(wxWindow *parent, wxWindowID id,
const wxString& value = wxEmptyString,
const wxPoint& pos = wxDefaultPosition,
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxComboBoxNameStr);
- void Clear(void);
void Append( const wxString &item );
- void Append( const wxString &item, char* clientData );
+ void Append( const wxString &item, void* clientData );
+ void Append( const wxString &item, wxClientData* clientData );
+
+ void SetClientData( int n, void* clientData );
+ void* GetClientData( int n );
+ void SetClientObject( int n, wxClientData* clientData );
+ wxClientData* GetClientObject( int n );
+
+ void Clear();
void Delete( int n );
+
int FindString( const wxString &item );
- char* GetClientData( int n );
- void SetClientData( int n, char * clientData );
- int GetSelection(void) const;
+ int GetSelection() const;
wxString GetString( int n ) const;
- wxString GetStringSelection(void) const;
- int Number(void) const;
+ wxString GetStringSelection() const;
+ int Number() const;
void SetSelection( int n );
void SetStringSelection( const wxString &string );
- wxString GetValue(void) const ;
+ wxString GetValue() const;
void SetValue(const wxString& value);
- void Copy(void);
- void Cut(void);
- void Paste(void);
- void SetInsertionPoint(long pos);
- void SetInsertionPointEnd(void);
- long GetInsertionPoint(void) const ;
- long GetLastPosition(void) const ;
- void Replace(long from, long to, const wxString& value);
- void Remove(long from, long to);
- void SetSelection(long from, long to);
- void SetEditable(bool editable);
+ void Copy();
+ void Cut();
+ void Paste();
+ void SetInsertionPoint( long pos );
+ void SetInsertionPointEnd();
+ long GetInsertionPoint() const;
+ long GetLastPosition() const;
+ void Replace( long from, long to, const wxString& value );
+ void Remove( long from, long to );
+ void SetSelection( long from, long to );
+ void SetEditable( bool editable );
void OnSize( wxSizeEvent &event );
- // implementation
+// implementation
- bool m_alreadySent;
- wxList m_clientData;
+ bool m_alreadySent;
+ wxList m_clientDataList;
- GtkWidget* GetConnectWidget(void);
- bool IsOwnGtkWindow( GdkWindow *window );
- void ApplyWidgetStyle();
+ void AppendCommon( const wxString &item );
+ GtkWidget* GetConnectWidget();
+ bool IsOwnGtkWindow( GdkWindow *window );
+ void ApplyWidgetStyle();
DECLARE_EVENT_TABLE()
};
// wxListBox
//-----------------------------------------------------------------------------
-class wxListBox: public wxControl
+class wxListBox : public wxControl
{
DECLARE_DYNAMIC_CLASS(wxListBox)
- public:
+public:
- wxListBox(void);
- inline wxListBox( wxWindow *parent, wxWindowID id,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- int n = 0, const wxString choices[] = (const wxString *) NULL,
- long style = 0,
- const wxValidator& validator = wxDefaultValidator,
- const wxString& name = wxListBoxNameStr )
- {
+ wxListBox();
+ inline wxListBox( wxWindow *parent, wxWindowID id,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ int n = 0, const wxString choices[] = (const wxString *) NULL,
+ long style = 0,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxListBoxNameStr )
+ {
Create(parent, id, pos, size, n, choices, style, validator, name);
- }
- bool Create( wxWindow *parent, wxWindowID id,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- int n = 0, const wxString choices[] = (const wxString *) NULL,
- long style = 0,
- const wxValidator& validator = wxDefaultValidator,
- const wxString& name = wxListBoxNameStr );
- void Append( const wxString &item );
- void Append( const wxString &item, char *clientData );
- void Clear(void);
- void Delete( int n );
- void Deselect( int n );
- int FindString( const wxString &item ) const;
- char *GetClientData( int n ) const;
- int GetSelection(void) const;
- int GetSelections( class wxArrayInt &) const;
- wxString GetString( int n ) const;
- wxString GetStringSelection(void) const;
- int Number(void);
- bool Selected( int n );
- void Set( int n, const wxString *choices );
- void SetClientData( int n, char *clientData );
- void SetFirstItem( int n );
- void SetFirstItem( const wxString &item );
- void SetSelection( int n, bool select = TRUE );
- void SetString( int n, const wxString &string );
- void SetStringSelection( const wxString &string, bool select = TRUE );
+ }
+ ~wxListBox();
+ bool Create( wxWindow *parent, wxWindowID id,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ int n = 0, const wxString choices[] = (const wxString *) NULL,
+ long style = 0,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxListBoxNameStr );
+
+ void Append( const wxString &item );
+ void Append( const wxString &item, void* clientData );
+ void Append( const wxString &item, wxClientData* clientData );
+
+ void SetClientData( int n, void* clientData );
+ void* GetClientData( int n );
+ void SetClientObject( int n, wxClientData* clientData );
+ wxClientData* GetClientObject( int n );
+
+ void Clear();
+ void Delete( int n );
+
+ void Deselect( int n );
+ int FindString( const wxString &item ) const;
+ int GetSelection(void) const;
+ int GetSelections( class wxArrayInt &) const;
+ wxString GetString( int n ) const;
+ wxString GetStringSelection(void) const;
+ int Number();
+ bool Selected( int n );
+ void Set( int n, const wxString *choices );
+ void SetFirstItem( int n );
+ void SetFirstItem( const wxString &item );
+ void SetSelection( int n, bool select = TRUE );
+ void SetString( int n, const wxString &string );
+ void SetStringSelection( const wxString &string, bool select = TRUE );
- void SetDropTarget( wxDropTarget *dropTarget );
+ void SetDropTarget( wxDropTarget *dropTarget );
- // implementation
+// implementation
- int GetIndex( GtkWidget *item ) const;
- GtkWidget *GetConnectWidget(void);
- bool IsOwnGtkWindow( GdkWindow *window );
- void ApplyWidgetStyle();
-
- GtkList *m_list;
- wxList m_clientData;
+ void AppendCommon( const wxString &item );
+ int GetIndex( GtkWidget *item ) const;
+ GtkWidget *GetConnectWidget();
+ bool IsOwnGtkWindow( GdkWindow *window );
+ void ApplyWidgetStyle();
+ GtkList *m_list;
+ wxList m_clientDataList;
};
#endif // __GTKLISTBOXH__
class wxResourceTable;
class wxItemResource;
+class wxClientData;
+class wxVoidClientData;
class wxWindow;
-class wxCanvas;
//-----------------------------------------------------------------------------
-// callback definition for inserting a window
+// callback definition for inserting a window (internal)
//-----------------------------------------------------------------------------
typedef void (*wxInsertChildFunction)( wxWindow*, wxWindow* );
extern const wxSize wxDefaultSize;
extern const wxPoint wxDefaultPosition;
+//-----------------------------------------------------------------------------
+// wxClientData
+//-----------------------------------------------------------------------------
+
+class wxClientData
+{
+public:
+ wxClientData() { }
+ virtual ~wxClientData() { }
+};
+
+//-----------------------------------------------------------------------------
+// wxVoidClientData
+//-----------------------------------------------------------------------------
+
+class wxVoidClientData : public wxClientData
+{
+public:
+ wxVoidClientData() { m_data = NULL; }
+ wxVoidClientData( void *data ) { m_data = data; }
+ void SetData( void* data ) { m_data = data; }
+ void *GetData() const { return m_data; }
+
+private:
+ void *m_data;
+};
+
+//-----------------------------------------------------------------------------
+// wxStringClientData
+//-----------------------------------------------------------------------------
+
+class wxStringClientData: public wxClientData
+{
+public:
+ wxStringClientData() { }
+ wxStringClientData( wxString &data ) { m_data = data; }
+ void SetData( wxString &data ) { m_data = data; }
+ wxString GetData() const { return m_data; }
+
+private:
+ wxString m_data;
+};
+
//-----------------------------------------------------------------------------
// wxWindow
//-----------------------------------------------------------------------------
virtual void Enable( bool enable );
virtual void MakeModal( bool modal );
virtual bool IsEnabled() const { return m_isEnabled; }
- inline bool Enabled(void) const { return IsEnabled(); }
+ inline bool Enabled() const { return IsEnabled(); }
virtual void SetFocus();
virtual bool OnClose();
int GetReturnCode();
wxWindow *GetParent() const
{ return m_parent; }
- wxWindow *GetGrandParent(void) const
+ wxWindow *GetGrandParent() const
{ return (m_parent ? m_parent->m_parent : (wxWindow*)NULL); }
void SetParent( wxWindow *p )
{ m_parent = p; }
virtual wxValidator *GetValidator();
virtual void SetValidator( const wxValidator &validator );
+ virtual void SetClientObject( wxClientData *data );
+ virtual wxClientData *GetClientObject();
+
+ virtual void SetClientData( void *data );
+ virtual void *GetClientData();
+
+
virtual void SetAcceleratorTable( const wxAcceleratorTable& accel );
virtual wxAcceleratorTable *GetAcceleratorTable() { return &m_acceleratorTable; }
virtual wxColour GetForegroundColour() const;
virtual void SetForegroundColour( const wxColour &colour );
- virtual int GetCharHeight(void) const;
- virtual int GetCharWidth(void) const;
+ virtual int GetCharHeight() const;
+ virtual int GetCharWidth() const;
virtual void GetTextExtent( const wxString& string, int *x, int *y,
int *descent = (int *) NULL,
int *externalLeading = (int *) NULL,
virtual void SetFont( const wxFont &font );
virtual wxFont *GetFont();
- // For backward compatibility
+
+ // For backward compatibility
inline virtual void SetButtonFont(const wxFont& font) { SetFont(font); }
inline virtual void SetLabelFont(const wxFont& font) { SetFont(font); }
inline virtual wxFont *GetLabelFont() { return GetFont(); };
inline virtual wxFont *GetButtonFont() { return GetFont(); };
+
virtual void SetWindowStyleFlag( long flag );
virtual long GetWindowStyleFlag() const;
+
virtual void CaptureMouse();
virtual void ReleaseMouse();
+
virtual void SetTitle( const wxString &title );
virtual wxString GetTitle() const;
virtual void SetName( const wxString &name );
virtual bool IsShown() const;
- virtual void Raise(void);
- virtual void Lower(void);
+ virtual void Raise();
+ virtual void Lower();
virtual bool IsRetained();
virtual wxWindow *FindWindow( long id );
virtual wxWindow *FindWindow( const wxString& name );
+
void AllowDoubleClick( bool WXUNUSED(allow) ) {};
void SetDoubleClick( bool WXUNUSED(allow) ) {};
+
virtual void ClientToScreen( int *x, int *y );
virtual void ScreenToClient( int *x, int *y );
virtual void ScrollWindow( int dx, int dy, const wxRect* rect = (wxRect *) NULL );
virtual bool AcceptsFocus() const;
+
void UpdateWindowUI();
// implementation
- virtual GtkWidget *GetConnectWidget(void);
+ void PreCreation( wxWindow *parent, wxWindowID id, const wxPoint &pos,
+ const wxSize &size, long style, const wxString &name );
+ void PostCreation();
+ virtual GtkWidget *GetConnectWidget();
virtual bool IsOwnGtkWindow( GdkWindow *window );
void ConnectWidget( GtkWidget *widget );
void ConnectDnDWidget( GtkWidget *widget );
void DisconnectDnDWidget( GtkWidget *widget );
- void PreCreation( wxWindow *parent, wxWindowID id, const wxPoint &pos,
- const wxSize &size, long style, const wxString &name );
- void PostCreation();
bool HasVMT();
virtual void ImplementSetSize();
int m_retCode;
wxEvtHandler *m_eventHandler;
wxValidator *m_windowValidator;
- wxDropTarget *m_pDropTarget;
+ wxDropTarget *m_dropTarget;
wxWindowID m_windowId;
wxCursor *m_cursor;
wxFont m_font;
bool m_isEnabled;
wxString m_windowName;
wxAcceleratorTable m_acceleratorTable;
+ wxClientData *m_clientData;
GtkWidget *m_widget;
GtkWidget *m_wxwindow;
public:
- inline wxPNGHandler()
- {
- m_name = "PNG file";
- m_extension = "png";
- m_type = wxBITMAP_TYPE_PNG;
- };
-
- virtual bool LoadFile( wxImage *image, const wxString& name );
- virtual bool SaveFile( wxImage *image, const wxString& name );
+ inline wxPNGHandler()
+ {
+ m_name = "PNG file";
+ m_extension = "png";
+ m_type = wxBITMAP_TYPE_PNG;
+ };
+
+ virtual bool LoadFile( wxImage *image, const wxString& name );
+ virtual bool SaveFile( wxImage *image, const wxString& name );
};
//-----------------------------------------------------------------------------
public:
- inline wxBMPHandler()
- {
- m_name = "BMP file";
- m_extension = "bmp";
- m_type = wxBITMAP_TYPE_BMP;
- };
+ inline wxBMPHandler()
+ {
+ m_name = "BMP file";
+ m_extension = "bmp";
+ m_type = wxBITMAP_TYPE_BMP;
+ };
- virtual bool LoadFile( wxImage *image, const wxString& name );
+ virtual bool LoadFile( wxImage *image, const wxString& name );
};
+
//-----------------------------------------------------------------------------
// wxImage
//-----------------------------------------------------------------------------
static wxImageHandler *FindHandler( long imageType );
static void CleanUpHandlers();
+ static void InitStandardHandlers();
protected:
class wxImageRefData: public wxObjectRefData
{
- public:
-
- wxImageRefData(void);
- ~wxImageRefData(void);
+
+public:
+ wxImageRefData(void);
+ ~wxImageRefData(void);
- int m_width;
- int m_height;
- unsigned char *m_data;
- bool m_hasMask;
- unsigned char m_maskRed,m_maskGreen,m_maskBlue;
- bool m_ok;
+ int m_width;
+ int m_height;
+ unsigned char *m_data;
+ bool m_hasMask;
+ unsigned char m_maskRed,m_maskGreen,m_maskBlue;
+ bool m_ok;
};
wxImageRefData::wxImageRefData(void)
{
- m_width = 0;
- m_height = 0;
- m_data = (unsigned char*) NULL;
- m_ok = FALSE;
- m_maskRed = 0;
- m_maskGreen = 0;
- m_maskBlue = 0;
- m_hasMask = FALSE;
+ m_width = 0;
+ m_height = 0;
+ m_data = (unsigned char*) NULL;
+ m_ok = FALSE;
+ m_maskRed = 0;
+ m_maskGreen = 0;
+ m_maskBlue = 0;
+ m_hasMask = FALSE;
}
wxImageRefData::~wxImageRefData(void)
{
- if (m_data) free( m_data );
+ if (m_data) free( m_data );
}
wxList wxImage::sm_handlers;
wxImage::wxImage( int width, int height )
{
- Create( width, height );
+ Create( width, height );
}
wxImage::wxImage( const wxString& name, long type )
{
- LoadFile( name, type );
+ LoadFile( name, type );
}
wxImage::wxImage( const wxImage& image )
{
- Ref(image);
+ Ref(image);
}
wxImage::wxImage( const wxImage* image )
{
- if (image) Ref(*image);
+ if (image) Ref(*image);
}
void wxImage::Create( int width, int height )
{
- m_refData = new wxImageRefData();
+ m_refData = new wxImageRefData();
- M_IMGDATA->m_data = (unsigned char *) malloc( width*height*3 );
- if (M_IMGDATA->m_data)
- {
- for (int l = 0; l < width*height*3; l++) M_IMGDATA->m_data[l] = 0;
+ M_IMGDATA->m_data = (unsigned char *) malloc( width*height*3 );
+ if (M_IMGDATA->m_data)
+ {
+ for (int l = 0; l < width*height*3; l++) M_IMGDATA->m_data[l] = 0;
- M_IMGDATA->m_width = width;
- M_IMGDATA->m_height = height;
- M_IMGDATA->m_ok = TRUE;
- }
- else
- {
- UnRef();
- }
+ M_IMGDATA->m_width = width;
+ M_IMGDATA->m_height = height;
+ M_IMGDATA->m_ok = TRUE;
+ }
+ else
+ {
+ UnRef();
+ }
}
void wxImage::Destroy()
{
- UnRef();
+ UnRef();
}
bool wxImage::Ok() const
{
- return (M_IMGDATA && M_IMGDATA->m_ok);
+ return (M_IMGDATA && M_IMGDATA->m_ok);
}
char unsigned *wxImage::GetData() const
{
- if (!Ok()) return (char unsigned *)NULL;
+ if (!Ok()) return (char unsigned *)NULL;
- return M_IMGDATA->m_data;
+ return M_IMGDATA->m_data;
}
void wxImage::SetData( char unsigned *WXUNUSED(data) )
void wxImage::SetMaskColour( unsigned char r, unsigned char g, unsigned char b )
{
- if (!Ok()) return;
+ if (!Ok()) return;
- M_IMGDATA->m_maskRed = r;
- M_IMGDATA->m_maskGreen = g;
- M_IMGDATA->m_maskBlue = b;
- M_IMGDATA->m_hasMask = TRUE;
+ M_IMGDATA->m_maskRed = r;
+ M_IMGDATA->m_maskGreen = g;
+ M_IMGDATA->m_maskBlue = b;
+ M_IMGDATA->m_hasMask = TRUE;
}
unsigned char wxImage::GetMaskRed() const
{
- if (!Ok()) return 0;
+ if (!Ok()) return 0;
- return M_IMGDATA->m_maskRed;
+ return M_IMGDATA->m_maskRed;
}
unsigned char wxImage::GetMaskGreen() const
{
- if (!Ok()) return 0;
-
- return M_IMGDATA->m_maskGreen;
+ if (!Ok()) return 0;
+
+ return M_IMGDATA->m_maskGreen;
}
unsigned char wxImage::GetMaskBlue() const
{
- if (!Ok()) return 0;
+ if (!Ok()) return 0;
- return M_IMGDATA->m_maskBlue;
+ return M_IMGDATA->m_maskBlue;
}
void wxImage::SetMask( bool mask )
{
- if (!Ok()) return;
+ if (!Ok()) return;
- M_IMGDATA->m_hasMask = mask;
+ M_IMGDATA->m_hasMask = mask;
}
bool wxImage::HasMask() const
{
- if (!Ok()) return FALSE;
+ if (!Ok()) return FALSE;
- return M_IMGDATA->m_hasMask;
+ return M_IMGDATA->m_hasMask;
}
int wxImage::GetWidth() const
{
- return (M_IMGDATA ? M_IMGDATA->m_width : 0);
+ return (M_IMGDATA ? M_IMGDATA->m_width : 0);
}
int wxImage::GetHeight() const
{
- return (M_IMGDATA ? M_IMGDATA->m_height : 0);
+ return (M_IMGDATA ? M_IMGDATA->m_height : 0);
}
bool wxImage::LoadFile( const wxString& filename, long type )
{
- UnRef();
+ UnRef();
- if (!wxFileExists(filename))
- {
- wxLogWarning( "Image file does not exist." );
+ if (!wxFileExists(filename))
+ {
+ wxLogWarning( "Image file does not exist." );
- return FALSE;
- }
+ return FALSE;
+ }
- m_refData = new wxImageRefData;
+ m_refData = new wxImageRefData;
- wxImageHandler *handler = FindHandler(type);
+ wxImageHandler *handler = FindHandler(type);
- if (handler == NULL)
- {
- wxLogWarning( "No image handler for type %d defined.", type );
+ if (handler == NULL)
+ {
+ wxLogWarning( "No image handler for type %d defined.", type );
- return FALSE;
- }
+ return FALSE;
+ }
- return handler->LoadFile( this, filename );
+ return handler->LoadFile( this, filename );
}
bool wxImage::SaveFile( const wxString& filename, int type )
{
- wxImageHandler *handler = FindHandler(type);
+ wxImageHandler *handler = FindHandler(type);
- if (handler == NULL)
- {
- wxLogWarning( "No image handler for type %d defined.", type );
+ if (handler == NULL)
+ {
+ wxLogWarning( "No image handler for type %d defined.", type );
- return FALSE;
- }
+ return FALSE;
+ }
- return handler->SaveFile( this, filename );
+ return handler->SaveFile( this, filename );
}
void wxImage::AddHandler( wxImageHandler *handler )
bool wxImage::RemoveHandler( const wxString& name )
{
- wxImageHandler *handler = FindHandler(name);
- if (handler)
- {
- sm_handlers.DeleteObject(handler);
- return TRUE;
- }
- else
- return FALSE;
+ wxImageHandler *handler = FindHandler(name);
+ if (handler)
+ {
+ sm_handlers.DeleteObject(handler);
+ return TRUE;
+ }
+ else
+ return FALSE;
}
wxImageHandler *wxImage::FindHandler( const wxString& name )
{
- wxNode *node = sm_handlers.First();
- while (node)
- {
- wxImageHandler *handler = (wxImageHandler*)node->Data();
- if (handler->GetName() == name) return handler;
- node = node->Next();
- }
- return (wxImageHandler *)NULL;
+ wxNode *node = sm_handlers.First();
+ while (node)
+ {
+ wxImageHandler *handler = (wxImageHandler*)node->Data();
+ if (handler->GetName() == name) return handler;
+ node = node->Next();
+ }
+ return (wxImageHandler *)NULL;
}
wxImageHandler *wxImage::FindHandler( const wxString& extension, long bitmapType )
{
- wxNode *node = sm_handlers.First();
- while (node)
- {
- wxImageHandler *handler = (wxImageHandler*)node->Data();
- if ( handler->GetExtension() == extension &&
- (bitmapType == -1 || handler->GetType() == bitmapType) )
- return handler;
- node = node->Next();
- }
- return (wxImageHandler*)NULL;
+ wxNode *node = sm_handlers.First();
+ while (node)
+ {
+ wxImageHandler *handler = (wxImageHandler*)node->Data();
+ if ( handler->GetExtension() == extension &&
+ (bitmapType == -1 || handler->GetType() == bitmapType) )
+ return handler;
+ node = node->Next();
+ }
+ return (wxImageHandler*)NULL;
}
wxImageHandler *wxImage::FindHandler( long bitmapType )
{
- wxNode *node = sm_handlers.First();
- while (node)
- {
- wxImageHandler *handler = (wxImageHandler *)node->Data();
- if (handler->GetType() == bitmapType) return handler;
- node = node->Next();
- }
- return NULL;
+ wxNode *node = sm_handlers.First();
+ while (node)
+ {
+ wxImageHandler *handler = (wxImageHandler *)node->Data();
+ if (handler->GetType() == bitmapType) return handler;
+ node = node->Next();
+ }
+ return NULL;
+}
+
+void wxImage::InitStandardHandlers()
+{
+ AddHandler( new wxBMPHandler );
+ AddHandler( new wxPNGHandler );
}
void wxImage::CleanUpHandlers()
{
- wxNode *node = sm_handlers.First();
- while (node)
- {
- wxImageHandler *handler = (wxImageHandler *)node->Data();
- wxNode *next = node->Next();
- delete handler;
- delete node;
- node = next;
- }
+ wxNode *node = sm_handlers.First();
+ while (node)
+ {
+ wxImageHandler *handler = (wxImageHandler *)node->Data();
+ wxNode *next = node->Next();
+ delete handler;
+ delete node;
+ node = next;
+ }
}
//-----------------------------------------------------------------------------
bool wxImageHandler::LoadFile( wxImage *WXUNUSED(image), const wxString& WXUNUSED(name) )
{
- return FALSE;
+ return FALSE;
}
bool wxImageHandler::SaveFile( wxImage *WXUNUSED(image), const wxString& WXUNUSED(name) )
{
- return FALSE;
+ return FALSE;
}
//-----------------------------------------------------------------------------
wxInitializeResourceSystem();
- // For PostScript printing
-#if wxUSE_POSTSCRIPT
-/* Now done in wxPostScriptModule
- wxInitializePrintSetupData();
- wxThePrintPaperDatabase = new wxPrintPaperDatabase;
- wxThePrintPaperDatabase->CreateDatabase();
- */
-#endif
-
-
-/*
- wxBitmap::InitStandardHandlers();
-
- g_globalCursor = new wxCursor;
-*/
+ wxImage::InitStandardHandlers();
+
+// g_globalCursor = new wxCursor;
}
void wxApp::CommonCleanUp(void)
{
wxDELETE(wxTheColourDatabase);
-/* Now done in wxPostScriptModule
- wxDELETE(wxThePrintPaperDatabase);
- wxDELETE(wxThePrintSetupData);
- */
wxDELETE(wxTheFontNameDirectory);
wxDeleteStockObjects();
wxDeleteStockLists();
wxCleanUpResourceSystem();
+
+ wxImage::CleanUpHandlers();
wxSystemSettings::Done();
}
#include "wx/bitmap.h"
#include "wx/icon.h"
+#include "wx/filefn.h"
#include "gdk/gdkprivate.h"
#include "gdk/gdkx.h"
wxMask::wxMask(void)
{
- m_bitmap = (GdkBitmap *) NULL;
+ m_bitmap = (GdkBitmap *) NULL;
}
wxMask::wxMask( const wxBitmap& WXUNUSED(bitmap), const wxColour& WXUNUSED(colour) )
wxMask::~wxMask(void)
{
- if (m_bitmap) gdk_bitmap_unref( m_bitmap );
+ if (m_bitmap) gdk_bitmap_unref( m_bitmap );
}
GdkBitmap *wxMask::GetBitmap(void) const
{
- return m_bitmap;
+ return m_bitmap;
}
//-----------------------------------------------------------------------------
class wxBitmapRefData: public wxObjectRefData
{
- public:
-
- wxBitmapRefData(void);
- ~wxBitmapRefData(void);
-
- GdkPixmap *m_pixmap;
- GdkBitmap *m_bitmap;
- wxMask *m_mask;
- int m_width;
- int m_height;
- int m_bpp;
- wxPalette *m_palette;
+public:
+ wxBitmapRefData(void);
+ ~wxBitmapRefData(void);
+
+ GdkPixmap *m_pixmap;
+ GdkBitmap *m_bitmap;
+ wxMask *m_mask;
+ int m_width;
+ int m_height;
+ int m_bpp;
+ wxPalette *m_palette;
};
wxBitmapRefData::wxBitmapRefData(void)
{
- m_pixmap = (GdkPixmap *) NULL;
- m_bitmap = (GdkBitmap *) NULL;
- m_mask = (wxMask *) NULL;
- m_width = 0;
- m_height = 0;
- m_bpp = 0;
- m_palette = (wxPalette *) NULL;
+ m_pixmap = (GdkPixmap *) NULL;
+ m_bitmap = (GdkBitmap *) NULL;
+ m_mask = (wxMask *) NULL;
+ m_width = 0;
+ m_height = 0;
+ m_bpp = 0;
+ m_palette = (wxPalette *) NULL;
}
wxBitmapRefData::~wxBitmapRefData(void)
{
- if (m_pixmap) gdk_pixmap_unref( m_pixmap );
- if (m_bitmap) gdk_bitmap_unref( m_bitmap );
- if (m_mask) delete m_mask;
- if (m_palette) delete m_palette;
+ if (m_pixmap) gdk_pixmap_unref( m_pixmap );
+ if (m_bitmap) gdk_bitmap_unref( m_bitmap );
+ if (m_mask) delete m_mask;
+ if (m_palette) delete m_palette;
}
//-----------------------------------------------------------------------------
wxBitmap::wxBitmap(void)
{
- if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
+ if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
}
wxBitmap::wxBitmap( int width, int height, int depth )
{
- wxCHECK_RET( (width > 0) && (height > 0), "invalid bitmap size" )
- wxCHECK_RET( (depth > 0) || (depth == -1), "invalid bitmap depth" )
+ wxCHECK_RET( (width > 0) && (height > 0), "invalid bitmap size" )
+ wxCHECK_RET( (depth > 0) || (depth == -1), "invalid bitmap depth" )
- m_refData = new wxBitmapRefData();
+ m_refData = new wxBitmapRefData();
- GdkWindow *parent = (GdkWindow*) &gdk_root_parent;
+ GdkWindow *parent = (GdkWindow*) &gdk_root_parent;
- M_BMPDATA->m_mask = (wxMask *) NULL;
- M_BMPDATA->m_pixmap = gdk_pixmap_new( parent, width, height, depth );
- M_BMPDATA->m_width = width;
- M_BMPDATA->m_height = height;
- M_BMPDATA->m_bpp = gdk_window_get_visual( parent )->depth;
+ M_BMPDATA->m_mask = (wxMask *) NULL;
+ M_BMPDATA->m_pixmap = gdk_pixmap_new( parent, width, height, depth );
+ M_BMPDATA->m_width = width;
+ M_BMPDATA->m_height = height;
+ M_BMPDATA->m_bpp = gdk_window_get_visual( parent )->depth;
- if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
+ if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
}
wxBitmap::wxBitmap( char **bits )
{
- wxCHECK_RET( bits != NULL, "invalid bitmap data" )
+ wxCHECK_RET( bits != NULL, "invalid bitmap data" )
- m_refData = new wxBitmapRefData();
+ m_refData = new wxBitmapRefData();
- GdkBitmap *mask = (GdkBitmap*) NULL;
- GdkWindow *parent = (GdkWindow*) &gdk_root_parent;
+ GdkBitmap *mask = (GdkBitmap*) NULL;
+ GdkWindow *parent = (GdkWindow*) &gdk_root_parent;
- M_BMPDATA->m_pixmap = gdk_pixmap_create_from_xpm_d( parent, &mask, NULL, (gchar **) bits );
+ M_BMPDATA->m_pixmap = gdk_pixmap_create_from_xpm_d( parent, &mask, NULL, (gchar **) bits );
- if (mask)
- {
- M_BMPDATA->m_mask = new wxMask();
- M_BMPDATA->m_mask->m_bitmap = mask;
- }
+ if (mask)
+ {
+ M_BMPDATA->m_mask = new wxMask();
+ M_BMPDATA->m_mask->m_bitmap = mask;
+ }
- gdk_window_get_size( M_BMPDATA->m_pixmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) );
+ gdk_window_get_size( M_BMPDATA->m_pixmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) );
- M_BMPDATA->m_bpp = gdk_window_get_visual( parent )->depth; // ?
+ M_BMPDATA->m_bpp = gdk_window_get_visual( parent )->depth; // ?
- if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
+ if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
}
wxBitmap::wxBitmap( const wxBitmap& bmp )
{
- Ref( bmp );
+ Ref( bmp );
- if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
+ if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
}
wxBitmap::wxBitmap( const wxBitmap* bmp )
{
- if (bmp) Ref( *bmp );
+ if (bmp) Ref( *bmp );
- if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
+ if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
}
wxBitmap::wxBitmap( const wxString &filename, int type )
{
- LoadFile( filename, type );
+ LoadFile( filename, type );
- if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
+ if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
}
wxBitmap::wxBitmap( const char bits[], int width, int height, int WXUNUSED(depth))
{
- m_refData = new wxBitmapRefData();
+ m_refData = new wxBitmapRefData();
- M_BMPDATA->m_mask = (wxMask *) NULL;
- M_BMPDATA->m_bitmap =
- gdk_bitmap_create_from_data( (GdkWindow*) &gdk_root_parent, (gchar *) bits, width, height );
- M_BMPDATA->m_width = width;
- M_BMPDATA->m_height = height;
- M_BMPDATA->m_bpp = 1;
+ M_BMPDATA->m_mask = (wxMask *) NULL;
+ M_BMPDATA->m_bitmap =
+ gdk_bitmap_create_from_data( (GdkWindow*) &gdk_root_parent, (gchar *) bits, width, height );
+ M_BMPDATA->m_width = width;
+ M_BMPDATA->m_height = height;
+ M_BMPDATA->m_bpp = 1;
- if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
+ if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
}
wxBitmap::~wxBitmap(void)
{
- if (wxTheBitmapList) wxTheBitmapList->DeleteObject(this);
+ if (wxTheBitmapList) wxTheBitmapList->DeleteObject(this);
}
wxBitmap& wxBitmap::operator = ( const wxBitmap& bmp )
{
- if (*this == bmp) return (*this);
- Ref( bmp );
- return *this;
+ if (*this == bmp) return (*this);
+ Ref( bmp );
+ return *this;
}
bool wxBitmap::operator == ( const wxBitmap& bmp )
{
- return m_refData == bmp.m_refData;
+ return m_refData == bmp.m_refData;
}
bool wxBitmap::operator != ( const wxBitmap& bmp )
{
- return m_refData != bmp.m_refData;
+ return m_refData != bmp.m_refData;
}
bool wxBitmap::Ok(void) const
{
- return (m_refData != NULL);
+ return (m_refData != NULL);
}
int wxBitmap::GetHeight(void) const
{
- if (!Ok())
- {
- wxFAIL_MSG( "invalid bitmap" );
- return -1;
- }
+ if (!Ok())
+ {
+ wxFAIL_MSG( "invalid bitmap" );
+ return -1;
+ }
- return M_BMPDATA->m_height;
+ return M_BMPDATA->m_height;
}
int wxBitmap::GetWidth(void) const
{
- if (!Ok())
- {
- wxFAIL_MSG( "invalid bitmap" );
- return -1;
- }
+ if (!Ok())
+ {
+ wxFAIL_MSG( "invalid bitmap" );
+ return -1;
+ }
- return M_BMPDATA->m_width;
+ return M_BMPDATA->m_width;
}
int wxBitmap::GetDepth(void) const
{
- if (!Ok())
- {
- wxFAIL_MSG( "invalid bitmap" );
- return -1;
- }
+ if (!Ok())
+ {
+ wxFAIL_MSG( "invalid bitmap" );
+ return -1;
+ }
- return M_BMPDATA->m_bpp;
+ return M_BMPDATA->m_bpp;
}
void wxBitmap::SetHeight( int height )
{
- if (!Ok()) return;
+ if (!Ok()) return;
- wxFAIL_MSG( "wxBitmap::SetHeight not implemented" );
+ wxFAIL_MSG( "wxBitmap::SetHeight not implemented" );
- M_BMPDATA->m_height = height;
+ M_BMPDATA->m_height = height;
}
void wxBitmap::SetWidth( int width )
{
- if (!Ok()) return;
+ if (!Ok()) return;
- wxFAIL_MSG( "wxBitmap::SetWidth not implemented" );
+ wxFAIL_MSG( "wxBitmap::SetWidth not implemented" );
- M_BMPDATA->m_width = width;
+ M_BMPDATA->m_width = width;
}
void wxBitmap::SetDepth( int depth )
{
- if (!Ok()) return;
+ if (!Ok()) return;
- wxFAIL_MSG( "wxBitmap::SetDepth not implemented" );
+ wxFAIL_MSG( "wxBitmap::SetDepth not implemented" );
- M_BMPDATA->m_bpp = depth;
+ M_BMPDATA->m_bpp = depth;
}
wxMask *wxBitmap::GetMask(void) const
{
- if (!Ok())
- {
- wxFAIL_MSG( "invalid bitmap" );
- return (wxMask *) NULL;
- }
+ if (!Ok())
+ {
+ wxFAIL_MSG( "invalid bitmap" );
+ return (wxMask *) NULL;
+ }
- return M_BMPDATA->m_mask;
+ return M_BMPDATA->m_mask;
}
void wxBitmap::SetMask( wxMask *mask )
{
- if (!Ok())
- {
- wxFAIL_MSG( "invalid bitmap" );
- return;
- }
+ if (!Ok())
+ {
+ wxFAIL_MSG( "invalid bitmap" );
+ return;
+ }
- if (M_BMPDATA->m_mask) delete M_BMPDATA->m_mask;
+ if (M_BMPDATA->m_mask) delete M_BMPDATA->m_mask;
- M_BMPDATA->m_mask = mask;
+ M_BMPDATA->m_mask = mask;
}
-bool wxBitmap::SaveFile( const wxString &WXUNUSED(name), int WXUNUSED(type),
- wxPalette *WXUNUSED(palette) )
+bool wxBitmap::SaveFile( const wxString &name, int type, wxPalette *WXUNUSED(palette) )
{
- if (!Ok())
- {
- wxFAIL_MSG( "invalid bitmap" );
- return FALSE;
- }
+ if (!Ok())
+ {
+ wxFAIL_MSG( "invalid bitmap" );
+ return FALSE;
+ }
- return FALSE;
+ if (type == wxBITMAP_TYPE_PNG)
+ {
+ wxImage image = ConvertToImage();
+ if (image.Ok()) return image.SaveFile( name, type );
+ }
+
+ return FALSE;
}
-bool wxBitmap::LoadFile( const wxString &WXUNUSED(name), int WXUNUSED(type) )
+bool wxBitmap::LoadFile( const wxString &name, int type )
{
- if (!Ok())
- {
- wxFAIL_MSG( "invalid bitmap" );
- return FALSE;
- }
+ UnRef();
+
+ if (!wxFileExists(name)) return FALSE;
+
+ if (type == wxBITMAP_TYPE_XPM)
+ {
+ m_refData = new wxBitmapRefData();
+
+ GdkBitmap *mask = (GdkBitmap*) NULL;
+ GdkWindow *parent = (GdkWindow*) &gdk_root_parent;
- return FALSE;
+ M_BMPDATA->m_pixmap = gdk_pixmap_create_from_xpm( parent, &mask, NULL, name );
+
+ if (mask)
+ {
+ M_BMPDATA->m_mask = new wxMask();
+ M_BMPDATA->m_mask->m_bitmap = mask;
+ }
+
+ gdk_window_get_size( M_BMPDATA->m_pixmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) );
+ M_BMPDATA->m_bpp = gdk_window_get_visual( parent )->depth;
+ }
+ else if (type == wxBITMAP_TYPE_PNG)
+ {
+ wxImage image;
+ image.LoadFile( name, type );
+ if (image.Ok()) *this = wxBitmap( image );
+ }
+ else if (type == wxBITMAP_TYPE_BMP)
+ {
+ wxImage image;
+ image.LoadFile( name, type );
+ if (image.Ok()) *this = wxBitmap( image );
+ }
+ else
+ return FALSE;
+
+ return TRUE;
}
wxPalette *wxBitmap::GetPalette(void) const
{
- if (!Ok()) return (wxPalette *) NULL;
- return M_BMPDATA->m_palette;
+ if (!Ok()) return (wxPalette *) NULL;
+ return M_BMPDATA->m_palette;
}
GdkPixmap *wxBitmap::GetPixmap(void) const
{
- if (!Ok())
- {
- wxFAIL_MSG( "invalid bitmap" );
- return (GdkPixmap *) NULL;
- }
+ if (!Ok())
+ {
+ wxFAIL_MSG( "invalid bitmap" );
+ return (GdkPixmap *) NULL;
+ }
- return M_BMPDATA->m_pixmap;
+ return M_BMPDATA->m_pixmap;
}
GdkBitmap *wxBitmap::GetBitmap(void) const
{
- if (!Ok())
- {
- wxFAIL_MSG( "invalid bitmap" );
- return (GdkBitmap *) NULL;
- }
+ if (!Ok())
+ {
+ wxFAIL_MSG( "invalid bitmap" );
+ return (GdkBitmap *) NULL;
+ }
- return M_BMPDATA->m_bitmap;
+ return M_BMPDATA->m_bitmap;
}
wxBitmap::wxBitmap( const wxImage &image )
{
- if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
+ if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
- if (!image.Ok()) return;
+ if (!image.Ok()) return;
- m_refData = new wxBitmapRefData();
+ m_refData = new wxBitmapRefData();
- M_BMPDATA->m_height = image.GetHeight();
- M_BMPDATA->m_width = image.GetWidth();
- int width = image.GetWidth();
- int height = image.GetHeight();
+ M_BMPDATA->m_height = image.GetHeight();
+ M_BMPDATA->m_width = image.GetWidth();
+ int width = image.GetWidth();
+ int height = image.GetHeight();
- // Create picture
+ // Create picture
- GdkImage *data_image =
- gdk_image_new( GDK_IMAGE_FASTEST, gdk_visual_get_system(), width, height );
+ GdkImage *data_image =
+ gdk_image_new( GDK_IMAGE_FASTEST, gdk_visual_get_system(), width, height );
- M_BMPDATA->m_pixmap =
- gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, -1 );
+ M_BMPDATA->m_pixmap =
+ gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, -1 );
- // Create mask
+ // Create mask
- GdkImage *mask_image = (GdkImage*) NULL;
+ GdkImage *mask_image = (GdkImage*) NULL;
- if (image.HasMask())
- {
- unsigned char *mask_data = (unsigned char*)malloc( ((width >> 3)+8) * height );
+ if (image.HasMask())
+ {
+ unsigned char *mask_data = (unsigned char*)malloc( ((width >> 3)+8) * height );
- mask_image = gdk_image_new_bitmap( gdk_visual_get_system(), mask_data, width, height );
+ mask_image = gdk_image_new_bitmap( gdk_visual_get_system(), mask_data, width, height );
- M_BMPDATA->m_mask = new wxMask();
- M_BMPDATA->m_mask->m_bitmap = gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, 1 );
- }
+ M_BMPDATA->m_mask = new wxMask();
+ M_BMPDATA->m_mask->m_bitmap = gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, 1 );
+ }
- // Retrieve depth
+ // Retrieve depth
- M_BMPDATA->m_bpp = data_image->depth;
+ M_BMPDATA->m_bpp = data_image->depth;
- int render_depth = 8;
- if (M_BMPDATA->m_bpp > 8) render_depth = M_BMPDATA->m_bpp;
+ int render_depth = 8;
+ if (M_BMPDATA->m_bpp > 8) render_depth = M_BMPDATA->m_bpp;
- // Render
+ // Render
- enum byte_order { RGB, RBG, BRG, BGR, GRB, GBR };
- byte_order b_o;
+ enum byte_order { RGB, RBG, BRG, BGR, GRB, GBR };
+ byte_order b_o = RGB;
- if (render_depth >= 24)
- {
- GdkVisual *visual = gdk_visual_get_system();
- if ((visual->red_mask > visual->green_mask) && (visual->green_mask > visual->blue_mask)) b_o = RGB;
- else if ((visual->red_mask > visual->blue_mask) && (visual->blue_mask > visual->green_mask)) b_o = RGB;
- else if ((visual->blue_mask > visual->red_mask) && (visual->red_mask > visual->green_mask)) b_o = BRG;
- else if ((visual->blue_mask > visual->green_mask) && (visual->green_mask > visual->red_mask)) b_o = BGR;
- else if ((visual->green_mask > visual->red_mask) && (visual->red_mask > visual->blue_mask)) b_o = GRB;
- else if ((visual->green_mask > visual->blue_mask) && (visual->blue_mask > visual->red_mask)) b_o = GBR;
- }
+ if (render_depth >= 24)
+ {
+ GdkVisual *visual = gdk_visual_get_system();
+ if ((visual->red_mask > visual->green_mask) && (visual->green_mask > visual->blue_mask)) b_o = RGB;
+ else if ((visual->red_mask > visual->blue_mask) && (visual->blue_mask > visual->green_mask)) b_o = RGB;
+ else if ((visual->blue_mask > visual->red_mask) && (visual->red_mask > visual->green_mask)) b_o = BRG;
+ else if ((visual->blue_mask > visual->green_mask) && (visual->green_mask > visual->red_mask)) b_o = BGR;
+ else if ((visual->green_mask > visual->red_mask) && (visual->red_mask > visual->blue_mask)) b_o = GRB;
+ else if ((visual->green_mask > visual->blue_mask) && (visual->blue_mask > visual->red_mask)) b_o = GBR;
+ }
- int r_mask = image.GetMaskRed();
- int g_mask = image.GetMaskGreen();
- int b_mask = image.GetMaskBlue();
+ int r_mask = image.GetMaskRed();
+ int g_mask = image.GetMaskGreen();
+ int b_mask = image.GetMaskBlue();
- unsigned char* data = image.GetData();
+ unsigned char* data = image.GetData();
- int index = 0;
- for (int y = 0; y < height; y++)
- for (int x = 0; x < width; x++)
- {
- int r = data[index];
- index++;
- int g = data[index];
- index++;
- int b = data[index];
- index++;
+ int index = 0;
+ for (int y = 0; y < height; y++)
+ {
+ for (int x = 0; x < width; x++)
+ {
+ int r = data[index];
+ index++;
+ int g = data[index];
+ index++;
+ int b = data[index];
+ index++;
- if (image.HasMask())
- {
- if ((r == r_mask) && (b = b_mask) && (g = g_mask))
- gdk_image_put_pixel( mask_image, x, y, 0 );
- else
- gdk_image_put_pixel( mask_image, x, y, 1 );
- }
+ if (image.HasMask())
+ {
+ if ((r == r_mask) && (b = b_mask) && (g = g_mask))
+ gdk_image_put_pixel( mask_image, x, y, 0 );
+ else
+ gdk_image_put_pixel( mask_image, x, y, 1 );
+ }
- switch (render_depth)
- {
- case 8:
- {
- GdkColormap *cmap = gtk_widget_get_default_colormap();
- GdkColor *colors = cmap->colors;
- int max = 3 * (65536);
- int index = -1;
-
- for (int i = 0; i < cmap->size; i++)
- {
- int rdiff = (r << 8) - colors[i].red;
- int gdiff = (g << 8) - colors[i].green;
- int bdiff = (b << 8) - colors[i].blue;
- int sum = ABS (rdiff) + ABS (gdiff) + ABS (bdiff);
- if (sum < max) { index = i; max = sum; }
- }
+ switch (render_depth)
+ {
+ case 8:
+ {
+ GdkColormap *cmap = gtk_widget_get_default_colormap();
+ GdkColor *colors = cmap->colors;
+ int max = 3 * (65536);
+ int index = -1;
+
+ for (int i = 0; i < cmap->size; i++)
+ {
+ int rdiff = (r << 8) - colors[i].red;
+ int gdiff = (g << 8) - colors[i].green;
+ int bdiff = (b << 8) - colors[i].blue;
+ int sum = ABS (rdiff) + ABS (gdiff) + ABS (bdiff);
+ if (sum < max) { index = i; max = sum; }
+ }
- gdk_image_put_pixel( data_image, x, y, index );
+ gdk_image_put_pixel( data_image, x, y, index );
- break;
- }
- case 15:
- {
- guint32 pixel = ((r & 0xf8) << 7) | ((g & 0xf8) << 2) | ((b & 0xf8) >> 3);
- gdk_image_put_pixel( data_image, x, y, pixel );
- break;
- }
- case 16:
- {
- guint32 pixel = ((r & 0xf8) << 8) | ((g & 0xfc) << 3) | ((b & 0xf8) >> 3);
- gdk_image_put_pixel( data_image, x, y, pixel );
- break;
- }
- case 32:
- case 24:
- {
- guint32 pixel = 0;
- switch (b_o)
- {
- case RGB: pixel = (r << 16) | (g << 8) | b; break;
- case RBG: pixel = (r << 16) | (b << 8) | g; break;
- case BRG: pixel = (b << 16) | (r << 8) | g; break;
- case BGR: pixel = (b << 16) | (g << 8) | r; break;
- case GRB: pixel = (g << 16) | (r << 8) | b; break;
- case GBR: pixel = (g << 16) | (b << 8) | r; break;
+ break;
+ }
+ case 15:
+ {
+ guint32 pixel = ((r & 0xf8) << 7) | ((g & 0xf8) << 2) | ((b & 0xf8) >> 3);
+ gdk_image_put_pixel( data_image, x, y, pixel );
+ break;
+ }
+ case 16:
+ {
+ guint32 pixel = ((r & 0xf8) << 8) | ((g & 0xfc) << 3) | ((b & 0xf8) >> 3);
+ gdk_image_put_pixel( data_image, x, y, pixel );
+ break;
+ }
+ case 32:
+ case 24:
+ {
+ guint32 pixel = 0;
+ switch (b_o)
+ {
+ case RGB: pixel = (r << 16) | (g << 8) | b; break;
+ case RBG: pixel = (r << 16) | (b << 8) | g; break;
+ case BRG: pixel = (b << 16) | (r << 8) | g; break;
+ case BGR: pixel = (b << 16) | (g << 8) | r; break;
+ case GRB: pixel = (g << 16) | (r << 8) | b; break;
+ case GBR: pixel = (g << 16) | (b << 8) | r; break;
+ }
+ gdk_image_put_pixel( data_image, x, y, pixel );
+ }
+ default: break;
}
- gdk_image_put_pixel( data_image, x, y, pixel );
- }
- default: break;
- }
- }
-
- // Blit picture
+ } // for
+ } // for
+
+ // Blit picture
- GdkGC *data_gc = gdk_gc_new( M_BMPDATA->m_pixmap );
+ GdkGC *data_gc = gdk_gc_new( M_BMPDATA->m_pixmap );
- gdk_draw_image( M_BMPDATA->m_pixmap, data_gc, data_image, 0, 0, 0, 0, width, height );
+ gdk_draw_image( M_BMPDATA->m_pixmap, data_gc, data_image, 0, 0, 0, 0, width, height );
- gdk_image_destroy( data_image );
- gdk_gc_unref( data_gc );
+ gdk_image_destroy( data_image );
+ gdk_gc_unref( data_gc );
- // Blit mask
+ // Blit mask
- if (image.HasMask())
- {
- GdkGC *mask_gc = gdk_gc_new( M_BMPDATA->m_mask->m_bitmap );
+ if (image.HasMask())
+ {
+ GdkGC *mask_gc = gdk_gc_new( M_BMPDATA->m_mask->m_bitmap );
- gdk_draw_image( M_BMPDATA->m_mask->m_bitmap, mask_gc, mask_image, 0, 0, 0, 0, width, height );
+ gdk_draw_image( M_BMPDATA->m_mask->m_bitmap, mask_gc, mask_image, 0, 0, 0, 0, width, height );
- gdk_image_destroy( mask_image );
- gdk_gc_unref( mask_gc );
- }
-
+ gdk_image_destroy( mask_image );
+ gdk_gc_unref( mask_gc );
+ }
}
wxImage wxBitmap::ConvertToImage() const
{
- wxImage image;
+ wxImage image;
- if (!Ok())
- {
- wxFAIL_MSG( "invalid bitmap" );
- return image;
- }
+ if (!Ok())
+ {
+ wxFAIL_MSG( "invalid bitmap" );
+ return image;
+ }
- GdkImage *gdk_image = gdk_image_get( M_BMPDATA->m_pixmap, 0, 0, M_BMPDATA->m_width, M_BMPDATA->m_height );
+ GdkImage *gdk_image = gdk_image_get( M_BMPDATA->m_pixmap, 0, 0, M_BMPDATA->m_width, M_BMPDATA->m_height );
- if (!gdk_image) return image;
+ if (!gdk_image) return image;
- image.Create( M_BMPDATA->m_width, M_BMPDATA->m_height );
- char unsigned *data = image.GetData();
+ image.Create( M_BMPDATA->m_width, M_BMPDATA->m_height );
+ char unsigned *data = image.GetData();
-
- GdkVisual *visual = gdk_window_get_visual( M_BMPDATA->m_pixmap );
- if (visual == NULL) visual = gdk_window_get_visual( (GdkWindow*) &gdk_root_parent );
- int bpp = visual->depth;
+ GdkVisual *visual = gdk_window_get_visual( M_BMPDATA->m_pixmap );
+ if (visual == NULL) visual = gdk_window_get_visual( (GdkWindow*) &gdk_root_parent );
+ int bpp = visual->depth;
- GdkColormap *cmap = gtk_widget_get_default_colormap();
+ GdkColormap *cmap = gtk_widget_get_default_colormap();
- long pos = 0;
- for (int j = 0; j < M_BMPDATA->m_height; j++)
- {
- for (int i = 0; i < M_BMPDATA->m_width; i++)
+ long pos = 0;
+ for (int j = 0; j < M_BMPDATA->m_height; j++)
{
- int pixel = gdk_image_get_pixel( gdk_image, i, j );
- if (bpp <= 8)
- {
- data[pos] = cmap->colors[pixel].red >> 8;
- data[pos+1] = cmap->colors[pixel].green >> 8;
- data[pos+2] = cmap->colors[pixel].blue >> 8;
- } else if (bpp == 15)
- {
- data[pos] = (pixel >> 7) & 0xf8;
- data[pos+1] = (pixel >> 2) & 0xf8;
- data[pos+2] = (pixel << 3) & 0xf8;
- } else if (bpp == 16)
- {
- data[pos] = (pixel >> 8) & 0xf8;
- data[pos+1] = (pixel >> 3) & 0xfc;
- data[pos+2] = (pixel << 3) & 0xf8;
- } else
- {
- data[pos] = (pixel >> 16) & 0xff;
- data[pos+1] = (pixel >> 8) & 0xff;
- data[pos+2] = pixel & 0xff;
- }
+ for (int i = 0; i < M_BMPDATA->m_width; i++)
+ {
+ int pixel = gdk_image_get_pixel( gdk_image, i, j );
+ if (bpp <= 8)
+ {
+ data[pos] = cmap->colors[pixel].red >> 8;
+ data[pos+1] = cmap->colors[pixel].green >> 8;
+ data[pos+2] = cmap->colors[pixel].blue >> 8;
+ } else if (bpp == 15)
+ {
+ data[pos] = (pixel >> 7) & 0xf8;
+ data[pos+1] = (pixel >> 2) & 0xf8;
+ data[pos+2] = (pixel << 3) & 0xf8;
+ } else if (bpp == 16)
+ {
+ data[pos] = (pixel >> 8) & 0xf8;
+ data[pos+1] = (pixel >> 3) & 0xfc;
+ data[pos+2] = (pixel << 3) & 0xf8;
+ } else
+ {
+ data[pos] = (pixel >> 16) & 0xff;
+ data[pos+1] = (pixel >> 8) & 0xff;
+ data[pos+2] = pixel & 0xff;
+ }
- pos += 3;
+ pos += 3;
+ }
}
- }
- gdk_image_destroy( gdk_image );
+ gdk_image_destroy( gdk_image );
- return image;
+ return image;
}
IMPLEMENT_DYNAMIC_CLASS(wxButton,wxControl)
-wxButton::wxButton(void)
+wxButton::wxButton()
{
}
+wxButton::~wxButton()
+{
+ if (m_clientData) delete m_clientData;
+}
+
bool wxButton::Create( wxWindow *parent, wxWindowID id, const wxString &label,
const wxPoint &pos, const wxSize &size,
long style, const wxValidator& validator, const wxString &name )
{
+ m_clientData = (wxClientData*) NULL;
m_needParent = TRUE;
wxSize newSize = size;
gtk_widget_set_style( GTK_BUTTON(m_widget)->child, m_widgetStyle );
}
+
IMPLEMENT_DYNAMIC_CLASS(wxChoice,wxControl)
-wxChoice::wxChoice(void)
+wxChoice::wxChoice()
{
}
bool wxChoice::Create( wxWindow *parent, wxWindowID id,
- const wxPoint &pos, const wxSize &size,
- int n, const wxString choices[],
- long style, const wxValidator& validator, const wxString &name )
+ const wxPoint &pos, const wxSize &size,
+ int n, const wxString choices[],
+ long style, const wxValidator& validator, const wxString &name )
{
- m_needParent = TRUE;
+ m_needParent = TRUE;
- PreCreation( parent, id, pos, size, style, name );
+ PreCreation( parent, id, pos, size, style, name );
- SetValidator( validator );
+ SetValidator( validator );
- m_widget = gtk_option_menu_new();
+ m_widget = gtk_option_menu_new();
- wxSize newSize = size;
- if (newSize.x == -1) newSize.x = 80;
- if (newSize.y == -1) newSize.y = 26;
- SetSize( newSize.x, newSize.y );
+ wxSize newSize = size;
+ if (newSize.x == -1) newSize.x = 80;
+ if (newSize.y == -1) newSize.y = 26;
+ SetSize( newSize.x, newSize.y );
- GtkWidget *menu = gtk_menu_new();
+ GtkWidget *menu = gtk_menu_new();
- for (int i = 0; i < n; i++)
- {
- GtkWidget *item = gtk_menu_item_new_with_label( choices[i] );
- gtk_menu_append( GTK_MENU(menu), item );
+ for (int i = 0; i < n; i++)
+ {
+ m_clientDataList.Append( (wxObject*) NULL );
- gtk_widget_realize( item );
- gtk_widget_realize( GTK_BIN(item)->child );
+ GtkWidget *item = gtk_menu_item_new_with_label( choices[i] );
+ gtk_menu_append( GTK_MENU(menu), item );
- gtk_widget_show( item );
+ gtk_widget_realize( item );
+ gtk_widget_realize( GTK_BIN(item)->child );
- gtk_signal_connect( GTK_OBJECT( item ), "activate",
- GTK_SIGNAL_FUNC(gtk_choice_clicked_callback), (gpointer*)this );
- }
- gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu );
+ gtk_widget_show( item );
+
+ gtk_signal_connect( GTK_OBJECT( item ), "activate",
+ GTK_SIGNAL_FUNC(gtk_choice_clicked_callback), (gpointer*)this );
+ }
+ gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu );
- m_parent->AddChild( this );
+ m_parent->AddChild( this );
- (m_parent->m_insertCallback)( m_parent, this );
+ (m_parent->m_insertCallback)( m_parent, this );
- PostCreation();
+ PostCreation();
- SetBackgroundColour( parent->GetBackgroundColour() );
- SetForegroundColour( parent->GetForegroundColour() );
+ SetBackgroundColour( parent->GetBackgroundColour() );
+ SetForegroundColour( parent->GetForegroundColour() );
- Show( TRUE );
+ Show( TRUE );
- return TRUE;
+ return TRUE;
}
+wxChoice::~wxChoice()
+{
+ wxNode *node = m_clientDataList.First();
+ while (node)
+ {
+ wxClientData *cd = (wxClientData*)node->Data();
+ if (cd) delete cd;
+ node = node->Next();
+ }
+ m_clientDataList.Clear();
+}
+
+void wxChoice::AppendCommon( const wxString &item )
+{
+ wxCHECK_RET( m_widget != NULL, "invalid choice" );
+
+ GtkWidget *menu = gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) );
+ GtkWidget *menu_item = gtk_menu_item_new_with_label( item );
+
+ gtk_menu_append( GTK_MENU(menu), menu_item );
+
+ gtk_widget_realize( menu_item );
+ gtk_widget_realize( GTK_BIN(menu_item)->child );
+
+ if (m_widgetStyle) ApplyWidgetStyle();
+
+ gtk_signal_connect( GTK_OBJECT( menu_item ), "activate",
+ GTK_SIGNAL_FUNC(gtk_choice_clicked_callback), (gpointer*)this );
+
+ gtk_widget_show( menu_item );
+}
+
void wxChoice::Append( const wxString &item )
{
- wxCHECK_RET( m_widget != NULL, "invalid choice" );
+ m_clientDataList.Append( (wxObject*)NULL );
+
+ AppendCommon( item );
+}
+
+void wxChoice::Append( const wxString &item, void *clientData )
+{
+ if (clientData)
+ m_clientDataList.Append( (wxObject*) new wxVoidClientData( clientData ) );
+ else
+ m_clientDataList.Append( (wxObject*)NULL );
+
+ AppendCommon( item );
+}
+
+void wxChoice::Append( const wxString &item, wxClientData *clientData )
+{
+ m_clientDataList.Append( (wxObject*) clientData );
+
+ AppendCommon( item );
+}
- GtkWidget *menu = gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) );
- GtkWidget *menu_item = gtk_menu_item_new_with_label( item );
+void wxChoice::SetClientData( int n, void* clientData )
+{
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- gtk_menu_append( GTK_MENU(menu), menu_item );
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return;
- gtk_widget_realize( menu_item );
- gtk_widget_realize( GTK_BIN(menu_item)->child );
+ wxClientData *cd = (wxClientData*) node->Data();
+ if (cd) delete cd;
- if (m_widgetStyle) ApplyWidgetStyle();
+ if (clientData)
+ node->SetData( (wxObject*) new wxVoidClientData(clientData) );
+ else
+ node->SetData( (wxObject*) NULL );
+}
+
+void* wxChoice::GetClientData( int n )
+{
+ wxCHECK_MSG( m_widget != NULL, NULL, "invalid combobox" );
- gtk_signal_connect( GTK_OBJECT( menu_item ), "activate",
- GTK_SIGNAL_FUNC(gtk_choice_clicked_callback), (gpointer*)this );
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return NULL;
- gtk_widget_show( menu_item );
+ wxVoidClientData *cd = (wxVoidClientData*) node->Data();
+ if (cd)
+ return cd->GetData();
+ else
+ return (void*) NULL;
}
+
+void wxChoice::SetClientObject( int n, wxClientData* clientData )
+{
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return;
+
+ wxClientData *cd = (wxClientData*) node->Data();
+ if (cd) delete cd;
+
+ node->SetData( (wxObject*) clientData );
+}
+
+wxClientData* wxChoice::GetClientObject( int n )
+{
+ wxCHECK_MSG( m_widget != NULL, (wxClientData*)NULL, "invalid combobox" );
+
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return (wxClientData*) NULL;
+
+ return (wxClientData*) node->Data();
+}
+
-void wxChoice::Clear(void)
+void wxChoice::Clear()
{
- wxCHECK_RET( m_widget != NULL, "invalid choice" );
+ wxCHECK_RET( m_widget != NULL, "invalid choice" );
- gtk_option_menu_remove_menu( GTK_OPTION_MENU(m_widget) );
- GtkWidget *menu = gtk_menu_new();
- gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu );
+ gtk_option_menu_remove_menu( GTK_OPTION_MENU(m_widget) );
+ GtkWidget *menu = gtk_menu_new();
+ gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu );
+
+ wxNode *node = m_clientDataList.First();
+ while (node)
+ {
+ wxClientData *cd = (wxClientData*)node->Data();
+ if (cd) delete cd;
+ node = node->Next();
+ }
+ m_clientDataList.Clear();
}
void wxChoice::Delete( int WXUNUSED(n) )
{
- wxFAIL_MSG( "wxChoice:Delete not implemented" );
+ wxFAIL_MSG( "wxChoice:Delete not implemented" );
}
int wxChoice::FindString( const wxString &string ) const
{
- wxCHECK_MSG( m_widget != NULL, -1, "invalid choice" );
-
- // If you read this code once and you think you understand
- // it, then you are very wrong. Robert Roebling.
-
- GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) );
- int count = 0;
- GList *child = menu_shell->children;
- while (child)
- {
- GtkBin *bin = GTK_BIN( child->data );
- GtkLabel *label = (GtkLabel *) NULL;
- if (bin->child) label = GTK_LABEL(bin->child);
- if (!label) label = GTK_LABEL( GTK_BUTTON(m_widget)->child );
+ wxCHECK_MSG( m_widget != NULL, -1, "invalid choice" );
+
+ // If you read this code once and you think you understand
+ // it, then you are very wrong. Robert Roebling.
+
+ GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) );
+ int count = 0;
+ GList *child = menu_shell->children;
+ while (child)
+ {
+ GtkBin *bin = GTK_BIN( child->data );
+ GtkLabel *label = (GtkLabel *) NULL;
+ if (bin->child) label = GTK_LABEL(bin->child);
+ if (!label) label = GTK_LABEL( GTK_BUTTON(m_widget)->child );
- wxASSERT_MSG( label != NULL , "wxChoice: invalid label" );
+ wxASSERT_MSG( label != NULL , "wxChoice: invalid label" );
- if (string == label->label) return count;
- child = child->next;
- count++;
- }
+ if (string == label->label) return count;
+ child = child->next;
+ count++;
+ }
- wxFAIL_MSG( "wxChoice: string not found" );
+ wxFAIL_MSG( "wxChoice: string not found" );
- return -1;
+ return -1;
}
-int wxChoice::GetColumns(void) const
+int wxChoice::GetColumns() const
{
- return 1;
+ return 1;
}
-int wxChoice::GetSelection(void)
+int wxChoice::GetSelection()
{
- wxCHECK_MSG( m_widget != NULL, -1, "invalid choice" );
-
- GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) );
- int count = 0;
- GList *child = menu_shell->children;
- while (child)
- {
- GtkBin *bin = GTK_BIN( child->data );
- if (!bin->child) return count;
- child = child->next;
- count++;
- }
-
- wxFAIL_MSG( "wxChoice: no selection" );
-
- return -1;
+ wxCHECK_MSG( m_widget != NULL, -1, "invalid choice" );
+
+ GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) );
+ int count = 0;
+ GList *child = menu_shell->children;
+ while (child)
+ {
+ GtkBin *bin = GTK_BIN( child->data );
+ if (!bin->child) return count;
+ child = child->next;
+ count++;
+ }
+
+ wxFAIL_MSG( "wxChoice: no selection" );
+
+ return -1;
}
wxString wxChoice::GetString( int n ) const
{
- wxCHECK_MSG( m_widget != NULL, "", "invalid choice" );
-
- GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) );
- int count = 0;
- GList *child = menu_shell->children;
- while (child)
- {
- GtkBin *bin = GTK_BIN( child->data );
- if (count == n)
+ wxCHECK_MSG( m_widget != NULL, "", "invalid choice" );
+
+ GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) );
+ int count = 0;
+ GList *child = menu_shell->children;
+ while (child)
{
- GtkLabel *label = (GtkLabel *) NULL;
- if (bin->child) label = GTK_LABEL(bin->child);
- if (!label) label = GTK_LABEL( GTK_BUTTON(m_widget)->child );
+ GtkBin *bin = GTK_BIN( child->data );
+ if (count == n)
+ {
+ GtkLabel *label = (GtkLabel *) NULL;
+ if (bin->child) label = GTK_LABEL(bin->child);
+ if (!label) label = GTK_LABEL( GTK_BUTTON(m_widget)->child );
- wxASSERT_MSG( label != NULL , "wxChoice: invalid label" );
+ wxASSERT_MSG( label != NULL , "wxChoice: invalid label" );
- return label->label;
+ return label->label;
+ }
+ child = child->next;
+ count++;
}
- child = child->next;
- count++;
- }
- wxFAIL_MSG( "wxChoice: string not found" );
+ wxFAIL_MSG( "wxChoice: string not found" );
- return "";
+ return "";
}
-wxString wxChoice::GetStringSelection(void) const
+wxString wxChoice::GetStringSelection() const
{
- wxCHECK_MSG( m_widget != NULL, "", "invalid choice" );
+ wxCHECK_MSG( m_widget != NULL, "", "invalid choice" );
- GtkLabel *label = GTK_LABEL( GTK_BUTTON(m_widget)->child );
+ GtkLabel *label = GTK_LABEL( GTK_BUTTON(m_widget)->child );
- wxASSERT_MSG( label != NULL , "wxChoice: invalid label" );
+ wxASSERT_MSG( label != NULL , "wxChoice: invalid label" );
- return label->label;
+ return label->label;
}
-int wxChoice::Number(void) const
+int wxChoice::Number() const
{
- wxCHECK_MSG( m_widget != NULL, 0, "invalid choice" );
-
- GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) );
- int count = 0;
- GList *child = menu_shell->children;
- while (child)
- {
- count++;
- child = child->next;
- }
- return count;
+ wxCHECK_MSG( m_widget != NULL, 0, "invalid choice" );
+
+ GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) );
+ int count = 0;
+ GList *child = menu_shell->children;
+ while (child)
+ {
+ count++;
+ child = child->next;
+ }
+ return count;
}
void wxChoice::SetColumns( int WXUNUSED(n) )
void wxChoice::SetSelection( int n )
{
- wxCHECK_RET( m_widget != NULL, "invalid choice" );
+ wxCHECK_RET( m_widget != NULL, "invalid choice" );
- int tmp = n;
- gtk_option_menu_set_history( GTK_OPTION_MENU(m_widget), (gint)tmp );
+ int tmp = n;
+ gtk_option_menu_set_history( GTK_OPTION_MENU(m_widget), (gint)tmp );
- gtk_choice_clicked_callback( (GtkWidget *) NULL, this );
+ gtk_choice_clicked_callback( (GtkWidget *) NULL, this );
}
void wxChoice::SetStringSelection( const wxString &string )
{
- wxCHECK_RET( m_widget != NULL, "invalid choice" );
+ wxCHECK_RET( m_widget != NULL, "invalid choice" );
- int n = FindString( string );
- if (n != -1) SetSelection( n );
+ int n = FindString( string );
+ if (n != -1) SetSelection( n );
}
void wxChoice::ApplyWidgetStyle()
{
- SetWidgetStyle();
+ SetWidgetStyle();
- GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) );
+ GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) );
- gtk_widget_set_style( m_widget, m_widgetStyle );
- gtk_widget_set_style( GTK_WIDGET( menu_shell ), m_widgetStyle );
+ gtk_widget_set_style( m_widget, m_widgetStyle );
+ gtk_widget_set_style( GTK_WIDGET( menu_shell ), m_widgetStyle );
- GList *child = menu_shell->children;
- while (child)
- {
- gtk_widget_set_style( GTK_WIDGET( child->data ), m_widgetStyle );
+ GList *child = menu_shell->children;
+ while (child)
+ {
+ gtk_widget_set_style( GTK_WIDGET( child->data ), m_widgetStyle );
- GtkBin *bin = GTK_BIN( child->data );
- GtkWidget *label = (GtkWidget *) NULL;
- if (bin->child) label = bin->child;
- if (!label) label = GTK_BUTTON(m_widget)->child;
+ GtkBin *bin = GTK_BIN( child->data );
+ GtkWidget *label = (GtkWidget *) NULL;
+ if (bin->child) label = bin->child;
+ if (!label) label = GTK_BUTTON(m_widget)->child;
- gtk_widget_set_style( label, m_widgetStyle );
+ gtk_widget_set_style( label, m_widgetStyle );
- child = child->next;
- }
+ child = child->next;
+ }
}
wxClipboard *wxTheClipboard = (wxClipboard*) NULL;
+GdkAtom g_textAtom = 0;
+GdkAtom g_clipboardAtom = 0;
+
//-----------------------------------------------------------------------------
// functions
//-----------------------------------------------------------------------------
// "selection_received"
//-----------------------------------------------------------------------------
-/*
-static void selection_received( GtkWidget *widget, GtkSelectionData *selection_data, gpointer data )
+static void
+selection_received( GtkWidget *widget, GtkSelectionData *selection_data, gpointer data )
{
}
-*/
+
+//-----------------------------------------------------------------------------
+// "selection_clear"
+//-----------------------------------------------------------------------------
+
+static gint
+selection_clear( GtkWidget *widget, GdkEventSelection *event )
+{
+ /* The clipboard is no longer in our hands. We can delete the
+ * clipboard data. I hope I got that one right... */
+
+ if (!wxTheClipboard) return TRUE;
+
+ wxTheClipboard->SetData( (wxDataObject*) NULL );
+
+ return TRUE;
+}
+
+//-----------------------------------------------------------------------------
+// selection handler for supplying data
+//-----------------------------------------------------------------------------
+
+static void
+selection_handler( GtkWidget *WXUNUSED(widget), GtkSelectionData *selection_data, gpointer WXUNUSED(data) )
+{
+ if (!wxTheClipboard) return;
+
+ wxDataObject *data_object = wxTheClipboard->m_data;
+
+ if (!data_object) return;
+
+ if (data_object->GetDataSize() == 0) return;
+
+ gint len = data_object->GetDataSize();
+ guchar *bin_data = (guchar*) malloc( len );
+ data_object->GetDataHere( (void*)bin_data );
+
+ if (selection_data->target == GDK_SELECTION_TYPE_STRING)
+ {
+ gtk_selection_data_set(
+ selection_data, GDK_SELECTION_TYPE_STRING, 8*sizeof(gchar), bin_data, len );
+ }
+ else if (selection_data->target == g_textAtom)
+ {
+ gtk_selection_data_set(
+ selection_data, g_textAtom, 8*sizeof(gchar), bin_data, len );
+ }
+ free( bin_data );
+}
//-----------------------------------------------------------------------------
// wxClipboard
wxClipboard::wxClipboard()
{
- m_data = (wxDataObject*)NULL;
+ m_data = (wxDataObject*) NULL;
m_clipboardWidget = gtk_window_new( GTK_WINDOW_POPUP );
gtk_widget_realize( m_clipboardWidget );
+
+ gtk_signal_connect( GTK_OBJECT(m_clipboardWidget),
+ "selection_clear_event",
+ GTK_SIGNAL_FUNC( selection_clear ),
+ (gpointer) NULL );
+
+ if (!g_clipboardAtom) g_clipboardAtom = gdk_atom_intern( "CLIPBOARD", FALSE );
+ if (!g_textAtom) g_textAtom = gdk_atom_intern( "TEXT", FALSE );
}
wxClipboard::~wxClipboard()
{
- if (m_data) delete m_data;
+ /* As we have data we also own the clipboard. Once we no longer own
+ it, clear_selection is called which will set m_data to zero */
+
+ if (m_data)
+ {
+ delete m_data;
+ gtk_selection_owner_set( (GtkWidget*) NULL, GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME );
+ }
if (m_clipboardWidget) gtk_widget_destroy( m_clipboardWidget );
}
{
if (m_data) delete m_data;
m_data = data;
+ if (!m_data) return;
+
+ if (!gtk_selection_owner_set( m_clipboardWidget,
+ g_clipboardAtom,
+ GDK_CURRENT_TIME))
+ {
+ delete m_data;
+ m_data = (wxDataObject*) NULL;
+ return;
+ }
+
+ switch (m_data->GetPreferredFormat())
+ {
+/*
+ case wxDF_STRING:
+ gtk_selection_add_handler( m_clipboardWidget,
+ g_clipboardAtom,
+ GDK_TARGET_STRING,
+ selection_handler,
+ NULL );
+ break;
+*/
+ case wxDF_TEXT:
+ gtk_selection_add_handler( m_clipboardWidget,
+ g_clipboardAtom,
+ g_textAtom,
+ selection_handler,
+ NULL );
+ break;
+ default:
+ break;
+ }
}
void *wxClipboard::GetData( wxDataFormat format, size_t *length )
static void gtk_combo_clicked_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo )
{
- if (!combo->HasVMT()) return;
- if (g_blockEventsOnDrag) return;
+ if (!combo->HasVMT()) return;
+ if (g_blockEventsOnDrag) return;
- if (combo->m_alreadySent)
- {
- combo->m_alreadySent = FALSE;
- return;
- }
+ if (combo->m_alreadySent)
+ {
+ combo->m_alreadySent = FALSE;
+ return;
+ }
- combo->m_alreadySent = TRUE;
+ combo->m_alreadySent = TRUE;
- wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, combo->GetId());
- event.SetInt( combo->GetSelection() );
- wxString tmp( combo->GetStringSelection() );
- event.SetString( WXSTRINGCAST(tmp) );
- event.SetEventObject(combo);
- combo->GetEventHandler()->ProcessEvent(event);
+ wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, combo->GetId());
+ event.SetInt( combo->GetSelection() );
+ wxString tmp( combo->GetStringSelection() );
+ event.SetString( WXSTRINGCAST(tmp) );
+ event.SetEventObject(combo);
+ combo->GetEventHandler()->ProcessEvent(event);
}
//-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxComboBox,wxControl)
BEGIN_EVENT_TABLE(wxComboBox, wxControl)
- EVT_SIZE(wxComboBox::OnSize)
+ EVT_SIZE(wxComboBox::OnSize)
END_EVENT_TABLE()
-bool wxComboBox::Create(wxWindow *parent, wxWindowID id, const wxString& value,
- const wxPoint& pos, const wxSize& size,
- int n, const wxString choices[],
- long style, const wxValidator& validator, const wxString& name )
+bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value,
+ const wxPoint& pos, const wxSize& size,
+ int n, const wxString choices[],
+ long style, const wxValidator& validator,
+ const wxString& name )
{
- m_alreadySent = FALSE;
- m_needParent = TRUE;
+ m_alreadySent = FALSE;
+ m_needParent = TRUE;
- PreCreation( parent, id, pos, size, style, name );
+ PreCreation( parent, id, pos, size, style, name );
- SetValidator( validator );
+ SetValidator( validator );
- m_widget = gtk_combo_new();
+ m_widget = gtk_combo_new();
- wxSize newSize = size;
- if (newSize.x == -1) newSize.x = 100;
- if (newSize.y == -1) newSize.y = 26;
- SetSize( newSize.x, newSize.y );
+ wxSize newSize = size;
+ if (newSize.x == -1) newSize.x = 100;
+ if (newSize.y == -1) newSize.y = 26;
+ SetSize( newSize.x, newSize.y );
- GtkWidget *list = GTK_COMBO(m_widget)->list;
+ GtkWidget *list = GTK_COMBO(m_widget)->list;
- for (int i = 0; i < n; i++)
- {
- GtkWidget *list_item = gtk_list_item_new_with_label( choices[i] );
+ for (int i = 0; i < n; i++)
+ {
+ GtkWidget *list_item = gtk_list_item_new_with_label( choices[i] );
- m_clientData.Append( (wxObject*)NULL );
+ m_clientDataList.Append( (wxObject*)NULL );
- gtk_container_add( GTK_CONTAINER(list), list_item );
+ gtk_container_add( GTK_CONTAINER(list), list_item );
- gtk_widget_realize( list_item );
- gtk_widget_realize( GTK_BIN(list_item)->child );
+ gtk_widget_realize( list_item );
+ gtk_widget_realize( GTK_BIN(list_item)->child );
- gtk_widget_show( list_item );
+ gtk_widget_show( list_item );
- gtk_signal_connect( GTK_OBJECT(list_item), "select",
- GTK_SIGNAL_FUNC(gtk_combo_clicked_callback), (gpointer)this );
- }
+ gtk_signal_connect( GTK_OBJECT(list_item), "select",
+ GTK_SIGNAL_FUNC(gtk_combo_clicked_callback), (gpointer)this );
+ }
- m_parent->AddChild( this );
+ m_parent->AddChild( this );
- (m_parent->m_insertCallback)( m_parent, this );
+ (m_parent->m_insertCallback)( m_parent, this );
- PostCreation();
+ PostCreation();
- ConnectWidget( GTK_COMBO(m_widget)->button );
+ ConnectWidget( GTK_COMBO(m_widget)->button );
- if (!value.IsNull()) SetValue( value );
+ if (!value.IsNull()) SetValue( value );
- gtk_widget_realize( GTK_COMBO(m_widget)->list );
- gtk_widget_realize( GTK_COMBO(m_widget)->entry );
- gtk_widget_realize( GTK_COMBO(m_widget)->button );
+ gtk_widget_realize( GTK_COMBO(m_widget)->list );
+ gtk_widget_realize( GTK_COMBO(m_widget)->entry );
+ gtk_widget_realize( GTK_COMBO(m_widget)->button );
- SetBackgroundColour( parent->GetBackgroundColour() );
- SetForegroundColour( parent->GetForegroundColour() );
+ SetBackgroundColour( parent->GetBackgroundColour() );
+ SetForegroundColour( parent->GetForegroundColour() );
- Show( TRUE );
+ Show( TRUE );
- return TRUE;
+ return TRUE;
+}
+
+wxComboBox::~wxComboBox()
+{
+ wxNode *node = m_clientDataList.First();
+ while (node)
+ {
+ wxClientData *cd = (wxClientData*)node->Data();
+ if (cd) delete cd;
+ node = node->Next();
+ }
+ m_clientDataList.Clear();
}
-void wxComboBox::Clear(void)
+void wxComboBox::AppendCommon( const wxString &item )
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+
+ GtkWidget *list = GTK_COMBO(m_widget)->list;
+
+ GtkWidget *list_item = gtk_list_item_new_with_label( item );
- GtkWidget *list = GTK_COMBO(m_widget)->list;
- gtk_list_clear_items( GTK_LIST(list), 0, Number() );
+ gtk_signal_connect( GTK_OBJECT(list_item), "select",
+ GTK_SIGNAL_FUNC(gtk_combo_clicked_callback), (gpointer)this );
+
+ gtk_container_add( GTK_CONTAINER(list), list_item );
+
+ if (m_widgetStyle) ApplyWidgetStyle();
- m_clientData.Clear();
+ gtk_widget_show( list_item );
}
void wxComboBox::Append( const wxString &item )
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ m_clientDataList.Append( (wxObject*)NULL );
- Append( item, (char*)NULL );
+ AppendCommon( item );
}
-void wxComboBox::Append( const wxString &item, char *clientData )
+void wxComboBox::Append( const wxString &item, void *clientData )
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
-
- GtkWidget *list = GTK_COMBO(m_widget)->list;
-
- GtkWidget *list_item = gtk_list_item_new_with_label( item );
-
- gtk_signal_connect( GTK_OBJECT(list_item), "select",
- GTK_SIGNAL_FUNC(gtk_combo_clicked_callback), (gpointer)this );
-
- m_clientData.Append( (wxObject*)clientData );
+ if (clientData)
+ m_clientDataList.Append( (wxObject*) new wxVoidClientData( clientData ) );
+ else
+ m_clientDataList.Append( (wxObject*)NULL );
- gtk_container_add( GTK_CONTAINER(list), list_item );
-
- if (m_widgetStyle) ApplyWidgetStyle();
-
- gtk_widget_show( list_item );
+ AppendCommon( item );
}
-void wxComboBox::Delete( int n )
+void wxComboBox::Append( const wxString &item, wxClientData *clientData )
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ m_clientDataList.Append( (wxObject*) clientData );
- GtkList *listbox = GTK_LIST( GTK_COMBO(m_widget)->list );
-
- GList *child = g_list_nth( listbox->children, n );
+ AppendCommon( item );
+}
+
+void wxComboBox::SetClientData( int n, void* clientData )
+{
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- if (!child)
- {
- wxFAIL_MSG("wrong index");
- return;
- }
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return;
- GList *list = g_list_append( NULL, child->data );
- gtk_list_remove_items( listbox, list );
- g_list_free( list );
+ wxClientData *cd = (wxClientData*) node->Data();
+ if (cd) delete cd;
- wxNode *node = m_clientData.Nth( n );
- if (!node)
- {
- wxFAIL_MSG( "wrong index" );
- }
- else
- m_clientData.DeleteNode( node );
+ if (clientData)
+ node->SetData( (wxObject*) new wxVoidClientData(clientData) );
+ else
+ node->SetData( (wxObject*) NULL );
}
-int wxComboBox::FindString( const wxString &item )
+void* wxComboBox::GetClientData( int n )
{
- wxCHECK_MSG( m_widget != NULL, -1, "invalid combobox" );
+ wxCHECK_MSG( m_widget != NULL, NULL, "invalid combobox" );
- GtkWidget *list = GTK_COMBO(m_widget)->list;
-
- GList *child = GTK_LIST(list)->children;
- int count = 0;
- while (child)
- {
- GtkBin *bin = GTK_BIN( child->data );
- GtkLabel *label = GTK_LABEL( bin->child );
- if (item == label->label) return count;
- count++;
- child = child->next;
- }
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return NULL;
+
+ wxVoidClientData *cd = (wxVoidClientData*) node->Data();
+ if (cd)
+ return cd->GetData();
+ else
+ return (void*) NULL;
+}
+
+void wxComboBox::SetClientObject( int n, wxClientData* clientData )
+{
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return;
- wxFAIL_MSG( "wxComboBox: string not found" );
+ wxClientData *cd = (wxClientData*) node->Data();
+ if (cd) delete cd;
- return -1;
+ node->SetData( (wxObject*) clientData );
}
-char* wxComboBox::GetClientData( int n )
+wxClientData* wxComboBox::GetClientObject( int n )
{
- wxCHECK_MSG( m_widget != NULL, (char*)NULL, "invalid combobox" );
+ wxCHECK_MSG( m_widget != NULL, (wxClientData*)NULL, "invalid combobox" );
- wxNode *node = m_clientData.Nth( n );
- if (node) return (char*)node->Data();
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return (wxClientData*) NULL;
+
+ return (wxClientData*) node->Data();
+}
+
+void wxComboBox::Clear()
+{
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- wxFAIL_MSG( "wxComboBox: wrong index" );
+ GtkWidget *list = GTK_COMBO(m_widget)->list;
+ gtk_list_clear_items( GTK_LIST(list), 0, Number() );
- return (char *) NULL;
+ wxNode *node = m_clientDataList.First();
+ while (node)
+ {
+ wxClientData *cd = (wxClientData*)node->Data();
+ if (cd) delete cd;
+ node = node->Next();
+ }
+ m_clientDataList.Clear();
}
-void wxComboBox::SetClientData( int n, char * clientData )
+void wxComboBox::Delete( int n )
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+
+ GtkList *listbox = GTK_LIST( GTK_COMBO(m_widget)->list );
- wxNode *node = m_clientData.Nth( n );
- if (node) node->SetData( (wxObject*) clientData );
+ GList *child = g_list_nth( listbox->children, n );
- wxFAIL_MSG( "wxComboBox: wrong index" );
+ if (!child)
+ {
+ wxFAIL_MSG("wrong index");
+ return;
+ }
+
+ GList *list = g_list_append( NULL, child->data );
+ gtk_list_remove_items( listbox, list );
+ g_list_free( list );
+
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node)
+ {
+ wxFAIL_MSG( "wrong index" );
+ }
+ else
+ {
+ wxClientData *cd = (wxClientData*)node->Data();
+ if (cd) delete cd;
+ m_clientDataList.DeleteNode( node );
+ }
}
-int wxComboBox::GetSelection(void) const
+int wxComboBox::FindString( const wxString &item )
{
- wxCHECK_MSG( m_widget != NULL, -1, "invalid combobox" );
+ wxCHECK_MSG( m_widget != NULL, -1, "invalid combobox" );
- GtkWidget *list = GTK_COMBO(m_widget)->list;
+ GtkWidget *list = GTK_COMBO(m_widget)->list;
- GList *selection = GTK_LIST(list)->selection;
- if (selection)
- {
GList *child = GTK_LIST(list)->children;
int count = 0;
while (child)
{
- if (child->data == selection->data) return count;
- count++;
- child = child->next;
+ GtkBin *bin = GTK_BIN( child->data );
+ GtkLabel *label = GTK_LABEL( bin->child );
+ if (item == label->label) return count;
+ count++;
+ child = child->next;
+ }
+
+ wxFAIL_MSG( "wxComboBox: string not found" );
+
+ return -1;
+}
+
+int wxComboBox::GetSelection() const
+{
+ wxCHECK_MSG( m_widget != NULL, -1, "invalid combobox" );
+
+ GtkWidget *list = GTK_COMBO(m_widget)->list;
+
+ GList *selection = GTK_LIST(list)->selection;
+ if (selection)
+ {
+ GList *child = GTK_LIST(list)->children;
+ int count = 0;
+ while (child)
+ {
+ if (child->data == selection->data) return count;
+ count++;
+ child = child->next;
+ }
}
- }
- wxFAIL_MSG( "wxComboBox: no selection" );
+ wxFAIL_MSG( "wxComboBox: no selection" );
- return -1;
+ return -1;
}
wxString wxComboBox::GetString( int n ) const
{
- wxCHECK_MSG( m_widget != NULL, "", "invalid combobox" );
+ wxCHECK_MSG( m_widget != NULL, "", "invalid combobox" );
- GtkWidget *list = GTK_COMBO(m_widget)->list;
+ GtkWidget *list = GTK_COMBO(m_widget)->list;
- GList *child = g_list_nth( GTK_LIST(list)->children, n );
- if (child)
- {
- GtkBin *bin = GTK_BIN( child->data );
- GtkLabel *label = GTK_LABEL( bin->child );
- return label->label;
- }
+ GList *child = g_list_nth( GTK_LIST(list)->children, n );
+ if (child)
+ {
+ GtkBin *bin = GTK_BIN( child->data );
+ GtkLabel *label = GTK_LABEL( bin->child );
+ return label->label;
+ }
- wxFAIL_MSG( "wxComboBox: wrong index" );
+ wxFAIL_MSG( "wxComboBox: wrong index" );
- return "";
+ return "";
}
-wxString wxComboBox::GetStringSelection(void) const
+wxString wxComboBox::GetStringSelection() const
{
- wxCHECK_MSG( m_widget != NULL, "", "invalid combobox" );
+ wxCHECK_MSG( m_widget != NULL, "", "invalid combobox" );
- GtkWidget *list = GTK_COMBO(m_widget)->list;
+ GtkWidget *list = GTK_COMBO(m_widget)->list;
- GList *selection = GTK_LIST(list)->selection;
- if (selection)
- {
- GtkBin *bin = GTK_BIN( selection->data );
- wxString tmp = GTK_LABEL( bin->child )->label;
- return tmp;
- }
+ GList *selection = GTK_LIST(list)->selection;
+ if (selection)
+ {
+ GtkBin *bin = GTK_BIN( selection->data );
+ wxString tmp = GTK_LABEL( bin->child )->label;
+ return tmp;
+ }
- wxFAIL_MSG( "wxComboBox: no selection" );
+ wxFAIL_MSG( "wxComboBox: no selection" );
- return "";
+ return "";
}
-int wxComboBox::Number(void) const
+int wxComboBox::Number() const
{
- wxCHECK_MSG( m_widget != NULL, 0, "invalid combobox" );
+ wxCHECK_MSG( m_widget != NULL, 0, "invalid combobox" );
- GtkWidget *list = GTK_COMBO(m_widget)->list;
+ GtkWidget *list = GTK_COMBO(m_widget)->list;
- GList *child = GTK_LIST(list)->children;
- int count = 0;
- while (child) { count++; child = child->next; }
- return count;
+ GList *child = GTK_LIST(list)->children;
+ int count = 0;
+ while (child) { count++; child = child->next; }
+ return count;
}
void wxComboBox::SetSelection( int n )
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- GtkWidget *list = GTK_COMBO(m_widget)->list;
- gtk_list_select_item( GTK_LIST(list), n );
+ GtkWidget *list = GTK_COMBO(m_widget)->list;
+ gtk_list_select_item( GTK_LIST(list), n );
}
void wxComboBox::SetStringSelection( const wxString &string )
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- int res = FindString( string );
- if (res == -1) return;
- SetSelection( res );
+ int res = FindString( string );
+ if (res == -1) return;
+ SetSelection( res );
}
-wxString wxComboBox::GetValue(void) const
+wxString wxComboBox::GetValue() const
{
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
- wxString tmp = gtk_entry_get_text( GTK_ENTRY(entry) );
- return tmp;
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ wxString tmp = gtk_entry_get_text( GTK_ENTRY(entry) );
+ return tmp;
}
void wxComboBox::SetValue( const wxString& value )
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
- wxString tmp = "";
- if (!value.IsNull()) tmp = value;
- gtk_entry_set_text( GTK_ENTRY(entry), tmp );
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ wxString tmp = "";
+ if (!value.IsNull()) tmp = value;
+ gtk_entry_set_text( GTK_ENTRY(entry), tmp );
}
-void wxComboBox::Copy(void)
+void wxComboBox::Copy()
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
#if (GTK_MINOR_VERSION == 1)
- gtk_editable_copy_clipboard( GTK_EDITABLE(entry) );
+ gtk_editable_copy_clipboard( GTK_EDITABLE(entry) );
#else
- gtk_editable_copy_clipboard( GTK_EDITABLE(entry), 0 );
+ gtk_editable_copy_clipboard( GTK_EDITABLE(entry), 0 );
#endif
}
-void wxComboBox::Cut(void)
+void wxComboBox::Cut()
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
#if (GTK_MINOR_VERSION == 1)
- gtk_editable_cut_clipboard( GTK_EDITABLE(entry) );
+ gtk_editable_cut_clipboard( GTK_EDITABLE(entry) );
#else
- gtk_editable_cut_clipboard( GTK_EDITABLE(entry), 0 );
+ gtk_editable_cut_clipboard( GTK_EDITABLE(entry), 0 );
#endif
}
-void wxComboBox::Paste(void)
+void wxComboBox::Paste()
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
#if (GTK_MINOR_VERSION == 1)
- gtk_editable_paste_clipboard( GTK_EDITABLE(entry) );
+ gtk_editable_paste_clipboard( GTK_EDITABLE(entry) );
#else
- gtk_editable_paste_clipboard( GTK_EDITABLE(entry), 0 );
+ gtk_editable_paste_clipboard( GTK_EDITABLE(entry), 0 );
#endif
}
void wxComboBox::SetInsertionPoint( long pos )
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
- int tmp = (int) pos;
- gtk_entry_set_position( GTK_ENTRY(entry), tmp );
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ int tmp = (int) pos;
+ gtk_entry_set_position( GTK_ENTRY(entry), tmp );
}
-void wxComboBox::SetInsertionPointEnd(void)
+void wxComboBox::SetInsertionPointEnd()
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
- int pos = GTK_ENTRY(entry)->text_length;
- SetInsertionPoint( pos-1 );
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ int pos = GTK_ENTRY(entry)->text_length;
+ SetInsertionPoint( pos-1 );
}
-long wxComboBox::GetInsertionPoint(void) const
+long wxComboBox::GetInsertionPoint() const
{
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
- return (long) GTK_EDITABLE(entry)->current_pos;
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ return (long) GTK_EDITABLE(entry)->current_pos;
}
-long wxComboBox::GetLastPosition(void) const
+long wxComboBox::GetLastPosition() const
{
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
- int pos = GTK_ENTRY(entry)->text_length;
- return (long) pos-1;
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ int pos = GTK_ENTRY(entry)->text_length;
+ return (long) pos-1;
}
void wxComboBox::Replace( long from, long to, const wxString& value )
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
- gtk_editable_delete_text( GTK_EDITABLE(entry), (gint)from, (gint)to );
- if (value.IsNull()) return;
- gint pos = (gint)to;
- gtk_editable_insert_text( GTK_EDITABLE(entry), value, value.Length(), &pos );
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ gtk_editable_delete_text( GTK_EDITABLE(entry), (gint)from, (gint)to );
+ if (value.IsNull()) return;
+ gint pos = (gint)to;
+ gtk_editable_insert_text( GTK_EDITABLE(entry), value, value.Length(), &pos );
}
void wxComboBox::Remove(long from, long to)
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
- gtk_editable_delete_text( GTK_EDITABLE(entry), (gint)from, (gint)to );
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ gtk_editable_delete_text( GTK_EDITABLE(entry), (gint)from, (gint)to );
}
void wxComboBox::SetSelection( long WXUNUSED(from), long WXUNUSED(to) )
{
- wxFAIL_MSG( "wxComboBox::SetSelection not implemented" );
+ wxFAIL_MSG( "wxComboBox::SetSelection not implemented" );
}
void wxComboBox::SetEditable( bool WXUNUSED(editable) )
{
- wxFAIL_MSG( "wxComboBox::SetEditable not implemented" );
+ wxFAIL_MSG( "wxComboBox::SetEditable not implemented" );
}
void wxComboBox::OnSize( wxSizeEvent &event )
{
- wxControl::OnSize( event );
+ wxControl::OnSize( event );
- int w = 21;
+ int w = 21;
+ gtk_widget_set_usize( GTK_COMBO(m_widget)->entry, m_width-w-1, m_height );
- gtk_widget_set_usize( GTK_COMBO(m_widget)->entry, m_width-w-1, m_height );
-
- gtk_widget_set_uposition( GTK_COMBO(m_widget)->button, m_x+m_width-w, m_y );
- gtk_widget_set_usize( GTK_COMBO(m_widget)->button, w, m_height );
+ gtk_widget_set_uposition( GTK_COMBO(m_widget)->button, m_x+m_width-w, m_y );
+ gtk_widget_set_usize( GTK_COMBO(m_widget)->button, w, m_height );
}
void wxComboBox::ApplyWidgetStyle()
{
- SetWidgetStyle();
+ SetWidgetStyle();
- gtk_widget_set_style( GTK_COMBO(m_widget)->button, m_widgetStyle );
- gtk_widget_set_style( GTK_COMBO(m_widget)->entry, m_widgetStyle );
- gtk_widget_set_style( GTK_COMBO(m_widget)->list, m_widgetStyle );
+ gtk_widget_set_style( GTK_COMBO(m_widget)->button, m_widgetStyle );
+ gtk_widget_set_style( GTK_COMBO(m_widget)->entry, m_widgetStyle );
+ gtk_widget_set_style( GTK_COMBO(m_widget)->list, m_widgetStyle );
- GtkList *list = GTK_LIST( GTK_COMBO(m_widget)->list );
- GList *child = list->children;
- while (child)
- {
- gtk_widget_set_style( GTK_WIDGET(child->data), m_widgetStyle );
+ GtkList *list = GTK_LIST( GTK_COMBO(m_widget)->list );
+ GList *child = list->children;
+ while (child)
+ {
+ gtk_widget_set_style( GTK_WIDGET(child->data), m_widgetStyle );
- GtkBin *bin = GTK_BIN(child->data);
- gtk_widget_set_style( bin->child, m_widgetStyle );
+ GtkBin *bin = GTK_BIN(child->data);
+ gtk_widget_set_style( bin->child, m_widgetStyle );
- child = child->next;
- }
+ child = child->next;
+ }
}
-GtkWidget* wxComboBox::GetConnectWidget(void)
+GtkWidget* wxComboBox::GetConnectWidget()
{
- return GTK_COMBO(m_widget)->entry;
+ return GTK_COMBO(m_widget)->entry;
}
bool wxComboBox::IsOwnGtkWindow( GdkWindow *window )
{
- return ( (window == GTK_ENTRY( GTK_COMBO(m_widget)->entry )->text_area) ||
- (window == GTK_COMBO(m_widget)->button->window ) );
+ return ( (window == GTK_ENTRY( GTK_COMBO(m_widget)->entry )->text_area) ||
+ (window == GTK_COMBO(m_widget)->button->window ) );
}
static void gtk_listitem_select_callback( GtkWidget *WXUNUSED(widget), wxListBox *listbox )
{
- if (!listbox->HasVMT()) return;
- if (g_blockEventsOnDrag) return;
+ if (!listbox->HasVMT()) return;
+ if (g_blockEventsOnDrag) return;
- wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, listbox->GetId() );
+ wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, listbox->GetId() );
wxArrayInt aSelections;
int count = listbox->GetSelections(aSelections);
if ( count > 0 )
{
- event.m_commandInt = aSelections[0] ;
- event.m_clientData = listbox->GetClientData(event.m_commandInt);
- wxString str(listbox->GetString(event.m_commandInt));
- if (str != "")
- event.m_commandString = copystring((char *)(const char *)str);
+ event.m_commandInt = aSelections[0] ;
+ event.m_clientData = listbox->GetClientData( event.m_commandInt );
+ wxString str(listbox->GetString(event.m_commandInt));
+ if (str != "") event.m_commandString = copystring((char *)(const char *)str);
}
else
{
- event.m_commandInt = -1 ;
- event.m_commandString = copystring("") ;
+ event.m_commandInt = -1 ;
+ event.m_commandString = copystring("") ;
}
- event.SetEventObject( listbox );
+ event.SetEventObject( listbox );
- listbox->GetEventHandler()->ProcessEvent( event );
- if (event.m_commandString) delete[] event.m_commandString ;
+ listbox->GetEventHandler()->ProcessEvent( event );
+ if (event.m_commandString) delete[] event.m_commandString ;
}
//-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxListBox,wxControl)
-wxListBox::wxListBox(void)
+wxListBox::wxListBox()
{
- m_list = (GtkList *) NULL;
+ m_list = (GtkList *) NULL;
}
bool wxListBox::Create( wxWindow *parent, wxWindowID id,
- const wxPoint &pos, const wxSize &size,
- int n, const wxString choices[],
- long style, const wxValidator& validator, const wxString &name )
+ const wxPoint &pos, const wxSize &size,
+ int n, const wxString choices[],
+ long style, const wxValidator& validator, const wxString &name )
{
- m_needParent = TRUE;
+ m_needParent = TRUE;
- PreCreation( parent, id, pos, size, style, name );
+ PreCreation( parent, id, pos, size, style, name );
- SetValidator( validator );
+ SetValidator( validator );
- m_widget = gtk_scrolled_window_new( (GtkAdjustment *) NULL, (GtkAdjustment *) NULL );
- gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(m_widget),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );
+ m_widget = gtk_scrolled_window_new( (GtkAdjustment*) NULL, (GtkAdjustment*) NULL );
+ gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(m_widget),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );
- m_list = GTK_LIST( gtk_list_new() );
+ m_list = GTK_LIST( gtk_list_new() );
- GtkSelectionMode mode = GTK_SELECTION_BROWSE;
- if (style & wxLB_MULTIPLE)
- mode = GTK_SELECTION_MULTIPLE;
- else if (style & wxLB_EXTENDED)
- mode = GTK_SELECTION_EXTENDED;
+ GtkSelectionMode mode = GTK_SELECTION_BROWSE;
+ if (style & wxLB_MULTIPLE)
+ mode = GTK_SELECTION_MULTIPLE;
+ else if (style & wxLB_EXTENDED)
+ mode = GTK_SELECTION_EXTENDED;
- gtk_list_set_selection_mode( GTK_LIST(m_list), mode );
+ gtk_list_set_selection_mode( GTK_LIST(m_list), mode );
- gtk_container_add (GTK_CONTAINER(m_widget), GTK_WIDGET(m_list) );
- gtk_widget_show( GTK_WIDGET(m_list) );
+ gtk_container_add( GTK_CONTAINER(m_widget), GTK_WIDGET(m_list) );
+ gtk_widget_show( GTK_WIDGET(m_list) );
- wxSize newSize = size;
- if (newSize.x == -1) newSize.x = 100;
- if (newSize.y == -1) newSize.y = 110;
- SetSize( newSize.x, newSize.y );
+ wxSize newSize = size;
+ if (newSize.x == -1) newSize.x = 100;
+ if (newSize.y == -1) newSize.y = 110;
+ SetSize( newSize.x, newSize.y );
- for (int i = 0; i < n; i++)
- {
- GtkWidget *list_item;
- list_item = gtk_list_item_new_with_label( choices[i] );
+ for (int i = 0; i < n; i++)
+ {
+ GtkWidget *list_item;
+ list_item = gtk_list_item_new_with_label( choices[i] );
- gtk_container_add( GTK_CONTAINER(m_list), list_item );
+ gtk_container_add( GTK_CONTAINER(m_list), list_item );
- gtk_signal_connect( GTK_OBJECT(list_item), "select",
- GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
+ gtk_signal_connect( GTK_OBJECT(list_item), "select",
+ GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
- if (style & wxLB_MULTIPLE)
- gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
- GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
+ if (style & wxLB_MULTIPLE)
+ gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
+ GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
- ConnectWidget( list_item );
+ ConnectWidget( list_item );
- m_clientData.Append( (wxObject*)NULL );
+ m_clientDataList.Append( (wxObject*)NULL );
- gtk_widget_show( list_item );
- }
+ gtk_widget_show( list_item );
+ }
- m_parent->AddChild( this );
+ m_parent->AddChild( this );
- (m_parent->m_insertCallback)( m_parent, this );
+ (m_parent->m_insertCallback)( m_parent, this );
- PostCreation();
+ PostCreation();
- gtk_widget_realize( GTK_WIDGET(m_list) );
+ gtk_widget_realize( GTK_WIDGET(m_list) );
- SetBackgroundColour( parent->GetBackgroundColour() );
- SetForegroundColour( parent->GetForegroundColour() );
+ SetBackgroundColour( parent->GetBackgroundColour() );
+ SetForegroundColour( parent->GetForegroundColour() );
- Show( TRUE );
+ Show( TRUE );
- return TRUE;
+ return TRUE;
}
-void wxListBox::Append( const wxString &item )
+wxListBox::~wxListBox()
{
- Append( item, (char*)NULL );
+ wxNode *node = m_clientDataList.First();
+ while (node)
+ {
+ wxClientData *cd = (wxClientData*)node->Data();
+ if (cd) delete cd;
+ node = node->Next();
+ }
+ m_clientDataList.Clear();
}
-void wxListBox::Append( const wxString &item, char *clientData )
+void wxListBox::AppendCommon( const wxString &item )
{
- wxCHECK_RET( m_list != NULL, "invalid listbox" );
+ wxCHECK_RET( m_list != NULL, "invalid listbox" );
+
+ GtkWidget *list_item = gtk_list_item_new_with_label( item );
- GtkWidget *list_item = gtk_list_item_new_with_label( item );
+ gtk_signal_connect( GTK_OBJECT(list_item), "select",
+ GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
- gtk_signal_connect( GTK_OBJECT(list_item), "select",
- GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
+ if (GetWindowStyleFlag() & wxLB_MULTIPLE)
+ gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
+ GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
- if (GetWindowStyleFlag() & wxLB_MULTIPLE)
- gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
- GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
+ gtk_container_add( GTK_CONTAINER(m_list), list_item );
- ConnectWidget( list_item );
-
- m_clientData.Append( (wxObject*)clientData );
+ if (m_widgetStyle) ApplyWidgetStyle();
+
+ gtk_widget_show( list_item );
+
+ ConnectWidget( list_item );
+
+ ConnectDnDWidget( list_item );
+}
+
+void wxListBox::Append( const wxString &item )
+{
+ m_clientDataList.Append( (wxObject*)NULL );
+
+ AppendCommon( item );
+}
+
+void wxListBox::Append( const wxString &item, void *clientData )
+{
+ if (clientData)
+ m_clientDataList.Append( (wxObject*) new wxVoidClientData( clientData ) );
+ else
+ m_clientDataList.Append( (wxObject*)NULL );
+
+ AppendCommon( item );
+}
- gtk_container_add( GTK_CONTAINER(m_list), list_item );
+void wxListBox::Append( const wxString &item, wxClientData *clientData )
+{
+ m_clientDataList.Append( (wxObject*) clientData );
+
+ AppendCommon( item );
+}
- if (m_widgetStyle) ApplyWidgetStyle();
+void wxListBox::SetClientData( int n, void* clientData )
+{
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return;
- gtk_widget_show( list_item );
+ wxClientData *cd = (wxClientData*) node->Data();
+ if (cd) delete cd;
+
+ if (clientData)
+ node->SetData( (wxObject*) new wxVoidClientData(clientData) );
+ else
+ node->SetData( (wxObject*) NULL );
+}
- ConnectWidget( list_item );
+void* wxListBox::GetClientData( int n )
+{
+ wxCHECK_MSG( m_widget != NULL, NULL, "invalid combobox" );
+
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return NULL;
+
+ wxVoidClientData *cd = (wxVoidClientData*) node->Data();
+ if (cd)
+ return cd->GetData();
+ else
+ return (void*) NULL;
+}
- ConnectDnDWidget( list_item );
+void wxListBox::SetClientObject( int n, wxClientData* clientData )
+{
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return;
+
+ wxClientData *cd = (wxClientData*) node->Data();
+ if (cd) delete cd;
+
+ node->SetData( (wxObject*) clientData );
}
-void wxListBox::Clear(void)
+wxClientData* wxListBox::GetClientObject( int n )
{
- wxCHECK_RET( m_list != NULL, "invalid listbox" );
+ wxCHECK_MSG( m_widget != NULL, (wxClientData*)NULL, "invalid combobox" );
+
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return (wxClientData*) NULL;
+
+ return (wxClientData*) node->Data();
+}
+
+void wxListBox::Clear()
+{
+ wxCHECK_RET( m_list != NULL, "invalid listbox" );
- gtk_list_clear_items( m_list, 0, Number() );
+ gtk_list_clear_items( m_list, 0, Number() );
- m_clientData.Clear();
+ wxNode *node = m_clientDataList.First();
+ while (node)
+ {
+ wxClientData *cd = (wxClientData*)node->Data();
+ if (cd) delete cd;
+ node = node->Next();
+ }
+ m_clientDataList.Clear();
}
void wxListBox::Delete( int n )
{
- wxCHECK_RET( m_list != NULL, "invalid listbox" );
+ wxCHECK_RET( m_list != NULL, "invalid listbox" );
- GList *child = g_list_nth( m_list->children, n );
+ GList *child = g_list_nth( m_list->children, n );
- if (!child)
- {
- wxFAIL_MSG("wrong listbox index");
- return;
- }
+ if (!child)
+ {
+ wxFAIL_MSG("wrong listbox index");
+ return;
+ }
- GList *list = g_list_append( NULL, child->data );
- gtk_list_remove_items( m_list, list );
- g_list_free( list );
+ GList *list = g_list_append( NULL, child->data );
+ gtk_list_remove_items( m_list, list );
+ g_list_free( list );
- wxNode *node = m_clientData.Nth( n );
- if (!node)
- {
- wxFAIL_MSG("wrong listbox index");
- }
- else
- m_clientData.DeleteNode( node );
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node)
+ {
+ wxFAIL_MSG( "wrong index" );
+ }
+ else
+ {
+ wxClientData *cd = (wxClientData*)node->Data();
+ if (cd) delete cd;
+ m_clientDataList.DeleteNode( node );
+ }
}
void wxListBox::Deselect( int n )
{
- wxCHECK_RET( m_list != NULL, "invalid listbox" );
+ wxCHECK_RET( m_list != NULL, "invalid listbox" );
- gtk_list_unselect_item( m_list, n );
+ gtk_list_unselect_item( m_list, n );
}
int wxListBox::FindString( const wxString &item ) const
{
- wxCHECK_MSG( m_list != NULL, -1, "invalid listbox" );
+ wxCHECK_MSG( m_list != NULL, -1, "invalid listbox" );
- GList *child = m_list->children;
- int count = 0;
- while (child)
- {
- GtkBin *bin = GTK_BIN( child->data );
- GtkLabel *label = GTK_LABEL( bin->child );
- if (item == label->label) return count;
- count++;
- child = child->next;
- }
-
- // it's not an error if the string is not found - this function may be used to
- // test for existence of the string in the listbox, so don't give any
- // errors/assert failures.
+ GList *child = m_list->children;
+ int count = 0;
+ while (child)
+ {
+ GtkBin *bin = GTK_BIN( child->data );
+ GtkLabel *label = GTK_LABEL( bin->child );
+ if (item == label->label) return count;
+ count++;
+ child = child->next;
+ }
+
+ // it's not an error if the string is not found -> no wxCHECK
return -1;
}
-char *wxListBox::GetClientData( int n ) const
+int wxListBox::GetSelection() const
{
- wxCHECK_MSG( m_list != NULL, (char*) NULL, "invalid listbox" );
+ wxCHECK_MSG( m_list != NULL, -1, "invalid listbox" );
- wxNode *node = m_clientData.Nth( n );
- if (node) return ((char*)node->Data());
-
- wxFAIL_MSG("wrong listbox index");
- return (char *) NULL;
+ GList *child = m_list->children;
+ int count = 0;
+ while (child)
+ {
+ if (GTK_WIDGET(child->data)->state == GTK_STATE_SELECTED) return count;
+ count++;
+ child = child->next;
+ }
+ return -1;
}
-int wxListBox::GetSelection(void) const
+int wxListBox::GetSelections( wxArrayInt& aSelections ) const
{
- wxCHECK_MSG( m_list != NULL, -1, "invalid listbox" );
+ wxCHECK_MSG( m_list != NULL, -1, "invalid listbox" );
- GList *child = m_list->children;
- int count = 0;
- while (child)
- {
- if (GTK_WIDGET(child->data)->state == GTK_STATE_SELECTED) return count;
- count++;
- child = child->next;
- }
- return -1;
-}
+ // get the number of selected items first
+ GList *child = m_list->children;
+ int count = 0;
+ for (child = m_list->children; child != NULL; child = child->next)
+ {
+ if (GTK_WIDGET(child->data)->state == GTK_STATE_SELECTED)
+ count++;
+ }
-int wxListBox::GetSelections(wxArrayInt& aSelections) const
-{
- wxCHECK_MSG( m_list != NULL, -1, "invalid listbox" );
-
- // get the number of selected items first
- GList *child = m_list->children;
- int count = 0;
- for ( child = m_list->children; child != NULL; child = child->next )
- {
- if ( GTK_WIDGET(child->data)->state == GTK_STATE_SELECTED )
- count++;
- }
-
- aSelections.Empty();
-
- if ( count > 0 ) {
- // now fill the list
- aSelections.Alloc(count); // optimization attempt
- int i = 0;
- for ( child = m_list->children; child != NULL; child = child->next, i++ )
+ aSelections.Empty();
+
+ if (count > 0)
{
- if ( GTK_WIDGET(child->data)->state == GTK_STATE_SELECTED )
- aSelections.Add(i);
+ // now fill the list
+ aSelections.Alloc(count); // optimization attempt
+ int i = 0;
+ for (child = m_list->children; child != NULL; child = child->next, i++)
+ {
+ if (GTK_WIDGET(child->data)->state == GTK_STATE_SELECTED)
+ aSelections.Add(i);
+ }
}
- }
- return count;
+ return count;
}
wxString wxListBox::GetString( int n ) const
{
- wxCHECK_MSG( m_list != NULL, "", "invalid listbox" );
+ wxCHECK_MSG( m_list != NULL, "", "invalid listbox" );
- GList *child = g_list_nth( m_list->children, n );
- if (child)
- {
- GtkBin *bin = GTK_BIN( child->data );
- GtkLabel *label = GTK_LABEL( bin->child );
- return label->label;
- }
- wxFAIL_MSG("wrong listbox index");
- return "";
+ GList *child = g_list_nth( m_list->children, n );
+ if (child)
+ {
+ GtkBin *bin = GTK_BIN( child->data );
+ GtkLabel *label = GTK_LABEL( bin->child );
+ return label->label;
+ }
+ wxFAIL_MSG("wrong listbox index");
+ return "";
}
-wxString wxListBox::GetStringSelection(void) const
+wxString wxListBox::GetStringSelection() const
{
- wxCHECK_MSG( m_list != NULL, "", "invalid listbox" );
+ wxCHECK_MSG( m_list != NULL, "", "invalid listbox" );
- GList *selection = m_list->selection;
- if (selection)
- {
- GtkBin *bin = GTK_BIN( selection->data );
- wxString tmp = GTK_LABEL( bin->child )->label;
- return tmp;
- }
- wxFAIL_MSG("no listbox selection available");
- return "";
+ GList *selection = m_list->selection;
+ if (selection)
+ {
+ GtkBin *bin = GTK_BIN( selection->data );
+ wxString tmp = GTK_LABEL( bin->child )->label;
+ return tmp;
+ }
+ wxFAIL_MSG("no listbox selection available");
+ return "";
}
-int wxListBox::Number(void)
+int wxListBox::Number()
{
- wxCHECK_MSG( m_list != NULL, -1, "invalid listbox" );
+ wxCHECK_MSG( m_list != NULL, -1, "invalid listbox" );
- GList *child = m_list->children;
- int count = 0;
- while (child) { count++; child = child->next; }
- return count;
+ GList *child = m_list->children;
+ int count = 0;
+ while (child) { count++; child = child->next; }
+ return count;
}
bool wxListBox::Selected( int n )
{
- wxCHECK_MSG( m_list != NULL, FALSE, "invalid listbox" );
+ wxCHECK_MSG( m_list != NULL, FALSE, "invalid listbox" );
- GList *target = g_list_nth( m_list->children, n );
- if (target)
- {
- GList *child = m_list->selection;
- while (child)
+ GList *target = g_list_nth( m_list->children, n );
+ if (target)
{
- if (child->data == target->data) return TRUE;
- child = child->next;
+ GList *child = m_list->selection;
+ while (child)
+ {
+ if (child->data == target->data) return TRUE;
+ child = child->next;
+ }
}
- }
- wxFAIL_MSG("wrong listbox index");
- return FALSE;
+ wxFAIL_MSG("wrong listbox index");
+ return FALSE;
}
void wxListBox::Set( int WXUNUSED(n), const wxString *WXUNUSED(choices) )
{
- wxFAIL_MSG("wxListBox::Set not implemented");
-}
-
-void wxListBox::SetClientData( int n, char *clientData )
-{
- wxCHECK_RET( m_list != NULL, "invalid listbox" );
-
- wxNode *node = m_clientData.Nth( n );
- if (node)
- {
- node->SetData( (wxObject*)clientData );
- }
- else
- {
- wxFAIL_MSG("wrong listbox index");
- }
+ wxFAIL_MSG("wxListBox::Set not implemented");
}
void wxListBox::SetFirstItem( int WXUNUSED(n) )
{
- wxFAIL_MSG("wxListBox::SetFirstItem not implemented");
+ wxFAIL_MSG("wxListBox::SetFirstItem not implemented");
}
void wxListBox::SetFirstItem( const wxString &WXUNUSED(item) )
{
- wxFAIL_MSG("wxListBox::SetFirstItem not implemented");
+ wxFAIL_MSG("wxListBox::SetFirstItem not implemented");
}
void wxListBox::SetSelection( int n, bool select )
{
- wxCHECK_RET( m_list != NULL, "invalid listbox" );
+ wxCHECK_RET( m_list != NULL, "invalid listbox" );
- if (select)
- gtk_list_select_item( m_list, n );
- else
- gtk_list_unselect_item( m_list, n );
+ if (select)
+ gtk_list_select_item( m_list, n );
+ else
+ gtk_list_unselect_item( m_list, n );
}
void wxListBox::SetString( int n, const wxString &string )
{
- wxCHECK_RET( m_list != NULL, "invalid listbox" );
+ wxCHECK_RET( m_list != NULL, "invalid listbox" );
- GList *child = g_list_nth( m_list->children, n );
- if (child)
- {
- GtkBin *bin = GTK_BIN( child->data );
- GtkLabel *label = GTK_LABEL( bin->child );
- gtk_label_set( label, string );
- }
- else
- {
- wxFAIL_MSG("wrong listbox index");
- }
+ GList *child = g_list_nth( m_list->children, n );
+ if (child)
+ {
+ GtkBin *bin = GTK_BIN( child->data );
+ GtkLabel *label = GTK_LABEL( bin->child );
+ gtk_label_set( label, string );
+ }
+ else
+ {
+ wxFAIL_MSG("wrong listbox index");
+ }
}
void wxListBox::SetStringSelection( const wxString &string, bool select )
{
- wxCHECK_RET( m_list != NULL, "invalid listbox" );
+ wxCHECK_RET( m_list != NULL, "invalid listbox" );
- SetSelection( FindString(string), select );
+ SetSelection( FindString(string), select );
}
int wxListBox::GetIndex( GtkWidget *item ) const
{
- if (item)
- {
- GList *child = m_list->children;
- int count = 0;
- while (child)
+ if (item)
{
- if (GTK_WIDGET(child->data) == item) return count;
- count++;
- child = child->next;
+ GList *child = m_list->children;
+ int count = 0;
+ while (child)
+ {
+ if (GTK_WIDGET(child->data) == item) return count;
+ count++;
+ child = child->next;
+ }
}
- }
- return -1;
+ return -1;
}
void wxListBox::SetDropTarget( wxDropTarget *dropTarget )
{
- wxCHECK_RET( m_list != NULL, "invalid listbox" );
+ wxCHECK_RET( m_list != NULL, "invalid listbox" );
- GList *child = m_list->children;
- while (child)
- {
- DisconnectDnDWidget( GTK_WIDGET( child->data ) );
- child = child->next;
- }
+ GList *child = m_list->children;
+ while (child)
+ {
+ DisconnectDnDWidget( GTK_WIDGET( child->data ) );
+ child = child->next;
+ }
- wxWindow::SetDropTarget( dropTarget );
+ wxWindow::SetDropTarget( dropTarget );
- child = m_list->children;
- while (child)
- {
- ConnectDnDWidget( GTK_WIDGET( child->data ) );
- child = child->next;
- }
+ child = m_list->children;
+ while (child)
+ {
+ ConnectDnDWidget( GTK_WIDGET( child->data ) );
+ child = child->next;
+ }
}
-GtkWidget *wxListBox::GetConnectWidget(void)
+GtkWidget *wxListBox::GetConnectWidget()
{
- return GTK_WIDGET(m_list);
+ return GTK_WIDGET(m_list);
}
bool wxListBox::IsOwnGtkWindow( GdkWindow *window )
{
- if (wxWindow::IsOwnGtkWindow( window )) return TRUE;
+ if (wxWindow::IsOwnGtkWindow( window )) return TRUE;
- GList *child = m_list->children;
- while (child)
- {
- GtkWidget *bin = GTK_WIDGET( child->data );
- if (bin->window == window) return TRUE;
- child = child->next;
- }
+ GList *child = m_list->children;
+ while (child)
+ {
+ GtkWidget *bin = GTK_WIDGET( child->data );
+ if (bin->window == window) return TRUE;
+ child = child->next;
+ }
- return FALSE;
+ return FALSE;
}
void wxListBox::ApplyWidgetStyle()
{
- SetWidgetStyle();
+ SetWidgetStyle();
- GdkWindow *window = GTK_WIDGET(m_list)->window;
- m_backgroundColour.CalcPixel( gdk_window_get_colormap( window ) );
- gdk_window_set_background( window, m_backgroundColour.GetColor() );
- gdk_window_clear( window );
+ GdkWindow *window = GTK_WIDGET(m_list)->window;
+ m_backgroundColour.CalcPixel( gdk_window_get_colormap( window ) );
+ gdk_window_set_background( window, m_backgroundColour.GetColor() );
+ gdk_window_clear( window );
- GList *child = m_list->children;
- while (child)
- {
- gtk_widget_set_style( GTK_BIN(child->data)->child, m_widgetStyle );
- gtk_widget_set_style( GTK_WIDGET(child->data), m_widgetStyle );
- child = child->next;
- }
+ GList *child = m_list->children;
+ while (child)
+ {
+ gtk_widget_set_style( GTK_BIN(child->data)->child, m_widgetStyle );
+ gtk_widget_set_style( GTK_WIDGET(child->data), m_widgetStyle );
+ child = child->next;
+ }
}
m_oldVerticalPos = 0.0;
m_isShown = FALSE;
m_isEnabled = TRUE;
- m_pDropTarget = (wxDropTarget *) NULL;
+ m_dropTarget = (wxDropTarget *) NULL;
m_resizing = FALSE;
m_scrollGC = (GdkGC*) NULL;
m_widgetStyle = (GtkStyle*) NULL;
{
m_hasVMT = FALSE;
- if (m_pDropTarget) delete m_pDropTarget;
+ if (m_dropTarget) delete m_dropTarget;
if (m_parent) m_parent->RemoveChild( this );
if (m_widget) Show( FALSE );
wxFatalError( "Need complete parent.", name );
m_widget = (GtkWidget *) NULL;
+ m_wxwindow = (GtkWidget *) NULL;
m_hasVMT = FALSE;
m_parent = parent;
m_children.DeleteContents( FALSE );
m_eventHandler = this;
m_windowId = id;
m_sizeSet = FALSE;
- if (m_cursor == NULL)
- m_cursor = new wxCursor( wxCURSOR_ARROW );
+ m_cursor = new wxCursor( wxCURSOR_ARROW );
m_font = *wxSWISS_FONT;
// m_backgroundColour = wxWHITE;
// m_foregroundColour = wxBLACK;
m_autoLayout = FALSE;
m_hasScrolling = FALSE;
m_isScrolling = FALSE;
- m_pDropTarget = (wxDropTarget *) NULL;
+ m_hAdjust = (GtkAdjustment *) NULL;
+ m_vAdjust = (GtkAdjustment *) NULL;
+ m_oldHorizontalPos = 0.0;
+ m_oldVerticalPos = 0.0;
+ m_isShown = FALSE;
+ m_isEnabled = TRUE;
+ m_dropTarget = (wxDropTarget *) NULL;
m_resizing = FALSE;
m_windowValidator = (wxValidator *) NULL;
m_scrollGC = (GdkGC*) NULL;
if (m_windowValidator) m_windowValidator->SetWindow(this);
}
+void wxWindow::SetClientObject( wxClientData *data )
+{
+ if (m_clientData) delete m_clientData;
+ m_clientData = data;
+}
+
+wxClientData *wxWindow::GetClientObject()
+{
+ return m_clientData;
+}
+
+void wxWindow::SetClientData( void *data )
+{
+ if (m_clientData) delete m_clientData;
+
+ if (data)
+ m_clientData = new wxVoidClientData( data );
+ else
+ m_clientData = (wxClientData*) NULL;
+}
+
+void *wxWindow::GetClientData()
+{
+ if (!m_clientData) return NULL;
+
+ wxVoidClientData *vd = (wxVoidClientData*) m_clientData;
+
+ return vd->GetData();
+}
+
bool wxWindow::IsBeingDeleted()
{
return FALSE;
DisconnectDnDWidget( dnd_widget );
- if (m_pDropTarget) delete m_pDropTarget;
- m_pDropTarget = dropTarget;
+ if (m_dropTarget) delete m_dropTarget;
+ m_dropTarget = dropTarget;
ConnectDnDWidget( dnd_widget );
}
wxDropTarget *wxWindow::GetDropTarget() const
{
- return m_pDropTarget;
+ return m_dropTarget;
}
void wxWindow::ConnectDnDWidget( GtkWidget *widget )
{
- if (!m_pDropTarget) return;
+ if (!m_dropTarget) return;
- m_pDropTarget->RegisterWidget( widget );
+ m_dropTarget->RegisterWidget( widget );
gtk_signal_connect( GTK_OBJECT(widget), "drop_data_available_event",
GTK_SIGNAL_FUNC(gtk_window_drop_callback), (gpointer)this );
void wxWindow::DisconnectDnDWidget( GtkWidget *widget )
{
- if (!m_pDropTarget) return;
+ if (!m_dropTarget) return;
gtk_signal_disconnect_by_func( GTK_OBJECT(widget),
GTK_SIGNAL_FUNC(gtk_window_drop_callback), (gpointer)this );
- m_pDropTarget->UnregisterWidget( widget );
+ m_dropTarget->UnregisterWidget( widget );
}
GtkWidget* wxWindow::GetConnectWidget()
wxInitializeResourceSystem();
- // For PostScript printing
-#if wxUSE_POSTSCRIPT
-/* Now done in wxPostScriptModule
- wxInitializePrintSetupData();
- wxThePrintPaperDatabase = new wxPrintPaperDatabase;
- wxThePrintPaperDatabase->CreateDatabase();
- */
-#endif
-
-
-/*
- wxBitmap::InitStandardHandlers();
-
- g_globalCursor = new wxCursor;
-*/
+ wxImage::InitStandardHandlers();
+
+// g_globalCursor = new wxCursor;
}
void wxApp::CommonCleanUp(void)
{
wxDELETE(wxTheColourDatabase);
-/* Now done in wxPostScriptModule
- wxDELETE(wxThePrintPaperDatabase);
- wxDELETE(wxThePrintSetupData);
- */
wxDELETE(wxTheFontNameDirectory);
wxDeleteStockObjects();
wxDeleteStockLists();
wxCleanUpResourceSystem();
+
+ wxImage::CleanUpHandlers();
wxSystemSettings::Done();
}
#include "wx/bitmap.h"
#include "wx/icon.h"
+#include "wx/filefn.h"
#include "gdk/gdkprivate.h"
#include "gdk/gdkx.h"
wxMask::wxMask(void)
{
- m_bitmap = (GdkBitmap *) NULL;
+ m_bitmap = (GdkBitmap *) NULL;
}
wxMask::wxMask( const wxBitmap& WXUNUSED(bitmap), const wxColour& WXUNUSED(colour) )
wxMask::~wxMask(void)
{
- if (m_bitmap) gdk_bitmap_unref( m_bitmap );
+ if (m_bitmap) gdk_bitmap_unref( m_bitmap );
}
GdkBitmap *wxMask::GetBitmap(void) const
{
- return m_bitmap;
+ return m_bitmap;
}
//-----------------------------------------------------------------------------
class wxBitmapRefData: public wxObjectRefData
{
- public:
-
- wxBitmapRefData(void);
- ~wxBitmapRefData(void);
-
- GdkPixmap *m_pixmap;
- GdkBitmap *m_bitmap;
- wxMask *m_mask;
- int m_width;
- int m_height;
- int m_bpp;
- wxPalette *m_palette;
+public:
+ wxBitmapRefData(void);
+ ~wxBitmapRefData(void);
+
+ GdkPixmap *m_pixmap;
+ GdkBitmap *m_bitmap;
+ wxMask *m_mask;
+ int m_width;
+ int m_height;
+ int m_bpp;
+ wxPalette *m_palette;
};
wxBitmapRefData::wxBitmapRefData(void)
{
- m_pixmap = (GdkPixmap *) NULL;
- m_bitmap = (GdkBitmap *) NULL;
- m_mask = (wxMask *) NULL;
- m_width = 0;
- m_height = 0;
- m_bpp = 0;
- m_palette = (wxPalette *) NULL;
+ m_pixmap = (GdkPixmap *) NULL;
+ m_bitmap = (GdkBitmap *) NULL;
+ m_mask = (wxMask *) NULL;
+ m_width = 0;
+ m_height = 0;
+ m_bpp = 0;
+ m_palette = (wxPalette *) NULL;
}
wxBitmapRefData::~wxBitmapRefData(void)
{
- if (m_pixmap) gdk_pixmap_unref( m_pixmap );
- if (m_bitmap) gdk_bitmap_unref( m_bitmap );
- if (m_mask) delete m_mask;
- if (m_palette) delete m_palette;
+ if (m_pixmap) gdk_pixmap_unref( m_pixmap );
+ if (m_bitmap) gdk_bitmap_unref( m_bitmap );
+ if (m_mask) delete m_mask;
+ if (m_palette) delete m_palette;
}
//-----------------------------------------------------------------------------
wxBitmap::wxBitmap(void)
{
- if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
+ if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
}
wxBitmap::wxBitmap( int width, int height, int depth )
{
- wxCHECK_RET( (width > 0) && (height > 0), "invalid bitmap size" )
- wxCHECK_RET( (depth > 0) || (depth == -1), "invalid bitmap depth" )
+ wxCHECK_RET( (width > 0) && (height > 0), "invalid bitmap size" )
+ wxCHECK_RET( (depth > 0) || (depth == -1), "invalid bitmap depth" )
- m_refData = new wxBitmapRefData();
+ m_refData = new wxBitmapRefData();
- GdkWindow *parent = (GdkWindow*) &gdk_root_parent;
+ GdkWindow *parent = (GdkWindow*) &gdk_root_parent;
- M_BMPDATA->m_mask = (wxMask *) NULL;
- M_BMPDATA->m_pixmap = gdk_pixmap_new( parent, width, height, depth );
- M_BMPDATA->m_width = width;
- M_BMPDATA->m_height = height;
- M_BMPDATA->m_bpp = gdk_window_get_visual( parent )->depth;
+ M_BMPDATA->m_mask = (wxMask *) NULL;
+ M_BMPDATA->m_pixmap = gdk_pixmap_new( parent, width, height, depth );
+ M_BMPDATA->m_width = width;
+ M_BMPDATA->m_height = height;
+ M_BMPDATA->m_bpp = gdk_window_get_visual( parent )->depth;
- if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
+ if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
}
wxBitmap::wxBitmap( char **bits )
{
- wxCHECK_RET( bits != NULL, "invalid bitmap data" )
+ wxCHECK_RET( bits != NULL, "invalid bitmap data" )
- m_refData = new wxBitmapRefData();
+ m_refData = new wxBitmapRefData();
- GdkBitmap *mask = (GdkBitmap*) NULL;
- GdkWindow *parent = (GdkWindow*) &gdk_root_parent;
+ GdkBitmap *mask = (GdkBitmap*) NULL;
+ GdkWindow *parent = (GdkWindow*) &gdk_root_parent;
- M_BMPDATA->m_pixmap = gdk_pixmap_create_from_xpm_d( parent, &mask, NULL, (gchar **) bits );
+ M_BMPDATA->m_pixmap = gdk_pixmap_create_from_xpm_d( parent, &mask, NULL, (gchar **) bits );
- if (mask)
- {
- M_BMPDATA->m_mask = new wxMask();
- M_BMPDATA->m_mask->m_bitmap = mask;
- }
+ if (mask)
+ {
+ M_BMPDATA->m_mask = new wxMask();
+ M_BMPDATA->m_mask->m_bitmap = mask;
+ }
- gdk_window_get_size( M_BMPDATA->m_pixmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) );
+ gdk_window_get_size( M_BMPDATA->m_pixmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) );
- M_BMPDATA->m_bpp = gdk_window_get_visual( parent )->depth; // ?
+ M_BMPDATA->m_bpp = gdk_window_get_visual( parent )->depth; // ?
- if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
+ if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
}
wxBitmap::wxBitmap( const wxBitmap& bmp )
{
- Ref( bmp );
+ Ref( bmp );
- if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
+ if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
}
wxBitmap::wxBitmap( const wxBitmap* bmp )
{
- if (bmp) Ref( *bmp );
+ if (bmp) Ref( *bmp );
- if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
+ if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
}
wxBitmap::wxBitmap( const wxString &filename, int type )
{
- LoadFile( filename, type );
+ LoadFile( filename, type );
- if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
+ if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
}
wxBitmap::wxBitmap( const char bits[], int width, int height, int WXUNUSED(depth))
{
- m_refData = new wxBitmapRefData();
+ m_refData = new wxBitmapRefData();
- M_BMPDATA->m_mask = (wxMask *) NULL;
- M_BMPDATA->m_bitmap =
- gdk_bitmap_create_from_data( (GdkWindow*) &gdk_root_parent, (gchar *) bits, width, height );
- M_BMPDATA->m_width = width;
- M_BMPDATA->m_height = height;
- M_BMPDATA->m_bpp = 1;
+ M_BMPDATA->m_mask = (wxMask *) NULL;
+ M_BMPDATA->m_bitmap =
+ gdk_bitmap_create_from_data( (GdkWindow*) &gdk_root_parent, (gchar *) bits, width, height );
+ M_BMPDATA->m_width = width;
+ M_BMPDATA->m_height = height;
+ M_BMPDATA->m_bpp = 1;
- if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
+ if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
}
wxBitmap::~wxBitmap(void)
{
- if (wxTheBitmapList) wxTheBitmapList->DeleteObject(this);
+ if (wxTheBitmapList) wxTheBitmapList->DeleteObject(this);
}
wxBitmap& wxBitmap::operator = ( const wxBitmap& bmp )
{
- if (*this == bmp) return (*this);
- Ref( bmp );
- return *this;
+ if (*this == bmp) return (*this);
+ Ref( bmp );
+ return *this;
}
bool wxBitmap::operator == ( const wxBitmap& bmp )
{
- return m_refData == bmp.m_refData;
+ return m_refData == bmp.m_refData;
}
bool wxBitmap::operator != ( const wxBitmap& bmp )
{
- return m_refData != bmp.m_refData;
+ return m_refData != bmp.m_refData;
}
bool wxBitmap::Ok(void) const
{
- return (m_refData != NULL);
+ return (m_refData != NULL);
}
int wxBitmap::GetHeight(void) const
{
- if (!Ok())
- {
- wxFAIL_MSG( "invalid bitmap" );
- return -1;
- }
+ if (!Ok())
+ {
+ wxFAIL_MSG( "invalid bitmap" );
+ return -1;
+ }
- return M_BMPDATA->m_height;
+ return M_BMPDATA->m_height;
}
int wxBitmap::GetWidth(void) const
{
- if (!Ok())
- {
- wxFAIL_MSG( "invalid bitmap" );
- return -1;
- }
+ if (!Ok())
+ {
+ wxFAIL_MSG( "invalid bitmap" );
+ return -1;
+ }
- return M_BMPDATA->m_width;
+ return M_BMPDATA->m_width;
}
int wxBitmap::GetDepth(void) const
{
- if (!Ok())
- {
- wxFAIL_MSG( "invalid bitmap" );
- return -1;
- }
+ if (!Ok())
+ {
+ wxFAIL_MSG( "invalid bitmap" );
+ return -1;
+ }
- return M_BMPDATA->m_bpp;
+ return M_BMPDATA->m_bpp;
}
void wxBitmap::SetHeight( int height )
{
- if (!Ok()) return;
+ if (!Ok()) return;
- wxFAIL_MSG( "wxBitmap::SetHeight not implemented" );
+ wxFAIL_MSG( "wxBitmap::SetHeight not implemented" );
- M_BMPDATA->m_height = height;
+ M_BMPDATA->m_height = height;
}
void wxBitmap::SetWidth( int width )
{
- if (!Ok()) return;
+ if (!Ok()) return;
- wxFAIL_MSG( "wxBitmap::SetWidth not implemented" );
+ wxFAIL_MSG( "wxBitmap::SetWidth not implemented" );
- M_BMPDATA->m_width = width;
+ M_BMPDATA->m_width = width;
}
void wxBitmap::SetDepth( int depth )
{
- if (!Ok()) return;
+ if (!Ok()) return;
- wxFAIL_MSG( "wxBitmap::SetDepth not implemented" );
+ wxFAIL_MSG( "wxBitmap::SetDepth not implemented" );
- M_BMPDATA->m_bpp = depth;
+ M_BMPDATA->m_bpp = depth;
}
wxMask *wxBitmap::GetMask(void) const
{
- if (!Ok())
- {
- wxFAIL_MSG( "invalid bitmap" );
- return (wxMask *) NULL;
- }
+ if (!Ok())
+ {
+ wxFAIL_MSG( "invalid bitmap" );
+ return (wxMask *) NULL;
+ }
- return M_BMPDATA->m_mask;
+ return M_BMPDATA->m_mask;
}
void wxBitmap::SetMask( wxMask *mask )
{
- if (!Ok())
- {
- wxFAIL_MSG( "invalid bitmap" );
- return;
- }
+ if (!Ok())
+ {
+ wxFAIL_MSG( "invalid bitmap" );
+ return;
+ }
- if (M_BMPDATA->m_mask) delete M_BMPDATA->m_mask;
+ if (M_BMPDATA->m_mask) delete M_BMPDATA->m_mask;
- M_BMPDATA->m_mask = mask;
+ M_BMPDATA->m_mask = mask;
}
-bool wxBitmap::SaveFile( const wxString &WXUNUSED(name), int WXUNUSED(type),
- wxPalette *WXUNUSED(palette) )
+bool wxBitmap::SaveFile( const wxString &name, int type, wxPalette *WXUNUSED(palette) )
{
- if (!Ok())
- {
- wxFAIL_MSG( "invalid bitmap" );
- return FALSE;
- }
+ if (!Ok())
+ {
+ wxFAIL_MSG( "invalid bitmap" );
+ return FALSE;
+ }
- return FALSE;
+ if (type == wxBITMAP_TYPE_PNG)
+ {
+ wxImage image = ConvertToImage();
+ if (image.Ok()) return image.SaveFile( name, type );
+ }
+
+ return FALSE;
}
-bool wxBitmap::LoadFile( const wxString &WXUNUSED(name), int WXUNUSED(type) )
+bool wxBitmap::LoadFile( const wxString &name, int type )
{
- if (!Ok())
- {
- wxFAIL_MSG( "invalid bitmap" );
- return FALSE;
- }
+ UnRef();
+
+ if (!wxFileExists(name)) return FALSE;
+
+ if (type == wxBITMAP_TYPE_XPM)
+ {
+ m_refData = new wxBitmapRefData();
+
+ GdkBitmap *mask = (GdkBitmap*) NULL;
+ GdkWindow *parent = (GdkWindow*) &gdk_root_parent;
- return FALSE;
+ M_BMPDATA->m_pixmap = gdk_pixmap_create_from_xpm( parent, &mask, NULL, name );
+
+ if (mask)
+ {
+ M_BMPDATA->m_mask = new wxMask();
+ M_BMPDATA->m_mask->m_bitmap = mask;
+ }
+
+ gdk_window_get_size( M_BMPDATA->m_pixmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) );
+ M_BMPDATA->m_bpp = gdk_window_get_visual( parent )->depth;
+ }
+ else if (type == wxBITMAP_TYPE_PNG)
+ {
+ wxImage image;
+ image.LoadFile( name, type );
+ if (image.Ok()) *this = wxBitmap( image );
+ }
+ else if (type == wxBITMAP_TYPE_BMP)
+ {
+ wxImage image;
+ image.LoadFile( name, type );
+ if (image.Ok()) *this = wxBitmap( image );
+ }
+ else
+ return FALSE;
+
+ return TRUE;
}
wxPalette *wxBitmap::GetPalette(void) const
{
- if (!Ok()) return (wxPalette *) NULL;
- return M_BMPDATA->m_palette;
+ if (!Ok()) return (wxPalette *) NULL;
+ return M_BMPDATA->m_palette;
}
GdkPixmap *wxBitmap::GetPixmap(void) const
{
- if (!Ok())
- {
- wxFAIL_MSG( "invalid bitmap" );
- return (GdkPixmap *) NULL;
- }
+ if (!Ok())
+ {
+ wxFAIL_MSG( "invalid bitmap" );
+ return (GdkPixmap *) NULL;
+ }
- return M_BMPDATA->m_pixmap;
+ return M_BMPDATA->m_pixmap;
}
GdkBitmap *wxBitmap::GetBitmap(void) const
{
- if (!Ok())
- {
- wxFAIL_MSG( "invalid bitmap" );
- return (GdkBitmap *) NULL;
- }
+ if (!Ok())
+ {
+ wxFAIL_MSG( "invalid bitmap" );
+ return (GdkBitmap *) NULL;
+ }
- return M_BMPDATA->m_bitmap;
+ return M_BMPDATA->m_bitmap;
}
wxBitmap::wxBitmap( const wxImage &image )
{
- if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
+ if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
- if (!image.Ok()) return;
+ if (!image.Ok()) return;
- m_refData = new wxBitmapRefData();
+ m_refData = new wxBitmapRefData();
- M_BMPDATA->m_height = image.GetHeight();
- M_BMPDATA->m_width = image.GetWidth();
- int width = image.GetWidth();
- int height = image.GetHeight();
+ M_BMPDATA->m_height = image.GetHeight();
+ M_BMPDATA->m_width = image.GetWidth();
+ int width = image.GetWidth();
+ int height = image.GetHeight();
- // Create picture
+ // Create picture
- GdkImage *data_image =
- gdk_image_new( GDK_IMAGE_FASTEST, gdk_visual_get_system(), width, height );
+ GdkImage *data_image =
+ gdk_image_new( GDK_IMAGE_FASTEST, gdk_visual_get_system(), width, height );
- M_BMPDATA->m_pixmap =
- gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, -1 );
+ M_BMPDATA->m_pixmap =
+ gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, -1 );
- // Create mask
+ // Create mask
- GdkImage *mask_image = (GdkImage*) NULL;
+ GdkImage *mask_image = (GdkImage*) NULL;
- if (image.HasMask())
- {
- unsigned char *mask_data = (unsigned char*)malloc( ((width >> 3)+8) * height );
+ if (image.HasMask())
+ {
+ unsigned char *mask_data = (unsigned char*)malloc( ((width >> 3)+8) * height );
- mask_image = gdk_image_new_bitmap( gdk_visual_get_system(), mask_data, width, height );
+ mask_image = gdk_image_new_bitmap( gdk_visual_get_system(), mask_data, width, height );
- M_BMPDATA->m_mask = new wxMask();
- M_BMPDATA->m_mask->m_bitmap = gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, 1 );
- }
+ M_BMPDATA->m_mask = new wxMask();
+ M_BMPDATA->m_mask->m_bitmap = gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, 1 );
+ }
- // Retrieve depth
+ // Retrieve depth
- M_BMPDATA->m_bpp = data_image->depth;
+ M_BMPDATA->m_bpp = data_image->depth;
- int render_depth = 8;
- if (M_BMPDATA->m_bpp > 8) render_depth = M_BMPDATA->m_bpp;
+ int render_depth = 8;
+ if (M_BMPDATA->m_bpp > 8) render_depth = M_BMPDATA->m_bpp;
- // Render
+ // Render
- enum byte_order { RGB, RBG, BRG, BGR, GRB, GBR };
- byte_order b_o;
+ enum byte_order { RGB, RBG, BRG, BGR, GRB, GBR };
+ byte_order b_o = RGB;
- if (render_depth >= 24)
- {
- GdkVisual *visual = gdk_visual_get_system();
- if ((visual->red_mask > visual->green_mask) && (visual->green_mask > visual->blue_mask)) b_o = RGB;
- else if ((visual->red_mask > visual->blue_mask) && (visual->blue_mask > visual->green_mask)) b_o = RGB;
- else if ((visual->blue_mask > visual->red_mask) && (visual->red_mask > visual->green_mask)) b_o = BRG;
- else if ((visual->blue_mask > visual->green_mask) && (visual->green_mask > visual->red_mask)) b_o = BGR;
- else if ((visual->green_mask > visual->red_mask) && (visual->red_mask > visual->blue_mask)) b_o = GRB;
- else if ((visual->green_mask > visual->blue_mask) && (visual->blue_mask > visual->red_mask)) b_o = GBR;
- }
+ if (render_depth >= 24)
+ {
+ GdkVisual *visual = gdk_visual_get_system();
+ if ((visual->red_mask > visual->green_mask) && (visual->green_mask > visual->blue_mask)) b_o = RGB;
+ else if ((visual->red_mask > visual->blue_mask) && (visual->blue_mask > visual->green_mask)) b_o = RGB;
+ else if ((visual->blue_mask > visual->red_mask) && (visual->red_mask > visual->green_mask)) b_o = BRG;
+ else if ((visual->blue_mask > visual->green_mask) && (visual->green_mask > visual->red_mask)) b_o = BGR;
+ else if ((visual->green_mask > visual->red_mask) && (visual->red_mask > visual->blue_mask)) b_o = GRB;
+ else if ((visual->green_mask > visual->blue_mask) && (visual->blue_mask > visual->red_mask)) b_o = GBR;
+ }
- int r_mask = image.GetMaskRed();
- int g_mask = image.GetMaskGreen();
- int b_mask = image.GetMaskBlue();
+ int r_mask = image.GetMaskRed();
+ int g_mask = image.GetMaskGreen();
+ int b_mask = image.GetMaskBlue();
- unsigned char* data = image.GetData();
+ unsigned char* data = image.GetData();
- int index = 0;
- for (int y = 0; y < height; y++)
- for (int x = 0; x < width; x++)
- {
- int r = data[index];
- index++;
- int g = data[index];
- index++;
- int b = data[index];
- index++;
+ int index = 0;
+ for (int y = 0; y < height; y++)
+ {
+ for (int x = 0; x < width; x++)
+ {
+ int r = data[index];
+ index++;
+ int g = data[index];
+ index++;
+ int b = data[index];
+ index++;
- if (image.HasMask())
- {
- if ((r == r_mask) && (b = b_mask) && (g = g_mask))
- gdk_image_put_pixel( mask_image, x, y, 0 );
- else
- gdk_image_put_pixel( mask_image, x, y, 1 );
- }
+ if (image.HasMask())
+ {
+ if ((r == r_mask) && (b = b_mask) && (g = g_mask))
+ gdk_image_put_pixel( mask_image, x, y, 0 );
+ else
+ gdk_image_put_pixel( mask_image, x, y, 1 );
+ }
- switch (render_depth)
- {
- case 8:
- {
- GdkColormap *cmap = gtk_widget_get_default_colormap();
- GdkColor *colors = cmap->colors;
- int max = 3 * (65536);
- int index = -1;
-
- for (int i = 0; i < cmap->size; i++)
- {
- int rdiff = (r << 8) - colors[i].red;
- int gdiff = (g << 8) - colors[i].green;
- int bdiff = (b << 8) - colors[i].blue;
- int sum = ABS (rdiff) + ABS (gdiff) + ABS (bdiff);
- if (sum < max) { index = i; max = sum; }
- }
+ switch (render_depth)
+ {
+ case 8:
+ {
+ GdkColormap *cmap = gtk_widget_get_default_colormap();
+ GdkColor *colors = cmap->colors;
+ int max = 3 * (65536);
+ int index = -1;
+
+ for (int i = 0; i < cmap->size; i++)
+ {
+ int rdiff = (r << 8) - colors[i].red;
+ int gdiff = (g << 8) - colors[i].green;
+ int bdiff = (b << 8) - colors[i].blue;
+ int sum = ABS (rdiff) + ABS (gdiff) + ABS (bdiff);
+ if (sum < max) { index = i; max = sum; }
+ }
- gdk_image_put_pixel( data_image, x, y, index );
+ gdk_image_put_pixel( data_image, x, y, index );
- break;
- }
- case 15:
- {
- guint32 pixel = ((r & 0xf8) << 7) | ((g & 0xf8) << 2) | ((b & 0xf8) >> 3);
- gdk_image_put_pixel( data_image, x, y, pixel );
- break;
- }
- case 16:
- {
- guint32 pixel = ((r & 0xf8) << 8) | ((g & 0xfc) << 3) | ((b & 0xf8) >> 3);
- gdk_image_put_pixel( data_image, x, y, pixel );
- break;
- }
- case 32:
- case 24:
- {
- guint32 pixel = 0;
- switch (b_o)
- {
- case RGB: pixel = (r << 16) | (g << 8) | b; break;
- case RBG: pixel = (r << 16) | (b << 8) | g; break;
- case BRG: pixel = (b << 16) | (r << 8) | g; break;
- case BGR: pixel = (b << 16) | (g << 8) | r; break;
- case GRB: pixel = (g << 16) | (r << 8) | b; break;
- case GBR: pixel = (g << 16) | (b << 8) | r; break;
+ break;
+ }
+ case 15:
+ {
+ guint32 pixel = ((r & 0xf8) << 7) | ((g & 0xf8) << 2) | ((b & 0xf8) >> 3);
+ gdk_image_put_pixel( data_image, x, y, pixel );
+ break;
+ }
+ case 16:
+ {
+ guint32 pixel = ((r & 0xf8) << 8) | ((g & 0xfc) << 3) | ((b & 0xf8) >> 3);
+ gdk_image_put_pixel( data_image, x, y, pixel );
+ break;
+ }
+ case 32:
+ case 24:
+ {
+ guint32 pixel = 0;
+ switch (b_o)
+ {
+ case RGB: pixel = (r << 16) | (g << 8) | b; break;
+ case RBG: pixel = (r << 16) | (b << 8) | g; break;
+ case BRG: pixel = (b << 16) | (r << 8) | g; break;
+ case BGR: pixel = (b << 16) | (g << 8) | r; break;
+ case GRB: pixel = (g << 16) | (r << 8) | b; break;
+ case GBR: pixel = (g << 16) | (b << 8) | r; break;
+ }
+ gdk_image_put_pixel( data_image, x, y, pixel );
+ }
+ default: break;
}
- gdk_image_put_pixel( data_image, x, y, pixel );
- }
- default: break;
- }
- }
-
- // Blit picture
+ } // for
+ } // for
+
+ // Blit picture
- GdkGC *data_gc = gdk_gc_new( M_BMPDATA->m_pixmap );
+ GdkGC *data_gc = gdk_gc_new( M_BMPDATA->m_pixmap );
- gdk_draw_image( M_BMPDATA->m_pixmap, data_gc, data_image, 0, 0, 0, 0, width, height );
+ gdk_draw_image( M_BMPDATA->m_pixmap, data_gc, data_image, 0, 0, 0, 0, width, height );
- gdk_image_destroy( data_image );
- gdk_gc_unref( data_gc );
+ gdk_image_destroy( data_image );
+ gdk_gc_unref( data_gc );
- // Blit mask
+ // Blit mask
- if (image.HasMask())
- {
- GdkGC *mask_gc = gdk_gc_new( M_BMPDATA->m_mask->m_bitmap );
+ if (image.HasMask())
+ {
+ GdkGC *mask_gc = gdk_gc_new( M_BMPDATA->m_mask->m_bitmap );
- gdk_draw_image( M_BMPDATA->m_mask->m_bitmap, mask_gc, mask_image, 0, 0, 0, 0, width, height );
+ gdk_draw_image( M_BMPDATA->m_mask->m_bitmap, mask_gc, mask_image, 0, 0, 0, 0, width, height );
- gdk_image_destroy( mask_image );
- gdk_gc_unref( mask_gc );
- }
-
+ gdk_image_destroy( mask_image );
+ gdk_gc_unref( mask_gc );
+ }
}
wxImage wxBitmap::ConvertToImage() const
{
- wxImage image;
+ wxImage image;
- if (!Ok())
- {
- wxFAIL_MSG( "invalid bitmap" );
- return image;
- }
+ if (!Ok())
+ {
+ wxFAIL_MSG( "invalid bitmap" );
+ return image;
+ }
- GdkImage *gdk_image = gdk_image_get( M_BMPDATA->m_pixmap, 0, 0, M_BMPDATA->m_width, M_BMPDATA->m_height );
+ GdkImage *gdk_image = gdk_image_get( M_BMPDATA->m_pixmap, 0, 0, M_BMPDATA->m_width, M_BMPDATA->m_height );
- if (!gdk_image) return image;
+ if (!gdk_image) return image;
- image.Create( M_BMPDATA->m_width, M_BMPDATA->m_height );
- char unsigned *data = image.GetData();
+ image.Create( M_BMPDATA->m_width, M_BMPDATA->m_height );
+ char unsigned *data = image.GetData();
-
- GdkVisual *visual = gdk_window_get_visual( M_BMPDATA->m_pixmap );
- if (visual == NULL) visual = gdk_window_get_visual( (GdkWindow*) &gdk_root_parent );
- int bpp = visual->depth;
+ GdkVisual *visual = gdk_window_get_visual( M_BMPDATA->m_pixmap );
+ if (visual == NULL) visual = gdk_window_get_visual( (GdkWindow*) &gdk_root_parent );
+ int bpp = visual->depth;
- GdkColormap *cmap = gtk_widget_get_default_colormap();
+ GdkColormap *cmap = gtk_widget_get_default_colormap();
- long pos = 0;
- for (int j = 0; j < M_BMPDATA->m_height; j++)
- {
- for (int i = 0; i < M_BMPDATA->m_width; i++)
+ long pos = 0;
+ for (int j = 0; j < M_BMPDATA->m_height; j++)
{
- int pixel = gdk_image_get_pixel( gdk_image, i, j );
- if (bpp <= 8)
- {
- data[pos] = cmap->colors[pixel].red >> 8;
- data[pos+1] = cmap->colors[pixel].green >> 8;
- data[pos+2] = cmap->colors[pixel].blue >> 8;
- } else if (bpp == 15)
- {
- data[pos] = (pixel >> 7) & 0xf8;
- data[pos+1] = (pixel >> 2) & 0xf8;
- data[pos+2] = (pixel << 3) & 0xf8;
- } else if (bpp == 16)
- {
- data[pos] = (pixel >> 8) & 0xf8;
- data[pos+1] = (pixel >> 3) & 0xfc;
- data[pos+2] = (pixel << 3) & 0xf8;
- } else
- {
- data[pos] = (pixel >> 16) & 0xff;
- data[pos+1] = (pixel >> 8) & 0xff;
- data[pos+2] = pixel & 0xff;
- }
+ for (int i = 0; i < M_BMPDATA->m_width; i++)
+ {
+ int pixel = gdk_image_get_pixel( gdk_image, i, j );
+ if (bpp <= 8)
+ {
+ data[pos] = cmap->colors[pixel].red >> 8;
+ data[pos+1] = cmap->colors[pixel].green >> 8;
+ data[pos+2] = cmap->colors[pixel].blue >> 8;
+ } else if (bpp == 15)
+ {
+ data[pos] = (pixel >> 7) & 0xf8;
+ data[pos+1] = (pixel >> 2) & 0xf8;
+ data[pos+2] = (pixel << 3) & 0xf8;
+ } else if (bpp == 16)
+ {
+ data[pos] = (pixel >> 8) & 0xf8;
+ data[pos+1] = (pixel >> 3) & 0xfc;
+ data[pos+2] = (pixel << 3) & 0xf8;
+ } else
+ {
+ data[pos] = (pixel >> 16) & 0xff;
+ data[pos+1] = (pixel >> 8) & 0xff;
+ data[pos+2] = pixel & 0xff;
+ }
- pos += 3;
+ pos += 3;
+ }
}
- }
- gdk_image_destroy( gdk_image );
+ gdk_image_destroy( gdk_image );
- return image;
+ return image;
}
IMPLEMENT_DYNAMIC_CLASS(wxButton,wxControl)
-wxButton::wxButton(void)
+wxButton::wxButton()
{
}
+wxButton::~wxButton()
+{
+ if (m_clientData) delete m_clientData;
+}
+
bool wxButton::Create( wxWindow *parent, wxWindowID id, const wxString &label,
const wxPoint &pos, const wxSize &size,
long style, const wxValidator& validator, const wxString &name )
{
+ m_clientData = (wxClientData*) NULL;
m_needParent = TRUE;
wxSize newSize = size;
gtk_widget_set_style( GTK_BUTTON(m_widget)->child, m_widgetStyle );
}
+
IMPLEMENT_DYNAMIC_CLASS(wxChoice,wxControl)
-wxChoice::wxChoice(void)
+wxChoice::wxChoice()
{
}
bool wxChoice::Create( wxWindow *parent, wxWindowID id,
- const wxPoint &pos, const wxSize &size,
- int n, const wxString choices[],
- long style, const wxValidator& validator, const wxString &name )
+ const wxPoint &pos, const wxSize &size,
+ int n, const wxString choices[],
+ long style, const wxValidator& validator, const wxString &name )
{
- m_needParent = TRUE;
+ m_needParent = TRUE;
- PreCreation( parent, id, pos, size, style, name );
+ PreCreation( parent, id, pos, size, style, name );
- SetValidator( validator );
+ SetValidator( validator );
- m_widget = gtk_option_menu_new();
+ m_widget = gtk_option_menu_new();
- wxSize newSize = size;
- if (newSize.x == -1) newSize.x = 80;
- if (newSize.y == -1) newSize.y = 26;
- SetSize( newSize.x, newSize.y );
+ wxSize newSize = size;
+ if (newSize.x == -1) newSize.x = 80;
+ if (newSize.y == -1) newSize.y = 26;
+ SetSize( newSize.x, newSize.y );
- GtkWidget *menu = gtk_menu_new();
+ GtkWidget *menu = gtk_menu_new();
- for (int i = 0; i < n; i++)
- {
- GtkWidget *item = gtk_menu_item_new_with_label( choices[i] );
- gtk_menu_append( GTK_MENU(menu), item );
+ for (int i = 0; i < n; i++)
+ {
+ m_clientDataList.Append( (wxObject*) NULL );
- gtk_widget_realize( item );
- gtk_widget_realize( GTK_BIN(item)->child );
+ GtkWidget *item = gtk_menu_item_new_with_label( choices[i] );
+ gtk_menu_append( GTK_MENU(menu), item );
- gtk_widget_show( item );
+ gtk_widget_realize( item );
+ gtk_widget_realize( GTK_BIN(item)->child );
- gtk_signal_connect( GTK_OBJECT( item ), "activate",
- GTK_SIGNAL_FUNC(gtk_choice_clicked_callback), (gpointer*)this );
- }
- gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu );
+ gtk_widget_show( item );
+
+ gtk_signal_connect( GTK_OBJECT( item ), "activate",
+ GTK_SIGNAL_FUNC(gtk_choice_clicked_callback), (gpointer*)this );
+ }
+ gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu );
- m_parent->AddChild( this );
+ m_parent->AddChild( this );
- (m_parent->m_insertCallback)( m_parent, this );
+ (m_parent->m_insertCallback)( m_parent, this );
- PostCreation();
+ PostCreation();
- SetBackgroundColour( parent->GetBackgroundColour() );
- SetForegroundColour( parent->GetForegroundColour() );
+ SetBackgroundColour( parent->GetBackgroundColour() );
+ SetForegroundColour( parent->GetForegroundColour() );
- Show( TRUE );
+ Show( TRUE );
- return TRUE;
+ return TRUE;
}
+wxChoice::~wxChoice()
+{
+ wxNode *node = m_clientDataList.First();
+ while (node)
+ {
+ wxClientData *cd = (wxClientData*)node->Data();
+ if (cd) delete cd;
+ node = node->Next();
+ }
+ m_clientDataList.Clear();
+}
+
+void wxChoice::AppendCommon( const wxString &item )
+{
+ wxCHECK_RET( m_widget != NULL, "invalid choice" );
+
+ GtkWidget *menu = gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) );
+ GtkWidget *menu_item = gtk_menu_item_new_with_label( item );
+
+ gtk_menu_append( GTK_MENU(menu), menu_item );
+
+ gtk_widget_realize( menu_item );
+ gtk_widget_realize( GTK_BIN(menu_item)->child );
+
+ if (m_widgetStyle) ApplyWidgetStyle();
+
+ gtk_signal_connect( GTK_OBJECT( menu_item ), "activate",
+ GTK_SIGNAL_FUNC(gtk_choice_clicked_callback), (gpointer*)this );
+
+ gtk_widget_show( menu_item );
+}
+
void wxChoice::Append( const wxString &item )
{
- wxCHECK_RET( m_widget != NULL, "invalid choice" );
+ m_clientDataList.Append( (wxObject*)NULL );
+
+ AppendCommon( item );
+}
+
+void wxChoice::Append( const wxString &item, void *clientData )
+{
+ if (clientData)
+ m_clientDataList.Append( (wxObject*) new wxVoidClientData( clientData ) );
+ else
+ m_clientDataList.Append( (wxObject*)NULL );
+
+ AppendCommon( item );
+}
+
+void wxChoice::Append( const wxString &item, wxClientData *clientData )
+{
+ m_clientDataList.Append( (wxObject*) clientData );
+
+ AppendCommon( item );
+}
- GtkWidget *menu = gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) );
- GtkWidget *menu_item = gtk_menu_item_new_with_label( item );
+void wxChoice::SetClientData( int n, void* clientData )
+{
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- gtk_menu_append( GTK_MENU(menu), menu_item );
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return;
- gtk_widget_realize( menu_item );
- gtk_widget_realize( GTK_BIN(menu_item)->child );
+ wxClientData *cd = (wxClientData*) node->Data();
+ if (cd) delete cd;
- if (m_widgetStyle) ApplyWidgetStyle();
+ if (clientData)
+ node->SetData( (wxObject*) new wxVoidClientData(clientData) );
+ else
+ node->SetData( (wxObject*) NULL );
+}
+
+void* wxChoice::GetClientData( int n )
+{
+ wxCHECK_MSG( m_widget != NULL, NULL, "invalid combobox" );
- gtk_signal_connect( GTK_OBJECT( menu_item ), "activate",
- GTK_SIGNAL_FUNC(gtk_choice_clicked_callback), (gpointer*)this );
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return NULL;
- gtk_widget_show( menu_item );
+ wxVoidClientData *cd = (wxVoidClientData*) node->Data();
+ if (cd)
+ return cd->GetData();
+ else
+ return (void*) NULL;
}
+
+void wxChoice::SetClientObject( int n, wxClientData* clientData )
+{
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return;
+
+ wxClientData *cd = (wxClientData*) node->Data();
+ if (cd) delete cd;
+
+ node->SetData( (wxObject*) clientData );
+}
+
+wxClientData* wxChoice::GetClientObject( int n )
+{
+ wxCHECK_MSG( m_widget != NULL, (wxClientData*)NULL, "invalid combobox" );
+
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return (wxClientData*) NULL;
+
+ return (wxClientData*) node->Data();
+}
+
-void wxChoice::Clear(void)
+void wxChoice::Clear()
{
- wxCHECK_RET( m_widget != NULL, "invalid choice" );
+ wxCHECK_RET( m_widget != NULL, "invalid choice" );
- gtk_option_menu_remove_menu( GTK_OPTION_MENU(m_widget) );
- GtkWidget *menu = gtk_menu_new();
- gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu );
+ gtk_option_menu_remove_menu( GTK_OPTION_MENU(m_widget) );
+ GtkWidget *menu = gtk_menu_new();
+ gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu );
+
+ wxNode *node = m_clientDataList.First();
+ while (node)
+ {
+ wxClientData *cd = (wxClientData*)node->Data();
+ if (cd) delete cd;
+ node = node->Next();
+ }
+ m_clientDataList.Clear();
}
void wxChoice::Delete( int WXUNUSED(n) )
{
- wxFAIL_MSG( "wxChoice:Delete not implemented" );
+ wxFAIL_MSG( "wxChoice:Delete not implemented" );
}
int wxChoice::FindString( const wxString &string ) const
{
- wxCHECK_MSG( m_widget != NULL, -1, "invalid choice" );
-
- // If you read this code once and you think you understand
- // it, then you are very wrong. Robert Roebling.
-
- GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) );
- int count = 0;
- GList *child = menu_shell->children;
- while (child)
- {
- GtkBin *bin = GTK_BIN( child->data );
- GtkLabel *label = (GtkLabel *) NULL;
- if (bin->child) label = GTK_LABEL(bin->child);
- if (!label) label = GTK_LABEL( GTK_BUTTON(m_widget)->child );
+ wxCHECK_MSG( m_widget != NULL, -1, "invalid choice" );
+
+ // If you read this code once and you think you understand
+ // it, then you are very wrong. Robert Roebling.
+
+ GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) );
+ int count = 0;
+ GList *child = menu_shell->children;
+ while (child)
+ {
+ GtkBin *bin = GTK_BIN( child->data );
+ GtkLabel *label = (GtkLabel *) NULL;
+ if (bin->child) label = GTK_LABEL(bin->child);
+ if (!label) label = GTK_LABEL( GTK_BUTTON(m_widget)->child );
- wxASSERT_MSG( label != NULL , "wxChoice: invalid label" );
+ wxASSERT_MSG( label != NULL , "wxChoice: invalid label" );
- if (string == label->label) return count;
- child = child->next;
- count++;
- }
+ if (string == label->label) return count;
+ child = child->next;
+ count++;
+ }
- wxFAIL_MSG( "wxChoice: string not found" );
+ wxFAIL_MSG( "wxChoice: string not found" );
- return -1;
+ return -1;
}
-int wxChoice::GetColumns(void) const
+int wxChoice::GetColumns() const
{
- return 1;
+ return 1;
}
-int wxChoice::GetSelection(void)
+int wxChoice::GetSelection()
{
- wxCHECK_MSG( m_widget != NULL, -1, "invalid choice" );
-
- GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) );
- int count = 0;
- GList *child = menu_shell->children;
- while (child)
- {
- GtkBin *bin = GTK_BIN( child->data );
- if (!bin->child) return count;
- child = child->next;
- count++;
- }
-
- wxFAIL_MSG( "wxChoice: no selection" );
-
- return -1;
+ wxCHECK_MSG( m_widget != NULL, -1, "invalid choice" );
+
+ GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) );
+ int count = 0;
+ GList *child = menu_shell->children;
+ while (child)
+ {
+ GtkBin *bin = GTK_BIN( child->data );
+ if (!bin->child) return count;
+ child = child->next;
+ count++;
+ }
+
+ wxFAIL_MSG( "wxChoice: no selection" );
+
+ return -1;
}
wxString wxChoice::GetString( int n ) const
{
- wxCHECK_MSG( m_widget != NULL, "", "invalid choice" );
-
- GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) );
- int count = 0;
- GList *child = menu_shell->children;
- while (child)
- {
- GtkBin *bin = GTK_BIN( child->data );
- if (count == n)
+ wxCHECK_MSG( m_widget != NULL, "", "invalid choice" );
+
+ GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) );
+ int count = 0;
+ GList *child = menu_shell->children;
+ while (child)
{
- GtkLabel *label = (GtkLabel *) NULL;
- if (bin->child) label = GTK_LABEL(bin->child);
- if (!label) label = GTK_LABEL( GTK_BUTTON(m_widget)->child );
+ GtkBin *bin = GTK_BIN( child->data );
+ if (count == n)
+ {
+ GtkLabel *label = (GtkLabel *) NULL;
+ if (bin->child) label = GTK_LABEL(bin->child);
+ if (!label) label = GTK_LABEL( GTK_BUTTON(m_widget)->child );
- wxASSERT_MSG( label != NULL , "wxChoice: invalid label" );
+ wxASSERT_MSG( label != NULL , "wxChoice: invalid label" );
- return label->label;
+ return label->label;
+ }
+ child = child->next;
+ count++;
}
- child = child->next;
- count++;
- }
- wxFAIL_MSG( "wxChoice: string not found" );
+ wxFAIL_MSG( "wxChoice: string not found" );
- return "";
+ return "";
}
-wxString wxChoice::GetStringSelection(void) const
+wxString wxChoice::GetStringSelection() const
{
- wxCHECK_MSG( m_widget != NULL, "", "invalid choice" );
+ wxCHECK_MSG( m_widget != NULL, "", "invalid choice" );
- GtkLabel *label = GTK_LABEL( GTK_BUTTON(m_widget)->child );
+ GtkLabel *label = GTK_LABEL( GTK_BUTTON(m_widget)->child );
- wxASSERT_MSG( label != NULL , "wxChoice: invalid label" );
+ wxASSERT_MSG( label != NULL , "wxChoice: invalid label" );
- return label->label;
+ return label->label;
}
-int wxChoice::Number(void) const
+int wxChoice::Number() const
{
- wxCHECK_MSG( m_widget != NULL, 0, "invalid choice" );
-
- GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) );
- int count = 0;
- GList *child = menu_shell->children;
- while (child)
- {
- count++;
- child = child->next;
- }
- return count;
+ wxCHECK_MSG( m_widget != NULL, 0, "invalid choice" );
+
+ GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) );
+ int count = 0;
+ GList *child = menu_shell->children;
+ while (child)
+ {
+ count++;
+ child = child->next;
+ }
+ return count;
}
void wxChoice::SetColumns( int WXUNUSED(n) )
void wxChoice::SetSelection( int n )
{
- wxCHECK_RET( m_widget != NULL, "invalid choice" );
+ wxCHECK_RET( m_widget != NULL, "invalid choice" );
- int tmp = n;
- gtk_option_menu_set_history( GTK_OPTION_MENU(m_widget), (gint)tmp );
+ int tmp = n;
+ gtk_option_menu_set_history( GTK_OPTION_MENU(m_widget), (gint)tmp );
- gtk_choice_clicked_callback( (GtkWidget *) NULL, this );
+ gtk_choice_clicked_callback( (GtkWidget *) NULL, this );
}
void wxChoice::SetStringSelection( const wxString &string )
{
- wxCHECK_RET( m_widget != NULL, "invalid choice" );
+ wxCHECK_RET( m_widget != NULL, "invalid choice" );
- int n = FindString( string );
- if (n != -1) SetSelection( n );
+ int n = FindString( string );
+ if (n != -1) SetSelection( n );
}
void wxChoice::ApplyWidgetStyle()
{
- SetWidgetStyle();
+ SetWidgetStyle();
- GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) );
+ GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) );
- gtk_widget_set_style( m_widget, m_widgetStyle );
- gtk_widget_set_style( GTK_WIDGET( menu_shell ), m_widgetStyle );
+ gtk_widget_set_style( m_widget, m_widgetStyle );
+ gtk_widget_set_style( GTK_WIDGET( menu_shell ), m_widgetStyle );
- GList *child = menu_shell->children;
- while (child)
- {
- gtk_widget_set_style( GTK_WIDGET( child->data ), m_widgetStyle );
+ GList *child = menu_shell->children;
+ while (child)
+ {
+ gtk_widget_set_style( GTK_WIDGET( child->data ), m_widgetStyle );
- GtkBin *bin = GTK_BIN( child->data );
- GtkWidget *label = (GtkWidget *) NULL;
- if (bin->child) label = bin->child;
- if (!label) label = GTK_BUTTON(m_widget)->child;
+ GtkBin *bin = GTK_BIN( child->data );
+ GtkWidget *label = (GtkWidget *) NULL;
+ if (bin->child) label = bin->child;
+ if (!label) label = GTK_BUTTON(m_widget)->child;
- gtk_widget_set_style( label, m_widgetStyle );
+ gtk_widget_set_style( label, m_widgetStyle );
- child = child->next;
- }
+ child = child->next;
+ }
}
wxClipboard *wxTheClipboard = (wxClipboard*) NULL;
+GdkAtom g_textAtom = 0;
+GdkAtom g_clipboardAtom = 0;
+
//-----------------------------------------------------------------------------
// functions
//-----------------------------------------------------------------------------
// "selection_received"
//-----------------------------------------------------------------------------
-/*
-static void selection_received( GtkWidget *widget, GtkSelectionData *selection_data, gpointer data )
+static void
+selection_received( GtkWidget *widget, GtkSelectionData *selection_data, gpointer data )
{
}
-*/
+
+//-----------------------------------------------------------------------------
+// "selection_clear"
+//-----------------------------------------------------------------------------
+
+static gint
+selection_clear( GtkWidget *widget, GdkEventSelection *event )
+{
+ /* The clipboard is no longer in our hands. We can delete the
+ * clipboard data. I hope I got that one right... */
+
+ if (!wxTheClipboard) return TRUE;
+
+ wxTheClipboard->SetData( (wxDataObject*) NULL );
+
+ return TRUE;
+}
+
+//-----------------------------------------------------------------------------
+// selection handler for supplying data
+//-----------------------------------------------------------------------------
+
+static void
+selection_handler( GtkWidget *WXUNUSED(widget), GtkSelectionData *selection_data, gpointer WXUNUSED(data) )
+{
+ if (!wxTheClipboard) return;
+
+ wxDataObject *data_object = wxTheClipboard->m_data;
+
+ if (!data_object) return;
+
+ if (data_object->GetDataSize() == 0) return;
+
+ gint len = data_object->GetDataSize();
+ guchar *bin_data = (guchar*) malloc( len );
+ data_object->GetDataHere( (void*)bin_data );
+
+ if (selection_data->target == GDK_SELECTION_TYPE_STRING)
+ {
+ gtk_selection_data_set(
+ selection_data, GDK_SELECTION_TYPE_STRING, 8*sizeof(gchar), bin_data, len );
+ }
+ else if (selection_data->target == g_textAtom)
+ {
+ gtk_selection_data_set(
+ selection_data, g_textAtom, 8*sizeof(gchar), bin_data, len );
+ }
+ free( bin_data );
+}
//-----------------------------------------------------------------------------
// wxClipboard
wxClipboard::wxClipboard()
{
- m_data = (wxDataObject*)NULL;
+ m_data = (wxDataObject*) NULL;
m_clipboardWidget = gtk_window_new( GTK_WINDOW_POPUP );
gtk_widget_realize( m_clipboardWidget );
+
+ gtk_signal_connect( GTK_OBJECT(m_clipboardWidget),
+ "selection_clear_event",
+ GTK_SIGNAL_FUNC( selection_clear ),
+ (gpointer) NULL );
+
+ if (!g_clipboardAtom) g_clipboardAtom = gdk_atom_intern( "CLIPBOARD", FALSE );
+ if (!g_textAtom) g_textAtom = gdk_atom_intern( "TEXT", FALSE );
}
wxClipboard::~wxClipboard()
{
- if (m_data) delete m_data;
+ /* As we have data we also own the clipboard. Once we no longer own
+ it, clear_selection is called which will set m_data to zero */
+
+ if (m_data)
+ {
+ delete m_data;
+ gtk_selection_owner_set( (GtkWidget*) NULL, GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME );
+ }
if (m_clipboardWidget) gtk_widget_destroy( m_clipboardWidget );
}
{
if (m_data) delete m_data;
m_data = data;
+ if (!m_data) return;
+
+ if (!gtk_selection_owner_set( m_clipboardWidget,
+ g_clipboardAtom,
+ GDK_CURRENT_TIME))
+ {
+ delete m_data;
+ m_data = (wxDataObject*) NULL;
+ return;
+ }
+
+ switch (m_data->GetPreferredFormat())
+ {
+/*
+ case wxDF_STRING:
+ gtk_selection_add_handler( m_clipboardWidget,
+ g_clipboardAtom,
+ GDK_TARGET_STRING,
+ selection_handler,
+ NULL );
+ break;
+*/
+ case wxDF_TEXT:
+ gtk_selection_add_handler( m_clipboardWidget,
+ g_clipboardAtom,
+ g_textAtom,
+ selection_handler,
+ NULL );
+ break;
+ default:
+ break;
+ }
}
void *wxClipboard::GetData( wxDataFormat format, size_t *length )
static void gtk_combo_clicked_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo )
{
- if (!combo->HasVMT()) return;
- if (g_blockEventsOnDrag) return;
+ if (!combo->HasVMT()) return;
+ if (g_blockEventsOnDrag) return;
- if (combo->m_alreadySent)
- {
- combo->m_alreadySent = FALSE;
- return;
- }
+ if (combo->m_alreadySent)
+ {
+ combo->m_alreadySent = FALSE;
+ return;
+ }
- combo->m_alreadySent = TRUE;
+ combo->m_alreadySent = TRUE;
- wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, combo->GetId());
- event.SetInt( combo->GetSelection() );
- wxString tmp( combo->GetStringSelection() );
- event.SetString( WXSTRINGCAST(tmp) );
- event.SetEventObject(combo);
- combo->GetEventHandler()->ProcessEvent(event);
+ wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, combo->GetId());
+ event.SetInt( combo->GetSelection() );
+ wxString tmp( combo->GetStringSelection() );
+ event.SetString( WXSTRINGCAST(tmp) );
+ event.SetEventObject(combo);
+ combo->GetEventHandler()->ProcessEvent(event);
}
//-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxComboBox,wxControl)
BEGIN_EVENT_TABLE(wxComboBox, wxControl)
- EVT_SIZE(wxComboBox::OnSize)
+ EVT_SIZE(wxComboBox::OnSize)
END_EVENT_TABLE()
-bool wxComboBox::Create(wxWindow *parent, wxWindowID id, const wxString& value,
- const wxPoint& pos, const wxSize& size,
- int n, const wxString choices[],
- long style, const wxValidator& validator, const wxString& name )
+bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value,
+ const wxPoint& pos, const wxSize& size,
+ int n, const wxString choices[],
+ long style, const wxValidator& validator,
+ const wxString& name )
{
- m_alreadySent = FALSE;
- m_needParent = TRUE;
+ m_alreadySent = FALSE;
+ m_needParent = TRUE;
- PreCreation( parent, id, pos, size, style, name );
+ PreCreation( parent, id, pos, size, style, name );
- SetValidator( validator );
+ SetValidator( validator );
- m_widget = gtk_combo_new();
+ m_widget = gtk_combo_new();
- wxSize newSize = size;
- if (newSize.x == -1) newSize.x = 100;
- if (newSize.y == -1) newSize.y = 26;
- SetSize( newSize.x, newSize.y );
+ wxSize newSize = size;
+ if (newSize.x == -1) newSize.x = 100;
+ if (newSize.y == -1) newSize.y = 26;
+ SetSize( newSize.x, newSize.y );
- GtkWidget *list = GTK_COMBO(m_widget)->list;
+ GtkWidget *list = GTK_COMBO(m_widget)->list;
- for (int i = 0; i < n; i++)
- {
- GtkWidget *list_item = gtk_list_item_new_with_label( choices[i] );
+ for (int i = 0; i < n; i++)
+ {
+ GtkWidget *list_item = gtk_list_item_new_with_label( choices[i] );
- m_clientData.Append( (wxObject*)NULL );
+ m_clientDataList.Append( (wxObject*)NULL );
- gtk_container_add( GTK_CONTAINER(list), list_item );
+ gtk_container_add( GTK_CONTAINER(list), list_item );
- gtk_widget_realize( list_item );
- gtk_widget_realize( GTK_BIN(list_item)->child );
+ gtk_widget_realize( list_item );
+ gtk_widget_realize( GTK_BIN(list_item)->child );
- gtk_widget_show( list_item );
+ gtk_widget_show( list_item );
- gtk_signal_connect( GTK_OBJECT(list_item), "select",
- GTK_SIGNAL_FUNC(gtk_combo_clicked_callback), (gpointer)this );
- }
+ gtk_signal_connect( GTK_OBJECT(list_item), "select",
+ GTK_SIGNAL_FUNC(gtk_combo_clicked_callback), (gpointer)this );
+ }
- m_parent->AddChild( this );
+ m_parent->AddChild( this );
- (m_parent->m_insertCallback)( m_parent, this );
+ (m_parent->m_insertCallback)( m_parent, this );
- PostCreation();
+ PostCreation();
- ConnectWidget( GTK_COMBO(m_widget)->button );
+ ConnectWidget( GTK_COMBO(m_widget)->button );
- if (!value.IsNull()) SetValue( value );
+ if (!value.IsNull()) SetValue( value );
- gtk_widget_realize( GTK_COMBO(m_widget)->list );
- gtk_widget_realize( GTK_COMBO(m_widget)->entry );
- gtk_widget_realize( GTK_COMBO(m_widget)->button );
+ gtk_widget_realize( GTK_COMBO(m_widget)->list );
+ gtk_widget_realize( GTK_COMBO(m_widget)->entry );
+ gtk_widget_realize( GTK_COMBO(m_widget)->button );
- SetBackgroundColour( parent->GetBackgroundColour() );
- SetForegroundColour( parent->GetForegroundColour() );
+ SetBackgroundColour( parent->GetBackgroundColour() );
+ SetForegroundColour( parent->GetForegroundColour() );
- Show( TRUE );
+ Show( TRUE );
- return TRUE;
+ return TRUE;
+}
+
+wxComboBox::~wxComboBox()
+{
+ wxNode *node = m_clientDataList.First();
+ while (node)
+ {
+ wxClientData *cd = (wxClientData*)node->Data();
+ if (cd) delete cd;
+ node = node->Next();
+ }
+ m_clientDataList.Clear();
}
-void wxComboBox::Clear(void)
+void wxComboBox::AppendCommon( const wxString &item )
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+
+ GtkWidget *list = GTK_COMBO(m_widget)->list;
+
+ GtkWidget *list_item = gtk_list_item_new_with_label( item );
- GtkWidget *list = GTK_COMBO(m_widget)->list;
- gtk_list_clear_items( GTK_LIST(list), 0, Number() );
+ gtk_signal_connect( GTK_OBJECT(list_item), "select",
+ GTK_SIGNAL_FUNC(gtk_combo_clicked_callback), (gpointer)this );
+
+ gtk_container_add( GTK_CONTAINER(list), list_item );
+
+ if (m_widgetStyle) ApplyWidgetStyle();
- m_clientData.Clear();
+ gtk_widget_show( list_item );
}
void wxComboBox::Append( const wxString &item )
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ m_clientDataList.Append( (wxObject*)NULL );
- Append( item, (char*)NULL );
+ AppendCommon( item );
}
-void wxComboBox::Append( const wxString &item, char *clientData )
+void wxComboBox::Append( const wxString &item, void *clientData )
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
-
- GtkWidget *list = GTK_COMBO(m_widget)->list;
-
- GtkWidget *list_item = gtk_list_item_new_with_label( item );
-
- gtk_signal_connect( GTK_OBJECT(list_item), "select",
- GTK_SIGNAL_FUNC(gtk_combo_clicked_callback), (gpointer)this );
-
- m_clientData.Append( (wxObject*)clientData );
+ if (clientData)
+ m_clientDataList.Append( (wxObject*) new wxVoidClientData( clientData ) );
+ else
+ m_clientDataList.Append( (wxObject*)NULL );
- gtk_container_add( GTK_CONTAINER(list), list_item );
-
- if (m_widgetStyle) ApplyWidgetStyle();
-
- gtk_widget_show( list_item );
+ AppendCommon( item );
}
-void wxComboBox::Delete( int n )
+void wxComboBox::Append( const wxString &item, wxClientData *clientData )
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ m_clientDataList.Append( (wxObject*) clientData );
- GtkList *listbox = GTK_LIST( GTK_COMBO(m_widget)->list );
-
- GList *child = g_list_nth( listbox->children, n );
+ AppendCommon( item );
+}
+
+void wxComboBox::SetClientData( int n, void* clientData )
+{
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- if (!child)
- {
- wxFAIL_MSG("wrong index");
- return;
- }
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return;
- GList *list = g_list_append( NULL, child->data );
- gtk_list_remove_items( listbox, list );
- g_list_free( list );
+ wxClientData *cd = (wxClientData*) node->Data();
+ if (cd) delete cd;
- wxNode *node = m_clientData.Nth( n );
- if (!node)
- {
- wxFAIL_MSG( "wrong index" );
- }
- else
- m_clientData.DeleteNode( node );
+ if (clientData)
+ node->SetData( (wxObject*) new wxVoidClientData(clientData) );
+ else
+ node->SetData( (wxObject*) NULL );
}
-int wxComboBox::FindString( const wxString &item )
+void* wxComboBox::GetClientData( int n )
{
- wxCHECK_MSG( m_widget != NULL, -1, "invalid combobox" );
+ wxCHECK_MSG( m_widget != NULL, NULL, "invalid combobox" );
- GtkWidget *list = GTK_COMBO(m_widget)->list;
-
- GList *child = GTK_LIST(list)->children;
- int count = 0;
- while (child)
- {
- GtkBin *bin = GTK_BIN( child->data );
- GtkLabel *label = GTK_LABEL( bin->child );
- if (item == label->label) return count;
- count++;
- child = child->next;
- }
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return NULL;
+
+ wxVoidClientData *cd = (wxVoidClientData*) node->Data();
+ if (cd)
+ return cd->GetData();
+ else
+ return (void*) NULL;
+}
+
+void wxComboBox::SetClientObject( int n, wxClientData* clientData )
+{
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return;
- wxFAIL_MSG( "wxComboBox: string not found" );
+ wxClientData *cd = (wxClientData*) node->Data();
+ if (cd) delete cd;
- return -1;
+ node->SetData( (wxObject*) clientData );
}
-char* wxComboBox::GetClientData( int n )
+wxClientData* wxComboBox::GetClientObject( int n )
{
- wxCHECK_MSG( m_widget != NULL, (char*)NULL, "invalid combobox" );
+ wxCHECK_MSG( m_widget != NULL, (wxClientData*)NULL, "invalid combobox" );
- wxNode *node = m_clientData.Nth( n );
- if (node) return (char*)node->Data();
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return (wxClientData*) NULL;
+
+ return (wxClientData*) node->Data();
+}
+
+void wxComboBox::Clear()
+{
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- wxFAIL_MSG( "wxComboBox: wrong index" );
+ GtkWidget *list = GTK_COMBO(m_widget)->list;
+ gtk_list_clear_items( GTK_LIST(list), 0, Number() );
- return (char *) NULL;
+ wxNode *node = m_clientDataList.First();
+ while (node)
+ {
+ wxClientData *cd = (wxClientData*)node->Data();
+ if (cd) delete cd;
+ node = node->Next();
+ }
+ m_clientDataList.Clear();
}
-void wxComboBox::SetClientData( int n, char * clientData )
+void wxComboBox::Delete( int n )
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+
+ GtkList *listbox = GTK_LIST( GTK_COMBO(m_widget)->list );
- wxNode *node = m_clientData.Nth( n );
- if (node) node->SetData( (wxObject*) clientData );
+ GList *child = g_list_nth( listbox->children, n );
- wxFAIL_MSG( "wxComboBox: wrong index" );
+ if (!child)
+ {
+ wxFAIL_MSG("wrong index");
+ return;
+ }
+
+ GList *list = g_list_append( NULL, child->data );
+ gtk_list_remove_items( listbox, list );
+ g_list_free( list );
+
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node)
+ {
+ wxFAIL_MSG( "wrong index" );
+ }
+ else
+ {
+ wxClientData *cd = (wxClientData*)node->Data();
+ if (cd) delete cd;
+ m_clientDataList.DeleteNode( node );
+ }
}
-int wxComboBox::GetSelection(void) const
+int wxComboBox::FindString( const wxString &item )
{
- wxCHECK_MSG( m_widget != NULL, -1, "invalid combobox" );
+ wxCHECK_MSG( m_widget != NULL, -1, "invalid combobox" );
- GtkWidget *list = GTK_COMBO(m_widget)->list;
+ GtkWidget *list = GTK_COMBO(m_widget)->list;
- GList *selection = GTK_LIST(list)->selection;
- if (selection)
- {
GList *child = GTK_LIST(list)->children;
int count = 0;
while (child)
{
- if (child->data == selection->data) return count;
- count++;
- child = child->next;
+ GtkBin *bin = GTK_BIN( child->data );
+ GtkLabel *label = GTK_LABEL( bin->child );
+ if (item == label->label) return count;
+ count++;
+ child = child->next;
+ }
+
+ wxFAIL_MSG( "wxComboBox: string not found" );
+
+ return -1;
+}
+
+int wxComboBox::GetSelection() const
+{
+ wxCHECK_MSG( m_widget != NULL, -1, "invalid combobox" );
+
+ GtkWidget *list = GTK_COMBO(m_widget)->list;
+
+ GList *selection = GTK_LIST(list)->selection;
+ if (selection)
+ {
+ GList *child = GTK_LIST(list)->children;
+ int count = 0;
+ while (child)
+ {
+ if (child->data == selection->data) return count;
+ count++;
+ child = child->next;
+ }
}
- }
- wxFAIL_MSG( "wxComboBox: no selection" );
+ wxFAIL_MSG( "wxComboBox: no selection" );
- return -1;
+ return -1;
}
wxString wxComboBox::GetString( int n ) const
{
- wxCHECK_MSG( m_widget != NULL, "", "invalid combobox" );
+ wxCHECK_MSG( m_widget != NULL, "", "invalid combobox" );
- GtkWidget *list = GTK_COMBO(m_widget)->list;
+ GtkWidget *list = GTK_COMBO(m_widget)->list;
- GList *child = g_list_nth( GTK_LIST(list)->children, n );
- if (child)
- {
- GtkBin *bin = GTK_BIN( child->data );
- GtkLabel *label = GTK_LABEL( bin->child );
- return label->label;
- }
+ GList *child = g_list_nth( GTK_LIST(list)->children, n );
+ if (child)
+ {
+ GtkBin *bin = GTK_BIN( child->data );
+ GtkLabel *label = GTK_LABEL( bin->child );
+ return label->label;
+ }
- wxFAIL_MSG( "wxComboBox: wrong index" );
+ wxFAIL_MSG( "wxComboBox: wrong index" );
- return "";
+ return "";
}
-wxString wxComboBox::GetStringSelection(void) const
+wxString wxComboBox::GetStringSelection() const
{
- wxCHECK_MSG( m_widget != NULL, "", "invalid combobox" );
+ wxCHECK_MSG( m_widget != NULL, "", "invalid combobox" );
- GtkWidget *list = GTK_COMBO(m_widget)->list;
+ GtkWidget *list = GTK_COMBO(m_widget)->list;
- GList *selection = GTK_LIST(list)->selection;
- if (selection)
- {
- GtkBin *bin = GTK_BIN( selection->data );
- wxString tmp = GTK_LABEL( bin->child )->label;
- return tmp;
- }
+ GList *selection = GTK_LIST(list)->selection;
+ if (selection)
+ {
+ GtkBin *bin = GTK_BIN( selection->data );
+ wxString tmp = GTK_LABEL( bin->child )->label;
+ return tmp;
+ }
- wxFAIL_MSG( "wxComboBox: no selection" );
+ wxFAIL_MSG( "wxComboBox: no selection" );
- return "";
+ return "";
}
-int wxComboBox::Number(void) const
+int wxComboBox::Number() const
{
- wxCHECK_MSG( m_widget != NULL, 0, "invalid combobox" );
+ wxCHECK_MSG( m_widget != NULL, 0, "invalid combobox" );
- GtkWidget *list = GTK_COMBO(m_widget)->list;
+ GtkWidget *list = GTK_COMBO(m_widget)->list;
- GList *child = GTK_LIST(list)->children;
- int count = 0;
- while (child) { count++; child = child->next; }
- return count;
+ GList *child = GTK_LIST(list)->children;
+ int count = 0;
+ while (child) { count++; child = child->next; }
+ return count;
}
void wxComboBox::SetSelection( int n )
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- GtkWidget *list = GTK_COMBO(m_widget)->list;
- gtk_list_select_item( GTK_LIST(list), n );
+ GtkWidget *list = GTK_COMBO(m_widget)->list;
+ gtk_list_select_item( GTK_LIST(list), n );
}
void wxComboBox::SetStringSelection( const wxString &string )
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- int res = FindString( string );
- if (res == -1) return;
- SetSelection( res );
+ int res = FindString( string );
+ if (res == -1) return;
+ SetSelection( res );
}
-wxString wxComboBox::GetValue(void) const
+wxString wxComboBox::GetValue() const
{
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
- wxString tmp = gtk_entry_get_text( GTK_ENTRY(entry) );
- return tmp;
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ wxString tmp = gtk_entry_get_text( GTK_ENTRY(entry) );
+ return tmp;
}
void wxComboBox::SetValue( const wxString& value )
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
- wxString tmp = "";
- if (!value.IsNull()) tmp = value;
- gtk_entry_set_text( GTK_ENTRY(entry), tmp );
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ wxString tmp = "";
+ if (!value.IsNull()) tmp = value;
+ gtk_entry_set_text( GTK_ENTRY(entry), tmp );
}
-void wxComboBox::Copy(void)
+void wxComboBox::Copy()
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
#if (GTK_MINOR_VERSION == 1)
- gtk_editable_copy_clipboard( GTK_EDITABLE(entry) );
+ gtk_editable_copy_clipboard( GTK_EDITABLE(entry) );
#else
- gtk_editable_copy_clipboard( GTK_EDITABLE(entry), 0 );
+ gtk_editable_copy_clipboard( GTK_EDITABLE(entry), 0 );
#endif
}
-void wxComboBox::Cut(void)
+void wxComboBox::Cut()
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
#if (GTK_MINOR_VERSION == 1)
- gtk_editable_cut_clipboard( GTK_EDITABLE(entry) );
+ gtk_editable_cut_clipboard( GTK_EDITABLE(entry) );
#else
- gtk_editable_cut_clipboard( GTK_EDITABLE(entry), 0 );
+ gtk_editable_cut_clipboard( GTK_EDITABLE(entry), 0 );
#endif
}
-void wxComboBox::Paste(void)
+void wxComboBox::Paste()
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
#if (GTK_MINOR_VERSION == 1)
- gtk_editable_paste_clipboard( GTK_EDITABLE(entry) );
+ gtk_editable_paste_clipboard( GTK_EDITABLE(entry) );
#else
- gtk_editable_paste_clipboard( GTK_EDITABLE(entry), 0 );
+ gtk_editable_paste_clipboard( GTK_EDITABLE(entry), 0 );
#endif
}
void wxComboBox::SetInsertionPoint( long pos )
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
- int tmp = (int) pos;
- gtk_entry_set_position( GTK_ENTRY(entry), tmp );
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ int tmp = (int) pos;
+ gtk_entry_set_position( GTK_ENTRY(entry), tmp );
}
-void wxComboBox::SetInsertionPointEnd(void)
+void wxComboBox::SetInsertionPointEnd()
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
- int pos = GTK_ENTRY(entry)->text_length;
- SetInsertionPoint( pos-1 );
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ int pos = GTK_ENTRY(entry)->text_length;
+ SetInsertionPoint( pos-1 );
}
-long wxComboBox::GetInsertionPoint(void) const
+long wxComboBox::GetInsertionPoint() const
{
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
- return (long) GTK_EDITABLE(entry)->current_pos;
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ return (long) GTK_EDITABLE(entry)->current_pos;
}
-long wxComboBox::GetLastPosition(void) const
+long wxComboBox::GetLastPosition() const
{
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
- int pos = GTK_ENTRY(entry)->text_length;
- return (long) pos-1;
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ int pos = GTK_ENTRY(entry)->text_length;
+ return (long) pos-1;
}
void wxComboBox::Replace( long from, long to, const wxString& value )
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
- gtk_editable_delete_text( GTK_EDITABLE(entry), (gint)from, (gint)to );
- if (value.IsNull()) return;
- gint pos = (gint)to;
- gtk_editable_insert_text( GTK_EDITABLE(entry), value, value.Length(), &pos );
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ gtk_editable_delete_text( GTK_EDITABLE(entry), (gint)from, (gint)to );
+ if (value.IsNull()) return;
+ gint pos = (gint)to;
+ gtk_editable_insert_text( GTK_EDITABLE(entry), value, value.Length(), &pos );
}
void wxComboBox::Remove(long from, long to)
{
- wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
- GtkWidget *entry = GTK_COMBO(m_widget)->entry;
- gtk_editable_delete_text( GTK_EDITABLE(entry), (gint)from, (gint)to );
+ GtkWidget *entry = GTK_COMBO(m_widget)->entry;
+ gtk_editable_delete_text( GTK_EDITABLE(entry), (gint)from, (gint)to );
}
void wxComboBox::SetSelection( long WXUNUSED(from), long WXUNUSED(to) )
{
- wxFAIL_MSG( "wxComboBox::SetSelection not implemented" );
+ wxFAIL_MSG( "wxComboBox::SetSelection not implemented" );
}
void wxComboBox::SetEditable( bool WXUNUSED(editable) )
{
- wxFAIL_MSG( "wxComboBox::SetEditable not implemented" );
+ wxFAIL_MSG( "wxComboBox::SetEditable not implemented" );
}
void wxComboBox::OnSize( wxSizeEvent &event )
{
- wxControl::OnSize( event );
+ wxControl::OnSize( event );
- int w = 21;
+ int w = 21;
+ gtk_widget_set_usize( GTK_COMBO(m_widget)->entry, m_width-w-1, m_height );
- gtk_widget_set_usize( GTK_COMBO(m_widget)->entry, m_width-w-1, m_height );
-
- gtk_widget_set_uposition( GTK_COMBO(m_widget)->button, m_x+m_width-w, m_y );
- gtk_widget_set_usize( GTK_COMBO(m_widget)->button, w, m_height );
+ gtk_widget_set_uposition( GTK_COMBO(m_widget)->button, m_x+m_width-w, m_y );
+ gtk_widget_set_usize( GTK_COMBO(m_widget)->button, w, m_height );
}
void wxComboBox::ApplyWidgetStyle()
{
- SetWidgetStyle();
+ SetWidgetStyle();
- gtk_widget_set_style( GTK_COMBO(m_widget)->button, m_widgetStyle );
- gtk_widget_set_style( GTK_COMBO(m_widget)->entry, m_widgetStyle );
- gtk_widget_set_style( GTK_COMBO(m_widget)->list, m_widgetStyle );
+ gtk_widget_set_style( GTK_COMBO(m_widget)->button, m_widgetStyle );
+ gtk_widget_set_style( GTK_COMBO(m_widget)->entry, m_widgetStyle );
+ gtk_widget_set_style( GTK_COMBO(m_widget)->list, m_widgetStyle );
- GtkList *list = GTK_LIST( GTK_COMBO(m_widget)->list );
- GList *child = list->children;
- while (child)
- {
- gtk_widget_set_style( GTK_WIDGET(child->data), m_widgetStyle );
+ GtkList *list = GTK_LIST( GTK_COMBO(m_widget)->list );
+ GList *child = list->children;
+ while (child)
+ {
+ gtk_widget_set_style( GTK_WIDGET(child->data), m_widgetStyle );
- GtkBin *bin = GTK_BIN(child->data);
- gtk_widget_set_style( bin->child, m_widgetStyle );
+ GtkBin *bin = GTK_BIN(child->data);
+ gtk_widget_set_style( bin->child, m_widgetStyle );
- child = child->next;
- }
+ child = child->next;
+ }
}
-GtkWidget* wxComboBox::GetConnectWidget(void)
+GtkWidget* wxComboBox::GetConnectWidget()
{
- return GTK_COMBO(m_widget)->entry;
+ return GTK_COMBO(m_widget)->entry;
}
bool wxComboBox::IsOwnGtkWindow( GdkWindow *window )
{
- return ( (window == GTK_ENTRY( GTK_COMBO(m_widget)->entry )->text_area) ||
- (window == GTK_COMBO(m_widget)->button->window ) );
+ return ( (window == GTK_ENTRY( GTK_COMBO(m_widget)->entry )->text_area) ||
+ (window == GTK_COMBO(m_widget)->button->window ) );
}
static void gtk_listitem_select_callback( GtkWidget *WXUNUSED(widget), wxListBox *listbox )
{
- if (!listbox->HasVMT()) return;
- if (g_blockEventsOnDrag) return;
+ if (!listbox->HasVMT()) return;
+ if (g_blockEventsOnDrag) return;
- wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, listbox->GetId() );
+ wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, listbox->GetId() );
wxArrayInt aSelections;
int count = listbox->GetSelections(aSelections);
if ( count > 0 )
{
- event.m_commandInt = aSelections[0] ;
- event.m_clientData = listbox->GetClientData(event.m_commandInt);
- wxString str(listbox->GetString(event.m_commandInt));
- if (str != "")
- event.m_commandString = copystring((char *)(const char *)str);
+ event.m_commandInt = aSelections[0] ;
+ event.m_clientData = listbox->GetClientData( event.m_commandInt );
+ wxString str(listbox->GetString(event.m_commandInt));
+ if (str != "") event.m_commandString = copystring((char *)(const char *)str);
}
else
{
- event.m_commandInt = -1 ;
- event.m_commandString = copystring("") ;
+ event.m_commandInt = -1 ;
+ event.m_commandString = copystring("") ;
}
- event.SetEventObject( listbox );
+ event.SetEventObject( listbox );
- listbox->GetEventHandler()->ProcessEvent( event );
- if (event.m_commandString) delete[] event.m_commandString ;
+ listbox->GetEventHandler()->ProcessEvent( event );
+ if (event.m_commandString) delete[] event.m_commandString ;
}
//-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxListBox,wxControl)
-wxListBox::wxListBox(void)
+wxListBox::wxListBox()
{
- m_list = (GtkList *) NULL;
+ m_list = (GtkList *) NULL;
}
bool wxListBox::Create( wxWindow *parent, wxWindowID id,
- const wxPoint &pos, const wxSize &size,
- int n, const wxString choices[],
- long style, const wxValidator& validator, const wxString &name )
+ const wxPoint &pos, const wxSize &size,
+ int n, const wxString choices[],
+ long style, const wxValidator& validator, const wxString &name )
{
- m_needParent = TRUE;
+ m_needParent = TRUE;
- PreCreation( parent, id, pos, size, style, name );
+ PreCreation( parent, id, pos, size, style, name );
- SetValidator( validator );
+ SetValidator( validator );
- m_widget = gtk_scrolled_window_new( (GtkAdjustment *) NULL, (GtkAdjustment *) NULL );
- gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(m_widget),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );
+ m_widget = gtk_scrolled_window_new( (GtkAdjustment*) NULL, (GtkAdjustment*) NULL );
+ gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(m_widget),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );
- m_list = GTK_LIST( gtk_list_new() );
+ m_list = GTK_LIST( gtk_list_new() );
- GtkSelectionMode mode = GTK_SELECTION_BROWSE;
- if (style & wxLB_MULTIPLE)
- mode = GTK_SELECTION_MULTIPLE;
- else if (style & wxLB_EXTENDED)
- mode = GTK_SELECTION_EXTENDED;
+ GtkSelectionMode mode = GTK_SELECTION_BROWSE;
+ if (style & wxLB_MULTIPLE)
+ mode = GTK_SELECTION_MULTIPLE;
+ else if (style & wxLB_EXTENDED)
+ mode = GTK_SELECTION_EXTENDED;
- gtk_list_set_selection_mode( GTK_LIST(m_list), mode );
+ gtk_list_set_selection_mode( GTK_LIST(m_list), mode );
- gtk_container_add (GTK_CONTAINER(m_widget), GTK_WIDGET(m_list) );
- gtk_widget_show( GTK_WIDGET(m_list) );
+ gtk_container_add( GTK_CONTAINER(m_widget), GTK_WIDGET(m_list) );
+ gtk_widget_show( GTK_WIDGET(m_list) );
- wxSize newSize = size;
- if (newSize.x == -1) newSize.x = 100;
- if (newSize.y == -1) newSize.y = 110;
- SetSize( newSize.x, newSize.y );
+ wxSize newSize = size;
+ if (newSize.x == -1) newSize.x = 100;
+ if (newSize.y == -1) newSize.y = 110;
+ SetSize( newSize.x, newSize.y );
- for (int i = 0; i < n; i++)
- {
- GtkWidget *list_item;
- list_item = gtk_list_item_new_with_label( choices[i] );
+ for (int i = 0; i < n; i++)
+ {
+ GtkWidget *list_item;
+ list_item = gtk_list_item_new_with_label( choices[i] );
- gtk_container_add( GTK_CONTAINER(m_list), list_item );
+ gtk_container_add( GTK_CONTAINER(m_list), list_item );
- gtk_signal_connect( GTK_OBJECT(list_item), "select",
- GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
+ gtk_signal_connect( GTK_OBJECT(list_item), "select",
+ GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
- if (style & wxLB_MULTIPLE)
- gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
- GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
+ if (style & wxLB_MULTIPLE)
+ gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
+ GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
- ConnectWidget( list_item );
+ ConnectWidget( list_item );
- m_clientData.Append( (wxObject*)NULL );
+ m_clientDataList.Append( (wxObject*)NULL );
- gtk_widget_show( list_item );
- }
+ gtk_widget_show( list_item );
+ }
- m_parent->AddChild( this );
+ m_parent->AddChild( this );
- (m_parent->m_insertCallback)( m_parent, this );
+ (m_parent->m_insertCallback)( m_parent, this );
- PostCreation();
+ PostCreation();
- gtk_widget_realize( GTK_WIDGET(m_list) );
+ gtk_widget_realize( GTK_WIDGET(m_list) );
- SetBackgroundColour( parent->GetBackgroundColour() );
- SetForegroundColour( parent->GetForegroundColour() );
+ SetBackgroundColour( parent->GetBackgroundColour() );
+ SetForegroundColour( parent->GetForegroundColour() );
- Show( TRUE );
+ Show( TRUE );
- return TRUE;
+ return TRUE;
}
-void wxListBox::Append( const wxString &item )
+wxListBox::~wxListBox()
{
- Append( item, (char*)NULL );
+ wxNode *node = m_clientDataList.First();
+ while (node)
+ {
+ wxClientData *cd = (wxClientData*)node->Data();
+ if (cd) delete cd;
+ node = node->Next();
+ }
+ m_clientDataList.Clear();
}
-void wxListBox::Append( const wxString &item, char *clientData )
+void wxListBox::AppendCommon( const wxString &item )
{
- wxCHECK_RET( m_list != NULL, "invalid listbox" );
+ wxCHECK_RET( m_list != NULL, "invalid listbox" );
+
+ GtkWidget *list_item = gtk_list_item_new_with_label( item );
- GtkWidget *list_item = gtk_list_item_new_with_label( item );
+ gtk_signal_connect( GTK_OBJECT(list_item), "select",
+ GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
- gtk_signal_connect( GTK_OBJECT(list_item), "select",
- GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
+ if (GetWindowStyleFlag() & wxLB_MULTIPLE)
+ gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
+ GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
- if (GetWindowStyleFlag() & wxLB_MULTIPLE)
- gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
- GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
+ gtk_container_add( GTK_CONTAINER(m_list), list_item );
- ConnectWidget( list_item );
-
- m_clientData.Append( (wxObject*)clientData );
+ if (m_widgetStyle) ApplyWidgetStyle();
+
+ gtk_widget_show( list_item );
+
+ ConnectWidget( list_item );
+
+ ConnectDnDWidget( list_item );
+}
+
+void wxListBox::Append( const wxString &item )
+{
+ m_clientDataList.Append( (wxObject*)NULL );
+
+ AppendCommon( item );
+}
+
+void wxListBox::Append( const wxString &item, void *clientData )
+{
+ if (clientData)
+ m_clientDataList.Append( (wxObject*) new wxVoidClientData( clientData ) );
+ else
+ m_clientDataList.Append( (wxObject*)NULL );
+
+ AppendCommon( item );
+}
- gtk_container_add( GTK_CONTAINER(m_list), list_item );
+void wxListBox::Append( const wxString &item, wxClientData *clientData )
+{
+ m_clientDataList.Append( (wxObject*) clientData );
+
+ AppendCommon( item );
+}
- if (m_widgetStyle) ApplyWidgetStyle();
+void wxListBox::SetClientData( int n, void* clientData )
+{
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return;
- gtk_widget_show( list_item );
+ wxClientData *cd = (wxClientData*) node->Data();
+ if (cd) delete cd;
+
+ if (clientData)
+ node->SetData( (wxObject*) new wxVoidClientData(clientData) );
+ else
+ node->SetData( (wxObject*) NULL );
+}
- ConnectWidget( list_item );
+void* wxListBox::GetClientData( int n )
+{
+ wxCHECK_MSG( m_widget != NULL, NULL, "invalid combobox" );
+
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return NULL;
+
+ wxVoidClientData *cd = (wxVoidClientData*) node->Data();
+ if (cd)
+ return cd->GetData();
+ else
+ return (void*) NULL;
+}
- ConnectDnDWidget( list_item );
+void wxListBox::SetClientObject( int n, wxClientData* clientData )
+{
+ wxCHECK_RET( m_widget != NULL, "invalid combobox" );
+
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return;
+
+ wxClientData *cd = (wxClientData*) node->Data();
+ if (cd) delete cd;
+
+ node->SetData( (wxObject*) clientData );
}
-void wxListBox::Clear(void)
+wxClientData* wxListBox::GetClientObject( int n )
{
- wxCHECK_RET( m_list != NULL, "invalid listbox" );
+ wxCHECK_MSG( m_widget != NULL, (wxClientData*)NULL, "invalid combobox" );
+
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node) return (wxClientData*) NULL;
+
+ return (wxClientData*) node->Data();
+}
+
+void wxListBox::Clear()
+{
+ wxCHECK_RET( m_list != NULL, "invalid listbox" );
- gtk_list_clear_items( m_list, 0, Number() );
+ gtk_list_clear_items( m_list, 0, Number() );
- m_clientData.Clear();
+ wxNode *node = m_clientDataList.First();
+ while (node)
+ {
+ wxClientData *cd = (wxClientData*)node->Data();
+ if (cd) delete cd;
+ node = node->Next();
+ }
+ m_clientDataList.Clear();
}
void wxListBox::Delete( int n )
{
- wxCHECK_RET( m_list != NULL, "invalid listbox" );
+ wxCHECK_RET( m_list != NULL, "invalid listbox" );
- GList *child = g_list_nth( m_list->children, n );
+ GList *child = g_list_nth( m_list->children, n );
- if (!child)
- {
- wxFAIL_MSG("wrong listbox index");
- return;
- }
+ if (!child)
+ {
+ wxFAIL_MSG("wrong listbox index");
+ return;
+ }
- GList *list = g_list_append( NULL, child->data );
- gtk_list_remove_items( m_list, list );
- g_list_free( list );
+ GList *list = g_list_append( NULL, child->data );
+ gtk_list_remove_items( m_list, list );
+ g_list_free( list );
- wxNode *node = m_clientData.Nth( n );
- if (!node)
- {
- wxFAIL_MSG("wrong listbox index");
- }
- else
- m_clientData.DeleteNode( node );
+ wxNode *node = m_clientDataList.Nth( n );
+ if (!node)
+ {
+ wxFAIL_MSG( "wrong index" );
+ }
+ else
+ {
+ wxClientData *cd = (wxClientData*)node->Data();
+ if (cd) delete cd;
+ m_clientDataList.DeleteNode( node );
+ }
}
void wxListBox::Deselect( int n )
{
- wxCHECK_RET( m_list != NULL, "invalid listbox" );
+ wxCHECK_RET( m_list != NULL, "invalid listbox" );
- gtk_list_unselect_item( m_list, n );
+ gtk_list_unselect_item( m_list, n );
}
int wxListBox::FindString( const wxString &item ) const
{
- wxCHECK_MSG( m_list != NULL, -1, "invalid listbox" );
+ wxCHECK_MSG( m_list != NULL, -1, "invalid listbox" );
- GList *child = m_list->children;
- int count = 0;
- while (child)
- {
- GtkBin *bin = GTK_BIN( child->data );
- GtkLabel *label = GTK_LABEL( bin->child );
- if (item == label->label) return count;
- count++;
- child = child->next;
- }
-
- // it's not an error if the string is not found - this function may be used to
- // test for existence of the string in the listbox, so don't give any
- // errors/assert failures.
+ GList *child = m_list->children;
+ int count = 0;
+ while (child)
+ {
+ GtkBin *bin = GTK_BIN( child->data );
+ GtkLabel *label = GTK_LABEL( bin->child );
+ if (item == label->label) return count;
+ count++;
+ child = child->next;
+ }
+
+ // it's not an error if the string is not found -> no wxCHECK
return -1;
}
-char *wxListBox::GetClientData( int n ) const
+int wxListBox::GetSelection() const
{
- wxCHECK_MSG( m_list != NULL, (char*) NULL, "invalid listbox" );
+ wxCHECK_MSG( m_list != NULL, -1, "invalid listbox" );
- wxNode *node = m_clientData.Nth( n );
- if (node) return ((char*)node->Data());
-
- wxFAIL_MSG("wrong listbox index");
- return (char *) NULL;
+ GList *child = m_list->children;
+ int count = 0;
+ while (child)
+ {
+ if (GTK_WIDGET(child->data)->state == GTK_STATE_SELECTED) return count;
+ count++;
+ child = child->next;
+ }
+ return -1;
}
-int wxListBox::GetSelection(void) const
+int wxListBox::GetSelections( wxArrayInt& aSelections ) const
{
- wxCHECK_MSG( m_list != NULL, -1, "invalid listbox" );
+ wxCHECK_MSG( m_list != NULL, -1, "invalid listbox" );
- GList *child = m_list->children;
- int count = 0;
- while (child)
- {
- if (GTK_WIDGET(child->data)->state == GTK_STATE_SELECTED) return count;
- count++;
- child = child->next;
- }
- return -1;
-}
+ // get the number of selected items first
+ GList *child = m_list->children;
+ int count = 0;
+ for (child = m_list->children; child != NULL; child = child->next)
+ {
+ if (GTK_WIDGET(child->data)->state == GTK_STATE_SELECTED)
+ count++;
+ }
-int wxListBox::GetSelections(wxArrayInt& aSelections) const
-{
- wxCHECK_MSG( m_list != NULL, -1, "invalid listbox" );
-
- // get the number of selected items first
- GList *child = m_list->children;
- int count = 0;
- for ( child = m_list->children; child != NULL; child = child->next )
- {
- if ( GTK_WIDGET(child->data)->state == GTK_STATE_SELECTED )
- count++;
- }
-
- aSelections.Empty();
-
- if ( count > 0 ) {
- // now fill the list
- aSelections.Alloc(count); // optimization attempt
- int i = 0;
- for ( child = m_list->children; child != NULL; child = child->next, i++ )
+ aSelections.Empty();
+
+ if (count > 0)
{
- if ( GTK_WIDGET(child->data)->state == GTK_STATE_SELECTED )
- aSelections.Add(i);
+ // now fill the list
+ aSelections.Alloc(count); // optimization attempt
+ int i = 0;
+ for (child = m_list->children; child != NULL; child = child->next, i++)
+ {
+ if (GTK_WIDGET(child->data)->state == GTK_STATE_SELECTED)
+ aSelections.Add(i);
+ }
}
- }
- return count;
+ return count;
}
wxString wxListBox::GetString( int n ) const
{
- wxCHECK_MSG( m_list != NULL, "", "invalid listbox" );
+ wxCHECK_MSG( m_list != NULL, "", "invalid listbox" );
- GList *child = g_list_nth( m_list->children, n );
- if (child)
- {
- GtkBin *bin = GTK_BIN( child->data );
- GtkLabel *label = GTK_LABEL( bin->child );
- return label->label;
- }
- wxFAIL_MSG("wrong listbox index");
- return "";
+ GList *child = g_list_nth( m_list->children, n );
+ if (child)
+ {
+ GtkBin *bin = GTK_BIN( child->data );
+ GtkLabel *label = GTK_LABEL( bin->child );
+ return label->label;
+ }
+ wxFAIL_MSG("wrong listbox index");
+ return "";
}
-wxString wxListBox::GetStringSelection(void) const
+wxString wxListBox::GetStringSelection() const
{
- wxCHECK_MSG( m_list != NULL, "", "invalid listbox" );
+ wxCHECK_MSG( m_list != NULL, "", "invalid listbox" );
- GList *selection = m_list->selection;
- if (selection)
- {
- GtkBin *bin = GTK_BIN( selection->data );
- wxString tmp = GTK_LABEL( bin->child )->label;
- return tmp;
- }
- wxFAIL_MSG("no listbox selection available");
- return "";
+ GList *selection = m_list->selection;
+ if (selection)
+ {
+ GtkBin *bin = GTK_BIN( selection->data );
+ wxString tmp = GTK_LABEL( bin->child )->label;
+ return tmp;
+ }
+ wxFAIL_MSG("no listbox selection available");
+ return "";
}
-int wxListBox::Number(void)
+int wxListBox::Number()
{
- wxCHECK_MSG( m_list != NULL, -1, "invalid listbox" );
+ wxCHECK_MSG( m_list != NULL, -1, "invalid listbox" );
- GList *child = m_list->children;
- int count = 0;
- while (child) { count++; child = child->next; }
- return count;
+ GList *child = m_list->children;
+ int count = 0;
+ while (child) { count++; child = child->next; }
+ return count;
}
bool wxListBox::Selected( int n )
{
- wxCHECK_MSG( m_list != NULL, FALSE, "invalid listbox" );
+ wxCHECK_MSG( m_list != NULL, FALSE, "invalid listbox" );
- GList *target = g_list_nth( m_list->children, n );
- if (target)
- {
- GList *child = m_list->selection;
- while (child)
+ GList *target = g_list_nth( m_list->children, n );
+ if (target)
{
- if (child->data == target->data) return TRUE;
- child = child->next;
+ GList *child = m_list->selection;
+ while (child)
+ {
+ if (child->data == target->data) return TRUE;
+ child = child->next;
+ }
}
- }
- wxFAIL_MSG("wrong listbox index");
- return FALSE;
+ wxFAIL_MSG("wrong listbox index");
+ return FALSE;
}
void wxListBox::Set( int WXUNUSED(n), const wxString *WXUNUSED(choices) )
{
- wxFAIL_MSG("wxListBox::Set not implemented");
-}
-
-void wxListBox::SetClientData( int n, char *clientData )
-{
- wxCHECK_RET( m_list != NULL, "invalid listbox" );
-
- wxNode *node = m_clientData.Nth( n );
- if (node)
- {
- node->SetData( (wxObject*)clientData );
- }
- else
- {
- wxFAIL_MSG("wrong listbox index");
- }
+ wxFAIL_MSG("wxListBox::Set not implemented");
}
void wxListBox::SetFirstItem( int WXUNUSED(n) )
{
- wxFAIL_MSG("wxListBox::SetFirstItem not implemented");
+ wxFAIL_MSG("wxListBox::SetFirstItem not implemented");
}
void wxListBox::SetFirstItem( const wxString &WXUNUSED(item) )
{
- wxFAIL_MSG("wxListBox::SetFirstItem not implemented");
+ wxFAIL_MSG("wxListBox::SetFirstItem not implemented");
}
void wxListBox::SetSelection( int n, bool select )
{
- wxCHECK_RET( m_list != NULL, "invalid listbox" );
+ wxCHECK_RET( m_list != NULL, "invalid listbox" );
- if (select)
- gtk_list_select_item( m_list, n );
- else
- gtk_list_unselect_item( m_list, n );
+ if (select)
+ gtk_list_select_item( m_list, n );
+ else
+ gtk_list_unselect_item( m_list, n );
}
void wxListBox::SetString( int n, const wxString &string )
{
- wxCHECK_RET( m_list != NULL, "invalid listbox" );
+ wxCHECK_RET( m_list != NULL, "invalid listbox" );
- GList *child = g_list_nth( m_list->children, n );
- if (child)
- {
- GtkBin *bin = GTK_BIN( child->data );
- GtkLabel *label = GTK_LABEL( bin->child );
- gtk_label_set( label, string );
- }
- else
- {
- wxFAIL_MSG("wrong listbox index");
- }
+ GList *child = g_list_nth( m_list->children, n );
+ if (child)
+ {
+ GtkBin *bin = GTK_BIN( child->data );
+ GtkLabel *label = GTK_LABEL( bin->child );
+ gtk_label_set( label, string );
+ }
+ else
+ {
+ wxFAIL_MSG("wrong listbox index");
+ }
}
void wxListBox::SetStringSelection( const wxString &string, bool select )
{
- wxCHECK_RET( m_list != NULL, "invalid listbox" );
+ wxCHECK_RET( m_list != NULL, "invalid listbox" );
- SetSelection( FindString(string), select );
+ SetSelection( FindString(string), select );
}
int wxListBox::GetIndex( GtkWidget *item ) const
{
- if (item)
- {
- GList *child = m_list->children;
- int count = 0;
- while (child)
+ if (item)
{
- if (GTK_WIDGET(child->data) == item) return count;
- count++;
- child = child->next;
+ GList *child = m_list->children;
+ int count = 0;
+ while (child)
+ {
+ if (GTK_WIDGET(child->data) == item) return count;
+ count++;
+ child = child->next;
+ }
}
- }
- return -1;
+ return -1;
}
void wxListBox::SetDropTarget( wxDropTarget *dropTarget )
{
- wxCHECK_RET( m_list != NULL, "invalid listbox" );
+ wxCHECK_RET( m_list != NULL, "invalid listbox" );
- GList *child = m_list->children;
- while (child)
- {
- DisconnectDnDWidget( GTK_WIDGET( child->data ) );
- child = child->next;
- }
+ GList *child = m_list->children;
+ while (child)
+ {
+ DisconnectDnDWidget( GTK_WIDGET( child->data ) );
+ child = child->next;
+ }
- wxWindow::SetDropTarget( dropTarget );
+ wxWindow::SetDropTarget( dropTarget );
- child = m_list->children;
- while (child)
- {
- ConnectDnDWidget( GTK_WIDGET( child->data ) );
- child = child->next;
- }
+ child = m_list->children;
+ while (child)
+ {
+ ConnectDnDWidget( GTK_WIDGET( child->data ) );
+ child = child->next;
+ }
}
-GtkWidget *wxListBox::GetConnectWidget(void)
+GtkWidget *wxListBox::GetConnectWidget()
{
- return GTK_WIDGET(m_list);
+ return GTK_WIDGET(m_list);
}
bool wxListBox::IsOwnGtkWindow( GdkWindow *window )
{
- if (wxWindow::IsOwnGtkWindow( window )) return TRUE;
+ if (wxWindow::IsOwnGtkWindow( window )) return TRUE;
- GList *child = m_list->children;
- while (child)
- {
- GtkWidget *bin = GTK_WIDGET( child->data );
- if (bin->window == window) return TRUE;
- child = child->next;
- }
+ GList *child = m_list->children;
+ while (child)
+ {
+ GtkWidget *bin = GTK_WIDGET( child->data );
+ if (bin->window == window) return TRUE;
+ child = child->next;
+ }
- return FALSE;
+ return FALSE;
}
void wxListBox::ApplyWidgetStyle()
{
- SetWidgetStyle();
+ SetWidgetStyle();
- GdkWindow *window = GTK_WIDGET(m_list)->window;
- m_backgroundColour.CalcPixel( gdk_window_get_colormap( window ) );
- gdk_window_set_background( window, m_backgroundColour.GetColor() );
- gdk_window_clear( window );
+ GdkWindow *window = GTK_WIDGET(m_list)->window;
+ m_backgroundColour.CalcPixel( gdk_window_get_colormap( window ) );
+ gdk_window_set_background( window, m_backgroundColour.GetColor() );
+ gdk_window_clear( window );
- GList *child = m_list->children;
- while (child)
- {
- gtk_widget_set_style( GTK_BIN(child->data)->child, m_widgetStyle );
- gtk_widget_set_style( GTK_WIDGET(child->data), m_widgetStyle );
- child = child->next;
- }
+ GList *child = m_list->children;
+ while (child)
+ {
+ gtk_widget_set_style( GTK_BIN(child->data)->child, m_widgetStyle );
+ gtk_widget_set_style( GTK_WIDGET(child->data), m_widgetStyle );
+ child = child->next;
+ }
}
m_oldVerticalPos = 0.0;
m_isShown = FALSE;
m_isEnabled = TRUE;
- m_pDropTarget = (wxDropTarget *) NULL;
+ m_dropTarget = (wxDropTarget *) NULL;
m_resizing = FALSE;
m_scrollGC = (GdkGC*) NULL;
m_widgetStyle = (GtkStyle*) NULL;
{
m_hasVMT = FALSE;
- if (m_pDropTarget) delete m_pDropTarget;
+ if (m_dropTarget) delete m_dropTarget;
if (m_parent) m_parent->RemoveChild( this );
if (m_widget) Show( FALSE );
wxFatalError( "Need complete parent.", name );
m_widget = (GtkWidget *) NULL;
+ m_wxwindow = (GtkWidget *) NULL;
m_hasVMT = FALSE;
m_parent = parent;
m_children.DeleteContents( FALSE );
m_eventHandler = this;
m_windowId = id;
m_sizeSet = FALSE;
- if (m_cursor == NULL)
- m_cursor = new wxCursor( wxCURSOR_ARROW );
+ m_cursor = new wxCursor( wxCURSOR_ARROW );
m_font = *wxSWISS_FONT;
// m_backgroundColour = wxWHITE;
// m_foregroundColour = wxBLACK;
m_autoLayout = FALSE;
m_hasScrolling = FALSE;
m_isScrolling = FALSE;
- m_pDropTarget = (wxDropTarget *) NULL;
+ m_hAdjust = (GtkAdjustment *) NULL;
+ m_vAdjust = (GtkAdjustment *) NULL;
+ m_oldHorizontalPos = 0.0;
+ m_oldVerticalPos = 0.0;
+ m_isShown = FALSE;
+ m_isEnabled = TRUE;
+ m_dropTarget = (wxDropTarget *) NULL;
m_resizing = FALSE;
m_windowValidator = (wxValidator *) NULL;
m_scrollGC = (GdkGC*) NULL;
if (m_windowValidator) m_windowValidator->SetWindow(this);
}
+void wxWindow::SetClientObject( wxClientData *data )
+{
+ if (m_clientData) delete m_clientData;
+ m_clientData = data;
+}
+
+wxClientData *wxWindow::GetClientObject()
+{
+ return m_clientData;
+}
+
+void wxWindow::SetClientData( void *data )
+{
+ if (m_clientData) delete m_clientData;
+
+ if (data)
+ m_clientData = new wxVoidClientData( data );
+ else
+ m_clientData = (wxClientData*) NULL;
+}
+
+void *wxWindow::GetClientData()
+{
+ if (!m_clientData) return NULL;
+
+ wxVoidClientData *vd = (wxVoidClientData*) m_clientData;
+
+ return vd->GetData();
+}
+
bool wxWindow::IsBeingDeleted()
{
return FALSE;
DisconnectDnDWidget( dnd_widget );
- if (m_pDropTarget) delete m_pDropTarget;
- m_pDropTarget = dropTarget;
+ if (m_dropTarget) delete m_dropTarget;
+ m_dropTarget = dropTarget;
ConnectDnDWidget( dnd_widget );
}
wxDropTarget *wxWindow::GetDropTarget() const
{
- return m_pDropTarget;
+ return m_dropTarget;
}
void wxWindow::ConnectDnDWidget( GtkWidget *widget )
{
- if (!m_pDropTarget) return;
+ if (!m_dropTarget) return;
- m_pDropTarget->RegisterWidget( widget );
+ m_dropTarget->RegisterWidget( widget );
gtk_signal_connect( GTK_OBJECT(widget), "drop_data_available_event",
GTK_SIGNAL_FUNC(gtk_window_drop_callback), (gpointer)this );
void wxWindow::DisconnectDnDWidget( GtkWidget *widget )
{
- if (!m_pDropTarget) return;
+ if (!m_dropTarget) return;
gtk_signal_disconnect_by_func( GTK_OBJECT(widget),
GTK_SIGNAL_FUNC(gtk_window_drop_callback), (gpointer)this );
- m_pDropTarget->UnregisterWidget( widget );
+ m_dropTarget->UnregisterWidget( widget );
}
GtkWidget* wxWindow::GetConnectWidget()