66#include < QTextStream>
77
88VC_PathsDivider::VC_PathsDivider (QWidget *parent) : QMainWindow(parent) {
9- // Ðàçìåðû è íàçâàíèå îêíà
9+ // Размеры и название окна
1010 setMinimumSize (400 , 75 );
1111 setMaximumSize (400 , 75 );
1212 setWindowTitle (" GTA Vice City Paths Divider" );
1313
14- // Ýëåìåíòû - ñòðîêà , 2 êíîïêè è ïåðåêëþ÷àòåëü
14+ // Элементы - строка , 2 кнопки и переключатель
1515 QLineEdit *lePath = new QLineEdit (this );
1616 QPushButton *btnBrowse = new QPushButton (" Browse..." , this );
1717 QPushButton *btnDivide = new QPushButton (" Divide" , this );
1818 QDoubleSpinBox *sbDivider = new QDoubleSpinBox (this );
1919
20- // Ðàñïîëîæåíèå
20+ // Расположение
2121 lePath->setGeometry (10 , 10 , 300 , 20 );
2222 btnBrowse->setGeometry (320 , 7 , 70 , 25 );
2323 btnDivide->setGeometry (200 , 40 , 190 , 25 );
2424 sbDivider->setGeometry (10 , 42 , 180 , 20 );
2525
26- // Ïðè íàæàòèè íà "Browse..."
26+ // При нажатии на "Browse..."
2727 connect (btnBrowse, &QPushButton::clicked, [=]() {
2828 lePath->setText (QFileDialog::getOpenFileName (this , " Select paths.ipl file" , " " , " IPL files (*.ipl)" ));
2929 });
3030
31- // Ïðè íàæàòèè íà "Divide"
31+ // При нажатии на "Divide"
3232 connect (btnDivide, &QPushButton::clicked, [=]() {
33- btnDivide->setEnabled (false ); // âðåìåííî "âûêëþ÷àåì" êíîïêó
34- if (!lePath->text ().isEmpty () && sbDivider->value () != 0 && sbDivider->value () != 1 ) { // åñëè ñòðîêà íå ïóñòàÿ, à äåëèòåëü íå ðàâåí '0' èëè '1'
33+ btnDivide->setEnabled (false ); // временно "выключаем" кнопку
34+ if (!lePath->text ().isEmpty () && sbDivider->value () != 0 && sbDivider->value () != 1 ) { // если строка не пустая, а делитель не равен '0' или '1'
3535 QFile inputFile (lePath->text ());
36- if (inputFile.open (QIODevice::ReadOnly)) { // åñëè ôàéë îòêðûëñÿ
37- QStringList outputLines; // ñïèñîê ñòðîê (ïîêà ÷òî ïóñòîé ), êîòîðûå áóäóò çàïèñàíû â âûõîäíîé ôàéë
38- while (!inputFile.atEnd ()) { // ïîêà íå äîñòèãíåì îêîí÷àíèÿ ôàéëà
39- outputLines.append (inputFile.readLine ()); // çàïèñûâàåì ñòðîêó â ñïèñîê
40- if (outputLines.last ().startsWith (" path" )) { // åñëè îòêðûâàåòñÿ ñåêöèÿ 'path'
41- outputLines.append (inputFile.readLine ()); // ñëåäóþùàÿ çà 'path' ñòðîêà
42- while (!outputLines.last ().startsWith (" end" )) { // ÷èòàåì ñåêöèþ, ïîêà íå íàòêíåìñÿ íà 'end'
43- for (unsigned int i = 0 ; i < 12 ; ++i) { // ñëåäóþøèå 12 ñòðîê
44- QString line = inputFile.readLine (); // ïîëó÷àåì ñòðîêó
45- QStringList lineValues = line.split (' ,' ); // ðàçáèâàåì íà ÷àñòè
46- for (unsigned int comp = 3 ; comp <= 5 ; ++comp) // äåëèì 4-ûé , 5-ûé , 6-îé êîìïîíåíò (x,y,z)
36+ if (inputFile.open (QIODevice::ReadOnly)) { // если файл открылся
37+ QStringList outputLines; // список строк (пока что пустой ), которые будут записаны в выходной файл
38+ while (!inputFile.atEnd ()) { // пока не достигнем окончания файла
39+ outputLines.append (inputFile.readLine ()); // записываем строку в список
40+ if (outputLines.last ().startsWith (" path" )) { // если открывается секция 'path'
41+ outputLines.append (inputFile.readLine ()); // следующая за 'path' строка
42+ while (!outputLines.last ().startsWith (" end" )) { // читаем секцию, пока не наткнемся на 'end'
43+ for (unsigned int i = 0 ; i < 12 ; ++i) { // следуюшие 12 строк
44+ QString line = inputFile.readLine (); // получаем строку
45+ QStringList lineValues = line.split (' ,' ); // разбиваем на части
46+ for (unsigned int comp = 3 ; comp <= 5 ; ++comp) // делим 4-ый , 5-ый , 6-ой компонент (x,y,z)
4747 lineValues[comp] = QString (' ' ) + QString::number (lineValues[comp].toDouble () / sbDivider->value ());
48- outputLines.append (lineValues.join (' ,' )); // ñîáèðàåì îáðàòíî â îäíó ñòðîêó è äîáàâëÿåì â ñïèñîê
48+ outputLines.append (lineValues.join (' ,' )); // собираем обратно в одну строку и добавляем в список
4949 }
5050 outputLines.append (inputFile.readLine ());
5151 }
@@ -55,15 +55,15 @@ VC_PathsDivider::VC_PathsDivider(QWidget *parent) : QMainWindow(parent) {
5555 QString outputPath = QFileDialog::getSaveFileName (this , " Save to file" , lePath->text (), " IPL files(*.ipl)" );
5656 if (!outputPath.isEmpty ()){
5757 QFile outputFile (outputPath);
58- if (outputFile.open (QIODevice::WriteOnly)) { // åñëè ôàéë îòêðûëñÿ
58+ if (outputFile.open (QIODevice::WriteOnly)) { // если файл открылся
5959 QTextStream outStream (&outputFile);
60- for (QString &str : outputLines) // çàïèñûâàåì ñòðîêè èç ñïèñêà â íîâûé ôàéë
60+ for (QString &str : outputLines) // записываем строки из списка в новый файл
6161 outStream << str;
6262 }
6363 outputFile.close ();
6464 }
6565 }
6666 }
67- btnDivide->setEnabled (true ); // "âêëþ÷àåì" êíîïêó îáðàòíî
67+ btnDivide->setEnabled (true ); // "включаем" кнопку обратно
6868 });
6969}
0 commit comments