QucsFilter::QucsFilter() { QWidget *centralWidget = new QWidget(this); setCentralWidget(centralWidget); // set application icon setWindowIcon(QPixmap(":/bitmaps/big.qucs.xpm")); setWindowTitle("Qucs Filter " PACKAGE_VERSION); // -------- create menubar ------------------- QMenu *fileMenu = new QMenu(tr("&File")); QAction * fileQuit = new QAction(tr("E&xit"), this); fileQuit->setShortcut(Qt::CTRL+Qt::Key_Q); connect(fileQuit, SIGNAL(activated()), SLOT(slotQuit())); fileMenu->addAction(fileQuit); QMenu *helpMenu = new QMenu(tr("&Help"), this); QAction * helpHelp = new QAction(tr("Help..."), this); helpHelp->setShortcut(Qt::Key_F1); connect(helpHelp, SIGNAL(activated()), SLOT(slotHelpIntro())); QAction * helpAbout = new QAction(tr("&About QucsFilter..."), this); helpMenu->addAction(helpAbout); connect(helpAbout, SIGNAL(activated()), SLOT(slotHelpAbout())); QAction * helpAboutQt = new QAction(tr("About Qt..."), this); helpMenu->addAction(helpAboutQt); connect(helpAboutQt, SIGNAL(activated()), SLOT(slotHelpAboutQt())); helpMenu->addAction(helpHelp); helpMenu->addSeparator(); helpMenu->addAction(helpAbout); helpMenu->addAction(helpAboutQt); menuBar()->addMenu(fileMenu); menuBar()->addSeparator(); menuBar()->addMenu(helpMenu); // ------- create main windows widgets -------- all = new QGridLayout(); all->setSpacing(3); // ........................................................... box1 = new QGroupBox(tr("Filter"), this); QHBoxLayout *hbox = new QHBoxLayout(); gbox1 = new QGridLayout(); gbox1->setSpacing(3); box1->setLayout(gbox1); QLabel *Label0 = new QLabel(tr("Realization:"), this); gbox1->addWidget(Label0, 0,0); ComboRealize = new QComboBox(this); ComboRealize->addItem("LC ladder (pi type)"); ComboRealize->addItem("LC ladder (tee type)"); ComboRealize->addItem("End coupled transmission lines"); ComboRealize->addItem("Parallel coupled transmission lines"); ComboRealize->addItem("Stepped-impedance"); ComboRealize->addItem("Quarter wave resonators"); ComboRealize->addItem("Quarter wave side coupled ring resonator"); ComboRealize->addItem("Capacitively coupled shunt resonators"); ComboRealize->addItem("Equation-defined"); gbox1->addWidget(ComboRealize, 0,1); connect(ComboRealize, SIGNAL(activated(int)), SLOT(slotRealizationChanged(int))); //Synthesize Microstrip MicrostripcheckBox=new QCheckBox("Microstrip implementation"); MicrostripcheckBox->setChecked(false); MicrostripcheckBox->setEnabled(false); gbox1->addWidget(MicrostripcheckBox, 1,0); connect(MicrostripcheckBox, SIGNAL(clicked()), SLOT(on_MicrostripcheckBox_clicked())); QLabel *Label1 = new QLabel(tr("Filter type:"), this); gbox1->addWidget(Label1, 2,0); ComboType = new QComboBox(this); ComboType->addItem("Bessel"); ComboType->addItem("Butterworth"); ComboType->addItem("Chebyshev"); ComboType->addItem("Cauer"); gbox1->addWidget(ComboType, 2,1); connect(ComboType, SIGNAL(activated(int)), SLOT(slotTypeChanged(int))); QLabel *Label2 = new QLabel(tr("Filter class:"), this); gbox1->addWidget(Label2, 3,0); ComboClass = new QComboBox(this); ComboClass->addItem(tr("Low pass")); ComboClass->addItem(tr("High pass")); ComboClass->addItem(tr("Band pass")); ComboClass->addItem(tr("Band stop")); gbox1->addWidget(ComboClass, 3,1); connect(ComboClass, SIGNAL(activated(int)), SLOT(slotClassChanged(int))); IntVal = new QIntValidator(1, 200, this); DoubleVal = new QDoubleValidator(this); LabelOrder = new QLabel(tr("Order:"), this); gbox1->addWidget(LabelOrder, 4,0); EditOrder = new QLineEdit("3", this); EditOrder->setValidator(IntVal); gbox1->addWidget(EditOrder, 4,1); LabelStart = new QLabel(tr("Corner frequency:"), this); gbox1->addWidget(LabelStart, 5,0); EditCorner = new QLineEdit("1", this); EditCorner->setValidator(DoubleVal); gbox1->addWidget(EditCorner, 5,1); ComboCorner = new QComboBox(this); ComboCorner->addItem("Hz"); ComboCorner->addItem("kHz"); ComboCorner->addItem("MHz"); ComboCorner->addItem("GHz"); ComboCorner->setCurrentIndex(3); gbox1->addWidget(ComboCorner, 5,2); LabelStop = new QLabel(tr("Stop frequency:"), this); gbox1->addWidget(LabelStop, 6,0); EditStop = new QLineEdit("2", this); EditStop->setValidator(DoubleVal); gbox1->addWidget(EditStop, 6,1); ComboStop = new QComboBox(this); ComboStop->addItem("Hz"); ComboStop->addItem("kHz"); ComboStop->addItem("MHz"); ComboStop->addItem("GHz"); ComboStop->setCurrentIndex(3); gbox1->addWidget(ComboStop, 6,2); LabelBandStop = new QLabel(tr("Stop band frequency:"), this); gbox1->addWidget(LabelBandStop, 7,0); EditBandStop = new QLineEdit("3", this); EditBandStop->setValidator(DoubleVal); gbox1->addWidget(EditBandStop, 7,1); ComboBandStop = new QComboBox(this); ComboBandStop->addItem("Hz"); ComboBandStop->addItem("kHz"); ComboBandStop->addItem("MHz"); ComboBandStop->addItem("GHz"); ComboBandStop->setCurrentIndex(3); gbox1->addWidget(ComboBandStop, 7,2); LabelRipple = new QLabel(tr("Pass band ripple:"), this); gbox1->addWidget(LabelRipple, 8,0); EditRipple = new QLineEdit("1", this); EditRipple->setValidator(DoubleVal); gbox1->addWidget(EditRipple, 8,1); LabelRipple_dB = new QLabel("dB", this); gbox1->addWidget(LabelRipple_dB, 8,2); LabelAtten = new QLabel(tr("Stop band attenuation:"), this); gbox1->addWidget(LabelAtten, 9,0); EditAtten = new QLineEdit("20", this); EditAtten->setValidator(DoubleVal); gbox1->addWidget(EditAtten, 9,1); LabelAtten_dB = new QLabel("dB", this); gbox1->addWidget(LabelAtten_dB, 9,2); LabelImpedance = new QLabel(tr("Impedance:"), this); gbox1->addWidget(LabelImpedance, 10,0); EditImpedance = new QLineEdit("50", this); EditImpedance->setValidator(DoubleVal); gbox1->addWidget(EditImpedance, 10,1); LabelOhm = new QLabel("Ohm", this); gbox1->addWidget(LabelOhm, 10,2); // ........................................................... box2 = new QGroupBox(tr("Microstrip Substrate"), this); box2->setEnabled(false); gbox2 = new QGridLayout(); gbox2->setSpacing(3); box2->setLayout(gbox2); QLabel *Label3 = new QLabel(tr("Relative permittivity:"), this); gbox2->addWidget(Label3, 0,0); ComboEr = new QComboBox(this); ComboEr->setEditable(true); ComboEr->lineEdit()->setValidator(DoubleVal); connect(ComboEr, SIGNAL(activated(const QString&)), SLOT(slotTakeEr(const QString&))); gbox2->addWidget(ComboEr, 0,1); const char **p = List_er; while(*(++p)) ComboEr->addItem(*p); // put material properties into combobox ComboEr->lineEdit()->setText("9.8"); QLabel *Label4 = new QLabel(tr("Substrate height:"), this); gbox2->addWidget(Label4, 1,0); EditHeight = new QLineEdit("1.0", this); EditHeight->setValidator(DoubleVal); gbox2->addWidget(EditHeight, 1,1); QLabel *Label5 = new QLabel("mm", this); gbox2->addWidget(Label5, 1,2); QLabel *Label6 = new QLabel(tr("metal thickness:"), this); gbox2->addWidget(Label6, 2,0); EditThickness = new QLineEdit("12.5", this); EditThickness->setValidator(DoubleVal); gbox2->addWidget(EditThickness, 2,1); QLabel *Label7 = new QLabel("um", this); gbox2->addWidget(Label7, 2,2); QLabel *Label8 = new QLabel(tr("minimum width:"), this); gbox2->addWidget(Label8, 3,0); EditMinWidth = new QLineEdit("0.4", this); EditMinWidth->setValidator(DoubleVal); gbox2->addWidget(EditMinWidth, 3,1); QLabel *Label9 = new QLabel("mm", this); gbox2->addWidget(Label9, 3,2); QLabel *Label10 = new QLabel(tr("maximum width:"), this); gbox2->addWidget(Label10, 4,0); EditMaxWidth = new QLineEdit("5.0", this); EditMaxWidth->setValidator(DoubleVal); gbox2->addWidget(EditMaxWidth, 4,1); QLabel *Label11 = new QLabel("mm", this); gbox2->addWidget(Label11, 4,2); QSpacerItem *mySpacer=new QSpacerItem(1,1, QSizePolicy::Minimum, QSizePolicy::Expanding); gbox2->addItem(mySpacer, 5, 0, 1, -1); QSize sz; boxImage = new QGroupBox(tr("Preview"), this); gboxImage = new QGridLayout(); boxImage->setLayout(gboxImage); QString s1 = ":/bitmaps/LC_Ladder_Pi_LPF.svg"; imgLayout = new QSvgWidget(s1); sz = imgLayout->size(); imgLayout->setFixedSize(.5*sz); gboxImage->addWidget(imgLayout); // ........................................................... QVBoxLayout *vboxButtons = new QVBoxLayout(); QPushButton *ButtonGo = new QPushButton(tr("Calculate and put into Clipboard"), this); connect(ButtonGo, SIGNAL(clicked()), SLOT(slotCalculate())); vboxButtons->addWidget(ButtonGo); LabelResult = new QLabel(this); ResultState = 100; slotShowResult(); LabelResult->setAlignment(Qt::AlignHCenter); vboxButtons->addWidget(LabelResult); QVBoxLayout *vbox_all = new QVBoxLayout(); QVBoxLayout *vboxRealisation = new QVBoxLayout(); QVBoxLayout *vboxMicrostrip = new QVBoxLayout(); vboxRealisation->addWidget(box1); hbox->addLayout(vboxRealisation); vboxMicrostrip->addWidget(box2); vboxMicrostrip->addWidget(boxImage); hbox->addLayout(vboxMicrostrip); vbox_all->addLayout(hbox); vbox_all->addLayout(vboxButtons); centralWidget->setLayout(vbox_all); // ------- finally set initial state -------- slotTypeChanged(0); slotClassChanged(0); }
MyWidget::MyWidget( QWidget *parent, const char *name ) : QWidget( parent, name ) { setCaption("Color Codes"); // icons are handled differently on OSX #ifndef __APPLE__ setIcon(QPixmap(":/bitmaps/big.qucs.xpm")); #endif // -------- create menubar ------------------- QAction *fileExit = new QAction(tr("E&xit"), this); fileExit->setShortcut(Qt::CTRL+Qt::Key_Q); connect(fileExit, SIGNAL(activated()), qApp, SLOT(quit())); QMenu *fileMenu = new QMenu(tr("&File")); fileMenu->addAction(fileExit); QAction *help = new QAction(tr("Help..."), this); help->setShortcut(Qt::Key_F1); connect(help, SIGNAL(activated()), this, SLOT(slotHelpIntro())); QAction *about = new QAction(tr("&About ResistorCodes..."), this); connect(about, SIGNAL(activated()), this, SLOT(slotHelpAbout())); QAction *aboutQt = new QAction(tr("&About Qt..."), this); connect(aboutQt, SIGNAL(activated()), this, SLOT(slotHelpAboutQt())); QMenu *helpMenu = new QMenu(tr("&Help")); helpMenu->addAction(help); helpMenu->addAction(about); helpMenu->addSeparator(); helpMenu->addAction(aboutQt); QMenuBar *menuBar = new QMenuBar(this); menuBar->addMenu(fileMenu); menuBar->insertSeparator(); menuBar->addMenu(helpMenu); res= new QResistor(); //--------------------resistance displayin ui ---------------------------------// resBox = new MyResistanceBox (this); connect(res, SIGNAL(valueModified(QResistor*)),resBox,SLOT(update(QResistor*))); //-------------------color displaying ui---------------------------------------------// colorBox = new MyColorBox(this); connect(res, SIGNAL(valueModified(QResistor*)),colorBox,SLOT(update(QResistor*))); //-------------------paste the configuration to clipboard--------------------------------------------// connect(res, SIGNAL(valueModified(QResistor*)),this,SLOT(slotConfiguration())); //-------------------switching buttons ui--------------------------------------// QPushButton *calcColor = new QPushButton(QPixmap(":/bitmaps/next.png")," To Colors", this, "calcColor" ); connect(calcColor, SIGNAL(clicked()),this,SLOT(setResistanceValue())); QPushButton *calcResistance = new QPushButton(QPixmap(":/bitmaps/previous.png")," To Resistance", this, "calcResistance" ); connect(calcResistance, SIGNAL(clicked()),this,SLOT(setColorValue())); QPushButton *quit = new QPushButton( "Quit", this, "quit" ); connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) ); QHBoxLayout *buttonBox = new QHBoxLayout; buttonBox->addWidget(calcColor); buttonBox->addWidget(calcResistance); buttonBox->addWidget(quit); //--------------------packing all of them together---------------------------------------// QGridLayout *grid = new QGridLayout(this); grid->setMargin(10); #ifndef __APPLE__ QWidget *Space = new QWidget(this); // reserve space for menubar Space->setFixedSize(1, menuBar->height()); grid->addWidget(Space, 0,0); #endif grid->addWidget( resBox, 1, 0 ); grid->addLayout( buttonBox, 2, 0 ); grid->addWidget( colorBox, 3, 0 ); }
/* Constructor setups the GUI. */ QucsTranscalc::QucsTranscalc() { QWidget *centralWidget = new QWidget(this); setCentralWidget(centralWidget); // set application icon setWindowIcon(QPixmap(":/bitmaps/big.qucs.xpm")); setWindowTitle("Qucs Transcalc " PACKAGE_VERSION); // create file menu QMenu *fileMenu = new QMenu(tr("&File")); QAction *fileLoad = new QAction(tr("&Load"), this); fileLoad->setShortcut(Qt::CTRL+Qt::Key_L); fileMenu->addAction(fileLoad); connect(fileLoad, SIGNAL(activated()), SLOT(slotFileLoad())); QAction *fileSave = new QAction (tr("&Save"), this); fileSave->setShortcut(Qt::CTRL+Qt::Key_S); fileMenu->addAction(fileSave); connect(fileSave, SIGNAL(activated()), SLOT(slotFileSave())); fileMenu->addSeparator(); QAction *fileOption = new QAction (tr("&Options"), this); fileOption->setShortcut(Qt::CTRL+Qt::Key_O); fileMenu->addAction(fileOption); connect(fileOption, SIGNAL(activated()), SLOT(slotOptions())); fileMenu->addSeparator(); QAction *fileQuit = new QAction (tr("&Quit"), this); fileQuit->setShortcut(Qt::CTRL+Qt::Key_Q); fileMenu->addAction(fileQuit); connect(fileQuit, SIGNAL(activated()), SLOT(slotQuit())); // create execute menu QMenu *execMenu = new QMenu(tr("&Execute")); QAction *execCopy = new QAction(tr("&Copy to Clipboard"), this); execCopy->setShortcut(Qt::Key_F2); execMenu->addAction(execCopy); connect(execCopy, SIGNAL(activated()), SLOT(slotCopyToClipBoard())); QAction *execAnalyze = new QAction(tr("&Analyze"), this); execAnalyze->setShortcut(Qt::Key_F3); execMenu->addAction(execAnalyze); connect(execAnalyze, SIGNAL(activated()), SLOT(slotAnalyze())); QAction *execSynthesize = new QAction (tr("&Synthesize"), this); execSynthesize->setShortcut(Qt::Key_F4); execMenu->addAction(execSynthesize); connect(execSynthesize, SIGNAL(activated()), SLOT(slotSynthesize())); // create help menu QMenu *helpMenu = new QMenu(tr("&Help")); QAction *helpHelp = new QAction(tr("&Help"), this); helpHelp->setShortcut(Qt::Key_F1); helpMenu->addAction(helpHelp); connect(helpHelp, SIGNAL(activated()), SLOT(slotHelpIntro())); QAction *helpAbout = new QAction(tr("About"), this); helpMenu->addAction(helpAbout); connect(helpAbout, SIGNAL(activated()), SLOT(slotAbout())); // setup menu bar menuBar()->addMenu(fileMenu); menuBar()->addMenu(execMenu); menuBar()->addSeparator(); menuBar()->addMenu(helpMenu); // === left // seletion combo and figure QVBoxLayout *vl = new QVBoxLayout(); // transmission line type choice QGroupBox * lineGroup = new QGroupBox (tr("Transmission Line Type")); tranType = new QComboBox (lineGroup); tranType->insertItem (0, tr("Microstrip Line")); tranType->insertItem (1, tr("Coplanar Waveguide")); tranType->insertItem (2, tr("Grounded Coplanar")); tranType->insertItem (3, tr("Rectangular Waveguide")); tranType->insertItem (4, tr("Coaxial Line")); tranType->insertItem (5, tr("Coupled Microstrip")); connect(tranType, SIGNAL(activated(int)), SLOT(slotSelectType(int))); // setup transmission line picture pix = new QLabel (lineGroup); pix->setPixmap(QPixmap(":/bitmaps/microstrip.png")); QVBoxLayout *vfig = new QVBoxLayout(); vfig->addWidget(tranType); vfig->addWidget(pix); vfig->setSpacing(3); lineGroup->setLayout(vfig); vl->addWidget(lineGroup); // init additional translations setupTranslations (); // set current mode mode = ModeMicrostrip; // === middle QVBoxLayout *vm = new QVBoxLayout(); vm->setSpacing (3); // substrate parameter box QGroupBox * substrate = new QGroupBox (tr("Substrate Parameters")); vm->addWidget(substrate); // Pass the GroupBox > create Grid layout > Add widgets > set layout createPropItems (substrate, TRANS_SUBSTRATE); // component parameter box QGroupBox * component = new QGroupBox (tr("Component Parameters")); vm->addWidget(component); createPropItems (component, TRANS_COMPONENT); // === right QVBoxLayout *vr = new QVBoxLayout(); vr->setSpacing (3); // physical parameter box QGroupBox * physical = new QGroupBox (tr("Physical Parameters")); vr->addWidget(physical); createPropItems (physical, TRANS_PHYSICAL); // analyze/synthesize buttons QHBoxLayout * h2 = new QHBoxLayout(); QPushButton * analyze = new QPushButton (tr("Analyze")); h2->addWidget(analyze); analyze->setToolTip(tr("Derive Electrical Parameters")); connect(analyze, SIGNAL(clicked()), SLOT(slotAnalyze())); QPushButton * synthesize = new QPushButton (tr("Synthesize")); h2->addWidget(synthesize); synthesize->setToolTip(tr("Compute Physical Parameters")); connect(synthesize, SIGNAL(clicked()), SLOT(slotSynthesize())); vr->addLayout(h2); // electrical parameter box QGroupBox * electrical = new QGroupBox (tr("Electrical Parameters")); vr->addWidget(electrical); createPropItems (electrical, TRANS_ELECTRICAL); calculated = new QGroupBox (tr("Calculated Results")); vr->addWidget(calculated); // status line //statBar = new QStatusBar (this); //QLabel * statText = new QLabel ("Ready.", statBar); statusBar()->showMessage (tr("Ready.")); //statBar->setFixedHeight (statText->height ()); //delete statText; QVBoxLayout *vmain = new QVBoxLayout(); QHBoxLayout *hmain = new QHBoxLayout(); hmain->addLayout(vl); hmain->addLayout(vm); hmain->addLayout(vr); vmain->addLayout(hmain); //vmain->addWidget(statBar); centralWidget->setLayout(vmain); // setup calculated result bix createResultItems (calculated); updateSelection (); // instantiate transmission lines TransLineTypes[0].line = new microstrip (); TransLineTypes[0].line->setApplication (this); TransLineTypes[1].line = new coplanar (); TransLineTypes[1].line->setApplication (this); TransLineTypes[2].line = new groundedCoplanar (); TransLineTypes[2].line->setApplication (this); TransLineTypes[3].line = new rectwaveguide (); TransLineTypes[3].line->setApplication (this); TransLineTypes[4].line = new coax (); TransLineTypes[4].line->setApplication (this); TransLineTypes[5].line = new c_microstrip (); TransLineTypes[5].line->setApplication (this); }
QucsFilter::QucsFilter() { // set application icon setIcon (QPixmap(QucsSettings.BitmapDir + "big.qucs.xpm")); setCaption("Qucs Filter " PACKAGE_VERSION); // -------- create menubar ------------------- QPopupMenu *fileMenu = new QPopupMenu(); fileMenu->insertItem(tr("E&xit"), this, SLOT(slotQuit()), CTRL+Key_Q); QPopupMenu *helpMenu = new QPopupMenu(); helpMenu->insertItem(tr("Help..."), this, SLOT(slotHelpIntro()), Key_F1); helpMenu->insertSeparator(); helpMenu->insertItem( tr("&About QucsFilter..."), this, SLOT(slotHelpAbout()), 0); helpMenu->insertItem(tr("About Qt..."), this, SLOT(slotHelpAboutQt()), 0); QMenuBar *bar = new QMenuBar(this); bar->insertItem(tr("&File"), fileMenu); bar->insertSeparator (); bar->insertItem(tr("&Help"), helpMenu); // ------- create main windows widgets -------- gbox = new QGridLayout(this, 10,3,5,5); QWidget *Space = new QWidget(this); // reserve space for menubar Space->setFixedSize(5, bar->height()); gbox->addWidget(Space, 0,0); QLabel *Label1 = new QLabel(tr("Filter type:"), this); gbox->addWidget(Label1, 1,0); ComboType = new QComboBox(this); ComboType->insertItem("Bessel"); ComboType->insertItem("Butterworth"); ComboType->insertItem("Chebyshev"); ComboType->insertItem("Cauer"); gbox->addWidget(ComboType, 1,1); connect(ComboType, SIGNAL(activated(int)), SLOT(slotTypeChanged(int))); QLabel *Label2 = new QLabel(tr("Filter class:"), this); gbox->addWidget(Label2, 2,0); ComboClass = new QComboBox(this); ComboClass->insertItem(tr("Low pass")); ComboClass->insertItem(tr("High pass")); ComboClass->insertItem(tr("Band pass")); ComboClass->insertItem(tr("Band stop")); gbox->addWidget(ComboClass, 2,1); connect(ComboClass, SIGNAL(activated(int)), SLOT(slotClassChanged(int))); IntVal = new QIntValidator(1, 200, this); DoubleVal = new QDoubleValidator(this); LabelOrder = new QLabel(tr("Order:"), this); gbox->addWidget(LabelOrder, 3,0); EditOrder = new QLineEdit("3", this); EditOrder->setValidator(IntVal); gbox->addWidget(EditOrder, 3,1); LabelStart = new QLabel(tr("Corner frequency:"), this); gbox->addWidget(LabelStart, 4,0); EditCorner = new QLineEdit("1", this); EditCorner->setValidator(DoubleVal); gbox->addWidget(EditCorner, 4,1); ComboCorner = new QComboBox(this); ComboCorner->insertItem("Hz"); ComboCorner->insertItem("kHz"); ComboCorner->insertItem("MHz"); ComboCorner->insertItem("GHz"); ComboCorner->setCurrentItem(3); gbox->addWidget(ComboCorner, 4,2); LabelStop = new QLabel(tr("Stop frequency:"), this); gbox->addWidget(LabelStop, 5,0); EditStop = new QLineEdit("2", this); EditStop->setValidator(DoubleVal); gbox->addWidget(EditStop, 5,1); ComboStop = new QComboBox(this); ComboStop->insertItem("Hz"); ComboStop->insertItem("kHz"); ComboStop->insertItem("MHz"); ComboStop->insertItem("GHz"); ComboStop->setCurrentItem(3); gbox->addWidget(ComboStop, 5,2); LabelBandStop = new QLabel(tr("Stop band frequency:"), this); gbox->addWidget(LabelBandStop, 6,0); EditBandStop = new QLineEdit("3", this); EditBandStop->setValidator(DoubleVal); gbox->addWidget(EditBandStop, 6,1); ComboBandStop = new QComboBox(this); ComboBandStop->insertItem("Hz"); ComboBandStop->insertItem("kHz"); ComboBandStop->insertItem("MHz"); ComboBandStop->insertItem("GHz"); ComboBandStop->setCurrentItem(3); gbox->addWidget(ComboBandStop, 6,2); LabelRipple = new QLabel(tr("Pass band ripple:"), this); gbox->addWidget(LabelRipple, 7,0); EditRipple = new QLineEdit("1", this); EditRipple->setValidator(DoubleVal); gbox->addWidget(EditRipple, 7,1); LabelRipple_dB = new QLabel("dB", this); gbox->addWidget(LabelRipple_dB, 7,2); LabelAtten = new QLabel(tr("Stop band attenuation:"), this); gbox->addWidget(LabelAtten, 8,0); EditAtten = new QLineEdit("20", this); EditAtten->setValidator(DoubleVal); gbox->addWidget(EditAtten, 8,1); LabelAtten_dB = new QLabel("dB", this); gbox->addWidget(LabelAtten_dB, 8,2); QLabel *Label9 = new QLabel(tr("Impedance:"), this); gbox->addWidget(Label9, 9,0); EditImpedance = new QLineEdit("50", this); EditImpedance->setValidator(DoubleVal); gbox->addWidget(EditImpedance, 9,1); QLabel *Label10 = new QLabel("Ohm", this); gbox->addWidget(Label10, 9,2); QPushButton *ButtonGo = new QPushButton(tr("Calculate and put into Clipboard"), this); connect(ButtonGo, SIGNAL(clicked()), SLOT(slotCalculate())); gbox->addMultiCellWidget(ButtonGo, 10,10,0,2); LabelResult = new QLabel(this); ResultState = 100; slotShowResult(); LabelResult->setAlignment(Qt::AlignHCenter); gbox->addMultiCellWidget(LabelResult, 11,11,0,2); // ------- finally set initial state -------- slotTypeChanged(0); slotClassChanged(0); }
QucsActiveFilter::QucsActiveFilter(QWidget *parent) : QMainWindow(parent) { Nfil = 4; Fc = 1000; ftyp = Filter::NoFilter; QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); // -------- create menubar ------------------- QMenu *fileMenu = new QMenu(tr("&File")); QAction * fileQuit = new QAction(tr("E&xit"), this); fileQuit->setShortcut(Qt::CTRL+Qt::Key_Q); connect(fileQuit, SIGNAL(activated()), SLOT(close())); fileMenu->addAction(fileQuit); QMenu *helpMenu = new QMenu(tr("&Help"), this); QAction * helpHelp = new QAction(tr("Help..."), this); helpHelp->setShortcut(Qt::Key_F1); connect(helpHelp, SIGNAL(activated()), SLOT(slotHelpIntro())); QAction * helpAbout = new QAction(tr("&About QucsActiveFilter..."), this); helpMenu->addAction(helpAbout); connect(helpAbout, SIGNAL(activated()), SLOT(slotHelpAbout())); QAction * helpAboutQt = new QAction(tr("About Qt..."), this); helpMenu->addAction(helpAboutQt); connect(helpAboutQt, SIGNAL(activated()), SLOT(slotHelpAboutQt())); helpMenu->addAction(helpHelp); helpMenu->addSeparator(); helpMenu->addAction(helpAbout); helpMenu->addAction(helpAboutQt); menuBar()->addMenu(fileMenu); menuBar()->addSeparator(); menuBar()->addMenu(helpMenu); //lblInputData = new QLabel(tr("Входные данные")); lblA1 = new QLabel(tr("Passband attenuation, Ap (dB)")); lblA2 = new QLabel(tr("Stopband attenuation, As (dB)")); lblF1 = new QLabel(tr("Cuttof frequency, Fc (Hz)")); lblF2 = new QLabel(tr("Stopband frequency, Fs (Hz)")); lblRpl1 = new QLabel(tr("Passband ripple Rp(dB)")); //lblRpl2 = new QLabel(tr("Stopband ripple (dB)")); lblKv = new QLabel(tr("Passband gain, Kv (dB)")); edtA1 = new QLineEdit("3"); QDoubleValidator *val1 = new QDoubleValidator(0,100000,3); edtA1->setValidator(val1); edtA2 = new QLineEdit("20"); edtA2->setValidator(val1); edtF1 = new QLineEdit("1000"); edtF1->setValidator(val1); edtF2 = new QLineEdit("1200"); edtF2->setValidator(val1); edtPassbRpl = new QLineEdit("3"); edtPassbRpl->setValidator(val1); //edtStopbRpl = new QLineEdit("3"); //edtStopbRpl->setValidator(val1); edtKv = new QLineEdit("0"); edtKv->setValidator(val1); QIntValidator *val2 = new QIntValidator(2,20); lblOrder = new QLabel(tr("Filter order")); edtOrder = new QLineEdit("5"); edtOrder->setValidator(val2); lblTyp = new QLabel(tr("Approximation type:")); cbxFilterFunc = new QComboBox; QStringList lst2; lst2<<tr("Butterworth") <<tr("Chebyshev") <<tr("Inverse Chebyshev") <<tr("Cauer (Elliptic)") <<tr("Bessel") <<tr("User defined"); cbxFilterFunc->addItems(lst2); connect(cbxFilterFunc,SIGNAL(currentIndexChanged(int)),this,SLOT(slotSwitchParameters())); btnDefineTransferFunc = new QPushButton(tr("Manually define transfer function")); btnDefineTransferFunc->setEnabled(false); connect(btnDefineTransferFunc,SIGNAL(clicked()),this,SLOT(slotDefineTransferFunc())); btnCalcSchematic = new QPushButton(tr("Calculate and copy to clipboard")); connect(btnCalcSchematic,SIGNAL(clicked()),SLOT(slotCalcSchematic())); lblResult = new QLabel(tr("Calculation console")); txtResult = new QTextEdit; lblSch = new QLabel(tr("Filter topology")); lblResp = new QLabel(tr("Filter type:")); cbxResponse = new QComboBox; QStringList lst3; lst3<<tr("LowPass") <<tr("High Pass") <<tr("Band Pass") <<tr("Band Stop"); cbxResponse->addItems(lst3); connect(cbxResponse,SIGNAL(currentIndexChanged(int)),this,SLOT(slotUpdateResponse())); connect(cbxResponse,SIGNAL(currentIndexChanged(int)),this,SLOT(slotUpdateSchematic())); connect(cbxResponse,SIGNAL(currentIndexChanged(int)),this,SLOT(slotSetLabels())); connect(cbxResponse,SIGNAL(currentIndexChanged(int)),this,SLOT(slotSwitchParameters())); cbxFilterType = new QComboBox; QStringList lst; lst<<tr("Multifeedback (MFB)") <<tr("Sallen-Key (S-K)") <<tr("Cauer section"); //<<tr("Пассивный"); cbxFilterType->addItems(lst); connect(cbxFilterType,SIGNAL(currentIndexChanged(int)),this,SLOT(slotUpdateSchematic())); this->slotSwitchParameters(); cbxFilterType->setMaxCount(3); lblAFR = new QLabel(tr("General amplitude frequency response")); lblTopology = new QLabel(tr("Filter topology preview (one stage)")); QString s1 = ":/images/bitmaps/AFR.svg"; QSvgRenderer *ren = new QSvgRenderer(s1); QSize sz = ren->defaultSize(); sz *= 1.3; delete ren; imgAFR = new QSvgWidget(s1); imgAFR->setFixedSize(sz); imgAFR->show(); s1 = ":/images/bitmaps/cauer.svg"; ren = new QSvgRenderer(s1); sz = ren->defaultSize(); sz *= 0.65; delete ren; sch_pic = new QSvgWidget(s1); sch_pic->setFixedSize(sz); sch_pic->show(); this->slotUpdateSchematic(); top = new QHBoxLayout; left = new QVBoxLayout; center = new QVBoxLayout; right = new QHBoxLayout; //left->addWidget(lblInputData); QGroupBox *gpbPar = new QGroupBox(tr("Filter parameters")); QGridLayout *vl3 = new QGridLayout; vl3->setSpacing(3); vl3->addWidget(lblA1,0,0); vl3->addWidget(edtA1,0,1); vl3->addWidget(lblA2,1,0); vl3->addWidget(edtA2,1,1); vl3->addWidget(lblF1,2,0); vl3->addWidget(edtF1,2,1); vl3->addWidget(lblF2,3,0); vl3->addWidget(edtF2,3,1); vl3->addWidget(lblRpl1,4,0); vl3->addWidget(edtPassbRpl,4,1); vl3->addWidget(lblKv,5,0); vl3->addWidget(edtKv,5,1); vl3->addWidget(lblOrder,6,0); vl3->addWidget(edtOrder,6,1); left->addWidget(gpbPar); gpbPar->setLayout(vl3); QGroupBox *gpbFunc = new QGroupBox(tr("Transfer function and Topology")); QVBoxLayout *vl4 = new QVBoxLayout; QHBoxLayout *l3 = new QHBoxLayout; l3->addWidget(lblTyp); l3->addWidget(cbxFilterFunc); vl4->addLayout(l3); vl4->addWidget(btnDefineTransferFunc); QHBoxLayout *l1 = new QHBoxLayout; l1->addWidget(lblResp); l1->addWidget(cbxResponse); vl4->addLayout(l1); QHBoxLayout *l2 = new QHBoxLayout; l2->addWidget(lblSch); l2->addWidget(cbxFilterType); vl4->addLayout(l2); vl4->addWidget(btnCalcSchematic); gpbFunc->setLayout(vl4); left->addWidget(gpbFunc); left->addStretch(); QGroupBox *gpbAFR = new QGroupBox(tr("General filter amplidure-frequency response")); QVBoxLayout *vl1 = new QVBoxLayout; vl1->addWidget(imgAFR); gpbAFR->setLayout(vl1); right->addWidget(gpbAFR); QGroupBox *gpbSCH = new QGroupBox(tr("Filter topology preview")); QVBoxLayout *vl2 = new QVBoxLayout; vl2->addWidget(sch_pic); gpbSCH->setLayout(vl2); right->addWidget(gpbSCH); /*right->addWidget(lblAFR); right->addWidget(imgAFR); right->addWidget(lblTopology); right->addWidget(sch_pic); right->addStretch();*/ top->addLayout(left); top->addLayout(center); top->addLayout(right); top1 = new QVBoxLayout; top1->addLayout(top); QSplitter *sp1 = new QSplitter; top1->addWidget(sp1); txtResult->setReadOnly(true); QGroupBox *gpbCons = new QGroupBox(tr("Filter calculation console")); QVBoxLayout *vl5 = new QVBoxLayout; vl5->addWidget(txtResult); gpbCons->setLayout(vl5); top1->addWidget(gpbCons); txtResult->setMinimumHeight(180); zenter = new QWidget; this->setCentralWidget(zenter); zenter->setLayout(top1); }