MittensUi
This is a small vertical stacking GUI toolkit inspired by Ruby Shoes and built on top of the GTK Ruby library. This isn't meant to be a full wrapper around GTK. The goal of this project is make creating GUIs in Ruby dead simple without the UI framework/library getting your way.
Installation
Add this line to your application's Gemfile:
gem 'mittens_ui'
And then execute:
$ bundle install
Or install it yourself as:
$ gem install mittens_ui
Usage
require 'mittens_ui'
= {
name: "contacts",
title: "Contacts",
height: 615,
width: 570,
can_resize: true
}.freeze
MittensUi::Application.Window() do
= { "File": { sub_menus: ["Exit"] } }.freeze
fm = MittensUi::FileMenu.new().render
= MittensUi::Button.new(title: "Add", icon: :add_green)
= MittensUi::Button.new(title: "Remove", icon: :remove_red)
= [ , ]
MittensUi::HeaderBar.new(.map(&:render), title: "Contacts", position: :left).render
= {
headers: ["Name", "Address", "Phone #"],
data: [
[ "John Appleseed", "123 abc st.", "111-555-3333"],
[ "Jane Doe", "122 abc st.", "111-555-4444" ],
[ "Bobby Jones", "434 bfef ave.", "442-333-1342"],
[ "Sara Akigawa", "777 tyo ave.", "932-333-1325"],
],
top: 20
}
contacts_table = MittensUi::TableView.new().render
# FORM
MittensUi::Label.new("Add Contact", top: 30).render
name_tb = MittensUi::Textbox.new(can_edit: true, placeholder: "Name...")
addr_tb = MittensUi::Textbox.new(can_edit: true, placeholder: "Address...")
phne_tb = MittensUi::Textbox.new(can_edit: true, placeholder: "Phone #...")
tb_list = [name_tb, addr_tb, phne_tb].map(&:render).freeze
MittensUi::HBox.new(tb_list, spacing: 10).render
# ACTONS
.click do |_b|
if tb_list.map { |tb| tb.text.length > 0 }.all?
contacts_table.add(tb_list.map {|tb| tb.text })
tb_list.map {|tb| tb.clear }
end
end
.click do |btn|
removed = contacts_table.remove_selected
if removed.size > 0
MittensUi::Notify.new("#{removed[0]} was removed.", type: :info).render
end
end
contacts_table.row_clicked do |data|
msg = <<~MSG
Contact Info:
Name: #{data[0]}
Address: #{data[1]}
Phone #: #{data[2]}
MSG
MittensUi::Alert.new(msg).render
end
fm.exit do |fm|
MittensUi::Application.exit { print "Exiting App!"}
end
end
Development
Simply fork and clone this repo to your machine, cd into it and run bundle install
.
This does require GTK ruby gem which requires gtk
native dependencies to be complied and installed on your system.
Fedora
Using dnf:
$ sudo dnf install ruby ruby-devel cairo cairo-devel gtk3-devel
Ubuntu
sudo apt install build-essential git sqlite3 libsqlite3-dev lib-gtk-3 libcairo2-dev
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/tuttza/mittens_ui.