classoptions.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #include "classoptions.h"
  2. #include "ui_classoptions.h"
  3. #include <QListWidget>
  4. #include <QPushButton>
  5. #include <QDebug>
  6. #include <QMessageBox>
  7. // erstellt den DIalog
  8. // seq: Die Sequenz, welche momentan annotiert wird
  9. // parent: Das Eltern QWidget von Qt
  10. ClassOptions::ClassOptions( Sequenz *seq, QWidget *parent) :
  11. QDialog(parent),
  12. ui(new Ui::ClassOptions),
  13. seq( seq )
  14. {
  15. ui->setupUi(this);
  16. setWindowTitle( "Klassen bearbeiten" );
  17. QList< Sequenz::SegmentationClass > classes = seq->getClasses();
  18. for( auto c = classes.begin(); c != classes.end(); c++ )
  19. {
  20. QListWidgetItem *item = new QListWidgetItem( c->name );
  21. item->setFlags(item->flags() | Qt::ItemIsEditable);
  22. items.append( { c->id, item } );
  23. ui->classList->addItem(item);
  24. }
  25. }
  26. ClassOptions::~ClassOptions()
  27. {
  28. delete ui;
  29. }
  30. // Erstellt eine neue Klasse von Objekten
  31. void ClassOptions::on_newClass_clicked()
  32. {
  33. QListWidgetItem *item = new QListWidgetItem("New Class");
  34. item->setFlags(item->flags() | Qt::ItemIsEditable);
  35. int id = seq->addClass(item->text());
  36. if( id == -1 )
  37. {
  38. delete item;
  39. QMessageBox messageBox;
  40. messageBox.critical(0,"Error","Es existiert bereits eine andere Klasse mit dem Namen '" + item->text() + "'.");
  41. messageBox.show();
  42. return;
  43. }
  44. items.append( { id, item } );
  45. ui->classList->addItem(item);
  46. }
  47. // Löscht eine Klasse von Objekten
  48. void ClassOptions::on_removeClass_clicked()
  49. {
  50. QList<QListWidgetItem*> items = ui->classList->selectedItems();
  51. foreach(QListWidgetItem *item, items){
  52. if( seq->removeClass( getItemId( item ) ) )
  53. ui->classList->removeItemWidget(item);
  54. else
  55. {
  56. QMessageBox messageBox;
  57. messageBox.critical(0,"Error","Die Klasse '" + item->text() + " konnte nicht gelöscht werden.");
  58. messageBox.show();
  59. }
  60. }
  61. }
  62. // Erlaubt das Klicken auf Löschen
  63. void ClassOptions::on_classList_itemSelectionChanged()
  64. {
  65. ui->removeClass->setEnabled( ui->classList->selectedItems().size() > 0 );
  66. }
  67. // Benennt die ausgewählte Klasse um
  68. void ClassOptions::on_classList_itemChanged(QListWidgetItem *item)
  69. {
  70. if( !seq->setClassName( getItemId( item ), item->text() ) )
  71. {
  72. QMessageBox messageBox;
  73. messageBox.critical(0,"Error","Es existiert bereits eine andere Klasse mit dem Namen '" + item->text() + "'.");
  74. messageBox.show();
  75. item->setText( seq->getClassName( getItemId( item ) ) );
  76. }
  77. }
  78. // Beendet das Verwalten der Klassen
  79. void ClassOptions::on_fertig_clicked()
  80. {
  81. this->close();
  82. }
  83. // Gibt den Index einer Klasse aus der Liste zurück
  84. int ClassOptions::getItemId( QListWidgetItem *item )
  85. {
  86. for( auto i = items.begin(); i != items.end(); i++ )
  87. {
  88. if( i->item == item )
  89. return i->id;
  90. }
  91. return -1;
  92. }