yacreader/custom_widgets/yacreader_library_list_widget.cpp
2021-10-19 00:00:09 +02:00

121 lines
3.7 KiB
C++

#include "yacreader_library_list_widget.h"
#include "yacreader_library_item_widget.h"
#include <QVBoxLayout>
#include <QMouseEvent>
#include <QMenu>
#include "qnaturalsorting.h"
YACReaderLibraryListWidget::YACReaderLibraryListWidget(QWidget *parent)
: QWidget(parent), currentLibraryIndex(-1)
{
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->setSpacing(0);
mainLayout->setContentsMargins(0, 0, 0, 0);
this->setLayout(mainLayout);
}
void YACReaderLibraryListWidget::addItem(QString name, QString path)
{
QVBoxLayout *mainLayout = dynamic_cast<QVBoxLayout *>(layout());
YACReaderLibraryItemWidget *library = new YACReaderLibraryItemWidget(name, path, this);
connect(library, &YACReaderLibraryItemWidget::showOptions, this, &YACReaderLibraryListWidget::showContextMenu);
QList<YACReaderLibraryItemWidget *>::iterator itr;
int i = 0;
for (itr = librariesList.begin(); itr != librariesList.end() && !naturalSortLessThanCI(name, (*itr)->name); itr++)
i++;
librariesList.insert(itr, library);
// connect(library,SIGNAL(selected(QString,QString)),this,SIGNAL(librarySelected(QString,QString)));
// connect(library,SIGNAL(selected(QString,QString)),this,SLOT(updateLibraries(QString,QString)));
mainLayout->insertWidget(i, library);
}
QString YACReaderLibraryListWidget::currentText()
{
return librariesList.at(currentLibraryIndex)->name;
}
int YACReaderLibraryListWidget::findText(QString text)
{
for (int i = 0; i < librariesList.count(); i++) {
if (librariesList.at(i)->name == text)
return i;
}
return -1;
}
void YACReaderLibraryListWidget::setCurrentIndex(int index)
{
if (index >= 0 && index < librariesList.count()) {
librariesList.at(index)->select();
currentLibraryIndex = index;
deselectAllBut(index);
emit currentIndexChanged(librariesList.at(currentLibraryIndex)->name);
}
}
int YACReaderLibraryListWidget::currentIndex()
{
return currentLibraryIndex;
}
void YACReaderLibraryListWidget::removeItem(int index)
{
YACReaderLibraryItemWidget *itemWidget = librariesList.at(index);
this->layout()->removeWidget(itemWidget);
librariesList.removeAt(index);
if (librariesList.count() > 0) {
setCurrentIndex(0);
}
delete itemWidget;
}
void YACReaderLibraryListWidget::mousePressEvent(QMouseEvent *event)
{
if (librariesList.count() > 0) {
int h = librariesList.at(0)->height();
int item = event->pos().y() / h;
if (item != currentLibraryIndex) {
setCurrentIndex(item);
}
}
}
void YACReaderLibraryListWidget::deselectAllBut(int index)
{
for (int i = 0; i < librariesList.count(); i++) {
if (i != index)
librariesList.at(i)->deselect();
}
}
void YACReaderLibraryListWidget::showContextMenu()
{
YACReaderLibraryItemWidget *itemWidget = librariesList.at(currentLibraryIndex);
QMenu::exec(actions(), itemWidget->mapToGlobal(QPoint(itemWidget->width() - 8, itemWidget->height() / 2)));
}
void YACReaderLibraryListWidget::renameCurrentLibrary(QString newName)
{
YACReaderLibraryItemWidget *itemWidget = librariesList.at(currentLibraryIndex);
this->layout()->removeWidget(itemWidget);
librariesList.removeOne(itemWidget);
itemWidget->setName(newName);
QList<YACReaderLibraryItemWidget *>::iterator itr;
int i = 0;
for (itr = librariesList.begin(); itr != librariesList.end() && !naturalSortLessThanCI(newName, (*itr)->name); itr++)
i++;
librariesList.insert(itr, itemWidget);
QVBoxLayout *mainLayout = dynamic_cast<QVBoxLayout *>(layout());
mainLayout->insertWidget(i, itemWidget);
currentLibraryIndex = i;
}