#include "changepacket.h" #include "ui_changepacket.h" #include #include #include #include #include #include #include int ChangePacket::lastId = 0; // Erstellt den Dialog // p: Das Polygon des Objektes, wessen ID zugewiesen werden soll // s: Die Sequenz, welche momentan annotiert wird // parent: Das Eltern QWidget von Qt ChangePacket::ChangePacket(ObjectPolygon p, Sequenz *s, QWidget *parent) : QDialog(parent), ui(new Ui::ChangePacket), seq( s ), object( p ), count( -1 ) { ui->setupUi(this); setWindowTitle( "Paket zuweisen" ); show(); Frame *f = (Frame*)p->getParent(); ui->packet->setPixmap( QPixmap::fromImage( f->getObjectImage( p ).scaled(ui->packet->size(),Qt::KeepAspectRatio) ) ); ui->name->setText( p->getId() ); QList< QString > objects = s->getObjectNames(); if( objects.indexOf( "-1" ) < 0 ) ui->packetList->addItem( "-1" ); max = -1; for( auto p = objects.begin(); p != objects.end(); p++ ) { ui->packetList->addItem( *p ); if( p->toInt() > max ) max = p->toInt(); } ui->name->setValidator( new QIntValidator( -1, max + 1 ) ); if( p->getId() == "-1" && lastId <= max + 1 && lastId >= 0 ) ui->name->setText( QString::number( lastId ) ); updatePreview(); ui->name->clearFocus(); } ChangePacket::~ChangePacket() { delete ui; } // verarbeitet Tastatur Events (wird automatisch vom Qt Framework // aufgerufen) void ChangePacket::keyReleaseEvent(QKeyEvent *e) { int current = ui->name->text().toInt(); if( e->key() == Qt::Key_Down && current != -1 ) current--; if( e->key() == Qt::Key_Up && current < max + 1 ) current++; if( e->key() == Qt::Key_Down || e->key() == Qt::Key_Up ) ui->name->setText( QString::number( current ) ); updatePreview(); } // verarbeitet Tastatur Events (wird automatisch vom Qt Framework // aufgerufen) void ChangePacket::mousePressEvent(QMouseEvent *e) { ui->name->clearFocus(); } // Zeigt das neu ausgewählte Vergleichsobjekt an void ChangePacket::on_packetList_currentIndexChanged(const QString &packet) { ui->packetCompare->setPixmap( QPixmap() ); if( packet != "-1" ) { ui->name->setText( packet ); ui->packetCompare->setPixmap( QPixmap::fromImage( seq->previousObjectImage( packet, count ).scaled(ui->packetCompare->size(),Qt::KeepAspectRatio) ) ); } } // Zeigt das Vergleichsobjekt aus einem vorherigen Bild an void ChangePacket::on_previousePicture_clicked() { count--; if( count == 0 ) count--; ui->packetCompare->setPixmap( QPixmap::fromImage( seq->previousObjectImage( ui->packetList->currentText(), count ).scaled(ui->packetCompare->size(),Qt::KeepAspectRatio) ) ); } // Zeigt das Vergleichobjekt aus einem nachfolgenden Bild an void ChangePacket::on_nextPicture_clicked() { count++; if( count == 0 ) count++; ui->packetCompare->setPixmap( QPixmap::fromImage( seq->previousObjectImage( ui->packetList->currentText(), count ).scaled(ui->packetCompare->size(),Qt::KeepAspectRatio) ) ); } // Bricht das Zuweisen der Objekt-ID ab ohne sie zu speichern void ChangePacket::on_abbrechen_clicked() { this->close(); } // Beendet das Zuweisen der Objekt-ID un speichert die neue ID void ChangePacket::on_speichern_clicked() { if( ui->name->text() == "-1" || ui->name->text() == "" ) { QMessageBox::critical( this, "Fehler", "Ungültige Objekt Id." ); return; } if( ui->name->text() != object->getId() ) { bool needQ = ((Frame*)object->getParent())->hasObject( ui->name->text() ); object->setId( ui->name->text() ); lastId = ui->name->text().toInt(); seq->addObjectName( ui->name->text() ); if( needQ ) { 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?", QMessageBox::Yes|QMessageBox::No); if (reply == QMessageBox::Yes) ((Frame*)object->getParent())->connectObjects( ui->name->text() ); } } this->close(); } // Wählt automatisch das Vergleichsobjekt aus, welches die ID hat, welche im Textfeld eingegeben wurde void ChangePacket::updatePreview() { int index = ui->packetList->findText( ui->name->text() ); if( index < 0 ) index = 0; ui->packetList->setCurrentIndex( index ); count = -1; }