//---------------------------------------------------------------------------------------------------- void InitMainMenu(void) { InitOsdFrame(); // Set 2bit sub menu select flag,color & Attrib OSDClear(5, 12, 2, 2, 0xFA, BYTE_ATTRIB); OSDClear(5, 12, 2, 2, 0x37, BYTE_COLOR); // Draw ----------- ·Ö¸ô -------------- OSDLine(ROW(3), COL(1), LENGTH(23), 0x5c, BYTE_DISPLAY); // Set Menu Title color OSDLine(ROW(4), COL(0), LENGTH(31), 0x40, BYTE_COLOR); // Draw Main Window COsdFxDrawWindow(8,0, //WORD usXStart,WORD usYStart, _MAINMENU_WIDTH * 12 + 8,_MAINMENU_HEIGHT * 18, //WORD usXEnd,WORD usYEnd, tMainWindowStyle); //BYTE *pStyle) // Draw Adjust Window COsdFxDrawWindow(28, 306, //WORD usXStart,WORD usYStart, 288, 372, //WORD usXEnd,WORD usYEnd, tAdjustWindowStyle); //BYTE *pStyle) ShowMode(); }
// main program for transmitter controlled setup void DoProgMode(void) { uns8 i; int size1 *p; ALL_LEDS_OFF; InitArrays(); LedBlue_ON; // signal prog mode set #1 if( IK5 > _Neutral ) LedRed_ON; // set #2 Delaysec(50); // time to put throttle back to neutral p = &FirstProgReg; for(i = 1; p<=&LastProgReg; i++) { ShowMode(i, p); p++; } ALL_LEDS_OFF; // signal prog mode: 5 seconds blue flashing for(i=0; i<50; i++) { Delaysec(1); // time 1/10 sec LedBlue_TOG; // toggle LED if( IK5 > _Neutral ) LedRed_TOG; // set #2 } if( IGas > _ThresStart ) { ALL_LEDS_ON; // = white color Delaysec(10); // prog values into data flash EEPGD = 0; // access data eeprom WREN = 1; // enable eeprom writes EEADR = _EESet1; // start with address 0 if( IK5 > _Neutral ) EEADR = _EESet2; // set #2 for(p = &FirstProgReg; p <= &LastProgReg; p++) { EEDATA = *p; // the data byte GIE = 0; EECON2 = 0x55; // fix prog sequence (see 16F628A datasheet) EECON2 = 0xAA; WR = 1; // start write cycle GIE = 1; while( WR == 1 ); // wait to complete EEADR++; } WREN = 0; // disable eeprom writes } ALL_LEDS_OFF; }
/** * RegLineEdit */ RegLineEdit::RegLineEdit(QWidget *parent) :QWidget(parent) { m_layout = new QHBoxLayout(this); m_button = new QToolButton(this); m_button->setCursor(Qt::ArrowCursor); m_button->setStyleSheet("QToolButton { font-weight: bold; color: white; background: black; }"); m_button->setPopupMode(QToolButton::InstantPopup); m_edit = new QLineEdit(this); m_layout->addWidget(m_button); m_layout->addWidget(m_edit); m_menu = new QMenu(this); connect(m_menu->addAction("Write"), SIGNAL(triggered()), this, SLOT(OnWriteAct())); connect(m_menu->addAction("Set"), SIGNAL(triggered()), this, SLOT(OnSetAct())); connect(m_menu->addAction("Clear"), SIGNAL(triggered()), this, SLOT(OnClearAct())); connect(m_menu->addAction("Toggle"), SIGNAL(triggered()), this, SLOT(OnToggleAct())); EnableSCT(false); SetReadOnly(false); ShowMode(true); SetMode(Write); }
void RegLineEdit::SetReadOnly(bool ro) { m_edit->setReadOnly(ro); m_readonly = ro; ShowMode(!ro); }
//菜单滚动,返回新的序号值 // 旋转编码器中断时调用该函数 // snMGSeq: 当前菜单组的序号(gMG数组下标) // nInc: 当前增量———— 左旋=-1,右旋=1,不动(下级菜单返回时)=0 short MenuScroll(short snMGSeq,int nInc) { int nOLine,nCur,nFirst; char Temp[2]; unsigned char Index; TMenu *pMenu; unsigned char MenuLang; ByteDataGet(VAL_MENU_LANG,&MenuLang); if(gMG[snMGSeq].Type == ST_TMN_SEL) { Index = gMG[snMGSeq].Count; pMenu = gMG[Index].FirstItem + gMG[Index].Position; if(pMenu->fpMenuDo!=NULL) { pMenu->fpMenuDo(nInc); } } if(gMG[snMGSeq].Type == ST_MODE) { gMG[snMGSeq].Position += nInc; if(gMG[snMGSeq].Position > gMG[snMGSeq].ss.mm.Max) gMG[snMGSeq].Position = gMG[snMGSeq].ss.mm.Max; else if(gMG[snMGSeq].Position < gMG[snMGSeq].ss.mm.Min) gMG[snMGSeq].Position = gMG[snMGSeq].ss.mm.Min; // Index = gMG[snMGSeq].Count; // pMenu = gMG[Index].FirstItem + gMG[Index].Position; // if(pMenu->fpMenuDo!=NULL) // { // pMenu->fpMenuDo(gMG[snMGSeq].Position); // } ShowMode(gMG[snMGSeq].Position); // DisplayOneState(0,gMG[snMGSeq].Position); } else if(gMG[snMGSeq].Type == ST_VALUE) //显示值 { gMG[snMGSeq].Position += nInc; if(gMG[snMGSeq].Position > gMG[snMGSeq].ss.mm.Max) gMG[snMGSeq].Position = gMG[snMGSeq].ss.mm.Max; else if(gMG[snMGSeq].Position < gMG[snMGSeq].ss.mm.Min) gMG[snMGSeq].Position = gMG[snMGSeq].ss.mm.Min; Index = gMG[snMGSeq].Count; pMenu = gMG[Index].FirstItem + gMG[Index].Position; if(pMenu->fpMenuDo!=NULL) { pMenu->fpMenuDo(gMG[snMGSeq].Position); } DisplayVal(snMGSeq, gMG[snMGSeq].ss.mm.Max-gMG[snMGSeq].ss.mm.Min+1,gMG[snMGSeq].Position,SB_HORZ); } else if(gMG[snMGSeq].Type == ST_CMN) //显示菜单内容 { nOLine = gMG[snMGSeq].Position; gMG[snMGSeq].Position = (nOLine+gMG[snMGSeq].Count+nInc)% gMG[snMGSeq].Count; if((nOLine / MI_LINES)!=(gMG[snMGSeq].Position / MI_LINES) //不同屏 ||(nOLine == gMG[snMGSeq].Position)) //从下级返回 { //整屏刷新 nFirst = (gMG[snMGSeq].Position / MI_LINES)*MI_LINES; for(nCur = 0; nCur < MI_LINES; nCur++) { if(nFirst+nCur >= gMG[snMGSeq].Count) DisplayMItem(gMG+snMGSeq,nCur,nFirst+nCur,MD_NULL); //显示空行 else { if(nFirst+nCur == gMG[snMGSeq].Position) DisplayMItem(gMG+snMGSeq,nCur,nFirst+nCur,MD_REVERSE); //反显(当前行) else DisplayMItem(gMG+snMGSeq,nCur,nFirst+nCur,MD_NORMAL); //正常显示 } } } else //只刷新相关的两行 { DisplayMItem(gMG+snMGSeq,nOLine%MI_LINES,nOLine,MD_NORMAL); DisplayMItem(gMG+snMGSeq,gMG[snMGSeq].Position%MI_LINES,gMG[snMGSeq].Position,MD_REVERSE); } DisplaySBar(gMG[snMGSeq].Count,gMG[snMGSeq].Position,SB_VERT); } else if(gMG[snMGSeq].Type == ST_LR) //左右 { if(nInc==-1) { memcpy(Temp,"←",2); } else { memcpy(Temp,"→",2); } if(ENGLISH==MenuLang) { send_hz16x16(90,16,(unsigned char *)&Temp, 2, 0); update_disp_data(90,16,114,31); } else { send_hz16x16(52,32,(unsigned char *)&Temp, 2, 0); update_disp_data(52,32,67,47); } Index = gMG[snMGSeq].Count; pMenu = gMG[Index].FirstItem + gMG[Index].Position; if(pMenu->fpMenuDo!=NULL) { pMenu->fpMenuDo((nInc==-1)?0:1); } } else if(gMG[snMGSeq].Type == ST_UD) //上下 { if(nInc==-1) { memcpy(Temp,"↑",2); } else { memcpy(Temp,"↓",2); } if(ENGLISH==MenuLang) { send_hz16x16(90,16,(unsigned char *)&Temp, 2, 0); update_disp_data(90,16,114,31); } else { send_hz16x16(52,32,(unsigned char *)&Temp, 2, 0); update_disp_data(52,32,67,47); } Index = gMG[snMGSeq].Count; pMenu = gMG[Index].FirstItem + gMG[Index].Position; if(pMenu->fpMenuDo!=NULL) { pMenu->fpMenuDo((nInc==-1)?0:1); } } else { } return gMG[snMGSeq].Position; }