[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