mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	code: Cleanup and warning fixes from the Vulkan PR (#6163)
Co-authored-by: emufan4568 <geoster3d@gmail.com> Co-authored-by: Kyle Kienapfel <Docteh@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									aa84022704
								
							
						
					
					
						commit
						1ddea27ac8
					
				
					 72 changed files with 895 additions and 626 deletions
				
			
		|  | @ -518,7 +518,7 @@ void Config::ReadRendererValues() { | |||
| void Config::ReadShortcutValues() { | ||||
|     qt_config->beginGroup(QStringLiteral("Shortcuts")); | ||||
| 
 | ||||
|     for (auto [name, group, shortcut] : default_hotkeys) { | ||||
|     for (const auto& [name, group, shortcut] : default_hotkeys) { | ||||
|         auto [keyseq, context] = shortcut; | ||||
|         qt_config->beginGroup(group); | ||||
|         qt_config->beginGroup(name); | ||||
|  | @ -553,7 +553,7 @@ void Config::ReadSystemValues() { | |||
| // https://developers.google.com/media/vp9/live-encoding
 | ||||
| const QString DEFAULT_VIDEO_ENCODER_OPTIONS = | ||||
|     QStringLiteral("quality:realtime,speed:6,tile-columns:4,frame-parallel:1,threads:8,row-mt:1"); | ||||
| const QString DEFAULT_AUDIO_ENCODER_OPTIONS = QString{}; | ||||
| const QString DEFAULT_AUDIO_ENCODER_OPTIONS = QStringLiteral(""); | ||||
| 
 | ||||
| void Config::ReadVideoDumpingValues() { | ||||
|     qt_config->beginGroup(QStringLiteral("VideoDumping")); | ||||
|  | @ -1013,9 +1013,9 @@ void Config::SaveRendererValues() { | |||
|                  200); | ||||
| 
 | ||||
|     // Cast to double because Qt's written float values are not human-readable
 | ||||
|     WriteSetting(QStringLiteral("bg_red"), (double)Settings::values.bg_red, 0.0); | ||||
|     WriteSetting(QStringLiteral("bg_green"), (double)Settings::values.bg_green, 0.0); | ||||
|     WriteSetting(QStringLiteral("bg_blue"), (double)Settings::values.bg_blue, 0.0); | ||||
|     WriteSetting(QStringLiteral("bg_red"), static_cast<double>(Settings::values.bg_red), 0.0); | ||||
|     WriteSetting(QStringLiteral("bg_green"), static_cast<double>(Settings::values.bg_green), 0.0); | ||||
|     WriteSetting(QStringLiteral("bg_blue"), static_cast<double>(Settings::values.bg_blue), 0.0); | ||||
| 
 | ||||
|     WriteSetting(QStringLiteral("texture_filter_name"), | ||||
|                  QString::fromStdString(Settings::values.texture_filter_name), | ||||
|  |  | |||
|  | @ -9,8 +9,6 @@ | |||
| #include <QMessageBox> | ||||
| #include <QWidget> | ||||
| #include "citra_qt/configuration/configure_camera.h" | ||||
| #include "citra_qt/uisettings.h" | ||||
| #include "core/core.h" | ||||
| #include "core/frontend/camera/factory.h" | ||||
| #include "core/frontend/camera/interface.h" | ||||
| #include "core/hle/service/cam/cam.h" | ||||
|  | @ -91,7 +89,7 @@ void ConfigureCamera::ConnectEvents() { | |||
|                 SetConfiguration(); | ||||
|             }); | ||||
|     connect(ui->toolButton, &QToolButton::clicked, this, &ConfigureCamera::OnToolButtonClicked); | ||||
|     connect(ui->preview_button, &QPushButton::clicked, this, [=] { StartPreviewing(); }); | ||||
|     connect(ui->preview_button, &QPushButton::clicked, this, [this] { StartPreviewing(); }); | ||||
|     connect(ui->prompt_before_load, &QCheckBox::stateChanged, this, [this](int state) { | ||||
|         ui->camera_file->setDisabled(state == Qt::Checked); | ||||
|         ui->toolButton->setDisabled(state == Qt::Checked); | ||||
|  | @ -99,12 +97,11 @@ void ConfigureCamera::ConnectEvents() { | |||
|             ui->camera_file->setText(QString{}); | ||||
|         } | ||||
|     }); | ||||
|     connect(ui->camera_file, &QLineEdit::textChanged, this, [=] { StopPreviewing(); }); | ||||
|     connect(ui->system_camera, | ||||
|             static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, | ||||
|             [=] { StopPreviewing(); }); | ||||
|     connect(ui->camera_flip, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), | ||||
|             this, [=] { StopPreviewing(); }); | ||||
|     connect(ui->camera_file, &QLineEdit::textChanged, this, [this] { StopPreviewing(); }); | ||||
|     connect(ui->system_camera, qOverload<int>(&QComboBox::currentIndexChanged), this, | ||||
|             [this] { StopPreviewing(); }); | ||||
|     connect(ui->camera_flip, qOverload<int>(&QComboBox::currentIndexChanged), this, | ||||
|             [this] { StopPreviewing(); }); | ||||
| } | ||||
| 
 | ||||
| void ConfigureCamera::UpdateCameraMode() { | ||||
|  |  | |||
|  | @ -24,7 +24,9 @@ ConfigureDebug::ConfigureDebug(QWidget* parent) | |||
|         QString path = QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::LogDir)); | ||||
|         QDesktopServices::openUrl(QUrl::fromLocalFile(path)); | ||||
|     }); | ||||
|     ui->toggle_cpu_jit->setEnabled(!Core::System::GetInstance().IsPoweredOn()); | ||||
| 
 | ||||
|     const bool is_powered_on = Core::System::GetInstance().IsPoweredOn(); | ||||
|     ui->toggle_cpu_jit->setEnabled(!is_powered_on); | ||||
| } | ||||
| 
 | ||||
| ConfigureDebug::~ConfigureDebug() = default; | ||||
|  |  | |||
|  | @ -114,6 +114,9 @@ | |||
|      <layout class="QVBoxLayout" name="verticalLayout_4"> | ||||
|       <item> | ||||
|        <widget class="QCheckBox" name="toggle_cpu_jit"> | ||||
|         <property name="toolTip"> | ||||
|          <string><html><head/><body><p>Enables the use of the ARM JIT compiler for emulating the 3DS CPUs. Don't disable unless for debugging purposes</p></body></html></string> | ||||
|         </property> | ||||
|         <property name="text"> | ||||
|          <string>Enable CPU JIT</string> | ||||
|         </property> | ||||
|  |  | |||
|  | @ -192,10 +192,10 @@ ConfigureInput::ConfigureInput(QWidget* parent) | |||
|         if (!button_map[button_id]) | ||||
|             continue; | ||||
|         button_map[button_id]->setContextMenuPolicy(Qt::CustomContextMenu); | ||||
|         connect(button_map[button_id], &QPushButton::clicked, [=]() { | ||||
|         connect(button_map[button_id], &QPushButton::clicked, [this, button_id]() { | ||||
|             HandleClick( | ||||
|                 button_map[button_id], | ||||
|                 [=](const Common::ParamPackage& params) { | ||||
|                 [this, button_id](const Common::ParamPackage& params) { | ||||
|                     buttons_param[button_id] = params; | ||||
|                     // If the user closes the dialog, the changes are reverted in
 | ||||
|                     // `GMainWindow::OnConfigure()`
 | ||||
|  | @ -204,16 +204,16 @@ ConfigureInput::ConfigureInput(QWidget* parent) | |||
|                 }, | ||||
|                 InputCommon::Polling::DeviceType::Button); | ||||
|         }); | ||||
|         connect(button_map[button_id], &QPushButton::customContextMenuRequested, | ||||
|                 [=](const QPoint& menu_location) { | ||||
|         connect(button_map[button_id], &QPushButton::customContextMenuRequested, this, | ||||
|                 [this, button_id](const QPoint& menu_location) { | ||||
|                     QMenu context_menu; | ||||
|                     context_menu.addAction(tr("Clear"), [&] { | ||||
|                     context_menu.addAction(tr("Clear"), this, [&] { | ||||
|                         buttons_param[button_id].Clear(); | ||||
|                         button_map[button_id]->setText(tr("[not set]")); | ||||
|                         ApplyConfiguration(); | ||||
|                         Settings::SaveProfile(ui->profile->currentIndex()); | ||||
|                     }); | ||||
|                     context_menu.addAction(tr("Restore Default"), [&] { | ||||
|                     context_menu.addAction(tr("Restore Default"), this, [&] { | ||||
|                         buttons_param[button_id] = Common::ParamPackage{ | ||||
|                             InputCommon::GenerateKeyboardParam(Config::default_buttons[button_id])}; | ||||
|                         button_map[button_id]->setText(ButtonToText(buttons_param[button_id])); | ||||
|  | @ -230,27 +230,29 @@ ConfigureInput::ConfigureInput(QWidget* parent) | |||
|                 continue; | ||||
|             analog_map_buttons[analog_id][sub_button_id]->setContextMenuPolicy( | ||||
|                 Qt::CustomContextMenu); | ||||
|             connect(analog_map_buttons[analog_id][sub_button_id], &QPushButton::clicked, [=]() { | ||||
|                 HandleClick( | ||||
|                     analog_map_buttons[analog_id][sub_button_id], | ||||
|                     [=](const Common::ParamPackage& params) { | ||||
|                         SetAnalogButton(params, analogs_param[analog_id], | ||||
|                                         analog_sub_buttons[sub_button_id]); | ||||
|                         ApplyConfiguration(); | ||||
|                         Settings::SaveProfile(ui->profile->currentIndex()); | ||||
|                     }, | ||||
|                     InputCommon::Polling::DeviceType::Button); | ||||
|             }); | ||||
|             connect(analog_map_buttons[analog_id][sub_button_id], &QPushButton::clicked, this, | ||||
|                     [this, analog_id, sub_button_id]() { | ||||
|                         HandleClick( | ||||
|                             analog_map_buttons[analog_id][sub_button_id], | ||||
|                             [this, analog_id, sub_button_id](const Common::ParamPackage& params) { | ||||
|                                 SetAnalogButton(params, analogs_param[analog_id], | ||||
|                                                 analog_sub_buttons[sub_button_id]); | ||||
|                                 ApplyConfiguration(); | ||||
|                                 Settings::SaveProfile(ui->profile->currentIndex()); | ||||
|                             }, | ||||
|                             InputCommon::Polling::DeviceType::Button); | ||||
|                     }); | ||||
|             connect(analog_map_buttons[analog_id][sub_button_id], | ||||
|                     &QPushButton::customContextMenuRequested, [=](const QPoint& menu_location) { | ||||
|                     &QPushButton::customContextMenuRequested, this, | ||||
|                     [this, analog_id, sub_button_id](const QPoint& menu_location) { | ||||
|                         QMenu context_menu; | ||||
|                         context_menu.addAction(tr("Clear"), [&] { | ||||
|                         context_menu.addAction(tr("Clear"), this, [&] { | ||||
|                             analogs_param[analog_id].Erase(analog_sub_buttons[sub_button_id]); | ||||
|                             analog_map_buttons[analog_id][sub_button_id]->setText(tr("[not set]")); | ||||
|                             ApplyConfiguration(); | ||||
|                             Settings::SaveProfile(ui->profile->currentIndex()); | ||||
|                         }); | ||||
|                         context_menu.addAction(tr("Restore Default"), [&] { | ||||
|                         context_menu.addAction(tr("Restore Default"), this, [&] { | ||||
|                             Common::ParamPackage params{InputCommon::GenerateKeyboardParam( | ||||
|                                 Config::default_analogs[analog_id][sub_button_id])}; | ||||
|                             SetAnalogButton(params, analogs_param[analog_id], | ||||
|  | @ -264,7 +266,7 @@ ConfigureInput::ConfigureInput(QWidget* parent) | |||
|                             menu_location)); | ||||
|                     }); | ||||
|         } | ||||
|         connect(analog_map_stick[analog_id], &QPushButton::clicked, [=]() { | ||||
|         connect(analog_map_stick[analog_id], &QPushButton::clicked, this, [this, analog_id]() { | ||||
|             if (QMessageBox::information( | ||||
|                     this, tr("Information"), | ||||
|                     tr("After pressing OK, first move your joystick horizontally, " | ||||
|  | @ -272,7 +274,7 @@ ConfigureInput::ConfigureInput(QWidget* parent) | |||
|                     QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Ok) { | ||||
|                 HandleClick( | ||||
|                     analog_map_stick[analog_id], | ||||
|                     [=](const Common::ParamPackage& params) { | ||||
|                     [this, analog_id](const Common::ParamPackage& params) { | ||||
|                         analogs_param[analog_id] = params; | ||||
|                         ApplyConfiguration(); | ||||
|                         Settings::SaveProfile(ui->profile->currentIndex()); | ||||
|  | @ -280,29 +282,31 @@ ConfigureInput::ConfigureInput(QWidget* parent) | |||
|                     InputCommon::Polling::DeviceType::Analog); | ||||
|             } | ||||
|         }); | ||||
|         connect(analog_map_deadzone_and_modifier_slider[analog_id], &QSlider::valueChanged, [=] { | ||||
|             const int slider_value = analog_map_deadzone_and_modifier_slider[analog_id]->value(); | ||||
|             const auto engine = analogs_param[analog_id].Get("engine", ""); | ||||
|             if (engine == "sdl" || engine == "gcpad") { | ||||
|                 analog_map_deadzone_and_modifier_slider_label[analog_id]->setText( | ||||
|                     tr("Deadzone: %1%").arg(slider_value)); | ||||
|                 analogs_param[analog_id].Set("deadzone", slider_value / 100.0f); | ||||
|             } else { | ||||
|                 analog_map_deadzone_and_modifier_slider_label[analog_id]->setText( | ||||
|                     tr("Modifier Scale: %1%").arg(slider_value)); | ||||
|                 analogs_param[analog_id].Set("modifier_scale", slider_value / 100.0f); | ||||
|             } | ||||
|             ApplyConfiguration(); | ||||
|             Settings::SaveProfile(ui->profile->currentIndex()); | ||||
|         }); | ||||
|         connect(analog_map_deadzone_and_modifier_slider[analog_id], &QSlider::valueChanged, this, | ||||
|                 [this, analog_id] { | ||||
|                     const int slider_value = | ||||
|                         analog_map_deadzone_and_modifier_slider[analog_id]->value(); | ||||
|                     const auto engine = analogs_param[analog_id].Get("engine", ""); | ||||
|                     if (engine == "sdl" || engine == "gcpad") { | ||||
|                         analog_map_deadzone_and_modifier_slider_label[analog_id]->setText( | ||||
|                             tr("Deadzone: %1%").arg(slider_value)); | ||||
|                         analogs_param[analog_id].Set("deadzone", slider_value / 100.0f); | ||||
|                     } else { | ||||
|                         analog_map_deadzone_and_modifier_slider_label[analog_id]->setText( | ||||
|                             tr("Modifier Scale: %1%").arg(slider_value)); | ||||
|                         analogs_param[analog_id].Set("modifier_scale", slider_value / 100.0f); | ||||
|                     } | ||||
|                     ApplyConfiguration(); | ||||
|                     Settings::SaveProfile(ui->profile->currentIndex()); | ||||
|                 }); | ||||
|     } | ||||
| 
 | ||||
|     // The Circle Mod button is common for both the sticks, so update the modifier settings
 | ||||
|     // for both the sticks.
 | ||||
|     connect(ui->buttonCircleMod, &QPushButton::clicked, [=]() { | ||||
|     connect(ui->buttonCircleMod, &QPushButton::clicked, this, [this]() { | ||||
|         HandleClick( | ||||
|             ui->buttonCircleMod, | ||||
|             [=](const Common::ParamPackage& params) { | ||||
|             [this](const Common::ParamPackage& params) { | ||||
|                 for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; | ||||
|                      analog_id++) { | ||||
|                     SetAnalogButton(params, analogs_param[analog_id], "modifier"); | ||||
|  | @ -312,10 +316,10 @@ ConfigureInput::ConfigureInput(QWidget* parent) | |||
|             }, | ||||
|             InputCommon::Polling::DeviceType::Button); | ||||
|     }); | ||||
|     connect(ui->buttonCircleMod, &QPushButton::customContextMenuRequested, | ||||
|     connect(ui->buttonCircleMod, &QPushButton::customContextMenuRequested, this, | ||||
|             [&](const QPoint& menu_location) { | ||||
|                 QMenu context_menu; | ||||
|                 context_menu.addAction(tr("Clear"), [&] { | ||||
|                 context_menu.addAction(tr("Clear"), this, [&] { | ||||
|                     for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; | ||||
|                          analog_id++) { | ||||
|                         analogs_param[analog_id].Erase("modifier"); | ||||
|  | @ -325,7 +329,7 @@ ConfigureInput::ConfigureInput(QWidget* parent) | |||
|                     Settings::SaveProfile(ui->profile->currentIndex()); | ||||
|                 }); | ||||
| 
 | ||||
|                 context_menu.addAction(tr("Restore Default"), [&] { | ||||
|                 context_menu.addAction(tr("Restore Default"), this, [&] { | ||||
|                     for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; | ||||
|                          analog_id++) { | ||||
|                         Common::ParamPackage params{InputCommon::GenerateKeyboardParam( | ||||
|  | @ -341,7 +345,7 @@ ConfigureInput::ConfigureInput(QWidget* parent) | |||
|                 context_menu.exec(ui->buttonCircleMod->mapToGlobal(menu_location)); | ||||
|             }); | ||||
| 
 | ||||
|     connect(ui->buttonMotionTouch, &QPushButton::clicked, [this] { | ||||
|     connect(ui->buttonMotionTouch, &QPushButton::clicked, this, [this] { | ||||
|         QDialog* motion_touch_dialog = new ConfigureMotionTouch(this); | ||||
|         return motion_touch_dialog->exec(); | ||||
|     }); | ||||
|  | @ -356,18 +360,17 @@ ConfigureInput::ConfigureInput(QWidget* parent) | |||
|     connect(ui->buttonDelete, &QPushButton::clicked, this, &ConfigureInput::DeleteProfile); | ||||
|     connect(ui->buttonRename, &QPushButton::clicked, this, &ConfigureInput::RenameProfile); | ||||
| 
 | ||||
|     connect(ui->profile, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), | ||||
|             [this](int i) { | ||||
|                 ApplyConfiguration(); | ||||
|                 Settings::SaveProfile(Settings::values.current_input_profile_index); | ||||
|                 Settings::LoadProfile(i); | ||||
|                 LoadConfiguration(); | ||||
|             }); | ||||
|     connect(ui->profile, qOverload<int>(&QComboBox::currentIndexChanged), this, [this](int i) { | ||||
|         ApplyConfiguration(); | ||||
|         Settings::SaveProfile(Settings::values.current_input_profile_index); | ||||
|         Settings::LoadProfile(i); | ||||
|         LoadConfiguration(); | ||||
|     }); | ||||
| 
 | ||||
|     timeout_timer->setSingleShot(true); | ||||
|     connect(timeout_timer.get(), &QTimer::timeout, [this]() { SetPollingResult({}, true); }); | ||||
|     connect(timeout_timer.get(), &QTimer::timeout, this, [this]() { SetPollingResult({}, true); }); | ||||
| 
 | ||||
|     connect(poll_timer.get(), &QTimer::timeout, [this]() { | ||||
|     connect(poll_timer.get(), &QTimer::timeout, this, [this]() { | ||||
|         Common::ParamPackage params; | ||||
|         for (auto& poller : device_pollers) { | ||||
|             params = poller->GetNextInput(); | ||||
|  | @ -554,7 +557,7 @@ void ConfigureInput::AutoMap() { | |||
|                                  QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Cancel) { | ||||
|         return; | ||||
|     } | ||||
|     input_setter = [=](const Common::ParamPackage& params) { | ||||
|     input_setter = [this](const Common::ParamPackage& params) { | ||||
|         MapFromButton(params); | ||||
|         ApplyConfiguration(); | ||||
|         Settings::SaveProfile(ui->profile->currentIndex()); | ||||
|  |  | |||
|  | @ -47,6 +47,9 @@ CalibrationConfigurationDialog::CalibrationConfigurationDialog(QWidget* parent, | |||
|             case CalibrationConfigurationJob::Status::Completed: | ||||
|                 text = tr("Configuration completed!"); | ||||
|                 break; | ||||
|             default: | ||||
|                 LOG_ERROR(Frontend, "Unknown calibration status {}", status); | ||||
|                 break; | ||||
|             } | ||||
|             QMetaObject::invokeMethod(this, "UpdateLabelText", Q_ARG(QString, text)); | ||||
|             if (status == CalibrationConfigurationJob::Status::Completed) { | ||||
|  | @ -102,9 +105,9 @@ ConfigureMotionTouch::ConfigureMotionTouch(QWidget* parent) | |||
|            "style=\"text-decoration: underline; color:#039be5;\">Learn More</span></a>")); | ||||
| 
 | ||||
|     timeout_timer->setSingleShot(true); | ||||
|     connect(timeout_timer.get(), &QTimer::timeout, [this]() { SetPollingResult({}, true); }); | ||||
|     connect(timeout_timer.get(), &QTimer::timeout, this, [this]() { SetPollingResult({}, true); }); | ||||
| 
 | ||||
|     connect(poll_timer.get(), &QTimer::timeout, [this]() { | ||||
|     connect(poll_timer.get(), &QTimer::timeout, this, [this]() { | ||||
|         Common::ParamPackage params; | ||||
|         for (auto& poller : device_pollers) { | ||||
|             params = poller->GetNextInput(); | ||||
|  | @ -202,7 +205,7 @@ void ConfigureMotionTouch::ConnectEvents() { | |||
|             [this]([[maybe_unused]] int index) { UpdateUiDisplay(); }); | ||||
|     connect(ui->touch_provider, qOverload<int>(&QComboBox::currentIndexChanged), this, | ||||
|             [this]([[maybe_unused]] int index) { UpdateUiDisplay(); }); | ||||
|     connect(ui->motion_controller_button, &QPushButton::clicked, [=]() { | ||||
|     connect(ui->motion_controller_button, &QPushButton::clicked, this, [this]() { | ||||
|         if (QMessageBox::information(this, tr("Information"), | ||||
|                                      tr("After pressing OK, press a button on the controller whose " | ||||
|                                         "motion you want to track."), | ||||
|  | @ -210,7 +213,7 @@ void ConfigureMotionTouch::ConnectEvents() { | |||
|             ui->motion_controller_button->setText(tr("[press button]")); | ||||
|             ui->motion_controller_button->setFocus(); | ||||
| 
 | ||||
|             input_setter = [=](const Common::ParamPackage& params) { | ||||
|             input_setter = [this](const Common::ParamPackage& params) { | ||||
|                 guid = params.Get("guid", "0"); | ||||
|                 port = params.Get("port", 0); | ||||
|             }; | ||||
|  |  | |||
|  | @ -511,7 +511,7 @@ void TouchScreenPreview::mouseMoveEvent(QMouseEvent* event) { | |||
|     } | ||||
|     const auto pos = MapToDeviceCoords(event->x(), event->y()); | ||||
|     if (pos) { | ||||
|         coord_label->setText(QStringLiteral("X: %1, Y: %2").arg(pos->x()).arg(pos->y())); | ||||
|         coord_label->setText(QStringLiteral("X: %1, Y: %2").arg(pos->x(), pos->y())); | ||||
|     } else { | ||||
|         coord_label->clear(); | ||||
|     } | ||||
|  | @ -572,7 +572,7 @@ bool TouchScreenPreview::eventFilter(QObject* obj, QEvent* event) { | |||
|             emit DotMoved(drag_state.dot->property(PropId).toInt(), *device_coord); | ||||
|             if (coord_label) { | ||||
|                 coord_label->setText( | ||||
|                     QStringLiteral("X: %1, Y: %2").arg(device_coord->x()).arg(device_coord->y())); | ||||
|                     QStringLiteral("X: %1, Y: %2").arg(device_coord->x(), device_coord->y())); | ||||
|             } | ||||
|         } | ||||
|         return true; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue