Sha256: 5485d6ec6e30ff8c273c4adf702a595db9dfce439c1e7c860b333580f83a97e7

Contents?: true

Size: 1.7 KB

Versions: 16

Compression:

Stored size: 1.7 KB

Contents

require "observer"

#Presents login screen data
class LoginPresenter

  attr_accessor :user_name
  attr_accessor :password
  attr_accessor :status

  def initialize
    @user_name = ""
    @password = ""
    @status = "Logged Out"
  end

  def status=(status)
    @status = status

    #TODO add feature to bind dependent properties to master property (2017-07-25 nested data binding)
    notify_observers("logged_in")
    notify_observers("logged_out")
  end

  def logged_in
    self.status == "Logged In"
  end

  def logged_out
    !self.logged_in
  end

  def login
    self.status = "Logged In"
  end

  def logout
    self.user_name = ""
    self.password = ""
    self.status = "Logged Out"
  end

end

#Login screen
class Login
  include Glimmer

  def launch
    presenter = LoginPresenter.new
    @shell = shell {
      text "Login"
      composite {
        grid_layout 2, false #two columns with differing widths

        label { text "Username:" } # goes in column 1
        text {                     # goes in column 2
          text bind(presenter, :user_name)
          enabled bind(presenter, :logged_out)
        }

        label { text "Password:" }
        text(:password, :border) {
          text bind(presenter, :password)
          enabled bind(presenter, :logged_out)
        }

        label { text "Status:" }
        label { text bind(presenter, :status) }

        button {
          text "Login"
          enabled bind(presenter, :logged_out)
          on_widget_selected { presenter.login }
        }

        button {
          text "Logout"
          enabled bind(presenter, :logged_in)
          on_widget_selected { presenter.logout }
        }
      }
    }
    @shell.open
  end
end

Login.new.launch

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
glimmer-dsl-opal-0.7.4 lib/glimmer-dsl-opal/samples/elaborate/login.rb
glimmer-dsl-opal-0.7.3 lib/glimmer-dsl-opal/samples/elaborate/login.rb
glimmer-dsl-opal-0.7.2 lib/glimmer-dsl-opal/samples/elaborate/login.rb
glimmer-dsl-opal-0.7.1 lib/glimmer-dsl-opal/samples/elaborate/login.rb
glimmer-dsl-opal-0.7.0 lib/glimmer-dsl-opal/samples/elaborate/login.rb
glimmer-dsl-opal-0.6.1 lib/glimmer-dsl-opal/samples/elaborate/login.rb
glimmer-dsl-opal-0.6.0 lib/glimmer-dsl-opal/samples/elaborate/login.rb
glimmer-dsl-opal-0.5.1 lib/glimmer-dsl-opal/samples/elaborate/login.rb
glimmer-dsl-opal-0.5.0 lib/glimmer-dsl-opal/samples/elaborate/login.rb
glimmer-dsl-opal-0.4.0 lib/glimmer-dsl-opal/samples/elaborate/login.rb
glimmer-dsl-opal-0.3.0 lib/glimmer-dsl-opal/samples/elaborate/login.rb
glimmer-dsl-opal-0.2.0 lib/glimmer-dsl-opal/samples/elaborate/login.rb
glimmer-dsl-opal-0.1.0 lib/samples/elaborate/login.rb
glimmer-dsl-opal-0.0.9 lib/samples/elaborate/login.rb
glimmer-dsl-opal-0.0.8 lib/samples/elaborate/login.rb
glimmer-dsl-opal-0.0.7 lib/samples/elaborate/login.rb