diff --git a/rpcs3/rpcs3qt/qt_utils.cpp b/rpcs3/rpcs3qt/qt_utils.cpp index c4e8c5a571..5ac9e0207e 100644 --- a/rpcs3/rpcs3qt/qt_utils.cpp +++ b/rpcs3/rpcs3qt/qt_utils.cpp @@ -656,5 +656,22 @@ namespace gui return QStringLiteral("%0 %1").arg(QString::number((size + 0.) / divisor, 'f', 2)).arg(s_units[byte_unit]); } + + QDateTime datetime(s64 time) + { + QDateTime dateTime; + dateTime.setSecsSinceEpoch(time); + return dateTime; + } + + QString format_datetime(const QDateTime& date, const QString& fmt) + { + return date.toString(fmt); + } + + QString format_timestamp(s64 time, const QString& fmt) + { + return format_datetime(datetime(time), fmt); + } } // utils } // gui diff --git a/rpcs3/rpcs3qt/qt_utils.h b/rpcs3/rpcs3qt/qt_utils.h index 10427a9d8a..443148c4ff 100644 --- a/rpcs3/rpcs3qt/qt_utils.h +++ b/rpcs3/rpcs3qt/qt_utils.h @@ -157,6 +157,15 @@ namespace gui // Convert an arbitrary count of bytes to a readable format using global units (KB, MB...) QString format_byte_size(usz size); + // Get a QDateTime from a timestamp + QDateTime datetime(s64 time); + + // Convert a QDateTime to a readable string + QString format_datetime(const QDateTime& date, const QString& fmt = "yyyy-MM-dd HH:mm:ss"); + + // Convert a timestamp to a readable string + QString format_timestamp(s64 time, const QString& fmt = "yyyy-MM-dd HH:mm:ss"); + static inline Qt::ColorScheme color_scheme() { // use the QGuiApplication's properties to report the default GUI color scheme diff --git a/rpcs3/rpcs3qt/save_manager_dialog.cpp b/rpcs3/rpcs3qt/save_manager_dialog.cpp index ba52bed9ff..006e0d9043 100644 --- a/rpcs3/rpcs3qt/save_manager_dialog.cpp +++ b/rpcs3/rpcs3qt/save_manager_dialog.cpp @@ -32,17 +32,6 @@ LOG_CHANNEL(gui_log, "GUI"); -namespace -{ - // Helper converters - QString FormatTimestamp(s64 time) - { - QDateTime dateTime; - dateTime.setSecsSinceEpoch(time); - return dateTime.toString("yyyy-MM-dd HH:mm:ss"); - } -} - enum SaveColumns { Icon = 0, @@ -376,7 +365,7 @@ void save_manager_dialog::UpdateList() titleItem->setFlags(titleItem->flags() & ~Qt::ItemIsEditable); m_list->setItem(i, SaveColumns::Name, titleItem); - custom_table_widget_item* timeItem = new custom_table_widget_item(FormatTimestamp(entry.mtime)); + custom_table_widget_item* timeItem = new custom_table_widget_item(gui::utils::format_timestamp(entry.mtime)); timeItem->setFlags(timeItem->flags() & ~Qt::ItemIsEditable); m_list->setItem(i, SaveColumns::Time, timeItem); @@ -683,7 +672,7 @@ void save_manager_dialog::UpdateDetails() m_details_title->setText(QString::fromStdString(save.title)); m_details_subtitle->setText(QString::fromStdString(save.subtitle)); - m_details_modified->setText(tr("Last modified: %1").arg(FormatTimestamp(save.mtime))); + m_details_modified->setText(tr("Last modified: %1").arg(gui::utils::format_timestamp(save.mtime))); m_details_details->setText(tr("Details:\n").append(QString::fromStdString(save.details))); QString note = tr("Note:\n"); const QString dir_name = QString::fromStdString(save.dirName); diff --git a/rpcs3/rpcs3qt/savestate_manager_dialog.cpp b/rpcs3/rpcs3qt/savestate_manager_dialog.cpp index d6ac40785c..97608f1b7f 100644 --- a/rpcs3/rpcs3qt/savestate_manager_dialog.cpp +++ b/rpcs3/rpcs3qt/savestate_manager_dialog.cpp @@ -676,14 +676,12 @@ void savestate_manager_dialog::PopulateSavestateTable() m_savestate_table->setRowCount(static_cast(savestates.size())); m_savestate_table->setSortingEnabled(false); // Disable sorting before using setItem calls - const QLocale locale{}; - for (int i = 0; i < static_cast(savestates.size()); i++) { const savestate_data& savestate = savestates[i]; m_savestate_table->setItem(i, static_cast(gui::savestate_list_columns::name), new custom_table_widget_item(savestate.name)); m_savestate_table->setItem(i, static_cast(gui::savestate_list_columns::compatible), new custom_table_widget_item(savestate.is_compatible ? tr("Compatible") : tr("Not compatible"), Qt::UserRole, savestate.is_compatible)); - m_savestate_table->setItem(i, static_cast(gui::savestate_list_columns::date), new custom_table_widget_item(savestate.date.toString(), Qt::UserRole, savestate.date)); + m_savestate_table->setItem(i, static_cast(gui::savestate_list_columns::date), new custom_table_widget_item(gui::utils::format_datetime(savestate.date), Qt::UserRole, savestate.date)); m_savestate_table->setItem(i, static_cast(gui::savestate_list_columns::path), new custom_table_widget_item(savestate.path)); } diff --git a/rpcs3/rpcs3qt/trophy_manager_dialog.cpp b/rpcs3/rpcs3qt/trophy_manager_dialog.cpp index 709875a22b..bae7aae25d 100644 --- a/rpcs3/rpcs3qt/trophy_manager_dialog.cpp +++ b/rpcs3/rpcs3qt/trophy_manager_dialog.cpp @@ -925,7 +925,7 @@ void trophy_manager_dialog::ShowTrophyTableContextMenu(const QPoint& pos) } if (QTableWidgetItem* date_item = m_trophy_table->item(row, static_cast(gui::trophy_list_columns::time_unlocked))) { - date_item->setText(tick ? QLocale().toString(TickToDateTime(tick), gui::persistent::last_played_date_with_time_of_day_format) : tr("Unknown")); + date_item->setText(tick ? gui::utils::format_datetime(TickToDateTime(tick), gui::persistent::last_played_date_with_time_of_day_format) : tr("Unknown")); date_item->setData(Qt::UserRole, QVariant::fromValue(tick)); } }); @@ -1129,8 +1129,6 @@ void trophy_manager_dialog::PopulateTrophyTable() QPixmap placeholder(m_icon_height, m_icon_height); placeholder.fill(Qt::transparent); - const QLocale locale{}; - std::shared_ptr trophy_base = data->trop_config.GetRoot(); if (!trophy_base) { @@ -1189,7 +1187,7 @@ void trophy_manager_dialog::PopulateTrophyTable() // Get timestamp const u64 tick = data->trop_usr->GetTrophyTimestamp(trophy_id); - const QString datetime = tick ? locale.toString(TickToDateTime(tick), gui::persistent::last_played_date_with_time_of_day_format) : tr("Unknown"); + const QString datetime = tick ? gui::utils::format_datetime(TickToDateTime(tick), gui::persistent::last_played_date_with_time_of_day_format) : tr("Unknown"); const QString unlockstate = data->trop_usr->GetTrophyUnlockState(trophy_id) ? tr("Earned") : tr("Not Earned");