File: gtk_ruby_zip.rb

package info (click to toggle)
ruby-zip 2.3.2-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 1,192 kB
  • sloc: ruby: 8,386; makefile: 23
file content (84 lines) | stat: -rwxr-xr-x 2,193 bytes parent folder | download
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