mcc2 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data/.autotest +23 -0
- data/.gitignore +15 -0
- data/.rubocop.yml +3 -0
- data/Gemfile +13 -0
- data/History.txt +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +51 -0
- data/Rakefile +12 -0
- data/config/i18n-tasks.yml +193 -0
- data/exe/mcc2 +18 -0
- data/exe/mcc2-generate-preview +17 -0
- data/exe/mcc2print +6 -0
- data/lib/libguib16.rb +1620 -0
- data/lib/mcc2/advanced_data_edit_dlg.rb +139 -0
- data/lib/mcc2/cc_dialogbox.rb +52 -0
- data/lib/mcc2/constants.rb +154 -0
- data/lib/mcc2/dataman/base.rb +61 -0
- data/lib/mcc2/dataman/csv.rb +49 -0
- data/lib/mcc2/dataman/database.rb +8 -0
- data/lib/mcc2/dataman/dbf.rb +45 -0
- data/lib/mcc2/dataman/none.rb +25 -0
- data/lib/mcc2/dataview.rb +348 -0
- data/lib/mcc2/dataview_dlg.rb +232 -0
- data/lib/mcc2/debug_tools.rb +20 -0
- data/lib/mcc2/fx_colored_item.rb +101 -0
- data/lib/mcc2/generate_preview.rb +68 -0
- data/lib/mcc2/gui/advanced_data_edit_dlg.rbin +0 -0
- data/lib/mcc2/gui/dataview_dlg.pp +522 -0
- data/lib/mcc2/gui/layoutview_dlg.pp +5115 -0
- data/lib/mcc2/gui/mcc2_mainwin.pp +838 -0
- data/lib/mcc2/gui/picture_data_edit_dlg.rbin +0 -0
- data/lib/mcc2/gui/printerview_dlg.pp +3311 -0
- data/lib/mcc2/images/Image-Arrow-Left.gif +0 -0
- data/lib/mcc2/images/Image-Arrow-Right.gif +0 -0
- data/lib/mcc2/images/Image-FastArrowLeft.gif +0 -0
- data/lib/mcc2/images/Image-FastArrowRight.bmp +0 -0
- data/lib/mcc2/images/Image-FastArrowRight.gif +0 -0
- data/lib/mcc2/images/application-exit.png +0 -0
- data/lib/mcc2/images/copy.png +0 -0
- data/lib/mcc2/images/country_de.png +0 -0
- data/lib/mcc2/images/country_gb.png +0 -0
- data/lib/mcc2/images/country_rs.png +0 -0
- data/lib/mcc2/images/cut.png +0 -0
- data/lib/mcc2/images/distribute-horizontal-baseline.png +0 -0
- data/lib/mcc2/images/distribute-vertical-baseline.png +0 -0
- data/lib/mcc2/images/document-close.png +0 -0
- data/lib/mcc2/images/document-edit.png +0 -0
- data/lib/mcc2/images/document-new.png +0 -0
- data/lib/mcc2/images/document-open.png +0 -0
- data/lib/mcc2/images/document-print-frame.png +0 -0
- data/lib/mcc2/images/document-print.png +0 -0
- data/lib/mcc2/images/document-save-as.png +0 -0
- data/lib/mcc2/images/document-save.png +0 -0
- data/lib/mcc2/images/documentation.png +0 -0
- data/lib/mcc2/images/draw-rectangle.png +0 -0
- data/lib/mcc2/images/dummy.gif +0 -0
- data/lib/mcc2/images/exchange-positions.png +0 -0
- data/lib/mcc2/images/insert-image.png +0 -0
- data/lib/mcc2/images/insert-text.png +0 -0
- data/lib/mcc2/images/libreoffice-oasis-master-document.png +0 -0
- data/lib/mcc2/images/measure.png +0 -0
- data/lib/mcc2/images/messagebox_warning.png +0 -0
- data/lib/mcc2/images/paste.png +0 -0
- data/lib/mcc2/images/process-stop.png +0 -0
- data/lib/mcc2/images/zoom-in.png +0 -0
- data/lib/mcc2/layout.rb +323 -0
- data/lib/mcc2/layout_file.rb +794 -0
- data/lib/mcc2/layout_object/barcode.rb +33 -0
- data/lib/mcc2/layout_object/box.rb +18 -0
- data/lib/mcc2/layout_object/chip.rb +54 -0
- data/lib/mcc2/layout_object/embed.rb +16 -0
- data/lib/mcc2/layout_object/go_attribut.rb +16 -0
- data/lib/mcc2/layout_object/graphic.rb +59 -0
- data/lib/mcc2/layout_object/magstripe.rb +13 -0
- data/lib/mcc2/layout_object/picture.rb +22 -0
- data/lib/mcc2/layout_object/text.rb +29 -0
- data/lib/mcc2/layout_win.rb +2052 -0
- data/lib/mcc2/layoutview.rb +845 -0
- data/lib/mcc2/layoutview_dlg.rb +2058 -0
- data/lib/mcc2/locales.rb +27 -0
- data/lib/mcc2/mcc2_mainwin.rb +453 -0
- data/lib/mcc2/mcc2gui.rb +295 -0
- data/lib/mcc2/mcc2print.rb +54 -0
- data/lib/mcc2/picture_data_edit_dlg.rb +139 -0
- data/lib/mcc2/print_dlg.rb +520 -0
- data/lib/mcc2/printer/base.rb +148 -0
- data/lib/mcc2/printer/card_printer.rb +45 -0
- data/lib/mcc2/printer/file_printer.rb +135 -0
- data/lib/mcc2/printer/gdi_card_printer.rb +14 -0
- data/lib/mcc2/printer/gdi_printer.rb +197 -0
- data/lib/mcc2/printer/linux_cups_printer.rb +92 -0
- data/lib/mcc2/printer/preview.rb +277 -0
- data/lib/mcc2/printer/printer_cab.rb +118 -0
- data/lib/mcc2/printer/printer_cx320_direct.rb +286 -0
- data/lib/mcc2/printer/printer_epl.rb +118 -0
- data/lib/mcc2/printer/printer_ttp34x.rb +124 -0
- data/lib/mcc2/printer/printer_zebra.rb +324 -0
- data/lib/mcc2/printer/svg_drawer.rb +689 -0
- data/lib/mcc2/printerview.rb +604 -0
- data/lib/mcc2/printerview_dlg.rb +1248 -0
- data/lib/mcc2/version.rb +3 -0
- data/lib/mcc2.rb +11 -0
- data/locales/de.yml +6 -0
- data/locales/en.yml +502 -0
- data/locales/rs.yml +502 -0
- data/mcc2.gemspec +41 -0
- data/test/dummy.rb +19 -0
- data/test/layouts/bart_simpson.png +0 -0
- data/test/layouts/color_test.xml +151 -0
- data/test/layouts/ms.xml +67 -0
- data/test/ruby_print.rb +380 -0
- data/test/test.csv +4 -0
- data/test/test.dbf +0 -0
- data/test/test.str +4 -0
- data/test/test_mcc2.rb +8 -0
- data.tar.gz.sig +6 -0
- metadata +421 -0
- metadata.gz.sig +0 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# This is a Ruby translation of FXIconItem::drawDetails in C++.
|
|
2
|
+
# It is extended by the possibility to set the text colors per item.
|
|
3
|
+
# And it does a log(n) search for text size rather than a linear search.
|
|
4
|
+
|
|
5
|
+
require "fox16"
|
|
6
|
+
|
|
7
|
+
module Mcc2
|
|
8
|
+
class FxColoredItem < Fox::FXIconItem
|
|
9
|
+
MyColor = Struct.new :f, :b
|
|
10
|
+
|
|
11
|
+
attr_accessor :on_color_requested
|
|
12
|
+
|
|
13
|
+
SIDE_SPACING = 4 # Left or right spacing between items
|
|
14
|
+
DETAIL_TEXT_SPACING = 2 # Spacing between text and icon in detail icon mode
|
|
15
|
+
|
|
16
|
+
def draw(list, dc, x, y, w, h)
|
|
17
|
+
color = on_color_requested&.call(list, self)
|
|
18
|
+
|
|
19
|
+
# For unknown reason a seperate FXDC is required in order to see any drawings.
|
|
20
|
+
dc = Fox::FXDCWindow.new list
|
|
21
|
+
dc.font = list.font
|
|
22
|
+
|
|
23
|
+
header = list.header
|
|
24
|
+
font = list.font
|
|
25
|
+
return if header.numItems == 0
|
|
26
|
+
|
|
27
|
+
iw = 0
|
|
28
|
+
if selected?
|
|
29
|
+
dc.foreground = list.selBackColor
|
|
30
|
+
dc.fillRectangle(x, y, header.totalSize, h)
|
|
31
|
+
elsif color
|
|
32
|
+
dc.foreground = color.b
|
|
33
|
+
dc.fillRectangle(x, y, header.totalSize, h)
|
|
34
|
+
end
|
|
35
|
+
if hasFocus?
|
|
36
|
+
dc.drawFocusRectangle(x + 1, y + 1, header.totalSize - 2, h - 2)
|
|
37
|
+
end
|
|
38
|
+
xx = x + SIDE_SPACING / 2
|
|
39
|
+
if miniIcon
|
|
40
|
+
iw = miniIcon.width
|
|
41
|
+
ih = miniIcon.height
|
|
42
|
+
dc.setClipRectangle(x, y, header.itemSize(0), h)
|
|
43
|
+
dc.drawIcon(miniIcon, xx, y + (h - ih) / 2)
|
|
44
|
+
dc.clearClipRectangle
|
|
45
|
+
xx += iw + DETAIL_TEXT_SPACING
|
|
46
|
+
end
|
|
47
|
+
label = text
|
|
48
|
+
unless label.empty?
|
|
49
|
+
th = font.fontHeight
|
|
50
|
+
dw = font.getTextWidth("...")
|
|
51
|
+
yt = y + (h - th - 4) / 2
|
|
52
|
+
dc.foreground = if !enabled?
|
|
53
|
+
makeShadowColor(list.backColor)
|
|
54
|
+
elsif selected?
|
|
55
|
+
list.selTextColor
|
|
56
|
+
elsif color
|
|
57
|
+
color.f
|
|
58
|
+
else
|
|
59
|
+
list.textColor
|
|
60
|
+
end
|
|
61
|
+
used = iw + DETAIL_TEXT_SPACING + SIDE_SPACING / 2
|
|
62
|
+
label.split("\t")[0...header.numItems].each_with_index do |snip, hi|
|
|
63
|
+
space = header.getItemSize(hi) - used
|
|
64
|
+
if text_width_bigger_than?(font, snip, space - 4)
|
|
65
|
+
pos = find_edge_false_to_true(0, snip.length) do |len|
|
|
66
|
+
text_width_bigger_than?(font, snip[0, len], space - 4 - dw)
|
|
67
|
+
end
|
|
68
|
+
snip = snip[0, pos] << "..."
|
|
69
|
+
dc.setClipRectangle(xx, y, space, h)
|
|
70
|
+
dc.drawText(xx + 2, yt + font.fontAscent + 2, snip)
|
|
71
|
+
dc.clearClipRectangle
|
|
72
|
+
# puts "drawText(#{xx+2},#{yt+font.fontAscent+2},#{snip.inspect})"
|
|
73
|
+
else
|
|
74
|
+
dc.drawText(xx + 2, yt + font.fontAscent + 2, snip)
|
|
75
|
+
# puts "drawText(#{xx+2},#{yt+font.fontAscent+2},#{snip.inspect})"
|
|
76
|
+
end
|
|
77
|
+
xx += space
|
|
78
|
+
used = 0
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
private
|
|
84
|
+
|
|
85
|
+
def text_width_bigger_than?(font, text, max_size)
|
|
86
|
+
# work around of int16 limitation to getTextWidth return value
|
|
87
|
+
(text.length > 4000) ? true : (font.getTextWidth(text) > max_size)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def find_edge_false_to_true(pos_false, pos_true, delta = 1, &block)
|
|
91
|
+
pos = (pos_false + pos_true) / 2
|
|
92
|
+
return pos if pos <= pos_false && pos >= pos_true - delta
|
|
93
|
+
|
|
94
|
+
if block.call(pos)
|
|
95
|
+
find_edge_false_to_true(pos_false, pos, delta, &block)
|
|
96
|
+
else
|
|
97
|
+
find_edge_false_to_true(pos, pos_true, delta, &block)
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require "pmap"
|
|
2
|
+
|
|
3
|
+
module Mcc2
|
|
4
|
+
class GeneratePreview
|
|
5
|
+
attr_accessor :verbose
|
|
6
|
+
attr_accessor :dpi
|
|
7
|
+
attr_accessor :skip_when
|
|
8
|
+
|
|
9
|
+
def initialize
|
|
10
|
+
@mcc2print = Mcc2::Mcc2Print.new
|
|
11
|
+
@dpi = 200
|
|
12
|
+
@skip_when = "uptodate"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def start!(fnames)
|
|
16
|
+
if fnames.empty?
|
|
17
|
+
fnames = (Dir.glob("*.xml") + Dir.glob("*.mcc2")).sort
|
|
18
|
+
end
|
|
19
|
+
fnames.each do |fname|
|
|
20
|
+
fname_png = "#{fname}.png"
|
|
21
|
+
sk = case skip_when
|
|
22
|
+
when "existing" then File.exist?(fname_png)
|
|
23
|
+
when "uptodate" then File.exist?(fname_png) && File.mtime(fname) <= File.mtime(fname_png)
|
|
24
|
+
when "none" then false
|
|
25
|
+
else
|
|
26
|
+
raise "invalid skip mode: #{skip_when}"
|
|
27
|
+
end
|
|
28
|
+
if sk
|
|
29
|
+
puts "Skip #{fname} (is #{skip_when})" if verbose
|
|
30
|
+
next
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
fna = File.basename(fname)
|
|
34
|
+
kwargs = {
|
|
35
|
+
"//Layout/datasource_typ" => "none",
|
|
36
|
+
"//Layout/datasource" => "3",
|
|
37
|
+
"//Layout/barcode_dpi" => dpi.to_s,
|
|
38
|
+
"{#{fna}}//Layout/datasource" => "1",
|
|
39
|
+
"{#{fna}}//Layout/printertype" => "FilePrinter",
|
|
40
|
+
"{#{fna}}//Layout/fileprinter_save_as" => fname_png,
|
|
41
|
+
"{#{fna}}//Layout/fileprinter_dpi" => dpi.to_s
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
begin
|
|
45
|
+
puts "Processing #{fname}" if verbose
|
|
46
|
+
@mcc2print.start!(fname, kwargs)
|
|
47
|
+
rescue => err
|
|
48
|
+
warn "#{fname}: #{err}"
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def self.run(argv)
|
|
54
|
+
app = new
|
|
55
|
+
|
|
56
|
+
OptionParser.new do |opts|
|
|
57
|
+
opts.banner = "Usage: #{$0} <layout.mcc2>* [options]"
|
|
58
|
+
|
|
59
|
+
opts.on("-v", "--[no-]verbose", "Run verbosely", &app.method(:verbose=))
|
|
60
|
+
Locales.add_lang_option(opts)
|
|
61
|
+
opts.on("--dpi INT", "Generate previews with INT DPI [#{app.dpi}]", &app.method(:dpi=))
|
|
62
|
+
opts.on("--skip MODE", "Skip files when: uptodate|existing|none [#{app.skip_when}]", &app.method(:skip_when=))
|
|
63
|
+
end.parse!
|
|
64
|
+
|
|
65
|
+
app.start!(argv)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
Binary file
|