A fix to Cabrillo export

Trying to make it little bit more usefull for different contests.
This is not perfect exporter, but may be enough for "Sunday contester" who is also happy for contest logging form.

There is a limited change to modify QSO line content to make it fit for contest qsos exported.
Settigs are saved in log settings as "last used", but can also be saved to named template files for loadding when time next needed.

Filter must be used to select qsos before export works. If Contest filter is used the name of the contest can be taken from filtered results. It also is offered as default file name when saving template settings.

There is no score counting as it differs so much between contests. Instead export will give some statistic results that may help for manual score counting.

Help file is updated.

Squashed commit of the following:

commit db6c8f6db873acbb37804897b97b75022fe682d3
Author: OH1KH <oh1kh@sral.fi>
Date:   Sat Jul 11 13:47:29 2020 +0300

    Expanded exchange selector list.

commit 5e60fcc725a0a3a2ed8fddc298e3fe8fdb95b650
Author: OH1KH <oh1kh@sral.fi>
Date:   Sat Jul 11 10:19:58 2020 +0300

    Small fix to Frm Flt button

commit f6d97e14936f88b8e9906c329457b9f7ac10c9ee
Author: OH1KH <oh1kh@sral.fi>
Date:   Sat Jul 11 09:48:10 2020 +0300

    Added button to get contest  name from contestfilter result. Added contest name as defaut template file name. Fixed help.

commit 67fc1c095ff645abf45fff70efe3b5d4c1727e48
Author: OH1KH <oh1kh@sral.fi>
Date:   Thu Jul 9 19:49:37 2020 +0300

    Found Contest Filter! Not part of project. Adding lfm failed somehow, pas is ok.

commit 618d9f2136ce755434ba57fd792ff0203292e547
Author: OH1KH <oh1kh@sral.fi>
Date:   Thu Jul 9 19:19:05 2020 +0300

    Some statistics and Help update

commit dbc575814d494ff1fafad3f96acd038e75800ddd
Merge: 9b69ab0 f72d834
Author: OH1KH <oh1kh@sral.fi>
Date:   Thu Jul 9 10:06:24 2020 +0300

    Merge branch 'master' into fix_cabri

commit 9b69ab07dc59a35f0e158576e05e2615b764e389
Author: OH1KH <oh1kh@sral.fi>
Date:   Thu Jul 9 10:00:17 2020 +0300

    Font setting routine call.Save/Load settings to template. /tmp/CabrilloReject.log for error qsos. Add setting for count qsos to country (for statistics)

commit 519fce180651ec621cade7aea4a625d56d2924f8
Author: OH1KH <oh1kh@sral.fi>
Date:   Thu Jul 9 07:07:24 2020 +0300

    todo update

commit 698895efd1514143a97b8a1189c5c4644bc942db
Author: OH1KH <oh1kh@sral.fi>
Date:   Wed Jul 8 20:37:40 2020 +0300

    Contest name auto complete on. QSO order reversed (from last to Bof)

commit c2706838eff6ffae02acc3d65d93bb42e052bd85
Author: OH1KH <oh1kh@sral.fi>
Date:   Wed Jul 8 20:01:48 2020 +0300

    QSO-line 'designer': first working version (more test needed)

commit dd2193930e0a2f4b262c41268821cdb23fe0e490
Author: OH1KH <oh1kh@sral.fi>
Date:   Wed Jul 8 15:53:19 2020 +0300

    Added category-mode auto detect. Dropped Q query, used fiters qCQRLOG query result instead

commit 487240676cfe4eacc14a0727c06a11569ccffe55
Author: OH1KH <oh1kh@sral.fi>
Date:   Wed Jul 8 13:13:59 2020 +0300

    Added view to set up QSO-line outlook (prelimenary)

commit 20da7cf99758234c1e6c4205501254e278bff8a6
Author: OH1KH <oh1kh@sral.fi>
Date:   Tue Jul 7 16:28:00 2020 +0300

    Added warning if station/contest info is empty.Added contest name loading like contest form (causes pango layout utf-8 warnings (??)). Fixed form layout and anchors.

commit 3e2eebd21581d31e6e8ed5be3742b4e1d9098d9a
Author: OH1KH <oh1kh@sral.fi>
Date:   Tue Jul 7 11:12:21 2020 +0300

    First changes to cabrillo:band2freq,category-band, etc.
This commit is contained in:
OH1KH 2020-07-12 09:34:17 +03:00
parent f72d8348e7
commit 96c92cb631
10 changed files with 1420 additions and 564 deletions

View File

@ -94,13 +94,26 @@
used for this contest.
<p align=center><img src=img/line.png></p>
<p><a name=ah28><strong>Cabrillo export</strong></a><br><br>
This dialog can be used to export contest logs in Carbillo format. For this to work properly a
filter has to be set. All necessary fields have to be filled in order for this to export a
suitable log file. If you choose this export you will see the follwing window.
This dialog can be used to export contest logs in Carbillo format. Cabrillo is very compilcated to export as
almost all contests have their own QSO line layout and score counting. That's why Export has no score counting, but it offers
some statistics from exported qsos to help manual counting of claimed score.<br><br>
For export <b>Qso list/filter/create</b> or <b>Qso list/filter/Contest filter </b>has to be set to select qsos to be exported.<br>
If you used <b>Qso list/filter/Contest filter </b> you can press button <b>Frm Flt</b> to get contest name from filtered result.
<br><br>QSO-line header follows most used layout and can not be modified, except <b>width of callsign space</b> that affects both calls (my&amp;wkd).<br>
Info sent and rcvd can be modified using selections. Some contests do not use <b>reports, they can be omitted from checbox.</b><br>
Exchange1 and Exchange2 can contain data by selected by selectors with <b>given space width</b> 1-99. If empty they are ignored.<br>
<B>TX count</b> is the transmitter count at the end of line. It can also be empty and so ingnored<br>
Many template layouts to study can be found from <b> http://www.contestlogchecker.com/cabrillo-templates.html</b>
<br><br>
<img src=img/h45g.png><br><br>
You need to set the filename to export to and select an appropriate rule set for the calculation
of your points in the contest.
With <b>Count pfx</b> user can get statistic count from qsos to certain country. Type in callsign prefix of country. If export thinks prefix is wrong
it clears column when moved away from it. Then try again. Example: VA is not ok, but VA1 will turn accepted as VE.
<br><br>
Export remebers last used settings (by used log). You can also save and load settings for different contests using <b>save and load buttons</b>.
<br> At bottom of form there is prograss indicator and after export there is some statistics and possible error message.
<br><br>
As cabrillo export output is very basic you may need to edit exported file afterwards with text editor to suit your purposes!
<br><br>
<img src=img/h45g.png> <img src=img/h45gg.png><br><br>
<p align=center><img src=img/line.png></p>
<p><a name=ah29><strong>Program version update:</strong></a><br><br>
Ubuntu 16.04, 17.10, 18.04 users can use CQRLOGs repository on Launchpad. To add repository to your system, put into terminal this:<br/>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 39 KiB

BIN
help/img/h45gg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View File

@ -105,7 +105,7 @@
<MinVersion Major="1" Minor="2" Release="1" Valid="True"/>
</Item10>
</RequiredPackages>
<Units Count="111">
<Units Count="112">
<Unit0>
<Filename Value="cqrlog.lpr"/>
<IsPartOfProject Value="True"/>
@ -821,17 +821,26 @@
<ResourceBaseClass Value="Form"/>
</Unit108>
<Unit109>
<Filename Value="fcabrilloexport.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="fCabrilloExport"/>
</Unit109>
<Unit110>
<Filename Value="fDOKStat.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="frmDOKStat"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
</Unit109>
<Unit110>
<Filename Value="fCabrilloExport.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="frmCabrilloExport"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
</Unit110>
<Unit111>
<Filename Value="fContestFilter.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="frmContestFilter"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
</Unit111>
</Units>
</ProjectOptions>
<CompilerOptions>

View File

@ -24,7 +24,7 @@ uses
fNewCommentToCall, fFindCommentToCall, frExportPref, fExportPref,
fWorkedGrids, fPropDK0WCY, fRemind, fContest, fMonWsjtx, fXfldigi,
dMembership, dSatellite, uRigControl, uRotControl, azidis3, aziloc,
fCabrilloExport, fDOKStat;
fDOKStat, fCabrilloExport;
var
Splash : TfrmSplash;

View File

@ -1,182 +1,811 @@
object frmCabrilloExport: TfrmCabrilloExport
Left = 758
Height = 414
Top = 300
Left = 644
Height = 687
Top = 45
Width = 516
Caption = 'Export for contests'
ClientHeight = 414
HelpType = htKeyword
HelpKeyword = 'help/h3.html#ah28'
Caption = 'Cabrillo export'
ClientHeight = 687
ClientWidth = 516
OnClose = FormClose
OnCreate = FormCreate
OnShow = FormShow
LCLVersion = '1.8.2.0'
object Label1: TLabel
Left = 8
Height = 17
Top = 8
Width = 66
Caption = 'Filename:'
LCLVersion = '2.0.8.0'
object lblCabfileName: TLabel
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = Owner
Left = 6
Height = 15
Top = 6
Width = 127
BorderSpacing.Left = 6
BorderSpacing.Top = 6
Caption = 'Filename to export:'
ParentColor = False
end
object edtFileName: TEdit
Left = 8
Height = 25
Top = 32
object edtCabFileName: TEdit
AnchorSideLeft.Control = lblCabfileName
AnchorSideTop.Control = lblCabfileName
AnchorSideTop.Side = asrBottom
Left = 6
Height = 33
Hint = 'Write export file name and path or press Browse'
Top = 33
Width = 421
BorderSpacing.Top = 12
TabOrder = 0
end
object Button1: TButton
Left = 433
object btnCabBrowse: TButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = edtCabFileName
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 435
Height = 25
Top = 34
Top = 37
Width = 75
Anchors = [akTop, akRight]
BorderSpacing.Right = 6
Caption = 'Browse'
OnClick = Button1Click
OnClick = btnCabBrowseClick
TabOrder = 1
end
object btnClose: TButton
Left = 434
object btnCabClose: TButton
AnchorSideTop.Control = pbCabExport
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 435
Height = 25
Top = 368
Top = 644
Width = 75
Anchors = [akTop, akRight]
BorderSpacing.Right = 6
Cancel = True
Caption = 'Close'
ModalResult = 2
TabOrder = 4
TabOrder = 14
end
object btnExport: TButton
Left = 345
object btnCabExport: TButton
AnchorSideTop.Control = pbCabExport
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = btnCabClose
Left = 354
Height = 25
Top = 368
Top = 644
Width = 75
Anchors = [akTop, akRight]
BorderSpacing.Right = 6
Caption = 'Export'
OnClick = btnExportClick
TabOrder = 3
OnClick = btnCabExportClick
TabOrder = 12
end
object pbExport: TProgressBar
Left = 8
object pbCabExport: TProgressBar
AnchorSideLeft.Control = lblCabfileName
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 6
Height = 20
Top = 370
Top = 646
Width = 264
Anchors = [akLeft, akBottom]
BorderSpacing.Bottom = 21
Step = 1
TabOrder = 5
TabOrder = 13
TabStop = True
end
object lblDone: TLabel
Left = 289
Height = 17
Top = 372
Width = 37
object lblCabDone: TLabel
AnchorSideLeft.Control = pbCabExport
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = pbCabExport
AnchorSideTop.Side = asrCenter
Left = 282
Height = 15
Top = 649
Width = 34
BorderSpacing.Left = 12
Caption = 'Done'
ParentColor = False
Visible = False
end
object lblContestName: TLabel
Left = 8
Height = 17
Top = 72
Width = 99
object lblCabContestName: TLabel
AnchorSideLeft.Control = lblCabfileName
AnchorSideTop.Control = cmbCabContestName
AnchorSideTop.Side = asrCenter
Left = 6
Height = 15
Top = 75
Width = 95
BorderSpacing.Top = 6
Caption = 'Contest name:'
ParentColor = False
end
object edtContestName: TEdit
AnchorSideLeft.Control = lblContestName
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = lblContestName
AnchorSideTop.Side = asrCenter
Left = 127
Height = 25
Top = 68
Width = 301
BorderSpacing.Left = 20
TabOrder = 2
end
object lblError: TLabel
Left = 8
Height = 17
Top = 344
Width = 98
object lblCabError: TLabel
AnchorSideLeft.Control = lblCabfileName
AnchorSideBottom.Control = pbCabExport
Left = 6
Height = 15
Top = 619
Width = 94
Anchors = [akLeft, akBottom]
BorderSpacing.Bottom = 12
Caption = 'Error message'
ParentColor = False
Visible = False
end
object lblPower: TLabel
Left = 8
Height = 17
Top = 112
Width = 47
object lblCabPower: TLabel
AnchorSideLeft.Control = lblCabfileName
AnchorSideTop.Control = cmbCabPower
AnchorSideTop.Side = asrCenter
Left = 6
Height = 15
Top = 106
Width = 44
Caption = 'Power:'
ParentColor = False
end
object cbPower: TComboBox
AnchorSideLeft.Control = edtContestName
AnchorSideTop.Control = lblPower
AnchorSideTop.Side = asrCenter
Left = 127
Height = 25
Top = 108
object cmbCabPower: TComboBox
AnchorSideLeft.Control = cmbCabContestName
AnchorSideTop.Control = cmbCabContestName
AnchorSideTop.Side = asrBottom
Left = 123
Height = 29
Hint = 'Select category-power'
Top = 99
Width = 100
ItemHeight = 17
ItemHeight = 0
Items.Strings = (
'High'
'Low'
'QRP'
)
TabOrder = 6
Style = csDropDownList
TabOrder = 3
end
object lblContestRules: TLabel
Left = 8
Height = 17
Top = 152
Width = 98
Caption = 'Contest Rules:'
object lblCabLocation: TLabel
AnchorSideLeft.Control = lblCabfileName
AnchorSideTop.Control = edtCabLocation
AnchorSideTop.Side = asrCenter
Left = 6
Height = 15
Top = 137
Width = 59
Caption = 'Location:'
ParentColor = False
end
object cbContestRules: TComboBox
AnchorSideLeft.Control = cbPower
AnchorSideTop.Control = lblContestRules
AnchorSideTop.Side = asrCenter
Left = 127
Height = 25
Top = 148
Width = 283
ItemHeight = 17
Items.Strings = (
'Westphalia-North Activity'
'Westphalia-South Activity'
)
TabOrder = 7
end
object lblStats: TLabel
Left = 8
Height = 17
Top = 200
Width = 72
object lblCabStats: TLabel
AnchorSideLeft.Control = lblCabfileName
AnchorSideTop.Control = gbCabQsoTail
AnchorSideTop.Side = asrBottom
Left = 6
Height = 15
Top = 509
Width = 76
BorderSpacing.Top = 6
Caption = 'Statistics:'
Font.Style = [fsBold]
ParentColor = False
ParentFont = False
end
object lblStatsContent: TLabel
Left = 8
Height = 17
Top = 224
Width = 50
Caption = 'Results'
object cmbCabContestName: TComboBox
AnchorSideTop.Control = edtCabFileName
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = edtCabFileName
AnchorSideRight.Side = asrBottom
Left = 123
Height = 33
Hint = 'Select or type contest name'
Top = 66
Width = 304
Anchors = [akTop, akRight]
AutoComplete = True
AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchAscending]
CharCase = ecUppercase
ItemHeight = 0
OnChange = cmbCabContestNameChange
OnExit = cmbCabContestNameExit
ParentShowHint = False
ShowHint = True
TabOrder = 2
end
object btnCabHelp: TSpeedButton
AnchorSideTop.Control = Owner
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 485
Height = 25
Hint = 'Help'
Top = 6
Width = 25
Anchors = [akTop, akRight]
BorderSpacing.Top = 6
BorderSpacing.Right = 6
Glyph.Data = {
F6030000424DF6030000000000003600000028000000100000000F0000000100
200000000000C003000064000000640000000000000000000000FFFFFF00FFFF
FF0095564AFB89463BFF8A4437FF8B4437FF8C4538FF8D4639FF8E4739FF8F48
3AFF90493BFF914A3CFF924B3DFF985346F8FFFFFF00FFFFFF00FFFFFF00FFFF
FF00784641F5DBDCDCFFD4DCDCFFD4DCDCFFD4DCDCFFD3DCDCFFD3DCDCFFD3DC
DCFFD3DCDCFFD3DCDCFFD6DCDCFFB0928B8BFFFFFF00FFFFFF00FFFFFF00FFFF
FF0096574BF589463BFF8A4437FF8B4437FF8C4538FF8D4639FF8E4739FF8F48
3AFF90493BFF914A3CFF924B3DFF9A5547F0FFFFFF00FFFFFF00FFFFFF00FFFF
FF00AF7467F5AD7568FFB0705EFFB27160FFB47462FFB36E5CFFB56F5DFFBB78
66FFBD7B68FFBF7D6BFFC17F6BFFB87563F7FFFFFF00FFFFFF00FFFFFF00FFFF
FF00B4776AF5AE7568FFB37362FFB57462FFB4705DFFDDBEB4FFE7D1CCFFBB79
66FFBF7D69FFC17F6CFFC3816DFFBA7664F7FFFFFF00FFFFFF00FFFFFF00FFFF
FF00DAB2AAFAAF7668FFB97865FFBB7967FFB76F5AFFFDFAFAFFFFFFFFFFC485
73FFC3826EFFC68470FFC88672FFBD7966E1FFFFFF00FFFFFF00FFFFFF00FFFF
FF00AD7062F5B87D70FFBE7D69FFC07E6BFFBF7A66FFDFBCB1FFD9B5ACFFC67F
68FFCA8873FFCC8A75FFCE8C76FFBF7D69E2FFFFFF00FFFFFF00FFFFFF00FFFF
FF00B17668F5BC8373FFC3826FFFC5836FFFC27A64FFFDFBFAFFFFFFFFFFC07B
68FFCF8B73FFD18F79FFD3917BFFC37F6CE2FFFFFF00FFFFFF00FFFFFF00FFFF
FF00B27769F5C08676FFCA8773FFC88470FFCA846EFFE7C7BCFFFFFFFFFFFBF8
F7FFCF9888FFD69178FFD8967FFFC6846FE2FFFFFF00FFFFFF00FFFFFF00FFFF
FF00B2796AF5C58A7BFFCC866FFFE0B8ABFFC8856FFFCF876FFFE3B7A8FFFEFB
FAFFFFFFFFFFD19A89FFDE9A81FFCB8772E2FFFFFF00FFFFFF00FFFFFF00FFFF
FF00B07465F5C88C7AFFDFAC9CFFFFFFFFFFF8F2F0FFD28970FFD6896DFFEBC2
B6FFFFFFFFFFEED8D1FFE19B82FFCE8B76E2FFFFFF00FFFFFF00FFFFFF00FFFF
FF00DDB6AFFACB8E7BFFD58B73FFFBF4F1FFFFFFFFFFF9F5F3FFF9EAE5FFFFFF
FFFFFFFFFFFFE8B8A4FFEAA48AFFCE8A74E7FFFFFF00FFFFFF00FFFFFF00FFFF
FF00B27667F5D29784FFDE9B82FFDD9981FFEFCABBFFFBF1EEFFFBEFEBFFF9E9
E3FFEDB6A2FFEAA589FFEFAC91FFCE8B75E7FFFFFF00FFFFFF00FFFFFF00FFFF
FF00B67A6CF5D79B88FFE5A088FFE5A288FFE6A086FFE79F84FFE8A185FFEAA4
88FFEEAA8EFFF0AE93FFF4B297FFCE8C76E7FFFFFF00FFFFFF00FFFFFF00FFFF
FF00E2A289A4D0927FD7D49078DAD39079DAD5927BDAD7947CDAD8947DDADB96
7FDADB9880DADC9A81DAE19F86DBD4937CAEFFFFFF00FFFFFF00
}
OnClick = btnCabHelpClick
end
object gbCabInfoSent: TGroupBox
AnchorSideLeft.Control = lblCabfileName
AnchorSideTop.Control = gbCabQsoHeader
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = btnCabBrowse
AnchorSideRight.Side = asrBottom
Left = 6
Height = 80
Top = 266
Width = 504
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6
Caption = 'info sent'
ClientHeight = 62
ClientWidth = 502
TabOrder = 7
object chkCabInfoSrst: TCheckBox
AnchorSideLeft.Control = gbCabInfoSent
AnchorSideTop.Control = gbCabInfoSent
AnchorSideTop.Side = asrCenter
Left = 12
Height = 23
Hint = 'Include RST, normally YES'
Top = 20
Width = 78
BorderSpacing.Left = 12
Caption = 'inc. RST'
Checked = True
ParentShowHint = False
ShowHint = True
State = cbChecked
TabOrder = 0
end
object cmbCabInfoSEx1: TComboBox
AnchorSideLeft.Control = chkCabInfoSrst
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = lblCabSEx1Cmb
AnchorSideTop.Side = asrBottom
Left = 96
Height = 32
Hint = 'Exhange1 selection'
Top = 21
Width = 100
BorderSpacing.Left = 6
BorderSpacing.Top = 6
ItemHeight = 0
ParentShowHint = False
ShowHint = True
Style = csDropDownList
TabOrder = 1
end
object edtCabInfoSEx1Wdt: TEdit
AnchorSideLeft.Control = cmbCabInfoSEx1
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = cmbCabInfoSEx1
Left = 202
Height = 33
Hint = 'Width of stx field '
Top = 21
Width = 38
BorderSpacing.Left = 6
MaxLength = 2
NumbersOnly = True
OnExit = edtCabInfoSEx1WdtExit
ParentShowHint = False
ShowHint = True
TabOrder = 2
Text = '6'
end
object cmbCabInfoSEx2: TComboBox
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = cmbCabInfoSEx1
AnchorSideRight.Control = edtCabInfoSEx2Wdt
Left = 318
Height = 29
Hint = 'Exhange2 selection'
Top = 21
Width = 100
Anchors = [akTop, akRight]
BorderSpacing.Right = 6
ItemHeight = 0
Items.Strings = (
''
'1st'
'2nd'
)
ParentShowHint = False
ShowHint = True
Style = csDropDownList
TabOrder = 3
end
object edtCabInfoSEx2Wdt: TEdit
AnchorSideTop.Control = cmbCabInfoSEx1
AnchorSideRight.Control = gbCabInfoSent
AnchorSideRight.Side = asrBottom
Left = 424
Height = 33
Hint = 'Width of stx_string field '
Top = 21
Width = 38
Anchors = [akTop, akRight]
BorderSpacing.Right = 40
MaxLength = 2
NumbersOnly = True
OnExit = edtCabInfoSEx2WdtExit
ParentShowHint = False
ShowHint = True
TabOrder = 4
Text = '6'
end
object lblCabSEx1Cmb: TLabel
AnchorSideLeft.Control = cmbCabInfoSEx1
AnchorSideTop.Control = gbCabInfoSent
Left = 96
Height = 15
Top = 0
Width = 143
Caption = 'Exchange1 and width '
ParentColor = False
end
object lblCabSEx2Cmb: TLabel
AnchorSideLeft.Control = cmbCabInfoSEx2
AnchorSideTop.Control = gbCabInfoSent
Left = 318
Height = 15
Top = 0
Width = 143
Caption = 'Exchange2 and width '
ParentColor = False
end
end
object gbCabInfoRcvd: TGroupBox
AnchorSideLeft.Control = lblCabfileName
AnchorSideTop.Control = gbCabInfoSent
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = btnCabBrowse
AnchorSideRight.Side = asrBottom
Left = 6
Height = 80
Top = 352
Width = 504
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6
Caption = 'info rcvd'
ClientHeight = 62
ClientWidth = 502
TabOrder = 8
object chkCabInfoRrst: TCheckBox
AnchorSideLeft.Control = gbCabInfoRcvd
AnchorSideTop.Control = gbCabInfoRcvd
AnchorSideTop.Side = asrCenter
Left = 12
Height = 23
Hint = 'Include RST, normally YES'
Top = 20
Width = 78
BorderSpacing.Left = 12
Caption = 'inc. RST'
Checked = True
ParentShowHint = False
ShowHint = True
State = cbChecked
TabOrder = 0
end
object cmbCabInfoREx1: TComboBox
AnchorSideLeft.Control = chkCabInfoRrst
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = lblCabSrxCmb
AnchorSideTop.Side = asrBottom
Left = 96
Height = 29
Hint = 'Exhange1 selection'
Top = 21
Width = 100
BorderSpacing.Left = 6
BorderSpacing.Top = 6
ItemHeight = 0
Items.Strings = (
''
'1st'
'2nd'
)
ParentShowHint = False
ShowHint = True
Style = csDropDownList
TabOrder = 1
end
object edtCabInfoREx1Wdt: TEdit
AnchorSideLeft.Control = cmbCabInfoREx1
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = cmbCabInfoREx1
Left = 202
Height = 33
Hint = 'Width of stx field '
Top = 21
Width = 38
BorderSpacing.Left = 6
MaxLength = 2
NumbersOnly = True
OnExit = edtCabInfoREx1WdtExit
ParentShowHint = False
ShowHint = True
TabOrder = 2
Text = '6'
end
object cmbCabInfoREx2: TComboBox
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = cmbCabInfoREx1
AnchorSideRight.Control = edtCabInfoREx2Wdt
Left = 318
Height = 29
Hint = 'Exhange2 selection'
Top = 21
Width = 100
Anchors = [akTop, akRight]
BorderSpacing.Right = 6
ItemHeight = 0
Items.Strings = (
''
'1st'
'2nd'
)
ParentShowHint = False
ShowHint = True
Style = csDropDownList
TabOrder = 3
end
object edtCabInfoREx2Wdt: TEdit
AnchorSideTop.Control = cmbCabInfoREx1
AnchorSideRight.Control = gbCabInfoRcvd
AnchorSideRight.Side = asrBottom
Left = 424
Height = 33
Hint = 'Width of stx_string field '
Top = 21
Width = 38
Anchors = [akTop, akRight]
BorderSpacing.Right = 40
MaxLength = 2
NumbersOnly = True
OnExit = edtCabInfoREx2WdtExit
ParentShowHint = False
ShowHint = True
TabOrder = 4
Text = '6'
end
object lblCabSrxCmb: TLabel
AnchorSideLeft.Control = cmbCabInfoREx1
AnchorSideTop.Control = gbCabInfoRcvd
Left = 96
Height = 15
Top = 0
Width = 143
Caption = 'Exchange1 and width '
ParentColor = False
end
object lblCabSrxStCmb: TLabel
AnchorSideLeft.Control = cmbCabInfoREx2
AnchorSideTop.Control = gbCabInfoRcvd
Left = 318
Height = 15
Top = 0
Width = 143
Caption = 'Exchange2 and width '
ParentColor = False
end
end
object gbCabQsoHeader: TGroupBox
AnchorSideLeft.Control = lblCabfileName
AnchorSideTop.Control = edtCabSoapBox
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = btnCabBrowse
AnchorSideRight.Side = asrBottom
Left = 6
Height = 60
Top = 200
Width = 504
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6
Caption = 'QSO: common header'
ClientHeight = 42
ClientWidth = 502
TabOrder = 6
object lblCabQsoHeader: TLabel
AnchorSideLeft.Control = gbCabQsoHeader
AnchorSideTop.Control = edtCabCallWdt
AnchorSideTop.Side = asrCenter
Left = 6
Height = 15
Top = 9
Width = 280
BorderSpacing.Left = 6
Caption = 'QSO: Frequ mo yyyy-mm-dd hhmm MyCall'
ParentColor = False
end
object edtCabCallWdt: TEdit
AnchorSideTop.Control = gbCabQsoHeader
AnchorSideRight.Control = gbCabQsoHeader
AnchorSideRight.Side = asrBottom
Left = 458
Height = 33
Hint = 'Width of sent and rcvd callsign field'
Top = 0
Width = 38
Anchors = [akTop, akRight]
BorderSpacing.Right = 6
MaxLength = 2
NumbersOnly = True
OnExit = edtCabCallWdtExit
ParentShowHint = False
ShowHint = True
TabOrder = 0
Text = '13'
end
object lblCabQsoHeader1: TLabel
AnchorSideTop.Control = edtCabCallWdt
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = edtCabCallWdt
Left = 373
Height = 15
Top = 9
Width = 82
Anchors = [akTop, akRight]
BorderSpacing.Left = 6
BorderSpacing.Right = 3
Caption = 'Call(s) width'
ParentColor = False
ParentShowHint = False
end
end
object gbCabQsoTail: TGroupBox
AnchorSideLeft.Control = lblCabfileName
AnchorSideTop.Control = gbCabInfoRcvd
AnchorSideTop.Side = asrBottom
AnchorSideRight.Side = asrBottom
Left = 6
Height = 65
Top = 438
Width = 194
BorderSpacing.Top = 6
Caption = 'QSO: tail'
ClientHeight = 47
ClientWidth = 192
TabOrder = 9
object lblCabQsoTail: TLabel
AnchorSideTop.Control = gbCabQsoTail
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = cmbCabTailTxCount
Left = 20
Height = 15
Top = 16
Width = 54
Anchors = [akTop, akRight]
BorderSpacing.Right = 6
Caption = 'TxCount'
ParentColor = False
end
object cmbCabTailTxCount: TComboBox
AnchorSideTop.Control = gbCabQsoTail
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = gbCabQsoTail
AnchorSideRight.Side = asrBottom
Left = 80
Height = 29
Hint = 'Tx count (empty,0,1,2)'
Top = 9
Width = 100
Anchors = [akTop, akRight]
BorderSpacing.Right = 12
ItemHeight = 0
ItemIndex = 0
Items.Strings = (
''
'0'
'1'
'2'
)
ParentShowHint = False
ShowHint = True
Style = csDropDownList
TabOrder = 0
end
end
object edtCabLocation: TEdit
AnchorSideLeft.Control = cmbCabPower
AnchorSideTop.Control = cmbCabPower
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = cmbCabContestName
AnchorSideRight.Side = asrBottom
Left = 123
Height = 33
Top = 128
Width = 304
Anchors = [akTop, akLeft, akRight]
TabOrder = 4
end
object lblCabSoapBox: TLabel
AnchorSideLeft.Control = lblCabfileName
AnchorSideTop.Control = edtCabSoapBox
AnchorSideTop.Side = asrCenter
Left = 6
Height = 15
Top = 170
Width = 61
Caption = 'SoapBox:'
ParentColor = False
end
object lblStatsSum: TLabel
Left = 8
Height = 17
Top = 288
Width = 78
Caption = 'Total Sum: '
Font.Style = [fsBold]
ParentColor = False
ParentFont = False
object edtCabSoapBox: TEdit
AnchorSideLeft.Control = cmbCabPower
AnchorSideTop.Control = edtCabLocation
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = cmbCabContestName
AnchorSideRight.Side = asrBottom
Left = 123
Height = 33
Top = 161
Width = 304
Anchors = [akTop, akLeft, akRight]
TabOrder = 5
end
object dlgSave: TSaveDialog
object gbCabLayout: TGroupBox
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = gbCabQsoTail
AnchorSideRight.Control = btnCabBrowse
AnchorSideRight.Side = asrBottom
Left = 336
Height = 65
Hint = 'Save(/Load) all settings to file'
Top = 438
Width = 174
Anchors = [akTop, akRight]
BorderSpacing.Left = 6
Caption = 'QSO: layout settings'
ClientHeight = 47
ClientWidth = 172
ParentShowHint = False
ShowHint = True
TabOrder = 11
object btCabSave: TButton
AnchorSideLeft.Control = gbCabLayout
AnchorSideTop.Control = gbCabLayout
AnchorSideTop.Side = asrCenter
Left = 6
Height = 25
Top = 11
Width = 70
BorderSpacing.Left = 6
Caption = 'Save'
OnClick = btCabSaveClick
TabOrder = 0
end
object btCabLoad: TButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = gbCabLayout
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = gbCabLayout
AnchorSideRight.Side = asrBottom
Left = 96
Height = 25
Top = 11
Width = 70
Anchors = [akTop, akRight]
BorderSpacing.Right = 6
Caption = 'Load'
OnClick = btCabLoadClick
TabOrder = 1
end
end
object gbCabCoCount: TGroupBox
AnchorSideLeft.Control = gbCabQsoTail
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = gbCabQsoTail
AnchorSideRight.Control = gbCabLayout
Left = 206
Height = 65
Top = 438
Width = 124
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 6
Caption = 'Count pfx'
ClientHeight = 47
ClientWidth = 122
ParentShowHint = False
TabOrder = 10
object edtCabCountC: TEdit
AnchorSideLeft.Control = gbCabCoCount
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = gbCabCoCount
AnchorSideTop.Side = asrCenter
Left = 26
Height = 33
Hint = 'Type prefix for qsos to count'
Top = 7
Width = 70
CharCase = ecUppercase
OnExit = edtCabCountCExit
ParentShowHint = False
ShowHint = True
TabOrder = 0
end
end
object mCabStatistics: TMemo
AnchorSideLeft.Control = lblCabfileName
AnchorSideTop.Control = lblCabStats
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = btnCabBrowse
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = lblCabError
Left = 6
Height = 83
Top = 530
Width = 504
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Top = 6
BorderSpacing.Bottom = 6
ReadOnly = True
ScrollBars = ssAutoBoth
TabOrder = 15
Visible = False
end
object btnCabFrmFlt: TButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = cmbCabContestName
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 435
Height = 25
Top = 70
Width = 75
Anchors = [akTop, akRight]
BorderSpacing.Right = 6
Caption = 'Frm Flt'
OnClick = btnCabFrmFltClick
TabOrder = 16
end
object dlgCabSave: TSaveDialog
Title = 'Save with file name'
DefaultExt = '.cbr'
Filter = 'Cabrillo file|*.cbr'
left = 477
top = 236
left = 448
top = 112
end
object dlgCabOpen: TOpenDialog
Title = 'Open file'
DefaultExt = '.templ'
Filter = 'Cabrillo template|*.templ'
left = 448
top = 160
end
end

View File

@ -1,3 +1,22 @@
{*
todo:
DONE -Contest name: Use same predefined list as is used in contest form's contest name
DONE -QSO print: let user design format mask (often published with contest rules)
DONE REMOVED -Points counting: consider giving up that. Claimed score is not needed (only nice to know)
DONE -Add warning: If preferences/station/contest info is not filled
DONE - use form font size routines at formcreate (or show)
DONE - save/load export settings
DONE - write /tmp/CabReject.log for rejected qsos
DONE- clear unused code and debugs
- status counts to help manual score counting:
+ worked countries
+ worked qsos by continents,
+ count of different entries in excange1 & exhange2 (if entry is loc count by 4 char)
ADDED SETTING + count for user defined country (perhaps)
- help button works, but help itself needs now refreshing up to date
- test test test
*}
unit fCabrilloExport;
{$mode objfpc}{$H+}
@ -6,50 +25,105 @@ interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, ComCtrls, LCLType, LazFileUtils;
StdCtrls, ComCtrls, LCLType, Buttons, LazFileUtils, StrUtils, inifiles;
const
cMaxExch = 32; //cExhanges array Max size
cExhanges: array[0..32] of string[11] =
('',
'stx', 'srx', 'stx_string', 'srx_string', 'itu', 'waz', 'loc', 'my_loc', 'iota', 'state',
'dok', 'county', 'name', 'my_name','qth', 'remarks', 'cont', 'pwr', 'freq', 'band',
'mode', 'prop_mode', 'satellite', 'qsodate', 'time_on', 'time_off', 'award', 'qso_dxcc', 'profile', 'idcall',
'rxfreq', 'contestname');
type
{ TfrmCabrilloExport }
TfrmCabrilloExport = class(TForm)
btnClose: TButton;
btnExport: TButton;
Button1: TButton;
cbPower: TComboBox;
cbContestRules: TComboBox;
dlgSave: TSaveDialog;
edtContestName: TEdit;
edtFileName: TEdit;
Label1: TLabel;
lblStatsSum: TLabel;
lblStatsContent: TLabel;
lblStats: TLabel;
lblContestRules: TLabel;
lblPower: TLabel;
lblError: TLabel;
lblContestName: TLabel;
lblDone: TLabel;
pbExport: TProgressBar;
multipliers: TStringList;
procedure btnExportClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
btnCabFrmFlt: TButton;
btnCabClose: TButton;
btnCabExport: TButton;
btnCabHelp: TSpeedButton;
btnCabBrowse: TButton;
btCabSave: TButton;
btCabLoad: TButton;
chkCabInfoSrst: TCheckBox;
chkCabInfoRrst: TCheckBox;
cmbCabInfoREx1: TComboBox;
cmbCabInfoREx2: TComboBox;
cmbCabPower: TComboBox;
cmbCabContestName: TComboBox;
cmbCabInfoSEx1: TComboBox;
cmbCabInfoSEx2: TComboBox;
cmbCabTailTxCount: TComboBox;
dlgCabSave: TSaveDialog;
edtCabCountC: TEdit;
edtCabCallWdt: TEdit;
edtCabLocation: TEdit;
edtCabInfoREx2Wdt: TEdit;
edtCabInfoSEx1Wdt: TEdit;
edtCabInfoSEx2Wdt: TEdit;
edtCabFileName: TEdit;
edtCabInfoREx1Wdt: TEdit;
edtCabSoapBox: TEdit;
gbCabInfoRcvd: TGroupBox;
gbCabInfoSent: TGroupBox;
gbCabQsoHeader: TGroupBox;
gbCabQsoTail: TGroupBox;
gbCabLayout: TGroupBox;
gbCabCoCount: TGroupBox;
lblCabQsoHeader1: TLabel;
lblCabSoapBox: TLabel;
lblCabQsoHeader: TLabel;
lblCabQsoTail: TLabel;
lblCabSEx1Cmb: TLabel;
lblCabSrxCmb: TLabel;
lblCabSEx2Cmb: TLabel;
lblCabfileName: TLabel;
lblCabStats: TLabel;
lblCabLocation: TLabel;
lblCabPower: TLabel;
lblCabError: TLabel;
lblCabContestName: TLabel;
lblCabDone: TLabel;
lblCabSrxStCmb: TLabel;
dlgCabOpen: TOpenDialog;
mCabStatistics: TMemo;
pbCabExport: TProgressBar;
procedure btCabLoadClick(Sender: TObject);
procedure btCabSaveClick(Sender: TObject);
procedure btnCabExportClick(Sender: TObject);
procedure btnCabBrowseClick(Sender: TObject);
procedure btnCabFrmFltClick(Sender: TObject);
procedure btnCabHelpClick(Sender: TObject);
procedure cmbCabContestNameChange(Sender: TObject);
procedure cmbCabContestNameExit(Sender: TObject);
procedure edtCabCallWdtExit(Sender: TObject);
procedure edtCabInfoREx2WdtExit(Sender: TObject);
procedure edtCabInfoREx1WdtExit(Sender: TObject);
procedure edtCabInfoSEx2WdtExit(Sender: TObject);
procedure edtCabInfoSEx1WdtExit(Sender: TObject);
procedure edtCabCountCExit(Sender: TObject);
procedure FormClose(Sender : TObject; var CloseAction : TCloseAction);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender : TObject);
private
procedure SaveSettings;
procedure CabrilloMultipliersListCreate(contesttype: Integer);
function NonZero(s:String):String;
function CabrilloMode(mode : String) : String;
function CabrilloBand(band : String) : String;
function CabrilloBandToFreq(band : String) : String;
function CabrilloPower(power: integer): String;
function CabrilloQSOPoints(mode: String): Integer;
procedure saveCabLay(filename:string);
procedure loadCabLay(filename:string);
public
{ public declarations }
end;
var
frmCabrilloExport : TfrmCabrilloExport;
CountryToCount : integer = 0;
implementation
{$R *.lfm}
@ -61,25 +135,65 @@ uses dData,dUtils,dDXCC,fWorkedGrids, uMyIni;
procedure TfrmCabrilloExport.FormShow(Sender : TObject);
begin
dmUtils.LoadWindowPos(self);
lblError.Visible := False;
edtFileName.Text := cqrini.ReadString('CabrilloExport','FileName','');
if edtFileName.Text='' then
dlgSave.InitialDir := dmData.UsrHomeDir
lblCabError.Visible := False;
edtCabFileName.Text := cqrini.ReadString('CabrilloExport','FileName','');
if edtCabFileName.Text='' then
dlgCabSave.InitialDir := dmData.UsrHomeDir
else
dlgSave.InitialDir := ExtractFilePath(edtFileName.Text);
edtContestName.Text := cqrini.ReadString('CabrilloExport','ContestName','');
cbPower.ItemIndex := 0;
lblStats.Visible := False;
lblStatsContent.Visible := False;
lblStatsSum.Visible := False;
multipliers := TStringList.Create;
dlgCabSave.InitialDir := ExtractFilePath(edtCabFileName.Text);
cmbCabContestName.Text := cqrini.ReadString('CabrilloExport','ContestName','');
cmbCabPower.ItemIndex:= cqrini.ReadInteger('CabrilloExport','Power',0);
edtCabLocation.Text:= cqrini.ReadString('CabrilloExport','Location','');
edtCabSoapBox.Text:= cqrini.ReadString('CabrilloExport','SoapBox','');
edtCabCallWdt.Text:= cqrini.ReadString('CabrilloExport','CallsWidth', '13');
chkCabInfoSrst.Checked:= cqrini.ReadBool('CabrilloExport','incRSTs',True);
cmbCabInfoSEx1.ItemIndex:= cqrini.ReadInteger('CabrilloExport','StxOrder',0);
edtCabInfoSEx1Wdt.Text:= cqrini.ReadString('CabrilloExport','StxWidth','6');
cmbCabInfoSEx2.ItemIndex := cqrini.ReadInteger('CabrilloExport','StxStringOrder',0);
edtCabInfoSEx2Wdt.Text := cqrini.ReadString('CabrilloExport','StxStringWidth', '6');
chkCabInfoRrst.Checked:= cqrini.ReadBool('CabrilloExport','incRSTr',True);
cmbCabInfoREx1.ItemIndex:= cqrini.ReadInteger('CabrilloExport','SrxOrder',0);
edtCabInfoREx1Wdt.Text:= cqrini.ReadString('CabrilloExport','SrxWidth','6');
cmbCabInfoREx2.ItemIndex := cqrini.ReadInteger('CabrilloExport','SrxStringOrder',0);
edtCabInfoREx2Wdt.Text := cqrini.ReadString('CabrilloExport','SrxStringWidth', '6');
cmbCabTailTxCount.ItemIndex := cqrini.ReadInteger('CabrilloExport','TxCount',0);
CountryToCount:= cqrini.ReadInteger('CabrilloExport','CountryToCount',0);
if ( CountryToCount > 0) then edtCabCountC.Text:= dmDXCC.PfxFromADIF(CountryToCount);
lblCabStats.Visible := False;
mCabStatistics.Visible:=False;
end;
procedure TfrmCabrilloExport.SaveSettings;
begin
cqrini.WriteString('CabrilloExport','FileName',edtFileName.Text);
cqrini.WriteString('CabrilloExport','ContestName',edtContestName.Text);
cqrini.WriteString('CabrilloExport','FileName',edtCabFileName.Text);
cqrini.WriteString('CabrilloExport','ContestName',cmbCabContestName.Text);
cqrini.WriteInteger('CabrilloExport','Power',cmbCabPower.ItemIndex);
cqrini.WriteString('CabrilloExport','Location',edtCabLocation.Text);
cqrini.WriteString('CabrilloExport','SoapBox',edtCabSoapBox.Text);
cqrini.WriteString('CabrilloExport','CallsWidth', edtCabCallWdt.Text);
cqrini.WriteBool('CabrilloExport','incRSTs',chkCabInfoSrst.Checked);
cqrini.WriteInteger('CabrilloExport','StxOrder',cmbCabInfoSEx1.ItemIndex);
cqrini.WriteString('CabrilloExport','StxWidth', edtCabInfoSEx1Wdt.Text);
cqrini.WriteInteger('CabrilloExport','StxStringOrder',cmbCabInfoSEx2.ItemIndex);
cqrini.WriteString('CabrilloExport','StxStringWidth', edtCabInfoSEx2Wdt.Text);
cqrini.WriteBool('CabrilloExport','incRSTr',chkCabInfoRrst.Checked);
cqrini.WriteInteger('CabrilloExport','SrxOrder',cmbCabInfoREx1.ItemIndex);
cqrini.WriteString('CabrilloExport','SrxWidth', edtCabInfoREx1Wdt.Text);
cqrini.WriteInteger('CabrilloExport','SrxStringOrder',cmbCabInfoREx2.ItemIndex);
cqrini.WriteString('CabrilloExport','SrxStringWidth', edtCabInfoREx2Wdt.Text);
cqrini.WriteInteger('CabrilloExport','TxCount',cmbCabTailTxCount.ItemIndex);
cqrini.WriteInteger('CabrilloExport','CountryToCount',CountryToCount);
lblCabStats.Visible := False;
mCabStatistics.Visible:=False;
end;
function TfrmCabrilloExport.CabrilloMode(mode: string): String;
@ -91,24 +205,34 @@ begin
'AM': Result := 'PH';
'FM': Result := 'PH';
'RTTY': Result := 'RY';
'SSTV': Result := 'DG';
end; //case
else //remaining modes are digital (mostly)
Result := 'DG';
end;
end;
function TfrmCabrilloExport.CabrilloBand(band: string): String;
function TfrmCabrilloExport.CabrilloBandToFreq(band: string): String;
begin
Result := '';
case band of
'6M': Result := '50';
'4M': Result := '70';
'2M': Result := '144';
'160M': Result := '1800';
'80M': Result := '3500';
'40M': Result := '7000';
'20M': Result := '14000';
'15M': Result := '21000';
'10M': Result := '28000';
'6M': Result := '50';
'4M': Result := '70';
'2M': Result := '144';
'70CM': Result := '432';
'23CM': Result := '1.2G';
'13CM': Result := '2.3G';
'9CM': Result := '3.4G';
'6CM': Result := '5.7G';
'3CM': Result := '10G';
'1.25CM': Result := '24G';
'9CM': Result := '3.4G';
'6CM': Result := '5.7G';
'3CM': Result := '10G';
'1.25CM': Result := '24G';
'6MM': Result := '47G';
'4MM': Result := '75G';
else
Result := '';
end; //case
end;
@ -122,34 +246,6 @@ begin
end;
end;
function TfrmCabrilloExport.CabrilloQSOPoints(mode: String): Integer;
begin
Result := 0;
// Westphalia North and South Activities count QSO points based on mode
if (cbContestRules.ItemIndex = 0) or (cbContestRules.ItemIndex = 1) then
begin
case mode of
'FM': Result := 2;
'SSB': Result := 4;
'CW': Result := 6;
end;
end;
end;
procedure TfrmCabrilloExport.CabrilloMultipliersListCreate(contesttype: Integer);
begin
case contesttype of
0: begin
multipliers.Delimiter := ';';
multipliers.DelimitedText := 'N01;N02;N03;N04;N05;N06;N07;N08;N09;N10;N11;N12;N13;N14;N15;N16;N17;N18;N19;N20;N21;N22;N23;N24;N25;N26;N28;N29;N30;N31;N32;N33;N34;N35;N36;N37;N38;N39;N40;N41;N42;N43;N44;N45;N46;N47;N48;N49;N50;N51;N52;N53;N54;N55;N56;N57;N58;N59;N60;N61;N62;WN;DVN;YLN;Z14;Z34;Z41;Z60';
end;
1: begin
multipliers.Delimiter := ';';
multipliers.DelimitedText := 'O01;O02;O03;O04;O05;O06;O07;O08;O09;O10;O11;O12;O13;O14;O15;O16;O17;O18;O19;O20;O21;O22;O23;O24;O25;O26;O27;O28;O29;O30;O31;O32;O33;O34;O35;O36;O37;O38;O39;O40;O41;O42;O43;O44;O45;O46;O47;O48;O49;O51;O52;O53;O54;O55;DVO;DWS;YLO;Z03;Z38;Z92;Z93';
end;
end;
end;
procedure TfrmCabrilloExport.FormClose(Sender : TObject;
var CloseAction : TCloseAction);
begin
@ -157,18 +253,154 @@ begin
dmUtils.SaveWindowPos(self)
end;
procedure TfrmCabrilloExport.Button1Click(Sender : TObject);
procedure TfrmCabrilloExport.FormCreate(Sender: TObject);
var i:integer;
begin
if dlgSave.Execute then
edtFileName.Text := dlgSave.FileName
dmUtils.LoadWindowPos(self);
dmUtils.LoadFontSettings(self);
dmUtils.InsertContests(cmbCabContestName);
cmbCabInfoSEx1.Items.Clear;
cmbCabInfoSEx2.Items.Clear;
cmbCabInfoREx1.Items.Clear;
cmbCabInfoREx2.Items.Clear;
for i:=0 to cMaxExch do //cExhanges array Max size
Begin
cmbCabInfoSEx1.Items.Add(cExhanges[i]);
cmbCabInfoSEx2.Items.Add(cExhanges[i]);
cmbCabInfoREx1.Items.Add(cExhanges[i]);
cmbCabInfoREx2.Items.Add(cExhanges[i]);
end;
end;
procedure TfrmCabrilloExport.btnExportClick(Sender: TObject);
procedure TfrmCabrilloExport.btnCabBrowseClick(Sender : TObject);
begin
if dlgCabSave.Execute then
edtCabFileName.Text := dlgCabSave.FileName
end;
procedure TfrmCabrilloExport.btnCabFrmFltClick(Sender: TObject);
begin
if not dmData.IsFilter then
begin
Application.MessageBox('You must first use Contest Filter for qsos to export!','Error ...',mb_OK+mb_IconError);
exit
end;
cmbCabContestName.Text:='';
dmData.qCQRLOG.First;
while not dmData.qCQRLOG.eof do
begin
if (cmbCabContestName.Text='') then //set contest name from filtered qosos
Begin
if (dmData.qCQRLOG.FieldByName('contestname').AsString <> '') then
cmbCabContestName.Text:=dmData.qCQRLOG.FieldByName('contestname').AsString;
end
else
Begin //if there are different contest names in filtered qsos put "?" instead
if ((cmbCabContestName.Text<>dmData.qCQRLOG.FieldByName('contestname').AsString)
and (dmData.qCQRLOG.FieldByName('contestname').AsString <> '')) then
cmbCabContestName.Text:='eh? Check filter results!';
end;
dmData.qCQRLOG.Next;
end;
end;
procedure TfrmCabrilloExport.btnCabHelpClick(Sender: TObject);
begin
ShowHelp;
end;
procedure TfrmCabrilloExport.cmbCabContestNameChange(Sender: TObject);
var i: integer;
s: string;
begin
if cmbCabContestName.Text<>'' then
begin
if pos('|', cmbCabContestName.Text)>1 then //list selected item
cmbCabContestName.Text := ExtractWord(1,cmbCabContestName.Text,['|']);
s:= '';
for i:=1 to length(cmbCabContestName.Text) do
begin
case cmbCabContestName.Text[i] of
'A'..'Z' : s:=s+ cmbCabContestName.Text[i];
'0'..'9' : s:=s+ cmbCabContestName.Text[i];
'-' : s:=s+ cmbCabContestName.Text[i];
end;
end;
cmbCabContestName.Text:=s;
cmbCabContestName.SelStart := Length(cmbCabContestName.Text);
end;
end;
procedure TfrmCabrilloExport.cmbCabContestNameExit(Sender: TObject);
begin
if pos('|', cmbCabContestName.Text)>1 then //list selected item
cmbCabContestName.Text := ExtractWord(1,cmbCabContestName.Text,['|']);
end;
procedure TfrmCabrilloExport.edtCabCallWdtExit(Sender: TObject);
begin
edtCabCallWdt.Text:=NonZero(edtCabCallWdt.Text);
end;
procedure TfrmCabrilloExport.edtCabInfoSEx1WdtExit(Sender: TObject);
begin
edtCabInfoSEx1Wdt.Text :=NonZero( edtCabInfoSEx1Wdt.Text);
end;
procedure TfrmCabrilloExport.edtCabCountCExit(Sender: TObject);
var
AllQSO : Boolean=False;
f : TextFile;
q : String;
mycall : String;
adif : Word;
date : TDateTime;
cont, WAZ, posun, ITU, lat, long, pfx, country: string;
Begin
date := dmUtils.GetDateTime(0);
if dmDXCC.IsPrefix(edtCabCountC.Text,Date) then
Begin
cont := '';WAZ := '';posun := '';ITU := '';lat := '';long := '';
adif:=dmDXCC.id_country(edtCabCountC.Text,date,pfx,country,cont,itu,waz,posun,lat,long);
edtCabCountC.Text:= dmDXCC.PfxFromADIF(adif);
CountryToCount:= adif;
end
else
begin
edtCabCountC.Text:='';
CountryToCount:= 0;
end
end;
procedure TfrmCabrilloExport.edtCabInfoSEx2WdtExit(Sender: TObject);
begin
edtCabInfoSEx2Wdt.Text:=NonZero(edtCabInfoSEx2Wdt.Text);
end;
procedure TfrmCabrilloExport.edtCabInfoREx1WdtExit(Sender: TObject);
begin
edtCabInfoREx1Wdt.Text:=NonZero(edtCabInfoREx1Wdt.Text);
end;
procedure TfrmCabrilloExport.edtCabInfoREx2WdtExit(Sender: TObject);
begin
edtCabInfoREx2Wdt.Text:=NonZero(edtCabInfoREx2Wdt.Text);
end;
function TfrmCabrilloExport.NonZero(s:String):String;
var i:integer;
begin
TryStrToInt(s,i);
if (i=0) then s:='1';
Result:=s;
end;
procedure TfrmCabrilloExport.btnCabExportClick(Sender: TObject);
type
EachContinent=Record
Name, WkdPfxs: String;
QsoCount: Integer;
end;
var
f,r : TextFile;
tmp : String;
mycall,call: String;
myloc, loc : String;
myname : String;
mailingaddress, zipcity : String;
@ -179,30 +411,33 @@ var
j : Integer = 0;
s : TStringList;
Date : TDateTime;
callsign_list : TStringList;
dupe : String;
cont, WAZ, posun, ITU, lat, long, pfx, country: string;
message : String;
category_band: String;
category_mode: String;
address: TStringArray;
qsopoints : Integer = 0;
multiplierpoints : Integer = 0;
worked_multipliers : TStringList;
UsrCountryCount : integer = 0;
TotalCountryList : TStringList;
Continents: array[ 0 .. 6 ] of EachContinent = (
(name: 'NA'; WkdPfxs: ''; QsoCount: 0),
(name: 'SA'; WkdPfxs: ''; QsoCount: 0),
(name: 'OC'; WkdPfxs: ''; QsoCount: 0),
(name: 'AS'; WkdPfxs: ''; QsoCount: 0),
(name: 'EU'; WkdPfxs: ''; QsoCount: 0),
(name: 'AF'; WkdPfxs: ''; QsoCount: 0),
(name: 'Locator'; WkdPfxs: ''; QsoCount: 0) //nice place for this :-)
);
begin
SaveSettings;
date := dmUtils.GetDateTime(0);
mycall := cqrini.ReadString('Station','Call','');
cont := '';WAZ := '';posun := '';ITU := '';lat := '';long := '';
adif := dmDXCC.id_country(mycall,date,pfx,country,cont,itu,waz,posun,lat,long);
dmDXCC.qDXCCRef.Close;
dmDXCC.qDXCCRef.SQL.Text := 'SELECT * FROM cqrlog_common.dxcc_ref WHERE adif = ' + IntToStr(adif);
dmDXCC.qDXCCRef.Open;
if dmDXCC.qDXCCRef.RecordCount > 0 then
begin
country := dmDXCC.qDXCCRef.FieldByName('name').AsString;
end;
adif := dmDXCC.id_country(mycall,date,pfx,cont,country,itu,waz,posun,lat,long);
myloc := cqrini.ReadString('Station','LOC','');
if length(myloc) = 4 then myloc := myloc +'LL';
if length(myloc) = 4 then myloc := myloc +'ll';
myname := cqrini.ReadString('Station','Name','');
mailingaddress := cqrini.ReadString('Station','MailingAddress','');
zipcity := cqrini.ReadString('Station','ZipCity','');
@ -210,103 +445,185 @@ begin
email := cqrini.ReadString('Station','Email','');
club := cqrini.ReadString('Station','Club','');
CabrilloMultipliersListCreate(cbContestRules.ItemIndex);
worked_multipliers := TStringList.Create;
if (( mailingaddress ='') or (zipcity='') or (email='')) then
begin
Application.MessageBox('You should fill Preferences/Station/Contest info.'+LineEnding+
'MailAddr,Zip and eMail should have content!'+LineEnding+
'(at least "-")','Error ...',mb_OK+mb_IconError);
exit
end;
if not dmData.IsFilter then
begin
Application.MessageBox('You must filter a single band to export!','Error ...',mb_OK+mb_IconError);
Application.MessageBox('You must first use filter for qsos to export!','Error ...',mb_OK+mb_IconError);
exit
end;
if (dmData.qCQRLOG.FieldByName('band').AsString = '') then
begin
Application.MessageBox('You must filter a single band to export!','Error ...',mb_OK+mb_IconError);
exit
end;
if FileExistsUTF8(edtFileName.Text) then
if FileExistsUTF8(edtCabFileName.Text) then
begin
if Application.MessageBox('File already exists,overwrite it?','Question ...',mb_YesNo
+mb_IconQuestion)=mrYes then
DeleteFileUTF8(edtFileName.Text)
DeleteFileUTF8(edtCabFileName.Text)
else
exit
end;
if (trim(edtFileName.Text)='') then
if (trim(edtCabFileName.Text)='') then
begin
Application.MessageBox('You must choose file to export!','Error ...',mb_OK+mb_IconError);
exit
end;
pbExport.Position := 0;
lblDone.Visible := False;
pbExport.Visible := True;
if dmData.trQ.Active then dmData.trQ.Rollback;
dmData.Q.Close;
if AllQSO then
dmData.Q.SQL.Text := 'select qsodate,time_on,callsign,freq,mode,award,qth,remarks '+
'from view_cqrlog_main_by_qsodate order by qsodate,time_on'
else begin
q := dmData.qCQRLOG.SQL.Text;
if Pos('order by',LowerCase(q)) > 0 then
q := copy(q,1,Pos('order by',LowerCase(q))-1);
q := q + ' order by qsodate,time_on';
dmData.Q.SQL.Text := q;
end;
if dmData.DebugLevel >=1 then
Writeln(dmData.Q.SQL.Text);
pbCabExport.Position := 0;
lblCabDone.Visible := False;
pbCabExport.Visible := True;
TotalCountryList := TStringList.Create;
TotalCountryList.Sorted:=True;
TotalCountryList.Duplicates:=dupIgnore;
s := TStringList.Create;
callsign_list := TStringList.Create;
category_band := 'ALL';
category_band := '';
category_mode := '';
try try
dmData.trQ.StartTransaction;
dmData.Q.Open;
pbExport.Max := dmData.Q.RecordCount;
while not dmData.Q.Eof do
AssignFile(r,'/tmp/CabrilloReject.log');
Rewrite(r);
pbCabExport.Max := dmData.qCQRLOG.RecordCount;
dmData.qCQRLOG.Last;
while not dmData.qCQRLOG.bof do
begin
tmp:='';
// Check for missing mandatory fields
if (dmData.Q.FieldByName('rst_s').AsString = '') then
if (
(dmData.qCQRLOG.FieldByName('qsodate').AsString = '')
or (dmData.qCQRLOG.FieldByName('time_on').AsString = '')
or (dmData.qCQRLOG.FieldByName('callsign').AsString = '')
or (CabrilloBandToFreq(dmData.qCQRLOG.FieldByName('band').AsString) = '') //warc or missing band
or (dmData.qCQRLOG.FieldByName('mode').AsString = '') //missing mode
) then
begin
pbExport.StepIt;
dmData.Q.Next;
Continue;
end;
if (dmData.Q.FieldByName('rst_r').AsString = '') then
begin
pbExport.StepIt;
dmData.Q.Next;
writeln(r,dmData.qCQRLOG.FieldByName('qsodate').AsString,' ',
dmData.qCQRLOG.FieldByName('time_on').AsString,' ',
dmData.qCQRLOG.FieldByName('callsign').AsString,' ',
dmData.qCQRLOG.FieldByName('band').AsString,' ',
dmData.qCQRLOG.FieldByName('mode').AsString ,' ',
CabrilloBandToFreq(dmData.qCQRLOG.FieldByName('band').AsString));
pbCabExport.StepIt;
dmData.qCQRLOG.Prior;
Continue;
end;
// Check for single or ALL band
if (CabrilloBand(dmData.Q.FieldByName('band').AsString) <> category_band) then
begin
if (category_band = 'ALL') then
category_band := CabrilloBand(dmData.Q.FieldByName('band').AsString)
else
category_band := 'ALL';
end;
i := i+1;
s.Add('QSO: '+
Format('%5S', [CabrilloBand(dmData.Q.FieldByName('band').AsString)])+' '+
CabrilloMode(dmData.Q.FieldByName('mode').AsString)+' '+
dmData.Q.FieldByName('qsodate').AsString+' '+
StringReplace(dmData.Q.FieldByName('time_on').AsString,':','',[rfReplaceAll, rfIgnoreCase])+' '+
Format('%-13S', [mycall])+' '+
Format('%3S', [dmData.Q.FieldByName('rst_s').AsString])+' '+
Format('%-6S', [dmData.Q.FieldByName('stx_string').AsString])+' '+
// UpperCase(myloc)+' '+ // My locator is not needed here
Format('%-13S', [dmData.Q.FieldByName('callsign').AsString])+' '+
Format('%3S', [dmData.Q.FieldByName('rst_r').AsString])+' '+
Format('%-6S', [dmData.Q.FieldByName('srx_string').AsString])+' '+
'0' // Only single Ops supported currently so put transmitter ID to 0
);
qsopoints += CabrilloQSOPoints(dmData.Q.FieldByName('mode').AsString);
if (multipliers.IndexOf(dmData.Q.FieldByName('srx_string').AsString) >= 0) and
(worked_multipliers.IndexOf(dmData.Q.FieldByName('srx_string').AsString) < 0) then
begin
worked_multipliers.Add(dmData.Q.FieldByName('srx_string').AsString);
multiplierpoints += 1;
end;
pbExport.StepIt;
dmData.Q.Next
if ( category_band='') then
category_band:= dmData.qCQRLOG.FieldByName('band').AsString //initial band
else
begin
if (dmData.qCQRLOG.FieldByName('band').AsString <> category_band) then //if other bands found then ALL
category_band := 'ALL';
end;
// Check for single or MIXED mode
if ( category_mode='') then
category_mode:= dmData.qCQRLOG.FieldByName('mode').AsString //initial mode
else
begin
if (dmData.qCQRLOG.FieldByName('mode').AsString <> category_mode) then //if other modes found then MIXED
category_mode := 'MIXED';
end;
loc := copy(dmData.qCQRLOG.FieldByName('loc').AsString,1,4);
call := Format('%-'+edtCabCallWdt.Text+'.'+edtCabCallWdt.Text+'s', [dmData.qCQRLOG.FieldByName('callsign').AsString]);
adif := dmDXCC.id_country(call,date,pfx,cont,country,itu,waz,posun,lat,long);
TotalCountryList.Add(pfx);
if ((CountryToCount<>0) and (adif = CountryToCount)) then inc(UsrCountryCount);
case cont of
'NA': Begin
inc(Continents[0].QsoCount);
if (pos(pfx,Continents[0].WkdPfxs)=0 )then
Continents[0].WkdPfxs:= Continents[0].WkdPfxs+pfx+' ';
end;
'SA': Begin
inc(Continents[1].QsoCount);
if (pos(pfx,Continents[1].WkdPfxs)=0 )then
Continents[1].WkdPfxs:= Continents[1].WkdPfxs+pfx+' ';
end;
'OC': Begin
inc(Continents[2].QsoCount);
if (pos(pfx,Continents[2].WkdPfxs)=0 )then
Continents[2].WkdPfxs:= Continents[2].WkdPfxs+pfx+' ';
end;
'AS': Begin
inc(Continents[3].QsoCount);
if (pos(pfx,Continents[3].WkdPfxs)=0 )then
Continents[3].WkdPfxs:= Continents[3].WkdPfxs+pfx+' ';
end;
'EU': Begin
inc(Continents[4].QsoCount);
if (pos(pfx,Continents[4].WkdPfxs)=0 )then
Continents[4].WkdPfxs:= Continents[4].WkdPfxs+pfx+' ';
end;
'AF': Begin
inc(Continents[5].QsoCount);
if (pos(pfx,Continents[5].WkdPfxs)=0 )then
Continents[5].WkdPfxs:= Continents[5].WkdPfxs+pfx+' ';
end;
end; //case
if (length(loc)=4) then
Begin
if (pos(loc,Continents[6].WkdPfxs)=0 )then
begin
Continents[6].WkdPfxs:= Continents[6].WkdPfxs+loc+' ';
inc(Continents[6].QsoCount); //here not total, but different count
end;
end;
tmp:= 'QSO: '+
Format('%5s', [CabrilloBandToFreq(dmData.qCQRLOG.FieldByName('band').AsString)])+' '+
CabrilloMode(dmData.qCQRLOG.FieldByName('mode').AsString)+' '+
dmData.qCQRLOG.FieldByName('qsodate').AsString+' '+
StringReplace(dmData.qCQRLOG.FieldByName('time_on').AsString,':','',[rfReplaceAll, rfIgnoreCase])+' '+
Format('%-'+edtCabCallWdt.Text+'.'+edtCabCallWdt.Text+'s', [mycall]);
//end of common header
if chkCabInfoSrst.Checked then tmp:=tmp+' '+ Format('%-3s', [dmData.qCQRLOG.FieldByName('rst_s').AsString]);
if (cmbCabInfoSEx1.ItemIndex > 0) then
Begin
if (cmbCabInfoSEx1.Text = 'my_name') then
tmp:=tmp+' '+Format('%-'+edtCabInfoSEx1Wdt.Text+'.'+edtCabInfoSEx1Wdt.Text+'s', [myname])
else
tmp:=tmp+' '+Format('%-'+edtCabInfoSEx1Wdt.Text+'.'+edtCabInfoSEx1Wdt.Text+'s',[dmData.qCQRLOG.FieldByName(
cmbCabInfoSEx1.Text).AsString]) ;
end;
if (cmbCabInfoSEx2.ItemIndex > 0) then
Begin
if (cmbCabInfoSEx2.Text = 'my_name') then
tmp:=tmp+' '+Format('%-'+edtCabInfoSEx2Wdt.Text+'.'+edtCabInfoSEx2Wdt.Text+'s', [myname])
else
tmp:=tmp+' '+Format('%-'+edtCabInfoSEx2Wdt.Text+'.'+edtCabInfoSEx2Wdt.Text+'s',[dmData.qCQRLOG.FieldByName(
cmbCabInfoSEx2.Text).AsString]) ;
end;
//end of info sent
tmp:=tmp+' '+ call;
if chkCabInfoRrst.Checked then tmp:=tmp+' '+ Format('%-3s', [dmData.qCQRLOG.FieldByName('rst_r').AsString]);
if (cmbCabInfoREx1.ItemIndex > 0) then
Begin
tmp:=tmp+' '+Format('%-'+edtCabInfoREx1Wdt.Text+'.'+edtCabInfoREx1Wdt.Text+'s',[dmData.qCQRLOG.FieldByName(
cmbCabInfoREx1.Text).AsString]) ;
end;
if (cmbCabInfoREx2.ItemIndex > 0) then
Begin
tmp:=tmp+' '+Format('%-'+edtCabInfoREx2Wdt.Text+'.'+edtCabInfoREx2Wdt.Text+'s',[dmData.qCQRLOG.FieldByName(
cmbCabInfoREx2.Text).AsString]) ;
end;
//end of info rcvd
if (cmbCabTailTxCount.Text<>'') then tmp:=tmp+' '+Format('%1s',[ cmbCabTailTxCount.Text]);
s.Add(tmp);
inc(i);
pbCabExport.StepIt;
dmData.qCQRLOG.Prior
end;
except
on E : Exception do
@ -316,35 +633,50 @@ begin
end
end
finally
lblDone.Visible := True;
dmData.trQ.Rollback;
dmData.Q.Close
lblCabDone.Visible := True;
CloseFile(r);
end;
//Check mode result before writing header
case category_mode of
'CW',
'FM',
'RTTY',
'SSB',
'MIXED' : Begin //all is ok
if dmData.DebugLevel >=1 then writeln('CATEGORY-MODE:', category_mode);
end;
else category_mode:='DIGI';
end;
try
AssignFile(f,edtFileName.Text);
AssignFile(f,edtCabFileName.Text);
Rewrite(f);
// This is Cabrillo format v3.0
Writeln(f,'START-OF-LOG: 3.0');
Writeln(f,'CREATED-BY: CQRLOG '+dmData.VersionString);
Writeln(f,'CONTEST: '+edtContestName.Text);
Writeln(f,'CONTEST: '+cmbCabContestName.Text);
Writeln(f,'CALLSIGN: '+mycall);
Writeln(f,'CATEGORY-OPERATOR: SINGLE-OP'); // Only single op supported currently
Writeln(f,'CATEGORY-BAND: '+category_band);
Writeln(f,'CATEGORY-POWER: '+CabrilloPower(cbPower.ItemIndex));
Writeln(f,'CATEGORY-MODE: '+category_mode);
Writeln(f,'CATEGORY-POWER: '+CabrilloPower(cmbCabPower.ItemIndex));
Writeln(f,'CATEGORY-ASSISTED: NON-ASSISTED'); // Only non-assisted currently
Writeln(f,'CATEGORY-TRANSMITTER: ONE'); // Only one transmitter for now
Writeln(f,'LOCATION: ');
Writeln(f,'CLAIMED-SCORE: '+IntToStr(qsopoints*multiplierpoints));
Writeln(f,'GRID-LOCATOR: '+UPcase(myloc)); //non standard upcase required
Writeln(f,'LOCATION: '+edtCabLocation.Text);
Writeln(f,'CLAIMED-SCORE: ');
Writeln(f,'SPECIFIC: ');
Writeln(f,'CLUB: '+club);
Writeln(f,'NAME: '+myname);
Writeln(f,'ADDRESS: '+mailingaddress);
Writeln(f,'ADDRESS-CITY: '+address[1]);
Writeln(f,'ADDRESS-STATE: '+country);
Writeln(f,'ADDRESS-COUNTRY: '+country);
Writeln(f,'ADDRESS-STATE-PROVINCE: ');
Writeln(f,'ADDRESS-POSTAL-CODE: '+address[0]);
Writeln(f,'EMAIL: '+email);
Writeln(f,'SOAPBOX:');
Writeln(f,'SOAPBOX:'+edtCabSoapBox.Text);
for j:=0 to pred(s.Count) do
Writeln(f,s[j]);
@ -358,24 +690,124 @@ begin
mb_OK+mb_IconError)
end
end;
if ((pbExport.Max - i) > 0) then
if ((pbCabExport.Max - i) > 0) then
begin
lblError.Caption := IntToStr(pbExport.Max - i)+' of '+IntToStr(pbExport.Max)+' entries were ignored! Please check log entries.';
lblError.Font.Color := clRed;
end
else
begin
lblError.Caption := IntToStr(s.Count)+' entries were exported.';
lblStats.Visible := True;
lblStatsContent.Caption := 'Valid QSOs: '+IntToStr(s.Count)+LineEnding+
'QSO Points: '+IntToStr(qsopoints)+LineEnding+
'Multipliers: '+IntToStr(multiplierpoints)+LineEnding;
lblStatsContent.Visible := True;
lblStatsSum.Caption := 'Total Sum: '+IntToStr(qsopoints*multiplierpoints);
lblStatsSum.Visible := True;
lblCabError.Caption := IntToStr(pbCabExport.Max - i)+' of '+IntToStr(pbCabExport.Max)+' entries were ignored! Please check /tmp/CabrilloReject.log entries.';
lblCabError.Font.Color := clRed;
lblCabError.Visible := True;
end;
lblError.Visible := True;
lblCabError.Caption := IntToStr(s.Count)+' entries were exported.';
lblCabStats.Visible := True;
lblCabStats.Font.Style:=[fsBold]; //Bold disappears when visible false->true (why?)
mCabStatistics.Clear;
mCabStatistics.Lines.Add( 'Valid QSOs: '+IntToStr(s.Count));
mCabStatistics.Lines.Add('Total country count: '+IntToStr(TotalCountryList.Count));
if (CountryToCount<>0) then
mCabStatistics.Lines.Add('User def pfx count: '+IntToStr(UsrCountryCount));
if (( cmbCabInfoREx1.Text='loc') or (cmbCabInfoREx2.Text='loc')) then
mCabStatistics.Lines.Add(Continents[6].Name+' Count: '+IntToStr(Continents[6].QsoCount)+' '+Continents[6].WkdPfxs);
for j:=0 to 5 do
Begin
mCabStatistics.Lines.Add(Continents[j].Name+' Qsos:'+Format('%4s',[IntToStr(Continents[j].QsoCount)])+' Pfx: '+Continents[j].WkdPfxs);
end;
mCabStatistics.Visible:=true;
end;
procedure TfrmCabrilloExport.btCabSaveClick(Sender: TObject);
var
f : string ;
begin
if (cmbCabContestName.Text<>'') then
begin
f:= dlgCabSave.FileName;
dlgCabSave.FileName:= cmbCabContestName.Text;
end;
dlgCabSave.DefaultExt:='.templ';
dlgCabSave.Filter:='Cabrillo template|*.templ';
dlgCabSave.InitialDir := dmData.HomeDir;
if dlgCabSave.Execute then saveCabLay(dlgCabSave.FileName);
//return export file settings
dlgCabSave.DefaultExt:='.cbr';
dlgCabSave.Filter:='Cabrillo file|*.cbr';
dlgCabSave.FileName:= f;
end;
procedure TfrmCabrilloExport.btCabLoadClick(Sender: TObject);
begin
dlgCabOpen.InitialDir := dmData.HomeDir;
if dlgCabOpen.Execute then loadCabLay(dlgCabOpen.FileName);
end;
procedure TfrmCabrilloExport.saveCabLay(filename:String);
var
filini : TIniFile;
begin
filini := TIniFile.Create(fileName);
try
filini.WriteString('CabrilloExport','FileName',edtCabFileName.Text);
filini.WriteString('CabrilloExport','ContestName',cmbCabContestName.Text);
filini.WriteInteger('CabrilloExport','Power',cmbCabPower.ItemIndex);
filini.WriteString('CabrilloExport','Location',edtCabLocation.Text);
filini.WriteString('CabrilloExport','SoapBox',edtCabSoapBox.Text);
filini.WriteString('CabrilloExport','CallsWidth', edtCabCallWdt.Text);
filini.WriteBool('CabrilloExport','incRSTs',chkCabInfoSrst.Checked);
filini.WriteInteger('CabrilloExport','StxOrder',cmbCabInfoSEx1.ItemIndex);
filini.WriteString('CabrilloExport','StxWidth', edtCabInfoSEx1Wdt.Text);
filini.WriteInteger('CabrilloExport','StxStringOrder',cmbCabInfoSEx2.ItemIndex);
filini.WriteString('CabrilloExport','StxStringWidth', edtCabInfoSEx2Wdt.Text);
filini.WriteBool('CabrilloExport','incRSTr',chkCabInfoRrst.Checked);
filini.WriteInteger('CabrilloExport','SrxOrder',cmbCabInfoREx1.ItemIndex);
filini.WriteString('CabrilloExport','SrxWidth', edtCabInfoREx1Wdt.Text);
filini.WriteInteger('CabrilloExport','SrxStringOrder',cmbCabInfoREx2.ItemIndex);
filini.WriteString('CabrilloExport','SrxStringWidth', edtCabInfoREx2Wdt.Text);
filini.WriteInteger('CabrilloExport','TxCount',cmbCabTailTxCount.ItemIndex);
filini.WriteInteger('CabrilloExport','CountryToCount',CountryToCount);
finally
filini.Free
end;
end;
Procedure TfrmCabrilloExport.loadCabLay(filename:string);
var
filini : TIniFile;
begin
filini := TIniFile.Create(fileName);
try
edtCabFileName.Text := filini.ReadString('CabrilloExport','FileName','');
if edtCabFileName.Text='' then
dlgCabSave.InitialDir := dmData.UsrHomeDir
else
dlgCabSave.InitialDir := ExtractFilePath(edtCabFileName.Text);
cmbCabContestName.Text := filini.ReadString('CabrilloExport','ContestName','');
cmbCabPower.ItemIndex:= filini.ReadInteger('CabrilloExport','Power',0);
edtCabLocation.Text:= filini.ReadString('CabrilloExport','Location','');
edtCabSoapBox.Text:= filini.ReadString('CabrilloExport','SoapBox','');
edtCabCallWdt.Text:= filini.ReadString('CabrilloExport','CallsWidth', '13');
chkCabInfoSrst.Checked:= filini.ReadBool('CabrilloExport','incRSTs',True);
cmbCabInfoSEx1.ItemIndex:= filini.ReadInteger('CabrilloExport','StxOrder',0);
edtCabInfoSEx1Wdt.Text:= filini.ReadString('CabrilloExport','StxWidth','6');
cmbCabInfoSEx2.ItemIndex := filini.ReadInteger('CabrilloExport','StxStringOrder',0);
edtCabInfoSEx2Wdt.Text := filini.ReadString('CabrilloExport','StxStringWidth', '6');
chkCabInfoRrst.Checked:= filini.ReadBool('CabrilloExport','incRSTr',True);
cmbCabInfoREx1.ItemIndex:= filini.ReadInteger('CabrilloExport','SrxOrder',0);
edtCabInfoREx1Wdt.Text:= filini.ReadString('CabrilloExport','SrxWidth','6');
cmbCabInfoREx2.ItemIndex := filini.ReadInteger('CabrilloExport','SrxStringOrder',0);
edtCabInfoREx2Wdt.Text := filini.ReadString('CabrilloExport','SrxStringWidth', '6');
cmbCabTailTxCount.ItemIndex := filini.ReadInteger('CabrilloExport','TxCount',0);
CountryToCount:= filini.ReadInteger('CabrilloExport','CountryToCount',0);
if ( CountryToCount > 0) then edtCabCountC.Text:= dmDXCC.PfxFromADIF(CountryToCount);
finally
filini.Free
end
end;
end.

View File

@ -120,7 +120,7 @@ object frmContestFilter: TfrmContestFilter
OnKeyUp = FormKeyUp
OnShow = FormShow
Position = poMainFormCenter
LCLVersion = '1.8.2.0'
LCLVersion = '2.0.8.0'
object btnOK: TButton
AnchorSideLeft.Control = btnCancel
AnchorSideLeft.Side = asrBottom
@ -176,14 +176,14 @@ object frmContestFilter: TfrmContestFilter
Width = 522
BorderSpacing.Left = 6
Caption = 'Contest name'
ClientHeight = 102
ClientWidth = 516
ClientHeight = 110
ClientWidth = 520
TabOrder = 0
object cmbContestName: TComboBox
AnchorSideLeft.Control = gbContName
AnchorSideTop.Control = gbContName
Left = 6
Height = 25
Height = 33
Hint = 'Choose contest from logged QSOs'
Top = 0
Width = 506
@ -191,233 +191,7 @@ object frmContestFilter: TfrmContestFilter
AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchAscending]
BorderSpacing.Left = 6
DropDownCount = 3
ItemHeight = 17
Items.Strings = (
'070-160M-SPRINT'
'070-3-DAY'
'070-31-FLAVORS'
'070-40M-SPRINT'
'070-80M-SPRINT'
'070-PSKFEST'
'070-ST-PATS-DAY'
'070-VALENTINE-SPRINT'
'10-RTTY'
'1010-OPEN-SEASON'
'7QP'
'AL-QSO-PARTY'
'ALL-ASIAN-DX-CW'
'ALL-ASIAN-DX-PHONE'
'ANARTS-RTTY'
'ANATOLIAN-RTTY'
'AP-SPRINT'
'AR-QSO-PARTY'
'ARI-DX'
'ARRL-10'
'ARRL-160'
'ARRL-222'
'ARRL-DX-CW'
'ARRL-DX-SSB'
'ARRL-EME'
'ARRL-FIELD-DAY'
'ARRL-RR-CW'
'ARRL-RR-RTTY'
'ARRL-RR-SSB'
'ARRL-RTTY'
'ARRL-SCR'
'ARRL-SS-CW'
'ARRL-SS-SSB'
'ARRL-UHF-AUG'
'ARRL-VHF-JAN'
'ARRL-VHF-JUN'
'ARRL-VHF-SEP'
'AZ-QSO-PARTY'
'BARTG-RTTY'
'BARTG-SPRINT'
'BC-QSO-PARTY'
'CA-QSO-PARTY'
'CIS-DX'
'CO-QSO-PARTY'
'CQ-160-CW'
'CQ-160-SSB'
'CQ-M'
'CQ-VHF'
'CQ-WPX-CW'
'CQ-WPX-RTTY'
'CQ-WPX-SSB'
'CQ-WW-CW'
'CQ-WW-RTTY'
'CQ-WW-SSB'
'CT-QSO-PARTY'
'CVA-DX-CW'
'CVA-DX-SSB'
'CWOPS-CW-OPEN'
'CWOPS-CWT'
'DARC-WAEDC-CW'
'DARC-WAEDC-RTTY'
'DARC-WAEDC-SSB'
'DARC-WAG'
'DE-QSO-PARTY'
'DL-DX-RTTY'
'DMC-RTTY'
'EA-CNCW'
'EA-DME'
'EA-PSK63'
'EA-RTTY (import-only)'
'EA-SMRE-CW'
'EA-SMRE-SSB'
'EA-VHF-ATLANTIC'
'EA-VHF-COM'
'EA-VHF-COSTA-SOL'
'EA-VHF-EA'
'EA-VHF-EA1RCS'
'EA-VHF-QSL'
'EA-VHF-SADURNI'
'EA-WW-RTTY'
'EPC-PSK63'
'EU Sprint'
'EU-HF'
'EU-PSK-DX'
'EUCW160M'
'FALL SPRINT'
'FL-QSO-PARTY'
'GA-QSO-PARTY'
'HA-DX'
'HELVETIA'
'HI-QSO-PARTY'
'HOLYLAND'
'IA-QSO-PARTY'
'IARU-FIELD-DAY'
'IARU-HF'
'ID-QSO-PARTY'
'IL QSO Party'
'IN-QSO-PARTY'
'JARTS-WW-RTTY'
'JIDX-CW'
'JIDX-SSB'
'JT-DX-RTTY'
'KS-QSO-PARTY'
'KY-QSO-PARTY'
'LA-QSO-PARTY'
'LDC-RTTY'
'LZ DX'
'MAR-QSO-PARTY'
'MD-QSO-PARTY'
'ME-QSO-PARTY'
'MI-QSO-PARTY'
'MIDATLANTIC-QSO-PARTY'
'MN-QSO-PARTY'
'MO-QSO-PARTY'
'MS-QSO-PARTY'
'MT-QSO-PARTY'
'NA-SPRINT-CW'
'NA-SPRINT-RTTY'
'NA-SPRINT-SSB'
'NAQP-CW'
'NAQP-RTTY'
'NAQP-SSB'
'NC-QSO-PARTY'
'ND-QSO-PARTY'
'NE-QSO-PARTY'
'NEQP'
'NH-QSO-PARTY'
'NJ-QSO-PARTY'
'NM-QSO-PARTY'
'NRAU-BALTIC-CW'
'NRAU-BALTIC-SSB'
'NV-QSO-PARTY'
'NY-QSO-PARTY'
'OCEANIA-DX-CW'
'OCEANIA-DX-SSB'
'OH-QSO-PARTY'
'OK-DX-RTTY'
'OK-OM-DX'
'OK-QSO-PARTY'
'OMISS-QSO-PARTY'
'ON-QSO-PARTY'
'OR-QSO-PARTY'
'PA-QSO-PARTY'
'PACC'
'PSK-DEATHMATCH'
'QC-QSO-PARTY'
'RAC (import-only)'
'RAC-CANADA-DAY'
'RAC-CANADA-WINTER'
'RDAC'
'RDXC'
'REF-160M'
'REF-CW'
'REF-SSB'
'REP-PORTUGAL-DAY-HF'
'RI-QSO-PARTY'
'RSGB-160'
'RSGB-21/28-CW'
'RSGB-21/28-SSB'
'RSGB-80M-CC'
'RSGB-AFS-CW'
'RSGB-AFS-SSB'
'RSGB-CLUB-CALLS'
'RSGB-COMMONWEALTH'
'RSGB-IOTA'
'RSGB-LOW-POWER'
'RSGB-NFD'
'RSGB-ROPOCO'
'RSGB-SSB-FD'
'RUSSIAN-RTTY'
'SAC-CW'
'SAC-SSB'
'SARTG-RTTY'
'SC-QSO-PARTY'
'SCC-RTTY'
'SD-QSO-PARTY'
'SMP-AUG'
'SMP-MAY'
'SP-DX-RTTY'
'SPAR-WINTER-FD'
'SPDXContest'
'SPRING SPRINT'
'SR-MARATHON'
'STEW-PERRY'
'SUMMER SPRINT'
'TARA-GRID-DIP'
'TARA-RTTY'
'TARA-RUMBLE'
'TARA-SKIRMISH'
'TEN-RTTY'
'TMC-RTTY'
'TN-QSO-PARTY'
'TX-QSO-PARTY'
'UBA-DX-CW'
'UBA-DX-SSB'
'UK-DX-BPSK63'
'UK-DX-RTTY'
'UKR-CHAMP-RTTY'
'UKRAINIAN DX'
'UKSMG-6M-MARATHON'
'UKSMG-SUMMER-ES'
'URE-DX  (import-only)'
'US-COUNTIES-QSO'
'UT-QSO-PARTY'
'VA-QSO-PARTY'
'VENEZ-IND-DAY'
'VIRGINIA QSO PARTY (import-only)'
'VOLTA-RTTY'
'WA-QSO-PARTY'
'WI-QSO-PARTY'
'WIA-HARRY ANGEL'
'WIA-JMMFD'
'WIA-OCDX'
'WIA-REMEMBRANCE'
'WIA-ROSS HULL'
'WIA-TRANS TASMAN'
'WIA-VHF/UHF FD'
'WIA-VK SHIRES'
'WINTER SPRINT'
'WV-QSO-PARTY'
'WY-QSO-PARTY'
'XE-INTL-RTTY'
'YOHFDX'
'YUDXC'
)
ItemHeight = 0
MaxLength = 40
ParentShowHint = False
ShowHint = True

View File

@ -83,7 +83,6 @@ procedure TfrmContestFilter.FormShow(Sender: TObject);
begin
dmUtils.LoadFontSettings(self);
end;
procedure TfrmContestFilter.FormKeyUp(Sender: TObject; var Key: Word;