/vp_plugins/print_monitor/mainwindow.cpp

http://cupsfilter.googlecode.com/ · C++ · 536 lines · 424 code · 75 blank · 37 comment · 33 complexity · 1ccfe9c381fad8ff3501aaf9a55bfa1a MD5 · raw file

  1. #include <QtCore/QVariant>
  2. #include <QtCore/QDebug>
  3. #include <QtCore/QFile>
  4. #include <QtCore/QSettings>
  5. #include <QtGui/QAction>
  6. #include <QtGui/QApplication>
  7. #include <QtGui/QComboBox>
  8. #include <QtGui/QFrame>
  9. #include <QtGui/QHBoxLayout>
  10. #include <QtGui/QLabel>
  11. #include <QtGui/QPushButton>
  12. #include <QtGui/QSpacerItem>
  13. #include <QtGui/QVBoxLayout>
  14. #include <QtGui/QWidget>
  15. #include <QtGui/QAction>
  16. #include <QtGui/QStackedWidget>
  17. #include <QtGui/QErrorMessage>
  18. #include <QTableView>
  19. #include "mainwindow.h"
  20. #include "mytypes.h"
  21. #include "engine.h"
  22. #include "getusernamemandatdlg.h"
  23. using namespace VPrn;
  24. MainWindow::MainWindow(QWidget *parent)
  25. : QWidget(parent)
  26. , pageId(0)
  27. {
  28. //??????? ?????? ??????
  29. desktop_avail = desktop.availableGeometry(desktop.primaryScreen());
  30. this->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::MinimumExpanding);
  31. //this->setMinimumSize(320,240);
  32. this->setMaximumSize(desktop_avail.width()-5,desktop_avail.height()-5);
  33. this->move( calcDeskTopCenter(this->width(),this->height() ));
  34. mainLayout = new QVBoxLayout(this);
  35. //------------------------------- ??????????? ????? -------------------------------
  36. stackedWidget = new QStackedWidget();
  37. introPage = new IntroPage();
  38. selectPage = new SelectPage();
  39. printDataPage = new PrintDataPage();
  40. checkDataPage = new CheckDataPage();
  41. preViewPage = new PreViewPage();
  42. finishPage = new FinishPage();
  43. stackedWidget->addWidget(introPage);
  44. stackedWidget->addWidget(selectPage);
  45. stackedWidget->addWidget(printDataPage);
  46. stackedWidget->addWidget(checkDataPage);
  47. stackedWidget->addWidget(preViewPage);
  48. stackedWidget->addWidget(finishPage);
  49. //????????? ???? ????????
  50. printDataPage->setMaximumSize(desktop_avail.width()-5,desktop_avail.height()-5);
  51. line = new QFrame(this);
  52. line->setObjectName(QString::fromUtf8("line"));
  53. line->setFrameShape(QFrame::HLine);
  54. line->setFrameShadow(QFrame::Sunken);
  55. //------------------------------- ?????? ???? - ?????? -------------------------------
  56. horizontalLayout = new QHBoxLayout();
  57. horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
  58. horizontalSpacer_2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
  59. helpButton = new QPushButton(this);
  60. prevButton = new QPushButton(this);
  61. nextButton = new QPushButton(this);
  62. restartButton = new QPushButton(this);
  63. exitButton = new QPushButton(this);
  64. helpButton->setText(QObject::trUtf8("???????"));
  65. prevButton->setText(QObject::trUtf8("< ?????"));
  66. nextButton->setText(QObject::trUtf8("?????? >"));
  67. restartButton->setText(QObject::trUtf8("? ??????"));
  68. exitButton->setText(QObject::trUtf8("?????"));
  69. horizontalLayout->addWidget(helpButton);
  70. horizontalLayout->addItem(horizontalSpacer);
  71. horizontalLayout->addWidget(prevButton);
  72. horizontalLayout->addWidget(nextButton);
  73. horizontalLayout->addWidget(restartButton);
  74. horizontalLayout->addItem(horizontalSpacer_2);
  75. horizontalLayout->addWidget(exitButton);
  76. //-------------------------------------- ?????????? ----------------------------------------------------
  77. mainLayout->addWidget(stackedWidget);
  78. mainLayout->addWidget(line);
  79. mainLayout->addLayout(horizontalLayout);
  80. if (stackedWidget->currentIndex () != -1 ){
  81. this->setWindowTitle(stackedWidget->currentWidget()->windowTitle() );
  82. }else{
  83. this->setWindowTitle( QObject::trUtf8("?????? ???????? ???? ???????") );
  84. }
  85. }
  86. void MainWindow::init(const QString &app_dir,const QString &input_file)
  87. {
  88. this->readConfig(app_dir);
  89. //???????? ??????????? ??????
  90. myEMsgBox = new QErrorMessage(this);
  91. //????????? ????????? ??????
  92. data_module = new DataModule(this);
  93. //?????? ????
  94. engine = new Engine(this,link_name,gatekeeper_bin);
  95. createConnection();
  96. if ( data_module->setWorkFile(input_file)){
  97. introPage->setInputFile();
  98. }
  99. engine->setDocCardModel ( data_module->getDocCardModel() );
  100. engine->setPrintersModel ( data_module->getPrintersModel() );
  101. engine->setStampsModel ( data_module->getStampsModel() );
  102. engine->setTemplatesModel ( data_module->getTemplatesModel() );
  103. engine->setMandatsModel ( data_module->getMandatsModel() );
  104. engine->launchAndConnect();
  105. selectPage->setPrintersModel ( data_module->getPrintersModel() );
  106. printDataPage->setSecListModel ( data_module->getStampsModel() );
  107. printDataPage->setCardDocModel ( data_module->getDocCardModel() );
  108. printDataPage->setTemplatesModel ( data_module->getTemplatesModel() );
  109. }
  110. void MainWindow::appendStartMsg(const QString &txt_msg)
  111. {
  112. myEMsgBox->showMessage(txt_msg);
  113. }
  114. MainWindow::~MainWindow()
  115. {
  116. }
  117. //------------------------------------PRIVATE SLOTS ------------------------------------
  118. void MainWindow::do_next()
  119. {
  120. switch (pageId +1){
  121. case VPrn::Page_Intro:
  122. case VPrn::Page_Select:
  123. break;
  124. case VPrn::Page_PrintData:
  125. //???????? ????
  126. this->resize(800,600);
  127. break;
  128. case VPrn::Page_CheckData:
  129. //???????? ????
  130. this->resize(320,240);
  131. break;
  132. case VPrn::Page_Preview:
  133. this->resize(800,600);
  134. break;
  135. case VPrn::Page_Finish:
  136. break;
  137. case VPrn::Page_SetBrak:
  138. break;
  139. }
  140. if (lastCheck(pageId)){
  141. pageId++;
  142. if ( ( pageId > VPrn::Page_Finish ) || ( pageId > stackedWidget->count()-1 ) ){
  143. pageId = VPrn::Page_Finish;
  144. }
  145. if (pageId == VPrn::Page_Preview){
  146. // ???????? ??????
  147. nextButton->setText(QObject::trUtf8("??????"));
  148. }
  149. stackedWidget->setCurrentIndex(pageId);
  150. this->setWindowTitle(stackedWidget->currentWidget()->windowTitle() );
  151. }
  152. }
  153. void MainWindow::do_prev()
  154. {
  155. switch (pageId - 1){
  156. case VPrn::Page_Intro:
  157. case VPrn::Page_Select:
  158. //???????? ????
  159. this->resize(320,240);
  160. break;
  161. case VPrn::Page_PrintData:
  162. //???????? ????
  163. this->resize(800,600);
  164. break;
  165. case VPrn::Page_CheckData:
  166. //???????? ????
  167. this->resize(320,240);
  168. nextButton->setText(QObject::trUtf8("?????? >"));
  169. break;
  170. case VPrn::Page_Preview:
  171. //???????? ????
  172. this->resize(800,600);
  173. break;
  174. case VPrn::Page_Finish:
  175. break;
  176. case VPrn::Page_SetBrak:
  177. break;
  178. }
  179. pageId--;
  180. if (pageId < VPrn::Page_Intro) {
  181. pageId = VPrn::Page_Intro;
  182. }
  183. stackedWidget->setCurrentIndex(pageId);
  184. this->setWindowTitle(stackedWidget->currentWidget()->windowTitle() );
  185. }
  186. void MainWindow::do_restart()
  187. {
  188. pageId =0;
  189. stackedWidget->setCurrentIndex(pageId);
  190. this->setWindowTitle(stackedWidget->currentWidget()->windowTitle() );
  191. this->resize(320,240);
  192. selectPage->needRestart();
  193. printDataPage->needRestart();
  194. checkDataPage->needRestart();
  195. preViewPage->needRestart();
  196. engine->needRestart();
  197. nextButton->setText(QObject::trUtf8("?????? >"));
  198. }
  199. void MainWindow::do_needAuthUser(const QString &login_mandat_list)
  200. {
  201. QRegExp rx("\\[(.+)\\];:;(.+)");
  202. //rx.setMinimal(true);
  203. if(rx.indexIn(login_mandat_list) != -1){
  204. QString m_login = rx.cap(1);
  205. QString m_list = rx.cap(2);
  206. // ?????? ?????? ???????????
  207. getUserNameMandatDlg *UMDlg = new getUserNameMandatDlg(this);
  208. UMDlg->move(this->calcDeskTopCenter(UMDlg->width(),UMDlg->height()));
  209. UMDlg->setUserName(m_login);
  210. UMDlg->setMandatList(QStringList() << m_list.split(";:;"));
  211. connect(UMDlg,SIGNAL(setAuthData(const QString &,const QString &)),
  212. engine, SLOT(setAuthData(const QString &,const QString &))
  213. );
  214. UMDlg->exec();
  215. }else{
  216. myEMsgBox->showMessage(QObject::trUtf8("?????? ??????? ????????? ???????."));
  217. }
  218. }
  219. void MainWindow::sendFileToConvertor()
  220. {
  221. engine->prepareFileToPrint(data_module->getWorkFile());
  222. }
  223. void MainWindow::errorInfo(VPrn::AppErrorType eCode,QString e_msg)
  224. {
  225. QString extMsg = QString("eCode %1. AppsError:%2\n%3")
  226. .arg(eCode,0,10)
  227. .arg(e_msg)
  228. .arg(QString(Q_FUNC_INFO));
  229. myEMsgBox->showMessage(extMsg);
  230. qDebug() << extMsg;
  231. }
  232. void MainWindow::do_UserNeedFlipPages()
  233. {
  234. QMessageBox msgBox;
  235. msgBox.setText(QObject::trUtf8("????????? ?????? ??????? ???????? ?????????."));
  236. msgBox.setInformativeText(QObject::trUtf8("??? ??????????? ?????? ??????????? ????? ? ??????? ?????? ?????? ??? ??????"));
  237. msgBox.setDetailedText(QObject::trUtf8("???????? ? ?????? ?????? ?????? ?????????, ??????? ????????? ????????? ????? ???????, ??? ????"));
  238. QPushButton *printButton = msgBox.addButton(QObject::trUtf8("??????"), QMessageBox::ActionRole);
  239. QPushButton *abortButton = msgBox.addButton(QObject::trUtf8("??????"), QMessageBox::RejectRole);
  240. msgBox.exec();
  241. if (msgBox.clickedButton() == printButton) {
  242. // connect
  243. engine->do_printCurrentDoc();
  244. } else if (msgBox.clickedButton() == abortButton) {
  245. // abort
  246. engine->markCurrentDocBrack();
  247. }
  248. }
  249. void MainWindow::do_UserNeedCheckLastPage()
  250. {
  251. QMessageBox msgBox;
  252. msgBox.setText(QObject::trUtf8("????????? ?????? ???????? ??????? ?????????."));
  253. msgBox.setInformativeText(QObject::trUtf8("??? ??????????? ?????? ?????????? ????????? ???? ????????? ? ??????? ?????? ?????? ??? ??????"));
  254. msgBox.setDetailedText(QObject::trUtf8("???????? ? ?????? ?????? ?????? ?????????, ??????? ????????? ????????? ????? ???????, ??? ????"));
  255. QPushButton *printButton = msgBox.addButton(QObject::trUtf8("??????"), QMessageBox::ActionRole);
  256. QPushButton *abortButton = msgBox.addButton(QObject::trUtf8("??????"), QMessageBox::RejectRole);
  257. msgBox.exec();
  258. if (msgBox.clickedButton() == printButton) {
  259. // connect
  260. engine->do_printCurrentDoc();
  261. } else if (msgBox.clickedButton() == abortButton) {
  262. // abort
  263. engine->markCurrentDocBrack();
  264. }
  265. }
  266. void MainWindow::do_UserNeedMarkCopies(const QString &detail_data)
  267. {
  268. // ???????? ? ????? ?????
  269. qDebug() << "detail_data " << detail_data;
  270. if (!detail_data.isEmpty() && detail_data.contains(";:;")){
  271. QStringList d_list = detail_data.split(";:;");
  272. QMessageBox msgBox;
  273. msgBox.setText(QObject::trUtf8("????????? ?????? ????????? %1").arg(d_list.at(0)));
  274. msgBox.setInformativeText(QObject::trUtf8("?????????? ???????? ??????? ???????? ??? ???????? ??? ????"));
  275. msgBox.setDetailedText(QObject::trUtf8("???????? %1 ??? ?????????? ?? ???????? %2.\n????? ?? - %3\n????????? - %4\n????? ??????? %5")
  276. .arg(d_list.at(0))
  277. .arg(d_list.at(1))
  278. .arg(d_list.at(2))
  279. .arg(d_list.at(3))
  280. .arg(d_list.at(4))
  281. );
  282. QPushButton *clearButton = msgBox.addButton(QObject::trUtf8("????????"), QMessageBox::ActionRole);
  283. QPushButton *brakButton = msgBox.addButton(QObject::trUtf8("????"), QMessageBox::RejectRole);
  284. msgBox.exec();
  285. if (msgBox.clickedButton() == clearButton) {
  286. // connect
  287. engine->markCurrentDocClear();
  288. } else if (msgBox.clickedButton() == brakButton) {
  289. // abort
  290. engine->markCurrentDocBrack();
  291. }
  292. }
  293. }
  294. //------------------------------------ PRIVATE ---------------------------------------------
  295. void MainWindow::createConnection()
  296. {
  297. connect (helpButton, SIGNAL(clicked()),
  298. this, SLOT( showHelp() )
  299. );
  300. connect (exitButton,SIGNAL(clicked()),
  301. this, SLOT(close())
  302. );
  303. connect (nextButton,SIGNAL(clicked()),
  304. this, SLOT(do_next())
  305. );
  306. connect (prevButton,SIGNAL(clicked()),
  307. this, SLOT(do_prev())
  308. );
  309. connect (restartButton,SIGNAL(clicked()),
  310. this, SLOT(do_restart())
  311. );
  312. connect (data_module,SIGNAL(error(VPrn::AppErrorType,QString)),
  313. this, SLOT (errorInfo(VPrn::AppErrorType,QString))
  314. );
  315. connect (engine, SIGNAL( error(VPrn::AppErrorType,QString) ),
  316. this, SLOT (errorInfo(VPrn::AppErrorType,QString))
  317. );
  318. connect(engine, SIGNAL( LocalSrvRegistr() ),
  319. introPage, SLOT ( setLocalSrvRegistr() )
  320. );
  321. connect(engine, SIGNAL( RemoteDemonRegistr() ),
  322. introPage, SLOT ( setRemoteDemonRegistr() )
  323. );
  324. connect(engine, SIGNAL(ReciveUserName() ),
  325. introPage, SLOT (setReciveUserName() )
  326. );
  327. connect(engine, SIGNAL( ReciveUserMandat() ),
  328. introPage, SLOT ( setReciveUserMandat() )
  329. );
  330. /** @short ??? ??? ?????? ??? ??????? ????????? ????:
  331. * @li ??????????? ?? ????????? ??????? (?????? ?? ?????????? ? ????????)
  332. * @li ??????????? ?? ????????? ??????? (?????? ?? ?????????? ? ????????)
  333. * ????? ????????? ?????? ?? ???????????, ? ?????? ????? ? ???? ???? ?????
  334. * ????? ????????? ?????????????? ? ????????
  335. */
  336. connect(engine, SIGNAL( RemoteDemonRegistr() ),
  337. this, SLOT ( sendFileToConvertor() )
  338. );
  339. connect(engine, SIGNAL( needAuthUser(const QString&) ),
  340. this, SLOT ( do_needAuthUser(const QString&) )
  341. );
  342. connect(engine, SIGNAL( ReciveSecLevelList() ),
  343. introPage, SLOT ( setReciveSecLevelList() )
  344. );
  345. connect(engine, SIGNAL( RecivePrintersList() ),
  346. introPage, SLOT ( setRecivePrintersList() )
  347. );
  348. connect(printDataPage, SIGNAL ( field_checked() ),
  349. engine, SLOT ( authUserToPrinter() )
  350. );
  351. connect(engine, SIGNAL ( doc_converted() ),
  352. printDataPage, SLOT ( setDocConverted() )
  353. );
  354. connect(printDataPage, SIGNAL ( field_checked() ),
  355. engine, SLOT ( checkMB() )
  356. );
  357. connect (engine, SIGNAL ( authToDevice(bool,QString) ),
  358. checkDataPage,SLOT ( setAuthCheck(bool,QString) )
  359. );
  360. connect(engine, SIGNAL ( RegisterDocInBase(bool,QString) ),
  361. checkDataPage, SLOT ( setMbCheck(bool,QString) )
  362. );
  363. connect(checkDataPage, SIGNAL (select_mode(int)),
  364. engine, SLOT (do_select_mode(int))
  365. );
  366. connect(engine, SIGNAL ( MergeDocWithTemplates(bool,QString) ),
  367. checkDataPage, SLOT ( setCheckMergeDocWithTemplates(bool,QString))
  368. );
  369. connect (engine, SIGNAL ( PicturesList(QStringList ) ),
  370. preViewPage, SLOT ( showPicturesList(QStringList ))
  371. );
  372. connect (preViewPage, SIGNAL (printCurrentDoc()),
  373. engine, SLOT (do_printCurrentDoc())
  374. );
  375. connect (engine, SIGNAL (showInfoMsg(QString)),
  376. finishPage, SLOT (addInfoMsg(QString))
  377. );
  378. connect (engine, SIGNAL (UserNeedFlipPages()),
  379. this, SLOT (do_UserNeedFlipPages())
  380. );
  381. connect (engine, SIGNAL (UserNeedCheckLastPage()),
  382. this, SLOT (do_UserNeedCheckLastPage())
  383. );
  384. connect (engine, SIGNAL (UserNeedMarkCopies(const QString&)),
  385. this, SLOT (do_UserNeedMarkCopies(const QString&))
  386. );
  387. connect (finishPage, SIGNAL (saveCopiesState(bool)),
  388. engine, SLOT (do_saveCopiesState(bool))
  389. );
  390. }
  391. QPoint MainWindow::calcDeskTopCenter(int width,int height)
  392. {
  393. QPoint centerWindow;
  394. //???????? ????????????? ? ????????? ??? ? ??????
  395. centerWindow = desktop_avail.center(); //???????? ?????????? ?????? ??????
  396. centerWindow.setX(centerWindow.x() - (width/2));
  397. centerWindow.setY(centerWindow.y() - (height/2));
  398. return centerWindow;
  399. }
  400. void MainWindow::readConfig(const QString &app_dir)
  401. {
  402. QString ini_file =QString("%1/Technoserv/safe_printer.ini").arg(app_dir);
  403. if (QFile::exists(ini_file)){
  404. QSettings settings (ini_file,QSettings::IniFormat);
  405. #if QT_VERSION >= 0x040500
  406. settings.setIniCodec("UTF-8");
  407. #endif
  408. settings.beginGroup("SERVICE");
  409. link_name = settings.value("link_name").toString();
  410. settings.endGroup();
  411. settings.beginGroup("USED_DIR_FILE");
  412. //spoolDir = settings.value("spool_dir").toString();
  413. gatekeeper_bin = settings.value("gatekeeper_bin").toString();
  414. settings.endGroup();
  415. }else{
  416. myEMsgBox->showMessage(QObject::trUtf8("???? ? ??????????? ????????? %1 ?? ??????!\n%2")
  417. .arg(ini_file)
  418. .arg(QString(Q_FUNC_INFO))
  419. );
  420. }
  421. }
  422. bool MainWindow::lastCheck(int page)
  423. {
  424. bool Ok = false;
  425. {
  426. switch (page +1){
  427. case VPrn::Page_Intro:
  428. break;
  429. case VPrn::Page_Select:
  430. Ok = introPage->enableNext();
  431. break;
  432. case VPrn::Page_PrintData:
  433. Ok = selectPage->enableNext();
  434. break;
  435. case VPrn::Page_CheckData:
  436. Ok = printDataPage->enableNext();
  437. break;
  438. case VPrn::Page_Preview:
  439. Ok = checkDataPage->enableNext();
  440. break;
  441. case VPrn::Page_Finish:
  442. Ok = preViewPage->enableNext();
  443. break;
  444. case VPrn::Page_SetBrak:
  445. break;
  446. }
  447. }
  448. return Ok;
  449. }
  450. //------------------------------------- PROTECTED ----------------------------------------
  451. void MainWindow::changeEvent(QEvent *e)
  452. {
  453. QWidget::changeEvent(e);
  454. switch (e->type()) {
  455. case QEvent::LanguageChange:
  456. //ui->retranslateUi(this);
  457. break;
  458. default:
  459. break;
  460. }
  461. }