43 #include "mainwindow.h"
45 #include "ui_editorwindow.h"
48 #include "ui_deletemessagebox.h"
56 #include <QApplication>
57 #include <QModelIndex>
58 #include <QMessageBox>
71 bool allCombined =
false;
72 bool is_loading =
false;
73 bool is_expanded =
false;
75 qreal linStepWidthScale = 1;
76 qreal linStepWidthModu = 1;
77 qreal linStepWidthPhase = 1;
78 qreal linStepWidthChirp = 1;
80 qreal expStepWidthScale = 2;
81 qreal expStepWidthModu = 2;
82 qreal expStepWidthPhase = 2;
83 qreal expStepWidthChirp = 2;
85 qreal startValueScale = 1;
86 qreal startValueModu = 0;
87 qreal startValuePhase = 0;
88 qreal startValueChirp = 0;
90 qreal endValueScale = 1;
91 qreal endValueModu = 0;
92 qreal endValuePhase = 0;
93 qreal endValueChirp = 0;
95 QString partDictName =
"";
97 QList<qreal> scaleList;
98 QList<qreal> moduList;
99 QList<qreal> phaseList;
100 QList<qreal> chirpList;
102 qint32 old_width = 0;
103 qint32 atomCount = 1;
105 MatrixXd _atom_matrix;
106 QList<QColor> _atom_colors;
107 EditorWindow::AtomType atomType;
109 const qint32 window_height = 900;
110 const qint32 window_width = 605;
119 EditorWindow::EditorWindow(QWidget *parent) : QMainWindow(parent), ui(new
Ui::
EditorWindow)
121 this->setAccessibleName(
"simple");
124 move(settings.value(
"pos_editor", QPoint(200, 200)).toPoint());
125 this->restoreState(settings.value(
"editor_state").toByteArray());
126 ui->dspb_StartValuePhase->setMaximum(ui->dspb_EndValueScale->value());
127 ui->dspb_EndValuePhase->setMaximum(ui->spb_AtomLength->value());
130 ui->rb_ChirpAtomType->setVisible(
false);
131 ui->fr_Chirp->setVisible(
false);
133 ui->dspb_StartValueScale->setMaximum(ui->spb_AtomLength->value());
135 old_width = this->width();
138 callAtomWindow->setMouseTracking(
true);
139 callAtomWindow->setMinimumHeight(500);
140 callAtomWindow->setMinimumWidth(500);
141 ui->l_paint_atom->addWidget(callAtomWindow);
144 callXAxisAtomWindow->setMaximumHeight(0);
145 callXAxisAtomWindow->setToolTip(
"samples");
146 ui->l_XAxis->addWidget(callXAxisAtomWindow);
148 ui->gb_atom_viewer->setHidden(
true);
149 ui->gb_atom_viewer->setAlignment(Qt::AlignLeft);
151 this->setMinimumSize(window_width, window_height);
152 this->setMaximumSize(this->minimumSize());
154 _atom_colors.clear();
155 _atom_colors.append(QColor(0, 0, 0));
160 EditorWindow::~EditorWindow()
167 void EditorWindow::closeEvent(QCloseEvent * event)
171 if(!this->isMaximized())
172 settings.setValue(
"pos_editor", pos());
174 settings.setValue(
"editor_state", this->saveState());
179 void EditorWindow::read_dicts()
181 ui->list_AllDict->clear();
182 QDir dictDir = QDir(QDir::homePath() +
"/" +
"Matching-Pursuit-Toolbox");
184 QStringList filterList;
185 filterList.append(
"*.dict");
186 filterList.append(
"*.pdict");
188 QFileInfoList fileList = dictDir.entryInfoList(filterList);
190 for(
int i = 0; i < fileList.length(); i++)
193 QFileInfo file = fileList.at(i);
195 if(QString::compare(file.completeSuffix(),
"dict") == 0)
197 dictIcon.addFile(
":/images/icons/DictIcon.png");
198 tooltip = QString(
"%1.dict").arg(file.baseName());
202 dictIcon.addFile(
":/images/icons/PartDictIcon.png");
203 tooltip = QString(
"%1.pdict").arg(file.baseName());
206 QListWidgetItem *item1 =
new QListWidgetItem;
207 item1->setToolTip(tooltip);
208 item1->setIcon(dictIcon);
209 item1->setText(fileList.at(i).baseName());
211 QListWidgetItem *item2 =
new QListWidgetItem;
212 item2->setToolTip(tooltip);
213 item2->setIcon(dictIcon);
214 item2->setText(fileList.at(i).baseName());
216 ui->list_AllDict->addItem(item1);
217 ui->li_all_dicts->addItem(item2);
219 if(ui->list_AllDict->count() > 1) ui->list_AllDict->itemAt(0, 0)->setSelected(
true);
226 void EditorWindow::calc_atom_count_all_combined()
229 qint32 scaleCount = 1;
230 qint32 moduCount = 1;
231 qint32 phaseCount = 1;
232 qint32 chirpCount = 1;
234 if(scaleList.length() != 0) scaleCount = scaleList.length();
235 if(moduList.length() != 0) moduCount = moduList.length();
236 if(phaseList.length() != 0) phaseCount = phaseList.length();
237 if(chirpList.length() != 0) chirpCount = chirpList.length();
239 if(atomType == EditorWindow::Gauss)
240 count = scaleCount * moduCount * phaseCount;
241 else if( atomType == EditorWindow::Chirp)
242 count = scaleCount * moduCount * phaseCount * chirpCount;
244 if(count > 100000000)
246 QMessageBox::warning(
this, tr(
"Error"),
247 tr(
"The number of atoms is too large."));
252 ui->spb_AtomCount->setValue(count);
259 QList<qreal> EditorWindow::calc_lin_pos_parameters(qreal startValue, qreal linStepValue)
261 QList<qreal> resultList;
268 result = startValue + (i * linStepValue);
269 resultList.append(result);
278 QList<qreal> EditorWindow::calc_lin_neg_parameters(qreal startValue, qreal linStepValue)
280 QList<qreal> resultList;
287 result = startValue - (i * linStepValue);
288 resultList.append(result);
297 QList<qreal> EditorWindow::calc_exp_pos_parameters(qreal startValue, qreal expStepValue)
299 QList<qreal> resultList;
306 result = startValue + pow(i, expStepValue);
307 resultList.append(result);
316 QList<qreal> EditorWindow::calc_exp_neg_parameters(qreal startValue, qreal expStepValue)
318 QList<qreal> resultList;
325 result = startValue - pow(i, expStepValue);
326 resultList.append(result);
335 QList<qreal> EditorWindow::calc_parameter_values_scale(qreal startValue, qreal linStepValue, qreal expStepValue)
337 QList<qreal> resultList;
340 if(ui->rb_NoStepScale->isChecked())
341 resultList.append(startValue);
342 else if(ui->rb_LinStepScale->isChecked())
344 if(ui->rb_PosCountScale->isChecked()) resultList = calc_lin_pos_parameters(startValue, linStepValue);
345 else resultList = calc_lin_neg_parameters(startValue, linStepValue);
347 else if(ui->rb_ExpStepScale->isChecked())
349 if(ui->rb_PosCountScale->isChecked()) resultList = calc_exp_pos_parameters(startValue, expStepValue);
350 else resultList = calc_exp_neg_parameters(startValue, expStepValue);
352 if(!resultList.isEmpty()) ui->dspb_EndValueScale->setValue(resultList.last());
359 QList<qreal> EditorWindow::calc_all_comb_parameter_values_scale(qreal startValue, qreal endvalue, qreal linStepValue, qreal expStepValue)
361 QList<qreal> resultList;
363 qreal temp = endvalue - startValue + 1;
364 if(ui->rb_NoStepScale->isChecked())
365 resultList.append(startValue);
366 else if(ui->rb_LinStepScale->isChecked())
368 atomCount = temp / linStepValue;
369 resultList = calc_lin_pos_parameters(startValue, linStepValue);
371 else if(ui->rb_ExpStepScale->isChecked())
373 atomCount = pow(temp, (1/ expStepValue));
374 resultList = calc_exp_pos_parameters(startValue, expStepValue);
382 QList<qreal> EditorWindow::calc_parameter_values_modu(qreal startValue, qreal linStepValue, qreal expStepValue)
384 QList<qreal> resultList;
387 if(ui->rb_NoStepModu->isChecked())
388 resultList.append(startValue);
389 else if(ui->rb_LinStepModu->isChecked())
391 if(ui->rb_PosCountModu->isChecked()) resultList = calc_lin_pos_parameters(startValue, linStepValue);
392 else resultList = calc_lin_neg_parameters(startValue, linStepValue);
394 else if(ui->rb_ExpStepModu->isChecked())
396 if(ui->rb_PosCountModu->isChecked()) resultList = calc_exp_pos_parameters(startValue, expStepValue);
397 else resultList = calc_exp_neg_parameters(startValue, expStepValue);
399 if(!resultList.isEmpty()) ui->dspb_EndValueModu->setValue(resultList.last());
406 QList<qreal> EditorWindow::calc_all_comb_parameter_values_modu(qreal startValue, qreal endvalue, qreal linStepValue, qreal expStepValue)
408 QList<qreal> resultList;
410 qreal temp = endvalue - startValue + 1;
411 if(ui->rb_NoStepModu->isChecked())
412 resultList.append(startValue);
413 else if(ui->rb_LinStepModu->isChecked())
415 atomCount = temp / linStepValue;
416 resultList = calc_lin_pos_parameters(startValue, linStepValue);
418 if(ui->rb_ExpStepModu->isChecked())
420 atomCount = pow(temp, (1.0/ expStepValue));
421 resultList = calc_exp_pos_parameters(startValue, expStepValue);
429 QList<qreal> EditorWindow::calc_parameter_values_phase(qreal startValue, qreal linStepValue, qreal expStepValue)
431 QList<qreal> resultList;
434 if(ui->rb_NoStepPhase->isChecked())
435 resultList.append(startValue);
436 else if(ui->rb_LinStepPhase->isChecked())
438 if(ui->rb_PosCountPhase->isChecked()) resultList = calc_lin_pos_parameters(startValue, linStepValue);
439 else resultList = calc_lin_neg_parameters(startValue, linStepValue);
441 else if(ui->rb_ExpStepPhase->isChecked())
443 if(ui->rb_PosCountPhase->isChecked()) resultList = calc_exp_pos_parameters(startValue, expStepValue);
444 else resultList = calc_exp_neg_parameters(startValue, expStepValue);
446 if(!resultList.isEmpty()) ui->dspb_EndValuePhase->setValue(resultList.last());
453 QList<qreal> EditorWindow::calc_all_comb_parameter_values_phase(qreal startValue, qreal endvalue, qreal linStepValue, qreal expStepValue)
455 QList<qreal> resultList;
457 qreal temp = endvalue - startValue + 1;
458 if(ui->rb_NoStepPhase->isChecked())
459 resultList.append(startValue);
460 else if(ui->rb_LinStepPhase->isChecked())
462 atomCount = temp / linStepValue;
463 resultList = calc_lin_pos_parameters(startValue, linStepValue);
465 else if(ui->rb_ExpStepPhase->isChecked())
467 atomCount = pow(temp, (1/ expStepValue));
468 resultList = calc_exp_pos_parameters(startValue, expStepValue);
476 QList<qreal> EditorWindow::calc_parameter_values_chirp(qreal startValue, qreal linStepValue, qreal expStepValue)
478 QList<qreal> resultList;
481 if(ui->rb_NoStepChirp->isChecked())
482 resultList.append(startValue);
483 else if(ui->rb_LinStepChirp->isChecked())
485 if(ui->rb_PosCountChirp->isChecked()) resultList = calc_lin_pos_parameters(startValue, linStepValue);
486 else resultList = calc_lin_neg_parameters(startValue, linStepValue);
488 else if(ui->rb_ExpStepChirp->isChecked())
490 if(ui->rb_PosCountChirp->isChecked()) resultList = calc_exp_pos_parameters(startValue, expStepValue);
491 else resultList = calc_exp_neg_parameters(startValue, expStepValue);
493 if(!resultList.isEmpty()) ui->dspb_EndValuePhase->setValue(resultList.last());
500 QList<qreal> EditorWindow::calc_all_comb_parameter_values_chirp(qreal startValue, qreal endvalue, qreal linStepValue, qreal expStepValue)
502 QList<qreal> resultList;
504 qreal temp = endvalue - startValue + 1;
505 if(ui->rb_NoStepChirp->isChecked())
506 resultList.append(startValue);
507 else if(ui->rb_LinStepChirp->isChecked())
509 atomCount = temp / linStepValue;
510 resultList = calc_lin_pos_parameters(startValue, linStepValue);
512 else if(ui->rb_ExpStepChirp->isChecked())
514 atomCount = pow(temp, (1/ expStepValue));
515 resultList = calc_exp_pos_parameters(startValue, expStepValue);
523 void EditorWindow::calc_scale_value()
527 ui->dspb_EndValueScale->setDisabled(ui->rb_NoStepScale->isChecked());
528 if(ui->rb_LinStepScale->isChecked()) ui->dspb_EndValueScale->setMinimum(startValueScale + linStepWidthScale);
529 else if(ui->rb_ExpStepScale->isChecked()) ui->dspb_EndValueScale->setMinimum(startValueScale + 1);
532 ui->dspb_EndValueScale->setMinimum(startValueScale);
533 ui->dspb_EndValueScale->setValue(startValueScale);
535 scaleList = calc_all_comb_parameter_values_scale(startValueScale, endValueScale, linStepWidthScale, expStepWidthScale);
536 calc_atom_count_all_combined();
540 ui->dspb_EndValueScale->setMinimum(0.05);
541 scaleList = calc_parameter_values_scale(startValueScale, linStepWidthScale, expStepWidthScale);
548 void EditorWindow::calc_modu_value()
552 ui->dspb_EndValueModu->setDisabled(ui->rb_NoStepModu->isChecked());
553 if(ui->rb_LinStepModu->isChecked()) ui->dspb_EndValueModu->setMinimum(startValueModu + linStepWidthModu);
554 else if(ui->rb_ExpStepModu->isChecked()) ui->dspb_EndValueModu->setMinimum(startValueModu + 1);
557 ui->dspb_EndValueModu->setMinimum(startValueModu);
558 ui->dspb_EndValueModu->setValue(startValueModu);
560 moduList = calc_all_comb_parameter_values_modu(startValueModu, endValueModu, linStepWidthModu, expStepWidthModu);
561 calc_atom_count_all_combined();
564 moduList = calc_parameter_values_modu(startValueModu, linStepWidthModu, expStepWidthModu);
570 void EditorWindow::calc_phase_value()
574 ui->dspb_EndValuePhase->setDisabled(ui->rb_NoStepPhase->isChecked());
575 if(ui->rb_LinStepPhase->isChecked()) ui->dspb_EndValuePhase->setMinimum(startValuePhase + linStepWidthPhase);
576 else if(ui->rb_ExpStepPhase->isChecked()) ui->dspb_EndValuePhase->setMinimum(startValuePhase + 1);
579 ui->dspb_EndValuePhase->setMinimum(startValuePhase);
580 ui->dspb_EndValuePhase->setValue(startValuePhase);
582 phaseList = calc_all_comb_parameter_values_phase(startValuePhase, endValuePhase, linStepWidthPhase, expStepWidthPhase);
583 calc_atom_count_all_combined();
586 phaseList = calc_parameter_values_phase(startValuePhase, linStepWidthPhase, expStepWidthPhase);
592 void EditorWindow::calc_chirp_value()
596 ui->dspb_EndValueChirp->setDisabled(ui->rb_NoStepChirp->isChecked());
597 if(ui->rb_LinStepChirp->isChecked()) ui->dspb_EndValueChirp->setMinimum(startValueChirp + linStepWidthChirp);
598 else if(ui->rb_ExpStepChirp->isChecked()) ui->dspb_EndValueChirp->setMinimum(startValueChirp + 1);
601 ui->dspb_EndValueChirp->setMinimum(startValueChirp);
602 ui->dspb_EndValueChirp->setValue(startValueChirp);
604 chirpList = calc_all_comb_parameter_values_chirp(startValueChirp, endValueChirp, linStepWidthChirp, expStepWidthChirp);
605 calc_atom_count_all_combined();
608 chirpList = calc_parameter_values_chirp(startValueChirp, linStepWidthChirp, expStepWidthChirp);
614 void EditorWindow::on_tb_PartDictName_editingFinished()
616 partDictName = ui->tb_PartDictName->text();
622 void EditorWindow::on_chb_CombAllPara_toggled(
bool checked)
624 allCombined = checked;
626 ui->spb_AtomCount->setDisabled(checked);
627 ui->dspb_EndValueScale->setEnabled(
true);
628 ui->dspb_EndValueModu->setEnabled(
true);
629 ui->dspb_EndValuePhase->setEnabled(
true);
630 ui->dspb_EndValueChirp->setEnabled(
true);
632 ui->dspb_LinStepScale->setEnabled(ui->rb_LinStepScale->isChecked() && ui->spb_AtomCount->value() > 1);
633 ui->dspb_LinStepModu->setEnabled(ui->rb_LinStepModu->isChecked() && ui->spb_AtomCount->value() > 1);
634 ui->dspb_LinStepPhase->setEnabled(ui->rb_LinStepPhase->isChecked() && ui->spb_AtomCount->value() > 1);
635 ui->dspb_LinStepChirp->setEnabled(ui->rb_LinStepChirp->isChecked() && ui->spb_AtomCount->value() > 1);
637 ui->dspb_ExpStepScale->setEnabled(ui->rb_ExpStepScale->isChecked() && ui->spb_AtomCount->value() > 1);
638 ui->dspb_ExpStepModu->setEnabled(ui->rb_ExpStepModu->isChecked() && ui->spb_AtomCount->value() > 1);
639 ui->dspb_ExpStepPhase->setEnabled(ui->rb_ExpStepPhase->isChecked() && ui->spb_AtomCount->value() > 1);
640 ui->dspb_ExpStepChirp->setEnabled(ui->rb_ExpStepChirp->isChecked() && ui->spb_AtomCount->value() > 1);
642 ui->lb_LinNScale->setEnabled(ui->rb_LinStepScale->isChecked());
643 ui->lb_LinNModu->setEnabled(ui->rb_LinStepModu->isChecked());
644 ui->lb_LinNPhase->setEnabled(ui->rb_LinStepPhase->isChecked());
645 ui->lb_LinNChirp->setEnabled(ui->rb_LinStepChirp->isChecked());
647 ui->lb_ExpNScale->setEnabled(ui->rb_ExpStepScale->isChecked());
648 ui->lb_ExpNModu->setEnabled(ui->rb_ExpStepModu->isChecked());
649 ui->lb_ExpNPhase->setEnabled(ui->rb_ExpStepPhase->isChecked());
650 ui->lb_ExpNChirp->setEnabled(ui->rb_ExpStepChirp->isChecked());
652 ui->lb_EndValueScale->setDisabled(ui->rb_NoStepScale->isChecked());
653 ui->lb_EndValueModu->setDisabled(ui->rb_NoStepModu->isChecked());
654 ui->lb_EndValuePhase->setDisabled(ui->rb_NoStepPhase->isChecked());
655 ui->lb_EndValueChirp->setDisabled(ui->rb_NoStepChirp->isChecked());
657 ui->lb_CountDirectionScale->setDisabled(
true);
658 ui->lb_CountDirectionModu->setDisabled(
true);
659 ui->lb_CountDirectionPhase->setDisabled(
true);
660 ui->lb_CountDirectionChirp->setDisabled(
true);
662 ui->fr_CountDirectionScale->setDisabled(
true);
663 ui->fr_CountDirectionModu->setDisabled(
true);
664 ui->fr_CountDirectionPhase->setDisabled(
true);
665 ui->fr_CountDirectionChirp->setDisabled(
true);
667 ui->dspb_EndValueScale->setDisabled(ui->rb_NoStepScale->isChecked());
668 ui->dspb_EndValueModu->setDisabled(ui->rb_NoStepModu->isChecked());
669 ui->dspb_EndValuePhase->setDisabled(ui->rb_NoStepPhase->isChecked());
670 ui->dspb_EndValueChirp->setDisabled(ui->rb_NoStepChirp->isChecked());
672 if(ui->rb_LinStepScale->isChecked()) ui->dspb_EndValueScale->setMinimum(startValueScale + linStepWidthScale);
673 else if(ui->rb_ExpStepScale->isChecked()) ui->dspb_EndValueScale->setMinimum(startValueScale + 1);
674 else ui->dspb_EndValueScale->setValue(startValueScale);
676 if(ui->rb_LinStepModu->isChecked()) ui->dspb_EndValueModu->setMinimum(startValueModu + linStepWidthModu);
677 else if(ui->rb_ExpStepModu->isChecked()) ui->dspb_EndValueModu->setMinimum(startValueModu + 1);
678 else ui->dspb_EndValueModu->setValue(startValueModu);
680 if(ui->rb_LinStepPhase->isChecked()) ui->dspb_EndValuePhase->setMinimum(startValuePhase + linStepWidthPhase);
681 else if(ui->rb_ExpStepPhase->isChecked()) ui->dspb_EndValuePhase->setMinimum(startValuePhase + 1);
682 else ui->dspb_EndValuePhase->setValue(startValuePhase);
684 if(ui->rb_LinStepChirp->isChecked()) ui->dspb_EndValueChirp->setMinimum(startValueChirp + linStepWidthChirp);
685 else if(ui->rb_ExpStepChirp->isChecked()) ui->dspb_EndValueChirp->setMinimum(startValueChirp + 1);
686 else ui->dspb_EndValueChirp->setValue(startValueChirp);
690 ui->dspb_EndValueScale->setMinimum(0.05);
691 ui->dspb_EndValueModu->setMinimum(0.00);
692 ui->dspb_EndValuePhase->setMinimum(0.00);
693 ui->dspb_EndValueScale->setMinimum(0.00);
695 ui->dspb_EndValueScale->setDisabled(
true);
696 ui->dspb_EndValueModu->setDisabled(
true);
697 ui->dspb_EndValuePhase->setDisabled(
true);
698 ui->dspb_EndValueChirp->setDisabled(
true);
700 ui->lb_CountDirectionScale->setEnabled(!ui->rb_NoStepScale->isChecked());
701 ui->lb_CountDirectionModu->setEnabled(!ui->rb_NoStepModu->isChecked());
702 ui->lb_CountDirectionPhase->setEnabled(!ui->rb_NoStepPhase->isChecked());
703 ui->lb_CountDirectionChirp->setEnabled(!ui->rb_NoStepChirp->isChecked());
705 ui->fr_CountDirectionScale->setEnabled(!ui->rb_NoStepScale->isChecked());
706 ui->fr_CountDirectionModu->setEnabled(!ui->rb_NoStepModu->isChecked());
707 ui->fr_CountDirectionPhase->setEnabled(!ui->rb_NoStepPhase->isChecked());
708 ui->fr_CountDirectionChirp->setEnabled(!ui->rb_NoStepChirp->isChecked());
711 ui->rb_NoStepScale->setEnabled(checked);
712 ui->rb_NoStepModu->setEnabled(checked);
713 ui->rb_NoStepPhase->setEnabled(checked);
714 ui->rb_NoStepChirp->setEnabled(checked);
716 ui->lb_StepDefScale ->setEnabled(checked);
717 ui->lb_StepDefModu ->setEnabled(checked);
718 ui->lb_StepDefPhase ->setEnabled(checked);
719 ui->lb_StepDefChirp ->setEnabled(checked);
721 ui->rb_LinStepScale->setEnabled(checked);
722 ui->rb_LinStepModu->setEnabled(checked);
723 ui->rb_LinStepPhase->setEnabled(checked);
724 ui->rb_LinStepChirp->setEnabled(checked);
726 ui->rb_ExpStepScale->setEnabled(checked);
727 ui->rb_ExpStepModu->setEnabled(checked);
728 ui->rb_ExpStepPhase->setEnabled(checked);
729 ui->rb_ExpStepChirp->setEnabled(checked);
731 ui->lb_LinNScale->setEnabled(checked);
732 ui->lb_LinNModu->setEnabled(checked);
733 ui->lb_LinNPhase->setEnabled(checked);
734 ui->lb_LinNChirp->setEnabled(checked);
736 ui->lb_ExpNScale->setEnabled(checked);
737 ui->lb_ExpNModu->setEnabled(checked);
738 ui->lb_ExpNPhase->setEnabled(checked);
739 ui->lb_ExpNChirp->setEnabled(checked);
741 endValueScale = ui->dspb_EndValueScale->value();
742 endValueModu = ui->dspb_EndValueModu->value();
743 endValuePhase = ui->dspb_EndValuePhase->value();
744 endValueChirp = ui->dspb_EndValueChirp->value();
746 ui->dspb_StartValuePhase->setMaximum( ui->dspb_EndValueScale->value());
747 ui->dspb_EndValuePhase->setMaximum( ui->dspb_EndValueScale->value());
757 ui->spb_AtomCount->setValue(ui->spb_AtomCount->value() + 1);
758 ui->spb_AtomCount->setValue(ui->spb_AtomCount->value() - 1);
766 void EditorWindow::on_spb_AtomLength_editingFinished()
769 ui->dspb_StartValueScale->setMaximum(ui->spb_AtomLength->value());
770 ui->dspb_StartValueModu->setMaximum(ui->spb_AtomLength->value() / 2);
771 ui->dspb_StartValuePhase->setMaximum(ui->spb_AtomLength->value());
772 ui->dspb_StartValueChirp->setMaximum(ui->spb_AtomLength->value() / 2);
774 ui->dspb_EndValueScale->setMaximum(ui->spb_AtomLength->value());
775 ui->dspb_EndValueModu->setMaximum(ui->spb_AtomLength->value() / 2);
776 ui->dspb_EndValuePhase->setMaximum(ui->spb_AtomLength->value());
777 ui->dspb_EndValueChirp->setMaximum(ui->spb_AtomLength->value() / 2);
779 ui->dspb_LinStepScale->setMaximum(ui->spb_AtomLength->value());
780 ui->dspb_LinStepModu->setMaximum(ui->spb_AtomLength->value() / 2);
781 ui->dspb_LinStepPhase->setMaximum(ui->spb_AtomLength->value());
782 ui->dspb_LinStepChirp->setMaximum(ui->spb_AtomLength->value() / 2);
788 void EditorWindow::on_spb_AtomCount_valueChanged(
int arg1)
790 if(is_loading)
return;
794 if(atomCount != 1 || atomCount == 1 && allCombined)oneAtom =
false;
796 ui->rb_NoStepScale->setChecked(oneAtom);
797 ui->rb_NoStepModu->setChecked(oneAtom);
798 ui->rb_NoStepPhase->setChecked(oneAtom);
799 ui->rb_NoStepChirp->setChecked(oneAtom);
801 ui->rb_NoStepScale->setDisabled(oneAtom);
802 ui->rb_NoStepModu->setDisabled(oneAtom);
803 ui->rb_NoStepPhase->setDisabled(oneAtom);
804 ui->rb_NoStepChirp->setDisabled(oneAtom);
806 ui->lb_StepDefScale ->setDisabled(oneAtom);
807 ui->lb_StepDefModu ->setDisabled(oneAtom);
808 ui->lb_StepDefPhase ->setDisabled(oneAtom);
809 ui->lb_StepDefChirp ->setDisabled(oneAtom);
811 ui->rb_LinStepScale->setDisabled(oneAtom);
812 ui->rb_LinStepModu->setDisabled(oneAtom);
813 ui->rb_LinStepPhase->setDisabled(oneAtom);
814 ui->rb_LinStepChirp->setDisabled(oneAtom);
816 ui->rb_ExpStepScale->setDisabled(oneAtom);
817 ui->rb_ExpStepModu->setDisabled(oneAtom);
818 ui->rb_ExpStepPhase->setDisabled(oneAtom);
819 ui->rb_ExpStepChirp->setDisabled(oneAtom);
821 ui->lb_LinNScale->setDisabled(oneAtom);
822 ui->lb_LinNModu->setDisabled(oneAtom);
823 ui->lb_LinNPhase->setDisabled(oneAtom);
824 ui->lb_LinNChirp->setDisabled(oneAtom);
826 ui->lb_ExpNScale->setDisabled(oneAtom);
827 ui->lb_ExpNModu->setDisabled(oneAtom);
828 ui->lb_ExpNPhase->setDisabled(oneAtom);
829 ui->lb_ExpNChirp->setDisabled(oneAtom);
831 ui->dspb_LinStepScale->setDisabled(oneAtom);
832 ui->dspb_LinStepModu->setDisabled(oneAtom);
833 ui->dspb_LinStepPhase->setDisabled(oneAtom);
834 ui->dspb_LinStepChirp->setDisabled(oneAtom);
836 ui->dspb_ExpStepScale->setDisabled(oneAtom);
837 ui->dspb_ExpStepModu->setDisabled(oneAtom);
838 ui->dspb_ExpStepPhase->setDisabled(oneAtom);
839 ui->dspb_ExpStepChirp->setDisabled(oneAtom);
843 ui->dspb_EndValueScale->setValue(startValueScale);
844 ui->dspb_EndValueModu->setValue(startValueModu);
845 ui->dspb_EndValuePhase->setValue(startValuePhase);
846 ui->dspb_EndValueChirp->setValue(startValueChirp);
848 ui->lb_EndValueScale->setDisabled(
true);
849 ui->lb_EndValueModu->setDisabled(
true);
850 ui->lb_EndValuePhase->setDisabled(
true);
851 ui->lb_EndValueChirp->setDisabled(
true);
855 ui->lb_EndValueScale->setDisabled(ui->rb_NoStepScale->isChecked());
856 ui->lb_EndValueModu->setDisabled(ui->rb_NoStepModu->isChecked());
857 ui->lb_EndValuePhase->setDisabled(ui->rb_NoStepPhase->isChecked());
858 ui->lb_EndValueChirp->setDisabled(ui->rb_NoStepChirp->isChecked());
860 ui->dspb_LinStepScale->setEnabled(ui->rb_LinStepScale->isChecked());
861 ui->dspb_LinStepModu->setEnabled(ui->rb_LinStepModu->isChecked());
862 ui->dspb_LinStepPhase->setEnabled(ui->rb_LinStepPhase->isChecked());
863 ui->dspb_LinStepChirp->setEnabled(ui->rb_LinStepChirp->isChecked());
865 ui->dspb_ExpStepScale->setEnabled(ui->rb_ExpStepScale->isChecked());
866 ui->dspb_ExpStepModu->setEnabled(ui->rb_ExpStepModu->isChecked());
867 ui->dspb_ExpStepPhase->setEnabled(ui->rb_ExpStepPhase->isChecked());
868 ui->dspb_ExpStepChirp->setEnabled(ui->rb_ExpStepChirp->isChecked());
870 ui->lb_LinNScale->setEnabled(ui->rb_LinStepScale->isChecked());
871 ui->lb_LinNModu->setEnabled(ui->rb_LinStepModu->isChecked());
872 ui->lb_LinNPhase->setEnabled(ui->rb_LinStepPhase->isChecked());
873 ui->lb_LinNChirp->setEnabled(ui->rb_LinStepChirp->isChecked());
875 ui->lb_ExpNScale->setEnabled(ui->rb_ExpStepScale->isChecked());
876 ui->lb_ExpNModu->setEnabled(ui->rb_ExpStepModu->isChecked());
877 ui->lb_ExpNPhase->setEnabled(ui->rb_ExpStepPhase->isChecked());
878 ui->lb_ExpNChirp->setEnabled(ui->rb_ExpStepChirp->isChecked());
890 void EditorWindow::on_dspb_StartValueScale_editingFinished()
892 startValueScale = ui->dspb_StartValueScale->value();
898 void EditorWindow::on_dspb_EndValueScale_editingFinished()
900 ui->dspb_StartValuePhase->setMaximum( ui->dspb_EndValueScale->value());
901 ui->dspb_EndValuePhase->setMaximum( ui->dspb_EndValueScale->value());
902 endValueScale = ui->dspb_EndValueScale->value();
908 void EditorWindow::on_rb_NoStepScale_toggled(
bool checked)
910 if(checked) ui->lb_StartValueScale->setText(
"value:");
911 else ui->lb_StartValueScale->setText(
"start value:");
913 ui->dspb_LinStepScale->setEnabled(
false);
914 ui->dspb_ExpStepScale->setEnabled(
false);
916 ui->lb_EndValueScale->setDisabled(checked);
919 ui->lb_CountDirectionScale->setDisabled(allCombined);
920 ui->fr_CountDirectionScale->setDisabled(allCombined);
924 ui->lb_CountDirectionScale->setDisabled(
true);
925 ui->fr_CountDirectionScale->setDisabled(
true);
932 void EditorWindow::on_rb_LinStepScale_toggled(
bool checked)
934 if(checked) linStepWidthScale = ui->dspb_LinStepScale->value();
936 ui->dspb_LinStepScale->setEnabled(
true);
937 ui->dspb_ExpStepScale->setEnabled(
false);
939 ui->dspb_StartValuePhase->setMaximum( ui->dspb_EndValueScale->value());
940 ui->dspb_EndValuePhase->setMaximum( ui->dspb_EndValueScale->value());
947 void EditorWindow::on_rb_ExpStepScale_toggled(
bool checked)
949 if(checked) expStepWidthScale = ui->dspb_ExpStepScale->value();
951 ui->dspb_ExpStepScale->setEnabled(
true);
952 ui->dspb_LinStepScale->setEnabled(
false);
955 ui->dspb_StartValuePhase->setMaximum( ui->dspb_EndValueScale->value());
956 ui->dspb_EndValuePhase->setMaximum( ui->dspb_EndValueScale->value());
962 void EditorWindow::on_dspb_LinStepScale_editingFinished()
964 linStepWidthScale = ui->dspb_LinStepScale->value();
970 void EditorWindow::on_dspb_ExpStepScale_editingFinished()
972 expStepWidthScale = ui->dspb_ExpStepScale->value();
978 void EditorWindow::on_rb_PosCountScale_toggled()
981 scaleList = calc_parameter_values_scale(startValueScale, linStepWidthScale, expStepWidthScale);
986 void EditorWindow::on_rb_NegCountScale_toggled()
989 scaleList = calc_parameter_values_scale(startValueScale, linStepWidthScale, expStepWidthScale);
995 void EditorWindow::on_dspb_StartValueModu_editingFinished()
997 startValueModu = ui->dspb_StartValueModu->value();
1003 void EditorWindow::on_dspb_EndValueModu_editingFinished()
1005 endValueModu = ui->dspb_EndValueModu->value();
1011 void EditorWindow::on_rb_NoStepModu_toggled(
bool checked)
1013 if(checked) ui->lb_StartValueModu->setText(
"value:");
1014 else ui->lb_StartValueModu->setText(
"start value:");
1016 ui->dspb_LinStepModu->setEnabled(
false);
1017 ui->dspb_ExpStepModu->setEnabled(
false);
1019 ui->lb_EndValueModu->setDisabled(checked);
1022 ui->lb_CountDirectionModu->setDisabled(allCombined);
1023 ui->fr_CountDirectionModu->setDisabled(allCombined);
1027 ui->lb_CountDirectionModu->setDisabled(
true);
1028 ui->fr_CountDirectionModu->setDisabled(
true);
1035 void EditorWindow::on_rb_LinStepModu_toggled(
bool checked)
1037 if(checked) linStepWidthModu = ui->dspb_LinStepModu->value();
1038 ui->dspb_LinStepModu->setEnabled(
true);
1039 ui->dspb_ExpStepModu->setEnabled(
false);
1046 void EditorWindow::on_rb_ExpStepModu_toggled(
bool checked)
1048 if(checked) expStepWidthModu = ui->dspb_ExpStepModu->value();
1049 ui->dspb_ExpStepModu->setEnabled(
true);
1050 ui->dspb_LinStepModu->setEnabled(
false);
1056 void EditorWindow::on_dspb_LinStepModu_editingFinished()
1058 linStepWidthModu = ui->dspb_LinStepModu->value();
1064 void EditorWindow::on_dspb_ExpStepModu_editingFinished()
1066 expStepWidthModu = ui->dspb_ExpStepModu->value();
1072 void EditorWindow::on_rb_PosCountModu_toggled()
1075 moduList = calc_parameter_values_modu(startValueModu, linStepWidthModu, expStepWidthModu);
1080 void EditorWindow::on_rb_NegCountModu_toggled()
1083 moduList = calc_parameter_values_modu(startValueModu, linStepWidthModu, expStepWidthModu);
1089 void EditorWindow::on_dspb_StartValuePhase_editingFinished()
1091 startValuePhase = ui->dspb_StartValuePhase->value();
1097 void EditorWindow::on_dspb_EndValuePhase_editingFinished()
1099 endValuePhase = ui->dspb_EndValuePhase->value();
1105 void EditorWindow::on_rb_NoStepPhase_toggled(
bool checked)
1107 if(checked) ui->lb_StartValuePhase->setText(
"value:");
1108 else ui->lb_StartValuePhase->setText(
"start value:");
1110 ui->dspb_ExpStepPhase->setEnabled(
false);
1111 ui->dspb_LinStepPhase->setEnabled(
false);
1113 ui->lb_EndValuePhase->setDisabled(checked);
1116 ui->lb_CountDirectionPhase->setDisabled(allCombined);
1117 ui->fr_CountDirectionPhase->setDisabled(allCombined);
1121 ui->lb_CountDirectionPhase->setDisabled(
true);
1122 ui->fr_CountDirectionPhase->setDisabled(
true);
1129 void EditorWindow::on_rb_LinStepPhase_toggled(
bool checked)
1131 if(checked) linStepWidthPhase = ui->dspb_LinStepPhase->value();
1133 ui->dspb_LinStepPhase->setEnabled(
true);
1134 ui->dspb_ExpStepPhase->setEnabled(
false);
1141 void EditorWindow::on_rb_ExpStepPhase_toggled(
bool checked)
1143 if(checked) expStepWidthPhase = ui->dspb_ExpStepPhase->value();
1145 ui->dspb_ExpStepPhase->setEnabled(
true);
1146 ui->dspb_LinStepPhase->setEnabled(
false);
1153 void EditorWindow::on_dspb_LinStepPhase_editingFinished()
1155 linStepWidthPhase = ui->dspb_LinStepPhase->value();
1161 void EditorWindow::on_dspb_ExpStepPhase_editingFinished()
1163 expStepWidthPhase = ui->dspb_ExpStepPhase->value();
1169 void EditorWindow::on_rb_PosCountPhase_toggled()
1172 phaseList = calc_parameter_values_phase(startValuePhase, linStepWidthPhase, expStepWidthPhase);
1177 void EditorWindow::on_rb_NegCountPhase_toggled()
1180 phaseList = calc_parameter_values_phase(startValuePhase, linStepWidthPhase, expStepWidthPhase);
1186 void EditorWindow::on_dspb_StartValueChirp_editingFinished()
1188 startValueChirp = ui->dspb_StartValueChirp->value();
1194 void EditorWindow::on_dspb_EndValueChirp_editingFinished()
1196 endValueChirp = ui->dspb_EndValueChirp->value();
1202 void EditorWindow::on_rb_NoStepChirp_toggled(
bool checked)
1204 if(checked) ui->lb_StartValueChirp->setText(
"value:");
1205 else ui->lb_StartValueChirp->setText(
"start value:");
1207 ui->dspb_ExpStepChirp->setEnabled(
false);
1208 ui->dspb_LinStepChirp->setEnabled(
false);
1210 ui->lb_EndValueChirp->setDisabled(checked);
1213 ui->lb_CountDirectionChirp->setDisabled(allCombined);
1214 ui->fr_CountDirectionChirp->setDisabled(allCombined);
1215 ui->rb_NegCountChirp->setDisabled(allCombined);
1216 ui->rb_PosCountChirp->setDisabled(allCombined);
1220 ui->lb_CountDirectionChirp->setDisabled(
true);
1221 ui->fr_CountDirectionChirp->setDisabled(
true);
1222 ui->rb_NegCountChirp->setDisabled(
true);
1223 ui->rb_PosCountChirp->setDisabled(
true);
1230 void EditorWindow::on_rb_LinStepChirp_toggled(
bool checked)
1232 if(checked) linStepWidthChirp = ui->dspb_LinStepChirp->value();
1234 ui->dspb_LinStepChirp->setEnabled(
true);
1235 ui->dspb_ExpStepChirp->setEnabled(
false);
1242 void EditorWindow::on_rb_ExpStepChirp_toggled(
bool checked)
1244 if(checked) expStepWidthChirp = ui->dspb_ExpStepChirp->value();
1246 ui->dspb_ExpStepChirp->setEnabled(
true);
1247 ui->dspb_LinStepChirp->setEnabled(
false);
1254 void EditorWindow::on_dspb_LinStepChirp_editingFinished()
1256 linStepWidthChirp = ui->dspb_LinStepChirp->value();
1262 void EditorWindow::on_dspb_ExpStepChirp_editingFinished()
1264 expStepWidthChirp = ui->dspb_ExpStepChirp->value();
1270 void EditorWindow::on_rb_PosCountChirp_toggled()
1273 chirpList = calc_parameter_values_chirp(startValueChirp, linStepWidthChirp, expStepWidthChirp);
1278 void EditorWindow::on_rb_NegCountChirp_toggled()
1281 chirpList = calc_parameter_values_chirp(startValueChirp, linStepWidthChirp, expStepWidthChirp);
1287 void EditorWindow::on_rb_GaussAtomType_toggled(
bool checked)
1289 if(checked) atomType = EditorWindow::Gauss;
1294 void EditorWindow::on_rb_ChirpAtomType_toggled(
bool checked)
1296 if(checked) atomType = EditorWindow::Chirp;
1298 if(checked && ui->spb_AtomCount->value() == 1 && !allCombined)
1300 ui->lb_StepDefChirp->setDisabled(
true);
1301 ui->rb_NoStepChirp->setDisabled(
true);
1302 ui->rb_LinStepChirp->setDisabled(
true);
1303 ui->lb_LinNChirp->setDisabled(
true);
1304 ui->dspb_LinStepChirp->setDisabled(
true);
1305 ui->rb_ExpStepChirp->setDisabled(
true);
1306 ui->lb_ExpNChirp->setDisabled(
true);
1307 ui->dspb_ExpStepChirp->setDisabled(
true);
1309 ui->lb_CountDirectionChirp->setDisabled(
true);
1310 ui->rb_PosCountChirp->setDisabled(
true);
1311 ui->rb_NegCountChirp->setDisabled(
true);
1312 ui->lb_EndValueChirp->setDisabled(
true);
1313 ui->dspb_EndValueChirp->setDisabled(
true);
1317 ui->lb_EndValueChirp->setDisabled(ui->rb_NoStepChirp->isChecked());
1318 ui->rb_PosCountChirp->setDisabled(ui->rb_NoStepChirp->isChecked());
1319 ui->rb_NegCountChirp->setDisabled(ui->rb_NoStepChirp->isChecked());
1320 ui->lb_EndValueChirp->setDisabled(!allCombined);
1327 void EditorWindow::on_btt_CalcAtoms_clicked()
1329 QStringList resultList;
1334 if(partDictName.isEmpty())
1336 QMessageBox::warning(
this, tr(
"Error"),
1337 tr(
"It was not assigned a name."));
1338 ui->tb_PartDictName->setFocus();
1343 while(k < ui->list_AllDict->count())
1345 if(QString::compare(partDictName, ui->list_AllDict->item(k)->text()) == 0)
1346 { QMessageBox::warning(
this, tr(
"Error"),
1347 tr(
"The name is already taken."));
1349 ui->tb_PartDictName->setFocus();
1350 ui->tb_PartDictName->selectAll();
1356 QString save_path_xml = QString(QDir::homePath() +
"/" +
"Matching-Pursuit-Toolbox/%1.pdict").arg(partDictName);
1357 QFile xml_file(save_path_xml);
1358 if (xml_file.open (QIODevice::WriteOnly))
1360 QXmlStreamWriter xmlWriter(&xml_file);
1361 xmlWriter.setAutoFormatting(
true);
1362 xmlWriter.writeStartDocument();
1364 xmlWriter.writeStartElement(
"COUNT");
1365 xmlWriter.writeAttribute(
"of_atoms", QString::number(ui->spb_AtomCount->value()));
1366 xmlWriter.writeStartElement(
"built_Atoms");
1368 if(atomType == EditorWindow::Chirp)
1369 xmlWriter.writeAttribute(
"formula",
"Chirpatom");
1370 else if(atomType == EditorWindow::Gauss)
1371 xmlWriter.writeAttribute(
"formula",
"Gaboratom");
1372 xmlWriter.writeAttribute(
"sample_count", QString::number(ui->spb_AtomLength->value()));
1373 xmlWriter.writeAttribute(
"atom_count", QString::number(atomCount));
1374 xmlWriter.writeAttribute(
"source_dict", partDictName);
1379 if(ui->chb_CombAllPara->isChecked())
1381 qint32 atomIndex = 0;
1382 qint32 chirpCount = 0;
1383 qint32 chirpMax = 1;
1385 if(chirpList.length() != 0) chirpMax = chirpList.length();
1387 while(chirpCount < chirpMax)
1389 qint32 phaseCount = 0;
1390 while(phaseCount < phaseList.length())
1392 qint32 moduCount = 0;
1393 while(moduCount < moduList.length())
1395 qint32 scaleCount = 0;
1396 while(scaleCount < scaleList.length())
1398 qreal tempScale = ui->dspb_StartValueScale->value();
1399 if(scaleList.length() > 0 && scaleCount < scaleList.length()) tempScale = scaleList.at(scaleCount);
1400 qreal tempModu = ui->dspb_StartValueModu->value();
1401 if(moduList.length() > 0 && moduCount < moduList.length()) tempModu = moduList.at(moduCount);
1402 qreal tempPhase = 2 * PI * ui->dspb_StartValuePhase->value() / ui->spb_AtomLength->value();
1403 if(phaseList.length() > 0 && phaseCount < phaseList.length()) tempPhase = 2 * PI * phaseList.at(phaseCount) / ui->spb_AtomLength->value();
1404 qreal tempChirp = ui->dspb_StartValueChirp->value();
1405 if(chirpList.length() > 0 && chirpCount < chirpList.length()) tempChirp = chirpList.at(chirpCount);
1407 if(atomType == EditorWindow::Chirp)
1409 resultList = cAtom->create_string_values(ui->spb_AtomLength->value(), tempScale, ui->spb_AtomLength->value() / 2, tempModu, tempPhase, tempChirp);
1410 xmlWriter.writeStartElement(
"ATOM");
1411 xmlWriter.writeAttribute(
"ID", QString::number(atomIndex));
1412 xmlWriter.writeAttribute(
"scale", QString::number(tempScale));
1413 xmlWriter.writeAttribute(
"modu", QString::number(tempModu));
1414 xmlWriter.writeAttribute(
"phase", QString::number(tempPhase));
1415 xmlWriter.writeAttribute(
"chirp", QString::number(tempChirp));
1418 else if(atomType == EditorWindow::Gauss)
1420 resultList = gAtom->
create_string_values(ui->spb_AtomLength->value(), tempScale, ui->spb_AtomLength->value() / 2, tempModu, tempPhase);
1421 xmlWriter.writeStartElement(
"ATOM");
1422 xmlWriter.writeAttribute(
"ID", QString::number(atomIndex));
1423 xmlWriter.writeAttribute(
"scale", QString::number(tempScale));
1424 xmlWriter.writeAttribute(
"modu", QString::number(tempModu));
1425 xmlWriter.writeAttribute(
"phase", QString::number(tempPhase));
1428 xmlWriter.writeStartElement(
"samples");
1429 QString samples_to_xml;
1430 for (qint32 it = 0; it < resultList.length(); it++)
1432 samples_to_xml.append(resultList.at(it));
1433 samples_to_xml.append(
":");
1435 xmlWriter.writeAttribute(
"samples", samples_to_xml);
1436 xmlWriter.writeEndElement();
1438 xmlWriter.writeEndElement();
1452 if(ui->spb_AtomCount->value() != 1)
1454 if(ui->rb_ChirpAtomType->isChecked())
1456 if(ui->rb_NoStepScale->isChecked() && ui->rb_NoStepModu->isChecked() && ui->rb_NoStepPhase->isChecked() && ui->rb_NoStepChirp)
1458 QMessageBox::warning(
this, tr(
"Warning"),QString(
"It created %1 identical atoms. Please change the number of atoms on one or let you vary a parameter.").arg(ui->spb_AtomCount->value()));
1462 else if(ui->rb_NoStepScale->isChecked() && ui->rb_NoStepModu->isChecked() && ui->rb_NoStepPhase->isChecked())
1464 QMessageBox::warning(
this, tr(
"Warning"),QString(
"It created %1 identical atoms. Please change the number of atoms on one or let you vary a parameter.").arg(ui->spb_AtomCount->value()));
1470 while (i < atomCount)
1472 qreal tempScale = ui->dspb_StartValueScale->value();
1473 if(scaleList.length() > 0 && i < scaleList.length()) tempScale = scaleList.at(i);
1474 qreal tempModu = ui->dspb_StartValueModu->value();
1475 if(moduList.length() > 0 && i < moduList.length()) tempModu = moduList.at(i);
1476 qreal tempPhase = 2 * PI * ui->dspb_StartValuePhase->value() / ui->spb_AtomLength->value();
1477 if(phaseList.length() > 0 && i < phaseList.length()) tempPhase = 2 * PI * phaseList.at(i) / ui->spb_AtomLength->value();
1478 qreal tempChirp = ui->dspb_StartValueChirp->value();
1479 if(chirpList.length() > 0 && i < chirpList.length()) tempChirp = chirpList.at(i);
1481 if(atomType == EditorWindow::Chirp)
1483 resultList = cAtom->create_string_values(ui->spb_AtomLength->value(), tempScale, ui->spb_AtomLength->value() / 2, tempModu, tempPhase, tempChirp);
1484 xmlWriter.writeStartElement(
"ATOM");
1485 xmlWriter.writeAttribute(
"ID", QString::number(i));
1486 xmlWriter.writeAttribute(
"scale", QString::number(tempScale));
1487 xmlWriter.writeAttribute(
"modu", QString::number(tempModu));
1488 xmlWriter.writeAttribute(
"phase", QString::number(tempPhase));
1489 xmlWriter.writeAttribute(
"chirp", QString::number(tempChirp));
1491 else if(atomType == EditorWindow::Gauss)
1493 resultList = gAtom->
create_string_values(ui->spb_AtomLength->value(), tempScale, ui->spb_AtomLength->value() / 2, tempModu, tempPhase);
1494 xmlWriter.writeStartElement(
"ATOM");
1495 xmlWriter.writeAttribute(
"ID", QString::number(i));
1496 xmlWriter.writeAttribute(
"scale", QString::number(tempScale));
1497 xmlWriter.writeAttribute(
"modu", QString::number(tempModu));
1498 xmlWriter.writeAttribute(
"phase", QString::number(tempPhase));
1501 xmlWriter.writeStartElement(
"samples");
1502 QString samples_to_xml;
1503 for (qint32 it = 0; it < resultList.length(); it++)
1505 samples_to_xml.append(resultList.at(it));
1506 samples_to_xml.append(
":");
1508 xmlWriter.writeAttribute(
"samples", samples_to_xml);
1509 xmlWriter.writeEndElement();
1510 xmlWriter.writeEndElement();
1518 xmlWriter.writeEndElement();
1519 xmlWriter.writeEndElement();
1520 xmlWriter.writeEndDocument();
1525 if(ui->list_AllDict->count() > 1) ui->list_AllDict->itemAt(0, 0)->setSelected(
true);
1530 void EditorWindow::on_btt_ToNewDict_clicked()
1532 QList<QListWidgetItem*> selcItems = ui->list_AllDict->selectedItems();
1533 for(qint32 i = 0; i < selcItems.length(); i++)
1535 QListWidgetItem* item = selcItems.at(i);
1536 ui->list_NewDict->addItem(item->clone());
1538 item->setSelected(
false);
1541 if(ui->list_AllDict->count() > 0) ui->list_AllDict->itemAt(0,0)->setSelected(
true);
1542 if(ui->list_NewDict->count() > 0) ui->btt_SaveDicts->setEnabled(
true);
1547 void EditorWindow::on_list_AllDict_doubleClicked()
1549 QListWidgetItem* item = ui->list_AllDict->selectedItems().at(0);
1550 ui->list_NewDict->addItem(item->clone());
1552 item->setSelected(
false);
1554 if(ui->list_AllDict->count() > 0) ui->list_AllDict->itemAt(0,0)->setSelected(
true);
1555 if(ui->list_NewDict->count() > 0) ui->btt_SaveDicts->setEnabled(
true);
1561 void EditorWindow::on_btt_ToAlldict_clicked()
1563 QList<QListWidgetItem*> selcItems = ui->list_NewDict->selectedItems();
1564 for(qint32 i = 0; i < selcItems.length(); i++)
1566 QListWidgetItem* item = selcItems.at(i);
1567 ui->list_AllDict->addItem(item->clone());
1569 item->setSelected(
false);
1572 if(ui->list_NewDict->count() > 1) ui->list_NewDict->itemAt(0,0)->setSelected(
true);
1573 if(ui->list_NewDict->count() == 0) ui->btt_SaveDicts->setEnabled(
false);
1578 void EditorWindow::on_list_NewDict_doubleClicked()
1580 QListWidgetItem* item = ui->list_NewDict->selectedItems().at(0);
1581 ui->list_AllDict->addItem(item->clone());
1583 item->setSelected(
false);
1585 if(ui->list_NewDict->count() > 1) ui->list_NewDict->itemAt(0,0)->setSelected(
true);
1586 if(ui->list_NewDict->count() == 0) ui->btt_SaveDicts->setEnabled(
false);
1591 void EditorWindow::on_btt_DeleteDict_clicked()
1598 void EditorWindow::deleteDicts()
1601 if(settings.value(
"show_warnings",
true).toBool())
1604 msgBox->setModal(
true);
1605 qint32 result = msgBox->exec();
1616 QList<QListWidgetItem*> delItemsList = ui->list_AllDict->selectedItems();
1617 while( i < delItemsList.length())
1619 QFile file(QString(QDir::homePath() +
"/" +
"Matching-Pursuit-Toolbox/%1").arg(delItemsList.at(i)->toolTip()));
1622 QListWidgetItem* delItem = delItemsList.at(i);
1623 delItem->setSelected(
false);
1632 void EditorWindow::on_list_AllDict_itemSelectionChanged()
1634 if(ui->list_AllDict->selectedItems().length() == 0)
1636 ui->btt_ToNewDict->setEnabled(
false);
1637 ui->btt_DeleteDict->setEnabled(
false);
1641 ui->btt_ToNewDict->setEnabled(
true);
1642 ui->btt_DeleteDict->setEnabled(
true);
1648 void EditorWindow::on_list_NewDict_itemSelectionChanged()
1650 if(ui->list_NewDict->selectedItems().length() == 0)
1652 ui->btt_ToAlldict->setEnabled(
false);
1656 ui->btt_ToAlldict->setEnabled(
true);
1662 void EditorWindow::on_btt_SaveDicts_clicked()
1664 QList<qint32> atomCountList;
1665 if(ui->tb_DictName->text().isEmpty())
1667 QMessageBox::warning(
this, tr(
"Error"),
1668 tr(
"There was no name for the dictionary awarded."));
1669 ui->tb_DictName->setFocus();
1673 QStringList filterList;
1674 filterList.append(
"*.dict");
1675 QDir dictDir = QDir(QDir::homePath() +
"/" +
"Matching-Pursuit-Toolbox");
1676 QFileInfoList fileList = dictDir.entryInfoList(filterList);
1678 for(qint32 i = 0; i < fileList.length(); i++)
1680 QFileInfo fileInfo = fileList.at(i);
1681 if(QString::compare(fileInfo.baseName(), ui->tb_DictName->text()) == 0)
1683 QMessageBox::warning(
this, tr(
"Error"),
1684 tr(
"The name for the dictionary is already taken."));
1685 ui->tb_DictName->setFocus();
1686 ui->tb_DictName->selectAll();
1691 qint32 summarize_atoms = 0;
1692 QDomDocument xml_dict;
1693 QDomElement header = xml_dict.createElement(
"COUNT");
1694 for(qint32 i = 0; i < ui->list_NewDict->count(); i++)
1696 QFile xml_file(QString(QDir::homePath() +
"/" +
"Matching-Pursuit-Toolbox/%1").arg(ui->list_NewDict->item(i)->toolTip()));
1698 QDomDocument xml_pdict;
1699 xml_pdict.setContent(&xml_file);
1700 QDomElement xml_root= xml_pdict.documentElement();
1702 QDomNodeList node_list = xml_root.childNodes();
1704 bool hasElement =
false;
1706 qint32 node_count = node_list.count();
1707 for(qint32 pdict_count = 0; pdict_count < node_count; pdict_count++)
1709 QDomElement built = node_list.at(0).toElement();
1711 if(built.hasChildNodes())
1713 QDomNodeList write_list = built.childNodes();
1714 qint32 count_2 = write_list.count();
1715 for(qint32 k = 0; k < count_2; k++)
1717 QDomElement write_element = write_list.at(k).toElement();
1718 if((built.attribute(
"source_dict", built.text())) == (write_element.attribute(
"source_dict", write_element.text())))
1726 summarize_atoms += (built.attribute(
"atom_count", built.text())).toInt();
1727 header.appendChild(built);
1728 QDomElement atom = built.firstChild().toElement();
1729 while(!atom.isNull())
1731 built.appendChild(atom);
1732 atom = atom.nextSibling().toElement();
1739 QString xml_new_path = QString(QDir::homePath() +
"/" +
"Matching-Pursuit-Toolbox/%1_xml.dict").arg(ui->tb_DictName->text());
1740 QFile xml_new_file(xml_new_path);
1741 if(xml_new_file.open(QIODevice::WriteOnly))
1743 QTextStream xml_stream(&xml_new_file);
1744 QXmlStreamWriter writer(&xml_new_file);
1745 writer.setAutoFormatting(
true);
1746 writer.writeStartDocument();
1748 header.setAttribute(
"of_atoms", QString::number(summarize_atoms));
1749 xml_dict.appendChild(header);
1750 xml_dict.save(xml_stream, 4);
1751 writer.writeEndDocument();
1753 xml_new_file.close();
1756 ui->list_NewDict->clear();
1757 ui->tb_DictName->clear();
1764 void EditorWindow::keyReleaseEvent(QKeyEvent *event)
1766 if(event->key() == Qt::Key_Delete && ui->list_AllDict->hasFocus() && ui->list_AllDict->selectedItems().count() > 0)
1774 void EditorWindow::on_save_dicts()
1783 void EditorWindow::on_btt_extended_clicked()
1785 QPropertyAnimation *animation =
new QPropertyAnimation(
this,
"size");
1786 connect(animation, SIGNAL(finished()),
this, SLOT(animation_finished()));
1787 if(window_width == this->width())
1789 this->setMaximumWidth(16777215);
1790 animation->setDuration(1000);
1791 animation->setStartValue(QSize(this->size().width(), this->size().height()));
1793 qint32 expanded_width = settings.value(
"size_expanded_editor", 1200).toInt();
1794 animation->setEndValue(QSize(expanded_width, this->size().height()));
1799 is_expanded =
false;
1800 ui->gb_atom_viewer->setHidden(
true);
1801 animation->setDuration(1000);
1802 animation->setStartValue(QSize(this->size().width(), this->size().height()));
1803 animation->setEndValue(QSize(window_width, this->size().height()));
1810 void EditorWindow::animation_finished()
1812 if(window_width == this->width())
1814 this->setMaximumSize(this->minimumSize());
1815 is_expanded =
false;
1816 ui->btt_extended->setIcon(QIcon(
":/images/icons/greenArrowRight.png"));
1821 settings.setValue(
"size_expanded_editor", this->width());
1823 ui->gb_atom_viewer->setVisible(
true);
1824 ui->btt_extended->setIcon(QIcon(
":/images/icons/greenArrowLeft.png"));
1830 void EditorWindow::resizeEvent(QResizeEvent *event)
1836 settings.setValue(
"size_expanded_editor", this->width());
1837 if(this->size().width() < 1200)
1838 resize(1200, window_height);
1844 void AtomWindow::paintEvent(QPaintEvent* event)
1855 QPainter painter(
this);
1856 painter.setRenderHint(QPainter::Antialiasing,
true);
1857 painter.fillRect(0,0,window_size.width(),window_size.height(),QBrush(Qt::white));
1858 painter.drawRect(0,0, window_size.width(), window_size.height());
1860 if(atom_matrix.rows() > 0 && atom_matrix.cols() > 0)
1862 const qint32 maxStrLenght = 55;
1863 qint32 borderMarginWidth = 15;
1864 qreal border_margin_height = 5 + window_size.height() / 10;
1868 qreal scaleYText = 0.0;
1869 qint32 negScale = 0;
1871 maxPos = atom_matrix.maxCoeff();
1872 maxNeg = atom_matrix.minCoeff();
1875 if(maxNeg <= 0) maxmax = maxPos - maxNeg;
1876 else maxmax = maxPos + maxNeg;
1879 scaleYText = maxmax / 10.0;
1881 if(maxNeg < 0) negScale = floor((maxNeg * 10 / maxmax) + 0.5);
1882 if(maxPos <= 0) negScale = -10;
1886 qreal scaleX = (window_size.width() - maxStrLenght - borderMarginWidth) / qreal(atom_matrix.rows() - 1);
1887 qreal scaleY = (window_size.height() - border_margin_height) / maxmax;
1890 qreal scaleXAchse = (window_size.width() - maxStrLenght - borderMarginWidth) / 20.0;
1891 qreal scaleYAchse = (window_size.height() - border_margin_height) / 10.0;
1893 for(qint32 i = 0; i < 11; i++)
1897 qint32 x_axis_height = i * scaleYAchse - window_size.height() + border_margin_height / 2;
1900 for(qint32 channel = 0; channel < atom_matrix.cols(); channel++)
1903 for(qint32 h = 0; h < atom_matrix.rows(); h++)
1904 poly.append(QPointF((h * scaleX) + maxStrLenght, -(atom_matrix(h, channel) * scaleY + x_axis_height)));
1905 QPen pen(_atom_colors.at(channel), 0.5, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin);
1906 painter.setPen(pen);
1907 painter.drawPolyline(poly);
1911 for(qint32 j = 1; j < 21; j++)
1913 if(fmod(j, 4.0) == 0)
1915 QPen pen(Qt::darkGray, 0.5, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin);
1916 painter.setPen(pen);
1917 painter.drawLine(j * scaleXAchse + maxStrLenght, -(x_axis_height - window_size.height()),
1918 j * scaleXAchse + maxStrLenght , -(x_axis_height + window_size.height()));
1920 QPen pen(Qt::black, 1, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin);
1921 painter.setPen(pen);
1922 painter.drawLine(j * scaleXAchse + maxStrLenght, -(x_axis_height - 2),
1923 j * scaleXAchse + maxStrLenght , -(x_axis_height + 2));
1925 painter.drawLine(maxStrLenght - 40, -x_axis_height, window_size.width()-5, -x_axis_height);
1927 painter.drawText(3, -(i * scaleYAchse - window_size.height()) - border_margin_height / 2 + 4, QString::number(negScale * scaleYText,
'g', 3));
1929 painter.drawLine(maxStrLenght - 2, -((i * scaleYAchse)-(window_size.height()) + border_margin_height / 2),
1930 maxStrLenght + 2, -((i * scaleYAchse)-(window_size.height()) + border_margin_height / 2));
1934 painter.drawLine(maxStrLenght, 2, maxStrLenght, window_size.height() - 2);
1941 void XAxisAtomWindow::paintEvent(QPaintEvent* event)
1951 QPainter painter(
this);
1952 painter.setRenderHint(QPainter::Antialiasing,
true);
1954 if(atom_matrix.rows() > 0 && atom_matrix.cols() > 0)
1956 const qint32 maxStrLenght = 55;
1957 qint32 borderMarginWidth = 15;
1958 qreal scaleXText = (atom_matrix.rows() - 1) / 20.0;
1959 qreal scaleXAchse = (window_size.width() - maxStrLenght - borderMarginWidth) / 20.0;
1961 for(qint32 j = 0; j < 21; j++)
1963 painter.drawText(j * scaleXAchse + 47, 20, QString::number(j * scaleXText,
'f', 0));
1964 painter.drawLine(j * scaleXAchse + maxStrLenght, 5 + 2,
1965 j * scaleXAchse + maxStrLenght, 5 - 2);
1967 painter.drawText(5 , 20,
"[sample]");
1968 painter.drawLine(5, 5, window_size.width()-5, 5);
1974 void EditorWindow::on_li_all_dicts_itemSelectionChanged()
1977 QList<Dictionary> dicts = fix_mp->parse_xml_dict(QString(QDir::homePath() +
"/Matching-Pursuit-Toolbox/%1").arg( ui->li_all_dicts->selectedItems().at(0)->toolTip()));
1979 current_dict.clear();
1980 for(qint32 i = 0; i < dicts.length(); i++)
1981 current_dict.atoms.append(dicts.at(i).atoms);
1983 current_atom_number = 1;
1984 atom_changed(current_atom_number);
1986 ui->spb_atom_number->setEnabled(
true);
1987 ui->spb_atom_number->setMaximum(current_dict.atom_count());
1988 ui->l_max_dict_number->setText(QString(
" / %1").arg(current_dict.atom_count()));
1990 callXAxisAtomWindow->setMinimumHeight(22);
1991 callXAxisAtomWindow->setMaximumHeight(22);
1997 void EditorWindow::on_btt_next_dict_clicked()
1999 atom_changed(++current_atom_number);
2004 void EditorWindow::on_btt_prev_dict_clicked()
2006 atom_changed(--current_atom_number);
2011 void EditorWindow::on_spb_atom_number_editingFinished()
2013 current_atom_number = ui->spb_atom_number->value();
2014 atom_changed(current_atom_number);
2019 void EditorWindow::atom_changed(qint32 atom_number)
2021 if(current_atom_number == current_dict.atom_count()) ui->btt_next_dict->setEnabled(
false);
2022 else ui->btt_next_dict->setEnabled(
true);
2024 if(current_atom_number == 1) ui->btt_prev_dict->setEnabled(
false);
2025 else ui->btt_prev_dict->setEnabled(
true);
2027 ui->spb_atom_number->setValue(current_atom_number);
2029 _atom_matrix = MatrixXd::Zero(current_dict.atoms.at(atom_number - 1).atom_samples.rows(), 1);
2030 _atom_matrix.col(0) = current_dict.atoms.at(atom_number - 1).atom_samples;
2037 void EditorWindow::on_gb_atom_editor_toggled(
bool arg1)
2039 ui->gb_atom_editor->setChecked(
true);
2042 void EditorWindow::on_gb_dict_editor_toggled(
bool arg1)
2044 ui->gb_dict_editor->setChecked(
true);
2047 void EditorWindow::on_gb_atom_viewer_toggled(
bool arg1)
2049 ui->gb_atom_viewer->setChecked(
true);
GaborAtom used in adaptive MP Algorithm.
Editorwindow class declaration which enables the generation of individual dictionaries. Gaussian atoms (with parameters scale, modulation and phase) or chirp atoms could be created and saved as part dictionaries. For using the atoms for decompostion it's necessary to build an entire dictionary from serveral (minimum one) part dictionaries.
The fixdictMP class provides functions several calculating functions to run the Matching Pursuit Algo...
void paint_signal(MatrixXd atom_matrix, QSize window_size)
QStringList create_string_values(qint32 sample_count, qreal scale, qint32 translation, qreal modulation, qreal phase)
ATOM class declaration, providing core features and parameters of Atoms used in Matching Pursiut Algo...
DeleteMessageBox class declaration, which asked for acknowledgment to delete dictionaries or formulas...
void paint_axis(MatrixXd atom_matrix, QSize window_size)