diff --git a/src/qtgui/viewaction_w.cpp b/src/qtgui/viewaction_w.cpp index 12a3cf2b..89fcd042 100644 --- a/src/qtgui/viewaction_w.cpp +++ b/src/qtgui/viewaction_w.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2006 J.F.Dockes +/* Copyright (C) 2006-2019 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -16,49 +16,41 @@ */ #include "autoconfig.h" -#include +#include "viewaction_w.h" #include #include #include -using namespace std; - -#include -#include - -#include - -#include -#include -#include +#include #include "recoll.h" #include "log.h" #include "guiutils.h" -#include "viewaction_w.h" +using namespace std; + void ViewAction::init() { selSamePB->setEnabled(false); connect(closePB, SIGNAL(clicked()), this, SLOT(close())); connect(chgActPB, SIGNAL(clicked()), this, SLOT(editActions())); - connect(actionsLV,SIGNAL(itemDoubleClicked(QTableWidgetItem *)), - this, SLOT(onItemDoubleClicked(QTableWidgetItem *))); - connect(actionsLV,SIGNAL(itemClicked(QTableWidgetItem *)), - this, SLOT(onItemClicked(QTableWidgetItem *))); + connect(actionsLV, + SIGNAL(currentItemChanged(QTableWidgetItem *, QTableWidgetItem *)), + this, + SLOT(onCurrentItemChanged(QTableWidgetItem *, QTableWidgetItem *))); useDesktopCB->setChecked(prefs.useDesktopOpen); onUseDesktopCBToggled(prefs.useDesktopOpen); connect(useDesktopCB, SIGNAL(stateChanged(int)), - this, SLOT(onUseDesktopCBToggled(int))); + this, SLOT(onUseDesktopCBToggled(int))); connect(setExceptCB, SIGNAL(stateChanged(int)), - this, SLOT(onSetExceptCBToggled(int))); + this, SLOT(onSetExceptCBToggled(int))); connect(selSamePB, SIGNAL(clicked()), - this, SLOT(onSelSameClicked())); + this, SLOT(onSelSameClicked())); resize(QSize(640, 480).expandedTo(minimumSizeHint())); } - + void ViewAction::onUseDesktopCBToggled(int onoff) { prefs.useDesktopOpen = onoff != 0; @@ -79,26 +71,23 @@ void ViewAction::fillLists() vector > defs; theconfig->getMimeViewerDefs(defs); actionsLV->setRowCount(defs.size()); - int row = 0; set viewerXs; if (prefs.useDesktopOpen) { - viewerXs = theconfig->getMimeViewerAllEx(); + viewerXs = theconfig->getMimeViewerAllEx(); } - for (vector >::const_iterator it = defs.begin(); - it != defs.end(); it++) { - actionsLV->setItem(row, 0, - new QTableWidgetItem(QString::fromUtf8(it->first.c_str()))); - if (!prefs.useDesktopOpen || - viewerXs.find(it->first) != viewerXs.end()) { - actionsLV->setItem( - row, 1, - new QTableWidgetItem(QString::fromUtf8(it->second.c_str()))); - } else { - actionsLV->setItem( - row, 1, new QTableWidgetItem(tr("Desktop Default"))); - } - row++; + + int row = 0; + for (const auto& def : defs) { + actionsLV->setItem(row, 0, new QTableWidgetItem(u8s2qs(def.first))); + if (!prefs.useDesktopOpen || + viewerXs.find(def.first) != viewerXs.end()) { + actionsLV->setItem(row, 1, new QTableWidgetItem(u8s2qs(def.second))); + } else { + actionsLV->setItem( + row, 1, new QTableWidgetItem(tr("Desktop Default"))); + } + row++; } QStringList labels(tr("MIME type")); labels.push_back(tr("Command")); @@ -109,11 +98,11 @@ void ViewAction::selectMT(const QString& mt) { actionsLV->clearSelection(); QListitems = - actionsLV->findItems(mt, Qt::MatchFixedString|Qt::MatchCaseSensitive); + actionsLV->findItems(mt, Qt::MatchFixedString|Qt::MatchCaseSensitive); for (QList::iterator it = items.begin(); - it != items.end(); it++) { - (*it)->setSelected(true); - actionsLV->setCurrentItem(*it, QItemSelectionModel::Columns); + it != items.end(); it++) { + (*it)->setSelected(true); + actionsLV->setCurrentItem(*it, QItemSelectionModel::Columns); } } @@ -122,52 +111,44 @@ void ViewAction::onSelSameClicked() actionsLV->clearSelection(); QString value = currentLBL->text(); if (value.isEmpty()) - return; + return; string action = qs2utf8s(value); - fprintf(stderr, "value: %s\n", action.c_str()); + LOGDEB1("ViewAction::onSelSameClicked: value: " << action << endl); + vector > defs; theconfig->getMimeViewerDefs(defs); - for (unsigned int i = 0; i < defs.size(); i++) { - if (defs[i].second == action) { - QListitems = - actionsLV->findItems(QString::fromUtf8(defs[i].first.c_str()), - Qt::MatchFixedString|Qt::MatchCaseSensitive); - for (QList::iterator it = items.begin(); - it != items.end(); it++) { - (*it)->setSelected(true); - QTableWidgetItem *item1 = actionsLV->item((*it)->row(), 1); - item1->setSelected(true); - } - } + for (const auto& def : defs) { + if (def.second == action) { + QListitems = actionsLV->findItems( + u8s2qs(def.first), Qt::MatchFixedString|Qt::MatchCaseSensitive); + for (QList::iterator it = items.begin(); + it != items.end(); it++) { + (*it)->setSelected(true); + actionsLV->item((*it)->row(), 1)->setSelected(true); + } + } } } -// Fill the input fields with the row's values when the user clicks -void ViewAction::onItemClicked(QTableWidgetItem * item) +void ViewAction::onCurrentItemChanged(QTableWidgetItem *item, QTableWidgetItem *) { - QTableWidgetItem *item0 = actionsLV->item(item->row(), 0); - string mtype = (const char *)item0->text().toLocal8Bit(); - - vector > defs; - theconfig->getMimeViewerDefs(defs); - for (unsigned int i = 0; i < defs.size(); i++) { - if (defs[i].first == mtype) { - currentLBL->setText(QString::fromUtf8(defs[i].second.c_str())); - selSamePB->setEnabled(true); - return; - } - } currentLBL->clear(); selSamePB->setEnabled(false); -} - -void ViewAction::onItemDoubleClicked(QTableWidgetItem * item) -{ - actionsLV->clearSelection(); - item->setSelected(true); + if (nullptr == item) { + return; + } QTableWidgetItem *item0 = actionsLV->item(item->row(), 0); - item0->setSelected(true); - editActions(); + string mtype = qs2utf8s(item0->text()); + + vector > defs; + theconfig->getMimeViewerDefs(defs); + for (const auto& def : defs) { + if (def.first == mtype) { + currentLBL->setText(u8s2qs(def.second)); + selSamePB->setEnabled(true); + return; + } + } } void ViewAction::editActions() @@ -176,58 +157,58 @@ void ViewAction::editActions() int except0 = -1; set viewerXs = theconfig->getMimeViewerAllEx(); - - list mtypes; + vector mtypes; bool dowarnmultiple = true; for (int row = 0; row < actionsLV->rowCount(); row++) { - QTableWidgetItem *item0 = actionsLV->item(row, 0); - if (!item0->isSelected()) - continue; - string mtype = (const char *)item0->text().toLocal8Bit(); - mtypes.push_back(mtype); - QTableWidgetItem *item1 = actionsLV->item(row, 1); - QString action = item1->text(); - int except = viewerXs.find(mtype) != viewerXs.end(); - if (action0.isEmpty()) { - action0 = action; - except0 = except; - } else { - if ((action != action0 || except != except0) && dowarnmultiple) { - switch (QMessageBox::warning(0, "Recoll", - tr("Changing entries with " - "different current values"), - "Continue", - "Cancel", - 0, 0, 1)) { - case 0: dowarnmultiple = false;break; - case 1: return; - } - } - } + QTableWidgetItem *item0 = actionsLV->item(row, 0); + if (!item0->isSelected()) + continue; + string mtype = qs2utf8s(item0->text()); + mtypes.push_back(mtype); + QTableWidgetItem *item1 = actionsLV->item(row, 1); + QString action = item1->text(); + bool except = viewerXs.find(mtype) != viewerXs.end(); + if (action0.isEmpty()) { + action0 = action; + except0 = except; + } else { + if ((action != action0 || except != except0) && dowarnmultiple) { + switch (QMessageBox::warning(0, "Recoll", + tr("Changing entries with " + "different current values"), + "Continue", + "Cancel", + 0, 0, 1)) { + case 0: dowarnmultiple = false; break; + case 1: return; + } + } + } } - if (action0.isEmpty()) - return; - string sact = (const char *)newActionLE->text().toLocal8Bit(); - trimstring(sact); + if (action0.isEmpty()) + return; + string sact = qs2utf8s(newActionLE->text()); + if (!sact.empty()) { + trimstring(sact); #ifdef _WIN32 - path_slashize(sact); + path_slashize(sact); #endif - for (list::const_iterator mit = mtypes.begin(); - mit != mtypes.end(); mit++) { - set::iterator xit = viewerXs.find(*mit); - if (setExceptCB->isChecked()) { - if (xit == viewerXs.end()) { - viewerXs.insert(*mit); - } - } else { - if (xit != viewerXs.end()) { - viewerXs.erase(xit); - } - } - // An empty action will restore the default (erase from - // topmost conftree) - theconfig->setMimeViewerDef(*mit, sact); + } + for (const auto& entry : mtypes) { + auto xit = viewerXs.find(entry); + if (setExceptCB->isChecked()) { + if (xit == viewerXs.end()) { + viewerXs.insert(entry); + } + } else { + if (xit != viewerXs.end()) { + viewerXs.erase(xit); + } + } + // An empty action will restore the default (erase from + // topmost conftree) + theconfig->setMimeViewerDef(entry, sact); } theconfig->setMimeViewerAllEx(viewerXs); diff --git a/src/qtgui/viewaction_w.h b/src/qtgui/viewaction_w.h index 1173f344..984bfe19 100644 --- a/src/qtgui/viewaction_w.h +++ b/src/qtgui/viewaction_w.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2006 J.F.Dockes +/* Copyright (C) 2006-2019 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -17,7 +17,6 @@ #ifndef _VIEWACTION_W_H_INCLUDED_ #define _VIEWACTION_W_H_INCLUDED_ -#include #include #include "ui_viewaction.h" @@ -32,18 +31,16 @@ class ViewAction : public QDialog, public Ui::ViewActionBase public: ViewAction(QWidget* parent = 0) - : QDialog(parent) - { - setupUi(this); - init(); + : QDialog(parent) { + setupUi(this); + init(); } ~ViewAction() {} void selectMT(const QString& mt); public slots: virtual void editActions(); - virtual void onItemClicked(QTableWidgetItem *); - virtual void onItemDoubleClicked(QTableWidgetItem *); + virtual void onCurrentItemChanged(QTableWidgetItem *, QTableWidgetItem *); virtual void onUseDesktopCBToggled(int); virtual void onSetExceptCBToggled(int); virtual void onSelSameClicked(); @@ -52,6 +49,4 @@ private: virtual void fillLists(); }; - - #endif /* _VIEWACTION_W_H_INCLUDED_ */