rubyzip/samples/qtzip.rb

94 lines
1.9 KiB
Ruby
Raw Normal View History

2005-04-03 22:50:05 +08:00
#!/usr/bin/env ruby
# frozen_string_literal: true
2005-04-03 22:50:05 +08:00
$VERBOSE = true
2005-04-03 22:50:05 +08:00
2019-09-27 04:46:00 +08:00
$LOAD_PATH << '../lib'
2005-04-03 22:50:05 +08:00
require 'Qt'
system('rbuic -o zipdialogui.rb zipdialogui.ui')
require 'zipdialogui'
2014-03-31 19:20:27 +08:00
require 'zip'
2005-04-03 22:50:05 +08:00
a = Qt::Application.new(ARGV)
class ZipDialog < ZipDialogUI
def initialize
2005-04-03 22:50:05 +08:00
super()
connect(child('add_button'), SIGNAL('clicked()'),
self, SLOT('add_files()'))
connect(child('extract_button'), SIGNAL('clicked()'),
self, SLOT('extract_files()'))
end
def zipfile(&a_proc)
Zip::File.open(@zip_filename, &a_proc)
2005-04-03 22:50:05 +08:00
end
def each(&a_proc)
Zip::File.foreach(@zip_filename, &a_proc)
2005-04-03 22:50:05 +08:00
end
2014-03-31 19:20:27 +08:00
def refresh
2015-03-21 16:27:44 +08:00
lv = child('entry_list_view')
2005-04-03 22:50:05 +08:00
lv.clear
2015-03-21 16:10:37 +08:00
each do |e|
2005-04-03 22:50:05 +08:00
lv.insert_item(Qt::ListViewItem.new(lv, e.name, e.size.to_s))
2015-03-21 16:10:37 +08:00
end
2005-04-03 22:50:05 +08:00
end
def load(zipfile)
@zip_filename = zipfile
refresh
end
def add_files
l = Qt::FileDialog.getOpenFileNames(nil, nil, self)
2015-03-21 16:10:37 +08:00
zipfile do |zf|
l.each do |path|
2005-04-03 22:50:05 +08:00
zf.add(File.basename(path), path)
2015-03-21 16:10:37 +08:00
end
end
2005-04-03 22:50:05 +08:00
refresh
end
def extract_files
selected_items = []
unselected_items = []
lv_item = entry_list_view.first_child
while lv_item
2005-04-03 22:50:05 +08:00
if entry_list_view.is_selected(lv_item)
selected_items << lv_item.text(0)
else
unselected_items << lv_item.text(0)
end
lv_item = lv_item.next_sibling
end
puts "selected_items.size = #{selected_items.size}"
puts "unselected_items.size = #{unselected_items.size}"
2021-05-24 04:14:33 +08:00
items = selected_items.empty? ? unselected_items : selected_items
2005-04-03 22:50:05 +08:00
puts "items.size = #{items.size}"
d = Qt::FileDialog.get_existing_directory(nil, self)
2021-05-24 04:14:33 +08:00
if d
2005-04-03 22:50:05 +08:00
zipfile { |zf| items.each { |e| zf.extract(e, File.join(d, e)) } }
2021-05-24 04:14:33 +08:00
else
puts 'No directory chosen'
2005-04-03 22:50:05 +08:00
end
end
slots 'add_files()', 'extract_files()'
end
2015-03-24 00:11:32 +08:00
unless ARGV[0]
2019-09-27 04:46:00 +08:00
puts "usage: #{$PROGRAM_NAME} zipname"
2005-04-03 22:50:05 +08:00
exit
end
zd = ZipDialog.new
zd.load(ARGV[0])
a.mainWidget = zd
zd.show
a.exec