Help! Can't get the FXRuby clipboard example to work...

Discussion in 'Ruby' started by Abe Vionas_MailingList, Oct 5, 2004.

  1. Essentially, when I select a customers name and click
    on the Copy button and then go to notepad and press
    CTRL-V (to paste) nothing happens. Anyone have any
    ideas?

    Here's my code as it stands...

    # customer.rb

    require 'fox'

    include Fox



    customer = Struct.new("Customer", :name, :address,
    :zip)

    $customers = []
    $customers << customer.new("Reed Richards", "123
    Maple, Central City, NY", 010111)
    $customers << customer.new("Sue Storm", "123 Maple,
    Anytown, NC", 12345)
    $customers << customer.new("Benjamin J. Grimm", "124
    Maple, Anytown, NC", 12345)
    $customers << customer.new("Johnny Storm", "123 Maple,
    Anytown, NC", 12324)

    class ClipMainWindow < FXMainWindow
    def initialize(anApp)
    # Initialize base class first
    super(anApp, "Clipboard Example", nil, nil,
    DECOR_ALL, 0, 0, 400, 300)

    # Horizontal frame contains buttons
    buttons = FXHorizontalFrame.new(self,
    LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH)

    # Cut and paste buttons
    copyButton = FXButton.new(buttons, "Copy")
    pasteButton = FXButton.new(buttons, "Paste")

    # Place the list in a sunken frame
    sunkenFrame = FXVerticalFrame.new(self,
    LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK,
    0, 0, 0, 0, 0, 0, 0, 0)

    # Customer list
    customerList = FXList.new(sunkenFrame, 6, nil, 0,
    LIST_BROWSESELECT|LAYOUT_FILL_X|LAYOUT_FILL_Y)
    $customers.each do |customer|
    customerList.appendItem(customer.name, nil,
    customer)
    end
    end

    def create
    super
    show(PLACEMENT_SCREEN)
    end
    end

    if __FILE__ == $0
    FXApp.new("ClipboardExample", "FXRuby") do |theApp|
    ClipMainWindow.new(theApp)
    theApp.create
    theApp.run
    end
    end

    # User clicks Copy
    copyButton.connect(SEL_COMMAND) do
    customer =
    customerList.getItemData(customerList.currentItem)
    types = [ FXWindow.stringType ]
    if acquireClipboard()
    @clippedCustomer = customer
    end
    end

    #Handle clipboard request
    copyButton.connect(SEL_CLIPBOARD_REQUEST) do
    setDNDDATA(FROM_CLIPBOARD, FXWindow.stringType,
    Fox.fxencodeStringData(@clippedCustomer.to_s))
    end




    __________________________________
    Do you Yahoo!?
    New and Improved Yahoo! Mail - 100MB free storage!
    http://promotions.yahoo.com/new_mail
     
    Abe Vionas_MailingList, Oct 5, 2004
    #1
    1. Advertising

  2. First off - the last 15 or so lines won't be 'processed' until after
    the application terminates.

    Once it hits 'theApp.run' the main program hangs and Fox takes over,
    so you need to have everything setup before that.

    -Rich


    On Wed, 6 Oct 2004 04:42:01 +0900, Abe Vionas_MailingList
    <> wrote:
    > Essentially, when I select a customers name and click
    > on the Copy button and then go to notepad and press
    > CTRL-V (to paste) nothing happens. Anyone have any
    > ideas?
    >
    > Here's my code as it stands...
    >
    > # customer.rb
    >
    > require 'fox'
    >
    > include Fox
    >
    > customer = Struct.new("Customer", :name, :address,
    > :zip)
    >
    > $customers = []
    > $customers << customer.new("Reed Richards", "123
    > Maple, Central City, NY", 010111)
    > $customers << customer.new("Sue Storm", "123 Maple,
    > Anytown, NC", 12345)
    > $customers << customer.new("Benjamin J. Grimm", "124
    > Maple, Anytown, NC", 12345)
    > $customers << customer.new("Johnny Storm", "123 Maple,
    > Anytown, NC", 12324)
    >
    > class ClipMainWindow < FXMainWindow
    > def initialize(anApp)
    > # Initialize base class first
    > super(anApp, "Clipboard Example", nil, nil,
    > DECOR_ALL, 0, 0, 400, 300)
    >
    > # Horizontal frame contains buttons
    > buttons = FXHorizontalFrame.new(self,
    > LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH)
    >
    > # Cut and paste buttons
    > copyButton = FXButton.new(buttons, "Copy")
    > pasteButton = FXButton.new(buttons, "Paste")
    >
    > # Place the list in a sunken frame
    > sunkenFrame = FXVerticalFrame.new(self,
    > LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK,
    > 0, 0, 0, 0, 0, 0, 0, 0)
    >
    > # Customer list
    > customerList = FXList.new(sunkenFrame, 6, nil, 0,
    > LIST_BROWSESELECT|LAYOUT_FILL_X|LAYOUT_FILL_Y)
    > $customers.each do |customer|
    > customerList.appendItem(customer.name, nil,
    > customer)
    > end
    > end
    >
    > def create
    > super
    > show(PLACEMENT_SCREEN)
    > end
    > end
    >
    > if __FILE__ == $0
    > FXApp.new("ClipboardExample", "FXRuby") do |theApp|
    > ClipMainWindow.new(theApp)
    > theApp.create
    > theApp.run
    > end
    > end
    >
    > # User clicks Copy
    > copyButton.connect(SEL_COMMAND) do
    > customer =
    > customerList.getItemData(customerList.currentItem)
    > types = [ FXWindow.stringType ]
    > if acquireClipboard()
    > @clippedCustomer = customer
    > end
    > end
    >
    > #Handle clipboard request
    > copyButton.connect(SEL_CLIPBOARD_REQUEST) do
    > setDNDDATA(FROM_CLIPBOARD, FXWindow.stringType,
    > Fox.fxencodeStringData(@clippedCustomer.to_s))
    > end
    >
    >
    > __________________________________
    > Do you Yahoo!?
    > New and Improved Yahoo! Mail - 100MB free storage!
    > http://promotions.yahoo.com/new_mail
    >
    >
     
    Richard Lyman, Oct 5, 2004
    #2
    1. Advertising

  3. Abe Vionas_MailingList

    Kevin Pratt Guest

    There were several mistakes in your code I corrected them and below is
    the corrected program

    Hope this helps.

    # customer.rb
    require 'fox'
    include Fox

    customer = Struct.new("Customer", :name, :address,:zip)

    $customers = []
    $customers << customer.new("Reed Richards", "123
    Maple, Central City, NY", 010111)
    $customers << customer.new("Sue Storm", "123 Maple,
    Anytown, NC", 12345)
    $customers << customer.new("Benjamin J. Grimm", "124
    Maple, Anytown, NC", 12345)
    $customers << customer.new("Johnny Storm", "123 Maple,
    Anytown, NC", 12324)

    class ClipMainWindow < FXMainWindow
    def initialize(anApp)
    # Initialize base class first
    super(anApp, "Clipboard Example", nil, nil,DECOR_ALL, 0, 0, 400, 300)
    #declare member variable clippedCustomer
    @clippedCustomer=""
    # Horizontal frame contains buttons
    buttons = FXHorizontalFrame.new(self,
    LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH)

    # Cut and paste buttons
    copyButton = FXButton.new(buttons, "Copy")
    pasteButton = FXButton.new(buttons, "Paste")

    # Place the list in a sunken frame
    sunkenFrame = FXVerticalFrame.new(self,
    LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK,
    0, 0, 0, 0, 0, 0, 0, 0)

    # Customer list
    customerList = FXList.new(sunkenFrame, 6, nil, 0,
    LIST_BROWSESELECT|LAYOUT_FILL_X|LAYOUT_FILL_Y)
    $customers.each do |customer|
    customerList.appendItem(customer.name, nil,customer)
    end
    #Moved this code from the bottome of the file as in needs to be in the
    initalization of the window.
    #User clicks Copy
    copyButton.connect(SEL_COMMAND) do
    customer = customerList.getItemData(customerList.currentItem)
    types = [ FXWindow.stringType ]
    if acquireClipboard(types)
    @clippedCustomer = customer
    end
    end

    #moved this code as well.
    #Must connect the the _Window_ SEL_CLIPBOARD_REQUREST not the buttons
    #Handle clipboard request
    self.connect(SEL_CLIPBOARD_REQUEST) do
    #setDNDData was misspelled.
    setDNDData(FROM_CLIPBOARD, FXWindow.stringType,
    Fox.fxencodeStringData(@clippedCustomer.to_s))
    end
    end
    def create
    super
    show(PLACEMENT_SCREEN)
    end
    end

    if __FILE__ == $0
    FXApp.new("ClipboardExample", "FXRuby") do |theApp|
    ClipMainWindow.new(theApp)
    theApp.create
    theApp.run
    end
    end
     
    Kevin Pratt, Oct 5, 2004
    #3
  4. Sorry for the extra reply...

    I am also fairly certain that DND only works between Fox
    applications... if I'm wrong, someone please correct me.

    -Rich


    On Tue, 5 Oct 2004 14:15:56 -0600, Richard Lyman <> wrote:
    > First off - the last 15 or so lines won't be 'processed' until after
    > the application terminates.
    >
    > Once it hits 'theApp.run' the main program hangs and Fox takes over,
    > so you need to have everything setup before that.
    >
    > -Rich
    >
    >
    >
    >
    > On Wed, 6 Oct 2004 04:42:01 +0900, Abe Vionas_MailingList
    > <> wrote:
    > > Essentially, when I select a customers name and click
    > > on the Copy button and then go to notepad and press
    > > CTRL-V (to paste) nothing happens. Anyone have any
    > > ideas?
    > >
    > > Here's my code as it stands...
    > >
    > > # customer.rb
    > >
    > > require 'fox'
    > >
    > > include Fox
    > >
    > > customer = Struct.new("Customer", :name, :address,
    > > :zip)
    > >
    > > $customers = []
    > > $customers << customer.new("Reed Richards", "123
    > > Maple, Central City, NY", 010111)
    > > $customers << customer.new("Sue Storm", "123 Maple,
    > > Anytown, NC", 12345)
    > > $customers << customer.new("Benjamin J. Grimm", "124
    > > Maple, Anytown, NC", 12345)
    > > $customers << customer.new("Johnny Storm", "123 Maple,
    > > Anytown, NC", 12324)
    > >
    > > class ClipMainWindow < FXMainWindow
    > > def initialize(anApp)
    > > # Initialize base class first
    > > super(anApp, "Clipboard Example", nil, nil,
    > > DECOR_ALL, 0, 0, 400, 300)
    > >
    > > # Horizontal frame contains buttons
    > > buttons = FXHorizontalFrame.new(self,
    > > LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH)
    > >
    > > # Cut and paste buttons
    > > copyButton = FXButton.new(buttons, "Copy")
    > > pasteButton = FXButton.new(buttons, "Paste")
    > >
    > > # Place the list in a sunken frame
    > > sunkenFrame = FXVerticalFrame.new(self,
    > > LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK,
    > > 0, 0, 0, 0, 0, 0, 0, 0)
    > >
    > > # Customer list
    > > customerList = FXList.new(sunkenFrame, 6, nil, 0,
    > > LIST_BROWSESELECT|LAYOUT_FILL_X|LAYOUT_FILL_Y)
    > > $customers.each do |customer|
    > > customerList.appendItem(customer.name, nil,
    > > customer)
    > > end
    > > end
    > >
    > > def create
    > > super
    > > show(PLACEMENT_SCREEN)
    > > end
    > > end
    > >
    > > if __FILE__ == $0
    > > FXApp.new("ClipboardExample", "FXRuby") do |theApp|
    > > ClipMainWindow.new(theApp)
    > > theApp.create
    > > theApp.run
    > > end
    > > end
    > >
    > > # User clicks Copy
    > > copyButton.connect(SEL_COMMAND) do
    > > customer =
    > > customerList.getItemData(customerList.currentItem)
    > > types = [ FXWindow.stringType ]
    > > if acquireClipboard()
    > > @clippedCustomer = customer
    > > end
    > > end
    > >
    > > #Handle clipboard request
    > > copyButton.connect(SEL_CLIPBOARD_REQUEST) do
    > > setDNDDATA(FROM_CLIPBOARD, FXWindow.stringType,
    > > Fox.fxencodeStringData(@clippedCustomer.to_s))
    > > end
    > >
    > >
    > > __________________________________
    > > Do you Yahoo!?
    > > New and Improved Yahoo! Mail - 100MB free storage!
    > > http://promotions.yahoo.com/new_mail
    > >
    > >

    >
     
    Richard Lyman, Oct 5, 2004
    #4
  5. Abe Vionas_MailingList

    Kevin Pratt Guest

    Nope setDNDData works between other applications - can't vouch for the
    other DND methods tho.

    I tested the corrected code by copying and pasting the information
    into an open gaim window running on windows xp.

    kevin.


    On Wed, 6 Oct 2004 05:17:53 +0900, Richard Lyman <> wrote:
    > Sorry for the extra reply...
    >
    > I am also fairly certain that DND only works between Fox
    > applications... if I'm wrong, someone please correct me.
    >
    > -Rich
    >
    >
    >
    >
    > On Tue, 5 Oct 2004 14:15:56 -0600, Richard Lyman <> wrote:
    > > First off - the last 15 or so lines won't be 'processed' until after
    > > the application terminates.
    > >
    > > Once it hits 'theApp.run' the main program hangs and Fox takes over,
    > > so you need to have everything setup before that.
    > >
    > > -Rich
    > >
    > >
    > >
    > >
    > > On Wed, 6 Oct 2004 04:42:01 +0900, Abe Vionas_MailingList
    > > <> wrote:
    > > > Essentially, when I select a customers name and click
    > > > on the Copy button and then go to notepad and press
    > > > CTRL-V (to paste) nothing happens. Anyone have any
    > > > ideas?
    > > >
    > > > Here's my code as it stands...
    > > >
    > > > # customer.rb
    > > >
    > > > require 'fox'
    > > >
    > > > include Fox
    > > >
    > > > customer = Struct.new("Customer", :name, :address,
    > > > :zip)
    > > >
    > > > $customers = []
    > > > $customers << customer.new("Reed Richards", "123
    > > > Maple, Central City, NY", 010111)
    > > > $customers << customer.new("Sue Storm", "123 Maple,
    > > > Anytown, NC", 12345)
    > > > $customers << customer.new("Benjamin J. Grimm", "124
    > > > Maple, Anytown, NC", 12345)
    > > > $customers << customer.new("Johnny Storm", "123 Maple,
    > > > Anytown, NC", 12324)
    > > >
    > > > class ClipMainWindow < FXMainWindow
    > > > def initialize(anApp)
    > > > # Initialize base class first
    > > > super(anApp, "Clipboard Example", nil, nil,
    > > > DECOR_ALL, 0, 0, 400, 300)
    > > >
    > > > # Horizontal frame contains buttons
    > > > buttons = FXHorizontalFrame.new(self,
    > > > LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH)
    > > >
    > > > # Cut and paste buttons
    > > > copyButton = FXButton.new(buttons, "Copy")
    > > > pasteButton = FXButton.new(buttons, "Paste")
    > > >
    > > > # Place the list in a sunken frame
    > > > sunkenFrame = FXVerticalFrame.new(self,
    > > > LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK,
    > > > 0, 0, 0, 0, 0, 0, 0, 0)
    > > >
    > > > # Customer list
    > > > customerList = FXList.new(sunkenFrame, 6, nil, 0,
    > > > LIST_BROWSESELECT|LAYOUT_FILL_X|LAYOUT_FILL_Y)
    > > > $customers.each do |customer|
    > > > customerList.appendItem(customer.name, nil,
    > > > customer)
    > > > end
    > > > end
    > > >
    > > > def create
    > > > super
    > > > show(PLACEMENT_SCREEN)
    > > > end
    > > > end
    > > >
    > > > if __FILE__ == $0
    > > > FXApp.new("ClipboardExample", "FXRuby") do |theApp|
    > > > ClipMainWindow.new(theApp)
    > > > theApp.create
    > > > theApp.run
    > > > end
    > > > end
    > > >
    > > > # User clicks Copy
    > > > copyButton.connect(SEL_COMMAND) do
    > > > customer =
    > > > customerList.getItemData(customerList.currentItem)
    > > > types = [ FXWindow.stringType ]
    > > > if acquireClipboard()
    > > > @clippedCustomer = customer
    > > > end
    > > > end
    > > >
    > > > #Handle clipboard request
    > > > copyButton.connect(SEL_CLIPBOARD_REQUEST) do
    > > > setDNDDATA(FROM_CLIPBOARD, FXWindow.stringType,
    > > > Fox.fxencodeStringData(@clippedCustomer.to_s))
    > > > end
    > > >
    > > >
    > > > __________________________________
    > > > Do you Yahoo!?
    > > > New and Improved Yahoo! Mail - 100MB free storage!
    > > > http://promotions.yahoo.com/new_mail
    > > >
    > > >

    > >

    >
    >
     
    Kevin Pratt, Oct 5, 2004
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    2
    Views:
    781
  2. Steve
    Replies:
    3
    Views:
    108
    Hal Fulton
    Aug 31, 2003
  3. Lyle Johnson
    Replies:
    0
    Views:
    140
    Lyle Johnson
    May 20, 2008
  4. Dan Bishop
    Replies:
    0
    Views:
    250
    Dan Bishop
    Aug 26, 2008
  5. Replies:
    4
    Views:
    283
    Randy Webb
    Dec 14, 2004
Loading...

Share This Page