/* Copyright 2006-2023 The QElectroTech Team This file is part of QElectroTech. QElectroTech 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 (at your option) any later version. QElectroTech is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with QElectroTech. If not, see . */ #include "namelistwidget.h" #include "ui_namelistwidget.h" #include #include NameListWidget::NameListWidget(QWidget *parent) : QWidget(parent), ui(new Ui::NameListWidget) { ui->setupUi(this); ui->m_clipboard_cb->setHidden(true); connect(ui->m_add_line_pb, &QPushButton::clicked, this, &NameListWidget::addLine); } NameListWidget::~NameListWidget() { delete ui; } /** @brief NameListWidget::addLine Add a new line to the name list widget */ void NameListWidget::addLine() { clean(); if (m_read_only) { return; } QTreeWidgetItem *qtwi = new QTreeWidgetItem(); qtwi->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); ui->m_tree->addTopLevelItem(qtwi); ui->m_tree->setCurrentItem(qtwi); ui->m_tree->editItem(qtwi); } /** @brief NameListWidget::setNames Set the current names of this dialog from name_list @param name_list */ void NameListWidget::setNames(const NamesList &name_list) { for (QString lang : name_list.langs()) { QString value = name_list[lang]; QStringList values; values << lang << value; QTreeWidgetItem *qtwi = new QTreeWidgetItem(values); if (!m_read_only) { qtwi->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); } ui->m_tree->addTopLevelItem(qtwi); ui->m_tree->sortItems(0, Qt::AscendingOrder); } } /** @brief NameListWidget::names @return the current name list edited by this dialog */ NamesList NameListWidget::names() const { NamesList nl_; int names_count = ui->m_tree->topLevelItemCount(); for (int i = 0 ; i < names_count ; ++ i) { QString lang = ui->m_tree->topLevelItem(i)->text(0); QString value = ui->m_tree->topLevelItem(i)->text(1); if (lang != "" && value != "") { nl_.addName(lang, value); } } return nl_; } /** @brief NameListWidget::setReadOnly Set this dialog to read only or not. @param ro */ void NameListWidget::setReadOnly(bool ro) { m_read_only = ro; int names_count = ui->m_tree->topLevelItemCount() - 1; for (int i = names_count ; i >= 0 ; -- i) { Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable; if (!m_read_only) { flags |= Qt::ItemIsEditable; } ui->m_tree->topLevelItem(i)->setFlags(flags); } ui->m_add_line_pb->setEnabled(!ro); } /** @brief NameListWidget::isEmpty @return true if empty. An empty dialog, is a dialog without any edited lang. */ bool NameListWidget::isEmpty() const { return names().isEmpty(); } void NameListWidget::setClipboardValue(QHash value) { if (value.isEmpty()) { ui->m_clipboard_cb->setHidden(true); } else { ui->m_clipboard_cb->setVisible(true); QStringList list = value.keys(); list.sort(); for (QString key : list) { ui->m_clipboard_cb->addItem(key, value.value(key)); } } } /** @brief NameListWidget::clean Clean the lists of names by removing the empty lines */ void NameListWidget::clean() { int names_count = ui->m_tree->topLevelItemCount() - 1; for (int i = names_count ; i >= 0 ; -- i) { if (ui->m_tree->topLevelItem(i)->text(0).isEmpty() && ui->m_tree->topLevelItem(i)->text(1).isEmpty()) { ui->m_tree->takeTopLevelItem(i); } } } void NameListWidget::on_m_clipboard_cb_activated(int index) { Q_UNUSED(index); QClipboard *clipboard = QApplication::clipboard(); clipboard->setText(ui->m_clipboard_cb->currentData().toString()); ui->m_clipboard_cb->setCurrentIndex(0); }