@@ -667,6 +667,62 @@ void FlexSwitchesItemModel::update(const int event)
667667 }
668668}
669669
670+ //
671+ // ControlSourceItemModel
672+ //
673+
674+ ControlSourceItemModel::ControlSourceItemModel (const GeneralSettings * const generalSettings, const ModelData * const modelData,
675+ Firmware * firmware, const Boards * const board, const Board::Type boardType) :
676+ AbstractDynamicItemModel(generalSettings, modelData, firmware, board, boardType)
677+ {
678+ setId (IMID_ControlSource);
679+ setUpdateMask (IMUE_Hardware);
680+
681+ // Descending source direction: inverted (!) sources
682+ addItems (SOURCE_TYPE_SWITCH, -board->getCapability (Board::Switches));
683+ addItems (SOURCE_TYPE_INPUT, -board->getCapability (Board::Inputs), -board->getCapability (Board::Sticks));
684+
685+ // Ascending source direction (including zero)
686+ addItems (SOURCE_TYPE_NONE, 1 );
687+ addItems (SOURCE_TYPE_INPUT, board->getCapability (Board::Inputs), board->getCapability (Board::Sticks));
688+ addItems (SOURCE_TYPE_SWITCH, board->getCapability (Board::Switches));
689+ }
690+
691+ void ControlSourceItemModel::setDynamicItemData (QStandardItem * item, const RawSource & src) const
692+ {
693+ item->setText (src.toString (modelData, generalSettings, boardType));
694+ item->setData (src.isAvailable (modelData, generalSettings, boardType, RawSource::AVAILABLE_CONTROLSRC), IMDR_Available);
695+ }
696+
697+ void ControlSourceItemModel::addItems (const RawSourceType & type, int count, const int start)
698+ {
699+ const int idxAdj = (type == SOURCE_TYPE_NONE ? -1 : 0 );
700+
701+ int first = start + count < 0 ? start + count : start + 1 ;
702+ int last = start + count < 0 ? start : start + count + 1 ;
703+
704+ for (int i = first; i < last; ++i) {
705+ const RawSource src = RawSource (type, i + idxAdj);
706+ QStandardItem * modelItem = new QStandardItem ();
707+ modelItem->setData (src.toValue (), IMDR_Id);
708+ modelItem->setData (type, IMDR_Type);
709+ setDynamicItemData (modelItem, src);
710+ appendRow (modelItem);
711+ }
712+ }
713+
714+ void ControlSourceItemModel::update (const int event)
715+ {
716+ if (doUpdate (event)) {
717+ emit aboutToBeUpdated ();
718+
719+ for (int i = 0 ; i < rowCount (); ++i)
720+ setDynamicItemData (item (i), RawSource (item (i)->data (IMDR_Id).toInt ()));
721+
722+ emit updateComplete ();
723+ }
724+ }
725+
670726//
671727// CompoundItemModelFactory
672728//
@@ -722,6 +778,9 @@ void CompoundItemModelFactory::addItemModel(const int id)
722778 case AbstractItemModel::IMID_FlexSwitches:
723779 registerItemModel (new FlexSwitchesItemModel (generalSettings, modelData, firmware, board, boardType));
724780 break ;
781+ case AbstractItemModel::IMID_ControlSource:
782+ registerItemModel (new ControlSourceItemModel (generalSettings, modelData, firmware, board, boardType));
783+ break ;
725784 default :
726785 qDebug () << " Error: unknown item model: id" ;
727786 break ;
0 commit comments