Class: Etti::PageDatas

Inherits:
GLib::Object
  • Object
show all
Includes:
GetText
Defined in:
lib/etti/page-datas.rb

Constant Summary collapse

FIELDS =
[:manufacture, :orderNr, :description, :pageSize,
:cols, :rows, :size, :borders, :padding]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializePageDatas

Returns a new instance of PageDatas.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 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

Instance Attribute Details

#pageDatasObject (readonly)

Returns the value of attribute pageDatas.



39
40
41
# File 'lib/etti/page-datas.rb', line 39

def pageDatas
  @pageDatas
end

#pageDimensionsObject (readonly)

Returns the value of attribute pageDimensions.



39
40
41
# File 'lib/etti/page-datas.rb', line 39

def pageDimensions
  @pageDimensions
end

Instance Method Details

#get_page_data(type) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 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) ⇒ Object



83
84
85
# File 'lib/etti/page-datas.rb', line 83

def get_page_dimensions size
    @pageDimensions[size]
end

#get_page_namesObject



42
43
44
# File 'lib/etti/page-datas.rb', line 42

def get_page_names
    @pageDatas.keys.sort
end

#save_page_data(page, savePage, &callback) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# 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) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# 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) ⇒ Object



7
# File 'lib/etti/page-datas.rb', line 7

def signal_do_new_page foo; end