#include "mainwindow.h"
#include <QApplication>
#include <QResource>
#include <QDebug>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <QMessageBox>

MainWindow *wnd;

// Absturtz Handler zum speichern der Annotationen
void segfault_sigaction(int signal, siginfo_t *si, void *arg)
{
    if( wnd->getSequenz() )
    {
        QMessageBox::StandardButton reply =
                QMessageBox::question(0, "Fehler", QString( "Es ist ein unerwarteter Fehler aufgetreten und das Programm muss "
                                                                                        "geschlossen werden (Zugriffsfehler auf Speicheradresse " ) +
                                      QString("0x%1").arg((quintptr)si->si_addr, QT_POINTER_SIZE * 2, 16, QChar('0')) + "). Möchten sie die Annotationen speichern?",
                                                                  QMessageBox::Yes|QMessageBox::No);
        if (reply == QMessageBox::Yes) {
            wnd->getSequenz()->saveToPath( 0 );
        }
    }
    exit(0);
}

void doStuff(int argc, char *argv[])
{
    QResource::registerResource("icons.rcc");
    QApplication a(argc, argv);
    MainWindow w( &a );
    wnd = &w;
    struct sigaction sa;
    memset(&sa, 0, sizeof(struct sigaction));
    sigemptyset(&sa.sa_mask);
    sa.sa_sigaction = segfault_sigaction;
    sa.sa_flags   = SA_SIGINFO;
    sigaction(SIGSEGV, &sa, 0);

    w.show();
    a.exec();
}

// Start des Programms
int main(int argc, char *argv[])
{
    numObjects = 0;
    doStuff(argc, argv);
    qDebug() << "Number of counted memory leaks: " << numObjects;
    return 0;
}
