/vp_plugins/print_monitor/engine.cpp

http://cupsfilter.googlecode.com/ · C++ · 641 lines · 531 code · 55 blank · 55 comment · 30 complexity · e610e3fe9d88092ca8902a14536bedf5 MD5 · raw file

  1. #include "engine.h"
  2. #include "mysocketclient.h"
  3. #include "message.h"
  4. #include <QtCore/QDebug>
  5. #include <QtCore/QFile>
  6. #include <QtCore/QDir>
  7. //#include <QtCore/QFileInfoList>
  8. #include <QtCore/QProcess>
  9. #include <QtCore/QMetaType>
  10. #include <QtCore/QTimer>
  11. #include <QtCore/QRegExp>
  12. #include <QtCore/QStringList>
  13. #include <QtGui/QStandardItem>
  14. #include <QtGui/QStringListModel>
  15. #include <QtGui/QStandardItemModel>
  16. #include <QtCore/QModelIndex>
  17. #include <QtCore/QDataStream>
  18. #include <QPair>
  19. Engine::Engine(QObject *parent,const QString &link,const QString &gk_bin)
  20. : QObject(parent)
  21. , m_DC_model(0)
  22. , m_Prn_model(0)
  23. , m_Tmpl_model(0)
  24. , m_Mandats_model(0)
  25. , m_Stamp_model(0)
  26. , m_LocalClient(0)
  27. , stopLaunch(false)
  28. , currentUserName(QString())
  29. , currentUserMandat(QString())
  30. , link_name(QString())
  31. , gatekeeper_bin(QString())
  32. {
  33. qRegisterMetaType<VPrn::MessageType>("MessageType");
  34. link_name = link;
  35. gatekeeper_bin = gk_bin;
  36. }
  37. Engine::~Engine()
  38. {
  39. if (m_LocalClient){
  40. m_LocalClient->disconnectFromServer();
  41. }
  42. }
  43. void Engine::prepareFileToPrint(const QString & file_name)
  44. {
  45. // ?????? ? ????? ????????? ?????? ????????????? ps -> pdf
  46. Message msg(this);
  47. msg.setType(VPrn::Que_Convert2Pdf);
  48. msg.setMessageData( file_name.toUtf8() ); // ?????????? ? QByteArray
  49. sendMessage2LocalSrv(msg);
  50. }
  51. void Engine::needRestart()
  52. {
  53. QString mb;
  54. QString cur_copy;
  55. QString total_copy;
  56. QModelIndex indx;
  57. //??????? ?????? ?? ??????
  58. indx = m_DC_model->index(0,VPrn::cards_MB_NUMBER);
  59. mb = m_DC_model->data(indx,Qt::DisplayRole).toString() ;
  60. indx = m_DC_model->index(0,VPrn::cards_CURRENT_COPY);
  61. cur_copy = m_DC_model->data(indx,Qt::DisplayRole).toString();
  62. indx = m_DC_model->index(0,VPrn::cards_COPY_COUNT);
  63. total_copy = m_DC_model->data(indx,Qt::DisplayRole).toString();
  64. QString str = tr("%1;:;%2;:;%3;:;")
  65. .arg(mb).arg(cur_copy).arg(total_copy);
  66. indx = m_DC_model->index(0,VPrn::cards_SELECT_ALL_COPY);
  67. if (m_DC_model->data(indx,Qt::DisplayRole).toBool()){
  68. str.append("true");
  69. }else{
  70. str.append("false");
  71. }
  72. //???????? ?????? ?????? ?? ?????????? ????????
  73. Message msg(this);
  74. msg.setType( VPrn::Que_UserDemands2Restart );
  75. msg.setMessageData( str.toUtf8() );
  76. sendMessage2LocalSrv( msg );
  77. }
  78. //-------------------------------- PUBLIC SLOTS -------------------------------
  79. void Engine::setAuthData(const QString &login,const QString &mandat)
  80. {
  81. currentUserName = login;
  82. currentUserMandat = mandat;
  83. emit ReciveUserName();
  84. emit ReciveUserMandat();
  85. // ?????? ? ????? ????????? ?????? ????????? ??????? ??????????? ???
  86. Message msg(this);
  87. msg.setType(VPrn::Que_SEC_LEVEL);
  88. msg.setMessageData( currentUserMandat.toUtf8() ); // ?????????? ? QByteArray
  89. sendMessage2LocalSrv(msg);
  90. }
  91. void Engine::launchAndConnect()
  92. {
  93. if (!link_name.isEmpty() && QFile::exists(gatekeeper_bin)){
  94. if (!m_LocalClient){
  95. m_LocalClient = new mySocketClient();
  96. connect (m_LocalClient, SIGNAL(checkPointChanged(MyCheckPoints)),
  97. this, SLOT(do_checkPointChanged(MyCheckPoints))
  98. );
  99. connect (m_LocalClient, SIGNAL(messageReady( const Message &)),
  100. this, SLOT(parseMessage(const Message &))
  101. );
  102. }
  103. // ????????????? ?????????? ? ????????? ????????
  104. m_LocalClient->connectToServer(link_name);
  105. }else{
  106. emit error(VPrn::ConfigError,
  107. QObject::trUtf8("?????? ? ????? ????????????. ????????? ?????????:\n"
  108. " ?????? [SERVICE] ???????? link_name\n"
  109. " ?????? [USED_DIR_FILE] ???????? gatekeeper_bin\n%1")
  110. .arg(QString(Q_FUNC_INFO))
  111. );
  112. }
  113. }
  114. void Engine::authUserToPrinter()
  115. {
  116. // ?????? ? ????? ????????? ?????? ??????????? ???????????? ?? ?????? ? ???????
  117. Message msg(this);
  118. msg.setType( VPrn::Que_AUTHOR_USER );
  119. // ????????? ????? ??????? ?????? ???? ?? ????????? ???? ???????
  120. msg.setMessageData( findPrinterInModel().toUtf8() ); // ?????????? ? QByteArray
  121. sendMessage2LocalSrv(msg);
  122. }
  123. void Engine::checkMB()
  124. {
  125. QString sql_query;
  126. /**
  127. * @brief ????????? sql ?????? ???????????:
  128. * - ?????? ???????? (??,????? ???.) ?? ??????????????? ? ??
  129. * - ?????? ???????? (??,????? ???.) ??????????????? ? ??, ?? ??????? ??? ????
  130. */
  131. Message msg(this);
  132. msg.setType( VPrn::Que_IS_MB_EXIST );
  133. msg.setMessageData( sql_query.toUtf8() );
  134. sendMessage2LocalSrv(msg);
  135. }
  136. void Engine::registerMB()
  137. {
  138. QString sql_query;
  139. /**
  140. * @brief ????????? sql ?????? ?????????????? ???????? ? ?? ?????
  141. * - ?????? ???????? (??,????? ???.) ?? ??????????????? ? ??
  142. * - ?????? ???????? (??,????? ???.) ??????????????? ? ??, ?? ??????? ??? ????
  143. */
  144. Message msg(this);
  145. msg.setType( VPrn::Que_RegisterDocInBase );
  146. msg.setMessageData( sql_query.toUtf8() );
  147. sendMessage2LocalSrv(msg);
  148. }
  149. void Engine::do_select_mode(int mode)
  150. {
  151. QByteArray field_data;
  152. Message msg(this);
  153. // ????????? ????? ?????? ?? ?????? ??? ???????? ?????????? ???????
  154. field_data = getAllFieldData();
  155. bool Ok =true;
  156. {
  157. switch (mode){
  158. case VPrn::pre_FullMode:
  159. msg.setType( VPrn::Que_CreateFormatedFullDoc );
  160. break;
  161. case VPrn::pre_PartMode:
  162. msg.setType( VPrn::Que_CreateFormatedPartDoc );
  163. break;
  164. case VPrn::pre_ClearPrintMode:
  165. msg.setType( VPrn::Que_CreateFormatedFullDocAndPrint );
  166. break;
  167. default:
  168. emit error(VPrn::notDefainedMode,
  169. QObject::trUtf8("?????? ?? ???????????? ????? ?????????????/??????.\n%1")
  170. .arg(QString(Q_FUNC_INFO))
  171. );
  172. Ok &= false;
  173. break;
  174. }
  175. }
  176. if (Ok){
  177. msg.setMessageData( field_data );
  178. sendMessage2LocalSrv(msg);
  179. }
  180. }
  181. void Engine::do_printCurrentDoc()
  182. {
  183. Message msg(this);
  184. msg.setType( VPrn::Que_PrintCurrentFormatedDoc );
  185. //msg.setMessageData ( findPrinterInModel().toUtf8() );
  186. sendMessage2LocalSrv( msg );
  187. }
  188. void Engine::markCurrentDocBrack()
  189. {
  190. Message msg(this);
  191. msg.setType( VPrn::Ans_UserNeedMarkCopies );
  192. msg.setMessageData ( QString("BRAK").toUtf8() );
  193. sendMessage2LocalSrv( msg );
  194. }
  195. void Engine::markCurrentDocClear()
  196. {
  197. Message msg(this);
  198. msg.setType( VPrn::Ans_UserNeedMarkCopies );
  199. msg.setMessageData ( QString("CLEAR").toUtf8() );
  200. sendMessage2LocalSrv( msg );
  201. }
  202. //-------------------------------- PRIVATE SLOTS -------------------------------
  203. void Engine::do_checkPointChanged(MyCheckPoints r_cpoint)
  204. {
  205. Message msg(this);
  206. if (r_cpoint == VPrn::loc_Connected){
  207. emit LocalSrvRegistr();
  208. //?????? ???????????
  209. msg.setType(VPrn::Que_Register);
  210. //msg.setMessageData( clientName.toUtf8() ); // ?????????? ? QByteArray
  211. sendMessage2LocalSrv(msg);
  212. }
  213. if (r_cpoint == VPrn::loc_ServerNotFound && !stopLaunch){
  214. QProcess proc;
  215. // ?????? ???????? ?????? ???????
  216. if (proc.startDetached (gatekeeper_bin)){
  217. // ??????? ????? 2
  218. stopLaunch = true;
  219. }else{
  220. emit error(VPrn::appNotStarted,QString("%1\n%2").arg(proc.errorString()).arg(QString(Q_FUNC_INFO)) );
  221. }
  222. QTimer::singleShot(3000,this,SLOT(launchAndConnect()));
  223. }
  224. }
  225. void Engine::parseMessage(const Message &r_msg)
  226. {
  227. Message msg(this);
  228. msg.clear();
  229. QString str;
  230. MessageType mType = r_msg.getType();
  231. switch (mType){
  232. case VPrn::Que_BeginPrintCopies:{
  233. str = QObject::trUtf8("?????? ?????? ?????????: ");
  234. str.append(r_msg.getMessageData());
  235. emit showInfoMsg(str);
  236. qDebug() << "Recive msg: VPrn::Que_BeginPrintCopies";
  237. // ????????? ??????
  238. do_printCurrentDoc();
  239. }
  240. break;
  241. case VPrn::Que_UserNeedFlipPages:{
  242. qDebug() << "Recive msg: VPrn::Que_UserNeedFlipPages";
  243. str = QObject::trUtf8("???????? ?????? ??????? ??????, ?????????? ??????????? ?????!");
  244. emit showInfoMsg(str);
  245. emit UserNeedFlipPages();
  246. }
  247. break;
  248. case VPrn::Que_UserNeedCheckLastPage:{
  249. qDebug() << "Recive msg: VPrn::Que_UserNeedCheckLastPage";
  250. str = QObject::trUtf8("???????? ?????? ???????? ??????, ?????????? ????????? ????????? ???? ??? ?????? ????????!");
  251. emit showInfoMsg(str);
  252. emit UserNeedCheckLastPage();
  253. }
  254. break;
  255. case VPrn::Que_UserNeedMarkCopies:{
  256. str = QObject::trUtf8("???????? ??????, ?????????? ????????? ????????!");
  257. emit showInfoMsg(str);
  258. emit UserNeedMarkCopies( r_msg.getMessageData() );
  259. }
  260. break;
  261. case VPrn::Ans_Register: {
  262. // ?????? ??????????????? ???????? ?????????? ?? GateKeeper ?????????? ?????
  263. client_uuid.clear();
  264. client_uuid.append(r_msg.getMessageData());
  265. if (m_DC_model){
  266. m_DC_model->setItem(0,VPrn::cards_ID,
  267. new QStandardItem(client_uuid)
  268. );
  269. }
  270. emit LocalSrvRegistr();
  271. // ?????? ? ?????????? ??????? ??? ????????? ????????? ??????:
  272. // ?? ????? ? ?????? (??????????? ? ???? ?????????)
  273. // ????? ? ?????? (???? auth ?????? ????????????, ???? ????? ? ???????)
  274. // ???????? ????? (???? ??? ????????????,???? ????? ? ???????, ??? ???????
  275. msg.setType(VPrn::Que_ServerStatus);
  276. sendMessage2LocalSrv(msg);
  277. }
  278. break;
  279. case VPrn::Ans_SrvStatusFullReady:
  280. {
  281. str.append(r_msg.getMessageData());
  282. // ???????? ????? ???????, ? ??????? : ???;:;??????
  283. QRegExp rx("(.+);:;(.+)");
  284. //rx.setMinimal(true);
  285. if(rx.indexIn(str) != -1){
  286. currentUserName = rx.cap(1);
  287. currentUserMandat = rx.cap(2);
  288. //?????? ??????? ??????????? ??? ???????
  289. setAuthData(currentUserName,currentUserMandat );
  290. afterConnectSteps();
  291. }else{
  292. emit error(VPrn::SocketError,
  293. QObject::trUtf8("?????? ??? ????????? ????? ? ??????? ??????? ????????????")
  294. .arg(QString(Q_FUNC_INFO))
  295. );
  296. }
  297. }
  298. break;
  299. case VPrn::Ans_SrvStatusNotReady:{
  300. str.append(r_msg.getMessageData());
  301. emit gk_notReady(QObject::trUtf8("GateKeeper ?? ????? ? ?????? ?? ??????? [%1]")
  302. .arg(str)
  303. );
  304. }
  305. break;
  306. case VPrn::Ans_SrvStatusPartReady:{
  307. str.append(r_msg.getMessageData());
  308. emit needAuthUser(str);
  309. afterConnectSteps();
  310. }
  311. break;
  312. case VPrn::Ans_TemplateNotFound:{
  313. str.append( r_msg.getMessageData() );
  314. emit MergeDocWithTemplates( false, str);
  315. }
  316. break;
  317. case VPrn::Ans_GiveMeTemplatesList:{
  318. // ???????? ?????? ??????? ? ??????
  319. saveTemplatesListToModel( r_msg.getMessageData() );
  320. }
  321. break;
  322. case Ans_SourceDocNotFound:{
  323. // ???????? ???????? ?? ?????? ??? ?? ??????? ???????, ? ???? ????????? ???????????
  324. str.append( r_msg.getMessageData() );
  325. emit MergeDocWithTemplates( false, str);
  326. }
  327. break;
  328. case VPrn::Ans_CreateFormatedDoc:{
  329. emit MergeDocWithTemplates( true,
  330. QObject::trUtf8("?????????? ??????? ? ???????? ?????????, ??????? ?????????!"));
  331. }
  332. break;
  333. case VPrn::Ans_ConvertFormatedDocToPng:{
  334. emit PicturesList( r_msg.getMessageDataList() );
  335. }
  336. break;
  337. case VPrn::GoodBay:{
  338. str.append(r_msg.getMessageData());
  339. emit reciveGoodBayMsg(str);
  340. }
  341. break;
  342. case VPrn::Ans_MB_NOT_EXIST:{
  343. //???????? ?? ??????????????? ? ?? ?????
  344. // ????????? ?????? ?? ??????????? ?????????
  345. registerMB();
  346. }
  347. break;
  348. case VPrn::Ans_MB_EXIST_AND_BRAK:{
  349. //???????? ??????????????? ? ?? ?????
  350. str.append(r_msg.getMessageData());
  351. emit RegisterDocInBase( true, str);
  352. }
  353. break;
  354. case VPrn::Ans_MB_EXIST_AND_NOT_BRAK:{
  355. //???????? ??????????????? ? ?? ?????
  356. str.append(r_msg.getMessageData());
  357. emit RegisterDocInBase( false, str);
  358. }
  359. break;
  360. case VPrn::Ans_RegisterDocInBase:{
  361. //???????? ??????????????? ? ?? ?????
  362. str.append(r_msg.getMessageData());
  363. emit RegisterDocInBase( true, str);
  364. }
  365. break;
  366. case VPrn::Ans_MB_LIST:{
  367. }
  368. break;
  369. case VPrn::Ans_PRINT_ALLOWED:{
  370. str.append(r_msg.getMessageData());
  371. emit authToDevice( true,str );
  372. }
  373. break;
  374. case VPrn::Ans_PRINT_DENIED:{
  375. str.append(r_msg.getMessageData());
  376. emit authToDevice( false,str );
  377. }
  378. break;
  379. case VPrn::Ans_PRINTER_NOT_FOUND:{
  380. str.append(r_msg.getMessageData());
  381. emit authToDevice( false,str );
  382. }
  383. break;
  384. case VPrn::Ans_Convert2PdfFinish:{
  385. emit doc_converted();
  386. }
  387. break;
  388. case VPrn::Ans_PageCounting:{
  389. str.append(r_msg.getMessageData()); // ????? ??????? ? str
  390. int pCnt = str.toInt();
  391. setPageCountInModel(pCnt);
  392. }
  393. break;
  394. case VPrn::Ans_PRINTER_LIST:{
  395. str.append(r_msg.getMessageData());
  396. savePrintersListToModel( str );
  397. emit RecivePrintersList();
  398. }
  399. break;
  400. case VPrn::Ans_STAMP_LIST:{
  401. // ???????? ???????? ??????? ???????????, ???????? ? ??????
  402. str.append(r_msg.getMessageData());
  403. setSecLevelList(QStringList() << str.split(";:;") );
  404. emit ReciveSecLevelList();
  405. //?????? ?????? ????????? ????????? ?????????????
  406. msg.setType(VPrn::Que_GET_PRINTER_LIST);
  407. sendMessage2LocalSrv(msg);
  408. }
  409. break;
  410. case VPrn::Err_Message:{
  411. // ???????? ????????? ?? ?????? ??????: ???~~????????
  412. }
  413. break;
  414. default:
  415. break;
  416. }
  417. }
  418. //-------------------------------------- PRIVATE ----------------------------------------
  419. void Engine::sendMessage2LocalSrv(const Message &s_msg)
  420. {
  421. if (m_LocalClient){
  422. m_LocalClient->sendMessage(s_msg);
  423. }
  424. }
  425. void Engine::afterConnectSteps()
  426. {
  427. Message msg(this);
  428. msg.setType( VPrn::Que_GiveMeTemplatesList );
  429. sendMessage2LocalSrv( msg );
  430. emit RemoteDemonRegistr();
  431. }
  432. void Engine::savePrintersListToModel(const QString &prn_list)
  433. {
  434. // ???????? ????? ???????, ? ???????: ???????? ????????;:;???????? ????????2;;:???????? ????????_
  435. QStringList printers_item = prn_list.split(";:;");
  436. for (int i = 0; i < printers_item.size(); i++) {
  437. m_Prn_model->setItem(i, 0, new QStandardItem(printers_item.at(i)));
  438. }
  439. }
  440. void Engine::saveTemplatesListToModel(QByteArray tmpl_list)
  441. {
  442. if ( m_Tmpl_model && !tmpl_list.isEmpty() ){
  443. //????????? ??????
  444. QDataStream in(&tmpl_list, QIODevice::ReadOnly );
  445. in.setVersion(QDataStream::Qt_3_0);
  446. int rows;
  447. int columns;
  448. in >> rows;
  449. in >> columns;
  450. QString txt;
  451. for (int i=0;i<rows;i++){
  452. for (int j=0;j<columns;j++){
  453. in >> txt;
  454. m_Tmpl_model->setItem(i,j,new QStandardItem(txt));
  455. txt.clear();
  456. }
  457. }
  458. }
  459. }
  460. void Engine::setSecLevelList(QStringList &list )
  461. {
  462. if (list.size() >0 && m_Stamp_model !=0){
  463. m_Stamp_model->setStringList( list );
  464. }
  465. }
  466. void Engine::setPageCountInModel(int pCnt)
  467. {
  468. m_DC_model->setItem(0,VPrn::cards_PAGE_COUNT,
  469. new QStandardItem(QObject::trUtf8("%1").arg(pCnt,0,10))
  470. );
  471. }
  472. QString Engine::findPrinterInModel()
  473. {
  474. QString device_profile;
  475. for (int i=0; i< m_Prn_model->rowCount();i++){
  476. QModelIndex index = m_Prn_model->index(i,3);
  477. bool sel_flag = m_Prn_model->data(index,Qt::DisplayRole).toBool();
  478. if (sel_flag){
  479. QModelIndex index_name = m_Prn_model->index(i, 0);
  480. //QModelIndex index_qqueue = m_Prn_model->index(i, 2);
  481. device_profile = m_Prn_model->data(index_name, Qt::DisplayRole).toString();
  482. break;
  483. }
  484. }
  485. return device_profile;
  486. }
  487. QByteArray Engine::getAllFieldData()
  488. {
  489. QMap <int,QString> m_tagValue;
  490. QModelIndex indx;
  491. QByteArray fields_data;
  492. QList <int> doc_copyes;
  493. QString t_fileName;
  494. for (int j=0;j<m_DC_model->columnCount();j++){
  495. indx = m_DC_model->index(0,j);
  496. QVariant cell_data = m_DC_model->data(indx,Qt::DisplayRole);
  497. QString tmp_item = cell_data.toString();
  498. //qDebug() <<Q_FUNC_INFO << "\ncell_data: " << tmp_item;
  499. if (!cell_data.isNull()){
  500. switch (j){
  501. case VPrn::cards_DOC_NAME:
  502. m_tagValue[VPrn::cards_DOC_NAME] = cell_data.toString();
  503. break;
  504. case VPrn::cards_MB_NUMBER:
  505. m_tagValue[VPrn::cards_MB_NUMBER] = cell_data.toString();
  506. break;
  507. case VPrn::cards_STAMP:
  508. m_tagValue[VPrn::cards_STAMP] = findStampInModel(cell_data.toInt());
  509. break;
  510. case VPrn::cards_PUNKT:
  511. m_tagValue[VPrn::cards_PUNKT] = cell_data.toString();
  512. break;
  513. case VPrn::cards_PAGE_COUNT:
  514. m_tagValue[VPrn::cards_PAGE_COUNT] = cell_data.toString();
  515. break;
  516. case VPrn::cards_EXECUTOR:
  517. m_tagValue[VPrn::cards_EXECUTOR] = cell_data.toString();
  518. break;
  519. case VPrn::cards_PRINTMAN:
  520. m_tagValue[VPrn::cards_PRINTMAN] = cell_data.toString();
  521. break;
  522. case VPrn::cards_PHONE:
  523. m_tagValue[VPrn::cards_PHONE] = cell_data.toString();
  524. break;
  525. case VPrn::cards_INV_NUMBER:
  526. m_tagValue[VPrn::cards_INV_NUMBER] = cell_data.toString();
  527. break;
  528. case VPrn::cards_PRINT_DATE:
  529. m_tagValue[VPrn::cards_PRINT_DATE] = cell_data.toString();
  530. break;
  531. case VPrn::cards_RECIVER_1:
  532. m_tagValue[VPrn::cards_RECIVER_1] = cell_data.toString();
  533. doc_copyes.append(VPrn::FirstPage);
  534. break;
  535. case VPrn::cards_RECIVER_2:
  536. m_tagValue[VPrn::cards_RECIVER_2] = cell_data.toString();
  537. doc_copyes.append(VPrn::FirstPageN2);
  538. break;
  539. case VPrn::cards_RECIVER_3:
  540. m_tagValue[VPrn::cards_RECIVER_3] = cell_data.toString();
  541. doc_copyes.append(VPrn::FirstPageN3);
  542. break;
  543. case VPrn::cards_RECIVER_4:
  544. m_tagValue[VPrn::cards_RECIVER_4] = cell_data.toString();
  545. doc_copyes.append(VPrn::FirstPageN4);
  546. break;
  547. case VPrn::cards_RECIVER_5:
  548. m_tagValue[VPrn::cards_RECIVER_5] = cell_data.toString();
  549. doc_copyes.append(VPrn::FirstPageN5);
  550. break;
  551. case VPrn::cards_TEMPLATE_NAME:
  552. t_fileName = findTemplatesFilePathInModel(cell_data.toInt());
  553. break;
  554. case VPrn::cards_CURRENT_COPY:
  555. m_tagValue[VPrn::cards_CURRENT_COPY] = cell_data.toString();
  556. break;
  557. default:
  558. break;
  559. }
  560. }
  561. }
  562. m_tagValue[VPrn::cards_COPY_COUNT]= QString("%1")
  563. .arg(doc_copyes.count(),0,10) ;
  564. //??????? ?????????
  565. fields_data.clear();
  566. QDataStream out(&fields_data, QIODevice::WriteOnly );
  567. out.setVersion(QDataStream::Qt_3_0);
  568. //??????? ???? ????????? ????????????? ?????????,????? ???????????
  569. //out << qMakePair(cur_copyes,all_copyes);
  570. out << doc_copyes;
  571. // ??????? ????????? ????????????? ??????
  572. out << t_fileName;
  573. // save map
  574. out << m_tagValue;
  575. return fields_data;
  576. }
  577. QString Engine::findTemplatesFilePathInModel ( int id )
  578. {
  579. QModelIndex indx = m_Tmpl_model->index(id,VPrn::metaInfo_fname);
  580. return m_Tmpl_model->data(indx,Qt::DisplayRole).toString();
  581. }
  582. QString Engine::findStampInModel ( int id )
  583. {
  584. QModelIndex indx = m_Stamp_model->index(id,0);
  585. return m_Stamp_model->data(indx,Qt::DisplayRole).toString();
  586. }