Support for Fossil queries
FileActionDialog now becomes a (lame) question dialog box when no data is provided FossilOrigin-Name: 6a6a654b0db2537fc73774e7dc37d25cb2ae63d7
This commit is contained in:
		| @@ -22,8 +22,13 @@ FileActionDialog::FileActionDialog(QWidget *parent, const QString &title, const | |||||||
| 		ui->verticalLayout->insertWidget(2, checkBox); | 		ui->verticalLayout->insertWidget(2, checkBox); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	foreach(const QString &s, listData) | 	if(listData.empty()) | ||||||
| 		itemModel.appendRow(new QStandardItem(s)); | 		ui->listView->setVisible(false); | ||||||
|  | 	else | ||||||
|  | 	{ | ||||||
|  | 		foreach(const QString &s, listData) | ||||||
|  | 			itemModel.appendRow(new QStandardItem(s)); | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| FileActionDialog::~FileActionDialog() | FileActionDialog::~FileActionDialog() | ||||||
|   | |||||||
							
								
								
									
										118
									
								
								MainWindow.cpp
									
									
									
									
									
								
							
							
						
						
									
										118
									
								
								MainWindow.cpp
									
									
									
									
									
								
							| @@ -445,6 +445,22 @@ bool MainWindow::runFossil(const QStringList &args, QStringList *output, bool si | |||||||
|  |  | ||||||
| 	return exit_code == EXIT_SUCCESS; | 	return exit_code == EXIT_SUCCESS; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | //------------------------------------------------------------------------------ | ||||||
|  | static QString ParseFossilQuery(QString query) | ||||||
|  | { | ||||||
|  | 	// Extract question | ||||||
|  | 	int qend = query.indexOf('('); | ||||||
|  | 	if(qend == -1) | ||||||
|  | 		qend = query.indexOf('['); | ||||||
|  | 	Q_ASSERT(qend!=-1); | ||||||
|  | 	query = query.left(qend); | ||||||
|  | 	query = query.trimmed(); | ||||||
|  | 	query += "?"; | ||||||
|  | 	query[0]=QString(query[0]).toUpper()[0]; | ||||||
|  | 	return query; | ||||||
|  | } | ||||||
|  |  | ||||||
| //------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||||||
| // Run fossil. Returns true if execution was succesfull regardless if fossil | // Run fossil. Returns true if execution was succesfull regardless if fossil | ||||||
| // issued an error | // issued an error | ||||||
| @@ -471,22 +487,100 @@ bool MainWindow::runFossilRaw(const QStringList &args, QStringList *output, int | |||||||
| 		return false; | 		return false; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	process.waitForFinished(); | #ifdef Q_WS_WIN | ||||||
| 	QString std_output = process.readAllStandardOutput(); | 	const char *ans_yes = "y\r\n"; | ||||||
|  | 	const char *ans_no = "n\r\n"; | ||||||
|  | 	const char *ans_always = "a\r\n"; | ||||||
|  | #else | ||||||
|  | 	const char *ans_yes = "y\n"; | ||||||
|  | 	const char *ans_no = "n\n"; | ||||||
|  | 	const char *ans_always = "a\n"; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| 	QStringList lines = std_output.split('\n'); | 	QStringList local_output; | ||||||
|  | 	while(process.state()==QProcess::Running || !process.atEnd()) | ||||||
| 	for(QStringList::iterator it=lines.begin(); it!=lines.end(); ++it) |  | ||||||
| 	{ | 	{ | ||||||
| 		QString line = it->trimmed(); | 		bool has_line = process.canReadLine(); | ||||||
| 		if(line.isEmpty()) | 		qint64 bytes_available=process.bytesAvailable(); | ||||||
| 			continue; |  | ||||||
| 		if(output) | 		if(!process.waitForReadyRead(1*1000) && !has_line && bytes_available==0) | ||||||
| 			output->append(line); | 			break; | ||||||
| 		if(!silent) |  | ||||||
| 			log(line+"\n"); | 		// If no line yet, but some bytes available, maybe fossil is waiting for | ||||||
|  | 		// user input | ||||||
|  | 		if(!has_line && bytes_available>0) | ||||||
|  | 		{ | ||||||
|  | 			QString line = process.readAll(); | ||||||
|  | 			line = line.trimmed(); | ||||||
|  | 			QString query = line.toLower(); | ||||||
|  |  | ||||||
|  | 			// Have we encountered a y/n query? | ||||||
|  | 			if(line[line.length()-1]=='?' && query.indexOf("y/n")!=-1) | ||||||
|  | 			{ | ||||||
|  | 				log(line); | ||||||
|  | 				// Extract question | ||||||
|  | 				query = ParseFossilQuery(query); | ||||||
|  |  | ||||||
|  | 				int res =  QMessageBox::question(this, "Fossil", query, QMessageBox::Yes|QMessageBox::No, QMessageBox::No); | ||||||
|  | 				if(res==QMessageBox::Yes) | ||||||
|  | 				{ | ||||||
|  | 					process.write(ans_yes, COUNTOF(ans_yes)); | ||||||
|  | 					log("Y\n"); | ||||||
|  | 				} | ||||||
|  | 				else | ||||||
|  | 				{ | ||||||
|  | 					process.write(ans_no, COUNTOF(ans_no)); | ||||||
|  | 					log("N\n"); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			// Have we encountered a y/n/always query? | ||||||
|  | 			else if(line[line.length()-1]=='?' && query.indexOf("a=always/y/n")!=-1) | ||||||
|  | 			{ | ||||||
|  | 				log(line); | ||||||
|  | 				// Extract question | ||||||
|  | 				query = ParseFossilQuery(query); | ||||||
|  |  | ||||||
|  | 				int res =  QMessageBox::question(this, "Fossil", query, QMessageBox::Yes|QMessageBox::No|QMessageBox::YesToAll, QMessageBox::No); | ||||||
|  | 				if(res==QDialogButtonBox::Yes) | ||||||
|  | 				{ | ||||||
|  | 					process.write(ans_yes, COUNTOF(ans_yes)); | ||||||
|  | 					log("Y\n"); | ||||||
|  | 				} | ||||||
|  | 				else if(res==QDialogButtonBox::YesToAll) | ||||||
|  | 				{ | ||||||
|  | 					process.write(ans_always, COUNTOF(ans_always)); | ||||||
|  | 					log("A\n"); | ||||||
|  | 				} | ||||||
|  | 				else | ||||||
|  | 				{ | ||||||
|  | 					process.write(ans_no, COUNTOF(ans_no)); | ||||||
|  | 					log("N\n"); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		while(process.canReadLine()) | ||||||
|  | 		{ | ||||||
|  | 			QString line = process.readLine(); | ||||||
|  | 			line = line.trimmed(); | ||||||
|  | 			//QString line = it->trimmed(); | ||||||
|  | 			if(line.isEmpty()) | ||||||
|  | 				continue; | ||||||
|  |  | ||||||
|  | 			local_output.append(line); | ||||||
|  |  | ||||||
|  | 			if(output) | ||||||
|  | 				output->append(line); | ||||||
|  |  | ||||||
|  | 			if(!silent) | ||||||
|  | 				log(line+"\n"); | ||||||
|  | 		} | ||||||
|  |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	// Must be finished by now | ||||||
|  | 	Q_ASSERT(process.state()==QProcess::NotRunning); | ||||||
|  |  | ||||||
| 	QProcess::ExitStatus es = process.exitStatus(); | 	QProcess::ExitStatus es = process.exitStatus(); | ||||||
|  |  | ||||||
| 	if(es!=QProcess::NormalExit) | 	if(es!=QProcess::NormalExit) | ||||||
|   | |||||||
							
								
								
									
										14
									
								
								manifest
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								manifest
									
									
									
									
									
								
							| @@ -1,12 +1,12 @@ | |||||||
| C FileActionDialog\snow\ssupports\svariable\smodal\sbuttons\n | C Support\sfor\sFossil\squeries\nFileActionDialog\snow\sbecomes\sa\s(lame)\squestion\sdialog\sbox\swhen\sno\sdata\sis\sprovided\n | ||||||
| D 2011-08-06T15:34:40.595 | D 2011-08-06T16:15:50.633 | ||||||
| F CommitDialog.cpp a1fcdc94933f4e1a144224c7c70f1e067d3ee31e | F CommitDialog.cpp a1fcdc94933f4e1a144224c7c70f1e067d3ee31e | ||||||
| F CommitDialog.h 0550b1b652924ae54b6f6c9274cad2d4c491808a | F CommitDialog.h 0550b1b652924ae54b6f6c9274cad2d4c491808a | ||||||
| F CommitDialog.ui 5067623f6af6f5a42c87df903278e383e945e154 | F CommitDialog.ui 5067623f6af6f5a42c87df903278e383e945e154 | ||||||
| F FileActionDialog.cpp 629f29f676f3e547965f350fb9a4ee5797cc3e0b | F FileActionDialog.cpp fcaebf9986f789b3440d5390b3458ad5f86fe0c8 | ||||||
| F FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce | F FileActionDialog.h 15db1650b3a13d70bc338371e4c033c66e3b79ce | ||||||
| F FileActionDialog.ui c63644428579741aeb5fa052e237ba799ced9ad7 | F FileActionDialog.ui c63644428579741aeb5fa052e237ba799ced9ad7 | ||||||
| F MainWindow.cpp 96ce6b4bb5ee66f04a43e2171b20e8ee510a5ac7 | F MainWindow.cpp 10d04becd808da62ccf380d6c16f5bad8f3b06e9 | ||||||
| F MainWindow.h 8a23caf1a70d41fe60a25894649a88b1efb851ba | F MainWindow.h 8a23caf1a70d41fe60a25894649a88b1efb851ba | ||||||
| F MainWindow.ui 9f901c1f06b24df3cbd36d5349ffe0d82896c05b | F MainWindow.ui 9f901c1f06b24df3cbd36d5349ffe0d82896c05b | ||||||
| F RepoDialog.cpp 8f20e1511526973555c774350ec413dcecf51c9e | F RepoDialog.cpp 8f20e1511526973555c774350ec413dcecf51c9e | ||||||
| @@ -173,7 +173,7 @@ F icons/fuel.icns 81e535004b62db801a02f3e15d0a33afc9d4070b | |||||||
| F icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 | F icons/fuel.ico eb529ab3332a17b9302ef3e851db5b9ebce2a038 | ||||||
| F main.cpp aed85ed9766ddb8685e300e8ca4a0dc193ae2586 | F main.cpp aed85ed9766ddb8685e300e8ca4a0dc193ae2586 | ||||||
| F resources.qrc e98383ed205f4e37100c60057e0129c3b86dea53 | F resources.qrc e98383ed205f4e37100c60057e0129c3b86dea53 | ||||||
| P 665b2ad1b609530a9c2c2815e143213e5e691100 | P d80b84c6b58b7daf71174d32a8c33cab0e2aabac | ||||||
| R 1f233c6d016ce42191b217639282c217 | R dc4d20cff6babdcbf4a5e0cb3bc252f9 | ||||||
| U kostas | U kostas | ||||||
| Z f4122d426b89a67b7273148c8690abf1 | Z ac4a65db19b5eab4386101e1f0358467 | ||||||
|   | |||||||
| @@ -1 +1 @@ | |||||||
| d80b84c6b58b7daf71174d32a8c33cab0e2aabac | 6a6a654b0db2537fc73774e7dc37d25cb2ae63d7 | ||||||
		Reference in New Issue
	
	Block a user