Example #1
0
void KCCodeEditor::onModificationChanged(bool changed)
{
    if(changed)
    {
        emit filenameChanged(editor->documentTitle()+"*");
    }
    else
    {
        emit filenameChanged(editor->documentTitle());
    }
}
Example #2
0
Application::Application(int &argc, char **argv) : QApplication(argc, argv)
{
    createSettings();
    m_undoStack = new QUndoStack(this);

    m_mainWindow = new MainWindow();
    m_prefsManager = new PrefsManager(m_mainWindow);
    m_fileManager = new FileManager(m_mainWindow);
    m_selectionTool = new SelectionTool(m_mainWindow->selectionModel(), m_mainWindow->model(), m_mainWindow->treeView());
    m_taskEditTool = new TaskEditorTool(m_mainWindow->treeView(), m_undoStack);

    m_uiManager = new UiManager(m_mainWindow->menuBar(),
                                m_mainWindow->statusBar(), m_mainWindow->toolBar(),
                                m_mainWindow, m_prefsManager, m_fileManager, m_undoStack);
    m_taskControlManager = new TaskControlManager(m_mainWindow->controlsArea(),
                                                  m_prefsManager);
    m_uiManager->setTaskControlManager(m_taskControlManager);
    m_uiManager->addTool(m_uiManager);
    m_uiManager->addTool(m_fileManager);
    m_uiManager->addTool(m_selectionTool);
    m_uiManager->addTool(m_taskEditTool);
    m_uiManager->addTool(m_prefsManager);
    m_uiManager->initManager();
    m_prefsManager->setUiManager(m_uiManager);
    m_mainWindow->setUiManager(m_uiManager);
    m_mainWindow->SetupEventFilter();

    connect(m_mainWindow, SIGNAL(onMainWindowMinimized()), m_uiManager, SLOT(onMainWindowMinimized()));
    connect(m_mainWindow, SIGNAL(onMainWindowRestored()), m_uiManager, SLOT(onMainWindowRestored()));
    connect(m_mainWindow, SIGNAL(onMainWindowClosing()), m_uiManager, SLOT(onMainWindowClosing()));
    connect(m_fileManager, SIGNAL(currentListChanged(ITaskList*)), m_uiManager, SLOT(onCurrentListChanged(ITaskList*)));
    connect(m_fileManager, SIGNAL(currentListChanged(ITaskList*)),
            m_taskControlManager, SLOT(onCurrentListChanged(ITaskList*)));
    connect(m_fileManager, SIGNAL(filenameChanged(QString)), m_uiManager, SLOT(filenameChanged(QString)));
    connect(m_mainWindow, SIGNAL(onModelsChanged(QItemSelectionModel*,QAbstractItemModel*)),
            m_selectionTool, SLOT(onModelsChanged(QItemSelectionModel*,QAbstractItemModel*)));
    connect(m_selectionTool, SIGNAL(selectionChanged(QItemSelectionModel*)),
            m_taskControlManager, SLOT(selectionChanged(QItemSelectionModel*)));
    connect(m_selectionTool, SIGNAL(selectionChanged(QItemSelectionModel*)),
            m_taskEditTool, SLOT(selectionChanged(QItemSelectionModel*)));
    connect(m_prefsManager, SIGNAL(onTopChanged(bool)),
            m_mainWindow, SLOT(onTopChanged(bool)));

    connect(m_selectionTool, SIGNAL(currentChanged(Task::Ptr)),
            m_uiManager, SLOT(currentChanged(Task::Ptr)));

    m_fileManager->startUp();
    m_mainWindow->show();
}
Example #3
0
/*
    Set the file name of the current file.
*/
void Directory::setFilename(const QString &str)
{
    if (str != currentFile.name()) {
        currentFile.setName(str);
        emit filenameChanged();
    }
}
Example #4
0
void BookModel::setFilename(QString newFilename)
{
    d->filename = newFilename;
    d->title = newFilename.split('/').last().left(newFilename.lastIndexOf('.'));
    emit filenameChanged();
    emit titleChanged();
}
Example #5
0
void RasterImageLayer::setFilename(QString arg)
{
    if (m_filename != arg) {
        m_filename = arg;
        emit filenameChanged(arg);
    }
}
Example #6
0
/** Constructor */
SoundPage::SoundPage(QWidget * parent, Qt::WFlags flags)
    : ConfigPage(parent, flags)
{
	/* Invoke the Qt Designer generated object setup routine */
	ui.setupUi(this);

	connect(ui.eventTreeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), this, SLOT(eventChanged(QTreeWidgetItem*, QTreeWidgetItem*)));
	connect(ui.filenameEdit, SIGNAL(textChanged(QString)), this, SLOT(filenameChanged(QString)));
	connect(ui.browseButton, SIGNAL(clicked()), this, SLOT(browseButtonClicked()));
	connect(ui.playButton, SIGNAL(clicked()), this, SLOT(playButtonClicked()));

	ui.eventTreeWidget->setColumnCount(COLUMN_COUNT);

	QTreeWidgetItem *headerItem = ui.eventTreeWidget->headerItem();
	headerItem->setText(COLUMN_NAME, tr("Event"));
	headerItem->setText(COLUMN_FILENAME, tr("Filename"));

	ui.eventTreeWidget->header()->setResizeMode(QHeaderView::Fixed);
	ui.eventTreeWidget->setTextElideMode(Qt::ElideMiddle);

	/* Hide platform specific features */
#ifdef Q_WS_WIN

#endif
}
Example #7
0
void MinoPropertyFilename::setFilename(const QString& filename)
 {
    if(_filename != filename)
    {
        _filename = filename;
        emit filenameChanged(filename);
    }
 }
Example #8
0
bool LS3DatastoreXML::dbNew(const QString &fileName) {
    LS3ElapsedAutoTimer timer("LS3DatastoreXML::dbNew");
    dbClose();
    data->newFile();
    dbSave(fileName);
    emit filenameChanged(fileName);
    return m_databaseLoaded=true;
}
Example #9
0
void FileSaveDialog::setFilename(QString filename)
{
    if (filename_ != filename)
    {
        filename_ = filename;
        emit filenameChanged();
    }
}
void IniFile::setFilename(QString filename)
{
    if (m_filename == filename)
        return;

    m_filename = filename;
    emit filenameChanged(filename);
    loadFile();
}
Example #11
0
void CSVLogger::log(QVariantList const& data){
    if(!isEnabled())
        return;

    if(toConsole){
        qDebug() << buildLogLine(data);
        return;
    }

    //File needs re-opening
    if(fileNeedsReopen){
        QDir dir(filename);
        if(dir.isAbsolute())
            qDebug() << "CSVLogger::log(): Opening " + filename + " to log.";
        else{
            filename =
                #if defined(Q_OS_WIN)
                    QStandardPaths::writableLocation(QStandardPaths::StandardLocation::AppDataLocation)
                #else
                    QStandardPaths::writableLocation(QStandardPaths::StandardLocation::DocumentsLocation)
                #endif
                + "/" + filename;
            qDebug() << "CSVLogger::log(): Absolute path not given, opening " + filename + " to log.";
            emit filenameChanged();
        }
        QDir::root().mkpath(QFileInfo(filename).absolutePath());

        file.setFileName(filename);
        if(!file.open(QIODevice::WriteOnly | QIODevice::Append)){
            qCritical() << "CSVLogger::log(): Could not open file: " << file.errorString();
            return;
        }
        else
            writer.setDevice(&file);

        fileNeedsReopen = false;
        writing = true;

        //Build and dump header if file is empty or newly created
        if(file.pos() == 0){
            writer << buildHeaderString() << "\n";
            writer.flush();
        }
    }

    //Actual data logging
    if(file.isOpen()){
        writer << buildLogLine(data) << "\n";
        writer.flush();
    }
    else
        qCritical() << "CSVLogger::log(): File is not open, valid filename must be provided beforehand.";
}
void ImageExporterOutputWidget::updateUiFileName()
{
    QString oldUiFilename{ m_ui->fileNameTextEdit->toPlainText() };
    int positionOfEnumNumIndex{ oldUiFilename.indexOf(m_supportedTags["enum_num"]) + m_supportedTags["enum_num"].length() };
    std::string startIndex{ extractEnumNumStartIndex(oldUiFilename.toStdString(), positionOfEnumNumIndex) };
    QString newUiFilename{ oldUiFilename.replace(positionOfEnumNumIndex, static_cast<int>(startIndex.length()), QString::number(atoi(startIndex.c_str()) + 1)) };

    bool oldSignalStatus = m_ui->fileNameTextEdit->blockSignals(true);
    m_ui->fileNameTextEdit->setPlainText(newUiFilename);
    emit filenameChanged();
    saveFilename();
    m_ui->fileNameTextEdit->blockSignals(oldSignalStatus);
}
Example #13
0
void CSVLogger::setFilename(const QString& filename){
    if(this->filename != filename){
        writer.flush();
        file.close();

        this->filename = filename;

        fileNeedsReopen = true;
        writing = false;

        emit filenameChanged();
    }
}
Example #14
0
void KCCodeEditor::fileInfoChanged(const QFile &file)
{
    QFileInfo _fileInfo(file);
    editor->setDocumentTitle(_fileInfo.fileName());
    emit filenameChanged(_fileInfo.fileName());

    languageMode->setFileSuffix(_fileInfo.suffix());

    filePath=file.fileName();
    fileError=QFileDevice::NoError;
    editor->document()->setModified(false);

    computeExecFileName();
    KCHistoryConfigure::getInstance()->setHistoryDir(_fileInfo.absolutePath());
}
Example #15
0
void LS3DatastoreXML::dbClose(bool saveOnClose) {    
    LS3ElapsedAutoTimer timer("LS3DatastoreXML::dbClose");
    QElapsedTimer time;
    time.restart();
    if (data!=NULL) {
        data->setDoEmitSignals(false);
        mapper->submit();
    }
    //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: mapper->submit()"; time.restart();
    emit disconnectWidgets();
    //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: emit disconnectWidgets()"; time.restart();
    emit databaseLoaded(false);
    //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: emit databaseLoaded(false)"; time.restart();
    emit databaseClosed(true);
    //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: emit databaseClosed(true)"; time.restart();
    if (!m_currentFile.isEmpty() && saveOnClose) dbSave(m_currentFile);
    //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: dbSave(m_currentFile)"; time.restart();

    resetFieldDefinitions();
    //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: resetFieldDefinitions()"; time.restart();
    clearSelection();
    //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: clearSelection()"; time.restart();
    getReferencTreeModel()->clear();
    //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: getReferencTreeModel()->clear()"; time.restart();
    keywordsdata->setStringList(QStringList());
    //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: keywordsdata->setStringList()"; time.restart();
    authorsdata->setStringList(QStringList());
    //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: authorsdata->setStringList(QStringList())"; time.restart();
    topicsdata->setStringList(QStringList());
    //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: topicsdata->setStringList(QStringList())"; time.restart();
    if (data!=NULL) {
        data->setDoEmitSignals(true);
    }
    data->newFile();
    //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: data->newFile()"; time.restart();

    m_currentFile="";
    m_databaseLoaded=true;
    emit filenameChanged(m_currentFile);
    //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: emit filenameChanged(m_currentFile)"; time.restart();
}
Example #16
0
MinaImage::MinaImage(QObject *parent) :
    MinoAnimation(parent),
    _imageIndex(0)
{
    // Color is not usable in this animation
    delete _color;
    _color = NULL;

    _imageWidget = new ImageWidget();
    _imageWidget->resize(_boundingRect.size());

    _itemGroup.addToGroup(_scene->addWidget(_imageWidget));

    _generatorCurve = new MinoPropertyEasingCurve(this, true);
    _generatorCurve->setObjectName("curve");
    _generatorCurve->setLabel("Curve");

    _imageFilename = new MinoPropertyFilename(this);
    connect(_imageFilename, SIGNAL(filenameChanged(QString)), SLOT(loadFromFile(QString)));
    _imageFilename->setFilename("spaceinvader.gif");
}
Example #17
0
void AudioPlayer::outputStateChanged(QAudio::State state)
{
    switch (state) {
    case QAudio::ActiveState:
    case QAudio::IdleState:
        m_state = Playing;
        break;
    case QAudio::SuspendedState:
        m_state = Paused;
        break;
    case QAudio::StoppedState:
        if (m_codec->isOpen()) {
            m_state = Stopped;

            m_filename.clear();
            emit filenameChanged();
        } else
            m_state = Done;
        break;
    }

    if (state != QAudio::IdleState)
        emit stateChanged();
}
RecordInterfaceWidget::RecordInterfaceWidget(QWidget* parent)
    : QWidget(parent)
{
    setWindowTitle("Record");

    QPushButton* save_button = new QPushButton(tr("Save As..."), this);
    connect(save_button, SIGNAL(clicked(bool)), this, SIGNAL(dialogOpened()));
    connect(save_button, SIGNAL(clicked(bool)), this, SLOT(selectFilename(bool)));

    QPushButton* record_button = new QPushButton(tr("Record"), this);
    record_button->setCheckable(true);
    connect(record_button, SIGNAL(toggled(bool)), this, SLOT(testToggled(bool)));

    line_edit_ = new QLineEdit(this);
    connect(this, SIGNAL(filenameChanged(QString)), line_edit_, SLOT(setText(QString)));

    QGridLayout* layout = new QGridLayout(this);
    layout->addWidget(save_button, 0, 0);
    layout->addWidget(line_edit_, 0, 1);
    layout->addWidget(record_button, 1, 0);
    layout->setColumnStretch(0, 0);
    layout->setColumnStretch(1, 1);
    setLayout(layout);
}
Example #19
0
void AudioPlayer::setFilename(const QString &filename)
{
    m_filename = filename;
    emit filenameChanged();
}
void ImageExporterOutputWidget::checkFilename()
{
    const QString emp("");
    QString filename(m_ui->fileNameTextEdit->toPlainText());
    QString errorMessage{ "" };

    for (auto it = m_supportedTags.begin(); it != m_supportedTags.end(); it++)
    {
        if (filename.contains(it->second) && it->first != "enum_num")
            filename.replace(filename.indexOf(it->second), it->second.length(), emp);
    }

    if (filename.indexOf(m_supportedTags["enum_num"]) != static_cast<int>(std::string::npos))
    {
        int position = filename.indexOf(m_supportedTags["enum_num"]);
        filename.replace(position, static_cast<int>(m_supportedTags["enum_num"].length()), "");

        std::set<QString> numbers{ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
        bool numberFound{ false }, endFound{ false };

        while (position < filename.length())
        {
            if (numbers.find(filename.at(position)) != numbers.end())
            {
                filename.replace(position, 1, "");
                numberFound = true;
            }
            else if (numberFound && filename.at(position) == '>')
            {
                filename.replace(position, 1, "");
                endFound = true;
                break;
            }
            else
                break;
        }

        if (!endFound)
            errorMessage = "includes an incomplete <enum#> tag";
    }

    if (errorMessage == "")
    {
        QRegExp rx("[A-Za-z0-9_\\-\\!\\§\\$\\%\\&\\(\\)\\=\\`\\´\\+\\'\\#\\-\\.\\,\\;\\_\\^\\°\\}\\{\\[\\]\\@\\x00C4\\x00E4\\x00D6\\x00F6\\x00DC\\x00FC\\x00DF\\s]{1,100}");

        if (!rx.exactMatch(filename))
            errorMessage = "includes invalid symbols";
    }

    if (errorMessage != "")
    {
        if (m_ui->saveButton->isEnabled())
            m_ui->saveButton->setDisabled(true);

        m_ui->fileNameTextEdit->setStyleSheet("background-color:rgb(255,170,127);");
        m_ui->filenamePeviewLabel->setText( filename + ".png " + errorMessage);
    }
    else
    {
        if (!m_ui->saveButton->isEnabled())
            m_ui->saveButton->setDisabled(false);

        m_ui->fileNameTextEdit->setStyleSheet(emp);

        emit filenameChanged();
    }
}
Example #21
0
bool LS3DatastoreXML::dbLoad(const QString &fileName, QProgressBar* progress) {
    LS3ElapsedAutoTimer timer("LS3DatastoreXML::dbLoad");
    // if a database is opened: close it!
    dbClose();

    QDomDocument doc("mydocument");
    QFile file(fileName);
    QString errorMessage;
    int errorLine;
    int errorColumn;

    if (!file.open(QIODevice::ReadOnly)) {
        emit dbError(tr("Error opening databse '%1': File could not be opened.").arg(fileName));
        return m_databaseLoaded=false;
    }
    if (!doc.setContent(&file, &errorMessage, &errorLine, &errorColumn)) {
        file.close();
        //file.close();
        emit dbError(tr("Error parsing databse '%1': %2 (line %3, column %4).").arg(fileName).arg(errorMessage).arg(errorLine).arg(errorColumn));
        return m_databaseLoaded=false;
    }
    file.close();

    QDomElement docElem = doc.documentElement();
    if (docElem.tagName()!="litsoz3database") {
        emit dbError(tr("Error in databse '%1': This is not a LitSoz 3 databse file (root element is <%2>, but should be <litsoz3database>.").arg(fileName).arg(docElem.tagName()));
        return m_databaseLoaded=false;
    }

    QDomElement n = docElem.firstChildElement("records");
    data->loadFromXML(n, progress);

    timer.showMessage("XML loaded");

    //if (keywordsdata) delete keywordsdata
    //keywordsdata = new QStringListModel(this);


    // create a stringlist model for the keywords and read its contents from the keywords field in the metadata table
    // the (possibly changed) model will be written back in the closeDB() method
    QDomElement metadata = docElem.firstChildElement("metadata");
    if (!metadata.isNull()) {
        n = metadata.firstChildElement("item");
        while(!n.isNull()) {
            QString type=n.attribute("type").toLower();
            if (type=="keywords") {
                QString sdata=n.text().replace("\r\n", "\n");
                sdata=sdata.replace("\n\r", "\n");
                sdata=sdata.replace("\n\n", "\n");
                sdata=sdata.replace("\n\n", "\n");
                sdata=sdata.replace("\r\r", "");
                QStringList sl=sdata.split("\n", QString::SkipEmptyParts);
                sl.removeDuplicates();
                sl.sort();
                keywordsdata->setStringList(sl);
            }
            if (type=="topics") {
                QString sdata=n.text().replace("\r\n", "\n");
                sdata=sdata.replace("\n\r", "\n");
                sdata=sdata.replace("\n\n", "\n");
                sdata=sdata.replace("\n\n", "\n");
                sdata=sdata.replace("\r\r", "");
                QStringList sl=sdata.split("\n", QString::SkipEmptyParts);
                sl.removeDuplicates();
                sl.sort();
                topicsdata->setStringList(sl);
            }
            n=n.nextSiblingElement("item");
        }
    }

    timer.showMessage("METADATA read");


    // read the list of selected records
    QDomElement selectedNode = docElem.firstChildElement("selection_list");
    clearSelection();
    if (!selectedNode.isNull()) {
        n = selectedNode.firstChildElement("item");
        while(!n.isNull()) {
            QString uuid=n.attribute("uuid");
            select(uuid);
            n=n.nextSiblingElement("item");
        }
    }
    timer.showMessage("SELECTION read");


    // read the reference tree

    QDomElement reftreeNode = docElem.firstChildElement("litsoz3_reference_tree");
    getReferencTreeModel()->readFromXML(reftreeNode);
    timer.showMessage("REFTREE read");

    // read the authorsdata completer list from a file in config dir
    //if (authorsdata) delete authorsdata;
    //authorsdata = new QStringListModel(this);
    QFile f(settings->GetConfigDirectory()+"/completers/authors.lst");
    if (f.open(QIODevice::ReadOnly|QIODevice::Text)) {
        //std::cout<<"OK\n";
        QString s=QString::fromUtf8(f.readAll());
        authorsdata->setStringList(s.split('\n', QString::SkipEmptyParts));
    }

    updateCompleters(0, recordCount()-1, false);
    timer.showMessage("AUTHORS_COMPLETER read");

    m_currentFile=fileName;
    emit filenameChanged(m_currentFile);
    emit connectWidgets();
    timer.showMessage("CONNECTED_WIDGETS");
    dbFirst();
    timer.showMessage("MOVED FIRST");

    emit databaseLoaded(true);
    emit databaseClosed(false);
    emit massiveSelectionChange();
    timer.showMessage("EMITED SIGNALS");
    return m_databaseLoaded=true;
}
Example #22
0
bool LS3DatastoreXML::dbSave(const QString &fileName, QProgressBar* progress) {
    LS3ElapsedAutoTimer timer("LS3DatastoreXML::dbSave");
    QFile file(fileName);
    if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
        emit dbError(tr("Error when writing database '%1': Could not open file!").arg(fileName));
        return false;
    }

    QXmlStreamWriter writer(&file);
    writer.writeStartDocument();
    writer.writeStartElement("litsoz3database");

    writer.writeStartElement("metadata");
    writer.writeStartElement("item");
    writer.writeAttribute("type", "keywords");
    writer.writeCDATA(keywordsdata->stringList().join("\n"));
    writer.writeEndElement();
    writer.writeStartElement("item");
    writer.writeAttribute("type", "topics");
    writer.writeCDATA(topicsdata->stringList().join("\n"));
    writer.writeEndElement();
    writer.writeEndElement();

    writer.writeStartElement("records");
    data->saveToXML(&writer, progress);
    writer.writeEndElement();

    // write the list of selected records
    writer.writeStartElement("selection_list");
    for (int i=0; i<selectionCount(); i++) {
        writer.writeStartElement("item");
        writer.writeAttribute("uuid", getSelectedUUID(i));
        writer.writeEndElement();
    }
    writer.writeEndElement();

    writer.writeStartElement("litsoz3_reference_tree");
    getReferencTreeModel()->writeToXML(writer);
    writer.writeEndElement();

    writer.writeEndElement();
    writer.writeEndDocument();

    file.close();

    QFile f(settings->GetConfigDirectory()+"/completers/authors.lst");
    if (f.open(QIODevice::WriteOnly|QIODevice::Text)) {
        //std::cout<<"OK\n";
        QStringList sl=authorsdata->stringList();
        QFile f1(f.fileName());
        if (f1.open(QIODevice::ReadOnly|QIODevice::Text)) {
            //std::cout<<"OK\n";
            QString s=QString::fromUtf8(f1.readAll());
            sl.append(s.split('\n', QString::SkipEmptyParts));
        } //else std::cout<<"ERROR\n";
        sl.removeDuplicates();
        sl.sort();
        for (int i=0; i<sl.size(); i++) {
            f.write(QString(sl[i]+"\n").toUtf8());
            //std::cout<<"   writing "<<itemText(i).toStdString()<<std::endl;
        }
    }

    if (m_currentFile!=fileName) emit filenameChanged(fileName);
    m_currentFile=fileName;

    return true;
}
void RecordInterfaceWidget::selectFilename(bool)
{
    QString q_filename = QFileDialog::getSaveFileName(this, tr("Save As..."), line_edit_->text());
    emit dialogClosed();
    emit filenameChanged(q_filename);
}
Example #24
0
void KCCodeEditor::setDocumentTitle(const QString &title)
{
    editor->setDocumentTitle(title);
    emit filenameChanged(title);
}
Example #25
0
void QFEFCSSimScriptTab::setFilename(const QString &filename)
{
    this->filename=filename;
    ui->labFile->setText(filename);
    emit filenameChanged(QFileInfo(filename).absoluteFilePath());
}