changepacket.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #include "changepacket.h"
  2. #include "ui_changepacket.h"
  3. #include <QLabel>
  4. #include <QLineEdit>
  5. #include <QComboBox>
  6. #include <QDebug>
  7. #include <QResizeEvent>
  8. #include <QIntValidator>
  9. #include <QMessageBox>
  10. int ChangePacket::lastId = 0;
  11. // Erstellt den Dialog
  12. // p: Das Polygon des Objektes, wessen ID zugewiesen werden soll
  13. // s: Die Sequenz, welche momentan annotiert wird
  14. // parent: Das Eltern QWidget von Qt
  15. ChangePacket::ChangePacket(ObjectPolygon p, Sequenz *s, QWidget *parent) :
  16. QDialog(parent),
  17. ui(new Ui::ChangePacket),
  18. seq( s ),
  19. object( p ),
  20. count( -1 )
  21. {
  22. ui->setupUi(this);
  23. setWindowTitle( "Paket zuweisen" );
  24. show();
  25. Frame *f = (Frame*)p->getParent();
  26. ui->packet->setPixmap( QPixmap::fromImage( f->getObjectImage( p ).scaled(ui->packet->size(),Qt::KeepAspectRatio) ) );
  27. ui->name->setText( p->getId() );
  28. QList< QString > objects = s->getObjectNames();
  29. if( objects.indexOf( "-1" ) < 0 )
  30. ui->packetList->addItem( "-1" );
  31. max = -1;
  32. for( auto p = objects.begin(); p != objects.end(); p++ )
  33. {
  34. ui->packetList->addItem( *p );
  35. if( p->toInt() > max )
  36. max = p->toInt();
  37. }
  38. ui->name->setValidator( new QIntValidator( -1, max + 1 ) );
  39. if( p->getId() == "-1" && lastId <= max + 1 && lastId >= 0 )
  40. ui->name->setText( QString::number( lastId ) );
  41. updatePreview();
  42. ui->name->clearFocus();
  43. }
  44. ChangePacket::~ChangePacket()
  45. {
  46. delete ui;
  47. }
  48. // verarbeitet Tastatur Events (wird automatisch vom Qt Framework
  49. // aufgerufen)
  50. void ChangePacket::keyReleaseEvent(QKeyEvent *e)
  51. {
  52. int current = ui->name->text().toInt();
  53. if( e->key() == Qt::Key_Down && current != -1 )
  54. current--;
  55. if( e->key() == Qt::Key_Up && current < max + 1 )
  56. current++;
  57. if( e->key() == Qt::Key_Down || e->key() == Qt::Key_Up )
  58. ui->name->setText( QString::number( current ) );
  59. updatePreview();
  60. }
  61. // verarbeitet Tastatur Events (wird automatisch vom Qt Framework
  62. // aufgerufen)
  63. void ChangePacket::mousePressEvent(QMouseEvent *e)
  64. {
  65. ui->name->clearFocus();
  66. }
  67. // Zeigt das neu ausgewählte Vergleichsobjekt an
  68. void ChangePacket::on_packetList_currentIndexChanged(const QString &packet)
  69. {
  70. ui->packetCompare->setPixmap( QPixmap() );
  71. if( packet != "-1" )
  72. {
  73. ui->name->setText( packet );
  74. ui->packetCompare->setPixmap( QPixmap::fromImage( seq->previousObjectImage( packet, count ).scaled(ui->packetCompare->size(),Qt::KeepAspectRatio) ) );
  75. }
  76. }
  77. // Zeigt das Vergleichsobjekt aus einem vorherigen Bild an
  78. void ChangePacket::on_previousePicture_clicked()
  79. {
  80. count--;
  81. if( count == 0 )
  82. count--;
  83. ui->packetCompare->setPixmap( QPixmap::fromImage( seq->previousObjectImage( ui->packetList->currentText(), count ).scaled(ui->packetCompare->size(),Qt::KeepAspectRatio) ) );
  84. }
  85. // Zeigt das Vergleichobjekt aus einem nachfolgenden Bild an
  86. void ChangePacket::on_nextPicture_clicked()
  87. {
  88. count++;
  89. if( count == 0 )
  90. count++;
  91. ui->packetCompare->setPixmap( QPixmap::fromImage( seq->previousObjectImage( ui->packetList->currentText(), count ).scaled(ui->packetCompare->size(),Qt::KeepAspectRatio) ) );
  92. }
  93. // Bricht das Zuweisen der Objekt-ID ab ohne sie zu speichern
  94. void ChangePacket::on_abbrechen_clicked()
  95. {
  96. this->close();
  97. }
  98. // Beendet das Zuweisen der Objekt-ID un speichert die neue ID
  99. void ChangePacket::on_speichern_clicked()
  100. {
  101. if( ui->name->text() == "-1" || ui->name->text() == "" )
  102. {
  103. QMessageBox::critical( this, "Fehler", "Ungültige Objekt Id." );
  104. return;
  105. }
  106. if( ui->name->text() != object->getId() )
  107. {
  108. bool needQ = ((Frame*)object->getParent())->hasObject( ui->name->text() );
  109. object->setId( ui->name->text() );
  110. lastId = ui->name->text().toInt();
  111. seq->addObjectName( ui->name->text() );
  112. if( needQ )
  113. {
  114. QMessageBox::StandardButton reply = QMessageBox::question(0, "Warnung", "Auf diesem Bild gibt es bereits ein Objekt mit der gleichen Id. Möchten sie beide Objekte vereinen?",
  115. QMessageBox::Yes|QMessageBox::No);
  116. if (reply == QMessageBox::Yes)
  117. ((Frame*)object->getParent())->connectObjects( ui->name->text() );
  118. }
  119. }
  120. this->close();
  121. }
  122. // Wählt automatisch das Vergleichsobjekt aus, welches die ID hat, welche im Textfeld eingegeben wurde
  123. void ChangePacket::updatePreview()
  124. {
  125. int index = ui->packetList->findText( ui->name->text() );
  126. if( index < 0 )
  127. index = 0;
  128. ui->packetList->setCurrentIndex( index );
  129. count = -1;
  130. }