I am using the wiki tutorial to try to learn wxruby. I have programmed
the
windows interface many times. The first two samples ran fine, but now
I am
on the icon frame and need a little help. I am aware that I could
replace
the offending path with a hard coded one, but do not want to do that.
I have 50 years programming experience but no experience with ruby or
other
modern scripting languages.
The code found near the bottom of
http://wxruby.rubyforge.org/wiki/wiki.pl?Frames_%28Part_1%29
is copied below.
My current OS is
Windows XP
service pack 3
version 2002
AMD processor
2.50 gig of ram.
When I run the RubyMine debugger I get the following error.
Uncaught exception: Icon file does not exist: ./icons/wxwin.ico
If I search my machine I find the file at
C:\Ruby192\lib\ruby\gems\1.9.1\gems\wxruby-ruby19-2.0.1-x86-mingw32\samples\bigdemo\icons
How do I change the line highlighted in red below so that ruby will
find
this file?
---------------------------------Code
--------------------------------------
require "rubygems"
require "wx"
ID_ICON = 1000
class IconFrame < Wx::Frame
def initialize
super(nil, -1, "Changing Icons!", Wx::DEFAULT_POSITION,
Wx::Size.new(225,150))
panel = Wx::Panel.new(self, -1)
iconNames = ["wxwin", "mondrian", "ogl", "smiley"]
icons = Wx::RadioBox.new(panel, ID_ICON, "&Icons",
Wx::Point.new(20,5),
Wx::DEFAULT_SIZE, iconNames, 1,
Wx::RA_SPECIFY_COLS)
evt_radiobox(ID_ICON) {|event| on_change_icon(event)}
if Wx::PLATFORM == "WXMSW"
Wx::Icon.new("./icons/wxwin.ico", Wx::BITMAP_TYPE_ICO)
else
Wx::Icon.new("./icons/wxwin16x16.xpm", Wx::BITMAP_TYPE_XPM)
end
show(true) #true is the default value, so it may be left off
end
def on_change_icon(event)
if Wx::RUBY_PLATFORM == "WXMSW"
case event.get_int #(get_int is deprecated)
when 0
set_icon(Wx::Icon.new("./icons/wxwin.ico"))
when 1
set_icon(Wx::Icon.new("./icons/mondrian.ico"))
when 2
set_icon(Wx::Icon.new("./icons/ogl.ico"))
when 3
set_icon(Wx::Icon.new("./icons/smiley.ico"))
end
else
case event.get_int
when 0
set_icon(Wx::Icon.new("./icons/wxwin16x16.xpm"))
when 1
set_icon(Wx::Icon.new("./icons/mondrian.xpm"))
when 2
set_icon(Wx::Icon.new("./icons/ogl.xpm"))
when 3
set_icon(Wx::Icon.new("./icons/smiley.xpm"))
end
end
end
end
class MinimalApp < Wx::App
def on_init
IconFrame.new
end
end
MinimalApp.new.main_loop
----------------------end of
code------------------------------------------------
--
Ann Maybury
ann.maybury@gmail.com
on 2011-04-30 19:00
on 2011-05-01 12:12
Hi Ann On 30/04/11 17:17, Ann Maybury wrote: > I am using the wiki tutorial to try to learn wxruby. I have > programmed the windows interface many times. The first two samples > ran fine, but now I am on the icon frame and need a little help. I am > aware that I could replace the offending path with a hard coded one, > but do not want to do that. It's looking for the icon file relative to the current Ruby working directory (same as it would if you used standard File.open from Ruby). You mentioned that you're running in RedMine and it looks like it's not setting the working directory to the one in which the script is saved. There are a couple of ways round this: 1) Use Dir.chdir at the start of your script to switch Ruby's working directory. Dir.chdir(File.dirname(__FILE__)) But obviously this affects other things > How do I change the line highlighted in red below so that ruby will > find this file? > ... > Wx::Icon.new("./icons/wxwin.ico", Wx::BITMAP_TYPE_ICO) 2) If you only want to change the one line, you could look up the location relative to the script, something like Wx::Icon.new( File.join( File.dirname(__FILE__), 'icons', 'wxwin.ico') ) In general, File.dirname(__FILE__) is a bit cumbersome, but proposals to introduce __DIR__ into Ruby core don't seem to have been concluded: http://redmine.ruby-lang.org/issues/3346 cheers alex
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.