signalgenerator.cpp
1 /***************************************************************************
2  Copyright (C) 2002-2015 Kentaro Kitagawa
3  kitagawa@phys.s.u-tokyo.ac.jp
4 
5  This program is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Library General Public
7  License as published by the Free Software Foundation; either
8  version 2 of the License, or (at your option) any later version.
9 
10  You should have received a copy of the GNU Library General
11  Public License and a list of authors along with this program;
12  see the files COPYING and AUTHORS.
13 ***************************************************************************/
14 #include "analyzer.h"
15 #include "signalgenerator.h"
16 #include "ui_signalgeneratorform.h"
17 #include <QStatusBar>
18 
19 XSG::XSG(const char *name, bool runtime,
20  Transaction &tr_meas, const shared_ptr<XMeasure> &meas)
21  : XPrimaryDriver(name, runtime, ref(tr_meas), meas),
22  m_rfON(create<XBoolNode>("RFON", true)),
23  m_freq(create<XDoubleNode>("Freq", true, "%.13g")),
24  m_oLevel(create<XDoubleNode>("OutputLevel", true)),
25  m_fmON(create<XBoolNode>("FMON", true)),
26  m_amON(create<XBoolNode>("AMON", true)),
27  m_form(new FrmSG(g_pFrmMain)) {
28  m_form->statusBar()->hide();
29  m_form->setWindowTitle(i18n("Signal Gen. Control - ") + getLabel() );
30 
31  m_conUIs = {
32  xqcon_create<XQToggleButtonConnector>(m_rfON, m_form->m_ckbRFON),
33  xqcon_create<XQLineEditConnector>(m_oLevel, m_form->m_edOLevel),
34  xqcon_create<XQLineEditConnector>(m_freq, m_form->m_edFreq),
35  xqcon_create<XQToggleButtonConnector>(m_amON, m_form->m_ckbAMON),
36  xqcon_create<XQToggleButtonConnector>(m_fmON, m_form->m_ckbFMON)
37  };
38 
39  rfON()->setUIEnabled(false);
40  oLevel()->setUIEnabled(false);
41  freq()->setUIEnabled(false);
42  amON()->setUIEnabled(false);
43  fmON()->setUIEnabled(false);
44 }
45 void
47  m_form->showNormal();
48  m_form->raise();
49 }
50 
51 void
53  m_rfON->setUIEnabled(true);
54  m_oLevel->setUIEnabled(true);
55  m_freq->setUIEnabled(true);
56  m_amON->setUIEnabled(true);
57  m_fmON->setUIEnabled(true);
58 
59  iterate_commit([=](Transaction &tr){
60  m_lsnRFON = tr[ *rfON()].onValueChanged().connectWeakly(
61  shared_from_this(), &XSG::onRFONChanged);
62  m_lsnOLevel = tr[ *oLevel()].onValueChanged().connectWeakly(
63  shared_from_this(), &XSG::onOLevelChanged);
64  m_lsnAMON = tr[ *amON()].onValueChanged().connectWeakly(
65  shared_from_this(), &XSG::onAMONChanged);
66  m_lsnFMON = tr[ *fmON()].onValueChanged().connectWeakly(
67  shared_from_this(), &XSG::onFMONChanged);
68  m_lsnFreq = tr[ *freq()].onValueChanged().connectWeakly(
69  shared_from_this(), &XSG::onFreqChanged);
70  });
71 }
72 void
74  m_rfON->setUIEnabled(false);
75  m_oLevel->setUIEnabled(false);
76  m_freq->setUIEnabled(false);
77  m_amON->setUIEnabled(false);
78  m_fmON->setUIEnabled(false);
79 
80  m_lsnRFON.reset();
81  m_lsnOLevel.reset();
82  m_lsnAMON.reset();
83  m_lsnFMON.reset();
84  m_lsnFreq.reset();
85 
87 }
88 
89 void
91  tr[ *this].m_freq = reader.pop<double>();
92 }
93 void
94 XSG::visualize(const Snapshot &shot) {
95 }
96 void
97 XSG::onFreqChanged(const Snapshot &shot, XValueNodeBase *) {
98  double freq__ = shot[ *freq()];
99  if(freq__ <= 0) {
100  gErrPrint(getLabel() + " " + i18n("Positive Value Needed."));
101  return;
102  }
103  XTime time_awared(XTime::now());
104  changeFreq(freq__);
105 
106  auto writer = std::make_shared<RawData>();
107  writer->push(freq__);
108  finishWritingRaw(writer, time_awared, XTime::now());
109 }

Generated for KAME4 by  doxygen 1.8.3