123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- #include "changepacket.h"
- #include "ui_changepacket.h"
- #include <QLabel>
- #include <QLineEdit>
- #include <QComboBox>
- #include <QDebug>
- #include <QResizeEvent>
- #include <QIntValidator>
- #include <QMessageBox>
- 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;
- }
|