/* copy_from_profile_button.cpp * * Wireshark - Network traffic analyzer * By Gerald Combs * Copyright 1998 Gerald Combs * * SPDX-License-Identifier: GPL-2.0-or-later */ #include #include #include #include #include #include #include CopyFromProfileButton::CopyFromProfileButton(QWidget * parent, QString fileName, QString toolTip) : QPushButton(parent), buttonMenu_(Q_NULLPTR) { setText(tr("Copy from")); if (toolTip.length() == 0) setToolTip(tr("Copy entries from another profile.")); else { setToolTip(toolTip); } if (fileName.length() > 0) setFilename(fileName); } void CopyFromProfileButton::setFilename(QString filename) { setEnabled(false); if (filename.length() <= 0) return; ProfileModel model(this); QList global; QList user; QAction * pa = systemDefault(filename); if (pa) global << pa; if (! buttonMenu_) buttonMenu_ = new QMenu(); if (buttonMenu_->actions().count() > 0) buttonMenu_->clear(); for (int cnt = 0; cnt < model.rowCount(); cnt++) { QModelIndex idx = model.index(cnt, ProfileModel::COL_NAME); QString profilePath = idx.data(ProfileModel::DATA_PATH).toString(); if (! idx.isValid() || profilePath.isEmpty()) continue; if (! idx.data(ProfileModel::DATA_PATH_IS_NOT_DESCRIPTION).toBool() || idx.data(ProfileModel::DATA_IS_SELECTED).toBool()) continue; QDir profileDir(profilePath); if (! profileDir.exists()) continue; QFileInfo fi(profileDir.filePath(filename)); if (! fi.exists()) continue; if (! config_file_exists_with_entries(fi.absoluteFilePath().toUtf8().constData(), '#')) continue; QString name = idx.data().toString(); pa = new QAction(name, this); if (idx.data(ProfileModel::DATA_IS_DEFAULT).toBool()) buttonMenu_->addAction(pa); else if (idx.data(ProfileModel::DATA_IS_GLOBAL).toBool()) global << pa; else user << pa; pa->setFont(idx.data(Qt::FontRole).value()); pa->setProperty("profile_name", name); pa->setProperty("profile_is_global", idx.data(ProfileModel::DATA_IS_GLOBAL)); pa->setProperty("profile_filename", fi.absoluteFilePath()); } buttonMenu_->addActions(user); if (global.count() > 0) { if (actions().count() > 0) buttonMenu_->addSeparator(); buttonMenu_->addActions(global); } if (buttonMenu_->actions().count() <= 0) return; connect(buttonMenu_, &QMenu::triggered, this, &CopyFromProfileButton::menuActionTriggered); setMenu(buttonMenu_); setEnabled(true); } // "System default" is not a profile. // Add a special entry for this if the filename exists. QAction * CopyFromProfileButton::systemDefault(QString filename) { QAction * data = Q_NULLPTR; QDir dataDir(get_datafile_dir()); QString path = dataDir.filePath(filename); if (QFile::exists(path)) { data = new QAction(tr("System default"), this); data->setData(path); QFont font = data->font(); font.setItalic(true); data->setFont(font); } return data; } void CopyFromProfileButton::menuActionTriggered(QAction * action) { if (action->property("profile_filename").toString().length() > 0) { QString filename = action->property("profile_filename").toString(); if (QFileInfo::exists(filename)) emit copyProfile(filename); } }