initial import boxroom 0.6.2
[boxroom-stian.git] / vendor / plugins / rubyzip-0.9.1 / samples / qtzip.rb
blob3d76bd18e85a016889fbfddb01163474a75c7bad
1 #!/usr/bin/env ruby
3 $VERBOSE=true
5 $: << "../lib"
7 require 'Qt'
8 system('rbuic -o zipdialogui.rb zipdialogui.ui')
9 require 'zipdialogui.rb'
10 require 'zip/zip'
14 a = Qt::Application.new(ARGV)
16 class ZipDialog < ZipDialogUI
19   def initialize()
20     super()
21     connect(child('add_button'), SIGNAL('clicked()'),
22             self, SLOT('add_files()'))
23     connect(child('extract_button'), SIGNAL('clicked()'),
24             self, SLOT('extract_files()'))
25   end
27   def zipfile(&proc)
28     Zip::ZipFile.open(@zip_filename, &proc)
29   end
31   def each(&proc)
32     Zip::ZipFile.foreach(@zip_filename, &proc)
33   end
34   
35   def refresh()
36     lv = child("entry_list_view")
37     lv.clear
38     each { 
39       |e|
40       lv.insert_item(Qt::ListViewItem.new(lv, e.name, e.size.to_s))
41     }
42   end
44     
45   def load(zipfile)
46     @zip_filename = zipfile
47     refresh
48   end
50   def add_files
51     l = Qt::FileDialog.getOpenFileNames(nil, nil, self)
52     zipfile { 
53       |zf| 
54       l.each { 
55         |path|
56         zf.add(File.basename(path), path)
57       }
58     }
59     refresh
60   end
62   def extract_files
63     selected_items = []
64     unselected_items = []
65     lv_item = entry_list_view.first_child
66     while (lv_item)
67       if entry_list_view.is_selected(lv_item)
68         selected_items << lv_item.text(0)
69       else
70         unselected_items << lv_item.text(0)
71       end
72       lv_item = lv_item.next_sibling
73     end
74     puts "selected_items.size = #{selected_items.size}"
75     puts "unselected_items.size = #{unselected_items.size}"
76     items = selected_items.size > 0 ? selected_items : unselected_items
77     puts "items.size = #{items.size}"
79     d = Qt::FileDialog.get_existing_directory(nil, self)
80     if (!d)
81       puts "No directory chosen"
82     else
83       zipfile { |zf| items.each { |e| zf.extract(e, File.join(d, e)) } }
84     end
85     
86   end
88   slots 'add_files()', 'extract_files()'
89 end
91 if !ARGV[0]
92   puts "usage: #{$0} zipname"
93   exit
94 end
96 zd = ZipDialog.new
97 zd.load(ARGV[0])
99 a.mainWidget = zd
100 zd.show()
101 a.exec()