All Classes Namespaces Files Functions Variables Enumerations Enumerator
programs/UrgPorts/UrgPortsWidget.cpp
Go to the documentation of this file.
00001 
00010 #include "UrgPortsWidget.h"
00011 #include "UrgUsbCom.h"
00012 #include "FindComPorts.h"
00013 #include <QShortcut>
00014 
00015 using namespace qrk;
00016 using namespace std;
00017 
00018 
00019 struct UrgPortsWidget::pImpl
00020 {
00021   void initializeForm(UrgPortsWidget* parent)
00022   {
00023     // シグナルの接続
00024     connect(parent->rescan_button_, SIGNAL(clicked()),
00025             parent, SLOT(rescanHandler()));
00026   }
00027 
00028 
00029   void rescanPorts(UrgPortsWidget* parent)
00030   {
00031     FindComPorts urg_finder;
00032     urg_finder.addBaseName("/dev/ttyACM");
00033     urg_finder.addBaseName("/dev/tty.usbmodem");
00034     urg_finder.addDriverName("URG Series USB Device Driver");
00035     urg_finder.addDriverName("URG-X002 USB Device Driver");
00036 
00037     vector<string> urg_ports;
00038     urg_finder.find(urg_ports);
00039 
00040     parent->ports_list_widget_->clear();
00041 
00042     UrgUsbCom urg_usb;
00043     for (vector<string>::iterator it = urg_ports.begin();
00044          it != urg_ports.end(); ++it) {
00045       string name = *it
00046         + (urg_usb.isUsbCom(it->c_str()) ? " [URG]" : "");
00047 
00048       parent->ports_list_widget_->addItem(name.c_str());
00049     }
00050   }
00051 };
00052 
00053 
00054 UrgPortsWidget::UrgPortsWidget(QWidget* parent)
00055   : QWidget(parent), pimpl(new pImpl)
00056 {
00057   setupUi(this);
00058 
00059   // フォームを初期化し、最初の表示を行う
00060   pimpl->initializeForm(this);
00061   pimpl->rescanPorts(this);
00062 
00063   // Ctrl-q, Alt-F4 で終了させる
00064   (void) new QShortcut(Qt::CTRL + Qt::Key_Q, this, SLOT(close()));
00065   (void) new QShortcut(Qt::ALT + Qt::Key_F4, this, SLOT(close()));
00066 }
00067 
00068 
00069 UrgPortsWidget::~UrgPortsWidget(void)
00070 {
00071 }
00072 
00073 
00074 void UrgPortsWidget::rescanHandler(void)
00075 {
00076   pimpl->rescanPorts(this);
00077 }