/* This file is part of TDE Copyright (C) 2012 Timothy Pearson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. 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 #undef Unsorted // Required for --enable-final (tqdir.h) #include #include #include #include #include #include #include #include #include #include #include "cryptpassworddlg.h" #include "devicepropsdlg.h" SensorDisplayLabelsWidget::SensorDisplayLabelsWidget(TQWidget *parent) : TQWidget(parent) { m_nameLabel = new TQLabel(this); m_valueLabel = new TQLabel(this); TQGridLayout *mainGrid = new TQGridLayout(this, 1, 2, 0, 1); mainGrid->setRowStretch(1, 0); mainGrid->addWidget(m_nameLabel, 0, 0); mainGrid->addWidget(m_valueLabel, 0, 1); } SensorDisplayLabelsWidget::~SensorDisplayLabelsWidget() { } void SensorDisplayLabelsWidget::setSensorName(TQString name) { m_nameLabel->setText(name); } void SensorDisplayLabelsWidget::setSensorValue(TQString value) { m_valueLabel->setText(value); } bool SensorBar::setIndicator(TQString & progress_str, int progress, int totalSteps) { Q_UNUSED(progress); Q_UNUSED(totalSteps); if (progress_str != m_currentValueString) { progress_str = m_currentValueString; return true; } else { return false; } } void SensorBar::drawContents(TQPainter *p) { // Draw warn/crit/value bars TQRect bar = contentsRect(); TQSharedDoubleBuffer buffer( p, bar.x(), bar.y(), bar.width(), bar.height() ); buffer.painter()->fillRect(bar, TQt::white); TQStyle::SFlags flags = TQStyle::Style_Default; if (isEnabled()) { flags |= TQStyle::Style_Enabled; } if (hasFocus()) { flags |= TQStyle::Style_HasFocus; } style().drawControl(TQStyle::CE_ProgressBarGroove, buffer.painter(), this, TQStyle::visualRect(style().subRect(TQStyle::SR_ProgressBarGroove, this), this ), colorGroup(), flags); if (m_warningLocation > 0) { bar = contentsRect(); bar.setX((bar.width()*((m_warningLocation*1.0)/totalSteps()))-2); bar.setWidth(5); bar.setHeight(3); buffer.painter()->fillRect(bar, TQt::yellow); bar = contentsRect(); bar.setX((bar.width()*((m_warningLocation*1.0)/totalSteps()))-2); bar.setWidth(5); bar.setY(bar.height()-3); bar.setHeight(3); buffer.painter()->fillRect(bar, TQt::yellow); bar = contentsRect(); bar.setX((bar.width()*((m_warningLocation*1.0)/totalSteps()))-0); bar.setWidth(1); buffer.painter()->fillRect(bar, TQt::yellow); } if (m_criticalLocation > 0) { bar = contentsRect(); bar.setX((bar.width()*((m_criticalLocation*1.0)/totalSteps()))-2); bar.setWidth(5); bar.setHeight(3); buffer.painter()->fillRect(bar, TQt::red); bar = contentsRect(); bar.setX((bar.width()*((m_criticalLocation*1.0)/totalSteps()))-2); bar.setWidth(5); bar.setY(bar.height()-3); bar.setHeight(3); buffer.painter()->fillRect(bar, TQt::red); bar = contentsRect(); bar.setX((bar.width()*((m_criticalLocation*1.0)/totalSteps()))-0); bar.setWidth(1); buffer.painter()->fillRect(bar, TQt::red); } if (m_currentLocation > 0) { bar = contentsRect(); bar.setX((bar.width()*((m_currentLocation*1.0)/totalSteps()))-2); bar.setWidth(5); bar.setHeight(3); buffer.painter()->fillRect(bar, TQt::green); bar = contentsRect(); bar.setX((bar.width()*((m_currentLocation*1.0)/totalSteps()))-2); bar.setWidth(5); bar.setY(bar.height()-3); bar.setHeight(3); buffer.painter()->fillRect(bar, TQt::green); bar = contentsRect(); bar.setX((bar.width()*((m_currentLocation*1.0)/totalSteps()))-0); bar.setWidth(1); buffer.painter()->fillRect(bar, TQt::green); } bar = contentsRect(); buffer.painter()->setPen(TQt::black); buffer.painter()->drawText(bar.x(), bar.y(), bar.width()/3, bar.height(), TQt::AlignVCenter | TQt::AlignLeft, m_minimumValueString); buffer.painter()->drawText(bar.x()+(bar.width()/3), bar.y(), bar.width()/3, bar.height(), TQt::AlignVCenter | TQt::AlignHCenter, m_currentValueString); buffer.painter()->drawText(bar.x()+((bar.width()/3)*2), bar.y(), bar.width()/3, bar.height(), TQt::AlignVCenter | TQt::AlignRight, m_maximumValueString); } SensorDisplayWidget::SensorDisplayWidget(TQWidget *parent) : TQWidget(parent) { m_nameLabel = new TQLabel(this); m_progressBar = new SensorBar(this); TQGridLayout *mainGrid = new TQGridLayout(this, 1, 2, 0, 1); mainGrid->setRowStretch(1, 0); mainGrid->addWidget(m_nameLabel, 0, 0); mainGrid->addWidget(m_progressBar, 0, 1); } SensorDisplayWidget::~SensorDisplayWidget() { } void SensorDisplayWidget::setSensorName(TQString name) { m_nameLabel->setText(name); } void SensorDisplayWidget::setSensorCurrentValue(double value) { m_current = value; } void SensorDisplayWidget::setSensorMinimumValue(double value) { m_minimum = value; } void SensorDisplayWidget::setSensorMaximumValue(double value) { m_maximum = value; } void SensorDisplayWidget::setSensorWarningValue(double value) { m_warning = value; } void SensorDisplayWidget::setSensorCriticalValue(double value) { m_critical = value; } void SensorDisplayWidget::updateDisplay() { double minimum = m_minimum; double maximum = m_maximum; double current = m_current; double warning = m_warning; double critical = m_critical; if (minimum < 0) { minimum = 0; } if (maximum < 0) { if (critical < 0) { maximum = warning; } else { maximum = critical; } } if (warning > maximum) { maximum = warning; } if (critical > maximum) { maximum = critical; } m_progressBar->setTotalSteps(maximum); m_progressBar->m_currentLocation = current - minimum; m_progressBar->setProgress(0); if (warning < 0) { m_progressBar->m_warningLocation = -1; } else { m_progressBar->m_warningLocation = warning - minimum; } if (critical < 0) { m_progressBar->m_criticalLocation = -1; } else { m_progressBar->m_criticalLocation = critical - minimum; } m_progressBar->m_minimumValueString = (TQString("%1").arg(minimum)); m_progressBar->m_maximumValueString = (TQString("%1").arg(maximum)); m_progressBar->m_currentValueString = TQString("%1").arg(current); } DevicePropertiesDialog::DevicePropertiesDialog(TDEGenericDevice* device, TQWidget *parent) : KDialogBase(Plain, TQString::null, Ok|Cancel, Ok, parent, 0L, true, true) { m_device = device; enableButtonOK( false ); if (m_device) { base = new DevicePropertiesDialogBase(plainPage()); // Remove all non-applicable tabs if (m_device->type() != TDEGenericDeviceType::Disk) { base->tabBarWidget->removePage(base->tabDisk); base->tabBarWidget->removePage(base->tabDiskCrypt); } if (m_device->type() != TDEGenericDeviceType::CPU) { base->tabBarWidget->removePage(base->tabCPU); } if ((m_device->type() != TDEGenericDeviceType::OtherSensor) && (m_device->type() != TDEGenericDeviceType::ThermalSensor)) { base->tabBarWidget->removePage(base->tabSensor); } if (m_device->type() != TDEGenericDeviceType::Battery) { base->tabBarWidget->removePage(base->tabBattery); } if (m_device->type() != TDEGenericDeviceType::PowerSupply) { base->tabBarWidget->removePage(base->tabPowerSupply); } if (m_device->type() != TDEGenericDeviceType::Network) { base->tabBarWidget->removePage(base->tabNetwork); } if (m_device->type() != TDEGenericDeviceType::Backlight) { base->tabBarWidget->removePage(base->tabBacklight); } if (m_device->type() != TDEGenericDeviceType::Monitor) { base->tabBarWidget->removePage(base->tabMonitor); } if (m_device->type() != TDEGenericDeviceType::RootSystem) { base->tabBarWidget->removePage(base->tabRootSystem); } if (m_device->type() != TDEGenericDeviceType::Event) { base->tabBarWidget->removePage(base->tabEvent); } if (m_device->type() != TDEGenericDeviceType::CryptographicCard) { base->tabBarWidget->removePage(base->tabCryptographicCard); } if (m_device->type() == TDEGenericDeviceType::CPU) { connect(base->comboCPUGovernor, TQT_SIGNAL(activated(const TQString &)), this, TQT_SLOT(setCPUGovernor(const TQString &))); } if (m_device->type() == TDEGenericDeviceType::Disk) { TDEStorageDevice* sdevice = static_cast(m_device); connect(base->buttonDiskMount, TQT_SIGNAL(clicked()), this, TQT_SLOT(mountDisk())); connect(base->buttonDiskUnmount, TQT_SIGNAL(clicked()), this, TQT_SLOT(unmountDisk())); if (sdevice->isDiskOfType(TDEDiskDeviceType::LUKS)) { connect(base->cryptLUKSAddKey, TQT_SIGNAL(clicked()), this, TQT_SLOT(cryptLUKSAddKey())); connect(base->cryptLUKSDelKey, TQT_SIGNAL(clicked()), this, TQT_SLOT(cryptLUKSDelKey())); connect(base->cryptLUKSKeySlotList, TQT_SIGNAL(selectionChanged()), this, TQT_SLOT(processLockouts())); base->cryptLUKSKeySlotList->setAllColumnsShowFocus(true); base->cryptLUKSKeySlotList->setFullWidth(true); cryptLUKSPopulateList(); processLockouts(); } else { base->tabBarWidget->removePage(base->tabDiskCrypt); } } if ((m_device->type() == TDEGenericDeviceType::OtherSensor) || (m_device->type() == TDEGenericDeviceType::ThermalSensor)) { base->groupSensors->setColumnLayout(0, TQt::Vertical ); base->groupSensors->layout()->setSpacing( KDialog::spacingHint() ); base->groupSensors->layout()->setMargin( KDialog::marginHint() ); m_sensorDataGrid = new TQGridLayout( base->groupSensors->layout() ); m_sensorDataGrid->setAlignment( TQt::AlignTop ); m_sensorDataGridWidgets.setAutoDelete(true); } if (m_device->type() == TDEGenericDeviceType::Backlight) { connect(base->sliderBacklightBrightness, TQT_SIGNAL(valueChanged(int)), this, TQT_SLOT(setBacklightBrightness(int))); } if (m_device->type() == TDEGenericDeviceType::RootSystem) { connect(base->comboSystemHibernationMethod, TQT_SIGNAL(activated(int)), this, TQT_SLOT(setHibernationMethod(int))); } TQGridLayout *mainGrid = new TQGridLayout(plainPage(), 1, 1, 0, spacingHint()); mainGrid->setRowStretch(1, 1); mainGrid->addWidget(base, 0, 0); } TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); connect(hwdevices, TQT_SIGNAL(hardwareRemoved(TDEGenericDevice*)), this, TQT_SLOT(processHardwareRemoved(TDEGenericDevice*))); connect(hwdevices, TQT_SIGNAL(hardwareUpdated(TDEGenericDevice*)), this, TQT_SLOT(processHardwareUpdated(TDEGenericDevice*))); populateDeviceInformation(); } DevicePropertiesDialog::~DevicePropertiesDialog() { } void DevicePropertiesDialog::processHardwareRemoved(TDEGenericDevice* dev) { if (dev == m_device) { close(); } } void DevicePropertiesDialog::processHardwareUpdated(TDEGenericDevice* dev) { if (dev == m_device) { populateDeviceInformation(); } } TQString assembleSwitchList(TDESwitchType::TDESwitchType switches) { return (TDEEventDevice::friendlySwitchList(switches).join("
")); } void DevicePropertiesDialog::populateDeviceInformation() { if (m_device) { base->labelDeviceType->setText(m_device->friendlyDeviceType()); base->iconDeviceType->setPixmap(m_device->icon(TDEIcon::SizeSmall)); base->labelDeviceName->setText(m_device->friendlyName()); base->labelDeviceNode->setText((m_device->deviceNode().isNull())?i18n(""):m_device->deviceNode()); base->labelSystemPath->setText(m_device->systemPath()); base->labelSubsytemType->setText(m_device->subsystem()); base->labelDeviceDriver->setText((m_device->deviceDriver().isNull())?i18n(""):m_device->deviceDriver()); base->labelDeviceClass->setText((m_device->PCIClass().isNull())?i18n(""):m_device->PCIClass()); base->labelModalias->setText((m_device->moduleAlias().isNull())?i18n(""):m_device->moduleAlias()); // These might be redundant #if 0 base->labelVendorName->setText((m_device->vendorName().isNull())?i18n(""):m_device->vendorName()); base->labelVendorModel->setText((m_device->vendorModel().isNull())?i18n(""):m_device->vendorModel()); #else base->labelVendorName->hide(); base->stocklabelVendorName->hide(); base->labelVendorModel->hide(); base->stocklabelVendorModel->hide(); #endif base->labelSerialNumber->setText((m_device->serialNumber().isNull())?i18n(""):m_device->serialNumber()); if (m_device->subsystem() == "pci") { base->labelBusID->setText(m_device->busID()); base->labelBusID->show(); base->stocklabelBusID->show(); } else { base->labelBusID->hide(); base->stocklabelBusID->hide(); } if (m_device->type() == TDEGenericDeviceType::Disk) { TDEStorageDevice* sdevice = static_cast(m_device); TQString mountPoint = sdevice->mountPath(); if (mountPoint == "") mountPoint = i18n(""); base->labelDiskMountpoint->setText(mountPoint); TQString fsName = sdevice->fileSystemName(); if (fsName == "") fsName = i18n(""); base->labelDiskFileSystemType->setText(fsName); TQString volUUID = sdevice->diskUUID(); if (volUUID == "") volUUID = i18n(""); base->labelDiskUUID->setText(volUUID); // Show status TQString status_text = ""; if (sdevice->checkDiskStatus(TDEDiskDeviceStatus::Mountable)) { status_text += "Mountable
"; } if (sdevice->checkDiskStatus(TDEDiskDeviceStatus::Removable)) { status_text += "Removable
"; } if (sdevice->checkDiskStatus(TDEDiskDeviceStatus::Inserted)) { status_text += "Inserted
"; } if (sdevice->checkDiskStatus(TDEDiskDeviceStatus::Blank)) { status_text += "Blank
"; } if (sdevice->checkDiskStatus(TDEDiskDeviceStatus::UsedByDevice)) { status_text += "In use
"; } if (sdevice->checkDiskStatus(TDEDiskDeviceStatus::UsesDevice)) { status_text += "Uses other device
"; } if (sdevice->checkDiskStatus(TDEDiskDeviceStatus::ContainsFilesystem)) { status_text += "Contains a filesystem
"; } if (sdevice->checkDiskStatus(TDEDiskDeviceStatus::Hotpluggable)) { status_text += "Hotpluggable
"; } if (sdevice->checkDiskStatus(TDEDiskDeviceStatus::Hidden)) { status_text += "Hidden
"; } if (status_text == "") { status_text += "Unavailable"; } status_text += ""; base->labelDiskStatus->setText(status_text); // Update mount/unmount button status if (sdevice->checkDiskStatus(TDEDiskDeviceStatus::Mountable)) { base->groupDiskActions->show(); base->buttonDiskMount->setEnabled((sdevice->mountPath() == "")); base->buttonDiskUnmount->setEnabled((sdevice->mountPath() != "")); } else { base->groupDiskActions->hide(); } } if (m_device->type() == TDEGenericDeviceType::CPU) { TDECPUDevice* cdevice = static_cast(m_device); // Show information base->labelCPUVendor->setText(cdevice->vendorEncoded()); base->labelCPUFrequency->setText((cdevice->frequency()<0)?i18n(""):TQString("%1 MHz").arg(cdevice->frequency())); base->labelMinCPUFrequency->setText((cdevice->minFrequency()<0)?i18n(""):TQString("%1 MHz").arg(cdevice->minFrequency())); base->labelMaxCPUFrequency->setText((cdevice->maxFrequency()<0)?i18n(""):TQString("%1 MHz").arg(cdevice->maxFrequency())); base->labelScalingDriver->setText((cdevice->scalingDriver().isNull())?i18n(""):cdevice->scalingDriver()); TQStringList scalingfreqs = cdevice->availableFrequencies(); if (scalingfreqs.count() > 0) { TQString scalingfreqsstring = ""; for ( TQStringList::Iterator it = scalingfreqs.begin(); it != scalingfreqs.end(); ++it ) { TQString freq = (*it); scalingfreqsstring.append(TQString("%1 MHz
").arg(freq.toDouble()/1000)); } scalingfreqsstring.append("
"); base->labelScalingFrequencies->setText(scalingfreqsstring); } else { base->labelScalingFrequencies->setText(i18n("")); } TQStringList dependentcpus = cdevice->dependentProcessors(); if (dependentcpus.count() > 0) { TQString dependentcpusstring = ""; for ( TQStringList::Iterator it = dependentcpus.begin(); it != dependentcpus.end(); ++it ) { TQString proc = (*it); dependentcpusstring.append(TQString("CPU %1
").arg(proc)); } dependentcpusstring.append("
"); base->labelDependentCPUs->setText(dependentcpusstring); } else { base->labelDependentCPUs->setText(i18n("")); } base->comboCPUGovernor->setEnabled(cdevice->canSetGovernor()); TQStringList governorPolicies = cdevice->availableGovernors(); if ((uint)governorPolicies.count() != (uint)base->comboCPUGovernor->count()) { base->comboCPUGovernor->clear(); int i=0; for (TQStringList::Iterator it = governorPolicies.begin(); it != governorPolicies.end(); ++it) { base->comboCPUGovernor->insertItem(*it, i); i++; } } base->comboCPUGovernor->setCurrentItem(cdevice->governor(), false); } if ((m_device->type() == TDEGenericDeviceType::OtherSensor) || (m_device->type() == TDEGenericDeviceType::ThermalSensor)) { TDESensorDevice* sdevice = static_cast(m_device); TDESensorClusterMap map = sdevice->values(); TDESensorClusterMap::Iterator it; unsigned int i; if (m_sensorDataGridWidgets.count() != map.count()) { m_sensorDataGridWidgets.clear(); for (i=0;igroupSensors); m_sensorDataGrid->addWidget(sensorWidget, i, 0); m_sensorDataGridWidgets.append(sensorWidget); } } i=0; for ( it = map.begin(); it != map.end(); ++it ) { TQString sensorlabel = it.key(); TQString sensordatastring; TDESensorCluster values = it.data(); if (!values.label.isNull()) { sensorlabel = values.label; } if (sensorlabel.isNull()) { sensorlabel = i18n(""); } m_sensorDataGridWidgets.at(i)->setSensorName(sensorlabel); m_sensorDataGridWidgets.at(i)->setSensorCurrentValue(values.current); m_sensorDataGridWidgets.at(i)->setSensorMinimumValue(values.minimum); m_sensorDataGridWidgets.at(i)->setSensorMaximumValue(values.maximum); m_sensorDataGridWidgets.at(i)->setSensorWarningValue(values.warning); m_sensorDataGridWidgets.at(i)->setSensorCriticalValue(values.critical); m_sensorDataGridWidgets.at(i)->updateDisplay(); i++; } } if (m_device->type() == TDEGenericDeviceType::Battery) { TDEBatteryDevice* bdevice = static_cast(m_device); base->labelCurrentBatteryEnergy->setText((bdevice->energy()<0)?i18n(""):TQString("%1 Wh").arg(bdevice->energy())); base->labelMaximumBatteryEnergy->setText((bdevice->maximumEnergy()<0)?i18n(""):TQString("%1 Wh").arg(bdevice->maximumEnergy())); base->labelMaximumBatteryDesignEnergy->setText((bdevice->maximumDesignEnergy()<0)?i18n(""):TQString("%1 Wh").arg(bdevice->maximumDesignEnergy())); base->labelMinimumBatteryVoltage->setText((bdevice->minimumVoltage()<0)?i18n(""):TQString("%1 V").arg(bdevice->minimumVoltage())); base->labelCurrentBatteryVoltage->setText((bdevice->voltage()<0)?i18n(""):TQString("%1 V").arg(bdevice->voltage())); base->labelCurrentBatteryDischargeRate->setText((bdevice->dischargeRate()<0)?i18n(""):TQString("%1 Wh").arg(bdevice->dischargeRate())); TQString batteryStatusString = i18n("Unknown"); TDEBatteryStatus::TDEBatteryStatus batteryStatus = bdevice->status(); if (batteryStatus == TDEBatteryStatus::Charging) { batteryStatusString = i18n("Charging"); } if (batteryStatus == TDEBatteryStatus::Discharging) { batteryStatusString = i18n("Discharging"); } if (batteryStatus == TDEBatteryStatus::Full) { batteryStatusString = i18n("Full"); } base->labelCurrentBatteryStatus->setText(batteryStatusString); base->labelBatteryTechnology->setText((bdevice->technology().isNull())?i18n(""):bdevice->technology()); base->labelBatteryInstalled->setText((bdevice->installed()==0)?i18n("No"):i18n("Yes")); base->labelBatteryCharge->setText((bdevice->chargePercent()<0)?i18n(""):TQString("%1 %").arg(bdevice->chargePercent())); base->labelBatteryTimeRemaining->setText((bdevice->timeRemaining()<0)?i18n(""):TQString("%1 seconds").arg(bdevice->timeRemaining())); } if (m_device->type() == TDEGenericDeviceType::PowerSupply) { TDEMainsPowerDevice* pdevice = static_cast(m_device); base->labelPowerSupplyOnline->setText((pdevice->online()==0)?i18n("No"):i18n("Yes")); } if (m_device->type() == TDEGenericDeviceType::Network) { TDENetworkDevice* ndevice = static_cast(m_device); base->labelNetworkMAC->setText((ndevice->macAddress().isNull())?i18n(""):ndevice->macAddress()); base->labelNetworkState->setText((ndevice->state().isNull())?i18n(""):ndevice->state()); base->labelNetworkCarrierPresent->setText((ndevice->carrierPresent()==0)?i18n("No"):i18n("Yes")); base->labelNetworkDormant->setText((ndevice->dormant()==0)?i18n("No"):i18n("Yes")); base->labelNetworkIPV4Address->setText((ndevice->ipV4Address().isNull())?i18n(""):ndevice->ipV4Address()); base->labelNetworkIPV4Netmask->setText((ndevice->ipV4Netmask().isNull())?i18n(""):ndevice->ipV4Netmask()); base->labelNetworkIPV4Broadcast->setText((ndevice->ipV4Broadcast().isNull())?i18n(""):ndevice->ipV4Broadcast()); base->labelNetworkIPV4Destination->setText((ndevice->ipV4Destination().isNull())?i18n(""):ndevice->ipV4Destination()); base->labelNetworkIPV6Address->setText((ndevice->ipV6Address().isNull())?i18n(""):ndevice->ipV6Address()); base->labelNetworkIPV6Netmask->setText((ndevice->ipV6Netmask().isNull())?i18n(""):ndevice->ipV6Netmask()); base->labelNetworkIPV6Broadcast->setText((ndevice->ipV6Broadcast().isNull())?i18n(""):ndevice->ipV6Broadcast()); base->labelNetworkIPV6Destination->setText((ndevice->ipV6Destination().isNull())?i18n(""):ndevice->ipV6Destination()); base->labelNetworkRXBytes->setText((ndevice->rxBytes()<0)?i18n(""):TDEHardwareDevices::bytesToFriendlySizeString(ndevice->rxBytes())); base->labelNetworkTXBytes->setText((ndevice->txBytes()<0)?i18n(""):TDEHardwareDevices::bytesToFriendlySizeString(ndevice->txBytes())); base->labelNetworkRXPackets->setText((ndevice->rxPackets()<0)?i18n(""):TQString("%1").arg(ndevice->rxPackets())); base->labelNetworkTXPackets->setText((ndevice->txPackets()<0)?i18n(""):TQString("%1").arg(ndevice->txPackets())); } if (m_device->type() == TDEGenericDeviceType::Backlight) { TDEBacklightDevice* bdevice = static_cast(m_device); base->labelBacklightStatus->setText((bdevice->powerLevel()==TDEDisplayPowerLevel::On)?i18n("On"):i18n("Off")); base->labelBacklightBrightness->setText((bdevice->brightnessPercent()<0)?i18n(""):TQString("%1 %").arg(bdevice->brightnessPercent())); base->sliderBacklightBrightness->setOrientation(TQt::Horizontal); base->sliderBacklightBrightness->setMinValue(0); base->sliderBacklightBrightness->setMaxValue(bdevice->brightnessSteps()-1); base->sliderBacklightBrightness->setValue(bdevice->rawBrightness()); base->sliderBacklightBrightness->setEnabled(bdevice->canSetBrightness()); } if (m_device->type() == TDEGenericDeviceType::Monitor) { TDEMonitorDevice* mdevice = static_cast(m_device); base->labelDisplayPortType->setText((mdevice->portType().isNull())?i18n(""):mdevice->portType()); base->labelDisplayConnected->setText((mdevice->connected())?i18n("Yes"):i18n("No")); base->labelDisplayEnabled->setText((mdevice->enabled())?i18n("Yes"):i18n("No")); TQString dpmsLevel; TDEDisplayPowerLevel::TDEDisplayPowerLevel dpms = TDEDisplayPowerLevel::On; if (dpms == TDEDisplayPowerLevel::On) { dpmsLevel = i18n("On"); } else if (dpms == TDEDisplayPowerLevel::Standby) { dpmsLevel = i18n("Standby"); } else if (dpms == TDEDisplayPowerLevel::Suspend) { dpmsLevel = i18n("Suspend"); } else if (dpms == TDEDisplayPowerLevel::Off) { dpmsLevel = i18n("Off"); } base->labelDisplayDPMS->setText(dpmsLevel); TDEResolutionList resolutionList = mdevice->resolutions(); if (resolutionList.count() > 0) { TQString resolutionsstring = ""; TDEResolutionList::iterator it; for (it = resolutionList.begin(); it != resolutionList.end(); ++it) { TDEResolutionPair res = *it; resolutionsstring += TQString("%1x%2
").arg(res.first).arg(res.second); } resolutionsstring += "
"; base->labelDisplayResolutions->setText(resolutionsstring); } else { base->labelDisplayResolutions->setText(i18n("")); } // RandR warning base->labelRandrWarning->setText("NOTE: Any further integration of displays into TDE REQUIRES multi GPU support and other features slated for RandR 2.0.

Development on such features has been sorely lacking for well over a year as of 2012; if you want to see Linux come up to Windows and Macintosh standards in this area please tell the Xorg developers at http://www.x.org/wiki/XorgMailingLists

The TDE project badly needs these features before it can proceed with graphical monitor configuration tools:
* GPU object support
* The ability to query the active driver name for any Xorg output

To recap, this is not a TDE shortcoming, but rather is the result of a lack of fundamental Linux support for graphics configuration!"); } if (m_device->type() == TDEGenericDeviceType::RootSystem) { TDERootSystemDevice* rdevice = static_cast(m_device); TQString formFactorString; TDESystemFormFactor::TDESystemFormFactor formFactor = rdevice->formFactor(); if (formFactor == TDESystemFormFactor::Unclassified) { formFactorString = i18n("Unknown"); } else if (formFactor == TDESystemFormFactor::Desktop) { formFactorString = i18n("Desktop"); } else if (formFactor == TDESystemFormFactor::Laptop) { formFactorString = i18n("Laptop"); } else if (formFactor == TDESystemFormFactor::Server) { formFactorString = i18n("Server"); } base->labelSystemFormFactor->setText(formFactorString); TQString powerStatesString; TDESystemPowerStateList powerStates = rdevice->powerStates(); if (powerStates.count() > 0) { powerStatesString = ""; TDESystemPowerStateList::iterator it; for (it = powerStates.begin(); it != powerStates.end(); ++it) { if ((*it) == TDESystemPowerState::Active) { powerStatesString += i18n("Active
"); } if ((*it) == TDESystemPowerState::Standby) { powerStatesString += i18n("Standby
"); } if ((*it) == TDESystemPowerState::Freeze) { powerStatesString += i18n("Freeze
"); } if ((*it) == TDESystemPowerState::Suspend) { powerStatesString += i18n("Suspend
"); } if ((*it) == TDESystemPowerState::Hibernate) { powerStatesString += i18n("Hibernate
"); } if ((*it) == TDESystemPowerState::PowerOff) { powerStatesString += i18n("Power Off
"); } } powerStatesString += "
"; } else { powerStatesString += i18n(""); } base->labelSystemPowerStates->setText(powerStatesString); base->comboSystemHibernationMethod->setEnabled(rdevice->canSetHibernationMethod()); TDESystemHibernationMethodList hibernationMethods = rdevice->hibernationMethods(); if ((uint)hibernationMethods.count() != (uint)base->comboSystemHibernationMethod->count()) { base->comboSystemHibernationMethod->clear(); m_hibernationComboMap.clear(); int i=0; TQString label; for (TDESystemHibernationMethodList::Iterator it = hibernationMethods.begin(); it != hibernationMethods.end(); ++it) { if ((*it) == TDESystemHibernationMethod::Unsupported) { label = i18n(""); } if ((*it) == TDESystemHibernationMethod::Platform) { label = i18n("Platform"); } if ((*it) == TDESystemHibernationMethod::Shutdown) { label = i18n("Shutdown"); } if ((*it) == TDESystemHibernationMethod::Reboot) { label = i18n("Reboot"); } if ((*it) == TDESystemHibernationMethod::TestProc) { label = i18n("Test Procedure"); } if ((*it) == TDESystemHibernationMethod::Test) { label = i18n("Test"); } base->comboSystemHibernationMethod->insertItem(label, i); m_hibernationComboMap[*it] = i; i++; } } base->comboSystemHibernationMethod->setCurrentItem(m_hibernationComboMap[rdevice->hibernationMethod()]); base->labelSystemUserCanStandby->setText((rdevice->canStandby())?i18n("Yes"):i18n("No")); base->labelSystemUserCanFreeze->setText((rdevice->canFreeze())?i18n("Yes"):i18n("No")); base->labelSystemUserCanSuspend->setText((rdevice->canSuspend())?i18n("Yes"):i18n("No")); base->labelSystemUserCanHibernate->setText((rdevice->canHibernate())?i18n("Yes"):i18n("No")); base->labelSystemUserCanPowerOff->setText((rdevice->canPowerOff())?i18n("Yes"):i18n("No")); base->labelSystemHibernationSpace->setText((rdevice->diskSpaceNeededForHibernation()<0)?i18n(""):TDEHardwareDevices::bytesToFriendlySizeString(rdevice->diskSpaceNeededForHibernation())); } if (m_device->type() == TDEGenericDeviceType::Event) { TDEEventDevice* edevice = static_cast(m_device); TQString availableSwitches; if (edevice->providedSwitches() == TDESwitchType::Null) { availableSwitches = i18n(""); } else { availableSwitches = ""; availableSwitches += assembleSwitchList(edevice->providedSwitches()); availableSwitches += ""; } base->labelEventSwitchTypes->setText(availableSwitches); TQString activeSwitches; if (edevice->activeSwitches() == TDESwitchType::Null) { activeSwitches = i18n(""); } else { activeSwitches = ""; activeSwitches += assembleSwitchList(edevice->activeSwitches()); activeSwitches += ""; } base->labelEventSwitchActive->setText(activeSwitches); } if (m_device->type() == TDEGenericDeviceType::CryptographicCard) { TDECryptographicCardDevice* cdevice = static_cast(m_device); connect(cdevice, TQT_SIGNAL(cardInserted()), this, TQT_SLOT(cryptographicCardInserted())); connect(cdevice, TQT_SIGNAL(cardRemoved()), this, TQT_SLOT(cryptographicCardRemoved())); updateCryptographicCardStatusDisplay(); } } } void DevicePropertiesDialog::cryptographicCardInserted() { updateCryptographicCardStatusDisplay(); } void DevicePropertiesDialog::cryptographicCardRemoved() { updateCryptographicCardStatusDisplay(); } void DevicePropertiesDialog::updateCryptographicCardStatusDisplay() { TDECryptographicCardDevice* cdevice = static_cast(m_device); int status = cdevice->cardPresent(); if ((status < 0) ||(status > 1)) { base->labelCardStatus->setText(i18n("Unknown")); } else if (status == 0) { base->labelCardStatus->setText(i18n("Empty")); } else if (status == 1) { base->labelCardStatus->setText(i18n("Inserted") + TQString("
") + i18n("ATR: %1").arg(cdevice->cardATR())); } } void DevicePropertiesDialog::setCPUGovernor(const TQString &governor) { TDECPUDevice* cdevice = static_cast(m_device); cdevice->setGovernor(governor); populateDeviceInformation(); } void DevicePropertiesDialog::setBacklightBrightness(int value) { TDEBacklightDevice* bdevice = static_cast(m_device); bdevice->setRawBrightness(value); } void DevicePropertiesDialog::setHibernationMethod(int value) { TDERootSystemDevice* rdevice = static_cast(m_device); rdevice->setHibernationMethod(m_hibernationComboMap.keys()[value]); populateDeviceInformation(); } void DevicePropertiesDialog::mountDisk() { TDEStorageDevice* sdevice = static_cast(m_device); // FIXME // This can only mount normal volumes TQString qerror; TQString diskLabel = sdevice->diskLabel(); if (diskLabel.isNull()) { diskLabel = i18n("%1 Removable Device").arg(sdevice->deviceFriendlySize()); } TDEStorageMountOptions mountOptions; TQString mountMessages; TQString mountedPath = sdevice->mountDevice(diskLabel, mountOptions, &mountMessages); if (mountedPath.isNull()) { qerror = i18n("Unable to mount this device.

Potential reasons include:
Improper device and/or user privilege level
Corrupt data on storage device"); if (!mountMessages.isNull()) { qerror.append(i18n("

Technical details:
").append(mountMessages)); } qerror.append(""); } else { qerror = ""; } if (qerror != "") KMessageBox::error(this, qerror, i18n("Mount Failed")); populateDeviceInformation(); } void DevicePropertiesDialog::unmountDisk() { TDEStorageDevice* sdevice = static_cast(m_device); TQString qerror; TQString unmountMessages; int unmountRetcode = 0; if (!sdevice->unmountDevice(&unmountMessages, &unmountRetcode)) { // Unmount failed! qerror = "" + i18n("Unfortunately, the device could not be unmounted."); if (!unmountMessages.isNull()) { qerror.append(i18n("

Technical details:
").append(unmountMessages)); } qerror.append(""); } if (qerror != "") KMessageBox::error(this, qerror, i18n("Unmount Failed")); populateDeviceInformation(); } void DevicePropertiesDialog::cryptLUKSAddKey() { if (m_device->type() == TDEGenericDeviceType::Disk) { TDEStorageDevice* sdevice = static_cast(m_device); TQListViewItem* lvi = base->cryptLUKSKeySlotList->selectedItem(); if (lvi) { TQByteArray new_password; CryptPasswordDialog* passDlg = new CryptPasswordDialog(this, i18n("Enter the new LUKS password for key slot %1").arg(lvi->text(0))); if (passDlg->exec() == TQDialog::Accepted) { new_password = passDlg->password(); delete passDlg; if (!sdevice->cryptOperationsUnlockPasswordSet()) { TQCString password; passDlg = new CryptPasswordDialog(this, i18n("Enter the LUKS device unlock password")); if (passDlg->exec() == TQDialog::Accepted) { sdevice->cryptSetOperationsUnlockPassword(passDlg->password()); } delete passDlg; } if (sdevice->cryptOperationsUnlockPasswordSet()) { if ((lvi->text(1) == sdevice->cryptKeySlotFriendlyName(TDELUKSKeySlotStatus::Inactive)) || (KMessageBox::warningYesNo(this, i18n("You are about to overwrite the key in key slot %1
This action cannot be undone

Are you sure you want to proceed?").arg(lvi->text(0)), i18n("Confirmation Required")) == KMessageBox::Yes)) { if (sdevice->cryptAddKey(lvi->text(0).toUInt(), new_password) != TDELUKSResult::Success) { sdevice->cryptClearOperationsUnlockPassword(); KMessageBox::error(this, i18n("Key write failed
Please check the LUKS password and try again
"), i18n("Key write failure")); } } } } else { delete passDlg; } } } cryptLUKSPopulateList(); } void DevicePropertiesDialog::cryptLUKSDelKey() { if (m_device->type() == TDEGenericDeviceType::Disk) { TDEStorageDevice* sdevice = static_cast(m_device); TQListViewItem* lvi = base->cryptLUKSKeySlotList->selectedItem(); if (lvi) { if (KMessageBox::warningYesNo(this, i18n("You are about to purge the key in key slot %1
This action cannot be undone

Are you sure you want to proceed?").arg(lvi->text(0)), i18n("Confirmation Required")) == KMessageBox::Yes) { if (sdevice->cryptKeySlotStatus()[lvi->text(0).toUInt()] & TDELUKSKeySlotStatus::Last) { if (KMessageBox::warningYesNo(this, i18n("You are about to purge the last active key from the device!

This action will render the contents of the encrypted device permanently inaccessable and cannot be undone

Are you sure you want to proceed?"), i18n("Confirmation Required")) != KMessageBox::Yes) { cryptLUKSPopulateList(); return; } } if (sdevice->cryptDelKey(lvi->text(0).toUInt()) != TDELUKSResult::Success) { sdevice->cryptClearOperationsUnlockPassword(); KMessageBox::error(this, i18n("Key purge failed
The key in key slot %1 is still active
").arg(lvi->text(0)), i18n("Key purge failure")); } } } } cryptLUKSPopulateList(); } void DevicePropertiesDialog::cryptLUKSPopulateList() { unsigned int i; TDEStorageDevice* sdevice = static_cast(m_device); base->cryptLUKSKeySlotList->clear(); unsigned int count = sdevice->cryptKeySlotCount(); TDELUKSKeySlotStatusList status = sdevice->cryptKeySlotStatus(); for (i = 0; i < count; i++) { new TQListViewItem(base->cryptLUKSKeySlotList, TQString("%1").arg(i), sdevice->cryptKeySlotFriendlyName(status[i])); } processLockouts(); } void DevicePropertiesDialog::processLockouts() { if (m_device->type() == TDEGenericDeviceType::Disk) { TDEStorageDevice* sdevice = static_cast(m_device); TQListViewItem* lvi = base->cryptLUKSKeySlotList->selectedItem(); if (lvi) { if (lvi->text(1) == sdevice->cryptKeySlotFriendlyName(TDELUKSKeySlotStatus::Active)) { base->cryptLUKSAddKey->setEnabled(true); base->cryptLUKSDelKey->setEnabled(true); } else { base->cryptLUKSAddKey->setEnabled(true); base->cryptLUKSDelKey->setEnabled(false); } } else { base->cryptLUKSAddKey->setEnabled(false); base->cryptLUKSDelKey->setEnabled(false); } } } void DevicePropertiesDialog::virtual_hook( int id, void* data ) { KDialogBase::virtual_hook( id, data ); } #include "devicepropsdlg.moc"