From 769e56af2f3d4275fbcf70d9047886d2b947fdd3 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Tue, 14 Apr 2020 21:56:41 +0200 Subject: [PATCH] gui/SearchWindow: adding "Dictionary file" widget. --- gui/SearchWindow.cpp | 71 ++++++++++++++++++++++++++++++-------------- gui/SearchWindow.h | 8 +++-- 2 files changed, 54 insertions(+), 25 deletions(-) diff --git a/gui/SearchWindow.cpp b/gui/SearchWindow.cpp index 0ae0d5e..cbfa290 100644 --- a/gui/SearchWindow.cpp +++ b/gui/SearchWindow.cpp @@ -22,6 +22,7 @@ * SOFTWARE. */ #include +#include #include #include #include @@ -39,6 +40,7 @@ QWidget (parent, flags), m_status ("status"), m_leet_cb ("L33t"), m_dict_lang ("Dictionary Language"), +m_dict_file ("Dictionary File", true), m_btn_exec ("Search"), m_btn_clear ("Clear") { @@ -55,29 +57,30 @@ m_btn_clear ("Clear") // ------------------------ setLayout(&m_layout); m_layout.setColumnStretch(0, 10); + m_layout.setColumnStretch(1, 10); // First row. m_dict_lang.addItems(get_files(CONFIG_DICT_FULL_PATH)); m_layout.addWidget(&m_dict_lang, 0, 0); + m_layout.addWidget(&m_dict_file, 0, 1); - m_layout.addWidget(&m_leet_cb, 0, 1); + m_layout.addWidget(&m_leet_cb, 0, 2); m_num_threads.setValue((int) eoskeygen::KeySearch::max_threads()); m_num_threads.setRange(1, (int) eoskeygen::KeySearch::max_threads()); m_num_threads.setSuffix(" Threads"); - m_layout.addWidget(&m_num_threads, 0, 2); + m_layout.addWidget(&m_num_threads, 0, 3); m_num_results.setValue(10); m_num_results.setRange(1, 99); m_num_results.setSuffix(" Results"); - m_layout.addWidget(&m_num_results, 0, 3); + m_layout.addWidget(&m_num_results, 0, 4); // Second row. - m_layout.addWidget(&m_status, 1, 0, 1, 2); - m_layout.addWidget(&m_txt_search, 1, 0, 1, 2); - m_layout.addWidget(&m_btn_exec, 1, 2); - m_layout.addWidget(&m_btn_clear, 1, 3); - + m_layout.addWidget(&m_status, 1, 0, 1, 3); + m_layout.addWidget(&m_txt_search, 1, 0, 1, 3); + m_layout.addWidget(&m_btn_exec, 1, 3); + m_layout.addWidget(&m_btn_clear, 1, 4); // Third row. m_layout.addWidget(&m_output, 2, 0, 1, 0); @@ -105,7 +108,35 @@ void SearchWindow::initSignals() connect(this, SIGNAL(addOutput(QString)), this, SLOT(output(QString))); - connect(&m_dict_lang, SIGNAL(selectionChanged(QStringList)), this, SLOT(langSelected(QStringList))); + connect(&m_dict_file, SIGNAL(addNewItem()), this, SLOT(langFileAdd())); +} + +void SearchWindow::loadDictionaries() +{ + QStringList list; + eoskeygen::Dictionary tmpDict; + std::string base_path(CONFIG_DICT_FULL_PATH); + + // Clear dictionary first. + m_dict.clear(); + + // Go through all selected languages. + list = m_dict_lang.getSelectedItems(); + for(QStringList::const_iterator it = list.cbegin(); it != list.cend(); it++) { + + // Load and add them to dictionary. + tmpDict.loadFromFile(base_path + "/" + it->toStdString()); + m_dict.add(tmpDict); + } + + // Go through all selected files. + list = m_dict_file.getSelectedItems(); + for(QStringList::const_iterator it = list.cbegin(); it != list.cend(); it++) { + + // Load and add them to dictionary. + tmpDict.loadFromFile(it->toStdString()); + m_dict.add(tmpDict); + } } void SearchWindow::onResult(const struct libeosio::ec_keypair* key, const struct eoskeygen::KeySearch::result& result) @@ -173,6 +204,8 @@ void SearchWindow::search() return; } + loadDictionaries(); + m_ksearch.clear(); m_ksearch.addList(list); m_ksearch.setThreadCount(m_num_threads.value()); @@ -200,22 +233,12 @@ void SearchWindow::output(const QString& html) m_output.verticalScrollBar()->setValue(m_output.verticalScrollBar()->maximum()); } -void SearchWindow::langSelected(QStringList selected) +void SearchWindow::langFileAdd() { - std::string base_path(CONFIG_DICT_FULL_PATH); + QStringList files = QFileDialog::getOpenFileNames(this, + "Select one or more language files"); - // Clear dictionary first. - m_dict.clear(); - - // Go through all selected languages. - for(QStringList::const_iterator it = selected.cbegin(); it != selected.cend(); it++) { - - // Load and add them to dictionary. - eoskeygen::Dictionary dict; - dict.loadFromFile(base_path + "/" + it->toStdString()); - - m_dict.add(dict); - } + m_dict_file.addItems(files, true); } void SearchWindow::searchStarted() @@ -223,6 +246,7 @@ void SearchWindow::searchStarted() m_txt_search.setEnabled(false); m_txt_search.setHidden(true); m_dict_lang.setEnabled(false); + m_dict_file.setEnabled(false); m_leet_cb.setEnabled(false); m_btn_exec.setEnabled(false); m_btn_clear.setEnabled(false); @@ -235,6 +259,7 @@ void SearchWindow::searchFinished() m_txt_search.setEnabled(true); m_txt_search.setHidden(false); m_dict_lang.setEnabled(true); + m_dict_file.setEnabled(true); m_leet_cb.setEnabled(true); m_btn_exec.setEnabled(true); m_btn_clear.setEnabled(true); diff --git a/gui/SearchWindow.h b/gui/SearchWindow.h index 1aff8b1..c57f17f 100644 --- a/gui/SearchWindow.h +++ b/gui/SearchWindow.h @@ -48,6 +48,8 @@ public: private : void initSignals(); + void loadDictionaries(); + private slots: // Start a search @@ -63,8 +65,8 @@ private slots: // Called when a search is done. void searchFinished(); - // Called when dictionary language(s) are selected. - void langSelected(QStringList selected); + // Called when a new language file should be added + void langFileAdd(); signals: void addOutput(const QString& line); @@ -97,6 +99,8 @@ private: MultiSelect m_dict_lang; + MultiSelect m_dict_file; + // Buttons QPushButton m_btn_exec; QPushButton m_btn_clear;