예제 #1
0
int main( int argc, char **argv )
{
  KAboutData about("KPageWidgetTest", 0, ki18n("KPageWidgetTest"), "version");
  KCmdLineArgs::init( argc, argv, &about );

  KApplication app;

  KPageWidgetTest testWidget( 0 );
  testWidget.show();

  return app.exec();
}
void NewGeneVariableSummaryScrollArea::HandleChanges(DataChangeMessage const & change_message)
{

	UIOutputProject * project = projectManagerUI().getActiveUIOutputProject();

	if (project == nullptr)
	{
		return;
	}

	UIMessager messager(project);

	std::for_each(change_message.changes.cbegin(), change_message.changes.cend(), [this](DataChange const & change)
	{
		switch (change.change_type)
		{
			case DATA_CHANGE_TYPE::DATA_CHANGE_TYPE__INPUT_MODEL__VG_CHANGE:
				{
					switch (change.change_intention)
					{

						case DATA_CHANGE_INTENTION__ADD:
							{

								RefreshAllWidgets(); // this triggers a resort by loading everything in the pane again

							}
							break;

						case DATA_CHANGE_INTENTION__REMOVE:
							{

								if (change.parent_identifier.code && change.parent_identifier.uuid)
								{

									WidgetInstanceIdentifier vg_to_remove(change.parent_identifier);

									int current_number = layout()->count();
									bool found = false;
									QWidget * widgetToRemove = nullptr;
									QLayoutItem * layoutItemToRemove = nullptr;
									int i = 0;

									for (i = 0; i < current_number; ++i)
									{
										QLayoutItem * testLayoutItem = layout()->itemAt(i);
										QWidget * testWidget(testLayoutItem->widget());

										try
										{
											NewGeneVariableSummaryGroup * testVG = dynamic_cast<NewGeneVariableSummaryGroup *>(testWidget);

											if (testVG && testVG->data_instance.IsEqual(WidgetInstanceIdentifier::EQUALITY_CHECK_TYPE__UUID_PLUS_STRING_CODE, vg_to_remove))
											{
												widgetToRemove = testVG;
												layoutItemToRemove = testLayoutItem;
												found = true;

												if (testVG->data_instance.IsEqual(WidgetInstanceIdentifier::EQUALITY_CHECK_TYPE__UUID_PLUS_STRING_CODE, cached_active_vg))
												{
													// No need to call DoTabChange as the entire block will be removed, but save the new empty value into the cache variable
													cached_active_vg = WidgetInstanceIdentifier{};
												}

												break;
											}
										}
										catch (std::bad_cast &)
										{
											// guess not
										}

									}

									if (found && widgetToRemove != nullptr)
									{
										layout()->takeAt(i);
										delete widgetToRemove;
										delete layoutItemToRemove;
										widgetToRemove = nullptr;
										layoutItemToRemove = nullptr;
									}

								}

							}
							break;

						case DATA_CHANGE_INTENTION__UPDATE:
							{
								// Should never receive this.
							}
							break;

						case DATA_CHANGE_INTENTION__RESET_ALL:
							{
								// Ditto above.
								RefreshAllWidgets();
							}
							break;

						default:
							{
							}
							break;

					}
				}
				break;

			default:
				{
				}
				break;
		}
	});

}