KexiStartupFileDialogBase::KexiStartupFileDialogBase( const QString & dirName, const QString & filter, QWidget * parent, const char * name, bool modal) : Q3FileDialog(realStartDir(dirName), filter, parent, name, modal) , d(new KexiStartupFileDialogBasePrivate()) { // QString _dirName = dirName; QString _dirName = dirPath(); //make default 'My Documents' folder //TODO: store changes in the app's config file? if (_dirName.isEmpty()) _dirName = KGlobalSettings::documentPath(); init(_dirName, filter, parent); //find "OK" button QObjectList *l = queryList("QPushButton", "OK", false); m_okBtn = dynamic_cast<QPushButton*>(l->first()); delete l; l = queryList("QLineEdit", "name/filter editor", false); m_lineEdit = dynamic_cast<QLineEdit*>(l->first()); delete l; adjustSize(); }
void SpinBox::init() { int step = QSpinBox::lineStep(); mLineStep = step; mLineShiftStep = step; mCurrentButton = NO_BUTTON; mShiftMouse = false; mShiftMinBound = false; mShiftMaxBound = false; mSelectOnStep = true; mReadOnly = false; mSuppressSignals = false; mEdited = false; // Find the spin widgets which are part of the spin boxes, in order to // handle their shift-button presses. QObjectList* spinwidgets = queryList("QSpinWidget", 0, false, true); QSpinWidget* spin = (QSpinWidget*)spinwidgets->getFirst(); if (spin) spin->installEventFilter(this); // handle shift-button presses delete spinwidgets; editor()->installEventFilter(this); // handle shift-up/down arrow presses #if KDE_IS_VERSION(3,1,90) // Detect when the text field is edited connect(editor(), SIGNAL(textChanged(const QString&)), SLOT(textEdited())); #endif }
void MyButtonGroup::resizeEvent( QResizeEvent * ) { int x = width()-2; QObjectList *list = queryList( "QPushButton" ); QObjectListIt it( *list ); while ( it.current() ) { x -= (BUTTON_WIDTH+4); ((QPushButton *) it.current())->move(x, 4); ++it; } delete list; }
void TabView::installFocusFilters() { QObjectList *l = queryList("QWidget"); QObjectListIt it( *l ); QObject *obj; while ( (obj = it.current()) != 0 ) { ++it; if ( ((QWidget*)obj)->isFocusEnabled() ) obj->installEventFilter(this); } delete l; }
QT_BEGIN_NAMESPACE PreviewWidget::PreviewWidget( QWidget *parent, const char *name ) : PreviewWidgetBase( parent, name ) { // install event filter on child widgets QObjectList l = queryList("QWidget"); for (int i = 0; i < l.size(); ++i) { QObject * obj = l.at(i); obj->installEventFilter(this); ((QWidget*)obj)->setFocusPolicy(Qt::NoFocus); } }
PreviewWidget::PreviewWidget( QWidget *parent, const char *name ) : PreviewWidgetBase( parent, name ) { // install event filter on child widgets QObjectList *l = queryList("QWidget"); QObjectListIt it(*l); QObject * obj; while ((obj = it.current()) != 0) { ++it; obj->installEventFilter(this); ((QWidget*)obj)->setFocusPolicy(NoFocus); } }
void KWindowInfo::permanent( const QString &text, const QPixmap &pix ) { if ( !oldText.isNull() ) { QObjectList *l = queryList( "QTimer" ); QObjectListIt it( *l ); QObject *obj; while ( (obj = it.current()) != 0 ) { ++it; delete obj; } delete l; } oldText = QString::null; display( text, pix ); }
bool SearchBar::focusedChild() { QObjectList *l = queryList("QWidget", 0,0, true); QObjectListIt it( *l ); QObject *obj; bool has=false; while ((obj = it.current()) != 0) { ++it; if (((QWidget*)obj)->hasFocus()) { has=true; break; } } delete l; return has; }
void RadioGroup::slotToggled(bool bState) { if (bState){ QObjectList *l = parentWidget()->queryList("QRadioButton"); QObjectListIt it(*l); QObject *obj; while ((obj=it.current()) != NULL){ if (obj != m_button) static_cast<QRadioButton*>(obj)->setChecked(false); ++it; } delete l; }else{ bState = true; QObjectList *l = parentWidget()->queryList("QRadioButton"); QObjectListIt it(*l); QObject *obj; while ((obj=it.current()) != NULL){ if (static_cast<QRadioButton*>(obj)->isChecked()){ bState = false; break; } ++it; } delete l; if (bState) m_button->setChecked(true); } QObjectList *l = queryList(); QObjectListIt it(*l); QObject *obj; while ((obj=it.current()) != NULL){ if (obj->inherits("QLabel") || obj->inherits("QLineEdit") || obj->inherits("QComboBox")){ static_cast<QWidget*>(obj)->setEnabled(bState); } ++it; } delete l; emit toggled(bState); }
void EmoticonSelector::prepareList(void) { // kdDebug(14000) << k_funcinfo << "called." << endl; int row = 0; int col = 0; QMap<QString, QStringList> list = Kopete::Emoticons::self()->emoticonAndPicList(); int emoticonsPerRow = static_cast<int>(sqrt(list.count())); //kdDebug(14000) << "emoticonsPerRow=" << emoticonsPerRow << endl; if ( lay ) { QObjectList *objList = queryList( "EmoticonLabel" ); //kdDebug(14000) << k_funcinfo << "There are " << objList->count() << " EmoticonLabels to delete." << endl; objList->setAutoDelete(true); objList->clear(); delete objList; delete lay; } lay = new QGridLayout(this, 0, 0, 4, 4, "emoticonLayout"); movieList.clear(); for (QMap<QString, QStringList>::const_iterator it = list.constBegin(); it != list.constEnd(); ++it ) { QWidget *w = new EmoticonLabel(it.data().first(), it.key(), this); movieList.push_back( ((QLabel*)w)->movie() ); connect(w, SIGNAL(clicked(const QString&)), this, SLOT(emoticonClicked(const QString&))); // kdDebug(14000) << "adding Emoticon to row=" << row << ", col=" << col << "." << endl; lay->addWidget(w, row, col); if ( col == emoticonsPerRow ) { col = 0; row++; } else col++; } resize(minimumSizeHint()); }
void TerminalSplitter::recursiveCleanup() { /* Clean away empty splitters after a terminal was removed. */ QObjectList* list = queryList("TerminalSplitter", 0, false, false); QObjectListIt it(*list); QObject *obj; while ((obj = it.current()) != 0) { ++it; TerminalSplitter* splitter = static_cast<TerminalSplitter*>(obj); splitter->recursiveCleanup(); } if (count() == 0) deleteLater(); else { // Update minimum sizes. if (orientation() == TerminalSplitter::Horizontal) { int minimumWidth = (terminalCount() > 1) ? terminalCount()*150+handleWidth() : terminalCount()*150; setMinimumSize(QSize(minimumWidth, minimumHeight())); } else if (orientation() == TerminalSplitter::Vertical) { int minimumHeight = (terminalCount() > 1) ? terminalCount()*70+handleWidth() : terminalCount()*70; setMinimumSize(QSize(minimumWidth(), minimumHeight)); } } }
void datalogProgram :: datalogProg(){ if (tokens.at(vecIndex).getTokenType() == SCHEMES){ match(SCHEMES); match(COLON); scheme(); schemeList(); match(FACTS); match(COLON); factList(); match(RULES); match(COLON); ruleList(); match(QUERIES); match(COLON); query(); queryList(); } else{ if (currentStatus == true){ currentStatus = false; falseTok = tokens.at(vecIndex); } } }
/*! Destructs the KXtWidget. */ KXtWidget::~KXtWidget() { // Delete children first, as Xt will destroy their windows // QObjectList* list = queryList("QWidget", 0, FALSE, FALSE); if ( list ) { QWidget* c; QObjectListIt it( *list ); while ( (c = (QWidget*)it.current()) ) { delete c; ++it; } delete list; } if ( need_reroot ) { hide(); XReparentWindow(qt_xdisplay(), winId(), qApp->desktop()->winId(), x(), y()); } XtDestroyWidget(xtw); destroy( FALSE, FALSE ); }
void *StatusFrame::processEvent(Event *e) { CommandDef *cmd; switch (e->type()){ case EventCheckState: cmd = (CommandDef*)(e->param()); if ((cmd->menu_id == MenuStatusWnd) && (cmd->id == CmdStatusWnd)){ unsigned n = 0; { QObjectList *l = queryList("StatusLabel"); QObjectListIt itObject(*l); QObject *obj; while ((obj=itObject.current()) != NULL) { ++itObject; StatusLabel *lbl = static_cast<StatusLabel*>(obj); if (lbl->x() + lbl->width() > width()) n++; } delete l; } CommandDef *cmds = new CommandDef[n + 1]; memset(cmds, 0, sizeof(CommandDef) * (n + 1)); QObjectList *l = queryList("StatusLabel"); QObjectListIt itObject(*l); QObject *obj; n = 0; while ((obj=itObject.current()) != NULL) { ++itObject; StatusLabel *lbl = static_cast<StatusLabel*>(obj); if (lbl->x() + lbl->width() > width()){ cmds[n].id = 1; cmds[n].text = "_"; cmds[n].text_wrk = strdup(CorePlugin::m_plugin->clientName(lbl->m_client).utf8()); cmds[n].popup_id = lbl->m_id; if (lbl->m_client->getState() == Client::Error){ cmds[n].icon = "error"; }else{ Protocol *protocol = lbl->m_client->protocol(); const CommandDef *cmd = protocol->description(); cmds[n].icon = cmd->icon; for (cmd = protocol->statusList(); cmd->text; cmd++){ if (cmd->id == lbl->m_client->getStatus()){ cmds[n].icon = cmd->icon; break; } } } n++; } } delete l; cmd->param = cmds; cmd->flags |= COMMAND_RECURSIVE; return e->param(); } break; case EventClientsChanged: addClients(); break; case EventClientChanged:{ StatusLabel *lbl = findLabel((Client*)(e->param())); if (lbl) lbl->setPict(); break; } case EventClientError: if (isVisible()){ clientErrorData *data = (clientErrorData*)(e->param()); if (data->code == AuthError) break; StatusLabel *lbl = findLabel(data->client); if (lbl == NULL) break; if (data->err_str && *data->err_str){ QString msg = i18n(data->err_str); if (data->args) msg = msg.arg(QString::fromUtf8(data->args)); raiseWindow(topLevelWidget()); BalloonMsg::message(msg, lbl); return e->param(); } } break; case EventIconChanged:{ QObjectList *l = queryList("StatusLabel"); QObjectListIt itObject(*l); QObject *obj; while ((obj=itObject.current()) != NULL) { ++itObject; static_cast<StatusLabel*>(obj)->setPict(); } delete l; break; } } return NULL; }
int TerminalSplitter::splitterCount(bool recursive) { return queryList(QCString("TerminalSplitter"), 0, false, recursive)->count(); }
AmarokConfigDialog::AmarokConfigDialog( QWidget *parent, const char* name, KConfigSkeleton *config ) : KConfigDialog( parent, name, config ) , m_engineConfig( 0 ) , m_opt4( 0 ) { setWFlags( WDestructiveClose ); // IMPORTANT Don't simply change the page names, they are used as identifiers in other parts of the app. m_opt1 = new Options1( 0, "General" ); m_opt2 = new Options2( 0, "Appearance" ); m_opt4 = new Options4( 0, "Playback" ); Options5 *opt5 = new Options5( 0, "OSD" ); QVBox *opt6 = new QVBox; m_opt7 = new Options7( 0, "Collection" ); Options8 *opt8 = new Options8( 0, "Scrobbler" ); // Sound System opt6->setName( "Engine" ); opt6->setSpacing( 12 ); opt6->setMargin( 11 ); QWidget *groupBox, *aboutEngineButton; groupBox = new QGroupBox( 2, Qt::Horizontal, i18n("Sound System"), opt6 ); m_engineConfigFrame = new QGroupBox( 1, Qt::Horizontal, opt6 ); m_soundSystem = new QComboBox( false, groupBox ); aboutEngineButton = new QPushButton( i18n("About"), groupBox ); QToolTip::add( m_soundSystem, i18n("Click to select the sound system to use for playback.") ); QToolTip::add( aboutEngineButton, i18n("Click to get the plugin information.") ); KTrader::OfferList offers = PluginManager::query( "[X-KDE-amaroK-plugintype] == 'engine'" ); KTrader::OfferList::ConstIterator end( offers.end() ); for( KTrader::OfferList::ConstIterator it = offers.begin(); it != end; ++it ) { m_soundSystem->insertItem( (*it)->name() ); // Save name properties in QMap for lookup m_pluginName[(*it)->name()] = (*it)->property( "X-KDE-amaroK-name" ).toString(); m_pluginAmarokName[(*it)->property( "X-KDE-amaroK-name" ).toString()] = (*it)->name(); } // KConfigXT doesn't like Comboboxes, still, 2 versions after // it was created. How shit. Hence we can't make recodeEncoding // a string (which we need to because by index is not consistent) QTextCodec *codec; m_opt1->kcfg_RecodeEncoding->insertItem( i18n("Locale Encoding") ); for( int i = 1; (codec = QTextCodec::codecForIndex( i )); i++ ) m_opt1->kcfg_RecodeEncoding->insertItem( codec->name() ); // Collection #if !defined(USE_MYSQL) && !defined(USE_POSTGRESQL) m_opt7->databaseBox->hide(); #endif #ifndef USE_MYSQL //FIXME we do this because this widget breaks the Apply button (always enabled). //It breaks because it is set to type="password" in the .kcfg file. Setting to //type="string" also fixes this bug, but means the password is stored in plain //text. This is a temporary fix so that the majority of users get a fixed Apply //button. delete m_opt7->dbSetupFrame->kcfg_MySqlPassword; #endif m_opt7->collectionFoldersBox->setColumns( 1 ); new CollectionSetup( m_opt7->collectionFoldersBox ); //TODO this widget doesn't update the apply/ok buttons // add pages addPage( m_opt1, i18n( "General" ), "misc", i18n( "Configure General Options" ) ); addPage( m_opt2, i18n( "Appearance" ), "colors", i18n( "Configure amaroK's Appearance" ) ); addPage( m_opt4, i18n( "Playback" ), "kmix", i18n( "Configure Playback" ) ); addPage( opt5, i18n( "OSD" ), "tv", i18n( "Configure On-Screen-Display" ) ); addPage( opt6, i18n( "Engine" ), "amarok", i18n( "Configure Engine" ) ); addPage( m_opt7, i18n( "Collection" ), "collection", i18n( "Configure Collection" ) ); addPage( opt8, i18n( "last.fm" ), "audioscrobbler", i18n( "Configure last.fm Support" ) ); // Show information labels (must be done after insertions) QObjectList *list = queryList( "QLabel", "infoPixmap" ); for( QObject *label = list->first(); label; label = list->next() ) static_cast<QLabel*>(label)->setPixmap( QMessageBox::standardIcon( QMessageBox::Information ) ); delete list; //stop KFont Requesters getting stupidly large list = queryList( "QLabel", "m_sampleLabel" ); for( QObject *label = list->first(); label; label = list->next() ) static_cast<QLabel*>(label)->setMaximumWidth( 250 ); delete list; connect( m_soundSystem, SIGNAL(activated( int )), SLOT(updateButtons()) ); connect( aboutEngineButton, SIGNAL(clicked()), SLOT(aboutEngine()) ); connect( opt5, SIGNAL(settingsChanged()), SLOT(updateButtons()) ); //see options5.ui.h connect( m_opt2->styleComboBox, SIGNAL( activated( int ) ), SLOT( updateButtons() ) ); connect( m_opt7->dbSetupFrame->databaseEngine, SIGNAL( activated( int ) ), SLOT( updateButtons() ) ); }
void XDataWidget::setFields(const XData::FieldList &f) { fields_.clear(); // delete all child widgets QObjectList objlist = queryList(); while (!objlist.isEmpty()) { delete objlist.takeFirst(); } QVBoxLayout* vert = new QVBoxLayout(this); if (!instructions_.isEmpty()) { QLabel* l = new QLabel(instructions_, this); l->setWordWrap(true); l->setTextInteractionFlags(Qt::TextSelectableByMouse|Qt::LinksAccessibleByMouse); connect(l,SIGNAL(linkActivated(const QString&)),SLOT(linkActivated(const QString&))); vert->addWidget(l); } QWidget *fields = new QWidget(this); vert->addWidget(fields); if ( f.count() ) { QGridLayout *grid = new QGridLayout(fields, 3, f.count(), 0, 3); int row = 0; XData::FieldList::ConstIterator it = f.begin(); for ( ; it != f.end(); ++it, ++row) { XDataField *f; switch ( (*it).type() ) { case XData::Field::Field_Boolean: f = new XDataField_Boolean(*it, grid, row, this); break; case XData::Field::Field_Fixed: f = new XDataField_Fixed(*it, grid, row, this); break; case XData::Field::Field_Hidden: f = new XDataField_Hidden(*it); break; case XData::Field::Field_JidSingle: f = new XDataField_JidSingle(*it, grid, row, this); break; case XData::Field::Field_ListMulti: f = new XDataField_ListMulti(*it, grid, row, this); break; case XData::Field::Field_ListSingle: f = new XDataField_ListSingle(*it, grid, row, this); break; case XData::Field::Field_TextMulti: f = new XDataField_TextMulti(*it, grid, row, this); break; case XData::Field::Field_JidMulti: f = new XDataField_JidMulti(*it, grid, row, this); break; case XData::Field::Field_TextPrivate: f = new XDataField_TextPrivate(*it, grid, row, this); break; default: f = new XDataField_TextSingle(*it, grid, row, this); } fields_.append(f); } } }
AmarokConfigDialog::AmarokConfigDialog( QWidget *parent, const char* name, KConfigSkeleton *config ) : KConfigDialog( parent, name, config ) , m_engineConfig( 0 ) , m_opt4( 0 ) { setWFlags( WDestructiveClose ); // IMPORTANT Don't simply change the page names, they are used as identifiers in other parts of the app. m_opt1 = new Options1( 0, "General" ); m_opt2 = new Options2( 0, "Appearance" ); m_opt4 = new Options4( 0, "Playback" ); Options5 *opt5 = new Options5( 0, "OSD" ); QVBox *opt6 = new QVBox; m_opt7 = new Options7( 0, "Collection" ); Options8 *opt8 = new Options8( 0, "Scrobbler" ); QVBox *opt9 = new QVBox; // Sound System opt6->setName( "Engine" ); opt6->setSpacing( KDialog::spacingHint() ); QWidget *groupBox, *aboutEngineButton; groupBox = new QGroupBox( 2, Qt::Horizontal, i18n("Sound System"), opt6 ); m_engineConfigFrame = new QGroupBox( 1, Qt::Horizontal, opt6 ); m_soundSystem = new QComboBox( false, groupBox ); aboutEngineButton = new QPushButton( i18n("About"), groupBox ); QToolTip::add( m_soundSystem, i18n("Click to select the sound system to use for playback.") ); QToolTip::add( aboutEngineButton, i18n("Click to get the plugin information.") ); /// Populate the engine selection combo box KTrader::OfferList offers = PluginManager::query( "[X-KDE-amaroK-plugintype] == 'engine'" ); KTrader::OfferList::ConstIterator end( offers.end() ); for( KTrader::OfferList::ConstIterator it = offers.begin(); it != end; ++it ) { // Don't list the <no engine> (void engine) entry if it's not currenty active, // cause there's no point in choosing this engine (it's a dummy, after all). if( (*it)->property( "X-KDE-amaroK-name" ).toString() == "void-engine" && AmarokConfig::soundSystem() != "void-engine" ) continue; m_soundSystem->insertItem( (*it)->name() ); // Save name properties in QMap for lookup m_pluginName[(*it)->name()] = (*it)->property( "X-KDE-amaroK-name" ).toString(); m_pluginAmarokName[(*it)->property( "X-KDE-amaroK-name" ).toString()] = (*it)->name(); } // Collection #if !defined(USE_MYSQL) && !defined(USE_POSTGRESQL) m_opt7->databaseBox->hide(); #endif #ifndef USE_MYSQL //FIXME we do this because this widget breaks the Apply button (always enabled). //It breaks because it is set to type="password" in the .kcfg file. Setting to //type="string" also fixes this bug, but means the password is stored in plain //text. This is a temporary fix so that the majority of users get a fixed Apply //button. delete m_opt7->dbSetupFrame->kcfg_MySqlPassword2; #endif m_opt7->collectionFoldersBox->setColumns( 1 ); new CollectionSetup( m_opt7->collectionFoldersBox ); //TODO this widget doesn't update the apply/ok buttons // Media Devices opt9->setName( "Media Devices" ); opt9->setSpacing( KDialog::spacingHint() ); QVBox *topbox = new QVBox( opt9 ); topbox->setSpacing( KDialog::spacingHint() ); QGroupBox *mediaBox = new QGroupBox( 2, Qt::Horizontal, i18n("Media Devices"), topbox ); mediaBox->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ); QVBox *vbox = new QVBox( mediaBox ); vbox->setSpacing( KDialog::spacingHint() ); m_deviceManager = new MediumPluginManager( vbox ); QHBox *hbox = new QHBox( topbox ); hbox->setSpacing( KDialog::spacingHint() ); hbox->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ); KPushButton *autodetect = new KPushButton( i18n( "Autodetect Devices" ), hbox ); autodetect->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); connect( autodetect, SIGNAL(clicked()), m_deviceManager, SLOT(redetectDevices()) ); KPushButton *add = new KPushButton( i18n( "Add Device..." ), hbox ); add->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); connect( add, SIGNAL(clicked()), m_deviceManager, SLOT(newDevice()) ); QFrame *frame = new QFrame( topbox ); frame->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); // add pages addPage( m_opt1, i18n( "General" ), "misc", i18n( "Configure General Options" ) ); addPage( m_opt2, i18n( "Appearance" ), "colors", i18n( "Configure amaroK's Appearance" ) ); addPage( m_opt4, i18n( "Playback" ), "kmix", i18n( "Configure Playback" ) ); addPage( opt5, i18n( "OSD" ), "tv", i18n( "Configure On-Screen-Display" ) ); addPage( opt6, i18n( "Engine" ), "amarok", i18n( "Configure Engine" ) ); addPage( m_opt7, i18n( "Collection" ), amaroK::icon( "collection" ), i18n( "Configure Collection" ) ); addPage( opt8, i18n( "last.fm" ), "audioscrobbler", i18n( "Configure last.fm Support" ) ); addPage( opt9, i18n( "Media Devices" ), amaroK::icon( "device" ), i18n( "Configure Portable Player Support" ) ); // Show information labels (must be done after insertions) QObjectList *list = queryList( "QLabel", "infoPixmap" ); for( QObject *label = list->first(); label; label = list->next() ) static_cast<QLabel*>(label)->setPixmap( QMessageBox::standardIcon( QMessageBox::Information ) ); delete list; //stop KFont Requesters getting stupidly large list = queryList( "QLabel", "m_sampleLabel" ); for( QObject *label = list->first(); label; label = list->next() ) static_cast<QLabel*>(label)->setMaximumWidth( 250 ); delete list; connect( m_deviceManager, SIGNAL(changed()), SLOT(updateButtons()) ); connect( m_soundSystem, SIGNAL(activated( int )), SLOT(updateButtons()) ); connect( aboutEngineButton, SIGNAL(clicked()), SLOT(aboutEngine()) ); connect( opt5, SIGNAL(settingsChanged()), SLOT(updateButtons()) ); //see options5.ui.h connect( m_opt2->styleComboBox, SIGNAL( activated( int ) ), SLOT( updateButtons() ) ); connect( m_opt7->dbSetupFrame->databaseEngine, SIGNAL( activated( int ) ), SLOT( updateButtons() ) ); connect( m_opt1->kComboBox_browser, SIGNAL( activated( int ) ), SLOT( updateButtons() ) ); connect( m_opt1->kLineEdit_customBrowser, SIGNAL( textChanged( const QString& ) ), SLOT( updateButtons() ) ); }
/** * Process OI Op Codes passed by controller */ void OpenInterface::handleOpCode(byte oc) { #ifdef DEBUG_SERIAL switch (oc) { case ('s'): oc = OC_SAFE; break; case ('d'): oc = OC_DIRECT_DRIVE; break; case ('g'): oc = OC_SENSORS; break; } #endif switch (oc) { case(OC_LOW_SIDE_DRIVERS): callCallbackWithOneByte(controlLsdOutputCallback); break; case(OC_LEDS): callCallbackWithThreeBytes(controlLedsCallback); break; case(OC_PWM_LOW_SIDE_DRIVERS): callCallbackWithThreeBytes(controlLsdPwmCallback); break; case(OC_DIGITAL_OUTPUTS): callCallbackWithOneByte(controlDigitalOutputCallback); break; case(OC_STREAM): stream(); break; case(OC_PAUSE_RESUME_STREAM): break; case(OC_SEND_IR): callCallbackWithOneByte(sendIrCallback); break; case(OC_SHOW_SCRIPT): showScript(); break; case(OC_WAIT_EVENT): callCallbackWithOneByte(waitEventCallback); break; case(OC_PLAY_SCRIPT): scriptPlay(); break; case(OC_SCRIPT): scriptSet(); break; case(OC_WAIT_ANGLE): if (waitAngleCallback) { waitAction(waitAngleCallback); } break; case(OC_WAIT_DISTANCE): if (waitDistanceCallback) { waitAction(waitDistanceCallback); } break; case(OC_WAIT_TIME): waitTime(); break; case(OC_DEMO): case(OC_SPOT): case(OC_COVER): case(OC_COVER_AND_DOCK): // These are all demo codes. Implement? break; case(OC_QUERY_LIST): queryList(); break; case (OC_START): sensor[OI_SENSOR_OI_MODE] = OI_MODE_PASSIVE; break; case (OC_BAUD): break; case (OC_CONTROL): case (OC_SAFE): sensor[OI_SENSOR_OI_MODE] = OI_MODE_SAFE; break; case (OC_SENSORS): getSensors(); break; case (OC_SONG): song(); break; case(OC_PLAY_SONG): songPlay(); break; case (OC_DIRECT_DRIVE): driveDirect(); break; case (OC_DRIVE): drive(); break; case (OC_FULL): sensor[OI_SENSOR_OI_MODE] = OI_MODE_FULL; break; } }