module Glimmer::SWT::StyleConstantizable::ClassMethods
Constants
- REGEX_SYMBOL_NEGATIVITY
Public Instance Methods
[](*symbols)
click to toggle source
Gets constants (e.g. SWT::CONSTANT) where constant is passed in as a lower case symbol
# File lib/glimmer/swt/style_constantizable.rb, line 51 def [](*symbols) symbols = symbols.first if symbols.size == 1 && symbols.first.is_a?(Array) result = symbols.compact.map do |symbol| constant(symbol).tap do |constant_value| raise Glimmer::Error, symbol.to_s + error_message_invalid_style unless constant_value.is_a?(Integer) end end.reduce do |output, constant_value| if constant_value < 0 output & constant_value else output | constant_value end end result.nil? ? constant_value_none : result end
constant(symbol)
click to toggle source
Returns style integer value for passed in symbol or allows passed in object to pass through (e.g. Integer). This makes is convenient to use symbols or actual style integers in Glimmer
Does not raise error for invalid values. Just lets them pass as is. (look into [] operator if you want an error raised on invalid values)
# File lib/glimmer/swt/style_constantizable.rb, line 72 def constant(symbol) return symbol unless symbol.is_a?(Symbol) || symbol.is_a?(String) symbol_string, negative = extract_symbol_string_negativity(symbol) swt_constant_symbol = symbol_string.downcase == symbol_string ? symbol_string.upcase.to_sym : symbol_string.to_sym bit_value = constant_source_class.const_get(swt_constant_symbol) negative ? ~bit_value : bit_value rescue => e begin # Glimmer::Config.logger.debug {e.full_message} alternative_swt_constant_symbol = constant_source_class.constants.find {|c| c.to_s.upcase == swt_constant_symbol.to_s.upcase} bit_value = constant_source_class.const_get(alternative_swt_constant_symbol) negative ? ~bit_value : bit_value rescue => e # Glimmer::Config.logger.debug {e.full_message} bit_value = extra_styles[swt_constant_symbol] if bit_value negative ? ~bit_value : bit_value else symbol end end end
constant_source_class()
click to toggle source
# File lib/glimmer/swt/style_constantizable.rb, line 31 def constant_source_class raise 'Not implemented! Mixer must implement!' end
constant_value_none()
click to toggle source
# File lib/glimmer/swt/style_constantizable.rb, line 35 def constant_value_none # TODO instead of raising error try a convention instead like CLASSNAME::NONE by default raise 'Not implemented! Mixer must implement!' end
constantify_args(args)
click to toggle source
# File lib/glimmer/swt/style_constantizable.rb, line 116 def constantify_args(args) args.map {|arg| constant(arg)} end
deconstruct(integer)
click to toggle source
Deconstructs a style integer into symbols Useful for debugging
# File lib/glimmer/swt/style_constantizable.rb, line 122 def deconstruct(integer) constant_source_class.constants.reduce([]) do |found, c| constant_value = constant_source_class.const_get(c) rescue -1 is_found = constant_value.is_a?(Integer) && (integer & constant_value) == integer is_found ? found += [c] : found end end
error_message_invalid_style()
click to toggle source
# File lib/glimmer/swt/style_constantizable.rb, line 45 def error_message_invalid_style " is an invalid #{constant_source_class.name.split(':').last} style! Please choose a style from #{constant_source_class.name} class constants." # TODO parameterize end
extra_styles()
click to toggle source
hash of extra styles (i.e. new style combinations)
# File lib/glimmer/swt/style_constantizable.rb, line 41 def extra_styles raise 'Not implemented! Mixer must implement!' end
extract_symbol_string_negativity(symbol)
click to toggle source
# File lib/glimmer/swt/style_constantizable.rb, line 95 def extract_symbol_string_negativity(symbol) if symbol.is_a?(Symbol) || symbol.is_a?(String) symbol_negativity_match = symbol.to_s.match(REGEX_SYMBOL_NEGATIVITY) symbol = symbol_negativity_match[1] negative = !!symbol_negativity_match[2] [symbol, negative] else negative = symbol < 0 [symbol, negative] end end
has_constant?(symbol)
click to toggle source
# File lib/glimmer/swt/style_constantizable.rb, line 111 def has_constant?(symbol) return false unless symbol.is_a?(Symbol) || symbol.is_a?(String) constant(symbol).is_a?(Integer) end
include?(swt_constant, *symbols)
click to toggle source
# File lib/glimmer/swt/style_constantizable.rb, line 140 def include?(swt_constant, *symbols) swt_constant & self[symbols] == self[symbols] end
negative?(symbol)
click to toggle source
# File lib/glimmer/swt/style_constantizable.rb, line 107 def negative?(symbol) extract_symbol_string_negativity(symbol)[1] end
reverse_lookup(integer)
click to toggle source
Reverse engineer a style integer into a symbol Useful for debugging
# File lib/glimmer/swt/style_constantizable.rb, line 132 def reverse_lookup(integer) constant_source_class.constants.reduce([]) do |found, c| constant_value = constant_source_class.const_get(c) rescue -1 is_found = constant_value.is_a?(Integer) && integer == constant_value is_found ? found += [c] : found end end