#include "UBLibNavigatorWidget.h" #include "UBLibPalette.h" static int lowBoundForSlider = 40; static int topBoundForSlider = 120; static int tickIntervalForSlider = 10; /** * \brief Constructor * @param parent as the parent widget * @param name as the object name */ UBLibNavigatorWidget::UBLibNavigatorWidget(QWidget *parent, const char *name):QWidget(parent) , mLayout(NULL) , mLibWidget(NULL) , mPathViewer(NULL) , mSlider(NULL) , mSliderWidthSetting(NULL) { setObjectName(name); setAcceptDrops(true); UBLibPalette* pLibPalette = dynamic_cast(parentWidget()); mLayout = new QVBoxLayout(this); setLayout(mLayout); mPathViewer = new UBLibPathViewer(this); mPathViewer->setMaximumHeight(62); mLayout->addWidget(mPathViewer, 0); mLibWidget = new UBLibraryWidget(this); mLayout->addWidget(mLibWidget, 1); mSlider = new QSlider(Qt::Horizontal, this); mSlider->setMinimumHeight(20); mSlider->setStyleSheet(QString("QSlider::handle::horizontal{background-color:#EEEEEE; margin-top:-5px; margin-bottom:-5px; height:20px; width:18px; border-radius:10px; border:1px solid #555555;} QSlider::groove::horizontal{background-color:#999999; height:10px; border-radius:5px; border:1px solid #555555;}")); mSlider->setRange(lowBoundForSlider, topBoundForSlider); mSliderWidthSetting = new UBSetting(UBSettings::settings(), "Library", "LibWidgetWidth", topBoundForSlider); int defaultWidth = mSliderWidthSetting->get().toInt(); mSlider->setValue(defaultWidth); mSlider->setTickInterval(tickIntervalForSlider); mLayout->addWidget(mSlider, 0); mLibWidget->updateThumbnailsSize(defaultWidth); connect(mLibWidget, SIGNAL(navigBarUpdate(UBLibElement*)), this, SLOT(onNavigbarUpate(UBLibElement*))); connect(mLibWidget, SIGNAL(propertiesRequested(UBLibElement*)), this, SLOT(onPropertiesRequested(UBLibElement*))); connect(mPathViewer, SIGNAL(mouseClick(UBChainedLibElement*)), this, SLOT(onPathItemClicked(UBChainedLibElement*))); connect(mSlider,SIGNAL(valueChanged(int)),this,SLOT(updateThumbnailsSize(int))); connect(mPathViewer, SIGNAL(elementsDropped(QList,UBLibElement*)), mLibWidget, SLOT(onElementsDropped(QList,UBLibElement*))); if(NULL != pLibPalette) { connect(mLibWidget, SIGNAL(navigBarUpdate(UBLibElement*)), pLibPalette->actionBar(), SLOT(onNavigbarUpdate(UBLibElement*))); connect(mLibWidget, SIGNAL(itemsSelected(QList, bool)), pLibPalette->actionBar(), SLOT(onSelectionChanged(QList, bool))); connect(pLibPalette->actionBar(), SIGNAL(deleteDone()), mLibWidget, SLOT(onRefreshCurrentFolder())); connect(mLibWidget, SIGNAL(favoritesEntered(bool)), pLibPalette->actionBar(), SLOT(onFavoritesEntered(bool))); connect(pLibPalette->actionBar(), SIGNAL(searchElement(QString)), mLibWidget, SLOT(onSearchElement(QString))); connect(pLibPalette->actionBar(), SIGNAL(newFolderToCreate()), mLibWidget, SLOT(onNewFolderToCreate())); } mLibWidget->init(); } /** * \brief Destructor */ UBLibNavigatorWidget::~UBLibNavigatorWidget() { if(NULL != mLayout) { delete mLayout; mLayout = NULL; } if(NULL != mLibWidget) { delete mLibWidget; mLibWidget = NULL; } if(NULL != mPathViewer) { delete mPathViewer; mPathViewer = NULL; } if(NULL != mSlider) { delete mSlider; mSlider = NULL; } if(NULL != mSliderWidthSetting) { delete mSliderWidthSetting; mSliderWidthSetting = NULL; } } void UBLibNavigatorWidget::dropMe(const QMimeData *_data) { // Forward the mime data to the library widget } /** * \brief Update the navigation bar * @param pElem as the current element */ void UBLibNavigatorWidget::onNavigbarUpate(UBLibElement *pElem) { if(NULL != pElem) { // Refresh the path navigator mPathViewer->displayPath(mLibWidget->chainedElements); // Show the path navigator mPathViewer->show(); } } /** * \brief Handle the click event on an item * @param elem as the clicked element */ void UBLibNavigatorWidget::onPathItemClicked(UBChainedLibElement *elem) { // If this element has some subelement, remove them removeNextChainedElements(elem); // The refresh the view mLibWidget->setCurrentElemsAndRefresh(elem); } /** * \brief Remove the next chained elements * @param fromElem as the current elem */ void UBLibNavigatorWidget::removeNextChainedElements(UBChainedLibElement *fromElem) { if(NULL != fromElem) { if(NULL != fromElem->nextElement()) { removeNextChainedElements(fromElem->nextElement()); delete fromElem->nextElement(); fromElem->setNextElement(NULL); } } } /** * \brief Handles the properties requested event * @param elem as tje related element */ void UBLibNavigatorWidget::onPropertiesRequested(UBLibElement *elem) { emit propertiesRequested(elem); } /** * \brief Update the thumbnails size * @param newSize as the given thumbnails size */ void UBLibNavigatorWidget::updateThumbnailsSize(int newSize) { mSliderWidthSetting->set(newSize); mLibWidget->updateThumbnailsSize(newSize); }