1 #include "mainwindow.h"
2 #include "ui_mainwindow.h"
4 #include <QtCore/QCoreApplication>
6 #include <QtGui/QMessageBox>
8 #include <QMaemo5InformationBox>
10 #include "pirkeysetwidgetitem.h"
11 #include "pirselectkeysetform.h"
12 #include "pirsecondaryform.h"
13 #include "pirdocumentationform.h"
14 #include "piraboutform.h"
15 #include "pirkeysetmanager.h"
19 // Some ugly globals used for thread communications:
21 // A global to show that a command is being processed:
22 bool commandInFlight = false;
23 QMutex commandIFMutex;
25 // The stopRepeatingFlag boolean is the method used to tell running commands
26 // in the worker thread to stop:
27 bool stopRepeatingFlag = false;
28 QMutex stopRepeatingMutex;
30 extern PIRMakeMgr makeManager;
33 MainWindow::MainWindow(QWidget *parent)
34 : QMainWindow(parent),
35 ui(new Ui::MainWindow),
44 // Make this a Maemo 5 stacked widget:
45 setAttribute(Qt::WA_Maemo5StackedWindow);
47 // Collect the keysets:
48 myKeysets = new PIRKeysetManager();
50 // Set up the keyset selection window:
51 selectKeysetForm = new PIRSelectKeysetForm(this);
53 // Set up the secondary buttons window:
54 secondaryForm = new PIRSecondaryForm(this);
56 myKeysets->populateGuiWidget(selectKeysetForm);
58 // Remember any favorites the user has already set:
61 QSettings settings("pietrzak.org", "Pierogi");
62 if (settings.contains("currentKeysetName"))
64 myKeysets->findKeysetID(
65 settings.value("currentKeysetMake").toString(),
66 settings.value("currentKeysetName").toString(),
68 // currentKeyset = settings.value("currentKeyset").toInt();
74 ui->favoriteKeysetsWidget,
75 SIGNAL(itemActivated(QListWidgetItem *)),
77 SLOT(keysetSelectionChanged(QListWidgetItem *)),
78 Qt::QueuedConnection);
80 // Make sure the two selection lists don't show different selections:
81 QListWidget *klw = selectKeysetForm->getKeysetListWidget();
83 ui->favoriteKeysetsWidget,
84 SIGNAL(itemActivated(QListWidgetItem *)),
86 SLOT(clearSelection()),
87 Qt::QueuedConnection);
91 SIGNAL(itemActivated(QListWidgetItem *)),
92 ui->favoriteKeysetsWidget,
93 SLOT(clearSelection()),
94 Qt::QueuedConnection);
97 // The PIRModprobe object should take care of setting up and shutting down
98 // the lirc_rx51 kernel module, if necessary:
100 if (modprobeObj.loadRX51Module() != 0)
102 // Couldn't load module, quit:
104 errBox.setText("Couldn't load lirc_rx51 kernel module!");
105 errBox.setIcon(QMessageBox::Warning);
107 // throw; // Need a clean way to exit here!!!
113 MainWindow::~MainWindow()
116 if (selectKeysetForm) delete selectKeysetForm;
117 if (documentationForm) delete documentationForm;
118 if (aboutForm) delete aboutForm;
123 void MainWindow::setOrientation(ScreenOrientation orientation)
125 #if defined(Q_OS_SYMBIAN)
126 // If the version of Qt on the device is < 4.7.2, that attribute won't work
127 if (orientation != ScreenOrientationAuto) {
128 const QStringList v = QString::fromAscii(qVersion()).split(QLatin1Char('.'));
129 if (v.count() == 3 && (v.at(0).toInt() << 16 | v.at(1).toInt() << 8 | v.at(2).toInt()) < 0x040702) {
130 qWarning("Screen orientation locking only supported with Qt 4.7.2 and above");
134 #endif // Q_OS_SYMBIAN
136 Qt::WidgetAttribute attribute;
137 switch (orientation) {
138 #if QT_VERSION < 0x040702
139 // Qt < 4.7.2 does not yet have the Qt::WA_*Orientation attributes
140 case ScreenOrientationLockPortrait:
141 attribute = static_cast<Qt::WidgetAttribute>(128);
143 case ScreenOrientationLockLandscape:
144 attribute = static_cast<Qt::WidgetAttribute>(129);
147 case ScreenOrientationAuto:
148 attribute = static_cast<Qt::WidgetAttribute>(130);
150 #else // QT_VERSION < 0x040702
151 case ScreenOrientationLockPortrait:
152 attribute = Qt::WA_LockPortraitOrientation;
154 case ScreenOrientationLockLandscape:
155 attribute = Qt::WA_LockLandscapeOrientation;
158 case ScreenOrientationAuto:
159 attribute = Qt::WA_AutoOrientation;
161 #endif // QT_VERSION < 0x040702
163 setAttribute(attribute, true);
166 void MainWindow::showExpanded()
168 #if defined(Q_OS_SYMBIAN) || defined(Q_WS_SIMULATOR)
170 #elif defined(Q_WS_MAEMO_5)
178 void MainWindow::enableButtons()
180 // Just to be sure, check to see if the keyset has been populated:
181 myKeysets->populateKeyset(this, currentKeyset);
183 // This is going to be a little painful...
185 emit powerEnabled(myKeysets->hasKey(currentKeyset, Power_Key));
186 emit volumeUpEnabled(myKeysets->hasKey(currentKeyset, VolumeUp_Key));
187 emit volumeDownEnabled(myKeysets->hasKey(currentKeyset, VolumeDown_Key));
188 emit channelUpEnabled(myKeysets->hasKey(currentKeyset, ChannelUp_Key));
189 emit channelDownEnabled(myKeysets->hasKey(currentKeyset, ChannelDown_Key));
190 emit muteEnabled(myKeysets->hasKey(currentKeyset, Mute_Key));
193 emit keysetMakeChanged(
194 makeManager.getMakeString(myKeysets->getMake(currentKeyset)));
195 emit keysetNameChanged(myKeysets->getDisplayName(currentKeyset));
198 emit redEnabled(myKeysets->hasKey(currentKeyset, Red_Key));
199 emit greenEnabled(myKeysets->hasKey(currentKeyset, Green_Key));
200 emit yellowEnabled(myKeysets->hasKey(currentKeyset, Yellow_Key));
201 emit blueEnabled(myKeysets->hasKey(currentKeyset, Blue_Key));
202 emit pictureModeEnabled(myKeysets->hasKey(currentKeyset, PictureMode_Key));
203 emit soundModeEnabled(myKeysets->hasKey(currentKeyset, SoundMode_Key));
204 emit aspectRatioEnabled(myKeysets->hasKey(currentKeyset, AspectRatio_Key));
205 // emit surroundEnabled(myKeysets->hasKey(currentKeyset, Surround_Key));
206 emit audioEnabled(myKeysets->hasKey(currentKeyset, Audio_Key));
207 emit infoEnabled(myKeysets->hasKey(currentKeyset, Info_Key));
208 emit captionsEnabled(myKeysets->hasKey(currentKeyset, Captions_Key));
209 emit sleepEnabled(myKeysets->hasKey(currentKeyset, Sleep_Key));
210 emit inputEnabled(myKeysets->hasKey(currentKeyset, Input_Key));
213 emit zeroEnabled(myKeysets->hasKey(currentKeyset, Zero_Key));
214 emit oneEnabled(myKeysets->hasKey(currentKeyset, One_Key));
215 emit twoEnabled(myKeysets->hasKey(currentKeyset, Two_Key));
216 emit threeEnabled(myKeysets->hasKey(currentKeyset, Three_Key));
217 emit fourEnabled(myKeysets->hasKey(currentKeyset, Four_Key));
218 emit fiveEnabled(myKeysets->hasKey(currentKeyset, Five_Key));
219 emit sixEnabled(myKeysets->hasKey(currentKeyset, Six_Key));
220 emit sevenEnabled(myKeysets->hasKey(currentKeyset, Seven_Key));
221 emit eightEnabled(myKeysets->hasKey(currentKeyset, Eight_Key));
222 emit nineEnabled(myKeysets->hasKey(currentKeyset, Nine_Key));
223 emit enterEnabled(myKeysets->hasKey(currentKeyset, Enter_Key));
224 emit clearEnabled(myKeysets->hasKey(currentKeyset, Clear_Key));
225 emit dashEnabled(myKeysets->hasKey(currentKeyset, Dash_Key));
226 emit plusOneHundredEnabled(myKeysets->hasKey(currentKeyset, PlusOneHundred_Key));
227 emit doubleDigitEnabled(myKeysets->hasKey(currentKeyset, DoubleDigit_Key));
228 emit prevChannelEnabled(myKeysets->hasKey(currentKeyset, PrevChannel_Key));
231 emit upEnabled(myKeysets->hasKey(currentKeyset, Up_Key));
232 emit downEnabled(myKeysets->hasKey(currentKeyset, Down_Key));
233 emit leftEnabled(myKeysets->hasKey(currentKeyset, Left_Key));
234 emit rightEnabled(myKeysets->hasKey(currentKeyset, Right_Key));
235 emit selectEnabled(myKeysets->hasKey(currentKeyset, Select_Key));
236 emit menuEnabled(myKeysets->hasKey(currentKeyset, Menu_Key));
237 emit exitEnabled(myKeysets->hasKey(currentKeyset, Exit_Key));
238 emit guideEnabled(myKeysets->hasKey(currentKeyset, Guide_Key));
239 emit discMenuEnabled(myKeysets->hasKey(currentKeyset, DiscMenu_Key));
242 emit nextEnabled(myKeysets->hasKey(currentKeyset, Next_Key));
243 emit previousEnabled(myKeysets->hasKey(currentKeyset, Previous_Key));
244 emit advanceEnabled(myKeysets->hasKey(currentKeyset, Advance_Key));
245 emit replayEnabled(myKeysets->hasKey(currentKeyset, Replay_Key));
246 emit stepForwardEnabled(myKeysets->hasKey(currentKeyset, StepForward_Key));
247 emit stepBackEnabled(myKeysets->hasKey(currentKeyset, StepBack_Key));
248 emit fastForwardEnabled(myKeysets->hasKey(currentKeyset, FastForward_Key));
249 emit reverseEnabled(myKeysets->hasKey(currentKeyset, Rewind_Key));
250 emit playEnabled(myKeysets->hasKey(currentKeyset, Play_Key));
251 emit pauseEnabled(myKeysets->hasKey(currentKeyset, Pause_Key));
252 emit stopEnabled(myKeysets->hasKey(currentKeyset, Stop_Key));
253 emit ejectEnabled(myKeysets->hasKey(currentKeyset, Eject_Key));
255 // Also enable the buttons on the secondary form:
256 secondaryForm->enableButtons(myKeysets, currentKeyset);
260 void MainWindow::receivedExternalWarning(
264 errBox.setText(warning);
265 errBox.setIcon(QMessageBox::Warning);
272 void MainWindow::on_powerButton_pressed()
274 startRepeating(Power_Key);
277 void MainWindow::on_powerButton_released()
282 void MainWindow::on_mainChannelUpButton_pressed()
284 startRepeating(ChannelUp_Key);
287 void MainWindow::on_mainChannelUpButton_released()
292 void MainWindow::on_mainChannelDownButton_pressed()
294 startRepeating(ChannelDown_Key);
297 void MainWindow::on_mainChannelDownButton_released()
302 void MainWindow::on_mainVolumeUp_pressed()
304 startRepeating(VolumeUp_Key);
307 void MainWindow::on_mainVolumeUp_released()
312 void MainWindow::on_mainVolumeDownButton_pressed()
314 startRepeating(VolumeDown_Key);
317 void MainWindow::on_mainVolumeDownButton_released()
322 void MainWindow::on_muteButton_pressed()
324 startRepeating(Mute_Key);
327 void MainWindow::on_muteButton_released()
333 // Utility tab buttons:
335 void MainWindow::on_redButton_pressed()
337 startRepeating(Red_Key);
340 void MainWindow::on_redButton_released()
345 void MainWindow::on_greenButton_pressed()
347 startRepeating(Green_Key);
350 void MainWindow::on_greenButton_released()
355 void MainWindow::on_yellowButton_pressed()
357 startRepeating(Yellow_Key);
360 void MainWindow::on_yellowButton_released()
365 void MainWindow::on_blueButton_pressed()
367 startRepeating(Blue_Key);
370 void MainWindow::on_blueButton_released()
375 void MainWindow::on_pictureModeButton_pressed()
377 startRepeating(PictureMode_Key);
380 void MainWindow::on_pictureModeButton_released()
385 void MainWindow::on_soundModeButton_pressed()
387 startRepeating(SoundMode_Key);
390 void MainWindow::on_soundModeButton_released()
395 void MainWindow::on_aspectRatioButton_pressed()
397 startRepeating(AspectRatio_Key);
400 void MainWindow::on_aspectRatioButton_released()
406 void MainWindow::on_surroundButton_pressed()
408 startRepeating(Surround_Key);
411 void MainWindow::on_surroundButton_released()
417 void MainWindow::on_audioButton_pressed()
419 startRepeating(Audio_Key);
422 void MainWindow::on_audioButton_released()
427 void MainWindow::on_infoButton_pressed()
429 startRepeating(Info_Key);
432 void MainWindow::on_infoButton_released()
437 void MainWindow::on_captionButton_pressed()
439 startRepeating(Captions_Key);
442 void MainWindow::on_captionButton_released()
447 void MainWindow::on_inputButton_pressed()
449 startRepeating(Input_Key);
452 void MainWindow::on_inputButton_released()
457 void MainWindow::on_sleepButton_pressed()
459 startRepeating(Sleep_Key);
462 void MainWindow::on_sleepButton_released()
468 // Keypad tab buttons:
470 void MainWindow::on_oneButton_pressed()
472 startRepeating(One_Key);
475 void MainWindow::on_oneButton_released()
480 void MainWindow::on_twoButton_pressed()
482 startRepeating(Two_Key);
485 void MainWindow::on_twoButton_released()
490 void MainWindow::on_threeButton_pressed()
492 startRepeating(Three_Key);
495 void MainWindow::on_threeButton_released()
500 void MainWindow::on_fourButton_pressed()
502 startRepeating(Four_Key);
505 void MainWindow::on_fourButton_released()
510 void MainWindow::on_fiveButton_pressed()
512 startRepeating(Five_Key);
515 void MainWindow::on_fiveButton_released()
520 void MainWindow::on_sixButton_pressed()
522 startRepeating(Six_Key);
525 void MainWindow::on_sixButton_released()
530 void MainWindow::on_sevenButton_pressed()
532 startRepeating(Seven_Key);
535 void MainWindow::on_sevenButton_released()
540 void MainWindow::on_eightButton_pressed()
542 startRepeating(Eight_Key);
545 void MainWindow::on_eightButton_released()
550 void MainWindow::on_nineButton_pressed()
552 startRepeating(Nine_Key);
555 void MainWindow::on_nineButton_released()
560 void MainWindow::on_zeroButton_pressed()
562 startRepeating(Zero_Key);
565 void MainWindow::on_zeroButton_released()
570 void MainWindow::on_enterButton_pressed()
572 startRepeating(Enter_Key);
575 void MainWindow::on_enterButton_released()
580 void MainWindow::on_clearButton_pressed()
582 startRepeating(Clear_Key);
585 void MainWindow::on_clearButton_released()
590 void MainWindow::on_prevChannelButton_pressed()
592 startRepeating(PrevChannel_Key);
595 void MainWindow::on_prevChannelButton_released()
600 void MainWindow::on_plusOneHundredButton_pressed()
602 startRepeating(PlusOneHundred_Key);
605 void MainWindow::on_plusOneHundredButton_released()
610 void MainWindow::on_dashButton_pressed()
612 startRepeating(Dash_Key);
615 void MainWindow::on_dashButton_released()
620 void MainWindow::on_doubleDigitButton_pressed()
622 startRepeating(DoubleDigit_Key);
625 void MainWindow::on_doubleDigitButton_released()
633 void MainWindow::on_upButton_pressed()
635 startRepeating(Up_Key);
638 void MainWindow::on_upButton_released()
643 void MainWindow::on_leftButton_pressed()
645 startRepeating(Left_Key);
648 void MainWindow::on_leftButton_released()
653 void MainWindow::on_rightButton_pressed()
655 startRepeating(Right_Key);
658 void MainWindow::on_rightButton_released()
663 void MainWindow::on_downButton_pressed()
665 startRepeating(Down_Key);
668 void MainWindow::on_downButton_released()
673 void MainWindow::on_selectButton_pressed()
675 startRepeating(Select_Key);
678 void MainWindow::on_selectButton_released()
683 void MainWindow::on_menuButton_pressed()
685 startRepeating(Menu_Key);
688 void MainWindow::on_menuButton_released()
693 void MainWindow::on_exitButton_pressed()
695 startRepeating(Exit_Key);
698 void MainWindow::on_exitButton_released()
703 void MainWindow::on_guideButton_pressed()
705 startRepeating(Guide_Key);
708 void MainWindow::on_guideButton_released()
713 void MainWindow::on_discMenuButton_pressed()
715 startRepeating(DiscMenu_Key);
718 void MainWindow::on_discMenuButton_released()
724 // Media tab buttons:
726 void MainWindow::on_mediaPreviousButton_pressed()
728 startRepeating(Previous_Key);
731 void MainWindow::on_mediaPreviousButton_released()
736 void MainWindow::on_mediaNextButton_pressed()
738 startRepeating(Next_Key);
741 void MainWindow::on_mediaNextButton_released()
746 void MainWindow::on_replayButton_pressed()
748 startRepeating(Replay_Key);
751 void MainWindow::on_replayButton_released()
756 void MainWindow::on_advanceButton_pressed()
758 startRepeating(Advance_Key);
761 void MainWindow::on_advanceButton_released()
766 void MainWindow::on_stepBackButton_pressed()
768 startRepeating(StepBack_Key);
771 void MainWindow::on_stepBackButton_released()
776 void MainWindow::on_stepForwardButton_pressed()
778 startRepeating(StepForward_Key);
781 void MainWindow::on_stepForwardButton_released()
786 void MainWindow::on_reverseButton_pressed()
788 startRepeating(Rewind_Key);
791 void MainWindow::on_reverseButton_released()
796 void MainWindow::on_fastForwardButton_pressed()
798 startRepeating(FastForward_Key);
801 void MainWindow::on_fastForwardButton_released()
806 void MainWindow::on_playButton_pressed()
808 startRepeating(Play_Key);
811 void MainWindow::on_playButton_released()
816 void MainWindow::on_pauseButton_pressed()
818 startRepeating(Pause_Key);
821 void MainWindow::on_pauseButton_released()
826 void MainWindow::on_stopButton_pressed()
828 startRepeating(Stop_Key);
831 void MainWindow::on_stopButton_released()
836 void MainWindow::on_ejectButton_pressed()
838 startRepeating(Eject_Key);
841 void MainWindow::on_ejectButton_released()
849 void MainWindow::on_actionSelectKeyset_triggered()
851 selectKeysetForm->show();
854 void MainWindow::on_actionSecondary_Buttons_triggered()
858 secondaryForm = new PIRSecondaryForm(this);
861 secondaryForm->show();
864 void MainWindow::on_actionAbout_triggered()
868 aboutForm = new PIRAboutForm(this);
874 void MainWindow::on_actionDocumentation_triggered()
876 if (!documentationForm)
878 documentationForm = new PIRDocumentationForm(this);
881 documentationForm->show();
887 void MainWindow::keysetSelectionChanged(
888 QListWidgetItem *item)
890 if (!item) return; // Should probably display error message here!
892 PIRKeysetWidgetItem *kwi = dynamic_cast<PIRKeysetWidgetItem *>(item);
894 if (!kwi) return; // Also need to say something here
896 if (currentKeyset == kwi->getID())
898 // We're already on that keyset, so nothing to do:
902 currentKeyset = kwi->getID();
904 QSettings settings("pietrzak.org", "Pierogi");
905 // settings.setValue("currentKeyset", currentKeyset);
909 makeManager.getMakeString(kwi->getMake()));
913 myKeysets->getDisplayName(currentKeyset));
919 void MainWindow::finalCleanup()
921 // Perform any necessary cleanup work here.
923 // Make certain that the thread stops repeating:
928 void MainWindow::on_addKeysetButton_clicked()
930 // Is the current keyset already a favorite?
931 int count = ui->favoriteKeysetsWidget->count();
933 PIRKeysetWidgetItem *kwi = NULL;
934 while (index < count)
936 kwi = dynamic_cast<PIRKeysetWidgetItem *>(
937 ui->favoriteKeysetsWidget->item(index));
939 if (kwi && (kwi->getID() == currentKeyset))
941 // Current keyset already in list! No need to continue.
947 // Ok, add the current keyset to the favorites:
948 PIRMakeName make = myKeysets->getMake(currentKeyset);
950 QString name = makeManager.getMakeString(make);
952 name.append(myKeysets->getDisplayName(currentKeyset));
954 ui->favoriteKeysetsWidget->addItem(
955 new PIRKeysetWidgetItem(name, currentKeyset, make));
957 // And, add the keyset id to the persistent list:
958 QSettings settings("pietrzak.org", "Pierogi");
960 int favSettingsSize = settings.beginReadArray("favorites");
963 settings.beginWriteArray("favorites");
964 settings.setArrayIndex(favSettingsSize);
965 // settings.setValue("keysetID", currentKeyset);
969 makeManager.getMakeString(myKeysets->getMake(currentKeyset)));
971 settings.setValue("keysetName", myKeysets->getDisplayName(currentKeyset));
977 void MainWindow::on_removeKeysetButton_clicked()
979 // Deleting an item removes it from the list, so just grab the currently
980 // selected item and delete it:
981 QListWidgetItem *item = ui->favoriteKeysetsWidget->currentItem();
983 if (item) delete item;
985 // Remove this item from the persistent list. Well, actually, it seems a
986 // little more convenient to just blow away the existing list of favorites
987 // and rewrite it, as modifying an existing QSettings array in the middle
988 // seems a bit hard...
989 QSettings settings("pietrzak.org", "Pierogi");
991 settings.remove("favorites");
993 int count = ui->favoriteKeysetsWidget->count();
995 // If the count is empty, we can stop right here:
996 if (count == 0) return;
1000 PIRKeysetWidgetItem *kwi = NULL;
1001 settings.beginWriteArray("favorites");
1002 while (index < count)
1004 kwi = dynamic_cast<PIRKeysetWidgetItem *>(
1005 ui->favoriteKeysetsWidget->item(index));
1007 settings.setArrayIndex(index);
1008 // settings.setValue("keysetID", kwi->getID());
1013 makeManager.getMakeString(myKeysets->getMake(id)));
1015 settings.setValue("keysetName", myKeysets->getDisplayName(id));
1019 settings.endArray();
1022 void MainWindow::populateFavorites()
1024 QSettings settings("pietrzak.org", "Pierogi");
1026 int size = settings.beginReadArray("favorites");
1030 PIRKeysetWidgetItem *kwi;
1032 while (index < size)
1034 settings.setArrayIndex(index);
1035 make = settings.value("keysetMake").toString();
1036 name = settings.value("keysetName").toString();
1038 kwi = myKeysets->makeKeysetItem(make, name);
1040 // Did the item creation work?
1043 // Keyset does exist, so continue:
1044 ui->favoriteKeysetsWidget->addItem(kwi);
1050 settings.endArray();
1054 void MainWindow::startRepeating(
1057 QMutexLocker locker(&commandIFMutex);
1058 if (!commandInFlight)
1060 commandInFlight = true;
1061 emit buttonPressed(currentKeyset, name);
1066 void MainWindow::stopRepeating()
1068 QMutexLocker locker(&stopRepeatingMutex);
1069 stopRepeatingFlag = true;
1073 QWidget *MainWindow::getSecondaryWindow()
1075 return secondaryForm;
1079 void MainWindow::selectPrevFavKeyset()
1081 int size = ui->favoriteKeysetsWidget->count();
1085 // No favorites, so nothing to do!
1089 int position = ui->favoriteKeysetsWidget->currentRow();
1094 position = size - 1;
1097 ui->favoriteKeysetsWidget->setCurrentRow(
1099 QItemSelectionModel::ClearAndSelect);
1101 keysetSelectionChanged(ui->favoriteKeysetsWidget->currentItem());
1103 // Tell the user about the change:
1104 QMaemo5InformationBox::information(
1106 ui->favoriteKeysetsWidget->item(position)->text());
1110 void MainWindow::selectNextFavKeyset()
1112 int size = ui->favoriteKeysetsWidget->count();
1116 // No favorites, so just return:
1120 int position = ui->favoriteKeysetsWidget->currentRow();
1123 if (position == size)
1128 ui->favoriteKeysetsWidget->setCurrentRow(
1130 QItemSelectionModel::ClearAndSelect);
1132 keysetSelectionChanged(ui->favoriteKeysetsWidget->currentItem());
1134 // Tell the user about the change:
1135 QMaemo5InformationBox::information(
1137 ui->favoriteKeysetsWidget->item(position)->text());