/** * hwmanager.cpp * * Copyright (c) 2009-2010 Timothy Pearson * * 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 * (at your option) any later version. * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "hwmanager.h" using namespace std; /**** DLL Interface ****/ typedef KGenericFactory TDEHWManagerFactory; K_EXPORT_COMPONENT_FACTORY( kcm_hwmanager, TDEHWManagerFactory("kcmhwmanager") ) KSimpleConfig *config; KSimpleConfig *systemconfig; /**** TDEHWManager ****/ TDEHWManager::TDEHWManager(TQWidget *parent, const char *name, const TQStringList &) : TDECModule(TDEHWManagerFactory::instance(), parent, name) { TQVBoxLayout *layout = new TQVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint()); config = new KSimpleConfig( TQString::fromLatin1( "hwmanagerrc" )); systemconfig = new KSimpleConfig( TQString::fromLatin1( KDE_CONFDIR "/tdehw/hwmanagerrc" )); TDEAboutData *about = new TDEAboutData(I18N_NOOP("kcmhwmanager"), I18N_NOOP("TDE Hardware Device Manager"), 0, 0, TDEAboutData::License_GPL, I18N_NOOP("(c) 2012 Timothy Pearson")); about->addAuthor("Timothy Pearson", 0, "kb9vqf@pearsoncomputing.net"); setAboutData( about ); base = new TDEHWManagerBase(this); layout->add(base); base->deviceFilter->setListView(base->deviceTree); setRootOnlyMsg(i18n("Hardware settings are system wide, and therefore require administrator access
To alter the system's hardware settings, click on the \"Administrator Mode\" button below.")); setUseRootOnlyMsg(true); TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); hwdevices->setTriggerlessHardwareUpdatesEnabled(true); connect(base->showByConnection, TQT_SIGNAL(clicked()), TQT_SLOT(changed())); connect(base->showByConnection, TQT_SIGNAL(clicked()), TQT_SLOT(populateTreeView())); connect(hwdevices, TQT_SIGNAL(hardwareAdded(TDEGenericDevice*)), this, TQT_SLOT(populateTreeView())); connect(hwdevices, TQT_SIGNAL(hardwareRemoved(TDEGenericDevice*)), this, TQT_SLOT(populateTreeView())); connect(hwdevices, TQT_SIGNAL(hardwareUpdated(TDEGenericDevice*)), this, TQT_SLOT(deviceChanged(TDEGenericDevice*))); load(); populateTreeView(); } TDEHWManager::~TDEHWManager() { delete config; delete systemconfig; } void TDEHWManager::load() { load( false ); } void TDEHWManager::load(bool useDefaults ) { emit changed(useDefaults); } void TDEHWManager::save() { emit changed(false); } void TDEHWManager::defaults() { load( true ); } void TDEHWManager::populateTreeView() { bool show_by_connection = base->showByConnection->isChecked(); // Figure out which device, if any, was selected TQString selected_syspath; DeviceIconItem* selItem = dynamic_cast(base->deviceTree->selectedItem()); if (selItem) { if (selItem->device()) { selected_syspath = selItem->device()->systemPath(); } } base->deviceTree->clear(); if (show_by_connection) { TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); TDEGenericHardwareList hwlist = hwdevices->listByDeviceClass(TDEGenericDeviceType::RootSystem); TDEGenericDevice *hwdevice; for ( hwdevice = hwlist.first(); hwdevice; hwdevice = hwlist.next() ) { if (hwdevice->type() == TDEGenericDeviceType::CryptographicCard) { TDECryptographicCardDevice* cdevice = static_cast(hwdevice); connect(cdevice, SIGNAL(pinRequested(TQString,TDECryptographicCardDevice*)), this, SLOT(cryptographicCardPinRequested(TQString,TDECryptographicCardDevice*))); cdevice->enableCardMonitoring(true); cdevice->enablePINEntryCallbacks(true); } DeviceIconItem* item = new DeviceIconItem(base->deviceTree, hwdevice->detailedFriendlyName(), hwdevice->icon(base->deviceTree->iconSize()), hwdevice); if ((!selected_syspath.isNull()) && (hwdevice->systemPath() == selected_syspath)) { base->deviceTree->ensureItemVisible(item); base->deviceTree->setSelected(item, true); } populateTreeViewLeaf(item, show_by_connection, selected_syspath); } } else { TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); for (int i=0;i<=TDEGenericDeviceType::Last;i++) { if (i != TDEGenericDeviceType::Root) { DeviceIconItem* rootitem = new DeviceIconItem(base->deviceTree, hwdevices->getFriendlyDeviceTypeStringFromType((TDEGenericDeviceType::TDEGenericDeviceType)i), hwdevices->getDeviceTypeIconFromType((TDEGenericDeviceType::TDEGenericDeviceType)i, base->deviceTree->iconSize()), 0); TDEGenericDevice *hwdevice; TDEGenericHardwareList hwlist = hwdevices->listByDeviceClass((TDEGenericDeviceType::TDEGenericDeviceType)i); for ( hwdevice = hwlist.first(); hwdevice; hwdevice = hwlist.next() ) { if (hwdevice->type() == TDEGenericDeviceType::CryptographicCard) { TDECryptographicCardDevice* cdevice = static_cast(hwdevice); connect(cdevice, SIGNAL(pinRequested(TQString,TDECryptographicCardDevice*)), this, SLOT(cryptographicCardPinRequested(TQString,TDECryptographicCardDevice*))); cdevice->enableCardMonitoring(true); cdevice->enablePINEntryCallbacks(true); } DeviceIconItem* item = new DeviceIconItem(rootitem, hwdevice->detailedFriendlyName(), hwdevice->icon(base->deviceTree->iconSize()), hwdevice); if ((!selected_syspath.isNull()) && (hwdevice->systemPath() == selected_syspath)) { base->deviceTree->ensureItemVisible(item); base->deviceTree->setSelected(item, true); } } } } } } void TDEHWManager::populateTreeViewLeaf(DeviceIconItem *parent, bool show_by_connection, TQString selected_syspath) { if (show_by_connection) { TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); TDEGenericHardwareList hwlist = hwdevices->listAllPhysicalDevices(); TDEGenericDevice *hwdevice; for ( hwdevice = hwlist.first(); hwdevice; hwdevice = hwlist.next() ) { if (hwdevice->type() == TDEGenericDeviceType::CryptographicCard) { TDECryptographicCardDevice* cdevice = static_cast(hwdevice); connect(cdevice, SIGNAL(pinRequested(TQString,TDECryptographicCardDevice*)), this, SLOT(cryptographicCardPinRequested(TQString,TDECryptographicCardDevice*))); cdevice->enableCardMonitoring(true); cdevice->enablePINEntryCallbacks(true); } if (hwdevice->parentDevice() == parent->device()) { DeviceIconItem* item = new DeviceIconItem(parent, hwdevice->detailedFriendlyName(), hwdevice->icon(base->deviceTree->iconSize()), hwdevice); if ((!selected_syspath.isNull()) && (hwdevice->systemPath() == selected_syspath)) { base->deviceTree->ensureItemVisible(item); base->deviceTree->setSelected(item, true); } populateTreeViewLeaf(item, show_by_connection, selected_syspath); } } } } void TDEHWManager::deviceChanged(TDEGenericDevice* device) { TQListViewItemIterator it(base->deviceTree); while (it.current()) { DeviceIconItem* item = dynamic_cast(it.current()); if (item) { TDEGenericDevice* candidate = item->device(); if (candidate) { if (candidate->systemPath() == device->systemPath()) { if (item->text(0) != device->detailedFriendlyName()) { item->setText(0, device->detailedFriendlyName()); } } } } ++it; } } void TDEHWManager::cryptographicCardPinRequested(TQString prompt, TDECryptographicCardDevice* cdevice) { TQString password; int result = KPasswordDialog::getPassword(password, prompt); if (result == KPasswordDialog::Accepted) { cdevice->setProvidedPin(password); } else { cdevice->setProvidedPin(TQString::null); } } TQString TDEHWManager::quickHelp() const { return i18n("

TDE Hardware Device Manager

This module allows you to configure hardware devices on your system"); } #include "hwmanager.moc"