FxRuby Part4
之前的:FxRuby初体验Part1,Part2,Part3。
到了PictureBook的V0.4了。这个版本算是基本的功能都做足了,包括了加上了相册选择,相册持久化等等。
#album_list_view.rb require 'fox16'
include Fox
class AlbumListView < FXList attr_reader :album_list def initialize(p, opts) super(p, :opts => opts) end def switcher=(sw) @switcher = sw end
def add_album(album) appendItem(album.title) AlbumView.new(@switcher, album) end
def album_list=(albums) @album_list = albums @album_list.each_album do |album| add_album(album) end end end
#picture_book.rb $KCODE = "U" require 'fox16' require 'yaml'
include Fox
require 'album' require 'album_list' require 'photo' require 'photo_view' require 'album_view' require 'album_list_view'
class PictureBook < FXMainWindow def initialize(app) super(app, "Picture Book" , :width => 600, :height => 400) add_menu_bar begin @album_list = YAML.load_file("picturebook.yml" ) rescue @album_list = AlbumList.new @album_list.add_album(Album.new("My Photos" )) end splitter = FXSplitter.new(self, :opts => SPLITTER_HORIZONTAL|LAYOUT_FILL) @album_list_view = AlbumListView.new(splitter, LAYOUT_FILL) @switcher = FXSwitcher.new(splitter, :opts => LAYOUT_FILL) @switcher.connect(SEL_UPDATE) do @switcher.current = @album_list_view.currentItem end @album_list_view.switcher = @switcher @album_list_view.album_list = @album_list end
def create super show(PLACEMENT_SCREEN) end
def add_menu_bar # 创建一个菜单栏的实例 menu_bar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X) # 创建一个菜单栏项 file_menu = FXMenuPane.new(self) FXMenuTitle.new(menu_bar, "文件" , :popupMenu => file_menu) # 下面是一个创建菜单栏项和所关联动作的绑定 import_cmd = FXMenuCommand.new(file_menu, "导入..." ) import_cmd.connect(SEL_COMMAND) do dialog = FXFileDialog.new(self, "导入图片" ) dialog.selectMode = SELECTFILE_MULTIPLE dialog.patternList = ["JPEG Images (*.jpg, *.jpeg)" ] if dialog.execute != 0 import_photos(dialog.filenames) end end new_album_command = FXMenuCommand.new(file_menu, "New Album..." ) new_album_command.connect(SEL_COMMAND) do album_title = FXInputDialog.getString("My Album" , self, "New Album" , "Name:" ) if album_title album = Album.new(album_title) @album_list.add_album(album) @album_list_view.add_album(album) AlbumView.new(@switcher, album) end end exit_cmd = FXMenuCommand.new(file_menu, "退出" )# 一个简单的退出项 exit_cmd.connect(SEL_COMMAND) do store_album_list exit end end
def import_photos(filenames) filenames.each do |filename| photo = Photo.new(filename) current_album.add_photo(photo) current_album_view.add_photo(photo) end current_album_view.create end
def current_album_view @switcher.childAtIndex(@switcher.current) end
def current_album current_album_view.album end
def store_album_list File.open("picturebook.yml" , "w" ) do |io| io.write(YAML.dump(@album_list)) end end
end
if FILE == $0 FXApp.new do |app| PictureBook.new(app) app.create app.run end end
剩下的晚上再写。。。
- Previous: FxRuby Part3
- Next: 大三结束