aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/core/lumina-desktop/desktop-plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src-qt5/core/lumina-desktop/desktop-plugins')
-rw-r--r--src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.cpp93
-rw-r--r--src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h4
2 files changed, 74 insertions, 23 deletions
diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.cpp b/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.cpp
index 266025c5..61293b46 100644
--- a/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.cpp
+++ b/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.cpp
@@ -3,9 +3,13 @@
#include "OutlineToolButton.h"
#include <QClipboard>
+#include <LIconCache.h>
+
#define OUTMARGIN 10 //special margin for fonts due to the outlining effect from the OutlineToolbutton
+extern LIconCache *ICONS;
AppLauncherPlugin::AppLauncherPlugin(QWidget* parent, QString ID) : LDPlugin(parent, ID){
+ connect(ICONS, SIGNAL(IconAvailable(QString)), this, SLOT(iconLoaded(QString)) );
QVBoxLayout *lay = new QVBoxLayout();
inputDLG = 0;
this->setLayout(lay);
@@ -42,31 +46,38 @@ void AppLauncherPlugin::loadButton(){
//qDebug() << "Default Application Launcher:" << def << path;
bool ok = QFile::exists(path);
if(!ok){ emit RemovePlugin(this->ID()); return;}
- int icosize = this->height()-4 - 2.2*button->fontMetrics().height();
+ icosize = this->height()-4 - 2.2*button->fontMetrics().height();
button->setFixedSize( this->width()-4, this->height()-4);
button->setIconSize( QSize(icosize,icosize) );
button->setToolTip("");
QString txt;
+ iconID.clear();
if(path.endsWith(".desktop") && ok){
XDGDesktop file(path);
ok = !file.name.isEmpty();
if(!ok){
button->setWhatsThis("");
- button->setIcon( QIcon(LXDG::findIcon("quickopen-file","").pixmap(QSize(icosize,icosize)).scaledToHeight(icosize, Qt::SmoothTransformation) ) );
+ iconID = "quickopen-file";
+ //button->setIcon( QIcon(LXDG::findIcon("quickopen-file","").pixmap(QSize(icosize,icosize)).scaledToHeight(icosize, Qt::SmoothTransformation) ) );
txt = tr("Click to Set");
if(!watcher->files().isEmpty()){ watcher->removePaths(watcher->files()); }
}else{
button->setWhatsThis(file.filePath);
- button->setIcon( QIcon(LXDG::findIcon(file.icon,"system-run").pixmap(QSize(icosize,icosize)).scaledToHeight(icosize, Qt::SmoothTransformation) ) );
+ if(ICONS->exists(file.icon)){ iconID = file.icon; }
+ else{ iconID = "system-run"; }
+ //button->setIcon( QIcon(LXDG::findIcon(file.icon,"system-run").pixmap(QSize(icosize,icosize)).scaledToHeight(icosize, Qt::SmoothTransformation) ) );
if(!file.comment.isEmpty()){button->setToolTip(file.comment); }
txt = file.name;
//Put the simple Open action first (no open-with for .desktop files)
- this->contextMenu()->addAction(button->icon(), QString(tr("Launch %1")).arg(file.name), this, SLOT(buttonClicked()) );
+ QAction *tmp = this->contextMenu()->addAction( QString(tr("Launch %1")).arg(file.name), this, SLOT(buttonClicked()) );
+ ICONS->loadIcon(tmp, file.icon);
//See if there are any "actions" listed for this file, and put them in the context menu as needed.
if(!file.actions.isEmpty()){
for(int i=0; i<file.actions.length(); i++){
- QAction *tmp = this->contextMenu()->addAction( file.actions[i].name );
- tmp->setIcon( LXDG::findIcon(file.actions[i].icon,"quickopen-file") );
+ tmp = this->contextMenu()->addAction( file.actions[i].name );
+ if(ICONS->exists(file.actions[i].icon)){ ICONS->loadIcon(tmp, file.actions[i].icon); }
+ else{ ICONS->loadIcon(tmp, "quickopen-file"); }
+ //tmp->setIcon( LXDG::findIcon(file.actions[i].icon,"quickopen-file") );
tmp->setWhatsThis( file.actions[i].ID );
}
}
@@ -75,53 +86,73 @@ void AppLauncherPlugin::loadButton(){
}
}else if(ok){
button->setWhatsThis(info.absoluteFilePath());
+ QString iconame;
if(info.isDir()){
if(path.startsWith("/media/")){
+ iconame = "drive-removable-media";
//Could add device ID parsing here to determine what "type" of device it is - will be OS-specific though
- button->setIcon( LXDG::findIcon("drive-removable-media","") );
+ //button->setIcon( LXDG::findIcon("drive-removable-media","") );
}
- else{ button->setIcon( LXDG::findIcon("folder","") ); }
+ else{ iconame = "folder"; } //button->setIcon( LXDG::findIcon("folder","") );
}else if(LUtils::imageExtensions().contains(info.suffix().toLower()) ){
- QPixmap pix;
- if(pix.load(path)){ button->setIcon( QIcon(pix.scaled(256,256)) ); } //max size for thumbnails in memory
- else{ button->setIcon( LXDG::findIcon("dialog-cancel","") ); }
+ iconame = info.absoluteFilePath();
+ //QPixmap pix;
+ //if(pix.load(path)){ button->setIcon( QIcon(pix.scaled(256,256)) ); } //max size for thumbnails in memory
+ //else{ iconame = "dialog-cancel"; } //button->setIcon( LXDG::findIcon("dialog-cancel","") );
}else{
- button->setIcon( QIcon(LXDG::findMimeIcon(path).pixmap(QSize(icosize,icosize)).scaledToHeight(icosize, Qt::SmoothTransformation) ) );
+ iconame = LXDG::findAppMimeForFile(path).replace("/","-");
+ //button->setIcon( QIcon(LXDG::findMimeIcon(path).pixmap(QSize(icosize,icosize)).scaledToHeight(icosize, Qt::SmoothTransformation) ) );
}
+ if(!iconame.isEmpty()){ iconID = iconame; }
txt = info.fileName();
if(!watcher->files().isEmpty()){ watcher->removePaths(watcher->files()); }
watcher->addPath(path); //make sure to update this shortcut if the file changes
}else{
//InValid File
button->setWhatsThis("");
- button->setIcon( QIcon(LXDG::findIcon("quickopen","dialog-cancel").pixmap(QSize(icosize,icosize)).scaledToHeight(icosize, Qt::SmoothTransformation) ) );
+
+ iconID = "quickopen";
+ //button->setIcon( QIcon(LXDG::findIcon("quickopen","dialog-cancel").pixmap(QSize(icosize,icosize)).scaledToHeight(icosize, Qt::SmoothTransformation) ) );
button->setText( tr("Click to Set") );
if(!watcher->files().isEmpty()){ watcher->removePaths(watcher->files()); }
}
+ if(!iconID.isEmpty()){
+ bool updatenow = ICONS->isLoaded(iconID);
+ ICONS->loadIcon(button, iconID);
+ if(updatenow){ iconLoaded(iconID); } //will not get a signal - already loaded right now
+ }
//Now adjust the context menu for the button as needed
+ QAction *tmp = 0;
if(this->contextMenu()->isEmpty()){
- this->contextMenu()->addAction(LXDG::findIcon("document-open",""), tr("Open"), this, SLOT(buttonClicked()) );
- this->contextMenu()->addAction(LXDG::findIcon("document-preview",""), tr("Open With"), this, SLOT(openWith()) );
+ tmp = this->contextMenu()->addAction( tr("Open"), this, SLOT(buttonClicked()) );
+ ICONS->loadIcon(tmp, "document-open");
+ this->contextMenu()->addAction( tr("Open With"), this, SLOT(openWith()) );
+ ICONS->loadIcon(tmp, "document-preview");
}
- this->contextMenu()->addAction(LXDG::findIcon("document-properties",""), tr("View Properties"), this, SLOT(fileProperties()) );
+ tmp = this->contextMenu()->addAction( tr("View Properties"), this, SLOT(fileProperties()) );
+ ICONS->loadIcon(tmp, "document-properties");
this->contextMenu()->addSection(tr("File Operations"));
if(!path.endsWith(".desktop")){
- this->contextMenu()->addAction(LXDG::findIcon("edit-rename","edit-new"), tr("Rename"), this, SLOT(fileRename()) );
+ tmp = this->contextMenu()->addAction( tr("Rename"), this, SLOT(fileRename()) );
+ ICONS->loadIcon(tmp, "edit-rename");
}
- this->contextMenu()->addAction(LXDG::findIcon("edit-copy",""), tr("Copy"), this, SLOT(fileCopy()) );
+ tmp = this->contextMenu()->addAction( tr("Copy"), this, SLOT(fileCopy()) );
+ ICONS->loadIcon(tmp, "edit-copy");
if(info.isWritable() || (info.isSymLink() && QFileInfo(info.absolutePath()).isWritable() ) ){
- this->contextMenu()->addAction(LXDG::findIcon("edit-cut",""), tr("Cut"), this, SLOT(fileCut()) );
- this->contextMenu()->addAction(LXDG::findIcon("document-close",""), tr("Delete"), this, SLOT(fileDelete()) );
+ tmp = this->contextMenu()->addAction( tr("Cut"), this, SLOT(fileCut()) );
+ ICONS->loadIcon(tmp, "edit-cut");
+ tmp = this->contextMenu()->addAction( tr("Delete"), this, SLOT(fileDelete()) );
+ ICONS->loadIcon(tmp, "document-close");
}
//If the file is a symlink, put the overlay on the icon
- if(info.isSymLink()){
+ /*if(info.isSymLink()){
QImage img = button->icon().pixmap(QSize(icosize,icosize)).toImage();
int oSize = icosize/3; //overlay size
- QPixmap overlay = LXDG::findIcon("emblem-symbolic-link").pixmap(oSize,oSize).scaled(oSize,oSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
+ QPixmap overlay = ICONS->loadIcon("emblem-symbolic-link").pixmap(oSize,oSize).scaled(oSize,oSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
QPainter painter(&img);
painter.drawPixmap(icosize-oSize,icosize-oSize,overlay); //put it in the bottom-right corner
button->setIcon( QIcon(QPixmap::fromImage(img)) );
- }
+ }*/
//Now adjust the visible text as necessary based on font/grid sizing
if(button->toolTip().isEmpty()){ button->setToolTip(txt); }
//Double check that the visual icon size matches the requested size - otherwise upscale the icon
@@ -183,6 +214,22 @@ void AppLauncherPlugin::buttonClicked(bool openwith){
}
+void AppLauncherPlugin::iconLoaded(QString ico){
+ if(ico == iconID){
+ //Reload/scale the icon as needed
+ QPixmap pix = button->icon().pixmap(QSize(icosize,icosize)).scaledToHeight(icosize, Qt::SmoothTransformation);
+ if(QFileInfo(button->whatsThis()).isSymLink()){
+ QImage img = pix.toImage();
+ int oSize = icosize/3; //overlay size
+ QPixmap overlay = ICONS->loadIcon("emblem-symbolic-link").pixmap(oSize,oSize).scaled(oSize,oSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
+ QPainter painter(&img);
+ painter.drawPixmap(icosize-oSize,icosize-oSize,overlay); //put it in the bottom-right corner
+ pix = QPixmap::fromImage(img);
+ }
+ button->setIcon( QIcon(pix) );
+ }
+}
+
void AppLauncherPlugin::actionTriggered(QAction *act){
if(act->whatsThis().isEmpty()){ return; }
QString path = button->whatsThis();
diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h b/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h
index b1e3fc85..34a75ce8 100644
--- a/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h
+++ b/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h
@@ -36,10 +36,14 @@ private:
QFileSystemWatcher *watcher;
//QMenu *menu;
QInputDialog *inputDLG;
+ QString iconID;
+ int icosize;
private slots:
void loadButton();
void buttonClicked(bool openwith = false);
+ void iconLoaded(QString);
+
//void openContextMenu();
//void increaseIconSize();
bgstack15