[fxruby-users] Class with looping objects

Douglas Allen kb9agt at gmail.com
Wed Mar 3 19:14:06 EST 2010


here is another little tidbit:
theButton.connect(SEL_COMMAND) {
puts "You have clicked the button. Good bye!"
exit}
There are many ways to do blocks.

On 3/3/10, Douglas Allen <kb9agt at gmail.com> wrote:
>
> I'm too inexperienced with FXRuby to really help you but have you ever
> worked with the foxGUIb?
>
> I can almost see the same things going on but with different approaches. I
> like that it uses more attribute_reader after building all the widgets. It
> just has such a nice clean format. here's a simple app:
>
> # source generated by foxGUIb 1.0.0
>
> class MainWindow
>     def initialize( parent)
>         construct_widget_tree( parent)
>         init if respond_to? 'init'
>     end
>
>     def construct_widget_tree( parent)
>         @topwin=
>         FX::MainWindow.new(parent){|w|
>             @MainWindow=w
>             w.wdg_name='MainWindow'
>             w.backColor=Fox::FXRGBA(212,208,200,255)
>             w.width=216
>             w.hSpacing=0
>             w.shown=true
>             w.y=167
>             w.height=218
>             w.title="MainWindow"
>             w.vSpacing=0
>             w.x=262
>             FX::VerticalFrame.new(@MainWindow){|w|
>                 @VerticalFrame=w
>                 w.wdg_name='VerticalFrame'
>                 w.baseColor=Fox::FXRGBA(212,208,200,255)
>                 w.backColor=Fox::FXRGBA(212,208,200,255)
>                 w.width=216
>                 w.height=218
>                 w.shadowColor=Fox::FXRGBA(139,137,132,255)
>                 FX::Button.new(@VerticalFrame){|w|
>                     @Button=w
>                     w.wdg_name='Button'
>                     w.baseColor=Fox::FXRGBA(212,208,200,255)
>                     w.text="click to see what happens!"
>                     w.backColor=Fox::FXRGBA(212,208,200,255)
>
> w.font=FX::Font.new.from_s('Sans|90|0|0|0|0|0').to_FXFont
>                     w.width=153
>                     w.height=23
>                     w.shadowColor=Fox::FXRGBA(139,137,132,255)
>                     @Button.connect(Fox::SEL_LEFTBUTTONRELEASE){
>                         @Text.appendText "lmb up\n"
>                         0 # this prevents fox from blocking the builtin
> event handler for leftbuttonpress
>                     }
>                     @Button.connect(Fox::SEL_LEFTBUTTONPRESS){
>                         @Text.appendText "lmb down\n"
>                         0 # this prevents fox from blocking the builtin
> event handler for leftbuttonpress
>                     }
>                     @Button.connect(Fox::SEL_COMMAND){
>                         @Text.appendText "click!\n"
>                     }
>                 }
>                 FX::Text.new(@VerticalFrame){|w|
>                     @Text=w
>                     w.wdg_name='Text'
>
> w.font=FX::Font.new.from_s('Sans|90|0|0|0|0|0').to_FXFont
>                     w.width=216
>                     w.selBackColor=Fox::FXRGBA(10,36,106,255)
>                     w.y=23
>                     w.height=195
>                 }
>             }
>         }
>     end
>     attr_reader :topwin
>     attr_reader :MainWindow
>     attr_reader :VerticalFrame
>     attr_reader :Button
>     attr_reader :Text
> end
>
> #unit test
> if __FILE__==$0
>     require 'libGUIb16'
>     app=FX::App.new
>     w=MainWindow.new app
>     w.topwin.show(Fox::PLACEMENT_SCREEN)
>     app.create
>     app.run
> end
>
> notice require 'libGUIb16' and then it uses 'fox16' or 'fox14' in its'
> system.
> I'm amazed at the size of the GUI builder app. Nothing large like Glade or
> IronRuby.
>
>
> On 3/3/10, Stuart Clarke <stuart_clarke86 at yahoo.com> wrote:
>>
>>  See code below, many thanks:
>>
>> require 'fox16'
>> include Fox
>>
>> require "find"
>> require "fileutils"
>>
>> class ScriptGui < FXMainWindow #SUBCLASS FOR CREATING A WINDOW, CONTAINS
>> ALL THE CUSTOMISATION INFORMATION
>>   def initialize(app)
>>     super(app, "Script", :width => 700, :height => 200)
>>     frame = FXVerticalFrame.new(self, LAYOUT_LEFT|LAYOUT_FILL_X)
>>     #FRAMES FOR INPUT
>>     frame1 = FXHorizontalFrame.new(frame,
>> LAYOUT_SIDE_TOP|FRAME_NONE|LAYOUT_FILL_X|LAYOUT_FILL_Y)
>>
>>
>>     inputFileA = FXButton.new(frame1, "Input File")
>>     inputFileA.connect(SEL_COMMAND) do
>>         #the connect will ensure the following block is performed
>>       dialog = FXFileDialog.new(self, "Select file")
>>       dialog.patternList = ["Text Files (*.txt)", "All Files (*)"]
>>  #recognised file types
>>       dialog.selectMode = SELECTFILE_EXISTING
>>          #select a file
>>       if dialog.execute != 0
>>                     #display the box and wait fot user response
>>         @aInput.text = dialog.filename
>>                 #if the user selects a file it write it in inputfield
>>       end
>>     end
>>     @aInput = FXTextField.new(frame1, 90, :opts =>
>> JUSTIFY_LEFT|FRAME_SUNKEN|FRAME_THICK)
>>
>>     FXHorizontalSeparator.new(frame, :opts =>
>> LAYOUT_FILL_X|SEPARATOR_GROOVE)
>>
>>     buttonCode = FXButton.new(frame, "Run").connect(SEL_COMMAND,
>> method(:matcher))                         #call method matcher to commence
>> process
>>   end
>>
>>   def matcher(sender, sel, ptr)
>>     #set up hash for itemC and doc ID
>>     @hashMapping = Hash.new {|h,k| h[k] = []}
>>
>>     #process loadfile to capture doc ID's & itemC values.
>>     IO.foreach(@aInput.to_s) do |data|
>>             #go through the input concordance loadfile
>>       fields = data.split(" ")
>>                 #split the field on this
>>       itemA =  fields[13].delete("þ").downcase
>>
>>       itemB = fields[0].delete("þ,\"")
>>
>>       itemC = fields[35].delete("þ,\"")
>>
>>       if itemA.to_s.downcase == "pdf"
>>         @hashMapping[itemC] << itemB
>>
>>     end
>>     end
>>
>>     Find.find(@aInput.to_s) do |curPath2|
>>
>>       if File.file?(curPath2) and curPath2[/\.txt$/]
>>         itemCFN = File.basename(curPath2, ".txt").strip.to_s.downcase
>>      #grabs the file name stripping whitespace
>>         finditemC(curPath2, itemCFN)
>>
>>       end
>>     end
>>   end
>>
>>   def finditemC(curPath2, itemCFN)
>>
>>     @hashMapping.each do |itemDetail|
>>       @entryArray = []
>>
>>       entry = itemDetail.to_s.strip
>>
>>       @entryArray << itemDetail.to_s.strip
>>
>>       if entry.match(/#{itemCFN}/)
>>
>>         puts itemCFN
>>       end
>>     end
>>   end
>>
>>   def create
>>     super
>>       show(PLACEMENT_SCREEN)
>>             #SHOW THE GUI ON THE SCREEN
>>     end
>>   end
>>
>> #CONSTRUCTOR
>> if __FILE__ == $0
>>   FXApp.new do |app|
>>     ScriptGui.new(app)
>>     app.create#CALLS THE METHOD CREATE TO ENSURE ALL NEEDED INFO IS ADDED
>>     app.run#STARTS THE CREATION OF THE WINDOWS
>>   end
>> end
>>
>> --- On *Tue, 2/3/10, Joey Kinsella <jkinsella at ancillaryservices.com>*wrote:
>>
>>
>> From: Joey Kinsella <jkinsella at ancillaryservices.com>
>> Subject: Re: [fxruby-users] Class with looping objects
>> To: fxruby-users at rubyforge.org
>> Date: Tuesday, 2 March, 2010, 13:58
>>
>> It would be much easier to help you if we could see at least example code
>> (similar to what your doing.)
>> However, the error you displayed below tells me your doing something
>> incorrectly. Are you sure self.close() is really what you want to do?
>> Perhaps you should try self.hide()/self.show(). I don't know, without actual
>> code it's hard to tell what you are trying to do. But I hope this helps.
>>
>> On Tue, Mar 2, 2010 at 4:34 AM, Stuart Clarke <stuart_clarke86 at yahoo.com<http://mc/compose?to=stuart_clarke86@yahoo.com>
>> > wrote:
>>
>>>  Hi,
>>>
>>> Thanks for your reply.
>>>
>>> I have tried this previously and I get the following error:
>>>
>>> C:/Ruby/lib/ruby/gems/1.8/gems/fxruby-1.6.16-x86-mswin32-60/lib/fox16/aliases.rb:4812:in
>>> `getText': This FXTextField * already released (RuntimeError)
>>>
>>> Code is:
>>>
>>>   buttonCode = FXButton.new(frame, "Run").connect(SEL_COMMAND,
>>> method(:matcher))
>>> end
>>> def matcher(sender, sel, ptr)
>>>    self.close(true)
>>> #....
>>>
>>> Just to clarify, when matcher runs, it does
>>>
>>> Matcher object - get first item and call object2
>>> Object2 does stuff and then we go back to object matcher and get the next
>>> item
>>> This loop continues until all items have been through both objects then
>>> once finished the run button pops up again and the processing is done, at
>>> this point I want a GUI.
>>>
>>> Thanks a lot
>>>
>>> Stuart
>>>
>>>
>>> --- On *Mon, 1/3/10, Joey Kinsella <jkinsella at ancillaryservices.com<http://mc/compose?to=jkinsella@ancillaryservices.com>
>>> >* wrote:
>>>
>>>
>>> From: Joey Kinsella <jkinsella at ancillaryservices.com<http://mc/compose?to=jkinsella@ancillaryservices.com>
>>> >
>>> Subject: Re: [fxruby-users] Class with looping objects
>>>
>>> To: fxruby-users at rubyforge.org<http://mc/compose?to=fxruby-users@rubyforge.org>
>>> Date: Monday, 1 March, 2010, 14:43
>>>
>>> Couldn't you just do:
>>>
>>> def initialize
>>>   # ...
>>>   button = FXButton.new(frame, "Run").connect(SEL_COMMAND,
>>> method(:matcher))
>>>   # ...
>>> end
>>>
>>> def matcher(sender, selector, data)
>>>   # ...
>>>   self.close # (true) # if you want to notify the messaging system.
>>> end
>>>
>>> or well, something along those lines.. button is a reference to an
>>> FXButton object, It should never equal SEL_KEYRELEASE in this respect. Also
>>> the code above is assuming that it's an object which extends FXMainWindow.
>>>
>>> Hope this helps,
>>> -Joey
>>>
>>> On Mon, Mar 1, 2010 at 6:09 AM, Stuart Clarke <stuart_clarke86 at yahoo.com<http://mc/compose?to=stuart_clarke86@yahoo.com>
>>> > wrote:
>>>
>>>> Hi,
>>>>
>>>> I have a GUI which triggers an object to do some stuff, when you press
>>>> the FXButton it calls matcher e.g.
>>>>
>>>> button = FXButton.new(frame, "Run").connect(SEL_COMMAND,
>>>> method(:matcher))
>>>>
>>>> This button remains in a pressed state until the object has finished
>>>> running, when it is complete the button pops back up. I am trying to add a
>>>> popup box to respond to the button popping up (or processing finished) like
>>>> so:
>>>>
>>>> if button == SEL_KEYRELEASE
>>>>   FXMessageBox.information(self, MBOX_OK, "Complete")
>>>>   mainwindow.close
>>>> end
>>>>
>>>> This however does not work, any ideas how I can acheive this?
>>>>
>>>> Many thanks
>>>>
>>>> --- On *Fri, 26/2/10, Stuart Clarke <stuart_clarke86 at yahoo.com<http://mc/compose?to=stuart_clarke86@yahoo.com>
>>>> >* wrote:
>>>>
>>>>
>>>> From: Stuart Clarke <stuart_clarke86 at yahoo.com<http://mc/compose?to=stuart_clarke86@yahoo.com>
>>>> >
>>>> Subject: [fxruby-users] Class with looping objects
>>>> To: fxruby-users at rubyforge.org<http://mc/compose?to=fxruby-users@rubyforge.org>
>>>> Date: Friday, 26 February, 2010, 19:38
>>>>
>>>>
>>>> Hi all,
>>>>
>>>> Apologies if this is a stupid question but it is getting the best of me.
>>>>
>>>> I have a class which contains a GUI object which has serveral text
>>>> fields and buttons which when used trigger the use of further objects which
>>>> all loop through data, the structure is as follows:
>>>>
>>>> class
>>>> def GUI
>>>> GUI calls object1
>>>> end
>>>> def object1 loops through some data one entry at a time and for each
>>>> entry passes to a new object
>>>> end
>>>> def object2 loops through passed data and does stuff
>>>> end
>>>> then the next bit of data does the same thing in object1
>>>>
>>>>
>>>> What I need is a gui that pops up when my script runs through all of
>>>> objects for each bit of data. Any ideas? I just need to know when the loop
>>>> is complete, at present I press the go button on my fx GUI and it stays
>>>> pressed in until all processing is done then pops back out. At this point I
>>>> need a Gui.
>>>>
>>>> I hope this makes sense,
>>>>
>>>> Many thanks
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> fxruby-users mailing list
>>>> fxruby-users at rubyforge.org<http://mc/compose?to=fxruby-users@rubyforge.org>
>>>> http://rubyforge.org/mailman/listinfo/fxruby-users
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> fxruby-users mailing list
>>>> fxruby-users at rubyforge.org<http://mc/compose?to=fxruby-users@rubyforge.org>
>>>> http://rubyforge.org/mailman/listinfo/fxruby-users
>>>>
>>>
>>> --
>>> If you are not the intended recipient, you are hereby notified
>>> that any dissemination, distribution, copying or other use of
>>> this communication is strictly prohibited.  If you have
>>> received this communication in error, please notify us
>>>
>>> immediately.
>>>
>>>
>>> -----Inline Attachment Follows-----
>>>
>>>
>>> _______________________________________________
>>> fxruby-users mailing list
>>> fxruby-users at rubyforge.org<http://mc/compose?to=fxruby-users@rubyforge.org>
>>> http://rubyforge.org/mailman/listinfo/fxruby-users
>>>
>>>
>>>
>>> _______________________________________________
>>> fxruby-users mailing list
>>> fxruby-users at rubyforge.org<http://mc/compose?to=fxruby-users@rubyforge.org>
>>> http://rubyforge.org/mailman/listinfo/fxruby-users
>>>
>>
>> --
>> If you are not the intended recipient, you are hereby notified
>> that any dissemination, distribution, copying or other use of
>> this communication is strictly prohibited.  If you have
>> received this communication in error, please notify us
>>
>> immediately.
>>
>>
>> -----Inline Attachment Follows-----
>>
>> _______________________________________________
>> fxruby-users mailing list
>> fxruby-users at rubyforge.org<http://mc/compose?to=fxruby-users@rubyforge.org>
>> http://rubyforge.org/mailman/listinfo/fxruby-users
>>
>>
>>
>> _______________________________________________
>> fxruby-users mailing list
>> fxruby-users at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/fxruby-users
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/fxruby-users/attachments/20100303/c8638c52/attachment-0001.html>


More information about the fxruby-users mailing list