[macruby-changes] [1544] MacRuby/trunk/sample-macruby/HotCocoa

source_changes at macosforge.org source_changes at macosforge.org
Wed May 6 14:02:24 PDT 2009


Revision: 1544
          http://trac.macosforge.org/projects/ruby/changeset/1544
Author:   rich at infoether.com
Date:     2009-05-06 14:02:23 -0700 (Wed, 06 May 2009)
Log Message:
-----------
mvc app, not yet working

Added Paths:
-----------
    MacRuby/trunk/sample-macruby/HotCocoa/mvc/
    MacRuby/trunk/sample-macruby/HotCocoa/mvc/Rakefile
    MacRuby/trunk/sample-macruby/HotCocoa/mvc/config/
    MacRuby/trunk/sample-macruby/HotCocoa/mvc/config/build.yml
    MacRuby/trunk/sample-macruby/HotCocoa/mvc/lib/
    MacRuby/trunk/sample-macruby/HotCocoa/mvc/lib/application.rb
    MacRuby/trunk/sample-macruby/HotCocoa/mvc/lib/controllers/
    MacRuby/trunk/sample-macruby/HotCocoa/mvc/lib/menu.rb
    MacRuby/trunk/sample-macruby/HotCocoa/mvc/lib/mvc.rb
    MacRuby/trunk/sample-macruby/HotCocoa/mvc/lib/views/
    MacRuby/trunk/sample-macruby/HotCocoa/mvc/resources/
    MacRuby/trunk/sample-macruby/HotCocoa/mvc/resources/HotCocoa.icns

Added: MacRuby/trunk/sample-macruby/HotCocoa/mvc/Rakefile
===================================================================
--- MacRuby/trunk/sample-macruby/HotCocoa/mvc/Rakefile	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/HotCocoa/mvc/Rakefile	2009-05-06 21:02:23 UTC (rev 1544)
@@ -0,0 +1,4 @@
+require 'hotcocoa/application_builder'
+require 'hotcocoa/standard_rake_tasks'
+
+task :default => [:run]
\ No newline at end of file

Added: MacRuby/trunk/sample-macruby/HotCocoa/mvc/config/build.yml
===================================================================
--- MacRuby/trunk/sample-macruby/HotCocoa/mvc/config/build.yml	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/HotCocoa/mvc/config/build.yml	2009-05-06 21:02:23 UTC (rev 1544)
@@ -0,0 +1,8 @@
+name: Mvc
+load: lib/application.rb
+version: "1.0"
+icon: resources/HotCocoa.icns
+resources:
+  - resources/**/*.*
+sources: 
+  - lib/**/*.rb

Added: MacRuby/trunk/sample-macruby/HotCocoa/mvc/lib/application.rb
===================================================================
--- MacRuby/trunk/sample-macruby/HotCocoa/mvc/lib/application.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/HotCocoa/mvc/lib/application.rb	2009-05-06 21:02:23 UTC (rev 1544)
@@ -0,0 +1,54 @@
+require 'hotcocoa'
+require 'lib/mvc'
+
+class Application < HotCocoaApplication
+  
+end
+
+
+class ApplicationController < HotCocoaApplicationController
+  #def switch_views
+  #  main_window.view = my_other_view
+  #end
+end
+
+class ApplicationWindow < HotCocoaWindow
+  
+end
+
+
+class ApplicationView < HotCocoaView
+  
+  controller :application_controller
+  
+  options :layout => {:expand => [:width, :height]}
+  
+  def render 
+    self << my_button
+  end
+
+  def my_button
+    @my_button ||= button(:title => "Switch")#, :on_action => controller.method(:switch_views))
+  end
+
+end
+
+# class MyController < HotCocoaController
+#   def switch_back
+#     window.view = application_view
+#   end
+# end
+# 
+# class MyOtherView < HotCocoaView
+#   controller :my_controller
+# 
+#   def render 
+#     view << my_button
+#   end
+# 
+#   def my_button
+#     @my_button ||= button(:title => "Switch", :on_action => :switch_back)
+#   end
+# end
+
+Application.new.start
\ No newline at end of file

Added: MacRuby/trunk/sample-macruby/HotCocoa/mvc/lib/menu.rb
===================================================================
--- MacRuby/trunk/sample-macruby/HotCocoa/mvc/lib/menu.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/HotCocoa/mvc/lib/menu.rb	2009-05-06 21:02:23 UTC (rev 1544)
@@ -0,0 +1,32 @@
+module HotCocoa
+  def application_menu
+    menu do |main|
+      main.submenu :apple do |apple|
+        apple.item :about, :title => "About #{NSApp.name}"
+        apple.separator
+        apple.item :preferences, :key => ","
+        apple.separator
+        apple.submenu :services
+        apple.separator
+        apple.item :hide, :title => "Hide #{NSApp.name}", :key => "h"
+        apple.item :hide_others, :title => "Hide Others", :key => "h", :modifiers => [:command, :alt]
+        apple.item :show_all, :title => "Show All"
+        apple.separator
+        apple.item :quit, :title => "Quit #{NSApp.name}", :key => "q"
+      end
+      main.submenu :file do |file|
+        file.item :new, :key => "n"
+        file.item :open, :key => "o"
+      end
+      main.submenu :window do |win|
+        win.item :minimize, :key => "m"
+        win.item :zoom
+        win.separator
+        win.item :bring_all_to_front, :title => "Bring All to Front", :key => "o"
+      end
+      main.submenu :help do |help|
+        help.item :help, :title => "#{NSApp.name} Help"
+      end
+    end
+  end
+end

Added: MacRuby/trunk/sample-macruby/HotCocoa/mvc/lib/mvc.rb
===================================================================
--- MacRuby/trunk/sample-macruby/HotCocoa/mvc/lib/mvc.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/HotCocoa/mvc/lib/mvc.rb	2009-05-06 21:02:23 UTC (rev 1544)
@@ -0,0 +1,155 @@
+require 'hotcocoa'
+
+class String
+  
+  def underscore
+    to_s.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').gsub(/([a-z\d])([A-Z])/,'\1_\2').tr("-", "_").downcase
+  end #unless defined?(:underscore)
+  
+  def camel_case
+    if self !~ /_/ && self =~ /[A-Z]+.*/
+      self
+    else
+      split('_').map{|e| e.capitalize}.join
+    end
+  end #unless defined?(:camel_case)
+end
+
+class HotCocoaApplication
+  attr_accessor :shared_application, :application_controller, :controllers
+  
+  include HotCocoa
+  
+  def self.instance=(instance)
+    @instance = instance
+  end
+  
+  def self.instance
+    @instance
+  end
+  
+  def initialize
+    @controllers = {}
+    @shared_application = application
+    @application_controller = controller(:application_controller)
+    HotCocoaApplication.instance = self
+    shared_application.delegate = application_controller
+  end
+  
+  def start
+    @shared_application.run
+  end
+  
+  def controller(controller_name)
+    controller_class = Object.const_get(controller_name.to_s.camel_case)
+    @controllers[controller_name] ||= controller_class.new(self)
+  end
+  
+end
+
+class HotCocoaController
+  
+  def self.view_instances
+    @view_instances ||= {}
+  end
+  
+  attr_reader :application
+  
+  def initialize(application)
+    @application = application
+  end
+  
+  def main_window
+    @application.application_controller.main_window
+  end
+
+end
+
+class HotCocoaApplicationController < HotCocoaController
+  
+  def initialize(application)
+    super(application)
+    @main_window = ApplicationWindow.new(self)
+  end
+  
+  def main_window
+    @main_window
+  end
+  
+  # help menu item
+  def on_help(menu)
+  end
+
+  # This is commented out, so the minimize menu item is disabled
+  def on_minimize(menu)
+  end
+
+  # window/zoom
+  def on_zoom(menu)
+  end
+
+  # window/bring_all_to_front
+  def on_bring_all_to_front(menu)
+  end
+
+end
+
+class HotCocoaWindow
+  
+  attr_reader :application_controller, :main_window
+  
+  include HotCocoa
+  
+  def initialize(application_controller)
+    @application_controller = application_controller
+    render
+  end
+  
+  def render
+    @main_window = window(:title => title, :view => application_controller.application_view)
+  end
+  
+  def title
+    "My Application"
+  end
+  
+end
+
+class HotCocoaView < NSView
+  
+  module ClassMethods
+    def controller(name=nil)
+      if name
+        @name = name
+      else
+        @name || :application_controller
+      end
+    end
+    def options(options=nil)
+      @options = options if options
+    end
+  end
+  
+  def self.inherited(klass)
+    klass.extend(ClassMethods)
+    klass.send(:include, HotCocoa::Behaviors)
+    class_name = klass.name.underscore
+    HotCocoaController.class_eval %{
+      def #{class_name}
+        view = HotCocoaController.view_instances[:#{class_name}] ||= #{klass.name}.alloc.initWithFrame([0,0,0,0])
+        puts view.inspect
+        view
+      end
+    }, __FILE__, __LINE__
+  end
+  
+  attr_reader :controller
+
+  def initialize
+    @controller = HotCocoaApplication.instance.controller(self.class.controller)
+    render
+  end
+  
+end
+
+

Added: MacRuby/trunk/sample-macruby/HotCocoa/mvc/resources/HotCocoa.icns
===================================================================
(Binary files differ)


Property changes on: MacRuby/trunk/sample-macruby/HotCocoa/mvc/resources/HotCocoa.icns
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090506/bea6a96c/attachment-0001.html>


More information about the macruby-changes mailing list