From 275ddeec986cdf64c4f62ca329f2f93fcf239833 Mon Sep 17 00:00:00 2001 From: hama Date: Sat, 20 Feb 2016 18:55:37 +0100 Subject: [PATCH] refind: refactoring, German texts * text improvements: tooltips, short cuts... * using base class ReGuiApplication: multi language support * removing base class ReObserver: not used --- appl/refind/aboutdialog.ui | 144 +++-- appl/refind/dialogoptions.ui | 22 +- appl/refind/filefinder.cpp | 27 +- appl/refind/filefinder.hpp | 1 - appl/refind/main.cpp | 2 +- appl/refind/mainwindow.cpp | 642 ++++++++++----------- appl/refind/mainwindow.hpp | 52 +- appl/refind/mainwindow.ui | 94 ++- appl/refind/refind.de.qm | Bin 0 -> 37802 bytes appl/refind/{refind_de.ts => refind.de.ts} | 476 ++++++++++++--- appl/refind/refind.pro | 5 +- gui/ReGuiApplication.cpp | 4 +- gui/ReStateStorage.cpp | 3 +- 13 files changed, 902 insertions(+), 570 deletions(-) create mode 100644 appl/refind/refind.de.qm rename appl/refind/{refind_de.ts => refind.de.ts} (63%) diff --git a/appl/refind/aboutdialog.ui b/appl/refind/aboutdialog.ui index 50d1dd8..905fe04 100644 --- a/appl/refind/aboutdialog.ui +++ b/appl/refind/aboutdialog.ui @@ -7,93 +7,81 @@ 0 0 423 - 289 + 305 - Dialog + About the Program true - - - - 20 - 20 - 381 - 221 - - - - true - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ReFind</span> for searching files in a directory tree.</p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This is a program of the project</p> -<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Re</span>al <span style=" font-weight:600;">Pub</span>lic <span style=" font-weight:600;">Lib</span>rary (RePubLib)</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Sources are public domain and available under</p> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/republib"><span style=" text-decoration: underline; color:#0000ff;">https://github.com/republib</span></a> </p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Implemented in QT (C++) 5.x</p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Icons: Mark James, <a href="http://famfamfam.com"><span style=" text-decoration: underline; color:#0000ff;">http://famfamfam.com</span></a> </p></body></html> - - - false - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - - - - 20 - 250 - 381 - 29 - - - - - - - Version: - - - - - - - 2015.05.00 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - &OK - - - - - +</style></head><body style=" font-family:'Droid Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">ReFind</span><span style=" font-family:'Sans Serif'; font-size:9pt;"> for searching files in a directory tree.</span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">This is a program of the project</span></p> +<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">Re</span><span style=" font-family:'Sans Serif'; font-size:9pt;">al </span><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">Pub</span><span style=" font-family:'Sans Serif'; font-size:9pt;">lic </span><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">Lib</span><span style=" font-family:'Sans Serif'; font-size:9pt;">rary (RePubLib)</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Sources are public domain and available under</span></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/republib"><span style=" font-family:'Sans Serif'; font-size:9pt; text-decoration: underline; color:#0000ff;">https://github.com/republib</span></a><span style=" font-family:'Sans Serif'; font-size:9pt;"> </span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Implemented in QT (C++) 5.x</span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Icons: Mark James, </span><a href="http://famfamfam.com"><span style=" font-family:'Sans Serif'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://famfamfam.com</span></a><span style=" font-family:'Sans Serif'; font-size:9pt;"> </span></p></body></html> + + + false + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + + + + + Version: + + + + + + + 2015.05.00 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + &OK + + + + + + diff --git a/appl/refind/dialogoptions.ui b/appl/refind/dialogoptions.ui index 5566046..e5688f8 100644 --- a/appl/refind/dialogoptions.ui +++ b/appl/refind/dialogoptions.ui @@ -11,7 +11,7 @@ - Dialog + Options @@ -55,12 +55,12 @@ - Neue Zeile + Editor - edit + Shell @@ -95,12 +95,12 @@ - /usr/bin/kate + /usr/bin/kate - ${full} + ${full} @@ -115,12 +115,12 @@ - /usr/bin/bash + /usr/bin/bash - + @@ -290,10 +290,10 @@ - ... + ... - + :/main/icons/layout_add.png:/main/icons/layout_add.png @@ -385,7 +385,9 @@ - + + + buttonBox diff --git a/appl/refind/filefinder.cpp b/appl/refind/filefinder.cpp index f051932..ed1e2ad 100644 --- a/appl/refind/filefinder.cpp +++ b/appl/refind/filefinder.cpp @@ -203,21 +203,21 @@ void FileFinder::run() * Fills the table with the data of the filtered files of a given directory. */ void FileFinder::search(){ - clock_t start = clock(); + qint64 start = QDateTime::currentMSecsSinceEpoch(); setStop(false); m_statistics.clear(); QString path = ReFileUtils::nativePath(m_baseDir); ReQStringUtils::chomp(path, OS_SEPARATOR); fillTable(path, 0); - m_statistics.m_runtimeSeconds = (double) (clock() - start) - / CLOCKS_PER_SEC; + qint64 now = QDateTime::currentMSecsSinceEpoch(); + m_statistics.m_runtimeSeconds = (now - start) / 1000; QString msg; - msg.sprintf( - I18N::s2b(QObject::tr( - "Found: %d dir(s) and %d file(s) with %.6f MByte. Duration of the search: %.3f sec")), - m_statistics.m_dirs, m_statistics.m_files, - m_statistics.m_bytes / 1000000.0, m_statistics.m_runtimeSeconds); - m_guiQueue->pushBack(ReGuiQueueItem(ReGuiQueueItem::ReadyMessage, NULL, msg)); + m_guiQueue->pushBack(ReGuiQueueItem(ReGuiQueueItem::ReadyMessage, NULL, + QObject::tr("Found: %1 dir(s) and %2 file(s) with %3. Runtime: %4") + .arg(m_statistics.m_dirs) + .arg(m_statistics.m_files) + .arg(ReQStringUtils::readableSize(m_statistics.m_bytes)) + .arg(ReQStringUtils::readableDuration(now - start)))); } /** @@ -359,15 +359,6 @@ void FileFinder::setMinSize(const int64_t& minSize){ m_minSize = minSize; } -/** - * Sets the observer object. Will be notified about the search exit. - * @param observer - */ -void FileFinder::setObserver(ReObserver* observer) -{ - m_observer = observer; -} - /** * Sets the date time which is the lower bound. * diff --git a/appl/refind/filefinder.hpp b/appl/refind/filefinder.hpp index 6df6ee0..68e868c 100644 --- a/appl/refind/filefinder.hpp +++ b/appl/refind/filefinder.hpp @@ -66,7 +66,6 @@ private: TextFinder* m_textFinder; QTableWidget* m_table; Statistics m_statistics; - ReObserver* m_observer; ReGuiQueue* m_guiQueue; int m_maxHits; bool m_stop; diff --git a/appl/refind/main.cpp b/appl/refind/main.cpp index 6bc3b2c..d30b85b 100644 --- a/appl/refind/main.cpp +++ b/appl/refind/main.cpp @@ -19,7 +19,7 @@ int main(int argc, char *argv[]){ QApplication app(argc, argv); QString startDir = argc > 1 ? argv[1] : ""; QString homeDir = argc > 2 ? argv[2] : ""; - MainWindow w(startDir, homeDir); + MainWindow w(app, homeDir, startDir); QObject::connect(&app, SIGNAL(aboutToQuit()), &w, SLOT(closing())); diff --git a/appl/refind/mainwindow.cpp b/appl/refind/mainwindow.cpp index 33c0a81..0bd4ff3 100644 --- a/appl/refind/mainwindow.cpp +++ b/appl/refind/mainwindow.cpp @@ -31,7 +31,7 @@ #include #include -const QString VERSION("2015.12.24"); +const QString VERSION("2016.02.20"); inline QString addEsc(const QString& text){ QString rc = text; @@ -48,12 +48,11 @@ inline QString addEsc(const QString& text){ * @param homeDir the base directory for the configuration files * @param parent NULL or the parent widget */ -MainWindow::MainWindow(const QString& startDir, const QString& homeDir, - QWidget *parent) : - QMainWindow(parent), +MainWindow::MainWindow(QApplication& application, const QString& homeDir, + const QString& startDir, QWidget *parent) : + ReGuiApplication(application, "refind", homeDir, 2, 100100100, "de", parent), + ReGuiValidator(), ui(new Ui::MainWindow), - m_statusMessage(NULL), - m_stdLabelBackgroundRole(NULL), m_textFinder(), m_lastBaseDir(), m_horizontalHeader(NULL), @@ -64,65 +63,9 @@ MainWindow::MainWindow(const QString& startDir, const QString& homeDir, m_logger(new ReMemoryLogger()), m_finder(NULL), m_guiQueue(), - m_guiTimer(new QTimer(this)){ - ui->setupUi(this); - initializeHome(); - m_statusMessage = new QLabel(tr("Welcome at refind")); - if (!startDir.isEmpty()) - ui->comboBoxDirectory->setCurrentText(startDir); - if (ui->comboBoxDirectory->currentText().isEmpty()) - ui->comboBoxDirectory->setCurrentText(QDir::currentPath()); - ui->tableWidget->setMainWindow(this); - statusBar()->addWidget(m_statusMessage); - connect(ui->actionStart, SIGNAL(triggered()), this, SLOT(search())); - connect(ui->actionClear, SIGNAL(triggered()), this, SLOT(clear())); - connect(ui->actionStop, SIGNAL(triggered()), this, SLOT(stop())); - connect(ui->pushButtonSearch, SIGNAL(clicked()), this, SLOT(search())); - connect(ui->pushButtonSearch2, SIGNAL(clicked()), this, SLOT(search())); - connect(ui->pushButtonStop, SIGNAL(clicked()), this, SLOT(stop())); - connect(ui->pushButtonStop2, SIGNAL(clicked()), this, SLOT(stop())); - connect(ui->pushButtonClear, SIGNAL(clicked()), this, SLOT(clear())); - connect(ui->actionUp, SIGNAL(triggered()), this, SLOT(up())); - connect(ui->pushButtonUp, SIGNAL(clicked()), this, SLOT(up())); - connect(ui->actionSelectDirectory, SIGNAL(triggered()), this, - SLOT(selectDirectory())); - connect(ui->actionSaveProgramState, SIGNAL(triggered()), this, - SLOT(saveState())); - connect(ui->pushButtonDirectory, SIGNAL(clicked()), this, - SLOT(selectDirectory())); - connect(ui->actionAbout, SIGNAL(triggered()), this, SLOT(about())); - connect(ui->actionOptions, SIGNAL(triggered()), this, SLOT(options())); - connect(ui->actionGetAbsPath, SIGNAL(triggered()), this, - SLOT(absPathToClipboard())); - connect(ui->actionGetFullName, SIGNAL(triggered()), this, - SLOT(fullNameToClipboard())); - connect(ui->actionGetFullName, SIGNAL(triggered()), this, - SLOT(fullNameToClipboard())); - connect(ui->actionReset, SIGNAL(triggered()), this, SLOT(resetParameters())); - connect(ui->actionExport, SIGNAL(triggered()), this, SLOT(exportFiles())); - connect(ui->pushButtonExport, SIGNAL(clicked()), this, SLOT(exportFiles())); - connect(ui->pushButtonExportFile, SIGNAL(clicked()), this, - SLOT(selectExportFile())); - connect(ui->pushButtonFilePlaceholder, SIGNAL(clicked()), this, - SLOT(filePlaceholder())); - connect(ui->pushButtonHeaderPlaceholder, SIGNAL(clicked()), this, - SLOT(headerPlaceholder())); - connect(ui->pushButtonFooterPlaceholder, SIGNAL(clicked()), this, - SLOT(footerPlaceholder())); - connect(ui->actionPreview, SIGNAL(triggered()), this, SLOT(preview())); - connect(ui->pushButtonPreview, SIGNAL(clicked()), this, SLOT(preview())); - - m_horizontalHeader = ui->tableWidget->horizontalHeader(); - connect(m_horizontalHeader, SIGNAL(sectionClicked ( int ) ), - this, SLOT(headerClicked ( int ) )); - connect(m_guiTimer, SIGNAL(timeout()), this, SLOT(guiTimerUpdate())); - ui->tableWidget->setColumnWidth(TC_NODE, 200); - ui->tableWidget->setColumnWidth(TC_EXT, 40); - ui->tableWidget->setColumnWidth(TC_SIZE, 125); - ui->tableWidget->setColumnWidth(TC_MODIFIED, 175); - ui->tableWidget->setColumnWidth(TC_TYPE, 75); - prepareContextMenu(); - m_guiTimer->start(100); + m_startDir(startDir) +{ + initializeGUI(); } /** @@ -132,25 +75,6 @@ MainWindow::~MainWindow(){ delete ui; } -/** - * Starts the about dialog. - */ -void MainWindow::about(){ - AboutDialog dialog(VERSION); - dialog.exec(); -} - -/** - * Puts the absolute path of the current (selected) file into the clipboard. - */ -void MainWindow::absPathToClipboard(){ - int row = ui->tableWidget->currentRow(); - if (row >= 0){ - QClipboard *clipboard = QApplication::clipboard(); - clipboard->setText(buildAbsPath(row)); - } -} - /** * Puts the base directory into the clipboard. */ @@ -277,45 +201,6 @@ void MainWindow::closing(){ saveState(); } -/** - * Clears the table. - */ -void MainWindow::clear() -{ - ui->tableWidget->setRowCount(0); -} - -/** - * Handles the click of the "export" button. - */ -void MainWindow::exportFiles(){ - comboText(ui->comboBoxHeader); - comboText(ui->comboBoxTemplate); - comboText(ui->comboBoxExportFile); - comboText(ui->comboBoxFooter); - if (ui->radioButtonFile->isChecked()){ - QString fn = ui->comboBoxExportFile->currentText(); - FILE* fp = fopen( I18N::s2b(fn), "w"); - if (fp == NULL) - guiError(ui->comboBoxExportFile, tr("not a valid file: ") + fn); - else{ - QTextStream stream(fp); - exportToStream(stream); - fclose(fp); - say(LOG_INFO, tr("result exported to ") + fn); - } - }else{ - QString value; - QTextStream stream(&value); - m_errors = 0; - exportToStream(stream); - QClipboard* clipboard = QApplication::clipboard(); - clipboard->setText(value); - if (m_errors == 0) - say(LOG_INFO, tr("result exported to the clipboard")); - } -} - /** * Exports the found files into a stream with header and footer. * @@ -407,69 +292,6 @@ void MainWindow::fileDragging(){ } } -/** - * Handles the push of "select file placeholder". - */ -void MainWindow::filePlaceholder(){ - DialogFilePlaceholder dialog; - dialog.exec(); - if (!dialog.var().isEmpty()){ - QComboBox* target = ui->comboBoxTemplate; - target->setCurrentText(target->currentText() + dialog.var()); - } -} - -/** - * Handles the push of "select placeholder for the footer". - */ -void MainWindow::footerPlaceholder(){ - handlePlaceholder(ui->comboBoxFooter); -} - -/** - * Puts the absolute full name of the current (selected) file into the clipboard. - */ -void MainWindow::fullNameToClipboard(){ - int row = ui->tableWidget->currentRow(); - if (row >= 0){ - QClipboard* clipboard = QApplication::clipboard(); - QString path = buildAbsPath(row); - ReQStringUtils::ensureLastChar(path, OS_SEPARATOR); - path += cellAsText(row, TC_NODE); - clipboard->setText(path); - } -} - -/** - * Callback method of the GUI timer. - */ -void MainWindow::guiTimerUpdate() -{ - int count = m_guiQueue.count(); - while(count-- > 0){ - ReGuiQueueItem item = m_guiQueue.popFront(); - if (item.m_type == ReGuiQueueItem::Undef) - break; - if (! item.apply()){ - switch (item.m_type){ - case ReGuiQueueItem::ReadyMessage: - say(LOG_INFO, item.m_value); - m_statistics = m_finder->statistics(); - startStop(false); - break; - case ReGuiQueueItem::LogMessage: - say(LOG_INFO, item.m_value); - break; - default: - say(LOG_ERROR, "unknown item type: " + QString::number(item.m_type) - + " " + item.m_value); - break; - } - - } - } -} - /** * Handle the "copy to clipboard" entry from the context menu. * @@ -646,46 +468,64 @@ void MainWindow::handleTableContextMenu(const QPoint& position){ } } /** - * Handles the event "header column clicked". - * - * @param col the col - */ -void MainWindow::headerClicked(int col){ - m_lastOrder = - m_lastOrder == Qt::AscendingOrder ? - Qt::DescendingOrder : Qt::AscendingOrder; - ui->tableWidget->sortItems(col, m_lastOrder); - m_horizontalHeader->setSortIndicatorShown(true); - m_horizontalHeader->setSortIndicator(col, m_lastOrder); -} - -/** - * Handles the push of "select placeholder for the header". - */ -void MainWindow::headerPlaceholder(){ - handlePlaceholder(ui->comboBoxHeader); -} - - -/** - * initializeHomeializes the program home directory. - */ -void MainWindow::initializeHome(){ - if (m_homeDir.isEmpty()){ - m_homeDir = QDir::home().absoluteFilePath(".refind"); - } - - QDir home(m_homeDir); - if (!home.exists()){ - if (!home.mkpath(m_homeDir)){ - m_homeDir = home.tempPath() + "/.refind"; - home.mkpath(m_homeDir); - } - } - if (!m_homeDir.endsWith("/")) - m_homeDir += "/"; - m_storageFile = m_homeDir + "state.conf"; - restoreState(); + * Builds the GUI from the *.ui file. + */ +void MainWindow::initializeGUI(){ + ui->setupUi(this); + initializeGuiElements(); + if (!m_startDir.isEmpty()) + ui->comboBoxDirectory->setCurrentText(m_startDir); + if (ui->comboBoxDirectory->currentText().isEmpty()) + ui->comboBoxDirectory->setCurrentText(QDir::currentPath()); + ui->tableWidget->setMainWindow(this); + connect(ui->actionStart, SIGNAL(triggered()), this, SLOT(onSearch())); + connect(ui->actionClear, SIGNAL(triggered()), this, SLOT(onClear())); + connect(ui->actionStop, SIGNAL(triggered()), this, SLOT(onStop())); + connect(ui->pushButtonSearch, SIGNAL(clicked()), this, SLOT(onSearch())); + connect(ui->pushButtonSearch2, SIGNAL(clicked()), this, SLOT(onSearch())); + connect(ui->pushButtonStop, SIGNAL(clicked()), this, SLOT(onStop())); + connect(ui->pushButtonStop2, SIGNAL(clicked()), this, SLOT(onStop())); + connect(ui->pushButtonClear, SIGNAL(clicked()), this, SLOT(onClear())); + connect(ui->actionUp, SIGNAL(triggered()), this, SLOT(onUp())); + connect(ui->pushButtonUp, SIGNAL(clicked()), this, SLOT(onUp())); + connect(ui->actionSelectDirectory, SIGNAL(triggered()), this, + SLOT(onSelectDirectory())); + connect(ui->actionSaveProgramState, SIGNAL(triggered()), this, + SLOT(saveState())); + connect(ui->pushButtonDirectory, SIGNAL(clicked()), this, + SLOT(onSelectDirectory())); + connect(ui->actionAbout, SIGNAL(triggered()), this, SLOT(onAbout())); + connect(ui->actionOptions, SIGNAL(triggered()), this, SLOT(onOptions())); + connect(ui->actionGetAbsPath, SIGNAL(triggered()), this, + SLOT(onAbsPathToClipboard())); + connect(ui->actionGetFullName, SIGNAL(triggered()), this, + SLOT(onFullNameToClipboard())); + connect(ui->actionGetFullName, SIGNAL(triggered()), this, + SLOT(onFullNameToClipboard())); + connect(ui->actionReset, SIGNAL(triggered()), this, SLOT(onResetParameters())); + connect(ui->actionExport, SIGNAL(triggered()), this, SLOT(onExportFiles())); + connect(ui->pushButtonExport, SIGNAL(clicked()), this, SLOT(onExportFiles())); + connect(ui->pushButtonExportFile, SIGNAL(clicked()), this, + SLOT(onSelectExportFile())); + connect(ui->pushButtonFilePlaceholder, SIGNAL(clicked()), this, + SLOT(onFilePlaceholder())); + connect(ui->pushButtonHeaderPlaceholder, SIGNAL(clicked()), this, + SLOT(onHeaderPlaceholder())); + connect(ui->pushButtonFooterPlaceholder, SIGNAL(clicked()), this, + SLOT(onFooterPlaceholder())); + connect(ui->actionPreview, SIGNAL(triggered()), this, SLOT(onPreview())); + connect(ui->pushButtonPreview, SIGNAL(clicked()), this, SLOT(onPreview())); + + m_horizontalHeader = ui->tableWidget->horizontalHeader(); + connect(m_horizontalHeader, SIGNAL(sectionClicked ( int ) ), + this, SLOT(onHeaderClicked ( int ) )); + ui->tableWidget->setColumnWidth(TC_NODE, 200); + ui->tableWidget->setColumnWidth(TC_EXT, 40); + ui->tableWidget->setColumnWidth(TC_SIZE, 125); + ui->tableWidget->setColumnWidth(TC_MODIFIED, 175); + ui->tableWidget->setColumnWidth(TC_TYPE, 75); + prepareContextMenu(); + restoreState(); } /** @@ -693,20 +533,11 @@ void MainWindow::initializeHome(){ * * @param message description of the state change * @return SUCCESS - */ + * / ReObserver::ReturnCode MainWindow::notify(const char* message) { return ReObserver::SUCCESS; -} - -/** - * Starts the options dialog. - */ -void MainWindow::options(){ - DialogOptions dialog(m_contextHandlers, NULL); - dialog.exec(); -} - +} */ /** * Sets the properties of the file finder. @@ -718,7 +549,6 @@ void MainWindow::populateFinder(FileFinder& finder){ ui->tableWidget->setRowCount(0); m_statistics.clear(); } - finder.setObserver(this); finder.setGuiQueue(&this->m_guiQueue); finder.setBaseDir(comboText(ui->comboBoxDirectory)); finder.setTable(ui->tableWidget); @@ -776,10 +606,166 @@ if (!error.isEmpty()){ } } +/** + * Starts the about dialog. + */ +void MainWindow::onAbout(){ + AboutDialog dialog(VERSION); + dialog.exec(); +} + +/** + * Puts the absolute path of the current (selected) file into the clipboard. + */ +void MainWindow::onAbsPathToClipboard(){ + int row = ui->tableWidget->currentRow(); + if (row >= 0){ + QClipboard *clipboard = QApplication::clipboard(); + clipboard->setText(buildAbsPath(row)); + } +} + +/** + * Clears the table. + */ +void MainWindow::onClear() +{ + ui->tableWidget->setRowCount(0); +} + +/** + * Handles the click of the "export" button. + */ +void MainWindow::onExportFiles(){ + comboText(ui->comboBoxHeader); + comboText(ui->comboBoxTemplate); + comboText(ui->comboBoxExportFile); + comboText(ui->comboBoxFooter); + if (ui->radioButtonFile->isChecked()){ + QString fn = ui->comboBoxExportFile->currentText(); + FILE* fp = fopen( I18N::s2b(fn), "w"); + if (fp == NULL) + guiError(ui->comboBoxExportFile, tr("not a valid file: ") + fn); + else{ + QTextStream stream(fp); + exportToStream(stream); + fclose(fp); + say(LOG_INFO, tr("result exported to ") + fn); + } + }else{ + QString value; + QTextStream stream(&value); + m_errors = 0; + exportToStream(stream); + QClipboard* clipboard = QApplication::clipboard(); + clipboard->setText(value); + if (m_errors == 0) + say(LOG_INFO, tr("result exported to the clipboard")); + } +} + +/** + * Handles the push of "select file placeholder". + */ +void MainWindow::onFilePlaceholder(){ + DialogFilePlaceholder dialog; + dialog.exec(); + if (!dialog.var().isEmpty()){ + QComboBox* target = ui->comboBoxTemplate; + target->setCurrentText(target->currentText() + dialog.var()); + } +} + +/** + * Handles the push of "select placeholder for the footer". + */ +void MainWindow::onFooterPlaceholder(){ + handlePlaceholder(ui->comboBoxFooter); +} + +/** + * Puts the absolute full name of the current (selected) file into the clipboard. + */ +void MainWindow::onFullNameToClipboard(){ + int row = ui->tableWidget->currentRow(); + if (row >= 0){ + QClipboard* clipboard = QApplication::clipboard(); + QString path = buildAbsPath(row); + ReQStringUtils::ensureLastChar(path, OS_SEPARATOR); + path += cellAsText(row, TC_NODE); + clipboard->setText(path); + } +} + +/** + * Handles the event "header column clicked". + * + * @param col the col + */ +void MainWindow::onHeaderClicked(int col){ + m_lastOrder = + m_lastOrder == Qt::AscendingOrder ? + Qt::DescendingOrder : Qt::AscendingOrder; + ui->tableWidget->sortItems(col, m_lastOrder); + m_horizontalHeader->setSortIndicatorShown(true); + m_horizontalHeader->setSortIndicator(col, m_lastOrder); +} + +/** + * Handles the push of "select placeholder for the header". + */ +void MainWindow::onHeaderPlaceholder(){ + handlePlaceholder(ui->comboBoxHeader); +} + +/** + * The GUI timer is triggered. + */ +void MainWindow::onGuiTimerUpdate() +{ + int count = m_guiQueue.count(); + while(count-- > 0){ + ReGuiQueueItem item = m_guiQueue.popFront(); + if (item.m_type == ReGuiQueueItem::Undef) + break; + if (! item.apply()){ + switch (item.m_type){ + case ReGuiQueueItem::ReadyMessage: + say(LOG_INFO, item.m_value); + m_statistics = m_finder->statistics(); + startStop(false); + break; + case ReGuiQueueItem::LogMessage: + say(LOG_INFO, item.m_value); + break; + default: + say(LOG_ERROR, "unknown item type: " + QString::number(item.m_type) + + " " + item.m_value); + break; + } + } + } +} + +/** + * The language has been changed. + */ +void MainWindow::onLanguageChange(){ + initializeGUI(); +} + +/** + * Starts the options dialog. + */ +void MainWindow::onOptions(){ + DialogOptions dialog(m_contextHandlers, NULL); + dialog.exec(); +} + /** * Shows a preview of the result export. */ -void MainWindow::preview(){ +void MainWindow::onPreview(){ QString value; QTextStream stream(&value); exportToStream(stream, 1); @@ -791,27 +777,12 @@ msgBox.setDefaultButton(QMessageBox::Save); msgBox.exec(); } -/** - * Replaces the placeholders valid in header and footer. - * - * @param text the text to convert - * @return text with the esc sequences replaced - */ -QString MainWindow::replaceGlobalPlaceholders(QComboBox* combo, -QMap & placeholders){ -QString rc = combo->currentText(); -QString error; -if (!ReQStringUtils::replacePlaceholders(rc, placeholders, &error)) - guiError(combo, error); -return replaceEscSequences(rc); -} - /** * @brief Handles the action "reset parameters". * * Most of the filter parameters will be set to the default. */ -void MainWindow::resetParameters(){ +void MainWindow::onResetParameters(){ ui->comboBoxFilePatterns->setCurrentText(""); ui->comboBoxMaxDepth->setCurrentText(""); ui->comboBoxMaxSize->setCurrentText(""); @@ -828,6 +799,91 @@ ui->checkBoxRegExpr->setChecked(false); ui->checkBoxTextIgnoreCase->setChecked(false); } +/** + * Handles the "search" button. + */ +void MainWindow::onSearch(){ + m_errors = 0; + QString path = comboText(ui->comboBoxDirectory); + QFileInfo dir(path); + if (!dir.exists()) + guiError(ui->comboBoxDirectory, tr("directory not found: ") + path); + else if (!dir.isDir()) + guiError(ui->comboBoxDirectory, tr("not a directory: ") + path); + else{ + QApplication::setOverrideCursor (QCursor(Qt::WaitCursor)); + ui->pushButtonSearch->setEnabled(false); + ui->pushButtonSearch2->setEnabled(false); + if (m_finder == NULL) + m_finder = new FileFinder; + populateFinder(*m_finder); + if (! ui->checkBoxAppend->isChecked()) + onClear(); + startStop(true); + m_finder->start(); + QApplication::restoreOverrideCursor(); + } +} +/** + * Handles the push of the button "select directory". + */ +void MainWindow::onSelectDirectory(){ +QString dir = QFileDialog::getExistingDirectory(this, tr("Select Directory"), + ui->comboBoxDirectory->currentText(), QFileDialog::ShowDirsOnly); +if (!dir.isEmpty()) + ui->comboBoxDirectory->setCurrentText(ReFileUtils::nativePath(dir)); +} + +/** + * Calls the file selection dialog. + */ +void MainWindow::onSelectExportFile(){ +QString name = QFileDialog::getSaveFileName(this, tr("Select Export File"), + ui->comboBoxExportFile->currentText()); +if (!name.isEmpty()) + ui->comboBoxExportFile->setCurrentText(name); + +} + +/** + * Handles the "search" button. + */ +void MainWindow::onStop(){ + m_finder->setStop(true); + startStop(false); +} + +/** + * @brief Handles the "up" button: go to the parent directory. + */ +void MainWindow::onUp(){ +QString path = ui->comboBoxDirectory->currentText(); +QDir dir(path); +if (dir.exists()){ + dir.cdUp(); + if (dir.exists()){ + path = ReFileUtils::nativePath(dir.absolutePath()); + ui->comboBoxDirectory->setEditText(path); + setInHistory(ui->comboBoxDirectory, path); + } +} +} + +/** + * Replaces the placeholders valid in header and footer. + * + * @param text the text to convert + * @return text with the esc sequences replaced + */ +QString MainWindow::replaceGlobalPlaceholders(QComboBox* combo, +QMap & placeholders){ +QString rc = combo->currentText(); +QString error; +if (!ReQStringUtils::replacePlaceholders(rc, placeholders, &error)) + guiError(combo, error); +return replaceEscSequences(rc); +} + /** * Reads the history of the widget values and other parameters and set it. */ @@ -876,51 +932,6 @@ m_contextHandlers.save(storage); storage.close(); } -/** - * Handles the "search" button. - */ -void MainWindow::search(){ - m_errors = 0; - QString path = comboText(ui->comboBoxDirectory); - QFileInfo dir(path); - if (!dir.exists()) - guiError(ui->comboBoxDirectory, tr("directory not found: ") + path); - else if (!dir.isDir()) - guiError(ui->comboBoxDirectory, tr("not a directory: ") + path); - else{ - QApplication::setOverrideCursor (QCursor(Qt::WaitCursor)); - ui->pushButtonSearch->setEnabled(false); - ui->pushButtonSearch2->setEnabled(false); - if (m_finder == NULL) - m_finder = new FileFinder; - populateFinder(*m_finder); - if (! ui->checkBoxAppend->isChecked()) - clear(); - startStop(true); - m_finder->start(); - QApplication::restoreOverrideCursor(); - } -} -/** - * Handles the push of the button "select directory". - */ -void MainWindow::selectDirectory(){ -QString dir = QFileDialog::getExistingDirectory(this, tr("Select Directory"), - ui->comboBoxDirectory->currentText(), QFileDialog::ShowDirsOnly); -if (!dir.isEmpty()) - ui->comboBoxDirectory->setCurrentText(ReFileUtils::nativePath(dir)); -} - -/** - * Calls the file selection dialog. - */ -void MainWindow::selectExportFile(){ -QString name = QFileDialog::getSaveFileName(this, tr("Select Export File"), - ui->comboBoxExportFile->currentText()); -if (!name.isEmpty()) - ui->comboBoxExportFile->setCurrentText(name); - -} /** * Issues a message in the status line. @@ -933,12 +944,7 @@ if (!name.isEmpty()) */ bool MainWindow::say(ReLoggerLevel level, const QString& message){ bool rc = level >= LOG_INFO; - if (m_stdLabelBackgroundRole == NULL) - m_stdLabelBackgroundRole = new QPalette::ColorRole( - m_statusMessage->backgroundRole()); - m_statusMessage->setBackgroundRole( - ! rc ? QPalette::HighlightedText : *m_stdLabelBackgroundRole); - m_statusMessage->setText(message); + setStatusMessage(level, message); return rc; } /** @@ -955,27 +961,3 @@ void MainWindow::startStop(bool start){ ui->pushButtonStop2->setEnabled(start); } -/** - * Handles the "search" button. - */ -void MainWindow::stop(){ - m_finder->setStop(true); - startStop(false); -} - -/** - * @brief Handles the "up" button: go to the parent directory. - */ -void MainWindow::up(){ -QString path = ui->comboBoxDirectory->currentText(); -QDir dir(path); -if (dir.exists()){ - dir.cdUp(); - if (dir.exists()){ - path = ReFileUtils::nativePath(dir.absolutePath()); - ui->comboBoxDirectory->setEditText(path); - setInHistory(ui->comboBoxDirectory, path); - } -} -} - diff --git a/appl/refind/mainwindow.hpp b/appl/refind/mainwindow.hpp index c94ce6f..cbf7ce7 100644 --- a/appl/refind/mainwindow.hpp +++ b/appl/refind/mainwindow.hpp @@ -36,13 +36,13 @@ enum TableColumns { }; class FileFinder; -class MainWindow: public QMainWindow, public ReGuiValidator, protected ReObserver{ +class MainWindow: public ReGuiApplication, public ReGuiValidator{ Q_OBJECT public: - explicit MainWindow(const QString& startDir, const QString& homeDir, - QWidget *parent = 0); + explicit MainWindow(QApplication& application, const QString& homeDir, + const QString& startDir, QWidget *parent = 0); ~MainWindow(); public: @@ -51,33 +51,32 @@ protected: void findFiles(); void populateFinder(FileFinder& finder); private slots: - void about(); - void absPathToClipboard(); void baseDirToClipboard(); - void clear(); void closing(); - void exportFiles(); - void filePlaceholder(); - void footerPlaceholder(); - void fullNameToClipboard(); - void guiTimerUpdate(); void handleTableContextMenu(const QPoint& position); - void headerClicked(int col); - void headerPlaceholder(); - virtual ReturnCode notify(const char* message); - void options(); - void preview(); - void resetParameters(); + void onAbout(); + void onAbsPathToClipboard(); + void onClear(); + void onExportFiles(); + void onFilePlaceholder(); + void onFooterPlaceholder(); + void onFullNameToClipboard(); + void onHeaderClicked(int col); + void onHeaderPlaceholder(); + virtual void onGuiTimerUpdate(); + virtual void onLanguageChange(); + void onOptions(); + void onPreview(); + void onResetParameters(); + void onSearch(); + void onSelectDirectory(); + void onSelectExportFile(); + void onStop(); + void onUp(); virtual bool say(ReLoggerLevel level, const QString& message); void saveState(); - void search(); - void selectDirectory(); - void selectExportFile(); - void stop(); - void up(); private: - void prepareContextMenu(); QString buildAbsPath(int row, bool withNode = false, bool uriFormat = false); QDir::Filters buildFileTypes(); void buildGlobalPlaceholders(QMap & hash); @@ -87,7 +86,8 @@ private: void handleExternalCommand(ContextHandler* handler, const QString& parent, const QString& full, const QString& node); void handlePlaceholder(QComboBox* target); - void initializeHome(); + void initializeGUI(); + void prepareContextMenu(); void prepareTextFind(); QString replaceGlobalPlaceholders(QComboBox* combo, QMap & placeholders); @@ -95,8 +95,6 @@ private: void startStop(bool start); private: Ui::MainWindow *ui; - QLabel* m_statusMessage; - QPalette::ColorRole* m_stdLabelBackgroundRole; TextFinder m_textFinder; // the directory of the last search QDir m_lastBaseDir; @@ -111,7 +109,7 @@ private: ReLogger* m_logger; FileFinder* m_finder; ReGuiQueue m_guiQueue; - QTimer* m_guiTimer; + QString m_startDir; }; #endif // MAINWINDOW_HPP diff --git a/appl/refind/mainwindow.ui b/appl/refind/mainwindow.ui index de51ca8..c322474 100644 --- a/appl/refind/mainwindow.ui +++ b/appl/refind/mainwindow.ui @@ -83,7 +83,7 @@ :/main/icons/action_go.png:/main/icons/action_go.gif - Ctrl+F + Ctrl+F true @@ -97,6 +97,9 @@ + + Normal files will be found + Files @@ -136,6 +139,9 @@ 16777215 + + Case insensitiv text search + Ignore case @@ -179,6 +185,9 @@ 0 + + Only files containing this text (or text pattern) will be found + true @@ -208,6 +217,9 @@ 16777215 + + Directories will be found + Dirs @@ -230,6 +242,9 @@ 16777215 + + Text pattern is a regular expression (Perl syntax) + Regular expr. @@ -256,6 +271,9 @@ 16777215 + + Symbolic links will be found + Links @@ -278,6 +296,9 @@ 16777215 + + Files containing ASCII NUL will be found too + Binary files @@ -285,6 +306,9 @@ + + If this count of hits is reachted the search stops + true @@ -310,10 +334,10 @@ - Change to the parent directory + Go to the parent directory - &Up + ^ @@ -339,7 +363,7 @@ Select directory by a dialog box - + ... @@ -564,13 +588,16 @@ - &Run search + &Run search :/main/icons/action_go.gif :/main/icons/action_go.png:/main/icons/action_go.gif + + Ctrl+F + @@ -586,7 +613,7 @@ :/main/icons/stop.png:/main/icons/stop.png - Ctrl+T + Pause @@ -649,7 +676,7 @@ :/main/icons/database_save.png:/main/icons/database_save.png - Alt+E + Ctrl+E @@ -667,6 +694,9 @@ ... + + + @@ -703,6 +733,9 @@ ... + + + @@ -726,6 +759,9 @@ ... + + + @@ -757,6 +793,9 @@ :/main/icons/eye.png:/main/icons/eye.png + + Ctrl+Shift+V + @@ -790,7 +829,7 @@ true - refind.result.txt + refind.result.txt @@ -808,6 +847,9 @@ ... + + + @@ -853,7 +895,7 @@ Size (MByte) - AlignRight|AlignBottom + AlignTrailing|AlignBottom @@ -1011,7 +1053,7 @@ Exits the program - Ctrl+X + Ctrl+Shift+X @@ -1026,7 +1068,7 @@ Search the files with the given properties - Ctrl+R + Ctrl+R @@ -1034,7 +1076,7 @@ &About - Ctrl+Shift+A + Ctrl+Shift+A @@ -1046,7 +1088,7 @@ &Export - Ctrl+E + Ctrl+E @@ -1061,7 +1103,7 @@ Change to the parent directory - Ctrl+U + Ctrl+U @@ -1076,7 +1118,7 @@ Select directory with a dialog - Ctrl+D + Ctrl+D @@ -1091,7 +1133,7 @@ Puts the absolute path of the selected file into the clipboard - Ctrl+Shift+P + Ctrl+Shift+P @@ -1104,7 +1146,7 @@ &full name to clipboard - Ctrl+N + Ctrl+N @@ -1119,7 +1161,7 @@ Puts the base directory into the clipboard - Ctrl+B + Ctrl+B @@ -1134,7 +1176,7 @@ Sets the file filter properties to the default - Ctrl+Shift+R + Ctrl+Shift+R @@ -1149,7 +1191,7 @@ Saves the program state (position, history...) to a file - Ctrl+Shift+S + Ctrl+Shift+S @@ -1164,7 +1206,7 @@ Dialog for changing the options - Ctrl+Shift+O + Ctrl+Shift+O @@ -1179,7 +1221,7 @@ Shows a preview of the result export - Ctrl+Shift+V + Ctrl+Shift+V @@ -1190,7 +1232,7 @@ Clears the file table - Ctrl+L + Ctrl+L @@ -1204,6 +1246,9 @@ Start the search + + Ctrl+F + @@ -1219,6 +1264,9 @@ Stop the current search + + Pause + diff --git a/appl/refind/refind.de.qm b/appl/refind/refind.de.qm new file mode 100644 index 0000000000000000000000000000000000000000..3b2076fa31947828dcfd669d5b2c02bd716a4b9b GIT binary patch literal 37802 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 TAboutDialog Dialog - Dialog + Dialog <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> @@ -29,7 +29,7 @@ p, li { white-space: pre-wrap; } &OK - &OK + &OK <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> @@ -43,6 +43,38 @@ p, li { white-space: pre-wrap; } <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/republib"><span style=" text-decoration: underline; color:#0000ff;">https://github.com/republib</span></a> </p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Implemented in QT (C++) 5.x</p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Icons: Mark James, <a href="http://famfamfam.com"><span style=" text-decoration: underline; color:#0000ff;">http://famfamfam.com</span></a> </p></body></html> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">ReFind</span>: Suche nach Dateien in einem Verzeichnisbaum.</p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Dies ist ein Programm des Projekts</p> +<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Re</span>al <span style=" font-weight:600;">Pub</span>lic <span style=" font-weight:600;">Lib</span>rary (RePubLib)</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Die Quellen sind frei (public domain) und erhältlich unter</p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/republib"><span style=" text-decoration: underline; color:#0000ff;">https://github.com/republib</span></a> </p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Implementiert in QT (C++) 5.x</p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Icons: Mark James, <a href="http://famfamfam.com"><span style=" text-decoration: underline; color:#0000ff;">http://famfamfam.com</span></a> </p></body></html> + + + Version: + Version: + + + 2015.05.00 + 2015.05.00 + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Droid Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">ReFind</span><span style=" font-family:'Sans Serif'; font-size:9pt;"> for searching files in a directory tree.</span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">This is a program of the project</span></p> +<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">Re</span><span style=" font-family:'Sans Serif'; font-size:9pt;">al </span><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">Pub</span><span style=" font-family:'Sans Serif'; font-size:9pt;">lic </span><span style=" font-family:'Sans Serif'; font-size:9pt; font-weight:600;">Lib</span><span style=" font-family:'Sans Serif'; font-size:9pt;">rary (RePubLib)</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Sources are public domain and available under</span></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/republib"><span style=" font-family:'Sans Serif'; font-size:9pt; text-decoration: underline; color:#0000ff;">https://github.com/republib</span></a><span style=" font-family:'Sans Serif'; font-size:9pt;"> </span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Implemented in QT (C++) 5.x</span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Icons: Mark James, </span><a href="http://famfamfam.com"><span style=" font-family:'Sans Serif'; font-size:9pt; text-decoration: underline; color:#0000ff;">http://famfamfam.com</span></a><span style=" font-family:'Sans Serif'; font-size:9pt;"> </span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -55,16 +87,20 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Implementiert in QT (C++) 5.x</p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Icons: Mark James, <a href="http://famfamfam.com"><span style=" text-decoration: underline; color:#0000ff;">http://famfamfam.com</span></a> </p></body></html> + + About the Program + Über das Programm + DialogFilePlaceHolders File Specific Placeholders - Dateispezifische Platzhalter + Dateispezifische Platzhalter New Row - Neue Zeile + Neue Zeile Placeholder @@ -78,14 +114,6 @@ p, li { white-space: pre-wrap; } Description Beschreibung - - ${base} - - - - /home/bob - - base directory Basisverzeichnis @@ -96,7 +124,7 @@ p, li { white-space: pre-wrap; } relative path - relativer Pfad + relativer Pfad filename with extension @@ -124,7 +152,7 @@ p, li { white-space: pre-wrap; } \t - \t + \t tabulator @@ -134,6 +162,10 @@ p, li { white-space: pre-wrap; } newline Zeilenwechsel + + path without node + Pfad ohne Dateinamen + DialogGlobalPlaceholder @@ -202,6 +234,125 @@ p, li { white-space: pre-wrap; } umgekehrter Schrägstrich (Backslash) + + DialogOptions + + Dialog + Dialog + + + Programs (Context Menu) + Programme (Kontextmenü) + + + File Type + Dateityp + + + Titel (Menu) + Titel (Menü) + + + Program + Programm + + + Arguments + Argumente + + + Directory Mode + Verzeichnismodus + + + Editor + Editor + + + Shell + Shell + + + &Add/change + Hinzufügen/Ändern + + + D&elete + Lösch&en + + + &Up + A&uf + + + &Down + Runter + + + Current Entry + Aktuelles Element + + + File Type: + Dateityp: + + + Title: + Titel: + + + <html><head/><body><p>Program:</p></body></html> + <html><head/><body><p>Programm:</p></body></html> + + + Arguments: + Argumente + + + Directory mode + Verzeichnismodus + + + File + Datei + + + Directory + Verzeichnis + + + Both + Beide + + + ... + ... + + + Parent directory + Vaterverzeichnis + + + Entry (if directory) + Eintrag (wenn Verzeichnis) + + + Base directory + Basisverzeichnis + + + Tab 2 + Tab 2 + + + Select Program File + Wähle Programmdatei + + + Options + Optionen + + MainWindow @@ -226,19 +377,19 @@ p, li { white-space: pre-wrap; } Hidden - Versteckt + Versteckt Write - Schreibbar + Schreibbar Read - Lesbar + Lesbar Exec. - Ausführbar + Ausführbar Text Pattern: @@ -250,7 +401,7 @@ p, li { white-space: pre-wrap; } <html><head/><body><p>A comma (',') separated list of filename patterns</p><p>Example: *.txt,*.odt</p></body></html> - <html><head/><body><p>Eine kommagetrennte (',') Liste von Dateinamensmuster</p><p>Beispiel: *.txt,*.odt</p></body></html> + <html><head/><body><p>Eine kommagetrennte (',') Liste von Dateinamensmuster</p><p>Beispiel: *.txt,*.odt</p></body></html> Regular expr. @@ -270,7 +421,7 @@ p, li { white-space: pre-wrap; } Ctrl+F - + Ctrl+F Change to the parent directory @@ -290,7 +441,7 @@ p, li { white-space: pre-wrap; } ignore case - ign. Groß/Klein. + ign. Groß/Klein. Files @@ -306,7 +457,7 @@ p, li { white-space: pre-wrap; } <html><head/><body><p>Formula of the minimal size.</p><p>Example: 3*512ki + 5MiByte + -2^10</p><p><br/></p><p>A non zero value excludes automatically directories.</p><p>A formula is a arithmetic expression with the operators '+', '*' and '^' (potentioning).</p><p>Usual precedence: '+' &lt; '*' &lt; '^'</p><p>The operands are integer numbers with potentionally a unit.</p><p>Units: factor 1000: KByte, MByte, GByte, TByte<br/>factor 1024: KiByte, MiByte, GiByte, TiByte</p><p><br/></p></body></html> - <html><head/><body><p>Formel für die Minimalgröße.</p><p>Beispiel: 3*512ki + 5MiByte + -2^10</p><p><br/></p><p>Ein Wert größer 0 schließt automatisch Verzeichnisse aus.</p><p>Eine Formel ist ein arithmetischer Ausdruck mit den Operatoren '+', '*' und '^' (Potenzierung).</p><p>Übliche Vorrangregelung: '+' &lt; '*' &lt; '^'</p><p>Die Operanden sind Ganzzahlen mit evt. einer Einheit</p><p>Einheiten: Faktor 1000: KByte, MByte, GByte, TByte<br/>Faktor 1024: KiByte, MiByte, GiByte, TiByte</p><p><br/></p></body></html> + <html><head/><body><p>Formel für die Minimalgröße.</p><p>Beispiel: 3*512ki + 5MiByte + -2^10</p><p><br/></p><p>Ein Wert größer 0 schließt automatisch Verzeichnisse aus.</p><p>Eine Formel ist ein arithmetischer Ausdruck mit den Operatoren '+', '*' und '^' (Potenzierung).</p><p>Übliche Vorrangregelung: '+' &lt; '*' &lt; '^'</p><p>Die Operanden sind Ganzzahlen mit evt. einer Einheit</p><p>Einheiten: Faktor 1000: KByte, MByte, GByte, TByte<br/>Faktor 1024: KiByte, MiByte, GiByte, TiByte</p><p><br/></p></body></html> Younger than: @@ -318,7 +469,7 @@ p, li { white-space: pre-wrap; } Min. Depth: - Min. Tiefe: + Min. Tiefe: <html><head/><body><p>Minimal distance of the subdirectory containing the found file from the base directory.</p><p>Example:<br/>Min.Depth: 1<br/>Direcory: /home</p><p>/home/x will not be found</p><p>/home/dir/x will be found</p></body></html> @@ -342,7 +493,7 @@ p, li { white-space: pre-wrap; } Max. Depth: - Max. Tiefe: + Max. Tiefe: <html><head/><body><p>Maximum distance of the subdirectory containing the found file from the base directory.</p><p>Example:<br/>Max. Depth: 0<br/>It found no files in subdirectories.</p></body></html> @@ -350,7 +501,7 @@ p, li { white-space: pre-wrap; } Excluded Dirs: - Ausschlussverzeichnisse: + Ausschlussverzeichnisse: <html><head/><body><p>a comma (',') separated list of directory names not entered for the search.</p><p>Example: .git,.cache</p></body></html> @@ -362,7 +513,7 @@ p, li { white-space: pre-wrap; } Export file: - Exportdatei: + Exportdatei: Template of a line for each file @@ -390,7 +541,7 @@ p, li { white-space: pre-wrap; } refind.result.txt - + refind.result.txt Select the export file @@ -402,7 +553,7 @@ p, li { white-space: pre-wrap; } Alt+E - + Alt+E File footer: @@ -474,11 +625,11 @@ p, li { white-space: pre-wrap; } toolBar - + Werkzeugmenü toolBar_2 - + toolBar_2 E&xit @@ -488,34 +639,14 @@ p, li { white-space: pre-wrap; } Exits the program Beendet das Programm - - Ctrl+X - - Search the files with the given properties Suche nach Dateien mit den gegebenen Eigenschaften - - Ctrl+R - - &About Ü&ber - - Ctrl+A - - - - Ctrl+E - - - - Ctrl+U - - &Select directory &Wähle Basisverzeichnis @@ -524,10 +655,6 @@ p, li { white-space: pre-wrap; } Select directory with a dialog Wähle das Basisverzeichnis mit einem Dialog - - Ctrl+D - - Get absolute &path Absolut&pfad @@ -536,18 +663,10 @@ p, li { white-space: pre-wrap; } Puts the absolute path of the selected file into the clipboard Bringt den absoluten Pfad der gewählten Datei in die Zwischenablage - - Ctrl+P - - &full name to clipboard Vollname in Zw.ablage - - Ctrl+N - - &base directory to clipboard &Basisverzeichnis in Zw.ablage @@ -556,10 +675,6 @@ p, li { white-space: pre-wrap; } Puts the base directory into the clipboard Bringt den Namen des Basisverzeichnis in die Zwischenablage - - Ctrl+B - - &Reset search parameters Suchparameter zu&rücksetzen @@ -576,14 +691,6 @@ p, li { white-space: pre-wrap; } Saves the program state (position, history...) to a file Speichert den Programmstatus (Position, Historie...) in eine Datei - - Ctrl+S - - - - Willkommen bei refind - - not a valid file: keine gültige Datei: @@ -598,7 +705,7 @@ p, li { white-space: pre-wrap; } unknown placeholder: - Unbekannter Platzhalter + Unbekannter Platzhalter directory not found: @@ -624,6 +731,158 @@ p, li { white-space: pre-wrap; } Select Export File Wähle Exportdatei + + Adds the result of the next search to the table + Fügt das Ergebnis der nächsten Suche ans Ende der Tabelle + + + Append + Anfügen + + + Ignore case + Ignor. Groß/Kl. + + + Clears the file table + Löscht die Dateitabelle + + + C&lear + &Löschen + + + S&top search + Suche anhalten + + + <html><head/><body><p>A comma (',') separated list of filename patterns. A prefix of '-' means inversion: if a filename matches it will not be found.</p><p>Example: *.txt,*.odt</p></body></html> + <html><head/><body><p>Eine mit Komma (',') getrennte Liste von Dateinamensmuster. Ein Präfix von '-' bedeutet Umkehrung: Wenn der Dateiname passt, wird er nicht gefunden.</p><p>Beispiel: *.txt,*.odt</p></body></html> + + + Stop after: + Halt nach: + + + &Preview + Vorschau + + + &File: + Datei: + + + &Search + Suche + + + &Options + &Optionen + + + Dialog for changing the options + Dialog zum Änderung der Optionen + + + Pre&view + &Vorschau + + + Shows a preview of the result export + Zeigt eine Vorschau der Exportergebnisse + + + Start search + Startet die Suche + + + Start the search + Suche starten + + + Stop search + Suche anhalten + + + Stop the current search + Halte die aktuelle Suche an + + + copy + Kopiere + + + copy %1 file(s) and %2 dir(s) + Kopiere %1 Datei(en) und %2 Verzeichnis(se) + + + copy %1 file(s) + Kopiere %1 Datei(en) + + + copy %1 dirs(s) + Kopiere %1 Verzeichnis(se) + + + %1 entry/entries copied to clipboard + %1 Elntrag/Einträge in die Zwischenablage kopiert + + + started: + Gestartet: + + + %1 object(s) + %1 Objekt(e) + + + Welcome at refind + Willkommen bei refind + + + Preview of the Export + Vorschau auf den Export + + + If this count of hits is reachted the search stops + Wenn diese Zahl an Treffern erreicht ist, wird die Suche abgebrochen + + + Go to the parent directory + In Vorgängerverzeichnis wechseln + + + Normal files will be found + Normale Dateien werden gefunden + + + Case insensitiv text search + Textsuche berücksichtigt Groß-/Kleinschreibung nicht + + + Directories will be found + Verzeichnisse werden gefunden + + + Text pattern is a regular expression (Pearl syntax) + Das Textsuchmuster enthält einen regulären Ausdruck (Perl Syntax) + + + Symbolic links will be found + Symbolische Verknüpfungen (Links) werden gefunden + + + Files containing ASCII NUL will be found too + Dateien, die ASCII NUL enthalten, werden auch gefunden + + + Text pattern is a regular expression (Perl syntax) + Das Textsuchmuster enthält einen regulären Ausdruck (Perl Syntax) + + + Only files containing this text (or text pattern) will be found + Nur Dateien, die diesen Text (oder Muster) enthalten, werden gefunden + QObject @@ -645,7 +904,7 @@ p, li { white-space: pre-wrap; } Found: %d dir(s) and %d file(s) with %.6f MByte. Duration of the search: %.3f sec - Gefunden: %d Verzeichnis(se) und %d Datei(en) mit %.6f MByte. Dauer der Suche: %.3f sec + Gefunden: %d Verzeichnis(se) und %d Datei(en) mit %.6f MByte. Dauer der Suche: %.3f sec more than 2 power operators, e.g. '2^3^4' @@ -673,7 +932,7 @@ p, li { white-space: pre-wrap; } unknown unit '$1'. Allowed: - Unbekannte Einheit '$1'. Erlaubt: + Unbekannte Einheit '$1'. Erlaubt: empty string is not a date/time @@ -683,5 +942,68 @@ p, li { white-space: pre-wrap; } not an integer: Keine Ganzzahl: + + copy + Kopiere + + + not found: %1 + Nicht gefunden: %1 + + + cannot open (%1): %2 + Kann nicht öffnen (%1): %2 + + + cannot write (%1): %2 [%3/%4] + Kann nicht schreiben (%1): %2 [%3/%4] + + + file can be read only partitionally: %1 [%2/%3] + Datei kann teilweise schreibgeschützt sein: %1 [%2/%3] + + + cannot set date/time (%1): %2 + Kann Dateidatum nicht setzen: (%1): %2 + + + cannot set permissions (%1): %2 + Kann Dateirechte nicht setzen (%1): %2 + + + can't create directory (%1): %2 + Kann Verzeichnis nicht erzeugen (%1): %2 + + + can't create directory (is a file): + Kann Verzeichnis nicht erstellen (ist eine Datei): + + + unknown placeholder: + Unbekannter Platzhalter: + + + %1 of %2 (%3 %) + %1 von %2 (%3 %) + + + unknown unit '%1'. Allowed: + unbekannte Einheit: '%1'. Erlaubt: + + + Found: %1 dir(s) and %2 file(s) with %%3. Runtime: %4 + Gefunden: %1 Verzeichnis(se) und %2 Datei(en) mit %%3. Laufzeit: %4 + + + Found: %1 dir(s) and %2 file(s) with %3. Runtime: %4 + Gefunden: %1 Verzeichnis(se) und %2 Datei(en) mit %3. Laufzeit: %4 + + + + ReGuiApplication + + Welcome! + Willkommen! + diff --git a/appl/refind/refind.pro b/appl/refind/refind.pro index bcc0eca..199a304 100644 --- a/appl/refind/refind.pro +++ b/appl/refind/refind.pro @@ -32,7 +32,8 @@ SOURCES += main.cpp\ dialogfileplaceholder.cpp \ utils.cpp \ dialogoptions.cpp \ - filetablewidget.cpp + filetablewidget.cpp \ + ../../gui/ReGuiApplication.cpp HEADERS += mainwindow.hpp \ @@ -57,7 +58,7 @@ FORMS += mainwindow.ui \ dialogfileplaceholder.ui \ dialogoptions.ui -TRANSLATIONS = refind_de.ts +TRANSLATIONS = refind.de.ts CODECFORSRC = UTF-8 diff --git a/gui/ReGuiApplication.cpp b/gui/ReGuiApplication.cpp index f2aff5f..6b786ac 100644 --- a/gui/ReGuiApplication.cpp +++ b/gui/ReGuiApplication.cpp @@ -285,10 +285,10 @@ const QString& ReGuiApplication::installPath() const void ReGuiApplication::setStatusMessage(ReLoggerLevel level, const QString& message){ switch(level){ case LOG_ERROR: - m_statusMessage->setText("+ " + message); + m_statusMessage->setText("+++ " + message); break; case LOG_WARNING: - m_statusMessage->setText("! " + message); + m_statusMessage->setText("### " + message); break; default: m_statusMessage->setText(message); diff --git a/gui/ReStateStorage.cpp b/gui/ReStateStorage.cpp index 8ea323d..879c144 100644 --- a/gui/ReStateStorage.cpp +++ b/gui/ReStateStorage.cpp @@ -322,7 +322,8 @@ void ReStateStorage::store(const QComboBox* combo, const char* name, } } } - m_stream->flush(); + if (m_stream != NULL) + m_stream->flush(); } /** -- 2.39.5