view src/sidebar.cpp @ 8:b1f73678ef61

update text paragraphs are now their own objects, as they should be
author Paper <mrpapersonic@gmail.com>
date Sat, 26 Aug 2023 03:39:34 -0400
parents 07a9095eaeed
children
line wrap: on
line source

#include "sidebar.h"
#include <QListWidget>
#include <QListWidgetItem>
#include <QFrame>
#include <QMouseEvent>
#include <QMessageBox>

SideBar::SideBar(QWidget *parent)
    : QListWidget(parent)
{
	setObjectName("sidebar");
	setFrameShape(QFrame::NoFrame);
    setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
	setSelectionMode(QAbstractItemView::SingleSelection);
	setSelectionBehavior(QAbstractItemView::SelectItems);
	setMouseTracking(true);
	viewport()->setAutoFillBackground(false);
	setStyleSheet("font-size: 12px");
	connect(this, &QListWidget::currentRowChanged, this, [this](int index){
		emit CurrentItemChanged(RemoveSeparatorsFromIndex(index));
	});
}

QListWidgetItem* SideBar::AddItem(QString name, QIcon icon) {
    QListWidgetItem* item = new QListWidgetItem(this);
    item->setText(name);
	if (!icon.isNull())
		item->setIcon(icon);
	return item;
}

QListWidgetItem* SideBar::AddSeparator() {
	QListWidgetItem* item = new QListWidgetItem(this);
	setStyleSheet("QListWidget::item:disabled {background: transparent;}");
	QFrame* line = new QFrame(this);
	line->setFrameShape(QFrame::HLine);
	line->setFrameShadow(QFrame::Sunken);
	line->setMouseTracking(true);
	line->setEnabled(false);
	setItemWidget(item, line);
	item->setFlags(Qt::NoItemFlags);
	return item;
}

int SideBar::RemoveSeparatorsFromIndex(int index) {
	int i, j;
	for (i = 0, j = 0; i < index; i++) {
		if (!IndexIsSeparator(indexFromItem(item(i)))) j++;
	}
	return j;
}

bool SideBar::IndexIsSeparator(QModelIndex index) const {
	return !(index.isValid() && index.flags() & Qt::ItemIsEnabled);
}

QItemSelectionModel::SelectionFlags SideBar::selectionCommand(const QModelIndex & index,
                                                              const QEvent * event) const {
	if (IndexIsSeparator(index))
		return QItemSelectionModel::NoUpdate;
	return QItemSelectionModel::ClearAndSelect;
	/* silence unused parameter warnings */
	(void)event;
}

void SideBar::mouseMoveEvent(QMouseEvent *event) {
	if (!IndexIsSeparator(indexAt(event->pos())))
		setCursor(Qt::PointingHandCursor);
	else
		unsetCursor();
	QListView::mouseMoveEvent(event);
}

#include "moc_sidebar.cpp"