198 lines
5.8 KiB
C++
198 lines
5.8 KiB
C++
#include "widget.h"
|
|
#include "ui_widget.h"
|
|
|
|
#include <QFileDialog>
|
|
|
|
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; i<tabs.size(); ++i) {
|
|
myTable *local_tab = new myTable(tabs[i].m_hash);
|
|
tw->addTab(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<QString, QString> 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; i<ui->tabWidget->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; j<tab->rowCount(); 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);
|
|
}
|