void WareSrcWidgetCollection::onCloseWareTabRequested(int Index)
{
  if (WareSrcWidget* Ware = qobject_cast<WareSrcWidget*>(mp_TabWidget->widget(Index)))
  {
    int Choice = QMessageBox::Discard;

    if (Ware->isWareModified())
    {
      QMessageBox MsgBox;
      MsgBox.setText(tr("Documents have been modified."));
      MsgBox.setInformativeText(tr("Do you want to save changes?"));
      MsgBox.setStandardButtons(QMessageBox::SaveAll | QMessageBox::Discard | QMessageBox::Cancel);
      MsgBox.setDefaultButton(QMessageBox::SaveAll);
      Choice = MsgBox.exec();
    }

    switch (Choice)
    {
      case QMessageBox::SaveAll:
        Ware->saveAllFileTabs();
      case QMessageBox::Discard:
        Ware->closeAllFileTabs();
        closeWareTab(Ware);
        break;
      case QMessageBox::Cancel:
      default:
        break;
    }

  }
}
void WareSrcWidgetCollection::deleteWare(const QString& WarePath)
{
  if (QMessageBox::warning(QApplication::activeWindow(), tr("Delete ware"),
                           tr("Are you sure you want to delete \"%1\" and all its content?").arg(WarePath),
                           QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Cancel)
      == QMessageBox::Cancel)
    return;

  QMap<QString, WareSrcWidget*>::iterator it = m_WareSrcWidgetByPath.find(WarePath);
  if (it != m_WareSrcWidgetByPath.end())
    closeWareTab(it.value());

  if (!openfluid::tools::Filesystem::removeDirectory(WarePath.toStdString()))
    QMessageBox::critical(0, tr("Delete ware"), tr("Unable to remove the directory \"%1\"").arg(WarePath));
}
bool WareSrcWidgetCollection::closeAllWidgets()
{
  if (isProcessRunning())
  {
    QMessageBox::warning(nullptr,tr("Process running"),
                         tr("Closing tab is not allowed while a configure or build process is running."),
                         QMessageBox::Close,QMessageBox::Close);
    return false;
  }


  int Choice = QMessageBox::Discard;

  if (isModified())
  {
    QMessageBox MsgBox;
    MsgBox.setText(tr("Documents have been modified."));
    MsgBox.setInformativeText(tr("Do you want to save changes?"));
    MsgBox.setStandardButtons(QMessageBox::SaveAll | QMessageBox::Discard | QMessageBox::Cancel);
    MsgBox.setDefaultButton(QMessageBox::SaveAll);
    Choice = MsgBox.exec();
  }

  switch (Choice)
  {
    case QMessageBox::SaveAll:
      for(WareSrcWidget* Ware : m_WareSrcWidgetByPath.values())
        Ware->saveAllFileTabs();
      /* fall through */
    case QMessageBox::Discard:
      for(WareSrcWidget* Ware : m_WareSrcWidgetByPath.values())
      {
        Ware->closeAllFileTabs();
        closeWareTab(Ware);
      }
      return true;
      break;
    case QMessageBox::Cancel:
    default:
      return false;
      break;
  }
}
void WareSrcWidgetCollection::onCloseWareTabRequested(int Index)
{
  if (WareSrcWidget* Ware = qobject_cast<WareSrcWidget*>(mp_TabWidget->widget(Index)))
  {
    // check if a process is not running
    if (Ware->isWareProcessRunning())
    {
      QMessageBox::warning(Ware,tr("Process running"),
                           tr("Closing tab is not allowed while a configure or build process is running."),
                           QMessageBox::Close,QMessageBox::Close);
      return;
    }


    int Choice = QMessageBox::Discard;

    if (Ware->isWareModified())
    {
      Choice = QMessageBox::information(Ware,tr("Modified documents"),
                                        tr("Documents have been modified.\n\n"
                                           "Do you want to save changes?"),
                                        QMessageBox::SaveAll | QMessageBox::Discard | QMessageBox::Cancel,
                                        QMessageBox::SaveAll);
    }

    switch (Choice)
    {
      case QMessageBox::SaveAll:
        Ware->saveAllFileTabs();
        /* fall through */
      case QMessageBox::Discard:
        Ware->closeAllFileTabs();
        closeWareTab(Ware);
        break;
      case QMessageBox::Cancel:
        /* fall through */
      default:
        break;
    }
  }
}