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

📄 kkeydialog.cpp

📁 PIXIL is a small footprint operating environment, complete with PDA PIM applications, a browser and
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{	//debug("KKeyChooser::readStdKeys()");		stdDict->clear();			// Insert all standard keys into globalDict	int *keyCode;	KConfig pConfig;	KEntryIterator *sIt = pConfig.entryIterator( i18n("Keys") );	if (sIt){	  sIt->toFirst();	  while ( sIt->current() ) {	    keyCode = new int;	    *keyCode = stringToKey( sIt->current()->aValue );	    stdDict->insert( sIt->currentKey(), keyCode);	    ++(*sIt);	  }	}		// Only insert std keys which don't appear in the dictionary to be configured	aIt->toFirst();	while ( aIt->current() ) {		if ( stdDict->find( aIt->currentKey() ) ) {		  stdDict->remove( aIt->currentKey());		}		++ ( *aIt );	}	}void KKeyChooser::toChange( int index ){	bKeyIntercept = FALSE;		/* get the entry */	aIt->toFirst();	(*aIt) += wList->getId(index);	sEntryKey = aIt->currentKey();	pEntry = aIt->current();		//eKey->setEnabled( FALSE );		/* Is the key configurable or has the user turned it off ? */	if ( !pEntry->bConfigurable || kbMode == NoKey ) {		lInfo->setEnabled( FALSE );		cShift->setEnabled( FALSE ); cCtrl->setEnabled( FALSE ); cAlt->setEnabled( FALSE );		bChange->setEnabled( FALSE );  //bDefault->setEnabled( FALSE );		lNotConfig->setEnabled( TRUE );				uint kCode = pEntry->aConfigKeyCode;		uint kSCode = kCode & ~(SHIFT | CTRL | ALT);				if ( kSCode == Key_Shift ) cShift->setChecked(FALSE);		else cShift->setChecked( kCode & SHIFT );		if ( kSCode == Key_Control ) cCtrl->setChecked(FALSE);		else cCtrl->setChecked( kCode & CTRL );		if ( kSCode == Key_Alt ) cAlt->setChecked(FALSE);		else cAlt->setChecked( kCode & ALT );				QString str = keyToString( kSCode );		bChange->setText(str);			} else {		lNotConfig->setEnabled( FALSE );		lInfo->setText(""); lInfo->setEnabled( TRUE );				uint kCode = pEntry->aConfigKeyCode;		uint kSCode = kCode & ~(SHIFT | CTRL | ALT);				//cShift->setEnabled( TRUE ); cCtrl->setEnabled( TRUE ); cAlt->setEnabled( TRUE );		if ( kSCode == Key_Shift ) cShift->setChecked(FALSE);		else cShift->setChecked( kCode & SHIFT );		if ( kSCode == Key_Control ) cCtrl->setChecked(FALSE);		else cCtrl->setChecked( kCode & CTRL );		if ( kSCode == Key_Alt ) cAlt->setChecked(FALSE);		else cAlt->setChecked( kCode & ALT );				QString str = keyToString( kSCode );		bChange->setText(str); //eKey->setText(str);		//bChange->setEnabled( TRUE ); //bDefault->setEnabled( TRUE );				if ( isKeyPresent() ) {			lInfo->setText(i18n("Attention : key already used") );		}				if ( kbMode == DefaultKey ) {			cAlt->setEnabled( false );			cShift->setEnabled( false );			cCtrl->setEnabled( false );			bChange->setEnabled( false );		} else {			cAlt->setEnabled( true );			cShift->setEnabled( true );			cCtrl->setEnabled( true );			bChange->setEnabled( true );		}	}			((QRadioButton *)kbGroup->find(NoKey))->setChecked( kbMode == NoKey );	((QRadioButton *)kbGroup->find(DefaultKey))->setChecked( kbMode == DefaultKey );	((QRadioButton *)kbGroup->find(CustomKey))->setChecked( kbMode == CustomKey );		if ( !pEntry->bConfigurable ) {		cAlt->setEnabled( false );		cShift->setEnabled( false );		cCtrl->setEnabled( false );		bChange->setEnabled( false );		((QRadioButton *)kbGroup->find(NoKey))->setEnabled( false );		((QRadioButton *)kbGroup->find(DefaultKey))->setEnabled( false );		((QRadioButton *)kbGroup->find(CustomKey))->setEnabled( false );	} else {		((QRadioButton *)kbGroup->find(NoKey))->setEnabled( true );		((QRadioButton *)kbGroup->find(DefaultKey))->setEnabled( pEntry->aDefaultKeyCode != 0);		((QRadioButton *)kbGroup->find(CustomKey))->setEnabled( true );	}	}void KKeyChooser::fontChange( const QFont & ){	actLabel->setFixedHeight( actLabel->sizeHint().height() );	keyLabel->setFixedHeight( keyLabel->sizeHint().height() );	cAlt->setFixedHeight( bChange->sizeHint().height() );	cShift->setFixedHeight( bChange->sizeHint().height() );	cCtrl->setFixedHeight( bChange->sizeHint().height() );		fCArea->setMinimumHeight( 4*bChange->sizeHint().height() );		int widget_width = 0;		setMinimumWidth( 20+5*(widget_width+10) );}void KKeyChooser::keyMode( int m ){	kbMode = m;	switch( kbMode ) {		case NoKey:			noKey();			break;		case DefaultKey:			defaultKey();			break;		case CustomKey: default:			toChange( wList->currentItem() );			break;	}}void KKeyChooser::noKey(){  if (!pEntry)    return;	pEntry->aConfigKeyCode = 0;		/* update the list and the change area */		KSplitListItem *sli = new KSplitListItem(		 item(pEntry->aConfigKeyCode, pEntry->descr),		 wList->getId(wList->currentItem() )	);			//connect( wList, SIGNAL( newWidth( int ) ),	//		 	sli, SLOT( setWidth( int ) ) );					sli->setWidth( wList->width() );		if ( bChange->editing == TRUE ) bChange->setEdit(FALSE);	wList->changeItem( sli, wList->currentItem()  );	toChange(wList->currentItem());	emit keyChange();}void KKeyChooser::defaultKey(){  if (!pEntry)    return;	/* change the configKeyCode */	pEntry->aConfigKeyCode = pEntry->aDefaultKeyCode;		/* update the list and the change area */		KSplitListItem *sli = new KSplitListItem(		 item(pEntry->aConfigKeyCode, pEntry->descr),		 wList->getId(wList->currentItem())	);			//connect( wList, SIGNAL( newWidth( int ) ),	//		 	sli, SLOT( setWidth( int ) ) );					sli->setWidth( wList->width() );	if ( bChange->editing == TRUE ) bChange->setEdit(FALSE);	wList->changeItem( sli, wList->currentItem()  );	toChange(wList->currentItem());	emit keyChange();}void KKeyChooser::allDefault(){	// Change all configKeyCodes to default values		//int idx = wList->currentItem();	disconnect( wList, SIGNAL( highlighted( int ) ),		this, SLOT( updateAction( int ) ) );	wList->setAutoUpdate(FALSE);	wList->clear();		aIt->toFirst();	int id = 0;	while ( aIt->current() ) {		if ( aIt->current()->bConfigurable )			aIt->current()->aConfigKeyCode = aIt->current()->aDefaultKeyCode;				KSplitListItem *sli = new KSplitListItem(		 	item(aIt->current()->aConfigKeyCode, aIt->current()->descr),			id);		connect( wList, SIGNAL( newWidth( int ) ),				 sli, SLOT( setWidth( int ) ) );						sli->setWidth( wList->width() );				wList->inSort( sli );				++(*aIt);		++id;	}		connect( wList, SIGNAL( highlighted( int ) ), SLOT( updateAction( int ) ) );	wList->setAutoUpdate( true );	wList->update();	wList->setCurrentItem( 0 );	emit keyChange();}void KKeyChooser::listSync(){	disconnect( wList, SIGNAL( highlighted( int ) ),		this, SLOT( updateAction( int ) ) );	wList->setAutoUpdate(FALSE);	wList->clear();		aIt->toFirst();	int id = 0;	while ( aIt->current() ) {				KSplitListItem *sli = new KSplitListItem(		 	item(aIt->current()->aCurrentKeyCode, aIt->current()->descr),			id);		connect( wList, SIGNAL( newWidth( int ) ),				 sli, SLOT( setWidth( int ) ) );						sli->setWidth( wList->width() );				wList->inSort( sli );				++(*aIt);		++id;	}		connect( wList, SIGNAL( highlighted( int ) ), SLOT( updateAction( int ) ) );	wList->setAutoUpdate( true );	wList->update();	wList->setCurrentItem( 0 );}#define MAX_FCTN_LENGTH 50const QString KKeyChooser::item( uint keyCode, const QString& entryKey ){	QString str = entryKey;	str = str.leftJustify(MAX_FCTN_LENGTH, ' ', TRUE);	str += " : ";	str += keyToString(keyCode, true);	str = str.leftJustify( MAX_FCTN_LENGTH + 3 +						   MAX_KEY_LENGTH+MAX_KEY_MODIFIER_LENGTH, ' ', TRUE );	return str;}void KKeyChooser::shiftClicked(){  if (!pEntry)    return;	uint kSCode = pEntry->aConfigKeyCode & ~(SHIFT | CTRL | ALT);	if ( kSCode != Key_Shift ) {		if ( cShift->isOn() )			pEntry->aConfigKeyCode |= SHIFT;		else			pEntry->aConfigKeyCode &= ~SHIFT;					KSplitListItem *sli = new KSplitListItem(		 	item(pEntry->aConfigKeyCode, pEntry->descr),			wList->getId(wList->currentItem() )		);				connect( wList, SIGNAL( newWidth( int ) ),				 sli, SLOT( setWidth( int ) ) );											sli->setWidth( wList->width() );				wList->changeItem( sli, wList->currentItem() );	}	toChange(wList->currentItem());	emit keyChange();}void KKeyChooser::ctrlClicked(){  if (!pEntry)    return;	uint kSCode = pEntry->aConfigKeyCode & ~(SHIFT | CTRL | ALT);	if ( kSCode != Key_Control ) {		if ( cCtrl->isOn() )			pEntry->aConfigKeyCode |= CTRL;		else			pEntry->aConfigKeyCode &= ~CTRL;					KSplitListItem *sli = new KSplitListItem(		 	item(pEntry->aConfigKeyCode, pEntry->descr),			wList->getId(wList->currentItem() )		);				connect( wList, SIGNAL( newWidth( int ) ),				 sli, SLOT( setWidth( int ) ) );											sli->setWidth( wList->width() );				wList->changeItem( sli, wList->currentItem() );	}	toChange(wList->currentItem());	emit keyChange();}void KKeyChooser::altClicked(){  if (!pEntry)    return;	uint kSCode = pEntry->aConfigKeyCode & ~(SHIFT | CTRL | ALT);	if ( kSCode != Key_Alt ) {		if ( cAlt->isOn() )			pEntry->aConfigKeyCode |= ALT;		else			pEntry->aConfigKeyCode &= ~ALT;					KSplitListItem *sli = new KSplitListItem(		 	item(pEntry->aConfigKeyCode, pEntry->descr),			wList->getId(wList->currentItem() )		);				connect( wList, SIGNAL( newWidth( int ) ),				 sli, SLOT( setWidth( int ) ) );											sli->setWidth( wList->width() );					wList->changeItem( sli, wList->currentItem() );	}	toChange(wList->currentItem());	emit keyChange();}void KKeyChooser::changeKey(){	bChange->setEdit( TRUE );	lInfo->setText( i18n("Press the wanted key") );	lInfo->setEnabled( TRUE );	/* give the focus to the widget */		//eKey->setGeometry(bChange->x()+6, bChange->y()+4, bChange->width()-12,		//bChange->height()-8);	//eKey->show();	//eKey->setEnabled(TRUE);	setFocus();	bKeyIntercept = TRUE;}void KKeyChooser::keyPressEvent( QKeyEvent *e ){	/* the keys are processed if the change button was pressed */	if ( !bKeyIntercept )		return;		uint kCode = e->key() & ~(SHIFT | CTRL | ALT);	/* check the given key :	   if it is a non existent key (=0) : keep the old value and say	   what happened. */	if ( keyToString(kCode).isNull() ) {		lInfo->setText( i18n("Undefined key") );		return;	}		bKeyIntercept = FALSE;	//eKey->hide();	//eKey->setEnabled(FALSE);	bChange->setEdit(FALSE);	bChange->setFocus();	setKey(kCode);}void KKeyChooser::setKey( uint kCode){  if (!pEntry)    return;	// uint kOldCode = pEntry->aConfigKeyCode;		/* add the current modifier to the key */	if ( kCode!=Key_Shift ) kCode |= (pEntry->aConfigKeyCode & SHIFT);	if ( kCode!=Key_Control ) kCode |= (pEntry->aConfigKeyCode & CTRL);	if ( kCode!=Key_Alt ) kCode |= (pEntry->aConfigKeyCode & ALT);		/* set the list and the change button */	pEntry->aConfigKeyCode = kCode;		if ( isKeyPresent() ) {		lInfo->setText( i18n("Attention : key already used") );		return;	}		KSplitListItem *sli = new KSplitListItem(	 	item(pEntry->aConfigKeyCode, pEntry->descr),		wList->getId(wList->currentItem() )	);			connect( wList, SIGNAL( newWidth( int ) ),			 sli, SLOT( setWidth( int ) ) );									sli->setWidth( wList->width() );		wList->changeItem( sli, wList->currentItem() );	toChange(wList->currentItem());	emit keyChange();}void KKeyChooser::editKey(){	bChange->setEnabled( FALSE ); //eKey->setEnabled( TRUE );	lInfo->setText( i18n("Return to end edition") );}void KKeyChooser::editEnd(){	debug("Called editEnd() which relies on eKey widget");		//uint kCode = stringToKey(eKey->text());	uint kCode = 0;	if ( kCode==0 || (kCode & (SHIFT | CTRL | ALT)) ) {		lInfo->setText( i18n("Incorrect key") );		return;	}	setKey(kCode);}bool KKeyChooser::isKeyPresent(){  if (!pEntry->aConfigKeyCode)    return false;	// Search the global key codes to find if this keyCode is already used	//  elsewhere		QDictIterator<int> gIt( *globalDict );		gIt.toFirst();	while ( gIt.current() ) {		//debug("current %s:%d code %d", gIt.currentKey(), *gIt.current(), pEntry->aConfigKeyCode);		if ( (unsigned int)(*gIt.current()) == pEntry->aConfigKeyCode && *gIt.current() != 0 ) {			QString actionName( gIt.currentKey() );			actionName.stripWhiteSpace();			QString keyName = keyToString( *gIt.current() );						QString str;			str.sprintf( i18n(				"The %s key combination has already been allocated\nto the global %s action.\n\nPlease choose a unique key combination."),				keyName.data(),				actionName.data() );							QMessageBox::warning( this, i18n("Global key conflict"), str.data() );						return TRUE;		}		++gIt;	}		// Search the std key codes to find if this keyCode is already used	//  elsewhere		QDictIterator<int> sIt( *stdDict );	sIt.toFirst();	while ( sIt.current() ) {		//debug("current %s:%d code %d", sIt.currentKey(), *sIt.current(), pEntry->aConfigKeyCode);		if ( (unsigned int)(*sIt.current()) == pEntry->aConfigKeyCode && *sIt.current() != 0 ) {			QString actionName( sIt.currentKey() );			actionName.stripWhiteSpace();			QString keyName = keyToString( *sIt.current() );						QString str;			str.sprintf( i18n(				"The %s key combination has already been allocated\nto the standard %s action.\n\nPlease choose a unique key combination."),				keyName.data(),				actionName.data() );							QMessageBox::warning( this, i18n("Standard key conflict"), str.data() );						return TRUE;		}		++sIt;	}	// Search the aConfigKeyCodes to find if this keyCode is already used	// elsewhere	aIt->toFirst();	while ( aIt->current() ) {		if ( aIt->current() != pEntry				&& aIt->current()->aConfigKeyCode == pEntry->aConfigKeyCode ) {			QString actionName( aIt->currentKey() );			actionName.stripWhiteSpace();			QString keyName = keyToString( aIt->current()->aConfigKeyCode );						QString str;			str.sprintf( i18n(				"The %s key combination has already been allocated\nto the %s action.\n\nPlease choose a unique key combination."),				keyName.data(),				actionName.data() );							QMessageBox::warning( this, i18n("Key conflict"), str.data() );						return TRUE;		}		++(*aIt);	}		//	emit keyChange();		return FALSE;}#include "kkeydialog.moc"

⌨️ 快捷键说明

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