Initial commit.
[euphoria.git] / lib / file_dialog.rb
1 require "esmart_file_dialog"
2
3 class FileDialog < Ecore::Evas::SoftwareX11
4         def FileDialog.open(eet)
5                 fd = FileDialog.new(eet) { |file| yield file }
6                 fd.show
7         end
8
9         def initialize(eet)
10                 super()
11
12                 setup_ee
13
14                 @fd = Esmart::FileDialog.new(evas, eet) do |op|
15                         case op
16                         when :ok
17                                 @fd.selections.each do |sel|
18                                         yield File.join(@fd.current_directory, sel)
19                                 end
20                         when :cancel
21                                 close
22                         end
23                 end
24
25                 @fd.show
26
27                 w, h = @fd.edje.get_size_max
28                 set_size_max(w, h)
29
30                 w, h = @fd.edje.get_size_min
31                 set_size_min(w, h)
32
33                 resize(w, h)
34         end
35
36         def close
37                 @bg = nil
38                 @dragger = nil
39                 delete
40         end
41
42         private
43         def setup_ee
44                 self.title = "Euphoria File Dialog"
45                 self.borderless = true
46
47                 on_pre_render { Edje.thaw }
48                 on_post_render { Edje.freeze }
49
50                 on_resize do
51                         x, y, w, h = geometry
52
53                         @dragger.resize(w, h)
54                         @bg.resize(w, h)
55                         @fd.resize(w, h)
56                 end
57
58                 @bg = Evas::Rectangle.new(evas)
59                 @bg.set_color(89, 94, 97, 255)
60                 @bg.show
61
62                 @dragger = Esmart::Draggies.new(self)
63                 @dragger.button = 1
64                 @dragger.show
65         end
66 end