File indexing completed on 2024-04-28 05:46:32

0001 /*
0002     SPDX-FileCopyrightText: 2009-2010 Volker Lanz <vl@fidra.de>
0003     SPDX-FileCopyrightText: 2014-2020 Andrius Štikonas <andrius@stikonas.eu>
0004 
0005     SPDX-License-Identifier: GPL-3.0-or-later
0006 */
0007 
0008 #include "gui/listdevices.h"
0009 
0010 #include <core/device.h>
0011 
0012 #include <util/globallog.h>
0013 #include <util/capacity.h>
0014 
0015 class ListDeviceWidgetItem : public QListWidgetItem
0016 {
0017 public:
0018     ListDeviceWidgetItem(const Device& d) :
0019         QListWidgetItem(QIcon::fromTheme(d.iconName()), d.prettyName()), deviceNode(d.deviceNode()) {
0020         setToolTip(d.prettyName());
0021         setSizeHint(QSize(0, 32));
0022     }
0023 
0024     const QString deviceNode;
0025 };
0026 
0027 /** Creates a new ListDevices instance.
0028     @param parent the parent widget
0029 */
0030 ListDevices::ListDevices(QWidget* parent) :
0031     QWidget(parent),
0032     Ui::ListDevicesBase(),
0033     m_ActionCollection(nullptr)
0034 {
0035     setupUi(this);
0036 }
0037 
0038 void ListDevices::updateDevices(const OperationStack::Devices& devices)
0039 {
0040     listDevices().clear();
0041 
0042     for (const auto &d : devices)
0043         listDevices().addItem(new ListDeviceWidgetItem(*d));
0044 }
0045 
0046 void ListDevices::on_m_ListDevices_itemSelectionChanged()
0047 {
0048     if (listDevices().selectedItems().size() == 1) {
0049         ListDeviceWidgetItem* item = dynamic_cast<ListDeviceWidgetItem*>(listDevices().selectedItems()[0]);
0050 
0051         if (item != nullptr)
0052             Q_EMIT selectionChanged(item->deviceNode);
0053     }
0054 }
0055 
0056 void ListDevices::on_m_ListDevices_itemDoubleClicked(QListWidgetItem* list_item)
0057 {
0058     ListDeviceWidgetItem* item = dynamic_cast<ListDeviceWidgetItem*>(list_item);
0059 
0060     if (item != nullptr)
0061         Q_EMIT deviceDoubleClicked(item->deviceNode);
0062 }
0063 
0064 bool ListDevices::setSelectedDevice(const QString& device_node)
0065 {
0066     QList<QListWidgetItem*> items = listDevices().findItems(device_node, Qt::MatchContains);
0067 
0068     if (items.size() > 0) {
0069         listDevices().setCurrentItem(items[0]);
0070         return true;
0071     }
0072 
0073     return false;
0074 }
0075 
0076 #include "moc_listdevices.cpp"