mainwindow.cpp 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. #include "MainWindow.h"
  2. #include <qfiledialog.h>
  3. #include <qsettings.h>
  4. #include <qdatastream.h>
  5. #include <qfile.h>
  6. #include <qtextstream.h>
  7. #include <qmessagebox.h>
  8. #include <QTextStream>
  9. #include "MessageException.h"
  10. #include "TableHelper.h"
  11. #include "DebugUtil.h"
  12. #include "WzExcel.h"
  13. MainWindow::MainWindow(QWidget *parent)
  14. : QMainWindow(parent)
  15. {
  16. ui.setupUi(this);
  17. QSettings setting("config.ini", QSettings::IniFormat);
  18. ui.modelPath->setText(setting.value("modelPath").toString());
  19. ui.servicePath->setText(setting.value("servicePath").toString());
  20. ui.widgetPath->setText(setting.value("widgetPath").toString());
  21. }
  22. void MainWindow::onModelPath()
  23. {
  24. QString path = QFileDialog::getExistingDirectory(this);
  25. ui.modelPath->setText(path);
  26. QSettings setting("config.ini", QSettings::IniFormat);
  27. setting.setValue("modelPath", path);
  28. }
  29. void MainWindow::onServicePath()
  30. {
  31. QString path = QFileDialog::getExistingDirectory(this);
  32. ui.servicePath->setText(path);
  33. QSettings setting("config.ini", QSettings::IniFormat);
  34. setting.setValue("servicePath", path);
  35. }
  36. void MainWindow::onWidgetPath()
  37. {
  38. QString path = QFileDialog::getExistingDirectory(this);
  39. ui.widgetPath->setText(path);
  40. QSettings setting("config.ini", QSettings::IniFormat);
  41. setting.setValue("widgetPath", path);
  42. }
  43. void MainWindow::onGenerate()
  44. {
  45. QString entityName = ui.entityName->text();
  46. if(entityName.isEmpty()){
  47. ui.entityName->setFocus();
  48. return;
  49. }
  50. QString modelName = ui.modelName->text();
  51. QString serviceName = ui.serviceName->text();
  52. QString widgetName = ui.widgetName->text();
  53. if (modelName.isEmpty())
  54. modelName = entityName + "Model";
  55. if (serviceName.isEmpty())
  56. serviceName = entityName + "Service";
  57. if (widgetName.isEmpty())
  58. widgetName = entityName + "Widget";
  59. createModel(modelName, entityName);
  60. createService(serviceName, entityName);
  61. if (ui.MultipleSelect->isChecked())
  62. createMultipleWidget(widgetName, modelName, serviceName, entityName,ui.name->text().trimmed());
  63. else
  64. createWidget(widgetName, modelName, serviceName, entityName, ui.name->text().trimmed());
  65. QMessageBox::information(this, "", "success");
  66. }
  67. void MainWindow::onTableFilePath()
  68. {
  69. QString filename = QFileDialog::getExistingDirectory(this);
  70. ui.tableFilePath->setText(filename);
  71. QSettings setting("config.ini", QSettings::IniFormat);
  72. setting.setValue("TableFilePath",filename);
  73. setting.sync();
  74. }
  75. void MainWindow::onExcelPath()
  76. {
  77. QString path = QFileDialog::getOpenFileName(this);
  78. ui.excelPath->setText(path);
  79. }
  80. void MainWindow::onGenerateTable()
  81. {
  82. WzExcel excelHelper(ui.excelPath->text().trimmed());
  83. try
  84. {
  85. excelHelper.open();
  86. }
  87. catch (MessageException &e)
  88. {
  89. excelHelper.close();
  90. QMessageBox::information(this,"提示",e.getMessage());
  91. return;
  92. }
  93. QString tablename = excelHelper.getValue(0,1).toString().toUpper();
  94. Debug(tablename);
  95. int rows = excelHelper.getRows();
  96. QList<QPair<QString,QString>> fieldAndTypes;
  97. QList<QPair<QString,QString>> fieldAndComments;
  98. for (int row = 2 ; row < rows ; row++)
  99. {
  100. QString copmment = excelHelper.getValue(row,0).toString();
  101. QString name = excelHelper.getValue(row,1).toString().toUpper();
  102. QString type = excelHelper.getValue(row,2).toString().toUpper();
  103. fieldAndTypes << qMakePair(name,type);
  104. fieldAndComments << qMakePair(name,copmment);
  105. }
  106. excelHelper.close();
  107. QStringList contents;
  108. contents << TableHelper::createTable(tablename,fieldAndTypes)
  109. << TableHelper::createPrimaryAlter(tablename)
  110. << TableHelper::createComment(tablename,fieldAndComments)
  111. << TableHelper::createSeq(tablename)
  112. << TableHelper::createTrigger(tablename);
  113. write(ui.tableFilePath->text().trimmed() + "/" + tablename + ".txt",contents.join("\n"));
  114. ui.textEdit->setText(contents.join("\n\n"));
  115. QString description = TableHelper::createDescription(ui.entityname->text().trimmed(), fieldAndComments);
  116. write(ui.tableFilePath->text().trimmed() + "/" + tablename + "_QxOrm.txt",description);
  117. ui.description->setText(description);
  118. }
  119. QString MainWindow::readAll(const QString &filename)
  120. {
  121. QFile file(filename);
  122. if (!file.open(QIODevice::ReadOnly))
  123. return "";
  124. QTextStream in(&file);
  125. in.setCodec("UTF-8");
  126. QString txt = in.readAll();
  127. file.close();
  128. return txt;
  129. }
  130. void MainWindow::write(const QString &filename, const QString &content)
  131. {
  132. QFile file(filename);
  133. if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
  134. return ;
  135. QTextStream out(&file);
  136. out.setCodec("UTF-8");
  137. out << content;
  138. file.close();
  139. }
  140. void MainWindow::createModel(const QString &modelName, const QString &entityName)
  141. {
  142. QString modelH = readAll("template/model.h.template");
  143. modelH = modelH.arg(modelName).arg(entityName);
  144. QString modelCpp = readAll("template/model.cpp.template");
  145. modelCpp = modelCpp.arg(modelName).arg(entityName);
  146. QString path = ui.modelPath->text().trimmed();
  147. QString modelHFilename = QString("%1/%2.h").arg(path).arg(modelName);
  148. write(modelHFilename, modelH);
  149. QString modelCppFilename = QString("%1/%2.cpp").arg(path).arg(modelName);
  150. write(modelCppFilename, modelCpp);
  151. }
  152. void MainWindow::createService(const QString &serviceName, const QString &entityName)
  153. {
  154. QString serviceH = readAll("template/service.h.template");
  155. serviceH = serviceH.arg(serviceName);
  156. QString serviceCpp = readAll("template/service.cpp.template");
  157. serviceCpp = serviceCpp.arg(serviceName).arg(entityName);
  158. QString path = ui.servicePath->text().trimmed();
  159. QString modelHFilename = QString("%1/%2.h").arg(path).arg(serviceName);
  160. write(modelHFilename, serviceH);
  161. QString modelCppFilename = QString("%1/%2.cpp").arg(path).arg(serviceName);
  162. write(modelCppFilename, serviceCpp);
  163. }
  164. void MainWindow::createWidget(const QString &widgetName, const QString &modelName, const QString &serviceName, const QString &entityName, const QString &name)
  165. {
  166. QString widgetH = readAll("template/widget.h.template");
  167. widgetH = widgetH.arg(widgetName).arg(modelName).arg(serviceName);
  168. QString widgetCpp = readAll("template/widget.cpp.template");
  169. widgetCpp = widgetCpp.arg(widgetName).arg(entityName).arg(modelName).arg(serviceName).arg(name);
  170. QString widgetUi = readAll("template/widget.ui.template");
  171. widgetUi = widgetUi.arg(widgetName);
  172. QString path = ui.widgetPath->text().trimmed();
  173. QString widgetHFilename = QString("%1/%2.h").arg(path).arg(widgetName);
  174. write(widgetHFilename, widgetH);
  175. QString widgetCppFilename = QString("%1/%2.cpp").arg(path).arg(widgetName);
  176. write(widgetCppFilename, widgetCpp);
  177. QString widgetUiFilename = QString("%1/%2.ui").arg(path).arg(widgetName);
  178. write(widgetUiFilename, widgetUi);
  179. }
  180. void MainWindow::createMultipleWidget(const QString &widgetName, const QString &modelName, const QString &serviceName, const QString &entityName,const QString &name)
  181. {
  182. QString widgetH = readAll("template/MultipleWidget.h.template");
  183. widgetH = widgetH.arg(widgetName).arg(modelName).arg(serviceName).arg(entityName);
  184. QString widgetCpp = readAll("template/MultipleWidget.cpp.template");
  185. widgetCpp = widgetCpp.arg(widgetName).arg(entityName).arg(modelName).arg(serviceName).arg(name);
  186. QString widgetUi = readAll("template/MultipleWidget.ui.template");
  187. widgetUi = widgetUi.arg(widgetName);
  188. QString path = ui.widgetPath->text().trimmed();
  189. QString widgetHFilename = QString("%1/%2.h").arg(path).arg(widgetName);
  190. write(widgetHFilename, widgetH);
  191. QString widgetCppFilename = QString("%1/%2.cpp").arg(path).arg(widgetName);
  192. write(widgetCppFilename, widgetCpp);
  193. QString widgetUiFilename = QString("%1/%2.ui").arg(path).arg(widgetName);
  194. write(widgetUiFilename, widgetUi);
  195. }