added checking XML for unrecognized variation/variable values,

various fixes
This commit is contained in:
zueuk 2009-04-20 08:11:31 +00:00
parent 1b0e2c0570
commit f07fd06bdd
2 changed files with 342 additions and 322 deletions

View File

@ -43,7 +43,7 @@ object MainForm: TMainForm
Images = Buttons Images = Buttons
ParentShowHint = False ParentShowHint = False
ShowHint = True ShowHint = True
TabOrder = 0 TabOrder = 1
object btnOpen: TToolButton object btnOpen: TToolButton
Left = 0 Left = 0
Top = 0 Top = 0
@ -312,20 +312,24 @@ object MainForm: TMainForm
Width = 160 Width = 160
Height = 430 Height = 430
Align = alLeft Align = alLeft
BevelOuter = bvNone
Columns = < Columns = <
item item
Caption = 'Title' Caption = 'Title'
Width = 150 Width = 150
end> end>
HideSelection = False HideSelection = False
ParentShowHint = False
PopupMenu = ListPopUp PopupMenu = ListPopUp
ShowHint = True
SmallImages = SmallImages SmallImages = SmallImages
TabOrder = 1 TabOrder = 0
ViewStyle = vsReport ViewStyle = vsReport
OnChange = ListViewChange OnChange = ListViewChange
OnChanging = ListViewChanging OnChanging = ListViewChanging
OnEdited = ListViewEdited OnEdited = ListViewEdited
OnInfoTip = ListViewInfoTip OnInfoTip = ListViewInfoTip
OnSelectItem = ListViewSelectItem
end end
object BackPanel: TPanel object BackPanel: TPanel
Left = 164 Left = 164
@ -2365,275 +2369,143 @@ object MainForm: TMainForm
Left = 40 Left = 40
Top = 56 Top = 56
Bitmap = { Bitmap = {
494C010101000500040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 494C010102000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
0000000000003600000028000000400000002000000001002000000000000020 0000000000003600000028000000400000001000000001002000000000000010
000000000000000000000000000000000000000000009C636300FFFFFF00FFFF 0000000000000000000000000000000000000000000041414100464646004F4F
FF00FFFFFF00FFFFFF00FFFFFF009C636300FFFFFF00FFFFFF00FFFFFF00FFFF 4F00585858005C5D5D005F5F5F005D5D5D005B5B5B00575757004F4F4F004444
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00CECE 44003B3B3B000000000000000000000000000000000041414100464646004F4F
CE0000000000000000000000000000000000FF6331000000000000000000FF63 4F00585858005C5D5D00425562004A9BB60044869C0044869C0044869C004486
310000000000000000000000000000636300639C9C000063630000313100CECE 9C0044869C0044869C003E718100000000000000000000000000000000000000
CE00CEFFFF00FFFFFF009CCECE009CCECE009CCECE0031313100000000000000
00000000000063636300FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00CEFFFF00CEFFFF00CEFFFF00CEFFFF00CEFF
FF009CFFFF000000000000000000000000009CCECE000063630031000000CEFF
FF00CECECE00CECECE00CEFFFF00FF6331003131310000000000000000000000
00000000000063636300FFFFFF003100FF003100FF0000006300FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00CEFFFF00CEFFFF00CEFF
FF00CEFFFF000000000000000000000000000000000000000000000000000000
00000000000000000000FFFFFF00636363006363630063636300636363006363
6300636363006363630063636300636363006363630063636300636363006363
630063636300000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
000000000000FFFFFF00FF000000FF000000CEFFFF00CEFFFF00CEFFFF00FF00
0000630000009CFFFF009CFFFF0000FFFF0000FFFF0000000000000000000000
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000009C636300FFFFFF00FFFF
FF00FF9C3100FFFFFF00FFFFFF009C636300FFFFFF00FFFFFF00FF9C3100FF9C
3100FF9C3100FF9C3100FF633100FF633100FF633100FF633100FFFFFF00CECE
CE0000000000000000000000000000000000FF63310000000000000000000000
000000000000000000000000000000636300000000009C636300FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF009C636300FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00CECE
CE0000000000000000000000000000000000FF63310000000000000000000000
0000000000000000000000000000006363009CCECE00639C9C00006363000063
6300CEFFFF00CEFFFF00CECECE009CCECE000000000000000000000000000000
00000000000063636300FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00CEFF
FF00FFFFFF00000000000000000000000000006363009CCECE00639C9C00639C
9C0000636300CECECE00CEFFFF00CECECE003131310000000000000000000000
0000000000006363630063636300636363006363630063636300636363006363
6300636363006363630063636300636363006363630063636300636363006363
6300636363000000000000000000000000000000000000000000000000000000
00009C9C9C00FFFFFF00FFFFFF00FFFFFF0063000000FFFFFF00CEFFFF00CEFF
FF00CEFFFF00FF0000009C0000009CFFFF0000FFFF0000000000000000000000
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
0000000000009C9C9C009C9C9C00FFFFFF00FFFFFF00FFFFFF00FFFFFF00CEFF
FF00CEFFFF00CEFFFF00CEFFFF009CFFFF000000000000000000000000000000
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000009C636300FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF009C636300FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00CECE
CE000000000000000000000000000000000000000000FF633100000000000000
0000000000000000000000000000000000000000000063000000630000006300
0000630000006300000063000000630000006300000063000000630000006300
0000630000006300000063000000630000006300000063000000630000006300
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000006363009CCECE009CCECE00639C
9C00639C9C000063630000636300313131000063630000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000636300006363009CCE
CE009CCECE00639C9C00639C9C00006363000063630000000000000000000000
0000000000000000000000000000000000000000000000000000630000009C00
00009C0000006300000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000009C9C9C009C9C9C00FFFFFF00FFFFFF00FFFF
FF00CEFFFF00CEFFFF00CEFFFF00CEFFFF000000000000000000000000000000
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
000000000000000000000000000000000000000000009C9C9C009C9C9C00FFFF
FF00FFFFFF00FFFFFF00CEFFFF00000000000000000000000000000000000000
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FF000000FFFF3100FF9C
3100FF9C3100FF633100FF633100FF633100FF633100FF633100FF633100FF63
3100FF633100FF633100FF633100FF633100FF633100FF633100FF633100FF63
3100000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000FF000000FF000000FF00
0000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00
0000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000063
6300006363000063630000636300000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000006300
0000CE0031009C00000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FF6331000000000000000000FF000000CE00
3100CE0031006300000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000009C9C
9C009C9C9C00FFFFFF00CEFFFF00000000000000000000000000000000000000
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000009C9C9C0000000000000000000000000000000000000000000000
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000FF633100FF000000FF000000FF00
0000000000009C00000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000084
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000FF0000FFFF000063FF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000636300CEFFFF0000CEFF0000CEFF00009CCE0000CE
FF00009CCE0000CEFF00009CCE00009CCE00639C9C00009CCE00639C9C00009C
CE0000000000000000000000000000000000000000000000000000009C000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000009C00000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000CEEFFF00CEEF
FF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEF
FF00CEEFFF00CEEFFF0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFF7EF00FFF7E700FFF7EF00FFF7EF00FFF7
EF00FFF7F700FFFFF70000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000CEEFFF00CEEF
FF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEF
FF00CEEFFF00CEEFFF000000000000000000000000000000000031638C003163
8C00000000000000000000000000000000000000000000000000DEDEDE00DEDE
DE000000000031638C0000000000000000000000000031638C0031638C000000
0000000000000000000000000000FFF7E700D6632100D6733100D6733100D663
1000D6632100FFF7EF0000000000000000000000000000000000FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000
0000000000000000000000000000000000000000000000000000CEEFFF00CEEF
FF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEF
FF00CEEFFF00CEEFFF000000000000000000000000000000000031638C003163
8C00000000000000000000000000000000000000000000000000DEDEDE00DEDE
DE000000000031638C0000000000000000000000000031638C0031638C000000
0000000000000000000000000000FFEFE700E7A57B00FFFFE700FFF7E700FFAD
6B00E7AD8400FFEFDE0000000000000000000000000000000000FFFFFF006BB5
E700F7FFFF006BB5E7006BB5E7006BB5E700F7FFFF0000000000000000000000
0000000000000000000000000000000000000000000000000000CEEFFF00CEEF
FF00296BAD00296BAD00296BAD00296BAD00296BAD00296BAD00296BAD00296B
AD00CEEFFF00CEEFFF000000000000000000000000000000000031638C003163
8C00000000000000000000000000000000000000000000000000DEDEDE00DEDE
DE000000000031638C0000000000000000000000000031638C0031638C000000
0000000000000000000000000000FFE7DE00E7945A00FFF7EF00FFCEAD00FFCE
AD00E78C4A00FFE7D60000000000000000000000000000000000F7FFFF00EFFF
FF00E7F7FF000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000CEEFFF00CEEF
FF000000000008297B005A9CBD000000000008185A000000000000000000296B
AD00CEEFFF00CEEFFF000000000000000000000000000000000031638C003163
8C00000000000000000000000000000000000000000000000000000000000000
00000000000031638C0000000000000000000000000031638C0031638C000000
0000000000000000000000000000FFE7D600E7844200FFFFFF00FFB59400FFE7
CE00E78C5200FFE7CE0000000000000000000000000000000000F7FFFF0063B5
E70063B5E70000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF000000000000000000000000000000000000000000CEEFFF00CEEF
FF0000000000184A9C004A8CBD00185A9C00397BAD000000080000000000296B
AD00CEEFFF00CEEFFF000000000000000000000000000000000031638C003163
8C0031638C0031638C0031638C0031638C0031638C0031638C0031638C003163
8C0031638C0031638C0000000000000000000000000031638C0031638C003163
8C0031638C0031638C0000000000FFDECE00E7843900FFFFF700FFC69C00FFD6
A500F7B58C00FFDECE0000000000000000000000000000000000EFFFFF00DEF7
FF00CEEFFF0000000000FFFFFF006BB5E700F7FFFF006BB5E7006BB5E7006BB5
E700F7FFFF000000000000000000000000000000000000000000CEEFFF00CEEF
FF0008185A00396BAD00296BAD00185A9C004A8CBD00295A9C0000000000296B
AD00CEEFFF00CEEFFF000000000000000000000000000000000031638C003163
8C00000000000000000000000000000000000000000000000000000000000000
000031638C0031638C0000000000000000000000000031638C0031638C000000
0000000000000000000000000000FFDEC600E78C4200FFFFFF00FFFFF7000000
0000000000000000000000000000000000000000000000000000EFFFFF005AB5
E7005AADE70000000000F7FFFF00EFFFFF00E7F7FF00E7F7FF00E7F7FF00E7F7
FF00E7F7FF000000000000000000000000000000000000000000CEEFFF00CEEF
FF005A9CCE00396BAD0008397B0000081800084A8C008CBDDE00296BAD00296B
AD00CEEFFF00CEEFFF000000000000000000000000000000000031638C000000
0000DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE
DE000000000031638C0000000000000000000000000031638C0000000000DEDE
DE00DEDEDE00DEDEDE0000000000FFDEC600D6631800D6733900E77B39000000
0000F7A57B000000000000000000000000000000000000000000EFF7FF00CEEF
FF00BDE7FF0000000000F7FFFF0063B5E70063B5E700DEF7FF0063B5E70063B5
E700DEF7FF000000000000000000000000000000000000000000CEEFFF00CEEF
FF0000000000397BAD00296BAD00396BAD004A7BBD006BADCE0008083900296B
AD00CEEFFF00CEEFFF000000000000000000000000000000000031638C000000
0000DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE
DE000000000031638C0000000000000000000000000031638C0000000000DEDE
DE00DEDEDE00DEDEDE0000000000FFE7D600FFDEC600FFD6C600FFD6C6000000
0000000000000000000000000000000000000000000000000000EFFFFF0063B5
E700C6EFFF0000000000EFFFFF00DEF7FF00CEEFFF00CEEFFF00CEEFFF00D6F7
FF00DEF7FF000000000000000000000000000000000000000000CEEFFF00CEEF
FF00000000000000000008296B007BADCE007BADCE00184A9C0000082900296B
AD00CEEFFF00CEEFFF000000000000000000000000000000000031638C000000
0000DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE
DE000000000031638C0000000000000000000000000031638C0000000000DEDE
DE00DEDEDE00DEDEDE0000000000000000000000000000000000000000000000
000031638C000000000000000000000000000000000000000000F7FFFF00EFF7
FF00E7F7FF0000000000EFFFFF005AB5E7005AADE700C6EFFF00CEEFFF0063B5
E700EFF7FF000000000000000000000000000000000000000000CEEFFF00CEEF
FF0000000000000000000000000008185A00000818000008290000081800296B
AD00CEEFFF00CEEFFF000000000000000000000000000000000031638C000000
0000DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE
DE000000000031638C0000000000000000000000000031638C0000000000DEDE
DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE000000
000031638C000000000000000000000000000000000000000000000000000000
00000000000000000000EFF7FF00CEEFFF00BDE7FF00BDE7FF00000000000000
0000000000000000000000000000000000000000000000000000CEEFFF00CEEF
FF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEFFF000000
000000000000000000000000000000000000000000000000000031638C000000
0000DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE
DE00000000000000000000000000000000000000000031638C0000000000DEDE
DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000EFFFFF0063B5E700C6EFFF00C6EFFF0000000000C6EF
FF00000000000000000000000000000000000000000000000000CEEFFF00CEEF
FF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEFFF000000
0000ADCEEF00000000000000000000000000000000000000000031638C000000
0000DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE
DE00000000000000000000000000000000000000000031638C0000000000DEDE
DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000F7FFFF00EFF7FF00E7F7FF00E7F7FF00000000000000
0000000000000000000000000000000000000000000000000000CEEFFF00CEEF
FF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEFFF00CEEFFF000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000041414100E1E1E100DEDE
DE00DEDEDE00E4E4E400EAEAEA00F2F2F200F5F5F500F7F7F700F9F9F900F8F8
F800454545000000000000000000000000000000000041414100E1E1E100DEDE
DE00DEDEDE00E4E4E40045859B00A9EEFF0089E7FF0089E7FF0089E7FF0089E7
FF00A9EEFF00A9EEFF0044869C00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000003F3F3F00DCDCDC00DADA
DA00DBDBDB00DEDEDE00E6E6E600EEEEEE00F4F4F400F7F7F700F9F9F900F9F9
F90058585800000000000000000000000000000000003F3F3F00DCDCDC00DADA
DA00DBDBDB00DEDEDE0042556200A9EEFF0089E7FF0089E7FF002D2D2D0089E7
FF0089E7FF00A9EEFF0042556200000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000042424200D5D5D500D3D3
D3008E99A00092B6D20096B4C500778B9B007890AA00F4F4F400F7F7F700F8F8
F8006A6A6A000000000000000000000000000000000042424200D5D5D500D3D3
D3008E99A00092B6D20096B4C50048809600A9EEFF0089E7FF007BCBE00089E7
FF0072E2FF0044869C0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000046464600CDCDCD00747D
8700DFFFFF00B8C7CB006E8DB700EBFFFF007B8689007696B700F4F4F400F5F5
F500747474000000000000000000000000000000000046464600CDCDCD00747D
8700DFFFFF00B8C7CB006E8DB70042556200A9EEFF0089E7FF002D2D2D0089E7
FF0072E2FF004255620000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000004F4F4F00CBCBCB00C2EA
FB00B2CCDD009D95A100E6C5900063668600E9FFFF007C888B0072859700F1F1
F10076767600000000000000000000000000000000004F4F4F00CBCBCB00C2EA
FB00B2CCDD009D95A100E6C59000636686004C7B9100A9EEFF002D2D2D0072E2
FF0044869C000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000005A5B5A00CFCFCF00A8D8
EA00B6AEBB00F7E3C200FFFFFF00FFD8A10063657C00E0FFFF00747D8E00ECEC
EC0073737300000000000000000000000000000000005A5B5A00CFCFCF00A8D8
EA00B6AEBB00F7E3C200FFFFFF00FFD8A10042556200A9EEFF0089E7FF0072E2
FF00425562000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000062626200D8D8D80082A0
B900E2E5DF00EABE9300FFFFFF00FFFFF900C18563007FA0C50099AFBA00E5E5
E500686868000000000000000000000000000000000062626200D8D8D80082A0
B900E2E5DF00EABE9300FFFFFF00FFFFF900C185630050758C00A9EEFF004486
9C00686868000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000068686800E3E3E3006F6F
6F00ACEEFF00FFC09600FFCFA600FDE7BA007C788A00C5E2EC0093B1CA00DDDD
DD00585858000000000000000000000000000000000068686800E3E3E3006F6F
6F00ACEEFF00FFC09600FFCFA600FDE7BA007C788A004255620052748A004255
6200585858000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000006A6A6A00EDEDED00EAEA
EA0063636600B1E5FF00FFECCB00B7AEB800C5DDE900D7FFFF007F98A800D1D1
D10049494900000000000000000000000000000000006A6A6A00EDEDED00EAEA
EA0063636600B1E5FF00FFECCB00B7AEB800C5DDE900D7FFFF007F98A800D1D1
D100494949000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000067676700F4F4F400F2F2
F200EEEEEE006F6F6F007198BC00CAEDF800AAD2E800868D9400CBCBCB00C0C0
C0003E3E3E000000000000000000000000000000000067676700F4F4F400F2F2
F200EEEEEE006F6F6F007198BC00CAEDF800AAD2E800868D9400CBCBCB00C0C0
C0003E3E3E000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000005F5F5F00F7F7F700F5F5
F500F3F3F300F0F0F000ECECEC00E6E6E600DDDDDD00D1D1D100BFBFBF00ADAD
AD003D3D3D00000000000000000000000000000000005F5F5F00F7F7F700F5F5
F500F3F3F300F0F0F000ECECEC00E6E6E600DDDDDD00D1D1D100BFBFBF00ADAD
AD003D3D3D000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000050505000F9F9F900F8F8
F800F7F7F700F4F4F400F1F1F100ECECEC00E1E1E1003B3B3B003D3D3D004343
43003F3F3F000000000000000000000000000000000050505000F9F9F900F8F8
F800F7F7F700F4F4F400F1F1F100ECECEC00E1E1E1003B3B3B003D3D3D004343
43003F3F3F000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000041414100F9F9F900F7F7
F700F7F7F700F6F6F600F3F3F300EEEEEE00E4E4E4004B4B4B00FFFFFF004545
4500000000000000000000000000000000000000000041414100F9F9F900F7F7
F700F7F7F700F6F6F600F3F3F300EEEEEE00E4E4E4004B4B4B00FFFFFF004545
4500000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000037373700F7F7F700F7F7
F700F6F6F600F4F4F400F1F1F100ECECEC00E0E0E000616161005B5B5B000000
0000000000000000000000000000000000000000000037373700F7F7F700F7F7
F700F6F6F600F4F4F400F1F1F100ECECEC00E0E0E000616161005B5B5B000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000373737003E3E3E004949
4900525252005C5C5C0063636300696969006F6F6F0073737300000000000000
00000000000000000000000000000000000000000000373737003E3E3E004949
4900525252005C5C5C0063636300696969006F6F6F0073737300000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000424D3E000000000000003E000000 000000000000000000000000000000000000424D3E000000000000003E000000
2800000040000000200000000100010000000000000100000000000000000000 2800000040000000100000000100010000000000800000000000000000000000
000000000000000000000000FFFFFF00DDE6EA00BBCCD500BBCCD500BBCCD500 000000000000000000000000FFFFFF0080078001000000008007800100000000
BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500 8007800100000000800780030000000080078003000000008007800700000000
0000000000000000BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500 8007800700000000800780070000000080078007000000008007800700000000
BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500 800780070000000080078007000000008007800700000000800F800F00000000
BBCCD500BBCCD500BBCCD500BBCCD5008001D500BBCCD5008001D500BBCCD500 801F801F00000000803F803F0000000000000000000000000000000000000000
8001D500BBCCD5008001D500BBCCD5008001D500BBCCD5008001D500BBCCD500
8001D500BBCCD5008001D500BBCCD5008001EA00BBCCD5008001EA00BBCCD500
8001EA00BBCCD5008001EA00BBCCD5008001EA00BBCCD5008003EA00BBCCD500
8007EA00BBCCD500800FEA00BBCCD50000000000000000000000000000000000
000000000000} 000000000000}
end end
object MainMenu: TMainMenu object MainMenu: TMainMenu
@ -2863,11 +2735,6 @@ object MainForm: TMainForm
Hint = 'Set all weights to the same value' Hint = 'Set all weights to the same value'
OnClick = mnuEqualizeClick OnClick = mnuEqualizeClick
end end
object mnuNormalWeights: TMenuItem
Caption = 'Compute Weights'
Hint = 'Compute weights from triangle areas'
OnClick = mnuNormalWeightsClick
end
object N7: TMenuItem object N7: TMenuItem
Caption = '-' Caption = '-'
end end
@ -3100,6 +2967,7 @@ object MainForm: TMainForm
object ListXmlScanner: TEasyXmlScanner object ListXmlScanner: TEasyXmlScanner
Normalize = True Normalize = True
OnStartTag = ListXmlScannerStartTag OnStartTag = ListXmlScannerStartTag
OnEmptyTag = ListXmlScannerEmptyTag
Left = 40 Left = 40
Top = 120 Top = 120
end end

View File

@ -42,7 +42,7 @@ const
RS_XO = 2; RS_XO = 2;
RS_VO = 3; RS_VO = 3;
AppVersionString = 'Apophysis 2.08 beta 2'; AppVersionString = 'Apophysis 2.09 pre-beta 1';
randFilename = 'apophysis.rand'; randFilename = 'apophysis.rand';
undoFilename = 'apophysis.undo'; undoFilename = 'apophysis.undo';
@ -73,7 +73,6 @@ type
mnuCopyUPR: TMenuItem; mnuCopyUPR: TMenuItem;
mnuEditor: TMenuItem; mnuEditor: TMenuItem;
mnuRandom: TMenuItem; mnuRandom: TMenuItem;
mnuNormalWeights: TMenuItem;
mnuEqualize: TMenuItem; mnuEqualize: TMenuItem;
mnuRWeights: TMenuItem; mnuRWeights: TMenuItem;
mnuOptions: TMenuItem; mnuOptions: TMenuItem;
@ -208,7 +207,6 @@ type
procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure mnuHelpTopicsClick(Sender: TObject); procedure mnuHelpTopicsClick(Sender: TObject);
procedure mnuRefreshClick(Sender: TObject); procedure mnuRefreshClick(Sender: TObject);
procedure mnuNormalWeightsClick(Sender: TObject);
procedure FormDestroy(Sender: TObject); procedure FormDestroy(Sender: TObject);
procedure mnuCopyUPRClick(Sender: TObject); procedure mnuCopyUPRClick(Sender: TObject);
procedure mnuItemDeleteClick(Sender: TObject); procedure mnuItemDeleteClick(Sender: TObject);
@ -293,6 +291,10 @@ type
Change: TItemChange; var AllowChange: Boolean); Change: TItemChange; var AllowChange: Boolean);
procedure ListViewInfoTip(Sender: TObject; Item: TListItem; procedure ListViewInfoTip(Sender: TObject; Item: TListItem;
var InfoTip: String); var InfoTip: String);
procedure ListXmlScannerEmptyTag(Sender: TObject; TagName: String;
Attributes: TAttrList);
procedure ListViewSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
private private
Renderer: TRenderThread; Renderer: TRenderThread;
@ -338,6 +340,7 @@ type
procedure LoadXMLFlame(filename, name: string); overload; procedure LoadXMLFlame(filename, name: string); overload;
procedure LoadXMLFlame(filename: string; index: integer); overload; procedure LoadXMLFlame(filename: string; index: integer); overload;
procedure CheckXMLFlame(filename: string; index: integer); overload;
procedure DisableFavorites; procedure DisableFavorites;
procedure EnableFavorites; procedure EnableFavorites;
procedure ParseXML(var cp1: TControlPoint; const params: PCHAR); procedure ParseXML(var cp1: TControlPoint; const params: PCHAR);
@ -387,26 +390,32 @@ function GetWinVersion: TWin32Version;
var var
MainForm: TMainForm; MainForm: TMainForm;
pname, ptime: string; pname, ptime: string;
nxform: integer;
MainCp: TControlPoint; MainCp: TControlPoint;
ParseCp: TControlPoint; ParseCp: TControlPoint;
mainCPindex: integer;
implementation implementation
uses uses
{$IFDEF DEBUG} {$IFDEF DEBUG}
JclDebug, ExceptForm, //JclDebug, ExceptForm,
{$ENDIF} {$ENDIF}
Editor, Options, Regstry, Render, Editor, Options, Regstry, Render,
FullScreen, FormRender, Mutate, Adjust, Browser, Save, About, CmapData, FullScreen, FormRender, Mutate, Adjust, Browser, Save, About, CmapData,
HtmlHlp, ScriptForm, FormFavorites, FormExport, msMultiPartFormData, HtmlHlp, ScriptForm, FormFavorites, FormExport, RndFlame,
ImageColoring, RndFlame, {msMultiPartFormData,} ImageColoring,
Tracer, Types; Tracer, Types;
{$R *.DFM} {$R *.DFM}
var
nxform: integer;
mainCPindex: integer;
pxformnum: integer;
pversion: string;
xmlErrorsList: TStringList;
procedure NormalizeVariations(var cp1: TControlPoint); procedure NormalizeVariations(var cp1: TControlPoint);
var var
totvar: double; totvar: double;
@ -614,10 +623,10 @@ begin
cp.xform[i].vars[j] := 0; cp.xform[i].vars[j] := 0;
repeat repeat
a := random(NRVAR); a := random(NRVAR);
until Variations[a]; until RandomVariations[a];
repeat repeat
b := random(NRVAR); b := random(NRVAR);
until Variations[b]; until RandomVariations[b];
if (a = b) then if (a = b) then
begin begin
cp.xform[i].vars[a] := 1; cp.xform[i].vars[a] := 1;
@ -1083,7 +1092,7 @@ begin
d := cp.xform[i].c[1][1]; d := cp.xform[i].c[1][1];
e := cp.xform[i].c[2][0]; e := cp.xform[i].c[2][0];
f := cp.xform[i].c[2][1]; f := cp.xform[i].c[2][1];
p := cp.xform[i].density; p := cp.xform[i].weight;
Strings.Add(Format('%.6g %.6g %.6g %.6g %.6g %.6g %.6g', Strings.Add(Format('%.6g %.6g %.6g %.6g %.6g %.6g %.6g',
[a, b, c, d, e, f, p])); [a, b, c, d, e, f, p]));
end; end;
@ -1187,7 +1196,7 @@ begin
MainCp.xform[sTransforms].c[1][1] := d; MainCp.xform[sTransforms].c[1][1] := d;
MainCp.xform[sTransforms].c[2][0] := e; MainCp.xform[sTransforms].c[2][0] := e;
MainCp.xform[sTransforms].c[2][1] := f; MainCp.xform[sTransforms].c[2][1] := f;
MainCp.xform[sTransforms].density := p; MainCp.xform[sTransforms].weight := p;
inc(sTransforms); inc(sTransforms);
end end
else else
@ -1243,7 +1252,7 @@ begin
d := cp.xform[m].c[1][1]; d := cp.xform[m].c[1][1];
e := cp.xform[m].c[2][0]; e := cp.xform[m].c[2][0];
f := cp.xform[m].c[2][1]; f := cp.xform[m].c[2][1];
p := cp.xform[m].density; p := cp.xform[m].weight;
Write(IFile, Format('%.6g %.6g %.6g %.6g %.6g %.6g %.6g', Write(IFile, Format('%.6g %.6g %.6g %.6g %.6g %.6g %.6g',
[a, b, c, d, e, f, p])); [a, b, c, d, e, f, p]));
WriteLn(IFile, ''); WriteLn(IFile, '');
@ -1356,7 +1365,7 @@ begin
format('scale="%g" ', [cp1.pixels_per_unit]); format('scale="%g" ', [cp1.pixels_per_unit]);
if cp1.FAngle <> 0 then if cp1.FAngle <> 0 then
parameters := parameters + format('angle="%g" ', [cp1.FAngle]) + parameters := parameters + //format('angle="%g" ', [cp1.FAngle]) +
format('rotate="%g" ', [-180 * cp1.FAngle/Pi]); format('rotate="%g" ', [-180 * cp1.FAngle/Pi]);
if cp1.zoom <> 0 then if cp1.zoom <> 0 then
parameters := parameters + format('zoom="%g" ', [cp1.zoom]); parameters := parameters + format('zoom="%g" ', [cp1.zoom]);
@ -1942,7 +1951,7 @@ begin
AssignFile(F, AppPath + randFilename); AssignFile(F, AppPath + randFilename);
OpenFile := AppPath + randFilename; OpenFile := AppPath + randFilename;
ReWrite(F); ReWrite(F);
WriteLn(F, '<random_batch>'); WriteLn(F, '<flames name="random batch">');
for i := 0 to BatchSize - 1 do for i := 0 to BatchSize - 1 do
begin begin
inc(RandomIndex); inc(RandomIndex);
@ -1963,7 +1972,7 @@ begin
// Write(F, FlameToString(Title)); // Write(F, FlameToString(Title));
// WriteLn(F, ' '); // WriteLn(F, ' ');
end; end;
Write(F, '</random_batch>'); Write(F, '</flames>');
CloseFile(F); CloseFile(F);
except except
on EInOutError do Application.MessageBox('Error creating batch', PChar(APP_NAME), 16); on EInOutError do Application.MessageBox('Error creating batch', PChar(APP_NAME), 16);
@ -1977,36 +1986,55 @@ end;
procedure ListXML(FileName: string; sel: integer); procedure ListXML(FileName: string; sel: integer);
{ List .flame file } { List .flame file }
var var
i, p: integer; i, j, p: integer;
Title: string; Title: string;
ListItem: TListItem; ListItem: TListItem;
FStrings: TStringList; FileStrings: TStringList;
ParamStrings: TStringList;
begin begin
FStrings := TStringList.Create; FileStrings := TStringList.Create;
FStrings.LoadFromFile(FileName); FileStrings.LoadFromFile(FileName);
ParamStrings := TStringList.Create;
try try
MainForm.ListView.Items.BeginUpdate; MainForm.ListView.Items.BeginUpdate;
MainForm.ListView.Items.Clear; MainForm.ListView.Items.Clear;
if (Pos('<flame ', Lowercase(FStrings.Text)) <> 0) then if (Pos('<flame ', Lowercase(FileStrings.Text)) <> 0) then
begin begin
for i := 0 to FStrings.Count - 1 do i := 0;
while i < FileStrings.Count do
begin begin
p := Pos('<flame ', LowerCase(FStrings[i])); p := Pos('<flame ', LowerCase(FileStrings[i]));
if (p <> 0) then if (p <> 0) then
begin begin
MainForm.ListXMLScanner.LoadFromBuffer(PCHAR(FSTrings[i])); ParamStrings.Add(FileStrings[i]);
repeat
Inc(i);
ParamStrings.Add(FileStrings[i]);
until pos('</flame>', Lowercase(FileStrings[i])) <> 0;
Assert(xmlErrorsList.Count = 0);
pname := '';
ptime := '';
pversion := '';
MainForm.ListXMLScanner.LoadFromBuffer(PCHAR(ParamStrings.Text));
MainForm.ListXMLScanner.Execute; MainForm.ListXMLScanner.Execute;
if Trim(pname) = '' then Title := Trim(pname);
Title := '*untitled ' + ptime if Title = '' then
else Title := '*untitled ' + ptime;
Title := Trim(pname);
if Title <> '' then if Title <> '' then
begin { Otherwise bad format } begin { Otherwise bad format }
ListItem := MainForm.ListView.Items.Add; ListItem := MainForm.ListView.Items.Add;
Listitem.Caption := Title; ListItem.Caption := Title;
if xmlErrorsList.Count > 0 then begin
ListItem.ImageIndex := 1;
xmlErrorsList.Clear;
end;
end; end;
ParamStrings.Clear;
end; end;
Inc(i);
end; end;
end; end;
MainForm.ListView.Items.EndUpdate; MainForm.ListView.Items.EndUpdate;
@ -2015,7 +2043,8 @@ begin
1: MainForm.ListView.Selected := MainForm.ListView.Items[0]; 1: MainForm.ListView.Selected := MainForm.ListView.Items[0];
end; end;
finally finally
FStrings.Free; ParamStrings.Free;
FileStrings.Free;
end; end;
end; end;
@ -2033,7 +2062,7 @@ begin
mnuListRename.Enabled := True; mnuListRename.Enabled := True;
mnuItemDelete.Enabled := True; mnuItemDelete.Enabled := True;
OpenFile := OpenDialog.FileName; OpenFile := OpenDialog.FileName;
MainForm.Caption := AppVersionString + ' - ' + OpenFile; // --Z-- MainForm.Caption := AppVersionString + ' - ' + OpenFile;
OpenFileType := ftXML; OpenFileType := ftXML;
if UpperCase(ExtractFileExt(OpenDialog.FileName)) = '.IFS' then if UpperCase(ExtractFileExt(OpenDialog.FileName)) = '.IFS' then
begin begin
@ -2127,16 +2156,6 @@ begin
RedrawTimer.enabled := true; RedrawTimer.enabled := true;
end; end;
procedure TMainForm.mnuNormalWeightsClick(Sender: TObject);
begin
StopThread;
UpdateUndo;
// TODO: ...something
// ComputeWeights(MainCp, MainTriangles, transforms);
RedrawTimer.Enabled := True;
UpdateWindows;
end;
procedure TMainForm.mnuRWeightsClick(Sender: TObject); procedure TMainForm.mnuRWeightsClick(Sender: TObject);
begin begin
StopThread; StopThread;
@ -2239,7 +2258,7 @@ begin
d := cp1.xform[m].c[1][1]; d := cp1.xform[m].c[1][1];
e := cp1.xform[m].c[2][0]; e := cp1.xform[m].c[2][0];
f := cp1.xform[m].c[2][1]; f := cp1.xform[m].c[2][1];
p := cp1.xform[m].Density; p := cp1.xform[m].weight;
if m < Transforms then xf_str := 'p_xf' + inttostr(m) if m < Transforms then xf_str := 'p_xf' + inttostr(m)
else begin else begin
if cp1.HasFinalXForm = false then break; if cp1.HasFinalXForm = false then break;
@ -2247,7 +2266,7 @@ begin
end; end;
Strings.Add(' ' + xf_str + '_p=' + Format('%.6g ', [p])); Strings.Add(' ' + xf_str + '_p=' + Format('%.6g ', [p]));
Strings.Add(' ' + xf_str + '_c=' + floatTostr(cp1.xform[m].color)); Strings.Add(' ' + xf_str + '_c=' + floatTostr(cp1.xform[m].color));
Strings.Add(' ' + xf_str + '_sym=' + floatTostr(cp1.xform[m].symmetry)); Strings.Add(' ' + xf_str + '_sym=' + floatTostr(cp1.xform[m].color_speed));
Strings.Add(' ' + xf_str + '_cfa=' + Format('%.6g ', [a]) + Strings.Add(' ' + xf_str + '_cfa=' + Format('%.6g ', [a]) +
xf_str + '_cfb=' + Format('%.6g ', [b]) + xf_str + '_cfb=' + Format('%.6g ', [b]) +
xf_str + '_cfc=' + Format('%.6g ', [c]) + xf_str + '_cfc=' + Format('%.6g ', [c]) +
@ -2543,6 +2562,7 @@ begin
tbShowAlpha.Down := ShowTransparency; tbShowAlpha.Down := ShowTransparency;
DrawSelection := true; DrawSelection := true;
FViewScale := 1; // prevent divide by zero (?) FViewScale := 1; // prevent divide by zero (?)
xmlErrorsList := TStringList.Create;
end; end;
procedure TMainForm.FormShow(Sender: TObject); procedure TMainForm.FormShow(Sender: TObject);
@ -2608,7 +2628,7 @@ begin
if FileExists(AppPath + randFilename) then if FileExists(AppPath + randFilename) then
DeleteFile(AppPath + randFilename); DeleteFile(AppPath + randFilename);
// get filename from command line argument // get filename from command line argument
if ParamCount > 0 then openFile := ParamStr(1) if ParamCount > 0 then openFile := ParamStr(1)
else openFile := defFlameFile; else openFile := defFlameFile;
@ -2713,6 +2733,7 @@ begin
MainCP.free; MainCP.free;
ParseCp.free; ParseCp.free;
Favorites.Free; Favorites.Free;
xmlErrorsList.Free;
end; end;
procedure TMainForm.FormKeyPress(Sender: TObject; var Key: Char); procedure TMainForm.FormKeyPress(Sender: TObject; var Key: Char);
@ -2778,6 +2799,7 @@ begin
begin begin
pname := ''; pname := '';
ptime := ''; ptime := '';
pversion := '';
p := Pos('<flame ', LowerCase(FileStrings[i])); p := Pos('<flame ', LowerCase(FileStrings[i]));
if (p <> 0) then if (p <> 0) then
begin begin
@ -2847,7 +2869,7 @@ var
i, p: integer; i, p: integer;
FileStrings: TStringList; FileStrings: TStringList;
ParamStrings: TStringList; ParamStrings: TStringList;
Tokens: TStringList; // Tokens: TStringList;
flameindex: integer; flameindex: integer;
begin begin
FileStrings := TStringList.Create; FileStrings := TStringList.Create;
@ -2860,6 +2882,7 @@ begin
begin begin
pname := ''; pname := '';
ptime := ''; ptime := '';
pversion := '';
p := Pos('<flame ', LowerCase(FileStrings[i])); p := Pos('<flame ', LowerCase(FileStrings[i]));
if (p <> 0) then if (p <> 0) then
begin begin
@ -2914,6 +2937,50 @@ begin
end; end;
end; end;
procedure TMainForm.CheckXMLFlame(filename: string; index: integer);
var
i, p: integer;
FileStrings: TStringList;
ParamStrings: TStringList;
Tokens: TStringList;
flameindex: integer;
begin
FileStrings := TStringList.Create;
ParamStrings := TStringList.Create;
try
FileStrings.LoadFromFile(filename);
flameindex := 0;
for i := 0 to FileStrings.Count - 1 do
begin
pname := '';
ptime := '';
pversion := '';
p := Pos('<flame ', LowerCase(FileStrings[i]));
if (p <> 0) then
begin
if (flameIndex <> index) then begin
inc(flameIndex);
continue;
end;
ParamStrings.Add(FileStrings[i]);
Break;
end;
end;
repeat
inc(i);
ParamStrings.Add(FileStrings[i]);
until pos('</flame>', Lowercase(FileStrings[i])) <> 0;
Assert(xmlErrorsList.Count = 0);
MainForm.ListXMLScanner.LoadFromBuffer(PCHAR(PAramStrings.Text));
MainForm.ListXMLScanner.Execute;
finally
FileStrings.free;
ParamStrings.free;
end;
end;
procedure TMainForm.ResizeImage; procedure TMainForm.ResizeImage;
var var
pw, ph: integer; pw, ph: integer;
@ -2961,7 +3028,7 @@ begin
if OpenFileType = ftXML then if OpenFileType = ftXML then
begin begin
LoadXMLFlame(OpenFile, ListView.Selected.Index); LoadXMLFlame(OpenFile, {ListView.Selected.Index ?}Item.Index);
end end
else else
begin begin
@ -3166,7 +3233,8 @@ label
skip; skip;
begin begin
for i := 0 to mainCP.NumXForms-1 do for i := 0 to mainCP.NumXForms-1 do
if mainCP.xform[i].noPlot = false then goto skip; if mainCP.xform[i].opacity <> 0 then goto skip;
// No visible xforms - exiting
exit; exit;
skip: skip:
maincp.zoom := 0; maincp.zoom := 0;
@ -3924,12 +3992,12 @@ begin
if FinalXformLoaded = false then begin if FinalXformLoaded = false then begin
cp1{MainCP}.xform[nxform].Clear; cp1{MainCP}.xform[nxform].Clear;
cp1{MainCP}.xform[nxform].symmetry := 1; cp1{MainCP}.xform[nxform].color_speed := 1;
end; end;
if nxform < NXFORMS then if nxform < NXFORMS then
for i := nxform to NXFORMS - 1 do for i := nxform to NXFORMS - 1 do
cp1.xform[i].density := 0; cp1.xform[i].weight := 0;
// Check for symmetry parameter // Check for symmetry parameter
if ParseCp.symmetry <> 0 then if ParseCp.symmetry <> 0 then
@ -4162,8 +4230,56 @@ end;
procedure TMainForm.ListXmlScannerStartTag(Sender: TObject; procedure TMainForm.ListXmlScannerStartTag(Sender: TObject;
TagName: string; Attributes: TAttrList); TagName: string; Attributes: TAttrList);
begin begin
pname := Attributes.value('name'); if (TagName = 'flame') then begin
ptime := Attributes.value('time'); pname := Attributes.value('name');
ptime := Attributes.value('time');
pversion := Attributes.Value('version');
pxformnum := 1; // hacky
end;
end;
procedure TMainForm.ListXmlScannerEmptyTag(Sender: TObject;
TagName: String; Attributes: TAttrList);
const
ValidAttributes: array[0..9] of string = (
'coefs', 'post', 'weight', 'color',
'symmetry', 'noplot', 'chaos', 'enabled',
'plotmode', 'opacity'
);
var
i, j: integer;
found: boolean;
attr: string;
begin
if (tagName = 'xform') or (tagName = 'finalxform') then begin
for i := 0 to Attributes.Count-1 do begin
attr := Attributes.Name(i);
found := false;
for j := 0 to High(ValidAttributes) do
if attr = ValidAttributes[j] then begin
found := true;
break;
end;
if found then continue;
for j := 0 to NRVAR-1 do
if attr = Varnames(j) then begin
found := true;
break;
end;
if found then continue;
for j := 0 to GetNrVariableNames-1 do
if attr = GetVariableNameAt(j) then begin
found := true;
break;
end;
if found then continue;
xmlErrorsList.Add('in xform #' + IntToStr(pxformnum) + ' "' + attr + '"');
end;
Inc(pxformnum);
end;
end; end;
procedure TMainForm.XMLScannerStartTag(Sender: TObject; TagName: string; procedure TMainForm.XMLScannerStartTag(Sender: TObject; TagName: string;
@ -4316,7 +4432,7 @@ begin
with ParseCP.xform[nXform] do begin with ParseCP.xform[nXform] do begin
Clear; Clear;
v := Attributes.Value('weight'); v := Attributes.Value('weight');
if (v <> '') and (TagName = 'xform') then density := StrToFloat(v); if (v <> '') and (TagName = 'xform') then weight := StrToFloat(v);
if (TagName = 'finalxform') then if (TagName = 'finalxform') then
begin begin
v := Attributes.Value('enabled'); v := Attributes.Value('enabled');
@ -4324,12 +4440,14 @@ begin
else ParseCP.finalXformEnabled := true; else ParseCP.finalXformEnabled := true;
end; end;
if activexformset > 0 then density := 0; // tmp... if activexformset > 0 then weight := 0; // tmp...
v := Attributes.Value('color'); v := Attributes.Value('color');
if v <> '' then color := StrToFloat(v); if v <> '' then color := StrToFloat(v);
v := Attributes.Value('symmetry'); v := Attributes.Value('symmetry');
if v <> '' then symmetry := StrToFloat(v); if v <> '' then color_speed := StrToFloat(v);
v := Attributes.Value('color_speed');
if v <> '' then color_speed := StrToFloat(v);
v := Attributes.Value('coefs'); v := Attributes.Value('coefs');
GetTokens(v, tokens); GetTokens(v, tokens);
if Tokens.Count < 6 then ShowMessage('Not enough coefficients...crash?'); if Tokens.Count < 6 then ShowMessage('Not enough coefficients...crash?');
@ -4363,13 +4481,16 @@ begin
v := Attributes.Value('plotmode'); v := Attributes.Value('plotmode');
if v <> '' then begin if v <> '' then begin
if v = 'off' then begin if v = 'off' then begin
noPlot := true; opacity := 0; //noPlot := true;
end end
else begin else begin
noPlot := false; opacity := 1; //noPlot := false;
end; end;
end; end;
v := Attributes.Value('opacity');
if v <> '' then opacity := StrToFloat(v);
for i := 0 to NRVAR - 1 do for i := 0 to NRVAR - 1 do
begin begin
vars[i] := 0; vars[i] := 0;
@ -4616,7 +4737,6 @@ procedure TMainForm.ImageMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); Shift: TShiftState; X, Y: Integer);
var var
scale: double; scale: double;
rs: TSRect;
begin begin
case FMouseMoveState of case FMouseMoveState of
msZoomWindowMove: msZoomWindowMove:
@ -4824,7 +4944,7 @@ const
cornerSize = 32; cornerSize = 32;
var var
bkuPen: TPen; bkuPen: TPen;
dx, dy, cx, cy: integer; dx, dy: integer;
l, r, t, b: integer; l, r, t, b: integer;
begin begin
bkuPen := TPen.Create; bkuPen := TPen.Create;
@ -4939,7 +5059,7 @@ begin
NewMenuItem.GroupIndex := 2; NewMenuItem.GroupIndex := 2;
NewMenuItem.RadioItem := True; NewMenuItem.RadioItem := True;
VarMenus[i] := NewMenuItem; VarMenus[i] := NewMenuItem;
if i < NumBuiltinVars then if i < NumBuiltinVariations then
mnuBuiltinVars.Add(NewMenuItem) mnuBuiltinVars.Add(NewMenuItem)
else else
mnuPluginVars.Add(NewMenuItem); mnuPluginVars.Add(NewMenuItem);
@ -5074,10 +5194,23 @@ end;
procedure TMainForm.ListViewInfoTip(Sender: TObject; Item: TListItem; procedure TMainForm.ListViewInfoTip(Sender: TObject; Item: TListItem;
var InfoTip: String); var InfoTip: String);
var //var
Bitmap: TBitmap; //Bitmap: TBitmap;
lcp: TControlPoint; //lcp: TControlPoint;
begin begin
{
// Show unrecognized variations/variables in the tooltip
CheckXMLFlame(OpenFile, Item.Index);
InfoTip := InfoTip + #13#10 + 'Created with: ' + pversion;
if xmlErrorsList.Count > 0 then begin
InfoTip := InfoTip + #13#10 + 'Unrecognized values:' + #13#10 + xmlErrorsList.Text;
xmlErrorsList.Clear;
end;
}
// flame preview in a tooltip... // flame preview in a tooltip...
{ {
BitMap := TBitMap.create; BitMap := TBitMap.create;
@ -5120,4 +5253,23 @@ begin
} }
end; end;
procedure TMainForm.ListViewSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
var
i: integer;
str: string;
begin
{
CheckXMLFlame(OpenFile, Item.Index);
if xmlErrorsList.Count > 0 then begin
str := 'Unrecognized values:' + #13#10 + xmlErrorsList.Text;
InfoLabel.Caption := InfoLabel.Caption + #13#10 + str;
InfoLabel.Hint := str;
xmlErrorsList.Clear;
end
}
end;
end. end.