Implemented dock palette tab position related to the toolbar position

preferencesAboutTextFull
shibakaneki 13 years ago
parent 2e64955612
commit e812ebb92e
  1. 1
      src/core/UBPreferencesController.cpp
  2. 80
      src/gui/UBDockPalette.cpp
  3. 16
      src/gui/UBDockPalette.h
  4. 1
      src/gui/UBLibNavigatorWidget.cpp
  5. 2
      src/gui/UBLibPalette.cpp
  6. 926
      src/gui/UBLibPathViewer.cpp
  7. 3
      src/gui/UBNavigatorPalette.cpp

@ -451,6 +451,7 @@ void UBPreferencesController::toolbarPositionChanged(bool checked)
UBSettings* settings = UBSettings::settings(); UBSettings* settings = UBSettings::settings();
settings->appToolBarPositionedAtTop->set(mPreferencesUI->toolbarAtTopRadioButton->isChecked()); settings->appToolBarPositionedAtTop->set(mPreferencesUI->toolbarAtTopRadioButton->isChecked());
} }
void UBPreferencesController::toolbarOrientationVertical(bool checked) void UBPreferencesController::toolbarOrientationVertical(bool checked)

@ -19,9 +19,27 @@
#include "UBDockPalette.h" #include "UBDockPalette.h"
#include "core/UBSettings.h" #include "core/UBSettings.h"
#include "frameworks/UBPlatformUtils.h" #include "frameworks/UBPlatformUtils.h"
#include "core/UBApplication.h"
#include "core/UBPreferencesController.h"
#include "core/memcheck.h" #include "core/memcheck.h"
/*
Note to myself: I will have to modify this implementation when we will
have to support mulitple tab. At this moment, a UBDockPalette
will be only the palette that manages the tabs. This
palette will maintain a list of tabs with icons and will
contain a QStackedWidget that will be contains the different
widget contents.
A click on a tab that is not related to the current widget
will show the related widget in the palette.
A click on a tab that is related to the current widget will
collapse the palette.
If the palette is collapsed, a click on any tab will expand it
and show the tab related widget.
*/
/** /**
* \brief The constructor * \brief The constructor
*/ */
@ -34,11 +52,12 @@ UBDockPalette::UBDockPalette(QWidget *parent, const char *name)
, mResized(false) , mResized(false)
, mCollapseWidth(150) , mCollapseWidth(150)
, mLastWidth(-1) , mLastWidth(-1)
, mHTab(0)
{ {
setObjectName(name); setObjectName(name);
// We let 2 pixels in order to keep a small border for the resizing // We let 2 pixels in order to keep a small border for the resizing
setMinimumWidth(border() + 2); setMinimumWidth(2*border() + 2);
if (parent) if (parent)
{ {
@ -61,6 +80,10 @@ UBDockPalette::UBDockPalette(QWidget *parent, const char *name)
// This is the only way to set the background as transparent! // This is the only way to set the background as transparent!
setStyleSheet("QWidget {background-color: transparent}"); setStyleSheet("QWidget {background-color: transparent}");
// Set the position of the tab
onToolbarPosUpdated();
connect(UBSettings::settings()->appToolBarPositionedAtTop, SIGNAL(changed(QVariant)), this, SLOT(onToolbarPosUpdated()));
} }
/** /**
@ -206,9 +229,9 @@ void UBDockPalette::mouseReleaseEvent(QMouseEvent *event)
if(eUBDockOrientation_Left == mOrientation) if(eUBDockOrientation_Left == mOrientation)
{ {
if(mMousePressPos.x() >= width() - 2*border() && if(mMousePressPos.x() >= width() - 2*border() &&
mMousePressPos.y() >= border() && mMousePressPos.y() >= mHTab &&
mMousePressPos.x() <= width() && mMousePressPos.x() <= width() &&
mMousePressPos.y() <= border() + TABSIZE) mMousePressPos.y() <= mHTab + TABSIZE)
{ {
tabClicked(); tabClicked();
} }
@ -217,8 +240,8 @@ void UBDockPalette::mouseReleaseEvent(QMouseEvent *event)
{ {
if(mMousePressPos.x() >= 0 && if(mMousePressPos.x() >= 0 &&
mMousePressPos.x() <= 2*border() && mMousePressPos.x() <= 2*border() &&
mMousePressPos.y() >= border() && mMousePressPos.y() >= mHTab &&
mMousePressPos.y() <= border() + TABSIZE) mMousePressPos.y() <= mHTab + TABSIZE)
{ {
tabClicked(); tabClicked();
} }
@ -291,23 +314,32 @@ void UBDockPalette::paintEvent(QPaintEvent *event)
painter.setPen(Qt::NoPen); painter.setPen(Qt::NoPen);
painter.setBrush(mBackgroundBrush); painter.setBrush(mBackgroundBrush);
if(eUBDockTabOrientation_Up == mTabsOrientation)
{
mHTab = border();
}
else
{
mHTab = height() - border() - TABSIZE;
}
if(mOrientation == eUBDockOrientation_Left) if(mOrientation == eUBDockOrientation_Left)
{ {
QPainterPath path; QPainterPath path;
path.setFillRule(Qt::WindingFill); path.setFillRule(Qt::WindingFill);
path.addRect(0.0, 0.0, width()-border(), height()); path.addRect(0.0, 0.0, width()-2*border(), height());
path.addRoundedRect(width()-2*border(), border(), 2*border(), TABSIZE, radius(), radius()); path.addRoundedRect(width()-4*border(), mHTab, 4*border(), TABSIZE, radius(), radius());
painter.drawPath(path); painter.drawPath(path);
painter.drawPixmap(width() - border() + 1, border() + 1 , border() - 4, TABSIZE - 2, mIcon); painter.drawPixmap(width() - border() + 1, mHTab + 1 , border() - 4, TABSIZE - 2, mIcon);
} }
else if(mOrientation == eUBDockOrientation_Right) else if(mOrientation == eUBDockOrientation_Right)
{ {
QPainterPath path; QPainterPath path;
path.setFillRule(Qt::WindingFill); path.setFillRule(Qt::WindingFill);
path.addRect(border(), 0.0, width()-border(), height()); path.addRect(2*border(), 0.0, width()-2*border(), height());
path.addRoundedRect(0.0, border(), 2*border(), TABSIZE, radius(), radius()); path.addRoundedRect(0.0, mHTab, 4*border(), TABSIZE, radius(), radius());
painter.drawPath(path); painter.drawPath(path);
painter.drawPixmap(2, border() + 1, border() - 3, TABSIZE - 2, mIcon); painter.drawPixmap(2, mHTab + 1, border() - 3, TABSIZE - 2, mIcon);
} }
else else
{ {
@ -372,7 +404,7 @@ void UBDockPalette::tabClicked()
{ {
// The palette must be collapsed // The palette must be collapsed
mLastWidth = width(); mLastWidth = width();
resize(border(), height()); resize(2*border(), height());
} }
else else
{ {
@ -381,3 +413,27 @@ void UBDockPalette::tabClicked()
mLastWidth = -1; mLastWidth = -1;
} }
} }
void UBDockPalette::setTabsOrientation(eUBDockTabOrientation orientation)
{
mTabsOrientation = orientation;
}
void UBDockPalette::onToolbarPosUpdated()
{
// Get the position of the tab
if(UBSettings::settings()->appToolBarPositionedAtTop->get().toBool())
{
setTabsOrientation(eUBDockTabOrientation_Up);
}
else
{
setTabsOrientation(eUBDockTabOrientation_Down);
}
update();
}
int UBDockPalette::customMargin()
{
return 5;
}

@ -39,14 +39,22 @@ typedef enum
eUBDockOrientation_Bottom /** [to be implemented]Bottom dock */ eUBDockOrientation_Bottom /** [to be implemented]Bottom dock */
}eUBDockOrientation; }eUBDockOrientation;
typedef enum
{
eUBDockTabOrientation_Up, /** Up tabs */
eUBDockTabOrientation_Down /** Down tabs */
}eUBDockTabOrientation;
class UBDockPalette : public QWidget class UBDockPalette : public QWidget
{ {
Q_OBJECT
public: public:
UBDockPalette(QWidget* parent=0, const char* name="UBDockPalette"); UBDockPalette(QWidget* parent=0, const char* name="UBDockPalette");
~UBDockPalette(); ~UBDockPalette();
eUBDockOrientation orientation(); eUBDockOrientation orientation();
void setOrientation(eUBDockOrientation orientation); void setOrientation(eUBDockOrientation orientation);
void setTabsOrientation(eUBDockTabOrientation orientation);
virtual void mouseMoveEvent(QMouseEvent *event); virtual void mouseMoveEvent(QMouseEvent *event);
virtual void mousePressEvent(QMouseEvent *event); virtual void mousePressEvent(QMouseEvent *event);
@ -60,6 +68,7 @@ public:
protected: protected:
virtual int border(); virtual int border();
virtual int radius(); virtual int radius();
virtual int customMargin();
virtual void updateMaxWidth(); virtual void updateMaxWidth();
virtual void resizeEvent(QResizeEvent *event); virtual void resizeEvent(QResizeEvent *event);
virtual int collapseWidth(); virtual int collapseWidth();
@ -86,6 +95,13 @@ protected:
QPoint mMousePressPos; QPoint mMousePressPos;
/** The palette icon */ /** The palette icon */
QPixmap mIcon; QPixmap mIcon;
/** The tab orientation */
eUBDockTabOrientation mTabsOrientation;
/** The h position of the tab */
int mHTab;
private slots:
void onToolbarPosUpdated();
private: private:
void tabClicked(); void tabClicked();

@ -39,6 +39,7 @@ UBLibNavigatorWidget::UBLibNavigatorWidget(QWidget *parent, const char *name):QW
UBLibPalette* pLibPalette = dynamic_cast<UBLibPalette*>(parentWidget()); UBLibPalette* pLibPalette = dynamic_cast<UBLibPalette*>(parentWidget());
mLayout = new QVBoxLayout(this); mLayout = new QVBoxLayout(this);
// mLayout->setContentsMargins(20, 5, 5, 5);
setLayout(mLayout); setLayout(mLayout);
mPathViewer = new UBLibPathViewer(this); mPathViewer = new UBLibPathViewer(this);

@ -40,7 +40,7 @@ UBLibPalette::UBLibPalette(QWidget *parent, const char *name):UBDockPalette(pare
mLastWidth = 300; mLastWidth = 300;
mLayout = new QVBoxLayout(this); mLayout = new QVBoxLayout(this);
mLayout->setMargin(3); mLayout->setContentsMargins(20, customMargin(), customMargin(), customMargin());
setLayout(mLayout); setLayout(mLayout);
// Build the GUI // Build the GUI

@ -12,466 +12,466 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <QPixmap> #include <QPixmap>
#include <QDrag> #include <QDrag>
#include <QPainter> #include <QPainter>
#include "UBLibPathViewer.h" #include "UBLibPathViewer.h"
#include "core/UBApplication.h" #include "core/UBApplication.h"
#include "board/UBBoardController.h" #include "board/UBBoardController.h"
#include "core/memcheck.h" #include "core/memcheck.h"
/** /**
* \brief Constructor * \brief Constructor
* @param parent as the parent widget * @param parent as the parent widget
* @param name as the object name * @param name as the object name
*/ */
UBLibPathViewer::UBLibPathViewer(QWidget *parent, const char *name):QGraphicsView(parent) UBLibPathViewer::UBLibPathViewer(QWidget *parent, const char *name):QGraphicsView(parent)
, mpElems(NULL) , mpElems(NULL)
, mpScene(NULL) , mpScene(NULL)
, mpLayout(NULL) , mpLayout(NULL)
, mpContainer(NULL) , mpContainer(NULL)
{ {
setObjectName(name); setObjectName(name);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
setAcceptDrops(true); setAcceptDrops(true);
setStyleSheet(QString("QGraphicsView{background:#EEEEEE; border-radius:10px; border:2px solid #999999;}")); setStyleSheet(QString("QGraphicsView{background:#EEEEEE; border-radius:10px; border:2px solid #999999;}"));
mpScene = new UBPathScene(this); mpScene = new UBPathScene(this);
setScene(mpScene); setScene(mpScene);
mpContainer = new QGraphicsWidget(); mpContainer = new QGraphicsWidget();
mpContainer->setMinimumWidth(width() - 20); mpContainer->setMinimumWidth(width() - 20);
mpScene->addItem(mpContainer); mpScene->addItem(mpContainer);
mpLayout = new QGraphicsLinearLayout(); mpLayout = new QGraphicsLinearLayout();
mpContainer->setLayout(mpLayout); mpContainer->setLayout(mpLayout);
connect(mpScene, SIGNAL(mouseClick(UBChainedLibElement*)), this, SLOT(onMouseClicked(UBChainedLibElement*))); connect(mpScene, SIGNAL(mouseClick(UBChainedLibElement*)), this, SLOT(onMouseClicked(UBChainedLibElement*)));
connect(mpScene, SIGNAL(elementsDropped(QList<QString>,UBLibElement*)), this, SLOT(onElementsDropped(QList<QString>,UBLibElement*))); connect(mpScene, SIGNAL(elementsDropped(QList<QString>,UBLibElement*)), this, SLOT(onElementsDropped(QList<QString>,UBLibElement*)));
connect(horizontalScrollBar(), SIGNAL(sliderMoved(int)), this, SLOT(onSliderMoved(int))); connect(horizontalScrollBar(), SIGNAL(sliderMoved(int)), this, SLOT(onSliderMoved(int)));
} }
/** /**
* \brief Destructor * \brief Destructor
*/ */
UBLibPathViewer::~UBLibPathViewer() UBLibPathViewer::~UBLibPathViewer()
{ {
if(NULL != mpContainer) if(NULL != mpContainer)
{ {
delete mpContainer; delete mpContainer;
mpContainer = NULL; mpContainer = NULL;
} }
//if(NULL != mpLayout) //if(NULL != mpLayout)
//{ //{
// delete mpLayout; // delete mpLayout;
// mpLayout = NULL; // mpLayout = NULL;
//} //}
if(NULL != mpElems) if(NULL != mpElems)
{ {
delete mpElems; delete mpElems;
mpElems = NULL; mpElems = NULL;
} }
if(NULL != mpScene) if(NULL != mpScene)
{ {
delete mpScene; delete mpScene;
mpScene = NULL; mpScene = NULL;
} }
} }
/** /**
* \brief Display the current path * \brief Display the current path
* @param elementsChain as the path to display * @param elementsChain as the path to display
*/ */
void UBLibPathViewer::displayPath(UBChainedLibElement *elementsChain) void UBLibPathViewer::displayPath(UBChainedLibElement *elementsChain)
{ {
if(NULL != elementsChain) if(NULL != elementsChain)
{ {
mpElems = elementsChain; mpElems = elementsChain;
refreshPath(); refreshPath();
} }
} }
/** /**
* \brief Refresh the current path * \brief Refresh the current path
*/ */
void UBLibPathViewer::refreshPath() void UBLibPathViewer::refreshPath()
{ {
if (mpScene && mpContainer) if (mpScene && mpContainer)
mpScene->removeItem(mpContainer); mpScene->removeItem(mpContainer);
if(mpContainer) if(mpContainer)
delete mpContainer; delete mpContainer;
mVItems.clear(); mVItems.clear();
mpScene->mapWidgetToChainedElem()->clear(); mpScene->mapWidgetToChainedElem()->clear();
mpContainer = new QGraphicsWidget(); mpContainer = new QGraphicsWidget();
mpScene->addItem(mpContainer); mpScene->addItem(mpContainer);
mpLayout = new QGraphicsLinearLayout(); mpLayout = new QGraphicsLinearLayout();
mpContainer->setLayout(mpLayout); mpContainer->setLayout(mpLayout);
mSceneWidth = 0; mSceneWidth = 0;
addItem(mpElems); addItem(mpElems);
mpLayout->addStretch(); mpLayout->addStretch();
updateScrolls(); updateScrolls();
} }
/** /**
* \brief Handle the slider moved event * \brief Handle the slider moved event
* @param value as the current slider position * @param value as the current slider position
*/ */
void UBLibPathViewer::onSliderMoved(int value) void UBLibPathViewer::onSliderMoved(int value)
{ {
Q_UNUSED(value); Q_UNUSED(value);
} }
/** /**
* \brief Update the scroll bar status * \brief Update the scroll bar status
*/ */
void UBLibPathViewer::updateScrolls() void UBLibPathViewer::updateScrolls()
{ {
int iLimit = mSceneWidth + 40; // 2x 20 pixels margin int iLimit = mSceneWidth + 40; // 2x 20 pixels margin
int iVp = viewport()->width(); int iVp = viewport()->width();
if(iLimit >= iVp) if(iLimit >= iVp)
{ {
int iDiff = iLimit - iVp; int iDiff = iLimit - iVp;
horizontalScrollBar()->setRange(0, iDiff); horizontalScrollBar()->setRange(0, iDiff);
} }
else else
{ {
horizontalScrollBar()->setRange(0, 0); horizontalScrollBar()->setRange(0, 0);
} }
} }
/** /**
* \brief Append an item to the path * \brief Append an item to the path
* @param elem as the element to add to the path * @param elem as the element to add to the path
*/ */
void UBLibPathViewer::addItem(UBChainedLibElement *elem) void UBLibPathViewer::addItem(UBChainedLibElement *elem)
{ {
if(NULL != elem) if(NULL != elem)
{ {
// Add the icon // Add the icon
QLabel* pIconLabel = new QLabel(); QLabel* pIconLabel = new QLabel();
pIconLabel->setStyleSheet(QString("background-color: transparent;")); pIconLabel->setStyleSheet(QString("background-color: transparent;"));
pIconLabel->setPixmap((QPixmap::fromImage(*elem->element()->thumbnail())).scaledToWidth(PATHITEMWIDTH)); pIconLabel->setPixmap((QPixmap::fromImage(*elem->element()->thumbnail())).scaledToWidth(PATHITEMWIDTH));
UBFolderPath* iconWidget = reinterpret_cast<UBFolderPath*>(mpScene->addWidget(pIconLabel)); UBFolderPath* iconWidget = reinterpret_cast<UBFolderPath*>(mpScene->addWidget(pIconLabel));
//iconWidget->setToolTip(elem->element()->name()); //iconWidget->setToolTip(elem->element()->name());
iconWidget->setWindowFlags(Qt::BypassGraphicsProxyWidget); iconWidget->setWindowFlags(Qt::BypassGraphicsProxyWidget);
mpLayout->addItem(iconWidget); mpLayout->addItem(iconWidget);
mVItems << iconWidget; mVItems << iconWidget;
mpScene->mapWidgetToChainedElem()->insert(iconWidget,elem); mpScene->mapWidgetToChainedElem()->insert(iconWidget,elem);
mSceneWidth += pIconLabel->pixmap()->width() + 4; // 2px border mSceneWidth += pIconLabel->pixmap()->width() + 4; // 2px border
if(NULL != elem->nextElement()) if(NULL != elem->nextElement())
{ {
// Add the arrow // Add the arrow
QLabel* pArrowLabel = new QLabel(); QLabel* pArrowLabel = new QLabel();
pArrowLabel->setStyleSheet(QString("background-color: transparent;")); pArrowLabel->setStyleSheet(QString("background-color: transparent;"));
pArrowLabel->setPixmap(QPixmap(":images/navig_arrow.png")); pArrowLabel->setPixmap(QPixmap(":images/navig_arrow.png"));
QGraphicsWidget* arrowWidget = mpScene->addWidget(pArrowLabel); QGraphicsWidget* arrowWidget = mpScene->addWidget(pArrowLabel);
mpLayout->addItem(arrowWidget); mpLayout->addItem(arrowWidget);
mVItems << arrowWidget; mVItems << arrowWidget;
mSceneWidth += pArrowLabel->pixmap()->width() + 4; // 2px border mSceneWidth += pArrowLabel->pixmap()->width() + 4; // 2px border
// Recursively call this method while a next item exists // Recursively call this method while a next item exists
addItem(elem->nextElement()); addItem(elem->nextElement());
} }
} }
} }
/** /**
* \brief Handles the resize event * \brief Handles the resize event
* @param event as the resize event * @param event as the resize event
*/ */
void UBLibPathViewer::resizeEvent(QResizeEvent *event) void UBLibPathViewer::resizeEvent(QResizeEvent *event)
{ {
if(event->oldSize() == event->size()) if(event->oldSize() == event->size())
event->ignore(); event->ignore();
else{ else{
if(NULL != mpContainer) if(NULL != mpContainer)
mpContainer->setMinimumWidth(width() - 20); mpContainer->setMinimumWidth(width() - 20);
viewport()->resize(width() - 10, viewport()->height()); viewport()->resize(width() - 10, viewport()->height());
updateScrolls(); updateScrolls();
event->accept(); event->accept();
} }
} }
void UBLibPathViewer::showEvent(QShowEvent *event) void UBLibPathViewer::showEvent(QShowEvent *event)
{ {
Q_UNUSED(event); Q_UNUSED(event);
updateScrolls(); updateScrolls();
} }
/** /**
* \brief Handles the mouse move event * \brief Handles the mouse move event
* @param event as the mouse move event * @param event as the mouse move event
*/ */
void UBLibPathViewer::mouseMoveEvent(QMouseEvent *event) void UBLibPathViewer::mouseMoveEvent(QMouseEvent *event)
{ {
event->ignore(); event->ignore();
} }
void UBLibPathViewer::onMouseClicked(UBChainedLibElement *elem) void UBLibPathViewer::onMouseClicked(UBChainedLibElement *elem)
{ {
emit mouseClick(elem); emit mouseClick(elem);
} }
int UBLibPathViewer::widgetAt(QPointF p) int UBLibPathViewer::widgetAt(QPointF p)
{ {
int position = -1; int position = -1;
for(int i = 0; i < mVItems.size(); i++) for(int i = 0; i < mVItems.size(); i++)
{ {
QGraphicsWidget* pCrntWidget = mVItems.at(i); QGraphicsWidget* pCrntWidget = mVItems.at(i);
if(NULL != pCrntWidget) if(NULL != pCrntWidget)
{ {
QRectF r = pCrntWidget->rect(); QRectF r = pCrntWidget->rect();
QPointF wPos = pCrntWidget->scenePos(); QPointF wPos = pCrntWidget->scenePos();
int xMin = wPos.x() + r.x(); int xMin = wPos.x() + r.x();
int xMax = wPos.x() + r.x() + r.width(); int xMax = wPos.x() + r.x() + r.width();
int yMin = wPos.y() + r.y(); int yMin = wPos.y() + r.y();
int yMax = wPos.y() + r.y() + r.height(); int yMax = wPos.y() + r.y() + r.height();
if(p.x() >= xMin && if(p.x() >= xMin &&
p.x() <= xMax && p.x() <= xMax &&
p.y() >= yMin && p.y() >= yMin &&
p.y() <= yMax) p.y() <= yMax)
{ {
return i; return i;
} }
} }
} }
return position; return position;
} }
void UBLibPathViewer::onElementsDropped(QList<QString> elements, UBLibElement *target) void UBLibPathViewer::onElementsDropped(QList<QString> elements, UBLibElement *target)
{ {
emit elementsDropped(elements, target); emit elementsDropped(elements, target);
} }
UBFolderPath::UBFolderPath():QGraphicsProxyWidget() UBFolderPath::UBFolderPath():QGraphicsProxyWidget()
{ {
} }
UBFolderPath::~UBFolderPath() UBFolderPath::~UBFolderPath()
{ {
} }
/** /**
* \brief Handles the drag enter event * \brief Handles the drag enter event
* @param pEvent as the drag enter event * @param pEvent as the drag enter event
*/ */
void UBFolderPath::dragEnterEvent(QGraphicsSceneDragDropEvent *event) void UBFolderPath::dragEnterEvent(QGraphicsSceneDragDropEvent *event)
{ {
event->acceptProposedAction(); event->acceptProposedAction();
} }
/** /**
* \brief Handles the drop event * \brief Handles the drop event
* @param pEvent as the drop event * @param pEvent as the drop event
*/ */
void UBFolderPath::dropEvent(QDropEvent *pEvent) void UBFolderPath::dropEvent(QDropEvent *pEvent)
{ {
processMimeData(pEvent->mimeData()); processMimeData(pEvent->mimeData());
pEvent->acceptProposedAction(); pEvent->acceptProposedAction();
} }
/** /**
* \brief Handles the drag move event * \brief Handles the drag move event
* @param pEvent as the drag move event * @param pEvent as the drag move event
*/ */
void UBFolderPath::dragMoveEvent(QDragMoveEvent* pEvent) void UBFolderPath::dragMoveEvent(QDragMoveEvent* pEvent)
{ {
pEvent->acceptProposedAction(); pEvent->acceptProposedAction();
} }
/** /**
* \brief Process the given MIME data * \brief Process the given MIME data
* @param pData as the MIME data to process * @param pData as the MIME data to process
*/ */
void UBFolderPath::processMimeData(const QMimeData *pData) void UBFolderPath::processMimeData(const QMimeData *pData)
{ {
Q_UNUSED(pData); Q_UNUSED(pData);
} }
/** /**
* \brief Handles the mouse press event * \brief Handles the mouse press event
* @param event as the mouse press event * @param event as the mouse press event
*/ */
void UBFolderPath::mousePressEvent(QGraphicsSceneMouseEvent *event) void UBFolderPath::mousePressEvent(QGraphicsSceneMouseEvent *event)
{ {
Q_UNUSED(event); Q_UNUSED(event);
} }
/** /**
* \brief Handles the mouse move event * \brief Handles the mouse move event
* @param event as the mouse move event * @param event as the mouse move event
*/ */
void UBFolderPath::mouseMoveEvent(QMouseEvent *event) void UBFolderPath::mouseMoveEvent(QMouseEvent *event)
{ {
Q_UNUSED(event); Q_UNUSED(event);
} }
/** /**
* \brief Handles the mouse release event * \brief Handles the mouse release event
* @param event as the mouse release event * @param event as the mouse release event
*/ */
void UBFolderPath::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) void UBFolderPath::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{ {
Q_UNUSED(event); Q_UNUSED(event);
} }
UBPathScene::UBPathScene(QWidget* parent):QGraphicsScene(parent) UBPathScene::UBPathScene(QWidget* parent):QGraphicsScene(parent)
{ {
} }
UBPathScene::~UBPathScene() UBPathScene::~UBPathScene()
{ {
} }
void UBPathScene::mousePressEvent(QGraphicsSceneMouseEvent *event) void UBPathScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{ {
if(event->button() == Qt::LeftButton) if(event->button() == Qt::LeftButton)
{ {
mDragStartPos = event->scenePos(); mDragStartPos = event->scenePos();
mClickTime = QTime::currentTime(); mClickTime = QTime::currentTime();
} }
} }
/** /**
* \brief Handles the mouse release event * \brief Handles the mouse release event
* @param event as the mouse release event * @param event as the mouse release event
*/ */
void UBPathScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) void UBPathScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{ {
int elapsedTimeSincePress = mClickTime.elapsed(); int elapsedTimeSincePress = mClickTime.elapsed();
if(elapsedTimeSincePress < STARTDRAGTIME) if(elapsedTimeSincePress < STARTDRAGTIME)
{ {
QGraphicsWidget* pGWidget = dynamic_cast<QGraphicsWidget*>(itemAt(event->pos())); QGraphicsWidget* pGWidget = dynamic_cast<QGraphicsWidget*>(itemAt(event->pos()));
if(NULL != pGWidget) if(NULL != pGWidget)
{ {
// We have only one view at a time // We have only one view at a time
UBLibPathViewer* pView = dynamic_cast<UBLibPathViewer*>(this->views().at(0)); UBLibPathViewer* pView = dynamic_cast<UBLibPathViewer*>(this->views().at(0));
if(NULL != pView) if(NULL != pView)
{ {
int iClickedItem = pView->widgetAt(event->scenePos()); int iClickedItem = pView->widgetAt(event->scenePos());
if(-1 != iClickedItem) if(-1 != iClickedItem)
{ {
QGraphicsWidget* pFolderW = dynamic_cast<QGraphicsWidget*>(pGWidget->layout()->itemAt(iClickedItem)); QGraphicsWidget* pFolderW = dynamic_cast<QGraphicsWidget*>(pGWidget->layout()->itemAt(iClickedItem));
if(NULL != pFolderW) if(NULL != pFolderW)
{ {
UBChainedLibElement* chElem = mMapWidgetToChainedElem[pFolderW]; UBChainedLibElement* chElem = mMapWidgetToChainedElem[pFolderW];
if(NULL != chElem) if(NULL != chElem)
{ {
emit mouseClick(chElem); emit mouseClick(chElem);
} }
} }
} }
} }
} }
} }
} }
/** /**
* \brief Handles the mouse move event * \brief Handles the mouse move event
* @param event as the mouse move event * @param event as the mouse move event
*/ */
void UBPathScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) void UBPathScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{ {
if(event->button() == Qt::LeftButton) if(event->button() == Qt::LeftButton)
{ {
if((event->pos() - mDragStartPos).manhattanLength() < QApplication::startDragDistance()) if((event->pos() - mDragStartPos).manhattanLength() < QApplication::startDragDistance())
{ {
// The user is not doing a drag // The user is not doing a drag
return; return;
} }
// The user is performing a drag operation // The user is performing a drag operation
QDrag* drag = new QDrag(event->widget()); QDrag* drag = new QDrag(event->widget());
QMimeData* mimeData = new QMimeData(); QMimeData* mimeData = new QMimeData();
drag->setMimeData(mimeData); drag->setMimeData(mimeData);
drag->start(); drag->start();
} }
} }
void UBPathScene::dragEnterEvent(QGraphicsSceneDragDropEvent *event) void UBPathScene::dragEnterEvent(QGraphicsSceneDragDropEvent *event)
{ {
event->accept(); event->accept();
} }
void UBPathScene::dragMoveEvent(QGraphicsSceneDragDropEvent *event) void UBPathScene::dragMoveEvent(QGraphicsSceneDragDropEvent *event)
{ {
event->accept(); event->accept();
} }
void UBPathScene::dropEvent(QGraphicsSceneDragDropEvent *event) void UBPathScene::dropEvent(QGraphicsSceneDragDropEvent *event)
{ {
const QMimeData* pMimeData = event->mimeData(); const QMimeData* pMimeData = event->mimeData();
qDebug() << " Drop source : " << event->source()->metaObject()->className(); qDebug() << " Drop source : " << event->source()->metaObject()->className();
if(0 == QString::compare(event->source()->metaObject()->className(), "UBLibraryWidget")) if(0 == QString::compare(event->source()->metaObject()->className(), "UBLibraryWidget"))
{ {
UBLibElement* pTargetElement = elementFromPos(event->scenePos()); UBLibElement* pTargetElement = elementFromPos(event->scenePos());
if(NULL != pTargetElement) if(NULL != pTargetElement)
{ {
if(eUBLibElementType_Folder == pTargetElement->type()) if(eUBLibElementType_Folder == pTargetElement->type())
{ {
// The drag comes from this application, we have now to get the list of UBLibElements* // The drag comes from this application, we have now to get the list of UBLibElements*
QList<QString> qlDroppedElems; QList<QString> qlDroppedElems;
foreach(QUrl url, pMimeData->urls()) foreach(QUrl url, pMimeData->urls())
qlDroppedElems << url.toString(); qlDroppedElems << url.toString();
if(!qlDroppedElems.empty()) if(!qlDroppedElems.empty())
{ {
// Send a signal with the target dir and the list of ublibelement* // Send a signal with the target dir and the list of ublibelement*
emit elementsDropped(qlDroppedElems, pTargetElement); emit elementsDropped(qlDroppedElems, pTargetElement);
} }
} }
} }
event->accept(); event->accept();
} }
else else
{ {
event->ignore(); event->ignore();
} }
} }
/** /**
* \brief Return the element related to the given position * \brief Return the element related to the given position
* @param p as the given position * @param p as the given position
* *
*/ */
UBLibElement* UBPathScene::elementFromPos(QPointF p) UBLibElement* UBPathScene::elementFromPos(QPointF p)
{ {
UBLibElement* pElem = NULL; UBLibElement* pElem = NULL;
QGraphicsWidget* pGWidget = dynamic_cast<QGraphicsWidget*>(itemAt(p)); QGraphicsWidget* pGWidget = dynamic_cast<QGraphicsWidget*>(itemAt(p));
if(NULL != pGWidget) if(NULL != pGWidget)
{ {
UBChainedLibElement* chElem = mMapWidgetToChainedElem[pGWidget]; UBChainedLibElement* chElem = mMapWidgetToChainedElem[pGWidget];
if(NULL != chElem) if(NULL != chElem)
{ {
return chElem->element(); return chElem->element();
} }
} }
return pElem; return pElem;
} }

@ -35,11 +35,10 @@ UBNavigatorPalette::UBNavigatorPalette(QWidget *parent, const char *name):UBDock
mIcon = QPixmap(":images/paletteNavigator.png"); mIcon = QPixmap(":images/paletteNavigator.png");
resize(UBSettings::settings()->navigPaletteWidth->get().toInt(), height()); resize(UBSettings::settings()->navigPaletteWidth->get().toInt(), height());
mLastWidth = 300; mLastWidth = 300;
setContentsMargins(0, 0, border(), 0);
// Build the gui // Build the gui
mLayout = new QVBoxLayout(this); mLayout = new QVBoxLayout(this);
mLayout->setMargin(3); mLayout->setContentsMargins(customMargin(), customMargin(), 2*border() + customMargin(), customMargin());
setLayout(mLayout); setLayout(mLayout);
mNavigator = new UBDocumentNavigator(this); mNavigator = new UBDocumentNavigator(this);

Loading…
Cancel
Save