Go to the documentation of this file.00001
00010 #include "DrawWidget.h"
00011 #include "UrgDrawWidget.h"
00012 #include <QHBoxLayout>
00013 #include <QSettings>
00014 #include <QShortcut>
00015
00016
00017 namespace
00018 {
00019 const char* Organization = "Hokuyo LTD.";
00020 const char* Application = "Multi URG Viewer";
00021 }
00022
00023
00024 struct DrawWidget::pImpl
00025 {
00026 DrawWidget* widget_;
00027 QHBoxLayout layout_;
00028 UrgDrawWidget urg_draw_widget_;
00029 UrgStateWidget* urg_state_widget_;
00030
00031
00032 pImpl(DrawWidget* widget)
00033 : widget_(widget), layout_(widget_), urg_state_widget_(NULL)
00034 {
00035 layout_.addWidget(&urg_draw_widget_);
00036 }
00037
00038
00039 void initializeForm(void)
00040 {
00041
00042 loadSettings();
00043
00044 enum {
00045 MinimumWidth = 200,
00046 MinimumHeight = 200,
00047 };
00048 widget_->setMinimumSize(MinimumWidth, MinimumHeight);
00049
00050
00051 (void) new QShortcut(Qt::Key_Return, widget_, SLOT(initializeView()));
00052 (void) new QShortcut(Qt::Key_Less, widget_, SLOT(zoomSmaller()));
00053 (void) new QShortcut(Qt::Key_Comma, widget_, SLOT(zoomSmaller()));
00054 (void) new QShortcut(Qt::Key_Greater, widget_, SLOT(zoomLarger()));
00055 (void) new QShortcut(Qt::Key_Period, widget_, SLOT(zoomLarger()));
00056
00057
00058 (void) new QShortcut(Qt::CTRL + Qt::Key_Q, widget_, SLOT(quitPressed()));
00059 (void) new QShortcut(Qt::ALT + Qt::Key_F4, widget_, SLOT(quitPressed()));
00060 (void) new QShortcut(Qt::CTRL + Qt::Key_W, widget_, SLOT(close()));
00061 }
00062
00063
00064 void loadSettings(void)
00065 {
00066 QSettings settings(Organization, Application);
00067 widget_->restoreGeometry(settings.value("geometry").toByteArray());
00068 }
00069
00070
00071 void saveSettings(void)
00072 {
00073 QSettings settings(Organization, Application);
00074 settings.setValue("geometry", widget_->saveGeometry());
00075 }
00076
00077
00078 void setUrgData(std::vector<long>& data,
00079 const qrk::RangeSensor* sensor, int timestamp)
00080 {
00081 urg_draw_widget_.setUrgData(data, sensor, timestamp);
00082 urg_draw_widget_.redraw();
00083 }
00084 };
00085
00086
00087 DrawWidget::DrawWidget(QWidget* parent)
00088 : QWidget(parent), pimpl(new pImpl(this))
00089 {
00090 pimpl->initializeForm();
00091 }
00092
00093
00094 DrawWidget::~DrawWidget(void)
00095 {
00096 }
00097
00098
00099 void DrawWidget::closeEvent(QCloseEvent* event)
00100 {
00101 static_cast<void>(event);
00102
00103 pimpl->saveSettings();
00104 }
00105
00106
00107 void DrawWidget::quitPressed(void)
00108 {
00109 close();
00110 emit quit();
00111 }
00112
00113
00114 void DrawWidget::initializeView(void)
00115 {
00116 pimpl->urg_draw_widget_.initializeView();
00117 }
00118
00119
00120 void DrawWidget::zoomSmaller(void)
00121 {
00122 pimpl->urg_draw_widget_.updateZoomRatio(+1);
00123 }
00124
00125
00126 void DrawWidget::zoomLarger(void)
00127 {
00128 pimpl->urg_draw_widget_.updateZoomRatio(-1);
00129 }
00130
00131
00132 void DrawWidget::setTitle(const QString& title,
00133 UrgStateWidget* urg_state_widget)
00134 {
00135 pimpl->widget_->setWindowTitle(title);
00136 pimpl->urg_state_widget_ = urg_state_widget;
00137 pimpl->urg_draw_widget_.clear();
00138 }
00139
00140
00141 void DrawWidget::setUrgData(std::vector<long>& data,
00142 const qrk::RangeSensor* sensor, int timestamp,
00143 UrgStateWidget* urg_state_widget)
00144 {
00145 if (urg_state_widget != pimpl->urg_state_widget_) {
00146 return;
00147 }
00148
00149 pimpl->setUrgData(data, sensor, timestamp);
00150 }
00151
00152
00153 void DrawWidget::disconnected(UrgStateWidget* urg_state_widget)
00154 {
00155 if (urg_state_widget == pimpl->urg_state_widget_) {
00156 hide();
00157 pimpl->urg_state_widget_ = NULL;
00158 }
00159 }