示例#1
0
// User selects move based off of available cards
// Regame.turns damage of chosen move
 int pickMove(GlobalState* globalData) {
	int card = selectCard(globalData);
	printAttackMenu(globalData, card);
	globalData->keyStatus = 1;
	// Checks keypad input and outputs a message to user if incorrect
	while(0 != globalData->keyStatus) {
		// Keypad input is not valid
		if((10 > globalData->keypress) || (globalData->keypress > 12)) {
			globalData->keyStatus = 1;
			printAttackMenu(globalData, card);
		// Selected attack does nothing
		} else if (0 == globalData->selectMove[card][(globalData->keypress)-10]) {
			globalData->keyStatus = 2;
			printAttackMenu(globalData, card);
		// Input is valid and passes all checks
		} else {
			globalData->keyStatus = 0;
		}
	}
	
	// Thing to consider: User pressing a key multiple times???
	// Regame.turn the amount of damage the move makes
	switch(globalData->keyPress) {
		case 0x0A:
			return globalData->selectMove[card][0]; 
			break;
		case 0x0B:
			return globalData->selectMove[card][1];
			break;
		case 0xC:
			return globalData->selectMove[card][2];
			break;
	}
}
示例#2
0
void Dashboard::selectAll(){
    if(view_as_skill){
        unselectAll();

        foreach(CardItem *card_item, card_items){
            selectCard(".", true);
            pendings << card_item;
        }
        updatePending();
    }
示例#3
0
void pickMove(GlobalState* globalData) {
    static int displaymove = 0;
    if (game.monSel == 0) {
        selectCard(globalData);
    } else {
        if (displaymove == 0) {
            printAttackMenu(globalData, game.myMonster);
            prints(8, 5, WHITE, BLUE, "Please select an attack: ", 1);
            displaymove = 1;
        } else {
            if (((0x0A > globalData->keyPress) || (globalData->keyPress > 0x0C))) {
                globalData->keyStatus = 1;
                prints(8, 5, WHITE, BLUE, "                                                            ", 1);
                prints(8, 5, WHITE, BLUE, "Invalid attack input. Please select from the options below: ", 1);
            } else {
                displaymove = 0;
                globalData->keyStatus = 0;
                switch (globalData->keyPress) {
                    case 0x0A:
                        game.myMove = &game.myMonster->movelist[0];
                        break;
                    case 0x0B:
                        game.myMove = &game.myMonster->movelist[1];
                        break;
                    case 0xC:
                        game.myMove = &game.myMonster->movelist[2];
                        break;
                }
                game.monSel = 0;
                game.moveSel = 1;
                game.myMove->uses--;
                printGame(globalData);
            }
        }
    }
}
示例#4
0
MainWindow::MainWindow( QWidget *parent )
:	QWidget( parent )
,	cardsGroup( new QActionGroup( this ) )
,	quitOnClose( false )
{
	setWindowFlags( Qt::Window|Qt::CustomizeWindowHint|Qt::WindowMinimizeButtonHint|Qt::WindowCloseButtonHint );
	setAttribute( Qt::WA_DeleteOnClose, true );
	setupUi( this );

	cards->hide();
	cards->hack();
	languages->hack();

	Settings s;
	// Mobile
	infoMobileCode->setValidator( new IKValidator( infoMobileCode ) );
	infoMobileCode->setText( s.value( "Client/MobileCode" ).toString() );
	infoMobileCell->setText( s.value( "Client/MobileNumber", "+372" ).toString() );
	connect( infoMobileCode, SIGNAL(textEdited(QString)), SLOT(enableSign()) );
	connect( infoMobileCell, SIGNAL(textEdited(QString)), SLOT(enableSign()) );
	connect( infoSignMobile, SIGNAL(toggled(bool)), SLOT(showCardStatus()) );

	// Buttons
	QButtonGroup *buttonGroup = new QButtonGroup( this );

	buttonGroup->addButton( settings, HeadSettings );
	buttonGroup->addButton( help, HeadHelp );
	buttonGroup->addButton( about, HeadAbout );

	buttonGroup->addButton( homeSign, HomeSign );
	buttonGroup->addButton( homeView, HomeView );
	buttonGroup->addButton( homeCrypt, HomeCrypt );

	introNext = introButtons->addButton( tr( "Next" ), QDialogButtonBox::ActionRole );
	buttonGroup->addButton( introNext, IntroNext );
	buttonGroup->addButton( introButtons->button( QDialogButtonBox::Cancel ), IntroBack );

	signButton = signButtons->addButton( tr("Sign"), QDialogButtonBox::AcceptRole );
	buttonGroup->addButton( signButton, SignSign );
	buttonGroup->addButton( signButtons->button( QDialogButtonBox::Cancel ), SignCancel );

	viewAddSignature = viewButtons->addButton( tr("Add signature"), QDialogButtonBox::ActionRole );
	buttonGroup->addButton( viewAddSignature, ViewAddSignature );
	buttonGroup->addButton( viewButtons->button( QDialogButtonBox::Close ), ViewClose );
	connect( buttonGroup, SIGNAL(buttonClicked(int)),
		SLOT(buttonClicked(int)) );

	connect( infoCard, SIGNAL(linkActivated(QString)), SLOT(parseLink(QString)) );
	connect( cards, SIGNAL(activated(QString)), qApp->signer(), SLOT(selectCard(QString)), Qt::QueuedConnection );
	connect( qApp->signer(), SIGNAL(dataChanged()), SLOT(showCardStatus()) );

	// Digidoc
	doc = new DigiDoc( this );

	// Translations
	lang << "et" << "en" << "ru";
	retranslate();
	QActionGroup *langGroup = new QActionGroup( this );
	for( int i = 0; i < lang.size(); ++i )
	{
		QAction *a = langGroup->addAction( new QAction( langGroup ) );
		a->setData( lang[i] );
		a->setShortcut( Qt::CTRL + Qt::SHIFT + Qt::Key_0 + i );
	}
	addActions( langGroup->actions() );
	connect( langGroup, SIGNAL(triggered(QAction*)), SLOT(changeLang(QAction*)) );
	connect( cardsGroup, SIGNAL(triggered(QAction*)), SLOT(changeCard(QAction*)) );

	// Views
	signContentView->setColumnHidden( 2, true );
	viewContentView->setColumnHidden( 3, true );
	connect( signContentView, SIGNAL(remove(unsigned int)),
		SLOT(removeDocument(unsigned int)) );
	connect( viewContentView, SIGNAL(remove(unsigned int)),
		SLOT(removeDocument(unsigned int)) );
}
示例#5
0
//====================================
// getHeads
//------------------------------------
int SaXManipulateCard::getHeads ( void ) {
	// .../
	//! returns the number of configurable VGA heads This value may
	//! differ from the getCards() return value because there are
	//! possibly more than one head available on one card
	// ----
	if (! mImport) {
		return -1;
	}
	int mBoards  = getCards();
	int mDevices = mImport -> getCount();
	//====================================
	// check for NoteBooks, assume *2
	//------------------------------------
	if ( isNoteBook() ) {
		return mBoards * 2;
	}
	//====================================
	// get sysp card name
	//------------------------------------
	SaXImportSysp* pCard = new SaXImportSysp (SYSP_CARD);
	pCard -> doImport();
	QString mCardName;
	QTextOStream (&mCardName) <<
		pCard->getItem("Vendor") << ":" << pCard->getItem("Device");
	//====================================
	// import CDB DB for profile names
	//------------------------------------
	SaXProcess* pCDB = new SaXProcess();
	pCDB -> start ( CDB_CARDS );
	QDict< QDict<QString> > CDBData = pCDB -> getTablePointerCDB();
	//====================================
	// check profile names
	//------------------------------------
	int headCount = 0;
	int realCount = 0;
	int currentCard = mCard;
	while (1) {
		if (realCount >= mDevices) {
			selectCard (currentCard);
			return headCount;
		}
		selectCard (realCount);
		if ( CDBData[mCardName] ) {
			QDict<QString> CDBTable = *CDBData[mCardName];
			if (CDBTable["Profile"]) {
				QString mProfile = *CDBTable["Profile"];
				if (mProfile == "NVidia_DualHead_DriverOptions") {
					headCount += 2;
					realCount += 1;
					continue;
				}
				if (mProfile == "NVidia_DualHead") {
					headCount += 2;
					realCount += 2;
					continue;
				}
				if (mProfile == "Radeon_DualHead_DriverOptions") {
					headCount += 2;
					realCount += 1;
					continue;
				}
				if (mProfile == "Radeon_DualHead") {
					headCount += 2;
					realCount += 2;
					continue;
				}
				if (mProfile == "FGLRX_DualHead_DriverOptions") {
					headCount += 2;
					realCount += 1;
					continue;
				}
				if (mProfile == "FGLRX_DualHead") {
					headCount += 2;
					realCount += 2;
					continue;
				}
				if (mProfile == "Matrox_G400") {
					headCount += 2;
					realCount += 2;
					continue;
				}
				if (mProfile == "Matrox_G450") {
					headCount += 2;
					realCount += 2;
					continue;
				}
				if (mProfile == "Matrox_G550") {
					headCount += 2;
					realCount += 2;
					continue;
				}
			}
		}
		realCount++;
		headCount++;
	}
	//====================================
	// return board count, last chance
	//------------------------------------
	return mBoards;
}
示例#6
0
MainWindow::MainWindow( QWidget *parent )
:	QWidget( parent )
,	cardsGroup( new QActionGroup( this ) )
{
	qRegisterMetaType<QSslCertificate>("QSslCertificate");

	setupUi( this );
	cards->hide();

	setWindowFlags( Qt::Window | Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowTitleHint );
#if QT_VERSION >= 0x040500
	setWindowFlags( windowFlags() | Qt::WindowCloseButtonHint );
#else
	setWindowFlags( windowFlags() | Qt::WindowSystemMenuHint );
#endif

	QApplication::instance()->installEventFilter( this );

	Common *common = new Common( this );
	QDesktopServices::setUrlHandler( "browse", common, "browse" );
	QDesktopServices::setUrlHandler( "mailto", common, "mailTo" );

	QButtonGroup *buttonGroup = new QButtonGroup( this );

	buttonGroup->addButton( settings, HeadSettings );
	buttonGroup->addButton( help, HeadHelp );

	buttonGroup->addButton( homeCreate, HomeCreate );
	buttonGroup->addButton( homeView, HomeView );

	introNext = introButtons->addButton( tr( "Next" ), QDialogButtonBox::ActionRole );
	buttonGroup->addButton( introNext, IntroNext );
	buttonGroup->addButton( introButtons->button( QDialogButtonBox::Cancel ), IntroBack );

	viewCrypt = viewButtons->addButton( tr("Encrypt"), QDialogButtonBox::ActionRole );
	buttonGroup->addButton( viewCrypt, ViewCrypt );
	buttonGroup->addButton( viewButtons->button( QDialogButtonBox::Close ), ViewClose );
	connect( buttonGroup, SIGNAL(buttonClicked(int)),
		SLOT(buttonClicked(int)) );

	appTranslator = new QTranslator( this );
	commonTranslator = new QTranslator( this );
	qtTranslator = new QTranslator( this );
	QApplication::instance()->installTranslator( appTranslator );
	QApplication::instance()->installTranslator( commonTranslator );
	QApplication::instance()->installTranslator( qtTranslator );

	doc = new CryptoDoc( this );
	connect( cards, SIGNAL(activated(QString)), doc, SLOT(selectCard(QString)) );
	connect( doc, SIGNAL(error(QString,int,QString)), SLOT(showWarning(QString,int,QString)) );
	connect( doc, SIGNAL(dataChanged()), SLOT(showCardStatus()) );

	connect( viewContentView, SIGNAL(remove(int)),
		SLOT(removeDocument(int)) );
	connect( viewContentView, SIGNAL(save(int,QString)),
		doc, SLOT(saveDocument(int,QString)) );

	cards->hack();
	languages->hack();
	lang << "et" << "en" << "ru";
	QString deflang;
	switch( QLocale().language() )
	{
	case QLocale::English: deflang = "en"; break;
	case QLocale::Russian: deflang = "ru"; break;
	case QLocale::Estonian:
	default: deflang = "et"; break;
	}
	on_languages_activated( lang.indexOf(
		Settings().value( "Main/Language", deflang ).toString() ) );
	QActionGroup *langGroup = new QActionGroup( this );
	QAction *etAction = langGroup->addAction( new QAction( langGroup ) );
	QAction *enAction = langGroup->addAction( new QAction( langGroup ) );
	QAction *ruAction = langGroup->addAction( new QAction( langGroup ) );
	etAction->setData( 0 );
	enAction->setData( 1 );
	ruAction->setData( 2 );
	etAction->setShortcut( Qt::CTRL + Qt::SHIFT + Qt::Key_1 );
	enAction->setShortcut( Qt::CTRL + Qt::SHIFT + Qt::Key_2 );
	ruAction->setShortcut( Qt::CTRL + Qt::SHIFT + Qt::Key_3 );
	addAction( etAction );
	addAction( enAction );
	addAction( ruAction );
	connect( langGroup, SIGNAL(triggered(QAction*)), SLOT(changeLang(QAction*)) );
	connect( cardsGroup, SIGNAL(triggered(QAction*)), SLOT(changeCard(QAction*)) );

	close = new QAction( tr("Close"), this );
	close->setShortcut( Qt::CTRL + Qt::Key_W );
	connect( close, SIGNAL(triggered()), this, SLOT(closeDoc()) );
	addAction( close );
#if defined(Q_OS_MAC)
	QMenuBar *bar = new QMenuBar;
	QMenu *menu = bar->addMenu( tr("&File") );
	QAction *pref = menu->addAction( tr("Settings"), this, SLOT(showSettings()) );
	pref->setMenuRole( QAction::PreferencesRole );
	menu->addAction( close );
#endif

	QStringList args = qApp->arguments();
	if( args.size() > 1 )
	{
		args.removeAt( 0 );
		params = args;
		buttonClicked( HomeCreate );
	}
}
示例#7
0
MainWindow::MainWindow( QWidget *parent )
:	QWidget( parent )
,	cardsGroup( new QActionGroup( this ) )
,	m_loaded( false )
,	quitOnClose( false )
{
	qRegisterMetaType<QSslCertificate>("QSslCertificate");

	setupUi( this );

	cards->hide();
	cards->hack();
	languages->hack();

	setWindowFlags( Qt::Window | Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowTitleHint );
#if QT_VERSION >= 0x040500
	setWindowFlags( windowFlags() | Qt::WindowCloseButtonHint );
#else
	setWindowFlags( windowFlags() | Qt::WindowSystemMenuHint );
#endif

	QApplication::instance()->installEventFilter( this );

	Common *common = new Common( this );
	QDesktopServices::setUrlHandler( "browse", common, "browse" );
	QDesktopServices::setUrlHandler( "mailto", common, "mailTo" );

	Settings s;
	// Mobile
	infoMobileCode->setValidator( new IKValidator( infoMobileCode ) );
	infoMobileCode->setText( s.value( "Client/MobileCode" ).toString() );
	infoMobileCell->setText( s.value( "Client/MobileNumber", "+372" ).toString() );
	connect( infoMobileCode, SIGNAL(textEdited(QString)), SLOT(enableSign()) );
	connect( infoMobileCell, SIGNAL(textEdited(QString)), SLOT(enableSign()) );
	connect( infoSignMobile, SIGNAL(toggled(bool)), SLOT(showCardStatus()) );

	// Buttons
	QButtonGroup *buttonGroup = new QButtonGroup( this );

	buttonGroup->addButton( settings, HeadSettings );
	buttonGroup->addButton( help, HeadHelp );

	buttonGroup->addButton( homeSign, HomeSign );
	buttonGroup->addButton( homeView, HomeView );
	buttonGroup->addButton( homeCrypt, HomeCrypt );

	introNext = introButtons->addButton( tr( "Next" ), QDialogButtonBox::ActionRole );
	buttonGroup->addButton( introNext, IntroNext );
	buttonGroup->addButton( introButtons->button( QDialogButtonBox::Cancel ), IntroBack );

	signButton = signButtons->addButton( tr("Sign"), QDialogButtonBox::AcceptRole );
	buttonGroup->addButton( signButton, SignSign );
	buttonGroup->addButton( signButtons->button( QDialogButtonBox::Cancel ), SignCancel );

	viewAddSignature = viewButtons->addButton( tr("Add signature"), QDialogButtonBox::ActionRole );
	buttonGroup->addButton( viewAddSignature, ViewAddSignature );
	buttonGroup->addButton( viewButtons->button( QDialogButtonBox::Close ), ViewClose );
	connect( buttonGroup, SIGNAL(buttonClicked(int)),
		SLOT(buttonClicked(int)) );

	connect( infoCard, SIGNAL(linkActivated(QString)), SLOT(parseLink(QString)) );

	// Digidoc
	doc = new DigiDoc( this );
	connect( cards, SIGNAL(activated(QString)), doc, SLOT(selectCard(QString)) );
	connect( doc, SIGNAL(error(QString)), SLOT(showWarning(QString)) );
	connect( doc, SIGNAL(dataChanged()), SLOT(showCardStatus()) );
	m_loaded = doc->init();

	// Translations
	appTranslator = new QTranslator( this );
	commonTranslator = new QTranslator( this );
	qtTranslator = new QTranslator( this );
	QApplication::instance()->installTranslator( appTranslator );
	QApplication::instance()->installTranslator( commonTranslator );
	QApplication::instance()->installTranslator( qtTranslator );
	lang << "et" << "en" << "ru";
	QString deflang;
	switch( QLocale().language() )
	{
	case QLocale::English: deflang = "en"; break;
	case QLocale::Russian: deflang = "ru"; break;
	case QLocale::Estonian:
	default: deflang = "et"; break;
	}
	on_languages_activated( lang.indexOf(
		s.value( "Main/Language", deflang ).toString() ) );
	QActionGroup *langGroup = new QActionGroup( this );
	QAction *etAction = langGroup->addAction( new QAction( langGroup ) );
	QAction *enAction = langGroup->addAction( new QAction( langGroup ) );
	QAction *ruAction = langGroup->addAction( new QAction( langGroup ) );
	etAction->setData( 0 );
	enAction->setData( 1 );
	ruAction->setData( 2 );
	etAction->setShortcut( Qt::CTRL + Qt::SHIFT + Qt::Key_1 );
	enAction->setShortcut( Qt::CTRL + Qt::SHIFT + Qt::Key_2 );
	ruAction->setShortcut( Qt::CTRL + Qt::SHIFT + Qt::Key_3 );
	addAction( etAction );
	addAction( enAction );
	addAction( ruAction );
	connect( langGroup, SIGNAL(triggered(QAction*)), SLOT(changeLang(QAction*)) );
	connect( cardsGroup, SIGNAL(triggered(QAction*)), SLOT(changeCard(QAction*)) );

	// Views
	signContentView->setColumnHidden( 2, true );
	viewContentView->setColumnHidden( 3, true );
	connect( signContentView, SIGNAL(remove(unsigned int)),
		SLOT(removeDocument(unsigned int)) );
	connect( viewContentView, SIGNAL(remove(unsigned int)),
		SLOT(removeDocument(unsigned int)) );

	// Actions
	closeAction = new QAction( tr("Close"), this );
	closeAction->setShortcut( Qt::CTRL + Qt::Key_W );
	connect( closeAction, SIGNAL(triggered()), this, SLOT(closeDoc()) );
	addAction( closeAction );
#if defined(Q_OS_MAC)
	QMenuBar *bar = new QMenuBar;
	QMenu *menu = bar->addMenu( tr("&File") );
	QAction *pref = menu->addAction( tr("Settings"), this, SLOT(showSettings()) );
	pref->setMenuRole( QAction::PreferencesRole );
	menu->addAction( closeAction );
#endif

	// Arguments
	QStringList args = qApp->arguments();
	if( args.size() > 1 )
	{
		quitOnClose = true;
		args.removeAt( 0 );
		params = args;
		buttonClicked( HomeSign );
	}
}
示例#8
0
MainWindow::MainWindow( const QStringList &_params )
:	QWidget()
,	cardsGroup( new QActionGroup( this ) )
,	quitOnClose( false )
{
	setAttribute( Qt::WA_DeleteOnClose, true );
	setupUi( this );

	cards->hide();
	cards->hack();
	languages->hack();

	setWindowFlags( Qt::Window | Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint );
#if QT_VERSION >= 0x040500
	setWindowFlags( windowFlags() | Qt::WindowCloseButtonHint );
#else
	setWindowFlags( windowFlags() | Qt::WindowSystemMenuHint );
#endif

	Settings s;
	// Mobile
	infoMobileCode->setValidator( new IKValidator( infoMobileCode ) );
	infoMobileCode->setText( s.value( "Client/MobileCode" ).toString() );
	infoMobileCell->setText( s.value( "Client/MobileNumber", "+372" ).toString() );
	connect( infoMobileCode, SIGNAL(textEdited(QString)), SLOT(enableSign()) );
	connect( infoMobileCell, SIGNAL(textEdited(QString)), SLOT(enableSign()) );
	connect( infoSignMobile, SIGNAL(toggled(bool)), SLOT(showCardStatus()) );

	// Buttons
	QButtonGroup *buttonGroup = new QButtonGroup( this );

	buttonGroup->addButton( settings, HeadSettings );
	buttonGroup->addButton( help, HeadHelp );
	buttonGroup->addButton( about, HeadAbout );

	buttonGroup->addButton( homeSign, HomeSign );
	buttonGroup->addButton( homeView, HomeView );
	buttonGroup->addButton( homeCrypt, HomeCrypt );

	introNext = introButtons->addButton( tr( "Next" ), QDialogButtonBox::ActionRole );
	buttonGroup->addButton( introNext, IntroNext );
	buttonGroup->addButton( introButtons->button( QDialogButtonBox::Cancel ), IntroBack );

	signButton = signButtons->addButton( tr("Sign"), QDialogButtonBox::AcceptRole );
	buttonGroup->addButton( signButton, SignSign );
	buttonGroup->addButton( signButtons->button( QDialogButtonBox::Cancel ), SignCancel );

	viewAddSignature = viewButtons->addButton( tr("Add signature"), QDialogButtonBox::ActionRole );
	buttonGroup->addButton( viewAddSignature, ViewAddSignature );
	buttonGroup->addButton( viewButtons->button( QDialogButtonBox::Close ), ViewClose );
	connect( buttonGroup, SIGNAL(buttonClicked(int)),
		SLOT(buttonClicked(int)) );

	connect( infoCard, SIGNAL(linkActivated(QString)), SLOT(parseLink(QString)) );
	connect( cards, SIGNAL(activated(QString)), qApp->signer(), SLOT(selectCard(QString)), Qt::QueuedConnection );
	connect( qApp, SIGNAL(dataChanged()), SLOT(showCardStatus()) );

	// Digidoc
	doc = new DigiDoc( this );

	// Translations
	lang << "et" << "en" << "ru";
	QString deflang;
	switch( QLocale().language() )
	{
	case QLocale::English: deflang = "en"; break;
	case QLocale::Russian: deflang = "ru"; break;
	case QLocale::Estonian:
	default: deflang = "et"; break;
	}
	on_languages_activated( lang.indexOf(
		s.value( "Main/Language", deflang ).toString() ) );
	QActionGroup *langGroup = new QActionGroup( this );
	QAction *etAction = langGroup->addAction( new QAction( langGroup ) );
	QAction *enAction = langGroup->addAction( new QAction( langGroup ) );
	QAction *ruAction = langGroup->addAction( new QAction( langGroup ) );
	etAction->setData( 0 );
	enAction->setData( 1 );
	ruAction->setData( 2 );
	etAction->setShortcut( Qt::CTRL + Qt::SHIFT + Qt::Key_1 );
	enAction->setShortcut( Qt::CTRL + Qt::SHIFT + Qt::Key_2 );
	ruAction->setShortcut( Qt::CTRL + Qt::SHIFT + Qt::Key_3 );
	addAction( etAction );
	addAction( enAction );
	addAction( ruAction );
	connect( langGroup, SIGNAL(triggered(QAction*)), SLOT(changeLang(QAction*)) );
	connect( cardsGroup, SIGNAL(triggered(QAction*)), SLOT(changeCard(QAction*)) );

	// Views
	signContentView->setColumnHidden( 2, true );
	viewContentView->setColumnHidden( 3, true );
	connect( signContentView, SIGNAL(remove(unsigned int)),
		SLOT(removeDocument(unsigned int)) );
	connect( viewContentView, SIGNAL(remove(unsigned int)),
		SLOT(removeDocument(unsigned int)) );

	if( !_params.empty() )
	{
		quitOnClose = true;
		params = _params;
		buttonClicked( HomeSign );
	}
}
示例#9
0
void QSmartCard::run()
{
	while( !d->terminate )
	{
		if( d->m.tryLock() )
		{
			// Get list of available cards
			QMap<QString,std::string> cards;
			QStringList readers;
			try
			{
				EstEIDManager *card = new EstEIDManager();
				std::vector<Token> list = card->getTokenList();
				for( std::vector<Token>::const_iterator i = list.begin(); i != list.end(); ++i )
				{
					qDebug() << i->first.c_str() << i->second.c_str();
					readers << i->first.c_str();
					if( !i->second.empty() )
						cards[i->second.c_str()] = i->first.c_str();
				}
				delete card;
			}
			catch( const std::runtime_error &e )
			{
				qDebug() << Q_FUNC_INFO << e.what();
			}

			// cardlist has changed
			QStringList order = cards.keys();
			std::sort( order.begin(), order.end(), Common::cardsOrder );
			bool update = d->t.cards() != order || d->t.readers() != readers;

			// check if selected card is still in slot
			if( !d->t.card().isEmpty() && !order.contains( d->t.card() ) )
			{
				update = true;
				d->t.d = new QSmartCardDataPrivate();
			}

			d->t.d->cards = order;
			d->t.d->readers = readers;

			// if none is selected select first from cardlist
			if( d->t.card().isEmpty() && !d->t.cards().isEmpty() )
				selectCard( d->t.cards().first() );

			// read card data
			if( d->t.cards().contains( d->t.card() ) && (!d->card || d->t.authCert().isNull() || d->t.signCert().isNull()) )
			{
				update = true;
				try
				{
					QSmartCardDataPrivate *t = d->t.d;
					std::string reader = cards.value( t->card );
					delete d->card;
					d->card = 0;
					d->card = new EstEidCard( reader );
					d->card->setReaderLanguageId( d->lang );

					d->updateCounters( t );
					std::vector<std::string> data;
					d->card->readPersonalData( data, EstEidCard::SURNAME, EstEidCard::COMMENT4 );
					ByteVec authcert = d->card->getAuthCert();
					ByteVec signcert = d->card->getSignCert();

					t->reader = reader.c_str();
					t->pinpad = d->card->isSecureConnection();
					t->version = QSmartCardData::CardVersion(d->card->getCardVersion());
					try {
						if( t->version > QSmartCardData::VER_1_1 )
						{
							d->card->sendApplicationIdentifierPreV3();
							t->version = QSmartCardData::VER_3_0;
						}
					} catch( const std::runtime_error &e ) {
						qDebug() << Q_FUNC_INFO << "Card is not V3.0: " << e.what();
					}

					t->data[QSmartCardData::SurName] =
						SslCertificate::formatName( d->encode( data[EstEidCard::SURNAME] ) ).trimmed();
					t->data[QSmartCardData::FirstName] =
						SslCertificate::formatName( d->encode( data[EstEidCard::FIRSTNAME] ) ).trimmed();
					t->data[QSmartCardData::MiddleName] =
						SslCertificate::formatName( d->encode( data[EstEidCard::MIDDLENAME] ) ).trimmed();
					t->data[QSmartCardData::Sex] = d->encode( data[EstEidCard::SEX] );
					t->data[QSmartCardData::Citizen] = d->encode( data[EstEidCard::CITIZEN] );
					t->data[QSmartCardData::BirthDate] = QDate::fromString( d->encode( data[EstEidCard::BIRTHDATE] ), "dd.MM.yyyy" );
					t->data[QSmartCardData::Id] = d->encode( data[EstEidCard::ID] );
					t->data[QSmartCardData::DocumentId] = d->encode( data[EstEidCard::DOCUMENTID] );
					t->data[QSmartCardData::Expiry] = QDate::fromString( d->encode( data[EstEidCard::EXPIRY] ), "dd.MM.yyyy" );
					t->data[QSmartCardData::BirthPlace] =
						SslCertificate::formatName( d->encode( data[EstEidCard::BIRTHPLACE] ) );
					t->data[QSmartCardData::IssueDate] = QDate::fromString( d->encode( data[EstEidCard::ISSUEDATE] ), "dd.MM.yyyy" );
					t->data[QSmartCardData::ResidencePermit] = d->encode( data[EstEidCard::RESIDENCEPERMIT] );
					t->data[QSmartCardData::Comment1] = d->encode( data[EstEidCard::COMMENT1] );
					t->data[QSmartCardData::Comment2] = d->encode( data[EstEidCard::COMMENT2] );
					t->data[QSmartCardData::Comment3] = d->encode( data[EstEidCard::COMMENT3] );
					t->data[QSmartCardData::Comment4] = d->encode( data[EstEidCard::COMMENT4] );

					if( !authcert.empty() )
						t->authCert = QSslCertificate( QByteArray( (char*)&authcert[0], (int)authcert.size() ), QSsl::Der );
					if( !signcert.empty() )
						t->signCert = QSslCertificate( QByteArray( (char*)&signcert[0], (int)signcert.size() ), QSsl::Der );

					QStringList mailaddresses = t->authCert.alternateSubjectNames().values( QSsl::EmailEntry );
					t->data[QSmartCardData::Email] = !mailaddresses.isEmpty() ? mailaddresses.first() : "";

					QStringList name = QStringList()
						<< t->data[QSmartCardData::FirstName].toString()
						<< t->data[QSmartCardData::MiddleName].toString()
						<< t->data[QSmartCardData::SurName].toString();
					name.removeAll( "" );
					t->data[QSmartCardData::FullName] = name.join( " " );

					if( t->authCert.type() & SslCertificate::DigiIDType )
					{
						t->data[QSmartCardData::FullName] = t->authCert.toString( "GN SN" );
						t->data[QSmartCardData::Id] = t->authCert.subjectInfo("serialNumber");
						t->data[QSmartCardData::BirthDate] = IKValidator::birthDate( t->authCert.subjectInfo("serialNumber") );
						t->data[QSmartCardData::IssueDate] = t->authCert.effectiveDate();
						t->data[QSmartCardData::Expiry] = t->authCert.expiryDate();
					}
				}
				catch( const std::runtime_error &e )
				{
					qDebug() << Q_FUNC_INFO << "Error on loading card data: " << e.what();
				}
			}

			// update data if something has changed
			if( update )
				Q_EMIT dataChanged();
			d->m.unlock();
		}
		else if( d->e.isRunning() )
		{
			emit eventStarted();
			try
			{
				byte retries = 0;
				d->result = QSmartCard::UnknownError;
				switch( d->cmd )
				{
				case QSmartCardPrivate::Change:
					switch( d->type )
					{
					case QSmartCardData::Pin1Type:
						d->card->changeAuthPin( d->pin, d->old, retries );
						break;
					case QSmartCardData::Pin2Type:
						d->card->changeSignPin( d->pin, d->old, retries );
						break;
					case QSmartCardData::PukType:
						d->card->changePUK( d->pin, d->old, retries );
						break;
					}
					d->updateCounters( d->t.d );
					break;
				case QSmartCardPrivate::Unblock:
					switch( d->type )
					{
					case QSmartCardData::Pin1Type:
						d->card->unblockAuthPin( d->pin, d->old, retries );
						break;
					case QSmartCardData::Pin2Type:
						d->card->unblockSignPin( d->pin, d->old, retries );
						break;
					default: break;
					}
					d->updateCounters( d->t.d );
					break;
				case QSmartCardPrivate::Validate:
					switch( d->type )
					{
					case QSmartCardData::Pin1Type:
						d->card->validateAuthPin( d->pin, retries );
						break;
					case QSmartCardData::Pin2Type:
						d->card->validateSignPin( d->pin, retries );
						break;
					case QSmartCardData::PukType:
						d->card->validatePuk( d->pin, retries );
						break;
					default: break;
					}
					break;
				case QSmartCardPrivate::ValidateInternal:
					switch( d->type )
					{
					case QSmartCardData::Pin1Type:
						d->card->enterPin( EstEidCard::PIN_AUTH, d->pin );
						break;
					case QSmartCardData::Pin2Type:
						d->card->enterPin( EstEidCard::PIN_SIGN, d->pin );
						break;
					case QSmartCardData::PukType:
						d->card->enterPin( EstEidCard::PUK, d->pin );
						break;
					}
					break;
				default: break;
				}
				d->result = QSmartCard::NoError;
			}
			catch( const AuthError &e )
			{
				d->result = d->handleAuthError(
					d->cmd == QSmartCardPrivate::Unblock ? QSmartCardData::PukType : d->type, e );
			}
			catch( const std::runtime_error &e )
			{
				qDebug() << Q_FUNC_INFO << e.what();
			}
			d->pin.clear();
			d->old.clear();
			d->e.quit();
		}

		sleep( 5 );
	}
}
示例#10
0
void QSmartCard::reload() { selectCard( d->t.card() ); }
示例#11
0
MainWindow::MainWindow( QWidget *parent )
:	QWidget( parent )
,	cardsGroup( new QActionGroup( this ) )
{
	setAttribute( Qt::WA_DeleteOnClose, true );
	setupUi( this );

	cards->hide();
	cards->hack();
	languages->hack();

	setWindowFlags( Qt::Window | Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint );
#if QT_VERSION >= 0x040500
	setWindowFlags( windowFlags() | Qt::WindowCloseButtonHint );
#else
	setWindowFlags( windowFlags() | Qt::WindowSystemMenuHint );
#endif

	// Buttons
	QButtonGroup *buttonGroup = new QButtonGroup( this );

	buttonGroup->addButton( settings, HeadSettings );
	buttonGroup->addButton( help, HeadHelp );
	buttonGroup->addButton( about, HeadAbout );

	buttonGroup->addButton( homeCreate, HomeCreate );
	buttonGroup->addButton( homeView, HomeView );

	introNext = introButtons->addButton( tr( "Next" ), QDialogButtonBox::ActionRole );
	buttonGroup->addButton( introNext, IntroNext );
	buttonGroup->addButton( introButtons->button( QDialogButtonBox::Cancel ), IntroBack );

	viewCrypt = viewButtons->addButton( tr("Encrypt"), QDialogButtonBox::ActionRole );
	buttonGroup->addButton( viewCrypt, ViewCrypt );
	buttonGroup->addButton( viewButtons->button( QDialogButtonBox::Close ), ViewClose );
	connect( buttonGroup, SIGNAL(buttonClicked(int)),
		SLOT(buttonClicked(int)) );

	connect( cards, SIGNAL(activated(QString)), qApp->poller(), SLOT(selectCard(QString)), Qt::QueuedConnection );
	connect( qApp->poller(), SIGNAL(dataChanged()), SLOT(showCardStatus()) );

	// Cryptodoc
	doc = new CryptoDoc( this );

	// Translations
	lang << "et" << "en" << "ru";
	retranslate();
	QActionGroup *langGroup = new QActionGroup( this );
	for( int i = 0; i < lang.size(); ++i )
	{
		QAction *a = langGroup->addAction( new QAction( langGroup ) );
		a->setData( lang[i] );
		a->setShortcut( Qt::CTRL + Qt::SHIFT + Qt::Key_0 + i );
	}
	addActions( langGroup->actions() );
	connect( langGroup, SIGNAL(triggered(QAction*)), SLOT(changeLang(QAction*)) );
	connect( cardsGroup, SIGNAL(triggered(QAction*)), SLOT(changeCard(QAction*)) );

	// Views
	connect( viewContentView, SIGNAL(remove(int)),
		SLOT(removeDocument(int)) );
	connect( viewContentView, SIGNAL(save(int,QString)),
		doc, SLOT(saveDocument(int,QString)) );
}
示例#12
0
int straightflush(struct card hand[], int n) {
    struct card* handD = selectCard(hand,n,'d');
    struct card* handC = selectCard(hand,n,'c');
    struct card* handH = selectCard(hand,n,'h');
    struct card* handS = selectCard(hand,n,'s');
    int check = 0;
    int i, j;
    //check for d
    if (handD != NULL){
        for (i = 0; handD[i+4].value != -1; i++)
            if (handD[i].value != 0 && handD[i+1].value != 0 && handD[i+2].value != 0 && handD[i+3].value != 0 && handD[i+4].value != 0)
                check = 1;
        if (check != 1)
            if (handD[0].value == 1 && handD[i].value == 10 && handD[i+1].value == 11 && handD[i+2].value == 12 && handD[i+3].value == 13)
                check = 1;
    }
    free(handD);
    if (check == 1)
        return check;
    
    //check for c
    if (handC != NULL){
        for (i = 0; handC[i+4].value != -1; i++)
            if (handC[i].value != 0 && handC[i+1].value != 0 && handC[i+2].value != 0 && handC[i+3].value != 0 && handC[i+4].value != 0)
                check = 1;
        if (check != 1)
            if (handC[0].value == 1 && handC[i].value == 10 && handC[i+1].value == 11 && handC[i+2].value == 12 && handC[i+3].value == 13)
                check = 1;
    }
    free(handC);
    if (check == 1)
        return check;
    
    //check for h
    if (handH != NULL){
        for (i = 0; handH[i+4].value != -1; i++)
            if (handH[i].value != 0 && handH[i+1].value != 0 && handH[i+2].value != 0 && handH[i+3].value != 0 && handH[i+4].value != 0)
                check = 1;
        if (check != 1)
            if (handH[0].value == 1 && handH[i].value == 10 && handH[i+1].value == 11 && handH[i+2].value == 12 && handH[i+3].value == 13)
                check = 1;
    }
    free(handH);
    if (check == 1)
        return check;
    
    //check for s
    if (handS != NULL){
        for (i = 0; handS[i+4].value != -1; i++)
            if (handS[i].value != 0 && handS[i+1].value != 0 && handS[i+2].value != 0 && handS[i+3].value != 0 && handS[i+4].value != 0)
                check = 1;
        if (check != 1)
            if (handS[0].value == 1 && handS[i].value == 10 && handS[i+1].value == 11 && handS[i+2].value == 12 && handS[i+3].value == 13)
                check = 1;
    }
    free(handS);
    if (check == 1)
        return check;
    
    return check;
}