Use TB by default with GB option

This commit is contained in:
Spiros
2024-06-16 17:08:54 +03:00
parent c292ade8d3
commit 78341f7ad4
5 changed files with 153 additions and 102 deletions

View File

@@ -67,12 +67,11 @@ MainWindow::MainWindow(QWidget *parent)
badColor = QColor(Qt::red);
naColor = QColor(Qt::gray);
actionCyclic_Navigation = ui->actionCyclic_Navigation;
ui->actionIgnore_C4_Reallocation_Event_Count->setChecked(settings.value("IgnoreC4", true).toBool());
ui->actionHEX->setChecked(settings.value("HEX", true).toBool());
ui->actionUse_Fahrenheit->setChecked(settings.value("Fahrenheit", false).toBool());
actionCyclic_Navigation->setChecked(settings.value("CyclicNavigation", false).toBool());
ui->actionCyclic_Navigation->setChecked(settings.value("CyclicNavigation", false).toBool());
ui->actionUse_GB_instead_of_TB->setChecked(settings.value("UseGB", false).toBool());
QAction *toggleEchoModeAction = serialNumberLineEdit->addAction(QIcon::fromTheme(QStringLiteral("visibility")), QLineEdit::TrailingPosition);
connect(toggleEchoModeAction, &QAction::triggered, this, [=]() {
@@ -113,8 +112,8 @@ void MainWindow::onPrevButtonClicked()
void MainWindow::updateNavigationButtons(int currentIndex)
{
prevButton->setEnabled(currentIndex > 0||actionCyclic_Navigation->isChecked()); // We can use setVisible if we want to mimic CrystalDiskInfo
nextButton->setEnabled(currentIndex < buttonGroup->buttons().size() - 1||actionCyclic_Navigation->isChecked());
prevButton->setEnabled(currentIndex > 0||ui->actionCyclic_Navigation->isChecked()); // We can use setVisible if we want to mimic CrystalDiskInfo
nextButton->setEnabled(currentIndex < buttonGroup->buttons().size() - 1||ui->actionCyclic_Navigation->isChecked());
}
QString getSmartctlPath() {
@@ -202,9 +201,17 @@ void MainWindow::updateUI()
QString health;
QColor healthColor;
float userCapacityGB = localObj.value("user_capacity").toObject().value("bytes").toDouble() / 1e9;
QString gbSymbol = QLocale().formattedDataSize(1 << 30, 1, QLocale::DataSizeTraditionalFormat).split(' ')[1];
QString userCapacityString = locale.toString(userCapacityGB, 'f', 1) + " " + gbSymbol;
float diskCapacityGB = localObj.value("user_capacity").toObject().value("bytes").toDouble() / 1e9;
QString gbSymbol = locale.formattedDataSize(1 << 30, 1, QLocale::DataSizeTraditionalFormat).split(' ')[1];
QString tbSymbol = locale.formattedDataSize(qint64(1) << 40, 1, QLocale::DataSizeTraditionalFormat).split(' ')[1];
QString diskCapacityString;
int diskCapacityGbInt = static_cast<int>(diskCapacityGB);
bool useGB = ui->actionUse_GB_instead_of_TB->isChecked();
if (diskCapacityGbInt < 1000 || useGB) {
diskCapacityString = locale.toString(diskCapacityGB, 'f', 1) + " " + gbSymbol;
} else {
diskCapacityString = QString::number(diskCapacityGbInt/1000) + " " + tbSymbol;
}
QString protocol = localObj["device"].toObject()["protocol"].toString();
bool isNvme = (protocol == "NVMe");
@@ -273,12 +280,12 @@ void MainWindow::updateUI()
}
CustomButton *button = new CustomButton(health, temperature, deviceName, healthColor, this);
button->setToolTip(tr("Disk") + " " + QString::number(i) + " : " + modelName + " : " + userCapacityString);
button->setToolTip(tr("Disk") + " " + QString::number(i) + " : " + modelName + " : " + diskCapacityString);
buttonGroup->addButton(button);
horizontalLayout->addWidget(button);
QAction *diskAction = new QAction("(" + QString::number(i+1) + ") " + modelName + " " + userCapacityString, this);
QAction *diskAction = new QAction("(" + QString::number(i+1) + ") " + modelName + " " + diskCapacityString, this);
diskAction->setCheckable(true);
menuDisk->addAction(diskAction);
disksGroup->addAction(diskAction);
@@ -288,7 +295,7 @@ void MainWindow::updateUI()
int buttonIndex = buttonGroup->buttons().indexOf(button);
auto populateAndNavigate = [=]() {
auto updateWindow = [=]() {
if (isNvme) {
populateWindow(localObj, health, nvmeSmartOrdered);
} else {
@@ -298,12 +305,12 @@ void MainWindow::updateUI()
};
connect(button, &QPushButton::clicked, this, [=]() {
populateAndNavigate();
updateWindow();
disksGroup->actions().at(buttonIndex)->setChecked(true);
});
connect(diskAction, &QAction::triggered, this, [=]() {
populateAndNavigate();
updateWindow();
});
if (firstTime) {
@@ -391,12 +398,22 @@ void MainWindow::populateWindow(const QJsonObject &localObj, const QString &heal
QJsonObject nvmeLog = localObj["nvme_smart_health_information_log"].toObject();
QString modelName = localObj["model_name"].toString();
QString firmwareVersion = localObj["firmware_version"].toString();
float userCapacityGB = localObj.value("user_capacity").toObject().value("bytes").toDouble() / 1e9;
float diskCapacityGB = localObj.value("user_capacity").toObject().value("bytes").toDouble() / 1e9;
int diskCapacityGbInt = static_cast<int>(diskCapacityGB);
int temperatureInt = localObj["temperature"].toObject()["current"].toInt();
int totalWritesInt = 0;
int totalReadsInt = 0;
QString gbSymbol = QLocale().formattedDataSize(1 << 30, 1, QLocale::DataSizeTraditionalFormat).split(' ')[1];
QString userCapacityString = locale.toString(userCapacityGB, 'f', 1) + " " + gbSymbol;
bool useGB = ui->actionUse_GB_instead_of_TB->isChecked();
QString gbSymbol = locale.formattedDataSize(1 << 30, 1, QLocale::DataSizeTraditionalFormat).split(' ')[1];
QString tbSymbol = locale.formattedDataSize(qint64(1) << 40, 1, QLocale::DataSizeTraditionalFormat).split(' ')[1];
QString diskCapacityString;
if (diskCapacityGbInt < 1000 || useGB) {
diskCapacityString = locale.toString(diskCapacityGB, 'f', 1) + " " + gbSymbol;
} else {
diskCapacityString = QString::number(diskCapacityGbInt/1000) + " " + tbSymbol;
}
QString totalReads;
QString totalWrites;
QString percentage = "";
@@ -457,7 +474,7 @@ void MainWindow::populateWindow(const QJsonObject &localObj, const QString &heal
deviceJson = localObj;
diskName->setText("<html><head/><body><p><span style='font-size:14pt; font-weight:bold;'>" + modelName + " " + userCapacityString + "</span></p></body></html>");
diskName->setText("<html><head/><body><p><span style='font-size:14pt; font-weight:bold;'>" + modelName + " " + diskCapacityString + "</span></p></body></html>");
firmwareLineEdit->setText(firmwareVersion);
serialNumberLineEdit->setText(serialNumber);
typeLineEdit->setText(type);
@@ -600,13 +617,21 @@ void MainWindow::populateWindow(const QJsonObject &localObj, const QString &heal
}
if (totalReadsInt) {
totalReads = QString::number(static_cast<int>(totalReadsInt)) + " " + gbSymbol;
if (totalReadsInt < 1000 || useGB) {
totalReads = QString::number(totalReadsInt) + " " + gbSymbol;
} else {
totalReads = QString::number(totalReadsInt/1000) + " " + tbSymbol;
}
} else {
totalReads = "----";
}
if (totalWritesInt) {
totalWrites = QString::number(static_cast<int>(totalWritesInt)) + " " + gbSymbol;
if (totalWritesInt < 1000 || useGB) {
totalWrites = QString::number(totalWritesInt) + " " + gbSymbol;
} else {
totalWrites = QString::number(totalWritesInt/1000) + " " + tbSymbol;
}
} else {
totalWrites = "----";
}
@@ -1190,3 +1215,12 @@ void MainWindow::mousePressEvent(QMouseEvent *event)
onPrevButtonClicked();
}
}
void MainWindow::on_actionUse_GB_instead_of_TB_toggled(bool gigabytes)
{
settings.setValue("UseGB", ui->actionUse_GB_instead_of_TB->isChecked());
if (!initializing) {
clearButtonGroup();
updateUI();
}
}

View File

@@ -58,6 +58,8 @@ private slots:
void on_actionCyclic_Navigation_toggled(bool arg1);
void on_actionUse_GB_instead_of_TB_toggled(bool arg1);
private:
Ui::MainWindow *ui;
QLocale locale;

View File

@@ -345,6 +345,7 @@
<addaction name="actionHEX"/>
<addaction name="actionUse_Fahrenheit"/>
<addaction name="actionCyclic_Navigation"/>
<addaction name="actionUse_GB_instead_of_TB"/>
</widget>
<widget class="QMenu" name="menuHelp">
<property name="title">
@@ -452,7 +453,15 @@
<bool>true</bool>
</property>
<property name="text">
<string>Cyclic Navigation</string>
<string>Cyclic &amp;Navigation</string>
</property>
</action>
<action name="actionUse_GB_instead_of_TB">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Use GB instead of TB</string>
</property>
</action>
</widget>

Binary file not shown.

View File

@@ -55,7 +55,7 @@
</message>
<message>
<location filename="../src/mainwindow.ui" line="225"/>
<location filename="../src/mainwindow.cpp" line="421"/>
<location filename="../src/mainwindow.cpp" line="440"/>
<source>Type</source>
<translation>Τύπος</translation>
</message>
@@ -81,7 +81,7 @@
</message>
<message>
<location filename="../src/mainwindow.ui" line="303"/>
<location filename="../src/mainwindow.cpp" line="421"/>
<location filename="../src/mainwindow.cpp" line="440"/>
<source>Power On Hours</source>
<translation>Ώρες Λειτουργίας</translation>
</message>
@@ -96,170 +96,176 @@
<translation>Ρυθμίσεις</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="388"/>
<location filename="../src/mainwindow.ui" line="389"/>
<source>&amp;Quit</source>
<translation>Έξοδος</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="399"/>
<location filename="../src/mainwindow.ui" line="400"/>
<source>&amp;Refresh Devices</source>
<translation>Ανανέωση Συσκευών</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="434"/>
<location filename="../src/mainwindow.ui" line="435"/>
<source>&amp;Convert Raw values to HEX</source>
<translation>Μετατροπή των τιμών σε δεκαεξαδικές</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="447"/>
<location filename="../src/mainwindow.ui" line="448"/>
<source>Self Test</source>
<translation>Αυτοδιάγνωση</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="455"/>
<source>Cyclic Navigation</source>
<translation>Κυκλική Πλοήγηση</translation>
<location filename="../src/mainwindow.ui" line="456"/>
<source>Cyclic &amp;Navigation</source>
<translation>Kυκλική Πλοήγηση</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="351"/>
<location filename="../src/mainwindow.ui" line="464"/>
<source>Use GB instead of TB</source>
<translation>Χρήση GB αντί TB</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="352"/>
<source>&amp;Help</source>
<translation>Βοήθεια</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="359"/>
<location filename="../src/mainwindow.ui" line="360"/>
<source>De&amp;vice</source>
<translation>Συσκευή</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="366"/>
<location filename="../src/mainwindow.ui" line="367"/>
<location filename="../src/mainwindow.cpp" line="283"/>
<source>Disk</source>
<translation>Δίσκος</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="380"/>
<location filename="../src/mainwindow.ui" line="381"/>
<source>&amp;Save JSON</source>
<translation>Αποθήκευση JSON</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="407"/>
<location filename="../src/mainwindow.ui" line="408"/>
<source>&amp;GitHub</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="415"/>
<location filename="../src/mainwindow.ui" line="416"/>
<source>&amp;About</source>
<translation>Σχετικά</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="426"/>
<location filename="../src/mainwindow.ui" line="427"/>
<source>&amp;Ignore C4 (Reallocated Event Count)</source>
<translation>Αγνόησε το C4 (Reallocated Event Count)</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="442"/>
<location filename="../src/mainwindow.ui" line="443"/>
<source>&amp;Use Fahrenheit</source>
<translation>Χρήση Fahrenheit</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="262"/>
<location filename="../src/mainwindow.cpp" line="647"/>
<location filename="../src/mainwindow.cpp" line="269"/>
<location filename="../src/mainwindow.cpp" line="709"/>
<source>Good</source>
<translation>Καλή</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="265"/>
<location filename="../src/mainwindow.cpp" line="645"/>
<location filename="../src/mainwindow.cpp" line="272"/>
<location filename="../src/mainwindow.cpp" line="707"/>
<source>Caution</source>
<translation>Προσοχή</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="268"/>
<location filename="../src/mainwindow.cpp" line="643"/>
<location filename="../src/mainwindow.cpp" line="275"/>
<location filename="../src/mainwindow.cpp" line="705"/>
<source>Bad</source>
<translation>Κακή</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="271"/>
<location filename="../src/mainwindow.cpp" line="278"/>
<source>Unknown</source>
<translation>Άγνωστη</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="745"/>
<location filename="../src/mainwindow.cpp" line="849"/>
<location filename="../src/mainwindow.cpp" line="813"/>
<location filename="../src/mainwindow.cpp" line="917"/>
<source>Attribute Name</source>
<translation>Ιδιότητα</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="745"/>
<location filename="../src/mainwindow.cpp" line="849"/>
<location filename="../src/mainwindow.cpp" line="813"/>
<location filename="../src/mainwindow.cpp" line="917"/>
<source>Raw Values</source>
<translation>Τιμή</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="849"/>
<location filename="../src/mainwindow.cpp" line="917"/>
<source>Current</source>
<translation>Τρέχουσα</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="849"/>
<location filename="../src/mainwindow.cpp" line="917"/>
<source>Worst</source>
<translation>Χειρότερη</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="849"/>
<location filename="../src/mainwindow.cpp" line="917"/>
<source>Threshold</source>
<translation>Όριο</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="152"/>
<location filename="../src/mainwindow.cpp" line="337"/>
<location filename="../src/mainwindow.cpp" line="382"/>
<location filename="../src/mainwindow.cpp" line="961"/>
<location filename="../src/mainwindow.cpp" line="1134"/>
<location filename="../src/mainwindow.cpp" line="1138"/>
<location filename="../src/mainwindow.cpp" line="151"/>
<location filename="../src/mainwindow.cpp" line="344"/>
<location filename="../src/mainwindow.cpp" line="389"/>
<location filename="../src/mainwindow.cpp" line="1029"/>
<location filename="../src/mainwindow.cpp" line="1202"/>
<location filename="../src/mainwindow.cpp" line="1206"/>
<source>KDiskInfo Error</source>
<translation>Σφάλμα KDiskInfo</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="152"/>
<location filename="../src/mainwindow.cpp" line="151"/>
<source>smartctl was not found, please install it!</source>
<translation>Το smartctl δε βρέθηκε, παρακαλείσθε να το εγκαταστήσετε</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="337"/>
<location filename="../src/mainwindow.cpp" line="344"/>
<source>KDiskInfo needs root access in order to request a self-test!</source>
<translation>Το KDiskInfo χρειάζεται δικαιώματα υπερχρήστη για να εκτελέσει την αυτοδιάγνωση!</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="363"/>
<location filename="../src/mainwindow.cpp" line="370"/>
<source>Test Already Running</source>
<translation>Μία αυτοδιάγνωση είναι ήδη σε εκτέλεση</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="376"/>
<location filename="../src/mainwindow.cpp" line="383"/>
<source>A self-test has been requested successfully</source>
<translation>Η αυτοδιάγνωση ξεκίνησε επιτυχώς</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="380"/>
<location filename="../src/mainwindow.cpp" line="1136"/>
<location filename="../src/mainwindow.cpp" line="387"/>
<location filename="../src/mainwindow.cpp" line="1204"/>
<source>Test Requested</source>
<translation>Η αυτοδιάγνωση ξεκίνησε</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="382"/>
<location filename="../src/mainwindow.cpp" line="1138"/>
<location filename="../src/mainwindow.cpp" line="389"/>
<location filename="../src/mainwindow.cpp" line="1206"/>
<source>Error: Something went wrong</source>
<translation>Σφάλμα: Κάτι πήγε στραβά</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="421"/>
<location filename="../src/mainwindow.cpp" line="440"/>
<source>Status</source>
<translation>Κατάσταση</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="59"/>
<location filename="../src/mainwindow.cpp" line="451"/>
<location filename="../src/mainwindow.cpp" line="470"/>
<source>Self Test Log</source>
<translation>Καταγραφολόγιο Αυτοδιάγνωσης</translation>
</message>
@@ -269,165 +275,165 @@
<translation>Εκκίνηση Αυτοδιάγνωσης</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="364"/>
<location filename="../src/mainwindow.cpp" line="371"/>
<source>A self-test is already being performed</source>
<translation>Μία αυτοδιάγνωση εκτελείτε αυτή τη στιγμή</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="364"/>
<location filename="../src/mainwindow.cpp" line="371"/>
<source>You can press the Ok button in order to abort the test that is currently running</source>
<translation>Μπορείτε να πατήσετε το κουμπί Εντάξει για να ακυρώσετε την τρέχουσα αυτοδιάγνωση</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="378"/>
<location filename="../src/mainwindow.cpp" line="385"/>
<source>minutes</source>
<translation>λεπτά</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="684"/>
<location filename="../src/mainwindow.cpp" line="746"/>
<source>Min.)</source>
<translation>Λεπ.)</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="675"/>
<location filename="../src/mainwindow.cpp" line="716"/>
<location filename="../src/mainwindow.cpp" line="737"/>
<location filename="../src/mainwindow.cpp" line="784"/>
<source>Short</source>
<translation>Σύντομο</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="358"/>
<location filename="../src/mainwindow.cpp" line="365"/>
<source>remaining</source>
<translation>απομένει</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="359"/>
<location filename="../src/mainwindow.cpp" line="366"/>
<source>completed</source>
<translation>ολοκληρώθηκε</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="378"/>
<location filename="../src/mainwindow.cpp" line="385"/>
<source>It will be completed after</source>
<translation>Θα τελειώσει μετά από</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="486"/>
<location filename="../src/mainwindow.cpp" line="505"/>
<source>count</source>
<translation>μονάδες</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="497"/>
<location filename="../src/mainwindow.cpp" line="516"/>
<source>hours</source>
<translation>ώρες</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="677"/>
<location filename="../src/mainwindow.cpp" line="739"/>
<source>Conveyance</source>
<translation>Μεταφορά</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="679"/>
<location filename="../src/mainwindow.cpp" line="722"/>
<location filename="../src/mainwindow.cpp" line="741"/>
<location filename="../src/mainwindow.cpp" line="790"/>
<source>Extended</source>
<translation>Εμπεριστατωμένο</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="745"/>
<location filename="../src/mainwindow.cpp" line="849"/>
<location filename="../src/mainwindow.cpp" line="813"/>
<location filename="../src/mainwindow.cpp" line="917"/>
<source>ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="780"/>
<location filename="../src/mainwindow.cpp" line="848"/>
<source>Available spare capacity has fallen below the threshold</source>
<translation>Η υγεία του δίσκου έχει πέσει κάτω από το όριο</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="782"/>
<location filename="../src/mainwindow.cpp" line="850"/>
<source>Temperature error (Overheat or Overcool)</source>
<translation>Σφάλμα θερμοκρασίας (Υπερθέρμανση ή Υπερψύξη)</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="784"/>
<location filename="../src/mainwindow.cpp" line="852"/>
<source>NVM subsystem reliability has been degraded</source>
<translation>Η αξιοπιστία του NVMe έχει μειωθεί</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="786"/>
<location filename="../src/mainwindow.cpp" line="854"/>
<source>Media has been placed in Read Only Mode</source>
<translation>Το μέσο έχει τεθεί αποκλειστικά σε λειτουργία ανάγνωσης</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="788"/>
<location filename="../src/mainwindow.cpp" line="856"/>
<source>Volatile memory backup device has Failed</source>
<translation>Η δημιουργία αρχείου επαναφοράς της μη διατηρήσιμης μνήμης απέτυχε</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="790"/>
<location filename="../src/mainwindow.cpp" line="858"/>
<source>Persistent memory region has become Read-Only</source>
<translation>Η διατηρήσιμη μνήμη έχει μεταβεί αποκλειστικά σε λειτουργία ανάγνωσης</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="842"/>
<location filename="../src/mainwindow.cpp" line="910"/>
<source>Critical Warning</source>
<translation>Σημαντική Προειδοποίηση</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="961"/>
<location filename="../src/mainwindow.cpp" line="1029"/>
<source>KDiskInfo needs root access in order to read S.M.A.R.T. data!</source>
<translation>Το KDiskInfo χρειάζεται δικαιώματα υπερχρήστη για να προσπελάσει τα δεδομένα S.M.A.R.T.!</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1022"/>
<location filename="../src/mainwindow.cpp" line="1090"/>
<source>Empty JSON</source>
<translation>Κενό JSON</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1023"/>
<location filename="../src/mainwindow.cpp" line="1091"/>
<source>The JSON is empty</source>
<translation>Αυτό το JSON είναι κενό</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1028"/>
<location filename="../src/mainwindow.cpp" line="1096"/>
<source>Save JSON</source>
<translation>Αποθήκευση JSON</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1029"/>
<location filename="../src/mainwindow.cpp" line="1097"/>
<source>JSON (*.json);;All Files (*)</source>
<translation>JSON (*.json);;;Όλα τα αρχεία (*)</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1035"/>
<location filename="../src/mainwindow.cpp" line="1103"/>
<source>Unable to open file for writing</source>
<translation>Δεν είναι δυνατό το άνοιγμα αυτού του αρχείου για εγγραφή</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1063"/>
<location filename="../src/mainwindow.cpp" line="1131"/>
<source>An ATA and NVMe S.M.A.R.T. data viewer for Linux</source>
<translation>Ένας αναγνώστης S.M.A.R.T. για τα Linux</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1064"/>
<location filename="../src/mainwindow.cpp" line="1132"/>
<source>Licensed under the GNU G.P.L. Version 3</source>
<translation>Διατίθεται υπό την άδεια GNU G.P.L. Έκδοση 3</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1134"/>
<location filename="../src/mainwindow.cpp" line="1202"/>
<source>KDiskInfo needs root access in order to abort a self-test!</source>
<translation>Το KDiskInfo χρειάζεται δικαιώματα υπερχρήστη για να ακυρώσει μία αυτοδιάγνωση!</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1136"/>
<location filename="../src/mainwindow.cpp" line="1204"/>
<source>The self-test has been aborted</source>
<translation>Η τρέχουσα αυτοδιάγνωση ακυρώθηκε</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1065"/>
<location filename="../src/mainwindow.cpp" line="1133"/>
<source>Made by Samantas5855</source>
<translation>Δημιουργήθηκε από τον Samantas5855</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1067"/>
<location filename="../src/mainwindow.cpp" line="1135"/>
<source>About KDiskInfo</source>
<translation>Σχετικά με το KDiskInfo</translation>
</message>