You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
4.2 KiB
138 lines
4.2 KiB
/*
|
|
* This program 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, either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "UBFavoriteToolPalette.h"
|
|
|
|
#include "core/UBSettings.h"
|
|
|
|
#include "board/UBBoardController.h"
|
|
|
|
#include "tools/UBToolsManager.h"
|
|
|
|
#include "domain/UBAbstractWidget.h"
|
|
|
|
#include "gui/UBMainWindow.h"
|
|
|
|
#include "core/memcheck.h"
|
|
|
|
UBFavoriteToolPalette::UBFavoriteToolPalette(QWidget* parent)
|
|
: UBActionPalette(Qt::Horizontal, parent)
|
|
{
|
|
QWidget *container = new QWidget(this);
|
|
container->setStyleSheet("QWidget {background-color: transparent}");
|
|
|
|
QGridLayout *gridLayout = new QGridLayout();
|
|
container->setLayout(gridLayout);
|
|
layout()->addWidget(container);
|
|
|
|
QList<QAction*> toolsActions;
|
|
|
|
QStringList favoritesToolUris = UBSettings::settings()->favoritesNativeToolUris->get().toStringList();
|
|
|
|
foreach(QString uri, favoritesToolUris)
|
|
{
|
|
UBToolsManager::UBToolDescriptor desc = UBToolsManager::manager()->toolByID(uri);
|
|
|
|
if (desc.label.length() > 0 && !desc.icon.isNull())
|
|
{
|
|
QAction *action = new QAction(desc.label + " " + desc.version, this);
|
|
action->setData(QUrl(desc.id));
|
|
action->setIcon(desc.icon);
|
|
connect(action, SIGNAL(triggered()), this, SLOT(addFavorite()));
|
|
|
|
toolsActions << action;
|
|
}
|
|
}
|
|
|
|
QDir favoritesDir(UBSettings::settings()->userInteractiveFavoritesDirectory());
|
|
QStringList favoritesSubDirs = favoritesDir.entryList(QStringList(), QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks, QDir::Name);
|
|
QStringList appPathes;
|
|
|
|
foreach(QString subDirName, favoritesSubDirs)
|
|
{
|
|
appPathes << favoritesDir.path() + "/" + subDirName;
|
|
}
|
|
|
|
foreach(QString widgetPath, appPathes)
|
|
{
|
|
QAction *action = new QAction(UBAbstractWidget::widgetName(QUrl::fromLocalFile(widgetPath)), this);
|
|
action->setData(QUrl::fromLocalFile(widgetPath));
|
|
action->setIcon(QIcon(UBAbstractWidget::iconFilePath(QUrl::fromLocalFile(widgetPath))));
|
|
connect(action, SIGNAL(triggered()), this, SLOT(addFavorite()));
|
|
|
|
toolsActions << action;
|
|
}
|
|
|
|
|
|
if (toolsActions.size() < 4)
|
|
{
|
|
QStringList toolsIDs = UBToolsManager::manager()->allToolIDs();
|
|
|
|
foreach(QString id, favoritesToolUris)
|
|
toolsIDs.removeAll(id);
|
|
|
|
while(toolsIDs.size() > 0 && toolsActions.size() < 4)
|
|
{
|
|
UBToolsManager::UBToolDescriptor desc = UBToolsManager::manager()->toolByID(toolsIDs.takeFirst());
|
|
|
|
if (desc.label.length() > 0)
|
|
{
|
|
QAction *action = new QAction(desc.label + " " + desc.version, this);
|
|
action->setData(QUrl(desc.id));
|
|
action->setIcon(desc.icon);
|
|
connect(action, SIGNAL(triggered()), this, SLOT(addFavorite()));
|
|
|
|
toolsActions << action;
|
|
}
|
|
}
|
|
}
|
|
|
|
int i = 0;
|
|
|
|
foreach(QAction* action, toolsActions)
|
|
{
|
|
UBActionPaletteButton* button = createPaletteButton(action, container);
|
|
gridLayout->addWidget(button, i / 4, i % 4);
|
|
mActions << action;
|
|
i++;
|
|
}
|
|
|
|
setClosable(true);
|
|
setButtonIconSize(QSize(128, 128));
|
|
setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
|
|
|
|
groupActions();
|
|
}
|
|
|
|
|
|
void UBFavoriteToolPalette::addFavorite()
|
|
{
|
|
// we need the sender :-( hugly ...
|
|
QAction* action = qobject_cast<QAction*>(sender());
|
|
|
|
if(action)
|
|
{
|
|
QVariant widgetPathVar = action->data();
|
|
if (!widgetPathVar.isNull())
|
|
{
|
|
UBApplication::boardController->downloadURL(widgetPathVar.toUrl());
|
|
}
|
|
}
|
|
}
|
|
|
|
UBFavoriteToolPalette::~UBFavoriteToolPalette()
|
|
{
|
|
// NOOP
|
|
}
|
|
|