#include "yacreader_library_list_widget.h" #include "yacreader_library_item_widget.h" #include #include #include #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(layout()); YACReaderLibraryItemWidget *library = new YACReaderLibraryItemWidget(name, path, this); connect(library, &YACReaderLibraryItemWidget::showOptions, this, &YACReaderLibraryListWidget::showContextMenu); QList::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::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(layout()); mainLayout->insertWidget(i, itemWidget); currentLibraryIndex = i; }