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