⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pickboardcfg.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	    break;	} // else fall through      default:	StringConfig::doMenu(i);    }    shift = 0;    lit0 = -1;}QString DictFilterConfig::text(int r, int i){    QStringList l = r ? sets_a : input.isEmpty() ? othermodes : matches;    return i < (int)l.count() ?	(input.isEmpty() ? l[i] : capitalize(l[i]))	: QString::null;}bool DictFilterConfig::spreadRow(int r){    return r ? TRUE : input.isEmpty() ? TRUE : FALSE;}QStringList DictFilterConfig::capitalize(const QStringList& l){    switch ( shift ) {      case 1: {	QStringList r;	QStringList::ConstIterator it = l.begin();	r.append((*it).upper());	for (++it; it != l.end(); ++it)	    r.append(*it);	return r;      } case 2: {	QStringList r;	for (QStringList::ConstIterator it = l.begin(); it != l.end(); ++it)	    r.append((*it).upper());	return r;      }    }    return l;}QString DictFilterConfig::capitalize(const QString& s){    switch ( shift ) {	case 1: {	    QString u = s;	    u[0] = u[0].upper();	    return u;	    break;	} case 2:	    return s.upper();	    break;    }    return s;}void DictFilterConfig::pick(bool press, int row, int item){    if ( row == 0 ) {	if ( press ) {	    if ( input.isEmpty() ) {		lit0 = item;		if ( othermodes[item] == PickboardPicks::tr("Space") ) {		    updateItem(row,item);		    generateText(" ");		} else if ( othermodes[item] == PickboardPicks::tr("Back") ) {		    updateItem(row,item);		    generateKey(Qt::Key_Backspace);		} else if ( othermodes[item] == PickboardPicks::tr("Enter") ) {		    updateItem(row,item);		    generateKey(Qt::Key_Return);		} else if ( othermodes[item] == PickboardPicks::tr("Shift") ) {		    updateItem(row,item);		    shift = (shift+1)%3;		}	    }	} else {	    if ( !input.isEmpty() ) {		input.clear();		if ( item>=0 ) {		    generateText(capitalize(matches[item]));		}		shift = 0;		matches.clear();		updateRows(0,0);	    } else if ( item < 3 ) {		lit0 = -1;		changeMode(item+1); // I'm mode 0! ####		updateRows(0,1);	    }	    if ( lit0 >= 0 ) {		if ( !shift || othermodes[lit0] != PickboardPicks::tr("Shift") ) {		    updateItem(0,lit0); 		    lit0 = -1;		}	    }	}    } else {	lit0 = -1;	if ( press && item >= 0 ) {	    lit1 = item;	    add(sets[item]);	    updateItem(1,item); 	    updateRows(0,0);	} else {	    updateItem(1,lit1); 	    lit1 = -1;	}    }}bool DictFilterConfig::scanMatch(const QString& set, const QChar& l) const{    return set == "?" || set == "*" || set.contains(l);}//static int visit=0;//static int lvisit=0;void DictFilterConfig::scan(const QDawg::Node* n, int ipos, const QString& str, int length, bool extend){    if ( n ) {	do {//visit++;	    bool pastend = ipos >= (int)input.count();	    if ( pastend && extend || !pastend && scanMatch(input[ipos],n->letter().lower()) ) {		if ( length>1 ) {		    if ( !pastend && input[ipos] == "*" ) {			scan(n->jump(),ipos+1,str+n->letter(),length-1,FALSE);			scan(n->jump(),ipos,str+n->letter(),length,FALSE);		    } else {			scan(n->jump(),ipos+1,str+n->letter(),length-1,extend);		    }		} else {		    if ( n->isWord() ) {			matches.append(str+n->letter());		    }		}	    }	    n = n->next();	} while (n);    }}void DictFilterConfig::scanLengths(const QDawg::Node* n, int ipos, int& length_bitarray){    if ( n ) {	do {//lvisit++;	    bool pastend = ipos >= (int)input.count();	    if ( pastend || scanMatch(input[ipos],n->letter().lower()) ) {		scanLengths(n->jump(),ipos+1,length_bitarray);		if ( n->isWord() )		    length_bitarray |= (1<<(ipos+1));	    }	    n = n->next();	} while (n);    }}void DictFilterConfig::add(const QString& set){    QFontMetrics fm = parent->fontMetrics();    input.append(set.lower());    matches.clear();//visit=0;//lvisit=0;    int length_bitarray = 0;    if ( input.count() > 4 ) {	scanLengths(Global::addedDawg().root(),0,length_bitarray);	scanLengths(Global::fixedDawg().root(),0,length_bitarray);    } else {	length_bitarray = 0xffffffff;    }    for (int len=input.count(); len<22 /* 32 */; ++len) {	if ( length_bitarray & (1<<len) ) {	    scan(Global::addedDawg().root(),0,"",len,TRUE);	    scan(Global::fixedDawg().root(),0,"",len,TRUE);	    int x = 2;	    for (QStringList::Iterator it=matches.begin(); it!=matches.end(); ++it) {		x += fm.width(*it)+intermatchmargin;		if ( x >= parent->width() ) {//qDebug("%d+%d visits",lvisit,visit);		    return; // RETURN - No point finding more		}	    }	}	if ( len == 1 && input.count() == 1 ) {	    // Allow all single-characters to show as "matches"	    for ( int i=0; i<(int)set.length(); i++ ) {		QChar ch = set[i].lower();		matches.append(ch);	    }	}    }//qDebug("%d+%d visits",lvisit,visit);}bool DictFilterConfig::highlight(int r,int c) const{    return r == 0 ? c == lit0 : c == lit1;}void DictFilterConfig::addSet(const QString& appearance, const QString& set){    sets_a.append(appearance);    sets.append(set);}void DictFilterConfig::addMode(const QString& s){    othermodes.append(s);}void DictFilterConfig::fillMenu(QPopupMenu& menu){    menu.insertItem(tr("Add..."),300);    StringConfig::fillMenu(menu);}QValueList<QPixmap> KeycodeConfig::row(int i){    return i ? keypm2 : keypm1;}void KeycodeConfig::pickInRow(int r, int xpos, bool press){    QValueList<QPixmap> pl = row(r);    QValueList<QPixmap>::Iterator it;    int item=0;    int x=xmarg;    for (it=pl.begin(); it!=pl.end(); ++it) {	int x2 = x + (*it).width();	if ( (*it).height() > 1 )	    x2 += xw;	if ( xpos >= x && xpos < x2 ) {	    pick(press, r, item);	    return;	}	x = x2;	item++;    }}void KeycodeConfig::pick(bool press, int row, int item){    if ( !press ) {	if ( item >= 0 ) {	    int k = row == 0 ? keys1[item] : keys2[item];	    if ( k )		generateKey(k);	}	changeMode(0);	updateRows(0,1);    }}void KeycodeConfig::draw(QPainter* p){    int y=3;    QValueList<QPixmap>::Iterator it;    for (int r=0; r<nrows; r++) {	QValueList<QPixmap> pl = row(r);	int x = xmarg;	for (it=pl.begin(); it!=pl.end(); ++it) {	    if ( (*it).height() == 1 ) {		// just a gap		x += (*it).width();	    } else {		p->drawPixmap(x,y,*it);		x += (*it).width()+xw;	    }	}	y += parent->height()/nrows;    }}void KeycodeConfig::addKey(int r, const QPixmap& pm, int code){    if ( r == 0 ) {	keypm1.append(pm);	keys1.append(code);    } else {	keypm2.append(pm);	keys2.append(code);    }}void KeycodeConfig::addGap(int r, int w){    QBitmap pm(w,1); // ick.    addKey(r,pm,0);}QString CharConfig::text(int r, int i){    QStringList l = r ? chars2 : chars1;    return i < (int)l.count() ? l[i] : QString::null;}bool CharConfig::spreadRow(int){    return TRUE;}void CharConfig::pick(bool press, int row, int item){    if ( !press ) {	if ( item >= 0 ) {	    generateText(row == 0 ? chars1[item] : chars2[item]);	}	changeMode(0);	updateRows(0,1);    }}void CharConfig::addChar(int r, const QString& s){    if ( r ) chars2.append(s); else chars1.append(s);}QString CharStringConfig::text(int r, int i){    QStringList l = r ? chars : QStringList(input);    return i < (int)l.count() ? l[i] : QString::null;}bool CharStringConfig::spreadRow(int i){    return i ? TRUE : FALSE;}void CharStringConfig::pick(bool press, int row, int item){    if ( row == 0 ) {	if ( !press ) {	    if ( item>=0 ) {		generateText(input);	    }	    input = "";	    changeMode(0);	    updateRows(0,1);	}    } else {	if ( press && item >= 0 ) {	    input.append(chars[item]);	    updateRows(0,0);	}    }}void CharStringConfig::addChar(const QString& s){    chars.append(s);}void CharStringConfig::doMenu(int i){    if ( i == 100 ) {	input = "";	updateRows(0,0);    }    StringConfig::doMenu(i);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -