File: gtkRubyzip.rb

package info (click to toggle)
ruby-zip 1.1.6-1%2Bdeb8u1
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 720 kB
  • ctags: 929
  • sloc: ruby: 7,045; makefile: 11
file content (86 lines) | stat: -rwxr-xr-x 2,133 bytes parent folder | download | duplicates (2)
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
85
86
#!/usr/bin/env ruby

$: << "../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
    @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::File.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