fxruby 1.6.20-x86-mingw32 → 1.6.22.pre2-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. data/.gemtest +0 -0
  2. data/README.txt +2 -1
  3. data/Rakefile +43 -35
  4. data/TODO +4 -4
  5. data/doap.rdf +2 -2
  6. data/ext/fox16/FXRbDataTarget.cpp +2 -2
  7. data/ext/fox16/FXRuby.cpp +31 -96
  8. data/ext/fox16/core_wrap.cpp +5 -1
  9. data/ext/fox16/dialogs_wrap.cpp +4 -4
  10. data/ext/fox16/extconf.rb +15 -7
  11. data/ext/fox16/frames_wrap.cpp +1 -1
  12. data/ext/fox16/fx3d_wrap.cpp +1 -1
  13. data/ext/fox16/iconlist_wrap.cpp +2 -2
  14. data/ext/fox16/include/FXRbApp.h +2 -2
  15. data/ext/fox16/include/FXRbCommon.h +2 -0
  16. data/ext/fox16/list_wrap.cpp +3 -3
  17. data/ext/fox16/markfuncs.cpp +1 -0
  18. data/ext/fox16/treelist_wrap.cpp +2 -2
  19. data/ext/fox16/ui_wrap.cpp +3 -3
  20. data/lib/1.8/fox16.so +0 -0
  21. data/lib/1.9/fox16.so +0 -0
  22. data/lib/fox16/accel_table.rb +16 -3
  23. data/lib/fox16/bitmapview.rb +7 -8
  24. data/lib/fox16/core.rb +5 -5
  25. data/lib/fox16/kwargs.rb +877 -879
  26. data/lib/fox16/scintilla.rb +1321 -45
  27. data/lib/fox16/version.rb +1 -1
  28. data/scripts/generate_kwargs_lib.rb +2 -4
  29. data/swig-interfaces/FXMemoryStream.i +9 -5
  30. data/swig-interfaces/ruby-typemaps.i +4 -4
  31. data/test/TC_FXAccelTable.rb +2 -2
  32. data/test/TC_FXApp.rb +48 -2
  33. data/test/TC_FXArc.rb +2 -2
  34. data/test/TC_FXBMPIcon.rb +2 -2
  35. data/test/TC_FXBMPImage.rb +2 -2
  36. data/test/TC_FXButton.rb +2 -2
  37. data/test/TC_FXCheckButton.rb +2 -2
  38. data/test/TC_FXComboBox.rb +2 -2
  39. data/test/TC_FXDC.rb +2 -2
  40. data/test/TC_FXDCPrint.rb +6 -5
  41. data/test/TC_FXDCWindow.rb +5 -3
  42. data/test/TC_FXDataTarget.rb +2 -2
  43. data/test/TC_FXDialogBox.rb +2 -2
  44. data/test/TC_FXDirList.rb +2 -2
  45. data/test/TC_FXExtentd.rb +2 -2
  46. data/test/TC_FXExtentf.rb +2 -2
  47. data/test/TC_FXFileAssoc.rb +2 -2
  48. data/test/TC_FXFileStream.rb +2 -2
  49. data/test/TC_FXFoldingList.rb +2 -2
  50. data/test/TC_FXFont.rb +2 -2
  51. data/test/TC_FXFontDesc.rb +2 -2
  52. data/test/TC_FXGLGroup.rb +2 -2
  53. data/test/TC_FXGLShape.rb +2 -2
  54. data/test/TC_FXGLViewer.rb +2 -2
  55. data/test/TC_FXGradientBar.rb +2 -2
  56. data/test/TC_FXHeader.rb +2 -2
  57. data/test/TC_FXHiliteStyle.rb +2 -2
  58. data/test/TC_FXIconDict.rb +2 -2
  59. data/test/TC_FXIconList.rb +2 -2
  60. data/test/TC_FXId.rb +2 -2
  61. data/test/TC_FXImage.rb +2 -2
  62. data/test/TC_FXLight.rb +2 -2
  63. data/test/TC_FXList.rb +2 -2
  64. data/test/TC_FXListBox.rb +2 -2
  65. data/test/TC_FXMainWindow.rb +2 -2
  66. data/test/TC_FXMat4f.rb +2 -2
  67. data/test/TC_FXMaterial.rb +2 -16
  68. data/test/TC_FXMemoryStream.rb +6 -6
  69. data/test/TC_FXMenuCheck.rb +2 -2
  70. data/test/TC_FXMenuCommand.rb +2 -2
  71. data/test/TC_FXMenuRadio.rb +7 -7
  72. data/test/TC_FXMessageBox.rb +2 -2
  73. data/test/TC_FXPoint.rb +2 -2
  74. data/test/TC_FXQuatf.rb +2 -2
  75. data/test/TC_FXRadioButton.rb +2 -2
  76. data/test/TC_FXRanged.rb +2 -2
  77. data/test/TC_FXRangef.rb +2 -2
  78. data/test/TC_FXRectangle.rb +2 -2
  79. data/test/TC_FXRegion.rb +2 -2
  80. data/test/TC_FXRegistry.rb +2 -2
  81. data/test/TC_FXScrollArea.rb +2 -2
  82. data/test/TC_FXScrollWindow.rb +2 -2
  83. data/test/TC_FXSegment.rb +2 -2
  84. data/test/TC_FXSettings.rb +2 -2
  85. data/test/TC_FXShell.rb +2 -2
  86. data/test/TC_FXSize.rb +2 -2
  87. data/test/TC_FXStream.rb +2 -2
  88. data/test/TC_FXTable.rb +47 -47
  89. data/test/TC_FXTableItem.rb +4 -4
  90. data/test/TC_FXText.rb +4 -4
  91. data/test/TC_FXTopWindow.rb +2 -2
  92. data/test/TC_FXTreeList.rb +2 -2
  93. data/test/TC_FXTreeListBox.rb +2 -2
  94. data/test/TC_FXUndoList.rb +3 -3
  95. data/test/TC_FXVec2d.rb +2 -2
  96. data/test/TC_FXVec2f.rb +2 -2
  97. data/test/TC_FXVec3d.rb +2 -2
  98. data/test/TC_FXVec3f.rb +2 -2
  99. data/test/TC_FXVec4f.rb +2 -2
  100. data/test/TC_FXViewport.rb +2 -2
  101. data/test/TC_FXXBMIcon.rb +2 -2
  102. data/test/TC_FXXBMImage.rb +2 -2
  103. data/test/TC_FXXPMIcon.rb +2 -2
  104. data/test/TC_FXXPMImage.rb +2 -2
  105. data/test/TC_downcast.rb +2 -2
  106. metadata +110 -75
@@ -41,7 +41,7 @@ inline void cls ## _create(cls *self){ \
41
41
  static void cls ## _init(cls* self,VALUE ary,bool connect){ \
42
42
  int i; \
43
43
  char **argv; \
44
- int argc=1+RARRAY_LEN(ary); \
44
+ int argc=static_cast<int>(1+RARRAY_LEN(ary)); \
45
45
  if(FXMALLOC(&argv,char*,argc+1)){ \
46
46
  argv[0]=const_cast<char *>("foo"); \
47
47
  for(i=1;i<argc;i++){ \
@@ -98,7 +98,7 @@ inline void cls ## _exit(cls *self,FXint code){ \
98
98
  rb_ary_push(ary,rb_str_new2(argv[i])); \
99
99
  } \
100
100
  FXRbCallVoidMethod(this,rb_intern("init"),ary,connect); \
101
- argc=RARRAY_LEN(ary)+1; \
101
+ argc=static_cast<int>(RARRAY_LEN(ary)+1); \
102
102
  for(i=1; i<argc; i++){ \
103
103
  VALUE e=rb_ary_entry(ary,i-1); \
104
104
  argv[i]=StringValuePtr(e); \
@@ -24,7 +24,9 @@
24
24
  * $Id: FXRbCommon.h 2303 2005-12-09 03:17:28Z lyle $
25
25
  ***********************************************************************/
26
26
 
27
+ extern "C" {
27
28
  #include "ruby.h"
29
+ }
28
30
 
29
31
  /**
30
32
  * The Ruby header files for Win32 redefine the symbol "select", which
@@ -1185,7 +1185,7 @@ static VALUE _wrap_FXList_fillItems(int argc, VALUE *argv, VALUE self) { FXList
1185
1185
  FXchar **arg2 = (FXchar **) 0 ; FXIcon *arg3 = (FXIcon *) 0 ; void *arg4 = (void *) 0 ; FXbool arg5 = (FXbool) 0 ;
1186
1186
  FXint result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 4))
1187
1187
  rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_ConvertPtr(self, (void **) &arg1, SWIGTYPE_p_FXList, 1);
1188
- { arg2 = NULL; if(!NIL_P(argv[0])){ Check_Type(argv[0], T_ARRAY); if (FXMALLOC(&arg2, FXchar *, RARRAY_LEN(argv[0]))+1) {
1188
+ { arg2 = NULL; if(!NIL_P(argv[0])){ Check_Type(argv[0], T_ARRAY); if (FXMALLOC(&arg2, FXchar *, RARRAY_LEN(argv[0])+1)) {
1189
1189
  for (long i = 0; i < RARRAY_LEN(argv[0]); i++) { VALUE e = rb_ary_entry(argv[0], i);
1190
1190
  arg2[i] = (FXchar *) StringValuePtr(e); } arg2[RARRAY_LEN(argv[0])] = 0; } } } if (argc > 1) {
1191
1191
  SWIG_ConvertPtr(argv[1], (void **) &arg3, SWIGTYPE_p_FXIcon, 1); } if (argc > 2) {
@@ -1864,11 +1864,11 @@ static VALUE _wrap_FXColorList_fillItems(int argc, VALUE *argv, VALUE self) { FX
1864
1864
  FXint result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 4))
1865
1865
  rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc);
1866
1866
  SWIG_ConvertPtr(self, (void **) &arg1, SWIGTYPE_p_FXColorList, 1); { arg2 = NULL; if(!NIL_P(argv[0])){
1867
- Check_Type(argv[0], T_ARRAY); if (FXMALLOC(&arg2, FXchar *, RARRAY_LEN(argv[0]))+1) {
1867
+ Check_Type(argv[0], T_ARRAY); if (FXMALLOC(&arg2, FXchar *, RARRAY_LEN(argv[0])+1)) {
1868
1868
  for (long i = 0; i < RARRAY_LEN(argv[0]); i++) { VALUE e = rb_ary_entry(argv[0], i);
1869
1869
  arg2[i] = (FXchar *) StringValuePtr(e); } arg2[RARRAY_LEN(argv[0])] = 0; } } } if (argc > 1) { {
1870
1870
  arg3 = NULL; if(!NIL_P(argv[1])){ Check_Type(argv[1], T_ARRAY);
1871
- if (FXMALLOC(&arg3, FXColor, RARRAY_LEN(argv[1]))+1) { for (long i = 0; i < RARRAY_LEN(argv[1]); i++) {
1871
+ if (FXMALLOC(&arg3, FXColor, RARRAY_LEN(argv[1])+1)) { for (long i = 0; i < RARRAY_LEN(argv[1]); i++) {
1872
1872
  arg3[i] = static_cast<FXColor>(NUM2ULONG(rb_ary_entry(argv[1], i))); } arg3[RARRAY_LEN(argv[1])] = 0; }
1873
1873
  } } } if (argc > 2) { arg4 = (argv[2] == Qnil) ? NULL : (void *) argv[2]; } if (argc > 3) {
1874
1874
  arg5 = to_FXbool(argv[3]); } result = (FXint)(arg1)->fillItems((FXchar const **)arg2,arg3,arg4,arg5);
@@ -42,6 +42,7 @@ static void delete_if_not_owned_by_app(BASECLASS* self,SUBCLASS*){
42
42
 
43
43
  // FIXME: How to get to the target objects stored in the accelerator
44
44
  // table? This is currently private (not protected) data for the class.
45
+ // See workaround in lib/fox16/accel_table.rb.
45
46
  void FXRbAccelTable::markfunc(FXAccelTable* accelTable){
46
47
  FXRbObject::markfunc(accelTable);
47
48
  }
@@ -1446,7 +1446,7 @@ static VALUE _wrap_FXFoldingList_fillItems(int argc, VALUE *argv, VALUE self) {
1446
1446
  if ((argc < 2) || (argc > 6)) rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc);
1447
1447
  SWIG_ConvertPtr(self, (void **) &arg1, SWIGTYPE_p_FXFoldingList, 1);
1448
1448
  SWIG_ConvertPtr(argv[0], (void **) &arg2, SWIGTYPE_p_FXFoldingItem, 1); { arg3 = NULL; if(!NIL_P(argv[1])){
1449
- Check_Type(argv[1], T_ARRAY); if (FXMALLOC(&arg3, FXchar *, RARRAY_LEN(argv[1]))+1) {
1449
+ Check_Type(argv[1], T_ARRAY); if (FXMALLOC(&arg3, FXchar *, RARRAY_LEN(argv[1])+1)) {
1450
1450
  for (long i = 0; i < RARRAY_LEN(argv[1]); i++) { VALUE e = rb_ary_entry(argv[1], i);
1451
1451
  arg3[i] = (FXchar *) StringValuePtr(e); } arg3[RARRAY_LEN(argv[1])] = 0; } } } if (argc > 2) {
1452
1452
  SWIG_ConvertPtr(argv[2], (void **) &arg4, SWIGTYPE_p_FXIcon, 1); } if (argc > 3) {
@@ -2653,7 +2653,7 @@ static VALUE _wrap_FXTreeList_fillItems(int argc, VALUE *argv, VALUE self) { FXT
2653
2653
  if ((argc < 2) || (argc > 6)) rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc);
2654
2654
  SWIG_ConvertPtr(self, (void **) &arg1, SWIGTYPE_p_FXTreeList, 1);
2655
2655
  SWIG_ConvertPtr(argv[0], (void **) &arg2, SWIGTYPE_p_FXTreeItem, 1); { arg3 = NULL; if(!NIL_P(argv[1])){
2656
- Check_Type(argv[1], T_ARRAY); if (FXMALLOC(&arg3, FXchar *, RARRAY_LEN(argv[1]))+1) {
2656
+ Check_Type(argv[1], T_ARRAY); if (FXMALLOC(&arg3, FXchar *, RARRAY_LEN(argv[1])+1)) {
2657
2657
  for (long i = 0; i < RARRAY_LEN(argv[1]); i++) { VALUE e = rb_ary_entry(argv[1], i);
2658
2658
  arg3[i] = (FXchar *) StringValuePtr(e); } arg3[RARRAY_LEN(argv[1])] = 0; } } } if (argc > 2) {
2659
2659
  SWIG_ConvertPtr(argv[2], (void **) &arg4, SWIGTYPE_p_FXIcon, 1); } if (argc > 3) {
@@ -4976,7 +4976,7 @@ static VALUE _wrap_FXComboBox_fillItems(int argc, VALUE *argv, VALUE self) { FXC
4976
4976
  FXchar **arg2 = (FXchar **) 0 ; FXint result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1))
4977
4977
  rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc);
4978
4978
  SWIG_ConvertPtr(self, (void **) &arg1, SWIGTYPE_p_FXComboBox, 1); { arg2 = NULL; if(!NIL_P(argv[0])){
4979
- Check_Type(argv[0], T_ARRAY); if (FXMALLOC(&arg2, FXchar *, RARRAY_LEN(argv[0]))+1) {
4979
+ Check_Type(argv[0], T_ARRAY); if (FXMALLOC(&arg2, FXchar *, RARRAY_LEN(argv[0])+1)) {
4980
4980
  for (long i = 0; i < RARRAY_LEN(argv[0]); i++) { VALUE e = rb_ary_entry(argv[0], i);
4981
4981
  arg2[i] = (FXchar *) StringValuePtr(e); } arg2[RARRAY_LEN(argv[0])] = 0; } } }
4982
4982
  result = (FXint)(arg1)->fillItems((FXchar const **)arg2); vresult = INT2NUM(result); FXFREE(&arg2); return vresult; }
@@ -5441,7 +5441,7 @@ static VALUE _wrap_FXListBox_fillItems(int argc, VALUE *argv, VALUE self) { FXLi
5441
5441
  FXchar **arg2 = (FXchar **) 0 ; FXIcon *arg3 = (FXIcon *) 0 ; void *arg4 = (void *) 0 ; FXint result; VALUE vresult = Qnil;
5442
5442
  if ((argc < 1) || (argc > 3)) rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc);
5443
5443
  SWIG_ConvertPtr(self, (void **) &arg1, SWIGTYPE_p_FXListBox, 1); { arg2 = NULL; if(!NIL_P(argv[0])){
5444
- Check_Type(argv[0], T_ARRAY); if (FXMALLOC(&arg2, FXchar *, RARRAY_LEN(argv[0]))+1) {
5444
+ Check_Type(argv[0], T_ARRAY); if (FXMALLOC(&arg2, FXchar *, RARRAY_LEN(argv[0])+1)) {
5445
5445
  for (long i = 0; i < RARRAY_LEN(argv[0]); i++) { VALUE e = rb_ary_entry(argv[0], i);
5446
5446
  arg2[i] = (FXchar *) StringValuePtr(e); } arg2[RARRAY_LEN(argv[0])] = 0; } } } if (argc > 1) {
5447
5447
  SWIG_ConvertPtr(argv[1], (void **) &arg3, SWIGTYPE_p_FXIcon, 1); } if (argc > 2) {
@@ -5900,7 +5900,7 @@ static VALUE _wrap_FXTreeListBox_fillItems(int argc, VALUE *argv, VALUE self) {
5900
5900
  rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc);
5901
5901
  SWIG_ConvertPtr(self, (void **) &arg1, SWIGTYPE_p_FXTreeListBox, 1);
5902
5902
  SWIG_ConvertPtr(argv[0], (void **) &arg2, SWIGTYPE_p_FXTreeItem, 1); { arg3 = NULL; if(!NIL_P(argv[1])){
5903
- Check_Type(argv[1], T_ARRAY); if (FXMALLOC(&arg3, FXchar *, RARRAY_LEN(argv[1]))+1) {
5903
+ Check_Type(argv[1], T_ARRAY); if (FXMALLOC(&arg3, FXchar *, RARRAY_LEN(argv[1])+1)) {
5904
5904
  for (long i = 0; i < RARRAY_LEN(argv[1]); i++) { VALUE e = rb_ary_entry(argv[1], i);
5905
5905
  arg3[i] = (FXchar *) StringValuePtr(e); } arg3[RARRAY_LEN(argv[1])] = 0; } } } if (argc > 2) {
5906
5906
  SWIG_ConvertPtr(argv[2], (void **) &arg4, SWIGTYPE_p_FXIcon, 1); } if (argc > 3) {
data/lib/1.8/fox16.so CHANGED
Binary file
data/lib/1.9/fox16.so CHANGED
Binary file
@@ -1,7 +1,7 @@
1
1
  module Fox
2
2
  class FXAccelTable
3
3
  alias addAccelOrig addAccel # :nodoc:
4
-
4
+
5
5
  #
6
6
  # Add an accelerator to the table. The _hotKey_ is a code returned
7
7
  # by the Fox.fxparseAccel method.
@@ -48,7 +48,7 @@ module Fox
48
48
  if args.length > 0
49
49
  if args[0].respond_to? :call
50
50
  tgt = FXPseudoTarget.new
51
- seldn = FXSEL(SEL_KEYPRESS, 0)
51
+ seldn = Fox.FXSEL(SEL_KEYPRESS, 0)
52
52
  tgt.pconnect(SEL_KEYPRESS, args[0])
53
53
  else
54
54
  tgt = args[0]
@@ -56,7 +56,7 @@ module Fox
56
56
  if args.length > 1
57
57
  if args[1].respond_to? :call
58
58
  tgt = tgt || FXPseudoTarget.new
59
- selup = FXSEL(SEL_KEYRELEASE, 0)
59
+ selup = Fox.FXSEL(SEL_KEYRELEASE, 0)
60
60
  tgt.pconnect(SEL_KEYRELEASE, args[1])
61
61
  else
62
62
  seldn = args[1]
@@ -64,7 +64,20 @@ module Fox
64
64
  end
65
65
  end
66
66
  end
67
+ # FIXME: The target objects stored in the accelerator table are currently
68
+ # private. Therefore FXRbAccelTable::markfunc() doesn't mark them as used.
69
+ # As a workaround the objects are additionally stored in @targets Hash.
70
+ @targets = {} unless instance_variable_defined?('@targets')
71
+ @targets[hotKey] = tgt
67
72
  addAccelOrig(hotKey, tgt, seldn, selup)
68
73
  end
74
+
75
+ alias removeAccelOrig removeAccel # :nodoc:
76
+
77
+ def removeAccel(hotKey)
78
+ @targets = {} unless instance_variable_defined?('@targets')
79
+ @targets.delete(hotKey)
80
+ removeAccelOrig(hotKey)
81
+ end
69
82
  end
70
83
  end
@@ -18,7 +18,7 @@ module Fox
18
18
  # +SEL_RIGHTBUTTONRELEASE+:: sent when the right mouse button goes up; the message data is an FXEvent instance.
19
19
  #
20
20
  class FXBitmapView < FXScrollArea
21
-
21
+
22
22
  # Bitmap alignment styles
23
23
  BITMAPVIEW_NORMAL = 0 # Normal mode is centered
24
24
  BITMAPVIEW_CENTER_X = 0 # Centered horizontally
@@ -37,7 +37,7 @@ module Fox
37
37
  self.target = tgt
38
38
  self.message = sel
39
39
  @bitmap = bmp
40
- @onColor = FXRGB(0, 0, 0)
40
+ @onColor = Fox.FXRGB(0, 0, 0)
41
41
  @offColor = backColor
42
42
  @grabx = 0
43
43
  @graby = 0
@@ -58,11 +58,11 @@ module Fox
58
58
  end
59
59
 
60
60
  def getContentWidth
61
- bitmap.nil? 1 : bitmap.width
61
+ bitmap.nil? ? 1 : bitmap.width
62
62
  end
63
63
 
64
64
  def getContentHeight
65
- bitmap.nil? 1 : bitmap.height
65
+ bitmap.nil? ? 1 : bitmap.height
66
66
  end
67
67
 
68
68
  def layout
@@ -121,10 +121,10 @@ module Fox
121
121
  # Handle right mouse button press
122
122
  def onRightBtnPress(sender, sel, ev)
123
123
  self.flags &= ~FLAG_TIP
124
- handle(self, FXSEL(SEL_FOCUS_SELF, 0), ev)
124
+ handle(self, Fox.FXSEL(SEL_FOCUS_SELF, 0), ev)
125
125
  if enabled?
126
126
  grab
127
- if target && target.handle(self, FXSEL(SEL_RIGHTBUTTONPRESS, message), ev) != 0
127
+ if target && target.handle(self, Fox.FXSEL(SEL_RIGHTBUTTONPRESS, message), ev) != 0
128
128
  return 1
129
129
  end
130
130
  self.flags &= ~FLAG_UPDATE
@@ -142,7 +142,7 @@ module Fox
142
142
  ungrab
143
143
  self.flags &= ~(FLAG_PRESSED|FLAG_SCROLLING)
144
144
  self.flags |= FLAG_UPDATE
145
- if target && target.handle(self, FXSEL(SEL_RIGHTBUTTONPRESS, message), ev) != 0
145
+ if target && target.handle(self, Fox.FXSEL(SEL_RIGHTBUTTONPRESS, message), ev) != 0
146
146
  return 1
147
147
  end
148
148
  return 1
@@ -220,4 +220,3 @@ module Fox
220
220
  end
221
221
  end
222
222
  end
223
-
data/lib/fox16/core.rb CHANGED
@@ -203,11 +203,11 @@ module Fox
203
203
  end
204
204
 
205
205
  class FXScrollArea
206
- # Returns a reference to the scroll corner (an FXScrollCorner instance) for this window.
207
- def scrollCorner
208
- verticalScrollBar.next
209
- end
210
- end
206
+ # Returns a reference to the scroll corner (an FXScrollCorner instance) for this window.
207
+ def scrollCorner
208
+ verticalScrollBar.next
209
+ end
210
+ end
211
211
 
212
212
  class FXSettings
213
213
  #