87 lines
2.1 KiB
Ruby
87 lines
2.1 KiB
Ruby
#!/usr/bin/env ruby
|
|
|
|
$: << "../lib"
|
|
|
|
$VERBOSE = true
|
|
|
|
require 'gtk'
|
|
require 'zip/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
|
|
@buttonPanel = ButtonPanel.new
|
|
@buttonPanel.openButton.signal_connect(Gtk::Button::SIGNAL_CLICKED) {
|
|
show_file_selector
|
|
}
|
|
@buttonPanel.extractButton.signal_connect(Gtk::Button::SIGNAL_CLICKED) {
|
|
puts "Not implemented!"
|
|
}
|
|
box.pack_start(@buttonPanel, 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(["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) {
|
|
|w, row, column, event|
|
|
@selected_row = row
|
|
}
|
|
sw.add(@clist)
|
|
end
|
|
|
|
class ButtonPanel < Gtk::HButtonBox
|
|
attr_reader :openButton, :extractButton
|
|
def initialize
|
|
super
|
|
set_layout(Gtk::BUTTONBOX_START)
|
|
set_spacing(0)
|
|
@openButton = Gtk::Button.new("Open archive")
|
|
@extractButton = Gtk::Button.new("Extract entry")
|
|
pack_start(@openButton)
|
|
pack_start(@extractButton)
|
|
end
|
|
end
|
|
|
|
def show_file_selector
|
|
@fileSelector = Gtk::FileSelection.new("Open zip file")
|
|
@fileSelector.show
|
|
@fileSelector.ok_button.signal_connect(Gtk::Button::SIGNAL_CLICKED) {
|
|
open_zip(@fileSelector.filename)
|
|
@fileSelector.destroy
|
|
}
|
|
@fileSelector.cancel_button.signal_connect(Gtk::Button::SIGNAL_CLICKED) {
|
|
@fileSelector.destroy
|
|
}
|
|
end
|
|
|
|
def open_zip(filename)
|
|
@zipfile = Zip::ZipFile.open(filename)
|
|
@clist.clear
|
|
@zipfile.each {
|
|
|entry|
|
|
@clist.append([ entry.name,
|
|
entry.size.to_s,
|
|
(100.0*entry.compressedSize/entry.size).to_s+"%" ])
|
|
}
|
|
end
|
|
end
|
|
|
|
mainApp = MainApp.new()
|
|
|
|
mainApp.show_all
|
|
|
|
Gtk.main
|