00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include "navigation_widget.h"
00038 #include <QDebug>
00039 #include <iostream>
00040
00041 namespace moveit_setup_assistant
00042 {
00043
00044
00045
00046
00047 NavigationWidget::NavigationWidget(QWidget* parent) : QListView(parent)
00048 {
00049 setItemDelegate(new NavDelegate(this));
00050 setEditTriggers(QAbstractItemView::NoEditTriggers);
00051
00052
00053
00054
00055 setFrameShape(QFrame::StyledPanel);
00056 setFrameShadow(QFrame::Raised);
00057 setLineWidth(1);
00058 setMidLineWidth(0);
00059
00060
00061 setMaximumWidth(160);
00062 setMinimumWidth(160);
00063 setMinimumHeight(300);
00064
00065 verticalScrollBar()->setPageStep(3);
00066 verticalScrollBar()->setSingleStep(1);
00067
00068 model_ = new QStandardItemModel(this);
00069 setModel(model_);
00070 }
00071
00072 void NavigationWidget::setNavs(const QList<QString>& navs)
00073 {
00074 setModel(NULL);
00075 model_->clear();
00076
00077 for (int i = 0; i < navs.size(); i++)
00078 {
00079 QStandardItem* item = new QStandardItem();
00080 item->setData(QVariant::fromValue(navs.at(i)), Qt::DisplayRole);
00081 item->setFlags(Qt::NoItemFlags);
00082 model_->appendRow(item);
00083 }
00084
00085 setModel(model_);
00086 }
00087
00088 void NavigationWidget::setEnabled(const int& index, bool enabled)
00089 {
00090 if (enabled)
00091 model_->item(index)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsDragEnabled |
00092 Qt::ItemIsDropEnabled | Qt::ItemIsEnabled);
00093 else
00094 model_->item(index)->setFlags(Qt::NoItemFlags);
00095 }
00096
00097 void NavigationWidget::setSelected(const int& index)
00098 {
00099
00100 setEnabled(index, true);
00101
00102
00103 QModelIndex top = model_->index(index, 0, QModelIndex());
00104 QModelIndex bottom = model_->index(index, 0, QModelIndex());
00105
00106 QItemSelection selection(top, bottom);
00107 selectionModel()->reset();
00108 selectionModel()->select(selection, QItemSelectionModel::Select);
00109 }
00110
00111
00112
00113
00114
00115 NavDelegate::NavDelegate(QObject* parent) : QStyledItemDelegate(parent)
00116 {
00117 }
00118
00119 QSize NavDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const
00120 {
00121 return QSize(option.rect.width(), 45);
00122 }
00123
00124 void NavDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
00125 {
00126 const bool isSelected = option.state & QStyle::State_Selected;
00127
00128
00129 QString nav_name = index.data().value<QString>();
00130
00131 painter->save();
00132
00133 QLinearGradient backgroundGradient(QPoint(option.rect.x(), option.rect.y()),
00134 QPoint(option.rect.x(), option.rect.y() + option.rect.height()));
00135 if (isSelected)
00136 {
00137 backgroundGradient.setColorAt(0, QColor(109, 164, 219));
00138 backgroundGradient.setColorAt(1, QColor(61, 138, 212));
00139 painter->fillRect(option.rect, QBrush(backgroundGradient));
00140 }
00141 else
00142 {
00143 backgroundGradient.setColorAt(0, QColor(245, 245, 245));
00144 backgroundGradient.setColorAt(1, QColor(240, 240, 240));
00145 painter->fillRect(option.rect, QBrush(backgroundGradient));
00146 }
00147
00148 painter->setPen(QColor(225, 225, 225));
00149 if (isSelected)
00150 {
00151 painter->setPen(QColor(37, 105, 169));
00152 painter->drawLine(option.rect.bottomLeft(), option.rect.bottomRight());
00153 painter->setPen(Qt::transparent);
00154 }
00155 painter->drawLine(option.rect.topLeft(), option.rect.topRight());
00156 if (!isSelected)
00157 {
00158 painter->setPen(QColor(248, 248, 248));
00159 painter->drawLine(QPoint(option.rect.x(), option.rect.y() + 1),
00160 QPoint(option.rect.x() + option.rect.width(), option.rect.y() + 1));
00161 }
00162
00163 QRect textRect(option.rect.x() + 10, option.rect.y(), option.rect.width() - 10, option.rect.height());
00164
00165 QFont textFont(painter->font());
00166 textFont.setPixelSize(14);
00167 textFont.setFamily("Arial");
00168 painter->setFont(textFont);
00169
00170
00171 if (isSelected)
00172 {
00173
00174 painter->setPen(QColor(229, 229, 229));
00175 }
00176 else if (index.flags().testFlag(Qt::NoItemFlags))
00177 {
00178
00179 painter->setPen(QColor(170, 170, 170));
00180 }
00181 else
00182 {
00183
00184 painter->setPen(QColor(69, 69, 69));
00185 }
00186
00187 painter->drawText(textRect, Qt::AlignLeft | Qt::AlignVCenter, nav_name);
00188
00189 painter->restore();
00190 }
00191 }