LibUI 코드 영역용 Glimmer DSL(Ruby Tooling Future)
이제 좋은 소식이 있습니다! Glimmer DSL for LibUI의 최신 버전은 Ruby Tooling 비전 추구를 용이하게 하기 위해 다음 기능에 대한 지원을 추가했습니다.
Class-Based Custom Controls : 별도의 클래스에서 깔끔하게 유지 관리되는 재사용 가능한 구성 요소로 사용자 정의 컨트롤(일명 위젯)을 빌드할 수 있습니다.
code_area
사용자 정의 제어: area
제어에서 구문 강조 코드를 렌더링합니다. Glimmer DSL for LibUI 의 뛰어난 생산성 이점을 감안할 때 저는
code_area
gem을 사용하여 rouge 사용자 지정 컨트롤을 1시간도 안 되어 조립할 수 있었습니다.다음은
code_area
컨트롤의 모양입니다.code_area
은 Glimmer DSL for LibUI에서 수많은 Ruby Tooling의 흥미로운 가능성을 열어줍니다. 이는 Ruby 커뮤니티 회원이 퍼스트 무버가 되어 Ruby에서 스크립팅할 수 있는 Ruby 툴링 라이브러리를 구축할 수 있는 기회입니다(현재 인기 있는 편집기와 다름).다음은 examples/basic_code_area.rb 코드입니다.
# From: https://github.com/AndyObtiva/glimmer-dsl-libui#basic-code-area
require 'glimmer-dsl-libui'
class BasicCodeArea
include Glimmer::LibUI::Application
before_body do
@code = <<~CODE
# Greets target with greeting
def greet(greeting: 'Hello', target: 'World')
puts "\#{greeting}, \#{target}!"
end
greet
greet(target: 'Robert')
greet(greeting: 'Aloha')
greet(greeting: 'Aloha', target: 'Nancy')
greet(greeting: 'Howdy', target: 'Doodle')
CODE
end
body {
window('Basic Code Area', 400, 300) {
margined true
code_area(language: 'ruby', code: @code)
}
}
end
BasicCodeArea.launch
클래스 기반 사용자 지정 컨트롤(
address_form
및 address_view
)을 빌드하는 방법은 다음과 같습니다.# From: https://github.com/AndyObtiva/glimmer-dsl-libui#class-based-custom-controls
require 'glimmer-dsl-libui'
require 'facets'
Address = Struct.new(:street, :p_o_box, :city, :state, :zip_code)
class FormField
include Glimmer::LibUI::CustomControl
options :model, :attribute
body {
entry { |e|
label attribute.to_s.underscore.split('_').map(&:capitalize).join(' ')
text <=> [model, attribute]
}
}
end
class AddressForm
include Glimmer::LibUI::CustomControl
options :address
body {
form {
form_field(model: address, attribute: :street)
form_field(model: address, attribute: :p_o_box)
form_field(model: address, attribute: :city)
form_field(model: address, attribute: :state)
form_field(model: address, attribute: :zip_code)
}
}
end
class LabelPair
include Glimmer::LibUI::CustomControl
options :model, :attribute, :value
body {
horizontal_box {
label(attribute.to_s.underscore.split('_').map(&:capitalize).join(' '))
label(value.to_s) {
text <= [model, attribute]
}
}
}
end
class AddressView
include Glimmer::LibUI::CustomControl
options :address
body {
vertical_box {
address.each_pair do |attribute, value|
label_pair(model: address, attribute: attribute, value: value)
end
}
}
end
class ClassBasedCustomControls
include Glimmer::LibUI::Application # alias: Glimmer::LibUI::CustomWindow
before_body do
@address1 = Address.new('123 Main St', '23923', 'Denver', 'Colorado', '80014')
@address2 = Address.new('2038 Park Ave', '83272', 'Boston', 'Massachusetts', '02101')
end
body {
window('Class-Based Custom Keyword') {
margined true
horizontal_box {
vertical_box {
label('Address 1') {
stretchy false
}
address_form(address: @address1)
horizontal_separator {
stretchy false
}
label('Address 1 (Saved)') {
stretchy false
}
address_view(address: @address1)
}
vertical_separator {
stretchy false
}
vertical_box {
label('Address 2') {
stretchy false
}
address_form(address: @address2)
horizontal_separator {
stretchy false
}
label('Address 2 (Saved)') {
stretchy false
}
address_view(address: @address2)
}
}
}
}
end
ClassBasedCustomControls.launch
그리고 재사용 가능한 사용자 지정 컨트롤의 모습은 다음과 같습니다(2개의 주소 형식과 2개의 주소 보기).
해피Glimmering !
Reference
이 문제에 관하여(LibUI 코드 영역용 Glimmer DSL(Ruby Tooling Future)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/andyobtiva/glimmer-dsl-for-libui-code-area-ruby-tooling-future-1mh1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)