mirror of
https://github.com/YACReader/yacreader
synced 2025-05-25 18:00:46 -04:00
121 lines
3.7 KiB
C++
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;
|
|
}
|