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

  • Thread starter Abe Vionas_MailingList
  • Start date
A

Abe Vionas_MailingList

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
 
R

Richard Lyman

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
 
K

Kevin Pratt

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
 
R

Richard Lyman

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


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




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
 
K

Kevin Pratt

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.


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




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




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
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,901
Latest member
Noble71S45

Latest Threads

Top