[Ironruby-core] A tiny DSL to build Windows::Forms menus from IronRuby - review wanted

Thibaut Barrère thibaut.barrere at gmail.com
Fri Feb 27 17:45:34 EST 2009


After chatting with Ivan, I created some code to build Forms too:

form = Magic.build do
  form(:text => "Hello") do
    flow_layout_panel(:dock => DockStyle.fill) do
      button(:text => "Click me!", :click => lambda {
MessageBox.Show("Hello") })
      button(:text => "Quit", :click => lambda { Application.Exit })
    end
  end
end
*
*

I use method_missing and transform the method name from flow_layout_panel to
FlowLayoutPanel class etc.

After using these a bit, I'm pretty sure we'll end up with some community
project sharing that kind of stuff, at some point.

Nb: I hope it's not OT for the core list - or is it time to create a user
group ?

cheers,

-- Thibaut

On Fri, Feb 27, 2009 at 8:54 PM, Thibaut Barrère
<thibaut.barrere at gmail.com>wrote:

> Hi,
>
>> I think it looks very nice. It’s a shame that you have to resort to direct
>> lambda’s since you can’t pass two lambda’s in, but otherwise it’s a nice
>> visual representation of the menu, in code.
>>
> thanks for the feedback, appreciated!
>
> I just realised that I can also use this (without modifying the
> implementation):
>
>     item("&PowerBlade").click { MessageBox.Show("Powerblades are
> amazing...") }
>
> instead of
>
>     item("&PowerBlade", lambda { MessageBox.Show("Powerblades are
> amazing...") }
>
> same effect, slightly more readable though.
>
> cheers, and I shall move on to long running operations.
>
> -- Thibaut
>
>
>>
>>
>> JD
>>
>>
>>
>> *From:* ironruby-core-bounces at rubyforge.org [mailto:
>> ironruby-core-bounces at rubyforge.org] *On Behalf Of *Thibaut Barrère
>> *Sent:* Thursday, February 26, 2009 2:26 PM
>> *To:* ironruby-core
>> *Subject:* [Ironruby-core] A tiny DSL to build Windows::Forms menus from
>> IronRuby - review wanted
>>
>>
>>
>> Hi,
>>
>>
>>
>> I started working on UI bits, both for Ivan book and because my customers
>> are interested (and well - because it's fun, too!). First topic is how to
>> build menus more easily (next one will be long running operations and how to
>> sugar them).
>>
>>
>>
>> I'd be interested to get your opinion on both the DSL syntax (below for
>> quick read or here<http://github.com/thbar/ironruby-labs/blob/66b45fd6f13d2b3c8aa8021ee3f58303a9bb7eae/ui/003_dsl_menu.rb> on
>> github) and the implementation<http://github.com/thbar/ironruby-labs/blob/66b45fd6f13d2b3c8aa8021ee3f58303a9bb7eae/ui/menu_builder.rb>
>> .
>>
>>
>>
>> form.menu = MainMenu.build do
>>   item("&File") {
>>     item("&New") {
>>       item("Spreadsheet")
>>       item("Document")
>>     }
>>     item "&Quit", lambda { Application.Exit }
>>   }
>>   item("&Tools") {
>>
>>  item "&PowerBlade", lambda { MessageBox.Show("Powerblades are amazing...") }
>>     item "&Scissors"
>>   }
>> end
>>
>>
>>
>> what do you think ?
>>
>>
>>
>> cheers,
>>
>>
>>
>> Thibaut Barrère
>>
>> --
>> LoGeek
>> [blog] http://evolvingworker.com - tools for a better day
>> [blog] http://blog.logeek.fr - about writing software
>>
>> _______________________________________________
>> Ironruby-core mailing list
>> Ironruby-core at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/ironruby-core
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/ironruby-core/attachments/20090227/43d9252c/attachment-0001.html>


More information about the Ironruby-core mailing list