aboutsummaryrefslogtreecommitdiff
path: root/lumina-desktop/desktop-plugins/desktopview/DesktopViewPlugin.cpp
diff options
context:
space:
mode:
authorKen Moore <ken@pcbsd.org>2014-11-03 11:41:29 -0500
committerKen Moore <ken@pcbsd.org>2014-11-03 11:41:29 -0500
commit53ce9ffd7903e59a6a215e50c39d8da194c0d42e (patch)
tree9ebaa097c957e9297f8026f6673af7df0e5fdce7 /lumina-desktop/desktop-plugins/desktopview/DesktopViewPlugin.cpp
parentLarge quality of life update to Lumina: (diff)
downloadlumina-53ce9ffd7903e59a6a215e50c39d8da194c0d42e.tar.gz
lumina-53ce9ffd7903e59a6a215e50c39d8da194c0d42e.tar.bz2
lumina-53ce9ffd7903e59a6a215e50c39d8da194c0d42e.zip
Add a new desktop plugin: desktopview
This plugin provides an area of the screen for automatically displaying icons for anything in the ~/Desktop folder. An icon can be opened/run via a double-click of the mouse.
Diffstat (limited to 'lumina-desktop/desktop-plugins/desktopview/DesktopViewPlugin.cpp')
-rw-r--r--lumina-desktop/desktop-plugins/desktopview/DesktopViewPlugin.cpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/lumina-desktop/desktop-plugins/desktopview/DesktopViewPlugin.cpp b/lumina-desktop/desktop-plugins/desktopview/DesktopViewPlugin.cpp
new file mode 100644
index 00000000..98d132ac
--- /dev/null
+++ b/lumina-desktop/desktop-plugins/desktopview/DesktopViewPlugin.cpp
@@ -0,0 +1,69 @@
+#include "DesktopViewPlugin.h"
+
+#include <QFileInfo>
+#include <QDir>
+
+#include <LuminaXDG.h>
+#include "LSession.h"
+
+
+DesktopViewPlugin::DesktopViewPlugin(QWidget* parent, QString ID) : LDPlugin(parent, ID){
+ this->setLayout( new QVBoxLayout());
+ this->layout()->setContentsMargins(0,0,0,0);
+ list = new QListWidget(this);
+ list->setUniformItemSizes(true);
+ list->setViewMode(QListView::IconMode);
+ list->setLayoutMode(QListView::Batched);
+ list->setBatchSize(10); //keep it snappy
+ list->setSpacing(2);
+ list->setSelectionBehavior(QAbstractItemView::SelectItems);
+ list->setSelectionMode(QAbstractItemView::NoSelection);
+ list->setStyleSheet( "QListWidget{ background: transparent; }" );
+ list->setIconSize(QSize(64,64));
+ list->setGridSize(QSize(80,80));
+ this->layout()->addWidget(list);
+ this->setInitialSize(200,300);
+ watcher = new QFileSystemWatcher(this);
+ watcher->addPath(QDir::homePath()+"/Desktop");
+ connect(watcher, SIGNAL(directoryChanged(QString)), this, SLOT(updateContents()) );
+
+ connect(list, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(runItem(QListWidgetItem*)) );
+ QTimer::singleShot(0,this, SLOT(updateContents()) );
+}
+
+DesktopViewPlugin::~DesktopViewPlugin(){
+
+}
+
+void DesktopViewPlugin::runItem(QListWidgetItem *item){
+ LSession::LaunchApplication("lumina-open \""+item->whatsThis()+"\"");
+}
+
+void DesktopViewPlugin::updateContents(){
+ list->clear();
+ QDir dir(QDir::homePath()+"/Desktop");
+ QFileInfoList files = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name | QDir::Type | QDir::DirsFirst);
+ for(int i=0; i<files.length(); i++){
+ QListWidgetItem *it = new QListWidgetItem;
+ it->setWhatsThis(files[i].absoluteFilePath());
+ if(files[i].isDir()){
+ it->setIcon( LXDG::findIcon("folder","") );
+ it->setText( files[i].fileName() );
+ }else if(files[i].suffix() == "desktop" ){
+ bool ok = false;
+ XDGDesktop desk = LXDG::loadDesktopFile(files[i].absoluteFilePath(), ok);
+ if(ok){
+ it->setIcon( LXDG::findIcon(desk.icon,"") );
+ it->setText( desk.name );
+ }else{
+ //Revert back to a standard file handling
+ it->setIcon( LXDG::findMimeIcon(files[i].suffix()) );
+ it->setText( files[i].fileName() );
+ }
+ }else{
+ it->setIcon( LXDG::findMimeIcon(files[i].suffix()) );
+ it->setText( files[i].fileName() );
+ }
+ list->addItem(it);
+ }
+} \ No newline at end of file
bgstack15