mirror of
https://github.com/YACReader/yacreader
synced 2025-05-28 03:10:27 -04:00
129 lines
3.5 KiB
C++
129 lines
3.5 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->setMargin(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,SIGNAL(showOptions()),this,SLOT(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;
|
|
}
|