class Etti::LabelLayoutPage

Attributes

layoutPreview[R]

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/etti/ui/label-layout-page.rb, line 8
def initialize
    super :vertical #:orientation => :vertical
    
    hbox = Gtk::Box.new :horizontal
    self.pack_start hbox, :expand => true, :fill => true
  
    create_property_view
    hbox.pack_start @propertyView, :expand => false, :fill => false, :padding => 6
    
    paned = Gtk::Paned.new :horizontal
    hbox.pack_start paned, :expand => true, :fill => true

    @layoutPreview = Etti::LabelLayout.new @propertyViews
    paned.pack1 @layoutPreview, :resize => true, :shrink => true

    ebox = Gtk::Box.new :horizontal
    paned.pack2 ebox, :resize => false, :shrink => false

    label = Gtk::Label.new _(' Drag the elements over ')
    label.angle = 90
    ebox.pack_start label, :expand => false, :fill => false, :padding => 8

    @labelElements = Etti::LabelElements.new
    ebox.pack_start @labelElements, :expand => true, :fill => true
end

Public Instance Methods

create_property_view() click to toggle source
# File lib/etti/ui/label-layout-page.rb, line 114
def create_property_view
    @propertyView = Gtk::Box.new :vertical
    @propertyViews = {}
    sizeGroup = Gtk::SizeGroup.new :horizontal

    [[Etti::PropertyEditorData::NONE_PROPS, _('nothing selected'), :none],
     [Etti::PropertyEditorData::TEXTS_PROPS, _('Text element'), :text],
     [Etti::PropertyEditorData::DATA_PROPS, _('Data element'), :data]].each_with_index do |pair, i|
        pv = Rgw::PropertyEditor.new pair[0], pair[1]
        sizeGroup.add_widget pv
        @propertyViews[pair[2]] = pv
        @propertyView.pack_start pv, :expand => false, :fill => false, :padding => 0

        pv.signal_connect(:property_changed) do |widget, name, val|
            unless pv.selectedElement.nil?
                pv.selectedElement.set_by_name name, val
                @layoutPreview.queue_draw
            end
        end
    end
end
get_user_settings() click to toggle source
# File lib/etti/ui/label-layout-page.rb, line 36
def get_user_settings
    settings = {}
    settings['scale'] = @layoutPreview.scale
    settings['centerX'] = @layoutPreview.centerX
    settings['centerY'] = @layoutPreview.centerY
    elementData = []
    @layoutPreview.elements.each {|element| elementData << element.to_h}
    settings['elements'] = elementData
    settings
end
initialize_property_views() click to toggle source
# File lib/etti/ui/label-layout-page.rb, line 103
def initialize_property_views
    @propertyViews.each_pair do |key, val|
        if key == :none
            val.show
        else
            val.hide
        end
    end
end
set_element_data(heads, data) click to toggle source
# File lib/etti/ui/label-layout-page.rb, line 97
def set_element_data heads, data
    @labelElements.elements = data.length == 0 ? nil : heads
    @layoutPreview.set_element_data heads, data
end
set_user_settings(settings) click to toggle source
# File lib/etti/ui/label-layout-page.rb, line 71
def set_user_settings settings
    @layoutPreview.scale = settings['scale']
    @layoutPreview.centerX = settings['centerX']
    @layoutPreview.centerY = settings['centerY']

    @layoutPreview.elements.clear

    settings['elements'].each do |element|
        el = nil
        if element['elementType'] == 'text'
            el = Etti::Element::Text.new element['text']
        elsif element['elementType'] == 'data'
            el = Etti::Element::Data.new element['dataGroup'], element['text']
        end
        el.from_h element
        @layoutPreview.elements << el
    end
end
update_page_data(pageData) click to toggle source
# File lib/etti/ui/label-layout-page.rb, line 91
def update_page_data pageData
    @pageData = pageData
    @layoutPreview.update_page_data pageData
end
validate_user_settings(settings) click to toggle source
# File lib/etti/ui/label-layout-page.rb, line 48
def validate_user_settings settings
    return _('LabelLayout scale is not a Numeric') unless settings['scale'].is_a? Numeric
    return _('LabelLayout scale is out of range') if settings['scale'] < Etti::LabelLayout::SCALE_MIN or
                    settings['scale'] > Etti::LabelLayout::SCALE_MAX
    return _('LabelLayout centerX is not a Numeric') unless settings['centerX'].is_a? Numeric
    return _('LabelLayout centerY is not a Numeric') unless settings['centerY'].is_a? Numeric
    return _('LabelLayout elements is not an Array') unless settings['elements'].is_a? Array
    settings['elements'].each do |element|
        el = nil
        if element['elementType'] == 'text'
            el = Etti::Element::Text.new 'vali'
        elsif element['elementType'] == 'data'
            el = Etti::Element::Data.new :dg, 'vali'
        else
            return _("LabelLayout element type %s is unknown") % element['elementType'].to_s
        end
        ret = el.validate_from_h element
        return ret if ret
    end
    nil
end