diff --git a/PasswordManager/mainwindow.cpp b/PasswordManager/mainwindow.cpp
index 8fee663..5709114 100644
--- a/PasswordManager/mainwindow.cpp
+++ b/PasswordManager/mainwindow.cpp
@@ -61,6 +61,7 @@ void MainWindow::createRecordsModel()
ui->tableViewRecords->horizontalHeader()->hideSection(0);
ui->tableViewRecords->horizontalHeader()->hideSection(3);
ui->tableViewRecords->horizontalHeader()->hideSection(7);
+ ui->tableViewRecords->horizontalHeader()->hideSection(8);
QString f = QString("status LIKE '%");
f+= QString("true") + QString("%'");
recordsModel->setFilter(f);
@@ -101,6 +102,7 @@ bool MainWindow::initAppWithDatabaseFile(const QString &dbLogin, const QString &
}
createRecordsModel();
createCardsModel();
+ createDirectoriesModel();
return true;
// setUserInterfaceEnabled(true);
}
@@ -265,7 +267,8 @@ void MainWindow::createDatabase(const QString &password)
" url TEXT, /* web url */" \
" note TEXT, /* примечания */" \
" time INTEGER, /* дата добавления */" \
- " status TEXT /* статус удаления */" \
+ " status TEXT, /* статус удаления */" \
+ " directory TEXT /* папка хранения */" \
");"); // исполнение запроса на добавление записи.
query->clear(); // очистка запроса.
@@ -281,17 +284,21 @@ void MainWindow::createDatabase(const QString &password)
" pin TEXT, /* PIN код */" \
" note TEXT, /* примечания */" \
" time INTEGER, /* дата добавления */" \
- " status TEXT /* статус удаления */" \
+ " status TEXT, /* статус удаления */" \
+ " directory TEXT /* папка хранения */" \
");"); // исполнение запроса на добавление записи.
delete crypto;
crypto = new SimpleCrypt(convertPassword(password));
+ query->clear();
query->exec("CREATE TABLE keys(id TEXT PRIMARY KEY NOT NULL, word TEXT);");
query->prepare("INSERT INTO keys(id, word)" \
"VALUES(:id, :word)");
query->bindValue(":id", 0);
query->bindValue(":word", crypto->encryptToString(QString::fromStdString((checkpoint))));
query->exec();
+ query->clear();
+ query->exec("CREATE TABLE directories(id TEXT PRIMARY KEY NOT NULL, name TEXT);");
}
bool MainWindow::checkPassoword(QString word)
@@ -348,6 +355,7 @@ void MainWindow::createCardsModel()
ui->tableViewCards->horizontalHeader()->hideSection(6);
ui->tableViewCards->horizontalHeader()->hideSection(7);
ui->tableViewCards->horizontalHeader()->hideSection(10);
+ ui->tableViewCards->horizontalHeader()->hideSection(11);
QString f = QString("status LIKE '%");
f+= QString("true") + QString("%'");
cardsModel->setFilter(f);
@@ -432,7 +440,7 @@ void MainWindow::deleteCard()
query->clear();
qDebug() << "Удаление строки:";
-// query->exec(QString("DELETE FROM cards WHERE id = %1;").arg(id));
+ // query->exec(QString("DELETE FROM cards WHERE id = %1;").arg(id));
query->prepare("UPDATE cards SET status=:status WHERE id=:id");
query->bindValue(":id", id);
query->bindValue(":status", QString("false"));
@@ -461,7 +469,47 @@ int MainWindow::getCardsCount()
qDebug() << "max" << max;
return max;
}
+int MainWindow::getDirectoriesCount()
+{
+ query->clear();
+ qDebug() << "query->clear();";
+ query->prepare("SELECT * FROM directories");
+ query->exec();
+ QSqlRecord rec = query->record();
+ query->next();
+ int max = query->value(rec.indexOf("id")).toInt();
+ int cur = max;
+ while(query->next())
+ {
+ cur = query->value(rec.indexOf("id")).toInt();
+ if(max < cur)
+ {
+ max = cur;
+ }
+ }
+ qDebug() << "max" << max;
+ return max;
+}
+void MainWindow::createDirectoriesModel()
+{
+ directoriesModel = new QSqlTableModel(this, m_db); // создание редактируемой модели базы данных.
+
+ directoriesModel->setTable("directories"); // создание модели таблицы directories.
+ directoriesModel->select(); // заполнение модели данными.
+
+ // Выбор стратегии сохранения изменений в базе данных:
+ directoriesModel->setEditStrategy(QSqlTableModel::OnFieldChange); // сохранение происходит при переходе к другому полю.
+
+
+ ui->direcoriesTable->setModel(directoriesModel); // соединение модели и ее табличного представления в форме.
+
+ directoriesModel->setHeaderData(0, Qt::Horizontal, tr("number"));
+ directoriesModel->setHeaderData(1, Qt::Horizontal, tr("directories"));
+
+ ui->direcoriesTable->setCurrentIndex(ui->direcoriesTable->model()->index(0,1));
+
+}
// Метод показывающий диалоговое окно для выбора файла для новой базы данных:
void MainWindow::on_actionCreateNewDatabase_triggered()
{
@@ -747,3 +795,18 @@ void MainWindow::on_cardEditCancelButton_clicked()
ui->stackedWidget->setCurrentIndex(2);
}
+
+void MainWindow::on_addDirectoryButton_clicked()
+{
+ query->clear();
+
+ query->prepare("INSERT INTO directories(id, name)" \
+ "VALUES(:id, :name)");
+ // query->bindValue(":id", getDirectoriesCount());
+ // query->bindValue(":name", "dir");
+ query->bindValue(":id", getDirectoriesCount()+1);
+ query->bindValue(":name", "dir");
+ query->exec();
+ directoriesModel->select();
+}
+
diff --git a/PasswordManager/mainwindow.h b/PasswordManager/mainwindow.h
index 7f40080..4e6841d 100644
--- a/PasswordManager/mainwindow.h
+++ b/PasswordManager/mainwindow.h
@@ -43,6 +43,8 @@ public:
void updateCard(Card* r);
void deleteCard();
int getCardsCount();
+ int getDirectoriesCount();
+ void createDirectoriesModel();
private:
// Manager* manager;
Ui::MainWindow *ui;
@@ -56,6 +58,7 @@ private:
QSqlQuery *query; // указатель на запрос.
QSqlTableModel *recordsModel; // указатель на таблицу данных в приложении.
QSqlTableModel *cardsModel;
+ QSqlTableModel *directoriesModel;
Del* del;
// AddSt addst;
@@ -118,5 +121,6 @@ private slots:
void on_deleteButton_3_clicked();
void on_cardEditOkButton_clicked();
void on_cardEditCancelButton_clicked();
+ void on_addDirectoryButton_clicked();
};
#endif // MAINWINDOW_H
diff --git a/PasswordManager/mainwindow.ui b/PasswordManager/mainwindow.ui
index 5d9b9f1..e9853d4 100644
--- a/PasswordManager/mainwindow.ui
+++ b/PasswordManager/mainwindow.ui
@@ -549,7 +549,7 @@
-
+
0
@@ -562,7 +562,7 @@
Add
-
+
90