1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
#!/usr/bin/env ruby
$LOAD_PATH << '../lib'
$VERBOSE = true
require 'gtk'
require 'zip'
class MainApp < Gtk::Window
def initialize
super()
set_usize(400, 256)
set_title('rubyzip')
signal_connect(Gtk::Window::SIGNAL_DESTROY) { Gtk.main_quit }
box = Gtk::VBox.new(false, 0)
add(box)
@zipfile = nil
@button_panel = ButtonPanel.new
@button_panel.open_button.signal_connect(Gtk::Button::SIGNAL_CLICKED) do
show_file_selector
end
@button_panel.extract_button.signal_connect(Gtk::Button::SIGNAL_CLICKED) do
puts 'Not implemented!'
end
box.pack_start(@button_panel, false, false, 0)
sw = Gtk::ScrolledWindow.new
sw.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC)
box.pack_start(sw, true, true, 0)
@clist = Gtk::CList.new(%w[Name Size Compression])
@clist.set_selection_mode(Gtk::SELECTION_BROWSE)
@clist.set_column_width(0, 120)
@clist.set_column_width(1, 120)
@clist.signal_connect(Gtk::CList::SIGNAL_SELECT_ROW) do |_w, row, _column, _event|
@selected_row = row
end
sw.add(@clist)
end
class ButtonPanel < Gtk::HButtonBox
attr_reader :open_button, :extract_button
def initialize
super
set_layout(Gtk::BUTTONBOX_START)
set_spacing(0)
@open_button = Gtk::Button.new('Open archive')
@extract_button = Gtk::Button.new('Extract entry')
pack_start(@open_button)
pack_start(@extract_button)
end
end
def show_file_selector
@file_selector = Gtk::FileSelection.new('Open zip file')
@file_selector.show
@file_selector.ok_button.signal_connect(Gtk::Button::SIGNAL_CLICKED) do
open_zip(@file_selector.filename)
@file_selector.destroy
end
@file_selector.cancel_button.signal_connect(Gtk::Button::SIGNAL_CLICKED) do
@file_selector.destroy
end
end
def open_zip(filename)
@zipfile = Zip::File.open(filename)
@clist.clear
@zipfile.each do |entry|
@clist.append([entry.name,
entry.size.to_s,
(100.0 * entry.compressedSize / entry.size).to_s + '%'])
end
end
end
main_app = MainApp.new
main_app.show_all
Gtk.main
|