mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-26 02:20:20 -04:00 
			
		
		
		
	1. Alt+F8 arms "Call 1st" as if a CQ had been sent.
2. "Call 1st" label turns red when armed to respond to a caller. 3. Suppress some recognizable false decodes, send them to cumulative file "data_dir/false_decodes.txt". 4. Reduce sleep delay in decoder() to 10 ms. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7928 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
		
							parent
							
								
									ee38f44656
								
							
						
					
					
						commit
						73df0d00ef
					
				| @ -376,6 +376,7 @@ set (wsjt_FSRCS | |||||||
|   lib/fsk4hf/chkcrc10.f90 |   lib/fsk4hf/chkcrc10.f90 | ||||||
|   lib/fsk4hf/chkcrc12.f90 |   lib/fsk4hf/chkcrc12.f90 | ||||||
|   lib/fsk4hf/chkcrc12a.f90 |   lib/fsk4hf/chkcrc12a.f90 | ||||||
|  |   lib/chkcall.f90 | ||||||
|   lib/chkhist.f90 |   lib/chkhist.f90 | ||||||
|   lib/chkmsg.f90 |   lib/chkmsg.f90 | ||||||
|   lib/chkss2.f90 |   lib/chkss2.f90 | ||||||
| @ -474,6 +475,7 @@ set (wsjt_FSRCS | |||||||
|   lib/iscat.f90 |   lib/iscat.f90 | ||||||
|   lib/jplsubs.f |   lib/jplsubs.f | ||||||
|   lib/jt9fano.f90 |   lib/jt9fano.f90 | ||||||
|  |   lib/jtmsg.f90 | ||||||
|   lib/ldpcsim144.f90 |   lib/ldpcsim144.f90 | ||||||
|   lib/fsk4hf/ldpcsim120.f90 |   lib/fsk4hf/ldpcsim120.f90 | ||||||
|   lib/fsk4hf/ldpcsim168.f90 |   lib/fsk4hf/ldpcsim168.f90 | ||||||
|  | |||||||
							
								
								
									
										58
									
								
								lib/chkcall.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								lib/chkcall.f90
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,58 @@ | |||||||
|  | subroutine chkcall(w,bc,cok) | ||||||
|  | 
 | ||||||
|  | ! Check "w" to see if it could be a valid standard callsign or a valid | ||||||
|  | ! compound callsign. | ||||||
|  | ! Return base call "bc" and a logical "cok" indicator. | ||||||
|  | 
 | ||||||
|  |   character w*13                            !A putative callsign | ||||||
|  |   character bc*6                            !Base call (tentative) | ||||||
|  |   character c*1 | ||||||
|  |   logical cok,isdigit,isletter | ||||||
|  |    | ||||||
|  |   isdigit(c)=(ichar(c).ge.ichar('0')) .and. (ichar(c).le.ichar('9')) | ||||||
|  |   isletter(c)=(ichar(c).ge.ichar('A')) .and. (ichar(c).le.ichar('Z')) | ||||||
|  |    | ||||||
|  |   cok=.true. | ||||||
|  |   bc=w(1:6) | ||||||
|  |   n1=len_trim(w) | ||||||
|  |   if(n1.gt.11) go to 100 | ||||||
|  |   if(index(w,'.').ge.1) go to 100 | ||||||
|  |   if(index(w,'+').ge.1) go to 100 | ||||||
|  |   if(index(w,'-').ge.1) go to 100 | ||||||
|  |   if(index(w,'?').ge.1) go to 100 | ||||||
|  |   if(n1.gt.6 .and. index(w,'/').le.0) go to 100 | ||||||
|  | 
 | ||||||
|  |   i0=index(w,'/') | ||||||
|  |   if(max(i0-1,n1-i0).gt.6) go to 100      !Base call must be < 7 characters | ||||||
|  |   if(i0.ge.2 .and. i0.le.n1-1) then       !Extract base call from compound call | ||||||
|  |      if(i0-1.le.n1-i0) bc=w(i0+1:n1)//'   ' | ||||||
|  |      if(i0-1.gt.n1-i0) bc=w(1:i0-1)//'   ' | ||||||
|  |   endif | ||||||
|  | 
 | ||||||
|  |   nbc=len_trim(bc) | ||||||
|  |   if(nbc.gt.6) go to 100  !Base call should have no more than 6 characters | ||||||
|  | 
 | ||||||
|  | ! One of first two characters (c1 or c2) must be a letter | ||||||
|  |   if((.not.isletter(bc(1:1))) .and. (.not.isletter(bc(2:2)))) go to 100 | ||||||
|  |   if(bc(1:1).eq.'Q') go to 100              !Calls don't start with Q | ||||||
|  | 
 | ||||||
|  | ! Must have a digit in 2nd or 3rd position | ||||||
|  |   i1=0 | ||||||
|  |   if(isdigit(bc(2:2))) i1=2 | ||||||
|  |   if(isdigit(bc(3:3))) i1=3 | ||||||
|  |   if(i1.eq.0) go to 100 | ||||||
|  | 
 | ||||||
|  | ! Callsign must have a suffix of 1-3 letters | ||||||
|  |   if(i1.eq.nbc) go to 100 | ||||||
|  |   n=0 | ||||||
|  |   do i=i1+1,nbc | ||||||
|  |      j=ichar(bc(i:i)) | ||||||
|  |      if(j.lt.ichar('A') .or. j.gt.ichar('Z')) go to 100 | ||||||
|  |      n=n+1 | ||||||
|  |   enddo | ||||||
|  |   if(n.ge.1 .and. n.le.3) go to 200 | ||||||
|  | 
 | ||||||
|  | 100 cok=.false. | ||||||
|  |       | ||||||
|  | 200 return | ||||||
|  | end subroutine chkcall | ||||||
| @ -61,7 +61,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample) | |||||||
|   if(ios.ne.0) then |   if(ios.ne.0) then | ||||||
|      nfail=nfail+1 |      nfail=nfail+1 | ||||||
|      if(nfail.le.3) then |      if(nfail.le.3) then | ||||||
|         call sleep_msec(100) |         call sleep_msec(10) | ||||||
|         go to 10 |         go to 10 | ||||||
|      endif |      endif | ||||||
|   endif |   endif | ||||||
|  | |||||||
| @ -252,7 +252,8 @@ subroutine ft8b(dd0,newdat,nfqso,ndepth,lsubtract,iaptype,icand,sync0,f1,xdt, | |||||||
|         if(any(decoded(75:75).ne.0)) cycle        !Reject if any of the 3 extra bits are nonzero |         if(any(decoded(75:75).ne.0)) cycle        !Reject if any of the 3 extra bits are nonzero | ||||||
|         if(nharderrors.ge.0 .and. nharderrors+dmin.lt.60.0 .and. &         |         if(nharderrors.ge.0 .and. nharderrors+dmin.lt.60.0 .and. &         | ||||||
|            .not.(sync.lt.2.0 .and. nharderrors.gt.35)      .and. & |            .not.(sync.lt.2.0 .and. nharderrors.gt.35)      .and. & | ||||||
|            .not.( iap .gt. 0 .and. nharderrors.gt.39)            &    |            .not.(iap.gt.0 .and. nharderrors.gt.39)         .and. & | ||||||
|  |            .not.(iera.ge.2 .and. nharderrors.gt.30)              & | ||||||
|           ) then |           ) then | ||||||
|            call chkcrc12a(decoded,nbadcrc) |            call chkcrc12a(decoded,nbadcrc) | ||||||
|         else |         else | ||||||
|  | |||||||
| @ -81,13 +81,26 @@ contains | |||||||
|              xdt,apsym,nharderrors,dmin,nbadcrc,iap,ipass,iera,message,xsnr) |              xdt,apsym,nharderrors,dmin,nbadcrc,iap,ipass,iera,message,xsnr) | ||||||
|         nsnr=nint(xsnr)  |         nsnr=nint(xsnr)  | ||||||
|         xdt=xdt-0.5 |         xdt=xdt-0.5 | ||||||
|  |         hd=nharderrors+dmin | ||||||
|         call timer('ft8b    ',1) |         call timer('ft8b    ',1) | ||||||
|         if(nbadcrc.eq.0 .and. associated(this%callback)) then |         if(nbadcrc.eq.0) then | ||||||
|            call this%callback(sync,nsnr,xdt,f1,iap,iera,message) |            call jtmsg(message,iflag) | ||||||
|            write(81,3081) ncand,icand,iera,nharderrors,ipass,iap,iaptype,    & |            if(iand(iflag,16).ne.0) message(22:22)='?' | ||||||
|                 db(sync),f1,xdt,dmin,xsnr,message |            if(iand(iflag,15).eq.0) then | ||||||
| 3081       format(2i5,i2,i3,i2,i2,i2,f7.2,f7.1,3f7.2,1x,a22) | !              write(81,1004) nutc,ncand,icand,ipass,iaptype,iap,iera,       & | ||||||
|            flush(81) | !                   iflag,nharderrors,dmin,hd,min(sync,999.0),nint(xsnr),    & | ||||||
|  | !                   xdt,nint(f1),message | ||||||
|  | !              flush(81) | ||||||
|  |               if(associated(this%callback)) then | ||||||
|  |                  call this%callback(sync,nsnr,xdt,f1,iap,iera,message) | ||||||
|  |               endif | ||||||
|  |            else | ||||||
|  |               write(19,1004) nutc,ncand,icand,ipass,iaptype,iap,iera,       & | ||||||
|  |                    iflag,nharderrors,dmin,hd,min(sync,999.0),nint(xsnr),    & | ||||||
|  |                    xdt,nint(f1),message | ||||||
|  | 1004          format(i6.6,2i4,4i2,2i3,3f6.1,i4,f6.2,i5,2x,a22) | ||||||
|  |               flush(19) | ||||||
|  |            endif | ||||||
|         endif |         endif | ||||||
|       enddo |       enddo | ||||||
| !     h=default_header(12000,NMAX) | !     h=default_header(12000,NMAX) | ||||||
|  | |||||||
| @ -161,6 +161,8 @@ program jt9 | |||||||
| ! Import FFTW wisdom, if available | ! Import FFTW wisdom, if available | ||||||
|   wisfile=trim(data_dir)//'/jt9_wisdom.dat'// C_NULL_CHAR |   wisfile=trim(data_dir)//'/jt9_wisdom.dat'// C_NULL_CHAR | ||||||
|   iret=fftwf_import_wisdom_from_filename(wisfile) |   iret=fftwf_import_wisdom_from_filename(wisfile) | ||||||
|  |   open(19,file=trim(data_dir)//'/false_decodes.txt',status='unknown',     & | ||||||
|  |        position='append') | ||||||
| 
 | 
 | ||||||
|   ntry65a=0 |   ntry65a=0 | ||||||
|   ntry65b=0 |   ntry65b=0 | ||||||
|  | |||||||
							
								
								
									
										125
									
								
								lib/jtmsg.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								lib/jtmsg.f90
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,125 @@ | |||||||
|  | subroutine jtmsg(msg,iflag) | ||||||
|  | 
 | ||||||
|  | ! Attempts to identify false decodes in JT-style messages. | ||||||
|  | 
 | ||||||
|  | ! Returns iflag with sum of bits as follows: | ||||||
|  | ! ------------------------------------------ | ||||||
|  | !    1 Grid/Report invalid | ||||||
|  | !    2 Second callsign invalid | ||||||
|  | !    4 First callsign invalid | ||||||
|  | !    8 Very unlikely free text | ||||||
|  | !   16 Questionable free text | ||||||
|  | !    0 Message is probably OK | ||||||
|  | ! ------------------------------------------ | ||||||
|  | 
 | ||||||
|  |   character*22 msg,t | ||||||
|  |   character*13 w1,w2,w3,w | ||||||
|  |   character*6 bc1,bc2 | ||||||
|  |   character*1 c | ||||||
|  |   logical c1ok,c2ok,isdigit,isletter,isgrid4 | ||||||
|  | 
 | ||||||
|  | ! Statement functions   | ||||||
|  |   isdigit(c)=(ichar(c).ge.ichar('0')) .and. (ichar(c).le.ichar('9')) | ||||||
|  |   isletter(c)=(ichar(c).ge.ichar('A')) .and. (ichar(c).le.ichar('Z')) | ||||||
|  |   isgrid4(w)=(len_trim(w).eq.4 .and.                                        & | ||||||
|  |        ichar(w(1:1)).ge.ichar('A') .and. ichar(w(1:1)).le.ichar('R') .and.  & | ||||||
|  |        ichar(w(2:2)).ge.ichar('A') .and. ichar(w(2:2)).le.ichar('R') .and.  & | ||||||
|  |        ichar(w(3:3)).ge.ichar('0') .and. ichar(w(3:3)).le.ichar('9') .and.  & | ||||||
|  |        ichar(w(4:4)).ge.ichar('0') .and. ichar(w(4:4)).le.ichar('9')) | ||||||
|  | 
 | ||||||
|  |   t=trim(msg)                         !Temporary copy of msg | ||||||
|  |   nt=len_trim(t) | ||||||
|  | 
 | ||||||
|  | ! Check for standard messages | ||||||
|  | ! Insert underscore in "CQ AA " to "CQ ZZ ", "CQ nnn " to make them one word. | ||||||
|  |   if(t(1:3).eq.'CQ ' .and. isletter(t(4:4)) .and.                             & | ||||||
|  |        isletter(t(5:5)) .and. t(6:6).eq.' ') t(3:3)='_' | ||||||
|  |   if(t(1:3).eq.'CQ ' .and. isdigit(t(4:4)) .and.                              & | ||||||
|  |        isdigit(t(5:5)) .and. isdigit(t(6:6)) .and. t(7:7).eq.' ') t(3:3)='_' | ||||||
|  | 
 | ||||||
|  | ! Parse first three words | ||||||
|  |   w1='             ' | ||||||
|  |   w2='             ' | ||||||
|  |   w3='             ' | ||||||
|  |   i1=index(t,' ') | ||||||
|  |   if(i1.gt.0) w1(1:i1-1)=t(1:i1-1) | ||||||
|  |   t=t(i1+1:) | ||||||
|  |   i2=index(t,' ') | ||||||
|  |   if(i2.gt.0) w2(1:i2-1)=t(1:i2-1) | ||||||
|  |   t=t(i2+1:) | ||||||
|  |   i3=index(t,' ') | ||||||
|  |   if(i3.gt.0) w3(1:i3-1)=t(1:i3-1) | ||||||
|  | 
 | ||||||
|  |   if(w1(1:3).eq.'CQ ' .or. w1(1:3).eq.'CQ_' .or. w1(1:3).eq.'DE ' .or.   & | ||||||
|  |        w1(1:4).eq.'QRZ ') then | ||||||
|  | ! CQ/DE/QRZ: Should have one good callsign in w2 and maybe a grid/rpt in w3 | ||||||
|  |      call chkcall(w2,bc2,c2ok) | ||||||
|  |      iflag=0 | ||||||
|  |      if(.not.c2ok) iflag=iflag+2 | ||||||
|  |      if(len_trim(w3).ne.0 .and. (.not.isgrid4(w3))) iflag=iflag+1 | ||||||
|  |      if(w1(1:3).eq.'DE ' .and. c2ok) iflag=0 | ||||||
|  |      if(iflag.eq.0) return | ||||||
|  |   endif | ||||||
|  | 
 | ||||||
|  | ! Check for two calls and maybe a grid, rpt, R+rpr, RRR, or 73 | ||||||
|  |   iflag=0 | ||||||
|  |   call chkcall(w1,bc1,c1ok) | ||||||
|  |   call chkcall(w2,bc2,c2ok) | ||||||
|  |   if(.not.c1ok) iflag=iflag+4 | ||||||
|  |   if(.not.c2ok) iflag=iflag+2 | ||||||
|  |   if(len_trim(w3).ne.0 .and. (.not.isgrid4(w3)) .and.                  & | ||||||
|  |           w3(1:1).ne.'+' .and. w3(1:1).ne.'-' .and.                      & | ||||||
|  |           w3(1:2).ne.'R+' .and. w3(1:2).ne.'R-' .and.                    & | ||||||
|  |           w3(1:3).ne.'73 ' .and. w3(1:4).ne.'RRR ') iflag=iflag+1 | ||||||
|  |   if(iflag.eq.0 .or. nt.gt.13) return | ||||||
|  | 
 | ||||||
|  | ! Check for plausible free text | ||||||
|  | 
 | ||||||
|  |   nc=0 | ||||||
|  |   np=0 | ||||||
|  |   do i=1,13 | ||||||
|  |      c=msg(i:i) | ||||||
|  |      if(c.ne.' ') nc=nc+1             !Number of non-blank characters | ||||||
|  |      if(c.eq.'+') np=np+1             !Number of punctuation characters | ||||||
|  |      if(c.eq.'-') np=np+1 | ||||||
|  |      if(c.eq.'.') np=np+1 | ||||||
|  |      if(c.eq.'/') np=np+1 | ||||||
|  |      if(c.eq.'?') np=np+1 | ||||||
|  |   enddo | ||||||
|  |   nb=13-nc                            !Number of blanks | ||||||
|  |   iflag=16                             !Mark as potentially questionable | ||||||
|  |   if(nc.ge.12 .or. (nc.ge.11 .and. np.gt.0)) then | ||||||
|  |      iflag=8                           !Unlikely free text, flag it | ||||||
|  |   endif | ||||||
|  | 
 | ||||||
|  | ! Save messages containing some common words | ||||||
|  |   if(msg(1:3).eq.'CQ ') iflag=0 | ||||||
|  |   if(index(msg,'DE ').gt.0) iflag=0 | ||||||
|  |   if(index(msg,'TU ').gt.0) iflag=0 | ||||||
|  |   if(index(msg,' TU').gt.0) iflag=0 | ||||||
|  |   if(index(msg,'73 ').gt.0) iflag=0 | ||||||
|  |   if(index(msg,' 73').gt.0) iflag=0 | ||||||
|  |   if(index(msg,'TNX').gt.0) iflag=0 | ||||||
|  |   if(index(msg,'THX').gt.0) iflag=0 | ||||||
|  |   if(index(msg,'EQSL').gt.0) iflag=0 | ||||||
|  |   if(index(msg,'LOTW').gt.0) iflag=0 | ||||||
|  |   if(index(msg,'DECOD').gt.0) iflag=0 | ||||||
|  |   if(index(msg,'CHK').gt.0) iflag=0 | ||||||
|  |   if(index(msg,'CLK').gt.0) iflag=0 | ||||||
|  |   if(index(msg,'CLOCK').gt.0) iflag=0 | ||||||
|  |   if(index(msg,'LOG').gt.0) iflag=0 | ||||||
|  |   if(index(msg,'QRM').gt.0) iflag=0 | ||||||
|  |   if(index(msg,'QSY').gt.0) iflag=0 | ||||||
|  |   if(index(msg,'TEST').gt.0) iflag=0 | ||||||
|  |   if(index(msg,'CQDX').gt.0) iflag=0 | ||||||
|  |   if(index(msg,'CALL').gt.0) iflag=0 | ||||||
|  |   if(index(msg,'QRZ').gt.0) iflag=0 | ||||||
|  |   if(index(msg,'AUTO').gt.0) iflag=0 | ||||||
|  | 
 | ||||||
|  |   if(c1ok .and. w1(1:6).eq.bc1) iflag=0 | ||||||
|  |   if(c2ok .and. w2(1:6).eq.bc2) iflag=0 | ||||||
|  | 
 | ||||||
|  |   if(nb.ge.4) iflag=0 | ||||||
|  | 
 | ||||||
|  |   return | ||||||
|  | end subroutine jtmsg | ||||||
| @ -1701,6 +1701,12 @@ void MainWindow::keyPressEvent (QKeyEvent * e) | |||||||
|       } |       } | ||||||
|       on_actionOpen_next_in_directory_triggered(); |       on_actionOpen_next_in_directory_triggered(); | ||||||
|       return; |       return; | ||||||
|  |     case Qt::Key_F8: | ||||||
|  |       if((e->modifiers() & Qt::AltModifier) and ui->cbFirst->isChecked()) { | ||||||
|  |         m_bCallingCQ=true; | ||||||
|  |         ui->cbFirst->setStyleSheet("QCheckBox{color:red}"); | ||||||
|  |         return; | ||||||
|  |       } | ||||||
|     case Qt::Key_F10: |     case Qt::Key_F10: | ||||||
|       if(e->modifiers() & Qt::ControlModifier) freqCalStep(); |       if(e->modifiers() & Qt::ControlModifier) freqCalStep(); | ||||||
|       break; |       break; | ||||||
| @ -1708,9 +1714,12 @@ void MainWindow::keyPressEvent (QKeyEvent * e) | |||||||
|       n=11; |       n=11; | ||||||
|       if(e->modifiers() & Qt::ControlModifier) n+=100; |       if(e->modifiers() & Qt::ControlModifier) n+=100; | ||||||
|       if(e->modifiers() & Qt::ShiftModifier) { |       if(e->modifiers() & Qt::ShiftModifier) { | ||||||
|  |          /*
 | ||||||
|         int f=ui->TxFreqSpinBox->value()/50; |         int f=ui->TxFreqSpinBox->value()/50; | ||||||
|         if((ui->TxFreqSpinBox->value() % 50) == 0) f=f-1; |         if((ui->TxFreqSpinBox->value() % 50) == 0) f=f-1; | ||||||
|         ui->TxFreqSpinBox->setValue(50*f); |         ui->TxFreqSpinBox->setValue(50*f); | ||||||
|  |            */ | ||||||
|  |          ui->TxFreqSpinBox->setValue(ui->TxFreqSpinBox->value()-60); | ||||||
|       } else{ |       } else{ | ||||||
|         bumpFqso(n); |         bumpFqso(n); | ||||||
|       } |       } | ||||||
| @ -1719,8 +1728,12 @@ void MainWindow::keyPressEvent (QKeyEvent * e) | |||||||
|       n=12; |       n=12; | ||||||
|       if(e->modifiers() & Qt::ControlModifier) n+=100; |       if(e->modifiers() & Qt::ControlModifier) n+=100; | ||||||
|       if(e->modifiers() & Qt::ShiftModifier) { |       if(e->modifiers() & Qt::ShiftModifier) { | ||||||
|  |          /*
 | ||||||
|         int f=ui->TxFreqSpinBox->value()/50; |         int f=ui->TxFreqSpinBox->value()/50; | ||||||
|         ui->TxFreqSpinBox->setValue(50*(f+1)); |         ui->TxFreqSpinBox->setValue(50*(f+1)); | ||||||
|  |            */ | ||||||
|  |          ui->TxFreqSpinBox->setValue(ui->TxFreqSpinBox->value()+60); | ||||||
|  | 
 | ||||||
|       } else { |       } else { | ||||||
|         bumpFqso(n); |         bumpFqso(n); | ||||||
|       } |       } | ||||||
| @ -2730,6 +2743,7 @@ void MainWindow::readFromStdout()                             //readFromStdout | |||||||
|           m_bDoubleClicked=true; |           m_bDoubleClicked=true; | ||||||
|           processMessage(decodedtext.string(),43,false); |           processMessage(decodedtext.string(),43,false); | ||||||
|           m_bCallingCQ=false; |           m_bCallingCQ=false; | ||||||
|  |           ui->cbFirst->setStyleSheet(""); | ||||||
|         } else { |         } else { | ||||||
|           audioFreq=decodedtext.string().mid(16,4).toInt(); |           audioFreq=decodedtext.string().mid(16,4).toInt(); | ||||||
|           if(i1>0 or (abs(audioFreq - m_wideGraph->rxFreq()) <= 10)) bDisplayRight=true; |           if(i1>0 or (abs(audioFreq - m_wideGraph->rxFreq()) <= 10)) bDisplayRight=true; | ||||||
| @ -3082,7 +3096,15 @@ void MainWindow::guiUpdate() | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     m_currentMessage = QString::fromLatin1(msgsent); |     m_currentMessage = QString::fromLatin1(msgsent); | ||||||
|     if(m_mode=="FT8") m_bCallingCQ=m_currentMessage.mid(0,3)=="CQ "; |     if(m_mode=="FT8") { | ||||||
|  |       m_bCallingCQ=m_currentMessage.mid(0,3)=="CQ "; | ||||||
|  |       if(m_bCallingCQ) { | ||||||
|  |         ui->cbFirst->setStyleSheet("QCheckBox{color:red}"); | ||||||
|  |       } else { | ||||||
|  |         ui->cbFirst->setStyleSheet(""); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     if (m_tune) { |     if (m_tune) { | ||||||
|       m_currentMessage = "TUNE"; |       m_currentMessage = "TUNE"; | ||||||
|       m_currentMessageType = -1; |       m_currentMessageType = -1; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user