rwx 0.0.1.dev → 0.0.1.1.dev

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.rspec +2 -0
  4. data/Rakefile +8 -0
  5. data/VERSION +1 -1
  6. data/ext/extconf.rb +5 -1
  7. data/ext/main.cpp +3 -3
  8. data/ext/main.hpp +34 -1
  9. data/ext/rwx.cpp +17 -0
  10. data/ext/wxAnyButton.cpp +7 -6
  11. data/ext/wxApp.cpp +1 -1
  12. data/ext/wxApp.hpp +1 -1
  13. data/ext/wxAuiBook.cpp +5 -1
  14. data/ext/wxAuiPane.cpp +7 -6
  15. data/ext/wxBitmap.cpp +42 -6
  16. data/ext/wxBitmapButton.cpp +3 -2
  17. data/ext/wxBitmapComboBox.cpp +25 -11
  18. data/ext/wxBitmapToggleButton.cpp +4 -2
  19. data/ext/wxBookCtrl.cpp +13 -13
  20. data/ext/wxBrush.cpp +69 -12
  21. data/ext/wxBrush.hpp +6 -0
  22. data/ext/wxButton.cpp +3 -2
  23. data/ext/wxCalendarCtrl.cpp +7 -6
  24. data/ext/wxCalendarCtrlBase.cpp +4 -2
  25. data/ext/wxCalendarCtrlGeneric.cpp +10 -9
  26. data/ext/wxCheckBox.cpp +10 -5
  27. data/ext/wxCheckListBox.cpp +10 -9
  28. data/ext/wxChoice.cpp +10 -9
  29. data/ext/wxChoiceBook.cpp +5 -1
  30. data/ext/wxCollapsiblePane.cpp +8 -5
  31. data/ext/wxColor.cpp +69 -25
  32. data/ext/wxColor.hpp +3 -0
  33. data/ext/wxColorPicker.cpp +11 -5
  34. data/ext/wxColorPickerWidget.cpp +10 -8
  35. data/ext/wxComboBox.cpp +3 -3
  36. data/ext/wxComboCtrl.cpp +220 -0
  37. data/ext/wxComboCtrl.hpp +22 -0
  38. data/ext/wxControl.cpp +2 -2
  39. data/ext/wxDC.cpp +5 -4
  40. data/ext/wxDatePicker.cpp +10 -7
  41. data/ext/wxDirCtrl.cpp +161 -0
  42. data/ext/wxDirCtrl.hpp +21 -0
  43. data/ext/wxDirPicker.cpp +5 -5
  44. data/ext/wxDirPickerWidget.cpp +10 -8
  45. data/ext/wxFileCtrl.cpp +5 -2
  46. data/ext/wxFileCtrlBase.cpp +31 -7
  47. data/ext/wxFileCtrlGeneric.cpp +5 -2
  48. data/ext/wxFileDialog.cpp +20 -25
  49. data/ext/wxFileDirPicker.cpp +6 -6
  50. data/ext/wxFilePicker.cpp +6 -6
  51. data/ext/wxFilePickerWidget.cpp +10 -9
  52. data/ext/wxFont.cpp +6 -5
  53. data/ext/wxFontDialog.cpp +11 -22
  54. data/ext/wxFontPicker.cpp +17 -5
  55. data/ext/wxFontPickerWidget.cpp +10 -9
  56. data/ext/wxFrame.cpp +6 -4
  57. data/ext/wxGauge.cpp +9 -5
  58. data/ext/wxGrid.cpp +7 -5
  59. data/ext/wxGridCellAttr.cpp +6 -6
  60. data/ext/wxHyperLink.cpp +12 -11
  61. data/ext/wxImage.cpp +15 -10
  62. data/ext/wxInfoBar.cpp +2 -1
  63. data/ext/wxInfoBarGeneric.cpp +2 -1
  64. data/ext/wxItemContainer.cpp +5 -0
  65. data/ext/wxListBook.cpp +5 -2
  66. data/ext/wxListBox.cpp +10 -8
  67. data/ext/wxMenu.cpp +5 -4
  68. data/ext/wxMenuItem.cpp +9 -7
  69. data/ext/wxMultiChoiceDialog.cpp +5 -3
  70. data/ext/wxNoteBook.cpp +4 -2
  71. data/ext/wxOwnerDrawnComboBox.cpp +223 -0
  72. data/ext/wxOwnerDrawnComboBox.hpp +22 -0
  73. data/ext/wxPalette.cpp +1 -1
  74. data/ext/wxPanel.cpp +4 -3
  75. data/ext/wxPasswordEntryDialog.cpp +1 -1
  76. data/ext/wxPen.cpp +49 -10
  77. data/ext/wxPoint.cpp +6 -6
  78. data/ext/wxPreferences.cpp +21 -6
  79. data/ext/wxProperty.cpp +5 -7
  80. data/ext/wxPropertyCell.cpp +5 -4
  81. data/ext/wxPropertyGrid.cpp +26 -27
  82. data/ext/wxPropertyGridManager.cpp +13 -5
  83. data/ext/wxRadioBox.cpp +14 -11
  84. data/ext/wxRadioButton.cpp +9 -3
  85. data/ext/wxRearrangeCtrl.cpp +5 -1
  86. data/ext/wxRearrangeList.cpp +5 -2
  87. data/ext/wxRect.cpp +8 -7
  88. data/ext/wxRichTextCtrl.cpp +12 -6
  89. data/ext/wxRichTextStyle.cpp +5 -5
  90. data/ext/wxRichTextStyleSheet.cpp +7 -5
  91. data/ext/wxSTC.cpp +5 -1
  92. data/ext/wxSearchCtrl.cpp +12 -10
  93. data/ext/wxSimpleBook.cpp +5 -1
  94. data/ext/wxSingleChoiceDialog.cpp +4 -2
  95. data/ext/wxSize.cpp +8 -7
  96. data/ext/wxSlider.cpp +12 -7
  97. data/ext/wxSpinButton.cpp +14 -11
  98. data/ext/wxSpinButton.hpp +1 -1
  99. data/ext/wxSpinCtrl.cpp +18 -11
  100. data/ext/wxSpinCtrlDouble.cpp +161 -0
  101. data/ext/wxSpinCtrlDouble.hpp +21 -0
  102. data/ext/wxStaticBitmap.cpp +3 -1
  103. data/ext/wxStaticBitmapBase.cpp +4 -2
  104. data/ext/wxStaticBitmapGeneric.cpp +3 -1
  105. data/ext/wxStaticBox.cpp +7 -6
  106. data/ext/wxStaticLine.cpp +5 -1
  107. data/ext/wxStaticText.cpp +5 -1
  108. data/ext/wxStatusBar.cpp +12 -10
  109. data/ext/wxTaskBar.cpp +6 -4
  110. data/ext/wxTextCtrl.cpp +9 -3
  111. data/ext/wxTextEntry.cpp +8 -3
  112. data/ext/wxTimePicker.cpp +11 -8
  113. data/ext/wxTimer.cpp +4 -2
  114. data/ext/wxToggleButton.cpp +3 -1
  115. data/ext/wxToolBar.cpp +5 -1
  116. data/ext/wxToolBarTool.cpp +9 -8
  117. data/ext/wxToolBook.cpp +5 -2
  118. data/ext/wxTreeBook.cpp +5 -1
  119. data/ext/wxTreeCtrl.cpp +8 -7
  120. data/ext/wxWindow.cpp +3 -1
  121. data/ext/wxWizard.cpp +10 -10
  122. data/ext/wxWizardPage.cpp +11 -9
  123. data/rwx.gemspec +4 -2
  124. data/samples/controls/controls.rb +0 -5
  125. data/samples/dialog/dialog_sample.rb +0 -3
  126. data/spec/color_spec.rb +55 -0
  127. data/spec/spec_helper.rb +12 -0
  128. metadata +28 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7daea4298f8fa4179a561773567028921b532dfa
4
- data.tar.gz: 086761364b235c6e588cdccfe7642861dc17b2f7
3
+ metadata.gz: 62bb4050b38b7f1e7b288cedacfddd13ee25c63e
4
+ data.tar.gz: eb494f8e224d34094cd6667e993f2d86736cb011
5
5
  SHA512:
6
- metadata.gz: 5b613965f1aeb188536fa7ad27cb6b9dca2d69a2bcf0283c6cc23339414335142d6a8c4e2c39372aab544a5b2c5dc94dbb272b81733d2367b68238f9810c65c4
7
- data.tar.gz: 0ee62eed5e4e037f9f88f171de4fbdb85bfbed0656887a02f01fb1b0dcbf5cbc77b356d6ff102e309a6718751b8346596d6d133a359e7071544bab82f7ccf452
6
+ metadata.gz: c67e8df721c80d812e545a0d7639c3677d6279c2bc2a20ba06fe016419e0a97ce9418da845f890ed2eb7c74f9d4ac2b123c623449f9a5be4042f14a48678607c
7
+ data.tar.gz: d779255587399de39fc5d014d07f19e932b4d4a528af0e1acc1451722e1b3298a4a9e207179e0540c785eacfa2c3bc7f7c528437585d57cbec66e2b68ee97f1d
data/.gitignore CHANGED
@@ -47,3 +47,6 @@ tmp
47
47
  _yardoc
48
48
  doc/
49
49
  /Debug
50
+
51
+ #old and tested data
52
+ old_ext/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/Rakefile CHANGED
@@ -7,6 +7,11 @@ require "rake/testtask"
7
7
  require "rubygems/package_task"
8
8
  require "rdoc/task"
9
9
 
10
+ begin
11
+ require "rspec/core/rake_task"
12
+ rescue LoadError
13
+ end
14
+
10
15
  begin
11
16
  require 'rake/extensiontask'
12
17
  rescue LoadError
@@ -56,6 +61,9 @@ Rake::TestTask.new do |t|
56
61
  t.verbose = true
57
62
  end
58
63
 
64
+ RSpec::Core::RakeTask.new if Object.const_defined?(:RSpec)
65
+
66
+
59
67
  RDoc::Task.new do |rdoc|
60
68
  rdoc.title = "rwx RDocs"
61
69
  rdoc.main = "README.rdoc"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1-dev
1
+ 0.0.1.1-dev
@@ -88,10 +88,14 @@ if(wx_config = find_executable('wx-config'))
88
88
  have_member_func("wxFontPickerCtrl","GetSelectedColour","wx/fontpicker.h")
89
89
  have_member_func("wxInfoBar","GetButtonCount","wx/infobar.h")
90
90
 
91
+ have_member_func("wxOwnerDrawnComboBox","IsListEmpty","wx/odcombo.h")
92
+
91
93
  #check for enum flags
92
94
  have_const("wxFD_NO_FOLLOW","wx/filedlg.h")
93
95
  have_const("wxDIRCTRL_DEFAULT_STYLE",["wx/wx.h", "wx/dirctrl.h"])
94
-
96
+ have_func("wxDirCtrl()",["wx/wx.h", "wx/dirctrl.h"])
97
+ have_const("wxSTC_LEX_DMAP",["wx/wx.h", "wx/stc/stc.h"])
98
+
95
99
  }
96
100
  else
97
101
  abort("wx-config executable not found!")
@@ -113,12 +113,12 @@ rb_data_type_t* unwrapDataType(const VALUE& klass)
113
113
  }
114
114
 
115
115
 
116
- VALUE wrapTypedPtr(void *arg,VALUE klass)
116
+ VALUE wrapTypedPtr(void *arg,VALUE klass, bool allowNull)
117
117
  {
118
- if(arg){
118
+ if(arg || allowNull){
119
119
  rb_data_type_t* datatype = unwrapDataType(klass);
120
120
  if(!datatype)
121
- rb_fatal("%s unknown datatype",rb_class2name(klass));
121
+ rb_fatal("%"PRIsVALUE" unknown datatype", klass);
122
122
 
123
123
  return TypedData_Wrap_Struct(klass, datatype, arg);
124
124
  }
@@ -94,7 +94,7 @@ extern VALUE global_holder;
94
94
  void rwx_refobject(VALUE object);
95
95
  bool rwx_unrefobject(VALUE object);
96
96
 
97
- VALUE wrapTypedPtr(void *arg,VALUE klass);
97
+ VALUE wrapTypedPtr(void *arg,VALUE klass, bool allowNull = false);
98
98
  VALUE wrapTypedPtr(wxObject *object,VALUE klass);
99
99
  VALUE wrapTypedPtr(wxEvtHandler *handler,VALUE klass);
100
100
 
@@ -377,6 +377,30 @@ DLL_LOCAL bool set_hash_option(VALUE hash,const char* name,T& val,T func(const V
377
377
 
378
378
  }
379
379
 
380
+ template <typename C, typename T>
381
+ DLL_LOCAL bool set_hash_option(VALUE hash,const char* name,void (C::*set)(const T&), C& obj,T func(const VALUE&) = unwrap<T> )
382
+ {
383
+ T val;
384
+ bool result = set_hash_option(hash,name,val,func);
385
+ if(result) {
386
+ (obj.*set)(val);
387
+ }
388
+ return result;
389
+
390
+ }
391
+ template <typename C, typename T>
392
+ DLL_LOCAL bool set_hash_option(VALUE hash,const char* name,void (C::*set)(T), C& obj,T func(const VALUE&) = unwrap<T> )
393
+ {
394
+ T val;
395
+ bool result = set_hash_option(hash,name,val,func);
396
+ if(result) {
397
+ (obj.*set)(val);
398
+ }
399
+ return result;
400
+
401
+ }
402
+
403
+
380
404
  DLL_LOCAL bool set_hash_flag_option(VALUE hash,const char* name,const int& flag,int& val);
381
405
 
382
406
  #define macro_attr(attr,type) macro_attr_func(attr,Get##attr(),Set##attr,wrap,unwrap<type>,true)
@@ -438,6 +462,15 @@ DLL_LOCAL VALUE _##func(VALUE self)\
438
462
  return wrap(_self->func());\
439
463
  }
440
464
 
465
+ #define singlereturn_array(func,T) \
466
+ DLL_LOCAL VALUE _##func(VALUE self)\
467
+ {\
468
+ T ary;\
469
+ _self->func(ary);\
470
+ return wrap(ary);\
471
+ }
472
+
473
+
441
474
  #define singlereturn_frozen(func) \
442
475
  DLL_LOCAL VALUE _##func(VALUE self)\
443
476
  {\
@@ -112,12 +112,15 @@
112
112
 
113
113
  #include "wxChoice.hpp"
114
114
  #include "wxComboBox.hpp"
115
+ #include "wxComboCtrl.hpp"
116
+ #include "wxOwnerDrawnComboBox.hpp"
115
117
  #include "wxBitmapComboBox.hpp"
116
118
 
117
119
  #include "wxSlider.hpp"
118
120
 
119
121
  #include "wxSpinButton.hpp"
120
122
  #include "wxSpinCtrl.hpp"
123
+ #include "wxSpinCtrlDouble.hpp"
121
124
 
122
125
  #include "wxTextArea.hpp"
123
126
  #include "wxTextEntry.hpp"
@@ -146,6 +149,7 @@
146
149
  #include "wxFileCtrlBase.hpp"
147
150
  #include "wxFileCtrl.hpp"
148
151
  #include "wxFileCtrlGeneric.hpp"
152
+ #include "wxDirCtrl.hpp"
149
153
 
150
154
  #include "wxCalendarCtrlBase.hpp"
151
155
  #include "wxCalendarCtrl.hpp"
@@ -207,6 +211,8 @@
207
211
 
208
212
  #include "wxPreferences.hpp"
209
213
 
214
+ #include <wx/apptrait.h>
215
+
210
216
  VALUE rb_mWX;
211
217
 
212
218
  void rb_define_attr_method(VALUE klass,std::string name,VALUE(get)(VALUE),VALUE(set)(VALUE,VALUE))
@@ -314,6 +320,7 @@ extern "C" void Init_rwx()
314
320
  Init_WXFileCtrlBase(rb_mWX);
315
321
  Init_WXFileCtrl(rb_mWX);
316
322
  Init_WXFileCtrlGeneric(rb_mWX);
323
+ Init_WXDirCtrl(rb_mWX);
317
324
 
318
325
  Init_WXCalendarCtrlBase(rb_mWX);
319
326
  Init_WXCalendarCtrl(rb_mWX);
@@ -338,6 +345,7 @@ extern "C" void Init_rwx()
338
345
  Init_WXSlider(rb_mWX);
339
346
  Init_WXSpinButton(rb_mWX);
340
347
  Init_WXSpinCtrl(rb_mWX);
348
+ Init_WXSpinCtrlDouble(rb_mWX);
341
349
 
342
350
  Init_WXHyperLink(rb_mWX);
343
351
 
@@ -379,6 +387,8 @@ extern "C" void Init_rwx()
379
387
 
380
388
  Init_WXChoice(rb_mWX);
381
389
  Init_WXComboBox(rb_mWX);
390
+ Init_WXComboCtrl(rb_mWX);
391
+ Init_WXOwnerDrawnComboBox(rb_mWX);
382
392
  Init_WXBitmapComboBox(rb_mWX);
383
393
 
384
394
  Init_WXTreeCtrl(rb_mWX);
@@ -469,4 +479,11 @@ extern "C" void Init_rwx()
469
479
  ->add(wxICON_ASTERISK,"asterisk")
470
480
  ->allow_array = false;
471
481
 
482
+ /*
483
+ int min,max;
484
+ wxString port(wxPlatformInfo::GetPortIdName(wxGUIAppTraits().GetToolkitVersion(&min,&max), false));
485
+
486
+ rb_warn("%s %d.%d", port.c_str().AsChar(), min, max);
487
+ //*/
488
+
472
489
  }
@@ -108,7 +108,14 @@ DLL_LOCAL void Init_WXAnyButton(VALUE rb_mWX)
108
108
  rb_mWX = rb_define_module("WX");
109
109
  rb_cWXWindow = rb_define_class_under(rb_mWX,"Window",rb_cObject);
110
110
  rb_cWXControl = rb_define_class_under(rb_mWX,"Control",rb_cWXWindow);
111
+ #endif
111
112
 
113
+ #ifdef wxHAS_ANY_BUTTON
114
+ using namespace RubyWX::AnyButton;
115
+ rb_cWXAnyButton = rb_define_class_under(rb_mWX,"AnyButton",rb_cWXControl);
116
+ rb_undef_alloc_func(rb_cWXAnyButton);
117
+
118
+ #if 0
112
119
  rb_define_attr(rb_cWXAnyButton,"bitmap_label",1,1);
113
120
  rb_define_attr(rb_cWXAnyButton,"bitmap_pressed",1,1);
114
121
  rb_define_attr(rb_cWXAnyButton,"bitmap_disabled",1,1);
@@ -116,14 +123,8 @@ DLL_LOCAL void Init_WXAnyButton(VALUE rb_mWX)
116
123
  rb_define_attr(rb_cWXAnyButton,"bitmap_focus",1,1);
117
124
  rb_define_attr(rb_cWXAnyButton,"bitmap_selected",1,1);
118
125
  rb_define_attr(rb_cWXAnyButton,"bitmap_hover",1,1);
119
-
120
126
  #endif
121
127
 
122
- #ifdef wxHAS_ANY_BUTTON
123
- using namespace RubyWX::AnyButton;
124
- rb_cWXAnyButton = rb_define_class_under(rb_mWX,"AnyButton",rb_cWXControl);
125
- rb_undef_alloc_func(rb_cWXAnyButton);
126
-
127
128
  rb_define_method(rb_cWXAnyButton,"initialize",RUBY_METHOD_FUNC(_initialize),-1);
128
129
 
129
130
  rb_define_attr_method(rb_cWXAnyButton,"bitmap_label",_getBitmapLabel,_setBitmapLabel);
@@ -53,7 +53,7 @@ public:
53
53
  void app_protected()
54
54
  {
55
55
  if(!ruby_app_inited)
56
- rb_raise(rb_eArgError,"%s is not running.",rb_class2name(rb_cWXApp));\
56
+ rb_raise(rb_eArgError,"%"PRIsVALUE" is not running.",rb_cWXApp);
57
57
  }
58
58
 
59
59
 
@@ -42,7 +42,7 @@ void app_protected();
42
42
  #define APP_PROTECT_NULL DLL_LOCAL VALUE _alloc(VALUE self)\
43
43
  {\
44
44
  app_protected();\
45
- return wrapTypedPtr((void*)NULL,self);\
45
+ return wrapTypedPtr((void*)NULL,self, true);\
46
46
  }
47
47
 
48
48
  #endif /* WXAPP_HPP_ */
@@ -59,7 +59,11 @@ DLL_LOCAL VALUE _initialize(int argc,VALUE *argv,VALUE self)
59
59
 
60
60
  }
61
61
 
62
- _self->Create(unwrap<wxWindow*>(parent),id,wxDefaultPosition,wxDefaultSize,style);
62
+ if(nil_check(parent)) {
63
+ _self->Create(unwrap<wxWindow*>(parent),id,
64
+ wxDefaultPosition,wxDefaultSize,style
65
+ );
66
+ }
63
67
 
64
68
  }
65
69
 
@@ -241,6 +241,13 @@ DLL_LOCAL VALUE _setMaximized(VALUE self, VALUE val)
241
241
 
242
242
  DLL_LOCAL void Init_WXAuiPane(VALUE rb_mWX)
243
243
  {
244
+
245
+ #if wxUSE_AUI
246
+ using namespace RubyWX::AuiPane;
247
+ rb_cWXAuiPane = rb_define_class_under(rb_mWX,"AuiPane",rb_cObject);
248
+ rb_define_alloc_func(rb_cWXAuiPane,_alloc);
249
+ //rb_define_method(rb_cWXAuiManager,"[]=",RUBY_METHOD_FUNC(_set),2);
250
+
244
251
  #if 0
245
252
  rb_define_attr(rb_cWXAuiPane,"caption",1,1);
246
253
  rb_define_attr(rb_cWXAuiPane,"name",1,1);
@@ -282,12 +289,6 @@ DLL_LOCAL void Init_WXAuiPane(VALUE rb_mWX)
282
289
 
283
290
  #endif
284
291
 
285
- #if wxUSE_AUI
286
- using namespace RubyWX::AuiPane;
287
- rb_cWXAuiPane = rb_define_class_under(rb_mWX,"AuiPane",rb_cObject);
288
- rb_define_alloc_func(rb_cWXAuiPane,_alloc);
289
- //rb_define_method(rb_cWXAuiManager,"[]=",RUBY_METHOD_FUNC(_set),2);
290
-
291
292
  rb_define_attr_method(rb_cWXAuiPane,"caption",_get_caption,_set_caption);
292
293
  rb_define_attr_method(rb_cWXAuiPane,"name",_get_name,_set_name);
293
294
  rb_define_attr_method(rb_cWXAuiPane,"icon",_get_icon,_set_icon);
@@ -5,8 +5,9 @@
5
5
  * Author: hanmac
6
6
  */
7
7
 
8
-
8
+ #include "wxApp.hpp"
9
9
  #include "wxBitmap.hpp"
10
+ #include "wxColor.hpp"
10
11
  #include "wxPalette.hpp"
11
12
  #include "wxDC.hpp"
12
13
  #include <map>
@@ -14,7 +15,7 @@
14
15
 
15
16
  #define _self unwrap<wxBitmap*>(self)
16
17
 
17
- VALUE rb_cWXBitmap;
18
+ VALUE rb_cWXBitmap, rb_cWXMask;
18
19
 
19
20
  typedef std::map<wxWindowID,wxArtID> WindowArt;
20
21
  WindowArt windowArtHolder;
@@ -136,24 +137,42 @@ macro_attr(Height,int)
136
137
  macro_attr(Width,int)
137
138
  macro_attr(Depth,int)
138
139
 
139
- macro_attr(Mask,wxMask*)
140
+ singlereturn(GetMask)
141
+
140
142
  #if wxUSE_PALETTE
141
143
  macro_attr(Palette,wxPalette)
142
144
  #endif
143
145
 
146
+ DLL_LOCAL VALUE _setMask(VALUE self, VALUE val) {
147
+ if(rb_obj_is_kind_of(val, rb_cWXMask))
148
+ _self->SetMask(unwrap<wxMask*>(val));
149
+ else if(is_wrapable<wxColor>(val))
150
+ _self->SetMask(new wxMask(*_self, unwrap<wxColor>(val)));
151
+ #if wxUSE_PALETTE
152
+ else if(FIXNUM_P(val))
153
+ _self->SetMask(new wxMask(*_self, NUM2INT(val)));
154
+ #endif
155
+ else
156
+ _self->SetMask(new wxMask(unwrap<wxBitmap>(val)));
157
+ return val;
158
+ }
159
+
144
160
  DLL_LOCAL VALUE _alloc(VALUE self) {
145
- return wrap(new wxBitmap);
161
+ return wrapTypedPtr(new wxBitmap, self);
146
162
  }
147
163
 
148
164
  DLL_LOCAL VALUE _draw(VALUE self)
149
165
  {
166
+ app_protected();
167
+ rb_check_frozen(self);
168
+
150
169
  wxDC *dc;
151
170
  wxMemoryDC *mdc = new wxMemoryDC;
152
171
  mdc->SelectObject(*_self);
153
172
  #if wxUSE_GRAPHICS_CONTEXT
154
173
  dc = new wxGCDC(*mdc);
155
174
  #else
156
- dc = &mdc;
175
+ dc = mdc;
157
176
  #endif
158
177
  rb_yield(wrap(dc));
159
178
  mdc->SelectObject(wxNullBitmap);
@@ -284,11 +303,17 @@ DLL_LOCAL void Init_WXBitmap(VALUE rb_mWX)
284
303
  rb_define_method(rb_cWXBitmap,"initialize",RUBY_METHOD_FUNC(_initialize),-1);
285
304
  rb_define_private_method(rb_cWXBitmap,"initialize_copy",RUBY_METHOD_FUNC(_initialize_copy),1);
286
305
 
306
+ rb_define_attr_method(rb_cWXBitmap,"height",_getHeight,_setHeight);
307
+ rb_define_attr_method(rb_cWXBitmap,"width",_getWidth,_setWidth);
308
+ rb_define_attr_method(rb_cWXBitmap,"depth",_getDepth,_setDepth);
309
+
310
+ rb_define_attr_method(rb_cWXBitmap,"mask",_GetMask,_setMask);
311
+
287
312
  #if wxUSE_IMAGE
288
313
  rb_define_method(rb_cWXBitmap,"to_image",RUBY_METHOD_FUNC(_to_image),0);
289
314
 
290
315
  rb_define_method(rb_cWXBitmap,"marshal_dump",RUBY_METHOD_FUNC(_marshal_dump),0);
291
- rb_define_method(rb_cWXBitmap,"marshal_load",RUBY_METHOD_FUNC(_marshal_load),1);
316
+ rb_define_method(rb_cWXBitmap,"marshal_load",RUBY_METHOD_FUNC(_marshal_load),-2);
292
317
  #else
293
318
  rb_undef_method(rb_cWXBitmap,"_load");
294
319
  rb_undef_method(rb_cWXBitmap,"_dump");
@@ -298,10 +323,21 @@ DLL_LOCAL void Init_WXBitmap(VALUE rb_mWX)
298
323
  rb_define_attr_method(rb_cWXBitmap,"palette",_getPalette,_setPalette);
299
324
  #endif
300
325
 
326
+ rb_define_method(rb_cWXBitmap,"draw",RUBY_METHOD_FUNC(_draw),0);
327
+
301
328
  rb_define_method(rb_cWXBitmap,"to_bitmap",RUBY_METHOD_FUNC(_to_bitmap),0);
302
329
 
303
330
  rb_define_method(rb_cWXBitmap,"save_file",RUBY_METHOD_FUNC(_save_file),-1);
304
331
 
332
+ registerInfo<wxBitmap>(rb_cWXBitmap);
333
+
334
+ rb_cWXMask = rb_define_class_under(rb_mWX,"Mask",rb_cObject);
335
+ rb_undef_alloc_func(rb_cWXMask);
336
+ rb_undef_method(rb_cWXMask,"initialize_copy");
337
+ rb_undef_method(rb_cWXMask,"_load");
338
+ rb_undef_method(rb_cWXMask,"_dump");
339
+
340
+ registerInfo<wxMask>(rb_cWXMask);
305
341
 
306
342
  registerArtID("folder",wxART_FOLDER);
307
343
 
@@ -45,8 +45,9 @@ DLL_LOCAL VALUE _initialize(int argc,VALUE *argv,VALUE self)
45
45
  bitmap = wrapBitmap(temp,id,WRAP_BITMAP_ID,wxART_BUTTON);
46
46
  }
47
47
 
48
- _self->Create(unwrap<wxWindow*>(parent),id,bitmap);
49
-
48
+ if(nil_check(parent)) {
49
+ _self->Create(unwrap<wxWindow*>(parent),id,bitmap);
50
+ }
50
51
  }
51
52
 
52
53
  rb_call_super(argc,argv);
@@ -28,8 +28,19 @@ singlefunc(Clear)
28
28
  singlefunc(Popup)
29
29
  singlefunc(Dismiss)
30
30
 
31
+ #if defined(wxBITMAPCOMBOBOX_OWNERDRAWN_BASED) && !defined(HAVE_WXOWNERDRAWNCOMBOBOX_ISLISTEMPTY)
32
+ DLL_LOCAL VALUE _IsListEmpty(VALUE self)
33
+ {
34
+ return wrap(dynamic_cast<wxItemContainer*>(_self)->IsEmpty());
35
+ }
36
+ DLL_LOCAL VALUE _IsTextEmpty(VALUE self)
37
+ {
38
+ return wrap(dynamic_cast<wxTextEntry*>(_self)->IsEmpty());
39
+ }
40
+ #else
31
41
  singlereturn(IsListEmpty)
32
42
  singlereturn(IsTextEmpty)
43
+ #endif
33
44
 
34
45
  /*
35
46
  * call-seq:
@@ -70,15 +81,17 @@ DLL_LOCAL VALUE _initialize(int argc,VALUE *argv,VALUE self)
70
81
  Choice::set_style_flags(hash,style);
71
82
  TextCtrl::set_style_flags(hash,style);
72
83
  }
73
- _self->Create(
74
- unwrap<wxWindow*>(parent),id,value,
75
- wxDefaultPosition,wxDefaultSize,
76
- choices,style
77
- );
78
84
 
79
- if(selflag && check_index(selection,_self->GetCount()))
80
- _self->SetSelection(selection);
81
-
85
+ if(nil_check(parent)) {
86
+ _self->Create(
87
+ unwrap<wxWindow*>(parent),id,value,
88
+ wxDefaultPosition,wxDefaultSize,
89
+ choices,style
90
+ );
91
+
92
+ if(selflag && check_index(selection,_self->GetCount()))
93
+ _self->SetSelection(selection);
94
+ }
82
95
  }
83
96
 
84
97
  rb_call_super(argc,argv);
@@ -252,14 +265,15 @@ DLL_LOCAL void Init_WXBitmapComboBox(VALUE rb_mWX)
252
265
  rb_define_method(rb_cWXBitmapComboBox,"popup",RUBY_METHOD_FUNC(_Popup),0);
253
266
  rb_define_method(rb_cWXBitmapComboBox,"dismiss",RUBY_METHOD_FUNC(_Dismiss),0);
254
267
 
268
+
269
+ rb_include_module(rb_cWXBitmapComboBox,rb_mWXItemContainer);
270
+ rb_include_module(rb_cWXBitmapComboBox,rb_mWXTextEntry);
271
+
255
272
  rb_undef_method(rb_cWXBitmapComboBox,"empty?");
256
273
 
257
274
  rb_define_method(rb_cWXBitmapComboBox,"list_empty?",RUBY_METHOD_FUNC(_IsListEmpty),0);
258
275
  rb_define_method(rb_cWXBitmapComboBox,"text_empty?",RUBY_METHOD_FUNC(_IsTextEmpty),0);
259
276
 
260
- rb_include_module(rb_cWXBitmapComboBox,rb_mWXItemContainer);
261
- rb_include_module(rb_cWXBitmapComboBox,rb_mWXTextEntry);
262
-
263
277
  rb_define_method(rb_cWXBitmapComboBox,"get_item_bitmap",RUBY_METHOD_FUNC(_getItemBitmap),1);
264
278
  rb_define_method(rb_cWXBitmapComboBox,"set_item_bitmap",RUBY_METHOD_FUNC(_setItemBitmap),2);
265
279
  rb_define_method(rb_cWXBitmapComboBox,"each_item_bitmap",RUBY_METHOD_FUNC(_each_bitmap),0);