/safeFatPrinter/trunk/src/dcontroller.cpp

http://cupsfilter.googlecode.com/ · C++ · 418 lines · 240 code · 25 blank · 153 comment · 9 complexity · b9438c77d92bb15e7bca1fa2118be1b7 MD5 · raw file

  1. #include "dController.h"
  2. #include "SimpleItem.h"
  3. dController::dController(QObject *parent)
  4. {
  5. QUuid uSID=QUuid::createUuid () ; //generate SID
  6. SID=uSID.toString().replace("{","").replace("}","");
  7. read_settings();
  8. conn_state=false;
  9. connect2Server(serverHostName,serverPort);
  10. createDocModel();
  11. }
  12. QStandardItemModel *dController::document_model () const
  13. {
  14. return doc_model;
  15. }
  16. void dController::createDocModel()
  17. {
  18. doc_model = new QStandardItemModel();
  19. header << QObject::trUtf8("????? ???-??")
  20. << QObject::trUtf8("???????? ???-??")
  21. << QObject::trUtf8("????")
  22. << QObject::trUtf8("????? ???????")
  23. << QObject::trUtf8("????? ?????")
  24. << QObject::trUtf8("???-?? ??????")
  25. << QObject::trUtf8("???????????")
  26. << QObject::trUtf8("?????????")
  27. << QObject::trUtf8("???????")
  28. << QObject::trUtf8("???. ?")
  29. << QObject::trUtf8("???? ??????????")
  30. << QObject::trUtf8("?????????? ?1")
  31. << QObject::trUtf8("?????????? ?2")
  32. << QObject::trUtf8("?????????? ?3")
  33. << QObject::trUtf8("?????????? ?4")
  34. << QObject::trUtf8("?????????? ?5")
  35. << QObject::trUtf8("?????? ?????????")
  36. << QObject::trUtf8("????? ????????? ???.")
  37. << QObject::trUtf8("?????? ????????");
  38. doc_model->setHorizontalHeaderLabels(header);
  39. this->insertDocToModel();
  40. }
  41. void dController::insertDocToModel()
  42. {
  43. // add empty row to model
  44. doc_model->insertRow(doc_model->rowCount());
  45. }
  46. void dController::insertDocToModel(QString &item)
  47. {
  48. QStringList itemList= item.split("~");
  49. QList<QStandardItem *> cells;
  50. int Pos;
  51. for (int i = 0; i <itemList.size() ; ++i) {
  52. QStandardItem * cell_item= new QStandardItem();
  53. cells.append(cell_item);
  54. }
  55. for (int i = 0; i <itemList.size() ; ++i) {
  56. QStringList list_2 = itemList.at(i).split("=", QString::SkipEmptyParts);
  57. Pos =header.indexOf(list_2.at(0)); // ???? ??????
  58. QStandardItem *cell_item =cells.at(Pos);
  59. cell_item->setData(QVariant(list_2.at(1)),Qt::EditRole);
  60. }
  61. doc_model->appendRow (cells);
  62. }
  63. void dController::setPrinter(QString selected_printer)
  64. {
  65. qDebug() << Q_FUNC_INFO<<selected_printer;
  66. curPrinter=selected_printer;
  67. }
  68. void dController::savebase(QString wide_msg)
  69. {
  70. currentDoc = wide_msg.split("~");
  71. }
  72. void dController::checkMB(QString mb)
  73. {
  74. //TODO ask server mb
  75. // ?????? ???????? ?????????? ?? ? ???? ???????? ? ????? ?? ?? ???
  76. // ???? ???? ?? ?? ?????????? ?????? ?????????? ??? ??? ??????
  77. QDate dt_end;
  78. dt_end=QDate::currentDate (); // ??????? ????
  79. QDate dt_begin (dt_end.year (), 1,1); // ?????? ??????
  80. QString m=QString(QObject::trUtf8("%1~%2~%3")).arg(mb).arg(dt_begin.toString(),dt_end.toString());
  81. emit sendServerCmd(IS_MB_EXIST,m);
  82. }
  83. void dController::connect2Server(QString &host,int port)
  84. {
  85. netClient = new netAgent();
  86. netClient->on_login(host,port,this->SID);
  87. connect (netClient,SIGNAL(error_signal(int,QString)),this,SIGNAL(error(int,QString)));
  88. connect (netClient,SIGNAL(takeServerResponce(QString &)),this,SLOT(parseNetwork(QString &)));
  89. connect (this,SIGNAL(sendServerCmd(commands_t ,QString &)), netClient,SLOT(send2Server(commands_t ,QString &)) );
  90. }
  91. void dController::parseNetwork(QString &message )
  92. {
  93. qDebug() << Q_FUNC_INFO << message;
  94. // ?????? ?????? /answer:???? ??????
  95. QRegExp rx("^/answer:(.+):(.+)$");
  96. if(rx.indexIn(message) != -1){
  97. QString ans =rx.cap(1);
  98. QString body =rx.cap(2);
  99. qDebug() << ans << body <<"\n";
  100. switch (ans.toInt()) {
  101. case MB_LIST_ANS:
  102. // ??????? ? ??????
  103. this->insertDocToModel(body);
  104. break;
  105. case IS_MB_NOT_EXIST_ANS:
  106. // ?????? ????????? ???
  107. emit mbNumberChecked(body);
  108. break;
  109. case IS_MB_EXIST_AND_BRAK_ANS:
  110. // ???????? ???? ? ?? ??????????? ????? ????????????
  111. //doc_model->clear();// ??????? ?????? ???
  112. this->insertDocToModel(body);
  113. emit mbNumberExist(doc_model->rowCount());
  114. break;
  115. case IS_MB_EXIST_AND_NOT_BRAK_ANS:
  116. // ???????? ???? ? ?? ?? ??????????? ?????? ????????????
  117. emit mbNumberExist(-1);
  118. break;
  119. case REGISTER_ANS:
  120. emit connect2Demon();
  121. break;
  122. }
  123. }
  124. }
  125. void dController::parseCnvThread(int Code,QString output )
  126. {
  127. QString msg;
  128. if (Code != QProcess::NormalExit) {
  129. msg =QObject::trUtf8("?????? ???????????? ??????????.\n%1:\n??? %2").arg(output).arg(Code,0,10);
  130. emit error(Code,msg);
  131. }else{
  132. emit inputFileConverted();
  133. qDebug() << QObject::tr("??????? ????????? ??????????? ????????? ????? ? pdf.");
  134. }
  135. }
  136. void dController::parseMergeThread(int Code,QString output )
  137. {
  138. QString msg;
  139. if (Code != QProcess::NormalExit) {
  140. msg =QObject::trUtf8("?????? ???????????? ??????????.\n%1:\n??? %2").arg(output).arg(Code,0,10);
  141. emit error(Code,msg);
  142. }else{
  143. emit inputFileMerged();
  144. qDebug() << QObject::tr("??????? ????????? ?????????? ???????.");
  145. }
  146. }
  147. void dController::read_settings()
  148. {
  149. // TODO ???? ???????? ??????????? ?????? ????????? ??? ?? ??????? ??????????? ????? ini ????
  150. qDebug() << Q_FUNC_INFO;
  151. QSettings settings(QSettings::IniFormat, QSettings::UserScope,"??????????","?????????? ???????");
  152. settings.setIniCodec("UTF-8");
  153. settings.beginGroup("SERVICE");
  154. serverHostName = settings.value("server","127.0.0.1").toString();
  155. serverPort = settings.value("port",4242).toInt();
  156. timeout_connect =settings.value("timeout_connect",5000).toInt();
  157. timeout_read=settings.value("timeout_read",15000).toInt();
  158. timeout_write=settings.value("timeout_write",15000).toInt();
  159. settings.endGroup();
  160. #if defined(Q_OS_UNIX)
  161. settings.beginGroup("POSTSCRIPT");
  162. gsBin = settings.value("gs_bin","/usr/local/bin/gs").toString();
  163. spoolDIR = settings.value("spool_dir","//var/log/spool/cups/tmp//").toString();
  164. settings.endGroup();
  165. settings.beginGroup("PDF");
  166. pdfTk = settings.value("pdfTK","/usr/local/bin/pdftk").toString();
  167. settings.endGroup();
  168. #elif defined(Q_OS_WIN)
  169. settings.beginGroup("POSTSCRIPT");
  170. gsBin = settings.value("gs_bin","C:\\Program Files\\gs\\gs8.70\\bin\\gswin32c.exe").toString();
  171. spoolDIR = settings.value("spool_dir","c:\\spool\\").toString();
  172. settings.endGroup();
  173. settings.beginGroup("PDF");
  174. pdftkBin = settings.value("pdfTK","c:\\Tools\\pdftk.exe").toString();
  175. settings.endGroup();
  176. #endif
  177. mainPDF.append(spoolDIR).append("%1.pdf");
  178. outPDF.append(spoolDIR). append("%1_out.pdf");
  179. }
  180. void dController::write_settings()
  181. {
  182. QSettings settings(QSettings::IniFormat, QSettings::UserScope,"??????????","?????????? ???????");
  183. settings.setIniCodec("UTF-8");
  184. settings.beginGroup("SERVICE" );
  185. settings.setValue("server",serverHostName);
  186. settings.setValue("port",serverPort);
  187. settings.setValue("timeout_connect",timeout_connect);
  188. settings.setValue("timeout_read",timeout_read);
  189. settings.setValue("timeout_write",timeout_write);
  190. settings.endGroup();
  191. settings.beginGroup("POSTSCRIPT" );
  192. settings.setValue("gs_bin",gsBin);
  193. //settings.setValue("output_fg_PDF",mainPDF);
  194. //settings.value("output_PDF",outPDF);
  195. settings.setValue("spool_dir",spoolDIR);
  196. settings.endGroup();
  197. settings.beginGroup("PDF");
  198. settings.setValue("pdfTK",pdftkBin);
  199. settings.endGroup();
  200. }
  201. void dController::convert2PDF(QString &in_file)
  202. {
  203. ProcessT *proc = new ProcessT();
  204. // ?????????? ????????? ????????? ??????
  205. connect(proc,SIGNAL(commandOutput(int,QString)),this,SLOT(parseCnvThread(int,QString)));
  206. args.clear();
  207. args.append( "-q" );
  208. args.append( "-dQUIET" );
  209. args.append( "-dNOPAUSE" );
  210. args.append( "-dPARANOIDSAFER" );
  211. args.append( "-dBATCH" );
  212. args.append("-r300");
  213. args.append( "-sDEVICE=pdfwrite" );
  214. mainPDF=mainPDF.arg(SID);
  215. outPDF=outPDF.arg(SID);
  216. qDebug() << mainPDF;
  217. args.append(QString("-sOutputFile=%1").arg(mainPDF));
  218. args.append("-c");
  219. args.append(".setpdfwrite");
  220. args.append("-f");
  221. args.append(in_file);
  222. proc->execute(gsBin, args,QProcess::MergedChannels);
  223. qDebug() <<Q_FUNC_INFO << "convert input file to pdf";
  224. }
  225. void dController::mergeTwoPDF(QString &fg_file,QString &bg_file,QString &out_file)
  226. {
  227. ProcessT *proc = new ProcessT();
  228. // ?????????? ????????? ????????? ??????
  229. connect(proc,
  230. SIGNAL(commandOutput(int,QString)),
  231. this,
  232. SLOT(parseMergeThread(int,QString))
  233. );
  234. args.clear();
  235. //pdftk in.pdf background back.pdf output out.pdf
  236. //pdftk in.pdf stamp back.pdf output out.pdf
  237. args.append(fg_file);
  238. args.append("stamp");
  239. args.append(bg_file);
  240. args.append("output");
  241. args.append(out_file);
  242. proc->execute(pdftkBin, args,QProcess::MergedChannels);
  243. qDebug() << Q_FUNC_INFO <<"pdftk " << fg_file <<" stamp " <<bg_file <<" output " <<out_file;
  244. }
  245. dController::~dController()
  246. {
  247. qDebug() << Q_FUNC_INFO;
  248. write_settings();
  249. }
  250. void dController::printWithTemplate (int RowId)
  251. {
  252. /*
  253. qDebug()<<Q_FUNC_INFO;
  254. //TODO ??? ?????? ???? ? ????????? ?????? !!!
  255. scene = new QGraphicsScene();
  256. page_orient= false;
  257. margin_top = MM_TO_POINT(15);
  258. margin_bottom=MM_TO_POINT(15);
  259. margin_left=MM_TO_POINT(35);
  260. margin_right=MM_TO_POINT(15);
  261. page_width=210;
  262. page_height=297;
  263. scene->clear();
  264. scene->setSceneRect(0, 0, MM_TO_POINT(page_width),MM_TO_POINT(page_height));
  265. QGraphicsRectItem *border_rect = new QGraphicsRectItem (QRectF(margin_left, margin_top, MM_TO_POINT(page_width)-margin_left-margin_right,MM_TO_POINT(page_height)-margin_top-margin_bottom));
  266. qDebug() <<"margin_rect"<< margin_left << margin_top << margin_left<<margin_right;
  267. border_rect->setPen(QPen(Qt::black,2,Qt::DotLine));
  268. border_rect->setBrush(QBrush(Qt::white));
  269. border_rect->setOpacity(0.5);
  270. border_rect->setZValue(0);
  271. border_rect->setData(ObjectName, "Border");
  272. scene->addItem(border_rect);
  273. SimpleItem* Gritem = new SimpleItem;
  274. Gritem->setPos(MM_TO_POINT(180), MM_TO_POINT(0));
  275. Gritem->setPrintFrame(false);
  276. Gritem->setText(QStringList()<<QString("????????")<<QString("????? 12"));
  277. Gritem->setFlag(QGraphicsItem::ItemIsMovable);
  278. Gritem->setParentItem(border_rect);
  279. SimpleItem* MBitem = new SimpleItem;
  280. MBitem->setPos(MM_TO_POINT(5), MM_TO_POINT(280));
  281. MBitem->setPrintFrame(false);
  282. MBitem->setText(QStringList()<<QString("?? ?-%1").arg(templ));
  283. MBitem->setFlag(QGraphicsItem::ItemIsMovable);
  284. MBitem->setParentItem(border_rect);
  285. scene->update();
  286. QPrinter printer;
  287. QString with_t;
  288. with_t.append(spoolDIR).append("compl_teml2.pdf");
  289. printer.setOutputFormat(QPrinter::PdfFormat);
  290. printer.setOutputFileName(with_t);
  291. printer.setPageSize(QPrinter::A4);
  292. QPainter painter(&printer);
  293. scene->render(&painter);
  294. //QString in_file =mainPDF;
  295. //in_file.arg(QString(SID));
  296. qDebug() <<Q_FUNC_INFO<< mainPDF << outPDF;
  297. this->mergeTwoPDF(mainPDF,with_t,outPDF);
  298. // ?????? ????????? ?????????
  299. scene->clear();
  300. border_rect = new QGraphicsRectItem (QRectF(margin_left, margin_top, MM_TO_POINT(page_width)-margin_left-margin_right,MM_TO_POINT(page_height)-margin_top-margin_bottom));
  301. qDebug() <<"margin_rect"<< margin_left << margin_top << margin_left<<margin_right;
  302. border_rect->setPen(QPen(Qt::black,2,Qt::DotLine));
  303. border_rect->setBrush(QBrush(Qt::white));
  304. border_rect->setOpacity(0.5);
  305. border_rect->setZValue(0);
  306. border_rect->setData(ObjectName, "Border");
  307. scene->addItem(border_rect);
  308. SimpleItem* Lastitem = new SimpleItem;
  309. Lastitem->setPos(MM_TO_POINT(40), MM_TO_POINT(200));
  310. Lastitem->setPrintFrame(true);
  311. Lastitem->setText(QStringList()<<QString("????????")
  312. <<QString("????? 12")
  313. <<QString("???????????:??? ???????????")
  314. <<QString("?????????:??? ??? ???????")
  315. <<QString("???????:2-63-15")
  316. <<QString("???.? 12/13")
  317. <<QString("????: 09.09.09'")
  318. <<QString("?? ?-%1").arg(templ)
  319. );
  320. Lastitem->setFlag(QGraphicsItem::ItemIsMovable);
  321. Lastitem->setParentItem(border_rect);
  322. QPrinter printer2;
  323. printer2.setOutputFormat(QPrinter::PdfFormat);
  324. QString last_p;
  325. last_p.append(spoolDIR).append("last_page.pdf");
  326. printer2.setOutputFileName(last_p);
  327. printer2.setPageSize(QPrinter::A4);
  328. QPainter painter2(&printer2);
  329. scene->render(&painter2);
  330. */
  331. emit sayMeGood();
  332. }
  333. void dController::printOverSide(int RowId)
  334. {
  335. /*
  336. //TODO ??? ?????? ???? ? ????????? ?????? !!!
  337. scene = new QGraphicsScene();
  338. page_orient= false;
  339. margin_top = MM_TO_POINT(15);
  340. margin_bottom=MM_TO_POINT(15);
  341. margin_left=MM_TO_POINT(35);
  342. margin_right=MM_TO_POINT(15);
  343. page_width=210;
  344. page_height=297;
  345. scene->clear();
  346. scene->setSceneRect(0, 0, MM_TO_POINT(page_width),MM_TO_POINT(page_height));
  347. QGraphicsRectItem *border_rect = new QGraphicsRectItem (QRectF(margin_left, margin_top, MM_TO_POINT(page_width)-margin_left-margin_right,MM_TO_POINT(page_height)-margin_top-margin_bottom));
  348. qDebug() <<"margin_rect"<< margin_left << margin_top << margin_left<<margin_right;
  349. border_rect->setPen(QPen(Qt::black,2,Qt::DotLine));
  350. border_rect->setBrush(QBrush(Qt::white));
  351. border_rect->setOpacity(0.5);
  352. border_rect->setZValue(0);
  353. border_rect->setData(ObjectName, "Border");
  354. scene->addItem(border_rect);
  355. SimpleItem* MBitem = new SimpleItem;
  356. MBitem->setPos(MM_TO_POINT(5), MM_TO_POINT(280));
  357. MBitem->setPrintFrame(false);
  358. MBitem->setText(QStringList()<<QString("?? ?-%1").arg(mb));
  359. MBitem->setFlag(QGraphicsItem::ItemIsMovable);
  360. MBitem->setParentItem(border_rect);
  361. //scene->addItem(MBtem);
  362. scene->update();
  363. QPrinter printer;
  364. printer.setPrinterName(curPrinter); //?????? ?? ???????? ???????
  365. //printer.setOutputFormat(QPrinter::PdfFormat);
  366. //printer.setOutputFileName("overside.pdf");
  367. //printer.setPageSize(QPrinter::A4);
  368. QPainter painter(&printer);
  369. scene->render(&painter);
  370. */
  371. emit sayMeGood();
  372. }