lacci 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/Gemfile.lock +8 -1
- data/lib/lacci/scarpe_cli.rb +2 -1
- data/lib/lacci/scarpe_core.rb +2 -1
- data/lib/lacci/version.rb +1 -1
- data/lib/scarpe/niente/app.rb +23 -0
- data/lib/scarpe/niente/display_service.rb +62 -0
- data/lib/scarpe/niente/drawable.rb +57 -0
- data/lib/scarpe/niente/logger.rb +29 -0
- data/lib/scarpe/niente/shoes_spec.rb +87 -0
- data/lib/scarpe/niente.rb +20 -0
- data/lib/shoes/app.rb +88 -43
- data/lib/shoes/background.rb +2 -2
- data/lib/shoes/border.rb +2 -2
- data/lib/shoes/builtins.rb +63 -0
- data/lib/shoes/changelog.rb +52 -0
- data/lib/shoes/colors.rb +3 -1
- data/lib/shoes/constants.rb +19 -1
- data/lib/shoes/display_service.rb +39 -16
- data/lib/shoes/download.rb +2 -2
- data/lib/shoes/drawable.rb +380 -0
- data/lib/shoes/drawables/arc.rb +49 -0
- data/lib/shoes/drawables/arrow.rb +41 -0
- data/lib/shoes/drawables/button.rb +73 -0
- data/lib/shoes/{widgets → drawables}/check.rb +5 -4
- data/lib/shoes/{widgets → drawables}/document_root.rb +3 -3
- data/lib/shoes/{widgets → drawables}/edit_box.rb +6 -6
- data/lib/shoes/{widgets → drawables}/edit_line.rb +6 -6
- data/lib/shoes/{widgets → drawables}/flow.rb +6 -6
- data/lib/shoes/{widgets → drawables}/image.rb +6 -6
- data/lib/shoes/{widgets → drawables}/line.rb +7 -5
- data/lib/shoes/drawables/link.rb +34 -0
- data/lib/shoes/drawables/list_box.rb +56 -0
- data/lib/shoes/drawables/para.rb +118 -0
- data/lib/shoes/drawables/progress.rb +14 -0
- data/lib/shoes/drawables/radio.rb +33 -0
- data/lib/shoes/drawables/rect.rb +17 -0
- data/lib/shoes/{widgets → drawables}/shape.rb +6 -7
- data/lib/shoes/{widgets → drawables}/slot.rb +32 -20
- data/lib/shoes/{widgets → drawables}/span.rb +8 -7
- data/lib/shoes/{widgets → drawables}/stack.rb +6 -4
- data/lib/shoes/drawables/star.rb +50 -0
- data/lib/shoes/drawables/subscription_item.rb +93 -0
- data/lib/shoes/drawables/text_drawable.rb +63 -0
- data/lib/shoes/drawables/video.rb +16 -0
- data/lib/shoes/drawables/widget.rb +69 -0
- data/lib/shoes/drawables.rb +31 -0
- data/lib/shoes/errors.rb +28 -0
- data/lib/shoes/log.rb +2 -2
- data/lib/shoes/ruby_extensions.rb +15 -0
- data/lib/shoes/spacing.rb +2 -2
- data/lib/shoes-spec.rb +93 -0
- data/lib/shoes.rb +27 -7
- metadata +55 -28
- data/lib/shoes/widget.rb +0 -218
- data/lib/shoes/widgets/alert.rb +0 -19
- data/lib/shoes/widgets/arc.rb +0 -51
- data/lib/shoes/widgets/button.rb +0 -35
- data/lib/shoes/widgets/font.rb +0 -14
- data/lib/shoes/widgets/link.rb +0 -25
- data/lib/shoes/widgets/list_box.rb +0 -25
- data/lib/shoes/widgets/para.rb +0 -68
- data/lib/shoes/widgets/radio.rb +0 -35
- data/lib/shoes/widgets/star.rb +0 -44
- data/lib/shoes/widgets/subscription_item.rb +0 -60
- data/lib/shoes/widgets/text_widget.rb +0 -51
- data/lib/shoes/widgets/video.rb +0 -15
- data/lib/shoes/widgets.rb +0 -29
    
        data/lib/shoes.rb
    CHANGED
    
    | @@ -12,38 +12,53 @@ if RUBY_VERSION[0..2] < "3.2" | |
| 12 12 | 
             
              exit(-1)
         | 
| 13 13 | 
             
            end
         | 
| 14 14 |  | 
| 15 | 
            -
             | 
| 15 | 
            +
            class Shoes; end
         | 
| 16 16 | 
             
            class Shoes::Error < StandardError; end
         | 
| 17 | 
            +
            require_relative "shoes/errors"
         | 
| 17 18 |  | 
| 18 19 | 
             
            require_relative "shoes/constants"
         | 
| 20 | 
            +
            require_relative "shoes/ruby_extensions"
         | 
| 19 21 |  | 
| 20 22 | 
             
            # Shoes adds some top-level methods and constants that can be used everywhere. Kernel is where they go.
         | 
| 21 23 | 
             
            module Kernel
         | 
| 22 24 | 
             
              include Shoes::Constants
         | 
| 23 25 | 
             
            end
         | 
| 24 26 |  | 
| 25 | 
            -
            require_relative "shoes/log"
         | 
| 26 27 | 
             
            require_relative "shoes/display_service"
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            # Pre-declare classes that get referenced outside their own require file
         | 
| 30 | 
            +
            class Shoes::Drawable < Shoes::Linkable; end
         | 
| 31 | 
            +
            class Shoes::Slot < Shoes::Drawable; end
         | 
| 32 | 
            +
            class Shoes::Widget < Shoes::Slot; end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            require_relative "shoes/log"
         | 
| 27 35 | 
             
            require_relative "shoes/colors"
         | 
| 28 36 |  | 
| 37 | 
            +
            require_relative "shoes/builtins"
         | 
| 38 | 
            +
             | 
| 29 39 | 
             
            require_relative "shoes/background"
         | 
| 30 40 | 
             
            require_relative "shoes/border"
         | 
| 31 41 | 
             
            require_relative "shoes/spacing"
         | 
| 32 42 |  | 
| 33 | 
            -
            require_relative "shoes/ | 
| 43 | 
            +
            require_relative "shoes/drawable"
         | 
| 34 44 | 
             
            require_relative "shoes/app"
         | 
| 35 | 
            -
            require_relative "shoes/ | 
| 45 | 
            +
            require_relative "shoes/drawables"
         | 
| 36 46 |  | 
| 37 47 | 
             
            require_relative "shoes/download"
         | 
| 38 48 |  | 
| 49 | 
            +
            # No easy way to tell at this point whether
         | 
| 50 | 
            +
            # we will later load Shoes-Spec code, e.g.
         | 
| 51 | 
            +
            # by running a segmented app with test code.
         | 
| 52 | 
            +
            require_relative "shoes-spec"
         | 
| 53 | 
            +
             | 
| 39 54 | 
             
            # The module containing Shoes in all its glory.
         | 
| 40 55 | 
             
            # Shoes is a platform-independent GUI library, designed to create
         | 
| 41 56 | 
             
            # small visual applications in Ruby.
         | 
| 42 57 | 
             
            #
         | 
| 43 | 
            -
             | 
| 58 | 
            +
            class Shoes
         | 
| 44 59 | 
             
              class << self
         | 
| 45 60 | 
             
                # Creates a Shoes app with a new window. The block parameter is used to create
         | 
| 46 | 
            -
                #  | 
| 61 | 
            +
                # drawables and set up handlers. Arguments are passed to Shoes::App.new internally.
         | 
| 47 62 | 
             
                #
         | 
| 48 63 | 
             
                # @incompatibility In Shoes3, this method will return normally.
         | 
| 49 64 | 
             
                #   In Scarpe, after the block is executed, the method will not return and Scarpe
         | 
| @@ -81,11 +96,16 @@ module Shoes | |
| 81 96 | 
             
                # more loaders, a Lacci-based display library can accept new file formats as
         | 
| 82 97 | 
             
                # well, not just raw Shoes .rb files.
         | 
| 83 98 | 
             
                #
         | 
| 84 | 
            -
                # @param  | 
| 99 | 
            +
                # @param relative_path [String] The current-dir-relative path to the file
         | 
| 85 100 | 
             
                # @return [void]
         | 
| 86 101 | 
             
                # @see Shoes.add_file_loader
         | 
| 87 102 | 
             
                def run_app(relative_path)
         | 
| 88 103 | 
             
                  path = File.expand_path relative_path
         | 
| 104 | 
            +
                  dir = File.dirname(path)
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                  # Shoes assumes we're starting from the app code's path
         | 
| 107 | 
            +
                  Dir.chdir(dir)
         | 
| 108 | 
            +
             | 
| 89 109 | 
             
                  loaded = false
         | 
| 90 110 | 
             
                  file_loaders.each do |loader|
         | 
| 91 111 | 
             
                    if loader.call(path)
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: lacci
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.3.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Marco Concetto Rudilosso
         | 
| @@ -9,8 +9,22 @@ authors: | |
| 9 9 | 
             
            autorequire:
         | 
| 10 10 | 
             
            bindir: exe
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2023- | 
| 13 | 
            -
            dependencies: | 
| 12 | 
            +
            date: 2023-11-24 00:00:00.000000000 Z
         | 
| 13 | 
            +
            dependencies:
         | 
| 14 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 15 | 
            +
              name: scarpe-components
         | 
| 16 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 17 | 
            +
                requirements:
         | 
| 18 | 
            +
                - - ">="
         | 
| 19 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 20 | 
            +
                    version: '0'
         | 
| 21 | 
            +
              type: :runtime
         | 
| 22 | 
            +
              prerelease: false
         | 
| 23 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 24 | 
            +
                requirements:
         | 
| 25 | 
            +
                - - ">="
         | 
| 26 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 27 | 
            +
                    version: '0'
         | 
| 14 28 | 
             
            description:
         | 
| 15 29 | 
             
            email:
         | 
| 16 30 | 
             
            - marcoc.r@outlook.com
         | 
| @@ -25,41 +39,54 @@ files: | |
| 25 39 | 
             
            - lib/lacci/scarpe_cli.rb
         | 
| 26 40 | 
             
            - lib/lacci/scarpe_core.rb
         | 
| 27 41 | 
             
            - lib/lacci/version.rb
         | 
| 42 | 
            +
            - lib/scarpe/niente.rb
         | 
| 43 | 
            +
            - lib/scarpe/niente/app.rb
         | 
| 44 | 
            +
            - lib/scarpe/niente/display_service.rb
         | 
| 45 | 
            +
            - lib/scarpe/niente/drawable.rb
         | 
| 46 | 
            +
            - lib/scarpe/niente/logger.rb
         | 
| 47 | 
            +
            - lib/scarpe/niente/shoes_spec.rb
         | 
| 48 | 
            +
            - lib/shoes-spec.rb
         | 
| 28 49 | 
             
            - lib/shoes.rb
         | 
| 29 50 | 
             
            - lib/shoes/app.rb
         | 
| 30 51 | 
             
            - lib/shoes/background.rb
         | 
| 31 52 | 
             
            - lib/shoes/border.rb
         | 
| 53 | 
            +
            - lib/shoes/builtins.rb
         | 
| 54 | 
            +
            - lib/shoes/changelog.rb
         | 
| 32 55 | 
             
            - lib/shoes/colors.rb
         | 
| 33 56 | 
             
            - lib/shoes/constants.rb
         | 
| 34 57 | 
             
            - lib/shoes/display_service.rb
         | 
| 35 58 | 
             
            - lib/shoes/download.rb
         | 
| 59 | 
            +
            - lib/shoes/drawable.rb
         | 
| 60 | 
            +
            - lib/shoes/drawables.rb
         | 
| 61 | 
            +
            - lib/shoes/drawables/arc.rb
         | 
| 62 | 
            +
            - lib/shoes/drawables/arrow.rb
         | 
| 63 | 
            +
            - lib/shoes/drawables/button.rb
         | 
| 64 | 
            +
            - lib/shoes/drawables/check.rb
         | 
| 65 | 
            +
            - lib/shoes/drawables/document_root.rb
         | 
| 66 | 
            +
            - lib/shoes/drawables/edit_box.rb
         | 
| 67 | 
            +
            - lib/shoes/drawables/edit_line.rb
         | 
| 68 | 
            +
            - lib/shoes/drawables/flow.rb
         | 
| 69 | 
            +
            - lib/shoes/drawables/image.rb
         | 
| 70 | 
            +
            - lib/shoes/drawables/line.rb
         | 
| 71 | 
            +
            - lib/shoes/drawables/link.rb
         | 
| 72 | 
            +
            - lib/shoes/drawables/list_box.rb
         | 
| 73 | 
            +
            - lib/shoes/drawables/para.rb
         | 
| 74 | 
            +
            - lib/shoes/drawables/progress.rb
         | 
| 75 | 
            +
            - lib/shoes/drawables/radio.rb
         | 
| 76 | 
            +
            - lib/shoes/drawables/rect.rb
         | 
| 77 | 
            +
            - lib/shoes/drawables/shape.rb
         | 
| 78 | 
            +
            - lib/shoes/drawables/slot.rb
         | 
| 79 | 
            +
            - lib/shoes/drawables/span.rb
         | 
| 80 | 
            +
            - lib/shoes/drawables/stack.rb
         | 
| 81 | 
            +
            - lib/shoes/drawables/star.rb
         | 
| 82 | 
            +
            - lib/shoes/drawables/subscription_item.rb
         | 
| 83 | 
            +
            - lib/shoes/drawables/text_drawable.rb
         | 
| 84 | 
            +
            - lib/shoes/drawables/video.rb
         | 
| 85 | 
            +
            - lib/shoes/drawables/widget.rb
         | 
| 86 | 
            +
            - lib/shoes/errors.rb
         | 
| 36 87 | 
             
            - lib/shoes/log.rb
         | 
| 88 | 
            +
            - lib/shoes/ruby_extensions.rb
         | 
| 37 89 | 
             
            - lib/shoes/spacing.rb
         | 
| 38 | 
            -
            - lib/shoes/widget.rb
         | 
| 39 | 
            -
            - lib/shoes/widgets.rb
         | 
| 40 | 
            -
            - lib/shoes/widgets/alert.rb
         | 
| 41 | 
            -
            - lib/shoes/widgets/arc.rb
         | 
| 42 | 
            -
            - lib/shoes/widgets/button.rb
         | 
| 43 | 
            -
            - lib/shoes/widgets/check.rb
         | 
| 44 | 
            -
            - lib/shoes/widgets/document_root.rb
         | 
| 45 | 
            -
            - lib/shoes/widgets/edit_box.rb
         | 
| 46 | 
            -
            - lib/shoes/widgets/edit_line.rb
         | 
| 47 | 
            -
            - lib/shoes/widgets/flow.rb
         | 
| 48 | 
            -
            - lib/shoes/widgets/font.rb
         | 
| 49 | 
            -
            - lib/shoes/widgets/image.rb
         | 
| 50 | 
            -
            - lib/shoes/widgets/line.rb
         | 
| 51 | 
            -
            - lib/shoes/widgets/link.rb
         | 
| 52 | 
            -
            - lib/shoes/widgets/list_box.rb
         | 
| 53 | 
            -
            - lib/shoes/widgets/para.rb
         | 
| 54 | 
            -
            - lib/shoes/widgets/radio.rb
         | 
| 55 | 
            -
            - lib/shoes/widgets/shape.rb
         | 
| 56 | 
            -
            - lib/shoes/widgets/slot.rb
         | 
| 57 | 
            -
            - lib/shoes/widgets/span.rb
         | 
| 58 | 
            -
            - lib/shoes/widgets/stack.rb
         | 
| 59 | 
            -
            - lib/shoes/widgets/star.rb
         | 
| 60 | 
            -
            - lib/shoes/widgets/subscription_item.rb
         | 
| 61 | 
            -
            - lib/shoes/widgets/text_widget.rb
         | 
| 62 | 
            -
            - lib/shoes/widgets/video.rb
         | 
| 63 90 | 
             
            homepage: https://github.com/scarpe-team/scarpe
         | 
| 64 91 | 
             
            licenses:
         | 
| 65 92 | 
             
            - MIT
         | 
    
        data/lib/shoes/widget.rb
    DELETED
    
    | @@ -1,218 +0,0 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Shoes
         | 
| 4 | 
            -
              # Shoes::Widget
         | 
| 5 | 
            -
              #
         | 
| 6 | 
            -
              # This is the display-service portable Shoes Widget interface. Visible Shoes
         | 
| 7 | 
            -
              # widgets like buttons inherit from this. Compound widgets made of multiple
         | 
| 8 | 
            -
              # different smaller Widgets inherit from it in their various apps or libraries.
         | 
| 9 | 
            -
              # The Shoes Widget helps build a Shoes-side widget tree, with parents and
         | 
| 10 | 
            -
              # children. Any API that applies to all widgets (e.g. remove) should be
         | 
| 11 | 
            -
              # defined here.
         | 
| 12 | 
            -
              #
         | 
| 13 | 
            -
              class Widget < Shoes::Linkable
         | 
| 14 | 
            -
                include Shoes::Log
         | 
| 15 | 
            -
                include Shoes::Colors
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                class << self
         | 
| 18 | 
            -
                  attr_accessor :widget_classes
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                  def inherited(subclass)
         | 
| 21 | 
            -
                    Shoes::Widget.widget_classes ||= []
         | 
| 22 | 
            -
                    Shoes::Widget.widget_classes << subclass
         | 
| 23 | 
            -
                    super
         | 
| 24 | 
            -
                  end
         | 
| 25 | 
            -
             | 
| 26 | 
            -
                  def dsl_name
         | 
| 27 | 
            -
                    n = name.split("::").last.chomp("Widget")
         | 
| 28 | 
            -
                    n.gsub(/(.)([A-Z])/, '\1_\2').downcase
         | 
| 29 | 
            -
                  end
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                  def widget_class_by_name(name)
         | 
| 32 | 
            -
                    widget_classes.detect { |k| k.dsl_name == name.to_s }
         | 
| 33 | 
            -
                  end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                  private
         | 
| 36 | 
            -
             | 
| 37 | 
            -
                  def linkable_properties
         | 
| 38 | 
            -
                    @linkable_properties ||= []
         | 
| 39 | 
            -
                  end
         | 
| 40 | 
            -
             | 
| 41 | 
            -
                  def linkable_properties_hash
         | 
| 42 | 
            -
                    @linkable_properties_hash ||= {}
         | 
| 43 | 
            -
                  end
         | 
| 44 | 
            -
             | 
| 45 | 
            -
                  public
         | 
| 46 | 
            -
             | 
| 47 | 
            -
                  # Display properties in Shoes Linkables are automatically sync'd with the display side objects.
         | 
| 48 | 
            -
                  # TODO: do we want types or other modifiers on specific properties?
         | 
| 49 | 
            -
                  def display_property(name)
         | 
| 50 | 
            -
                    name = name.to_s
         | 
| 51 | 
            -
             | 
| 52 | 
            -
                    return if linkable_properties_hash[name]
         | 
| 53 | 
            -
             | 
| 54 | 
            -
                    linkable_properties << { name: name }
         | 
| 55 | 
            -
                    linkable_properties_hash[name] = true
         | 
| 56 | 
            -
                  end
         | 
| 57 | 
            -
             | 
| 58 | 
            -
                  # Add these names as display properties
         | 
| 59 | 
            -
                  def display_properties(*names)
         | 
| 60 | 
            -
                    names.each { |n| display_property(n) }
         | 
| 61 | 
            -
                  end
         | 
| 62 | 
            -
             | 
| 63 | 
            -
                  def display_property_names
         | 
| 64 | 
            -
                    parent_prop_names = self != Shoes::Widget ? self.superclass.display_property_names : []
         | 
| 65 | 
            -
             | 
| 66 | 
            -
                    parent_prop_names | linkable_properties.map { |prop| prop[:name] }
         | 
| 67 | 
            -
                  end
         | 
| 68 | 
            -
             | 
| 69 | 
            -
                  def display_property_name?(name)
         | 
| 70 | 
            -
                    linkable_properties_hash[name.to_s] ||
         | 
| 71 | 
            -
                      (self != Shoes::Widget && superclass.display_property_name?(name))
         | 
| 72 | 
            -
                  end
         | 
| 73 | 
            -
                end
         | 
| 74 | 
            -
             | 
| 75 | 
            -
                # Shoes uses a "hidden" style property for hide/show
         | 
| 76 | 
            -
                display_property :hidden
         | 
| 77 | 
            -
             | 
| 78 | 
            -
                def initialize(*args, **kwargs)
         | 
| 79 | 
            -
                  log_init("Widget")
         | 
| 80 | 
            -
             | 
| 81 | 
            -
                  self.class.display_property_names.each do |prop|
         | 
| 82 | 
            -
                    if kwargs[prop.to_sym]
         | 
| 83 | 
            -
                      instance_variable_set("@" + prop, kwargs[prop.to_sym])
         | 
| 84 | 
            -
                    end
         | 
| 85 | 
            -
                  end
         | 
| 86 | 
            -
             | 
| 87 | 
            -
                  super() # linkable_id defaults to object_id
         | 
| 88 | 
            -
                end
         | 
| 89 | 
            -
             | 
| 90 | 
            -
                def inspect
         | 
| 91 | 
            -
                  "#<#{self.class}:#{self.object_id} " +
         | 
| 92 | 
            -
                    "@linkable_id=#{@linkable_id.inspect} @parent=#{@parent.inspect} " +
         | 
| 93 | 
            -
                    "@children=#{@children.inspect} properties=#{display_property_values.inspect}>"
         | 
| 94 | 
            -
                end
         | 
| 95 | 
            -
             | 
| 96 | 
            -
                private
         | 
| 97 | 
            -
             | 
| 98 | 
            -
                def bind_self_event(event_name, &block)
         | 
| 99 | 
            -
                  raise("Widget has no linkable_id! #{inspect}") unless linkable_id
         | 
| 100 | 
            -
             | 
| 101 | 
            -
                  bind_shoes_event(event_name: event_name, target: linkable_id, &block)
         | 
| 102 | 
            -
                end
         | 
| 103 | 
            -
             | 
| 104 | 
            -
                def bind_no_target_event(event_name, &block)
         | 
| 105 | 
            -
                  bind_shoes_event(event_name:, &block)
         | 
| 106 | 
            -
                end
         | 
| 107 | 
            -
             | 
| 108 | 
            -
                public
         | 
| 109 | 
            -
             | 
| 110 | 
            -
                def display_property_values
         | 
| 111 | 
            -
                  all_property_names = self.class.display_property_names
         | 
| 112 | 
            -
             | 
| 113 | 
            -
                  properties = {}
         | 
| 114 | 
            -
                  all_property_names.each do |prop|
         | 
| 115 | 
            -
                    properties[prop] = instance_variable_get("@" + prop)
         | 
| 116 | 
            -
                  end
         | 
| 117 | 
            -
                  properties["shoes_linkable_id"] = self.linkable_id
         | 
| 118 | 
            -
                  properties
         | 
| 119 | 
            -
                end
         | 
| 120 | 
            -
             | 
| 121 | 
            -
                private
         | 
| 122 | 
            -
             | 
| 123 | 
            -
                def create_display_widget
         | 
| 124 | 
            -
                  klass_name = self.class.name.delete_prefix("Scarpe::").delete_prefix("Shoes::")
         | 
| 125 | 
            -
             | 
| 126 | 
            -
                  # Should we save a reference to widget for later reference?
         | 
| 127 | 
            -
                  ::Shoes::DisplayService.display_service.create_display_widget_for(klass_name, self.linkable_id, display_property_values)
         | 
| 128 | 
            -
                end
         | 
| 129 | 
            -
             | 
| 130 | 
            -
                public
         | 
| 131 | 
            -
             | 
| 132 | 
            -
                attr_reader :parent
         | 
| 133 | 
            -
             | 
| 134 | 
            -
                def set_parent(new_parent)
         | 
| 135 | 
            -
                  @parent&.remove_child(self)
         | 
| 136 | 
            -
                  new_parent&.add_child(self)
         | 
| 137 | 
            -
                  @parent = new_parent
         | 
| 138 | 
            -
                  send_shoes_event(new_parent.linkable_id, event_name: "parent", target: linkable_id)
         | 
| 139 | 
            -
                end
         | 
| 140 | 
            -
             | 
| 141 | 
            -
                # Removes the element from the Shoes::Widget tree
         | 
| 142 | 
            -
                def destroy
         | 
| 143 | 
            -
                  @parent&.remove_child(self)
         | 
| 144 | 
            -
                  send_shoes_event(event_name: "destroy", target: linkable_id)
         | 
| 145 | 
            -
                end
         | 
| 146 | 
            -
                alias_method :remove, :destroy
         | 
| 147 | 
            -
             | 
| 148 | 
            -
                # Hide the widget.
         | 
| 149 | 
            -
                def hide
         | 
| 150 | 
            -
                  self.hidden = true
         | 
| 151 | 
            -
                end
         | 
| 152 | 
            -
             | 
| 153 | 
            -
                # Show the widget.
         | 
| 154 | 
            -
                def show
         | 
| 155 | 
            -
                  self.hidden = false
         | 
| 156 | 
            -
                end
         | 
| 157 | 
            -
             | 
| 158 | 
            -
                # Hide the widget if it is currently shown. Show it if it is currently hidden.
         | 
| 159 | 
            -
                def toggle
         | 
| 160 | 
            -
                  self.hidden = !self.hidden
         | 
| 161 | 
            -
                end
         | 
| 162 | 
            -
             | 
| 163 | 
            -
                # We use method_missing for widget-creating methods like "button",
         | 
| 164 | 
            -
                # and also to auto-create display-property getters and setters.
         | 
| 165 | 
            -
                def method_missing(name, *args, **kwargs, &block)
         | 
| 166 | 
            -
                  name_s = name.to_s
         | 
| 167 | 
            -
             | 
| 168 | 
            -
                  if name_s[-1] == "="
         | 
| 169 | 
            -
                    prop_name = name_s[0..-2]
         | 
| 170 | 
            -
                    if self.class.display_property_name?(prop_name)
         | 
| 171 | 
            -
                      self.class.define_method(name) do |new_value|
         | 
| 172 | 
            -
                        raise "Trying to set display properties in an object with no linkable ID!" unless linkable_id
         | 
| 173 | 
            -
             | 
| 174 | 
            -
                        instance_variable_set("@" + prop_name, new_value)
         | 
| 175 | 
            -
                        send_shoes_event({ prop_name => new_value }, event_name: "prop_change", target: linkable_id)
         | 
| 176 | 
            -
                      end
         | 
| 177 | 
            -
             | 
| 178 | 
            -
                      return self.send(name, *args, **kwargs, &block)
         | 
| 179 | 
            -
                    end
         | 
| 180 | 
            -
                  end
         | 
| 181 | 
            -
             | 
| 182 | 
            -
                  if self.class.display_property_name?(name_s)
         | 
| 183 | 
            -
                    self.class.define_method(name) do
         | 
| 184 | 
            -
                      raise "Trying to get display properties in an object with no linkable ID!" unless linkable_id
         | 
| 185 | 
            -
             | 
| 186 | 
            -
                      instance_variable_get("@" + name_s)
         | 
| 187 | 
            -
                    end
         | 
| 188 | 
            -
             | 
| 189 | 
            -
                    return self.send(name, *args, **kwargs, &block)
         | 
| 190 | 
            -
                  end
         | 
| 191 | 
            -
             | 
| 192 | 
            -
                  klass = Widget.widget_class_by_name(name)
         | 
| 193 | 
            -
                  return super unless klass
         | 
| 194 | 
            -
             | 
| 195 | 
            -
                  ::Shoes::Widget.define_method(name) do |*args, **kwargs, &block|
         | 
| 196 | 
            -
                    # Look up the Shoes widget and create it...
         | 
| 197 | 
            -
                    widget_instance = klass.new(*args, **kwargs, &block)
         | 
| 198 | 
            -
             | 
| 199 | 
            -
                    unless klass.ancestors.include?(Shoes::TextWidget)
         | 
| 200 | 
            -
                      widget_instance.set_parent Shoes::App.instance.current_slot
         | 
| 201 | 
            -
                    end
         | 
| 202 | 
            -
             | 
| 203 | 
            -
                    widget_instance
         | 
| 204 | 
            -
                  end
         | 
| 205 | 
            -
             | 
| 206 | 
            -
                  send(name, *args, **kwargs, &block)
         | 
| 207 | 
            -
                end
         | 
| 208 | 
            -
             | 
| 209 | 
            -
                def respond_to_missing?(name, include_private = false)
         | 
| 210 | 
            -
                  name_s = name.to_s
         | 
| 211 | 
            -
                  return true if self.class.display_property_name?(name_s)
         | 
| 212 | 
            -
                  return true if self.class.display_property_name?(name_s[0..-2]) && name_s[-1] == "="
         | 
| 213 | 
            -
                  return true if Widget.widget_class_by_name(name_s)
         | 
| 214 | 
            -
             | 
| 215 | 
            -
                  super
         | 
| 216 | 
            -
                end
         | 
| 217 | 
            -
              end
         | 
| 218 | 
            -
            end
         | 
    
        data/lib/shoes/widgets/alert.rb
    DELETED
    
    | @@ -1,19 +0,0 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Shoes
         | 
| 4 | 
            -
              class Alert < Shoes::Widget
         | 
| 5 | 
            -
                display_property :text
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                def initialize(text)
         | 
| 8 | 
            -
                  @text = text
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                  super
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                  bind_self_event("click") do
         | 
| 13 | 
            -
                    remove
         | 
| 14 | 
            -
                  end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                  create_display_widget
         | 
| 17 | 
            -
                end
         | 
| 18 | 
            -
              end
         | 
| 19 | 
            -
            end
         | 
    
        data/lib/shoes/widgets/arc.rb
    DELETED
    
    | @@ -1,51 +0,0 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Shoes
         | 
| 4 | 
            -
              class InvalidAttributeValueError < Shoes::Error; end
         | 
| 5 | 
            -
             | 
| 6 | 
            -
              class Arc < Shoes::Widget
         | 
| 7 | 
            -
                display_properties :left, :top, :width, :height, :angle1, :angle2, :draw_context
         | 
| 8 | 
            -
             | 
| 9 | 
            -
                def initialize(*args)
         | 
| 10 | 
            -
                  @left, @top, @width, @height, @angle1, @angle2 = args
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                  @left = convert_to_integer(@left, "left")
         | 
| 13 | 
            -
                  @top = convert_to_integer(@top, "top")
         | 
| 14 | 
            -
                  @width = convert_to_integer(@width, "width")
         | 
| 15 | 
            -
                  @height = convert_to_integer(@height, "height")
         | 
| 16 | 
            -
                  @angle1 = convert_to_float(@angle1, "angle1")
         | 
| 17 | 
            -
                  @angle2 = convert_to_float(@angle2, "angle2")
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                  @draw_context = Shoes::App.instance.current_draw_context
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                  super
         | 
| 22 | 
            -
                  create_display_widget
         | 
| 23 | 
            -
                end
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                private
         | 
| 26 | 
            -
             | 
| 27 | 
            -
                def convert_to_integer(value, attribute_name)
         | 
| 28 | 
            -
                  begin
         | 
| 29 | 
            -
                    value = Integer(value)
         | 
| 30 | 
            -
                    raise InvalidAttributeValueError, "Negative number '#{value}' not allowed for attribute '#{attribute_name}'" if value < 0
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                    value
         | 
| 33 | 
            -
                  rescue ArgumentError
         | 
| 34 | 
            -
                    error_message = "Invalid value '#{value}' provided for attribute '#{attribute_name}'. The value should be a number."
         | 
| 35 | 
            -
                    raise InvalidAttributeValueError, error_message
         | 
| 36 | 
            -
                  end
         | 
| 37 | 
            -
                end
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                def convert_to_float(value, attribute_name)
         | 
| 40 | 
            -
                  begin
         | 
| 41 | 
            -
                    value = Float(value)
         | 
| 42 | 
            -
                    raise InvalidAttributeValueError, "Negative number '#{value}' not allowed for attribute '#{attribute_name}'" if value < 0
         | 
| 43 | 
            -
             | 
| 44 | 
            -
                    value
         | 
| 45 | 
            -
                  rescue ArgumentError
         | 
| 46 | 
            -
                    error_message = "Invalid value '#{value}' provided for attribute '#{attribute_name}'. The value should be a number."
         | 
| 47 | 
            -
                    raise InvalidAttributeValueError, error_message
         | 
| 48 | 
            -
                  end
         | 
| 49 | 
            -
                end
         | 
| 50 | 
            -
              end
         | 
| 51 | 
            -
            end
         | 
    
        data/lib/shoes/widgets/button.rb
    DELETED
    
    | @@ -1,35 +0,0 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Shoes
         | 
| 4 | 
            -
              class Button < Shoes::Widget
         | 
| 5 | 
            -
                include Shoes::Log
         | 
| 6 | 
            -
                display_properties :text, :width, :height, :top, :left, :color, :padding_top, :padding_bottom, :text_color, :size, :font_size
         | 
| 7 | 
            -
             | 
| 8 | 
            -
                def initialize(text, width: nil, height: nil, top: nil, left: nil, color: nil, padding_top: nil, padding_bottom: nil, size: 12, text_color: nil,
         | 
| 9 | 
            -
                  font_size: nil, & block)
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                  log_init("Button")
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                  # Properties passed as positional args, not keywords, don't get auto-set
         | 
| 14 | 
            -
                  @text = text
         | 
| 15 | 
            -
                  @color = color
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                  @block = block
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                  super
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                  # Bind to a handler named "click"
         | 
| 22 | 
            -
                  bind_self_event("click") do
         | 
| 23 | 
            -
                    @log.debug("Button clicked, calling handler") if @block
         | 
| 24 | 
            -
                    @block&.call
         | 
| 25 | 
            -
                  end
         | 
| 26 | 
            -
             | 
| 27 | 
            -
                  create_display_widget
         | 
| 28 | 
            -
                end
         | 
| 29 | 
            -
             | 
| 30 | 
            -
                # Set the click handler
         | 
| 31 | 
            -
                def click(&block)
         | 
| 32 | 
            -
                  @block = block
         | 
| 33 | 
            -
                end
         | 
| 34 | 
            -
              end
         | 
| 35 | 
            -
            end
         | 
    
        data/lib/shoes/widgets/font.rb
    DELETED
    
    
    
        data/lib/shoes/widgets/link.rb
    DELETED
    
    | @@ -1,25 +0,0 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Shoes
         | 
| 4 | 
            -
              class Link < Shoes::TextWidget
         | 
| 5 | 
            -
                display_properties :text, :click, :has_block
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                def initialize(text, click: nil, &block)
         | 
| 8 | 
            -
                  @text = text
         | 
| 9 | 
            -
                  @block = block
         | 
| 10 | 
            -
                  # We can't send a block to the display widget, but we can send a boolean
         | 
| 11 | 
            -
                  @has_block = !block.nil?
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                  super
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                  # The click property should be changed before it gets sent to the display widget
         | 
| 16 | 
            -
                  @click ||= "#"
         | 
| 17 | 
            -
             | 
| 18 | 
            -
                  bind_self_event("click") do
         | 
| 19 | 
            -
                    @block&.call
         | 
| 20 | 
            -
                  end
         | 
| 21 | 
            -
             | 
| 22 | 
            -
                  create_display_widget
         | 
| 23 | 
            -
                end
         | 
| 24 | 
            -
              end
         | 
| 25 | 
            -
            end
         | 
| @@ -1,25 +0,0 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Shoes
         | 
| 4 | 
            -
              class ListBox < Shoes::Widget
         | 
| 5 | 
            -
                display_properties :selected_item, :items, :height, :width
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                def initialize(args = {}, &block)
         | 
| 8 | 
            -
                  @items = args[:items] || []
         | 
| 9 | 
            -
                  @selected_item = args[:selected_item]
         | 
| 10 | 
            -
                  super()
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                  bind_self_event("change") do |new_item|
         | 
| 13 | 
            -
                    self.selected_item = new_item
         | 
| 14 | 
            -
                    @callback&.call(new_item)
         | 
| 15 | 
            -
                  end
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                  create_display_widget
         | 
| 18 | 
            -
                end
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                def change(&block)
         | 
| 21 | 
            -
                  @callback = block
         | 
| 22 | 
            -
                  self # Allow chaining calls
         | 
| 23 | 
            -
                end
         | 
| 24 | 
            -
              end
         | 
| 25 | 
            -
            end
         | 
    
        data/lib/shoes/widgets/para.rb
    DELETED
    
    | @@ -1,68 +0,0 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Shoes
         | 
| 4 | 
            -
              class Para < Shoes::Widget
         | 
| 5 | 
            -
                display_properties :text_items, :stroke, :size, :font, :html_attributes, :hidden
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                def initialize(*args, stroke: nil, size: :para, font: nil, hidden: false, **html_attributes)
         | 
| 8 | 
            -
                  @text_children = args || []
         | 
| 9 | 
            -
                  if hidden
         | 
| 10 | 
            -
                    @hidden_text_items = text_children_to_items(@text_children)
         | 
| 11 | 
            -
                    @text_items = []
         | 
| 12 | 
            -
                  else
         | 
| 13 | 
            -
                    # Text_children alternates strings and TextWidgets, so we can't just pass
         | 
| 14 | 
            -
                    # it as a display property. It won't serialize.
         | 
| 15 | 
            -
                    @text_items = text_children_to_items(@text_children)
         | 
| 16 | 
            -
                    @hidden_text_items = []
         | 
| 17 | 
            -
                  end
         | 
| 18 | 
            -
                  stroke = to_rgb(stroke)
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                  @html_attributes = html_attributes || {}
         | 
| 21 | 
            -
             | 
| 22 | 
            -
                  super
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                  create_display_widget
         | 
| 25 | 
            -
                end
         | 
| 26 | 
            -
             | 
| 27 | 
            -
                def text_children_to_items(text_children)
         | 
| 28 | 
            -
                  text_children.map { |arg| arg.is_a?(String) ? arg : arg.linkable_id }
         | 
| 29 | 
            -
                end
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                def replace(*children)
         | 
| 32 | 
            -
                  @text_children = children
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                  # This should signal the display widget to change
         | 
| 35 | 
            -
                  self.text_items = text_children_to_items(@text_children)
         | 
| 36 | 
            -
                end
         | 
| 37 | 
            -
              end
         | 
| 38 | 
            -
            end
         | 
| 39 | 
            -
             | 
| 40 | 
            -
            module Shoes
         | 
| 41 | 
            -
              class Widget
         | 
| 42 | 
            -
                def banner(*args, **kwargs)
         | 
| 43 | 
            -
                  para(*args, **{ size: :banner }.merge(kwargs))
         | 
| 44 | 
            -
                end
         | 
| 45 | 
            -
             | 
| 46 | 
            -
                def title(*args, **kwargs)
         | 
| 47 | 
            -
                  para(*args, **{ size: :title }.merge(kwargs))
         | 
| 48 | 
            -
                end
         | 
| 49 | 
            -
             | 
| 50 | 
            -
                def subtitle(*args, **kwargs)
         | 
| 51 | 
            -
                  para(*args, **{ size: :subtitle }.merge(kwargs))
         | 
| 52 | 
            -
                end
         | 
| 53 | 
            -
             | 
| 54 | 
            -
                def tagline(*args, **kwargs)
         | 
| 55 | 
            -
                  para(*args, **{ size: :tagline }.merge(kwargs))
         | 
| 56 | 
            -
                end
         | 
| 57 | 
            -
             | 
| 58 | 
            -
                def caption(*args, **kwargs)
         | 
| 59 | 
            -
                  para(*args, **{ size: :caption }.merge(kwargs))
         | 
| 60 | 
            -
                end
         | 
| 61 | 
            -
             | 
| 62 | 
            -
                def inscription(*args, **kwargs)
         | 
| 63 | 
            -
                  para(*args, **{ size: :inscription }.merge(kwargs))
         | 
| 64 | 
            -
                end
         | 
| 65 | 
            -
             | 
| 66 | 
            -
                alias_method :ins, :inscription
         | 
| 67 | 
            -
              end
         | 
| 68 | 
            -
            end
         | 
    
        data/lib/shoes/widgets/radio.rb
    DELETED
    
    | @@ -1,35 +0,0 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Shoes
         | 
| 4 | 
            -
              class Radio < Shoes::Widget
         | 
| 5 | 
            -
                display_properties :group, :checked
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                def initialize(group = nil, checked = nil, &block)
         | 
| 8 | 
            -
                  @group = group
         | 
| 9 | 
            -
                  @block = block
         | 
| 10 | 
            -
                  super
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                  bind_self_event("click") { click }
         | 
| 13 | 
            -
                  create_display_widget
         | 
| 14 | 
            -
                end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                def click(&block)
         | 
| 17 | 
            -
                  @block = block
         | 
| 18 | 
            -
                  self.checked = !checked?
         | 
| 19 | 
            -
                end
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                def checked?
         | 
| 22 | 
            -
                  @checked ? true : false
         | 
| 23 | 
            -
                end
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                def checked(value)
         | 
| 26 | 
            -
                  self.checked = value
         | 
| 27 | 
            -
                end
         | 
| 28 | 
            -
             | 
| 29 | 
            -
                private
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                def group_name
         | 
| 32 | 
            -
                  @group || @parent
         | 
| 33 | 
            -
                end
         | 
| 34 | 
            -
              end
         | 
| 35 | 
            -
            end
         |