arcadia 0.13.0 → 0.13.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (194) hide show
  1. checksums.yaml +7 -0
  2. data/README +19 -15
  3. data/bin/arc +0 -0
  4. data/conf/LC/en-UK.LANG +1 -1
  5. data/conf/LC/ru-RU.LANG +272 -0
  6. data/conf/theme-dark.conf +3 -3
  7. data/ext/ae-dir-projects/ae-dir-projects.rb +5 -5
  8. data/ext/ae-editor/ae-editor.rb +302 -178
  9. data/ext/ae-subprocess-inspector/ae-subprocess-inspector.rb +2 -2
  10. data/ext/ae-term/ae-term.rb +11 -2
  11. data/lib/a-commons.rb +49 -19
  12. data/lib/a-contracts.rb +13 -0
  13. data/lib/a-core.rb +139 -36
  14. data/lib/a-tkcommons.rb +23 -8
  15. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/ArrowButton.html +0 -0
  16. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/BWidget.html +0 -0
  17. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/Button.html +0 -0
  18. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/ButtonBox.html +0 -0
  19. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/ComboBox.html +8 -0
  20. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/Dialog.html +0 -0
  21. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/DragSite.html +0 -0
  22. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/DropSite.html +0 -0
  23. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/DynamicHelp.html +0 -0
  24. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/Entry.html +0 -0
  25. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/Label.html +0 -0
  26. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/LabelEntry.html +0 -0
  27. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/LabelFrame.html +0 -0
  28. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/ListBox.html +0 -0
  29. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/MainFrame.html +28 -23
  30. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/MessageDlg.html +0 -0
  31. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/NoteBook.html +0 -0
  32. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/PagesManager.html +0 -0
  33. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/PanedWindow.html +0 -0
  34. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/PanelFrame.html +0 -0
  35. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/PasswdDlg.html +0 -0
  36. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/ProgressBar.html +0 -0
  37. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/ProgressDlg.html +0 -0
  38. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/ScrollView.html +0 -0
  39. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/ScrollableFrame.html +0 -0
  40. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/ScrolledWindow.html +0 -0
  41. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/SelectColor.html +0 -0
  42. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/SelectFont.html +0 -0
  43. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/Separator.html +0 -0
  44. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/SpinBox.html +0 -0
  45. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/StatusBar.html +0 -0
  46. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/TitleFrame.html +0 -0
  47. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/Tree.html +0 -0
  48. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/Widget.html +0 -0
  49. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/contents.html +0 -0
  50. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/index.html +0 -0
  51. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/navtree.html +0 -0
  52. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/options.htm +0 -0
  53. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/CHANGES.txt +0 -0
  54. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/ChangeLog +59 -0
  55. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/LICENSE.txt +0 -0
  56. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/README.txt +0 -0
  57. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/arrow.tcl +0 -0
  58. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/bitmap.tcl +0 -0
  59. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/button.tcl +0 -0
  60. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/buttonbox.tcl +0 -0
  61. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/color.tcl +0 -0
  62. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/combobox.tcl +8 -0
  63. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/demo/basic.tcl +0 -0
  64. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/demo/bwidget.xbm +0 -0
  65. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/demo/demo.tcl +0 -0
  66. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/demo/dnd.tcl +0 -0
  67. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/demo/manager.tcl +0 -0
  68. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/demo/select.tcl +0 -0
  69. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/demo/tmpldlg.tcl +0 -0
  70. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/demo/tree.tcl +0 -0
  71. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/demo/x1.xbm +0 -0
  72. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/dialog.tcl +0 -0
  73. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/dragsite.tcl +0 -0
  74. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/dropsite.tcl +0 -0
  75. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/dynhelp.tcl +0 -0
  76. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/entry.tcl +0 -0
  77. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/font.tcl +0 -0
  78. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/bold.gif +0 -0
  79. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/copy.gif +0 -0
  80. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/cut.gif +0 -0
  81. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/dragfile.gif +0 -0
  82. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/dragicon.gif +0 -0
  83. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/error.gif +0 -0
  84. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/file.gif +0 -0
  85. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/folder.gif +0 -0
  86. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/hourglass.gif +0 -0
  87. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/info.gif +0 -0
  88. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/italic.gif +0 -0
  89. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/minus.xbm +0 -0
  90. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/new.gif +0 -0
  91. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/opcopy.xbm +0 -0
  92. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/open.gif +0 -0
  93. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/openfold.gif +0 -0
  94. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/oplink.xbm +0 -0
  95. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/opmove.xbm +0 -0
  96. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/overstrike.gif +0 -0
  97. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/palette.gif +0 -0
  98. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/passwd.gif +0 -0
  99. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/paste.gif +0 -0
  100. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/plus.xbm +0 -0
  101. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/print.gif +0 -0
  102. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/question.gif +0 -0
  103. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/redo.gif +0 -0
  104. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/save.gif +0 -0
  105. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/target.xbm +0 -0
  106. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/underline.gif +0 -0
  107. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/undo.gif +0 -0
  108. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/warning.gif +0 -0
  109. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/init.tcl +9 -8
  110. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/label.tcl +0 -0
  111. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/labelentry.tcl +4 -1
  112. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/labelframe.tcl +0 -0
  113. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/lang/da.rc +0 -0
  114. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/lang/de.rc +0 -0
  115. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/lang/en.rc +0 -0
  116. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/lang/es.rc +0 -0
  117. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/lang/fr.rc +0 -0
  118. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/lang/hu.rc +0 -0
  119. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/lang/nl.rc +0 -0
  120. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/lang/no.rc +0 -0
  121. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/lang/pl.rc +0 -0
  122. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/listbox.tcl +0 -0
  123. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/mainframe.tcl +110 -22
  124. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/messagedlg.tcl +0 -0
  125. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/notebook.tcl +13 -3
  126. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/pagesmgr.tcl +0 -0
  127. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/panedw.tcl +0 -0
  128. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/panelframe.tcl +0 -0
  129. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/passwddlg.tcl +0 -0
  130. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/pkgIndex.tcl +2 -3
  131. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/progressbar.tcl +0 -0
  132. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/progressdlg.tcl +0 -0
  133. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/scrollframe.tcl +0 -0
  134. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/scrollview.tcl +0 -0
  135. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/scrollw.tcl +0 -0
  136. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/separator.tcl +0 -0
  137. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/spinbox.tcl +0 -0
  138. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/statusbar.tcl +0 -0
  139. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/tests/entry.test +0 -0
  140. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/titleframe.tcl +0 -0
  141. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/tree.tcl +0 -0
  142. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/utils.tcl +0 -0
  143. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/widget.tcl +15 -2
  144. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/wizard.tcl +0 -0
  145. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/xpm2image.tcl +90 -28
  146. metadata +146 -196
  147. data/tcl/fsdialog/de.msg +0 -30
  148. data/tcl/fsdialog/en.msg +0 -31
  149. data/tcl/fsdialog/fsdialog.tcl +0 -1783
  150. data/tcl/fsdialog/fsdlg-gif.tcl +0 -259
  151. data/tcl/fsdialog/fsdlg-png.tcl +0 -265
  152. data/tcl/fsdialog/sv.msg +0 -32
  153. data/tcl/fsdialog/tclIndex +0 -6
  154. data/tcl/ptwidgets-1.1.0/COPYRIGHT +0 -10
  155. data/tcl/ptwidgets-1.1.0/ChangeLog +0 -194
  156. data/tcl/ptwidgets-1.1.0/README +0 -50
  157. data/tcl/ptwidgets-1.1.0/common/stacktrace.tcl +0 -29
  158. data/tcl/ptwidgets-1.1.0/common/tokenframe.tcl +0 -200
  159. data/tcl/ptwidgets-1.1.0/doc/img/toggleswitch_off.png +0 -0
  160. data/tcl/ptwidgets-1.1.0/doc/img/toggleswitch_on.png +0 -0
  161. data/tcl/ptwidgets-1.1.0/doc/img/tokenentry.png +0 -0
  162. data/tcl/ptwidgets-1.1.0/doc/img/tokensearch_popup_example.png +0 -0
  163. data/tcl/ptwidgets-1.1.0/doc/img/tokensearch_popup_example2.png +0 -0
  164. data/tcl/ptwidgets-1.1.0/doc/img/wmarkentry.png +0 -0
  165. data/tcl/ptwidgets-1.1.0/doc/toggleswitch.html +0 -402
  166. data/tcl/ptwidgets-1.1.0/doc/tokenentry.html +0 -1366
  167. data/tcl/ptwidgets-1.1.0/doc/tokensearch.html +0 -1549
  168. data/tcl/ptwidgets-1.1.0/doc/wmarkentry.html +0 -634
  169. data/tcl/ptwidgets-1.1.0/library/toggleswitch.tcl +0 -432
  170. data/tcl/ptwidgets-1.1.0/library/tokenentry.tcl +0 -2208
  171. data/tcl/ptwidgets-1.1.0/library/tokensearch.tcl +0 -2488
  172. data/tcl/ptwidgets-1.1.0/library/wmarkentry.tcl +0 -630
  173. data/tcl/ptwidgets-1.1.0/pkgIndex.tcl +0 -10
  174. data/tcl/ptwidgets-1.1.0/test/Makefile +0 -3
  175. data/tcl/ptwidgets-1.1.0/test/run.tcl +0 -3
  176. data/tcl/ptwidgets-1.1.0/test/test.tcl +0 -89
  177. data/tcl/ptwidgets-1.1.0/test/toggleswitch.test +0 -562
  178. data/tcl/ptwidgets-1.1.0/test/tokenentry.test +0 -1023
  179. data/tcl/ptwidgets-1.1.0/test/tokensearch.test +0 -1023
  180. data/tcl/ptwidgets-1.1.0/test/wmarkentry.test +0 -1325
  181. data/tcl/themes/altTheme.tcl +0 -101
  182. data/tcl/themes/aquaTheme.tcl +0 -59
  183. data/tcl/themes/clamTheme.tcl +0 -140
  184. data/tcl/themes/classicTheme.tcl +0 -108
  185. data/tcl/themes/pkgIndex.tcl +0 -3
  186. data/tcl/themes/ttk.tcl +0 -176
  187. data/tcl/themes/vistaTheme.tcl +0 -224
  188. data/tcl/themes/winTheme.tcl +0 -80
  189. data/tcl/themes/xpTheme.tcl +0 -65
  190. data/tcl/tkfbox/folder.gif +0 -0
  191. data/tcl/tkfbox/textfile.gif +0 -0
  192. data/tcl/tkfbox/tkfbox.tcl +0 -1
  193. data/tcl/tkfbox/tkfbox.tcl~ +0 -1
  194. data/tcl/tkfbox/updir.xbm +0 -1
@@ -22,7 +22,7 @@ class SubProcessInspector < ArcadiaExt
22
22
  @processs.each{|pr|
23
23
  if !pr.nil?
24
24
  message = Arcadia.text("ext.spi.d.exit_query.msg")
25
- r=Arcadia.dialog(self,
25
+ r=Arcadia.hinner_dialog(self,
26
26
  'type'=>'yes_no',
27
27
  'level'=>'warning',
28
28
  'title'=> Arcadia.text("ext.spi.d.exit_query.title"),
@@ -59,7 +59,7 @@ class SubProcessWidget < Tk::BWidget::Button
59
59
  @event = _event
60
60
  b_command = proc{
61
61
  message = Arcadia.text('ext.spi.d.kill.msg', [_event.pid, _event.name])
62
- r=Arcadia.dialog(self,
62
+ r=Arcadia.hinner_dialog(self,
63
63
  'type'=>'yes_no',
64
64
  'level'=>'warning',
65
65
  'title'=> Arcadia.text('ext.spi.d.kill.title'),
@@ -21,6 +21,7 @@ class Term < ArcadiaExtPlus
21
21
  ArcadiaProblemEvent.new(self, "type"=>ArcadiaProblemEvent::DEPENDENCE_MISSING_TYPE,"title"=>Arcadia.text("ext.term.dependences_missing.xdotool.title"), "detail"=>msg).go!
22
22
  end
23
23
  end
24
+ @xterm_class_id = nil
24
25
  end
25
26
 
26
27
  def on_build(_event)
@@ -71,7 +72,10 @@ class Term < ArcadiaExtPlus
71
72
  end
72
73
 
73
74
  def xterm_class
74
- "xarc#{instance_index}"
75
+ if @xterm_class_id.nil?
76
+ @xterm_class_id = "xta#{Time.new.to_i}#{instance_index}"
77
+ end
78
+ @xterm_class_id
75
79
  end
76
80
 
77
81
  def do_run_xterm(_dir='~')
@@ -82,6 +86,7 @@ class Term < ArcadiaExtPlus
82
86
  conf("create",'yes')
83
87
  conf("dir",_dir)
84
88
  id_int = eval(frame.hinner_frame.winfo_id).to_i
89
+
85
90
  #Arcadia.runtime_error_msg("CREO XTERM #{xterm_class} con id #{id_int}")
86
91
  cmd = "cd #{_dir} ; xterm -into #{id_int} -bg '#{conf('color.bg')}' -fg #{conf('color.fg')} -fa '#{conf('font')}' -class #{xterm_class} +sb +hold"
87
92
  fi_pid=-1
@@ -110,9 +115,13 @@ class Term < ArcadiaExtPlus
110
115
  end
111
116
 
112
117
  def do_xterm_exit
118
+ @bind_after_run = false
119
+ frame.hinner_frame.bind_remove("Configure")
120
+ frame.hinner_frame.bind_remove("Map")
113
121
  if main_instance?
114
122
  conf("create",'no')
115
- hide_frame
123
+ # hide_frame
124
+ clean_instance
116
125
  else
117
126
  clean_instance
118
127
  end
@@ -234,6 +234,10 @@ class ArcadiaExt
234
234
  def hide_frame(_n=0)
235
235
  Arcadia.layout.unregister_panel(frame(_n), false, true)
236
236
  end
237
+
238
+ def destroy_frame(_n=0)
239
+ Arcadia.layout.unregister_panel(frame(_n), true, true)
240
+ end
237
241
 
238
242
  def conf_array(_name)
239
243
  # res = []
@@ -281,7 +285,7 @@ class ArcadiaExt
281
285
  end
282
286
 
283
287
  def frame_visible?(_n=0)
284
- @frames[_n] != nil && @frames[_n].hinner_frame && TkWinfo.mapped?(@frames[_n].hinner_frame)
288
+ @frames != nil && @frames[_n] != nil && @frames[_n].hinner_frame && TkWinfo.mapped?(@frames[_n].hinner_frame)
285
289
  end
286
290
 
287
291
  def frame(_n=0,create_if_not_exist=true)
@@ -449,13 +453,18 @@ class ArcadiaExtPlus < ArcadiaExt
449
453
  end
450
454
 
451
455
  def activate(_obj=self, _raise_event=true)
452
- return if @@active_instance[self.class] == _obj
453
- @@active_instance[self.class] = _obj
454
- @@active_instance[self.class].frame.root.shift_on if @@active_instance[self.class].frame != nil
456
+ return if @@active_instance[_obj.class] == _obj
457
+ if _obj.frame_visible?
458
+ @@active_instance[_obj.class] = nil
459
+ else
460
+ @@active_instance[_obj.class] = _obj
461
+ end
462
+ #@@active_instance[self.class].frame.root.shift_on if @@active_instance[self.class].frame != nil
463
+ _obj.frame.root.shift_on if _obj.frame_visible?
455
464
  instances.each{|i|
456
- i.frame.root.shift_off if i != @@active_instance[self.class] && i.frame != nil && i.frame.root != @@active_instance[self.class].frame.root
465
+ i.frame.root.shift_off if i != _obj && i.frame != nil && i.frame.root != _obj.frame.root
457
466
  }
458
- ActivateInstanceEvent.new(Arcadia.instance, 'name'=>self.name).go! if _raise_event
467
+ ActivateInstanceEvent.new(Arcadia.instance, 'name'=>_obj.name).go! if _raise_event
459
468
  end
460
469
 
461
470
  def activate_main
@@ -525,7 +534,9 @@ class ArcadiaExtPlus < ArcadiaExt
525
534
  def on_destroy_instance(_event)
526
535
  Arcadia.detach_listener(self)
527
536
  @arcadia.unregister(self)
528
- @frames.each{|f| f.free }
537
+ # @frames.each{|f| f.free }
538
+ @frames.each_index{|i| destroy_frame(i)}
539
+ @frames.clear
529
540
  end
530
541
 
531
542
  # def on_before_layout_raising_frame(_event)
@@ -535,14 +546,24 @@ class ArcadiaExtPlus < ArcadiaExt
535
546
  # end
536
547
 
537
548
  def clean_instance
538
- activate_main
539
- @@instances[self.class].delete(self) if @@instances[self.class]
540
- Arcadia.del_conf_group(Arcadia['conf'],@name)
541
- Arcadia.del_conf_group(Arcadia['pers'],@name)
542
- #del_from_conf_property("#{main_instance.name}.clones", @name)
543
- main_instance.del_from_conf_property("clones", @name)
544
- Arcadia.process_event(ClearCacheInstanceEvent.new(Arcadia.instance), [self])
545
- Arcadia.process_event(DestroyInstanceEvent.new(Arcadia.instance), [self])
549
+ if main_instance?
550
+ @frames.each_index{|i| destroy_frame(i)}
551
+ @frames.clear
552
+ instances.each{|i|
553
+ if i != self
554
+ activate(i)
555
+ break
556
+ end
557
+ }
558
+ else
559
+ @@instances[self.class].delete(self) if @@instances[self.class]
560
+ Arcadia.del_conf_group(Arcadia['conf'],@name)
561
+ Arcadia.del_conf_group(Arcadia['pers'],@name)
562
+ main_instance.del_from_conf_property("clones", @name)
563
+ Arcadia.process_event(ClearCacheInstanceEvent.new(Arcadia.instance), [self])
564
+ Arcadia.process_event(DestroyInstanceEvent.new(Arcadia.instance), [self])
565
+ activate_main #if main_instance.frame_visible?
566
+ end
546
567
  end
547
568
 
548
569
  def deduplicate
@@ -1058,8 +1079,8 @@ class Application
1058
1079
  @@instance
1059
1080
  end
1060
1081
 
1061
- def Application.conf(_property)
1062
- @@instance['conf'][_property] if @@instance
1082
+ def Application.conf(_property, _value=nil)
1083
+ @@instance.conf(_property, _value) if @@instance
1063
1084
  end
1064
1085
 
1065
1086
  def Application.version
@@ -1070,7 +1091,10 @@ class Application
1070
1091
  @@instance.local_dir if @@instance
1071
1092
  end
1072
1093
 
1073
- def conf(_property)
1094
+ def conf(_property, _value=nil)
1095
+ if !_value.nil?
1096
+ self['conf'][_property] = _value
1097
+ end
1074
1098
  self['conf'][_property]
1075
1099
  end
1076
1100
 
@@ -1202,7 +1226,13 @@ class Application
1202
1226
  def load_theme(_name=nil)
1203
1227
  _theme_file = "conf/theme-#{_name}.conf" if !_name.nil?
1204
1228
  if _theme_file && File.exist?(_theme_file)
1205
- self['conf_theme'] = self.properties_file2hash(_theme_file)
1229
+ thash = self.properties_file2hash(_theme_file)
1230
+ if thash.has_key?('parent')
1231
+ load_theme(thash['parent'])
1232
+ self['conf_theme'].update(thash)
1233
+ else
1234
+ self['conf_theme'] = thash
1235
+ end
1206
1236
  self['conf'].update(self['conf_theme'])
1207
1237
  self['conf_without_local'].update(self['conf_theme'])
1208
1238
  _theme_res_file = "#{Dir.pwd}/conf/theme-#{_name}.res.rb"
@@ -98,6 +98,11 @@ end
98
98
  class LayoutChangedFrameEvent < ArcadiaSysEvent
99
99
  end
100
100
 
101
+ class LayoutChangedDomainEvent < ArcadiaSysEvent
102
+ attr_accessor :old_domain
103
+ attr_accessor :new_domain
104
+ end
105
+
101
106
  # +---------------------------------------------+
102
107
  # Buffer event
103
108
  # +---------------------------------------------+
@@ -361,12 +366,20 @@ class LowerCaseTextEvent < FocusEvent; end
361
366
  # default actions_pattern = 'OK'
362
367
  class DialogEvent < ArcadiaEvent
363
368
  TYPE_PATTERNS = ['ok', 'yes_no', 'ok_cancel', 'yes_no_cancel', 'abort_retry_ignore']
369
+ MSG_MAX_CHARS = 500
364
370
  class Result < Result
365
371
  attr_accessor :value
366
372
  end
367
373
  attr_accessor :title, :msg, :type, :level, :exception
368
374
  end
369
375
 
376
+ class SystemDialogEvent < DialogEvent
377
+ end
378
+
379
+ class HinnerDialogEvent < DialogEvent
380
+ end
381
+
382
+
370
383
  #class QuestionDialogEvent < DialogEvent
371
384
  #end
372
385
  #
@@ -24,7 +24,7 @@ class Arcadia < TkApplication
24
24
  super(
25
25
  ApplicationParams.new(
26
26
  'arcadia',
27
- '0.13.0',
27
+ '0.13.1',
28
28
  'conf/arcadia.conf',
29
29
  'conf/arcadia.pers'
30
30
  )
@@ -561,6 +561,14 @@ class Arcadia < TkApplication
561
561
  self.load_local_config(false)
562
562
  # local config can contain loading conditions
563
563
  self.load_exts_conf
564
+ if @first_run
565
+ myloc = nil
566
+ begin
567
+ myloc = ENV["LANG"].split('.')[0].sub('_','-') if ENV["LANG"]
568
+ rescue Exception => e
569
+ end
570
+ Arcadia.conf('locale', myloc) if myloc != nil
571
+ end
564
572
  self.load_local_config
565
573
  self.load_theme(self['conf']['theme'])
566
574
  self.resolve_properties_link(self['conf'],self['conf'])
@@ -1024,7 +1032,12 @@ class Arcadia < TkApplication
1024
1032
 
1025
1033
 
1026
1034
  def Arcadia.dialog(_sender, _args=Hash.new)
1027
- _event = process_event(DialogEvent.new(_sender, _args))
1035
+ _event = process_event(SystemDialogEvent.new(_sender, _args))
1036
+ return _event.results[0].value if _event
1037
+ end
1038
+
1039
+ def Arcadia.hinner_dialog(_sender, _args=Hash.new)
1040
+ _event = process_event(HinnerDialogEvent.new(_sender, _args))
1028
1041
  return _event.results[0].value if _event
1029
1042
  end
1030
1043
 
@@ -1351,8 +1364,8 @@ class ArcadiaMainToolbar < ArcadiaUserControl
1351
1364
  @item_obj = Tk::BWidget::Button.new(_args['frame'], Arcadia.style('toolbarbutton')){
1352
1365
  image _image if _image
1353
1366
  command _command if _command
1354
- width 20
1355
- height 20
1367
+ width 23
1368
+ height 23
1356
1369
  helptext _hint if _hint
1357
1370
  text _caption if _caption
1358
1371
  }
@@ -1703,7 +1716,7 @@ class RunnerManager < TkFloatTitledFrame
1703
1716
  'compound'=>:left,
1704
1717
  'relief'=>'flat').pack('fill'=>'x','side' =>'left')
1705
1718
  _close_command = proc{
1706
- if (Arcadia.dialog(self, 'type'=>'yes_no',
1719
+ if (Arcadia.hinner_dialog(self, 'type'=>'yes_no',
1707
1720
  'msg'=> Arcadia.text("main.d.confirm_delete_runner.msg", [_runner_hash[:name]]),
1708
1721
  'title' => Arcadia.text("main.d.confirm_delete_runner.title"),
1709
1722
  'level' => 'question')=='yes')
@@ -1967,7 +1980,17 @@ class ArcadiaProblemsShower
1967
1980
  @initialized = true
1968
1981
  if @problems.count > 0
1969
1982
  show_problems
1970
- @ff.show
1983
+ Thread.new do
1984
+ num_sleep = 0
1985
+ while TkWinfo.viewable(Arcadia.layout.root) == false && num_sleep < 20
1986
+ sleep(1)
1987
+ num_sleep += 1
1988
+ end
1989
+ @ff.show
1990
+ end
1991
+ # p TkWinfo.viewable(Arcadia.layout.root)
1992
+ # Tk.after(1000, proc{@ff.show; p TkWinfo.viewable(Arcadia.layout.root)})
1993
+
1971
1994
  end
1972
1995
  end
1973
1996
 
@@ -2390,38 +2413,59 @@ end
2390
2413
 
2391
2414
 
2392
2415
  class ArcadiaDialogManager
2416
+ DialogParams = Struct.new("DialogParams",
2417
+ :type,
2418
+ :res_array,
2419
+ :level,
2420
+ :msg
2421
+ )
2422
+
2393
2423
  def initialize(_arcadia)
2394
2424
  @arcadia = _arcadia
2395
2425
  Arcadia.attach_listener(self, DialogEvent)
2396
2426
  end
2397
2427
 
2398
- def on_dialog(_event)
2399
- type = _event.type
2400
- if !DialogEvent::TYPE_PATTERNS.include?(_event.type)
2401
- type = 'ok'
2402
- end
2403
- res_array = type.split('_')
2404
- if _event.level.nil? || _event.level.length == 0
2405
- icon = 'info'
2406
- else
2407
- icon = _event.level
2428
+ def dialog_params(_event, check_type = true)
2429
+ ret = DialogParams.new
2430
+ if _event
2431
+ ret.type = _event.type
2432
+ if check_type && !_event.class::TYPE_PATTERNS.include?(_event.type)
2433
+ ret.type = 'ok'
2434
+ end
2435
+ ret.res_array = ret.type.split('_')
2436
+ if _event.level.nil? || _event.level.length == 0
2437
+ ret.level = 'info'
2438
+ else
2439
+ ret.level = _event.level
2440
+ end
2441
+ if _event.msg && _event.msg.length > _event.class::MSG_MAX_CHARS
2442
+ ret.msg = _event.msg[0.._event.class::MSG_MAX_CHARS]+' ...'
2443
+ else
2444
+ ret.msg = _event.msg
2445
+ end
2408
2446
  end
2409
- tktype = type.gsub('_','').downcase
2447
+ ret
2448
+ end
2410
2449
 
2411
- if _event.msg && _event.msg.length > 500
2412
- msg = _event.msg[0..500]+' ...'
2413
- else
2414
- msg = _event.msg
2450
+ def on_dialog(_event)
2451
+ case _event
2452
+ when SystemDialogEvent
2453
+ do_system_dialog(_event)
2454
+ when HinnerDialogEvent
2455
+ do_hinner_dialog(_event)
2415
2456
  end
2457
+ end
2416
2458
 
2459
+ def do_system_dialog(_event)
2460
+ par = dialog_params(_event)
2461
+ tktype = par.type.gsub('_','').downcase
2417
2462
  tkdialog = Tk::BWidget::MessageDlg.new(
2418
- 'icon' => icon,
2419
- 'bg' => Arcadia.conf('background'),
2420
- 'fg' => Arcadia.conf('foreground'),
2421
- 'type' => tktype,
2422
- 'title' => _event.title,
2423
- 'message' => msg)
2424
-
2463
+ 'icon' => par.level,
2464
+ 'bg' => Arcadia.conf('background'),
2465
+ 'fg' => Arcadia.conf('foreground'),
2466
+ 'type' => tktype,
2467
+ 'title' => _event.title,
2468
+ 'message' => par.msg)
2425
2469
  tkdialog.configure('font'=>'courier 6')
2426
2470
  res = tkdialog.create
2427
2471
  if _event.level == 'error'
@@ -2431,9 +2475,60 @@ class ArcadiaDialogManager
2431
2475
  Arcadia.runtime_error_msg(_event.msg, _event.title)
2432
2476
  end
2433
2477
  end
2434
- _event.add_result(self, 'value'=>res_array[res.to_i])
2478
+ _event.add_result(self, 'value'=>par.res_array[res.to_i])
2435
2479
  end
2436
2480
 
2481
+ def do_hinner_dialog(_event)
2482
+ par = dialog_params(_event, false)
2483
+ dialog_frame = TkFrame.new(Arcadia.layout.base_frame, Arcadia.style('panel')){
2484
+ #relief 'solid'
2485
+ #borderwidth 3
2486
+ highlightbackground Arcadia.conf('hightlight.link.foreground')
2487
+ #highlightcolor 'red'
2488
+ highlightthickness 1
2489
+ }
2490
+ dialog_frame.pack('side' =>'top','after'=>Arcadia.layout.root, 'anchor'=>'nw','fill'=>'x', 'padx'=>0, 'pady'=>0)
2491
+ max_width = 0
2492
+ par.res_array.each{|v|
2493
+ l = v.length
2494
+ max_width = l if l > max_width
2495
+ }
2496
+ res = nil
2497
+ par.res_array.reverse_each{|value|
2498
+ Tk::BWidget::Button.new(dialog_frame, Arcadia.style('button')){
2499
+ command proc{res = value}
2500
+ text value.capitalize
2501
+ helptext value.capitalize
2502
+ width max_width*2
2503
+ }.pack('side' =>'right','padx'=>5, 'pady'=>5)
2504
+ }
2505
+
2506
+ Tk::BWidget::Label.new(dialog_frame,Arcadia.style('label')){
2507
+ text par.msg
2508
+ helptext _event.msg
2509
+ # }.pack('fill'=>'x','side' =>'left')
2510
+ }.pack('side' =>'right','padx'=>5, 'pady'=>5)
2511
+
2512
+ # Tk::BWidget::Label.new(dialog_frame,Arcadia.style('label')){
2513
+ # compound 'left'
2514
+ # Tk::Anigif.image(self, "#{Dir.pwd}/ext/ae-subprocess-inspector/process.res")
2515
+ # }.pack('side' =>'right','padx'=>10)
2516
+
2517
+
2518
+ Tk.update
2519
+ dialog_frame.grab("set")
2520
+ begin
2521
+ while res == nil do
2522
+ Tk.update
2523
+ sleep(0.1)
2524
+ end
2525
+ ensure
2526
+ dialog_frame.grab("release")
2527
+ end
2528
+ dialog_frame.destroy
2529
+ Tk.update
2530
+ _event.add_result(self, 'value'=>res)
2531
+ end
2437
2532
 
2438
2533
  def on_dialog_old(_event)
2439
2534
  type = _event.type
@@ -2454,6 +2549,7 @@ end
2454
2549
 
2455
2550
 
2456
2551
  class ArcadiaLayout
2552
+
2457
2553
  # include Observable
2458
2554
  # ArcadiaPanelInfo = Struct.new( "ArcadiaPanelInfo",
2459
2555
  # :name,
@@ -2461,18 +2557,25 @@ class ArcadiaLayout
2461
2557
  # :frame,
2462
2558
  # :ffw
2463
2559
  # )
2560
+ attr_reader :base_frame
2464
2561
  HIDDEN_DOMAIN = '-1.-1'
2465
2562
  def initialize(_arcadia, _frame, _autotab=true)
2466
2563
  @arcadia = _arcadia
2467
2564
  @frames = Array.new
2468
2565
  @frames[0] = Array.new
2469
- @frames[0][0] = _frame
2566
+ @base_frame = _frame
2567
+ @content_frame = TkFrame.new(_frame).pack('fill'=>'both', :padx=>0, :pady=>0, :expand => 'yes')
2568
+ # @dialog_frame = TkFrame.new(_frame)
2569
+
2570
+ @frames[0][0] = @content_frame
2470
2571
  # @domains = Array.new
2471
2572
  # @domains[0] = Array.new
2472
2573
  # @domains[0][0] = '_domain_root_'
2574
+
2575
+
2473
2576
  @panels = Hash.new
2474
2577
  @panels['_domain_root_']= Hash.new
2475
- @panels['_domain_root_']['root']= _frame
2578
+ @panels['_domain_root_']['root']= @content_frame
2476
2579
  @panels['_domain_root_']['sons'] = Hash.new
2477
2580
  @panels['_domain_root_'][:raised_stack] = []
2478
2581
 
@@ -2484,7 +2587,7 @@ class ArcadiaLayout
2484
2587
  @splitters=Array.new
2485
2588
  @tabbed = Arcadia.conf('layout.tabbed')=='true'
2486
2589
  end
2487
-
2590
+
2488
2591
  def root
2489
2592
  @panels['_domain_root_']['root']
2490
2593
  end
@@ -2954,7 +3057,6 @@ class ArcadiaLayout
2954
3057
  ret
2955
3058
  end
2956
3059
 
2957
-
2958
3060
  def domains_on_frame(_frame)
2959
3061
  ret_doms = Array.new
2960
3062
  frame_found = false
@@ -2991,7 +3093,6 @@ class ArcadiaLayout
2991
3093
  ret_doms
2992
3094
  end
2993
3095
 
2994
-
2995
3096
  def find_splitted_frame(_start_frame)
2996
3097
  splitted_frame = _start_frame
2997
3098
  while splitted_frame != nil && !splitted_frame.kind_of?(AGTkSplittedFrames)
@@ -3252,6 +3353,8 @@ class ArcadiaLayout
3252
3353
  end
3253
3354
  # refresh -----
3254
3355
  build_invert_menu
3356
+ Tk.update
3357
+ LayoutChangedDomainEvent.new(self, 'old_domain'=>source_domain, 'new_domain'=>_target_domain).go!
3255
3358
  end
3256
3359
 
3257
3360
  # def change_domain_old(_dom1, _dom2, _name2)
@@ -3722,7 +3825,7 @@ class ArcadiaLayout
3722
3825
  dr,dc=d.split('.')
3723
3826
  if dc.to_i >= _c && dr.to_i == _r
3724
3827
  #shift_domain_column(_r,dc.to_i+1,_dom)
3725
- p "== #{d} --> #{domain_name(_r,dc.to_i+1)}"
3828
+ #p "== #{d} --> #{domain_name(_r,dc.to_i+1)}"
3726
3829
  _dom[k]= domain_name(_r,dc.to_i+1)
3727
3830
  end
3728
3831
  }
@@ -3733,7 +3836,7 @@ class ArcadiaLayout
3733
3836
  dr,dc=d.split('.')
3734
3837
  if dr.to_i >= _r && dc.to_i == _c
3735
3838
  #shift_domain_row(dr.to_i+1,_c,_dom)
3736
- p "shift_domain_row == #{d} --> #{domain_name(dr.to_i+1,_c)}"
3839
+ #p "shift_domain_row == #{d} --> #{domain_name(dr.to_i+1,_c)}"
3737
3840
  _dom[k]=domain_name(dr.to_i+1,_c)
3738
3841
  end
3739
3842
  }