game_list: Make add-ons column optional
As the add-ons column takes the most processing time out of any (as it needs to search registration for updates/dlc, patch control NCAs, search for mods, etc.), an option was added to disable it. This does not affect the application of add-ons. In large game collections, this decreases game list refresh time by as much as 70%.
This commit is contained in:
		| @@ -162,6 +162,7 @@ void Config::ReadValues() { | ||||
|  | ||||
|     qt_config->beginGroup("UIGameList"); | ||||
|     UISettings::values.show_unknown = qt_config->value("show_unknown", true).toBool(); | ||||
|     UISettings::values.show_add_ons = qt_config->value("show_add_ons", true).toBool(); | ||||
|     UISettings::values.icon_size = qt_config->value("icon_size", 64).toUInt(); | ||||
|     UISettings::values.row_1_text_id = qt_config->value("row_1_text_id", 3).toUInt(); | ||||
|     UISettings::values.row_2_text_id = qt_config->value("row_2_text_id", 2).toUInt(); | ||||
| @@ -298,6 +299,7 @@ void Config::SaveValues() { | ||||
|  | ||||
|     qt_config->beginGroup("UIGameList"); | ||||
|     qt_config->setValue("show_unknown", UISettings::values.show_unknown); | ||||
|     qt_config->setValue("show_add_ons", UISettings::values.show_add_ons); | ||||
|     qt_config->setValue("icon_size", UISettings::values.icon_size); | ||||
|     qt_config->setValue("row_1_text_id", UISettings::values.row_1_text_id); | ||||
|     qt_config->setValue("row_2_text_id", UISettings::values.row_2_text_id); | ||||
|   | ||||
| @@ -42,6 +42,7 @@ ConfigureGameList::~ConfigureGameList() = default; | ||||
|  | ||||
| void ConfigureGameList::applyConfiguration() { | ||||
|     UISettings::values.show_unknown = ui->show_unknown->isChecked(); | ||||
|     UISettings::values.show_add_ons = ui->show_add_ons->isChecked(); | ||||
|     UISettings::values.icon_size = ui->icon_size_combobox->currentData().toUInt(); | ||||
|     UISettings::values.row_1_text_id = ui->row_1_text_combobox->currentData().toUInt(); | ||||
|     UISettings::values.row_2_text_id = ui->row_2_text_combobox->currentData().toUInt(); | ||||
| @@ -50,6 +51,7 @@ void ConfigureGameList::applyConfiguration() { | ||||
|  | ||||
| void ConfigureGameList::setConfiguration() { | ||||
|     ui->show_unknown->setChecked(UISettings::values.show_unknown); | ||||
|     ui->show_add_ons->setChecked(UISettings::values.show_add_ons); | ||||
|     ui->icon_size_combobox->setCurrentIndex( | ||||
|         ui->icon_size_combobox->findData(UISettings::values.icon_size)); | ||||
|     ui->row_1_text_combobox->setCurrentIndex( | ||||
|   | ||||
| @@ -1,126 +1,133 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <ui version="4.0"> | ||||
|  <class>ConfigureGameList</class> | ||||
|   <widget class="QWidget" name="ConfigureGeneral"> | ||||
|     <property name="geometry"> | ||||
|       <rect> | ||||
|         <x>0</x> | ||||
|         <y>0</y> | ||||
|         <width>300</width> | ||||
|         <height>377</height> | ||||
|       </rect> | ||||
|     </property> | ||||
|     <property name="windowTitle"> | ||||
|       <string>Form</string> | ||||
|     </property> | ||||
|     <layout class="QHBoxLayout" name="HorizontalLayout"> | ||||
|       <item> | ||||
|         <layout class="QVBoxLayout" name="VerticalLayout"> | ||||
|  <widget class="QWidget" name="ConfigureGameList"> | ||||
|   <property name="geometry"> | ||||
|    <rect> | ||||
|     <x>0</x> | ||||
|     <y>0</y> | ||||
|     <width>300</width> | ||||
|     <height>377</height> | ||||
|    </rect> | ||||
|   </property> | ||||
|   <property name="windowTitle"> | ||||
|    <string>Form</string> | ||||
|   </property> | ||||
|   <layout class="QHBoxLayout" name="HorizontalLayout"> | ||||
|    <item> | ||||
|     <layout class="QVBoxLayout" name="VerticalLayout"> | ||||
|      <item> | ||||
|       <widget class="QGroupBox" name="GeneralGroupBox"> | ||||
|        <property name="title"> | ||||
|         <string>General</string> | ||||
|        </property> | ||||
|        <layout class="QHBoxLayout" name="GeneralHorizontalLayout"> | ||||
|         <item> | ||||
|          <layout class="QVBoxLayout" name="GeneralVerticalLayout"> | ||||
|           <item> | ||||
|             <widget class="QGroupBox" name="GeneralGroupBox"> | ||||
|               <property name="title"> | ||||
|                 <string>General</string> | ||||
|               </property> | ||||
|               <layout class="QHBoxLayout" name="GeneralHorizontalLayout"> | ||||
|                 <item> | ||||
|                   <layout class="QVBoxLayout" name="GeneralVerticalLayout"> | ||||
|                     <item> | ||||
|                       <widget class="QCheckBox" name="show_unknown"> | ||||
|                         <property name="text"> | ||||
|                           <string>Show files with type 'Unknown'</string> | ||||
|                         </property> | ||||
|                       </widget> | ||||
|                     </item> | ||||
|                   </layout> | ||||
|                 </item> | ||||
|               </layout> | ||||
|             </widget> | ||||
|            <widget class="QCheckBox" name="show_unknown"> | ||||
|             <property name="text"> | ||||
|              <string>Show files with type 'Unknown'</string> | ||||
|             </property> | ||||
|            </widget> | ||||
|           </item> | ||||
|           <item> | ||||
|             <widget class="QGroupBox" name="IconSizeGroupBox"> | ||||
|               <property name="title"> | ||||
|                 <string>Icon Size</string> | ||||
|            <widget class="QCheckBox" name="show_add_ons"> | ||||
|             <property name="text"> | ||||
|              <string>Show Add-Ons Column</string> | ||||
|             </property> | ||||
|            </widget> | ||||
|           </item> | ||||
|          </layout> | ||||
|         </item> | ||||
|        </layout> | ||||
|       </widget> | ||||
|      </item> | ||||
|      <item> | ||||
|       <widget class="QGroupBox" name="IconSizeGroupBox"> | ||||
|        <property name="title"> | ||||
|         <string>Icon Size</string> | ||||
|        </property> | ||||
|        <layout class="QHBoxLayout" name="icon_size_qhbox_layout"> | ||||
|         <item> | ||||
|          <layout class="QVBoxLayout" name="icon_size_qvbox_layout"> | ||||
|           <item> | ||||
|            <layout class="QHBoxLayout" name="icon_size_qhbox_layout_2"> | ||||
|             <item> | ||||
|              <widget class="QLabel" name="icon_size_label"> | ||||
|               <property name="text"> | ||||
|                <string>Icon Size:</string> | ||||
|               </property> | ||||
|               <layout class="QHBoxLayout" name="icon_size_qhbox_layout"> | ||||
|                 <item> | ||||
|                   <layout class="QVBoxLayout" name="icon_size_qvbox_layout"> | ||||
|                     <item> | ||||
|                       <layout class="QHBoxLayout" name="icon_size_qhbox_layout_2"> | ||||
|                         <item> | ||||
|                           <widget class="QLabel" name="icon_size_label"> | ||||
|                             <property name="text"> | ||||
|                               <string>Icon Size:</string> | ||||
|                             </property> | ||||
|                           </widget> | ||||
|                         </item> | ||||
|                         <item> | ||||
|                           <widget class="QComboBox" name="icon_size_combobox"/> | ||||
|                         </item> | ||||
|                       </layout> | ||||
|                     </item> | ||||
|                   </layout> | ||||
|                 </item> | ||||
|               </layout> | ||||
|             </widget> | ||||
|              </widget> | ||||
|             </item> | ||||
|             <item> | ||||
|              <widget class="QComboBox" name="icon_size_combobox"/> | ||||
|             </item> | ||||
|            </layout> | ||||
|           </item> | ||||
|          </layout> | ||||
|         </item> | ||||
|        </layout> | ||||
|       </widget> | ||||
|      </item> | ||||
|      <item> | ||||
|       <widget class="QGroupBox" name="RowGroupBox"> | ||||
|        <property name="title"> | ||||
|         <string>Row Text</string> | ||||
|        </property> | ||||
|        <layout class="QHBoxLayout" name="RowHorizontalLayout"> | ||||
|         <item> | ||||
|          <layout class="QVBoxLayout" name="RowVerticalLayout"> | ||||
|           <item> | ||||
|            <layout class="QHBoxLayout" name="row_1_qhbox_layout"> | ||||
|             <item> | ||||
|              <widget class="QLabel" name="row_1_label"> | ||||
|               <property name="text"> | ||||
|                <string>Row 1 Text:</string> | ||||
|               </property> | ||||
|              </widget> | ||||
|             </item> | ||||
|             <item> | ||||
|              <widget class="QComboBox" name="row_1_text_combobox"/> | ||||
|             </item> | ||||
|            </layout> | ||||
|           </item> | ||||
|           <item> | ||||
|             <widget class="QGroupBox" name="RowGroupBox"> | ||||
|               <property name="title"> | ||||
|                 <string>Row Text</string> | ||||
|            <layout class="QHBoxLayout" name="row_2_qhbox_layout"> | ||||
|             <item> | ||||
|              <widget class="QLabel" name="row_2_label"> | ||||
|               <property name="text"> | ||||
|                <string>Row 2 Text:</string> | ||||
|               </property> | ||||
|               <layout class="QHBoxLayout" name="RowHorizontalLayout"> | ||||
|                 <item> | ||||
|                   <layout class="QVBoxLayout" name="RowVerticalLayout"> | ||||
|                     <item> | ||||
|                       <layout class="QHBoxLayout" name="row_1_qhbox_layout"> | ||||
|                         <item> | ||||
|                           <widget class="QLabel" name="row_1_label"> | ||||
|                             <property name="text"> | ||||
|                               <string>Row 1 Text:</string> | ||||
|                             </property> | ||||
|                           </widget> | ||||
|                         </item> | ||||
|                         <item> | ||||
|                           <widget class="QComboBox" name="row_1_text_combobox"/> | ||||
|                         </item> | ||||
|                       </layout> | ||||
|                     </item> | ||||
|                     <item> | ||||
|                       <layout class="QHBoxLayout" name="row_2_qhbox_layout"> | ||||
|                         <item> | ||||
|                           <widget class="QLabel" name="row_2_label"> | ||||
|                             <property name="text"> | ||||
|                               <string>Row 2 Text:</string> | ||||
|                             </property> | ||||
|                           </widget> | ||||
|                         </item> | ||||
|                         <item> | ||||
|                           <widget class="QComboBox" name="row_2_text_combobox"/> | ||||
|                         </item> | ||||
|                       </layout> | ||||
|                     </item> | ||||
|                   </layout> | ||||
|                 </item> | ||||
|               </layout> | ||||
|             </widget> | ||||
|              </widget> | ||||
|             </item> | ||||
|             <item> | ||||
|              <widget class="QComboBox" name="row_2_text_combobox"/> | ||||
|             </item> | ||||
|            </layout> | ||||
|           </item> | ||||
|           <item> | ||||
|             <spacer name="verticalSpacer"> | ||||
|               <property name="orientation"> | ||||
|                 <enum>Qt::Vertical</enum> | ||||
|               </property> | ||||
|               <property name="sizeHint" stdset="0"> | ||||
|                 <size> | ||||
|                   <width>20</width> | ||||
|                   <height>40</height> | ||||
|                 </size> | ||||
|               </property> | ||||
|             </spacer> | ||||
|           </item> | ||||
|         </layout> | ||||
|       </item> | ||||
|          </layout> | ||||
|         </item> | ||||
|        </layout> | ||||
|       </widget> | ||||
|      </item> | ||||
|      <item> | ||||
|       <spacer name="verticalSpacer"> | ||||
|        <property name="orientation"> | ||||
|         <enum>Qt::Vertical</enum> | ||||
|        </property> | ||||
|        <property name="sizeHint" stdset="0"> | ||||
|         <size> | ||||
|          <width>20</width> | ||||
|          <height>40</height> | ||||
|         </size> | ||||
|        </property> | ||||
|       </spacer> | ||||
|      </item> | ||||
|     </layout> | ||||
|   </widget> | ||||
|    </item> | ||||
|   </layout> | ||||
|  </widget> | ||||
|  <resources/> | ||||
|  <connections/> | ||||
| </ui> | ||||
|   | ||||
| @@ -215,12 +215,18 @@ GameList::GameList(FileSys::VirtualFilesystem vfs, GMainWindow* parent) | ||||
|     tree_view->setUniformRowHeights(true); | ||||
|     tree_view->setContextMenuPolicy(Qt::CustomContextMenu); | ||||
|  | ||||
|     item_model->insertColumns(0, COLUMN_COUNT); | ||||
|     item_model->insertColumns(0, UISettings::values.show_add_ons ? COLUMN_COUNT : COLUMN_COUNT - 1); | ||||
|     item_model->setHeaderData(COLUMN_NAME, Qt::Horizontal, tr("Name")); | ||||
|     item_model->setHeaderData(COLUMN_COMPATIBILITY, Qt::Horizontal, tr("Compatibility")); | ||||
|     item_model->setHeaderData(COLUMN_ADD_ONS, Qt::Horizontal, tr("Add-ons")); | ||||
|     item_model->setHeaderData(COLUMN_FILE_TYPE, Qt::Horizontal, tr("File type")); | ||||
|     item_model->setHeaderData(COLUMN_SIZE, Qt::Horizontal, tr("Size")); | ||||
|  | ||||
|     if (UISettings::values.show_add_ons) { | ||||
|         item_model->setHeaderData(COLUMN_ADD_ONS, Qt::Horizontal, tr("Add-ons")); | ||||
|         item_model->setHeaderData(COLUMN_FILE_TYPE, Qt::Horizontal, tr("File type")); | ||||
|         item_model->setHeaderData(COLUMN_SIZE, Qt::Horizontal, tr("Size")); | ||||
|     } else { | ||||
|         item_model->setHeaderData(COLUMN_FILE_TYPE - 1, Qt::Horizontal, tr("File type")); | ||||
|         item_model->setHeaderData(COLUMN_SIZE - 1, Qt::Horizontal, tr("Size")); | ||||
|     } | ||||
|  | ||||
|     connect(tree_view, &QTreeView::activated, this, &GameList::ValidateEntry); | ||||
|     connect(tree_view, &QTreeView::customContextMenuRequested, this, &GameList::PopupContextMenu); | ||||
| @@ -394,6 +400,25 @@ void GameList::PopulateAsync(const QString& dir_path, bool deep_scan) { | ||||
|     } | ||||
|  | ||||
|     tree_view->setEnabled(false); | ||||
|  | ||||
|     // Update the columns in case UISettings has changed | ||||
|     item_model->removeColumns(0, item_model->columnCount()); | ||||
|     item_model->insertColumns(0, UISettings::values.show_add_ons ? COLUMN_COUNT : COLUMN_COUNT - 1); | ||||
|     item_model->setHeaderData(COLUMN_NAME, Qt::Horizontal, tr("Name")); | ||||
|     item_model->setHeaderData(COLUMN_COMPATIBILITY, Qt::Horizontal, tr("Compatibility")); | ||||
|  | ||||
|     if (UISettings::values.show_add_ons) { | ||||
|         item_model->setHeaderData(COLUMN_ADD_ONS, Qt::Horizontal, tr("Add-ons")); | ||||
|         item_model->setHeaderData(COLUMN_FILE_TYPE, Qt::Horizontal, tr("File type")); | ||||
|         item_model->setHeaderData(COLUMN_SIZE, Qt::Horizontal, tr("Size")); | ||||
|     } else { | ||||
|         item_model->setHeaderData(COLUMN_FILE_TYPE - 1, Qt::Horizontal, tr("File type")); | ||||
|         item_model->setHeaderData(COLUMN_SIZE - 1, Qt::Horizontal, tr("Size")); | ||||
|         item_model->removeColumns(COLUMN_COUNT - 1, 1); | ||||
|     } | ||||
|  | ||||
|     LoadInterfaceLayout(); | ||||
|  | ||||
|     // Delete any rows that might already exist if we're repopulating | ||||
|     item_model->removeRows(0, item_model->rowCount()); | ||||
|  | ||||
|   | ||||
| @@ -123,17 +123,22 @@ void GameListWorker::AddInstalledTitlesToGameList() { | ||||
|         if (it != compatibility_list.end()) | ||||
|             compatibility = it->second.first; | ||||
|  | ||||
|         emit EntryReady({ | ||||
|         QList<QStandardItem*> list{ | ||||
|             new GameListItemPath( | ||||
|                 FormatGameName(file->GetFullPath()), icon, QString::fromStdString(name), | ||||
|                 QString::fromStdString(Loader::GetFileTypeString(loader->GetFileType())), | ||||
|                 program_id), | ||||
|             new GameListItemCompat(compatibility), | ||||
|             new GameListItem(FormatPatchNameVersions(patch, *loader)), | ||||
|             new GameListItem( | ||||
|                 QString::fromStdString(Loader::GetFileTypeString(loader->GetFileType()))), | ||||
|             new GameListItemSize(file->GetSize()), | ||||
|         }); | ||||
|         }; | ||||
|  | ||||
|         if (UISettings::values.show_add_ons) { | ||||
|             list.insert(2, new GameListItem(FormatPatchNameVersions(patch, *loader))); | ||||
|         } | ||||
|  | ||||
|         emit EntryReady(list); | ||||
|     } | ||||
|  | ||||
|     const auto control_data = cache->ListEntriesFilter(FileSys::TitleType::Application, | ||||
| @@ -216,18 +221,23 @@ void GameListWorker::AddFstEntriesToGameList(const std::string& dir_path, unsign | ||||
|             if (it != compatibility_list.end()) | ||||
|                 compatibility = it->second.first; | ||||
|  | ||||
|             emit EntryReady({ | ||||
|             QList<QStandardItem*> list{ | ||||
|                 new GameListItemPath( | ||||
|                     FormatGameName(physical_name), icon, QString::fromStdString(name), | ||||
|                     QString::fromStdString(Loader::GetFileTypeString(loader->GetFileType())), | ||||
|                     program_id), | ||||
|                 new GameListItemCompat(compatibility), | ||||
|                 new GameListItem( | ||||
|                     FormatPatchNameVersions(patch, *loader, loader->IsRomFSUpdatable())), | ||||
|                 new GameListItem( | ||||
|                     QString::fromStdString(Loader::GetFileTypeString(loader->GetFileType()))), | ||||
|                 new GameListItemSize(FileUtil::GetSize(physical_name)), | ||||
|             }); | ||||
|             }; | ||||
|  | ||||
|             if (UISettings::values.show_add_ons) { | ||||
|                 list.insert(2, new GameListItem(FormatPatchNameVersions( | ||||
|                                    patch, *loader, loader->IsRomFSUpdatable()))); | ||||
|             } | ||||
|  | ||||
|             emit EntryReady(std::move(list)); | ||||
|         } else if (is_dir && recursion > 0) { | ||||
|             watch_list.append(QString::fromStdString(physical_name)); | ||||
|             AddFstEntriesToGameList(physical_name, recursion - 1); | ||||
|   | ||||
| @@ -59,6 +59,7 @@ struct Values { | ||||
|  | ||||
|     // Game List | ||||
|     bool show_unknown; | ||||
|     bool show_add_ons; | ||||
|     uint32_t icon_size; | ||||
|     uint8_t row_1_text_id; | ||||
|     uint8_t row_2_text_id; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Zach Hilman
					Zach Hilman