FxRuby初体验Part2

接上一篇:FxRuby初体验Part1

本书的入门例子是个相册管理的桌面应用,名曰Picture Book。这个例子书中用了5 Chapter(2-6)来讲,基本讲到了常用的Gui组件。

不废话现在来看看代码,下面是第一个版本的Picture Book App:

#photo.rb
class Photo
  attr_reader :path
  def initialize(path)
    @path = path
  end
end
 
#album.rb
class Album
  attr_reader :title
  def initialize(title)
    @title = title
    @photos = []
  end
  def add_photo(photo)
    @photos << photo
  end
  def each_photo
    @photos.each { |photo| yield photo }
  end
end
 
#album_list.rb
class AlbumList
  def initialize
    @albums = []
  end
 
  def add_album(album)
    @albums << album
  end
  def remove_album(album)
    @albums.delete(album)
  end
  def each_album
    @albums.each { |album| yield album }
  end
end
 
#photo_view.rb
class PhotoView < FXImageFrame
   def initialize(p, photo)
      super(p, nil)
      load_image(photo.path)
   end
   def load_image(path)
      File.open(path, “rb” ) do |io|
        self.image = FXJPGImage.new(app, io.read)
      end
   end
end
 
#picturebook.rb
require ‘fox16′
include Fox
require ‘photo’
require ‘photo_view’
class PictureBook < FXMainWindow
  def initialize(app)
    super(app, “Picture Book” , :width => 600, :height => 400)
    photo = Photo.new(”shoe.jpg” )
    photo_view = PhotoView.new(self, photo)
  end
  def create
    super
    show(PLACEMENT_SCREEN)
  end
end
if __FILE__ == $0
  FXApp.new do |app|
    PictureBook.new(app)
    app.create
    app.run
  end
end

这是个V0.1的版本。不过你从中看出这个应用写得很MVC。

Model部分就是Photo,Album,AlbumList三个,Controller部分(当然它还没有细化)就是PictureBook,View部分就是PhotoView。就是如此清晰的结构,我想如果是正在学着什么MFC的可怜人儿们看到了之后会把那本什么深入浅出MFC扔了吧。

对比那个HelloWorld,这堆代码除了多了几个普通的Ruby Class(扮演Model的那几个)外,就是多了一个继承自FXImageFrame的PhotoView,还有在FXMainWindow的构造方法中多了对PhotoView的实例化,实例化时将其自身挂钩到PictureBook(构造方法的第一个参数)。之后在App实例化后会实例化MainWindow,接着实例化MainWindow包含的组件,比如PhotoView这个FxImageFrame。PhotoView中对图片的包装是这样的,它先读入Photo的路径,然后用FxImage组件对图片进行包装,然后保存为自己的一个实例变量image中。

PictureBook的第一个版本就是这样。

接着下一篇讲下个版本和下下篇讲下下个版本,然后就介绍完了。

This entry was posted on 星期二, 07月 1st, 2008 at 10:40 pm and is filed under Promgramming, Ruby. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

没有评论

Be the first to comment on this entry.

Have your say

You must be logged in to post a comment.

Recent Posts:
  1. Blog已搬迁 - 2008-08-22
  2. a few interesting rails plugin - 2008-08-06
  3. Get Start Java Network App Dev - 2008-08-06
  4. 思考着Blog搬家 - 2008-07-28
  5. a bug in attachment_fu - 2008-07-28
  1. 我的梦想

    我的梦想是成为世界级的软件开发者。。。 联系我请mailto: chenk85 AT gmail.com 或者加我MSN: chenk85 AT live.cn
  2. 标签

  3.  

    07月 2008
    « Jun   Aug »
     12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
  4. 文章分类

  5. 存档页

  6. 评头论足

    • 功能