visualruby 1.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/editor/VR_Document.rb +219 -0
- data/bin/editor/VR_TabSearch.rb +50 -0
- data/bin/editor/VR_Tabs.rb +99 -0
- data/bin/editor/VR_TextShell.rb +83 -0
- data/bin/editor/VR_TextViewCommon.rb +65 -0
- data/bin/editor/glade/VR_Document.glade +160 -0
- data/bin/main/GemTree.rb +23 -0
- data/bin/main/NewProjectGUI.rb +28 -0
- data/bin/main/ProjectChooserGUI.rb +41 -0
- data/bin/main/ProjectChooserView.rb +39 -0
- data/bin/main/RubygemsAPI.rb +93 -0
- data/bin/main/Splash.rb +22 -0
- data/bin/main/VR_ENV.rb +61 -0
- data/bin/main/VR_ENV_GLOBAL.rb +64 -0
- data/bin/main/VR_File_Tree.rb +120 -0
- data/bin/main/VR_Local_Gem_Tree.rb +80 -0
- data/bin/main/VR_Main.rb +313 -0
- data/bin/main/VR_Remote_Gem_Tree.rb +70 -0
- data/bin/main/glade/NewProjectGUI.glade +141 -0
- data/bin/main/glade/ProjectChooserGUI.glade +140 -0
- data/bin/main/glade/RubygemsAPI.glade +130 -0
- data/bin/main/glade/Splash.glade +18 -0
- data/bin/main/glade/VR_ENV.glade +168 -0
- data/bin/main/glade/VR_ENV_GLOBAL.glade +268 -0
- data/bin/main/glade/VR_File_Tree.glade +65 -0
- data/bin/main/glade/VR_Local_Gem_Tree.glade +45 -0
- data/bin/main/glade/VR_Main.glade +707 -0
- data/bin/main/glade/VR_Remote_Gem_Tree.glade +76 -0
- data/bin/tools/VR_Tools.rb +120 -0
- data/img/close.png +0 -0
- data/img/folder.png +0 -0
- data/img/glade.png +0 -0
- data/img/gtk-edit.png +0 -0
- data/img/obj.png +0 -0
- data/img/png.png +0 -0
- data/img/rb.png +0 -0
- data/img/ruby.png +0 -0
- data/img/splash.png +0 -0
- data/img/unknown.png +0 -0
- data/skeleton/document/New.glade +13 -0
- data/skeleton/document/NewWindow.rb +15 -0
- data/skeleton/project/bin/MyClass.rb +15 -0
- data/skeleton/project/bin/glade/MyClass.glade +45 -0
- data/skeleton/project/main.rb +14 -0
- data/visualruby_examples/active_record/.vr_settings.yaml +47 -0
- data/visualruby_examples/active_record/active_record.rb +52 -0
- data/visualruby_examples/active_record/bin/ChoosePerson.rb +17 -0
- data/visualruby_examples/active_record/bin/Person.rb +13 -0
- data/visualruby_examples/active_record/bin/glade/ChoosePerson.glade +61 -0
- data/visualruby_examples/active_record/bin/glade/Person.glade +148 -0
- data/visualruby_examples/active_record/db/development.sqlite3 +0 -0
- data/visualruby_examples/active_record2/.vr_settings.yaml +48 -0
- data/visualruby_examples/active_record2/active_record2.rb +142 -0
- data/visualruby_examples/active_record2/bin/CompanyGUI.rb +54 -0
- data/visualruby_examples/active_record2/bin/Employee.rb +20 -0
- data/visualruby_examples/active_record2/bin/Employer.rb +11 -0
- data/visualruby_examples/active_record2/bin/Paycheck.rb +11 -0
- data/visualruby_examples/active_record2/bin/glade/CompanyGUI.glade +167 -0
- data/visualruby_examples/active_record2/bin/glade/Employee.glade +123 -0
- data/visualruby_examples/active_record2/bin/glade/Employer.glade +147 -0
- data/visualruby_examples/active_record2/bin/glade/Paycheck.glade +145 -0
- data/visualruby_examples/active_record2/db/development.sqlite3 +0 -0
- data/visualruby_examples/all_widgets/.vr_settings.yaml +20 -0
- data/visualruby_examples/all_widgets/all_widgets.rb +13 -0
- data/visualruby_examples/all_widgets/bin/AllWidgets.rb +43 -0
- data/visualruby_examples/all_widgets/bin/glade/AllWidgets.glade +166 -0
- data/visualruby_examples/all_widgets/bin/splash.png +0 -0
- data/visualruby_examples/calculator/.vr_settings.yaml +21 -0
- data/visualruby_examples/calculator/bin/Calculator.rb +63 -0
- data/visualruby_examples/calculator/bin/glade/Calculator.glade +243 -0
- data/visualruby_examples/calculator/main.rb +13 -0
- data/visualruby_examples/child_window/.vr_settings.yaml +46 -0
- data/visualruby_examples/child_window/bin/ChildWindowDemo.rb +41 -0
- data/visualruby_examples/child_window/bin/MyChildClass.rb +42 -0
- data/visualruby_examples/child_window/bin/glade/ChildWindowDemo.glade +101 -0
- data/visualruby_examples/child_window/bin/glade/MyChildClass.glade +58 -0
- data/visualruby_examples/child_window/main.rb +13 -0
- data/visualruby_examples/drag_drop/.vr_settings.yaml +19 -0
- data/visualruby_examples/drag_drop/bin/DragDropDemo.rb +45 -0
- data/visualruby_examples/drag_drop/bin/glade/DragDropDemo.glade +143 -0
- data/visualruby_examples/drag_drop/img/folder.png +0 -0
- data/visualruby_examples/drag_drop/img/glade.png +0 -0
- data/visualruby_examples/drag_drop/img/gtk-edit.png +0 -0
- data/visualruby_examples/drag_drop/img/obj.png +0 -0
- data/visualruby_examples/drag_drop/img/png.png +0 -0
- data/visualruby_examples/drag_drop/img/rb.png +0 -0
- data/visualruby_examples/drag_drop/img/ruby.png +0 -0
- data/visualruby_examples/drag_drop/img/unknown.png +0 -0
- data/visualruby_examples/drag_drop/main.rb +14 -0
- data/visualruby_examples/listview/.vr_settings.yaml +46 -0
- data/visualruby_examples/listview/bin/SongListView.rb +89 -0
- data/visualruby_examples/listview/bin/SongListViewGUI.rb +67 -0
- data/visualruby_examples/listview/bin/audio-x-generic.png +0 -0
- data/visualruby_examples/listview/bin/glade/SongListViewGUI.glade +220 -0
- data/visualruby_examples/listview/main.rb +19 -0
- data/visualruby_examples/listview_objects/.vr_settings.yaml +46 -0
- data/visualruby_examples/listview_objects/bin/DataObject.rb +32 -0
- data/visualruby_examples/listview_objects/bin/DataObjectGUI.rb +41 -0
- data/visualruby_examples/listview_objects/bin/ListViewObjects.rb +34 -0
- data/visualruby_examples/listview_objects/bin/ListViewObjectsGUI.rb +18 -0
- data/visualruby_examples/listview_objects/bin/glade/DataObject.glade +198 -0
- data/visualruby_examples/listview_objects/bin/glade/ListViewObjectsGUI.glade +102 -0
- data/visualruby_examples/listview_objects/main.rb +13 -0
- data/visualruby_examples/simple_ruby_gui/.vr_settings.yaml +45 -0
- data/visualruby_examples/simple_ruby_gui/bin/DataObjectGUI.rb +20 -0
- data/visualruby_examples/simple_ruby_gui/bin/glade/DataObjectGUI.glade +163 -0
- data/visualruby_examples/simple_ruby_gui/simple_ruby_gui +16 -0
- data/visualruby_examples/treeview/.vr_settings.yaml +18 -0
- data/visualruby_examples/treeview/bin/MyClass.rb +28 -0
- data/visualruby_examples/treeview/bin/glade/MyClass.glade +48 -0
- data/visualruby_examples/treeview/main.rb +14 -0
- data/vr +40 -0
- metadata +202 -0
data/bin/main/GemTree.rb
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
|
|
2
|
+
class GemTree < VR::ListView
|
|
3
|
+
|
|
4
|
+
RUBY_ICON = Gdk::Pixbuf.new(File.dirname(__FILE__) + '/../../img/rb.png')
|
|
5
|
+
|
|
6
|
+
def initialize()
|
|
7
|
+
hash = {:gems => {:pix => Gdk::Pixbuf, :gem => String}}
|
|
8
|
+
super(hash)
|
|
9
|
+
self.headers_visible = false
|
|
10
|
+
@api = RubygemsAPI.new
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self__button_release_event(w, event)
|
|
14
|
+
return unless selection.selected and event.button == 3 #right mouse
|
|
15
|
+
@builder['popGem'].popup(nil, nil, event.button, event.time)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def get_name_ver(line)
|
|
19
|
+
match = /^(.*)\s+\((.*)\)/.match(line)
|
|
20
|
+
return match[1], match[2]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
|
|
2
|
+
class NewProjectGUI
|
|
3
|
+
|
|
4
|
+
include GladeGUI
|
|
5
|
+
|
|
6
|
+
def initialize(parent)
|
|
7
|
+
@parent = parent
|
|
8
|
+
@parent.proj_path = nil
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def buttonCreate__clicked(*a)
|
|
12
|
+
fn = @builder["entryFolderName"].text
|
|
13
|
+
fn = fn.gsub(/[^\w\.]/, '_')
|
|
14
|
+
path = File.expand_path(File.join("~", "visualruby", fn))
|
|
15
|
+
if File.directory?(path)
|
|
16
|
+
VR::msg "That folder already exists. You can delete it and try again."
|
|
17
|
+
else
|
|
18
|
+
Dir.mkdir path
|
|
19
|
+
@parent.proj_path = path
|
|
20
|
+
destroy_window()
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def buttonCancel__clicked(*a)
|
|
25
|
+
destroy_window()
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
|
|
2
|
+
class ProjectChooserGUI < ProjectChooserView
|
|
3
|
+
|
|
4
|
+
include GladeGUI
|
|
5
|
+
|
|
6
|
+
def initialize(parent)
|
|
7
|
+
@parent = parent
|
|
8
|
+
@parent.proj_path = nil
|
|
9
|
+
super()
|
|
10
|
+
load_glade(__FILE__) #don't set parent here! Want modal window.
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def show()
|
|
14
|
+
@builder["scrolledwindowProjTree"].add(self)
|
|
15
|
+
refresh(false)
|
|
16
|
+
show_window()
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def buttonOpen__clicked(*args)
|
|
20
|
+
return unless row = selected_rows.first
|
|
21
|
+
@parent.proj_path = row[:file_name]
|
|
22
|
+
destroy_window()
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def buttonSelect_clicked
|
|
26
|
+
if folder = VR::Dialog.folder_box(@builder)
|
|
27
|
+
@parent.proj_path = folder
|
|
28
|
+
destroy_window()
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def checkBackup_toggled
|
|
33
|
+
refresh(@builder["checkBackup"].active?)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def self__row_activated(*args)
|
|
37
|
+
buttonOpen__clicked
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
|
|
2
|
+
class ProjectChooserView < VR::ListView
|
|
3
|
+
|
|
4
|
+
PIX = Gdk::Pixbuf.new(File.dirname(__FILE__) + "/../../img/folder.png")
|
|
5
|
+
|
|
6
|
+
def initialize()
|
|
7
|
+
super(:folder => {:pix => Gdk::Pixbuf, :file_name => String}, :modified => DateTime)
|
|
8
|
+
ren_xalign(:modified => 1)
|
|
9
|
+
col_xalign(:modified => 1)
|
|
10
|
+
col_sort_column_id(:modified => id(:modified), :pix => id(:file_name))
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def refresh(show_backup = false)
|
|
14
|
+
model.set_sort_column_id(1)
|
|
15
|
+
self.model.clear
|
|
16
|
+
pattern = ""
|
|
17
|
+
backup_path = Dir.pwd.gsub(ENV["HOME"], File.join(ENV["HOME"], "visualruby_backup"))
|
|
18
|
+
backup_ar = File.split(backup_path)
|
|
19
|
+
backup_ar << ["**", VR_ENV::SETTINGS_FILE]
|
|
20
|
+
if show_backup
|
|
21
|
+
pattern = File.join(*backup_ar)
|
|
22
|
+
else
|
|
23
|
+
pattern = File.join(ENV["HOME"], "visualruby", "**", VR_ENV::SETTINGS_FILE)
|
|
24
|
+
end
|
|
25
|
+
Dir.glob(pattern, File::FNM_DOTMATCH).each do |fn|
|
|
26
|
+
next if not show_backup and fn =~ / Backup /
|
|
27
|
+
next if show_backup and not fn =~ / Backup /
|
|
28
|
+
t = File.stat(fn).mtime
|
|
29
|
+
row = add_row()
|
|
30
|
+
row[:pix] = PIX
|
|
31
|
+
row[:file_name] = File.dirname(fn)
|
|
32
|
+
row[:modified] = DateTime.parse(t.to_s)
|
|
33
|
+
end
|
|
34
|
+
model.set_sort_column_id(id(:modified), Gtk::SORT_DESCENDING)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
|
|
2
|
+
class RubygemsAPI
|
|
3
|
+
|
|
4
|
+
include GladeGUI
|
|
5
|
+
|
|
6
|
+
CREDENTIALS_FILE = ENV['HOME'] + "/.gem/credentials"
|
|
7
|
+
|
|
8
|
+
def initialize
|
|
9
|
+
load_glade(__FILE__)
|
|
10
|
+
uri = URI.parse("https://rubygems.org")
|
|
11
|
+
@http = Net::HTTP.new(uri.host, uri.port)
|
|
12
|
+
@http.use_ssl = true
|
|
13
|
+
@http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def get_key()
|
|
17
|
+
if File.file?(CREDENTIALS_FILE)
|
|
18
|
+
return Gem.configuration.rubygems_api_key
|
|
19
|
+
end
|
|
20
|
+
return set_up_key()
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def set_up_key()
|
|
24
|
+
@username = ""
|
|
25
|
+
@password = ""
|
|
26
|
+
key = nil
|
|
27
|
+
set_glade_all()
|
|
28
|
+
@builder["dialog1"].run do |response_id|
|
|
29
|
+
if response_id == 1 #Ok Button
|
|
30
|
+
get_glade_all() #gets @username, @password
|
|
31
|
+
path = "/api/v1/api_key.yaml"
|
|
32
|
+
@http.start() do |h|
|
|
33
|
+
req = Net::HTTP::Get.new(path)
|
|
34
|
+
req.basic_auth @username, @password
|
|
35
|
+
response = h.request(req)
|
|
36
|
+
obj = YAML.load(response.body)
|
|
37
|
+
key = obj[:rubygems_api_key]
|
|
38
|
+
if key
|
|
39
|
+
File.open(CREDENTIALS_FILE,"w") { |f| f.write(YAML.dump(obj)) }
|
|
40
|
+
else
|
|
41
|
+
VR::Dialog.message_box(obj.values[0])
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
@builder["dialog1"].hide
|
|
47
|
+
return key
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def get_obj_url(path)
|
|
52
|
+
return nil unless key = get_key()
|
|
53
|
+
@http.start() {|h|
|
|
54
|
+
req = Net::HTTP::Get.new(path)
|
|
55
|
+
response = h.request_get(path, 'Authorization' => key)
|
|
56
|
+
return obj = YAML.load(response.body)
|
|
57
|
+
}
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
# in Windows, the File.open { read } doesn't work for the gemfile.
|
|
62
|
+
# also, you must set a variable (bod) to close the io stream
|
|
63
|
+
|
|
64
|
+
def push_gem(fn)
|
|
65
|
+
return unless key = get_key()
|
|
66
|
+
path = "https://rubygems.org/api/v1/gems"
|
|
67
|
+
req = Net::HTTP::Post.new(path)
|
|
68
|
+
req.add_field('Authorization', key)
|
|
69
|
+
req.content_type = 'application/octet-stream'
|
|
70
|
+
bod = File.open(fn, "rb") {|io| io.read } # no good in win: File.open(fn).read
|
|
71
|
+
req.body = bod #must do it like this to close io ??!?!
|
|
72
|
+
req.content_length = req.body.size
|
|
73
|
+
@http.start() do |h|
|
|
74
|
+
response = h.request(req)
|
|
75
|
+
return response.message
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def yank_gem(name, ver)
|
|
80
|
+
return unless key = get_key()
|
|
81
|
+
path = "/api/v1/gems/yank?gem_name=#{URI.encode(name)}&version=#{URI.encode(ver)}"
|
|
82
|
+
req = Net::HTTP::Delete.new(path)
|
|
83
|
+
req.add_field('Authorization', key)
|
|
84
|
+
req.add_field 'Connection', 'keep-alive'
|
|
85
|
+
req.add_field 'Keep-Alive', '30'
|
|
86
|
+
req.content_type = 'application/x-www-form-urlencoded'
|
|
87
|
+
@http.start() do |h|
|
|
88
|
+
response = h.request(req)
|
|
89
|
+
return response.message
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
end
|
data/bin/main/Splash.rb
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
|
|
2
|
+
class Splash #(change name)
|
|
3
|
+
|
|
4
|
+
include GladeGUI
|
|
5
|
+
|
|
6
|
+
def show(parent)
|
|
7
|
+
load_glade(__FILE__) #loads file, glade/MyClass.glade into @builder
|
|
8
|
+
@builder["image1"].file = File.dirname(__FILE__) + "/../../img/splash.png"
|
|
9
|
+
show_window()
|
|
10
|
+
# wait_destroy()
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def wait_destroy
|
|
14
|
+
t = Thread.new {
|
|
15
|
+
sleep(1.5)
|
|
16
|
+
destroy_window()
|
|
17
|
+
t.join
|
|
18
|
+
}
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
end
|
data/bin/main/VR_ENV.rb
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
|
|
2
|
+
class VR_ENV
|
|
3
|
+
|
|
4
|
+
include GladeGUI
|
|
5
|
+
|
|
6
|
+
SETTINGS_FILE = ".vr_settings.yaml"
|
|
7
|
+
SETTINGS_FILE_VERSION = 1
|
|
8
|
+
|
|
9
|
+
attr_accessor :width, :height, :panel_pos, :rdoc_command_line, :settings_file_version
|
|
10
|
+
attr_accessor :run_command_line, :open_files, :open_folders, :current_file
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def initialize()
|
|
14
|
+
@settings_file_version = SETTINGS_FILE_VERSION
|
|
15
|
+
@width = 800
|
|
16
|
+
@height = 600
|
|
17
|
+
@panel_pos = 360
|
|
18
|
+
@run_command_line = "ruby main.rb"
|
|
19
|
+
@open_files = []
|
|
20
|
+
@open_folders = []
|
|
21
|
+
@current_file = ""
|
|
22
|
+
@rdoc_command_line = "rdoc -x README"
|
|
23
|
+
save_yaml()
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
#todo validate
|
|
27
|
+
def buttonSave_clicked
|
|
28
|
+
get_glade_variables
|
|
29
|
+
save_yaml()
|
|
30
|
+
destroy_window()
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# def buttonChooseFolder_clicked
|
|
34
|
+
# if folder = VR::Dialog.folder_box(@builder)
|
|
35
|
+
# if folder =~ /^#{Dir.pwd}\b/
|
|
36
|
+
# VR::Dialog.message_box("You must select a backup path outside the project's root folder.")
|
|
37
|
+
# else
|
|
38
|
+
# @builder['backup_path'].text = folder
|
|
39
|
+
# end
|
|
40
|
+
# end
|
|
41
|
+
# end
|
|
42
|
+
|
|
43
|
+
def self.load_yaml()
|
|
44
|
+
if File.file?(SETTINGS_FILE)
|
|
45
|
+
me = YAML::load(File.open(SETTINGS_FILE).read)
|
|
46
|
+
return VR_ENV.new() if me.settings_file_version.nil?
|
|
47
|
+
return VR_ENV.new() if me.settings_file_version < SETTINGS_FILE_VERSION
|
|
48
|
+
return me
|
|
49
|
+
else
|
|
50
|
+
VR_ENV.new()
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def save_yaml()
|
|
55
|
+
data = YAML.dump(self)
|
|
56
|
+
File.open(Dir.pwd + "/" + SETTINGS_FILE, "w") {|f| f.puts(data)}
|
|
57
|
+
return self
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
|
|
2
|
+
class VR_ENV_GLOBAL
|
|
3
|
+
|
|
4
|
+
GLOBAL_SETTINGS_FILE = File.join(ENV["HOME"], "visualruby", ".vr_global_settings")
|
|
5
|
+
SETTINGS_FILE_VERSION = 1
|
|
6
|
+
|
|
7
|
+
include GladeGUI
|
|
8
|
+
|
|
9
|
+
attr_accessor :browser, :tab_spaces, :glade_path
|
|
10
|
+
attr_accessor :font_name, :settings_file_version
|
|
11
|
+
|
|
12
|
+
def initialize
|
|
13
|
+
@settings_file_version = SETTINGS_FILE_VERSION
|
|
14
|
+
@browser = "firefox"
|
|
15
|
+
@tab_spaces = 2
|
|
16
|
+
@font_name = "Monospace 10"
|
|
17
|
+
@glade_path = "glade-gtk2"
|
|
18
|
+
save_yaml
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def before_show
|
|
22
|
+
@glade_box = VR::SimpleComboBoxEntry.new(@glade_path, "glade-gtk2", "glade", "glade-3", "C:\\Program Files (x86)\\Gtk+\\bin\\glade-3")
|
|
23
|
+
@builder["hboxGlade"].add(@glade_box)
|
|
24
|
+
@browser_box = VR::SimpleComboBoxEntry.new(@browser, "xdg-open", "chromium-browser", "firefox", "google-chrome", "chrome", "chromium", "iexplore", "start iexplore", "start firefox", "start google-chrome", "start chrome", "start chromium", "C:\\Program Files\\iexplorer\\iexplore.exe")
|
|
25
|
+
@builder["hboxBrowser"].add(@browser_box)
|
|
26
|
+
@builder["font_name"].show_size = true
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
#todo validate
|
|
30
|
+
def buttonSave_clicked
|
|
31
|
+
get_glade_variables
|
|
32
|
+
spaces = @builder['tab_spaces'].text.to_i
|
|
33
|
+
@tab_spaces = spaces if spaces > 0 and spaces < 9
|
|
34
|
+
@glade_path = @glade_box.active_text
|
|
35
|
+
@browser = @browser_box.active_text
|
|
36
|
+
save_yaml()
|
|
37
|
+
destroy_window()
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def save_yaml
|
|
41
|
+
data = YAML.dump(self)
|
|
42
|
+
File.open(GLOBAL_SETTINGS_FILE, "w") {|f| f.puts(data)}
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def self.load_yaml()
|
|
46
|
+
if File.file?(GLOBAL_SETTINGS_FILE)
|
|
47
|
+
me = YAML::load(File.open(GLOBAL_SETTINGS_FILE).read)
|
|
48
|
+
return VR_ENV_GLOBAL.new() if me.settings_file_version.nil?
|
|
49
|
+
return VR_ENV_GLOBAL.new() if me.settings_file_version < SETTINGS_FILE_VERSION
|
|
50
|
+
return me
|
|
51
|
+
else
|
|
52
|
+
VR_ENV_GLOBAL.new()
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def buttonTryGlade__clicked(*argv)
|
|
57
|
+
VR_Tools.popen(@glade_box.active_text)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def buttonTryBrowser__clicked(*argv)
|
|
61
|
+
VR_Tools.popen(@browser_box.active_text)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
end
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
|
|
2
|
+
class VR_File_Tree < VR::FileTreeView
|
|
3
|
+
|
|
4
|
+
include GladeGUI
|
|
5
|
+
|
|
6
|
+
def initialize(main, icon_path)
|
|
7
|
+
super(icon_path)
|
|
8
|
+
@main = main
|
|
9
|
+
@api = RubygemsAPI.new
|
|
10
|
+
load_glade(__FILE__)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self__row_activated(*args)
|
|
14
|
+
return unless rows = selected_rows
|
|
15
|
+
file_name = rows.first[:path]
|
|
16
|
+
if File.extname(file_name) == ".glade"
|
|
17
|
+
VR_Tools.popen("#{$VR_ENV_GLOBAL.glade_path} #{file_name} ")
|
|
18
|
+
else
|
|
19
|
+
@main.tabs.load_tab(file_name) if not File.directory?(file_name)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def menuPushGem_clicked
|
|
24
|
+
file_name = get_selected_path()
|
|
25
|
+
@main.shell.buffer.text = @api.push_gem(file_name)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def popInstallGem_clicked()
|
|
29
|
+
file_name = get_selected_path()
|
|
30
|
+
# begin
|
|
31
|
+
inst = Gem::Installer.new(file_name, :wrappers => true, :ignore_dependencies => true)
|
|
32
|
+
inst.install().to_s
|
|
33
|
+
txt = "Installed Gem: " + file_name
|
|
34
|
+
txt += "\nNo check was made for dependencies"
|
|
35
|
+
# rescue
|
|
36
|
+
# command = "gem install #{file_name} --local 2>&1"
|
|
37
|
+
# txt = VR_Tools.sudo_command(command)
|
|
38
|
+
# end
|
|
39
|
+
@main.shell.buffer.text = txt
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def menuRDoc_clicked
|
|
43
|
+
return unless @main.tabs.try_to_save_all(false)
|
|
44
|
+
fn = get_selected_path()
|
|
45
|
+
old_dir = Dir.pwd
|
|
46
|
+
FileUtils.cd(fn)
|
|
47
|
+
@main.shell.buffer.text = $VR_ENV.rdoc_command_line + fn + "\n"
|
|
48
|
+
@main.shell.buffer.text += `#{$VR_ENV.rdoc_command_line} 2>&1`
|
|
49
|
+
VR_Tools.replace_html_in_docs()
|
|
50
|
+
FileUtils.cd(old_dir)
|
|
51
|
+
VR_Tools.popen("#{$VR_ENV_GLOBAL.browser} #{fn}/doc/index.html")
|
|
52
|
+
@main.file_tree.refresh()
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def popBuildGem_clicked
|
|
56
|
+
file_name = get_selected_path()
|
|
57
|
+
@main.tabs.try_to_save_all(false)
|
|
58
|
+
gem_builder = "Invalid .gemspec file: " + file_name
|
|
59
|
+
begin #try ruby 2.0.0 way first:
|
|
60
|
+
spec = Gem::Specification.load(file_name)
|
|
61
|
+
gem_builder = "Built Gem:\n" + Gem::Package.build(spec)
|
|
62
|
+
rescue #try old way
|
|
63
|
+
spec = Gem::Specification.load(file_name)
|
|
64
|
+
b = Gem::Builder.new(spec)
|
|
65
|
+
b.build()
|
|
66
|
+
gem_builder = b.success()
|
|
67
|
+
end
|
|
68
|
+
@main.shell.buffer.text = gem_builder
|
|
69
|
+
refresh()
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def popGlade_clicked
|
|
73
|
+
path = get_selected_path()
|
|
74
|
+
source_code = File.open(path, "r").read
|
|
75
|
+
class_name = VR_Document.get_class_title(source_code).gsub(".rb", "")
|
|
76
|
+
# glade_file = File.dirname(path) + "/glade/" + File.basename(path, ".rb") + ".glade"
|
|
77
|
+
glade_file = File.dirname(path) + "/glade/" + class_name + ".glade"
|
|
78
|
+
if not File.file?(glade_file)
|
|
79
|
+
path = File.dirname(glade_file)
|
|
80
|
+
FileUtils.makedirs(path) if not File.directory?(path)
|
|
81
|
+
FileUtils.cp File.expand_path(File.dirname(__FILE__)+"/../../skeleton/document/New.glade"), glade_file
|
|
82
|
+
VR_Tools.popen("#{$VR_ENV_GLOBAL.glade_path} #{glade_file}")
|
|
83
|
+
sleep(2) #must do it this way because different thread
|
|
84
|
+
File.delete(glade_file)
|
|
85
|
+
else
|
|
86
|
+
VR_Tools.popen("#{$VR_ENV_GLOBAL.glade_path} #{glade_file}")
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def self__button_release_event(w, event) # right mouse button
|
|
91
|
+
return unless path = get_selected_path() and event.button == 3
|
|
92
|
+
if File.file?(path) and (File.extname(path) == ".rb" or File.extname(path) == "")
|
|
93
|
+
@builder['popFile'].popup(nil, nil, event.button, event.time)
|
|
94
|
+
elsif File.extname(path) == ".gemspec"
|
|
95
|
+
@builder['popGemspec'].popup(nil, nil, event.button, event.time)
|
|
96
|
+
elsif File.extname(path) == ".gem"
|
|
97
|
+
@builder['popGemFile'].popup(nil, nil, event.button, event.time)
|
|
98
|
+
elsif File.directory?(path)
|
|
99
|
+
@builder['popFolder'].popup(nil, nil, event.button, event.time)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def self__key_press_event(view, evt)
|
|
104
|
+
return unless evt.keyval == 65535 #delete
|
|
105
|
+
return unless file_name = get_selected_path()
|
|
106
|
+
return unless VR::Dialog.ok_box("Delete: " + File.basename(file_name) + "?")
|
|
107
|
+
if File.file?(file_name)
|
|
108
|
+
@main.tabs.destroy_file_tab(file_name)
|
|
109
|
+
File.delete(file_name)
|
|
110
|
+
elsif File.directory?(file_name) and file_name != Dir.pwd #root!
|
|
111
|
+
FileUtils.remove_dir(file_name, true)
|
|
112
|
+
end
|
|
113
|
+
delete_selected()
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
|
|
2
|
+
class VR_Local_Gem_Tree < GemTree
|
|
3
|
+
|
|
4
|
+
include GladeGUI
|
|
5
|
+
|
|
6
|
+
def initialize(main)
|
|
7
|
+
super()
|
|
8
|
+
@main = main
|
|
9
|
+
# set_title(PIX => "Gems on this Computer")
|
|
10
|
+
load_glade(__FILE__)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def refresh()
|
|
14
|
+
self.model.clear
|
|
15
|
+
result = `gem list`
|
|
16
|
+
result.each_line do |line|
|
|
17
|
+
gem, versions = get_name_ver(line)
|
|
18
|
+
versions.split(",").each do |v|
|
|
19
|
+
add_row( :pix => RUBY_ICON, :gem => "#{gem} (#{v})" )
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
#todo
|
|
26
|
+
def popViewSpec_clicked;
|
|
27
|
+
gem, ver = selected_gem()
|
|
28
|
+
spec = `gem specification #{gem} -v #{ver}`
|
|
29
|
+
@main.tabs.load_tab()
|
|
30
|
+
@main.tabs.set_contents(spec)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def popOpenRubygemsPage_clicked
|
|
34
|
+
gem, ver = selected_gem()
|
|
35
|
+
VR_Tools.popen("#{$VR_ENV_GLOBAL.browser} http://rubygems.org/gems/#{gem}")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def popOpenHomepage_clicked
|
|
39
|
+
gem, ver = selected_gem()
|
|
40
|
+
spec = `gem specification #{gem} -v #{ver}`
|
|
41
|
+
match = /^homepage:\s+(.*)$/.match(spec)
|
|
42
|
+
VR_Tools.popen("#{$VR_ENV_GLOBAL.browser} #{match[1]}")
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def popUninstall_clicked
|
|
46
|
+
gem, ver = selected_gem()
|
|
47
|
+
# begin
|
|
48
|
+
Gem::Uninstaller.new(gem, {:version => ver, :executables => true }).uninstall()
|
|
49
|
+
txt = "Uninstalled Gem: #{gem} #{ver}"
|
|
50
|
+
# rescue
|
|
51
|
+
# command = "gem uninstall #{gem} -x -v '#{ver}' 2>&1"
|
|
52
|
+
# txt = VR_Tools.sudo_command(command)
|
|
53
|
+
# end
|
|
54
|
+
@main.shell.buffer.text = txt
|
|
55
|
+
refresh()
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
# def popUninstall_clicked
|
|
60
|
+
# gem, ver = selected_gem()
|
|
61
|
+
# #command = "gem uninstall " + gem_name.gsub("("," -x -v ").gsub(")","")
|
|
62
|
+
# command = "gem uninstall #{gem} -x -v '#{ver}' 2>&1"
|
|
63
|
+
# @main.shell.buffer.text = VR_Tools.sudo_command(command)
|
|
64
|
+
# refresh()
|
|
65
|
+
# end
|
|
66
|
+
|
|
67
|
+
# def get_name_ver(line)
|
|
68
|
+
# match = /^(.*)\s+\((.*)\)/.match(line)
|
|
69
|
+
# return match[1], match[2]
|
|
70
|
+
# end
|
|
71
|
+
|
|
72
|
+
def selected_gem
|
|
73
|
+
row = self.selection.selected[1].split(" (")
|
|
74
|
+
ver = row[1].gsub(")","")
|
|
75
|
+
return row[0], ver
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
|