1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
//===========================================
// Lumina-DE source code
// Copyright (c) 2014, Ken Moore
// Available under the 3-clause BSD license
// See the LICENSE file for full details
//===========================================
#include "UserItemWidget.h"
UserItemWidget::UserItemWidget(QWidget *parent, QString itemPath, bool isDir) : QFrame(parent){
createWidget();
//Now fill it appropriately
if(itemPath.endsWith(".desktop")){
bool ok = false;
XDGDesktop item = LXDG::loadDesktopFile(itemPath, ok);
if(ok){
icon->setPixmap( LXDG::findIcon(item.icon, "preferences-system-windows-actions").pixmap(30,30) );
name->setText( item.name );
icon->setWhatsThis(item.filePath);
}else{
icon->setPixmap( LXDG::findIcon("unknown","").pixmap(30,30) );
name->setText( itemPath.section("/",-1) );
icon->setWhatsThis(itemPath);
}
}else if(isDir){
if(itemPath.endsWith("/")){ itemPath.chop(1); }
icon->setPixmap( LXDG::findIcon("folder","").pixmap(30,30) );
name->setText( itemPath.section("/",-1) );
icon->setWhatsThis(itemPath);
}else{
if(itemPath.endsWith("/")){ itemPath.chop(1); }
icon->setPixmap( LXDG::findMimeIcon(itemPath.section("/",-1).section(".",-1)).pixmap(30,30) );
name->setText( itemPath.section("/",-1) );
icon->setWhatsThis(itemPath);
}
if(isDir && !QFile::symLinkTarget(itemPath).isEmpty()){ isDir = false; } //not a real directory - just a sym link
isDirectory = isDir; //save this for later
//Now setup the button appropriately
setupButton();
}
UserItemWidget::UserItemWidget(QWidget *parent, XDGDesktop item) : QFrame(parent){
createWidget();
isDirectory = false;
//Now fill it appropriately
icon->setPixmap( LXDG::findIcon(item.icon,"preferences-system-windows-actions").pixmap(30,30) );
name->setText( item.name );
icon->setWhatsThis(item.filePath);
//Now setup the button appropriately
setupButton();
}
UserItemWidget::~UserItemWidget(){
delete button;
delete icon;
delete name;
}
void UserItemWidget::createWidget(){
//Initialize the widgets
this->setContentsMargins(0,0,0,0);
button = new QToolButton(this);
button->setIconSize( QSize(14,14) );
button->setAutoRaise(true);
icon = new QLabel(this);
icon->setFixedSize( QSize(30,30) );
name = new QLabel(this);
//Add them to the layout
this->setLayout(new QHBoxLayout());
this->layout()->setContentsMargins(1,1,1,1);
this->layout()->addWidget(icon);
this->layout()->addWidget(name);
this->layout()->addWidget(button);
//Install the stylesheet
this->setStyleSheet("UserItemWidget{ background: transparent; border-radius: 5px;} UserItemWidget::hover{ background: rgba(255,255,255,200); border-radius: 5px; }");
}
void UserItemWidget::setupButton(){
if( !isDirectory && icon->whatsThis().contains("/home/") && icon->whatsThis().contains("/Desktop/")){
//This is a current desktop shortcut -- allow the user to remove it
button->setWhatsThis("remove");
button->setIcon( LXDG::findIcon("list-remove","") );
button->setToolTip(tr("Remove Shortcut"));
connect(button, SIGNAL(clicked()), this, SLOT(buttonClicked()) );
}else if( !isDirectory && !QFile::exists( QDir::homePath()+"/Desktop/"+icon->whatsThis().section("/",-1) ) ){
//This file does not have a desktop shortcut yet -- allow the user to add it
button->setWhatsThis("add");
button->setIcon( LXDG::findIcon("favorites","") );
button->setToolTip(tr("Create Shortcut"));
connect(button, SIGNAL(clicked()), this, SLOT(buttonClicked()) );
}else{
//This already has a desktop shortcut -- no special actions
button->setVisible(false);
}
}
void UserItemWidget::buttonClicked(){
button->setVisible(false);
if(button->whatsThis()=="add"){
QFile::link(icon->whatsThis(), QDir::homePath()+"/Desktop/"+icon->whatsThis().section("/",-1) );
emit NewShortcut();
}else if(button->whatsThis()=="remove"){
QFile::remove(icon->whatsThis());
emit RemovedShortcut();
}
}
void UserItemWidget::ItemClicked(){
emit RunItem("lumina-open \""+icon->whatsThis()+"\"" );
}
|