TRXControl updates

-uses new database column 'info' to show short description of selected memory.
  if no 'info' is entered for memory will show memory number and total count of memories as 'X of Y'.
 -Vfo buttons now visible. They change vfo, but there is no feedback of current vfo as Icom brand
  rigs do not support "Get_Vfo" command.
 -Checkbox 'pereferences/TRXcontor/Switch only between mode related memories' now works
 -Selection 'Open memory list' opens list of memories without editing buttons and without showModal.
  List can be kept open while logging qsos. Double click on list line changes rig to that frequency/mode.
 -Double click of line works also on Add/Modify memory list lines.
 -Corresponding help files updated.

Squashed commit of the following:

commit c46c9f799c47d7d89160e2386df9b285a90631b8
Author: OH1KH <oh1kh@sral.fi>
Date:   Fri Apr 19 12:24:34 2019 +0300

    Fix trxcontrol help

commit 00bde9d982698c083453e555a07ccefdd94fb587
Author: OH1KH <oh1kh@sral.fi>
Date:   Wed Apr 17 11:03:29 2019 +0300

    vfo buttons visible

commit e2e6b6e00a45625cf107cc0b6fce8234c5dd7267
Author: OH1KH <oh1kh@sral.fi>
Date:   Tue Apr 16 19:05:57 2019 +0300

    Removed some unconditional debug prints

commit 57b71577959b0a9d6425a0e76f0631b71259cb47
Author: OH1KH <oh1kh@sral.fi>
Date:   Tue Apr 16 11:12:24 2019 +0300

    restored changelog, removed readme.oh1kh'

commit 2287b6a1b426a7a222ed204e5e6bdc837efc51b4
Author: OH1KH <oh1kh@sral.fi>
Date:   Tue Apr 16 11:04:02 2019 +0300

    Fixed mode related settings usage + help files'

commit 871e260c684d292f66eb2d54602a9ae33923c94f
Merge: a1c0a17 29112ef
Author: OH1KH <oh1kh@sral.fi>
Date:   Mon Apr 15 11:44:08 2019 +0300

    Fixed merge conflict in dData.lfm

commit a1c0a1737b022043ac0c8b67d19cd96c3def4223
Merge: 65f3fec 9de2bfc
Author: OH1KH <oh1kh@sral.fi>
Date:   Mon Mar 18 20:49:36 2019 +0200

    Merge branch 'master' into feature_trxmonitor

commit 65f3fec81e347e54427ed090f648958ddf01ca15
Author: OH1KH <oh1kh@sral.fi>
Date:   Mon Mar 18 20:42:24 2019 +0200

    TRXfiles updated from devel

commit cbed44dfdd645105fb69fed57c791ec1368ea58d
Author: OH1KH <oh1kh@sral.fi>
Date:   Thu Apr 19 18:23:33 2018 +0300

    feature trxmonitor
This commit is contained in:
OH1KH 2019-04-20 09:09:40 +03:00
parent 29112ef2fe
commit 5e2ce005b4
15 changed files with 762 additions and 348 deletions

View File

@ -177,8 +177,10 @@
<div align=justify>
Checked bands are visible in both statistics appearing at the bottom of logging screen
(bands/modes of the actual logged station) and main DXCC, WAZ and ITU zones statistics.
It also affects the Challenge points at the bottom of the DXCC statistics.
</div>
It also affects the Challenge points at the bottom of the DXCC statistics.<br>
Pressing button <b>frequencies</b> band, and mode limits within bands, can be set.
</div><br>
<img src=img/h9b.png border=0><br><br>
<p align=center><img src=img/line.png></p>
<a name=ah7><h2><strong>TRX Control</strong></h2></a>
<img src=img/h10.png border=0><br><br>
@ -230,8 +232,9 @@ and
ALT+B (Mem up). These keys are used in N6TR clones to switch between bands.<br>
You can also switch between memory frequencies with TRXControl's <b>M up</b> and <b>M dwn</b> buttons and set rig frequencies
by double clicking rows in TRXControl's Add/Modify memory list.
<br><br>
<img src="img/radio_memory.png"><br><br>
</p><p>See also <a href="h30.html">Operation: TRXControl</a>
</p>
<img src="img/h121.png"><br><br>
<a name=ah8><h2><strong>Modes</strong></h2></a>
<img src=img/h11.png border=0><br><br>
Here you can set up the default bandwidth for any of the supported modes (CW - SSB - RTTY - AM - FM).

View File

@ -31,17 +31,32 @@
<p align=center><img src=img/line.png></p>
<h3 ><a name="m3"></a>TRX Control</h3>
<p><img src="img/h117.png" name="7" width="353" height="367">
<img src="img/h118.png" name="8" width="353" height="367">
<img src="img/h117.png" name="7" width="353" height="367">
<img src="img/h118.png" name="8" width="353" height="367">
</img>
<p>
TRX Control window Shows current frequency and buttons allow change of Band, mode, memory and rig.
<br><br>You can select rig vfo with buttons <b>A</b> and <b>B</b> but there is no feedback what vfo is currenty used as Icom brand rigs do not support "Get_vfo" command.
</p><p>If <b>M_up</b> or <b>M_dwn</b> are pressed or memory is selected by double click of memory list, the information text will show up to <b>Mem Info</b> field. If frequency is changed manually after that info text will disappear.
<br>If memory does not have info text (max 25chr) just <b>x of y</b> is displayed where x refers to memory order in Add/Modify memory list and y total amount of memories.
<b>None</b> (in red) indicates that there are no memory lines.
<br>With <b>P-on/off/stb</b> buttons current rig can be set ON, OFF or STANDBY (if it supports rigctld power commands).
<br>Default setting for power buttons is hidden. You can change it via dropdown menu "Preferences".
<br><br><b>M_up</b> and <b>M_dwn</b> buttons select next/previous entry from memory list. <b>M_Wri</b> adds entry to memory list from current rig frequency and mode and info field shows<b> "MW ok"</b>.
<br>
<br><br><b>NOTE!!!</b> <br>Check "pereferences/TRXcontor/Switch only between mode related memories"<br>Cqrlog TRXcontrol memories are categorized by mode (groups). CW, SSB(=AM+USB+LSB+FM), RTTY(=RTTY+DATA+PKTLSB+PKTUSB+PKTFM)[no mode selector for PKT* but you may "M wri" them anyway].
So do not wonder if you get smaller amount of memories than in your list when pressing <b>M_up</b> and <b>M_dwn</b> with "Show mode related" checked.
<br><br>
<img src="img/h122.png" name="9" width="393" height="367">
<img src="img/h121.png" name="10" width="373" height="367">
</img>
<br/>
TRX Control window Shows current frequency and buttons allow change of Band, mode, memory and rig.
</br><b>M_up</b> and <b>M_dwn</b> buttons select next/previous entry from memory list. <b>Buttons are current mode related</b>.
</br>Example: If your Mode is SSB, only memories with mode USB or LSB will take effect from M-up/M_dwn buttons.
</br><b>M_Wri</b> adds entry to memory list from current rig frequency and mode.
</br>
</br>With <b>P-on/off/stb</b> buttons current rig can be set ON, OFF or STANDBY (if it supports rigctld power commands).
</br>Default setting for power buttons is hidden. You can change it via dropdown menu "Preferences".
<br>You can set rig by double click of an memory row in <b>Open memory list</b>. Similar action happen also in <b>Add/Modify memories</b>. The differense is that you can keep
<b>Open memory list</b> open while loggeing qsos etc. Where as <b>Add/Modify memories</b>, when open, blocks other functionality.
<br>While <b>Add/Modify memories</b> is open you can use buttons in right frame. Texts of buttons are quite self explaining.
<br>Deleting a memory line, or all lines, do not have any further warning questions (Are you sure?). In case you deleted something wrong just close window with <b>Cancel</b>. No changes are recorded then.
<br>Closing <b>Add/Modify memories</b> is done with buttons <b>OK</b> or <b>Cancel</b>. Closing <b> Open memory list</b> window must be done using <b>x</b> at top right corner of window.
<br> <b> Open memory list</b> closes also if <b>Add/Modify memories</b> is opened. They can not be open at same time.
</p><p>See also <a href="h1.html#ah7">setting up TRXControl</a>
</p>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

BIN
help/img/h121.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
help/img/h122.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

View File

@ -2,10 +2,10 @@ object dmData: TdmData
OnCreate = DataModuleCreate
OnDestroy = DataModuleDestroy
OldCreateOrder = False
Height = 674
HorizontalOffset = 149
VerticalOffset = 254
Width = 1024
Height = 606
HorizontalOffset = 408
VerticalOffset = 52
Width = 822
PPI = 96
object dsrMain: TDataSource
DataSet = qCQRLOG

View File

@ -179,7 +179,7 @@ type
procedure UpgradeCommonDatabase(old_version : Integer);
procedure PrepareMysqlConfigFile;
procedure DeleteOldConfigFiles;
procedure GetCurrentFreqFromMem(var freq : Double; var mode : String; var bandwidth : Integer);
procedure GetCurrentFreqFromMem(var freq : Double; var mode : String; var bandwidth : Integer; var info : String);
public
MainCon : TSQLConnection;
BandMapCon : TSQLConnection;
@ -316,8 +316,8 @@ type
procedure RemoveLoTWUploadedFlag(id : Integer);
procedure StoreFreqMemories(grid : TStringGrid);
procedure LoadFreqMemories(grid : TStringGrid);
procedure GetPreviousFreqFromMem(var freq : Double; var mode : String; var bandwidth : Integer);
procedure GetNextFreqFromMem(var freq : Double; var mode : String; var bandwidth : Integer);
procedure GetPreviousFreqFromMem(var freq : Double; var mode : String; var bandwidth : Integer; var info : String);
procedure GetNextFreqFromMem(var freq : Double; var mode : String; var bandwidth : Integer; var info : String);
procedure OpenFreqMemories(mode : String);
procedure SaveBandChanges(band : String; BandBegin, BandEnd, BandCW, BandRTTY, BandSSB, RXOffset, TXOffset : Currency);
procedure GetRXTXOffset(Freq : Currency; var RXOffset,TXOffset : Currency);
@ -329,7 +329,7 @@ var
dmData : TdmData;
handle : THandle;
reg : TRegExpr;
MemNR : array of integer;
implementation
@ -1153,7 +1153,7 @@ begin
end;
tmrDBPing.Interval := CDB_PING_INT*1000;
tmrDBPing.Enabled := True
tmrDBPing.Enabled := True;
end;
procedure TdmData.DataModuleDestroy(Sender: TObject);
@ -3122,7 +3122,8 @@ begin
Q1.SQL.Add(' id int NOT NULL AUTO_INCREMENT PRIMARY KEY,');
Q1.SQL.Add(' freq numeric(10,4) NOT NULL,');
Q1.SQL.Add(' mode varchar(10) NOT NULL,');
Q1.SQL.Add(' bandwidth int NOT NULL');
Q1.SQL.Add(' bandwidth int NOT NULL,');
Q1.SQL.Add(' info varchar(25) NULL'); //null makes log backward compatible with old cqrlogs
Q1.SQL.Add(') COLLATE '+QuotedStr('utf8_bin')+';');
if fDebugLevel>=1 then Writeln(Q1.SQL.Text);
Q1.ExecSQL;
@ -3974,7 +3975,7 @@ end;
procedure TdmData.StoreFreqMemories(grid : TStringGrid);
const
C_INS = 'insert into freqmem (freq,mode,bandwidth) values (:freq,:mode,:bandwidth)';
C_INS = 'insert into freqmem (freq,mode,bandwidth,info) values (:freq,:mode,:bandwidth,:info)';
C_DEL = 'delete from freqmem';
var
i : Integer;
@ -3990,6 +3991,7 @@ begin
Q.Params[0].AsFloat := StrToFloat(grid.Cells[0,i]);
Q.Params[1].AsString := grid.Cells[1,i];
Q.Params[2].AsInteger := StrToInt(grid.Cells[2,i]);
Q.Params[3].AsString := grid.Cells[3,i];
Q.ExecSQL
end
except
@ -4005,7 +4007,7 @@ end;
procedure TdmData.LoadFreqMemories(grid : TStringGrid);
const
C_SEL = 'select freq,mode,bandwidth from freqmem order by id';
C_SEL = 'select freq,mode,bandwidth,info from freqmem order by id';
begin
try
grid.RowCount := 1;
@ -4018,6 +4020,7 @@ begin
grid.Cells[0,grid.RowCount-1] := FloatToStrF(Q.Fields[0].AsFloat,ffFixed,15,3);
grid.Cells[1,grid.RowCount-1] := Q.Fields[1].AsString;
grid.Cells[2,grid.RowCount-1] := IntToStr(Q.Fields[2].AsInteger);
grid.Cells[3,grid.RowCount-1] := Q.Fields[3].AsString;
Q.Next
end
finally
@ -4028,54 +4031,89 @@ end;
procedure TdmData.OpenFreqMemories(mode : String);
const
C_SEL = 'select id,freq,mode,bandwidth from freqmem';
C_SEL = 'select id,freq,mode,bandwidth,info from freqmem';
var
c : integer;
begin
qFreqMem.Close;
if trFreqMem.Active then
trFreqMem.Rollback;
if (mode='') then
qFreqMem.SQL.Text := C_SEL + ' order by id'
else begin
if ((mode='LSB') or (mode='USB') or (mode='FM') or (mode='AM')) then
begin
qFreqMem.SQL.Text := C_SEL + ' where (mode = ' + QuotedStr('LSB') +') or ' +
'(mode = ' + QuotedStr('USB') + ') or (mode = ' + QuotedStr('FM') + ') or ' +
'(mode = ' + QuotedStr('AM')+ ') order by id'
end
else
qFreqMem.SQL.Text := C_SEL + ' where (mode = ' + QuotedStr(mode) +') order by id'
end;
if not cqrini.ReadBool('TRX','MemModeRelated',False) then mode:=''; //use related settings!!
if (mode='') then qFreqMem.SQL.Text := C_SEL + ' order by id'
else
begin
case mode of
'LSB','USB','FM','AM' :qFreqMem.SQL.Text := C_SEL + ' where (mode = ' + QuotedStr('LSB') +') or ' +
'(mode = ' + QuotedStr('USB') + ') or (mode = ' + QuotedStr('FM') + ') or ' +
'(mode = ' + QuotedStr('AM')+ ') order by id';
'RTTY','PKTLSB','PKTUSB',
'PKTFM','DATA' :qFreqMem.SQL.Text := C_SEL + ' where (mode = ' + QuotedStr('RTTY') +') or ' +
'(mode = ' + QuotedStr('PKTLSB') + ') or (mode = ' + QuotedStr('PKTUSB') + ') or ' +
'(mode = ' + QuotedStr('PKTFM') + ') or (mode = ' + QuotedStr('DATA')+ ') order by id';
else
qFreqMem.SQL.Text := C_SEL + ' where (mode = ' + QuotedStr(mode) +') order by id'
end;
end;
if fDebugLevel>=1 then Writeln('FreqmemSql:',qFreqMem.SQL.Text);
trFreqMem.StartTransaction;
qFreqMem.Open;
qFreqMem.First;
qFreqMem.prior;
fFirstMemId := qFreqMem.Fields[0].AsInteger;
c:=-1;
setLength(MemNR,qFreqMem.RecordCount+1);
repeat
begin
inc(c);
MemNR[c]:= qFreqMem.Fields[0].AsInteger;
if fDebugLevel>=1 then Writeln('FreqmemNR:',c,'=',MemNR[c]);
qFreqMem.Next;
end;
until qFreqMem.Eof;
qFreqMem.Last;
fLastMemId := qFreqMem.Fields[0].AsInteger;
qFreqMem.First;
fFirstMemId := qFreqMem.Fields[0].AsInteger;
if fDebugLevel>=1 then Writeln('FreqmemFirst:',fFirstMemId,' FreqmemLast:',fLastMemId);
end;
procedure TdmData.GetCurrentFreqFromMem(var freq : Double; var mode : String; var bandwidth : Integer);
procedure TdmData.GetCurrentFreqFromMem(var freq : Double; var mode : String; var bandwidth : Integer; var info : String);
var
c: integer;
begin
if (qFreqMem.RecordCount > 0) then
if qFreqMem.Active and (qFreqMem.RecordCount > 0) then
begin
freq := qFreqMem.Fields[1].AsFloat;
mode := qFreqMem.Fields[2].AsString;
bandwidth := qFreqMem.Fields[3].AsInteger
bandwidth := qFreqMem.Fields[3].AsInteger;
info := qFreqMem.Fields[4].AsString;
frmTRXControl.edtMemNr.Font.Color:= clDefault; // May be red if previous was "None"
if info='' then
begin
for c:=0 to qFreqMem.RecordCount do
if MemNR[c]= qFreqMem.Fields[0].AsInteger then break;
frmTRXControl.edtMemNr.Text := IntToStr(c+1)+' of '+ IntToStr(qFreqMem.RecordCount );
end
else frmTRXControl.edtMemNr.Text := info;
frmTRXControl.infosetstage :=1;
end
else begin
freq := 0;
mode := 'CW';
bandwidth := 0
bandwidth := 0;
frmTRXControl.edtMemNr.Font.Color:= clRed;
frmTRXControl.edtMemNr.Text := 'None';
frmTRXControl.infosetstage :=1;
end;
if fDebugLevel>=1 then Writeln('Freq:',freq,' mode:',mode,' bandwidth:',bandwidth);
end;
procedure TdmData.GetPreviousFreqFromMem(var freq : Double; var mode : String; var bandwidth : Integer);
procedure TdmData.GetPreviousFreqFromMem(var freq : Double; var mode : String; var bandwidth : Integer; var info : String);
begin
if not qFreqMem.Active then
begin
@ -4085,16 +4123,17 @@ begin
else begin
//if qFreqMem.Bof then doesn't work because when it's on the first record, it has to call Prior again to be sure that
//it's really first - that caused user has to click twice to get on the end of the table
if fDebugLevel>=1 then writeln('-----------UP---', qFreqMem.Fields[0].AsInteger,' ', fFirstMemId);
if (fFirstMemId = qFreqMem.Fields[0].AsInteger) then
qFreqMem.Last
else
qFreqMem.Prior
end;
GetCurrentFreqFromMem(freq,mode,bandwidth)
GetCurrentFreqFromMem(freq,mode,bandwidth,info)
end;
procedure TdmData.GetNextFreqFromMem(var freq : Double; var mode : String; var bandwidth : Integer);
procedure TdmData.GetNextFreqFromMem(var freq : Double; var mode : String; var bandwidth : Integer; var info : String);
begin
if not qFreqMem.Active then
begin
@ -4103,12 +4142,13 @@ begin
end
else begin
//if qFreqMem.Eof then the same problem like with Bof()
if fDebugLevel>=1 then writeln('-----------DN---', qFreqMem.Fields[0].AsInteger,' ', fLastMemId);
if (fLastMemId = qFreqMem.Fields[0].AsInteger) then
qFreqMem.First
else
qFreqMem.Next
end;
GetCurrentFreqFromMem(freq,mode,bandwidth)
GetCurrentFreqFromMem(freq,mode,bandwidth,info)
end;

View File

@ -1,85 +1,149 @@
object frmAddRadioMemory: TfrmAddRadioMemory
Left = 420
Height = 204
Top = 260
Left = 32
Height = 222
Top = 235
Width = 308
BorderStyle = bsDialog
Caption = 'New memory'
ClientHeight = 204
ClientHeight = 222
ClientWidth = 308
OnCreate = FormCreate
OnShow = FormShow
Position = poOwnerFormCenter
LCLVersion = '1.4.4.0'
object Label1: TLabel
Left = 16
LCLVersion = '1.8.4.0'
object lblFreq: TLabel
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = Owner
Left = 12
Height = 17
Top = 16
Top = 2
Width = 112
BorderSpacing.Left = 12
BorderSpacing.Top = 2
Caption = 'Frequency in kHz'
ParentColor = False
end
object edtFreq: TEdit
Left = 16
Height = 27
Top = 40
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = lblFreq
AnchorSideTop.Side = asrBottom
Left = 12
Height = 34
Top = 19
Width = 192
BorderSpacing.Left = 12
TabOrder = 0
Text = '0'
end
object Label2: TLabel
Left = 16
object lblMode: TLabel
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = edtFreq
AnchorSideTop.Side = asrBottom
Left = 12
Height = 17
Top = 80
Width = 39
Top = 55
Width = 36
BorderSpacing.Left = 12
BorderSpacing.Top = 2
Caption = 'Mode'
ParentColor = False
end
object cmbMode: TComboBox
Left = 16
Height = 29
Top = 104
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = lblMode
AnchorSideTop.Side = asrBottom
Left = 12
Height = 34
Top = 72
Width = 192
AutoComplete = True
AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchAscending]
BorderSpacing.Left = 12
CharCase = ecUppercase
ItemHeight = 0
TabOrder = 1
Text = 'CMBMODE'
end
object Label3: TLabel
Left = 16
object lblWidth: TLabel
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = cmbMode
AnchorSideTop.Side = asrBottom
Left = 12
Height = 17
Top = 144
Width = 102
Top = 108
Width = 100
BorderSpacing.Left = 12
BorderSpacing.Top = 2
Caption = 'Bandwidth (Hz)'
ParentColor = False
end
object edtWidth: TEdit
Left = 16
Height = 27
Top = 172
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = lblWidth
AnchorSideTop.Side = asrBottom
Left = 12
Height = 34
Top = 125
Width = 112
BorderSpacing.Left = 12
TabOrder = 2
Text = '0'
end
object Button1: TButton
Left = 224
AnchorSideTop.Control = Owner
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 221
Height = 25
Top = 16
Top = 6
Width = 75
Anchors = [akTop, akRight]
BorderSpacing.Top = 6
BorderSpacing.Right = 12
Caption = 'OK'
OnClick = Button1Click
TabOrder = 3
end
object Button2: TButton
Left = 224
AnchorSideTop.Control = Button1
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 221
Height = 25
Top = 48
Top = 37
Width = 75
Anchors = [akTop, akRight]
BorderSpacing.Top = 6
BorderSpacing.Right = 12
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 4
end
object lblInfo: TLabel
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = edtWidth
AnchorSideTop.Side = asrBottom
Left = 12
Height = 17
Top = 161
Width = 25
BorderSpacing.Left = 12
BorderSpacing.Top = 2
Caption = 'Info'
ParentColor = False
end
object edtInfo: TEdit
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = lblInfo
AnchorSideTop.Side = asrBottom
Left = 12
Height = 34
Top = 178
Width = 284
BorderSpacing.Left = 12
MaxLength = 25
TabOrder = 5
end
end

View File

@ -16,11 +16,13 @@ type
Button1: TButton;
Button2: TButton;
cmbMode: TComboBox;
edtInfo: TEdit;
edtFreq: TEdit;
edtWidth: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
lblFreq: TLabel;
lblMode: TLabel;
lblWidth: TLabel;
lblInfo: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender : TObject);
procedure FormShow(Sender: TObject);

View File

@ -1,105 +1,157 @@
object frmRadioMemories: TfrmRadioMemories
Left = 476
Height = 510
Top = 232
Width = 482
Left = 120
Height = 415
Top = 125
Width = 578
Caption = 'Memories'
ClientHeight = 510
ClientWidth = 482
ClientHeight = 415
ClientWidth = 578
OnClose = FormClose
OnShow = FormShow
LCLVersion = '1.4.4.0'
LCLVersion = '1.8.4.0'
object sgrdMem: TStringGrid
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = Owner
Left = 0
Height = 510
Height = 415
Top = 0
Width = 379
Width = 478
Align = alClient
ColCount = 3
ColCount = 4
Columns = <
item
Title.Caption = 'Freq (kHz)'
Width = 81
end
item
Title.Caption = 'Mode'
Width = 74
end
item
Title.Caption = 'Bandwidth (Hz)'
Width = 109
end
item
Title.Caption = 'Info'
Width = 211
end>
FixedCols = 0
RowCount = 1
TabOrder = 0
OnCompareCells = sgrdMemCompareCells
OnDblClick = sgrdMemDblClick
OnSelectCell = sgrdMemSelectCell
ColWidths = (
132
104
115
)
Cells = (
3
0
0
'Freq (kHz)'
1
0
'Mode'
2
0
'Bandwidth (Hz)'
81
74
109
211
)
end
object Panel1: TPanel
Left = 379
Height = 510
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = Owner
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = sgrdMem
Left = 478
Height = 415
Top = 0
Width = 103
Width = 100
Align = alRight
Anchors = [akTop, akRight]
BevelOuter = bvNone
ClientHeight = 510
ClientWidth = 103
ClientHeight = 415
ClientWidth = 100
TabOrder = 1
object Button1: TButton
Left = 16
object btnCancel: TButton
AnchorSideLeft.Control = btnOK
AnchorSideTop.Control = btnOK
AnchorSideTop.Side = asrBottom
Left = 13
Height = 25
Top = 48
Top = 43
Width = 75
BorderSpacing.Top = 6
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 0
end
object Button2: TButton
Left = 16
object btnAdd: TButton
AnchorSideLeft.Control = btnOK
AnchorSideTop.Control = btnCancel
AnchorSideTop.Side = asrBottom
Left = 13
Height = 25
Top = 128
Top = 110
Width = 75
Action = acAdd
BorderSpacing.Top = 42
TabOrder = 1
end
object Button3: TButton
Left = 16
object btnEdit: TButton
AnchorSideLeft.Control = btnOK
AnchorSideTop.Control = btnAdd
AnchorSideTop.Side = asrBottom
Left = 13
Height = 25
Top = 160
Top = 141
Width = 75
Action = acEdit
BorderSpacing.Top = 6
TabOrder = 2
end
object Button4: TButton
Left = 16
object btnDelete: TButton
AnchorSideLeft.Control = btnOK
AnchorSideTop.Control = btnEdit
AnchorSideTop.Side = asrBottom
Left = 13
Height = 25
Top = 200
Top = 172
Width = 75
Action = acDelete
BorderSpacing.Top = 6
TabOrder = 3
end
object btnFunction: TButton
Left = 16
object btnMore: TButton
AnchorSideLeft.Control = btnOK
AnchorSideTop.Control = btnDelAll
AnchorSideTop.Side = asrBottom
Left = 13
Height = 25
Top = 254
Top = 258
Width = 75
BorderSpacing.Top = 30
Caption = 'More...'
OnClick = btnFunctionClick
OnClick = btnMoreClick
TabOrder = 4
end
object btnOK: TButton
Left = 16
AnchorSideLeft.Control = Panel1
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = Panel1
Left = 13
Height = 25
Top = 16
Top = 12
Width = 75
BorderSpacing.Top = 12
Caption = 'OK'
ModalResult = 1
TabOrder = 5
end
object btnDelAll: TButton
AnchorSideLeft.Control = btnOK
AnchorSideTop.Control = btnDelete
AnchorSideTop.Side = asrBottom
Left = 13
Height = 25
Top = 203
Width = 75
BorderSpacing.Top = 6
Caption = 'Delete All'
OnClick = btnDelAllClick
TabOrder = 6
end
end
object acMem: TActionList
left = 24

View File

@ -22,12 +22,13 @@ type
acSortByFreq: TAction;
acUp: TAction;
acMem: TActionList;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
btnFunction: TButton;
btnCancel: TButton;
btnAdd: TButton;
btnEdit: TButton;
btnDelete: TButton;
btnMore: TButton;
btnOK: TButton;
btnDelAll: TButton;
MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
MenuItem3: TMenuItem;
@ -43,32 +44,42 @@ type
procedure acExportExecute(Sender: TObject);
procedure acImportExecute(Sender: TObject);
procedure acSortByFreqExecute(Sender: TObject);
procedure btnFunctionClick(Sender: TObject);
procedure btnDelAllClick(Sender: TObject);
procedure btnMoreClick(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormShow(Sender: TObject);
procedure sgrdMemCompareCells(Sender: TObject; ACol, ARow, BCol,
BRow: Integer; var Result: integer);
procedure sgrdMemDblClick(Sender: TObject);
procedure sgrdMemSelectCell(Sender: TObject; aCol, aRow: Integer;
var CanSelect: Boolean);
private
procedure AddToGrid(freq,mode,bandwidth : String);
procedure AddToGrid(freq,mode,bandwidth,info : String);
public
{ public declarations }
ShowMode : Boolean;
end;
var
frmRadioMemories: TfrmRadioMemories;
dcRow : integer;
dcRowOk : boolean ;
implementation
{$R *.lfm}
{ TfrmRadioMemories }
uses dUtils, fAddRadioMemory;
uses dUtils, fAddRadioMemory, fTRXControl;
procedure TfrmRadioMemories.AddToGrid(freq,mode,bandwidth : String);
procedure TfrmRadioMemories.AddToGrid(freq,mode,bandwidth,info : String);
begin
sgrdMem.RowCount := sgrdMem.RowCount + 1;
sgrdMem.Cells[0,sgrdMem.RowCount-1] := FloatToStrF(StrToFloat(freq),ffFixed,15,3);
sgrdMem.Cells[1,sgrdMem.RowCount-1] := mode;
sgrdMem.Cells[2,sgrdMem.RowCount-1] := bandwidth
sgrdMem.Cells[2,sgrdMem.RowCount-1] := bandwidth;
sgrdMem.Cells[3,sgrdMem.RowCount-1] := info;
end;
procedure TfrmRadioMemories.acAddExecute(Sender: TObject);
@ -77,7 +88,7 @@ begin
try
if frmAddRadioMemory.ShowModal = mrOK then
begin
AddToGrid(frmAddRadioMemory.edtFreq.Text,frmAddRadioMemory.cmbMode.Text,frmAddRadioMemory.edtWidth.Text)
AddToGrid(frmAddRadioMemory.edtFreq.Text,frmAddRadioMemory.cmbMode.Text,frmAddRadioMemory.edtWidth.Text,frmAddRadioMemory.edtInfo.Text)
end
finally
FreeAndNil(frmAddRadioMemory)
@ -92,6 +103,18 @@ begin
sgrdMem.DeleteRow(sgrdMem.Row)
end;
procedure TfrmRadioMemories.btnDelAllClick(Sender: TObject);
begin
if (sgrdMem.RowCount < 2) then
Application.MessageBox('There is nothing to delete','Info...',mb_ok+mb_IconInformation)
else
begin
repeat
sgrdMem.DeleteRow(sgrdMem.Row)
until (sgrdMem.RowCount < 2) ;
end;
end;
procedure TfrmRadioMemories.acEditExecute(Sender: TObject);
begin
frmAddRadioMemory := TfrmAddRadioMemory.Create(frmRadioMemories);
@ -99,11 +122,13 @@ begin
frmAddRadioMemory.edtFreq.Text := sgrdMem.Cells[0,sgrdMem.Row];
frmAddRadioMemory.cmbMode.Text := sgrdMem.Cells[1,sgrdMem.Row];
frmAddRadioMemory.edtWidth.Text := sgrdMem.Cells[2,sgrdMem.Row];
frmAddRadioMemory.edtInfo.Text := sgrdMem.Cells[3,sgrdMem.Row];
if frmAddRadioMemory.ShowModal = mrOK then
begin
sgrdMem.Cells[0,sgrdMem.Row] := FloatToStrF(StrToFloat(frmAddRadioMemory.edtFreq.Text),ffFixed,15,6);
sgrdMem.Cells[1,sgrdMem.Row] := frmAddRadioMemory.cmbMode.Text;
sgrdMem.Cells[2,sgrdMem.Row] := frmAddRadioMemory.edtWidth.Text
sgrdMem.Cells[2,sgrdMem.Row] := frmAddRadioMemory.edtWidth.Text;
sgrdMem.Cells[3,sgrdMem.Row] := frmAddRadioMemory.edtInfo.Text
end
finally
FreeAndNil(frmAddRadioMemory)
@ -120,7 +145,7 @@ begin
l := TStringList.Create;
try
for i:=1 to sgrdMem.RowCount-1 do
l.Add(sgrdMem.Cells[0,i]+';'+sgrdMem.Cells[1,i]+';'+sgrdMem.Cells[2,i]);
l.Add(sgrdMem.Cells[0,i]+';'+sgrdMem.Cells[1,i]+';'+sgrdMem.Cells[2,i]+';'+sgrdMem.Cells[3,i]);
l.SaveToFile(dlgSave.FileName);
ShowMessage('File saved to '+dlgSave.FileName)
@ -133,13 +158,14 @@ end;
procedure TfrmRadioMemories.acImportExecute(Sender: TObject);
const
C_ERR = 'File has wrong format at line %d'+LineEnding+LineEnding+
'Right format is freq(in kHz);mode;bandwidth' +LineEnding+LineEnding+ 'e.g.'+LineEnding+LineEnding+
'10120.0;CW;300';
'Right format is freq(in kHz);mode;bandwidth,info' +LineEnding+LineEnding+ 'e.g.'+LineEnding+LineEnding+
'10120.0;CW;300.text';
type TFreq = record
freq : String[20];
mode : String[10];
width : String[8];
info : String[25];
end;
var
@ -163,7 +189,7 @@ begin
inc(i);
a := dmUtils.Explode(';',l);
if (Length(a)<>3) then
if (Length(a)<>4) then
begin
Application.MessageBox(PChar(Format(C_ERR,[i])),'Error...',mb_OK+mb_IconError);
exit
@ -190,12 +216,13 @@ begin
SetLength(d,i);
d[i-1].freq := a[0];
d[i-1].mode := a[1];
d[i-1].width := a[2]
d[i-1].width := a[2];
d[i-1].info := a[3];
end;
for i:= 0 to Length(d)-1 do
begin
AddToGrid(d[i].freq, d[i].mode, d[i].width)
AddToGrid(d[i].freq, d[i].mode, d[i].width,d[i].info)
end;
ShowMessage('File has been imported')
@ -210,25 +237,26 @@ begin
sgrdMem.SortColRow(true, 0, sgrdMem.FixedRows, sgrdMem.RowCount-1)
end;
procedure TfrmRadioMemories.btnFunctionClick(Sender: TObject);
procedure TfrmRadioMemories.btnMoreClick(Sender: TObject);
var
p : TPoint;
begin
p.x := 10;
p.y := 10;
p := btnFunction.ClientToScreen(p);
p := btnMore.ClientToScreen(p);
popMem.PopUp(p.x, p.y)
end;
procedure TfrmRadioMemories.FormClose(Sender: TObject;
var CloseAction: TCloseAction);
begin
dmUtils.SaveWindowPos(frmRadioMemories)
dmUtils.SaveWindowPos(frmRadioMemories);
end;
procedure TfrmRadioMemories.FormShow(Sender: TObject);
begin
dmUtils.LoadWindowPos(frmRadioMemories)
dmUtils.LoadWindowPos(frmRadioMemories);
ShowMode := False;
end;
procedure TfrmRadioMemories.sgrdMemCompareCells(Sender: TObject; ACol, ARow,
@ -239,5 +267,40 @@ begin
result := -result
end;
procedure TfrmRadioMemories.sgrdMemDblClick(Sender: TObject);
var //set rig frequeny from memory table with doubleclick
freq :Double;
mode :String;
bandwidth :Integer;
info :String;
begin
if dcRowOk then
begin
freq := StrToFloat(sgrdMem.Cells[0,dcRow]);
mode := sgrdMem.Cells[1,dcRow];
bandwidth := StrToInt(sgrdMem.Cells[2,dcRow]);
info := sgrdMem.Cells[3,dcRow];
if freq > 0 then
Begin
frmTRXControl.SetFreqModeBandWidth(freq,mode,bandwidth);
if (dcRow = sgrdMem.RowCount-1) then
frmTRXControl.edtMemNr.Font.Color:= clFuchsia
else
frmTRXControl.edtMemNr.Font.Color:= clDefault;
if info='' then frmTRXControl.edtMemNr.Text := 'M '+IntToStr(dcRow+1)
else frmTRXControl.edtMemNr.Text := info;
frmTRXControl.infosetstage :=1;
end;
dcRowOk :=false; //we handeld this one
end;
end;
procedure TfrmRadioMemories.sgrdMemSelectCell(Sender: TObject; aCol,
aRow: Integer; var CanSelect: Boolean);
begin
dcRow:=aRow; //remember clicked row and handle it with ondblclick
dcRowOk :=true;
end;
end.

View File

@ -1,12 +1,12 @@
object frmTRXControl: TfrmTRXControl
Left = 804
Height = 277
Top = 52
Width = 307
Left = 877
Height = 321
Top = 3
Width = 284
Anchors = []
Caption = 'TRX control'
ClientHeight = 254
ClientWidth = 307
ClientHeight = 296
ClientWidth = 284
Icon.Data = {
BE1000000000010001002020000001002000A810000016000000280000002000
0000400000000100200000000000001000006400000064000000000000000000
@ -153,158 +153,159 @@ object frmTRXControl: TfrmTRXControl
OnKeyDown = FormKeyDown
OnKeyUp = FormKeyUp
OnShow = FormShow
LCLVersion = '1.8.2.0'
LCLVersion = '2.0.0.4'
object gbMode: TGroupBox
Left = 240
Height = 254
Top = 0
Width = 67
Align = alRight
AnchorSideLeft.Control = gbVfo
AnchorSideTop.Control = gbVfo
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Side = asrBottom
Left = 205
Height = 243
Top = 48
Width = 78
Anchors = [akTop, akRight]
BorderSpacing.Right = 1
Caption = ' Mode '
ClientHeight = 238
ClientWidth = 65
ClientHeight = 225
ClientWidth = 76
TabOrder = 0
object btnCW: TButton
AnchorSideLeft.Control = gbMode
AnchorSideTop.Control = gbMode
Left = 6
Left = 13
Height = 25
Top = 1
Top = 0
Width = 51
BorderSpacing.Left = 6
BorderSpacing.Top = 1
BorderSpacing.Left = 13
Caption = 'CW'
OnClick = btnCWClick
TabOrder = 0
end
object btnSSB: TButton
AnchorSideLeft.Control = gbMode
AnchorSideLeft.Control = btnCW
AnchorSideTop.Control = btnCW
AnchorSideTop.Side = asrBottom
Left = 6
Left = 13
Height = 25
Top = 27
Top = 25
Width = 51
BorderSpacing.Left = 6
BorderSpacing.Top = 1
Caption = 'SSB'
OnClick = btnSSBClick
TabOrder = 1
end
object btnRTTY: TButton
AnchorSideLeft.Control = gbMode
AnchorSideLeft.Control = btnCW
AnchorSideTop.Control = btnSSB
AnchorSideTop.Side = asrBottom
Left = 6
Left = 13
Height = 25
Top = 53
Top = 50
Width = 51
BorderSpacing.Left = 6
BorderSpacing.Top = 1
Caption = 'RTTY'
OnClick = btnRTTYClick
TabOrder = 2
end
object btnAM: TButton
AnchorSideLeft.Control = gbMode
AnchorSideLeft.Control = btnCW
AnchorSideTop.Control = btnRTTY
AnchorSideTop.Side = asrBottom
Left = 6
Left = 13
Height = 25
Top = 79
Top = 75
Width = 51
BorderSpacing.Left = 6
BorderSpacing.Top = 1
Caption = 'AM'
OnClick = btnAMClick
TabOrder = 3
end
object btnFM: TButton
AnchorSideLeft.Control = gbMode
AnchorSideLeft.Control = btnCW
AnchorSideTop.Control = btnAM
AnchorSideTop.Side = asrBottom
Left = 6
Left = 13
Height = 25
Top = 105
Top = 100
Width = 51
BorderSpacing.Left = 6
BorderSpacing.Top = 1
Caption = 'FM'
OnClick = btnFMClick
TabOrder = 4
end
object btnMemUp: TButton
AnchorSideLeft.Control = gbMode
AnchorSideLeft.Control = btnCW
AnchorSideTop.Control = btnFM
AnchorSideTop.Side = asrBottom
AnchorSideRight.Side = asrBottom
Left = 6
Left = 13
Height = 25
Top = 106
Top = 125
Width = 51
BorderSpacing.Left = 6
BorderSpacing.Top = 1
BorderSpacing.Right = 6
Caption = 'M up'
OnClick = btnMemUpClick
TabOrder = 5
end
object btnMemDwn: TButton
AnchorSideLeft.Control = gbMode
AnchorSideLeft.Control = btnCW
AnchorSideTop.Control = btnMemUp
AnchorSideTop.Side = asrBottom
AnchorSideBottom.Side = asrBottom
Left = 6
Left = 13
Height = 25
Top = 132
Top = 150
Width = 51
BorderSpacing.Left = 6
BorderSpacing.Top = 1
Caption = 'M dwn'
OnClick = btnMemDwnClick
TabOrder = 6
end
object btnMemWri: TButton
AnchorSideLeft.Control = gbMode
AnchorSideLeft.Control = btnCW
AnchorSideTop.Control = btnMemDwn
AnchorSideTop.Side = asrBottom
AnchorSideBottom.Side = asrBottom
Left = 6
Left = 13
Height = 25
Top = 158
Top = 182
Width = 51
BorderSpacing.Left = 6
BorderSpacing.Top = 1
BorderSpacing.Top = 7
Caption = 'M Wri'
Font.Color = clRed
OnClick = btnMemWriClick
ParentFont = False
TabOrder = 7
end
end
object pnlMain: TPanel
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = Owner
Left = 0
Height = 254
Height = 296
Top = 0
Width = 240
Align = alClient
Width = 200
Align = alLeft
BevelOuter = bvNone
Caption = 'pnlMain'
ClientHeight = 254
ClientWidth = 240
ClientHeight = 296
ClientWidth = 200
TabOrder = 1
object gbVfo: TGroupBox
Left = 0
Height = 72
object gbFreq: TGroupBox
AnchorSideLeft.Control = pnlMain
AnchorSideTop.Control = pnlMain
Left = 1
Height = 59
Top = 0
Width = 240
Width = 199
Align = alTop
BorderSpacing.Left = 1
Caption = ' Freq '
ClientHeight = 56
ClientWidth = 238
ClientHeight = 41
ClientWidth = 197
TabOrder = 0
object lblFreq: TLabel
AnchorSideTop.Control = gbVfo
AnchorSideRight.Control = gbVfo
AnchorSideTop.Control = gbFreq
AnchorSideRight.Control = gbFreq
AnchorSideRight.Side = asrBottom
Left = -3
Left = -44
Height = 49
Top = 1
Width = 235
@ -320,43 +321,21 @@ object frmTRXControl: TfrmTRXControl
ParentColor = False
ParentFont = False
end
object btnVFOA: TButton
AnchorSideLeft.Control = gbVfo
AnchorSideTop.Control = gbVfo
Left = 6
Height = 25
Top = 1
Width = 32
BorderSpacing.Left = 6
BorderSpacing.Top = 1
Caption = 'A'
TabOrder = 0
Visible = False
end
object btnVFOB: TButton
AnchorSideLeft.Control = gbVfo
AnchorSideTop.Control = btnVFOA
AnchorSideTop.Side = asrBottom
Left = 6
Height = 25
Top = 27
Width = 32
BorderSpacing.Left = 6
BorderSpacing.Top = 1
Caption = 'B'
TabOrder = 1
Visible = False
end
end
object gbBand: TGroupBox
Left = 0
Height = 156
Top = 72
Width = 240
AnchorSideLeft.Control = pnlMain
AnchorSideTop.Control = gbInfo
Left = 1
Height = 159
Top = 111
Width = 199
Align = alClient
Anchors = [akTop, akLeft, akBottom]
BorderSpacing.Left = 1
BorderSpacing.Top = 3
Caption = ' Band '
ClientHeight = 140
ClientWidth = 238
ClientHeight = 141
ClientWidth = 197
TabOrder = 1
object btn160m: TButton
AnchorSideLeft.Control = gbBand
@ -422,7 +401,7 @@ object frmTRXControl: TfrmTRXControl
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = btn15m
AnchorSideTop.Side = asrBottom
Left = 91
Left = 70
Height = 25
Top = 84
Width = 56
@ -437,7 +416,7 @@ object frmTRXControl: TfrmTRXControl
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = btn17m
AnchorSideTop.Side = asrBottom
Left = 91
Left = 70
Height = 25
Top = 58
Width = 56
@ -452,7 +431,7 @@ object frmTRXControl: TfrmTRXControl
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = btn20m
AnchorSideTop.Side = asrBottom
Left = 91
Left = 70
Height = 25
Top = 32
Width = 56
@ -466,7 +445,7 @@ object frmTRXControl: TfrmTRXControl
AnchorSideLeft.Control = gbBand
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = gbBand
Left = 91
Left = 70
Height = 25
Top = 6
Width = 56
@ -480,7 +459,7 @@ object frmTRXControl: TfrmTRXControl
AnchorSideTop.Control = gbBand
AnchorSideRight.Control = gbBand
AnchorSideRight.Side = asrBottom
Left = 176
Left = 135
Height = 25
Top = 6
Width = 56
@ -497,7 +476,7 @@ object frmTRXControl: TfrmTRXControl
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = gbBand
AnchorSideRight.Side = asrBottom
Left = 176
Left = 135
Height = 25
Top = 32
Width = 56
@ -514,7 +493,7 @@ object frmTRXControl: TfrmTRXControl
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = gbBand
AnchorSideRight.Side = asrBottom
Left = 176
Left = 135
Height = 25
Top = 84
Width = 56
@ -531,7 +510,7 @@ object frmTRXControl: TfrmTRXControl
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = gbBand
AnchorSideRight.Side = asrBottom
Left = 176
Left = 135
Height = 25
Top = 58
Width = 56
@ -544,17 +523,19 @@ object frmTRXControl: TfrmTRXControl
TabOrder = 11
end
object pnlPower: TPanel
AnchorSideTop.Side = asrBottom
AnchorSideLeft.Control = gbBand
AnchorSideTop.Side = asrCenter
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = gbBand
AnchorSideBottom.Side = asrBottom
Left = 0
Height = 30
Top = 110
Width = 238
Align = alBottom
Top = 111
Width = 197
Anchors = [akLeft, akRight, akBottom]
BevelOuter = bvNone
ClientHeight = 30
ClientWidth = 238
ClientWidth = 197
TabOrder = 12
Visible = False
object btPon: TButton
@ -573,7 +554,7 @@ object frmTRXControl: TfrmTRXControl
AnchorSideLeft.Control = pnlPower
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = pnlPower
Left = 91
Left = 70
Height = 25
Top = 0
Width = 56
@ -586,7 +567,7 @@ object frmTRXControl: TfrmTRXControl
AnchorSideTop.Control = pnlPower
AnchorSideRight.Control = pnlPower
AnchorSideRight.Side = asrBottom
Left = 176
Left = 135
Height = 25
Top = 0
Width = 56
@ -599,14 +580,19 @@ object frmTRXControl: TfrmTRXControl
end
end
object pnlRig: TPanel
AnchorSideLeft.Control = pnlMain
AnchorSideRight.Control = gbInfo
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = pnlMain
AnchorSideBottom.Side = asrBottom
Left = 0
Height = 26
Top = 228
Width = 240
Top = 270
Width = 200
Align = alBottom
BevelOuter = bvNone
ClientHeight = 26
ClientWidth = 240
ClientWidth = 200
ParentBidiMode = False
TabOrder = 2
object rbRadio1: TRadioButton
@ -629,7 +615,7 @@ object frmTRXControl: TfrmTRXControl
AnchorSideTop.Control = pnlRig
AnchorSideRight.Control = pnlRig
AnchorSideRight.Side = asrBottom
Left = 176
Left = 136
Height = 23
Top = 1
Width = 57
@ -643,36 +629,116 @@ object frmTRXControl: TfrmTRXControl
TabOrder = 1
end
end
object gbInfo: TGroupBox
AnchorSideLeft.Control = pnlMain
AnchorSideTop.Control = gbFreq
Left = 1
Height = 46
Top = 62
Width = 199
Align = alTop
BorderSpacing.Left = 1
BorderSpacing.Top = 3
Caption = 'Mem Info'
ClientHeight = 28
ClientWidth = 197
TabOrder = 3
object edtMemNr: TEdit
AnchorSideLeft.Control = gbInfo
AnchorSideTop.Control = gbInfo
AnchorSideRight.Control = gbInfo
AnchorSideRight.Side = asrBottom
Cursor = crNone
Left = 6
Height = 27
Top = 0
Width = 185
Anchors = [akTop, akLeft, akRight]
AutoSize = False
AutoSelect = False
BorderSpacing.Left = 6
BorderSpacing.Right = 6
DragCursor = crNone
ParentFont = False
ReadOnly = True
TabOrder = 0
end
end
end
object gbVfo: TGroupBox
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = pnlMain
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 205
Height = 48
Top = 0
Width = 78
Anchors = [akTop, akRight]
BorderSpacing.Right = 1
Caption = 'Vfo'
ClientHeight = 30
ClientWidth = 76
TabOrder = 2
object btnVFOA: TButton
AnchorSideLeft.Control = gbVfo
AnchorSideTop.Control = gbVfo
Left = 13
Height = 25
Top = 0
Width = 25
BorderSpacing.Left = 13
Caption = 'A'
OnClick = btnVFOAClick
TabOrder = 0
end
object btnVFOB: TButton
AnchorSideLeft.Control = btnVFOA
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = btnVFOA
Left = 38
Height = 25
Top = 0
Width = 25
Caption = 'B'
OnClick = btnVFOBClick
TabOrder = 1
end
end
object tmrRadio: TTimer
Enabled = False
Interval = 500
OnTimer = tmrRadioTimer
left = 64
top = 48
left = 80
top = 16
end
object mnuMem: TMainMenu
left = 104
top = 48
object MenuItem1: TMenuItem
left = 40
top = 16
object mnuPref: TMenuItem
Caption = 'Preferences'
object MenuItem2: TMenuItem
Action = acAddModMem
object mnuOpenMem: TMenuItem
Caption = 'Open memory list'
OnClick = acAddModMemExecute
end
object MenuItem3: TMenuItem
object mnuAddMod: TMenuItem
Action = acAddModMem
Caption = 'Add/Modify memories'
end
object mnuShowPwr: TMenuItem
Caption = 'Show Pwr buttons'
Checked = True
OnClick = MenuItem3Click
OnClick = mnuShowPwrClick
end
object MenuItem4: TMenuItem
object mnuProgPref: TMenuItem
Caption = 'Preferences'
OnClick = MenuItem4Click
OnClick = mnuProgPrefClick
end
end
end
object acMem: TActionList
left = 144
top = 48
left = 56
top = 16
object acAddModMem: TAction
Caption = 'Add/Modify memory'
OnExecute = acAddModMemExecute

View File

@ -55,15 +55,19 @@ type
btPoff: TButton;
btPon: TButton;
btPstby: TButton;
edtMemNr: TEdit;
gbBand: TGroupBox;
gbVfo: TGroupBox;
gbFreq: TGroupBox;
gbMode: TGroupBox;
gbInfo: TGroupBox;
gbVfo: TGroupBox;
GroupBox4: TGroupBox;
lblFreq: TLabel;
MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
MenuItem3: TMenuItem;
MenuItem4: TMenuItem;
mnuOpenMem: TMenuItem;
mnuPref: TMenuItem;
mnuAddMod: TMenuItem;
mnuShowPwr: TMenuItem;
mnuProgPref: TMenuItem;
mnuMem: TMainMenu;
pnlRig: TPanel;
pnlMain: TPanel;
@ -75,6 +79,8 @@ type
procedure btnMemWriClick(Sender: TObject);
procedure btnMemDwnClick(Sender: TObject);
procedure btnMemUpClick(Sender: TObject);
procedure btnVFOAClick(Sender: TObject);
procedure btnVFOBClick(Sender: TObject);
procedure btPoffClick(Sender: TObject);
procedure btPonClick(Sender: TObject);
procedure btPstbyClick(Sender: TObject);
@ -102,8 +108,8 @@ type
procedure btnFMClick(Sender: TObject);
procedure btnRTTYClick(Sender: TObject);
procedure btnSSBClick(Sender: TObject);
procedure MenuItem3Click(Sender: TObject);
procedure MenuItem4Click(Sender: TObject);
procedure mnuShowPwrClick(Sender: TObject);
procedure mnuProgPrefClick(Sender: TObject);
procedure rbRadio1Click(Sender: TObject);
procedure rbRadio2Click(Sender: TObject);
procedure tmrRadioTimer(Sender : TObject);
@ -143,6 +149,8 @@ type
}
AutoMode : Boolean;
//Running : Boolean;
infosetstage : integer;
infosetfreq : String;
procedure SynTRX;
function GetFreqFromModeBand(band : Integer;smode : String) : String;
@ -166,6 +174,7 @@ type
procedure LoadButtonCaptions;
procedure SetDebugMode(DebugMode : Boolean);
procedure LoadBandButtons;
function ListModeClose : Boolean;
procedure HLTune(start:boolean);
end;
@ -225,6 +234,7 @@ var
ModeWas : String; //store mode while tuning with AM
BwWas : integer;
Tuning : Boolean = false;
MemRelated : boolean;
implementation
{$R *.lfm}
@ -342,6 +352,8 @@ var
b : String = '';
f : Double;
m : String;
oldG : integer;
mG : integer;
begin
if Assigned(radio) then
begin
@ -353,6 +365,23 @@ begin
lblFreq.Caption := FormatFloat(empty_freq+';;',f);
UpdateModeButtons(m);
ClearButtonsColor;
// this waits5 rig polls before lock freq set by memory. After that if freq chanfǵes (by vfo knob) clean info text
// stupid but works quite well
case infosetstage of
4: begin
infosetfreq:= lblFreq.Caption;
inc(infosetstage);
end;
5: begin
if (infosetfreq <> lblFreq.Caption) then
begin
edtMemNr.Text:='';
infosetstage:=0;
end;
end;
else
if ((infosetstage > 0) and (infosetstage < 4)) then inc(infosetstage);
end;
if (f = 0) then
begin
if cqrini.ReadBool('BandMap','UseNewQSOFreqMode',False) then
@ -377,14 +406,35 @@ begin
end;
m := radio.GetRawMode;
if (m<>old_mode) then
begin
if not (((old_mode='LSB') or (old_mode='USB')) and ((m='LSB') or (m='USB'))) then
begin
old_mode := m;
dmData.OpenFreqMemories(old_mode)
end
end;
if MemRelated <> cqrini.ReadBool('TRX','MemModeRelated',False) then //user changed settings
begin
MemRelated := cqrini.ReadBool('TRX','MemModeRelated',False);
dmData.OpenFreqMemories(m);
end
else
begin
if MemRelated then //use related settings;
begin
//Group1 'LSB','USB','FM','AM'
//Group2 'RTTY','PKTLSB','PKTUSB','PKTFM','DATA'
case old_mode of
'LSB','USB','FM','AM' : oldG:=1;
'RTTY','PKTLSB','PKTUSB','PKTFM','DATA' : oldG:=2;
else oldG:=0; //CW or unlisted
end;
case m of
'LSB','USB','FM','AM' : mG:=1;
'RTTY','PKTLSB','PKTUSB','PKTFM','DATA' : mG:=2;
else mG:=0; //CW or unlisted
end;
if (oldG<>mG)then
begin
old_mode := m;
dmData.OpenFreqMemories(old_mode)
end
end;
end;
if (b='') then
b := dmUtils.GetBandFromFreq(lblFreq.Caption);
@ -468,6 +518,7 @@ begin
rbRadio1.Caption := cqrini.ReadString('TRX1','Desc','Radio 1');
rbRadio2.Caption := cqrini.ReadString('TRX2','Desc','Radio 2');
old_mode := '';
MemRelated := cqrini.ReadBool('TRX','MemModeRelated',False);
end;
procedure TfrmTRXControl.btn10mClick(Sender: TObject);
@ -479,7 +530,8 @@ begin
mode := GetActualMode;
freq := GetFreqFromModeBand(8,mode);
SetModeFreq(mode,freq);
btn10m.Font.Color := clRed;
btn10m.Font.Color := clRed;
frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
end;
procedure TfrmTRXControl.btn12mClick(Sender: TObject);
@ -491,7 +543,8 @@ begin
mode := GetActualMode;
freq := GetFreqFromModeBand(7,mode);
SetModeFreq(mode,freq);
btn12m.Font.Color := clRed;
btn12m.Font.Color := clRed;
frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
end;
procedure TfrmTRXControl.btn15mClick(Sender: TObject);
@ -503,7 +556,8 @@ begin
mode := GetActualMode;
freq := GetFreqFromModeBand(6,mode);
SetModeFreq(mode,freq);
btn15m.Font.Color := clRed;
btn15m.Font.Color := clRed;
frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
end;
procedure TfrmTRXControl.btn160mClick(Sender: TObject);
@ -515,7 +569,8 @@ begin
mode := GetActualMode;
freq := GetFreqFromModeBand(0,mode);
SetModeFreq(mode,freq);
btn160m.Font.Color := clRed;
btn160m.Font.Color := clRed;
frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
end;
procedure TfrmTRXControl.btn17mClick(Sender: TObject);
@ -527,7 +582,8 @@ begin
mode := GetActualMode;
freq := GetFreqFromModeBand(5,mode);
SetModeFreq(mode,freq);
btn17m.Font.Color := clRed;
btn17m.Font.Color := clRed;
frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
end;
procedure TfrmTRXControl.btn20mClick(Sender: TObject);
@ -539,7 +595,8 @@ begin
mode := GetActualMode;
freq := GetFreqFromModeBand(4,mode);
SetModeFreq(mode,freq);
btn20m.Font.Color := clRed;
btn20m.Font.Color := clRed;
frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
end;
procedure TfrmTRXControl.btn2mClick(Sender: TObject);
@ -551,7 +608,8 @@ begin
mode := GetActualMode;
freq := GetFreqFromModeBand(10,mode);
SetModeFreq(mode,freq);
btn2m.Font.Color := clRed;
btn2m.Font.Color := clRed;
frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
end;
procedure TfrmTRXControl.btn30mClick(Sender: TObject);
@ -563,7 +621,8 @@ begin
mode := GetActualMode;
freq := GetFreqFromModeBand(3,mode);
SetModeFreq(mode,freq);
btn30m.Font.Color := clRed;
btn30m.Font.Color := clRed;
frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
end;
procedure TfrmTRXControl.btn40mClick(Sender: TObject);
@ -575,7 +634,8 @@ begin
mode := GetActualMode;
freq := GetFreqFromModeBand(2,mode);
SetModeFreq(mode,freq);
btn40m.Font.Color := clRed;
btn40m.Font.Color := clRed;
frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
end;
procedure TfrmTRXControl.btn6mClick(Sender: TObject);
@ -587,7 +647,8 @@ begin
mode := GetActualMode;
freq := GetFreqFromModeBand(9,mode);
SetModeFreq(mode,freq);
btn6m.Font.Color := clRed;
btn6m.Font.Color := clRed;
frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
end;
procedure TfrmTRXControl.btn70cmClick(Sender: TObject);
@ -599,7 +660,8 @@ begin
mode := GetActualMode;
freq := GetFreqFromModeBand(11,mode);
SetModeFreq(mode,freq);
btn70cm.Font.Color := clRed;
btn70cm.Font.Color := clRed;
frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
end;
procedure TfrmTRXControl.btn80mClick(Sender: TObject);
@ -611,33 +673,28 @@ begin
mode := GetActualMode;
freq := GetFreqFromModeBand(1,mode);
SetModeFreq(mode,freq);
btn80m.Font.Color := clRed;
btn80m.Font.Color := clRed;
frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
end;
procedure TfrmTRXControl.btnAMClick(Sender: TObject);
procedure TfrmTRXControl.btnVFOAClick(Sender: TObject);
begin
SetMode('AM',GetBandWidth('AM'))
if Assigned(radio) then radio.SetCurrVfo(VFOA);
end;
procedure TfrmTRXControl.btnVFOBClick(Sender: TObject);
begin
if Assigned(radio) then radio.SetCurrVfo(VFOB);
end;
procedure TfrmTRXControl.btnCWClick(Sender: TObject);
begin
frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
SetMode('CW',GetBandWidth('CW'))
end;
procedure TfrmTRXControl.btnFMClick(Sender: TObject);
begin
SetMode('FM',GetBandWidth('FM'))
end;
procedure TfrmTRXControl.btnRTTYClick(Sender: TObject);
begin
SetMode('RTTY',GetBandWidth('RTTY'))
end;
procedure TfrmTRXControl.btnSSBClick(Sender: TObject);
var
tmp : Currency;
begin
frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
if not TryStrToCurr(lblFreq.Caption,tmp) then
SetMode('LSB',GetBandWidth('SSB'))
else begin
@ -651,24 +708,39 @@ begin
end
end
end;
procedure TfrmTRXControl.btnRTTYClick(Sender: TObject);
begin
frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
SetMode('RTTY',GetBandWidth('RTTY'))
end;
procedure TfrmTRXControl.btnAMClick(Sender: TObject);
begin
frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
SetMode('AM',GetBandWidth('AM'))
end;
procedure TfrmTRXControl.btnFMClick(Sender: TObject);
begin
frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
SetMode('FM',GetBandWidth('FM'))
end;
procedure TfrmTRXControl.MenuItem3Click(Sender: TObject);
procedure TfrmTRXControl.mnuShowPwrClick(Sender: TObject);
begin
if pnlPower.Visible then
Begin
pnlPower.Visible:= false;
Menuitem3.Checked:= false;
mnuShowPwr.Checked:= false;
end
else
Begin
pnlPower.Visible:= true;
btPonClick(nil); //setting buttons visible sends PwrOn to sync button colors
Menuitem3.Checked:= true;
mnuShowPwr.Checked:= true;
end;
cqrini.WriteBool('TRX','PowerButtons',pnlPower.Visible);
end;
procedure TfrmTRXControl.MenuItem4Click(Sender: TObject);
procedure TfrmTRXControl.mnuProgPrefClick(Sender: TObject);
begin
cqrini.WriteInteger('Pref', 'ActPageIdx', 5); //set DXCuster tab active. Number may change if preferences page change
frmNewQSO.acPreferences.Execute
@ -696,20 +768,49 @@ begin
thRig.Terminate;
dmUtils.SaveWindowPos(frmTRXControl);
end;
function TfrmTRXControl.ListModeClose : boolean;
Begin
Result :=false;
if (frmRadioMemories <> nil) then
if (frmRadioMemories.ShowMode) then //is open in show list mode
begin
FreeAndNil(frmRadioMemories);
Result :=true;
end;
end;
procedure TfrmTRXControl.acAddModMemExecute(Sender: TObject);
begin
frmRadioMemories := TfrmRadioMemories.Create(frmTRXControl);
try
dmData.LoadFreqMemories(frmRadioMemories.sgrdMem);
frmRadioMemories.ShowModal;
if frmRadioMemories.ModalResult = mrOK then
begin
dmData.StoreFreqMemories(frmRadioMemories.sgrdMem)
end
finally
FreeAndNil(frmRadioMemories)
end
ListModeClose;
frmRadioMemories := TfrmRadioMemories.Create(frmTRXControl);
if Sender = mnuOpenMem then //show only
Begin
frmRadioMemories.Show;
frmRadioMemories.Panel1.Visible:=false;
frmRadioMemories.ShowMode := True;
try
dmData.LoadFreqMemories(frmRadioMemories.sgrdMem);
except
on E: Exception do
ShowMessage( 'Could not load memories: '+ E.ClassName + #13#10 + E.Message );
end;
end
else
begin
try
dmData.LoadFreqMemories(frmRadioMemories.sgrdMem);
frmRadioMemories.ShowModal;
if frmRadioMemories.ModalResult = mrOK then
begin
dmData.StoreFreqMemories(frmRadioMemories.sgrdMem)
end
finally
FreeAndNil(frmRadioMemories);
end;
end;
end;
procedure TfrmTRXControl.btnMemWriClick(Sender: TObject);
@ -724,12 +825,13 @@ begin
Dfreq := radio.GetFreqkHz;
if Dfreq > 0 then
begin
ListModeClose;
frmRadioMemories := TfrmRadioMemories.Create(frmTRXControl);
try
dmData.LoadFreqMemories(frmRadioMemories.sgrdMem);
bandwidth:= radio.GetPassOnly;
mode := radio.GetRawMode;
freq := FloatToStrF(Dfreq,ffFixed,15,0);
freq := FloatToStrF(Dfreq,ffGeneral,15,0);
if (mode<>'') then
begin
frmRadioMemories.sgrdMem.RowCount := frmRadioMemories.sgrdMem.RowCount + 1;
@ -737,11 +839,13 @@ begin
frmRadioMemories.sgrdMem.Cells[1,frmRadioMemories.sgrdMem.RowCount-1] := mode;
frmRadioMemories.sgrdMem.Cells[2,frmRadioMemories.sgrdMem.RowCount-1] := IntToStr(bandwidth);
dmData.StoreFreqMemories(frmRadioMemories.sgrdMem);
lblFreq.Caption:='MemW OK';
edtMemNr.Font.Color:= clRed;
edtMemNr.Text:='MW ok';
infosetstage:=1;
end
finally
FreeAndNil(frmRadioMemories)
end
FreeAndNil(frmRadioMemories);
end;
end;
end;
@ -750,8 +854,10 @@ var
freq : Double;
mode : String;
bandwidth : Integer;
info : String;
begin
dmData.GetNextFreqFromMem(freq,mode,bandwidth);
dmData.GetNextFreqFromMem(freq,mode,bandwidth,info);
if dmData.DebugLevel>=1 then writeln('--------------FMWI',freq,' ',mode,' ',bandwidth,' ',info);
if freq > 0 then
SetFreqModeBandWidth(freq,mode,bandwidth)
end;
@ -761,8 +867,9 @@ var
freq : Double;
mode : String;
bandwidth : Integer;
info : String;
begin
dmData.GetPreviousFreqFromMem(freq,mode,bandwidth);
dmData.GetPreviousFreqFromMem(freq,mode,bandwidth,info);
if freq > 0 then
SetFreqModeBandWidth(freq,mode,bandwidth)
end;
@ -851,6 +958,7 @@ var
port : Integer;
poll : Integer;
begin
if Assigned(radio) then
begin
FreeAndNil(radio);
@ -899,7 +1007,7 @@ begin
Result := True;
pnlPower.Visible := cqrini.ReadBool('TRX','PowerButtons',False);
Menuitem3.Checked := pnlPower.Visible;
mnuShowPwr.Checked := pnlPower.Visible;
if pnlPower.Visible then btPonClick(nil);
// all rigs do not support rigctld power switching
//so we just put pwr button ON and send rigctld PWR ON cmd
@ -1145,7 +1253,6 @@ begin
SetFreqModeBandWidth(f,mode,bandwidth)
end;
function TfrmTRXControl.GetModeFreqNewQSO(var mode,freq : String) : Boolean;
begin
Result := False;
@ -1175,7 +1282,8 @@ begin
btn10m.Font.Color := COLOR_WINDOWTEXT;
btn6m.Font.Color := COLOR_WINDOWTEXT;
btn2m.Font.Color := COLOR_WINDOWTEXT;
btn70cm.Font.Color := COLOR_WINDOWTEXT
btn70cm.Font.Color := COLOR_WINDOWTEXT;
end;
function TfrmTRXControl.GetModeBand(var mode,band : String) : Boolean;
@ -1222,7 +1330,8 @@ begin
btnAM.Font.Color := clRed
else
if mode = 'FM' then
btnFM.Font.Color := clRed
btnFM.Font.Color := clRed;
end;
procedure TfrmTRXControl.Split(Up : Integer);