Commit c77f6db

mo khan <mo@mokhan.ca>
2014-03-18 03:33:37
connect signals on text buffer to presenter.
1 parent 7fb2877
lib/presentation/presenters/application_shell_presenter.rb
@@ -11,7 +11,25 @@ class ApplicationShellPresenter
     @view.show_all
   end
 
+  def backspace
+  end
+
+  def changed(text)
+    return if @updating
+    update do
+      @view.display(text.reverse.upcase)
+    end
+  end
+
   def shutdown
     Publish.event(:halt)
   end
+
+  private
+
+  def update
+    @updating = true
+    yield
+    @updating = false
+  end
 end
lib/presentation/windows/application_shell.rb
@@ -18,6 +18,17 @@ class ApplicationShell
     @presenter = presenter
     @window = builder.get_object('window')
     @menu_bar = builder.get_object('menubar')
+    @text_view = builder.get_object('text_view')
+    builder.connect_signals do |signal|
+      Proc.new { presenter.public_send(signal) }
+    end
+    @text_view.buffer.signal_connect("changed") do |buffer|
+      @presenter.changed(buffer.text)
+    end
     Build.menu_bar.with(File.menu(@event_aggregator)).add_to(self)
   end
+
+  def display(text)
+    @text_view.buffer.set_text(text)
+  end
 end
lib/presentation/windows/shell.xml
@@ -34,6 +34,19 @@
                 <property name="can_focus">True</property>
                 <property name="left_margin">2</property>
                 <property name="right_margin">2</property>
+                <signal name="backspace" handler="backspace" swapped="no"/>
+                <signal name="copy-clipboard" handler="copy-clipboard" swapped="no"/>
+                <signal name="cut-clipboard" handler="cut-clipboard" swapped="no"/>
+                <signal name="delete-from-cursor" handler="delete-from-cursor" swapped="no"/>
+                <signal name="insert-at-cursor" handler="insert-at-cursor" swapped="no"/>
+                <signal name="move-cursor" handler="move-cursor" swapped="no"/>
+                <signal name="paste-clipboard" handler="paste-clipboard" swapped="no"/>
+                <signal name="populate-popup" handler="populate-popup" swapped="no"/>
+                <signal name="preedit-changed" handler="preedit-changed" swapped="no"/>
+                <signal name="select-all" handler="select-all" swapped="no"/>
+                <signal name="set-anchor" handler="set-anchor" swapped="no"/>
+                <signal name="toggle-cursor-visible" handler="toggle-cursor-visible" swapped="no"/>
+                <signal name="toggle-overwrite" handler="toggle-overwrite" swapped="no"/>
               </object>
             </child>
           </object>
lib/presentation/application_controller.rb
@@ -8,7 +8,6 @@ class ApplicationController
     view = presenter.view
     view.builder = create_builder_for(presenter_key.to_s)
     view.bind_to(presenter)
-    view.builder.connect_signals { |signal| Proc.new { presenter.public_send(signal) } }
     presenter.present
   end