UBFeaturesActionBar.cpp 10.3 KB
Newer Older
1
/*
2
 * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
3 4 5
 *
 * This file is part of Open-Sankoré.
 *
Claudio Valerio's avatar
Claudio Valerio committed
6 7 8
 * Open-Sankoré is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, version 3 of the License,
9 10 11 12 13 14
 * with a specific linking exception for the OpenSSL project's
 * "OpenSSL" library (or with modified versions of it that use the
 * same license as the "OpenSSL" library).
 *
 * Open-Sankoré is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Claudio Valerio's avatar
Claudio Valerio committed
15 16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
17
 *
Claudio Valerio's avatar
Claudio Valerio committed
18 19
 * You should have received a copy of the GNU General Public License
 * along with Open-Sankoré.  If not, see <http://www.gnu.org/licenses/>.
20 21 22
 */


Claudio Valerio's avatar
Claudio Valerio committed
23

24
#include "UBFeaturesActionBar.h"
25
#include "core/memcheck.h"
26
#include "gui/UBFeaturesWidget.h"
27

28
UBFeaturesActionBar::UBFeaturesActionBar( UBFeaturesController *controller, QWidget* parent, const char* name ) : QWidget (parent)
Claudio Valerio's avatar
Claudio Valerio committed
29
    , featuresController(controller)
30 31 32 33 34
    , mButtonGroup(NULL)
    , mSearchBar(NULL)
    , mLayout(NULL)
    , mpFavoriteAction(NULL)
    , mpSocialAction(NULL)
35
    , mpRescanModelAction(NULL)
36 37 38 39 40 41 42
    , mpDeleteAction(NULL)
    , mpSearchAction(NULL)
    , mpCloseAction(NULL)
    , mpRemoveFavorite(NULL)
    , mpNewFolderAction(NULL)
    , mpFavoriteBtn(NULL)
    , mpSocialBtn(NULL)
43
    , mpRescanModelBtn(NULL)
44 45 46 47
    , mpDeleteBtn(NULL)
    , mpCloseBtn(NULL)
    , mpRemoveFavoriteBtn(NULL)
    , mpNewFolderBtn(NULL)
48
{
Claudio Valerio's avatar
Claudio Valerio committed
49
    setObjectName(name);
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
    setStyleSheet(QString("background: #EEEEEE; border-radius : 10px; border : 2px solid #999999;"));

    setAcceptDrops(true);

    mButtonGroup = new QButtonGroup(this);
    mSearchBar = new QLineEdit(this);
    mSearchBar->setStyleSheet(QString("background-color:white; border-radius : 10px; padding : 2px;"));

    mLayout = new QHBoxLayout();
    setLayout(mLayout);

    setMaximumHeight(ACTIONBAR_HEIGHT);

    // Create the actions
    mpFavoriteAction = new QAction(QIcon(":/images/libpalette/miniFavorite.png"), tr("Add to favorites"), this);
    mpSocialAction = new QAction(QIcon(":/images/libpalette/social.png"), tr("Share"), this);
    mpSearchAction = new QAction(QIcon(":/images/libpalette/miniSearch.png"), tr("Search"), this);
67
    mpRescanModelAction = new QAction(QIcon(":/images/cursors/rotate.png"), tr("Rescan file system"), this);
68 69 70 71 72 73 74 75
    mpDeleteAction = new QAction(QIcon(":/images/libpalette/miniTrash.png"), tr("Delete"), this);
    mpCloseAction = new QAction(QIcon(":/images/close.svg"), tr("Back to folder"), this);
    mpRemoveFavorite = new QAction(QIcon(":/images/libpalette/trash_favorite.svg"), tr("Remove from favorites"), this);
    mpNewFolderAction = new QAction(QIcon(":/images/libpalette/miniNewFolder.png"), tr("Create new folder"), this);

    // Create the buttons
    mpFavoriteBtn = new UBActionButton(this, mpFavoriteAction);
    mpSocialBtn = new UBActionButton(this, mpSocialAction);
Ilia Ryabokon's avatar
Ilia Ryabokon committed
76

77
    //mpSearchBtn = new UBActionButton(this, mpSearchAction);
78
    mpRescanModelBtn = new UBActionButton(this, mpRescanModelAction);
79
    mpRescanModelBtn->hide();
Ilia Ryabokon's avatar
Ilia Ryabokon committed
80

81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
    mpDeleteBtn = new UBActionButton(this, mpDeleteAction);
    mpCloseBtn = new UBActionButton(this, mpCloseAction);
    mpRemoveFavoriteBtn = new UBActionButton(this, mpRemoveFavorite);
    mpNewFolderBtn = new UBActionButton(this, mpNewFolderAction);

    // Initialize the buttons
    //mpSearchBtn->setEnabled(false);
    mpNewFolderBtn->setEnabled(false);

    // Add the buttons to the button group
    mButtonGroup->addButton(mpFavoriteBtn);
    mButtonGroup->addButton(mpSocialBtn);
    //mButtonGroup->addButton(mpSearchBtn);
    mButtonGroup->addButton(mpDeleteBtn);
    mButtonGroup->addButton(mpCloseBtn);
    mButtonGroup->addButton(mpRemoveFavoriteBtn);
    mButtonGroup->addButton(mpNewFolderBtn);
    // Connect signals & slots
99 100
    /*connect(mpFavoriteAction,SIGNAL(triggered()), this, SLOT(onActionFavorite()));
    connect(mpSocialAction,SIGNAL(triggered()), this, SLOT(onActionSocial()));
101 102 103 104 105 106 107
    connect(mpSearchAction,SIGNAL(triggered()), this, SLOT(onActionSearch()));
    connect(mpDeleteAction,SIGNAL(triggered()), this, SLOT(onActionTrash()));
    connect(mpCloseAction, SIGNAL(triggered()), this, SLOT(onActionClose()));
    connect(mpRemoveFavorite, SIGNAL(triggered()), this, SLOT(onActionRemoveFavorite()));
    connect(mSearchBar, SIGNAL(textChanged(QString)), this, SLOT(onSearchTextChanged(QString)));
    connect(mpNewFolderAction, SIGNAL(triggered()), this, SLOT(onActionNewFolder()));*/

108
    connect(mpFavoriteAction,SIGNAL(triggered()), this, SLOT(onActionFavorite()));
Claudio Valerio's avatar
Claudio Valerio committed
109 110
    connect(mSearchBar, SIGNAL(textChanged(QString)), this, SLOT(onSearchTextChanged(QString)));
    connect(mpNewFolderAction, SIGNAL(triggered()), this, SLOT(onActionNewFolder()));
111
    connect(mpRemoveFavorite, SIGNAL(triggered()), this, SLOT(onActionRemoveFavorite()));
112
    connect(mpRescanModelAction, SIGNAL(triggered()), this , SLOT(onActionRescanModel()));
113
    connect(mpDeleteAction,SIGNAL(triggered()), this, SLOT(onActionTrash()));
114

115

116 117 118 119 120 121
    // Build the default toolbar
    mLayout->addWidget(mpFavoriteBtn);
    mLayout->addWidget(mpSocialBtn);
    mLayout->addWidget(mpNewFolderBtn);
    mLayout->addWidget(mSearchBar);
    //mLayout->addWidget(mpSearchBtn);
122
    mLayout->addWidget(mpRescanModelBtn);
123 124 125
    mLayout->addWidget(mpDeleteBtn);
    mLayout->addWidget(mpCloseBtn);
    mLayout->addWidget(mpRemoveFavoriteBtn);
Claudio Valerio's avatar
Claudio Valerio committed
126 127 128
    setCurrentState( IN_ROOT );
    mpDeleteBtn->setAcceptDrops(true);
    setAcceptDrops( true );
129 130 131 132
}

void UBFeaturesActionBar::setCurrentState( UBFeaturesActionBarState state )
{
Claudio Valerio's avatar
Claudio Valerio committed
133 134
    currentState = state;
    setButtons();
135 136 137 138 139 140
}

void UBFeaturesActionBar::setButtons()
{
    switch( currentState )
    {
Claudio Valerio's avatar
Claudio Valerio committed
141 142
    case IN_FOLDER:
        mpFavoriteBtn->show();
143 144 145 146 147 148
        mpSocialBtn->hide();
        mSearchBar->show();
        mpDeleteBtn->show();
        mpCloseBtn->hide();
        mpRemoveFavoriteBtn->hide();
        mpNewFolderBtn->show();
Claudio Valerio's avatar
Claudio Valerio committed
149 150
        mpNewFolderBtn->setEnabled(true);
        mpDeleteBtn->setEnabled(true);
151
//        mpRescanModelBtn->show();
Claudio Valerio's avatar
Claudio Valerio committed
152
        break;
153 154 155 156 157 158 159 160
    case IN_ROOT:
        mpFavoriteBtn->show();
        mpSocialBtn->hide();
        mSearchBar->show();
        mpDeleteBtn->show();
        mpCloseBtn->hide();
        mpRemoveFavoriteBtn->hide();
        mpNewFolderBtn->show();
Claudio Valerio's avatar
Claudio Valerio committed
161 162
        mpNewFolderBtn->setEnabled(false);
        mpDeleteBtn->setEnabled(false);
163
//        mpRescanModelBtn->show();
164 165 166 167 168 169 170 171 172 173
        break;
    case IN_PROPERTIES:
        mpFavoriteBtn->show();
        mpSocialBtn->hide();
        mSearchBar->show();
        //mpSearchBtn->show();
        mpDeleteBtn->hide();
        mpCloseBtn->hide();
        mpRemoveFavoriteBtn->hide();
        mpNewFolderBtn->hide();
174
//        mpRescanModelBtn->hide();
175 176 177 178 179 180 181 182 183 184
        break;
    case IN_FAVORITE:
        mpFavoriteBtn->hide();
        mpSocialBtn->hide();
        mSearchBar->show();
        //mpSearchBtn->show();
        mpDeleteBtn->hide();
        mpCloseBtn->hide();
        mpRemoveFavoriteBtn->show();
        mpNewFolderBtn->hide();
185
//        mpRescanModelBtn->hide();
186
        break;
Claudio Valerio's avatar
Claudio Valerio committed
187 188
    case IN_TRASH:
        mpFavoriteBtn->hide();
Anna Udovichenko's avatar
Anna Udovichenko committed
189 190
        mpSocialBtn->hide();
        mSearchBar->show();
191 192
        mpDeleteBtn->show();
        mpDeleteBtn->setEnabled(true);
Anna Udovichenko's avatar
Anna Udovichenko committed
193 194 195 196 197
        //mpSearchBtn->show();
        //mpDeleteBtn->hide();
        mpCloseBtn->hide();
        //mpRemoveFavoriteBtn->show();
        mpNewFolderBtn->hide();
198
//        mpRescanModelBtn->hide();
Claudio Valerio's avatar
Claudio Valerio committed
199
        break;
200 201 202 203 204 205 206
    default:
        break;
    }
}

void UBFeaturesActionBar::onSearchTextChanged(QString txt)
{
Ivan Ilyin's avatar
Ivan Ilyin committed
207
    Q_UNUSED(txt)
208
    emit searchElement(mSearchBar->text());
209 210
}
   
211 212 213 214 215
void UBFeaturesActionBar::onActionNewFolder()
{
    emit newFolderToCreate();
}

216 217 218 219 220
void UBFeaturesActionBar::onActionFavorite()
{
    emit addElementsToFavorite();
}

221 222 223 224 225
void UBFeaturesActionBar::onActionRemoveFavorite()
{
    emit removeElementsFromFavorite();
}

226 227 228 229
void UBFeaturesActionBar::onActionTrash()
{
    emit deleteSelectedElements();
}
230
void UBFeaturesActionBar::onActionRescanModel()
231
{
232
    emit rescanModel();
233 234
}

235 236 237 238 239 240 241 242 243 244
void UBFeaturesActionBar::lockIt()
{
    setEnabled(false);
}

void UBFeaturesActionBar::unlockIt()
{
    setEnabled(true);
}

245 246
void UBFeaturesActionBar::dragEnterEvent( QDragEnterEvent *event )
{
247 248
    const UBFeaturesMimeData *fMimeData = qobject_cast<const UBFeaturesMimeData*>(event->mimeData());
    if (fMimeData) {
249
        event->acceptProposedAction();
250 251 252
    } else {
        event->ignore();
    }
253 254
}

255
void UBFeaturesActionBar::dropEvent(QDropEvent *event)
Claudio Valerio's avatar
Claudio Valerio committed
256
{    
257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275
    const UBFeaturesMimeData *fMimeData = qobject_cast<const UBFeaturesMimeData*>(event->mimeData());

    if (!fMimeData) {
        qWarning() << "data came from not supported widget";
        event->ignore();
        return;
    }

    QWidget *dest = childAt(event->pos());
    if (dest == mpDeleteBtn) {
        QList<UBFeature> featuresList = fMimeData->features();
        foreach (UBFeature curFeature, featuresList) {
            if (!curFeature.isDeletable()) {
                qWarning() << "Undeletable feature found, stopping deleting process";
                event->ignore();
                return;
            }
        }
        event->setDropAction(Qt::MoveAction);
Claudio Valerio's avatar
Claudio Valerio committed
276
        event->accept();
277 278 279 280 281

        emit deleteElements(fMimeData);

    } else if (dest == mpFavoriteBtn) {
        event->setDropAction( Qt::CopyAction);
Claudio Valerio's avatar
Claudio Valerio committed
282
        event->accept();
283 284 285 286

        emit addToFavorite(fMimeData);

    } else if (dest == mpRemoveFavoriteBtn) {
Claudio Valerio's avatar
Claudio Valerio committed
287 288
        event->setDropAction( Qt::MoveAction );
        event->accept();
289 290

        emit removeFromFavorite(fMimeData);
Claudio Valerio's avatar
Claudio Valerio committed
291
    }
292 293
}

294 295
UBFeaturesActionBar::~UBFeaturesActionBar()
{
Ivan Ilyin's avatar
Ivan Ilyin committed
296
}
297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321

/**
 * \brief Construtor
 * @param parent as the parent widget
 * @param action as the related action
 * @param name as the related object name
 */
UBActionButton::UBActionButton(QWidget *parent, QAction* action, const char *name):QToolButton(parent)
{
    setObjectName(name);
    addAction(action);
    setDefaultAction(action);
    setIconSize(QSize(BUTTON_SIZE, BUTTON_SIZE));
    setToolButtonStyle(Qt::ToolButtonIconOnly);
    setStyleSheet(QString("QToolButton {color: white; font-weight: bold; font-family: Arial; background-color: transparent; border: none}"));
    setFocusPolicy(Qt::NoFocus);
}

/**
 * \brief Destructor
 */
UBActionButton::~UBActionButton()
{

}