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

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

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 <mailinglist_abe@yahoo.com> 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

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

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 <lymans@gmail.com> 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 > <mailinglist_abe@yahoo.com> 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
>
>

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 <lymans@gmail.com> 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 <lymans@gmail.com> 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 > > <mailinglist_abe@yahoo.com> 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
> >
> >
>