watobo 0.9.8.677

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.
Files changed (260) hide show
  1. data/bin/watobo_gui.rb +39 -0
  2. data/certificates/cert.pem +19 -0
  3. data/certificates/privkey.pem +15 -0
  4. data/certificates/watobo_dh.key +5 -0
  5. data/config/datastore.yml +5 -0
  6. data/config/forwarding_proxy.yml +12 -0
  7. data/config/general.yml +4 -0
  8. data/config/gui.yml +23 -0
  9. data/config/interceptor.yml +16 -0
  10. data/config/scan_policy.yml +13 -0
  11. data/config/scanner.yml +34 -0
  12. data/icons/Add.ico +0 -0
  13. data/icons/Add_24x24.ico +0 -0
  14. data/icons/Bandwidth.ico +0 -0
  15. data/icons/Bandwidth_24x24.ico +0 -0
  16. data/icons/Mr. Bomb.ico +0 -0
  17. data/icons/Mr. Bomb_16x16.ico +0 -0
  18. data/icons/Mr. Bomb_24x24.ico +0 -0
  19. data/icons/Orange Ball.ico +0 -0
  20. data/icons/Orange Ball_16x16.ico +0 -0
  21. data/icons/Orange Ball_24x24.ico +0 -0
  22. data/icons/Pause.ico +0 -0
  23. data/icons/Play.ico +0 -0
  24. data/icons/Play_24x24.ico +0 -0
  25. data/icons/Red Ball.ico +0 -0
  26. data/icons/Red Ball_16x16.ico +0 -0
  27. data/icons/Red Ball_24x24.ico +0 -0
  28. data/icons/Run.ico +0 -0
  29. data/icons/Stop.ico +0 -0
  30. data/icons/Stop_24x24.ico +0 -0
  31. data/icons/Terminal.ico +0 -0
  32. data/icons/Transfer.ico +0 -0
  33. data/icons/Transfer_16x16.ico +0 -0
  34. data/icons/User.ico +0 -0
  35. data/icons/User_16x16.ico +0 -0
  36. data/icons/User_24x24.ico +0 -0
  37. data/icons/Web Browser.ico +0 -0
  38. data/icons/Web Browser_16x16.ico +0 -0
  39. data/icons/Write Document.ico +0 -0
  40. data/icons/Yellow Ball.ico +0 -0
  41. data/icons/Yellow Ball_16x16.ico +0 -0
  42. data/icons/Yellow Ball_24x24.ico +0 -0
  43. data/icons/advanced.ico +0 -0
  44. data/icons/advanced_16x16.ico +0 -0
  45. data/icons/advanced_24x24.ico +0 -0
  46. data/icons/applications.ico +0 -0
  47. data/icons/applications_16x16.ico +0 -0
  48. data/icons/applications_24x24.ico +0 -0
  49. data/icons/browser_16x16.ico +0 -0
  50. data/icons/browser_24x24.ico +0 -0
  51. data/icons/burn.ico +0 -0
  52. data/icons/burn_16x16.ico +0 -0
  53. data/icons/burn_24x24.ico +0 -0
  54. data/icons/calculator.ico +0 -0
  55. data/icons/calculator_24x24.ico +0 -0
  56. data/icons/cb_checked.ico +0 -0
  57. data/icons/cb_checked_orange.ico +0 -0
  58. data/icons/cb_unchecked.ico +0 -0
  59. data/icons/coin_24x24.ico +0 -0
  60. data/icons/conversation.ico +0 -0
  61. data/icons/conversation_24x24.ico +0 -0
  62. data/icons/engine.ico +0 -0
  63. data/icons/filter.ico +0 -0
  64. data/icons/folder.ico +0 -0
  65. data/icons/folder_16x16.ico +0 -0
  66. data/icons/fuzzer_16x16.ico +0 -0
  67. data/icons/fuzzer_24x24.ico +0 -0
  68. data/icons/go-down_16x16.png +0 -0
  69. data/icons/go-up_16x16.png +0 -0
  70. data/icons/help.ico +0 -0
  71. data/icons/help_16x16.ico +0 -0
  72. data/icons/help_24x24.ico +0 -0
  73. data/icons/iChat.ico +0 -0
  74. data/icons/iChat_16x16.ico +0 -0
  75. data/icons/iChat_24x24.ico +0 -0
  76. data/icons/icons.txt +3 -0
  77. data/icons/info.ico +0 -0
  78. data/icons/info_16x16.ico +0 -0
  79. data/icons/info_24x24.ico +0 -0
  80. data/icons/interceptor_24x24.ico +0 -0
  81. data/icons/lock.ico +0 -0
  82. data/icons/lock_12x12.ico +0 -0
  83. data/icons/lock_16x16.ico +0 -0
  84. data/icons/monitor.ico +0 -0
  85. data/icons/plugin.ico +0 -0
  86. data/icons/plugin_24x24.ico +0 -0
  87. data/icons/scan_16x16.png +0 -0
  88. data/icons/send.ico +0 -0
  89. data/icons/server.ico +0 -0
  90. data/icons/server_16x16.ico +0 -0
  91. data/icons/siberas_logo_x24.gif +0 -0
  92. data/icons/tag_blue_32x32.ico +0 -0
  93. data/icons/watobo-48x48.png +0 -0
  94. data/icons/watobo-logo.png +0 -0
  95. data/icons/watobo.ico +0 -0
  96. data/lib/watobo/adapters/data_store.rb +38 -0
  97. data/lib/watobo/adapters/file/file_store.rb +211 -0
  98. data/lib/watobo/adapters/session_store.rb +27 -0
  99. data/lib/watobo/adapters.rb +26 -0
  100. data/lib/watobo/config.rb +143 -0
  101. data/lib/watobo/constants.rb +92 -0
  102. data/lib/watobo/core/active_check.rb +404 -0
  103. data/lib/watobo/core/cookie.rb +69 -0
  104. data/lib/watobo/core/fuzz_gen.rb +160 -0
  105. data/lib/watobo/core/http_socket.rb +142 -0
  106. data/lib/watobo/core/interceptor.rb +729 -0
  107. data/lib/watobo/core/passive_check.rb +141 -0
  108. data/lib/watobo/core/project.rb +1058 -0
  109. data/lib/watobo/core/scanner.rb +396 -0
  110. data/lib/watobo/core/session.rb +1320 -0
  111. data/lib/watobo/core/simple_ca.rb +393 -0
  112. data/lib/watobo/core.rb +34 -0
  113. data/lib/watobo/defaults.rb +40 -0
  114. data/lib/watobo/external/diff/lcs/array.rb +42 -0
  115. data/lib/watobo/external/diff/lcs/block.rb +72 -0
  116. data/lib/watobo/external/diff/lcs/callbacks.rb +343 -0
  117. data/lib/watobo/external/diff/lcs/change.rb +190 -0
  118. data/lib/watobo/external/diff/lcs/hunk.rb +279 -0
  119. data/lib/watobo/external/diff/lcs/ldiff.rb +247 -0
  120. data/lib/watobo/external/diff/lcs/string.rb +40 -0
  121. data/lib/watobo/external/diff/lcs.rb +1124 -0
  122. data/lib/watobo/external/ntlm/ntlm.rb +797 -0
  123. data/lib/watobo/externals.rb +28 -0
  124. data/lib/watobo/framework/create_project.rb +55 -0
  125. data/lib/watobo/framework/init.rb +149 -0
  126. data/lib/watobo/framework/init_modules.rb +116 -0
  127. data/lib/watobo/framework/license_text.rb +50 -0
  128. data/lib/watobo/framework.rb +26 -0
  129. data/lib/watobo/gui/about_watobo.rb +68 -0
  130. data/lib/watobo/gui/browser_preview.rb +460 -0
  131. data/lib/watobo/gui/certificate_dialog.rb +132 -0
  132. data/lib/watobo/gui/chat_diff.rb +415 -0
  133. data/lib/watobo/gui/chatviewer_frame.rb +427 -0
  134. data/lib/watobo/gui/checkboxtree.rb +221 -0
  135. data/lib/watobo/gui/checks_policy_frame.rb +123 -0
  136. data/lib/watobo/gui/client_cert_dialog.rb +227 -0
  137. data/lib/watobo/gui/confirm_scan_dialog.rb +67 -0
  138. data/lib/watobo/gui/conversation_table.rb +386 -0
  139. data/lib/watobo/gui/conversation_table_ctrl.rb +175 -0
  140. data/lib/watobo/gui/csrf_token_dialog.rb +446 -0
  141. data/lib/watobo/gui/dashboard.rb +341 -0
  142. data/lib/watobo/gui/define_scope_frame.rb +380 -0
  143. data/lib/watobo/gui/edit_comment.rb +70 -0
  144. data/lib/watobo/gui/edit_scope_dialog.rb +69 -0
  145. data/lib/watobo/gui/finding_info.rb +212 -0
  146. data/lib/watobo/gui/findings_tree.rb +459 -0
  147. data/lib/watobo/gui/full_scan_dialog.rb +269 -0
  148. data/lib/watobo/gui/fuzzer_gui.rb +1522 -0
  149. data/lib/watobo/gui/hex_viewer.rb +106 -0
  150. data/lib/watobo/gui/interceptor_gui.rb +994 -0
  151. data/lib/watobo/gui/interceptor_settings_dialog.rb +201 -0
  152. data/lib/watobo/gui/log_viewer.rb +97 -0
  153. data/lib/watobo/gui/login_wizzard.rb +301 -0
  154. data/lib/watobo/gui/main_window.rb +1815 -0
  155. data/lib/watobo/gui/manual_request_editor.rb +1105 -0
  156. data/lib/watobo/gui/master_pw_dialog.rb +142 -0
  157. data/lib/watobo/gui/password_policy_dialog.rb +98 -0
  158. data/lib/watobo/gui/plugin/base.rb +82 -0
  159. data/lib/watobo/gui/plugin_board.rb +95 -0
  160. data/lib/watobo/gui/preferences_dialog.rb +116 -0
  161. data/lib/watobo/gui/progress_window.rb +102 -0
  162. data/lib/watobo/gui/project_wizzard.rb +369 -0
  163. data/lib/watobo/gui/proxy_dialog.rb +550 -0
  164. data/lib/watobo/gui/quick_scan_dialog.rb +242 -0
  165. data/lib/watobo/gui/request_editor.rb +480 -0
  166. data/lib/watobo/gui/save_chat_dialog.rb +158 -0
  167. data/lib/watobo/gui/scanner_settings_dialog.rb +360 -0
  168. data/lib/watobo/gui/select_chat_dialog.rb +169 -0
  169. data/lib/watobo/gui/session_management_dialog.rb +688 -0
  170. data/lib/watobo/gui/sites_tree.rb +347 -0
  171. data/lib/watobo/gui/status_bar.rb +88 -0
  172. data/lib/watobo/gui/table_editor.rb +445 -0
  173. data/lib/watobo/gui/tagless_viewer.rb +62 -0
  174. data/lib/watobo/gui/templates/plugin.rb +80 -0
  175. data/lib/watobo/gui/templates/plugin2.rb +103 -0
  176. data/lib/watobo/gui/text_viewer.rb +247 -0
  177. data/lib/watobo/gui/transcoder_window.rb +215 -0
  178. data/lib/watobo/gui/utils/gui_utils.rb +129 -0
  179. data/lib/watobo/gui/utils/init_icons.rb +106 -0
  180. data/lib/watobo/gui/utils/load_icons.rb +54 -0
  181. data/lib/watobo/gui/utils/load_plugins.rb +94 -0
  182. data/lib/watobo/gui/utils/master_password.rb +90 -0
  183. data/lib/watobo/gui/utils/save_default_settings.rb +99 -0
  184. data/lib/watobo/gui/utils/save_project_settings.rb +21 -0
  185. data/lib/watobo/gui/utils/save_proxy_settings.rb +45 -0
  186. data/lib/watobo/gui/utils/save_session_settings.rb +21 -0
  187. data/lib/watobo/gui/utils/session_history.rb +134 -0
  188. data/lib/watobo/gui/workspace_dialog.rb +89 -0
  189. data/lib/watobo/gui/www_auth_dialog.rb +348 -0
  190. data/lib/watobo/gui/xml_viewer_frame.rb +114 -0
  191. data/lib/watobo/gui.rb +139 -0
  192. data/lib/watobo/mixins/httpparser.rb +664 -0
  193. data/lib/watobo/mixins/request_parser.rb +210 -0
  194. data/lib/watobo/mixins/shapers.rb +345 -0
  195. data/lib/watobo/mixins/transcoders.rb +88 -0
  196. data/lib/watobo/mixins.rb +32 -0
  197. data/lib/watobo/utils/check_regex.rb +36 -0
  198. data/lib/watobo/utils/copy_object.rb +29 -0
  199. data/lib/watobo/utils/crypto.rb +74 -0
  200. data/lib/watobo/utils/expand_range.rb +45 -0
  201. data/lib/watobo/utils/file_management.rb +73 -0
  202. data/lib/watobo/utils/load_chat.rb +219 -0
  203. data/lib/watobo/utils/load_icon.rb +47 -0
  204. data/lib/watobo/utils/print_debug.rb +34 -0
  205. data/lib/watobo/utils/response_hash.rb +143 -0
  206. data/lib/watobo/utils/secure_eval.rb +57 -0
  207. data/lib/watobo/utils/text2request.rb +96 -0
  208. data/lib/watobo/utils.rb +32 -0
  209. data/lib/watobo.rb +76 -0
  210. data/modules/active/Apache/mod_status.rb +123 -0
  211. data/modules/active/Flash/crossdomain.rb +102 -0
  212. data/modules/active/directories/dirwalker.rb +89 -0
  213. data/modules/active/discovery/fileextensions.rb +151 -0
  214. data/modules/active/discovery/http_methods.rb +135 -0
  215. data/modules/active/domino/domino_db.lst +164 -0
  216. data/modules/active/domino/domino_db.rb +128 -0
  217. data/modules/active/fileinclusion/lfi_simple.rb +134 -0
  218. data/modules/active/jboss/jboss_basic.rb +119 -0
  219. data/modules/active/sap/business_objects.rb +73 -0
  220. data/modules/active/sap/its_commands.rb +101 -0
  221. data/modules/active/sap/its_service_parameter.rb +105 -0
  222. data/modules/active/sap/its_services.rb +103 -0
  223. data/modules/active/sap/its_xss.rb +98 -0
  224. data/modules/active/sqlinjection/sql_boolean.rb +262 -0
  225. data/modules/active/sqlinjection/sqli_simple.rb +205 -0
  226. data/modules/active/xss/xss_simple.rb +179 -0
  227. data/modules/passive/cookie_options.rb +97 -0
  228. data/modules/passive/cookie_xss.rb +85 -0
  229. data/modules/passive/detect_code.rb +89 -0
  230. data/modules/passive/detect_fileupload.rb +80 -0
  231. data/modules/passive/detect_infrastructure.rb +98 -0
  232. data/modules/passive/detect_one_time_tokens.rb +86 -0
  233. data/modules/passive/dirindexing.rb +81 -0
  234. data/modules/passive/disclosure_emails.rb +82 -0
  235. data/modules/passive/disclosure_ipaddr.rb +87 -0
  236. data/modules/passive/filename_as_parameter.rb +85 -0
  237. data/modules/passive/form_spotter.rb +75 -0
  238. data/modules/passive/hotspots.rb +86 -0
  239. data/modules/passive/in_script_parameter.rb +92 -0
  240. data/modules/passive/multiple_server_headers.rb +98 -0
  241. data/modules/passive/possible_login.rb +134 -0
  242. data/modules/passive/redirect_url.rb +88 -0
  243. data/modules/passive/redirectionz.rb +96 -0
  244. data/modules/passive/xss_dom.rb +91 -0
  245. data/plugins/catalog/catalog.ico +0 -0
  246. data/plugins/catalog/catalog.rb +726 -0
  247. data/plugins/catalog/db_tests +6483 -0
  248. data/plugins/catalog/db_variables +29 -0
  249. data/plugins/filefinder/dbs/hbci.db +12 -0
  250. data/plugins/filefinder/filefinder.rb +602 -0
  251. data/plugins/sslchecker/cli/sslchecker_cli.rb +21 -0
  252. data/plugins/sslchecker/gui/cipher_table.rb +260 -0
  253. data/plugins/sslchecker/gui/gui.rb +245 -0
  254. data/plugins/sslchecker/gui/sslchecker.rb +26 -0
  255. data/plugins/sslchecker/icons/green_16x16.ico +0 -0
  256. data/plugins/sslchecker/icons/grey_16x16.ico +0 -0
  257. data/plugins/sslchecker/icons/red_16x16.ico +0 -0
  258. data/plugins/sslchecker/icons/sslchecker.ico +0 -0
  259. data/plugins/sslchecker/lib/check.rb +117 -0
  260. metadata +317 -0
@@ -0,0 +1,369 @@
1
+ # .
2
+ # project_wizzard.rb
3
+ #
4
+ # Copyright 2012 by siberas, http://www.siberas.de
5
+ #
6
+ # This file is part of WATOBO (Web Application Tool Box)
7
+ # http://watobo.sourceforge.com
8
+ #
9
+ # WATOBO is free software; you can redistribute it and/or modify
10
+ # it under the terms of the GNU General Public License as published by
11
+ # the Free Software Foundation version 2 of the License.
12
+ #
13
+ # WATOBO is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with WATOBO; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ # .
22
+ module Watobo
23
+ module Gui
24
+
25
+
26
+ class NewProjectWizzard < FXDialogBox
27
+
28
+ attr :selected_session_path
29
+ attr :selected_project_path
30
+ attr :new_session_name
31
+ attr :new_project_name
32
+ attr :project_name
33
+ attr :session_name
34
+
35
+
36
+
37
+ def workspace_dir
38
+ return @workspace_dt.value
39
+ end
40
+
41
+ def open_select_workspace_dt_dialog(sender, sel, ptr)
42
+ workspace_dt = FXFileDialog.getOpenDirectory(self, "Select Workspace Directory", @workspace_dt.value)
43
+ if workspace_dt != "" then
44
+ if File.exists?(workspace_dt) then
45
+ @workspace_dt.value = workspace_dt
46
+ @workspace_text.handle(self, FXSEL(SEL_UPDATE, 0), nil)
47
+ updateProjectList(@workspace_dt.value)
48
+ @newProjectButton.enable
49
+ end
50
+
51
+ end
52
+ end
53
+
54
+ def updateProjectList(workspace_dt)
55
+ @projectList.clearItems
56
+
57
+ if File.exists?(workspace_dt) then
58
+ Dir.foreach(workspace_dt) do |file|
59
+ if not file =~ /^\.{1,2}$/ and File.ftype(File.join(workspace_dt,file)) == 'directory' then
60
+ @projectList.appendItem(file)
61
+ end
62
+ end
63
+ end
64
+
65
+ # puts "found #{@projectList.numItems} projects"
66
+ end
67
+
68
+ def updateSessionList(project_dir)
69
+ @sessionList.clearItems
70
+
71
+ Dir.foreach(project_dir) do |file|
72
+ if not file =~ /^\.{1,2}$/ and File.ftype(File.join(project_dir,file)) == 'directory' then
73
+ @sessionList.appendItem(file)
74
+ end
75
+ end
76
+ # puts "found #{@sessionList.numItems} sessions"
77
+ end
78
+
79
+
80
+ def openProject(sender, sel, index)
81
+ @selected_project_path = File.join(@workspace_dt.value, @projectList.getItemText(index))
82
+ @new_project_name.value = @projectList.getItemText(index)
83
+ @project_name = @projectList.getItemText(index)
84
+ @projectCaption.text = "Project: #{@new_project_name.value}"
85
+ # puts @selected_project_path
86
+ updateSessionList(@selected_project_path)
87
+ @projectTextField.handle(self, FXSEL(SEL_UPDATE, 0), nil)
88
+ @nextButton.enable
89
+ @finishButton.disable
90
+ @switcher.current = @switcher.current+1
91
+ @backButton.enable
92
+ @nextButton.disable if @switcher.current == @switcher.numChildren-1
93
+ setButtons(@switcher.current)
94
+ end
95
+
96
+ def onProjectSelect(sender, sel, index)
97
+ @selected_project_path = File.join(@workspace_dt.value, @projectList.getItemText(index))
98
+ @new_project_name.value = @projectList.getItemText(index)
99
+ @project_name = @projectList.getItemText(index)
100
+ @projectCaption.text = "Project: #{@new_project_name.value}"
101
+ # puts @selected_project_path
102
+ updateSessionList(@selected_project_path)
103
+ @projectTextField.handle(self, FXSEL(SEL_UPDATE, 0), nil)
104
+ @nextButton.enable
105
+ @finishButton.disable
106
+
107
+ end
108
+
109
+ def onSessionSelect(sender, sel, index)
110
+ @selected_session_path = File.join(@selected_project_path, @sessionList.getItemText(index))
111
+ @new_session_name.value = @sessionList.getItemText(index)
112
+ @session_name = @new_session_name.value
113
+ # @session_name = @sessionList.getItemText(index)
114
+ @sessionTextField.handle(self, FXSEL(SEL_UPDATE, 0), nil)
115
+ # puts @selected_session_path
116
+ @finishButton.enable
117
+ end
118
+
119
+ def openSession(sender, sel, index)
120
+ @selected_session_path = File.join(@selected_project_path, @sessionList.getItemText(index))
121
+ @new_session_name.value = @sessionList.getItemText(index)
122
+ @session_name = @new_session_name.value
123
+ # puts @selected_session_path
124
+ self.handle(self, FXSEL(SEL_COMMAND, ID_ACCEPT), nil)
125
+ end
126
+
127
+ def createSession(sender, sel, event)
128
+ begin
129
+ if @new_session_name.value != '' then
130
+ @session_name = @new_session_name.value
131
+ if File.exists?(@selected_project_path) then
132
+ new_folder = File.join(@selected_project_path, @new_session_name.value)
133
+ if File.exists?(new_folder) then
134
+ puts "! folder already exists"
135
+ else
136
+ Dir.mkdir(new_folder)
137
+ updateSessionList(@selected_project_path)
138
+ new_session_index = @sessionList.findItem(@new_session_name.value)
139
+ @session_name = @new_session_name.value
140
+
141
+ new_session_item = @sessionList.selectItem(new_session_index)
142
+ @sessionList.makeItemVisible(new_session_index)
143
+ @selected_session_path = File.join(@selected_project_path, @session_name)
144
+
145
+ # @new_session_name.value = ''
146
+ @finishButton.enable
147
+ @finishButton.setFocus()
148
+ @finishButton.setDefault()
149
+ end
150
+ end
151
+ end
152
+ rescue => bang
153
+ puts "!!!ERROR: could not create session"
154
+ puts bang
155
+ @finishButton.disable
156
+ end
157
+ end
158
+
159
+ def createProject(sender, sel, event)
160
+ begin
161
+ if @new_project_name.value != '' then
162
+ @project_name = @new_project_name.value
163
+ if File.exists?(@workspace_dt.value) then
164
+ new_folder = File.join(@workspace_dt.value, @new_project_name.value)
165
+ if File.exists?(new_folder) then
166
+ puts "! folder already exists"
167
+ else
168
+ Dir.mkdir(new_folder)
169
+ @projectCaption.text = "Project: #{@new_project_name.value}"
170
+
171
+ @selected_project_path = new_folder
172
+ updateProjectList(@workspace_dt.value)
173
+ new_project_index = @projectList.findItem(@new_project_name.value)
174
+ new_project_item = @projectList.selectItem(new_project_index, true)
175
+ @projectList.makeItemVisible(new_project_index)
176
+
177
+ updateSessionList(@selected_project_path)
178
+ @new_project_name.value = ''
179
+ @nextButton.enable
180
+ @nextButton.setFocus()
181
+ @nextButton.setDefault()
182
+ @finishButton.disable
183
+ end
184
+ else
185
+ FXMessageBox.information(FXApp.instance, MBOX_OK, "No Workspace Selected!", "You need to select a workspace directory before you can start")
186
+ end
187
+ end
188
+ rescue => bang
189
+ puts "!!!ERROR: could not create project"
190
+ puts bang
191
+ end
192
+ end
193
+
194
+
195
+ def setButtons(index)
196
+ case index
197
+ when 0
198
+ # select project screen
199
+ if @projectList.currentItem >= 0 and @projectList.itemSelected?(@projectList.currentItem) then
200
+ @nextButton.enable
201
+ end
202
+ when 1
203
+ # select session screen
204
+ @sessionTextField.setFocus()
205
+ @sessionTextField.setDefault()
206
+ if @sessionList.currentItem >= 0 and @sessionList.itemSelected?(@sessionList.currentItem) then
207
+ # puts "session selected"
208
+ # puts @sessionList.currentItem
209
+ @finishButton.enable
210
+ end
211
+ end
212
+ end
213
+
214
+
215
+ def initialize(parent, workspace_path=nil)
216
+ # Invoke base class initialize function first
217
+ # super(parent, "New Project", DECOR_TITLE|DECOR_BORDER)
218
+ super(parent, "New Project", DECOR_ALL)
219
+
220
+ @selected_project_path = ''
221
+ @new_project_name = FXDataTarget.new('')
222
+ @new_session_name = FXDataTarget.new('')
223
+ @workspace_dt = FXDataTarget.new('')
224
+ @target_url = FXDataTarget.new('')
225
+ @proxy = FXDataTarget.new('')
226
+
227
+ @project_name = ''
228
+ @session_name = ''
229
+
230
+ @session_name = ''
231
+
232
+ if workspace_path then
233
+ if File.exists?(workspace_path) then
234
+ @workspace_dt.value = workspace_path
235
+
236
+ else
237
+ # FXMessageBox.information(FXApp.instance, MBOX_OK, "No Workspace Selected!", "You need to select a workspace directory before you can start")
238
+ end
239
+ end
240
+
241
+ base_frame = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
242
+ @switcher = FXSwitcher.new(base_frame,LAYOUT_FILL_X|LAYOUT_FILL_Y)
243
+ first_frame = FXVerticalFrame.new(@switcher, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
244
+
245
+ workspace_path_form = FXHorizontalFrame.new(first_frame,
246
+ :opts => LAYOUT_FILL_X|LAYOUT_SIDE_TOP)
247
+ FXLabel.new(workspace_path_form, "Workspace Directory:" )
248
+ @workspace_text = FXTextField.new(workspace_path_form, 25,
249
+ :target => @workspace_dt, :selector => FXDataTarget::ID_VALUE,
250
+ :opts => TEXTFIELD_NORMAL|LAYOUT_FILL_X|LAYOUT_FILL_COLUMN)
251
+ @workspace_text.handle(self, FXSEL(SEL_UPDATE, 0), nil)
252
+ browse_button=FXButton.new(workspace_path_form, "Change")
253
+ browse_button.connect(SEL_COMMAND, method(:open_select_workspace_dt_dialog) )
254
+
255
+
256
+ #
257
+ # PROJECT SELECTION
258
+ #
259
+ #projectSelectionFrame = FXHorizontalFrame.new(first_frame, :opts => LAYOUT_FILL_X|LAYOUT_SIDE_TOP)
260
+
261
+ projectSelectionFrame = FXGroupBox.new(first_frame, "Select Project", LAYOUT_SIDE_TOP|FRAME_GROOVE|LAYOUT_FILL_X, 0, 0, 0, 0)
262
+
263
+ projectSubSelection = FXVerticalFrame.new(projectSelectionFrame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_GROOVE)
264
+ newProjectFrame = FXHorizontalFrame.new(projectSubSelection, :opts => LAYOUT_FILL_X|LAYOUT_SIDE_TOP)
265
+ FXLabel.new(newProjectFrame, "Project Name:" )
266
+ @projectTextField = FXTextField.new(newProjectFrame, 25,
267
+ :target => @new_project_name, :selector => FXDataTarget::ID_VALUE,
268
+ :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_LEFT)
269
+ @newProjectButton = FXButton.new(newProjectFrame, "New" , nil, nil, :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
270
+
271
+ @newProjectButton.disable if @workspace_dt.value == ''
272
+
273
+ @new_project_name.connect(SEL_COMMAND, method(:createProject))
274
+ @newProjectButton.connect(SEL_COMMAND, method(:createProject))
275
+
276
+ projectListOuterFrame = FXVerticalFrame.new(projectSubSelection, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_GROOVE, :padding => 0)
277
+ @projectList = FXList.new(projectListOuterFrame, :opts => LIST_EXTENDEDSELECT|LAYOUT_FILL_X|LAYOUT_FILL_Y)
278
+ @projectList.numVisible = 14
279
+
280
+ @projectList.connect(SEL_COMMAND, method(:onProjectSelect))
281
+ @projectList.connect(SEL_DOUBLECLICKED, method(:openProject))
282
+
283
+
284
+ #
285
+ # SECOND WIZZARD FRAME
286
+ #
287
+ step_two_frame = FXVerticalFrame.new(@switcher, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
288
+ @projectCaption = FXLabel.new(step_two_frame, "Project: - unknown -", :opts => LAYOUT_FILL_X|JUSTIFY_LEFT)
289
+ @projectCaption.setFont(FXFont.new(getApp(), "helvetica", 14, FONTWEIGHT_BOLD, FONTSLANT_ITALIC, FONTENCODING_DEFAULT))
290
+
291
+ # SESSION SELECTION
292
+ sessionSelectionFrame = FXGroupBox.new(step_two_frame, "Select Session", LAYOUT_SIDE_TOP|FRAME_GROOVE|LAYOUT_FILL_X, 0, 0, 0, 0)
293
+
294
+ sessionSubSelection = FXVerticalFrame.new(sessionSelectionFrame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_GROOVE)
295
+ newSessionFrame = FXHorizontalFrame.new(sessionSubSelection, :opts => LAYOUT_FILL_X|LAYOUT_SIDE_TOP)
296
+ FXLabel.new(newSessionFrame, "Session Name:" )
297
+ @sessionTextField = FXTextField.new(newSessionFrame, 25,
298
+ :target => @new_session_name, :selector => FXDataTarget::ID_VALUE,
299
+ :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_LEFT)
300
+ @newSessionButton = FXButton.new(newSessionFrame, "New" , nil, nil, :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
301
+
302
+
303
+ @new_session_name.connect(SEL_COMMAND, method(:createSession))
304
+
305
+ @newSessionButton.connect(SEL_COMMAND, method(:createSession))
306
+
307
+ sessionListOuterFrame = FXVerticalFrame.new(sessionSubSelection, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_GROOVE, :padding => 0)
308
+ @sessionList = FXList.new(sessionListOuterFrame, :opts => LIST_EXTENDEDSELECT|LAYOUT_FILL_X|LAYOUT_FILL_Y)
309
+ @sessionList.numVisible = 14
310
+
311
+ @sessionList.connect(SEL_COMMAND, method(:onSessionSelect))
312
+
313
+ @sessionList.connect(SEL_DOUBLECLICKED, method(:openSession))
314
+
315
+
316
+ #updateSessionList(@project_dir)
317
+
318
+ #
319
+ # BUTTONS FRAME
320
+ #
321
+ buttons_frame = FXHorizontalFrame.new(base_frame,
322
+ :opts => LAYOUT_FILL_X|LAYOUT_SIDE_TOP)
323
+
324
+ @finishButton = FXButton.new(buttons_frame, "Finish" , nil, nil, :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
325
+ @finishButton.disable
326
+ @finishButton.connect(SEL_COMMAND) do |sender, sel, item|
327
+ #self.handle(self, FXSEL(SEL_COMMAND, ID_CANCEL), nil)
328
+ self.handle(self, FXSEL(SEL_COMMAND, ID_ACCEPT), nil)
329
+ end
330
+
331
+ @nextButton = FXButton.new(buttons_frame, "Next" , nil, nil, :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
332
+ @nextButton.disable
333
+ @nextButton.connect(SEL_COMMAND) do |sender, sel, item|
334
+ if @switcher.current < @switcher.numChildren-1
335
+ @switcher.current = @switcher.current+1
336
+ @backButton.enable
337
+ @nextButton.disable if @switcher.current == @switcher.numChildren-1
338
+ end
339
+ setButtons(@switcher.current)
340
+ end
341
+
342
+ @backButton = FXButton.new(buttons_frame, "Back" , nil, nil, :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
343
+ @backButton.disable
344
+ @backButton.connect(SEL_COMMAND) do |sender, sel, item|
345
+ if @switcher.current > 0
346
+ @switcher.current = @switcher.current-1
347
+ @backButton.disable if @switcher.current == 0
348
+ end
349
+ setButtons(@switcher.current)
350
+ end
351
+
352
+ @cancelButton = FXButton.new(buttons_frame, "Cancel" ,
353
+ :target => self, :selector => FXDialogBox::ID_CANCEL,
354
+ :opts => BUTTON_NORMAL|LAYOUT_RIGHT)
355
+
356
+
357
+ updateProjectList(@workspace_dt.value)
358
+
359
+
360
+
361
+ # apply setting
362
+ end
363
+
364
+
365
+ end
366
+
367
+
368
+ end
369
+ end