ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/s10k/Vago/manualcommands.cpp
Revision: 1058
Committed: Sun Oct 30 14:42:39 2016 UTC (8 years, 11 months ago) by s10k
Content type: text/x-c++src
Original Path: Vago/trunk/Vago/manualcommands.cpp
File size: 5776 byte(s)
Log Message:
Vago 1.2

File Contents

# Content
1 #include "manualcommands.h"
2 #include "ui_manualcommands.h"
3
4 ManualCommands::ManualCommands(QWidget *parent) :
5 QMainWindow(parent),
6 ui(new Ui::ManualCommands)
7 {
8 ui->setupUi(this);
9 this->setAttribute(Qt::WA_DeleteOnClose, true); //destroy itself once finished.
10 this->myProcess = new QProcess();
11 this->myProcess->setProcessChannelMode(QProcess::MergedChannels);
12 this->myProcess->setWorkingDirectory(UtilVago::getAppPath());
13 ui->leManualCommand->installEventFilter(this);
14
15 this->nextInsertHistoryIdx=0;
16 this->searchHistoryIdx=0;
17 for(int i=0; i<this->limHistory; i++){
18 this->history[i]=""; //clean array
19 }
20 }
21
22 ManualCommands::~ManualCommands()
23 {
24 delete myProcess;
25 delete ui;
26 }
27
28 void ManualCommands::on_pbInput_clicked()
29 {
30 executeCommand();
31 }
32
33 void ManualCommands::executeCommand(){
34
35 QString toolExecutable;
36
37 if(ui->cbTargetTool->currentText() == "OniSplit"){
38 toolExecutable = UtilVago::getOniSplitExecutable();
39 }
40 else{
41 toolExecutable = UtilVago::getXmlToolsExecutable();
42 }
43
44 QString command=ui->leManualCommand->text().trimmed();
45
46 if(command.isEmpty()){
47 Util::showErrorPopUp("Please input a command first.");
48 return;
49 }
50
51 //Only add to the history if the last command is different
52 bool different=false;
53 if(this->nextInsertHistoryIdx==0){ //at the limit
54 if(this->history[this->limHistory-1]!=command){
55 different=true;
56 }
57 }
58 else{
59 if(this->history[this->nextInsertHistoryIdx-1]!=command){
60 different=true;
61 }
62 }
63
64 if(different){
65 this->history[this->nextInsertHistoryIdx++]=command; //assign and increment
66
67 if(this->nextInsertHistoryIdx==this->limHistory){ //if we are at the limit begin override
68 this->nextInsertHistoryIdx=0;
69 }
70 }
71
72 this->myProcess->start(toolExecutable+" "+ui->leManualCommand->text());
73 this->myProcess->waitForFinished(120000); //wait 2 minutes at maximum
74 ui->ptOutput->appendPlainText("> " + ui->cbTargetTool->currentText() + " " + command);
75 ui->ptOutput->appendPlainText(this->myProcess->readAll());
76 ui->ptOutput->ensureCursorVisible();
77 ui->ptOutput->verticalScrollBar()->setValue( ui->ptOutput->verticalScrollBar()->maximum() );
78 ui->leManualCommand->clear();
79 }
80
81 void ManualCommands::on_pcCopyClipboard_clicked()
82 {
83 QApplication::clipboard()->setText(ui->ptOutput->toPlainText());
84 }
85
86 void ManualCommands::on_pbClear_clicked()
87 {
88 if(Util::showQuestionPopUp(this,"Clear the output?")){
89 ui->ptOutput->clear();
90 }
91 }
92
93 //Allows detecting arrows press for history without subclassing lineedit.
94 bool ManualCommands::eventFilter(QObject* obj, QEvent *event)
95 {
96 if (obj == ui->leManualCommand)
97 {
98 if (event->type() == QEvent::KeyPress)
99 {
100 QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
101 if (keyEvent->key() == Qt::Key_Up) //UP ARROW
102 {
103
104 int oldValue=this->searchHistoryIdx;
105
106 //if it isn't the first member of history continue decrementing
107 if(this->searchHistoryIdx!=this->nextInsertHistoryIdx){ //for when it didn't the round
108 this->searchHistoryIdx--;
109 }
110
111 //start with the last elemented inputted
112 if(ui->leManualCommand->text().trimmed().isEmpty()){
113 this->searchHistoryIdx=this->nextInsertHistoryIdx-1;
114 }
115
116 //rotate
117 if(this->searchHistoryIdx < 0){
118 this->searchHistoryIdx=this->limHistory-1; //start from behind (49)
119 }
120 else if(this->searchHistoryIdx == this->limHistory){
121 this->searchHistoryIdx=0; //start from 0 again
122 }
123
124 //not filled yet value? Stop.
125 if(this->history[this->searchHistoryIdx].isEmpty()){
126 this->searchHistoryIdx=oldValue;
127 return true;
128 }
129
130 ui->leManualCommand->setText(this->history[this->searchHistoryIdx]);
131
132 return true;
133
134 }
135 else if(keyEvent->key() == Qt::Key_Down) //DOWN ARROW
136 {
137 if(ui->leManualCommand->text().trimmed().isEmpty()){
138 return true;
139 }
140
141 int oldValue=this->searchHistoryIdx;
142
143 //Continue incrementing if it isnt the last member of history
144 if(this->searchHistoryIdx!=this->nextInsertHistoryIdx-1 && //for when it didn't the round
145 !(this->nextInsertHistoryIdx==0 && this->searchHistoryIdx==this->limHistory-1)){ //for when it did the round
146 this->searchHistoryIdx++;
147 }
148
149 //rotate
150 if(this->searchHistoryIdx < 0){
151 this->searchHistoryIdx=this->limHistory-1; //start from behind (49)
152 }
153 else if(this->searchHistoryIdx == this->limHistory){
154 this->searchHistoryIdx=0; //start from 0 again
155 }
156
157 //not filled yet value? Stop.
158 if(this->history[this->searchHistoryIdx].isEmpty()){
159 this->searchHistoryIdx=oldValue;
160 return true;
161 }
162
163 ui->leManualCommand->setText(this->history[this->searchHistoryIdx]);
164
165 return true;
166 }
167 }
168 return false;
169 }
170 return QMainWindow::eventFilter(obj, event);
171 }