From 31a4e71c456745654c38fa5d9ea48869ab7bccca Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Wed, 30 Sep 2020 14:30:56 +0200 Subject: [PATCH] updated to 9.4.4 --- README.txt | 2 +- qsstv/appdefs.h | 3 + qsstv/appglobal.cpp | 20 +- qsstv/appglobal.h | 15 +- qsstv/config/baseconfig.cpp | 21 + qsstv/config/baseconfig.h | 2 +- qsstv/config/configdialog.cpp | 22 +- qsstv/config/configdialog.ui | 33 +- qsstv/config/configparams.h | 1 - qsstv/config/cwconfig.cpp | 21 + qsstv/config/directoriesconfig.cpp | 29 +- qsstv/config/drmprofileconfig.cpp | 24 +- qsstv/config/drmprofileconfig.h | 2 +- qsstv/config/drmprofileconfig.ui | 15 +- qsstv/config/frequencyselectwidget.cpp | 59 +- qsstv/config/frequencyselectwidget.h | 1 + qsstv/config/frequencyselectwidget.ui | 6 +- qsstv/config/ftpconfig.cpp | 61 +- qsstv/config/ftpconfig.h | 4 +- qsstv/config/ftpconfig.ui | 7 + qsstv/config/guiconfig.cpp | 39 +- qsstv/config/guiconfig.h | 2 + qsstv/config/guiconfig.ui | 16 +- qsstv/config/hybridconfig.cpp | 196 +- qsstv/config/hybridconfig.h | 6 +- qsstv/config/hybridconfig.ui | 582 ++-- qsstv/config/hybridnotifyconfig.cpp | 123 - qsstv/config/hybridnotifyconfig.h | 38 - qsstv/config/hybridnotifyconfig.ui | 469 ---- qsstv/config/operatorconfig.cpp | 30 + qsstv/config/operatorconfig.ui | 26 +- qsstv/config/repeaterconfig.cpp | 121 +- qsstv/config/repeaterconfig.h | 17 +- qsstv/config/repeaterconfig.ui | 216 +- qsstv/config/rigconfig.cpp | 23 +- qsstv/config/soundconfig.cpp | 3 +- qsstv/config/waterfallconfig.cpp | 33 + qsstv/config/waterfallconfig.h | 2 + qsstv/config/waterfallconfig.ui | 209 +- qsstv/dispatch/dispatcher.cpp | 376 ++- qsstv/dispatch/dispatcher.h | 47 +- qsstv/dispatch/dispatchevents.h | 201 +- qsstv/documentation/api/api.doxy | 2494 +++++++++++++++++ .../manual/images/Gallery_image_options.png | Bin 947185 -> 645776 bytes .../documentation/manual/images/cat_flrig.png | Bin 0 -> 75358 bytes qsstv/documentation/manual/images/config.png | Bin 15212 -> 13731 bytes qsstv/documentation/manual/images/config1.png | Bin 34726 -> 53501 bytes .../documentation/manual/images/config10.png | Bin 61052 -> 59908 bytes .../documentation/manual/images/config11.png | Bin 43280 -> 42691 bytes .../documentation/manual/images/config12.png | Bin 63358 -> 72382 bytes qsstv/documentation/manual/images/config2.png | Bin 83109 -> 85110 bytes qsstv/documentation/manual/images/config3.png | Bin 52566 -> 62556 bytes qsstv/documentation/manual/images/config4.png | Bin 82043 -> 79037 bytes qsstv/documentation/manual/images/config5.png | Bin 78350 -> 76428 bytes qsstv/documentation/manual/images/config6.png | Bin 31946 -> 31317 bytes qsstv/documentation/manual/images/config7.png | Bin 55107 -> 94282 bytes qsstv/documentation/manual/images/config8.png | Bin 72980 -> 73301 bytes qsstv/documentation/manual/images/config9.png | Bin 34998 -> 52777 bytes .../documentation/manual/images/editor_1b.png | Bin 0 -> 36825 bytes .../documentation/manual/images/editor_2b.png | Bin 0 -> 48825 bytes .../manual/images/editor_image_sizeb.png | Bin 0 -> 11832 bytes .../manual/images/editor_resize.png | Bin 0 -> 1190 bytes .../manual/images/editor_rotate.png | Bin 0 -> 1369 bytes .../manual/images/editor_rotate2.png | Bin 0 -> 3146 bytes .../manual/images/editor_text_rotate.png | Bin 0 -> 3331 bytes .../manual/images/entertextb.png | Bin 0 -> 9993 bytes .../manual/images/multilineb.png | Bin 0 -> 1301 bytes .../manual/images/pavu_playback.png | Bin 0 -> 38789 bytes .../documentation/manual/images/pavu_rec.png | Bin 0 -> 34460 bytes .../manual/images/receivedrm.png | Bin 283367 -> 404177 bytes .../documentation/manual/images/rxwidget1.png | Bin 498851 -> 826680 bytes .../documentation/manual/images/spectrum1.png | Bin 0 -> 18234 bytes .../manual/images/spectrum_wf.png | Bin 0 -> 87344 bytes .../manual/images/sstvdrmselect.png | Bin 18139 -> 0 bytes .../manual/images/transmitdrmb.png | Bin 0 -> 535188 bytes qsstv/documentation/manual/manual.doxy | 4 +- qsstv/documentation/manual/manual.txt | 491 +++- .../documentation/manual/manual/Copying.html | 77 - .../manual/manual/Gallery_image_options.png | Bin 947185 -> 0 bytes .../manual/manual/Gallery_rx.png | Bin 581570 -> 0 bytes .../manual/manual/Gallery_templates.png | Bin 98439 -> 0 bytes .../manual/manual/Gallery_txdrm.png | Bin 184153 -> 0 bytes qsstv/documentation/manual/manual/RXDRM.html | 138 - qsstv/documentation/manual/manual/RXSSTV.html | 121 - qsstv/documentation/manual/manual/TXDRM.html | 124 - qsstv/documentation/manual/manual/TXSSTV.html | 149 - qsstv/documentation/manual/manual/arrow.png | Bin 298 -> 0 bytes .../documentation/manual/manual/arrowdown.png | Bin 246 -> 0 bytes .../manual/manual/arrowright.png | Bin 229 -> 0 bytes qsstv/documentation/manual/manual/bc_s.png | Bin 676 -> 0 bytes qsstv/documentation/manual/manual/bdwn.png | Bin 147 -> 0 bytes qsstv/documentation/manual/manual/binary.png | Bin 189 -> 0 bytes qsstv/documentation/manual/manual/bsr_nfy.png | Bin 8447 -> 0 bytes .../manual/manual/bsr_select.png | Bin 29901 -> 0 bytes .../manual/manual/calibration.png | Bin 17829 -> 0 bytes qsstv/documentation/manual/manual/camera.png | Bin 1627 -> 0 bytes .../manual/manual/changelog.html | 242 -- qsstv/documentation/manual/manual/closed.png | Bin 132 -> 0 bytes qsstv/documentation/manual/manual/config.png | Bin 15212 -> 0 bytes qsstv/documentation/manual/manual/config1.png | Bin 34726 -> 0 bytes .../documentation/manual/manual/config10.png | Bin 61052 -> 0 bytes .../documentation/manual/manual/config11.png | Bin 43280 -> 0 bytes .../documentation/manual/manual/config12.png | Bin 63358 -> 0 bytes qsstv/documentation/manual/manual/config2.png | Bin 83109 -> 0 bytes qsstv/documentation/manual/manual/config3.png | Bin 52566 -> 0 bytes qsstv/documentation/manual/manual/config4.png | Bin 82043 -> 0 bytes qsstv/documentation/manual/manual/config5.png | Bin 78350 -> 0 bytes qsstv/documentation/manual/manual/config6.png | Bin 31946 -> 0 bytes qsstv/documentation/manual/manual/config7.png | Bin 55107 -> 0 bytes qsstv/documentation/manual/manual/config8.png | Bin 72980 -> 0 bytes qsstv/documentation/manual/manual/config9.png | Bin 34998 -> 0 bytes qsstv/documentation/manual/manual/cqrlog1.png | Bin 31072 -> 0 bytes qsstv/documentation/manual/manual/cqrlog2.png | Bin 159450 -> 0 bytes .../documentation/manual/manual/credits.html | 97 - qsstv/documentation/manual/manual/doc.png | Bin 746 -> 0 bytes .../manual/manual/doubletone.png | Bin 233 -> 0 bytes qsstv/documentation/manual/manual/doxygen.png | Bin 3779 -> 0 bytes .../manual/manual/dynsections.js | 97 - qsstv/documentation/manual/manual/edit.png | Bin 1249 -> 0 bytes qsstv/documentation/manual/manual/editor.html | 203 -- .../documentation/manual/manual/editor_1.png | Bin 46417 -> 0 bytes .../documentation/manual/manual/editor_2.png | Bin 65956 -> 0 bytes .../manual/manual/editor_image_size.png | Bin 9662 -> 0 bytes .../documentation/manual/manual/entertext.png | Bin 7303 -> 0 bytes qsstv/documentation/manual/manual/eraser.png | Bin 1226 -> 0 bytes .../manual/manual/externalprog.html | 113 - qsstv/documentation/manual/manual/fcircle.png | Bin 959 -> 0 bytes .../documentation/manual/manual/fileopen.png | Bin 1356 -> 0 bytes .../documentation/manual/manual/filesave.png | Bin 821 -> 0 bytes qsstv/documentation/manual/manual/fix.png | Bin 58939 -> 0 bytes qsstv/documentation/manual/manual/fixdrm.html | 83 - qsstv/documentation/manual/manual/flrig1.png | Bin 44384 -> 0 bytes .../manual/manual/folderclosed.png | Bin 616 -> 0 bytes .../manual/manual/folderopen.png | Bin 597 -> 0 bytes qsstv/documentation/manual/manual/frect.png | Bin 394 -> 0 bytes .../documentation/manual/manual/gallery.html | 98 - .../manual/manual/gettingstarted.html | 379 --- .../manual/manual/hybrid_checkbox.png | Bin 1385 -> 0 bytes .../manual/manual/hybrid_dis_checkbox.png | Bin 1181 -> 0 bytes .../manual/manual/imagepopup.html | 93 - qsstv/documentation/manual/manual/index.html | 101 - qsstv/documentation/manual/manual/index.js | 29 - .../manual/manual/installation.html | 114 - qsstv/documentation/manual/manual/jquery.js | 68 - qsstv/documentation/manual/manual/line.png | Bin 624 -> 0 bytes .../documentation/manual/manual/multiline.png | Bin 10665 -> 0 bytes qsstv/documentation/manual/manual/nav_f.png | Bin 153 -> 0 bytes qsstv/documentation/manual/manual/nav_g.png | Bin 95 -> 0 bytes qsstv/documentation/manual/manual/nav_h.png | Bin 98 -> 0 bytes qsstv/documentation/manual/manual/navtree.css | 143 - qsstv/documentation/manual/manual/navtree.js | 523 ---- .../manual/manual/navtreedata.js | 14 - .../manual/manual/navtreeindex0.js | 30 - qsstv/documentation/manual/manual/open.png | Bin 123 -> 0 bytes qsstv/documentation/manual/manual/pages.html | 79 - qsstv/documentation/manual/manual/qsstv.css | 835 ------ .../manual/manual/receivedrm.png | Bin 283367 -> 0 bytes .../manual/manual/refreshbutton.png | Bin 1790 -> 0 bytes qsstv/documentation/manual/manual/replay.png | Bin 1417 -> 0 bytes qsstv/documentation/manual/manual/resize.js | 97 - .../manual/manual/rxdrm_constellation.png | Bin 2357 -> 0 bytes .../manual/manual/rxdrm_segments.png | Bin 492 -> 0 bytes .../manual/manual/rxdrm_status.png | Bin 10254 -> 0 bytes .../documentation/manual/manual/rxwidget1.png | Bin 498851 -> 0 bytes .../documentation/manual/manual/splitbar.png | Bin 314 -> 0 bytes qsstv/documentation/manual/manual/start.png | Bin 1263 -> 0 bytes .../manual/manual/statusbar.html | 106 - .../documentation/manual/manual/statusbar.png | Bin 5573 -> 0 bytes .../manual/manual/statusleds.png | Bin 1604 -> 0 bytes qsstv/documentation/manual/manual/stop.png | Bin 1122 -> 0 bytes qsstv/documentation/manual/manual/sweep.png | Bin 278 -> 0 bytes .../documentation/manual/manual/sync_off.png | Bin 853 -> 0 bytes qsstv/documentation/manual/manual/sync_on.png | Bin 845 -> 0 bytes qsstv/documentation/manual/manual/tab_a.png | Bin 142 -> 0 bytes qsstv/documentation/manual/manual/tab_b.png | Bin 169 -> 0 bytes qsstv/documentation/manual/manual/tab_h.png | Bin 177 -> 0 bytes qsstv/documentation/manual/manual/tab_s.png | Bin 184 -> 0 bytes qsstv/documentation/manual/manual/tabs.css | 60 - qsstv/documentation/manual/manual/text.png | Bin 517 -> 0 bytes qsstv/documentation/manual/manual/todo1.html | 81 - qsstv/documentation/manual/manual/tone.png | Bin 358 -> 0 bytes .../manual/manual/transmitdrm.png | Bin 295255 -> 0 bytes .../manual/manual/txdrm_compression.png | Bin 2285 -> 0 bytes .../manual/manual/txdrm_options.png | Bin 13080 -> 0 bytes .../manual/manual/txdrm_status.png | Bin 12622 -> 0 bytes .../documentation/manual/manual/txwidget1.png | Bin 332079 -> 0 bytes qsstv/documentation/manual/manual/vk4aes.jpg | Bin 11489 -> 0 bytes .../documentation/manual/manual/waterfall.png | Bin 165766 -> 0 bytes .../manual/manual/wftextpopup.png | Bin 22203 -> 0 bytes .../documentation/manual/manual/whatsnew.html | 91 - qsstv/documentation/manual/qsstv.css | 1449 +++++++--- qsstv/drmrx/bits2bytes.cpp | 38 - qsstv/drmrx/channeldecode.cpp | 1 - qsstv/drmrx/crc16_bytewise.cpp | 53 +- qsstv/drmrx/deinterleaver.cpp | 13 +- qsstv/drmrx/demodulator.cpp | 3 +- qsstv/drmrx/demodulator.h | 6 - qsstv/drmrx/drm.cpp | 2 + qsstv/drmrx/drm.h | 1 + qsstv/drmrx/drmstatusframe.cpp | 24 +- qsstv/drmrx/drmstatusframe.h | 5 +- qsstv/drmrx/fixform.cpp | 14 +- qsstv/drmrx/fixform.h | 2 +- qsstv/drmrx/getmode.cpp | 2 +- qsstv/drmrx/getofdmsync.cpp | 2 +- qsstv/drmrx/newfft.cpp | 2 +- qsstv/drmrx/sourcedecoder.cpp | 229 +- qsstv/drmrx/sourcedecoder.h | 15 +- qsstv/drmtx/bsrform.cpp | 2 +- qsstv/drmtx/bsrform.h | 4 +- qsstv/drmtx/common/FAC/FAC.h | 2 +- qsstv/drmtx/common/SDC/SDC.h | 2 +- qsstv/drmtx/common/SDC/SDCTransmit.cpp | 10 +- qsstv/drmtx/common/csoundout.cpp | 4 +- qsstv/drmtx/common/datadecoding/DABMOT.cpp | 1492 +++++----- qsstv/drmtx/common/datadecoding/DABMOT.h | 758 ++--- qsstv/drmtx/common/datadecoding/DataDecoder.h | 2 +- .../common/datadecoding/MOTSlideShow.cpp | 2 +- .../drmtx/common/datadecoding/MOTSlideShow.h | 2 +- .../common/interleaver/BlockInterleaver.h | 2 +- qsstv/drmtx/common/mlc/BitInterleaver.h | 2 +- qsstv/drmtx/common/mlc/ChannelCode.h | 2 +- qsstv/drmtx/common/mlc/ConvEncoder.h | 2 +- qsstv/drmtx/common/mlc/EnergyDispersal.h | 2 +- qsstv/drmtx/common/mlc/QAMMapping.h | 2 +- .../common/ofdmcellmapping/CellMappingTable.h | 2 +- qsstv/drmtx/common/soundinterface.h | 2 +- qsstv/drmtx/common/tables/TableFAC.cpp | 1542 +++++----- qsstv/drmtx/common/tables/TableFAC.h | 8 +- qsstv/drmtx/common/util/Modul.h | 2 +- qsstv/drmtx/common/util/Utilities.h | 2 +- qsstv/drmtx/config.h | 27 - qsstv/drmtx/drmparams.h | 6 + qsstv/drmtx/drmtx.cpp | 171 +- qsstv/drmtx/drmtx.h | 12 +- qsstv/dsp/downsamplefilter.cpp | 422 +-- qsstv/dsp/downsamplefilter.h | 12 +- qsstv/dsp/filter.cpp | 237 +- qsstv/dsp/filter.h | 5 +- qsstv/dsp/filterparam.cpp | 341 +-- qsstv/dsp/filterparam.h | 30 +- qsstv/dsp/filters.cpp | 84 +- qsstv/dsp/filters.h | 4 +- qsstv/dsp/nco.h | 4 +- qsstv/dsp/synthes.h | 4 +- qsstv/editor/basegraphicitem.cpp | 568 ++++ qsstv/editor/basegraphicitem.h | 143 + qsstv/editor/editor.cpp | 69 +- qsstv/editor/editor.h | 5 +- qsstv/editor/editorform.ui | 675 +---- qsstv/editor/editorscene.cpp | 402 ++- qsstv/editor/editorscene.h | 146 +- qsstv/editor/editorview.cpp | 320 +-- qsstv/editor/editorview.h | 120 +- qsstv/editor/gradientdialog.cpp | 31 +- qsstv/editor/gradientdialog.h | 3 +- qsstv/editor/gradientform.ui | 119 +- qsstv/editor/graphicitems.cpp | 666 +---- qsstv/editor/graphicitems.h | 221 +- qsstv/editor/qdialog_p.h | 113 - qsstv/editor/templateviewer.cpp | 21 + qsstv/editor/templateviewer.h | 23 + qsstv/editor/templateviewer.ui | 71 + qsstv/icons/qsstv.png | Bin 1091 -> 3754 bytes qsstv/main.cpp | 5 +- qsstv/mainwidgets/gallerywidget.cpp | 2 +- qsstv/mainwidgets/rxfunctions.cpp | 24 +- qsstv/mainwidgets/rxfunctions.h | 3 +- qsstv/mainwidgets/rxwidget.cpp | 141 +- qsstv/mainwidgets/rxwidget.h | 16 +- qsstv/mainwidgets/rxwidget.ui | 67 +- qsstv/mainwidgets/txfunctions.cpp | 109 +- qsstv/mainwidgets/txfunctions.h | 4 +- qsstv/mainwidgets/txwidget.cpp | 446 +-- qsstv/mainwidgets/txwidget.h | 76 +- qsstv/mainwidgets/txwidget.ui | 13 +- qsstv/mainwindow.cpp | 95 +- qsstv/mainwindow.h | 4 +- qsstv/mainwindow.ui | 7 +- qsstv/qsstv.desktop | 13 + qsstv/qsstv.pro | 111 +- qsstv/qsstv.qrc | 1 + qsstv/rig/rigcontrol.cpp | 522 ++-- qsstv/rig/rigcontrol.h | 5 +- qsstv/scope/scopeplot.h | 2 +- qsstv/scope/scopeview.cpp | 11 +- qsstv/sound/calibration.cpp | 4 +- qsstv/sound/soundalsa.cpp | 373 +-- qsstv/sound/soundbase.cpp | 378 +-- qsstv/sound/soundbase.h | 6 +- qsstv/sound/soundpulse.cpp | 27 +- qsstv/sound/soundpulse.h | 5 +- qsstv/sound/waterfalltext.cpp | 13 +- qsstv/sound/waterfalltext.h | 5 +- qsstv/sound/wavio.cpp | 80 +- qsstv/sound/wavio.h | 4 +- qsstv/sstv/modes/modeavt.cpp | 85 +- qsstv/sstv/modes/modeavt.h | 9 +- qsstv/sstv/modes/modebase.cpp | 57 +- qsstv/sstv/modes/modebase.h | 16 +- qsstv/sstv/modes/modegbr.cpp | 7 +- qsstv/sstv/modes/modegbr.h | 2 +- qsstv/sstv/modes/moderobot1.cpp | 55 +- qsstv/sstv/modes/moderobot2.cpp | 37 - qsstv/sstv/modes/modes.h | 2 +- qsstv/sstv/sstvparam.cpp | 23 +- qsstv/sstv/sstvparam.h | 12 +- qsstv/sstv/sstvrx.cpp | 84 +- qsstv/sstv/sstvrx.h | 21 +- qsstv/sstv/sstvtx.cpp | 7 +- qsstv/sstv/syncprocessor.cpp | 507 ++-- qsstv/sstv/syncprocessor.h | 52 +- qsstv/sstv/visfskid.cpp | 20 +- qsstv/sstv/visfskid.h | 5 +- qsstv/utils/arraydumper.cpp | 215 +- qsstv/utils/arraydumper.h | 1 + qsstv/utils/buffermanag.h | 2 +- qsstv/utils/dirdialog.cpp | 7 +- qsstv/utils/fftcalc.cpp | 36 +- qsstv/utils/fftcalc.h | 4 +- qsstv/utils/ftp.cpp | 739 ----- qsstv/utils/ftp.h | 120 - qsstv/utils/ftpevents.h | 130 + qsstv/utils/ftpfunctions.cpp | 293 ++ qsstv/utils/ftpfunctions.h | 79 + qsstv/utils/ftpthread.cpp | 604 ++++ qsstv/utils/ftpthread.h | 114 + qsstv/utils/jp2io.cpp | 39 +- qsstv/utils/jp2io.h | 16 +- qsstv/utils/logging.cpp | 54 +- qsstv/utils/logging.h | 16 +- qsstv/utils/loggingparams.cpp | 87 +- qsstv/utils/loggingparams.h | 7 +- qsstv/utils/qftp.cpp | 2209 +++++++-------- qsstv/utils/qftp.h | 11 +- qsstv/utils/qurlinfo.cpp | 27 +- qsstv/utils/reedsolomoncoder.cpp | 4 +- qsstv/utils/reedsolomoncoder.h | 4 +- qsstv/utils/rs.cpp | 6 +- qsstv/utils/supportfunctions.cpp | 25 +- qsstv/utils/supportfunctions.h | 6 + qsstv/videocapt/cameradialog.cpp | 322 +-- qsstv/videocapt/imagesettings.cpp | 5 +- qsstv/videocapt/v4l2control.cpp | 2 +- qsstv/videocapt/videocapture.cpp | 2 +- qsstv/widgets/extviewer.cpp | 2 +- qsstv/widgets/fftdisplay.cpp | 70 +- qsstv/widgets/fftdisplay.h | 4 - qsstv/widgets/imagematrix.cpp | 13 +- qsstv/widgets/imageviewer.cpp | 333 ++- qsstv/widgets/imageviewer.h | 36 +- qsstv/widgets/spectrumwidget.cpp | 16 +- qsstv/widgets/spectrumwidget.h | 2 +- qsstv/widgets/spectrumwidget.ui | 5 +- qsstv/widgets/waterfallform.cpp | 2 +- qsstv_9_2.pro => qsstv_9.4.pro | 0 qwt/qwt.pro | 51 +- qwt/qwt_analog_clock.cpp | 244 -- qwt/qwt_analog_clock.h | 93 - qwt/qwt_arrow_button.cpp | 333 --- qwt/qwt_arrow_button.h | 52 - qwt/qwt_compass.cpp | 308 -- qwt/qwt_compass.h | 83 - qwt/qwt_compass_rose.cpp | 269 -- qwt/qwt_compass_rose.h | 89 - qwt/qwt_counter.cpp | 776 ----- qwt/qwt_counter.h | 161 -- qwt/qwt_date.cpp | 654 ----- qwt/qwt_date.h | 128 - qwt/qwt_date_scale_draw.cpp | 269 -- qwt/qwt_date_scale_draw.h | 77 - qwt/qwt_date_scale_engine.cpp | 1247 --------- qwt/qwt_date_scale_engine.h | 77 - qwt/qwt_dial.cpp | 872 ------ qwt/qwt_dial.h | 168 -- qwt/qwt_dial_needle.cpp | 440 --- qwt/qwt_dial_needle.h | 187 -- qwt/qwt_knob.cpp | 845 ------ qwt/qwt_knob.h | 178 -- qwt/qwt_picker_machine.cpp | 733 ++--- qwt/qwt_plot_abstract_barchart.cpp | 367 --- qwt/qwt_plot_abstract_barchart.h | 97 - qwt/qwt_plot_barchart.cpp | 455 --- qwt/qwt_plot_barchart.h | 118 - qwt/qwt_plot_canvas.cpp | 2 +- qwt/qwt_plot_curve.h | 2 +- qwt/qwt_plot_histogram.cpp | 690 ----- qwt/qwt_plot_histogram.h | 139 - qwt/qwt_plot_intervalcurve.cpp | 603 ---- qwt/qwt_plot_intervalcurve.h | 132 - qwt/qwt_plot_marker.h | 2 +- qwt/qwt_plot_multi_barchart.cpp | 740 ----- qwt/qwt_plot_multi_barchart.h | 127 - qwt/qwt_plot_seriesitem.h | 2 +- qwt/qwt_plot_spectrocurve.cpp | 321 --- qwt/qwt_plot_spectrocurve.h | 79 - qwt/qwt_plot_spectrogram.cpp | 660 ----- qwt/qwt_plot_spectrogram.h | 118 - qwt/qwt_plot_svgitem.h | 61 - qwt/qwt_plot_tradingcurve.cpp | 682 ----- qwt/qwt_plot_tradingcurve.h | 174 -- qwt/qwt_plot_zoneitem.cpp | 315 --- qwt/qwt_plot_zoneitem.h | 65 - qwt/qwt_sampling_thread.cpp | 106 - qwt/qwt_sampling_thread.h | 50 - qwt/qwt_system_clock.cpp | 396 --- qwt/qwt_system_clock.h | 47 - qwt/qwt_text.h | 2 +- qwt/qwt_thermo.cpp | 1004 ------- qwt/qwt_thermo.h | 178 -- 410 files changed, 15181 insertions(+), 31412 deletions(-) delete mode 100644 qsstv/config/hybridnotifyconfig.cpp delete mode 100644 qsstv/config/hybridnotifyconfig.h delete mode 100644 qsstv/config/hybridnotifyconfig.ui create mode 100644 qsstv/documentation/api/api.doxy create mode 100644 qsstv/documentation/manual/images/cat_flrig.png create mode 100644 qsstv/documentation/manual/images/editor_1b.png create mode 100644 qsstv/documentation/manual/images/editor_2b.png create mode 100644 qsstv/documentation/manual/images/editor_image_sizeb.png create mode 100644 qsstv/documentation/manual/images/editor_resize.png create mode 100644 qsstv/documentation/manual/images/editor_rotate.png create mode 100644 qsstv/documentation/manual/images/editor_rotate2.png create mode 100644 qsstv/documentation/manual/images/editor_text_rotate.png create mode 100644 qsstv/documentation/manual/images/entertextb.png create mode 100644 qsstv/documentation/manual/images/multilineb.png create mode 100644 qsstv/documentation/manual/images/pavu_playback.png create mode 100644 qsstv/documentation/manual/images/pavu_rec.png create mode 100644 qsstv/documentation/manual/images/spectrum1.png create mode 100644 qsstv/documentation/manual/images/spectrum_wf.png delete mode 100644 qsstv/documentation/manual/images/sstvdrmselect.png create mode 100644 qsstv/documentation/manual/images/transmitdrmb.png delete mode 100644 qsstv/documentation/manual/manual/Copying.html delete mode 100644 qsstv/documentation/manual/manual/Gallery_image_options.png delete mode 100644 qsstv/documentation/manual/manual/Gallery_rx.png delete mode 100644 qsstv/documentation/manual/manual/Gallery_templates.png delete mode 100644 qsstv/documentation/manual/manual/Gallery_txdrm.png delete mode 100644 qsstv/documentation/manual/manual/RXDRM.html delete mode 100644 qsstv/documentation/manual/manual/RXSSTV.html delete mode 100644 qsstv/documentation/manual/manual/TXDRM.html delete mode 100644 qsstv/documentation/manual/manual/TXSSTV.html delete mode 100644 qsstv/documentation/manual/manual/arrow.png delete mode 100644 qsstv/documentation/manual/manual/arrowdown.png delete mode 100644 qsstv/documentation/manual/manual/arrowright.png delete mode 100644 qsstv/documentation/manual/manual/bc_s.png delete mode 100644 qsstv/documentation/manual/manual/bdwn.png delete mode 100644 qsstv/documentation/manual/manual/binary.png delete mode 100644 qsstv/documentation/manual/manual/bsr_nfy.png delete mode 100644 qsstv/documentation/manual/manual/bsr_select.png delete mode 100644 qsstv/documentation/manual/manual/calibration.png delete mode 100644 qsstv/documentation/manual/manual/camera.png delete mode 100644 qsstv/documentation/manual/manual/changelog.html delete mode 100644 qsstv/documentation/manual/manual/closed.png delete mode 100644 qsstv/documentation/manual/manual/config.png delete mode 100644 qsstv/documentation/manual/manual/config1.png delete mode 100644 qsstv/documentation/manual/manual/config10.png delete mode 100644 qsstv/documentation/manual/manual/config11.png delete mode 100644 qsstv/documentation/manual/manual/config12.png delete mode 100644 qsstv/documentation/manual/manual/config2.png delete mode 100644 qsstv/documentation/manual/manual/config3.png delete mode 100644 qsstv/documentation/manual/manual/config4.png delete mode 100644 qsstv/documentation/manual/manual/config5.png delete mode 100644 qsstv/documentation/manual/manual/config6.png delete mode 100644 qsstv/documentation/manual/manual/config7.png delete mode 100644 qsstv/documentation/manual/manual/config8.png delete mode 100644 qsstv/documentation/manual/manual/config9.png delete mode 100644 qsstv/documentation/manual/manual/cqrlog1.png delete mode 100644 qsstv/documentation/manual/manual/cqrlog2.png delete mode 100644 qsstv/documentation/manual/manual/credits.html delete mode 100644 qsstv/documentation/manual/manual/doc.png delete mode 100644 qsstv/documentation/manual/manual/doubletone.png delete mode 100644 qsstv/documentation/manual/manual/doxygen.png delete mode 100644 qsstv/documentation/manual/manual/dynsections.js delete mode 100644 qsstv/documentation/manual/manual/edit.png delete mode 100644 qsstv/documentation/manual/manual/editor.html delete mode 100644 qsstv/documentation/manual/manual/editor_1.png delete mode 100644 qsstv/documentation/manual/manual/editor_2.png delete mode 100644 qsstv/documentation/manual/manual/editor_image_size.png delete mode 100644 qsstv/documentation/manual/manual/entertext.png delete mode 100644 qsstv/documentation/manual/manual/eraser.png delete mode 100644 qsstv/documentation/manual/manual/externalprog.html delete mode 100644 qsstv/documentation/manual/manual/fcircle.png delete mode 100644 qsstv/documentation/manual/manual/fileopen.png delete mode 100644 qsstv/documentation/manual/manual/filesave.png delete mode 100644 qsstv/documentation/manual/manual/fix.png delete mode 100644 qsstv/documentation/manual/manual/fixdrm.html delete mode 100644 qsstv/documentation/manual/manual/flrig1.png delete mode 100644 qsstv/documentation/manual/manual/folderclosed.png delete mode 100644 qsstv/documentation/manual/manual/folderopen.png delete mode 100644 qsstv/documentation/manual/manual/frect.png delete mode 100644 qsstv/documentation/manual/manual/gallery.html delete mode 100644 qsstv/documentation/manual/manual/gettingstarted.html delete mode 100644 qsstv/documentation/manual/manual/hybrid_checkbox.png delete mode 100644 qsstv/documentation/manual/manual/hybrid_dis_checkbox.png delete mode 100644 qsstv/documentation/manual/manual/imagepopup.html delete mode 100644 qsstv/documentation/manual/manual/index.html delete mode 100644 qsstv/documentation/manual/manual/index.js delete mode 100644 qsstv/documentation/manual/manual/installation.html delete mode 100644 qsstv/documentation/manual/manual/jquery.js delete mode 100644 qsstv/documentation/manual/manual/line.png delete mode 100644 qsstv/documentation/manual/manual/multiline.png delete mode 100644 qsstv/documentation/manual/manual/nav_f.png delete mode 100644 qsstv/documentation/manual/manual/nav_g.png delete mode 100644 qsstv/documentation/manual/manual/nav_h.png delete mode 100644 qsstv/documentation/manual/manual/navtree.css delete mode 100644 qsstv/documentation/manual/manual/navtree.js delete mode 100644 qsstv/documentation/manual/manual/navtreedata.js delete mode 100644 qsstv/documentation/manual/manual/navtreeindex0.js delete mode 100644 qsstv/documentation/manual/manual/open.png delete mode 100644 qsstv/documentation/manual/manual/pages.html delete mode 100644 qsstv/documentation/manual/manual/qsstv.css delete mode 100644 qsstv/documentation/manual/manual/receivedrm.png delete mode 100644 qsstv/documentation/manual/manual/refreshbutton.png delete mode 100644 qsstv/documentation/manual/manual/replay.png delete mode 100644 qsstv/documentation/manual/manual/resize.js delete mode 100644 qsstv/documentation/manual/manual/rxdrm_constellation.png delete mode 100644 qsstv/documentation/manual/manual/rxdrm_segments.png delete mode 100644 qsstv/documentation/manual/manual/rxdrm_status.png delete mode 100644 qsstv/documentation/manual/manual/rxwidget1.png delete mode 100644 qsstv/documentation/manual/manual/splitbar.png delete mode 100644 qsstv/documentation/manual/manual/start.png delete mode 100644 qsstv/documentation/manual/manual/statusbar.html delete mode 100644 qsstv/documentation/manual/manual/statusbar.png delete mode 100644 qsstv/documentation/manual/manual/statusleds.png delete mode 100644 qsstv/documentation/manual/manual/stop.png delete mode 100644 qsstv/documentation/manual/manual/sweep.png delete mode 100644 qsstv/documentation/manual/manual/sync_off.png delete mode 100644 qsstv/documentation/manual/manual/sync_on.png delete mode 100644 qsstv/documentation/manual/manual/tab_a.png delete mode 100644 qsstv/documentation/manual/manual/tab_b.png delete mode 100644 qsstv/documentation/manual/manual/tab_h.png delete mode 100644 qsstv/documentation/manual/manual/tab_s.png delete mode 100644 qsstv/documentation/manual/manual/tabs.css delete mode 100644 qsstv/documentation/manual/manual/text.png delete mode 100644 qsstv/documentation/manual/manual/todo1.html delete mode 100644 qsstv/documentation/manual/manual/tone.png delete mode 100644 qsstv/documentation/manual/manual/transmitdrm.png delete mode 100644 qsstv/documentation/manual/manual/txdrm_compression.png delete mode 100644 qsstv/documentation/manual/manual/txdrm_options.png delete mode 100644 qsstv/documentation/manual/manual/txdrm_status.png delete mode 100644 qsstv/documentation/manual/manual/txwidget1.png delete mode 100644 qsstv/documentation/manual/manual/vk4aes.jpg delete mode 100644 qsstv/documentation/manual/manual/waterfall.png delete mode 100644 qsstv/documentation/manual/manual/wftextpopup.png delete mode 100644 qsstv/documentation/manual/manual/whatsnew.html create mode 100644 qsstv/editor/basegraphicitem.cpp create mode 100644 qsstv/editor/basegraphicitem.h delete mode 100644 qsstv/editor/qdialog_p.h create mode 100644 qsstv/editor/templateviewer.cpp create mode 100644 qsstv/editor/templateviewer.h create mode 100644 qsstv/editor/templateviewer.ui create mode 100644 qsstv/qsstv.desktop delete mode 100644 qsstv/utils/ftp.cpp delete mode 100644 qsstv/utils/ftp.h create mode 100644 qsstv/utils/ftpevents.h create mode 100644 qsstv/utils/ftpfunctions.cpp create mode 100644 qsstv/utils/ftpfunctions.h create mode 100644 qsstv/utils/ftpthread.cpp create mode 100644 qsstv/utils/ftpthread.h rename qsstv_9_2.pro => qsstv_9.4.pro (100%) delete mode 100644 qwt/qwt_analog_clock.cpp delete mode 100644 qwt/qwt_analog_clock.h delete mode 100644 qwt/qwt_arrow_button.cpp delete mode 100644 qwt/qwt_arrow_button.h delete mode 100644 qwt/qwt_compass.cpp delete mode 100644 qwt/qwt_compass.h delete mode 100644 qwt/qwt_compass_rose.cpp delete mode 100644 qwt/qwt_compass_rose.h delete mode 100644 qwt/qwt_counter.cpp delete mode 100644 qwt/qwt_counter.h delete mode 100644 qwt/qwt_date.cpp delete mode 100644 qwt/qwt_date.h delete mode 100644 qwt/qwt_date_scale_draw.cpp delete mode 100644 qwt/qwt_date_scale_draw.h delete mode 100644 qwt/qwt_date_scale_engine.cpp delete mode 100644 qwt/qwt_date_scale_engine.h delete mode 100644 qwt/qwt_dial.cpp delete mode 100644 qwt/qwt_dial.h delete mode 100644 qwt/qwt_dial_needle.cpp delete mode 100644 qwt/qwt_dial_needle.h delete mode 100644 qwt/qwt_knob.cpp delete mode 100644 qwt/qwt_knob.h delete mode 100644 qwt/qwt_plot_abstract_barchart.cpp delete mode 100644 qwt/qwt_plot_abstract_barchart.h delete mode 100644 qwt/qwt_plot_barchart.cpp delete mode 100644 qwt/qwt_plot_barchart.h delete mode 100644 qwt/qwt_plot_histogram.cpp delete mode 100644 qwt/qwt_plot_histogram.h delete mode 100644 qwt/qwt_plot_intervalcurve.cpp delete mode 100644 qwt/qwt_plot_intervalcurve.h delete mode 100644 qwt/qwt_plot_multi_barchart.cpp delete mode 100644 qwt/qwt_plot_multi_barchart.h delete mode 100644 qwt/qwt_plot_spectrocurve.cpp delete mode 100644 qwt/qwt_plot_spectrocurve.h delete mode 100644 qwt/qwt_plot_spectrogram.cpp delete mode 100644 qwt/qwt_plot_spectrogram.h delete mode 100644 qwt/qwt_plot_svgitem.h delete mode 100644 qwt/qwt_plot_tradingcurve.cpp delete mode 100644 qwt/qwt_plot_tradingcurve.h delete mode 100644 qwt/qwt_plot_zoneitem.cpp delete mode 100644 qwt/qwt_plot_zoneitem.h delete mode 100644 qwt/qwt_sampling_thread.cpp delete mode 100644 qwt/qwt_sampling_thread.h delete mode 100644 qwt/qwt_system_clock.cpp delete mode 100644 qwt/qwt_system_clock.h delete mode 100644 qwt/qwt_thermo.cpp delete mode 100644 qwt/qwt_thermo.h diff --git a/README.txt b/README.txt index 7da08df..8878ac8 100644 --- a/README.txt +++ b/README.txt @@ -1,5 +1,5 @@ For the full manual please go to -http://users.telenet.be/on4qz/qsstv_9/manual/index.html +http://users.telenet.be/on4qz/qsstv/manual/index.html There you'll find the complete installation instructions wich is part of the user manual. diff --git a/qsstv/appdefs.h b/qsstv/appdefs.h index 3cd9708..4b28ca7 100644 --- a/qsstv/appdefs.h +++ b/qsstv/appdefs.h @@ -16,6 +16,9 @@ using namespace std; /* Because of the library: "complex" */ #define DOWNSAMPLESIZE (SUBSAMPLINGFACTOR*RXSTRIPE) #define SAMPLERATE (BASESAMPLERATE/SUBSAMPLINGFACTOR) + +#undef DISABLENARROW + typedef double DSPFLOAT; typedef unsigned char byte; diff --git a/qsstv/appglobal.cpp b/qsstv/appglobal.cpp index 751fd8c..324ff82 100644 --- a/qsstv/appglobal.cpp +++ b/qsstv/appglobal.cpp @@ -5,9 +5,9 @@ #include -const QString MAJORVERSION = "9.2"; +const QString MAJORVERSION = "9.4"; const QString CONFIGVERSION = "9.0"; -const QString MINORVERSION = ".6"; +const QString MINORVERSION = ".4"; const QString LOGVERSION = ("qsstv."+MAJORVERSION+MINORVERSION+".log"); const QString ORGANIZATION = "ON4QZ"; const QString APPLICATION = ("qsstv_" +CONFIGVERSION); @@ -24,10 +24,13 @@ logFile *logFilePtr; configDialog *configDialogPtr; -ftpInterface *notifyRXIntf; -ftpInterface *hybridTxIntf; -ftpInterface *notifyTXIntf; -ftpInterface *onlineStatusIntf; +ftpThread *notifyRXIntfPtr; +ftpThread *hybridTxIntfPtr; +ftpThread *notifyTXIntfPtr; +ftpThread *onlineStatusIntfPtr; +ftpThread *hybridRxIntfPtr; +ftpThread *saveImageIntfPtr; + @@ -42,7 +45,11 @@ xmlInterface *xmlIntfPtr; logBook *logBookPtr; fileWatcher *fileWatcherPtr; + +int fftNumBlocks=2; bool useHybrid; +bool inStartup; + @@ -78,6 +85,7 @@ void globalInit() void globalEnd(void) { + logFilePtr->writeSettings(); logFilePtr->close(); } diff --git a/qsstv/appglobal.h b/qsstv/appglobal.h index f11ec08..814743a 100644 --- a/qsstv/appglobal.h +++ b/qsstv/appglobal.h @@ -15,7 +15,7 @@ class xmlInterface; class logBook; class dispatcher; class fileWatcher; -class ftpInterface; +class ftpThread; enum etransmissionMode {TRXSSTV,TRXDRM,TRXNOMODE}; @@ -50,18 +50,23 @@ extern xmlInterface *xmlIntfPtr; extern configDialog *configDialogPtr; extern logBook *logBookPtr; +extern int fftNumBlocks; + extern QPixmap *greenPXMPtr; extern QPixmap *redPXMPtr; extern logFile *logFilePtr; extern bool useHybrid; +extern bool inStartup; -extern ftpInterface *notifyRXIntf; -extern ftpInterface *hybridTxIntf; -extern ftpInterface *notifyTXIntf; -extern ftpInterface *onlineStatusIntf; +extern ftpThread *notifyRXIntfPtr; +extern ftpThread *hybridTxIntfPtr; +extern ftpThread *notifyTXIntfPtr; +extern ftpThread *onlineStatusIntfPtr; +extern ftpThread *hybridRxIntfPtr; +extern ftpThread *saveImageIntfPtr; extern etransmissionMode transmissionModeIndex; // SSTV , DRM diff --git a/qsstv/config/baseconfig.cpp b/qsstv/config/baseconfig.cpp index 02939cf..17c0683 100644 --- a/qsstv/config/baseconfig.cpp +++ b/qsstv/config/baseconfig.cpp @@ -1,3 +1,24 @@ +/************************************************************************** +* Copyright (C) 2000-2019 by Johan Maes * +* on4qz@telenet.be * +* http://users.telenet.be/on4qz * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ + #include "baseconfig.h" baseConfig::baseConfig(QWidget *parent):QWidget(parent) diff --git a/qsstv/config/baseconfig.h b/qsstv/config/baseconfig.h index 71352ea..c85a0b2 100644 --- a/qsstv/config/baseconfig.h +++ b/qsstv/config/baseconfig.h @@ -4,7 +4,7 @@ #include #include #include -#include "utils/supportfunctions.h" +#include "supportfunctions.h" class baseConfig: public QWidget { diff --git a/qsstv/config/configdialog.cpp b/qsstv/config/configdialog.cpp index cf5381e..8198b84 100644 --- a/qsstv/config/configdialog.cpp +++ b/qsstv/config/configdialog.cpp @@ -1,3 +1,23 @@ +/************************************************************************** +* Copyright (C) 2000-2019 by Johan Maes * +* on4qz@telenet.be * +* http://users.telenet.be/on4qz * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ #include "configdialog.h" #include "ui_configdialog.h" #include "gallerywidget.h" @@ -28,7 +48,6 @@ void configDialog::readSettings() ui->ftpWidget->readSettings(); ui->guiWidget->readSettings(); ui->hybridWidget->readSettings(); - ui->hybridNotifyWidget->readSettings(); ui->operatorWidget->readSettings(); ui->repeaterWidget->readSettings(); ui->catWidget->readSettings(); @@ -47,7 +66,6 @@ void configDialog::writeSettings() ui->ftpWidget->writeSettings(); ui->repeaterWidget->writeSettings(); ui->hybridWidget->writeSettings(); - ui->hybridNotifyWidget->writeSettings(); ui->drmProfilesWidget->writeSettings(); ui->cwWidget->writeSettings(); ui->waterfallWidget->writeSettings(); diff --git a/qsstv/config/configdialog.ui b/qsstv/config/configdialog.ui index 4e4a02a..8befaaa 100644 --- a/qsstv/config/configdialog.ui +++ b/qsstv/config/configdialog.ui @@ -32,7 +32,7 @@ - 2 + 10 @@ -284,31 +284,6 @@ - - - Notifications - - - - 1 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - DRM Profiles @@ -446,12 +421,6 @@
frequencyselectwidget.h
1 - - hybridNotifyConfig - QWidget -
hybridnotifyconfig.h
- 1 -
diff --git a/qsstv/config/configparams.h b/qsstv/config/configparams.h index 8efe02e..d033655 100644 --- a/qsstv/config/configparams.h +++ b/qsstv/config/configparams.h @@ -7,7 +7,6 @@ #include "ftpconfig.h" #include "guiconfig.h" #include "hybridconfig.h" -#include "hybridnotifyconfig.h" #include "operatorconfig.h" #include "repeaterconfig.h" #include "rigconfig.h" diff --git a/qsstv/config/cwconfig.cpp b/qsstv/config/cwconfig.cpp index ca79f88..1f4ab4b 100644 --- a/qsstv/config/cwconfig.cpp +++ b/qsstv/config/cwconfig.cpp @@ -1,3 +1,24 @@ +/************************************************************************** +* Copyright (C) 2000-2019 by Johan Maes * +* on4qz@telenet.be * +* http://users.telenet.be/on4qz * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ + #include "cwconfig.h" #include "ui_cwconfig.h" diff --git a/qsstv/config/directoriesconfig.cpp b/qsstv/config/directoriesconfig.cpp index 0698491..4240cb5 100644 --- a/qsstv/config/directoriesconfig.cpp +++ b/qsstv/config/directoriesconfig.cpp @@ -1,3 +1,24 @@ +/************************************************************************** +* Copyright (C) 2000-2019 by Johan Maes * +* on4qz@telenet.be * +* http://users.telenet.be/on4qz * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ + #include "directoriesconfig.h" #include "ui_directoriesconfig.h" @@ -39,10 +60,10 @@ void directoriesConfig::readSettings() rxSSTVImagesPath=qSettings.value("rxSSTVImagesPath",QString(getenv("HOME"))+"/qsstv/rx_sstv/").toString(); rxDRMImagesPath=qSettings.value("rxDRMImagesPath",QString(getenv("HOME"))+"/qsstv/rx_drm/").toString(); txSSTVImagesPath=qSettings.value("txSSTVImagesPath",QString(getenv("HOME"))+"/qsstv/tx_sstv/").toString(); - txDRMImagesPath=qSettings.value("txDRMImagesPath",QString(getenv("HOME"))+"/tx_drm/").toString(); - txStockImagesPath=qSettings.value("txStockImagesPath",QString(getenv("HOME"))+"/tx_stock/").toString(); - templatesPath=qSettings.value("templatesPath",QString(getenv("HOME"))+"/templates/").toString(); - audioPath=qSettings.value("audioPath",QString(getenv("HOME"))+"/audio/").toString(); + txDRMImagesPath=qSettings.value("txDRMImagesPath",QString(getenv("HOME"))+"/qsstv/tx_drm/").toString(); + txStockImagesPath=qSettings.value("txStockImagesPath",QString(getenv("HOME"))+"/qsstv/tx_stock/").toString(); + templatesPath=qSettings.value("templatesPath",QString(getenv("HOME"))+"/qsstv/templates/").toString(); + audioPath=qSettings.value("audioPath",QString(getenv("HOME"))+"/qsstv/audio/").toString(); docURL=qSettings.value("docURL","http://users.telenet.be/on4qz/qsstv/manual").toString(); saveTXimages=qSettings.value("saveTXimages",false).toBool(); qSettings.endGroup(); diff --git a/qsstv/config/drmprofileconfig.cpp b/qsstv/config/drmprofileconfig.cpp index 8bd9ea5..081ee18 100644 --- a/qsstv/config/drmprofileconfig.cpp +++ b/qsstv/config/drmprofileconfig.cpp @@ -1,6 +1,27 @@ +/************************************************************************** +* Copyright (C) 2000-2019 by Johan Maes * +* on4qz@telenet.be * +* http://users.telenet.be/on4qz * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ + #include "drmprofileconfig.h" #include "ui_drmprofileconfig.h" -#include "utils/supportfunctions.h" +#include "supportfunctions.h" #include "configparams.h" sprofile drmPFArray[NUMBEROFPROFILES]; @@ -173,6 +194,7 @@ bool drmProfileConfig::getDRMParams(int idx,drmTxParams &d) return false; } d=drmPFArray[idx].params; + d.callsign=myCallsign; return true; } diff --git a/qsstv/config/drmprofileconfig.h b/qsstv/config/drmprofileconfig.h index 9b6a045..d59be54 100644 --- a/qsstv/config/drmprofileconfig.h +++ b/qsstv/config/drmprofileconfig.h @@ -1,6 +1,6 @@ #ifndef DRMPROFILECONFIG_H #define DRMPROFILECONFIG_H -#include "drmtx/drmparams.h" +#include "drmparams.h" #include "baseconfig.h" diff --git a/qsstv/config/drmprofileconfig.ui b/qsstv/config/drmprofileconfig.ui index 073189b..9ba9c96 100644 --- a/qsstv/config/drmprofileconfig.ui +++ b/qsstv/config/drmprofileconfig.ui @@ -135,10 +135,7 @@ - - 2.2 kHz - - + 2.2 kHz @@ -404,10 +401,7 @@ - - 2.2 kHz - - + 2.2 kHz @@ -673,10 +667,7 @@ - - 2.2 kHz - - + 2.2 kHz diff --git a/qsstv/config/frequencyselectwidget.cpp b/qsstv/config/frequencyselectwidget.cpp index ee07cc7..b53696b 100644 --- a/qsstv/config/frequencyselectwidget.cpp +++ b/qsstv/config/frequencyselectwidget.cpp @@ -1,9 +1,31 @@ +/************************************************************************** +* Copyright (C) 2000-2019 by Johan Maes * +* on4qz@telenet.be * +* http://users.telenet.be/on4qz * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ + #include "frequencyselectwidget.h" #include "ui_frequencyselectwidget.h" QStringList freqList; QStringList modeList; QStringList sbModeList; +QStringList passBandList; QString additionalCommand; bool additionalCommandHex; @@ -12,9 +34,9 @@ frequencySelectWidget::frequencySelectWidget(QWidget *parent) :baseConfig(parent { ui->setupUi(this); QStringList sl; - sl<<"Frequencyy"<<"Mode"<<"Modulation"; + sl<<"Frequencyy"<<"Mode"<<"Modulation"<<"Passband"; ui->tableWidget->setAlternatingRowColors (false); - ui->tableWidget->setColumnCount(3); + ui->tableWidget->setColumnCount(4); ui->tableWidget->setHorizontalHeaderLabels(sl); connect(ui->tableWidget,SIGNAL(itemChanged(QTableWidgetItem *)),this,SLOT(slotItemChanged())); connect(ui->tableWidget,SIGNAL(cellClicked(int,int)),this,SLOT(slotCellClicked(int,int))); @@ -34,19 +56,31 @@ frequencySelectWidget::~frequencySelectWidget() void frequencySelectWidget::readSettings() { + int i; QSettings qSettings; qSettings.beginGroup("FREQSELECT"); freqList=qSettings.value("frequencyList",QStringList()).toStringList(); modeList=qSettings.value("modeList",QStringList()).toStringList(); sbModeList=qSettings.value("sbModeList",QStringList()).toStringList(); + passBandList=qSettings.value("passBandList",QStringList()).toStringList(); additionalCommand=qSettings.value("additionalCommand",QString()).toString(); additionalCommandHex=qSettings.value("additionalCommandHex",false).toBool(); + if(passBandList.count()!=freqList.count()) + { + passBandList.clear(); + for(i=0;itableWidget->setRowCount(freqList.count()); } } @@ -97,6 +133,8 @@ void frequencySelectWidget:: getParams() freqList.clear(); modeList.clear(); sbModeList.clear(); + passBandList.clear(); + for(i=0;itableWidget->rowCount();i++) { ui->tableWidget->item(i,0)->text().toDouble(&ok); @@ -111,6 +149,7 @@ void frequencySelectWidget:: getParams() freqList.append(ui->tableWidget->item(i,0)->text()); modeList.append(((QComboBox *)ui->tableWidget->cellWidget(i,1))->currentText()); sbModeList.append(((QComboBox *)ui->tableWidget->cellWidget(i,2))->currentText()); + passBandList.append(((QComboBox *)ui->tableWidget->cellWidget(i,3))->currentText()); } getValue(additionalCommand,ui->additionalCommandLineEdit); getValue(additionalCommandHex,ui->additionalCommandHexCheckBox); @@ -134,6 +173,7 @@ void frequencySelectWidget::slotFreqAdd() freqList.append(""); modeList.append("SSTV"); sbModeList.append("LSB"); + passBandList.append("Normal"); createEntry(freqList.count()-1); } @@ -199,7 +239,7 @@ void frequencySelectWidget::slotFreqDown() void frequencySelectWidget::createEntry(int row) { - QComboBox *cb, *sb; + QComboBox *cb, *sb, *pb; QTableWidgetItem *ct; if(row>(ui->tableWidget->rowCount()-1)) { @@ -223,10 +263,23 @@ void frequencySelectWidget::createEntry(int row) sb->addItem("USB"); sb->addItem("FM"); sb->addItem("AM"); + sb->addItem("PKTLSB"); + sb->addItem("PKTUSB"); + sb->addItem("PKTFM"); + + // sb->setCurrentText(sbModeList.at(row)); setValue(sbModeList.at(row),sb); ui->tableWidget->setCellWidget(row,2,sb); + + pb=new QComboBox(this); + pb->addItem("Normal"); + pb->addItem("Wide"); + pb->addItem("Narrow"); +// sb->setCurrentText(sbModeList.at(row)); + setValue(passBandList.at(row),pb); + ui->tableWidget->setCellWidget(row,3,pb); connect(cb,SIGNAL(currentIndexChanged(int)),SLOT(slotItemChanged())); connect(sb,SIGNAL(currentIndexChanged(int)),SLOT(slotItemChanged())); ui->tableWidget->blockSignals(false); diff --git a/qsstv/config/frequencyselectwidget.h b/qsstv/config/frequencyselectwidget.h index 9ab76ff..6abf990 100644 --- a/qsstv/config/frequencyselectwidget.h +++ b/qsstv/config/frequencyselectwidget.h @@ -7,6 +7,7 @@ extern QStringList freqList; extern QStringList modeList; extern QStringList sbModeList; +extern QStringList passBandList; extern QString additionalCommand; extern bool additionalCommandHex; diff --git a/qsstv/config/frequencyselectwidget.ui b/qsstv/config/frequencyselectwidget.ui index 850555e..0e38045 100644 --- a/qsstv/config/frequencyselectwidget.ui +++ b/qsstv/config/frequencyselectwidget.ui @@ -127,8 +127,10 @@ Enter the frequency in MHz and select the mode. Example: -14.230 SSTV USB -7.058 DRM LSB +14.230 SSTV USB Wide +7.058 DRM PKTUSB Normal + +Passband is not used when PKTxxx is selected (at least not on ICOM) diff --git a/qsstv/config/ftpconfig.cpp b/qsstv/config/ftpconfig.cpp index 7491310..81a484f 100644 --- a/qsstv/config/ftpconfig.cpp +++ b/qsstv/config/ftpconfig.cpp @@ -1,9 +1,32 @@ +/************************************************************************** +* Copyright (C) 2000-2019 by Johan Maes * +* on4qz@telenet.be * +* http://users.telenet.be/on4qz * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ + #include "ftpconfig.h" +#include "appglobal.h" #include "ui_ftpconfig.h" -#include "ftp.h" +#include "ftpfunctions.h" #include #include +#include bool enableFTP; @@ -16,6 +39,7 @@ QString ftpPassword; QString ftpDefaultImageFormat; eftpSaveFormat ftpSaveFormat; int ftpNumImages; +bool addExtension; ftpConfig::ftpConfig(QWidget *parent) : baseConfig (parent), ui(new Ui::ftpConfig) { @@ -47,7 +71,9 @@ void ftpConfig::readSettings() ftpDefaultImageFormat=qSettings.value("ftpDefaultImageFormat","png").toString(); ftpSaveFormat=(eftpSaveFormat)qSettings.value("ftpSaveFormat",0).toInt(); ftpNumImages=qSettings.value("ftpNumImages",30).toInt(); + addExtension=qSettings.value("addExtension",false).toBool(); qSettings.endGroup(); + setParams(); } @@ -66,6 +92,8 @@ void ftpConfig::writeSettings() qSettings.setValue("ftpDefaultImageFormat",ftpDefaultImageFormat); qSettings.setValue("ftpSaveFormat",(int)ftpSaveFormat); qSettings.setValue("ftpNumImages",ftpNumImages); + qSettings.setValue("addExtension",addExtension); + qSettings.endGroup(); } @@ -91,13 +119,14 @@ void ftpConfig::getParams() getValue(ftpLogin,ui->ftpLoginLineEdit); getValue(ftpPassword,ui->ftpPasswordLineEdit); getValue(ftpDefaultImageFormat,ui->ftpDefaultImageFormatComboBox); + getValue(addExtension,ui->addExtensionCheckBox); if(ui->imageRadioButton->isChecked()) { - ftpSaveFormat=FTPIM; + ftpSaveFormat=FTPIMAGESEQUENCE; } else { - ftpSaveFormat=FTPFILE; + ftpSaveFormat=FTPFILENAME; } changed=false; if(enableFTPCopy!=enableFTP @@ -122,7 +151,7 @@ void ftpConfig::setParams() setValue(ftpRemoteDRMDirectory,ui->remoteDRMDirectoryLineEdit); setValue(ftpLogin,ui->ftpLoginLineEdit); setValue(ftpPassword,ui->ftpPasswordLineEdit); - if(ftpSaveFormat==FTPIM) + if(ftpSaveFormat==FTPIMAGESEQUENCE) { ui->imageRadioButton->setChecked(true); } @@ -131,23 +160,31 @@ void ftpConfig::setParams() ui->filenameRadioButton->setChecked(true); } setValue(ftpDefaultImageFormat,ui->ftpDefaultImageFormatComboBox); + setValue(addExtension,ui->addExtensionCheckBox); } void ftpConfig::slotTestFTPPushButton() { - QString r1,r2; + eftpError result; + ftpFunctions ff; + QString resultSSTVStr; + QString resultDRMStr; QApplication::setOverrideCursor(Qt::WaitCursor); - ftpInterface fInt("TestUploadConnection"); ui->testFTPPushButton->setDisabled(true); getParams(); - fInt.setupConnection(ftpRemoteHost,ftpPort,ftpLogin,ftpPassword,ftpRemoteSSTVDirectory); - r1=fInt.execFTPTest(); - fInt.init(); - fInt.setupConnection(ftpRemoteHost,ftpPort,ftpLogin,ftpPassword,ftpRemoteDRMDirectory); - r2=fInt.execFTPTest(); + ff.test("Ftp Test sstvdir",ftpRemoteHost,ftpPort,ftpLogin,ftpPassword,ftpRemoteSSTVDirectory,true); + result=ff.getLastErrorStr(resultSSTVStr); + + + if(result==FTPOK) + { +// qDebug() << "secondTest()"; + ff.test("Ftp Test drmdir",ftpRemoteHost,ftpPort,ftpLogin,ftpPassword,ftpRemoteDRMDirectory,false); + ff.getLastErrorStr(resultDRMStr); + } QApplication::restoreOverrideCursor(); ui->testFTPPushButton->setDisabled(false); - QMessageBox::information(this,"Testing Connection","",QString("SSTV: %1\nDRM: %2").arg(r1).arg(r2)); + QMessageBox::information(this,"FTP Site Test",resultSSTVStr+"\n"+resultDRMStr,QMessageBox::Ok); } diff --git a/qsstv/config/ftpconfig.h b/qsstv/config/ftpconfig.h index 9539d8d..767d796 100644 --- a/qsstv/config/ftpconfig.h +++ b/qsstv/config/ftpconfig.h @@ -7,7 +7,7 @@ #define NUMFTPRXIMAGES 30 -enum eftpSaveFormat {FTPIM,FTPFILE}; +enum eftpSaveFormat {FTPIMAGESEQUENCE,FTPFILENAME}; extern bool enableFTP; extern int ftpPort; @@ -19,6 +19,8 @@ extern QString ftpPassword; extern QString ftpFilename; extern QString ftpDefaultImageFormat; extern eftpSaveFormat ftpSaveFormat; +extern bool addExtension; + extern int ftpNumImages; diff --git a/qsstv/config/ftpconfig.ui b/qsstv/config/ftpconfig.ui index d80bef1..a8368b5 100644 --- a/qsstv/config/ftpconfig.ui +++ b/qsstv/config/ftpconfig.ui @@ -501,6 +501,13 @@ + + + + add image format extension + + + diff --git a/qsstv/config/guiconfig.cpp b/qsstv/config/guiconfig.cpp index 5ef1abd..64552ee 100644 --- a/qsstv/config/guiconfig.cpp +++ b/qsstv/config/guiconfig.cpp @@ -1,3 +1,24 @@ +/************************************************************************** +* Copyright (C) 2000-2019 by Johan Maes * +* on4qz@telenet.be * +* http://users.telenet.be/on4qz * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ + #include "guiconfig.h" #include "ui_guiconfig.h" #include @@ -11,6 +32,8 @@ QColor backGroundColor; QColor imageBackGroundColor; bool slowCPU; bool lowRes; +bool confirmDeletion; +bool confirmClose; guiConfig::guiConfig(QWidget *parent) : baseConfig(parent), ui(new Ui::guiConfig) { @@ -32,10 +55,12 @@ void guiConfig::readSettings() galleryRows=qSettings.value("galleryRows",4).toInt(); galleryColumns=qSettings.value("galleryColumns",4).toInt(); imageStretch=qSettings.value("imageStretch",true).toBool(); - backGroundColor=qSettings.value("backGroundColor",QColor(128,128,128)).value(); - imageBackGroundColor=qSettings.value("imageBackGroundColor",QColor(0,0,128)).value(); + backGroundColor=qSettings.value("backGroundColor",QColor(0,86,230)).value(); + imageBackGroundColor=qSettings.value("imageBackGroundColor",QColor(128,128,128)).value(); slowCPU=qSettings.value("slowCPU",false).toBool(); lowRes=qSettings.value("lowRes",false).toBool(); + confirmDeletion=qSettings.value("confirmDeletion",true).toBool(); + confirmClose=qSettings.value("confirmClose",true).toBool(); qSettings.endGroup(); setParams(); } @@ -52,6 +77,10 @@ void guiConfig::writeSettings() qSettings.setValue("imageBackGroundColor",imageBackGroundColor); qSettings.setValue("slowCPU",slowCPU); qSettings.setValue("lowRes",lowRes); + qSettings.setValue("confirmDeletion",confirmDeletion); + qSettings.setValue("confirmClose",confirmClose); + + qSettings.endGroup(); } @@ -67,6 +96,10 @@ void guiConfig::getParams() getValue(imageStretch,ui->stretchCheckBox); getValue(slowCPU,ui->slowCPUCheckBox); getValue(lowRes,ui->lowResCheckBox); + + getValue(confirmDeletion,ui->confirmDeletionCheckBox); + getValue(confirmClose,ui->confirmCloseCheckBox); + } void guiConfig::setParams() @@ -78,6 +111,8 @@ void guiConfig::setParams() setColorLabel(imageBackGroundColor,true); setValue(slowCPU,ui->slowCPUCheckBox); setValue(lowRes,ui->lowResCheckBox); + setValue(confirmDeletion,ui->confirmDeletionCheckBox); + setValue(confirmClose,ui->confirmCloseCheckBox); } diff --git a/qsstv/config/guiconfig.h b/qsstv/config/guiconfig.h index b0e8971..db48189 100644 --- a/qsstv/config/guiconfig.h +++ b/qsstv/config/guiconfig.h @@ -12,6 +12,8 @@ extern QColor backGroundColor; extern QColor imageBackGroundColor; extern bool slowCPU; extern bool lowRes; +extern bool confirmDeletion; +extern bool confirmClose; namespace Ui { diff --git a/qsstv/config/guiconfig.ui b/qsstv/config/guiconfig.ui index a48b7e3..f43d2fb 100644 --- a/qsstv/config/guiconfig.ui +++ b/qsstv/config/guiconfig.ui @@ -171,7 +171,7 @@ - Exit and restart QSSTV If slow CPU or Low Resolution has changed. + Exit and restart QSSTV If slow CPU or Low Resolution have changed. @@ -247,6 +247,20 @@ + + + + Ask for confirmation when deleting file + + + + + + + Ask for confirmation when closing QSSTV + + + diff --git a/qsstv/config/hybridconfig.cpp b/qsstv/config/hybridconfig.cpp index 35e1cc1..b3d5ebb 100644 --- a/qsstv/config/hybridconfig.cpp +++ b/qsstv/config/hybridconfig.cpp @@ -1,6 +1,27 @@ +/************************************************************************** +* Copyright (C) 2000-2019 by Johan Maes * +* on4qz@telenet.be * +* http://users.telenet.be/on4qz * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ + #include "hybridconfig.h" #include "ui_hybridconfig.h" -#include "ftp.h" +#include "ftpfunctions.h" #include "hybridcrypt.h" #include @@ -14,108 +35,139 @@ QString hybridFtpLogin; QString hybridFtpPassword; QString hybridFtpHybridFilesDirectory; +bool enableHybridNotify; +QString hybridNotifyDir; +QString onlineStatusDir; + hybridConfig::hybridConfig(QWidget *parent) :baseConfig(parent), ui(new Ui::hybridConfig) { - ui->setupUi(this); - // connect(testFTPPushButton,SIGNAL(clicked()),SLOT(slotTestFTPPushButton())); - connect(ui->testHybridPushButton,SIGNAL(clicked()),SLOT(slotTestHybridPushButton())); + ui->setupUi(this); + // connect(testFTPPushButton,SIGNAL(clicked()),SLOT(slotTestFTPPushButton())); + connect(ui->testHybridPushButton,SIGNAL(clicked()),SLOT(slotTestHybridPushButton())); } hybridConfig::~hybridConfig() { - delete ui; + delete ui; } void hybridConfig::readSettings() { - QSettings qSettings; - qSettings.beginGroup("HYBRID"); - enableHybridRx=qSettings.value("enableHybridRx",true).toBool(); -// enableSpecialServer=qSettings.value("enableSpecialServer",false).toBool(); - hybridFtpPort=qSettings.value("hybridFtpPort",21).toInt(); - hybridFtpRemoteHost=qSettings.value("hybridFtpRemoteHost","").toString(); - hybridFtpRemoteDirectory=qSettings.value("hybridFtpRemoteDirectory","").toString(); - hybridFtpLogin=qSettings.value("hybridFtpLogin","").toString(); - hybridFtpPassword=qSettings.value("hybridFtpPassword","").toString(); - hybridFtpHybridFilesDirectory=qSettings.value("hybridFtpHybridFilesDirectory","HybridFiles1").toString(); + QSettings qSettings; + qSettings.beginGroup("HYBRID"); + enableHybridRx=qSettings.value("enableHybridRx",true).toBool(); + hybridFtpPort=qSettings.value("hybridFtpPort",21).toInt(); + hybridFtpRemoteHost=qSettings.value("hybridFtpRemoteHost","").toString(); + hybridFtpRemoteDirectory=qSettings.value("hybridFtpRemoteDirectory","").toString(); + hybridFtpLogin=qSettings.value("hybridFtpLogin","").toString(); + hybridFtpPassword=qSettings.value("hybridFtpPassword","").toString(); + hybridFtpHybridFilesDirectory=qSettings.value("hybridFtpHybridFilesDirectory","HybridFiles1").toString(); + hybridNotifyDir=qSettings.value("hybridNotifyDirectory","RxOkNotifications1").toString(); + onlineStatusDir=qSettings.value("onlineStatusDirectory","OnlineCallsigns1").toString(); + enableHybridNotify=qSettings.value("enableHybridNotify",true).toBool(); - qSettings.endGroup(); - setParams(); + + qSettings.endGroup(); + setParams(); } void hybridConfig::writeSettings() { - QSettings qSettings; - getParams(); - qSettings.beginGroup("HYBRID"); - qSettings.setValue("enableHybridRx",enableHybridRx); -// qSettings.setValue("enableSpecialServer",enableSpecialServer); - qSettings.setValue("hybridFtpPort",hybridFtpPort); - qSettings.setValue("hybridFtpRemoteHost",hybridFtpRemoteHost); - qSettings.setValue("hybridFtpRemoteDirectory",hybridFtpRemoteDirectory); - qSettings.setValue("hybridFtpLogin",hybridFtpLogin); - qSettings.setValue("hybridFtpPassword",hybridFtpPassword); - qSettings.setValue("hybridFtpHybridFilesDirectory",hybridFtpHybridFilesDirectory); - qSettings.endGroup(); + QSettings qSettings; + getParams(); + qSettings.beginGroup("HYBRID"); + qSettings.setValue("enableHybridRx",enableHybridRx); + qSettings.setValue("hybridFtpPort",hybridFtpPort); + qSettings.setValue("hybridFtpRemoteHost",hybridFtpRemoteHost); + qSettings.setValue("hybridFtpRemoteDirectory",hybridFtpRemoteDirectory); + qSettings.setValue("hybridFtpLogin",hybridFtpLogin); + qSettings.setValue("hybridFtpPassword",hybridFtpPassword); + qSettings.setValue("hybridFtpHybridFilesDirectory",hybridFtpHybridFilesDirectory); + qSettings.setValue("enableHybridNotify",enableHybridNotify); + qSettings.setValue("hybridNotifyDir",hybridNotifyDir); + qSettings.setValue("onlineStatusDir",onlineStatusDir); + qSettings.endGroup(); } void hybridConfig::getParams() { - bool enableHybridRxCopy=enableHybridRx; -// bool enableSpecialServerCopy=enableSpecialServer; - int hybridFtpPortCopy=hybridFtpPort; - QString hybridFtpRemoteHostCopy=hybridFtpRemoteHost; - QString hybridFtpRemoteDirectoryCopy=hybridFtpRemoteDirectory; - QString hybridFtpLoginCopy=hybridFtpLogin; - QString hybridFtpPasswordCopy=hybridFtpPassword; - - - getValue(enableHybridRx,ui->enableHybridRxCheckBox); -// getValue(enableSpecialServer,ui->enableSpecialServerCheckBox); - getValue(hybridFtpPort,ui->hybridFtpPortSpinBox); - getValue(hybridFtpRemoteHost,ui->hybridRemoteHostLineEdit); - getValue(hybridFtpRemoteDirectory,ui->hybridRemoteDirectoryLineEdit); - getValue(hybridFtpLogin,ui->hybridFtpLoginLineEdit); - getValue(hybridFtpPassword,ui->hybridFtpPasswordLineEdit); - getValue(hybridFtpHybridFilesDirectory,ui->hybridFilesDirectoryLineEdit); - changed=false; - if( enableHybridRxCopy!=enableHybridRx -// || enableSpecialServerCopy!=enableSpecialServer - || hybridFtpPortCopy!=hybridFtpPort - || hybridFtpRemoteHostCopy!=hybridFtpRemoteHost - || hybridFtpRemoteDirectoryCopy!=hybridFtpRemoteDirectory - || hybridFtpLoginCopy!=hybridFtpLogin - || hybridFtpPasswordCopy!=hybridFtpPassword) - changed=true; + bool enableHybridRxCopy=enableHybridRx; + bool enableHybridNotifyCopy=enableHybridNotify; + int hybridFtpPortCopy=hybridFtpPort; + QString hybridFtpRemoteHostCopy=hybridFtpRemoteHost; + QString hybridFtpRemoteDirectoryCopy=hybridFtpRemoteDirectory; + QString hybridFtpLoginCopy=hybridFtpLogin; + QString hybridFtpPasswordCopy=hybridFtpPassword; + QString hybridNotifyDirCopy=hybridNotifyDir; + QString onlineStatusDirCopy=onlineStatusDir; + getValue(enableHybridRx,ui->enableHybridRxCheckBox); + getValue(hybridFtpPort,ui->hybridFtpPortSpinBox); + getValue(hybridFtpRemoteHost,ui->hybridRemoteHostLineEdit); + getValue(hybridFtpRemoteDirectory,ui->hybridRemoteDirectoryLineEdit); + getValue(hybridFtpLogin,ui->hybridFtpLoginLineEdit); + getValue(hybridFtpPassword,ui->hybridFtpPasswordLineEdit); + getValue(hybridFtpHybridFilesDirectory,ui->hybridFilesDirectoryLineEdit); + getValue(enableHybridNotify,ui->enableHybridNotifyCheckBox); + getValue(hybridNotifyDir,ui->hybridNotifyDirLineEdit); + getValue(onlineStatusDir,ui->onlineStatusDirLineEdit); + changed=false; + if( enableHybridRxCopy!=enableHybridRx + // || enableSpecialServerCopy!=enableSpecialServer + || hybridFtpPortCopy!=hybridFtpPort + || hybridFtpRemoteHostCopy!=hybridFtpRemoteHost + || hybridFtpRemoteDirectoryCopy!=hybridFtpRemoteDirectory + || hybridFtpLoginCopy!=hybridFtpLogin + || hybridFtpPasswordCopy!=hybridFtpPassword + || enableHybridNotifyCopy!=enableHybridNotify + || hybridNotifyDirCopy!=hybridNotifyDir + || onlineStatusDirCopy!=onlineStatusDir + ) + changed=true; } void hybridConfig::setParams() { - setValue(enableHybridRx,ui->enableHybridRxCheckBox); -// setValue(enableSpecialServer,ui->enableSpecialServerCheckBox); - setValue(hybridFtpPort,ui->hybridFtpPortSpinBox); - setValue(hybridFtpRemoteHost,ui->hybridRemoteHostLineEdit); - setValue(hybridFtpRemoteDirectory,ui->hybridRemoteDirectoryLineEdit); - setValue(hybridFtpLogin,ui->hybridFtpLoginLineEdit); - setValue(hybridFtpPassword,ui->hybridFtpPasswordLineEdit); - setValue(hybridFtpHybridFilesDirectory,ui->hybridFilesDirectoryLineEdit); + setValue(enableHybridRx,ui->enableHybridRxCheckBox); + setValue(hybridFtpPort,ui->hybridFtpPortSpinBox); + setValue(hybridFtpRemoteHost,ui->hybridRemoteHostLineEdit); + setValue(hybridFtpRemoteDirectory,ui->hybridRemoteDirectoryLineEdit); + setValue(hybridFtpLogin,ui->hybridFtpLoginLineEdit); + setValue(hybridFtpPassword,ui->hybridFtpPasswordLineEdit); + setValue(hybridFtpHybridFilesDirectory,ui->hybridFilesDirectoryLineEdit); + setValue(enableHybridNotify,ui->enableHybridNotifyCheckBox); + setValue(hybridNotifyDir,ui->hybridNotifyDirLineEdit); + setValue(onlineStatusDir,ui->onlineStatusDirLineEdit); } void hybridConfig::slotTestHybridPushButton() { - QString msg; - ftpInterface fInt("TestHybridConnection"); - ui->testHybridPushButton->setDisabled(true); - getParams(); - fInt.setupConnection(hybridFtpRemoteHost,hybridFtpPort,hybridFtpLogin,hybridFtpPassword,hybridFtpRemoteDirectory+"/"+hybridFtpHybridFilesDirectory); -// fInt.setupConnection(hc.host(),hc.port(),hc.user(),hc.passwd(),hc.dir()+"/"+hybridFtpHybridFilesDirectory); - msg=fInt.execFTPTest(); - ui->testHybridPushButton->setDisabled(false); - QMessageBox::information(this,"Test Connection",msg); + ftpFunctions ff; + QString resultStr1; + QString resultStr2; + QString resultStr3; + + + QApplication::setOverrideCursor(Qt::WaitCursor); + ui->testHybridPushButton->setDisabled(true); + getParams(); + ff.test("Hybrid Ftp Test",hybridFtpRemoteHost,hybridFtpPort,hybridFtpLogin,hybridFtpPassword,hybridFtpRemoteDirectory+"/"+hybridFtpHybridFilesDirectory,true); + ff.getLastErrorStr(resultStr1); + + ff.test("Notify Ftp Test",hybridFtpRemoteHost,hybridFtpPort,hybridFtpLogin,hybridFtpPassword,hybridFtpRemoteDirectory+"/"+hybridNotifyDir,false); + ff.getLastErrorStr(resultStr2); + ff.test("OnlineStus Ftp Test",hybridFtpRemoteHost,hybridFtpPort,hybridFtpLogin,hybridFtpPassword,hybridFtpRemoteDirectory+"/"+onlineStatusDir,false); + ff.getLastErrorStr(resultStr3); + + QApplication::restoreOverrideCursor(); + ui->testHybridPushButton->setDisabled(false); + QMessageBox::information(this,"FTP Site Test",QString("%1\n%2\n%3").arg(resultStr1).arg(resultStr2).arg(resultStr3),QMessageBox::Ok); + + + } diff --git a/qsstv/config/hybridconfig.h b/qsstv/config/hybridconfig.h index c80a7c1..c90a189 100644 --- a/qsstv/config/hybridconfig.h +++ b/qsstv/config/hybridconfig.h @@ -4,7 +4,7 @@ #include "baseconfig.h" extern bool enableHybridRx; -//extern bool enableSpecialServer; + extern int hybridFtpPort; extern QString hybridFtpRemoteHost; extern QString hybridFtpRemoteDirectory; @@ -12,6 +12,10 @@ extern QString hybridFtpLogin; extern QString hybridFtpPassword; extern QString hybridFtpHybridFilesDirectory; +extern bool enableHybridNotify; +extern QString hybridNotifyDir; +extern QString onlineStatusDir; + namespace Ui { class hybridConfig; diff --git a/qsstv/config/hybridconfig.ui b/qsstv/config/hybridconfig.ui index 1885033..c96c77c 100644 --- a/qsstv/config/hybridconfig.ui +++ b/qsstv/config/hybridconfig.ui @@ -6,8 +6,8 @@ 0 0 - 730 - 372 + 681 + 573 @@ -15,70 +15,69 @@ - + - - - Enable Reception in Hybrid Mode - - - true - - + + + + + Enable Reception in Hybrid Mode + + + true + + + + + + + + + FTP Port + + + false + + + + + + + true + + + 1 + + + 10000 + + + 21 + + + + + + + + + Send RX Notifications in Hybrid Mode + + + true + + + + - + Qt::Horizontal - - QSizePolicy::Expanding - - 20 - 20 - - - - - - - - FTP Port - - - false - - - - - - - true - - - 1 - - - 10000 - - - 21 - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 + 40 20 @@ -87,293 +86,192 @@ - - - 6 - - - 0 - - - 0 - - - 0 - - - 0 - + - - - - 0 - 0 - - - - - 145 - 25 - - - - Host - - - false - - + + + + + + 0 + 0 + + + + + 145 + 25 + + + + Notifications Directory + + + false + + + + + + + + + + + 0 + 0 + + + + + 145 + 25 + + + + Login + + + false + + + + + + + + + + + 0 + 0 + + + + + 145 + 25 + + + + Password + + + false + + + + + + + QLineEdit::Password + + + + + + + + 0 + 0 + + + + + 145 + 25 + + + + Directory + + + false + + + + + + + + + + + 0 + 0 + + + + + 145 + 25 + + + + Hybrid Files Directory + + + false + + + + + + + + + + + 0 + 0 + + + + + 145 + 25 + + + + Host + + + false + + + + + + + + + + + 0 + 0 + + + + + 145 + 25 + + + + Online Status Directory + + + false + + + + + + + - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - - - 6 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 145 - 25 - - - - Login - - - false - - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - - - 6 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 145 - 25 - - - - Password - - - false - - - - - - - QLineEdit::Password - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - - - 6 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 145 - 25 - - - - Directory - - - false - - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - - - 6 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 145 - 25 - - - - Hybrid Files Directory - - - false - - - - - - - - + Qt::Horizontal diff --git a/qsstv/config/hybridnotifyconfig.cpp b/qsstv/config/hybridnotifyconfig.cpp deleted file mode 100644 index 67b8c42..0000000 --- a/qsstv/config/hybridnotifyconfig.cpp +++ /dev/null @@ -1,123 +0,0 @@ -#include "hybridnotifyconfig.h" -#include "ui_hybridnotifyconfig.h" -#include "ftp.h" - -#include - -bool enableHybridNotify; -bool enableHybridNotifySnoop; -int hybridNotifyPort; -QString hybridNotifyRemoteHost; -QString hybridNotifyRemoteDir; -QString hybridNotifyLogin; -QString hybridNotifyPassword; -QString hybridNotifyDir; - - -hybridNotifyConfig::hybridNotifyConfig(QWidget *parent) :baseConfig(parent), ui(new Ui::hybridNotifyConfig) -{ - ui->setupUi(this); -// connect(testFTPPushButton,SIGNAL(clicked()),SLOT(slotTestFTPPushButton())); - connect(ui->testNotifyPushButton,SIGNAL(clicked()),SLOT(slotTestNotifyPushButton())); -} - -hybridNotifyConfig::~hybridNotifyConfig() -{ - delete ui; -} - -void hybridNotifyConfig::readSettings() -{ - QSettings qSettings; - qSettings.beginGroup("HYBRID_NOTIFY"); - enableHybridNotify=qSettings.value("enableHybridNotify",true).toBool(); - enableHybridNotifySnoop=qSettings.value("enableHybridNotifySnoop",true).toBool(); - hybridNotifyPort=qSettings.value("hybridNotifyPort",21).toInt(); - hybridNotifyRemoteHost=qSettings.value("hybridNotifyRemoteHost","").toString(); - hybridNotifyRemoteDir=qSettings.value("hybridNotifyRemoteDir","").toString(); - hybridNotifyLogin=qSettings.value("hybridNotifyLogin","").toString(); - hybridNotifyPassword=qSettings.value("hybridNotifyPassword","").toString(); - hybridNotifyDir=qSettings.value("hybridNotifyDirectory","RxOkNotifications1").toString(); - - qSettings.endGroup(); - setParams(); -} - -void hybridNotifyConfig::writeSettings() -{ - QSettings qSettings; - getParams(); - qSettings.beginGroup("HYBRID_NOTIFY"); - qSettings.setValue("enableHybridNotify",enableHybridNotify); - qSettings.setValue("enableHybridNotifySnoop",enableHybridNotifySnoop); - qSettings.setValue("hybridNotifyPort",hybridNotifyPort); - qSettings.setValue("hybridNotifyRemoteHost",hybridNotifyRemoteHost); - qSettings.setValue("hybridNotifyRemoteDir",hybridNotifyRemoteDir); - qSettings.setValue("hybridNotifyLogin",hybridNotifyLogin); - qSettings.setValue("hybridNotifyPassword",hybridNotifyPassword); - qSettings.setValue("hybridNotifyDir",hybridNotifyDir); - qSettings.endGroup(); -} - -void hybridNotifyConfig::getParams() -{ - bool enableHybridNotifyCopy=enableHybridNotify; - bool enableHybridNotifySnoopCopy=enableHybridNotifySnoop; - int hybridNotifyPortCopy=hybridNotifyPort; - QString hybridNotifyRemoteHostCopy=hybridNotifyRemoteHost; - QString hybridNotifyRemoteDirCopy=hybridNotifyRemoteDir; - QString hybridNotifyDirCopy=hybridNotifyDir; - QString hybridNotifyLoginCopy=hybridNotifyLogin; - QString hybridNotifyPasswordCopy=hybridNotifyPassword; - - - getValue(enableHybridNotify,ui->enableHybridNotifyCheckBox); - getValue(enableHybridNotifySnoop,ui->enableHybridNotifySnoopCheckBox); - getValue(hybridNotifyPort,ui->hybridNotifyPortSpinBox); - getValue(hybridNotifyRemoteHost,ui->hybridNotifyRemoteHostLineEdit); - getValue(hybridNotifyRemoteDir,ui->hybridNotifyRemoteDirLineEdit); - getValue(hybridNotifyLogin,ui->hybridNotifyLoginLineEdit); - getValue(hybridNotifyPassword,ui->hybridNotifyPasswordLineEdit); - getValue(hybridNotifyDir,ui->hybridNotifyDirLineEdit); - changed=false; - if( enableHybridNotifyCopy!=enableHybridNotify - || enableHybridNotifySnoopCopy!=enableHybridNotifySnoop - || hybridNotifyPortCopy!=hybridNotifyPort - || hybridNotifyRemoteHostCopy!=hybridNotifyRemoteHost - || hybridNotifyRemoteDirCopy!=hybridNotifyRemoteDir - || hybridNotifyDirCopy!=hybridNotifyDir - || hybridNotifyLoginCopy!=hybridNotifyLogin - || hybridNotifyPasswordCopy!=hybridNotifyPassword) - changed=true; - - - - -} - -void hybridNotifyConfig::setParams() -{ - setValue(enableHybridNotify,ui->enableHybridNotifyCheckBox); - setValue(enableHybridNotifySnoop,ui->enableHybridNotifySnoopCheckBox); - setValue(hybridNotifyPort,ui->hybridNotifyPortSpinBox); - setValue(hybridNotifyRemoteHost,ui->hybridNotifyRemoteHostLineEdit); - setValue(hybridNotifyRemoteDir,ui->hybridNotifyRemoteDirLineEdit); - setValue(hybridNotifyLogin,ui->hybridNotifyLoginLineEdit); - setValue(hybridNotifyPassword,ui->hybridNotifyPasswordLineEdit); - setValue(hybridNotifyDir,ui->hybridNotifyDirLineEdit); -} - - -void hybridNotifyConfig::slotTestNotifyPushButton() -{ - QString msg; - ftpInterface fInt("TestNotifyConnection"); - ui->testNotifyPushButton->setDisabled(true); - getParams(); - fInt.setupConnection(hybridNotifyRemoteHost,hybridNotifyPort, - hybridNotifyLogin,hybridNotifyPassword,hybridNotifyRemoteDir+"/"+hybridNotifyDir); - msg=fInt.execFTPTest(); - ui->testNotifyPushButton->setDisabled(false); - - QMessageBox::information(this,"Test Connection",msg); -} diff --git a/qsstv/config/hybridnotifyconfig.h b/qsstv/config/hybridnotifyconfig.h deleted file mode 100644 index 41f42d9..0000000 --- a/qsstv/config/hybridnotifyconfig.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef HYBRIDNOTIFYCONFIG_H -#define HYBRIDNOTIFYCONFIG_H - -#include "baseconfig.h" - -extern bool enableHybridNotify; -extern bool enableHybridNotifySnoop; -extern int hybridNotifyPort; -extern QString hybridNotifyRemoteHost; -extern QString hybridNotifyRemoteDir; -extern QString hybridNotifyLogin; -extern QString hybridNotifyPassword; -extern QString hybridNotifyDir; - - -namespace Ui { -class hybridNotifyConfig; -} - -class hybridNotifyConfig : public baseConfig -{ - Q_OBJECT - -public: - explicit hybridNotifyConfig(QWidget *parent = 0); - ~hybridNotifyConfig(); - void readSettings(); - void writeSettings(); - void getParams(); - void setParams(); -private slots: - void slotTestNotifyPushButton(); - -private: - Ui::hybridNotifyConfig *ui; -}; - -#endif // HYBRIDNOTIFYCONFIG_H diff --git a/qsstv/config/hybridnotifyconfig.ui b/qsstv/config/hybridnotifyconfig.ui deleted file mode 100644 index 9cfdd7c..0000000 --- a/qsstv/config/hybridnotifyconfig.ui +++ /dev/null @@ -1,469 +0,0 @@ - - - hybridNotifyConfig - - - - 0 - 0 - 806 - 388 - - - - Form - - - - 1 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - Send RX Notifications in Hybrid Mode - - - true - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Check who else got it - - - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 28 - 24 - - - - - - - - FTP Port - - - false - - - - - - - true - - - 1 - - - 10000 - - - 21 - - - - - - - - - 6 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 145 - 25 - - - - Host - - - false - - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - - - 6 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 145 - 25 - - - - Login - - - false - - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - - - 6 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 145 - 25 - - - - Password - - - false - - - - - - - QLineEdit::Password - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - - - 6 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 145 - 25 - - - - Directory - - - false - - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - - - 6 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 145 - 25 - - - - Notifications Directory - - - false - - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Test connection - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 38 - - - - - - - - - diff --git a/qsstv/config/operatorconfig.cpp b/qsstv/config/operatorconfig.cpp index c95d131..c9904ae 100644 --- a/qsstv/config/operatorconfig.cpp +++ b/qsstv/config/operatorconfig.cpp @@ -1,3 +1,24 @@ +/************************************************************************** +* Copyright (C) 2000-2019 by Johan Maes * +* on4qz@telenet.be * +* http://users.telenet.be/on4qz * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ + #include "operatorconfig.h" #include "ui_operatorconfig.h" @@ -10,9 +31,13 @@ QString lastReceivedCall; bool onlineStatusEnabled; QString onlineStatusText; + operatorConfig::operatorConfig(QWidget *parent) : baseConfig(parent), ui(new Ui::operatorConfig) { ui->setupUi(this); + QRegExp rx("^\\w*$"); + QValidator *validator = new QRegExpValidator(rx, this); + ui->onlineStatusText->setValidator(validator); } operatorConfig::~operatorConfig() @@ -66,6 +91,11 @@ void operatorConfig::getParams() getValue(myQth,ui->qthLineEdit); getValue(myLocator,ui->locatorLineEdit); getValue(onlineStatusText,ui->onlineStatusText); + + + + + getValue(onlineStatusEnabled,ui->onlineStatusCheckbox); changed=false; diff --git a/qsstv/config/operatorconfig.ui b/qsstv/config/operatorconfig.ui index b4ad8df..1d52dc3 100644 --- a/qsstv/config/operatorconfig.ui +++ b/qsstv/config/operatorconfig.ui @@ -7,28 +7,13 @@ 0 0 680 - 272 + 279 Form - - 1 - - - 0 - - - 0 - - - 0 - - - 0 - @@ -281,6 +266,13 @@ + + + + Use only a-z A_Z 0-9 and _ no spaces and no special characters + + + @@ -296,7 +288,7 @@ 120 - antenna, radio, operating freq or other info + e.g. locator_antenna_power
diff --git a/qsstv/config/repeaterconfig.cpp b/qsstv/config/repeaterconfig.cpp index 7f3e623..1f05702 100644 --- a/qsstv/config/repeaterconfig.cpp +++ b/qsstv/config/repeaterconfig.cpp @@ -1,21 +1,63 @@ +/************************************************************************** +* Copyright (C) 2000-2019 by Johan Maes * +* on4qz@telenet.be * +* http://users.telenet.be/on4qz * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ + #include "repeaterconfig.h" #include "ui_repeaterconfig.h" +#include "directoriesconfig.h" +#include "drmparams.h" -bool repeaterEnable; +bool repeaterEnabled; int repeaterImageInterval; esstvMode repeaterTxMode; +esstvMode repeaterIdleTxMode; QString repeaterImage1; QString repeaterImage2; QString repeaterImage3; QString repeaterImage4; QString repeaterAcknowledge; QString repeaterTemplate; -QString idleTemplate; +QString repeaterIdleTemplate; +int repeaterTxDelay; +int repeaterImageSize; // in kB repeaterConfig::repeaterConfig(QWidget *parent) : baseConfig(parent), ui(new Ui::repeaterConfig) { + int i; ui->setupUi(this); + ui->repeaterTxModeComboBox->addItem("Same as RX"); + for(i=0;irepeaterTxModeComboBox->addItem(SSTVTable[i].name); + ui->repeaterIdleTxModeComboBox->addItem(SSTVTable[i].name); + } + connect(ui->rp1BrowseButton,SIGNAL(clicked()),SLOT(slotRp1Browse())); + connect(ui->rp2BrowseButton,SIGNAL(clicked()),SLOT(slotRp2Browse())); + connect(ui->rp3BrowseButton,SIGNAL(clicked()),SLOT(slotRp3Browse())); + connect(ui->rp4BrowseButton,SIGNAL(clicked()),SLOT(slotRp4Browse())); + connect(ui->repeaterIdleTemplateBrowseButton,SIGNAL(clicked()),SLOT(slotRepeaterIdleTemplateBrowse())); + connect(ui->repeaterTemplateBrowseButton,SIGNAL(clicked()),SLOT(slotRepeaterTemplateBrowse())); + ui->txDRMImageSizeSpinBox->setMinimum(MINDRMSIZE/1000); + ui->txDRMImageSizeSpinBox->setMaximum(MAXDRMSIZE/1000); + } repeaterConfig::~repeaterConfig() @@ -28,15 +70,18 @@ void repeaterConfig::readSettings() QSettings qSettings; qSettings.beginGroup("REPEATER"); repeaterImageInterval=qSettings.value("repeaterImageInterval",10).toInt(); - repeaterEnable=qSettings.value("repeaterEnable",false).toBool(); + repeaterEnabled=qSettings.value("repeaterEnabled",false).toBool(); repeaterTxMode=(esstvMode)qSettings.value("repeaterTxMode",0).toInt(); + repeaterIdleTxMode=(esstvMode)qSettings.value("repeaterIdleTxMode",0).toInt(); repeaterImage1=qSettings.value("repeaterImage1","").toString(); repeaterImage2=qSettings.value("repeaterImage2","").toString(); repeaterImage3=qSettings.value("repeaterImage3","").toString(); repeaterImage4=qSettings.value("repeaterImage4","").toString(); repeaterAcknowledge=qSettings.value("repeaterAcknowledge","").toString(); repeaterTemplate=qSettings.value("repeaterTemplate","").toString(); - idleTemplate=qSettings.value("idleTemplate","").toString(); + repeaterIdleTemplate=qSettings.value("repeaterIdleTemplate","").toString(); + repeaterTxDelay=qSettings.value("repeaterTxDelay",5).toInt(); + repeaterImageSize=qSettings.value("repeaterImageSize",10).toInt(); qSettings.endGroup(); setParams(); } @@ -47,64 +92,112 @@ void repeaterConfig::writeSettings() getParams(); qSettings.beginGroup("REPEATER"); qSettings.setValue("repeaterImageInterval",repeaterImageInterval); - qSettings.setValue("repeaterEnable",repeaterEnable); + qSettings.setValue("repeaterEnabled",repeaterEnabled); qSettings.setValue("repeaterTxMode",repeaterTxMode); + qSettings.setValue("repeaterIdleTxMode",repeaterIdleTxMode); qSettings.setValue("repeaterImage1",repeaterImage1); qSettings.setValue("repeaterImage2",repeaterImage2); qSettings.setValue("repeaterImage3",repeaterImage3); qSettings.setValue("repeaterImage4",repeaterImage4); qSettings.setValue("repeaterAcknowledge",repeaterAcknowledge); qSettings.setValue("repeaterTemplate",repeaterTemplate); - qSettings.setValue("idleTemplate",idleTemplate); + qSettings.setValue("repeaterIdleTemplate",repeaterIdleTemplate); + qSettings.setValue("repeaterTxDelay",repeaterTxDelay); + qSettings.setValue("repeaterImageSize",repeaterImageSize); qSettings.endGroup(); } void repeaterConfig::getParams() { int temp; - bool repeaterEnableCopy=repeaterEnable; + bool repeaterEnabledCopy=repeaterEnabled; int repeaterImageIntervalCopy=repeaterImageInterval; esstvMode repeaterTxModeCopy=repeaterTxMode; + esstvMode repeaterIdleTxModeCopy=repeaterIdleTxMode; QString repeaterImage1Copy=repeaterImage1; QString repeaterImage2Copy=repeaterImage2; QString repeaterImage3Copy=repeaterImage3; QString repeaterImage4Copy=repeaterImage4; QString repeaterAcknowledgeCopy=repeaterAcknowledge; QString repeaterTemplateCopy=repeaterTemplate; - QString idleTemplateCopy=idleTemplate; + QString repeaterIdleTemplateCopy=repeaterIdleTemplate; + int repeaterTxDelayCopy=repeaterTxDelay; + int repeaterImageSizeCopy=repeaterImageSize; getValue(repeaterImageInterval,ui->imageIntervalSpinBox); - getValue(repeaterEnable,ui->repeaterEnableCheckBox); + getValue(repeaterEnabled,ui->repeaterEnabledCheckBox); getIndex(temp,ui->repeaterTxModeComboBox); repeaterTxMode=(esstvMode)temp; + getIndex(temp,ui->repeaterIdleTxModeComboBox); + getValue(repeaterTxDelay,ui->txDelaySpinBox); + getValue(repeaterImageSize,ui->txDRMImageSizeSpinBox); + repeaterIdleTxMode=(esstvMode)temp; + getValue(repeaterImage1,ui->repeaterImage1LineEdit); getValue(repeaterImage2,ui->repeaterImage2LineEdit); getValue(repeaterImage3,ui->repeaterImage3LineEdit); getValue(repeaterImage4,ui->repeaterImage4LineEdit); - getValue(idleTemplate,ui->idleTemplateLineEdit); + getValue(repeaterIdleTemplate,ui->repeaterIdleTemplateLineEdit); getValue(repeaterTemplate,ui->repeaterTemplateLineEdit); changed=false; - if( repeaterEnableCopy!=repeaterEnable + if( repeaterEnabledCopy!=repeaterEnabled || repeaterImageIntervalCopy!=repeaterImageInterval || repeaterTxModeCopy!=repeaterTxMode + || repeaterIdleTxModeCopy!=repeaterIdleTxMode || repeaterImage1Copy!=repeaterImage1 || repeaterImage2Copy!=repeaterImage2 || repeaterImage3Copy!=repeaterImage3 || repeaterImage4Copy!=repeaterImage4 || repeaterAcknowledgeCopy!=repeaterAcknowledge || repeaterTemplateCopy!=repeaterTemplate - || idleTemplateCopy!=idleTemplate) + || repeaterTxDelayCopy!=repeaterTxDelay + || repeaterImageSizeCopy!=repeaterImageSize + || repeaterIdleTemplateCopy!=repeaterIdleTemplate) changed=true; } void repeaterConfig::setParams() {; setValue(repeaterImageInterval,ui->imageIntervalSpinBox); - setValue(repeaterEnable,ui->repeaterEnableCheckBox); + setValue(repeaterEnabled,ui->repeaterEnabledCheckBox); setIndex(repeaterTxMode,ui->repeaterTxModeComboBox); + setIndex(repeaterIdleTxMode,ui->repeaterIdleTxModeComboBox); setValue(repeaterImage1,ui->repeaterImage1LineEdit); setValue(repeaterImage2,ui->repeaterImage2LineEdit); setValue(repeaterImage3,ui->repeaterImage3LineEdit); setValue(repeaterImage4,ui->repeaterImage4LineEdit); - setValue(idleTemplate,ui->idleTemplateLineEdit); + setValue(repeaterIdleTemplate,ui->repeaterIdleTemplateLineEdit); setValue(repeaterTemplate,ui->repeaterTemplateLineEdit); + setValue(repeaterTxDelay,ui->txDelaySpinBox); + setValue(repeaterImageSize,ui->txDRMImageSizeSpinBox); } + + + +void repeaterConfig::slotRp1Browse() +{ + browseGetFile(ui->repeaterImage1LineEdit,txStockImagesPath); +} + +void repeaterConfig::slotRp2Browse() +{ + browseGetFile(ui->repeaterImage2LineEdit,txStockImagesPath); +} +void repeaterConfig::slotRp3Browse() +{ + browseGetFile(ui->repeaterImage3LineEdit,txStockImagesPath); +} +void repeaterConfig::slotRp4Browse() +{ + browseGetFile(ui->repeaterImage4LineEdit,txStockImagesPath); +} + +void repeaterConfig::slotRepeaterIdleTemplateBrowse() +{ + browseGetFile(ui->repeaterIdleTemplateLineEdit ,templatesPath); +} +void repeaterConfig::slotRepeaterTemplateBrowse() +{ + browseGetFile(ui->repeaterTemplateLineEdit,templatesPath); +} + + diff --git a/qsstv/config/repeaterconfig.h b/qsstv/config/repeaterconfig.h index ec47ca6..686bee9 100644 --- a/qsstv/config/repeaterconfig.h +++ b/qsstv/config/repeaterconfig.h @@ -2,19 +2,22 @@ #define REPEATERCONFIG_H #include "baseconfig.h" -#include "sstv/sstvparam.h" +#include "sstvparam.h" -extern bool repeaterEnable; +extern bool repeaterEnabled; extern int repeaterImageInterval; extern esstvMode repeaterTxMode; +extern esstvMode repeaterIdleTxMode; extern QString repeaterImage1; extern QString repeaterImage2; extern QString repeaterImage3; extern QString repeaterImage4; extern QString repeaterAcknowledge; extern QString repeaterTemplate; -extern QString idleTemplate; +extern QString repeaterIdleTemplate; +extern int repeaterTxDelay; +extern int repeaterImageSize; // in kB namespace Ui { class repeaterConfig; @@ -31,6 +34,14 @@ public: void writeSettings(); void getParams(); void setParams(); + +private slots: + void slotRp1Browse(); + void slotRp2Browse(); + void slotRp3Browse(); + void slotRp4Browse(); + void slotRepeaterIdleTemplateBrowse(); + void slotRepeaterTemplateBrowse(); private: Ui::repeaterConfig *ui; diff --git a/qsstv/config/repeaterconfig.ui b/qsstv/config/repeaterconfig.ui index bfc3847..1a49d1c 100644 --- a/qsstv/config/repeaterconfig.ui +++ b/qsstv/config/repeaterconfig.ui @@ -6,8 +6,8 @@ 0 0 - 624 - 474 + 721 + 554 @@ -15,9 +15,9 @@ - + - + Enable Repeater @@ -69,7 +69,10 @@ - 5 + 1 + + + 1440 @@ -91,24 +94,13 @@ + + + + - - - 6 - - - 0 - - - 0 - - - 0 - - - 0 - - + + Repeater TX mode @@ -118,31 +110,72 @@ - + + + + + Tx Delay (sec) + + + + + + + + + + 4 + + + 100 + + + + + + + Idle Image TX mode + + + false + + + + + + + + + + DRM Image Size (kB) + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 60 + 20 + + + + - - - 6 - - - 0 - - - 0 - - - 0 - - - 0 - - + + Idle Image 1 @@ -152,14 +185,14 @@ - + false - + @@ -172,26 +205,7 @@ - - - - - - 6 - - - 0 - - - 0 - - - 0 - - - 0 - - + Idle Image 2 @@ -201,14 +215,14 @@ - + false - + @@ -221,26 +235,7 @@ - - - - - - 6 - - - 0 - - - 0 - - - 0 - - - 0 - - + Idle Image 3 @@ -250,14 +245,14 @@ - + false - + @@ -270,26 +265,7 @@ - - - - - - 6 - - - 0 - - - 0 - - - 0 - - - 0 - - + Idle Image 4 @@ -299,14 +275,14 @@ - + false - + @@ -319,11 +295,7 @@ - - - - - + Idle Template @@ -333,11 +305,11 @@ - - + + - - + + 0 @@ -349,11 +321,7 @@ - - - - - + Repeater Template @@ -363,10 +331,10 @@ - + - + diff --git a/qsstv/config/rigconfig.cpp b/qsstv/config/rigconfig.cpp index 867cc35..76bf780 100644 --- a/qsstv/config/rigconfig.cpp +++ b/qsstv/config/rigconfig.cpp @@ -1,8 +1,29 @@ +/************************************************************************** +* Copyright (C) 2000-2019 by Johan Maes * +* on4qz@telenet.be * +* http://users.telenet.be/on4qz * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ + #include "rigconfig.h" #include "ui_rigconfig.h" #include "appglobal.h" #include "configparams.h" -#include "utils/supportfunctions.h" +#include "supportfunctions.h" #include "rigcontrol.h" #include #include diff --git a/qsstv/config/soundconfig.cpp b/qsstv/config/soundconfig.cpp index 65f4de3..f50ade9 100644 --- a/qsstv/config/soundconfig.cpp +++ b/qsstv/config/soundconfig.cpp @@ -1,5 +1,5 @@ /************************************************************************** -* Copyright (C) 2000-2012 by Johan Maes * +* Copyright (C) 2000-2019 by Johan Maes * * on4qz@telenet.be * * http://users.telenet.be/on4qz * * * @@ -18,6 +18,7 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ + #include "soundconfig.h" #include "ui_soundconfig.h" #include "configparams.h" diff --git a/qsstv/config/waterfallconfig.cpp b/qsstv/config/waterfallconfig.cpp index bbbad9b..3dd3b2e 100644 --- a/qsstv/config/waterfallconfig.cpp +++ b/qsstv/config/waterfallconfig.cpp @@ -1,3 +1,24 @@ +/************************************************************************** +* Copyright (C) 2000-2019 by Johan Maes * +* on4qz@telenet.be * +* http://users.telenet.be/on4qz * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ + #include "waterfallconfig.h" #include "ui_waterfallconfig.h" #include @@ -9,6 +30,8 @@ QString fixWF; QString bsrWF; QString startBinWF; QString endBinWF; +QString startRepeaterWF; +QString endRepeaterWF; QString wfFont; int wfFontSize; bool wfBold; @@ -38,6 +61,10 @@ void waterfallConfig::readSettings() bsrWF=qSettings.value("bsrWF","BSR").toString(); startBinWF=qSettings.value("startBinWF","START BIN").toString(); endBinWF=qSettings.value("endBinWF","END BIN").toString(); + + startRepeaterWF=qSettings.value("startRepeaterWF","START RPT").toString(); + endRepeaterWF=qSettings.value("endRepeaterWF","END RPT").toString(); + wfFont=qSettings.value("wfFont","Arial").toString(); wfFontSize=qSettings.value("wfFontSize",12).toInt(); wfBold=qSettings.value("wfBold",false).toBool(); @@ -57,6 +84,8 @@ void waterfallConfig::writeSettings() qSettings.setValue("bsrWF",bsrWF); qSettings.setValue("startBinWF",startBinWF); qSettings.setValue("endBinWF",endBinWF); + qSettings.setValue("startRepeaterWF",startRepeaterWF); + qSettings.setValue("endRepeaterWF",endRepeaterWF); qSettings.setValue("wfFont",wfFont); qSettings.setValue("wfFontSize",wfFontSize); qSettings.setValue("wfBold",wfBold); @@ -73,6 +102,8 @@ void waterfallConfig::getParams() getValue(bsrWF,ui->bsrTextEdit); getValue(startBinWF,ui->startBinTextEdit); getValue(endBinWF,ui->endBinTextEdit); + getValue(startRepeaterWF,ui->startRepeaterTextEdit); + getValue(endRepeaterWF,ui->endRepeaterTextEdit); getValue(wfFont,ui->fontComboBox); getValue(wfFontSize,ui->sizeSpinBox); getValue(wfBold,ui->boldCheckBox); @@ -87,6 +118,8 @@ void waterfallConfig::setParams() setValue(bsrWF,ui->bsrTextEdit); setValue(startBinWF,ui->startBinTextEdit); setValue(endBinWF,ui->endBinTextEdit); + setValue(startRepeaterWF,ui->startRepeaterTextEdit); + setValue(endRepeaterWF,ui->endRepeaterTextEdit); ui->fontComboBox->blockSignals(true); ui->sizeSpinBox->blockSignals(true); setValue(sampleString,ui->sampleLineEdit); diff --git a/qsstv/config/waterfallconfig.h b/qsstv/config/waterfallconfig.h index 73a6693..175172d 100644 --- a/qsstv/config/waterfallconfig.h +++ b/qsstv/config/waterfallconfig.h @@ -10,6 +10,8 @@ extern QString bsrWF; extern QString startBinWF; extern QString endBinWF; extern QString wfFont; +extern QString startRepeaterWF; +extern QString endRepeaterWF; extern int wfFontSize; extern bool wfBold; diff --git a/qsstv/config/waterfallconfig.ui b/qsstv/config/waterfallconfig.ui index 664a2ca..dcdd8d5 100644 --- a/qsstv/config/waterfallconfig.ui +++ b/qsstv/config/waterfallconfig.ui @@ -6,31 +6,72 @@ 0 0 - 683 - 437 + 744 + 558 Form - - 1 - - - 0 - - - 0 - - - 0 - - - 0 - - + + + + + End Binary + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + 2 + + + 1 + + + + + + + Start Repeater + + + + + + + + 0 + 0 + + + + @@ -47,6 +88,22 @@ + + + + + 0 + 0 + + + + + 0 + 0 + + + + @@ -80,16 +137,6 @@ - - - - - 0 - 0 - - - - @@ -106,8 +153,47 @@ - - + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + Start Picture + + + false + + + + + + + End Repeater + + + + + 0 @@ -128,68 +214,25 @@ - - - - - 0 - 0 - - - - Start Picture - - - false - - - - - + + 0 0 - - - - - - - 0 - 0 - - - + - 0 - 0 + 16777215 + 16777215 - - - - - - End Binary + + 2 - - - - - - - 0 - 0 - - - - - 0 - 0 - + + 1 @@ -260,8 +303,6 @@ - fontLabel - fontLabel diff --git a/qsstv/dispatch/dispatcher.cpp b/qsstv/dispatch/dispatcher.cpp index 238b1b8..3612dbb 100644 --- a/qsstv/dispatch/dispatcher.cpp +++ b/qsstv/dispatch/dispatcher.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2000-2008 by Johan Maes * + * Copyright (C) 2000-2019 by Johan Maes * * on4qz@telenet.be * * http://users.telenet.be/on4qz * * * @@ -18,6 +18,7 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ + /*! The dispatcher is the central system that routes all messages from the different threads. It also starts, stops and synchronizes the threads. @@ -29,22 +30,19 @@ It also starts, stops and synchronizes the threads. #include "rxwidget.h" #include "txwidget.h" #include "gallerywidget.h" -#include "widgets/spectrumwidget.h" -#include "widgets/vumeter.h" +#include "spectrumwidget.h" +#include "vumeter.h" #include "rxfunctions.h" #include "mainwindow.h" -#include "utils/ftp.h" #include "rigcontrol.h" -#include "logbook/logbook.h" +#include "logbook.h" #include "dirdialog.h" +#include "ftpfunctions.h" + #include #include - - -/*! -creates dispatcher instance - */ +/*! creates dispatcher instance */ dispatcher::dispatcher() { @@ -54,9 +52,7 @@ dispatcher::dispatcher() prTimerIndex=0; } -/*! -delete dispatcher instance - */ +/*! delete dispatcher instance */ dispatcher::~dispatcher() { @@ -66,33 +62,9 @@ void dispatcher::init() { editorActive=false; infoTextPtr=new textDisplay(mainWindowPtr); - mainWindowPtr->spectrumFramePtr->init(RXSTRIPE,1,BASESAMPLERATE/SUBSAMPLINGFACTOR); + mainWindowPtr->spectrumFramePtr->init(RXSTRIPE,fftNumBlocks,BASESAMPLERATE/SUBSAMPLINGFACTOR); infoTextPtr->hide(); - setOnlineStatus(true, onlineStatusText); - connect(notifyRXIntf, SIGNAL(notification(QString)), this, SLOT(slotRXNotification(QString))); - connect(notifyTXIntf, SIGNAL(notification(QString)), this, SLOT(slotTXNotification(QString))); - connect(hybridTxIntf, SIGNAL(commandsDone(bool)), this, SLOT(slotHybridTxDone(bool))); - -} - -void dispatcher::setOnlineStatus(bool online, QString info) -{ - txWidgetPtr->functionsPtr()->setOnlineStatus(online, info); - - // TODO: move to rxWidget->functions->? - if (!online && enableFTP) - { - ftpInterface rxftp("RX Image Cleanup"); - rxftp.setupConnection(ftpRemoteHost,ftpPort,ftpLogin,ftpPassword,ftpRemoteSSTVDirectory); - rxftp.uploadToRXServer(""); // mark SSTV offline - rxftp.changePath(ftpRemoteDRMDirectory); - rxftp.uploadToRXServer(""); // mark DSSTV/DRM offline - } -} - -void dispatcher::who() -{ - txWidgetPtr->functionsPtr()->who(); + connect(&ff,SIGNAL(listingDone(bool)),SLOT(slotRenameListing(bool))); } @@ -103,58 +75,62 @@ void dispatcher::who() void dispatcher::customEvent( QEvent * e ) { dispatchEventType type; - ftpInterface * iPtr; QString fn; type=(dispatchEventType)e->type(); - addToLog(((baseEvent*)e)->description,LOGDISPATCH); + if((type!=displayFFT) + && (type!=displaySync) + && (type!=rxSSTVStatus) + && (type!=lineDisplay) + && (type!=displayDRMInfo) + && (type!=displayDRMStat) + ) + { + addToLog(((baseEvent*)e)->description,LOGDISPATCH); + } switch(type) { case displayFFT: - addToLog("dispatcher: displayFFT",LOGDISPATCH); mainWindowPtr->spectrumFramePtr->realFFT(((displayFFTEvent*)e)->data()); rxWidgetPtr->vMeterPtr()->setValue(soundIOPtr->getVolumeDb()); - // addToLog(QString::number(soundIOPtr->getVolumeDb()),LOGALL); - - break; + break; case displaySync: - // addToLog("dispatcher: displaySync",LOGDISPATCH); uint s; ((displaySyncEvent*)e)->getInfo(s); rxWidgetPtr->sMeterPtr()->setValue((double)s); - break; + break; case rxSSTVStatus: rxWidgetPtr->setSSTVStatusText(((rxSSTVStatusEvent*)e)->getStr()); - break; + break; case startImageRX: addToLog("dispatcher: clearing RxImage",LOGDISPATCH); // rxWidgetPtr->getImageViewerPtr()->createImage( ((startImageRXEvent*)e)->getSize(),QColor(0,0,128),imageStretch); rxWidgetPtr->getImageViewerPtr()->createImage( ((startImageRXEvent*)e)->getSize(),imageBackGroundColor,imageStretch); lastCallsign=""; - break; + break; case lineDisplay: { rxWidgetPtr->getImageViewerPtr()->displayImage(); } - break; + break; case endSSTVImageRX: if(autoSave) { addToLog("dispatcher:endImage savingRxImage",LOGDISPATCH); - saveRxSSTVImage(((endImageSSTVRXEvent*)e)->getModeName()); + saveRxSSTVImage(((endImageSSTVRXEvent*)e)->getMode()); } - break; + break; case rxDRMStatus: rxWidgetPtr->setDRMStatusText(((rxDRMStatusEvent*)e)->getStr()); - break; + break; case statusBarMsg: statusBarPtr->showMessage(((statusBarMsgEvent*)e)->getStr()); - break; + break; case callEditor: if(editorActive) break; editorActive=true; @@ -164,23 +140,17 @@ void dispatcher::customEvent( QEvent * e ) addToLog (QString(" callEditorEvent imageViewPtr: %1").arg(QString::number((ulong)iv,16)),LOGDISPATCH); addToLog(QString("editor: filename %1").arg(((callEditorEvent*)e)->getFilename()),LOGDISPATCH); ed->openFile(((callEditorEvent*)e)->getFilename()); - break; + break; - case rxDRMNotify: - rxWidgetPtr->setDRMNotifyText(((rxDRMNotifyEvent*)e)->getStr()); - break; - case rxDRMNotifyAppend: - rxWidgetPtr->appendDRMNotifyText(((rxDRMNotifyAppendEvent*)e)->getStr()); - break; case txDRMNotify: txWidgetPtr->setDRMNotifyText(((txDRMNotifyEvent*)e)->getStr()); - break; + break; case txDRMNotifyAppend: txWidgetPtr->appendDRMNotifyText(((txDRMNotifyAppendEvent*)e)->getStr()); - break; + break; case txPrepareComplete: txWidgetPtr->prepareTxComplete(((txPrepareCompleteEvent *)e)->ok()); - break; + break; case editorFinished: if(!editorActive) break; @@ -191,22 +161,22 @@ void dispatcher::customEvent( QEvent * e ) } editorActive=false; delete ed; - break; + break; case templatesChanged: galleryWidgetPtr->changedMatrix(imageViewer::TEMPLATETHUMB); txWidgetPtr->setupTemplatesComboBox(); - break; + break; case progressTX: txTimeCounter=0; addToLog(QString("dispatcher: progress duration=%1").arg(((progressTXEvent*)e)->getInfo()),LOGDISPATCH); prTimerIndex=startTimer(((progressTXEvent*)e)->getInfo()*10); // time in seconds -> times 1000 for msec,divide by 100 for progress - break; + break; case stoppingTX: addToLog("dispatcher: endTXImage",LOGDISPATCH); - break; + break; case endImageTX: //addToLog("dispatcher: endTXImage",LOGDISPATCH); @@ -215,8 +185,9 @@ void dispatcher::customEvent( QEvent * e ) qApp->processEvents(); } addToLog("dispatcher: endTXImage",LOGDISPATCH); - startRX(); - break; + txWidgetPtr->slotStop(); +// startRX(); + break; case displayDRMInfo: if(!slowCPU) @@ -225,32 +196,34 @@ void dispatcher::customEvent( QEvent * e ) rxWidgetPtr->facWdg()->setConstellation(FAC); } rxWidgetPtr->statusWdg()->setStatus(); - break; + break; case displayDRMStat: DSPFLOAT s1; ((displayDRMStatEvent*)e)->getInfo(s1); rxWidgetPtr->sMeterPtr()->setValue(s1); - break; + break; case loadRXImage: { QString fn=((loadRXImageEvent *)e)->getFilename(); - rxWidgetPtr->getImageViewerPtr()->openImage(fn,false,false,false); + rxWidgetPtr->getImageViewerPtr()->openImage(fn,false,false,false,true); } - break; + break; case moveToTx: { + addToLog(QString("moveToTx: %1").arg(((moveToTxEvent *)e)->getFilename()),LOGDISPATCH); txWidgetPtr->setImage(((moveToTxEvent *)e)->getFilename()); } - break; + break; case saveDRMImage: { QString info; ((saveDRMImageEvent*)e)->getFilename(fn); ((saveDRMImageEvent*)e)->getInfo(info); - if(!rxWidgetPtr->getImageViewerPtr()->openImage(fn,false,false,false)) + if(!rxWidgetPtr->getImageViewerPtr()->openImage(fn,false,false,false,false)) { + // simply save the file if it is not an image file if(mbox==NULL) delete mbox; mbox = new QMessageBox(mainWindowPtr); mbox->setWindowTitle("Received file"); @@ -260,19 +233,23 @@ void dispatcher::customEvent( QEvent * e ) break; } saveImage(fn, info); + if(repeaterEnabled) + { + txWidgetPtr->sendRepeaterImage(); + } } - break; + break; case prepareFix: addToLog("prepareFix",LOGDISPATCH); startDRMFIXTx( ((prepareFixEvent*)e)->getData()); - break; + break; case displayText: infoTextPtr->clear(); infoTextPtr->setWindowTitle(QString("Received from %1").arg(drmCallsign)); infoTextPtr->append(((displayTextEvent*)e)->getStr()); infoTextPtr->show(); - break; + break; case displayMBox: if(mbox==NULL) delete mbox; @@ -281,7 +258,7 @@ void dispatcher::customEvent( QEvent * e ) mbox->setText(((displayMBoxEvent*)e)->getStr()); mbox->show(); QTimer::singleShot(4000, mbox, SLOT(hide())); - break; + break; case displayProgressFTP: { @@ -299,60 +276,18 @@ void dispatcher::customEvent( QEvent * e ) progressFTP->setMaximum(((displayProgressFTPEvent*)e)->getTotal()); progressFTP->setValue(((displayProgressFTPEvent*)e)->getBytes()); } - break; - case ftpSetup: - - iPtr=((ftpSetupEvent*)e)->getFtpIntfPtr(); - if(iPtr==notifyRXIntf) - { - notifyRXDone=DFTPWAITING; - } - else if(iPtr==hybridTxIntf) - { - hybridTxDone=DFTPWAITING; - } - else if(iPtr==notifyTXIntf) - { - notifyTxDone=DFTPWAITING; - } - iPtr->setupConnection( - ((ftpSetupEvent*)e)->getHost(), - ((ftpSetupEvent*)e)->getPort(), - ((ftpSetupEvent*)e)->getUser(), - ((ftpSetupEvent*)e)->getPassword(), - ((ftpSetupEvent*)e)->getDir()); - break; - - case ftpUploadFile: - - ((ftpUploadFileEvent*)e)->getFtpIntfPtr()->uploadFile( - ((ftpUploadFileEvent*)e)->getSrcFn(), - ((ftpUploadFileEvent*)e)->getDstFn(), - ((ftpUploadFileEvent*)e)->getReconnect() - ); - break; - - - case notifyAction: - notifyRXIntf->mremove(((notifyActionEvent*)e)->getToRemove()); - notifyRXIntf->uploadData(((notifyActionEvent*)e)->getMsg().toLatin1(), ((notifyActionEvent*)e)->getFilename()); - break; + break; +// case notifyAction: // sends notification after reception of hybrid image +// // todo notifyRXIntfPtr->mremove(((notifyActionEvent*)e)->getToRemove()); +// // notifyRXIntfPtr->uploadData(((notifyActionEvent*)e)->getMsg().toLatin1(), ((notifyActionEvent*)e)->getFilename()); +// break; case notifyCheck: - - - iPtr=((ftpSetupEvent*)e)->getFtpIntfPtr(); - - iPtr->startNotifyCheck( - ((notifyCheckEvent*)e)->getFilename(), - ((notifyCheckEvent*)e)->getInterval(), - ((notifyCheckEvent*)e)->getRepeats(), - ((notifyCheckEvent*)e)->getToRemove() - ); - break; + txWidgetPtr->startNotifyCheck(((notifyCheckEvent*)e)->getFilename()); + break; default: - addToLog(QString("unsupported event: %1").arg(((baseEvent*)e)->description), LOGALL); - break; + addToLogDebug(QString("unsupported event: %1").arg(((baseEvent*)e)->description), LOGALL); + break; } ((baseEvent *)e)->setDone(); } @@ -387,10 +322,6 @@ void dispatcher::startTX(txFunctions::etxState state) txWidgetPtr->functionsPtr()->startTX(state); } -void dispatcher::prepareTX(txFunctions::etxState state) -{ - txWidgetPtr->functionsPtr()->prepareTX(state); -} void dispatcher::startDRMFIXTx(QByteArray ba) { @@ -402,6 +333,8 @@ void dispatcher::startDRMTxBinary() { //TODO: this whole thing should probably live in txWidget::slotBinary QFileInfo finfo; + int sizeOfFile; + QString sizeStr; int txtime=0; QMessageBox mbox(mainWindowPtr); QPushButton *sendButton; @@ -419,8 +352,22 @@ void dispatcher::startDRMTxBinary() mbox.setWindowTitle("TX Binary File"); mbox.setText(QString("'%1'").arg(filename)); - mbox.setInformativeText(QString("The file is %1Kb and will take %2 seconds on air to send"). - arg(finfo.size()/1000.0,0,'f',0).arg(txtime)); + sizeOfFile=finfo.size(); + if(sizeOfFile<1000) + { + sizeStr=QString("%1 bytes").arg(sizeOfFile); + } + else if(sizeOfFile<10000) + { + sizeStr=QString("%1 kB").arg(sizeOfFile/1000.0,3,'f',2); + } + else + { + sizeStr=QString("%1 kB").arg(sizeOfFile/1000.0,3,'f',1); + } + + mbox.setInformativeText(QString("The file is %1 and will take %2 seconds on air to send"). + arg(sizeStr).arg(txtime)); if (useHybrid) sendButton = mbox.addButton(tr("Upload ready to transmit"), QMessageBox::AcceptRole); @@ -460,17 +407,24 @@ void dispatcher::logSSTV(QString call,bool fromFSKID) } -void dispatcher::saveRxSSTVImage(QString shortModeName) +void dispatcher::saveRxSSTVImage(esstvMode mode) { QString info,s,fileName; + QString shortModeName=getSSTVModeNameShort(mode); + + QTemporaryFile tfn; int m; QDateTime dt(QDateTime::currentDateTime().toUTC()); //this is compatible with QT 4.6 dt.setTimeSpec(Qt::UTC); - if (shortModeName.isEmpty()) + if (mode==NOTVALID) { lastFileName.clear(); return; } + if(repeaterEnabled) + { + txWidgetPtr->sendRepeaterImage(mode); + } if(!autoSave) { lastFileName=shortModeName; @@ -500,6 +454,7 @@ void dispatcher::saveRxSSTVImage(QString shortModeName) void dispatcher::saveImage(QString fileName, QString infotext) { + // filename is the name of the original file in hybrid mode QFileInfo info(fileName); QString fn="/tmp/"+info.baseName()+"."+ftpDefaultImageFormat; galleryWidgetPtr->putRxImage(fileName); @@ -509,7 +464,8 @@ void dispatcher::saveImage(QString fileName, QString infotext) QImage *imp = rxWidgetPtr->getImageViewerPtr()->getImagePtr(); QImage im; - if (imp && imp->width()) { + if (imp && imp->width()) + { // the original source image is available, possibly in higher quality // than the displayed image. Only for DRM Images. im = QImage(imp->convertToFormat(QImage::Format_RGB32)); @@ -524,27 +480,22 @@ void dispatcher::saveImage(QString fileName, QString infotext) QPainter p; double freq=0; int pixelSize, height, width; - rigControllerPtr->getFrequency(freq); + text = QString("%1 UTC %2 kHz ").arg(QDateTime::currentDateTime().toUTC().toString("hh:mm ddd MMM d, yyyy")).arg(freq/1000,1,'f',0); - text = QString("%1 UTC %2 kHz "). - arg(QDateTime::currentDateTime().toUTC().toString("hh:mm ddd MMM d, yyyy")). - arg(freq/1000,1,'f',0); - - if (transmissionModeIndex==TRXSSTV) { + if (transmissionModeIndex==TRXSSTV) + { remoteDir = ftpRemoteSSTVDirectory; } - else { + else + { remoteDir = ftpRemoteDRMDirectory; } - if (!infotext.isEmpty()) text += " "+infotext; - // Limit uploaded size if ((im.width() > 960) || (im.height() > 768)) { im = im.scaled(960,768, Qt::KeepAspectRatio); } - // Stamp text over the top left of the image // and keep it the same portion, unless the // font would be unreadable @@ -553,10 +504,8 @@ void dispatcher::saveImage(QString fileName, QString infotext) if (pixelSize<8) pixelSize=8; font.setPixelSize(pixelSize); QFontMetrics fontm(font); - width = fontm.width(text) + 6; height= fontm.height() + 2; - p.begin(&im); p.setPen(Qt::black); p.fillRect(0,0,width,height, Qt::black); @@ -564,52 +513,89 @@ void dispatcher::saveImage(QString fileName, QString infotext) p.setBrush(Qt::white); p.setFont(font); p.drawText(2,height-fontm.descent()-1, text); - - im.save(fn, ftpDefaultImageFormat.toUpper().toLatin1().data()); + im.save( fn, ftpDefaultImageFormat.toUpper().toLatin1().data()); p.end(); - uploadToRXServer(remoteDir, fn); - QFile::remove(fn); } } void dispatcher::uploadToRXServer(QString remoteDir, QString fn) { - displayMBoxEvent *stmb=0; - eftpError ftpResult; + // todo ftp + QString uploadDestinationFile=fn; + uploadSourceFile=fn; + if(ff.isBusy()) return; + ff.setupFtp("FTP Upload to server",ftpRemoteHost,ftpPort,ftpLogin,ftpPassword,remoteDir); - ftpInterface ftpIntf("Save RX Image"); - - ftpIntf.setupConnection(ftpRemoteHost,ftpPort,ftpLogin,ftpPassword,remoteDir); - - ftpResult=ftpIntf.uploadToRXServer(fn); - switch(ftpResult) + QImage im(1,QDateTime::currentDateTime().time().minute(),QImage::Format_RGB32); + im.fill(Qt::black); + QByteArray ba; + QBuffer buffer(&ba); + buffer.open(QIODevice::WriteOnly); + im.save(&buffer, "JPG"); + ff.uploadData(ba,"checknew.jpg",false,false); + if(ftpSaveFormat==FTPIMAGESEQUENCE) { - case FTPOK: - break; - case FTPERROR: - stmb= new displayMBoxEvent("FTP Error",QString("Host: %1: %2").arg(ftpRemoteHost).arg(ftpIntf.getLastError())); - break; - case FTPNAMEERROR: - stmb= new displayMBoxEvent("FTP Error",QString("Host: %1, Error in filename").arg(ftpRemoteHost)); - break; - case FTPCANCELED: - stmb= new displayMBoxEvent("FTP Error",QString("Connection to %1 Canceled").arg(ftpRemoteHost)); - break; - case FTPTIMEOUT: - stmb= new displayMBoxEvent("FTP Error",QString("Connection to %1 timed out").arg(ftpRemoteHost)); - break; - default: - stmb= new displayMBoxEvent("FTP Error",QString("Unknown FTP error: %1").arg(ftpResult)); - break; + ff.listFiles("image*",false); } - if(ftpResult!=FTPOK) + else { - QApplication::postEvent( dispatcherPtr, stmb ); // Qt will delete it when done + ff.uploadFile(uploadSourceFile,uploadDestinationFile,false,true); } } +void dispatcher::slotRenameListing(bool err) +{ + int i; + if(err) return; + QList images; + QString extension=""; + + if(addExtension) extension="."+ftpDefaultImageFormat.toLower(); + images=ff.getListing(); + QString src,dst; + for(i=ftpNumImages;i>1;i--) + { + src=QString("image%1%2").arg(i-1).arg(extension); + dst=QString("image%1%2").arg(i).arg(extension); + if(inList(images,src)) + { + ff.rename(src,dst,false,false); + } + } + ff.uploadFile(uploadSourceFile,"image1"+extension,false,true); +} + + + +bool dispatcher::inList(QList lst,QString fn) +{ + int i; + for(i=0;iappendDRMNotifyText(info); - } -} + void dispatcher::slotTXNotification(QString info) { @@ -644,19 +624,3 @@ void dispatcher::slotTXNotification(QString info) txWidgetPtr->appendDRMNotifyText(info); } } - - -void dispatcher::slotHybridTxDone(bool error) -{ - if(error) - { - hybridTxDone=DFTPERROR; - } - else - { - hybridTxDone=DFTPOK; - } - -} - - diff --git a/qsstv/dispatch/dispatcher.h b/qsstv/dispatch/dispatcher.h index d35d18b..c1bc7ea 100644 --- a/qsstv/dispatch/dispatcher.h +++ b/qsstv/dispatch/dispatcher.h @@ -1,32 +1,15 @@ -/*************************************************************************** - * Copyright (C) 2000-2008 by Johan Maes * - * on4qz@telenet.be * - * http://users.telenet.be/on4qz * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ -#ifndef DISPATCHER_H +#ifndef DISPATCHER_H #define DISPATCHER_H #include "dispatchevents.h" #include "appglobal.h" #include #include "textdisplay.h" #include "txfunctions.h" +#include "ftpfunctions.h" class editor; class imageViewer; + + #include enum eftpResult {DFTPWAITING,DFTPOK,DFTPERROR}; @@ -46,7 +29,6 @@ public: void idleAll(); void startRX(); void startTX(txFunctions::etxState state); - void prepareTX(txFunctions::etxState state); void readSettings(); void writeSettings(); void customEvent( QEvent * e ); @@ -58,22 +40,21 @@ public: void saveImage(QString fileName, QString infotext); void uploadToRXServer(QString remoteDir, QString fn); void logSSTV(QString call, bool fromFSKID); - void setOnlineStatus(bool online, QString info=""); - void who(); - eftpResult notifyRXDone; - eftpResult hybridTxDone; - eftpResult notifyTxDone; + void showOffLine(); +// eftpResult notifyRXDone; +// eftpResult hybridTxDone; +// eftpResult hybridRxDone; +// eftpResult notifyTxDone; private slots: - void slotRXNotification(QString info); +// void slotRXNotification(QString info); void slotTXNotification(QString); -// void slotWhoResult(); - void slotHybridTxDone(bool error); - + void slotRenameListing(bool err); private: - void saveRxSSTVImage(QString shortModeName); + void saveRxSSTVImage(esstvMode mode); + bool inList(QList lst,QString fn); void timerEvent(QTimerEvent *event); bool editorActive; editor *ed; @@ -87,6 +68,8 @@ private: QString lastFileName; QString lastCallsign; QDateTime saveTimeStamp; + ftpFunctions ff; + QString uploadSourceFile; }; #endif diff --git a/qsstv/dispatch/dispatchevents.h b/qsstv/dispatch/dispatchevents.h index bcd82cd..9e8040b 100644 --- a/qsstv/dispatch/dispatchevents.h +++ b/qsstv/dispatch/dispatchevents.h @@ -1,31 +1,13 @@ -/*************************************************************************** - * Copyright (C) 2000-2008 by Johan Maes * - * on4qz@telenet.be * - * http://users.telenet.be/on4qz * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ #ifndef DISPATCHEVENT_H #define DISPATCHEVENT_H #include -#include "widgets/imageviewer.h" +#include "imageviewer.h" #include "appdefs.h" +#include "hybridcrypt.h" #include +#include "sstvparam.h" -class ftpInterface; +class ftpThread; /** dispatch events are used to communicate with the different threads */ @@ -46,14 +28,9 @@ enum dispatchEventType endImageTX, stoppingTX, progressTX, - // verticalRetrace, - // syncLost, outOfSync, -// statusMsg, //!< display status message rxSSTVStatus, //! shows message in sstv tab rxDRMStatus, //! shows message in drm tab - rxDRMNotify, //! shows text in rx notifications box - rxDRMNotifyAppend, txDRMNotify, //! shows text in tx notifications box txDRMNotifyAppend, txPrepareComplete, //!< tx preparations (uploading etc) complete @@ -62,8 +39,8 @@ enum dispatchEventType templatesChanged, editorFinished, changeRXFilter, - startAutoRepeater, - startRepeater, +// startAutoRepeater, +// startRepeater, stopRxTx, loadRXImage, saveDRMImage, @@ -72,7 +49,7 @@ enum dispatchEventType displayMBox, displayProgressFTP, moveToTx, - notifyAction, +// notifyAction, ftpSetup, notifyCheck, ftpUploadFile, @@ -143,7 +120,7 @@ public: private: uint sync; - DSPFLOAT vol; +// DSPFLOAT vol; }; class displayDRMStatEvent : public baseEvent @@ -161,38 +138,25 @@ private: DSPFLOAT snr; }; -//class statusMsgEvent : public baseEvent -//{ -//public: -// /** create event */ -// statusMsgEvent(QString t):baseEvent( (QEvent::Type)statusMsg ), str(t) -// { -// description="statusMsgEvent"; -// } -// /** returns info string from the event */ -// QString getStr() const { return str; } -//private: -// QString str; -//}; class ftpSetupEvent : public baseEvent { public: /** create event */ - ftpSetupEvent(ftpInterface * ftpIntf,QString h,int p,QString u,QString pwd,QString d) + ftpSetupEvent(ftpThread * ftpIntf,QString h,int p,QString u,QString pwd,QString d) :baseEvent( (QEvent::Type)ftpSetup ),ftpIntfPtr(ftpIntf), host(h),port(p),user(u),password(pwd),dir(d) { description="ftpSetupEvent"; } /** returns settings from the event */ - ftpInterface *getFtpIntfPtr() const { return ftpIntfPtr; } + ftpThread *getFtpIntfPtr() const { return ftpIntfPtr; } QString getHost() const { return host; } int getPort() const { return port; } QString getUser() const { return user; } QString getPassword() const { return password; } QString getDir() const { return dir; } private: - ftpInterface *ftpIntfPtr; + ftpThread *ftpIntfPtr; QString host; int port; QString user; @@ -204,18 +168,18 @@ class ftpUploadFileEvent : public baseEvent { public: /** create event */ - ftpUploadFileEvent(ftpInterface * ftpIntf,QString srcFn,QString dstFn,bool recon) + ftpUploadFileEvent(ftpThread * ftpIntf,QString srcFn,QString dstFn,bool recon) :baseEvent( (QEvent::Type)ftpUploadFile ),ftpIntfPtr(ftpIntf),sourceFilename(srcFn), destFilename(dstFn),reconnect(recon) { description="ftpUploadFileEvent"; } /** returns settings from the event */ - ftpInterface *getFtpIntfPtr() const { return ftpIntfPtr; } + ftpThread *getFtpIntfPtr() const { return ftpIntfPtr; } QString getSrcFn() const { return sourceFilename; } QString getDstFn() const { return destFilename; } bool getReconnect() const { return reconnect; } private: - ftpInterface *ftpIntfPtr; + ftpThread *ftpIntfPtr; QString sourceFilename; QString destFilename; bool reconnect; @@ -223,47 +187,39 @@ private: -class notifyActionEvent : public baseEvent -{ -public: - /** create event */ - notifyActionEvent(QString toRem,QString message,QString fn) - :baseEvent( (QEvent::Type)notifyAction ), toRemove(toRem),msg(message),filename(fn) - { - description="notifyActionEvent"; - } - /** returns settings from the event */ - QString getToRemove() const { return toRemove; } - QString getMsg() const { return msg; } - QString getFilename() const { return filename; } -private: - QString toRemove; - QString msg; - QString filename; -}; +//class notifyActionEvent : public baseEvent +//{ +//public: +// /** create event */ +// notifyActionEvent(hybridCrypt thc,QString toRem,QString message,QString fn) +// :baseEvent( (QEvent::Type)notifyAction ),hc(thc), toRemove(toRem),msg(message),filename(fn) +// { +// description="notifyActionEvent"; +// } +// /** returns settings from the event */ +// hybridCrypt getHybridCrypt() const { return hc; } +// QString getToRemove() const { return toRemove; } +// QString getMsg() const { return msg; } +// QString getFilename() const { return filename; } +//private: +// hybridCrypt hc; +// QString toRemove; +// QString msg; +// QString filename; +//}; class notifyCheckEvent : public baseEvent { public: /** create event */ - notifyCheckEvent(ftpInterface * ftpIntf,QString fn,int intv, int rp, bool rm) - :baseEvent( (QEvent::Type)notifyCheck),ftpIntfPtr(ftpIntf), filename(fn),interval(intv),repeats(rp),remove(rm) + notifyCheckEvent(QString fn):baseEvent( (QEvent::Type)notifyCheck),filename(fn) { description="notifyCheckEvent"; } - /** returns settings from the event */ - ftpInterface *getFtpIntfPtr() const { return ftpIntfPtr; } QString getFilename() const { return filename; } - int getInterval() const { return interval; } - int getRepeats() const { return repeats; } - bool getToRemove() const { return remove; } private: - ftpInterface *ftpIntfPtr; QString filename; - int interval; - int repeats; - bool remove; }; @@ -296,33 +252,7 @@ private: QString str; }; -class rxDRMNotifyEvent : public baseEvent -{ -public: - /** create event */ - rxDRMNotifyEvent(QString t):baseEvent( (QEvent::Type)rxDRMNotify ), str(t) - { - description="rxDRMNotifyEvent"; - } - /** returns info string from the event */ - QString getStr() const { return str; } -private: - QString str; -}; -class rxDRMNotifyAppendEvent : public baseEvent -{ -public: - /** create event */ - rxDRMNotifyAppendEvent(QString t):baseEvent( (QEvent::Type)rxDRMNotifyAppend ), str(t) - { - description="rxDRMNotifyAppendEvent"; - } - /** returns info string from the event */ - QString getStr() const { return str; } -private: - QString str; -}; class txDRMNotifyEvent : public baseEvent { @@ -403,25 +333,25 @@ public: } }; -class startAutoRepeaterEvent: public baseEvent -{ -public: - /** create event */ - startAutoRepeaterEvent():baseEvent( (QEvent::Type)startAutoRepeater ) - { - description="startAutoRepeaterEvent"; - } -}; +//class startAutoRepeaterEvent: public baseEvent +//{ +//public: +// /** create event */ +// startAutoRepeaterEvent():baseEvent( (QEvent::Type)startAutoRepeater ) +// { +// description="startAutoRepeaterEvent"; +// } +//}; -class startRepeaterEvent: public baseEvent -{ -public: - /** create event */ - startRepeaterEvent():baseEvent( (QEvent::Type)startRepeater ) - { - description="startRepeaterEvent"; - } -}; +//class startRepeaterEvent: public baseEvent +//{ +//public: +// /** create event */ +// startRepeaterEvent():baseEvent( (QEvent::Type)startRepeater ) +// { +// description="startRepeaterEvent"; +// } +//}; class createModeEvent : public baseEvent @@ -500,13 +430,13 @@ class endImageSSTVRXEvent : public baseEvent { public: /** create event */ - endImageSSTVRXEvent(QString mn):baseEvent( (QEvent::Type)endSSTVImageRX ),modeName(mn) + endImageSSTVRXEvent(esstvMode md):baseEvent( (QEvent::Type)endSSTVImageRX ),mode(md) { description="endImageSSTVRXEvent"; } - QString getModeName() {return modeName;} + esstvMode getMode() {return mode;} private: - QString modeName; + esstvMode mode; }; class endImageTXEvent : public baseEvent @@ -530,25 +460,6 @@ public: } }; -//class verticalRetraceEvent : public baseEvent -//{ -//public: -// /** create event */ -// verticalRetraceEvent():baseEvent( (QEvent::Type) verticalRetrace ) -// { -// description="verticalRetraceEvent"; -// } -//}; - -//class syncLostEvent : public baseEvent -//{ -//public: -// /** create event */ -// syncLostEvent():baseEvent( (QEvent::Type) syncLost ) -// { -// description="syncLostEvent"; -// } -//}; diff --git a/qsstv/documentation/api/api.doxy b/qsstv/documentation/api/api.doxy new file mode 100644 index 0000000..f93e45f --- /dev/null +++ b/qsstv/documentation/api/api.doxy @@ -0,0 +1,2494 @@ +# Doxyfile 1.8.13 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = QSSTV + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = 9.4 + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = documentation/api + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 0. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 0 + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = NO + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = ../qsstv + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.idl \ + *.ddl \ + *.odl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.cs \ + *.d \ + *.php \ + *.php4 \ + *.php5 \ + *.phtml \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.py \ + *.pyw \ + *.f90 \ + *.f95 \ + *.f03 \ + *.f08 \ + *.f \ + *.for \ + *.tcl \ + *.vhd \ + *.vhdl \ + *.ucf \ + *.qsf + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse-libclang=ON option for CMake. +# The default value is: NO. + +CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_OPTIONS = + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = api_html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = NO + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /