38 #include <QApplication>
41 #include <QStandardItemModel>
52 setItemDelegate(
new NavDelegate(
this));
53 setEditTriggers(QAbstractItemView::NoEditTriggers);
58 setFrameShape(QFrame::StyledPanel);
59 setFrameShadow(QFrame::Raised);
66 setMinimumHeight(300);
68 verticalScrollBar()->setPageStep(3);
69 verticalScrollBar()->setSingleStep(1);
71 model_ =
new QStandardItemModel(
this);
75 void NavigationWidget::setNavs(
const QList<QString>& navs)
80 for (
const QString& nav : navs)
82 QStandardItem* item =
new QStandardItem();
83 item->setData(QVariant::fromValue(nav), Qt::DisplayRole);
84 item->setFlags(Qt::NoItemFlags);
85 model_->appendRow(item);
91 void NavigationWidget::setEnabled(
const int index,
bool enabled)
94 model_->item(index)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsDragEnabled |
95 Qt::ItemIsDropEnabled | Qt::ItemIsEnabled);
97 model_->item(index)->setFlags(Qt::NoItemFlags);
100 void NavigationWidget::setSelected(
const int index)
103 setEnabled(index,
true);
106 QModelIndex top = model_->index(index, 0, QModelIndex());
107 QModelIndex bottom = model_->index(index, 0, QModelIndex());
109 QItemSelection selection(top, bottom);
110 selectionModel()->reset();
111 selectionModel()->select(selection, QItemSelectionModel::Select);
118 NavDelegate::NavDelegate(QObject* parent) : QStyledItemDelegate(parent)
124 return QSize(option.rect.width(), 45);
127 void NavDelegate::paint(QPainter* painter,
const QStyleOptionViewItem& option,
const QModelIndex& index)
const
129 const bool is_selected = option.state & QStyle::State_Selected;
130 const QPalette& palette = QApplication::palette();
132 QString nav_name = displayText(
index.data(), option.locale);
137 QLinearGradient background_gradient(option.rect.topLeft(), option.rect.bottomLeft());
140 background_gradient.setColorAt(0, palette.color(QPalette::Highlight).lighter(125));
141 background_gradient.setColorAt(1, palette.color(QPalette::Highlight));
142 painter->fillRect(option.rect, QBrush(background_gradient));
146 background_gradient.setColorAt(0, palette.color(QPalette::Light));
147 background_gradient.setColorAt(1, palette.color(QPalette::Light).darker(105));
148 painter->fillRect(option.rect, QBrush(background_gradient));
153 painter->setPen(palette.color(QPalette::Button));
154 painter->drawLine(option.rect.topLeft(), option.rect.topRight());
155 painter->setPen(palette.color(QPalette::Light));
156 const QPoint offset(0, 1);
157 painter->drawLine(option.rect.topLeft() + offset, option.rect.topRight() + offset);
160 QRect text_rect(option.rect.x() + 10, option.rect.y(), option.rect.width() - 10, option.rect.height());
161 QFont text_font(painter->font());
162 text_font.setPixelSize(14);
163 painter->setFont(text_font);
167 painter->setPen(palette.color(QPalette::HighlightedText));
168 else if (!option.state.testFlag(QStyle::State_Enabled))
169 painter->setPen(palette.color(QPalette::Dark));
171 painter->setPen(palette.color(QPalette::ButtonText));
173 painter->drawText(text_rect, Qt::AlignLeft | Qt::AlignVCenter, nav_name);