class Etti::PageDatas

Constants

FIELDS

Attributes

pageDatas[R]
pageDimensions[R]

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/etti/page-datas.rb, line 15
def initialize
    super()
    
    @pageDimensions = {'a4' => [297.0, 210.0]}
    
    @pageDatas = {}
    @dataFiles = [DATA_PATH + 'page-data.json',
                  File.expand_path('~') + '/.local/share/etti/page-data.json']

    @dataFiles.each_with_index do |filename, idx|
        next unless File.exist? filename
        data = File.new(filename).read
        json = JSON.parse data
        unless json['Etti'] == 'page data file'
            warn "the data file \"%s\" is not a valid etti page data file" % filename
            next
        end

        @pageDatas.merge! json['Data']
        @pageDatas.each_pair do |key, val|
            @pageDatas[key][:source] = idx if val[:source].nil?
        end
    end
end

Public Instance Methods

get_page_data(type) click to toggle source
# File lib/etti/page-datas.rb, line 47
def get_page_data type
    data = @pageDatas[type]
    return nil if data.nil?

    hs = {}
    hs[:name] = type
    FIELDS.each do |sym|
        val = data[sym.to_s]            
        next if val.nil?
        val = val.clone if val.is_a? Array or val.is_a? String
        hs[sym] = val
    end
    hs
end
get_page_dimensions(size) click to toggle source
# File lib/etti/page-datas.rb, line 83
def get_page_dimensions size
    @pageDimensions[size]
end
get_page_names() click to toggle source
# File lib/etti/page-datas.rb, line 42
def get_page_names
    @pageDatas.keys.sort
end
save_page_data(page, savePage, &callback) click to toggle source
# File lib/etti/page-datas.rb, line 88
def save_page_data page, savePage, &callback
    FileUtils.mkdir_p File.dirname(@dataFiles.last)
    if savePage and @pageDatas.key? page[:name]
        message = _("The page description\n\"%s\"\nalready exist.\n\nSould it be replaced?") % page[:name]
    
        ret = callback.call :warning, :yes_no, message
        return nil unless ret == 'yes'
    end
    # header
    json = {'Etti' => 'page data file',
            'Version' => [1, 0],
            'Data' => {}}
    
    # save unchanged pages to the hash
    @pageDatas.each_pair do |key, val|
        json['Data'][key] = val if val[:source] == 1
    end
    
    pageHash = nil
    newPage = !@pageDatas.key?(page[:name])
    
    # fill the current or new page with the page data from the UI
    if newPage
        pageHash = {}
    else
        pageHash = @pageDatas[page[:name]]
    end
    FIELDS.each do |key|
        pageHash[key.to_s] = page[key]
    end
    
    json['Data'][page[:name]] = pageHash
    
    if savePage and newPage
        pageHash['source'] = 1
        @pageDatas[page[:name]] = pageHash
        signal_emit :new_page, [page[:name], pageHash] 
    end
    
    unless savePage
        pageHash['name']  = page[:name]
    end
    
    return pageHash unless savePage
    fd = File.new @dataFiles.last, File::CREAT|File::TRUNC|File::RDWR, 0644
    fileData = $etti_developement_version ? JSON.pretty_generate(json) : JSON.fast_generate(json)
    fd.write fileData
    fd.flush
    
    # we need pageHash also in saving the complete document
    pageHash
end
set_page_data(type, data) click to toggle source
# File lib/etti/page-datas.rb, line 63
def set_page_data type, data
    newPage = !@pageDatas.key?(type)
    if newPage
        pageHash = {}
    else
        pageHash = @pageDatas[type]
    end
    FIELDS.each do |key|
        d = data[key]
        if d.is_a? Array or d.is_a? String
            pageHash[key.to_sym] = d.clone
        else
            pageHash[key.to_sym] = data[key]
        end
    end
    pageHash[:name] = type
    signal_emit(:new_page, [type, pageHash]) if newPage
end
signal_do_new_page(foo;) click to toggle source
# File lib/etti/page-datas.rb, line 7
def signal_do_new_page foo; end

Private Instance Methods

warn(warning) click to toggle source
# File lib/etti/page-datas.rb, line 142
def warn warning
    printf "%s:%i: %s\n", __FILE__, __LINE__, warning
end