yacreader/custom_widgets/yacreader_sidebar.cpp
2018-07-30 15:04:04 +02:00

204 lines
5.7 KiB
C++

#include "yacreader_sidebar.h"
#include <QPainter>
#include <QLayout>
#include "yacreader_folders_view.h"
#include "yacreader_reading_lists_view.h"
#include "yacreader_library_list_widget.h"
#include "yacreader_search_line_edit.h"
#include "yacreader_titled_toolbar.h"
#include "yacreader_global_gui.h"
YACReaderSideBar::YACReaderSideBar(QWidget *parent) :
QWidget(parent)
{
setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Minimum);
settings = new QSettings(YACReader::getSettingsPath()+"/YACReaderLibrary.ini",QSettings::IniFormat); //TODO unificar la creación del fichero de config con el servidor
settings->beginGroup("libraryConfig");
//widgets
foldersView = new YACReaderFoldersView;
readingListsView = new YACReaderReadingListsView;
selectedLibrary = new YACReaderLibraryListWidget;
#ifdef Q_OS_MAC
librariesTitle = new YACReaderTitledToolBar(tr("Libraries"));
foldersTitle = new YACReaderTitledToolBar(tr("Folders"));
readingListsTitle = new YACReaderTitledToolBar(tr("Reading Lists"));
#else
librariesTitle = new YACReaderTitledToolBar(tr("LIBRARIES"));
foldersTitle = new YACReaderTitledToolBar(tr("FOLDERS"));
readingListsTitle = new YACReaderTitledToolBar(tr("READING LISTS"));
#endif
splitter = new QSplitter(this);
splitter->setOrientation(Qt::Vertical);
#ifndef Q_OS_MAC
splitter->setStyleSheet("QSplitter::handle { "
" image: none; background-color = black; "
" }"
"QSplitter::handle:vertical { height: 39px;}");
#else
splitter->setStyleSheet("QSplitter::handle:vertical { height: 26px; background-color: transparent;}");
#endif
selectedLibrary->setContextMenuPolicy(Qt::ActionsContextMenu);
selectedLibrary->setAttribute(Qt::WA_MacShowFocusRect,false);
selectedLibrary->setFocusPolicy(Qt::NoFocus);
//layout
QVBoxLayout * l = new QVBoxLayout;
l->setContentsMargins(0,0,0,0);
//LIBRARIES-------------------------------------------------------
#ifndef Q_OS_MAC
l->addSpacing(5);
#endif
l->addWidget(librariesTitle);
#ifndef Q_OS_MAC
l->addSpacing(4);
l->addWidget(new YACReaderSideBarSeparator(this));
l->addSpacing(3);
#endif
l->addWidget(selectedLibrary);
#ifndef Q_OS_MAC
l->addSpacing(11);
#else
l->addSpacing(6);
#endif
//END LIBRARIES---------------------------------------------------
//FOLDERS---------------------------------------------------------
QWidget * foldersContainer = new QWidget(this);
QVBoxLayout * foldersLayout = new QVBoxLayout;
foldersLayout->setContentsMargins(0,0,0,0);
foldersLayout->setSpacing(0);
#ifndef Q_OS_MAC
//foldersLayout->addSpacing(6);
//foldersLayout->addSpacing(5);
foldersLayout->addWidget(new YACReaderSideBarSeparator(this));
foldersLayout->addSpacing(4);
#else
//foldersLayout->addSpacing(6);
#endif
foldersLayout->addWidget(foldersTitle);
#ifndef Q_OS_MAC
foldersLayout->addSpacing(4);
foldersLayout->addWidget(new YACReaderSideBarSeparator(this));
foldersLayout->addSpacing(4);
#endif
foldersLayout->addWidget(foldersView);
foldersLayout->addSpacing(6);
foldersContainer->setLayout(foldersLayout);
splitter->addWidget(foldersContainer);
//END FOLDERS------------------------------------------------------
//READING LISTS----------------------------------------------------
splitter->addWidget(readingListsView);
QVBoxLayout * readingListsHeaderLayout = new QVBoxLayout;
readingListsHeaderLayout->setContentsMargins(0,0,0,0);
readingListsHeaderLayout->setSpacing(0);
#ifndef Q_OS_MAC
//readingListsHeaderLayout->addSpacing(6);
//readingListsHeaderLayout->addSpacing(5);
readingListsHeaderLayout->addWidget(new YACReaderSideBarSeparator(this));
readingListsHeaderLayout->addSpacing(4);
#else
//readingListsHeaderLayout->addSpacing(6);
#endif
readingListsHeaderLayout->addWidget(readingListsTitle);
#ifndef Q_OS_MAC
readingListsHeaderLayout->addSpacing(4);
readingListsHeaderLayout->addWidget(new YACReaderSideBarSeparator(this));
readingListsHeaderLayout->addSpacing(4);
#endif
//readingListsLayout->addWidget(readingListsView);
readingListsHeaderLayout->addStretch();
QSplitterHandle * handle = splitter->handle(1);
//handle->setCursor(QCursor(Qt::ArrowCursor));
handle->setLayout(readingListsHeaderLayout);
//END READING LISTS------------------------------------------------
l->addWidget(splitter);
l->setSpacing(0);
setLayout(l);
if(settings->contains(SIDEBAR_SPLITTER_STATUS))
splitter->restoreState(settings->value(SIDEBAR_SPLITTER_STATUS).toByteArray());
}
void YACReaderSideBar::paintEvent(QPaintEvent * event)
{
Q_UNUSED(event)
#ifdef Q_OS_MAC
QPainter painter(this);
painter.fillRect(0,0,width(),height(),QColor("#F1F1F1"));
#else
QPainter painter(this);
painter.fillRect(0,0,width(),height(),QColor("#454545"));
//QWidget::paintEvent(event);
#endif
//QPixmap shadow(":/images/side_bar/shadow.png");
//painter.drawPixmap(width()-shadow.width(),0,shadow.width(),height(),shadow);
// painter.setRenderHint(QPainter::Antialiasing);
// painter.drawLine(rect().topLeft(), rect().bottomRight());
//QWidget::paintEvent(event);
}
void YACReaderSideBar::closeEvent(QCloseEvent *event)
{
QWidget::closeEvent(event);
settings->setValue(SIDEBAR_SPLITTER_STATUS, splitter->saveState());
}
QSize YACReaderSideBar::sizeHint() const
{
return QSize(275,200);
}
YACReaderSideBarSeparator::YACReaderSideBarSeparator(QWidget *parent)
:QWidget(parent)
{
setFixedHeight(1);
}
void YACReaderSideBarSeparator::paintEvent(QPaintEvent * event)
{
Q_UNUSED(event)
QPainter painter(this);
painter.fillRect(5,0,width()-10,height(),QColor("#575757"));
}