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,139 @@
|
|
|
1
|
+
# source generated by foxGUIb 0.7.1
|
|
2
|
+
|
|
3
|
+
class PictureDataEditDialogBox
|
|
4
|
+
def initialize(parent)
|
|
5
|
+
construct_widget_tree(parent)
|
|
6
|
+
init if respond_to? :init
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def construct_widget_tree(parent)
|
|
10
|
+
@topwin =
|
|
11
|
+
FX::DialogBox.new(parent) { |w|
|
|
12
|
+
@pictureDataEditDialogBox = w
|
|
13
|
+
w.wdg_name = "pictureDataEditDialogBox"
|
|
14
|
+
w.width = 365
|
|
15
|
+
w.shown = true
|
|
16
|
+
w.y = 331
|
|
17
|
+
w.height = 119
|
|
18
|
+
w.x = 276
|
|
19
|
+
FX::VerticalFrame.new(@pictureDataEditDialogBox) { |w|
|
|
20
|
+
@verticalframe1 = w
|
|
21
|
+
w.wdg_name = "verticalframe1"
|
|
22
|
+
w.width = 365
|
|
23
|
+
w.height = 119
|
|
24
|
+
FX::Packer.new(@verticalframe1) { |w|
|
|
25
|
+
@packer2 = w
|
|
26
|
+
w.wdg_name = "packer2"
|
|
27
|
+
w.width = 365
|
|
28
|
+
w.height = 20
|
|
29
|
+
w.layoutHints = 1536
|
|
30
|
+
}
|
|
31
|
+
FX::HorizontalFrame.new(@verticalframe1) { |w|
|
|
32
|
+
@horizontalframe1 = w
|
|
33
|
+
w.wdg_name = "horizontalframe1"
|
|
34
|
+
w.width = 365
|
|
35
|
+
w.y = 20
|
|
36
|
+
w.height = 21
|
|
37
|
+
w.layoutHints = 1024
|
|
38
|
+
FX::Packer.new(@horizontalframe1) { |w|
|
|
39
|
+
@packer3 = w
|
|
40
|
+
w.wdg_name = "packer3"
|
|
41
|
+
w.width = 20
|
|
42
|
+
w.height = 21
|
|
43
|
+
w.layoutHints = 2304
|
|
44
|
+
}
|
|
45
|
+
FX::TextField.new(@horizontalframe1) { |w|
|
|
46
|
+
@textfield_data = w
|
|
47
|
+
w.wdg_name = "textfield_data"
|
|
48
|
+
w.width = 325
|
|
49
|
+
w.height = 19
|
|
50
|
+
w.numColumns = 10
|
|
51
|
+
w.layoutHints = 1024
|
|
52
|
+
w.x = 20
|
|
53
|
+
}
|
|
54
|
+
FX::Button.new(@horizontalframe1) { |w|
|
|
55
|
+
@button_file = w
|
|
56
|
+
w.wdg_name = "button_file"
|
|
57
|
+
w.text = "..."
|
|
58
|
+
w.width = 20
|
|
59
|
+
w.height = 21
|
|
60
|
+
w.x = 345
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
FX::Packer.new(@verticalframe1) { |w|
|
|
64
|
+
@packer4 = w
|
|
65
|
+
w.wdg_name = "packer4"
|
|
66
|
+
w.width = 365
|
|
67
|
+
w.y = 41
|
|
68
|
+
w.height = 20
|
|
69
|
+
w.layoutHints = 1536
|
|
70
|
+
}
|
|
71
|
+
FX::HorizontalFrame.new(@verticalframe1) { |w|
|
|
72
|
+
@horizontalframe2 = w
|
|
73
|
+
w.wdg_name = "horizontalframe2"
|
|
74
|
+
w.width = 365
|
|
75
|
+
w.y = 61
|
|
76
|
+
w.height = 58
|
|
77
|
+
FX::Packer.new(@horizontalframe2) { |w|
|
|
78
|
+
@packer5 = w
|
|
79
|
+
w.wdg_name = "packer5"
|
|
80
|
+
w.width = 20
|
|
81
|
+
w.height = 58
|
|
82
|
+
w.layoutHints = 2304
|
|
83
|
+
}
|
|
84
|
+
FX::Button.new(@horizontalframe2) { |w|
|
|
85
|
+
@button_exit = w
|
|
86
|
+
w.wdg_name = "button_exit"
|
|
87
|
+
w.text = "Beenden"
|
|
88
|
+
w.width = 100
|
|
89
|
+
w.height = 21
|
|
90
|
+
w.layoutHints = 256
|
|
91
|
+
w.x = 20
|
|
92
|
+
}
|
|
93
|
+
FX::Button.new(@horizontalframe2) { |w|
|
|
94
|
+
@button_cancel = w
|
|
95
|
+
w.wdg_name = "button_cancel"
|
|
96
|
+
w.text = "Abbrechen"
|
|
97
|
+
w.width = 100
|
|
98
|
+
w.height = 21
|
|
99
|
+
w.layoutHints = 256
|
|
100
|
+
w.x = 120
|
|
101
|
+
}
|
|
102
|
+
FX::Button.new(@horizontalframe2) { |w|
|
|
103
|
+
@button_apply = w
|
|
104
|
+
w.wdg_name = "button_apply"
|
|
105
|
+
w.text = "\303\234bernehmen"
|
|
106
|
+
w.width = 100
|
|
107
|
+
w.height = 21
|
|
108
|
+
w.layoutHints = 256
|
|
109
|
+
w.x = 220
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
end
|
|
115
|
+
attr_reader :topwin
|
|
116
|
+
attr_reader :pictureDataEditDialogBox
|
|
117
|
+
attr_reader :verticalframe1
|
|
118
|
+
attr_reader :packer2
|
|
119
|
+
attr_reader :horizontalframe1
|
|
120
|
+
attr_reader :packer3
|
|
121
|
+
attr_reader :textfield_data
|
|
122
|
+
attr_reader :button_file
|
|
123
|
+
attr_reader :packer4
|
|
124
|
+
attr_reader :horizontalframe2
|
|
125
|
+
attr_reader :packer5
|
|
126
|
+
attr_reader :button_exit
|
|
127
|
+
attr_reader :button_cancel
|
|
128
|
+
attr_reader :button_apply
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# unit test
|
|
132
|
+
if __FILE__ == $0
|
|
133
|
+
require "libGUIb16"
|
|
134
|
+
app = FX::App.new
|
|
135
|
+
w = PictureDataEditDialogBox.new app
|
|
136
|
+
w.topwin.show(Fox::PLACEMENT_SCREEN)
|
|
137
|
+
app.create
|
|
138
|
+
app.run
|
|
139
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
module Mcc2
|
|
2
|
+
# FehlerAuswahlDialog mit variablen Buttons zur Eingabe der Batchnummer
|
|
3
|
+
class FXFehlerAuswahlDialog < Fox::FXDialogBox
|
|
4
|
+
include Fox
|
|
5
|
+
attr_accessor :selection
|
|
6
|
+
|
|
7
|
+
def initialize(owner, message, buttonlist)
|
|
8
|
+
# Invoke base class initialize function first
|
|
9
|
+
super(owner, I18n.t(:question_dialog_caption, default: "Modusauswahl (bitte unterstrichenen Buchstabe drücken)"), DECOR_TITLE | DECOR_BORDER)
|
|
10
|
+
|
|
11
|
+
# Bottom buttons
|
|
12
|
+
FXVerticalFrame.new(self,
|
|
13
|
+
LAYOUT_SIDE_BOTTOM | FRAME_NONE | LAYOUT_FILL_X | PACK_UNIFORM_WIDTH,
|
|
14
|
+
0, 0, 0, 0, 40, 40, 20, 20) do |vf|
|
|
15
|
+
@l = FXLabel.new(vf, message)
|
|
16
|
+
|
|
17
|
+
buttonsfr = FXHorizontalFrame.new(vf,
|
|
18
|
+
FRAME_NONE | LAYOUT_FILL_X | PACK_UNIFORM_WIDTH,
|
|
19
|
+
0, 0, 0, 0, 40, 40, 20, 40)
|
|
20
|
+
|
|
21
|
+
buttonlist.each_with_index { |button, button_idx|
|
|
22
|
+
FXButton.new(buttonsfr, button, nil, self, ID_CANCEL,
|
|
23
|
+
FRAME_RAISED | FRAME_THICK | LAYOUT_CENTER_Y) { |this|
|
|
24
|
+
this.connect(SEL_COMMAND) { |sender, sel, event|
|
|
25
|
+
handle(self, MKUINT(FXDialogBox::ID_ACCEPT, SEL_COMMAND), nil)
|
|
26
|
+
@selection = button_idx
|
|
27
|
+
}
|
|
28
|
+
if button_idx == 0
|
|
29
|
+
this.setFocus
|
|
30
|
+
this.connect(SEL_KEYPRESS) { |sender, sel, event|
|
|
31
|
+
if event.code == KEY_Escape
|
|
32
|
+
handle(self, MKUINT(FXDialogBox::ID_ACCEPT, SEL_COMMAND), nil)
|
|
33
|
+
@selection = 0
|
|
34
|
+
else
|
|
35
|
+
buttonlist.each_with_index { |button, button_idx|
|
|
36
|
+
if button =~ /&(\w)/
|
|
37
|
+
keycode = eval("KEY_#{$1.downcase}")
|
|
38
|
+
if keycode == event.code
|
|
39
|
+
handle(self, MKUINT(FXDialogBox::ID_ACCEPT, SEL_COMMAND), nil)
|
|
40
|
+
@selection = button_idx
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
}
|
|
44
|
+
end
|
|
45
|
+
}
|
|
46
|
+
end
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end # Ende Klasse 'FXFehlerAuswahlDialog'
|
|
52
|
+
end
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# *****************************************************************************
|
|
2
|
+
|
|
3
|
+
module Mcc2
|
|
4
|
+
# Konstanten-Definition
|
|
5
|
+
TAB = 9.chr
|
|
6
|
+
|
|
7
|
+
FRONT = 0
|
|
8
|
+
BACK = 1
|
|
9
|
+
|
|
10
|
+
# das sind die Bezeichner von Attributen, die ein grafisches Objekt haben kann
|
|
11
|
+
GOA_NAME = "object_name"
|
|
12
|
+
GOA_TYP = "object_typ"
|
|
13
|
+
GOA_PAGE_NR = "page_nr"
|
|
14
|
+
GOA_LAYER = "layer"
|
|
15
|
+
GOA_FONT_HEIGHT = "font_height"
|
|
16
|
+
GOA_FONT_TYP = "font_typ"
|
|
17
|
+
GOA_FONT_WEIGHT = "font_weight"
|
|
18
|
+
GOA_FONT_STYLE = "font_style"
|
|
19
|
+
GOA_FONT_STRETCH = "font_stretch"
|
|
20
|
+
GOA_FONT_COLOR = "font_color"
|
|
21
|
+
GOA_FONT_FILE = "font_file"
|
|
22
|
+
GOA_BACK_COLOR = "back_color"
|
|
23
|
+
GOA_JUSTIFICATION = "justification"
|
|
24
|
+
GOA_JUSTIFICATION_BLOCK = "justification_block"
|
|
25
|
+
GOA_X = "x"
|
|
26
|
+
GOA_Y = "y"
|
|
27
|
+
GOA_WIDTH = "width"
|
|
28
|
+
GOA_HEIGHT = "height"
|
|
29
|
+
GOA_ROTATION = "rotation"
|
|
30
|
+
GOA_ID = "id"
|
|
31
|
+
GOA_BARCODE_TYP = "barcode_typ"
|
|
32
|
+
GOA_BARCODE_HEIGHT = "barcode_height"
|
|
33
|
+
GOA_BARCODE_OPTIMIZED = "barcode_optimized"
|
|
34
|
+
GOA_BARCODE_OPTION_1 = "barcode_option_1"
|
|
35
|
+
GOA_BARCODE_OPTION_2 = "barcode_option_2"
|
|
36
|
+
GOA_BARCODE_OPTION_3 = "barcode_option_3"
|
|
37
|
+
GOA_DATA = "data"
|
|
38
|
+
GOA_SAMPLE_DATA = "sample_data"
|
|
39
|
+
GOA_PRINTLIST = "view_in_printlist"
|
|
40
|
+
GOA_IMAGE_PAGE = "image_page"
|
|
41
|
+
|
|
42
|
+
GOA_FILL_COLOR = "fill_color"
|
|
43
|
+
GOA_BORDER_COLOR = "border_color"
|
|
44
|
+
GOA_BORDER_WIDTH = "border_width"
|
|
45
|
+
GOA_CORNER_RADIUS = "corner_radius"
|
|
46
|
+
|
|
47
|
+
# das sind die Objektbezeichner
|
|
48
|
+
GRAPHICOBJECTS = "GraphicObjects"
|
|
49
|
+
GRAPHICOBJECT = "GraphicObject"
|
|
50
|
+
TEXTOBJECT = "TextObject"
|
|
51
|
+
BARCODEOBJECT = "BarcodeObject"
|
|
52
|
+
PICTUREOBJECT = "PictureObject"
|
|
53
|
+
BOXOBJECT = "BoxObject"
|
|
54
|
+
EMBEDOBJECT = "EmbedObject"
|
|
55
|
+
|
|
56
|
+
S_LAYOUT = "Layout"
|
|
57
|
+
S_DUPLEX = "Duplex"
|
|
58
|
+
S_CONTACTLESS = "Contactless"
|
|
59
|
+
S_CONTACT = "Contact"
|
|
60
|
+
S_MAGSTRIPE = "Magstripe"
|
|
61
|
+
|
|
62
|
+
S_CHIP = "Chip_Params"
|
|
63
|
+
S_MAGSTRIPEPARAMS = "Magstripe_Params"
|
|
64
|
+
S_HEIGHT = "Height"
|
|
65
|
+
S_WIDTH = "Width"
|
|
66
|
+
S_PARAM = "Param"
|
|
67
|
+
S_ROOT = "Root"
|
|
68
|
+
S_X_OFFSET = "x_offset"
|
|
69
|
+
S_Y_OFFSET = "y_offset"
|
|
70
|
+
S_JUST_LEFT = "left"
|
|
71
|
+
S_JUST_MID = "mid"
|
|
72
|
+
S_JUST_RIGHT = "right"
|
|
73
|
+
S_BARCODE_DPI = "barcode_dpi"
|
|
74
|
+
|
|
75
|
+
S_DATASOURCE = "datasource"
|
|
76
|
+
S_DATASOURCETYP = "datasource_typ"
|
|
77
|
+
S_DATASOURCEENCODING = "datasource_encoding"
|
|
78
|
+
|
|
79
|
+
S_CHIPPARAMS = "chipparams"
|
|
80
|
+
S_PRINTERTYPE = "printertype"
|
|
81
|
+
|
|
82
|
+
S_FILEPRINTER_SAVE_AS = "fileprinter_save_as"
|
|
83
|
+
S_FILEPRINTER_DPI = "fileprinter_dpi"
|
|
84
|
+
|
|
85
|
+
S_LINUX_CUPS_PRINTER = "linux_cups_printer"
|
|
86
|
+
S_LINUX_CUPS_DPI = "linux_cups_dpi"
|
|
87
|
+
S_LINUX_CUPS_OPTIONS = "linux_cups_options"
|
|
88
|
+
|
|
89
|
+
S_GDIPRINTER_NAME = "gdiprinter_name"
|
|
90
|
+
S_GDIPRINTER_INITDATA = "gdiprinter_initdata"
|
|
91
|
+
S_ZEBRAPRINTER_NAME = "zebraprinter_name"
|
|
92
|
+
S_ZEBRAPRINTER_INITDATA = "zebraprinter_initdata"
|
|
93
|
+
S_CABPRINTER_HOST = "cabprinter_host"
|
|
94
|
+
S_CABPRINTER_PORT = "cabprinter_port"
|
|
95
|
+
S_CABPRINTER_DPI = "cabprinter_dpi"
|
|
96
|
+
S_CABPRINTER_PAGE_COMMANDS = "cabprinter_page_commands"
|
|
97
|
+
S_EPLPRINTER_DEVICE = "eplprinter_device"
|
|
98
|
+
S_EPLPRINTER_DPI = "eplprinter_dpi"
|
|
99
|
+
S_EPLPRINTER_PAGE_COMMANDS = "eplprinter_page_commands"
|
|
100
|
+
|
|
101
|
+
# TSC TTP 343M Pro
|
|
102
|
+
S_TTP34XPRINTER_DEVICE = "ttp34xprinter_device"
|
|
103
|
+
S_TTP34XPRINTER_DPI = "ttp34xprinter_dpi"
|
|
104
|
+
S_TTP34XPRINTER_PAGE_COMMANDS = "ttp34xprinter_page_commands"
|
|
105
|
+
|
|
106
|
+
S_CX320_DRIVER = "cx320_driver"
|
|
107
|
+
S_CX320_PRINTER_NR = "cx320_printer_nr"
|
|
108
|
+
S_CX320_PARALLEL_PRINT = "cx320_parallel_print"
|
|
109
|
+
S_CX320_CONFIG = "cx320_config"
|
|
110
|
+
|
|
111
|
+
S_FRONT_FLIP = "front_flip"
|
|
112
|
+
S_FRONT_FLOP = "front_flop"
|
|
113
|
+
S_BACK_FLIP = "back_flip"
|
|
114
|
+
S_BACK_FLOP = "back_flop"
|
|
115
|
+
|
|
116
|
+
UP = 0
|
|
117
|
+
DOWN = 1
|
|
118
|
+
|
|
119
|
+
NONE = "none"
|
|
120
|
+
CSV = "csv"
|
|
121
|
+
DBF = "dbf"
|
|
122
|
+
DATABASE = "database"
|
|
123
|
+
|
|
124
|
+
NO = "no"
|
|
125
|
+
YES = "yes"
|
|
126
|
+
|
|
127
|
+
S_FALSE = "false"
|
|
128
|
+
S_TRUE = "true"
|
|
129
|
+
|
|
130
|
+
ENC_UTF8 = "UTF-8"
|
|
131
|
+
ENC_IBM850 = "IBM850"
|
|
132
|
+
ENC_LATIN1 = "LATIN1"
|
|
133
|
+
|
|
134
|
+
VALID_ENCODINGS = [ENC_UTF8, ENC_IBM850, ENC_LATIN1]
|
|
135
|
+
VALID_DATASOURCES = [DATABASE, CSV, DBF, NONE]
|
|
136
|
+
|
|
137
|
+
DELETE = 0
|
|
138
|
+
COPY = 1
|
|
139
|
+
ADD = 2
|
|
140
|
+
|
|
141
|
+
S_MSSPUR1 = "ms_spur1"
|
|
142
|
+
S_MSSPUR2 = "ms_spur2"
|
|
143
|
+
S_MSSPUR3 = "ms_spur3"
|
|
144
|
+
|
|
145
|
+
PRINT_FROM = 0
|
|
146
|
+
PRINT_TO = 1
|
|
147
|
+
|
|
148
|
+
LAYOUT_DEFAULT_WIDTH = 85.6
|
|
149
|
+
LAYOUT_DEFAULT_HEIGHT = 53.98
|
|
150
|
+
LAYOUT_DEFAULT_X_OFFSET = 0.0
|
|
151
|
+
LAYOUT_DEFAULT_Y_OFFSET = 0.0
|
|
152
|
+
|
|
153
|
+
CHIPPARAM_FIELD_COUNT = 23
|
|
154
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require "mcc2/constants"
|
|
2
|
+
|
|
3
|
+
module Mcc2
|
|
4
|
+
module DataMan
|
|
5
|
+
# ermittelt, ob der übergebene String eine erlaubtes Encoding ist
|
|
6
|
+
# === Return
|
|
7
|
+
# true oder false
|
|
8
|
+
# === Paramter
|
|
9
|
+
# +encoding+:: das Encoding [String]
|
|
10
|
+
def self.valid_datasource_encoding?(encoding)
|
|
11
|
+
VALID_ENCODINGS.include?(encoding.upcase)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# ermittelt, ob der übergebene String eine erlaubte Datenquelle ist
|
|
15
|
+
# === Return
|
|
16
|
+
# true oder false
|
|
17
|
+
# === Paramter
|
|
18
|
+
# +datasource+:: der Datenquellentyp [String]
|
|
19
|
+
def self.valid_datasourcetyp?(datasource)
|
|
20
|
+
VALID_DATASOURCES.include?(datasource)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# ersetzt die Felder in data, welche dem Muster {feldname[pos,anz]} entsprechen, durch ihren Inhalt
|
|
24
|
+
# === Paramter
|
|
25
|
+
# +data+:: die im Layut definierten Daten für dieses Objekt
|
|
26
|
+
# +row+:: ein Datensatz im FasteCSV-Format
|
|
27
|
+
def self.replace_variables(data, row)
|
|
28
|
+
return data unless row # die unveränderten Daten zurückgeben, wenn kein Datensatz übergeben wurde
|
|
29
|
+
pattern = /\{ *([-\._\w]*)\[ *(\d{1,5}) *, *(\d{1,5}) *\] *\}/
|
|
30
|
+
data.gsub(pattern) {
|
|
31
|
+
feld = $1
|
|
32
|
+
von = $2.to_i
|
|
33
|
+
anz = $3.to_i
|
|
34
|
+
vardata = row[feld].to_s[von, anz].strip
|
|
35
|
+
if row.to_hash.has_key?(feld)
|
|
36
|
+
vardata
|
|
37
|
+
else
|
|
38
|
+
$& # die unveränderten Daten zurückgeben, wenn kein passendes Feld im Datensatz gefunden wurde
|
|
39
|
+
end
|
|
40
|
+
}
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def self.meta_headers
|
|
44
|
+
["row_number"]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
class Base
|
|
48
|
+
class BadEncodingError < RuntimeError
|
|
49
|
+
end
|
|
50
|
+
attr_reader :filename
|
|
51
|
+
|
|
52
|
+
def headers
|
|
53
|
+
data_headers + meta_headers
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def meta_headers
|
|
57
|
+
DataMan.meta_headers
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require "mcc2/dataman/base"
|
|
2
|
+
require "csv"
|
|
3
|
+
|
|
4
|
+
module Mcc2
|
|
5
|
+
module DataMan
|
|
6
|
+
class CSV < Base
|
|
7
|
+
class CanNotOpenFile < RuntimeError
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
class DataNotAvailable < RuntimeError
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def initialize(fn, encoding)
|
|
14
|
+
@table = nil
|
|
15
|
+
|
|
16
|
+
return if fn.empty?
|
|
17
|
+
|
|
18
|
+
fail CanNotOpenFile, "CSV file not found: #{fn.inspect}" unless File.exist?(fn)
|
|
19
|
+
@table = ::CSV.read(fn, col_sep: ";", encoding: "#{encoding}:UTF-8")
|
|
20
|
+
fail DataNotAvailable, "CSV file #{fn} contains no records" unless @table
|
|
21
|
+
|
|
22
|
+
@header_row = @table.slice!(0) if @table && @table.size > 0
|
|
23
|
+
|
|
24
|
+
# convert Array of Arrays to Array of Hashs
|
|
25
|
+
@table = @table.map.with_index(1) do |row, row_number|
|
|
26
|
+
h = {"row_number" => row_number.to_s}
|
|
27
|
+
row.each_with_index do |text, idx|
|
|
28
|
+
h[@header_row[idx]] = text
|
|
29
|
+
end
|
|
30
|
+
h
|
|
31
|
+
end
|
|
32
|
+
@filename = fn
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def data_headers
|
|
36
|
+
@header_row
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def row(index)
|
|
40
|
+
return unless @table
|
|
41
|
+
@table[index]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def rows
|
|
45
|
+
@table
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require "mcc2/dataman/base"
|
|
2
|
+
require "dbf"
|
|
3
|
+
|
|
4
|
+
module Mcc2
|
|
5
|
+
module DataMan
|
|
6
|
+
class DBF < Base
|
|
7
|
+
class CanNotOpenFile < RuntimeError
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def initialize(fn, encoding)
|
|
11
|
+
@table = nil
|
|
12
|
+
|
|
13
|
+
return if fn.empty?
|
|
14
|
+
|
|
15
|
+
raise CanNotOpenFile, "DBF file not found: #{fn.inspect}" unless File.exist?(fn)
|
|
16
|
+
table = ::DBF::Table.new(fn)
|
|
17
|
+
@header_row = table.columns.map { |c| c.name }
|
|
18
|
+
|
|
19
|
+
# convert DBF::Table to Array of Hashs
|
|
20
|
+
@table = []
|
|
21
|
+
table.each.with_index(1) do |row, row_number|
|
|
22
|
+
h = {"row_number" => row_number.to_s}
|
|
23
|
+
row.to_a.each_with_index do |text, idx|
|
|
24
|
+
h[@header_row[idx]] = text.to_s.encode("utf-8", encoding)
|
|
25
|
+
end
|
|
26
|
+
@table << h
|
|
27
|
+
end
|
|
28
|
+
@filename = fn
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def data_headers
|
|
32
|
+
@header_row
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def row(index)
|
|
36
|
+
return unless @table
|
|
37
|
+
@table[index]
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def rows
|
|
41
|
+
@table
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require "mcc2/dataman/base"
|
|
2
|
+
|
|
3
|
+
module Mcc2
|
|
4
|
+
module DataMan
|
|
5
|
+
class None < Base
|
|
6
|
+
def initialize(datasource)
|
|
7
|
+
@num_rows = datasource.to_i
|
|
8
|
+
@num_rows = 100 if @num_rows == 0
|
|
9
|
+
@rows = @num_rows.times.map do |row_number|
|
|
10
|
+
{"row_number" => (row_number + 1).to_s}
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def data_headers
|
|
15
|
+
[]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def row(index)
|
|
19
|
+
@rows[index]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
attr_reader :rows
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|