#include "widget.h" #include "ui_widget.h" #include myTable::myTable(const records &hash):QTableWidget() { fill(hash); } void myTable::fill(const records &hash) { setRowCount(hash.size()); setColumnCount(2); int ii=0; for (const auto &rec: hash ) { QTableWidgetItem *item1 = new QTableWidgetItem(rec.first); QTableWidgetItem *item2 = new QTableWidgetItem(rec.second); setItem(ii, 0, item1); setItem(ii, 1, item2); ++ii; } } Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); ui->lineEdit->hide(); ui->pushButton->setIcon(QIcon(":/res/icons/open-file-48.png")); ui->pushButton->setIconSize(QSize(28, 28)); ui->pushButton->setToolTip("Открыть INI файл..."); ui->pushButton_2->setIcon(QIcon(":/res/icons/logout-52.png")); ui->pushButton_2->setIconSize(QSize(26, 22)); ui->pushButton_2->setToolTip("Выход"); ui->pushButton_3->setIcon(QIcon(":/res/icons/save-as-64.png")); ui->pushButton_3->setIconSize(QSize(28, 28)); ui->pushButton_3->setToolTip("Сохранить как..."); ui->pushButton_3->setEnabled(false); ui->pushButton_4->setIcon(QIcon(":/res/icons/save-50.png")); ui->pushButton_4->setIconSize(QSize(26, 26)); ui->pushButton_4->setToolTip("Сохранить"); ui->pushButton_4->setEnabled(false); ui->tabWidget->hide(); setWindowIcon(QIcon()); } Widget::~Widget() { delete ui; } void Widget::on_pushButton_clicked() { QString pathStr = ui->lineEdit->text(); if (pathStr.isEmpty()) pathStr = QDir::currentPath(); QString fileName = QFileDialog::getOpenFileName(this, tr("Выберите файл"), pathStr, tr("INI файлы (*.ini)")); if (!fileName.isEmpty()) { ui->lineEdit->setText(fileName); QTimer::singleShot(200, this, SLOT(genTabs())); } } void Widget::genTabs() { ui->tabWidget->hide(); tabs.clear(); QTabWidget *tw = ui->tabWidget; for (int i=tw->count()-1; i>=0; i--) { QWidget *w = tw->widget(i); tw->removeTab(i); if (w!= nullptr) delete w; } tw->clear(); this->setWindowTitle(ui->lineEdit->text()); QFile file(ui->lineEdit->text()); if (!file.open(QIODevice::ReadOnly)) { QMessageBox::critical(this, "Ошибка", "Ошибка открытия файла"); ui->pushButton_3->setEnabled(false); ui->pushButton_4->setEnabled(false); return; } ui->pushButton_3->setEnabled(true); ui->pushButton_4->setEnabled(true); proceedFile(file); if (file.isOpen()) file.close(); const QIcon nullIcon; for (int i=0; iaddTab(local_tab, nullIcon, tabs[i].m_name); } tw->setCurrentIndex(0); tw->show(); } void Widget::on_lineEdit_returnPressed() { QTimer::singleShot(200, this, SLOT(genTabs())); } void Widget::on_pushButton_2_clicked() { close(); } void Widget::proceedFile(QFile &file) { int numLine = 0; comments.clear(); while (!file.atEnd()) { numLine++; QByteArray line = file.readLine(); QString str = QString::fromLocal8Bit(line.data()); if (str.length()>1 && str.right(2) == "\r\n") str.chop(2); while (!str.isEmpty() && str.back()=='\t') str.chop(1); if (str.isEmpty()) continue; if (str.front()==';') { comments.insert(numLine, str); continue; } if (str.front() == '[') { tabs.push_back(tabChapter(str)); continue; } QString strKey = str.section('=', 0, 0); QString strData = str.section('=', 1); QPair pair(strKey, strData); tabs.back().m_hash.push_back(pair); } } void Widget::on_pushButton_4_clicked() { // saveBtn QString path = ui->lineEdit->text(); saveDataToFile(path); } void Widget::on_pushButton_3_clicked() { // saveAsBtn QString pathStr = ui->lineEdit->text(); if (pathStr.isEmpty()) pathStr = QDir::currentPath(); QString fileName = QFileDialog::getSaveFileName(this, tr("Выберите файл"), pathStr, tr("INI файлы (*.ini)")); if (!fileName.isEmpty()) { saveDataToFile(fileName); } } void Widget::saveDataToFile(QString &name) { QFile fd(name); if (!fd.open(QIODevice::WriteOnly | QIODevice::Text)) { QMessageBox::critical(this, "Ошибка файла", "Ошибка открытия файла на запись"); } int numLine = 1; while (comments.find(numLine)!=comments.end()) { fd.write(comments[numLine++].toLocal8Bit()); fd.write("\n"); } for (int i=0; itabWidget->count(); ++i) { fd.write(ui->tabWidget->tabText(i).toLocal8Bit()); fd.write("\n"); numLine++; while (comments.find(numLine)!=comments.end()) { fd.write(comments[numLine++].toLocal8Bit()); fd.write("\n"); } myTable *tab = (myTable *)ui->tabWidget->widget(i); for (int j=0; jrowCount(); j++) { QString str = tab->item(j, 0)->text() + QString("=") + tab->item(j, 1)->text() + "\n"; fd.write(str.toLocal8Bit()); numLine++; while (comments.find(numLine)!=comments.end()) { fd.write(comments[numLine++].toLocal8Bit()); fd.write("\n"); } } fd.write("\n"); numLine++; } if (fd.isOpen()) fd.close(); setWindowTitle(name); }