troshka 0.0.3 → 0.1.0

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 (71) hide show
  1. data/bin/troshka +5 -3
  2. data/lib/shirka/app.rb +41 -0
  3. data/lib/shirka/components.rb +31 -0
  4. data/lib/shirka/controller.rb +57 -0
  5. data/lib/shirka/eventalk.rb +41 -0
  6. data/lib/shirka/qt.rb +4 -0
  7. data/lib/shirka/qt/app.rb +21 -0
  8. data/lib/shirka/qt/list/controller.rb +38 -0
  9. data/lib/shirka/qt/list/view.rb +23 -0
  10. data/lib/shirka/qt/list_item/controller.rb +31 -0
  11. data/lib/shirka/qt/list_item/view.rb +19 -0
  12. data/lib/shirka/qt/multipanel/controller.rb +8 -0
  13. data/lib/shirka/qt/multipanel/view.rb +31 -0
  14. data/lib/shirka/qt/tab/view.rb +16 -0
  15. data/lib/shirka/qt/tree/controller.rb +40 -0
  16. data/lib/shirka/qt/tree/view.rb +26 -0
  17. data/lib/shirka/qt/tree_item/controller.rb +51 -0
  18. data/lib/shirka/qt/tree_item/view.rb +23 -0
  19. data/lib/shirka/shirka.rb +8 -0
  20. data/lib/shirka/view.rb +47 -0
  21. data/lib/troshka/app.rb +12 -52
  22. data/lib/troshka/detail/controller.rb +25 -0
  23. data/lib/troshka/detail/view.rb +5 -0
  24. data/lib/troshka/detail_panel_enumerable/controller.rb +14 -0
  25. data/lib/troshka/detail_panel_enumerable/view.rb +5 -0
  26. data/lib/troshka/detail_panel_hash/controller.rb +14 -0
  27. data/lib/troshka/detail_panel_hash/view.rb +5 -0
  28. data/lib/troshka/detail_panel_item_enumerable/controller.rb +14 -0
  29. data/lib/troshka/detail_panel_item_enumerable/view.rb +10 -0
  30. data/lib/troshka/detail_panel_item_hash/controller.rb +14 -0
  31. data/lib/troshka/detail_panel_item_hash/view.rb +10 -0
  32. data/lib/troshka/detail_panel_item_object/controller.rb +4 -0
  33. data/lib/troshka/detail_panel_item_object/view.rb +6 -0
  34. data/lib/troshka/detail_panel_object/controller.rb +5 -0
  35. data/lib/troshka/detail_panel_object/view.rb +9 -0
  36. data/lib/troshka/editor/bond_completer.rb +14 -0
  37. data/lib/troshka/editor/completer.rb +4 -0
  38. data/lib/troshka/editor/controller.rb +71 -0
  39. data/lib/troshka/editor/line.rb +43 -0
  40. data/lib/troshka/editor/qscintilla_view.rb +56 -0
  41. data/lib/troshka/editor/qtextedit_view.rb +28 -0
  42. data/lib/troshka/editor/qxscintilla.rb +98 -0
  43. data/lib/troshka/editor/shell.rb +30 -0
  44. data/lib/troshka/main/controller.rb +16 -0
  45. data/lib/troshka/main/view.rb +50 -0
  46. data/lib/troshka/methods/controller.rb +16 -0
  47. data/lib/troshka/methods/view.rb +13 -0
  48. data/lib/troshka/methods_item/controller.rb +4 -0
  49. data/lib/troshka/methods_item/view.rb +5 -0
  50. data/lib/troshka/output/controller.rb +13 -0
  51. data/lib/troshka/output/view.rb +11 -0
  52. data/lib/troshka/output_item/controller.rb +15 -0
  53. data/lib/troshka/output_item/view.rb +9 -0
  54. data/lib/troshka/output_item_code/controller.rb +5 -0
  55. data/lib/troshka/output_item_code/view.rb +5 -0
  56. data/lib/troshka/output_item_exception/controller.rb +2 -0
  57. data/lib/troshka/output_item_exception/view.rb +6 -0
  58. data/lib/troshka/output_item_obj/controller.rb +2 -0
  59. data/lib/troshka/output_item_obj/view.rb +2 -0
  60. data/lib/troshka/output_item_output/controller.rb +5 -0
  61. data/lib/troshka/output_item_output/view.rb +5 -0
  62. data/resources/logo.png +0 -0
  63. metadata +63 -27
  64. data/lib/troshka.rb +0 -15
  65. data/lib/troshka/detail.rb +0 -25
  66. data/lib/troshka/detail_anything.rb +0 -9
  67. data/lib/troshka/detail_array_hash.rb +0 -86
  68. data/lib/troshka/editor.rb +0 -113
  69. data/lib/troshka/output.rb +0 -58
  70. data/lib/troshka/qt_editor.rb +0 -27
  71. data/lib/troshka/shell.rb +0 -27
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
- require_relative '../lib/troshka'
3
-
4
- Troshka::App.new.start
2
+ require_relative '../lib/troshka/app.rb'
5
3
 
4
+ app = Troshka::App.new
5
+ app.path = File.expand_path('../lib/troshka', File.dirname(__FILE__))
6
+ app.icon = File.expand_path('../resources/logo.png', File.dirname(__FILE__))
7
+ app.start
@@ -0,0 +1,41 @@
1
+ module Shirka
2
+
3
+ class App
4
+ include Eventalk
5
+
6
+ attr_accessor :path
7
+
8
+ def initialize
9
+ setup
10
+ init
11
+ end
12
+
13
+ def setup
14
+ end
15
+
16
+ def init
17
+ end
18
+
19
+ def start
20
+ load
21
+ starting
22
+ main_controller = MainController.new self
23
+ main_controller.start
24
+ started
25
+ end
26
+
27
+ def starting
28
+ end
29
+
30
+ def started
31
+ end
32
+
33
+ def load
34
+ Dir[path + "/**/{view,controller}.rb"].each do |file|
35
+ require_relative file
36
+ end
37
+ end
38
+
39
+ end
40
+
41
+ end
@@ -0,0 +1,31 @@
1
+ module Shirka
2
+
3
+ class Components
4
+ def initialize
5
+ @slot_components = Hash.new {|h,k| h[k] = []}
6
+ @component_slot = {}
7
+ end
8
+
9
+ def add(slot, component)
10
+ @slot_components[slot] << component
11
+ @component_slot[component] = slot
12
+ end
13
+
14
+ def slots
15
+ @slot_components[slot].keys
16
+ end
17
+
18
+ def components
19
+ @component_slot[component].keys
20
+ end
21
+
22
+ def components_by_slot(slot)
23
+ @slot_components[slot]
24
+ end
25
+
26
+ def slot_by_component(component)
27
+ @component_slot[component]
28
+ end
29
+ end
30
+
31
+ end
@@ -0,0 +1,57 @@
1
+ module Shirka
2
+ class Controller
3
+ include Eventalk
4
+
5
+ attr_writer :view
6
+ attr_reader :components
7
+ attr_reader :app
8
+ attr_accessor :parent
9
+ attr_reader :data
10
+
11
+ def initialize(app, parent=nil, data=nil)
12
+ @app = app
13
+ @parent = parent
14
+ @components = Components.new
15
+ @data = data
16
+ watch @app
17
+ init data
18
+ end
19
+
20
+ def init(data)
21
+ end
22
+
23
+ def view_class
24
+ name = self.class.to_s.sub(/Controller$/, 'View')
25
+ Object.const_get name rescue ::Shirka::View
26
+ end
27
+
28
+ def view
29
+ @view ||= view_class.new self
30
+ end
31
+
32
+ def item_controller_class
33
+ name = self.class.to_s.sub(/Controller$/, 'ItemController')
34
+ Object.const_get name rescue ::Shirka::Controller
35
+ end
36
+
37
+ def add_item(text='', controller_class=nil)
38
+ controller_class ||= item_controller_class
39
+ comp = controller_class.new app, self, text
40
+ add_component comp
41
+ end
42
+
43
+ def add_component(component, slot=nil)
44
+ component.parent = self
45
+ @components.add slot, component
46
+ component.on_component_adding
47
+ view.on_view_adding component.view, slot
48
+ end
49
+
50
+ def on_component_adding(data=nil)
51
+ end
52
+
53
+ def on_component_added(data=nil)
54
+ end
55
+
56
+ end
57
+ end
@@ -0,0 +1,41 @@
1
+ require 'ostruct'
2
+
3
+ module Shirka
4
+ module Eventalk
5
+ def fire(signal, msg=nil, receivers=nil)
6
+ if receivers.nil?
7
+ receivers = watchers
8
+ else
9
+ receivers = Array(receivers)
10
+ end
11
+
12
+ receivers.each do |w|
13
+ method = "on_#{signal}".to_sym
14
+ if w.respond_to? method
15
+ e = OpenStruct.new
16
+ e.signal = signal
17
+ e.msg = msg
18
+ e.sender = self
19
+ w.send method, e
20
+ end
21
+ end
22
+ end
23
+
24
+ def forward(event, receivers=nil)
25
+ fire event.signal, event.msg, receivers
26
+ end
27
+
28
+ def watchers
29
+ @watchers ||= []
30
+ end
31
+
32
+ def add_watcher(obj)
33
+ @watchers ||= []
34
+ @watchers << obj
35
+ end
36
+
37
+ def watch(obj)
38
+ obj.add_watcher self
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,4 @@
1
+ require 'Qt4'
2
+
3
+ path = File.expand_path('./qt', File.dirname(__FILE__))
4
+ Dir["#{path}/**/*.rb"].each { |file| require_relative file }
@@ -0,0 +1,21 @@
1
+ module Shirka
2
+ module Qt
3
+
4
+ class App < ::Shirka::App
5
+ def setup
6
+ @qt_app = ::Qt::Application.new []
7
+ end
8
+
9
+ def started
10
+ fire :starting
11
+ fire :started
12
+ @qt_app.exec
13
+ end
14
+
15
+ def icon=(path)
16
+ @qt_app.setWindowIcon ::Qt::Icon.new(path)
17
+ end
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,38 @@
1
+ module Shirka
2
+ module Qt
3
+
4
+ class ListController < ::Shirka::Controller
5
+ def init(data)
6
+ @item_ids = {}
7
+ data.each { |i| add_item i }
8
+ end
9
+
10
+ def add_item(text='', controller_class=nil)
11
+ controller_class ||= item_controller_class
12
+ comp = controller_class.new app, self, text
13
+ add_component comp
14
+ end
15
+
16
+ def view_class
17
+ name = self.class.to_s.sub(/Controller$/, 'View')
18
+ Object.const_get name rescue ::Shirka::Qt::ListView
19
+ end
20
+
21
+ def item_controller_class
22
+ name = self.class.to_s.sub(/Controller$/, 'ItemController')
23
+ Object.const_get name rescue ::Shirka::Qt::ListItemController
24
+ end
25
+
26
+ def on_double_clicked(id)
27
+ controller = @item_ids[id]
28
+ controller.on_double_clicked
29
+ end
30
+
31
+ def on_component_added(component, data=nil)
32
+ id = data
33
+ @item_ids[id] = component
34
+ end
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,23 @@
1
+ module Shirka
2
+ module Qt
3
+
4
+ class ListView < ::Shirka::View
5
+ def widget_class
6
+ ::Qt::ListWidget
7
+ end
8
+
9
+ def build(widget)
10
+ #Double click event
11
+ widget.connect(SIGNAL "itemDoubleClicked(QListWidgetItem*)") do |item|
12
+ controller.on_double_clicked item.object_id
13
+ end
14
+ end
15
+
16
+ def on_view_adding(view, slot=nil)
17
+ widget.addItem view.widget
18
+ widget.scrollToBottom
19
+ end
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,31 @@
1
+ module Shirka
2
+ module Qt
3
+
4
+ class ListItemController < ::Shirka::Controller
5
+ def init(data)
6
+ @text = data.to_s
7
+ end
8
+
9
+ def view_class
10
+ name = self.class.to_s.sub(/Controller$/, 'View')
11
+ Object.const_get name rescue ::Shirka::Qt::ListItemView
12
+ end
13
+
14
+ def view
15
+ @view ||= view_class.new self, @text
16
+ end
17
+
18
+ def id
19
+ view.id
20
+ end
21
+
22
+ def on_component_adding(data=nil)
23
+ parent.on_component_added self, id
24
+ end
25
+
26
+ def on_double_clicked
27
+ end
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,19 @@
1
+ module Shirka
2
+ module Qt
3
+
4
+ class ListItemView < ::Shirka::View
5
+ def widget_class
6
+ ::Qt::ListWidgetItem
7
+ end
8
+
9
+ def build(widget)
10
+ widget.setText data
11
+ end
12
+
13
+ def id
14
+ widget.object_id
15
+ end
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,8 @@
1
+ module Shirka
2
+ module Qt
3
+
4
+ class MultipanelController < ::Shirka::Controller
5
+ end
6
+
7
+ end
8
+ end
@@ -0,0 +1,31 @@
1
+ module Shirka
2
+ module Qt
3
+
4
+ class MultipanelView < ::Shirka::View
5
+ def widget_class
6
+ ::Qt::Widget
7
+ end
8
+
9
+ def build(widget)
10
+ widget.setLayout ::Qt::StackedLayout.new
11
+ end
12
+
13
+ def on_view_adding(view, slot=nil)
14
+ layout = widget.layout
15
+ current_panel = layout.currentWidget
16
+
17
+ unless current_panel.nil?
18
+ layout.removeWidget current_panel
19
+ current_panel.close
20
+ end
21
+
22
+ layout.addWidget view.widget
23
+ layout.update
24
+ widget.show
25
+ rescue
26
+ puts $!
27
+ end
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,16 @@
1
+ module Shirka
2
+ module Qt
3
+
4
+ class TabView < ::Shirka::View
5
+ def widget_class
6
+ Qt::TabWidget
7
+ end
8
+
9
+ def on_view_adding(view, slot=nil)
10
+ widget.addTab view.widget, view.label
11
+ end
12
+
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,40 @@
1
+ module Shirka
2
+ module Qt
3
+
4
+ class TreeController < ::Shirka::Controller
5
+ def init(data)
6
+ @item_ids = {}
7
+ data.each { |i| add_item i } if data.respond_to? :each
8
+ end
9
+
10
+ def view_class
11
+ name = self.class.to_s.sub(/Controller$/, 'View')
12
+ Object.const_get name rescue ::Shirka::Qt::TreeView
13
+ end
14
+
15
+
16
+ def item_controller_class
17
+ name = self.class.to_s.sub(/Controller$/, 'ItemController')
18
+ Object.const_get name rescue ::Shirka::Qt::TreeItemController
19
+ end
20
+
21
+ def add_item(text='', controller_class=nil)
22
+ controller_class ||= item_controller_class
23
+ comp = controller_class.new app, self, {text: text, root: self}
24
+ add_component comp
25
+ end
26
+
27
+ def on_double_clicked(id)
28
+ controller = @item_ids[id]
29
+ controller.on_double_clicked
30
+ end
31
+
32
+ def on_component_added(component, data=nil)
33
+ id = data
34
+ @item_ids[id] = component
35
+ watch component
36
+ end
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,26 @@
1
+ module Shirka
2
+ module Qt
3
+
4
+ class TreeView < ::Shirka::View
5
+ def widget_class
6
+ ::Qt::TreeWidget
7
+ end
8
+
9
+ def build(widget)
10
+ #Double click event
11
+ widget.connect(SIGNAL "itemDoubleClicked(QTreeWidgetItem*,int)") do |item, column|
12
+ controller.on_double_clicked item.object_id
13
+ end
14
+ end
15
+
16
+ def style(widget)
17
+ widget.header.hide
18
+ end
19
+
20
+ def on_view_adding(view, slot=nil)
21
+ widget.addTopLevelItem view.widget
22
+ end
23
+ end
24
+
25
+ end
26
+ end