Project

mittens_ui

0.0
No release in over a year
GUI Toolkit!
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

>= 0
 Project Readme

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.

alt_text

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'

app_options = {
  name: "contacts",
  title: "Contacts",
  height: 615,
  width: 570,
  can_resize: true
}.freeze


MittensUi::Application.Window(app_options) do
  file_menus = { "File": { sub_menus: ["Exit"] } }.freeze
  
  fm = MittensUi::FileMenu.new(file_menus).render

  add_contact_button    = MittensUi::Button.new(title: "Add", icon: :add_green)
  remove_contact_button = MittensUi::Button.new(title: "Remove", icon: :remove_red)

  buttons = [ add_contact_button, remove_contact_button ]

  MittensUi::HeaderBar.new(buttons.map(&:render), title: "Contacts", position: :left).render

  table_view_options = {
    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(table_view_options).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
  add_contact_button.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

  remove_contact_button.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.

After cloning the MittensUi repo, all new PRs should be done against the developmentbranch, if approved will be merged in to the mainbranch.

So:

git checkout development 
git checkout -b dev/your_feature_idea