Your warranties manager
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

94 lines
2.9 KiB

  1. #include "scannerdialog.h"
  2. #include "ui_scannerdialog.h"
  3. #include <QDir>
  4. #include <QDesktopServices>
  5. #include <QUrl>
  6. #include <QProcess>
  7. #include <QMessageBox>
  8. #include <iostream>
  9. ScannerDialog::ScannerDialog(QWidget *parent) :
  10. QDialog(parent),
  11. ui(new Ui::ScannerDialog)
  12. {
  13. ui->setupUi(this);
  14. ui->progressBar->hide();
  15. }
  16. ScannerDialog::~ScannerDialog()
  17. {
  18. delete ui;
  19. }
  20. void ScannerDialog::on_btnTest_clicked()
  21. {
  22. #ifdef Q_OS_LINUX
  23. ui->btnTest->setEnabled(false);
  24. ui->btnScan->setEnabled(false);
  25. ui->btnAnnuler->setEnabled(false);
  26. QProcess* process = new QProcess();
  27. process->setStandardOutputFile(QDir::tempPath() + "/test.pnm");
  28. process->start("scanimage");
  29. ui->progressBar->show();
  30. connect(process, SIGNAL(finished(int)), SLOT(scanTestFinished(int)));
  31. #endif
  32. }
  33. void ScannerDialog::scanTestFinished(int r)
  34. {
  35. ui->progressBar->hide();
  36. ui->btnTest->setEnabled(true);
  37. ui->btnScan->setEnabled(true);
  38. ui->btnAnnuler->setEnabled(true);
  39. std::string s = "convert " + QDir::tempPath().toStdString() + "/test.pnm " + QDir::tempPath().toStdString() + "/test.pdf";
  40. if(r == 0)
  41. {
  42. int c = system(s.c_str());
  43. if(c == 0)
  44. QDesktopServices::openUrl(QUrl("file://"+QDir::tempPath()+"/test.pdf"));
  45. else
  46. QMessageBox::critical(this, "Erreur", "Votre document a pu être numérisé, mais un problème est survenu lors de son traitement.\nErreur "+QString::number(c));
  47. }
  48. else
  49. QMessageBox::critical(this, "Erreur", "Impossible de communiquer avec votre scanner. Vérifiez qu'il est bien relié à l'ordinateur' et qu'il est sous tension, puis réessayez.\nSi le problème persiste, il est probable que votre scanner ne soit pas pris en charge.");
  50. }
  51. void ScannerDialog::on_btnScan_clicked()
  52. {
  53. #ifdef Q_OS_LINUX
  54. ui->btnTest->setEnabled(false);
  55. ui->btnScan->setEnabled(false);
  56. ui->btnAnnuler->setEnabled(false);
  57. QProcess* process = new QProcess();
  58. process->setStandardOutputFile(QDir::tempPath() + "/output.pnm");
  59. process->start("scanimage --resolution 200");
  60. ui->progressBar->show();
  61. connect(process, SIGNAL(finished(int)), SLOT(scanFinished(int)));
  62. #endif
  63. }
  64. void ScannerDialog::scanFinished(int r)
  65. {
  66. ui->progressBar->hide();
  67. std::string s = "convert " + QDir::tempPath().toStdString() + "/output.pnm " + QDir::tempPath().toStdString() + "/output.pdf";
  68. if(r == 0)
  69. {
  70. int c = system(s.c_str());
  71. if(c != 0)
  72. QMessageBox::critical(this, "Erreur", "Votre document a pu être numérisé, mais un problème est survenu lors de son traitement.\nErreur "+QString::number(c));
  73. else
  74. this->accept();
  75. }
  76. else
  77. QMessageBox::critical(this, "Erreur", "Impossible de communiquer avec votre scanner. Vérifiez qu'il est bien relié à l'ordinateur' et qu'il est sous tension, puis réessayez.\nSi le problème persiste, il est probable que votre scanner ne soit pas pris en charge.");
  78. }