diff --git a/examples/RAA.rb b/examples/RAA.rb index 8d42598bc94a646e7dcbb720ef000bfecb02b759..cc5065c58f56c72dd92d7aaf72e6a6efe987dfeb 100755 --- a/examples/RAA.rb +++ b/examples/RAA.rb @@ -1,5 +1,11 @@ -require 'soap/rpc/driver' -require 'iRAA' +begin + require 'soap/rpc/driver' + require 'iRAA' +rescue LoadError + warn("Sorry, at the moment this example is not working.") + sleep(5) + exit(false) +end module RAA extend SOAP diff --git a/examples/babelfish.rb b/examples/babelfish.rb index 7184429fa2ab9c204d5847b16c31a99cb2a5c380..e9d41a5d975a419f19eee03e9cacdb5c28210757 100755 --- a/examples/babelfish.rb +++ b/examples/babelfish.rb @@ -1,7 +1,14 @@ #!/usr/bin/env ruby require 'fox16' -require 'tranexp' + +begin + require 'tranexp' +rescue LoadError + warn("LoadError: To execute this app you need to have 'tranexp' gem installed.") + sleep(5) + exit(false) +end include Fox diff --git a/examples/canvasdemo.rb b/examples/canvasdemo.rb index 17175aa61d95284b82ca374c7695026d17625415..06b05e82a42b00e0f36488f04d91505c6c24f4b5 100755 --- a/examples/canvasdemo.rb +++ b/examples/canvasdemo.rb @@ -10,7 +10,7 @@ class CanvasDemo < FXMainWindow super(app, "Canvas Demo", nil, nil, DECOR_ALL, 0, 0, 800, 600) # Menu bar - menu_bar = FXMenubar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X) + menu_bar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X) # File menu file_menu = FXMenuPane.new(self) @@ -53,7 +53,7 @@ class CanvasDemo < FXMainWindow FXMenuTitle.new(menu_bar, "&Help", nil, help_menu) # Status bar - FXStatusbar.new(self, + FXStatusBar.new(self, LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|STATUSBAR_WITH_DRAGCORNER) # Shapes canvas fills the remainder diff --git a/examples/charts.rb b/examples/charts.rb index b3e172067f0f1c95f90a487b7590a1bc4bf7d091..730f1f8bd99d1e98ffba4a9c81986fbe6d43c193 100644 --- a/examples/charts.rb +++ b/examples/charts.rb @@ -1,6 +1,13 @@ require 'fox16' -require 'google_chart' -require 'open-uri' + +begin + require 'google_chart' + require 'open-uri' +rescue LoadError + warn("LoadError: To execute this app you need to have 'google_chart' gem installed.") + sleep(5) + exit(false) +end include Fox diff --git a/examples/iRAA.rb b/examples/iRAA.rb index 72c23473e4a2d6bce5040c6b64558515d133e159..61510e8e9dee20593538e301763997fa7a8a008f 100755 --- a/examples/iRAA.rb +++ b/examples/iRAA.rb @@ -1,4 +1,10 @@ -require 'soap/mapping' +begin + require 'soap/mapping' +rescue LoadError + warn("Sorry, at the moment this example is not working.") + sleep(5) + exit(false) +end module RAA; extend SOAP diff --git a/examples/raabrowser.rb b/examples/raabrowser.rb index 4ba7888e2db88ee5e905fb9f314ef06f739e99c6..34073d6f4483d54ae84b2742d5cc46536969403a 100755 --- a/examples/raabrowser.rb +++ b/examples/raabrowser.rb @@ -1,6 +1,12 @@ require 'fox16' -require 'cgi' -require 'soap/wsdlDriver' +begin + require 'cgi' + require 'soap/wsdlDriver' +rescue LoadError + warn("Sorry, at the moment this example is not working.") + sleep(5) + exit(false) +end include Fox diff --git a/examples/rmagick.rb b/examples/rmagick.rb index 5bde55e0462526ac0339dfbcc104869ce5e61731..f1c221b7bb708309bbc21646223697507e0c4d9d 100755 --- a/examples/rmagick.rb +++ b/examples/rmagick.rb @@ -1,5 +1,11 @@ require 'fox16' -require 'RMagick' +begin + require 'RMagick' +rescue LoadError + warn("LoadError: To execute this app you need to have 'RMagick' gem installed.") + sleep(5) + exit(false) +end include Fox diff --git a/examples/textedit/textedit.rb b/examples/textedit/textedit.rb index 55f07135181f25ba25914e0dd68588b0ecce53fa..75cf6345eb3596a5d496519da708461b57318563 100755 --- a/examples/textedit/textedit.rb +++ b/examples/textedit/textedit.rb @@ -3,9 +3,9 @@ require 'fox16' require 'fox16/responder' require 'fox16/undolist' -require 'prefdialog' -require 'helpwindow' -require 'commands' +require_relative 'prefdialog' +require_relative 'helpwindow' +require_relative 'commands' include Fox diff --git a/ext/fox16_c/include/FXRbTreeList.h b/ext/fox16_c/include/FXRbTreeList.h index 9d12e1ab12c671ab3230415b28e0828f9bd972d5..608ebcc18f9de2036912c3d73af02544fcb96b18 100644 --- a/ext/fox16_c/include/FXRbTreeList.h +++ b/ext/fox16_c/include/FXRbTreeList.h @@ -129,11 +129,11 @@ protected: #include "FXRbObjectVirtuals.h" #include "FXRbTreeItemVirtuals.h" public: - // Pointer to this tree item's owner (if any) - FXWindow *owner; + // Is this tree item owned by an FXTreeList yet? + FXbool owned; public: // Constructor - FXRbTreeItem(const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL) : FXTreeItem(text,oi,ci,ptr),owner(0){} + FXRbTreeItem(const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL) : FXTreeItem(text,oi,ci,ptr),owned(FALSE){} // Mark dependencies for the GC static void markfunc(FXTreeItem* self); diff --git a/ext/fox16_c/markfuncs.cpp b/ext/fox16_c/markfuncs.cpp index 040ea3b81263b492537b11a38350b127332b20c2..e001bbb3da2c5df972a1a0dccc2069e1ecd43ef6 100644 --- a/ext/fox16_c/markfuncs.cpp +++ b/ext/fox16_c/markfuncs.cpp @@ -18,7 +18,7 @@ static void delete_if_not_owned(BASECLASS* self,SUBCLASS*){ if(!dynamic_cast<SUBCLASS*>(self)->owned){ delete self; // also unregisters it } - } + } } FXRbUnregisterRubyObj(self); } @@ -33,7 +33,7 @@ static void delete_if_not_owned_by_app(BASECLASS* self,SUBCLASS*){ if(!dynamic_cast<SUBCLASS*>(self)->ownedByApp){ delete self; // also unregisters it } - } + } } FXRbUnregisterRubyObj(self); } @@ -419,26 +419,7 @@ void FXRbTreeItem::markfunc(FXTreeItem* self){ void FXRbTreeItem::freefunc(FXTreeItem* self){ - if(self!=0){ - if(!FXRbIsBorrowed(self)){ - if(self->isMemberOf(FXMETACLASS(FXRbTreeItem))){ - FXRbTreeItem* treeItem=dynamic_cast<FXRbTreeItem*>(self); - FXASSERT(treeItem); - FXTreeList* treeList=dynamic_cast<FXTreeList*>(treeItem->owner); - if(treeList){ - FXRbUnregisterRubyObj(self); // MAYBE - treeList->removeItem(self,TRUE); - } - else{ - FXTreeListBox* treeListBox=dynamic_cast<FXTreeListBox*>(treeItem->owner); - if(treeListBox){ - treeListBox->removeItem(self); - } - } - } - } - FXRbUnregisterRubyObj(self); - } + delete_if_not_owned(self,reinterpret_cast<FXRbTreeItem*>(0)); } diff --git a/ext/fox16_c/unregisterOwnedObjects.cpp b/ext/fox16_c/unregisterOwnedObjects.cpp index 5cad30f7cd8211b555c703666d085c9dcd95bfeb..157025d45093fb2ed6421117164fe5611abc7f49 100644 --- a/ext/fox16_c/unregisterOwnedObjects.cpp +++ b/ext/fox16_c/unregisterOwnedObjects.cpp @@ -96,7 +96,7 @@ void FXRbTable::unregisterOwnedObjects(FXTable *self) FXRbUnregisterRubyObj(self->getColumnHeader()); for(r=0; r<self->getNumRows(); r++){ for(c=0; c<self->getNumColumns(); c++){ - FXRbUnregisterRubyObj(self->getItem(r,c)); + FXRbUnregisterRubyObj(self->getItem(r,c)); } } } @@ -117,4 +117,3 @@ void FXRbTreeList::unregisterOwnedObjects(FXTreeList *self) // Now zero-out pointers held by still-alive Ruby objects for (FXint i = 0; i < items.no(); i++) FXRbUnregisterRubyObj(items[i]); } - diff --git a/lib/fox16/version.rb b/lib/fox16/version.rb index 5b46c8cc790e30f36acdeadf8ac23a8ac0917c0d..9b6237ad886152ce4f0654c63faff514fbe1f86e 100755 --- a/lib/fox16/version.rb +++ b/lib/fox16/version.rb @@ -1,5 +1,5 @@ module Fox def Fox.fxrubyversion - "1.6.28" + "1.6.29" end end diff --git a/swig-interfaces/FXFoldingList.i b/swig-interfaces/FXFoldingList.i index 22892f859f5772910c93114f412ec2db2b12e323..cbefbd491df3b47f7bb282fac9fef8031668a645 100644 --- a/swig-interfaces/FXFoldingList.i +++ b/swig-interfaces/FXFoldingList.i @@ -233,11 +233,11 @@ public: if(FXMALLOC(&strings,FXchar*,len+1)){ for(long i=0;i<len;i++){ VALUE s=rb_ary_entry(stringArray,i); - strings[i]=StringValuePtr(s); + strings[i]=StringValuePtr(s); } - strings[len]=0; + strings[len]=0; self->setHeaders(strings,size); - FXFREE(&strings); + FXFREE(&strings); } } } @@ -296,7 +296,7 @@ public: FXFoldingItem* insertItem(FXFoldingItem* other,FXFoldingItem* father,FXFoldingItem* item,FXbool notify=FALSE){ if(item->isMemberOf(FXMETACLASS(FXRbFoldingItem))){ dynamic_cast<FXRbFoldingItem*>(item)->owned=TRUE; - } + } return self->insertItem(other,father,item,notify); } } @@ -309,7 +309,7 @@ public: FXFoldingItem* appendItem(FXFoldingItem* father,FXFoldingItem* item,FXbool notify=FALSE){ if(item->isMemberOf(FXMETACLASS(FXRbFoldingItem))){ dynamic_cast<FXRbFoldingItem*>(item)->owned=TRUE; - } + } return self->appendItem(father,item,notify); } } @@ -322,7 +322,7 @@ public: FXFoldingItem* prependItem(FXFoldingItem* father,FXFoldingItem* item,FXbool notify=FALSE){ if(item->isMemberOf(FXMETACLASS(FXRbFoldingItem))){ dynamic_cast<FXRbFoldingItem*>(item)->owned=TRUE; - } + } return self->prependItem(father,item,notify); } } diff --git a/swig-interfaces/FXTreeList.i b/swig-interfaces/FXTreeList.i index b11e2dcf35456c5dd458dfd4c2b8d75a25c7c052..43bc2dcc9e7559b1328afed44316adf995d83602 100644 --- a/swig-interfaces/FXTreeList.i +++ b/swig-interfaces/FXTreeList.i @@ -260,55 +260,41 @@ public: /// Insert [possibly subclassed] item under father before other item FXTreeItem* insertItem(FXTreeItem* other,FXTreeItem* father,FXTreeItem* item,FXbool notify=FALSE){ if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){ - dynamic_cast<FXRbTreeItem*>(item)->owner=self; - } + dynamic_cast<FXRbTreeItem*>(item)->owned=TRUE; + } return self->insertItem(other,father,item,notify); } + } - /// Insert item with given text and optional icons, and user-data pointer under father before other item - FXTreeItem* insertItem(FXTreeItem* other,FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL,FXbool notify=FALSE){ - FXTreeItem* item=self->insertItem(other,father,text,oi,ci,ITEMDATA,notify); - if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){ - dynamic_cast<FXRbTreeItem*>(item)->owner=self; - } - return item; - } + /// Insert item with given text and optional icons, and user-data pointer under father before other item + FXTreeItem* insertItem(FXTreeItem* other,FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL,FXbool notify=FALSE); + %extend { /// Append [possibly subclassed] item as last child of father FXTreeItem* appendItem(FXTreeItem* father,FXTreeItem* item,FXbool notify=FALSE){ if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){ - dynamic_cast<FXRbTreeItem*>(item)->owner=self; - } + dynamic_cast<FXRbTreeItem*>(item)->owned=TRUE; + } return self->appendItem(father,item,notify); } + } - /// Append item with given text and optional icons, and user-data pointer as last child of father - FXTreeItem* appendItem(FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL,FXbool notify=FALSE){ - FXTreeItem* item=self->appendItem(father,text,oi,ci,ITEMDATA,notify); - if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){ - dynamic_cast<FXRbTreeItem*>(item)->owner=self; - } - return item; - } + /// Append item with given text and optional icons, and user-data pointer as last child of father + FXTreeItem* appendItem(FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL,FXbool notify=FALSE); + %extend { /// Prepend [possibly subclassed] item as first child of father FXTreeItem* prependItem(FXTreeItem* father,FXTreeItem* item,FXbool notify=FALSE){ if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){ - dynamic_cast<FXRbTreeItem*>(item)->owner=self; - } + dynamic_cast<FXRbTreeItem*>(item)->owned=TRUE; + } return self->prependItem(father,item,notify); } - - /// Prepend item with given text and optional icons, and user-data pointer as first child of father - FXTreeItem* prependItem(FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL,FXbool notify=FALSE){ - FXTreeItem* item=self->prependItem(father,text,oi,ci,ITEMDATA,notify); - if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){ - dynamic_cast<FXRbTreeItem*>(item)->owner=self; - } - return item; - } } + /// Prepend item with given text and optional icons, and user-data pointer as first child of father + FXTreeItem* prependItem(FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL,FXbool notify=FALSE); + /// Move item under father before other item FXTreeItem *moveItem(FXTreeItem* other,FXTreeItem* father,FXTreeItem* item); @@ -360,7 +346,7 @@ public: FXRbUnregisterRubyObj(items[i]); } } - } + } /// Return item width FXint getItemWidth(const FXTreeItem* item) const; diff --git a/swig-interfaces/FXTreeListBox.i b/swig-interfaces/FXTreeListBox.i index d98303b38e0dd4cdb4cc08317fb66fdf4aebc268..0eb0cf648f56bc7cbaec8727fcbfa673b26e3dc2 100644 --- a/swig-interfaces/FXTreeListBox.i +++ b/swig-interfaces/FXTreeListBox.i @@ -93,55 +93,42 @@ public: /// Insert [possibly subclassed] item under father before other item FXTreeItem* insertItem(FXTreeItem* other,FXTreeItem* father,FXTreeItem* item){ if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){ - dynamic_cast<FXRbTreeItem*>(item)->owner=self; - } + dynamic_cast<FXRbTreeItem*>(item)->owned=TRUE; + } return self->insertItem(other,father,item); } + } + /// Insert item with given text and optional icons, and user-data pointer under father before other item + FXTreeItem* insertItem(FXTreeItem* other,FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL); - /// Insert item with given text and optional icons, and user-data pointer under father before other item - FXTreeItem* insertItem(FXTreeItem* other,FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL){ - FXTreeItem* item=self->insertItem(other,father,text,oi,ci,ITEMDATA); - if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){ - dynamic_cast<FXRbTreeItem*>(item)->owner=self; - } - return item; - } - + %extend { /// Append [possibly subclassed] item as last child of father FXTreeItem* appendItem(FXTreeItem* father,FXTreeItem* item){ if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){ - dynamic_cast<FXRbTreeItem*>(item)->owner=self; - } + dynamic_cast<FXRbTreeItem*>(item)->owned=TRUE; + } return self->appendItem(father,item); } + } - /// Append item with given text and optional icons, and user-data pointer as last child of father - FXTreeItem* appendItem(FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL){ - FXTreeItem* item=self->appendItem(father,text,oi,ci,ITEMDATA); - if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){ - dynamic_cast<FXRbTreeItem*>(item)->owner=self; - } - return item; - } + /// Append item with given text and optional icons, and user-data pointer as last child of father + FXTreeItem* appendItem(FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL); + %extend { /// Prepend [possibly subclassed] item as first child of father FXTreeItem* prependItem(FXTreeItem* father,FXTreeItem* item){ if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){ - dynamic_cast<FXRbTreeItem*>(item)->owner=self; - } + dynamic_cast<FXRbTreeItem*>(item)->owned=TRUE; + } return self->prependItem(father,item); } + } - /// Prepend item with given text and optional icons, and user-data pointer as first child of father - FXTreeItem* prependItem(FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL){ - FXTreeItem* item=self->prependItem(father,text,oi,ci,ITEMDATA); - if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){ - dynamic_cast<FXRbTreeItem*>(item)->owner=self; - } - return item; - } + /// Prepend item with given text and optional icons, and user-data pointer as first child of father + FXTreeItem* prependItem(FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL); + %extend { /// Remove item void removeItem(FXTreeItem* item){ // Save pointer(s) to the soon-to-be-destroyed items