#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->setMargin(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,SIGNAL(showOptions()),this,SLOT(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;iname == 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;ideselect(); } } 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; }