event_slot.cpp
Go to the documentation of this file.
00001 #include "event_slot.h"
00002 
00003 
00004 EventSlot::EventSlot() {}
00005 
00006 void EventSlot::initiate(Ui::MainWindow &guiHandle, QApplication &app)
00007 {
00008     _guiHandle = &guiHandle;
00009     _app = &app;
00010     try
00011     {
00012         _arm = new ArmMove();
00013     }
00014     catch(std::runtime_error &ex)
00015     {
00016         //ROS_INFO("%s", ex.what());
00017         QMessageBox::warning(NULL, "Moveit error", "GUI can't use moveit. Please make sure moveit is up and running, and restart GUI.");
00018         _guiHandle->drive_btn->setEnabled(false);
00019         _guiHandle->preset_btn->setEnabled(false);
00020         _guiHandle->cmbox_preset->setEnabled(false);
00021         //exit(1);
00022     }
00023 }
00024 
00025 void EventSlot::setBatPwr(int val)
00026 {
00027     _guiHandle->battery_pbar->setValue(val);
00028 }
00029 
00030 void EventSlot::setMoveState(Status state)
00031 {
00032     switch (state)
00033         {
00034             case CANCELED:
00035             {
00036                 _guiHandle->move_status_lbl->setStyleSheet("QLabel { background-color : yellow; color : black }");
00037                 _guiHandle->move_status_lbl->setText("Canceled");
00038                 break;
00039             }
00040             case WORKING:
00041             {
00042                 _guiHandle->move_pbar->setVisible(true);
00043                 _guiHandle->cmbox_preset->setEnabled(false);
00044                 _guiHandle->move_status_lbl->setStyleSheet("QLabel { background-color : yellow; color : black }");
00045                 _guiHandle->move_status_lbl->setText("Planning...");
00046                 _guiHandle->drive_btn->setEnabled(false);
00047                 _guiHandle->preset_btn->setEnabled(false);
00048                 break;
00049             }
00050             case SUCCESS:
00051             {
00052                 _guiHandle->cmbox_preset->setEnabled(true);
00053                 _guiHandle->move_pbar->setVisible(false);
00054                 _guiHandle->move_status_lbl->setStyleSheet("QLabel { background-color : green; color : white }");
00055                 _guiHandle->move_status_lbl->setText("Success");
00056                 _guiHandle->drive_btn->setEnabled(true);
00057                 _guiHandle->preset_btn->setEnabled(true);
00058                 break;
00059             }
00060             case FAIL:
00061             {
00062                 _guiHandle->cmbox_preset->setEnabled(true);
00063                 _guiHandle->move_pbar->setVisible(false);
00064                 _guiHandle->move_status_lbl->setStyleSheet("QLabel { background-color : red; color : white }");
00065                 _guiHandle->move_status_lbl->setText("Failed");
00066                 _guiHandle->drive_btn->setEnabled(true);
00067                 _guiHandle->preset_btn->setEnabled(true);
00068                 break;
00069             }
00070         }
00071 }
00072 
00073 void EventSlot::setLed(long int val, Led* led)
00074 {
00075     //if no new signal was received by listener
00076     if (led->getTimeMarker() == val)
00077     {
00078         if (calcTimeOut(led->getTimeMarker(), clock()) > TIMEOUT)
00079             led->turnOff();
00080     }
00081     else if (calcTimeOut(led->getTimeMarker(), clock()) != -1)
00082     {
00083         led->setTimeMarker(val);
00084         if (!led->getState())
00085             led->turnOn();
00086     }
00087 }
00088 
00089 void EventSlot::closeApp()
00090 {
00091     _app->quit();
00092 }
00093 
00094 void EventSlot::moveArm()
00095 {
00096 
00097     QMessageBox::StandardButton reply;
00098     reply = QMessageBox::question(NULL, "Warning", QString::fromStdString(_userMsg),
00099                                   QMessageBox::Yes|QMessageBox::No);
00100 
00101     if (reply == QMessageBox::Yes)
00102     {
00103         setMoveState(WORKING);
00104         boost::thread worker(&EventSlot::execMove, this);
00105     } else
00106         setMoveState(CANCELED);
00107 }
00108 void EventSlot::moveArmToDrive()
00109 {
00110     _targetName = "driving";
00111     _userMsg = "Are you sure you want to run driving mode?";
00112     moveArm();
00113 }
00114 
00115 void EventSlot::moveArmToPreset()
00116 {
00117     QString selection = _guiHandle->cmbox_preset->currentText();
00118     _targetName = selection.toStdString();
00119     _userMsg = "Are you sure you want to move the arm?";
00120     moveArm();
00121 }
00122 
00123 bool EventSlot::execMove()
00124 {
00125 
00126     if (_arm->plan(_targetName))
00127     {
00128         setMoveState(SUCCESS);
00129         _arm->move();
00130     } else
00131         setMoveState(FAIL);
00132 }
00133 
00134 /************************************************
00135  * Goal: calculate time interval between times
00136  * Params: @startTime, @endTime
00137  * Pre-cond: @endTime > @startTime
00138  * Post-cond: returns time interval between times
00139  ***********************************************/
00140 double EventSlot::calcTimeOut(long int startTime, long int endTime)
00141 {
00142     double timeOut = -1;
00143     if (endTime > startTime)
00144         timeOut = (endTime - startTime) / (double) CLOCKS_PER_SEC;
00145     return timeOut;
00146 }
00147 
00148 EventSlot::~EventSlot()
00149 {
00150     delete _arm;
00151 }


robotican_gui
Author(s): eli
autogenerated on Tue Feb 21 2017 04:00:20