Vuo  2.0.1
VuoInputEditorMovieFormat.cc
Go to the documentation of this file.
1 
11 #include "VuoComboBox.hh"
12 
13 const QColor VuoInputEditorMovieFormat::darkModeEnabledLabelTextColor = QColor(207, 207, 207);
14 const QColor VuoInputEditorMovieFormat::darkModeDisabledLabelTextColor = QColor(127, 127, 127);
15 
16 extern "C"
17 {
18  #include "VuoMovieFormat.h"
19  #include "VuoReal.h"
20 }
21 
26 {
27  return new VuoInputEditorMovieFormat();
28 }
29 
34 void VuoInputEditorMovieFormat::setUpDialog(QDialog &dialog, json_object *originalValue, json_object *details)
35 {
36  const int decimalPrecision = DBL_MAX_10_EXP + DBL_DIG;
37 
38  suggestedMinImageQuality = 0;
39  suggestedMaxImageQuality = 1;
40 
41  suggestedMinAudioQuality = 0;
42  suggestedMaxAudioQuality = 1;
43 
44  double suggestedStepImageQuality = 0.1;
45  double suggestedStepAudioQuality = 0.1;
46 
47  QDoubleValidator *validator = new QDoubleValidator(this);
48  validator->setDecimals(decimalPrecision);
49 
50  isDark = false;
51  tabCycleForward = true;
52 
53  // Parse supported port annotations from the port's "details" JSON object:
54  if (details)
55  {
56  json_object *darkMode = NULL;
57  if (json_object_object_get_ex(details, "isDark", &darkMode))
58  isDark = json_object_get_boolean(darkMode);
59 
60  json_object *forwardTabTraversal = NULL;
61  if (json_object_object_get_ex(details, "forwardTabTraversal", &forwardTabTraversal))
62  tabCycleForward = json_object_get_boolean(forwardTabTraversal);
63 
64  // "suggestedMin"
65  json_object *suggestedMinValue = NULL;
66  if (json_object_object_get_ex(details, "suggestedMin", &suggestedMinValue))
67  {
68  suggestedMinImageQuality = VuoMovieFormat_makeFromJson(suggestedMinValue).imageQuality;
69  suggestedMinAudioQuality = VuoMovieFormat_makeFromJson(suggestedMinValue).audioQuality;
70  }
71 
72  // "suggestedMax"
73  json_object *suggestedMaxValue = NULL;
74  if (json_object_object_get_ex(details, "suggestedMax", &suggestedMaxValue))
75  {
76  suggestedMaxImageQuality = VuoMovieFormat_makeFromJson(suggestedMaxValue).imageQuality;
77  suggestedMaxAudioQuality = VuoMovieFormat_makeFromJson(suggestedMaxValue).audioQuality;
78  }
79 
80  // "suggestedStep"
81  json_object *suggestedStepValue = NULL;
82  if (json_object_object_get_ex(details, "suggestedStep", &suggestedStepValue))
83  {
84  suggestedStepImageQuality = VuoMovieFormat_makeFromJson(suggestedStepValue).imageQuality;
85  suggestedStepAudioQuality = VuoMovieFormat_makeFromJson(suggestedStepValue).audioQuality;
86  }
87  }
88 
89  QFont font = getDefaultFont();
90 
91  // Display menus for "Image Encoding" and "Audio Encoding".
92  {
93  string originalMovieImageEncodingAsString = json_object_to_json_string_ext(VuoMovieImageEncoding_getJson(VuoMovieFormat_makeFromJson(originalValue).imageEncoding), JSON_C_TO_STRING_PLAIN);
94  comboBoxImageEncoding = new VuoComboBox(&dialog);
95  comboBoxImageEncoding->setFont(font);
96  setUpComboBoxForType(comboBoxImageEncoding, "VuoMovieImageEncoding", originalMovieImageEncodingAsString);
97  connect(comboBoxImageEncoding, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &VuoInputEditorMovieFormat::updateQualitySliderEnabledStatusAndEmitValueChanged);
98 
99  string originalAudioEncodingAsString = json_object_to_json_string_ext(VuoAudioEncoding_getJson(VuoMovieFormat_makeFromJson(originalValue).audioEncoding), JSON_C_TO_STRING_PLAIN);
100  comboBoxAudioEncoding = new VuoComboBox(&dialog);
101  comboBoxAudioEncoding->setFont(font);
102  setUpComboBoxForType(comboBoxAudioEncoding, "VuoAudioEncoding", originalAudioEncodingAsString);
103  connect(comboBoxAudioEncoding, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &VuoInputEditorMovieFormat::updateQualitySliderEnabledStatusAndEmitValueChanged);
104  }
105 
106  // Display sliders for "Image Quality" and "Audio Quality".
107  {
108  // Image Quality
109  lineEditImageQuality = new QLineEdit(&dialog);
110  lineEditImageQuality->setFont(font);
111  lineEditImageQuality->setText( convertToLineEditFormat( VuoReal_getJson(VuoMovieFormat_makeFromJson(originalValue).imageQuality) ) );
112  lineEditImageQuality->adjustSize();
113 
114  lineEditImageQuality->setValidator(validator);
115  lineEditImageQuality->installEventFilter(this);
116 
117  sliderImageQuality = new QSlider(&dialog);
118  sliderImageQuality->setOrientation(Qt::Horizontal);
119  sliderImageQuality->setFocusPolicy(Qt::NoFocus);
120  sliderImageQuality->setMinimum(0);
121  sliderImageQuality->setMaximum(sliderImageQuality->width());
122  sliderImageQuality->setSingleStep(fmax(1, suggestedStepImageQuality*(sliderImageQuality->maximum()-sliderImageQuality->minimum())/(suggestedMaxImageQuality-suggestedMinImageQuality)));
123 
124  double lineEditValueImageQuality = VuoMovieFormat_makeFromJson(originalValue).imageQuality;
125  int sliderValueImageQuality = lineEditValueToScaledSliderValue(lineEditValueImageQuality, imageQuality);
126  sliderImageQuality->setValue(sliderValueImageQuality);
127 
128  connect(sliderImageQuality, &QSlider::valueChanged, this, static_cast<void (VuoInputEditorMovieFormat::*)(int)>(&VuoInputEditorMovieFormat::updateLineEditValue));
129  connect(lineEditImageQuality, &QLineEdit::textEdited, this, &VuoInputEditorMovieFormat::updateSliderValue);
130  connect(lineEditImageQuality, &QLineEdit::editingFinished, this, &VuoInputEditorMovieFormat::emitValueChanged);
131 
132  // Audio Quality
133  lineEditAudioQuality = new QLineEdit(&dialog);
134  lineEditAudioQuality->setFont(font);
135  lineEditAudioQuality->setText( convertToLineEditFormat( VuoReal_getJson(VuoMovieFormat_makeFromJson(originalValue).audioQuality) ) );
136  lineEditAudioQuality->adjustSize();
137 
138  lineEditAudioQuality->setValidator(validator);
139  lineEditAudioQuality->installEventFilter(this);
140 
141  sliderAudioQuality = new QSlider(&dialog);
142  sliderAudioQuality->setOrientation(Qt::Horizontal);
143  sliderAudioQuality->setFocusPolicy(Qt::NoFocus);
144  sliderAudioQuality->setMinimum(0);
145  sliderAudioQuality->setMaximum(sliderAudioQuality->width());
146  sliderAudioQuality->setSingleStep(fmax(1, suggestedStepAudioQuality*(sliderAudioQuality->maximum()-sliderAudioQuality->minimum())/(suggestedMaxAudioQuality-suggestedMinAudioQuality)));
147 
148  double lineEditValueAudioQuality = VuoMovieFormat_makeFromJson(originalValue).audioQuality;
149  int sliderValueAudioQuality = lineEditValueToScaledSliderValue(lineEditValueAudioQuality, audioQuality);
150  sliderAudioQuality->setValue(sliderValueAudioQuality);
151 
152  connect(sliderAudioQuality, &QSlider::valueChanged, this, static_cast<void (VuoInputEditorMovieFormat::*)(int)>(&VuoInputEditorMovieFormat::updateLineEditValue));
153  connect(lineEditAudioQuality, &QLineEdit::textEdited, this, &VuoInputEditorMovieFormat::updateSliderValue);
154  connect(lineEditAudioQuality, &QLineEdit::editingFinished, this, &VuoInputEditorMovieFormat::emitValueChanged);
155  }
156 
157  // Layout details
158  {
159  const int widgetVerticalSpacing = 4;
160  const int widgetHorizontalSpacing = 5;
161 
162  // Tweak to better align the text of labels with the text in their associated widgets.
163  const int comboLabelVerticalCorrection = 3;
164  const int lineEditLabelVerticalCorrection = 1;
165 
166  QLabel *labelImageEncoding = new QLabel("Image Encoding", &dialog);
167  QLabel *labelAudioEncoding = new QLabel("Audio Encoding", &dialog);
168  labelImageQuality = new QLabel("Image Quality", &dialog);
169  labelAudioQuality = new QLabel("Audio Quality", &dialog);
170 
171  setFirstWidgetInTabOrder(lineEditImageQuality);
172  setLastWidgetInTabOrder(lineEditAudioQuality);
173 
174  updateQualitySliderEnabledStatus();
175 
176  labelImageEncoding->move( labelImageEncoding->pos().x(),
177  labelImageEncoding->pos().y() + comboLabelVerticalCorrection);
178  comboBoxImageEncoding->move(labelImageEncoding->pos().x()+labelImageEncoding->width() + widgetHorizontalSpacing,
179  labelImageEncoding->pos().y() - comboLabelVerticalCorrection);
180 
181  labelImageQuality->move( labelImageEncoding->pos().x(),
182  comboBoxImageEncoding->pos().y() + comboBoxImageEncoding->height() + widgetVerticalSpacing + lineEditLabelVerticalCorrection);
183  lineEditImageQuality->move( comboBoxImageEncoding->pos().x(),
184  labelImageQuality->pos().y() - lineEditLabelVerticalCorrection);
185  sliderImageQuality->move( lineEditImageQuality->pos().x(),
186  lineEditImageQuality->pos().y() + lineEditImageQuality->height() + widgetVerticalSpacing - lineEditLabelVerticalCorrection);
187 
188  sliderImageQuality->resize(sliderImageQuality->width(), sliderImageQuality->height() - 10);
189  lineEditImageQuality->resize(sliderImageQuality->width(), lineEditImageQuality->height());
190 
191  labelAudioEncoding->move( labelImageQuality->pos().x(),
192  sliderImageQuality->pos().y() + sliderImageQuality->height() + widgetVerticalSpacing + comboLabelVerticalCorrection);
193  comboBoxAudioEncoding->move(labelAudioEncoding->pos().x() + labelAudioEncoding->width() + widgetHorizontalSpacing,
194  labelAudioEncoding->pos().y() - comboLabelVerticalCorrection);
195 
196 
197  labelAudioQuality->move( labelAudioEncoding->pos().x(),
198  comboBoxAudioEncoding->pos().y() + comboBoxAudioEncoding->height() + widgetVerticalSpacing + lineEditLabelVerticalCorrection);
199  lineEditAudioQuality->move( comboBoxAudioEncoding->pos().x(),
200  labelAudioQuality->pos().y() - lineEditLabelVerticalCorrection);
201  sliderAudioQuality->move( lineEditAudioQuality->pos().x(),
202  lineEditAudioQuality->pos().y() + lineEditAudioQuality->height() + widgetVerticalSpacing - lineEditLabelVerticalCorrection);
203 
204  sliderAudioQuality->resize(sliderAudioQuality->width(), sliderAudioQuality->height() - 10);
205  lineEditAudioQuality->resize(sliderAudioQuality->width(), lineEditAudioQuality->height());
206 
207  labelImageEncoding->show();
208  comboBoxImageEncoding->show();
209 
210  labelImageQuality->show();
211  sliderImageQuality->show();
212 
213  labelAudioEncoding->show();
214  comboBoxAudioEncoding->show();
215 
216  labelAudioQuality->show();
217  sliderAudioQuality->show();
218 
219  dialog.adjustSize();
220  }
221 }
222 
227 {
228  return convertFromSubwidgetFormats(comboBoxImageEncoding->currentData(),
229  lineEditImageQuality->text(),
230  comboBoxAudioEncoding->currentData(),
231  lineEditAudioQuality->text());
232 }
233 
238 {
239  double realValue = VuoReal_makeFromJson(value);
240  QString valueAsStringInUserLocale = QLocale().toString(realValue);
241 
242  if (qAbs(realValue) >= 1000.0)
243  valueAsStringInUserLocale.remove(QLocale().groupSeparator());
244 
245  return valueAsStringInUserLocale;
246 }
247 
252  const QString &imageQualityAsString,
253  const QVariant &audioEncoding,
254  const QString &audioQualityAsString)
255 {
256  VuoMovieFormat format;
257  format.imageEncoding = VuoMovieImageEncoding_makeFromJson((json_object *)imageEncoding.value<void *>());
258  format.audioEncoding = VuoAudioEncoding_makeFromJson((json_object *)audioEncoding.value<void *>());
259  format.imageQuality = QLocale().toDouble(imageQualityAsString);
260  format.audioQuality = QLocale().toDouble(audioQualityAsString);
261  return VuoMovieFormat_getJson(format);
262 }
263 
268 void VuoInputEditorMovieFormat::updateSliderValue(QString newLineEditText)
269 {
270  QObject *sender = QObject::sender();
271  qualityAttribute whichQualityAttribute = (sender == lineEditImageQuality? imageQuality : audioQuality);
272 
273  double newLineEditValue = QLocale().toDouble(newLineEditText);
274  int newSliderValue = lineEditValueToScaledSliderValue(newLineEditValue, whichQualityAttribute);
275 
276  QSlider *targetSlider = (whichQualityAttribute == imageQuality? sliderImageQuality : sliderAudioQuality);
277 
278  disconnect(targetSlider, &QSlider::valueChanged, this, static_cast<void (VuoInputEditorMovieFormat::*)(int)>(&VuoInputEditorMovieFormat::updateLineEditValue));
279  targetSlider->setValue(newSliderValue);
280  connect(targetSlider, &QSlider::valueChanged, this, static_cast<void (VuoInputEditorMovieFormat::*)(int)>(&VuoInputEditorMovieFormat::updateLineEditValue));
281 }
282 
289 void VuoInputEditorMovieFormat::updateLineEditValue()
290 {
291  QObject *sender = QObject::sender();
292  qualityAttribute whichQualityAttribute = (sender == sliderImageQuality? imageQuality: audioQuality);
293  updateLineEditValue(((QSlider *)sender)->value(), whichQualityAttribute);
294 }
295 
296 void VuoInputEditorMovieFormat::updateLineEditValue(int newSliderValue)
297 {
298  QObject *sender = QObject::sender();
299  qualityAttribute whichQualityAttribute = (sender == sliderImageQuality? imageQuality: audioQuality);
300 
301  updateLineEditValue(newSliderValue, whichQualityAttribute);
302 }
303 
313 void VuoInputEditorMovieFormat::updateLineEditValue(int newSliderValue, qualityAttribute whichQualityAttribute)
314 {
315  double newLineEditValue = sliderValueToScaledLineEditValue(newSliderValue, whichQualityAttribute);
316  QLineEdit *targetLineEdit = (whichQualityAttribute == imageQuality? lineEditImageQuality : lineEditAudioQuality);
317  const QString originalLineEditText = targetLineEdit->text();
318  QString newLineEditText = QLocale().toString(newLineEditValue, 'g');
319 
320  if (qAbs(newLineEditValue) >= 1000.0)
321  newLineEditText.remove(QLocale().groupSeparator());
322 
323  if (originalLineEditText != newLineEditText)
324  {
325  targetLineEdit->setText(newLineEditText);
326  targetLineEdit->setFocus();
327  targetLineEdit->selectAll();
328 
329  emitValueChanged();
330  }
331 }
332 
336 int VuoInputEditorMovieFormat::lineEditValueToScaledSliderValue(double lineEditValue, qualityAttribute whichQualityAttribute)
337 {
338  QSlider *targetSlider = (whichQualityAttribute == imageQuality? sliderImageQuality : sliderAudioQuality);
339  double suggestedMin = (whichQualityAttribute == imageQuality? suggestedMinImageQuality : suggestedMinAudioQuality);
340  double suggestedMax = (whichQualityAttribute == imageQuality? suggestedMaxImageQuality : suggestedMaxAudioQuality);
341  const double lineEditRange = suggestedMax - suggestedMin;
342 
343  const int sliderRange = targetSlider->maximum() - targetSlider->minimum();
344  int scaledSliderValue = targetSlider->minimum() + ((lineEditValue-suggestedMin)/(1.0*(lineEditRange)))*sliderRange;
345 
346  return scaledSliderValue;
347 }
348 
353 double VuoInputEditorMovieFormat::sliderValueToScaledLineEditValue(int sliderValue, qualityAttribute whichQualityAttribute)
354 {
355  QSlider *targetSlider = (whichQualityAttribute == imageQuality? sliderImageQuality : sliderAudioQuality);
356  double suggestedMin = (whichQualityAttribute == imageQuality? suggestedMinImageQuality : suggestedMinAudioQuality);
357  double suggestedMax = (whichQualityAttribute == imageQuality? suggestedMaxImageQuality : suggestedMaxAudioQuality);
358  const double lineEditRange = suggestedMax - suggestedMin;
359 
360  const int sliderRange = targetSlider->maximum() - targetSlider->minimum();
361  double scaledLineEditValue = suggestedMin + ((sliderValue-targetSlider->minimum())/(1.0*sliderRange))*lineEditRange;
362 
363  return scaledLineEditValue;
364 }
365 
366 void VuoInputEditorMovieFormat::updateQualitySliderEnabledStatusAndEmitValueChanged()
367 {
368  updateQualitySliderEnabledStatus();
369  emitValueChanged();
370 }
371 
375 void VuoInputEditorMovieFormat::updateQualitySliderEnabledStatus()
376 {
377  // Image Quality
378  json_object *acceptedFormatJson = getAcceptedValue();
379  VuoMovieFormat acceptedFormat = VuoMovieFormat_makeFromJson(acceptedFormatJson);
380  bool enableImageQualityWidgets = ((acceptedFormat.imageEncoding == VuoMovieImageEncoding_JPEG) ||
381  (acceptedFormat.imageEncoding == VuoMovieImageEncoding_H264) ||
382  (acceptedFormat.imageEncoding == VuoMovieImageEncoding_HEVC) ||
383  (acceptedFormat.imageEncoding == VuoMovieImageEncoding_HEVCAlpha));
384 
385  labelImageQuality->setEnabled(enableImageQualityWidgets);
386  lineEditImageQuality->setEnabled(enableImageQualityWidgets);
387  sliderImageQuality->setEnabled(enableImageQualityWidgets);
388 
389  if (!enableImageQualityWidgets)
390  {
391  int sliderValueImageQuality = lineEditValueToScaledSliderValue(1., imageQuality);
392  sliderImageQuality->setValue(sliderValueImageQuality);
393  }
394 
395  // Audio Quality
396  bool enableAudioQualityWidgets = (acceptedFormat.audioEncoding != VuoAudioEncoding_LinearPCM);
397 
398  labelAudioQuality->setEnabled(enableAudioQualityWidgets);
399  lineEditAudioQuality->setEnabled(enableAudioQualityWidgets);
400  sliderAudioQuality->setEnabled(enableAudioQualityWidgets);
401 
402  if (!enableAudioQualityWidgets)
403  {
404  int sliderValueAudioQuality = lineEditValueToScaledSliderValue(1., audioQuality);
405  sliderAudioQuality->setValue(sliderValueAudioQuality);
406  }
407 
408  QLineEdit *firstEnabledLineEdit = (enableImageQualityWidgets? lineEditImageQuality :
409  (enableAudioQualityWidgets? lineEditAudioQuality :
410  NULL));
411 
412  QLineEdit *lastEnabledLineEdit = (enableAudioQualityWidgets? lineEditAudioQuality :
413  (enableImageQualityWidgets? lineEditImageQuality :
414  NULL));
415 
416  // Return focus to the topmost line edit by default, or to the bottommost
417  // line edit if tab-cycling backwards.
418  // To be handled properly for https://b33p.net/kosada/node/6365 .
419  if (tabCycleForward && firstEnabledLineEdit)
420  {
421  firstEnabledLineEdit->setFocus();
422  firstEnabledLineEdit->selectAll();
423  }
424  else if (!tabCycleForward && lastEnabledLineEdit)
425  {
426  lastEnabledLineEdit->setFocus();
427  lastEnabledLineEdit->selectAll();
428  }
429 
430  setFirstWidgetInTabOrder(firstEnabledLineEdit);
431  setLastWidgetInTabOrder(lastEnabledLineEdit);
432 }
433 
434 void VuoInputEditorMovieFormat::emitValueChanged()
435 {
437 }
438 
442 bool VuoInputEditorMovieFormat::eventFilter(QObject *object, QEvent *event)
443 {
444  QSlider *targetSlider = (object==lineEditImageQuality? sliderImageQuality :
445  (object==lineEditAudioQuality? sliderAudioQuality :
446  NULL));
447 
448  if (event->type()==QEvent::Wheel && targetSlider)
449  {
450  // Let the slider handle mouse wheel events.
451  QApplication::sendEvent(targetSlider, event);
452  return true;
453  }
454 
455  else if (event->type()==QEvent::KeyPress && targetSlider)
456  {
457  // Let the slider handle keypresses of the up and down arrows.
458  QKeyEvent *keyEvent = (QKeyEvent *)(event);
459  if ((keyEvent->key() == Qt::Key_Up) || (keyEvent->key() == Qt::Key_Down))
460  {
461  QApplication::sendEvent(targetSlider, event);
462  return true;
463  }
464  }
465 
466  return VuoInputEditorWithLineEdit::eventFilter(object, event);
467 }
468 
475 QComboBox * VuoInputEditorMovieFormat::setUpComboBoxForType(QComboBox *comboBox, QString type, string originalValueAsString)
476 {
477  QString allowedValuesFunctionName = type + "_getAllowedValues";
478  typedef void *(*allowedValuesFunctionType)(void);
479  allowedValuesFunctionType allowedValuesFunction = (allowedValuesFunctionType)dlsym(RTLD_SELF, allowedValuesFunctionName.toUtf8().constData());
480 
481  QString summaryFunctionName = type + "_getSummary";
482  typedef char *(*summaryFunctionType)(int);
483  summaryFunctionType summaryFunction = (summaryFunctionType)dlsym(RTLD_SELF, summaryFunctionName.toUtf8().constData());
484 
485  QString jsonFunctionName = type + "_getJson";
486  typedef json_object *(*jsonFunctionType)(int);
487  jsonFunctionType jsonFunction = (jsonFunctionType)dlsym(RTLD_SELF, jsonFunctionName.toUtf8().constData());
488 
489  QString listCountFunctionName = "VuoListGetCount_" + type;
490  typedef unsigned long (*listCountFunctionType)(void *);
491  listCountFunctionType listCountFunction = (listCountFunctionType)dlsym(RTLD_SELF, listCountFunctionName.toUtf8().constData());
492 
493  QString listValueFunctionName = "VuoListGetValue_" + type;
494  typedef int (*listValueFunctionType)(void *, unsigned long);
495  listValueFunctionType listValueFunction = (listValueFunctionType)dlsym(RTLD_SELF, listValueFunctionName.toUtf8().constData());
496 
497  if (allowedValuesFunction && summaryFunction && jsonFunction && listCountFunction && listValueFunction)
498  {
499  void *allowedValues = allowedValuesFunction();
500  unsigned long count = listCountFunction(allowedValues);
501  for (unsigned long i=1; i<=count; ++i)
502  {
503  int value = listValueFunction(allowedValues, i);
504  char *summary = summaryFunction(value);
505  QVariant variantValue = QVariant::fromValue((void *)jsonFunction(value));
506 
507  // Hide HEVC on OS versions where it isn't supported.
508  if (type == "VuoMovieImageEncoding"
509  && value == VuoMovieImageEncoding_HEVC
510  && QSysInfo::macVersion() < Q_MV_OSX(10, 13))
511  {
512  free(summary);
513  continue;
514  }
515  if (type == "VuoMovieImageEncoding"
516  && (value == VuoMovieImageEncoding_HEVCAlpha
517  || value == VuoMovieImageEncoding_ProRes422HQ
518  || value == VuoMovieImageEncoding_ProRes422LT
519  || value == VuoMovieImageEncoding_ProRes422Proxy)
520  && QSysInfo::macVersion() < Q_MV_OSX(10, 15))
521  {
522  free(summary);
523  continue;
524  }
525 
526  comboBox->addItem(summary, variantValue);
527 
528  if (json_object_to_json_string_ext(jsonFunction(value), JSON_C_TO_STRING_PLAIN) == originalValueAsString)
529  comboBox->setCurrentText(summary);
530 
531  free(summary);
532  }
533  }
534 
535  return comboBox;
536 }