diff options
Diffstat (limited to 'src-qt5/core/lumina-desktop')
186 files changed, 42106 insertions, 0 deletions
diff --git a/src-qt5/core/lumina-desktop/AppMenu.cpp b/src-qt5/core/lumina-desktop/AppMenu.cpp new file mode 100644 index 00000000..14af988a --- /dev/null +++ b/src-qt5/core/lumina-desktop/AppMenu.cpp @@ -0,0 +1,151 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "AppMenu.h" +#include "LSession.h" +#include <LuminaOS.h> + +AppMenu::AppMenu(QWidget* parent) : QMenu(parent){ + appstorelink = LOS::AppStoreShortcut(); //Default application "store" to display (AppCafe in PC-BSD) + controlpanellink = LOS::ControlPanelShortcut(); //Default control panel + APPS.clear(); + watcher = new QFileSystemWatcher(this); + connect(watcher, SIGNAL(directoryChanged(QString)), this, SLOT(watcherUpdate()) ); + //QTimer::singleShot(200, this, SLOT(start()) ); //Now start filling the menu + start(); //do the initial run during session init so things are responsive immediately. + connect(QApplication::instance(), SIGNAL(LocaleChanged()), this, SLOT(watcherUpdate()) ); + connect(QApplication::instance(), SIGNAL(IconThemeChanged()), this, SLOT(watcherUpdate()) ); +} + +AppMenu::~AppMenu(){ + +} + +QHash<QString, QList<XDGDesktop> >* AppMenu::currentAppHash(){ + return &APPS; +} + +//=========== +// PRIVATE +//=========== +void AppMenu::updateAppList(){ + //Make sure the title/icon are updated as well (in case of locale/icon change) + this->setTitle(tr("Applications")); + this->setIcon( LXDG::findIcon("system-run","") ); + //Now update the lists + this->clear(); + APPS.clear(); + QList<XDGDesktop> allfiles = LXDG::systemDesktopFiles(); + APPS = LXDG::sortDesktopCats(allfiles); + APPS.insert("All", LXDG::sortDesktopNames(allfiles)); + lastHashUpdate = QDateTime::currentDateTime(); + //Now fill the menu + bool ok; //for checking inputs + //Add link to the file manager + //this->addAction( LXDG::findIcon("user-home", ""), tr("Browse Files"), this, SLOT(launchFileManager()) ); + //--Look for the app store + XDGDesktop store = LXDG::loadDesktopFile(appstorelink, ok); + if(ok){ + this->addAction( LXDG::findIcon(store.icon, ""), tr("Manage Applications"), this, SLOT(launchStore()) ); + } + //--Look for the control panel + store = LXDG::loadDesktopFile(controlpanellink, ok); + if(ok){ + this->addAction( LXDG::findIcon(store.icon, ""), tr("Control Panel"), this, SLOT(launchControlPanel()) ); + } + this->addSeparator(); + //--Now create the sub-menus + QStringList cats = APPS.keys(); + cats.sort(); //make sure they are alphabetical + for(int i=0; i<cats.length(); i++){ + //Make sure they are translated and have the right icons + QString name, icon; + if(cats[i]=="All"){continue; } //skip this listing for the menu + else if(cats[i] == "Multimedia"){ name = tr("Multimedia"); icon = "applications-multimedia"; } + else if(cats[i] == "Development"){ name = tr("Development"); icon = "applications-development"; } + else if(cats[i] == "Education"){ name = tr("Education"); icon = "applications-education"; } + else if(cats[i] == "Game"){ name = tr("Games"); icon = "applications-games"; } + else if(cats[i] == "Graphics"){ name = tr("Graphics"); icon = "applications-graphics"; } + else if(cats[i] == "Network"){ name = tr("Network"); icon = "applications-internet"; } + else if(cats[i] == "Office"){ name = tr("Office"); icon = "applications-office"; } + else if(cats[i] == "Science"){ name = tr("Science"); icon = "applications-science"; } + else if(cats[i] == "Settings"){ name = tr("Settings"); icon = "preferences-system"; } + else if(cats[i] == "System"){ name = tr("System"); icon = "applications-system"; } + else if(cats[i] == "Utility"){ name = tr("Utility"); icon = "applications-utilities"; } + else if(cats[i] == "Wine"){ name = tr("Wine"); icon = "wine"; } + else{ name = tr("Unsorted"); icon = "applications-other"; } + + QMenu *menu = new QMenu(name, this); + menu->setIcon(LXDG::findIcon(icon,"")); + connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(launchApp(QAction*)) ); + QList<XDGDesktop> appL = APPS.value(cats[i]); + for( int a=0; a<appL.length(); a++){ + if(appL[a].actions.isEmpty()){ + //Just a single entry point - no extra actions + QAction *act = new QAction(LXDG::findIcon(appL[a].icon, ""), appL[a].name, this); + act->setToolTip(appL[a].comment); + act->setWhatsThis(appL[a].filePath); + menu->addAction(act); + }else{ + //This app has additional actions - make this a sub menu + // - first the main menu/action + QMenu *submenu = new QMenu(appL[a].name, this); + submenu->setIcon( LXDG::findIcon(appL[a].icon,"") ); + //This is the normal behavior - not a special sub-action (although it needs to be at the top of the new menu) + QAction *act = new QAction(LXDG::findIcon(appL[a].icon, ""), appL[a].name, this); + act->setToolTip(appL[a].comment); + act->setWhatsThis(appL[a].filePath); + submenu->addAction(act); + //Now add entries for every sub-action listed + for(int sa=0; sa<appL[a].actions.length(); sa++){ + QAction *sact = new QAction(LXDG::findIcon(appL[a].actions[sa].icon, appL[a].icon), appL[a].actions[sa].name, this); + sact->setToolTip(appL[a].comment); + sact->setWhatsThis("-action \""+appL[a].actions[sa].ID+"\" \""+appL[a].filePath+"\""); + submenu->addAction(sact); + } + menu->addMenu(submenu); + } + } + this->addMenu(menu); + } + emit AppMenuUpdated(); +} + +//================= +// PRIVATE SLOTS +//================= +void AppMenu::start(){ + //Setup the watcher + watcher->addPaths(LXDG::systemApplicationDirs()); + //Now fill the menu the first time + updateAppList(); +} + +void AppMenu::watcherUpdate(){ + updateAppList(); //Update the menu listings +} + +void AppMenu::launchStore(){ + LSession::LaunchApplication("lumina-open \""+appstorelink+"\""); +} + +void AppMenu::launchControlPanel(){ + LSession::LaunchApplication("lumina-open \""+controlpanellink+"\""); +} + +void AppMenu::launchFileManager(){ + QString fm = "lumina-open \""+QDir::homePath()+"\""; + LSession::LaunchApplication(fm); +} + +void AppMenu::launchApp(QAction *act){ + QString appFile = act->whatsThis(); + if(appFile.startsWith("-action")){ + LSession::LaunchApplication("lumina-open "+appFile); //already has quotes put in place properly + }else{ + LSession::LaunchApplication("lumina-open \""+appFile+"\""); + } +} diff --git a/src-qt5/core/lumina-desktop/AppMenu.h b/src-qt5/core/lumina-desktop/AppMenu.h new file mode 100644 index 00000000..42145e0c --- /dev/null +++ b/src-qt5/core/lumina-desktop/AppMenu.h @@ -0,0 +1,58 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This menu auto-updates to keep the list of available applications +// current at all times - and can launch them as necessary +//=========================================== +#ifndef _LUMINA_DESKTOP_APP_MENU_H +#define _LUMINA_DESKTOP_APP_MENU_H + +// Qt includes +#include <QMenu> +#include <QFileSystemWatcher> +#include <QString> +#include <QList> +#include <QTimer> +#include <QDateTime> +#include <QHash> +#include <QAction> +#include <QSettings> +//#include <QProcess> + +// libLumina includes +#include <LuminaXDG.h> + +class AppMenu : public QMenu{ + Q_OBJECT +public: + AppMenu(QWidget *parent = 0); + ~AppMenu(); + + QHash<QString, QList<XDGDesktop> > *currentAppHash(); + QDateTime lastHashUpdate; + +private: + QFileSystemWatcher *watcher; + QString appstorelink, controlpanellink; + QList<QMenu> MLIST; + QHash<QString, QList<XDGDesktop> > APPS; + + void updateAppList(); //completely update the menu lists + +private slots: + void start(); //This is called in a new thread after initialization + void watcherUpdate(); + void launchStore(); + void launchControlPanel(); + void launchFileManager(); + void launchApp(QAction *act); + +signals: + void AppMenuUpdated(); +}; + +#endif + diff --git a/src-qt5/core/lumina-desktop/BootSplash.cpp b/src-qt5/core/lumina-desktop/BootSplash.cpp new file mode 100644 index 00000000..e75bca21 --- /dev/null +++ b/src-qt5/core/lumina-desktop/BootSplash.cpp @@ -0,0 +1,62 @@ +#include "BootSplash.h" +#include "ui_BootSplash.h" + +#include <LuminaXDG.h> + +BootSplash::BootSplash() : QWidget(0, Qt::SplashScreen | Qt::X11BypassWindowManagerHint | Qt::WindowStaysOnTopHint | Qt::WindowDoesNotAcceptFocus), ui(new Ui::BootSplash){ + ui->setupUi(this); + this->setObjectName("LuminaBootSplash"); //for theme styling + //Center the window on the primary screen + QPoint ctr = QApplication::desktop()->screenGeometry().center(); + this->move( ctr.x()-(this->width()/2), ctr.y()-(this->height()/2) ); +} + +void BootSplash::showScreen(QString loading){ //update icon, text, and progress + QString txt, icon; + int per = 0; + if(loading=="init"){ + txt = tr("Initializing Session …"); per = 10; + icon = "preferences-system-login"; + }else if(loading=="settings"){ + txt = tr("Loading System Settings …"); per = 20; + icon = "user-home"; + }else if(loading=="user"){ + txt = tr("Loading User Preferences …"); per = 30; + icon = "preferences-desktop-user"; + }else if(loading=="systray"){ + txt = tr("Preparing System Tray …"); per = 40; + icon = "preferences-plugin"; + }else if(loading=="wm"){ + txt = tr("Starting Window Manager …"); per = 50; + icon = "preferences-system-windows-actions"; + }else if(loading=="apps"){ + txt = tr("Detecting Applications …"); per = 60; + icon = "preferences-desktop-icons"; + }else if(loading=="menus"){ + txt = tr("Preparing Menus …"); per = 70; + icon = "preferences-system-windows"; + }else if(loading=="desktop"){ + txt = tr("Preparing Workspace …"); per = 80; + icon = "preferences-desktop-wallpaper"; + }else if(loading=="final"){ + txt = tr("Finalizing …"); per = 90; + icon = "pcbsd"; + }else if(loading.startsWith("app::")){ + txt = QString(tr("Starting App: %1")).arg(loading.section("::",1,50)); per = -1; + } + if(per>0){ ui->progressBar->setValue(per); } + else{ ui->progressBar->setRange(0,0); } //loading indicator + ui->label_text->setText(txt); + if(!icon.isEmpty()){ui->label_icon->setPixmap( LXDG::findIcon(icon, "Lumina-DE").pixmap(64,64) ); } + this->raise(); + this->show(); + this->update(); + QApplication::processEvents(); +} + +void BootSplash::showText(QString txt){ //will only update the text, not the icon/progress + ui->label_text->setText(txt); + this->show(); + this->update(); + QApplication::processEvents(); +} diff --git a/src-qt5/core/lumina-desktop/BootSplash.h b/src-qt5/core/lumina-desktop/BootSplash.h new file mode 100644 index 00000000..f5bf97a8 --- /dev/null +++ b/src-qt5/core/lumina-desktop/BootSplash.h @@ -0,0 +1,29 @@ +#ifndef _LUMINA_DESKTOP_BOOT_SPLASHSCREEN_H +#define _LUMINA_DESKTOP_BOOT_SPLASHSCREEN_H + +#include <QWidget> +#include <QLabel> +#include <QProgressBar> +#include <QPixmap> +#include <QPoint> +#include <QApplication> +#include <QDesktopWidget> + +namespace Ui{ + class BootSplash; +}; + +class BootSplash : public QWidget{ + Q_OBJECT +private: + Ui::BootSplash *ui; + +public: + BootSplash(); + ~BootSplash(){} + + void showScreen(QString loading); //update icon, text, and progress + void showText(QString txt); //will only update the text, not the icon/progress +}; + +#endif
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/BootSplash.ui b/src-qt5/core/lumina-desktop/BootSplash.ui new file mode 100644 index 00000000..867b658c --- /dev/null +++ b/src-qt5/core/lumina-desktop/BootSplash.ui @@ -0,0 +1,89 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>BootSplash</class> + <widget class="QWidget" name="BootSplash"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>280</width> + <height>127</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="4"> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="0" column="2"> + <widget class="QLabel" name="label_icon"> + <property name="minimumSize"> + <size> + <width>64</width> + <height>64</height> + </size> + </property> + <property name="text"> + <string notr="true"/> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item row="0" column="0" rowspan="2"> + <widget class="QProgressBar" name="progressBar"> + <property name="value"> + <number>0</number> + </property> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="format"> + <string/> + </property> + </widget> + </item> + <item row="0" column="1"> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="1" colspan="4"> + <widget class="QLabel" name="label_text"> + <property name="text"> + <string notr="true">Some loading message</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src-qt5/core/lumina-desktop/Globals.h b/src-qt5/core/lumina-desktop/Globals.h new file mode 100644 index 00000000..479fe4ad --- /dev/null +++ b/src-qt5/core/lumina-desktop/Globals.h @@ -0,0 +1,75 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2012, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef _LUMINA_DESKTOP_GLOBALS_H +#define _LUMINA_DESKTOP_GLOBALS_H + +#include <LuminaUtils.h> +//#include "../global.h" + +#include <unistd.h> +#include <stdio.h> + +/*#ifdef __linux + // Needed for BUFSIZ + #include <stdio.h> +#endif // #ifdef __linux*/ + +class Lumina{ +public: + enum STATES {NONE, VISIBLE, INVISIBLE, ACTIVE, NOTIFICATION, NOSHOW}; + +}; + +class SYSTEM{ +public: + //Installation location for finding default files + //static QString installDir(){ return PREFIX + "/share/Lumina-DE/"; } + //Current Username + static QString user(){ return QString::fromLocal8Bit(getlogin()); } + //Current Hostname + static QString hostname(){ + char name[BUFSIZ]; + int count = gethostname(name,sizeof(name)); + if (count < 0) { + return QString::null; + } + return QString::fromLocal8Bit(name,count); + } + /*//Shutdown the system +#ifdef __linux + static void shutdown(){ system("(shutdown -h now) &"); } +#else // #ifdef __linux + static void shutdown(){ system("(shutdown -p now) &"); } +#endif // #ifdef __linux + //Restart the system + static void restart(){ system("(shutdown -r now) &"); } + + //Determine if there is battery support + static bool hasBattery(){ + int val = LUtils::getCmdOutput("apm -l").join("").toInt(); + return (val >= 0 && val <= 100); + } + + //Get the current battery charge percentage + static int batteryCharge(){ + int charge = LUtils::getCmdOutput("apm -l").join("").toInt(); + if(charge > 100){ charge = -1; } //invalid charge + return charge; + } + + //Get the current battery charge percentage + static bool batteryIsCharging(){ + return (LUtils::getCmdOutput("apm -a").join("").simplified() == "1"); + } + + //Get the amount of time remaining for the battery + static int batterySecondsLeft(){ + return LUtils::getCmdOutput("apm -t").join("").toInt(); + }*/ +}; + +#endif diff --git a/src-qt5/core/lumina-desktop/Insight-FileManager.png b/src-qt5/core/lumina-desktop/Insight-FileManager.png Binary files differnew file mode 100644 index 00000000..46cfaad7 --- /dev/null +++ b/src-qt5/core/lumina-desktop/Insight-FileManager.png diff --git a/src-qt5/core/lumina-desktop/LDesktop.cpp b/src-qt5/core/lumina-desktop/LDesktop.cpp new file mode 100644 index 00000000..72b267b0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/LDesktop.cpp @@ -0,0 +1,532 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2012-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LDesktop.h" +#include "LSession.h" + +#include <LuminaOS.h> +#include <LuminaX11.h> +#include "LWinInfo.h" + +#define DEBUG 0 + +LDesktop::LDesktop(int deskNum, bool setdefault) : QObject(){ + + DPREFIX = "desktop-"+QString::number(deskNum)+"/"; + desktopnumber = deskNum; + desktop = QApplication::desktop(); + defaultdesktop = setdefault; //(desktop->screenGeometry(desktopnumber).x()==0); + desktoplocked = true; + issyncing = bgupdating = false; + usewinmenu=false; + + //Setup the internal variables + settings = new QSettings(QSettings::UserScope, "LuminaDE","desktopsettings", this); + //qDebug() << " - Desktop Settings File:" << settings->fileName(); + if(!QFile::exists(settings->fileName())){ settings->setValue(DPREFIX+"background/filelist",QStringList()<<"default"); settings->sync(); } + bgWindow = 0; + bgDesktop = 0; + QTimer::singleShot(1,this, SLOT(InitDesktop()) ); + +} + +LDesktop::~LDesktop(){ + delete deskMenu; + delete winMenu; + delete bgWindow; + delete workspacelabel; + delete wkspaceact; +} + +int LDesktop::Screen(){ + return desktopnumber; +} + +void LDesktop::show(){ + if(bgWindow!=0){ bgWindow->show(); } + if(bgDesktop!=0){ bgDesktop->show(); } + for(int i=0; i<PANELS.length(); i++){ PANELS[i]->show(); } +} + +void LDesktop::hide(){ + if(bgWindow!=0){ bgWindow->hide(); } + if(bgDesktop!=0){ bgDesktop->hide(); } + for(int i=0; i<PANELS.length(); i++){ PANELS[i]->hide(); } +} + +void LDesktop::prepareToClose(){ + //Get any panels ready to close + issyncing = true; //Stop handling any watcher events + for(int i=0; i<PANELS.length(); i++){ PANELS[i]->prepareToClose(); PANELS.takeAt(i)->deleteLater(); i--; } + //Now close down any desktop plugins + desktoplocked = true; //make sure that plugin settings are preserved during removal + //Remove all the current containers + bgDesktop->cleanup(); +} + +WId LDesktop::backgroundID(){ + if(bgWindow!=0){ return bgWindow->winId(); } + else{ return QX11Info::appRootWindow(); } +} + +QRect LDesktop::availableScreenGeom(){ + //Return a QRect containing the (global) screen area that is available (not under any panels) + if(bgDesktop!=0){ + return globalWorkRect; //saved from previous calculations + }else{ + return LSession::handle()->screenGeom(desktopnumber); + } +} + +void LDesktop::UpdateGeometry(){ + //First make sure there is something different about the geometry + //if(desktop->screenGeometry(desktopnumber)==bgWindow->geometry()){ return; } + //Now update the screen + // NOTE: This functionality is highly event-driven based on X changes - so we need to keep things in order (no signals/slots) + qDebug() << "Changing Desktop Geom:" << desktopnumber; + bgWindow->setGeometry(desktop->screenGeometry(desktopnumber)); + qDebug() << " - Update Desktop Plugin Area"; + UpdateDesktopPluginArea(); + /*qDebug() << " - Update Panel Geometry"; + for(int i=0; PANELS.length(); i++){ + PANELS[i]->UpdatePanel(true); //only update geometry + }*/ + qDebug() << " - Done With Desktop Geom Updates"; + QTimer::singleShot(0, this, SLOT(UpdatePanels())); +} + +void LDesktop::SystemLogout(){ + LSession::handle()->systemWindow(); +} + +void LDesktop::SystemTerminal(){ + LSession::handle()->sessionSettings()->sync(); //make sure it is up to date + QString term = LSession::handle()->sessionSettings()->value("default-terminal","xterm").toString(); + if(term.endsWith(".desktop")){ term = "lumina-open \""+term+"\""; } + LSession::LaunchApplication(term); +} + +void LDesktop::SystemFileManager(){ + //Just open the home directory + QString fm = "lumina-open \""+QDir::homePath()+"\""; + LSession::LaunchApplication(fm); +} + +void LDesktop::SystemApplication(QAction* act){ + if(!act->whatsThis().isEmpty() && act->parent()==deskMenu){ + LSession::LaunchApplication("lumina-open \""+act->whatsThis()+"\""); + } +} + +void LDesktop::checkResolution(){ + //Compare the current screen resolution with the last one used/saved and adjust config values *only* + //NOTE: This is only run the first time this desktop is created (before loading all the interface) - not on each desktop change + int oldWidth = settings->value(DPREFIX+"screen/lastWidth",-1).toInt(); + int oldHeight = settings->value(DPREFIX+"screen/lastHeight",-1).toInt(); + QRect scrn = LSession::handle()->screenGeom(desktopnumber); + if(scrn.isNull()){ return; } + issyncing = true; + settings->setValue(DPREFIX+"screen/lastWidth",scrn.width()); + settings->setValue(DPREFIX+"screen/lastHeight",scrn.height()); + + if(oldWidth<1 || oldHeight<1 || scrn.width()<1 || scrn.height()<1){ + //nothing to do - something invalid + }else if(scrn.width()==oldWidth && scrn.height()==oldHeight){ + //nothing to do - same as before + }else{ + //Calculate the scale factor between the old/new sizes in each dimension + // and forward that on to all the interface elements + double xscale = scrn.width()/((double) oldWidth); + double yscale = scrn.height()/((double) oldHeight); + if(DEBUG){ + qDebug() << "Screen Resolution Changed:" << desktopnumber; + qDebug() << " - Old:" << QString::number(oldWidth)+"x"+QString::number(oldHeight); + qDebug() << " - New:" << QString::number(scrn.width())+"x"+QString::number(scrn.height()); + qDebug() << " - Scale Factors:" << xscale << yscale; + } + //Update any panels in the config file + for(int i=0; i<4; i++){ + QString PPREFIX = "panel"+QString::number(desktopnumber)+"."+QString::number(i)+"/"; + int ht = settings->value(PPREFIX+"height",-1).toInt(); + if(ht<1){ continue; } //no panel height defined + QString loc = settings->value(PPREFIX+"location","top").toString().toLower(); + if(loc=="top" || loc=="bottom"){ + settings->setValue(PPREFIX+"height", (int) ht*yscale); //vertical dimension + }else{ + settings->setValue(PPREFIX+"height", (int) ht*xscale); //horizontal dimension + } + } + //Update any desktop plugins + QStringList plugs = settings->value(DPREFIX+"pluginlist").toStringList(); + QFileInfoList files = LSession::handle()->DesktopFiles(); + for(int i=0; i<files.length(); i++){ + plugs << "applauncher::"+files[i].absoluteFilePath()+"---"+DPREFIX; + } + //QString pspath = QDir::homePath()+"/.lumina/desktop-plugins/%1.conf"; + QSettings *DP = LSession::handle()->DesktopPluginSettings(); + QStringList keys = DP->allKeys(); + for(int i=0; i<plugs.length(); i++){ + QStringList filter = keys.filter(plugs[i]); + for(int j=0; j<filter.length(); j++){ + //Has existing settings - need to adjust it + if(filter[j].endsWith("location/height")){ DP->setValue( filter[j], qRound(DP->value(filter[j]).toInt()*yscale) ); } + if(filter[j].endsWith("location/width")){ DP->setValue( filter[j], qRound(DP->value(filter[j]).toInt()*xscale) ); } + if(filter[j].endsWith("location/x")){ DP->setValue( filter[j], qRound(DP->value(filter[j]).toInt()*xscale) ); } + if(filter[j].endsWith("location/y")){ DP->setValue( filter[j], qRound(DP->value(filter[j]).toInt()*yscale) ); } + if(filter[j].endsWith("IconSize")){ DP->setValue( filter[j], qRound(DP->value(filter[j]).toInt()*yscale) ); } + if(filter[j].endsWith("iconsize")){ DP->setValue( filter[j], qRound(DP->value(filter[j]).toInt()*yscale) ); } + } + } + DP->sync(); //make sure it gets saved to disk right away + + } + issyncing = false; +} + +// ===================== +// PRIVATE SLOTS +// ===================== +void LDesktop::InitDesktop(){ + //This is called *once* during the main initialization routines + checkResolution(); //Adjust the desktop config file first (if necessary) + if(DEBUG){ qDebug() << "Init Desktop:" << desktopnumber; } + //connect(desktop, SIGNAL(resized(int)), this, SLOT(UpdateGeometry(int))); + if(DEBUG){ qDebug() << "Desktop #"<<desktopnumber<<" -> "<< desktop->screenGeometry(desktopnumber) << LSession::handle()->screenGeom(desktopnumber); } + deskMenu = new QMenu(0); + connect(deskMenu, SIGNAL(triggered(QAction*)), this, SLOT(SystemApplication(QAction*)) ); + winMenu = new QMenu(0); + winMenu->setTitle(tr("Window List")); + winMenu->setIcon( LXDG::findIcon("preferences-system-windows","") ); + connect(winMenu, SIGNAL(triggered(QAction*)), this, SLOT(winClicked(QAction*)) ); + workspacelabel = new QLabel(0); + workspacelabel->setAlignment(Qt::AlignCenter); + wkspaceact = new QWidgetAction(0); + wkspaceact->setDefaultWidget(workspacelabel); + bgtimer = new QTimer(this); + bgtimer->setSingleShot(true); + connect(bgtimer, SIGNAL(timeout()), this, SLOT(UpdateBackground()) ); + + connect(QApplication::instance(), SIGNAL(DesktopConfigChanged()), this, SLOT(SettingsChanged()) ); + connect(QApplication::instance(), SIGNAL(DesktopFilesChanged()), this, SLOT(UpdateDesktop()) ); + connect(QApplication::instance(), SIGNAL(LocaleChanged()), this, SLOT(LocaleChanged()) ); + + if(DEBUG){ qDebug() << "Create bgWindow"; } + bgWindow = new QWidget(); + bgWindow->setObjectName("bgWindow"); + bgWindow->setContextMenuPolicy(Qt::CustomContextMenu); + bgWindow->setFocusPolicy(Qt::StrongFocus); + bgWindow->setWindowFlags(Qt::WindowStaysOnBottomHint | Qt::CustomizeWindowHint | Qt::FramelessWindowHint); + LSession::handle()->XCB->SetAsDesktop(bgWindow->winId()); + bgWindow->setGeometry(LSession::handle()->screenGeom(desktopnumber)); + connect(bgWindow, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(ShowMenu()) ); + if(DEBUG){ qDebug() << "Create bgDesktop"; } + bgDesktop = new LDesktopPluginSpace(bgWindow); //new QMdiArea(bgWindow); + int grid = settings->value(DPREFIX+"GridSize",-1).toInt(); + if(grid<0 && bgWindow->height() > 2000){ grid = 200; } + else if(grid<0){ grid = 100; } + bgDesktop->SetIconSize( grid ); + connect(bgDesktop, SIGNAL(PluginRemovedByUser(QString)), this, SLOT(RemoveDeskPlugin(QString)) ); + connect(bgDesktop, SIGNAL(IncreaseIcons()), this, SLOT(IncreaseDesktopPluginIcons()) ); + connect(bgDesktop, SIGNAL(DecreaseIcons()), this, SLOT(DecreaseDesktopPluginIcons()) ); + connect(bgDesktop, SIGNAL(HideDesktopMenu()), deskMenu, SLOT(hide())); + if(DEBUG){ qDebug() << " - Desktop Init Done:" << desktopnumber; } + //Start the update processes + QTimer::singleShot(10,this, SLOT(UpdateMenu()) ); + QTimer::singleShot(0,this, SLOT(UpdateBackground()) ); + QTimer::singleShot(1,this, SLOT(UpdateDesktop()) ); + QTimer::singleShot(2,this, SLOT(UpdatePanels()) ); +} + +void LDesktop::SettingsChanged(){ + if(issyncing){ return; } //don't refresh for internal modifications to the + issyncing = true; + qDebug() << "Found Settings Change:" << desktopnumber; + settings->sync(); //make sure to sync with external settings changes + UpdateBackground(); + UpdateDesktop(); + UpdatePanels(); + UpdateMenu(); + issyncing = false; + QTimer::singleShot(100, this, SLOT(UnlockSettings()) ); //give it a few moments to settle before performing another sync +} + +void LDesktop::LocaleChanged(){ + //Update any elements which require a re-translation + UpdateMenu(false); //do the full menu refresh +} + +void LDesktop::UpdateMenu(bool fast){ + if(DEBUG){ qDebug() << " - Update Menu:" << desktopnumber; } + //Put a label at the top + int num = LSession::handle()->XCB->CurrentWorkspace(); //LX11::GetCurrentDesktop(); + if(DEBUG){ qDebug() << "Found workspace number:" << num; } + if(num < 0){ workspacelabel->setText( "<b>"+tr("Lumina Desktop")+"</b>"); } + else{ workspacelabel->setText( "<b>"+QString(tr("Workspace %1")).arg(QString::number(num+1))+"</b>"); } + if(fast && usewinmenu){ UpdateWinMenu(); } + if(fast){ return; } //already done + deskMenu->clear(); //clear it for refresh + deskMenu->addAction(wkspaceact); + deskMenu->addSeparator(); + //Now load the user's menu setup and fill the menu + QStringList items = settings->value("menu/itemlist", QStringList()<< "terminal" << "filemanager" <<"applications" << "line" << "settings" ).toStringList(); + usewinmenu=false; + for(int i=0; i<items.length(); i++){ + if(items[i]=="terminal"){ deskMenu->addAction(LXDG::findIcon("utilities-terminal",""), tr("Terminal"), this, SLOT(SystemTerminal()) ); } + else if(items[i]=="filemanager"){ deskMenu->addAction( LXDG::findIcon("user-home",""), tr("Browse Files"), this, SLOT(SystemFileManager()) ); } + else if(items[i]=="applications"){ deskMenu->addMenu( LSession::handle()->applicationMenu() ); } + else if(items[i]=="line"){ deskMenu->addSeparator(); } + else if(items[i]=="settings"){ deskMenu->addMenu( LSession::handle()->settingsMenu() ); } + else if(items[i]=="windowlist"){ deskMenu->addMenu( winMenu); usewinmenu=true;} + else if(items[i].startsWith("app::::") && items[i].endsWith(".desktop")){ + //Custom *.desktop application + QString file = items[i].section("::::",1,1).simplified(); + bool ok = false; + XDGDesktop xdgf = LXDG::loadDesktopFile(file, ok); + if(ok){ + deskMenu->addAction( LXDG::findIcon(xdgf.icon,""), xdgf.name)->setWhatsThis(file); + }else{ + qDebug() << "Could not load application file:" << file; + } + } + } + //Now add the system quit options + deskMenu->addSeparator(); + deskMenu->addAction(LXDG::findIcon("system-log-out",""), tr("Leave"), this, SLOT(SystemLogout()) ); +} + +void LDesktop::UpdateWinMenu(){ + winMenu->clear(); + //Get the current list of windows + QList<WId> wins = LSession::handle()->XCB->WindowList(); + //Now add them to the menu + for(int i=0; i<wins.length(); i++){ + LWinInfo info(wins[i]); + bool junk; + QAction *act = winMenu->addAction( info.icon(junk), info.text() ); + act->setData( QString::number(wins[i]) ); + } +} + +void LDesktop::winClicked(QAction* act){ + LSession::handle()->XCB->ActivateWindow( act->data().toString().toULong() ); +} + +void LDesktop::UpdateDesktop(){ + if(DEBUG){ qDebug() << " - Update Desktop Plugins for screen:" << desktopnumber; } + QStringList plugins = settings->value(DPREFIX+"pluginlist", QStringList()).toStringList(); + if(defaultdesktop && plugins.isEmpty()){ + //plugins << "sample" << "sample" << "sample"; + } + bool changed=false; //in case the plugin list needs to be changed + //First make sure all the plugin names are unique + for(int i=0; i<plugins.length(); i++){ + if(!plugins[i].contains("---") ){ + int num=1; + while( plugins.contains(plugins[i]+"---"+QString::number(desktopnumber)+"."+QString::number(num)) ){ + num++; + } + plugins[i] = plugins[i]+"---"+QString::number(desktopnumber)+"."+QString::number(num); + changed=true; + } + } + if(changed){ + //save the modified plugin list to file (so per-plugin settings are preserved) + issyncing=true; //don't let the change cause a refresh + settings->setValue(DPREFIX+"pluginlist", plugins); + settings->sync(); + QTimer::singleShot(200, this, SLOT(UnlockSettings()) ); + } + //If generating desktop file launchers, add those in + QStringList filelist; + if(settings->value(DPREFIX+"generateDesktopIcons",false).toBool()){ + QFileInfoList files = LSession::handle()->DesktopFiles(); + for(int i=0; i<files.length(); i++){ + filelist << files[i].absoluteFilePath(); + } + } + UpdateDesktopPluginArea(); + bgDesktop->LoadItems(plugins, filelist); +} + +void LDesktop::RemoveDeskPlugin(QString ID){ + //This is called after a plugin is manually removed by the user + // just need to ensure that the plugin is also removed from the settings file + QStringList plugs = settings->value(DPREFIX+"pluginlist", QStringList()).toStringList(); + if(plugs.contains(ID)){ + plugs.removeAll(ID); + issyncing=true; //don't let the change cause a refresh + settings->setValue(DPREFIX+"pluginlist", plugs); + settings->sync(); + QTimer::singleShot(200, this, SLOT(UnlockSettings()) ); + } +} + +void LDesktop::IncreaseDesktopPluginIcons(){ + int cur = settings->value(DPREFIX+"GridSize",-1).toInt(); + if(cur<0 && bgWindow->height() > 2000){ cur = 200; } + else if(cur<0){ cur = 100; } + cur+=16; + issyncing=true; //don't let the change cause a refresh + settings->setValue(DPREFIX+"GridSize",cur); + settings->sync(); + QTimer::singleShot(200, this, SLOT(UnlockSettings()) ); + bgDesktop->SetIconSize(cur); +} + +void LDesktop::DecreaseDesktopPluginIcons(){ + int cur = settings->value(DPREFIX+"GridSize",-1).toInt(); + if(cur<0 && bgWindow->height() > 2000){ cur = 200; } + else if(cur<0){ cur = 100; } + if(cur<32){ return; } //cannot get smaller than 16x16 + cur-=16; + issyncing=true; //don't let the change cause a refresh + settings->setValue(DPREFIX+"GridSize",cur); + settings->sync(); + QTimer::singleShot(200, this, SLOT(UnlockSettings()) ); + bgDesktop->SetIconSize(cur); +} + +void LDesktop::UpdatePanels(){ + if(DEBUG){ qDebug() << " - Update Panels For Screen:" << desktopnumber; } + int panels = settings->value(DPREFIX+"panels", -1).toInt(); + //if(panels==-1 && defaultdesktop){ panels=1; } //need at least 1 panel on the primary desktop + //Remove all extra panels + for(int i=0; i<PANELS.length(); i++){ + if(panels <= PANELS[i]->number()){ + if(DEBUG){ qDebug() << " -- Remove Panel:" << PANELS[i]->number(); } + PANELS[i]->prepareToClose(); + PANELS.takeAt(i)->deleteLater(); + i--; + } + } + for(int i=0; i<panels; i++){ + //Check for a panel with this number + bool found = false; + for(int p=0; p<PANELS.length() && !found; p++){ + if(PANELS[p]->number() == i){ + found = true; + if(DEBUG){ qDebug() << " -- Update panel "<< i; } + //panel already exists - just update it + QTimer::singleShot(0, PANELS[p], SLOT(UpdatePanel()) ); + } + } + if(!found){ + if(DEBUG){ qDebug() << " -- Create panel "<< i; } + //New panel + LPanel *pan = new LPanel(settings, desktopnumber, i, bgWindow); + PANELS << pan; + pan->show(); + } + } + //Give it a 1/2 second before ensuring that the visible desktop area is correct + QTimer::singleShot(500, this, SLOT(UpdateDesktopPluginArea()) ); +} + +void LDesktop::UpdateDesktopPluginArea(){ + QRegion visReg( bgWindow->geometry() ); //visible region (not hidden behind a panel) + QRect rawRect = visReg.boundingRect(); //initial value (screen size) + for(int i=0; i<PANELS.length(); i++){ + QRegion shifted = visReg; + QString loc = settings->value(PANELS[i]->prefix()+"location","top").toString().toLower(); + int vis = PANELS[i]->visibleWidth(); + if(loc=="top"){ + if(!shifted.contains(QRect(rawRect.x(), rawRect.y(), rawRect.width(), vis))){ continue; } + shifted.translate(0, (rawRect.top()+vis)-shifted.boundingRect().top() ); + }else if(loc=="bottom"){ + if(!shifted.contains(QRect(rawRect.x(), rawRect.bottom()-vis, rawRect.width(), vis))){ continue; } + shifted.translate(0, (rawRect.bottom()-vis)-shifted.boundingRect().bottom()); + }else if(loc=="left"){ + if( !shifted.contains(QRect(rawRect.x(), rawRect.y(), vis,rawRect.height())) ){ continue; } + shifted.translate((rawRect.left()+vis)-shifted.boundingRect().left() ,0); + }else{ //right + if(!shifted.contains(QRect(rawRect.right()-vis, rawRect.y(), vis,rawRect.height())) ){ continue; } + shifted.translate((rawRect.right()-vis)-shifted.boundingRect().right(),0); + } + visReg = visReg.intersected( shifted ); + } + //Now make sure the desktop plugin area is only the visible area + QRect rec = visReg.boundingRect(); + //LSession::handle()->XCB->SetScreenWorkArea((unsigned int) desktopnumber, rec); + //Now remove the X offset to place it on the current screen (needs widget-coords, not global) + globalWorkRect = rec; //save this for later + rec.moveTopLeft( QPoint( rec.x()-desktop->screenGeometry(desktopnumber).x() , rec.y() ) ); + //qDebug() << "DPlug Area:" << rec << bgDesktop->geometry() << LSession::handle()->desktop()->availableGeometry(bgDesktop); + if(rec.size().isNull() || rec == bgDesktop->geometry()){return; } //nothing changed + bgDesktop->setGeometry( rec ); + bgDesktop->UpdateGeom(); //just in case the plugin space itself needs to do anything + //Re-paint the panels (just in case a plugin was underneath it and the panel is transparent) + for(int i=0; i<PANELS.length(); i++){ PANELS[i]->update(); } + //Make sure to re-disable any WM control flags + LSession::handle()->XCB->SetDisableWMActions(bgWindow->winId()); +} + +void LDesktop::UpdateBackground(){ + //Get the current Background + if(bgupdating || bgWindow==0){ return; } //prevent multiple calls to this at the same time + bgupdating = true; + if(DEBUG){ qDebug() << " - Update Desktop Background for screen:" << desktopnumber; } + //Get the list of background(s) to show + QStringList bgL = settings->value(DPREFIX+"background/filelist", QStringList()).toStringList(); + //qDebug() << " - List:" << bgL << CBG; + //Remove any invalid files + for(int i=0; i<bgL.length(); i++){ + if( (!QFile::exists(bgL[i]) && bgL[i]!="default" && !bgL[i].startsWith("rgb(") ) || bgL[i].isEmpty()){ bgL.removeAt(i); i--; } + } + if(bgL.isEmpty()){ bgL << "default"; } //always fall back on the default + //Determine if the background needs to be changed + //qDebug() << "BG List:" << bgL << oldBGL << CBG << bgtimer->isActive(); + if(bgL==oldBGL && !CBG.isEmpty() && bgtimer->isActive()){ + //No background change scheduled - just update the widget + bgWindow->update(); + bgupdating=false; + return; + } + oldBGL = bgL; //save this for later + //Determine which background to use next + int index; + if(CBG.isEmpty()){ index = ( qrand() % bgL.length() ); } //random first wallpaper + else{ + //Go to the next in the list + index = bgL.indexOf(CBG); + if(index < 0 || index >= bgL.length()-1){ index = 0; } //if invalid or last item in the list - go to first + else{ index++; } //go to next + } + QString bgFile = bgL[index]; + //Save this file as the current background + CBG = bgFile; + //qDebug() << " - Set Background to:" << CBG << index << bgL; + if( (bgFile.toLower()=="default")){ bgFile = LOS::LuminaShare()+"desktop-background.jpg"; } + //Now set this file as the current background + QString style; + QString format = settings->value(DPREFIX+"background/format","stretch").toString(); + if(bgFile.startsWith("rgb(")){ style = "QWidget#bgWindow{ border-image: none; background-color: %1;}"; + }else if( format == "center"){ style = "QWidget#bgWindow{ background: black url(%1); background-position: center; background-repeat: no-repeat; }"; + }else if( format == "topleft"){ style = "QWidget#bgWindow{ background: black url(%1); background-position: top left; background-repeat: no-repeat; }"; + }else if( format == "topright"){ style = "QWidget#bgWindow{ background: black url(%1); background-position: top right; background-repeat: no-repeat; }"; + }else if( format == "bottomleft"){ style = "QWidget#bgWindow{ background: black url(%1); background-position: bottom left; background-repeat: no-repeat; }"; + }else if( format == "bottomright"){ style = "QWidget#bgWindow{ background: black url(%1); background-position: bottom right; background-repeat: no-repeat; }"; + }else if( format == "tile"){ style = "QWidget#bgWindow{ background-color: black; border-image:url(%1) repeat;}"; + }else{ /* STRETCH*/ style = "QWidget#bgWindow{ background-color: black; border-image:url(%1) stretch;}"; } + style = style.arg(bgFile); + bgWindow->setStyleSheet(style); + bgWindow->show(); + //Now reset the timer for the next change (if appropriate) + if(bgtimer->isActive()){ bgtimer->stop(); } + if(bgL.length() > 1){ + //get the length of the timer (in minutes) + int min = settings->value(DPREFIX+"background/minutesToChange",5).toInt(); + //restart the internal timer + if(min > 0){ + bgtimer->start(min*60000); //convert from minutes to milliseconds + } + } + //Now update the panel backgrounds + for(int i=0; i<PANELS.length(); i++){ + PANELS[i]->update(); + PANELS[i]->show(); + } + bgupdating=false; +} diff --git a/src-qt5/core/lumina-desktop/LDesktop.h b/src-qt5/core/lumina-desktop/LDesktop.h new file mode 100644 index 00000000..14b6efc3 --- /dev/null +++ b/src-qt5/core/lumina-desktop/LDesktop.h @@ -0,0 +1,105 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2012-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef _LUMINA_DESKTOP_LDESKTOP_H +#define _LUMINA_DESKTOP_LDESKTOP_H + +#include <QCoreApplication> + + +#include <QSettings> +#include <QFile> +#include <QList> +#include <QDebug> +#include <QTimer> +#include <QFileSystemWatcher> +#include <QLabel> +#include <QWidgetAction> +#include <QMdiArea> +#include <QMdiSubWindow> +#include <QRegion> + + +#include <LuminaXDG.h> + +#include "LPanel.h" +//#include "Globals.h" +#include "AppMenu.h" +#include "LDesktopPluginSpace.h" +#include "desktop-plugins/LDPlugin.h" +//#include "desktop-plugins/NewDP.h" + +class LDesktop : public QObject{ + Q_OBJECT +public: + LDesktop(int deskNum=0, bool setdefault = false); + ~LDesktop(); + + int Screen(); //return the screen number this object is managing + void show(); + void hide(); + void prepareToClose(); + + WId backgroundID(); + QRect availableScreenGeom(); + + void UpdateGeometry(); + +public slots: + void SystemLogout(); + void SystemTerminal(); + void SystemFileManager(); + void SystemApplication(QAction*); + + void checkResolution(); + +private: + QSettings *settings; + QTimer *bgtimer; + QDesktopWidget *desktop; + QString DPREFIX; + int desktopnumber; + QRegion availDPArea; + bool defaultdesktop, desktoplocked, issyncing, usewinmenu, bgupdating; + QStringList oldBGL; + QList<LPanel*> PANELS; + LDesktopPluginSpace *bgDesktop; //desktop plugin area + QWidget *bgWindow; //full screen background + QMenu *deskMenu, *winMenu; + QLabel *workspacelabel; + QWidgetAction *wkspaceact; + QList<LDPlugin*> PLUGINS; + QString CBG; //current background + QRect globalWorkRect; + +private slots: + void InitDesktop(); + void SettingsChanged(); + void UnlockSettings(){ issyncing=false; } + void LocaleChanged(); + + //Menu functions + void UpdateMenu(bool fast = false); + void ShowMenu(){ + UpdateMenu(true); //run the fast version + deskMenu->popup(QCursor::pos()); //} + } + void UpdateWinMenu(); + void winClicked(QAction*); + + //Desktop plugin system functions + void UpdateDesktop(); + void RemoveDeskPlugin(QString); + void IncreaseDesktopPluginIcons(); + void DecreaseDesktopPluginIcons(); + + void UpdatePanels(); + + void UpdateDesktopPluginArea(); //make sure the area is not underneath any panels + + void UpdateBackground(); +}; +#endif diff --git a/src-qt5/core/lumina-desktop/LDesktopPluginSpace.cpp b/src-qt5/core/lumina-desktop/LDesktopPluginSpace.cpp new file mode 100644 index 00000000..a55f3e31 --- /dev/null +++ b/src-qt5/core/lumina-desktop/LDesktopPluginSpace.cpp @@ -0,0 +1,300 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LDesktopPluginSpace.h" +#include "LSession.h" +#include "desktop-plugins/NewDP.h" + +#include <LuminaXDG.h> +#include <QDesktopWidget> + +#define DEBUG 0 + +// =================== +// PUBLIC +// =================== +LDesktopPluginSpace::LDesktopPluginSpace(QWidget *parent) : QWidget(parent){ + this->setObjectName("LuminaDesktopPluginSpace"); + this->setStyleSheet("QWidget#LuminaDesktopPluginSpace{ border: none; background: transparent; }"); + this->setAcceptDrops(true); + this->setContextMenuPolicy(Qt::NoContextMenu); + this->setMouseTracking(true); + TopToBottom = true; + GRIDSIZE = 100.0; //default value if not set + plugsettings = LSession::handle()->DesktopPluginSettings(); + +} + +LDesktopPluginSpace::~LDesktopPluginSpace(){ + +} + +void LDesktopPluginSpace::LoadItems(QStringList plugs, QStringList files){ + if(DEBUG){ qDebug() << "Loading Desktop Items:" << plugs << files << "Area:" << this->size() << GRIDSIZE; } + bool changes = false; + if(plugs != plugins){ plugins = plugs; changes = true; } + if(files != deskitems){ deskitems = files; changes = true; } + if(changes){ QTimer::singleShot(0,this, SLOT(reloadPlugins())); } +} + +void LDesktopPluginSpace::SetIconSize(int size){ + if(DEBUG){ qDebug() << "Set Desktop Icon Size:" << size; } + //QSize newsize = calculateItemSize(size); + int oldsize = GRIDSIZE; + GRIDSIZE = size; //turn the int into a float; + //itemSize = QSize(1,1); //save this for all the later icons which are generated (grid size) + UpdateGeom(oldsize); + //Now re-set the item icon size + //reloadPlugins(true); +} + +void LDesktopPluginSpace::cleanup(){ + //Perform any final cleanup actions here + for(int i=0; i<ITEMS.length(); i++){ + ITEMS.takeAt(i)->deleteLater(); + i--; + } + plugins.clear(); + deskitems.clear(); + this->hide(); +} +// =================== +// PUBLIC SLOTS +// =================== +void LDesktopPluginSpace::UpdateGeom(int oldgrid){ + if(DEBUG){ qDebug() << "Updated Desktop Geom:" << this->size() << GRIDSIZE << this->size()/GRIDSIZE; } + //Go through and check the locations/sizes of all items (particularly the ones on the bottom/right edges) + //bool reload = false; + for(int i=0; i<ITEMS.length(); i++){ + QRect grid = geomToGrid(ITEMS[i]->geometry(), oldgrid); + if(DEBUG){ qDebug() << " - Check Plugin:" << ITEMS[i]->whatsThis() << grid; } + if( !ValidGrid(grid) ){ + //This plugin is too far out of the screen - find new location for it + if(DEBUG){ qDebug() << " -- Out of bounds - Find a new spot"; } + grid = findOpenSpot(grid, ITEMS[i]->whatsThis(), true); //Reverse lookup spot + } + if(!ValidGrid(grid)){ + qDebug() << "No Place for plugin:" << ITEMS[i]->whatsThis(); + qDebug() << " - Removing it for now..."; + ITEMS.takeAt(i)->deleteLater(); + i--; + }else{ + //NOTE: We are not doing the ValidGeometry() checks because we are only resizing existing plugin with pre-set & valid grid positions + grid = gridToGeom(grid); //convert to pixels before saving/sizing + MovePlugin(ITEMS[i], grid); + /*ITEMS[i]->setGeometry( grid ); + ITEMS[i]->setFixedSize(grid.size()); + ITEMS[i]->savePluginGeometry(grid);*/ + } + } + //if(reload){ QTimer::singleShot(0,this, SLOT(reloadPlugins())); } +} + +// =================== +// PRIVATE +// =================== +void LDesktopPluginSpace::addDesktopItem(QString filepath){ + addDesktopPlugin("applauncher::"+filepath+"---dlink"+QString::number(LSession::handle()->desktop()->screenNumber(this)) ); +} + +void LDesktopPluginSpace::addDesktopPlugin(QString plugID){ + //This is used for generic plugins (QWidget-based) + if(DEBUG){ qDebug() << "Adding Desktop Plugin:" << plugID; } + LDPlugin *plug = NewDP::createPlugin(plugID, this); + if(plug==0){ return; } //invalid plugin + plug->setWhatsThis(plugID); + //Now get the geometry for the plugin + QRect geom = plug->loadPluginGeometry(); //in pixel coords + if(!geom.isNull()){ geom = geomToGrid(geom); } //convert to grid coordinates + if(geom.isNull()){ + //No previous location - need to calculate initial geom + QSize sz = plug->defaultPluginSize(); //in grid coordinates + geom.setSize(sz); + geom = findOpenSpot(geom.width(), geom.height() ); + }else if(!ValidGeometry(plugID, gridToGeom(geom)) ){ + //Find a new location for the plugin (saved location is invalid) + geom = findOpenSpot(geom.width(), geom.height(), geom.y(), geom.x(), false); //try to get it within the same general area first + } + if(geom.x() < 0 || geom.y() < 0){ + qDebug() << "No available space for desktop plugin:" << plugID << " - IGNORING"; + delete plug; + }else{ + if(DEBUG){ qDebug() << " - New Plugin Geometry (grid):" << geom; } + //Now place the item in the proper spot/size + MovePlugin(plug, gridToGeom(geom)); + //plug->setGeometry( gridToGeom(geom) ); + plug->show(); + if(DEBUG){ qDebug() << " - New Plugin Geometry (px):" << plug->geometry(); } + ITEMS << plug; + connect(plug, SIGNAL(StartMoving(QString)), this, SLOT(StartItemMove(QString)) ); + connect(plug, SIGNAL(StartResizing(QString)), this, SLOT(StartItemResize(QString)) ); + connect(plug, SIGNAL(RemovePlugin(QString)), this, SLOT(RemoveItem(QString)) ); + connect(plug, SIGNAL(IncreaseIconSize()), this, SIGNAL(IncreaseIcons()) ); + connect(plug, SIGNAL(DecreaseIconSize()), this, SIGNAL(DecreaseIcons()) ); + connect(plug, SIGNAL(CloseDesktopMenu()), this, SIGNAL(HideDesktopMenu()) ); + } +} + +QRect LDesktopPluginSpace::findOpenSpot(int gridwidth, int gridheight, int startRow, int startCol, bool reversed, QString plugID){ + //Note about the return QPoint: x() is the column number, y() is the row number + QPoint pt(0,0); + //qDebug() << "FIND OPEN SPOT:" << gridwidth << gridheight << startRow << startCol << reversed; + int row = startRow; int col = startCol; + if(row<0){ row = 0; } //just in case - since this can be recursively called + if(col<0){ col = 0; } //just in case - since this can be recursively called + bool found = false; + int rowCount, colCount; + rowCount = RoundUp(this->height()/GRIDSIZE); + colCount = RoundUp(this->width()/GRIDSIZE); + if( (row+gridheight)>rowCount){ row = rowCount-gridheight; startRow = row; } + if( (col+gridwidth)>colCount){ col = colCount-gridwidth; startCol = col; } + QRect geom(0, 0, gridwidth*GRIDSIZE, gridheight*GRIDSIZE); //origin point will be adjusted in a moment + if(DEBUG){ qDebug() << "Search for plugin space:" << rowCount << colCount << gridheight << gridwidth << this->size(); } + if(TopToBottom && reversed && (startRow>0 || startCol>0) ){ + //Arrange Top->Bottom (work backwards) + //qDebug() << "Search backwards for space:" << rowCount << colCount << startRow << startCol << gridheight << gridwidth; + while(col>=0 && !found){ + while(row>=0 && !found){ + bool ok = true; + geom.moveTo(col*GRIDSIZE, row*GRIDSIZE); + //qDebug() << " - Check Geom:" << geom << col << row; + //Check all the existing items to ensure no overlap + for(int i=0; i<ITEMS.length() && ok; i++){ + if(ITEMS[i]->whatsThis()==plugID){ continue; } //same plugin - this is not a conflict + if(geom.intersects(ITEMS[i]->geometry())){ + //Collision - move the next searchable row/column index + ok = false; + //qDebug() << "Collision:" << col << row; + row = ((ITEMS[i]->geometry().y()-GRIDSIZE/2)/GRIDSIZE) -gridheight; //use top edge for next search (minus item height) + //qDebug() << " - new row:" << row; + } + } + if(ok){ pt = QPoint(col,row); found = true; } //found an open spot + } + if(!found){ col--; row=rowCount-gridheight; } //go to the previous column + } + }else if(TopToBottom){ + //Arrange Top->Bottom + while(col<(colCount-gridwidth) && !found){ + while(row<(rowCount-gridheight) && !found){ + bool ok = true; + geom.moveTo(col*GRIDSIZE, row*GRIDSIZE); + //qDebug() << " - Check Geom:" << geom << col << row; + //Check all the existing items to ensure no overlap + for(int i=0; i<ITEMS.length() && ok; i++){ + if(ITEMS[i]->whatsThis()==plugID){ continue; } //same plugin - this is not a conflict + if(geom.intersects(ITEMS[i]->geometry())){ + //Collision - move the next searchable row/column index + ok = false; + row = posToGrid(ITEMS[i]->geometry().bottomLeft()).y(); //use bottom edge for next search + } + } + if(ok){ pt = QPoint(col,row); found = true; } //found an open spot + //else{ row++; } + } + if(!found){ col++; row=0; } //go to the next column + } + }else if(reversed && (startRow>0 || startCol>0) ){ + //Arrange Left->Right (work backwards) + while(row>=0 && !found){ + while(col>=0 && !found){ + bool ok = true; + geom.moveTo(col*GRIDSIZE, row*GRIDSIZE); + //Check all the existing items to ensure no overlap + for(int i=0; i<ITEMS.length() && ok; i++){ + if(ITEMS[i]->whatsThis()==plugID){ continue; } //same plugin - this is not a conflict + if(geom.intersects(ITEMS[i]->geometry())){ + //Collision - move the next searchable row/column index + ok = false; + col = (ITEMS[i]->geometry().x()-GRIDSIZE/2)/GRIDSIZE - gridwidth; // Fill according to row/column + } + } + if(ok){ pt = QPoint(col,row); found = true; } //found an open spot + //else{ col++; } + } + if(!found){ row--; col=colCount-gridwidth;} //go to the previous row + } + }else{ + //Arrange Left->Right + while(row<(rowCount-gridheight) && !found){ + while(col<(colCount-gridwidth) && !found){ + bool ok = true; + geom.moveTo(col*GRIDSIZE, row*GRIDSIZE); + //Check all the existing items to ensure no overlap + for(int i=0; i<ITEMS.length() && ok; i++){ + if(ITEMS[i]->whatsThis()==plugID){ continue; } //same plugin - this is not a conflict + if(geom.intersects(ITEMS[i]->geometry())){ + //Collision - move the next searchable row/column index + ok = false; + col = posToGrid(ITEMS[i]->geometry().topRight()).x(); // Fill according to row/column + } + } + if(ok){ pt = QPoint(col,row); found = true; } //found an open spot + //else{ col++; } + } + if(!found){ row++; col=0;} //go to the next row + } + } + if(!found){ + //qDebug() << "Could not find a spot:" << startRow << startCol << gridheight << gridwidth; + if( (startRow!=0 || startCol!=0) && !reversed){ + //Did not check the entire screen yet - gradually work it's way back to the top/left corner + //qDebug() << " - Start backwards search"; + return findOpenSpot(gridwidth, gridheight,startRow,startCol, true); //reverse the scan + }else if(gridwidth>1 && gridheight>1){ + //Decrease the size of the item by 1x1 grid points and try again + //qDebug() << " - Out of space: Decrease item size and try again..."; + return findOpenSpot(gridwidth-1, gridheight-1, 0, 0); + }else{ + //qDebug() << " - Could not find an open spot for a desktop plugin:" << gridwidth << gridheight << startRow << startCol; + return QRect(-1,-1,-1,-1); + } + }else{ + return QRect(pt,QSize(gridwidth,gridheight)); + } +} + +QRect LDesktopPluginSpace::findOpenSpot(QRect grid, QString plugID, bool recursive){ //Reverse lookup spotc{ + //This is just an overloaded simplification for checking currently existing plugins + return findOpenSpot(grid.width(), grid.height(), grid.y(), grid.x(), recursive, plugID); +} + +// =================== +// PRIVATE SLOTS +// =================== +void LDesktopPluginSpace::reloadPlugins(bool ForceIconUpdate ){ + //Remove any plugins as necessary + QStringList plugs = plugins; + QStringList items = deskitems; + for(int i=0; i<ITEMS.length(); i++){ + + if( ITEMS[i]->whatsThis().startsWith("applauncher") && ForceIconUpdate){ + //Change the size of the existing plugin - preserving the location if possible + /*QRect geom = ITEMS[i]->loadPluginGeometry(); //pixel coords + if(!geom.isNull()){ + geom = geomToGrid(geom); //convert to grid coords + geom.setSize(itemSize); //Reset back to default size (does not change location) + ITEMS[i]->savePluginGeometry( gridToGeom(geom)); //save it back in pixel coords + }*/ + //Now remove the plugin for the moment - run it through the re-creation routine below + ITEMS.takeAt(i)->deleteLater(); + i--; + } + else if(plugs.contains(ITEMS[i]->whatsThis())){ plugs.removeAll(ITEMS[i]->whatsThis()); } + else if(items.contains(ITEMS[i]->whatsThis().section("---",0,0).section("::",1,50))){ items.removeAll(ITEMS[i]->whatsThis().section("---",0,0).section("::",1,50)); } + else{ ITEMS[i]->removeSettings(true); ITEMS.takeAt(i)->deleteLater(); i--; } //this is considered a permanent removal (cleans settings) + } + + //Now create any new items + //First load the plugins (almost always have fixed locations) + for(int i=0; i<plugs.length(); i++){ + addDesktopPlugin(plugs[i]); + } + //Now load the desktop shortcuts (fill in the gaps as needed) + for(int i=0; i<items.length(); i++){ + addDesktopItem(items[i]); + } +} diff --git a/src-qt5/core/lumina-desktop/LDesktopPluginSpace.h b/src-qt5/core/lumina-desktop/LDesktopPluginSpace.h new file mode 100644 index 00000000..5ef51930 --- /dev/null +++ b/src-qt5/core/lumina-desktop/LDesktopPluginSpace.h @@ -0,0 +1,292 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef _LUMINA_DESKTOP_LDESKTOP_PLUGIN_SPACE_H +#define _LUMINA_DESKTOP_LDESKTOP_PLUGIN_SPACE_H + +#include <QListWidget> +#include <QDropEvent> +#include <QDrag> //includes all the QDrag*Event classes +#include <QUrl> +#include <QMimeData> +#include <QSettings> +#include <QDebug> +#include <QFile> +#include <QDir> +#include <QFileInfo> +#include <QProcess> + +#include "desktop-plugins/LDPlugin.h" + +#define MIMETYPE QString("x-special/lumina-desktop-plugin") + +class LDesktopPluginSpace : public QWidget{ + Q_OBJECT + +signals: + void PluginRemovedByUser(QString ID); + void IncreaseIcons(); //increase default icon sizes + void DecreaseIcons(); //decrease default icon sizes + void HideDesktopMenu(); + +public: + LDesktopPluginSpace(QWidget *parent = 0); + ~LDesktopPluginSpace(); + + void LoadItems(QStringList plugs, QStringList files); + //void setShowGrid(bool show); This is already implemented in QTableView (inherited) + void SetIconSize(int size); + void ArrangeTopToBottom(bool ttb); //if false, will arrange left->right + void cleanup(); + +public slots: + void UpdateGeom(int oldgrid = -1); + +private: + QSettings *plugsettings; + QStringList plugins, deskitems; + QList<LDPlugin*> ITEMS; + bool TopToBottom; + float GRIDSIZE; + + int RoundUp(double num){ + int out = num; //This will truncate the number + if(out < num){ out++; } //need to increase by 1 + return out; + } + + void addDesktopItem(QString filepath); //This will convert it into a valid Plugin ID automatically + void addDesktopPlugin(QString plugID); + + + QRect findOpenSpot(int gridwidth = 1, int gridheight = 1, int startRow = 0, int startCol = 0, bool reversed = false, QString plugID = ""); + QRect findOpenSpot(QRect grid, QString plugID, bool recursive = false); + + QPoint posToGrid(QPoint pos){ + //This assumes a point in widget-relative coordinates + pos.setX( RoundUp(pos.x()/GRIDSIZE)); + pos.setY( RoundUp(pos.y()/GRIDSIZE)); + return pos; + } + + QRect geomToGrid(QRect geom, int grid = -1){ + if(grid<0){ + //use the current grid size + return QRect( RoundUp(geom.x()/GRIDSIZE), RoundUp(geom.y()/GRIDSIZE), \ + RoundUp(geom.width()/GRIDSIZE), RoundUp(geom.height()/GRIDSIZE) ); + }else{ + //use the input grid size + return QRect( RoundUp(geom.x()/((double) grid)), RoundUp(geom.y()/((double) grid)), \ + RoundUp(geom.width()/((double) grid)), RoundUp(geom.height()/((double) grid)) ); + } + } + + QRect gridToGeom(QRect grid){ + //This function incorporates the bottom/right edge matchins procedures (for incomplete last grid) + QRect geom(grid.x()*GRIDSIZE, grid.y()*GRIDSIZE, grid.width()*GRIDSIZE, grid.height()*GRIDSIZE); + //Now check the edge conditions (last right/bottom grid points might be smaller than GRIDSIZE) + QSize areaSize = this->size(); //use the size of the area instead of the geometry - because we need this in child coordinates like "geom" above + //qDebug() << "GridToGeom:" << grid << geom << "Area size:" << areaSize; + if(geom.right() > areaSize.width() && (geom.right()-areaSize.width())<GRIDSIZE ){ + geom.setRight(areaSize.width()-1); //match up with the edge + } + if(geom.bottom() > areaSize.height() && (geom.bottom() -areaSize.height())<GRIDSIZE ){ + geom.setBottom(areaSize.height()-1); //match up with the edge + } + //qDebug() << " - Adjusted:" << geom; + return geom; + } + + //Internal simplification for setting up a drag event + void setupDrag(QString id, QString type){ + QMimeData *mime = new QMimeData; + mime->setData(MIMETYPE, QString(type+"::::"+id).toLocal8Bit() ); + //If this is a desktop file - also add it to the generic URI list mimetype + if(id.startsWith("applauncher::")){ + QList<QUrl> urilist; + urilist << QUrl::fromLocalFile( id.section("---",0,0).section("::",1,50) ); + mime->setUrls(urilist); + } + //Create the drag structure + QDrag *drag = new QDrag(this); + drag->setMimeData(mime); + drag->exec(Qt::CopyAction); + } + + bool ValidGrid(QRect grid){ + //qDebug() << "Check Valid Grid:" << grid << RoundUp(this->width()/GRIDSIZE) << RoundUp(this->height()/GRIDSIZE); + //This just checks that the grid coordinates are not out of bounds - should still run ValidGeometry() below with the actual pixel geom + if(grid.x()<0 || grid.y()<0 || grid.width()<0 || grid.height()<0){ return false; } + else if( (grid.x()+grid.width()) > RoundUp(this->width()/GRIDSIZE) ){ return false; } + else if( (grid.y()+grid.height()) > RoundUp(this->height()/GRIDSIZE) ){ return false; } + return true; + } + + bool ValidGeometry(QString id, QRect geom){ + //First check that it is within the desktop area completely + // Note that "this->geometry()" is not in the same coordinate space as the geometry inputs + if(!QRect(0,0,this->width(), this->height()).contains(geom)){ return false; } + //Now check that it does not collide with any other items + for(int i=0; i<ITEMS.length(); i++){ + if(ITEMS[i]->whatsThis()==id){ continue; } + else if(geom.intersects(ITEMS[i]->geometry())){ return false; } + } + return true; + } + + LDPlugin* ItemFromID(QString ID){ + for(int i=0; i<ITEMS.length(); i++){ + if(ITEMS[i]->whatsThis()==ID){ return ITEMS[i]; } + } + return 0; + } + + void MovePlugin(LDPlugin* plug, QRect geom){ + plug->setGeometry( geom ); + plug->setFixedSize(geom.size()); //needed for some plugins + plug->savePluginGeometry(geom); + } + +private slots: + void reloadPlugins(bool ForceIconUpdate = false); + + void StartItemMove(QString ID){ + setupDrag(ID, "move"); + } + void StartItemResize(QString ID){ + setupDrag(ID, "resize"); + } + void RemoveItem(QString ID){ + //Special case - desktop file/dir link using the "applauncher" plugin + if(ID.startsWith("applauncher::")){ + QFileInfo info(ID.section("---",0,0).section("::",1,50) ); + if(info.exists() && info.absolutePath()==QDir::homePath()+"/Desktop"){ + qDebug() << "Deleting Desktop Item:" << info.absoluteFilePath(); + if(!info.isSymLink() && info.isDir()){ QProcess::startDetached("rm -r \""+info.absoluteFilePath()+"\""); } + else{ QFile::remove(info.absoluteFilePath()); } //just remove the file/symlink directly + emit PluginRemovedByUser(ID); + return; + } + } + //Any other type of plugin + for(int i=0; i<ITEMS.length(); i++){ + if(ITEMS[i]->whatsThis()==ID){ + ITEMS[i]->Cleanup(); + delete ITEMS.takeAt(i); + break; + } + } + emit PluginRemovedByUser(ID); + } + +protected: + //Need Drag and Drop functionality (internal movement) + void dragEnterEvent(QDragEnterEvent *ev){ + if(ev->mimeData()->hasFormat(MIMETYPE) ){ + ev->acceptProposedAction(); //allow this to be dropped here + }else if(ev->mimeData()->hasUrls()){ + ev->acceptProposedAction(); //allow this to be dropped here + }else{ + ev->ignore(); + } + } + + void dragMoveEvent(QDragMoveEvent *ev){ + if(ev->mimeData()->hasFormat(MIMETYPE) ){ + //Internal move/resize - Check for validity + QString act = QString( ev->mimeData()->data(MIMETYPE) ); + LDPlugin *item = ItemFromID(act.section("::::",1,50)); + //qDebug() << "Internal Move Event:" << act << ev->pos(); + if(item!=0){ + QRect geom = item->geometry(); + QPoint grid = posToGrid(ev->pos()); + if(act.section("::::",0,0)=="move"){ + QPoint diff = grid - posToGrid(geom.center()); //difference in grid coords + //qDebug() << "Move Event:" << "Diff:" << diff << "Geom:" << geom << grid << ev->pos(); + geom = geomToGrid(geom); //convert to grid coords + //qDebug() << "Move Event:" << "Old geom (grid):" << geom; + geom.moveTo( (geom.topLeft()+diff) ); + //qDebug() << " - After Move:" << geom; + bool valid = ValidGrid(geom); + if(valid){ + //Convert to pixel coordinates and check validity again + geom = gridToGeom(geom); //convert back to px coords with edge matching + valid = ValidGeometry(act.section("::::",1,50), geom); + } + if(valid){ + MovePlugin(item, geom); + //item->setGeometry(geom); + //item->setFixedSize(geom.size()); //needed due to resizing limitations and such for some plugins + ev->acceptProposedAction(); + //item->savePluginGeometry(geom); //save in pixel coords + }else{ ev->ignore(); } //invalid location + + }else{ + //Resize operation + QPoint diff = ev->pos() - (geom.center()-QPoint(1,1)); //need difference from center (pixels) + //Note: Use the 1x1 pixel offset to ensure that the center point is not exactly on a grid point intersection (2x2, 4x4, etc) + //qDebug() << "Resize Plugin:" << geom << grid << posToGrid(geom.center()) << diff; + geom = geomToGrid(geom); //convert to grid coordinates now + //qDebug() << " - Grid Geom:" << geom; + if(diff.x()<0){ geom.setLeft(ev->pos().x()/GRIDSIZE); } //expanding to the left (round down) + else if(diff.x()>0){ geom.setRight( ev->pos().x()/GRIDSIZE); } //expanding to the right (round down) + if(diff.y()<0){ geom.setTop( ev->pos().y()/GRIDSIZE); } //expanding above (round down) + else if(diff.y()>0){ geom.setBottom( ev->pos().y()/GRIDSIZE); } //expanding below (round down) + //qDebug() << " - Adjusted:" << geom; + bool valid = ValidGrid(geom); + if(valid){ + //Convert to pixel coordinates and check validity again + geom = gridToGeom(geom); //convert back to px coords with edge matching + valid = ValidGeometry(act.section("::::",1,50), geom); + } + if(valid){ + MovePlugin(item, geom); + //item->setGeometry(geom); + //item->setFixedSize(geom.size()); //needed due to resizing limitations and such for some plugins + ev->acceptProposedAction(); + //item->savePluginGeometry(geom); //save in pixel coords + }else{ ev->ignore(); } //invalid location + } + } + }else if(ev->mimeData()->hasUrls()){ + ev->acceptProposedAction(); //allow this to be dropped here + }else{ + ev->ignore(); + } + } + + void dropEvent(QDropEvent *ev){ + //QPoint grid = posToGrid(ev->pos()); + if(ev->mimeData()->hasFormat(MIMETYPE)){ + //Desktop Items getting moved around - already performed in the dragMoveEvent + ev->accept(); + }else if(ev->mimeData()->hasUrls()){ + ev->accept(); + //Files getting dropped here + QList<QUrl> urls = ev->mimeData()->urls(); + qDebug() << "Desktop Drop Event:" << urls; + for(int i=0; i<urls.length(); i++){ + //If this file is not in the desktop folder, move/copy it here + if(urls[i].isLocalFile()){ + QFileInfo info(urls[i].toLocalFile()); + if(info.exists() && !QFile::exists(QDir::homePath()+"/Desktop/"+info.fileName())){ + //Make a link to the file here + QFile::link(info.absoluteFilePath(), QDir::homePath()+"/Desktop/"+info.fileName()); + }else{ + qWarning() << "Invalid desktop file drop (ignored):" << urls[i].toString(); + } + } + + } + }else{ + //Ignore this event + ev->ignore(); + } + } + +}; + +#endif
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/LPanel.cpp b/src-qt5/core/lumina-desktop/LPanel.cpp new file mode 100644 index 00000000..8486bf1c --- /dev/null +++ b/src-qt5/core/lumina-desktop/LPanel.cpp @@ -0,0 +1,347 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2012-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LPanel.h" +#include "LSession.h" +#include "panel-plugins/systemtray/LSysTray.h" + +#define DEBUG 0 + +LPanel::LPanel(QSettings *file, int scr, int num, QWidget *parent) : QWidget(){ + //Take care of inputs + this->setMouseTracking(true); + if(DEBUG){ qDebug() << " - Creating Panel:" << scr << num; } + bgWindow = parent; //save for later + //Setup the widget overlay for the entire panel to provide transparency effects + panelArea = new QWidget(this); + QBoxLayout *tmp = new QBoxLayout(QBoxLayout::LeftToRight); + tmp->setContentsMargins(0,0,0,0); + this->setLayout(tmp); + tmp->addWidget(panelArea); + settings = file; + screennum = scr; + panelnum = num; //save for later + screen = LSession::desktop(); + PPREFIX = "panel"+QString::number(screennum)+"."+QString::number(num)+"/"; + defaultpanel = (LSession::handle()->screenGeom(screennum).x()==0 && num==0); + horizontal=true; //use this by default initially + hidden = false; //use this by default + //Setup the panel + if(DEBUG){ qDebug() << " -- Setup Panel"; } + this->setContentsMargins(0,0,0,0); + this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + //panels cannot get keyboard focus otherwise it upsets the task manager window detection + this->setAttribute(Qt::WA_X11DoNotAcceptFocus); + this->setAttribute(Qt::WA_X11NetWmWindowTypeDock); + this->setAttribute(Qt::WA_AlwaysShowToolTips); + this->setWindowFlags(Qt::FramelessWindowHint | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint); + //this->setWindowFlags(Qt::X11BypassWindowManagerHint | Qt::WindowStaysOnTopHint); + + this->setWindowTitle("LuminaPanel"); + this->setObjectName("LuminaPanelBackgroundWidget"); + this->setStyleSheet("QToolButton::menu-indicator{ image: none; }"); + panelArea->setObjectName("LuminaPanelColor"); + layout = new QBoxLayout(QBoxLayout::LeftToRight); + layout->setContentsMargins(0,0,0,0); + layout->setSpacing(1); + //layout->setSizeConstraint(QLayout::SetFixedSize); + panelArea->setLayout(layout); + //Set special window flags on the panel for proper usage + this->show(); + LSession::handle()->XCB->SetAsPanel(this->winId()); + LSession::handle()->XCB->SetAsSticky(this->winId()); + + QTimer::singleShot(1,this, SLOT(UpdatePanel()) ); //start this in a new thread + //connect(screen, SIGNAL(resized(int)), this, SLOT(UpdatePanel()) ); //in case the screen resolution changes +} + +LPanel::~LPanel(){ + +} + +void LPanel::prepareToClose(){ + //Go through and remove all the plugins + for(int i=0; i<PLUGINS.length(); i++){ + PLUGINS[i]->AboutToClose(); //any last cleanup for this plugin + layout->takeAt(i); //remove from the layout + PLUGINS.takeAt(i)->deleteLater(); //delete the actual widget + LSession::processEvents(); + i--; //need to back up one space to not miss another plugin + } + this->hide(); +} + +void LPanel::scalePanel(double xscale, double yscale){ + int ht = settings->value(PPREFIX+"height", 30).toInt(); //this is technically the distance into the screen from the edge + QString loc = settings->value(PPREFIX+"location","").toString().toLower(); + if(loc=="top" || loc=="bottom"){ + ht = qRound(ht*yscale); + }else{ + ht = qRound(ht*xscale); + } + settings->setValue(PPREFIX+"height", ht); + settings->sync(); + QTimer::singleShot(0, this, SLOT(UpdatePanel()) ); +} + +//=========== +// PUBLIC SLOTS +//=========== +void LPanel::UpdatePanel(bool geomonly){ + //Create/Update the panel as designated in the Settings file + settings->sync(); //make sure to catch external settings changes + //First set the geometry of the panel and send the EWMH message to reserve that space + if(DEBUG){ qDebug() << "Update Panel: Geometry only=" << geomonly << "Screen Size:" << LSession::handle()->screenGeom(screennum); } + hidden = settings->value(PPREFIX+"hidepanel",false).toBool(); + QString loc = settings->value(PPREFIX+"location","").toString().toLower(); + if(loc.isEmpty() && defaultpanel){ loc="top"; } + if(loc=="top" || loc=="bottom"){ + horizontal=true; + layout->setAlignment(Qt::AlignLeft); + layout->setDirection(QBoxLayout::LeftToRight); + }else{ + horizontal=false; + layout->setAlignment(Qt::AlignTop); + layout->setDirection(QBoxLayout::TopToBottom); + } + int ht = settings->value(PPREFIX+"height", 30).toInt(); //this is technically the distance into the screen from the edge + if(ht<=1){ ht = 30; } //some kind of error in the saved height - use the default value + int hidesize = qRound(ht*0.01); //use 1% of the panel size + if(hidesize<2){ hidesize=2; } //minimum of 2 pixels (need space for the mouse to go over it) + if(hidden){ viswidth = hidesize; } + else{ viswidth = ht; } + if(DEBUG){ qDebug() << "Hidden Panel size:" << hidesize << "pixels"; } + //qDebug() << " - set Geometry"; + int xwid = LSession::handle()->screenGeom(screennum).width(); + int xhi = LSession::handle()->screenGeom(screennum).height(); + int xloc = LSession::handle()->screenGeom(screennum).x(); + double panelPercent = settings->value(PPREFIX+"lengthPercent",100).toInt(); + if(panelPercent<1 || panelPercent>100){ panelPercent = 100; } + panelPercent = panelPercent/100.0; + QString panelPinLoc = settings->value(PPREFIX+"pinLocation","center").toString().toLower(); //[left/right/center] possible values (assume center otherwise) + if(DEBUG){ qDebug() << " - Panel settings:" << QString::number(panelPercent)+QString("%") << panelPinLoc << loc; } + //xloc=xoffset; + if(loc=="top"){ //top of screen + QSize sz = QSize(xwid*panelPercent, ht); + if(panelPinLoc=="left"){} // no change to xloc + else if(panelPinLoc=="right"){ xloc = xloc+xwid-sz.width(); } + else{ xloc = xloc+((xwid-sz.width())/2) ; } //centered + //qDebug() << " - Panel Sizing:" << xloc << sz; + this->setMinimumSize(sz); + this->setMaximumSize(sz); + this->setGeometry(xloc,0,sz.width(), sz.height()); + //qDebug() << " - Reserve Panel Localation"; + if(!hidden){ LSession::handle()->XCB->ReserveLocation(this->winId(), this->geometry(), "top"); } + else{ + LSession::handle()->XCB->ReserveLocation(this->winId(), QRect(xloc, 0, this->width(), hidesize), "top"); + hidepoint = QPoint(xloc, hidesize-ht); + showpoint = QPoint(xloc, 0); + this->move(hidepoint); //Could bleed over onto the screen above + } + }else if(loc=="bottom"){ //bottom of screen + QSize sz = QSize(xwid*panelPercent, ht); + if(panelPinLoc=="left"){} // no change to xloc + else if(panelPinLoc=="right"){ xloc = xloc+xwid-sz.width(); } + else{ xloc = xloc+((xwid-sz.width())/2) ; } //centered + this->setMinimumSize(sz); + this->setMaximumSize(sz); + this->setGeometry(xloc,xhi-ht,sz.width(), ht ); + if(!hidden){ LSession::handle()->XCB->ReserveLocation(this->winId(), this->geometry(), "bottom"); } + else{ + LSession::handle()->XCB->ReserveLocation(this->winId(), QRect(xloc, xhi-hidesize, this->width(), hidesize), "bottom"); + hidepoint = QPoint(xloc, xhi-hidesize); + showpoint = QPoint(xloc, xhi-ht); + this->move(hidepoint); //Could bleed over onto the screen below + } + }else if(loc=="left"){ //left side of screen + QSize sz = QSize(ht, xhi*panelPercent); + int yloc = 0; + if(panelPinLoc=="left"){} //this is actually the top (left of center in length dimension) + else if(panelPinLoc=="right"){ yloc = yloc+xhi-sz.height(); } + else{ yloc = yloc+((xhi-sz.height())/2) ; } //centered + this->setMinimumSize(sz); + this->setMaximumSize(sz); + this->setGeometry(xloc,yloc, ht, sz.height()); + if(!hidden){ LSession::handle()->XCB->ReserveLocation(this->winId(), this->geometry(), "left"); } + else{ + LSession::handle()->XCB->ReserveLocation(this->winId(), QRect(xloc, yloc, hidesize, sz.height()), "left"); + hidepoint = QPoint(xloc-ht+hidesize, yloc); + showpoint = QPoint(xloc, yloc); + this->move(hidepoint); //Could bleed over onto the screen left + } + }else{ //right side of screen + QSize sz = QSize(ht, xhi*panelPercent); + int yloc = 0; + if(panelPinLoc=="left"){} //this is actually the top (left of center in length dimension) + else if(panelPinLoc=="right"){ yloc = yloc+xhi-sz.height(); } + else{ yloc = yloc+((xhi-sz.height())/2) ; } //centered + this->setMinimumSize(sz); + this->setMaximumSize(sz); + this->setGeometry(xloc+xwid-ht,yloc,ht, sz.height()); + if(!hidden){ LSession::handle()->XCB->ReserveLocation(this->winId(), this->geometry(), "right"); } + else{ + LSession::handle()->XCB->ReserveLocation(this->winId(), QRect(xloc+xwid-hidesize, yloc, hidesize, sz.height()), "right"); + hidepoint = QPoint(xloc+xwid-hidesize, yloc); + showpoint = QPoint(xloc+xwid-ht, yloc); + this->move(hidepoint); //Could bleed over onto the screen right + } + } + if(DEBUG){ qDebug() << " - Done with panel geometry"; } + if(geomonly){ return; } + //Now update the appearance of the toolbar + if(settings->value(PPREFIX+"customColor", false).toBool()){ + QString color = settings->value(PPREFIX+"color", "rgba(255,255,255,160)").toString(); + QString style = "QWidget#LuminaPanelColor{ background: %1; border-radius: 3px; border: 1px solid %1; }"; + style = style.arg(color); + panelArea->setStyleSheet(style); + }else{ + panelArea->setStyleSheet(""); //clear it and use the one from the theme + } + + //Then go through the plugins and create them as necessary + QStringList plugins = settings->value(PPREFIX+"pluginlist", QStringList()).toStringList(); + /*if(defaultpanel && plugins.isEmpty()){ + plugins << "userbutton" << "taskmanager" << "spacer" << "systemtray" << "clock" << "systemdashboard"; + }*/ + if(DEBUG){ qDebug() << " - Initialize Plugins: " << plugins; } + for(int i=0; i<plugins.length(); i++){ + //Ensure this plugin has a unique ID (NOTE: this numbering does not persist between sessions) + if(!plugins[i].contains("---")){ + int num=1; + while( plugins.contains(plugins[i]+"---"+QString::number(screennum)+"."+QString::number(this->number())+"."+QString::number(num)) ){ + num++; + } + + plugins[i] = plugins[i]+"---"+QString::number(screennum)+"."+QString::number(this->number())+"."+QString::number(num); + //qDebug() << "Adjust Plugin ID:" << plugins[i]; + } + //See if this plugin is already there or in a different spot + bool found = false; + for(int p=0; p<PLUGINS.length(); p++){ + if(PLUGINS[p]->type()==plugins[i]){ + found = true; //already exists + //Make sure the plugin layout has the correct orientation + if(horizontal){PLUGINS[p]->layout()->setDirection(QBoxLayout::LeftToRight); } + else{ PLUGINS[p]->layout()->setDirection(QBoxLayout::TopToBottom); } + QTimer::singleShot(0,PLUGINS[p], SLOT( OrientationChange() ) ); + //Now check the location of the plugin in the panel + if(p!=i){ //wrong place in the panel + layout->takeAt(p); //remove the item from the current location + layout->insertWidget(i, PLUGINS[p]); //add the item into the correct location + PLUGINS.move(p,i); //move the identifier in the list to match + } + break; + } + } + if(!found){ + //New Plugin + if(DEBUG){ qDebug() << " -- New Plugin:" << plugins[i] << i; } + LPPlugin *plug = NewPP::createPlugin(plugins[i], panelArea, horizontal); + if(plug != 0){ + PLUGINS.insert(i, plug); + layout->insertWidget(i, PLUGINS[i]); + connect(plug, SIGNAL(MenuClosed()), this, SLOT(checkPanelFocus())); + }else{ + //invalid plugin type + plugins.removeAt(i); //remove this invalid plugin from the list + i--; //make sure we don't miss the next item with the re-order + } + } + LSession::processEvents(); + } + //Now remove any extra plugins from the end + //qDebug() << "plugins:" << plugins; + //qDebug() << "PLUGINS length:" << PLUGINS.length(); + for(int i=0; i<PLUGINS.length(); i++){ + if(plugins.contains(PLUGINS[i]->type())){ continue; } //good plugin - skip it + if(DEBUG){ qDebug() << " -- Remove Plugin: " << PLUGINS[i]->type(); } + //If this is the system tray - stop it first + if( PLUGINS[i]->type().startsWith("systemtray---") ){ + static_cast<LSysTray*>(PLUGINS[i])->stop(); + } + layout->takeAt(i); //remove from the layout + PLUGINS.takeAt(i)->deleteLater(); //delete the actual widget + LSession::processEvents(); + i--; //need to back up one space to not miss another plugin + } + this->update(); + this->show(); //make sure the panel is visible now + if(hidden){ this->move(hidepoint); } + //Now go through and send the orientation update signal to each plugin + for(int i=0; i<PLUGINS.length(); i++){ + QTimer::singleShot(0,PLUGINS[i], SLOT(OrientationChange())); + } + LSession::processEvents(); +} + +void LPanel::UpdateLocale(){ + //The panel itself has no text to translate, just forward the signal to all the plugins + for(int i=0; i<PLUGINS.length(); i++){ + QTimer::singleShot(1,PLUGINS[i], SLOT(LocaleChange())); + } +} + +void LPanel::UpdateTheme(){ + //The panel itself has no theme-based icons, just forward the signal to all the plugins + for(int i=0; i<PLUGINS.length(); i++){ + QTimer::singleShot(1,PLUGINS[i], SLOT(ThemeChange())); + } +} + +// =================== +// PRIVATE SLOTS +// =================== +void LPanel::checkPanelFocus(){ + if( !this->geometry().contains(QCursor::pos()) ){ + //Move the panel back to it's "hiding" spot + if(hidden){ this->move(hidepoint); this->update(); } + //Re-active the old window + if(LSession::handle()->activeWindow()!=0){ + LSession::handle()->XCB->ActivateWindow(LSession::handle()->activeWindow()); + } + } + +} + +//=========== +// PROTECTED +//=========== +void LPanel::paintEvent(QPaintEvent *event){ + QPainter *painter = new QPainter(this); + //qDebug() << "Paint Tray:"; + //Make sure the base background of the event rectangle is the associated rectangle from the BGWindow + QRect rec = this->geometry(); //start with the global geometry of the panel + //Need to translate that rectangle to the background image coordinates + //qDebug() << " - Rec:" << rec << hidden << this->geometry(); + rec.moveTo( rec.x()-LSession::handle()->screenGeom(screennum).x(), rec.y() ); + //qDebug() << " - Adjusted Global Rec:" << rec; + painter->drawPixmap(QRect(0,0,this->width(), this->height()), bgWindow->grab(rec) ); + QWidget::paintEvent(event); //now pass the event along to the normal painting event +} + +void LPanel::enterEvent(QEvent *event){ + //qDebug() << "Panel Enter Event:"; + if(hidden){ + //Move the panel out so it is fully available + this->move(showpoint); + this->update(); + } + this->activateWindow(); + event->accept(); //just to quiet the compile warning +} + +void LPanel::leaveEvent(QEvent *event){ + /*qDebug() << "Panel Leave Event:"; + qDebug() << "Panel Geom:" << this->geometry().x() << this->geometry().y() << this->geometry().width() << this->geometry().height() ; + QPoint pt = QCursor::pos(); + qDebug() << "Mouse Point (global):" << pt.x() << pt.y(); + //pt = this->mapFromGlobal(pt); + //qDebug() << "Mouse Point (local):" << pt.x() << pt.y(); + qDebug() << "Contained:" << this->geometry().contains(pt);*/ + checkPanelFocus(); + event->accept(); //just to quiet the compile warning +} + diff --git a/src-qt5/core/lumina-desktop/LPanel.h b/src-qt5/core/lumina-desktop/LPanel.h new file mode 100644 index 00000000..396ffecc --- /dev/null +++ b/src-qt5/core/lumina-desktop/LPanel.h @@ -0,0 +1,77 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2012-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This is the generic class for creating a full-width panel that stays +// on top of all other windows (top or bottom of the screen only) +//=========================================== +#ifndef _LUMINA_DESKTOP_PANEL_H +#define _LUMINA_DESKTOP_PANEL_H + +#include <QWidget> +#include <QBoxLayout> +#include <QSettings> +#include <QString> +#include <QStringList> +#include <QTimer> +#include <QMoveEvent> +#include <QDesktopWidget> +#include <QPainter> +#include <QPaintEvent> + +#include "panel-plugins/NewPP.h" +#include "panel-plugins/LPPlugin.h" + +#include <LuminaX11.h> +#include <LuminaOS.h> + +class LPanel : public QWidget{ + Q_OBJECT +private: + QBoxLayout *layout; + QSettings *settings; + QString PPREFIX; //internal prefix for all settings + QDesktopWidget *screen; + QWidget *bgWindow, *panelArea; + QPoint hidepoint, showpoint; //for hidden panels: locations when hidden/visible + bool defaultpanel, horizontal, hidden; + int screennum; + int panelnum; + int viswidth; + QList<LPPlugin*> PLUGINS; + +public: + LPanel(QSettings *file, int scr = 0, int num =0, QWidget *parent=0); //settings file, screen number, panel number + ~LPanel(); + + int number(){ + return panelnum; + } + + QString prefix(){ + return PPREFIX; + } + + int visibleWidth(){ + return viswidth; + } + void prepareToClose(); + void scalePanel(double xscale, double yscale); + +public slots: + void UpdatePanel(bool geomonly = false); //Load the settings file and update the panel appropriately + void UpdateLocale(); //Locale Changed externally + void UpdateTheme(); //Theme Changed externally + +private slots: + void checkPanelFocus(); + +protected: + void paintEvent(QPaintEvent *event); + void enterEvent(QEvent *event); + void leaveEvent(QEvent *event); +}; + +#endif diff --git a/src-qt5/core/lumina-desktop/LSession.cpp b/src-qt5/core/lumina-desktop/LSession.cpp new file mode 100644 index 00000000..d4146e77 --- /dev/null +++ b/src-qt5/core/lumina-desktop/LSession.cpp @@ -0,0 +1,895 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2012-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LSession.h" +#include <LuminaOS.h> + +#include <QTime> +#include <QScreen> +#include <QtConcurrent> +#include "LXcbEventFilter.h" +#include "BootSplash.h" + +//LibLumina X11 class +#include <LuminaX11.h> +#include <LuminaUtils.h> + +#include <unistd.h> //for usleep() usage + +#ifndef DEBUG +#define DEBUG 0 +#endif + +XCBEventFilter *evFilter = 0; + +LSession::LSession(int &argc, char ** argv) : LSingleApplication(argc, argv, "lumina-desktop"){ + if(this->isPrimaryProcess()){ + connect(this, SIGNAL(InputsAvailable(QStringList)), this, SLOT(NewCommunication(QStringList)) ); + this->setApplicationName("Lumina Desktop Environment"); + this->setApplicationVersion( LUtils::LuminaDesktopVersion() ); + this->setOrganizationName("LuminaDesktopEnvironment"); + this->setQuitOnLastWindowClosed(false); //since the LDesktop's are not necessarily "window"s + //Enabled a few of the simple effects by default + this->setEffectEnabled( Qt::UI_AnimateMenu, true); + this->setEffectEnabled( Qt::UI_AnimateCombo, true); + this->setEffectEnabled( Qt::UI_AnimateTooltip, true); + //this->setAttribute(Qt::AA_UseDesktopOpenGL); + //this->setAttribute(Qt::AA_UseHighDpiPixmaps); //allow pixmaps to be scaled up as well as down + //this->setStyle( new MenuProxyStyle); //QMenu icon size override + SystemTrayID = 0; VisualTrayID = 0; + sysWindow = 0; + TrayDmgEvent = 0; + TrayDmgError = 0; + lastActiveWin = 0; + cleansession = true; + TrayStopping = false; + screenTimer = new QTimer(this); + screenTimer->setSingleShot(true); + screenTimer->setInterval(1000); //2 seconds - This needs to be long(ish) to prevent being called while + // X is still setting up any screens + connect(screenTimer, SIGNAL(timeout()), this, SLOT(updateDesktops()) ); + for(int i=1; i<argc; i++){ + if( QString::fromLocal8Bit(argv[i]) == "--noclean" ){ cleansession = false; break; } + } + XCB = new LXCB(); //need access to XCB data/functions right away + //initialize the empty internal pointers to 0 + appmenu = 0; + settingsmenu = 0; + currTranslator=0; + mediaObj=0; + sessionsettings=0; + //Setup the event filter for Qt5 + evFilter = new XCBEventFilter(this); + this->installNativeEventFilter( evFilter ); + } //end check for primary process +} + +LSession::~LSession(){ + if(this->isPrimaryProcess()){ + WM->stopWM(); + for(int i=0; i<DESKTOPS.length(); i++){ + delete DESKTOPS[i]; + } + delete WM; + delete settingsmenu; + delete appmenu; + delete currTranslator; + if(mediaObj!=0){delete mediaObj;} + } +} + +void LSession::setupSession(){ + BootSplash splash; + splash.showScreen("init"); + qDebug() << "Initializing Session"; + if(QFile::exists("/tmp/.luminastopping")){ QFile::remove("/tmp/.luminastopping"); } + QTime* timer = 0; + if(DEBUG){ timer = new QTime(); timer->start(); qDebug() << " - Init srand:" << timer->elapsed();} + //Seed random number generator (if needed) + qsrand( QTime::currentTime().msec() ); + //Setup the QSettings default paths + splash.showScreen("settings"); + if(DEBUG){ qDebug() << " - Init QSettings:" << timer->elapsed();} + QSettings::setPath(QSettings::NativeFormat, QSettings::UserScope, QDir::homePath()+"/.lumina"); + sessionsettings = new QSettings("LuminaDE", "sessionsettings"); + DPlugSettings = new QSettings("pluginsettings","desktopsettings"); + //Load the proper translation files + if(sessionsettings->value("ForceInitialLocale",false).toBool()){ + //Some system locale override it in place - change the env first + LUtils::setLocaleEnv( sessionsettings->value("InitLocale/LANG","").toString(), \ + sessionsettings->value("InitLocale/LC_MESSAGES","").toString(), \ + sessionsettings->value("InitLocale/LC_TIME","").toString(), \ + sessionsettings->value("InitLocale/LC_NUMERIC","").toString(), \ + sessionsettings->value("InitLocale/LC_MONETARY","").toString(), \ + sessionsettings->value("InitLocale/LC_COLLATE","").toString(), \ + sessionsettings->value("InitLocale/LC_CTYPE","").toString() ); + } + currTranslator = LUtils::LoadTranslation(this, "lumina-desktop"); +//use the system settings + //Setup the user's lumina settings directory as necessary + splash.showScreen("user"); + if(DEBUG){ qDebug() << " - Init User Files:" << timer->elapsed();} + checkUserFiles(); //adds these files to the watcher as well + + //Initialize the internal variables + DESKTOPS.clear(); + //savedScreens.clear(); + //for(int i=0; i<this->desktop()->screenCount(); i++){ savedScreens << this->desktop()->screenGeometry(i); } + + //Start the background system tray + splash.showScreen("systray"); + if(DEBUG){ qDebug() << " - Init System Tray:" << timer->elapsed();} + startSystemTray(); + + //Launch Fluxbox + splash.showScreen("wm"); + if(DEBUG){ qDebug() << " - Init WM:" << timer->elapsed();} + WM = new WMProcess(); + WM->startWM(); + + //Initialize the global menus + qDebug() << " - Initialize system menus"; + splash.showScreen("apps"); + if(DEBUG){ qDebug() << " - Init AppMenu:" << timer->elapsed();} + appmenu = new AppMenu(); + + splash.showScreen("menus"); + if(DEBUG){ qDebug() << " - Init SettingsMenu:" << timer->elapsed();} + settingsmenu = new SettingsMenu(); + if(DEBUG){ qDebug() << " - Init SystemWindow:" << timer->elapsed();} + sysWindow = new SystemWindow(); + + //Initialize the desktops + splash.showScreen("desktop"); + if(DEBUG){ qDebug() << " - Init Desktops:" << timer->elapsed();} + desktopFiles = QDir(QDir::homePath()+"/Desktop").entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs, QDir::Name | QDir::IgnoreCase | QDir::DirsFirst); + updateDesktops(); + + //Now setup the system watcher for changes + splash.showScreen("final"); + qDebug() << " - Initialize file system watcher"; + if(DEBUG){ qDebug() << " - Init QFileSystemWatcher:" << timer->elapsed();} + watcher = new QFileSystemWatcher(this); + //watcher->addPath( QDir::homePath()+"/.lumina/stylesheet.qss" ); + watcher->addPath( QDir::homePath()+"/.lumina/LuminaDE/sessionsettings.conf" ); + watcher->addPath( QDir::homePath()+"/.lumina/LuminaDE/desktopsettings.conf" ); + watcher->addPath( QDir::homePath()+"/.lumina/fluxbox-init" ); + watcher->addPath( QDir::homePath()+"/.lumina/fluxbox-keys" ); + watcher->addPath( QDir::homePath()+"/Desktop" ); + + //connect internal signals/slots + connect(this->desktop(), SIGNAL(screenCountChanged(int)), this, SLOT(screensChanged()) ); + connect(this->desktop(), SIGNAL(resized(int)), this, SLOT(screenResized(int)) ); + connect(watcher, SIGNAL(directoryChanged(QString)), this, SLOT(watcherChange(QString)) ); + connect(watcher, SIGNAL(fileChanged(QString)), this, SLOT(watcherChange(QString)) ); + connect(this, SIGNAL(aboutToQuit()), this, SLOT(SessionEnding()) ); + if(DEBUG){ qDebug() << " - Init Finished:" << timer->elapsed(); delete timer;} + QApplication::processEvents(); + launchStartupApps(); + //QTimer::singleShot(500, this, SLOT(launchStartupApps()) ); + //QApplication::processEvents(); + splash.close(); +} + +void LSession::CleanupSession(){ + //Close any running applications and tray utilities (Make sure to keep the UI interactive) + LSession::processEvents(); + QDateTime time = QDateTime::currentDateTime(); + qDebug() << "Start closing down the session: " << time.toString( Qt::SystemLocaleShortDate); + //Create a temporary flag to prevent crash dialogs from opening during cleanup + LUtils::writeFile("/tmp/.luminastopping",QStringList() << "yes", true); + //Start the logout chimes (if necessary) + LOS::setAudioVolume( LOS::audioVolume() ); //make sure the audio volume is saved in the backend for the next login + bool playaudio = sessionsettings->value("PlayLogoutAudio",true).toBool(); + if( playaudio ){ playAudioFile(LOS::LuminaShare()+"Logout.ogg"); } + //Stop the background system tray (detaching/closing apps as necessary) + stopSystemTray(!cleansession); + //Now perform any other cleanup + if(cleansession){ + //Close any open windows + //qDebug() << " - Closing any open windows"; + QList<WId> WL = XCB->WindowList(true); + for(int i=0; i<WL.length(); i++){ + qDebug() << " - Closing window:" << XCB->WindowClass(WL[i]) << WL[i]; + XCB->CloseWindow(WL[i]); + LSession::processEvents(); + } + //Now wait a moment for things to close down before quitting + for(int i=0; i<20; i++){ LSession::processEvents(); usleep(25); } //1/2 second pause + //Kill any remaining windows + WL = XCB->WindowList(true); //all workspaces + for(int i=0; i<WL.length(); i++){ + qDebug() << " - Window did not close, killing application:" << XCB->WindowClass(WL[i]) << WL[i]; + XCB->KillClient(WL[i]); + LSession::processEvents(); + } + } + evFilter->StopEventHandling(); + //Stop the window manager + qDebug() << " - Stopping the window manager"; + WM->stopWM(); + //Now close down the desktop + qDebug() << " - Closing down the desktop elements"; + for(int i=0; i<DESKTOPS.length(); i++){ + DESKTOPS[i]->prepareToClose(); + //don't actually close them yet - that will happen when the session exits + // this will leave the wallpapers up for a few moments (preventing black screens) + } + //Now wait a moment for things to close down before quitting + if(playaudio){ + //wait a max of 3 seconds for audio to finish + bool waitmore = true; + for(int i=0; i<60 && waitmore; i++){ + usleep(50000); //50ms = 50000 us + waitmore = (mediaObj->state()==QMediaPlayer::PlayingState); + //waitmore = !audioThread->wait(500); + LSession::processEvents(); + } + if(waitmore){ mediaObj->stop(); } //timed out + }else{ + for(int i=0; i<20; i++){ LSession::processEvents(); usleep(25000); } //1/2 second pause + } + //Clean up the temporary flag + if(QFile::exists("/tmp/.luminastopping")){ QFile::remove("/tmp/.luminastopping"); } + //if(audioThread!=0){ audioThread->exit(0); } +} + +int LSession::VersionStringToNumber(QString version){ + version = version.section("-",0,0); //trim any extra labels off the end + int maj, mid, min; //major/middle/minor version numbers (<Major>.<Middle>.<Minor>) + maj = mid = min = 0; + bool ok = true; + maj = version.section(".",0,0).toInt(&ok); + if(ok){ mid = version.section(".",1,1).toInt(&ok); }else{ maj = 0; } + if(ok){ min = version.section(".",2,2).toInt(&ok); }else{ mid = 0; } + if(!ok){ min = 0; } + //Now assemble the number + //NOTE: This format allows numbers to be anywhere from 0->999 without conflict + return (maj*1000000 + mid*1000 + min); +} + +void LSession::NewCommunication(QStringList list){ + if(DEBUG){ qDebug() << "New Communications:" << list; } + for(int i=0; i<list.length(); i++){ + if(list[i]=="--check-geoms"){ + screensChanged(); + } + } +} + +void LSession::launchStartupApps(){ + //First start any system-defined startups, then do user defined + qDebug() << "Launching startup applications"; + + //Enable Numlock + if(LUtils::isValidBinary("numlockx")){ //make sure numlockx is installed + if(sessionsettings->value("EnableNumlock",false).toBool()){ + QProcess::startDetached("numlockx on"); + }else{ + QProcess::startDetached("numlockx off"); + } + } + int tmp = LOS::ScreenBrightness(); + if(tmp>0){ + LOS::setScreenBrightness( tmp ); + qDebug() << " - - Screen Brightness:" << QString::number(tmp)+"%"; + } + QProcess::startDetached("nice lumina-open -autostart-apps"); + + //Re-load the screen brightness and volume settings from the previous session + // Wait until after the XDG-autostart functions, since the audio system might be started that way + qDebug() << " - Loading previous settings"; + tmp = LOS::audioVolume(); + LOS::setAudioVolume(tmp); + qDebug() << " - - Audio Volume:" << QString::number(tmp)+"%"; + + //Now play the login music since we are finished + if(sessionsettings->value("PlayStartupAudio",true).toBool()){ + //Make sure to re-set the system volume to the last-used value at outset + int vol = LOS::audioVolume(); + if(vol>=0){ LOS::setAudioVolume(vol); } + LSession::playAudioFile(LOS::LuminaShare()+"Login.ogg"); + } + qDebug() << " - Finished with startup routines"; +} + +void LSession::StartLogout(){ + CleanupSession(); + QCoreApplication::exit(0); +} + +void LSession::StartShutdown(){ + CleanupSession(); + LOS::systemShutdown(); + QCoreApplication::exit(0); +} + +void LSession::StartReboot(){ + CleanupSession(); + LOS::systemRestart(); + QCoreApplication::exit(0); +} + +void LSession::reloadIconTheme(){ + //Wait a moment for things to settle before sending out the signal to the interfaces + QApplication::processEvents(); + QApplication::processEvents(); + emit IconThemeChanged(); +} + +void LSession::watcherChange(QString changed){ + if(DEBUG){ qDebug() << "Session Watcher Change:" << changed; } + if(changed.endsWith("fluxbox-init") || changed.endsWith("fluxbox-keys")){ refreshWindowManager(); } + else if(changed.endsWith("sessionsettings.conf") ){ sessionsettings->sync(); emit SessionConfigChanged(); } + else if(changed.endsWith("desktopsettings.conf") ){ emit DesktopConfigChanged(); } + else if(changed == QDir::homePath()+"/Desktop"){ + desktopFiles = QDir(QDir::homePath()+"/Desktop").entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs ,QDir::Name | QDir::IgnoreCase | QDir::DirsFirst); + if(DEBUG){ qDebug() << "New Desktop Files:" << desktopFiles.length(); } + emit DesktopFilesChanged(); + } + //Now ensure this file was not removed from the watcher + if(!watcher->files().contains(changed) && !watcher->directories().contains(changed)){ + watcher->addPath(changed); + } + /*QStringList files = watcher->files(); + if(files.length() < 5){ + qDebug() << " - Resetting Watched Files..."; + watcher->removePaths(files); //clear the current files before re-setting them + watcher->addPath( QDir::homePath()+"/.lumina/LuminaDE/sessionsettings.conf" ); + watcher->addPath( QDir::homePath()+"/.lumina/LuminaDE/desktopsettings.conf" ); + watcher->addPath( QDir::homePath()+"/.lumina/fluxbox-init" ); + watcher->addPath( QDir::homePath()+"/.lumina/fluxbox-keys" ); + watcher->addPath( QDir::homePath()+"/Desktop"); + }*/ +} + +void LSession::screensChanged(){ + qDebug() << "Screen Number Changed"; + if(screenTimer->isActive()){ screenTimer->stop(); } + screenTimer->start(); + //updateDesktops(); +} + +void LSession::screenResized(int scrn){ + qDebug() << "Screen Resized:" << scrn; // << this->desktop()->screenGeometry(scrn); + /*for(int i=0; i<DESKTOPS.length(); i++){ + if(DESKTOPS[i]->Screen() == scrn){ DESKTOPS[i]->UpdateGeometry(); return; } + }*/ + if(screenTimer->isActive()){ screenTimer->stop(); } + screenTimer->start(); + //updateDesktops(); +} + +void LSession::checkWindowGeoms(){ + //Only do one window per run (this will be called once per new window - with time delays between) + if(checkWin.isEmpty()){ return; } + WId win = checkWin.takeFirst(); + if(RunningApps.contains(win) ){ //just to make sure it did not close during the delay + adjustWindowGeom( win ); + } +} + +void LSession::checkUserFiles(){ + //internal version conversion examples: + // [1.0.0 -> 1000000], [1.2.3 -> 1002003], [0.6.1 -> 6001] + QString OVS = sessionsettings->value("DesktopVersion","0").toString(); //Old Version String + int oldversion = VersionStringToNumber(OVS); + int nversion = VersionStringToNumber(this->applicationVersion()); + bool newversion = ( oldversion < VersionStringToNumber(this->applicationVersion()) ); //increasing version number + bool newrelease = ( OVS.contains("-devel", Qt::CaseInsensitive) && this->applicationVersion().contains("-release", Qt::CaseInsensitive) ); //Moving from devel to release + + //Check for the desktop settings file + QString dset = QDir::homePath()+"/.lumina/LuminaDE/desktopsettings.conf"; + bool firstrun = false; + if(!QFile::exists(dset) || oldversion < 5000){ + if( oldversion < 5000 ){ QFile::remove(dset); qDebug() << "Current desktop settings obsolete: Re-implementing defaults"; } + else{ firstrun = true; } + LUtils::LoadSystemDefaults(); + } + //Convert the favorites framework as necessary (change occured with 0.8.4) + if(newversion || newrelease){ + LUtils::upgradeFavorites(oldversion); + } + //Convert any "userbutton" and "appmenu" panel plugins to the new "systemstart" plugin (0.8.7) + if(oldversion <= 8007 && (newversion || newrelease) && nversion < 8008){ + QSettings dset(QSettings::UserScope, "LuminaDE","desktopsettings", this); + QStringList plugKeys = dset.allKeys().filter("panel").filter("/pluginlist"); + for(int i=0; i<plugKeys.length(); i++){ + QStringList plugs = dset.value(plugKeys[i],QStringList()).toStringList(); + //Do the appmenu/userbutton -> systemstart conversion + plugs = plugs.join(";;;;").replace("userbutton","systemstart").replace("appmenu","systemstart").split(";;;;"); + //Remove any system dashboard plugins + plugs.removeAll("systemdashboard"); + //Now save that back to the file + dset.setValue(plugKeys[i], plugs); + } + //Also remove any "desktopview" desktop plugin and enable the automatic desktop icons instead + plugKeys = dset.allKeys().filter("desktop-").filter("/pluginlist"); + for(int i=0; i<plugKeys.length(); i++){ + QStringList plugs = dset.value(plugKeys[i], QStringList()).toStringList(); + QStringList old = plugs.filter("desktopview"); + bool found = !old.isEmpty(); + for(int j=0; j<old.length(); j++){ plugs.removeAll(old[j]); } + if(found){ + dset.setValue(plugKeys[i],plugs); //save the modified plugin list + //Also set the auto-generate flag on this desktop + dset.setValue(plugKeys[i].section("/",0,0)+"/generateDesktopIcons", true); + } + } + dset.sync(); + //Due to the grid size change for desktop plugins, need to remove any old plugin geometries + if(QFile::exists(QDir::homePath()+"/.lumina/pluginsettings/desktopsettings.conf")){ + QFile::remove(QDir::homePath()+"/.lumina/pluginsettings/desktopsettings.conf"); + } + } + + //Convert to the XDG autostart spec as necessary (Change occured with 0.8.5) + if(QFile::exists(QDir::homePath()+"/.lumina/startapps") ){ + QStringList cmds = LUtils::readFile(QDir::homePath()+"/.lumina/startapps"); + for(int i=0; i<cmds.length(); i++){ + cmds[i] = cmds[i].remove("lumina-open").simplified(); //remove the file opener + if(cmds[i].startsWith("#") || cmds[i].isEmpty()){ continue; } //invalid line + + LXDG::setAutoStarted(true, cmds[i]); + } + QFile::remove(QDir::homePath()+"/.lumina/startapps"); //delete the old file + } + + //Check for the default applications file for lumina-open + dset = QDir::homePath()+"/.lumina/LuminaDE/lumina-open.conf"; + if(!QFile::exists(dset)){ + firstrun = true; + /*if(QFile::exists(LOS::LuminaShare()+"defaultapps.conf")){ + if( QFile::copy(LOS::LuminaShare()+"defaultapps.conf", dset) ){ + QFile::setPermissions(dset, QFile::ReadUser | QFile::WriteUser | QFile::ReadOwner | QFile::WriteOwner); + } + }*/ + + } + //Check the fluxbox configuration files + dset = QDir::homePath()+"/.lumina/"; + bool fluxcopy = false; + if(!QFile::exists(dset+"fluxbox-init")){ fluxcopy=true; } + else if(!QFile::exists(dset+"fluxbox-keys")){fluxcopy=true; } + else if(oldversion < 60){ fluxcopy=true; qDebug() << "Current fluxbox settings obsolete: Re-implementing defaults"; } + if(fluxcopy){ + qDebug() << "Copying default fluxbox configuration files"; + if(QFile::exists(dset+"fluxbox-init")){ QFile::remove(dset+"fluxbox-init"); } + if(QFile::exists(dset+"fluxbox-keys")){ QFile::remove(dset+"fluxbox-keys"); } + QFile::copy(LOS::LuminaShare()+"fluxbox-init-rc", dset+"fluxbox-init"); + QFile::copy(LOS::LuminaShare()+"fluxbox-keys", dset+"fluxbox-keys"); + QFile::setPermissions(dset+"fluxbox-init", QFile::ReadOwner | QFile::WriteOwner | QFile::ReadUser | QFile::ReadOther | QFile::ReadGroup); + QFile::setPermissions(dset+"fluxbox-keys", QFile::ReadOwner | QFile::WriteOwner | QFile::ReadUser | QFile::ReadOther | QFile::ReadGroup); + } + + if(firstrun){ qDebug() << "First time using Lumina!!"; } + else if(newversion || newrelease){ + qDebug() << "Updating session file to current version"; + } + + //Save the current version of the session to the settings file (for next time) + if(newversion || newrelease){ + sessionsettings->setValue("DesktopVersion", this->applicationVersion()); + } +} + +void LSession::refreshWindowManager(){ + WM->updateWM(); +} + +void LSession::updateDesktops(){ + qDebug() << " - Update Desktops"; + QDesktopWidget *DW = this->desktop(); + int sC = DW->screenCount(); + qDebug() << " Screen Count:" << sC; + qDebug() << " DESKTOPS Length:" << DESKTOPS.length(); + if(sC<1){ return; } //stop here - no screens available temporarily (displayport/4K issue) + + for(int i=0; i<sC; i++){ qDebug() << " -- Screen["+QString::number(i)+"]:" << DW->screenGeometry(i); } + + bool firstrun = (DESKTOPS.length()==0); + bool numchange = DESKTOPS.length()!=sC; + + // If the screen count is changing on us + if ( sC != DW->screenCount() ) { + qDebug() << "Screen Count changed while running"; + return; + } + + //First clean up any current desktops + QList<int> dnums; //keep track of which screens are already managed + for(int i=0; i<DESKTOPS.length(); i++){ + if (DESKTOPS[i]->Screen() >= sC) { + //qDebug() << " - Close desktop:" << i; + qDebug() << " - Close desktop on screen:" << DESKTOPS[i]->Screen(); + DESKTOPS[i]->prepareToClose(); + DESKTOPS.takeAt(i)->deleteLater(); + i--; + } else { + //qDebug() << " - Show desktop:" << i; + qDebug() << " - Show desktop on screen:" << DESKTOPS[i]->Screen(); + DESKTOPS[i]->UpdateGeometry(); + DESKTOPS[i]->show(); + dnums << DESKTOPS[i]->Screen(); + //QTimer::singleShot(0,DESKTOPS[i], SLOT(checkResolution())); + } + } + + //Now add any new desktops + for(int i=0; i<sC; i++){ + if(!dnums.contains(i)){ + //Start the desktop on this screen + qDebug() << " - Start desktop on screen:" << i; + DESKTOPS << new LDesktop(i); + } + } + + //Make sure fluxbox also gets prompted to re-load screen config if the number of screens changes in the middle of a session + if(numchange && !firstrun) { + qDebug() << "Update WM"; + //QTimer::singleShot(1000,WM, SLOT(restartWM())); //Note: This causes crashes in X if a full-screen app + WM->updateWM(); + } + + //Make sure all the background windows are registered on the system as virtual roots + QTimer::singleShot(100,this, SLOT(registerDesktopWindows())); +} + +void LSession::registerDesktopWindows(){ + QList<WId> wins; + for(int i=0; i<DESKTOPS.length(); i++){ + wins << DESKTOPS[i]->backgroundID(); + } + XCB->RegisterVirtualRoots(wins); +} + +void LSession::adjustWindowGeom(WId win, bool maximize){ + //return; //temporary disable + if(DEBUG){ qDebug() << "AdjustWindowGeometry():" << win << maximize << XCB->WindowClass(win); } + if(XCB->WindowIsFullscreen(win) >=0 ){ return; } //don't touch it + //Quick hack for making sure that new windows are not located underneath any panels + // Get the window location + QRect geom = XCB->WindowGeometry(win, false); + //Get the frame size + QList<int> frame = XCB->WindowFrameGeometry(win); //[top,bottom,left,right] sizes of the frame + //Calculate the full geometry (window + frame) + QRect fgeom = QRect(geom.x()-frame[2], geom.y()-frame[0], geom.width()+frame[2]+frame[3], geom.height()+frame[0]+frame[1]); + if(DEBUG){ + qDebug() << "Check Window Geometry:" << XCB->WindowClass(win) << !geom.isNull() << geom << fgeom; + } + if(geom.isNull()){ return; } //Could not get geometry for some reason + //Get the available geometry for the screen the window is on + QRect desk; + for(int i=0; i<DESKTOPS.length(); i++){ + if( this->desktop()->screenGeometry(DESKTOPS[i]->Screen()).contains(geom.center()) ){ + //Window is on this screen + if(DEBUG){ qDebug() << " - On Screen:" << DESKTOPS[i]->Screen(); } + desk = DESKTOPS[i]->availableScreenGeom(); + if(DEBUG){ qDebug() << " - Screen Geom:" << desk; } + break; + } + } + if(desk.isNull()){ return; } //Unable to determine screen + //Adjust the window location if necessary + if(maximize){ + if(DEBUG){ qDebug() << " - Maximizing New Window:" << desk.width() << desk.height(); } + geom = desk; //Use the full screen + XCB->MoveResizeWindow(win, geom); + XCB->MaximizeWindow(win, true); //directly set the appropriate "maximized" flags (bypassing WM) + + }else if(!desk.contains(fgeom) ){ + //Adjust origin point for left/top margins + if(fgeom.y() < desk.y()){ geom.moveTop(desk.y()+frame[0]); fgeom.moveTop(desk.y()); } //move down to the edge (top panel) + if(fgeom.x() < desk.x()){ geom.moveLeft(desk.x()+frame[2]); fgeom.moveLeft(desk.x()); } //move right to the edge (left panel) + //Adjust size for bottom margins (within reason, since window titles are on top normally) + // if(geom.right() > desk.right() && (geom.width() > 100)){ geom.setRight(desk.right()); } + if(fgeom.bottom() > desk.bottom() && geom.height() > 10){ + if(DEBUG){ qDebug() << "Adjust Y:" << fgeom << geom << desk; } + int diff = fgeom.bottom()-desk.bottom(); //amount of overlap + if(DEBUG){ qDebug() << "Y-Diff:" << diff; } + if(diff < 0){ diff = -diff; } //need a positive value + if( (fgeom.height()+ diff)< desk.height()){ + //just move the window - there is room for it above + geom.setBottom(desk.bottom()-frame[1]); + fgeom.setBottom(desk.bottom()); + }else if(geom.height() > diff){ //window bigger than the difference + //Need to resize the window - keeping the origin point the same + geom.setHeight( geom.height()-diff-1 ); //shrink it by the difference (need an extra pixel somewhere) + fgeom.setHeight( fgeom.height()-diff ); + } + } + //Now move/resize the window + if(DEBUG){ + qDebug() << " - New Geom:" << geom << fgeom; + } + XCB->WM_Request_MoveResize_Window(win, geom); + /* + //Need to use the frame origin point with the window size (for some reason - strange Fluxbox issue) + XCB->MoveResizeWindow(win, QRect(fgeom.topLeft(), geom.size()) ); + + //For the random windows which are *still* off the top of the screen + QRect nfgeom = XCB->WindowGeometry(win, true); //re-fetch the current geometry (including frame) + if(nfgeom!=fgeom){ + if(DEBUG){ qDebug() << " -- Adjust again:" << fgeom; } + XCB->MoveResizeWindow(win, geom); + }*/ + } + +} + +void LSession::SessionEnding(){ + stopSystemTray(); //just in case it was not stopped properly earlier +} + +//=============== +// SYSTEM ACCESS +//=============== +void LSession::LaunchApplication(QString cmd){ + LSession::setOverrideCursor(QCursor(Qt::BusyCursor)); + QProcess::startDetached(cmd); +} + +QFileInfoList LSession::DesktopFiles(){ + return desktopFiles; +} + +QRect LSession::screenGeom(int num){ + if(num < 0 || num >= this->desktop()->screenCount() ){ return QRect(); } + QRect geom = this->desktop()->screenGeometry(num); + QScreen* scrn = this->screens().at(num); + //if(DEBUG){ qDebug() << "Screen Geometry:" << num << geom << scrn->geometry() << scrn->virtualGeometry(); } + if(geom.isNull() ){ + if( !scrn->geometry().isNull() ){ geom = scrn->geometry(); } + else if( !scrn->virtualGeometry().isNull() ){ geom = scrn->virtualGeometry(); } + //else if(num < savedScreens.length() ){ + //Qt is backfiring (Xinarama w/ Fluxbox?) - return the saved geometry + //geom = savedScreens[num]; + //} + } + return geom; +} + +AppMenu* LSession::applicationMenu(){ + return appmenu; +} + +SettingsMenu* LSession::settingsMenu(){ + return settingsmenu; +} + +QSettings* LSession::sessionSettings(){ + return sessionsettings; +} + +QSettings* LSession::DesktopPluginSettings(){ + return DPlugSettings; +} + +WId LSession::activeWindow(){ + //Check the last active window pointer first + WId active = XCB->ActiveWindow(); + //qDebug() << "Check Active Window:" << active << lastActiveWin; + if(RunningApps.contains(active)){ lastActiveWin = active; } + else if(RunningApps.contains(lastActiveWin) && XCB->WindowState(lastActiveWin) >= LXCB::VISIBLE){} //no change needed + else if(RunningApps.contains(lastActiveWin) && RunningApps.length()>1){ + int start = RunningApps.indexOf(lastActiveWin); + if(start<1){ lastActiveWin = RunningApps.length()-1; } //wrap around to the last item + else{ lastActiveWin = RunningApps[start-1]; } + }else{ + //Need to change the last active window - find the first one which is visible + lastActiveWin = 0; //fallback value - nothing active + for(int i=0; i<RunningApps.length(); i++){ + if(XCB->WindowState(RunningApps[i]) >= LXCB::VISIBLE){ + lastActiveWin = RunningApps[i]; + break; + } + } + //qDebug() << " -- New Last Active Window:" << lastActiveWin; + } + return lastActiveWin; +} + +//Temporarily change the session locale (nothing saved between sessions) +void LSession::switchLocale(QString localeCode){ + currTranslator = LUtils::LoadTranslation(this, "lumina-desktop", localeCode, currTranslator); + if(currTranslator!=0 || localeCode=="en_US"){ + LUtils::setLocaleEnv(localeCode); //will set everything to this locale (no custom settings) + } + emit LocaleChanged(); +} + +void LSession::systemWindow(){ + if(sysWindow==0){ sysWindow = new SystemWindow(); } + else{ sysWindow->updateWindow(); } + sysWindow->show(); + //LSession::processEvents(); +} + +//Play System Audio +void LSession::playAudioFile(QString filepath){ + //Setup the audio output systems for the desktop + if(DEBUG){ qDebug() << "Play Audio File"; } + if(mediaObj==0){ qDebug() << " - Initialize media player"; mediaObj = new QMediaPlayer(); } + if(mediaObj !=0 ){ + if(DEBUG){ qDebug() << " - starting playback:" << filepath; } + mediaObj->setVolume(100); + mediaObj->setMedia(QUrl::fromLocalFile(filepath)); + mediaObj->play(); + //if(!audioThread->isRunning()){ audioThread->start(); } + LSession::processEvents(); + } + if(DEBUG){ qDebug() << " - Done with Audio File"; } +} +// ======================= +// XCB EVENT FILTER FUNCTIONS +// ======================= +void LSession::WindowPropertyEvent(){ + if(DEBUG){ qDebug() << "Window Property Event"; } + QList<WId> newapps = XCB->WindowList(); + if(RunningApps.length() < newapps.length()){ + //New Window found + //qDebug() << "New window found"; + LSession::restoreOverrideCursor(); //restore the mouse cursor back to normal (new window opened?) + //Perform sanity checks on any new window geometries + for(int i=0; i<newapps.length() && !TrayStopping; i++){ + if(!RunningApps.contains(newapps[i])){ + checkWin << newapps[i]; + XCB->SelectInput(newapps[i]); //make sure we get property/focus events for this window + if(DEBUG){ qDebug() << "New Window - check geom in a moment:" << XCB->WindowClass(newapps[i]); } + QTimer::singleShot(50, this, SLOT(checkWindowGeoms()) ); + } + } + } + + //Now save the list and send out the event + RunningApps = newapps; + emit WindowListEvent(); +} + +void LSession::WindowPropertyEvent(WId win){ + //Emit the single-app signal if the window in question is one used by the task manager + if(RunningApps.contains(win)){ + if(DEBUG){ qDebug() << "Single-window property event"; } + //emit WindowListEvent(); + WindowPropertyEvent(); //Run through the entire routine for window checks + }else if(RunningTrayApps.contains(win)){ + emit TrayIconChanged(win); + } +} + +void LSession::SysTrayDockRequest(WId win){ + if(TrayStopping){ return; } + attachTrayWindow(win); //Check to see if the window is already registered +} + +void LSession::WindowClosedEvent(WId win){ + if(TrayStopping){ return; } + removeTrayWindow(win); //Check to see if the window is a tray app +} + +void LSession::WindowConfigureEvent(WId win){ + if(TrayStopping){ return; } + if(RunningTrayApps.contains(win)){ + if(DEBUG){ qDebug() << "SysTray: Configure Event"; } + emit TrayIconChanged(win); //trigger a repaint event + }else if(RunningApps.contains(win)){ + WindowPropertyEvent(); + } +} + +void LSession::WindowDamageEvent(WId win){ + if(TrayStopping){ return; } + if(RunningTrayApps.contains(win)){ + if(DEBUG){ qDebug() << "SysTray: Damage Event"; } + emit TrayIconChanged(win); //trigger a repaint event + } +} + +void LSession::WindowSelectionClearEvent(WId win){ + if(win==SystemTrayID && !TrayStopping){ + qDebug() << "Stopping system tray"; + stopSystemTray(true); //make sure to detach all windows + } +} + + +//====================== +// SYSTEM TRAY FUNCTIONS +//====================== +bool LSession::registerVisualTray(WId visualTray){ + //Only one visual tray can be registered at a time + // (limitation of how tray apps are embedded) + if(TrayStopping){ return false; } + else if(VisualTrayID==0){ VisualTrayID = visualTray; return true; } + else if(VisualTrayID==visualTray){ return true; } + else{ return false; } +} + +void LSession::unregisterVisualTray(WId visualTray){ + if(VisualTrayID==visualTray){ + qDebug() << "Unregistered Visual Tray"; + VisualTrayID=0; + if(!TrayStopping){ emit VisualTrayAvailable(); } + } +} + +QList<WId> LSession::currentTrayApps(WId visualTray){ + if(visualTray==VisualTrayID){ + //Check the validity of all the current tray apps (make sure nothing closed erratically) + for(int i=0; i<RunningTrayApps.length(); i++){ + if(XCB->WindowClass(RunningTrayApps[i]).isEmpty()){ RunningTrayApps.removeAt(i); i--; } + } + return RunningTrayApps; + }else if( registerVisualTray(visualTray) ){ + return RunningTrayApps; + }else{ + return QList<WId>(); + } +} + +void LSession::startSystemTray(){ + if(SystemTrayID!=0){ return; } + RunningTrayApps.clear(); //nothing running yet + SystemTrayID = XCB->startSystemTray(0); + TrayStopping = false; + if(SystemTrayID!=0){ + XCB->SelectInput(SystemTrayID); //make sure TrayID events get forwarded here + TrayDmgEvent = XCB->GenerateDamageID(SystemTrayID); + //XDamageQueryExtension( QX11Info::display(), &TrayDmgEvent, &TrayDmgError); + evFilter->setTrayDamageFlag(TrayDmgEvent); + qDebug() << "System Tray Started Successfully"; + if(DEBUG){ qDebug() << " - System Tray Flags:" << TrayDmgEvent << TrayDmgError; } + } +} + +void LSession::stopSystemTray(bool detachall){ + if(TrayStopping){ return; } //already run + qDebug() << "Stopping system tray..."; + TrayStopping = true; //make sure the internal list does not modified during this + //Close all the running Tray Apps + QList<WId> tmpApps = RunningTrayApps; + RunningTrayApps.clear(); //clear this ahead of time so tray's do not attempt to re-access the apps + if(!detachall){ + for(int i=0; i<tmpApps.length(); i++){ + qDebug() << " - Stopping tray app:" << XCB->WindowClass(tmpApps[i]); + //XCB->CloseWindow(RunningTrayApps[i]); + //Tray apps are special and closing the window does not close the app + XCB->KillClient(tmpApps[i]); + LSession::processEvents(); + } + } + //Now close down the tray backend + XCB->closeSystemTray(SystemTrayID); + SystemTrayID = 0; + TrayDmgEvent = 0; + TrayDmgError = 0; + evFilter->setTrayDamageFlag(0); //turn off tray event handling + emit TrayListChanged(); + LSession::processEvents(); +} + +void LSession::attachTrayWindow(WId win){ + //static int appnum = 0; + if(TrayStopping){ return; } + if(RunningTrayApps.contains(win)){ return; } //already managed + qDebug() << "Session Tray: Window Added"; + RunningTrayApps << win; + LSession::restoreOverrideCursor(); + if(DEBUG){ qDebug() << "Tray List Changed"; } + emit TrayListChanged(); +} + +void LSession::removeTrayWindow(WId win){ + if(SystemTrayID==0){ return; } + for(int i=0; i<RunningTrayApps.length(); i++){ + if(win==RunningTrayApps[i]){ + qDebug() << "Session Tray: Window Removed"; + RunningTrayApps.removeAt(i); + emit TrayListChanged(); + break; + } + } +} diff --git a/src-qt5/core/lumina-desktop/LSession.h b/src-qt5/core/lumina-desktop/LSession.h new file mode 100644 index 00000000..ae217bd8 --- /dev/null +++ b/src-qt5/core/lumina-desktop/LSession.h @@ -0,0 +1,181 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2012-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef _LUMINA_DESKTOP_SESSION_H +#define _LUMINA_DESKTOP_SESSION_H + +#include <QApplication> +#include <QDebug> +#include <QString> +#include <QX11Info> +#include <QEvent> +#include <QTranslator> +#include <QSettings> +#include <QProxyStyle> +#include <QDesktopWidget> +#include <QList> +#include <QThread> +#include <QMediaPlayer> +#include <QThread> +#include <QUrl> + +#include "Globals.h" +#include "AppMenu.h" +#include "SettingsMenu.h" +#include "SystemWindow.h" +#include "LDesktop.h" +#include "WMProcess.h" +//#include "BootSplash.h" + +#include <LuminaX11.h> +#include <LuminaSingleApplication.h> + +//SYSTEM TRAY STANDARD DEFINITIONS +#define SYSTEM_TRAY_REQUEST_DOCK 0 +#define SYSTEM_TRAY_BEGIN_MESSAGE 1 +#define SYSTEM_TRAY_CANCEL_MESSAGE 2 + +/*class MenuProxyStyle : public QProxyStyle{ +public: + int pixelMetric(PixelMetric metric, const QStyleOption *option=0, const QWidget *widget=0) const{ + if(metric==PM_SmallIconSize){ return 22; } //override QMenu icon size (make it larger) + else{ return QProxyStyle::pixelMetric(metric, option, widget); } //use the current style for everything else + } +};*/ + +class LSession : public LSingleApplication{ + Q_OBJECT +public: + LSession(int &argc, char **argv); + ~LSession(); + //Functions to be called during startup + void setupSession(); + + //Public System Tray Functions + QList<WId> currentTrayApps(WId visualTray); + bool registerVisualTray(WId); + void unregisterVisualTray(WId); + + //Special functions for XCB event filter parsing only + // (DO NOT USE MANUALLY) + void WindowPropertyEvent(); + void WindowPropertyEvent(WId); + void SysTrayDockRequest(WId); + void WindowClosedEvent(WId); + void WindowConfigureEvent(WId); + void WindowDamageEvent(WId); + void WindowSelectionClearEvent(WId); + + //System Access + //Return a pointer to the current session + static LSession* handle(){ + return static_cast<LSession*>(LSession::instance()); + } + + static void LaunchApplication(QString cmd); + QFileInfoList DesktopFiles(); + + QRect screenGeom(int num); + + AppMenu* applicationMenu(); + void systemWindow(); + SettingsMenu* settingsMenu(); + LXCB *XCB; //class for XCB usage + + QSettings* sessionSettings(); + QSettings* DesktopPluginSettings(); + + //Keep track of which non-desktop window should be treated as active + WId activeWindow(); //This will return the last active window if a desktop element is currently active + + //Temporarily change the session locale (nothing saved between sessions) + void switchLocale(QString localeCode); + + //Play System Audio + void playAudioFile(QString filepath); + //Window Adjustment Routine (due to Fluxbox not respecting _NET_WM_STRUT) + void adjustWindowGeom(WId win, bool maximize = false); + +private: + WMProcess *WM; + QList<LDesktop*> DESKTOPS; + QFileSystemWatcher *watcher; + QTimer *screenTimer; + + //Internal variable for global usage + AppMenu *appmenu; + SettingsMenu *settingsmenu; + SystemWindow *sysWindow; + QTranslator *currTranslator; + QMediaPlayer *mediaObj; + QSettings *sessionsettings, *DPlugSettings; + bool cleansession; + //QList<QRect> savedScreens; + + //System Tray Variables + WId SystemTrayID, VisualTrayID; + int TrayDmgEvent, TrayDmgError; + QList<WId> RunningTrayApps; + bool TrayStopping; + + //Task Manager Variables + WId lastActiveWin; + QList<WId> RunningApps; + QList<WId> checkWin; + QFileInfoList desktopFiles; + + void CleanupSession(); + + int VersionStringToNumber(QString version); + +public slots: + void StartLogout(); + void StartShutdown(); + void StartReboot(); + + void reloadIconTheme(); + +private slots: + void NewCommunication(QStringList); + void launchStartupApps(); //used during initialization + void watcherChange(QString); + void screensChanged(); + void screenResized(int); + void checkWindowGeoms(); + + //System Tray Functions + void startSystemTray(); + void stopSystemTray(bool detachall = false); + void attachTrayWindow(WId); + void removeTrayWindow(WId); + + //Internal simplification functions + void checkUserFiles(); + void refreshWindowManager(); + void updateDesktops(); + void registerDesktopWindows(); + + + void SessionEnding(); + +signals: + //System Tray Signals + void VisualTrayAvailable(); //new Visual Tray Plugin can be registered + void TrayListChanged(); //Item added/removed from the list + void TrayIconChanged(WId); //WinID of Tray App + //Task Manager Signals + void WindowListEvent(WId); + void WindowListEvent(); + //General Signals + void LocaleChanged(); + void IconThemeChanged(); + void DesktopConfigChanged(); + void SessionConfigChanged(); + void DesktopFilesChanged(); + +}; + +#endif diff --git a/src-qt5/core/lumina-desktop/LWinInfo.cpp b/src-qt5/core/lumina-desktop/LWinInfo.cpp new file mode 100644 index 00000000..3ff0c2d7 --- /dev/null +++ b/src-qt5/core/lumina-desktop/LWinInfo.cpp @@ -0,0 +1,48 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LWinInfo.h" + +#include <LuminaX11.h> + +#include "LSession.h" + +//Information Retrieval + // Don't cache these results because they can change regularly +QString LWinInfo::text(){ + if(window==0){ return ""; } + QString nm = LSession::handle()->XCB->WindowVisibleIconName(window); + if(nm.simplified().isEmpty()){ nm = LSession::handle()->XCB->WindowIconName(window); } + if(nm.simplified().isEmpty()){ nm = LSession::handle()->XCB->WindowVisibleName(window); } + if(nm.simplified().isEmpty()){ nm = LSession::handle()->XCB->WindowName(window); } + if(nm.simplified().isEmpty()){ nm = LSession::handle()->XCB->OldWindowIconName(window); } + if(nm.simplified().isEmpty()){ nm = LSession::handle()->XCB->OldWindowName(window); } + //Make sure that the text is a reasonable size (40 char limit) + if(nm.length()>40){ nm = nm.left(40)+"..."; } + return nm; +} + +QIcon LWinInfo::icon(bool &noicon){ + if(window==0){ noicon = true; return QIcon();} + noicon = false; + QIcon ico = LSession::handle()->XCB->WindowIcon(window); + //Check for a null icon, and supply one if necessary + if(ico.isNull()){ ico = LXDG::findIcon( this->Class().toLower(),""); } + if(ico.isNull()){ico = LXDG::findIcon("preferences-system-windows",""); noicon=true;} + return ico; +} + +QString LWinInfo::Class(){ + return LSession::handle()->XCB->WindowClass(window); +} + +LXCB::WINDOWVISIBILITY LWinInfo::status(bool update){ + if(window==0){ return LXCB::IGNORE; } + if(update || cstate == LXCB::IGNORE){ + cstate = LSession::handle()->XCB->WindowState(window); + } + return cstate; +}
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/LWinInfo.h b/src-qt5/core/lumina-desktop/LWinInfo.h new file mode 100644 index 00000000..3d2ea65a --- /dev/null +++ b/src-qt5/core/lumina-desktop/LWinInfo.h @@ -0,0 +1,50 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef _LUMINA_DESKTOP_WINDOW_INFO_H +#define _LUMINA_DESKTOP_WINDOW_INFO_H + +// Qt includes +#include <QString> +#include <QPixmap> +#include <QIcon> +#include <QPainter> + +// libLumina includes +#include <LuminaX11.h> +#include <LuminaXDG.h> + +// Local includes +//#include "Globals.h" //For the STATES enumeration definition +//#include "LSession.h" + + +class LWinInfo{ +private: + WId window; + LXCB::WINDOWVISIBILITY cstate; //current window state + +public: + LWinInfo(WId id = 0){ + window = id; + cstate = LXCB::IGNORE; //make sure this gets updates with the first "status" call + } + ~LWinInfo(){}; + + //The current window ID + WId windowID(){ + return window; + } + + //Information Retrieval + // Don't cache these results because they can change regularly + QString text(); + QIcon icon(bool &noicon); + QString Class(); + LXCB::WINDOWVISIBILITY status(bool update = false); +}; + +#endif
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/LXcbEventFilter.cpp b/src-qt5/core/lumina-desktop/LXcbEventFilter.cpp new file mode 100644 index 00000000..7ee4f974 --- /dev/null +++ b/src-qt5/core/lumina-desktop/LXcbEventFilter.cpp @@ -0,0 +1,109 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2012, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LXcbEventFilter.h" + +//For all the XCB interactions and atoms +// is accessed via +// session->XCB->EWMH.(atom name) +// session->XCB->(do something) +#include <LuminaX11.h> +#include <QDebug> + +XCBEventFilter::XCBEventFilter(LSession *sessionhandle) : QAbstractNativeEventFilter(){ + session = sessionhandle; //save this for interaction with the session later + TrayDmgFlag = 0; + stopping = false; + InitAtoms(); +} + +void XCBEventFilter::setTrayDamageFlag(int flag){ + //Special flag for system tray damage events + TrayDmgFlag = flag + XCB_DAMAGE_NOTIFY; //save the whole flag (no calculations later) +} + +//This function format taken directly from the Qt5.3 documentation +bool XCBEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *){ + if(stopping){ return false; } //don't do any parsing + //qDebug() << "New Event"; + if(eventType=="xcb_generic_event_t"){ + //qDebug() << " - XCB event"; + //Convert to known event type (for X11 systems) + xcb_generic_event_t *ev = static_cast<xcb_generic_event_t *>(message); + //Now parse the event and emit signals as necessary + switch( ev->response_type & ~0x80){ +//============================== + case XCB_PROPERTY_NOTIFY: + //qDebug() << "Property Notify Event:"; + //qDebug() << " - Root Window:" << QX11Info::appRootWindow(); + //qDebug() << " - Given Window:" << ((xcb_property_notify_event_t*)ev)->window; + //System-specific proprty change + if( SysNotifyAtoms.contains( ((xcb_property_notify_event_t*)ev)->atom ) ){ + //Update the status/list of all running windows + session->WindowPropertyEvent(); + + //window-specific property change + }else if( WinNotifyAtoms.contains( ((xcb_property_notify_event_t*)ev)->atom ) ){ + //Ping only that window + //session->WindowPropertyEvent( ((xcb_property_notify_event_t*)ev)->window ); + session->WindowPropertyEvent(); + } + break; +//============================== + case XCB_CLIENT_MESSAGE: + //qDebug() << "Client Message Event"; + //qDebug() << " - Root Window:" << QX11Info::appRootWindow(); + //qDebug() << " - Given Window:" << ((xcb_client_message_event_t*)ev)->window; + if( TrayDmgFlag!=0 && ((xcb_client_message_event_t*)ev)->type == _NET_SYSTEM_TRAY_OPCODE && ((xcb_client_message_event_t*)ev)->format == 32){ + //data32[0] is timestamp, [1] is opcode, [2] is window handle + if(SYSTEM_TRAY_REQUEST_DOCK == ((xcb_client_message_event_t*)ev)->data.data32[1]){ + session->SysTrayDockRequest( ((xcb_client_message_event_t*)ev)->data.data32[2] ); + } + //Ignore the System Tray messages at the moment (let the WM handle it) + + //window-specific property changes + /*}else if( ((xcb_client_message_event_t*)ev)->type == session->XCB->EWMH._NET_WM_STATE ){ + if( session->XCB->WindowIsMaximized( ((xcb_client_message_event_t*)ev)->window ) ){ + //Quick fix for maximized windows (since Fluxbox is not doing the STRUT detection properly) + session->adjustWindowGeom( ((xcb_client_message_event_t*)ev)->window ); + } + session->WindowPropertyEvent( ((xcb_client_message_event_t*)ev)->window );*/ + }else if( WinNotifyAtoms.contains( ((xcb_client_message_event_t*)ev)->type ) ){ + //Ping only that window + //session->WindowPropertyEvent( ((xcb_client_message_event_t*)ev)->window ); + session->WindowPropertyEvent(); + } + break; +//============================== + case XCB_DESTROY_NOTIFY: + //qDebug() << "Window Closed Event"; + session->WindowClosedEvent( ( (xcb_destroy_notify_event_t*)ev )->window ); + break; +//============================== + case XCB_CONFIGURE_NOTIFY: + //qDebug() << "Configure Notify Event"; + session->WindowConfigureEvent( ((xcb_configure_notify_event_t*)ev)->window ); + break; +//============================== + case XCB_SELECTION_CLEAR: + //qDebug() << "Selection Clear Event"; + session->WindowSelectionClearEvent( ((xcb_selection_clear_event_t*)ev)->owner ); + break; +//============================== + default: + if(TrayDmgFlag!=0){ + //if( (ev->response_type & ~0x80)==TrayDmgFlag){ + session->WindowDamageEvent( ((xcb_damage_notify_event_t*)ev)->drawable ); + //} + }/*else{ + qDebug() << "Default Event:" << (ev->response_type & ~0x80); + }*/ +//============================== + } + } + //qDebug() << " - finished event"; + return false; //make sure the handling keeps going (transparent watching of events) +} diff --git a/src-qt5/core/lumina-desktop/LXcbEventFilter.h b/src-qt5/core/lumina-desktop/LXcbEventFilter.h new file mode 100644 index 00000000..c56471c9 --- /dev/null +++ b/src-qt5/core/lumina-desktop/LXcbEventFilter.h @@ -0,0 +1,104 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2012, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This class provides the XCB ->Xlib conversion necessary for Qt5 usage +//=========================================== +#ifndef _LUMINA_DESKTOP_XCB_FILTER_H +#define _LUMINA_DESKTOP_XCB_FILTER_H + +#include <QAbstractNativeEventFilter> +#include <QList> +#include <QStringList> +#include <QX11Info> + +#include <xcb/xcb.h> +#include <xcb/xproto.h> +#include <xcb/damage.h> +#include <xcb/xcb_atom.h> +#include "LSession.h" + +/* +List of XCB response types (since almost impossible to find good docs on XCB) +switch (xcb_generic_event_t*->response_type & ~0x80) +case values: +XCB_KEY_[PRESS | RELEASE] +XCB_BUTTON_[PRESS | RELEASE] +XCB_MOTION_NOTIFY +XCB_ENTER_NOTIFY +XCB_LEAVE_NOTIFY +XCB_FOCUS_[IN | OUT] +XCB_KEYMAP_NOTIFY +XCB_EXPOSE +XCB_GRAPHICS_EXPOSURE +XCB_VISIBILITY_NOTIFY +XCB_CREATE_NOTIFY +XCB_DESTROY_NOTIFY +XCB_UNMAP_NOTIFY +XCB_MAP_[NOTIFY | REQUEST] +XCB_REPARENT_NOTIFY +XCB_CONFIGURE_[NOTIFY | REQUEST] +XCB_GRAVITY_NOTIFY +XCB_RESIZE_REQUEST +XCB_CIRCULATE_[NOTIFY | REQUEST] +XCB_PROPERTY_NOTIFY +XCB_SELECTION_[CLEAR | REQUEST | NOTIFY] +XCB_COLORMAP_NOTIFY +XCB_CLIENT_MESSAGE + +*/ + +//SYSTEM TRAY STANDARD DEFINITIONS +#define SYSTEM_TRAY_REQUEST_DOCK 0 +#define SYSTEM_TRAY_BEGIN_MESSAGE 1 +#define SYSTEM_TRAY_CANCEL_MESSAGE 2 + +class XCBEventFilter : public QAbstractNativeEventFilter{ +private: + LSession *session; + xcb_atom_t _NET_SYSTEM_TRAY_OPCODE; + QList<xcb_atom_t> WinNotifyAtoms, SysNotifyAtoms; + int TrayDmgFlag; //internal damage event offset value for the system tray + bool stopping; + + void InitAtoms(){ + //Initialize any special atoms that we need to save/use regularly + //NOTE: All the EWMH atoms are already saved in session->XCB->EWMH + WinNotifyAtoms.clear(); + WinNotifyAtoms << session->XCB->EWMH._NET_WM_NAME \ + << session->XCB->EWMH._NET_WM_VISIBLE_NAME \ + << session->XCB->EWMH._NET_WM_ICON_NAME \ + << session->XCB->EWMH._NET_WM_VISIBLE_ICON_NAME \ + << session->XCB->EWMH._NET_WM_ICON \ + << session->XCB->EWMH._NET_WM_ICON_GEOMETRY; + + SysNotifyAtoms.clear(); + SysNotifyAtoms << session->XCB->EWMH._NET_CLIENT_LIST \ + << session->XCB->EWMH._NET_CLIENT_LIST_STACKING \ + << session->XCB->EWMH._NET_CURRENT_DESKTOP \ + << session->XCB->EWMH._NET_WM_STATE \ + << session->XCB->EWMH._NET_ACTIVE_WINDOW \ + << session->XCB->EWMH._NET_WM_ICON \ + << session->XCB->EWMH._NET_WM_ICON_GEOMETRY; + //_NET_SYSTEM_TRAY_OPCODE + xcb_intern_atom_cookie_t cookie = xcb_intern_atom(QX11Info::connection(), 0, 23,"_NET_SYSTEM_TRAY_OPCODE"); + xcb_intern_atom_reply_t *r = xcb_intern_atom_reply(QX11Info::connection(), cookie, NULL); + if(r){ + _NET_SYSTEM_TRAY_OPCODE = r->atom; + free(r); + } + } + +public: + XCBEventFilter(LSession *sessionhandle); + void setTrayDamageFlag(int flag); + void StopEventHandling(){ stopping = true; } + + //This function format taken directly from the Qt5.3 documentation + virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *) Q_DECL_OVERRIDE; + +}; + +#endif diff --git a/src-qt5/core/lumina-desktop/Lumina-DE.desktop b/src-qt5/core/lumina-desktop/Lumina-DE.desktop new file mode 100644 index 00000000..f83c6a7c --- /dev/null +++ b/src-qt5/core/lumina-desktop/Lumina-DE.desktop @@ -0,0 +1,34 @@ +[Desktop Entry] +Exec=Lumina-DE +TryExec=Lumina-DE +Icon=Lumina-DE +Type=Application +Name=Lumina +Name[de]=Lumina +Name[en_GB]=Lumina +Name[en_ZA]=Lumina +Name[et]=Lumina +Name[fr]=Lumina +Name[fr_CA]=Lumina +Name[hi]=ल्यूमिना +Name[ja]=Lumina +Name[mt]=Lumina +Name[pl]=Lumina +Name[pt_BR]=Lumina +Name[ru]=Lumina +Name[uk]=Lumina +Name[vi]=Lumina +Comment=A Lightweight Desktop for FreeBSD +Comment[de]=Eine leichtgewichtige Arbeitsplatzumgebung für FreeBSD +Comment[en_GB]=A Lightweight Desktop for FreeBSD +Comment[en_ZA]=A Lightweight Desktop for FreeBSD +Comment[et]=Minimalistlik töölauakeskkond FreeBSD-le +Comment[fr]=Un environnement bureau léger pour FreeBSD +Comment[fr_CA]=Un environnement bureau léger pour FreeBSD +Comment[hi]=एक हल्का डेस्कटॉप फ्री बी.एस.डी के लिए +Comment[ja]=FreeBSD の為に作られた軽快なデスクトップ環境 +Comment[mt]=A Desktop irqiq għal FreeBSD +Comment[pl]=Lekkie Środowisko graficzne dla FreeBSD +Comment[pt_BR]=Um ambiente de trabalho leve para FreeBSD +Comment[uk]=Легковісне оточення стільниці для FreeBSD +Comment[vi]=Một máy tính để bàn nhẹ cho FreeBSD diff --git a/src-qt5/core/lumina-desktop/Lumina-DE.png b/src-qt5/core/lumina-desktop/Lumina-DE.png Binary files differnew file mode 100644 index 00000000..ce88a252 --- /dev/null +++ b/src-qt5/core/lumina-desktop/Lumina-DE.png diff --git a/src-qt5/core/lumina-desktop/Lumina-DE.qrc b/src-qt5/core/lumina-desktop/Lumina-DE.qrc new file mode 100644 index 00000000..5fada9b6 --- /dev/null +++ b/src-qt5/core/lumina-desktop/Lumina-DE.qrc @@ -0,0 +1,7 @@ +<RCC> + <qresource> + <file>images/desktop-background.jpg</file> + <file>fluxboxconf/fluxbox-init-rc</file> + <file>fluxboxconf/fluxbox-keys</file> + </qresource> +</RCC> diff --git a/src-qt5/core/lumina-desktop/SettingsMenu.cpp b/src-qt5/core/lumina-desktop/SettingsMenu.cpp new file mode 100644 index 00000000..540538b5 --- /dev/null +++ b/src-qt5/core/lumina-desktop/SettingsMenu.cpp @@ -0,0 +1,64 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "SettingsMenu.h" +#include "LSession.h" + +#include <LuminaOS.h> + +SettingsMenu::SettingsMenu() : QMenu(){ + connect(this, SIGNAL(triggered(QAction*)), this, SLOT(runApp(QAction*)) ); + connect(QApplication::instance(), SIGNAL(LocaleChanged()), this, SLOT(UpdateMenu()) ); + connect(QApplication::instance(), SIGNAL(IconThemeChanged()), this, SLOT(UpdateMenu()) ); + QTimer::singleShot(100, this, SLOT(UpdateMenu()) ); +} + +SettingsMenu::~SettingsMenu(){ + +} + +void SettingsMenu::UpdateMenu(){ + //Change the title/icon to account for locale/icon changes + this->setTitle( tr("Preferences") ); + this->setIcon( LXDG::findIcon("configure","") ); + this->clear(); + //Now setup the possible configuration options + QAction *act = new QAction(LXDG::findIcon("preferences-desktop-screensaver",""), tr("Screensaver"), this); + act->setWhatsThis("xscreensaver-demo"); + this->addAction(act); + act = new QAction( LXDG::findIcon("preferences-desktop",""), tr("Desktop"), this); + act->setWhatsThis("lumina-config"); + this->addAction(act); + act = new QAction( LXDG::findIcon("preferences-other",""), tr("Display"), this); + act->setWhatsThis("lumina-xconfig"); + this->addAction(act); + /*QString qtconfig = LOS::QtConfigShortcut(); + if(QFile::exists(qtconfig) && !qtconfig.isEmpty()){ + act = new QAction( LXDG::findIcon("preferences-desktop-theme",""), tr("Window Theme"), this); + act->setWhatsThis(qtconfig); + this->addAction(act); + }*/ + QString CONTROLPANEL = LOS::ControlPanelShortcut(); + if(QFile::exists(CONTROLPANEL) && !CONTROLPANEL.isEmpty()){ + //Now load the info + bool ok = false; + XDGDesktop cpan = LXDG::loadDesktopFile(CONTROLPANEL, ok); + if(ok){ + act = new QAction( LXDG::findIcon(cpan.icon,""), tr("Control Panel"), this); + act->setWhatsThis("lumina-open \""+CONTROLPANEL+"\""); + this->addAction(act); + } + } + this->addSeparator(); + act = new QAction( LXDG::findIcon("lumina",""), tr("About Lumina"), this); + act->setWhatsThis("lumina-info"); + this->addAction(act); +} + + +void SettingsMenu::runApp(QAction* act){ + LSession::LaunchApplication(act->whatsThis()); +} diff --git a/src-qt5/core/lumina-desktop/SettingsMenu.h b/src-qt5/core/lumina-desktop/SettingsMenu.h new file mode 100644 index 00000000..eeabab85 --- /dev/null +++ b/src-qt5/core/lumina-desktop/SettingsMenu.h @@ -0,0 +1,28 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef _LUMINA_DESKTOP_SETTINGS_MENU_H +#define _LUMINA_DESKTOP_SETTINGS_MENU_H + +#include <QMenu> +#include <QProcess> +#include <QAction> + +#include <LuminaXDG.h> + +class SettingsMenu : public QMenu{ + Q_OBJECT +public: + SettingsMenu(); + ~SettingsMenu(); + +private slots: + void UpdateMenu(); + void runApp(QAction* act); + +}; + +#endif
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/SystemWindow.cpp b/src-qt5/core/lumina-desktop/SystemWindow.cpp new file mode 100644 index 00000000..74538404 --- /dev/null +++ b/src-qt5/core/lumina-desktop/SystemWindow.cpp @@ -0,0 +1,84 @@ +#include "SystemWindow.h" +#include "ui_SystemWindow.h" + +#include "LSession.h" +#include <LuminaOS.h> +#include <QPoint> +#include <QCursor> +#include <QDebug> +#include <QProcess> +#include <QDesktopWidget> + +SystemWindow::SystemWindow() : QDialog(), ui(new Ui::SystemWindow){ + ui->setupUi(this); //load the designer file + //Setup the window flags + this->setWindowFlags( Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); + //Setup the icons based on the current theme + ui->tool_logout->setIcon( LXDG::findIcon("system-log-out","") ); + ui->tool_restart->setIcon( LXDG::findIcon("system-reboot","") ); + ui->tool_shutdown->setIcon( LXDG::findIcon("system-shutdown","") ); + ui->tool_suspend->setIcon( LXDG::findIcon("system-suspend","") ); + ui->push_cancel->setIcon( LXDG::findIcon("dialog-cancel","") ); + ui->push_lock->setIcon( LXDG::findIcon("system-lock-screen","") ); + //Connect the signals/slots + connect(ui->tool_logout, SIGNAL(clicked()), this, SLOT(sysLogout()) ); + connect(ui->tool_restart, SIGNAL(clicked()), this, SLOT(sysRestart()) ); + connect(ui->tool_shutdown, SIGNAL(clicked()), this, SLOT(sysShutdown()) ); + connect(ui->tool_suspend, SIGNAL(clicked()), this, SLOT(sysSuspend()) ); + connect(ui->push_cancel, SIGNAL(clicked()), this, SLOT(sysCancel()) ); + connect(ui->push_lock, SIGNAL(clicked()), this, SLOT(sysLock()) ); + //Disable buttons if necessary + updateWindow(); + ui->tool_suspend->setVisible(LOS::systemCanSuspend()); //does not change with time - just do a single check + connect(QApplication::instance(), SIGNAL(LocaleChanged()), this, SLOT(updateWindow()) ); + connect(QApplication::instance(), SIGNAL(IconThemeChanged()), this, SLOT(updateWindow()) ); +} + +SystemWindow::~SystemWindow(){ + +} + +void SystemWindow::updateWindow(){ + //Disable the shutdown/restart buttons if necessary + ui->retranslateUi(this); + bool ok = LOS::userHasShutdownAccess(); + ui->tool_restart->setEnabled(ok); + ui->tool_shutdown->setEnabled(ok); + //Center this window on the current screen + QPoint center = QApplication::desktop()->screenGeometry(QCursor::pos()).center(); //get the center of the current screen + this->move(center.x() - this->width()/2, center.y() - this->height()/2); +} + +void SystemWindow::sysLogout(){ + this->hide(); + LSession::processEvents(); + QTimer::singleShot(0, LSession::handle(), SLOT(StartLogout()) ); +} + +void SystemWindow::sysRestart(){ + this->hide(); + LSession::processEvents(); + QTimer::singleShot(0, LSession::handle(), SLOT(StartReboot()) ); +} + +void SystemWindow::sysShutdown(){ + this->hide(); + LSession::processEvents(); + QTimer::singleShot(0, LSession::handle(), SLOT(StartShutdown()) ); +} + +void SystemWindow::sysSuspend(){ + this->hide(); + LSession::processEvents(); + //Make sure to lock the system first (otherwise anybody can access it again) + LUtils::runCmd("xscreensaver-command -lock"); + //Now suspend the system + LOS::systemSuspend(); +} + +void SystemWindow::sysLock(){ + this->hide(); + LSession::processEvents(); + qDebug() << "Locking the desktop..."; + QProcess::startDetached("xscreensaver-command -lock"); +} diff --git a/src-qt5/core/lumina-desktop/SystemWindow.h b/src-qt5/core/lumina-desktop/SystemWindow.h new file mode 100644 index 00000000..98617f79 --- /dev/null +++ b/src-qt5/core/lumina-desktop/SystemWindow.h @@ -0,0 +1,45 @@ +#ifndef _LUMINA_DESKTOP_SYSTEM_WINDOW_H +#define _LUMINA_DESKTOP_SYSTEM_WINDOW_H + +#include <QDialog> + +#include "ui_SystemWindow.h" + + + + +namespace Ui{ + class SystemWindow; +}; + +class SystemWindow : public QDialog{ + Q_OBJECT +public: + SystemWindow(); + ~SystemWindow(); + +public slots: + void updateWindow(); + +private: + Ui::SystemWindow *ui; + + //void closeAllWindows(); + +private slots: + void sysLogout(); + + void sysRestart(); + + void sysShutdown(); + + void sysSuspend(); + + void sysCancel(){ + this->close(); + } + + void sysLock(); +}; + +#endif diff --git a/src-qt5/core/lumina-desktop/SystemWindow.ui b/src-qt5/core/lumina-desktop/SystemWindow.ui new file mode 100644 index 00000000..9e25509b --- /dev/null +++ b/src-qt5/core/lumina-desktop/SystemWindow.ui @@ -0,0 +1,194 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>SystemWindow</class> + <widget class="QDialog" name="SystemWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>289</width> + <height>135</height> + </rect> + </property> + <property name="windowTitle"> + <string>System Options</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="leftMargin"> + <number>2</number> + </property> + <property name="topMargin"> + <number>2</number> + </property> + <property name="rightMargin"> + <number>2</number> + </property> + <property name="bottomMargin"> + <number>2</number> + </property> + <item> + <widget class="QFrame" name="frame"> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <property name="leftMargin"> + <number>3</number> + </property> + <property name="topMargin"> + <number>3</number> + </property> + <property name="rightMargin"> + <number>3</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QToolButton" name="tool_logout"> + <property name="text"> + <string>Log Out</string> + </property> + <property name="iconSize"> + <size> + <width>64</width> + <height>64</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextUnderIcon</enum> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_restart"> + <property name="text"> + <string>Restart</string> + </property> + <property name="iconSize"> + <size> + <width>64</width> + <height>64</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextUnderIcon</enum> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_shutdown"> + <property name="text"> + <string>Shutdown</string> + </property> + <property name="iconSize"> + <size> + <width>64</width> + <height>64</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextUnderIcon</enum> + </property> + </widget> + </item> + </layout> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="Line" name="line"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QToolButton" name="push_cancel"> + <property name="text"> + <string>Cancel</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextUnderIcon</enum> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QToolButton" name="push_lock"> + <property name="text"> + <string>Lock</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextUnderIcon</enum> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_suspend"> + <property name="text"> + <string>Suspend</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextUnderIcon</enum> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src-qt5/core/lumina-desktop/WMProcess.cpp b/src-qt5/core/lumina-desktop/WMProcess.cpp new file mode 100644 index 00000000..a2a4933f --- /dev/null +++ b/src-qt5/core/lumina-desktop/WMProcess.cpp @@ -0,0 +1,133 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2012, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "WMProcess.h" +#include "LSession.h" + +WMProcess::WMProcess() : QProcess(){ + connect(this,SIGNAL(finished(int, QProcess::ExitStatus)),this,SLOT(processFinished(int, QProcess::ExitStatus)) ); + this->setProcessChannelMode(QProcess::MergedChannels); + QString log = QDir::homePath()+"/.lumina/logs/wm.log"; + if(QFile::exists(log)){ QFile::remove(log); } + this->setStandardOutputFile(log); + ssaver = new QProcess(0); + inShutdown = false; +} + +WMProcess::~WMProcess(){ + +} + +// ======================= +// PUBLIC FUNCTIONS +// ======================= +void WMProcess::startWM(){ + inShutdown = false; + QString cmd = setupWM(); + if(!isRunning()){this->start(cmd); } + if(ssaver->state() == QProcess::NotRunning \ + && LSession::handle()->sessionSettings()->value("WindowManager", "fluxbox").toString() != "lumina-wm"){ + ssaver->start("xscreensaver -no-splash"); + } +} + +void WMProcess::stopWM(){ + if(isRunning()){ + inShutdown = true; + //QProcess::startDetached("fluxbox-remote closeallwindows"); + ssaver->kill(); + this->kill(); + if(!this->waitForFinished(10000)){ this->terminate(); }; + }else{ + qWarning() << "WM already closed - did it crash?"; + } +} + +void WMProcess::restartWM(){ + qDebug() << "Restarting WM"; + if(isRunning()){ + inShutdown = true; + this->kill(); + if(!this->waitForFinished(5000) ){ this->terminate(); }; + inShutdown = false; + } + this->startWM(); +} + +void WMProcess::updateWM(){ + if(isRunning()){ + qDebug() << "Updating WM"; + ::kill(this->pid(), SIGUSR2); //send fluxbox the signal to reload it's configuration + } +} +// ======================= +// PRIVATE FUNCTIONS +// ======================= +bool WMProcess::isRunning(){ + return (this->state() != QProcess::NotRunning); +} + +QString WMProcess::setupWM(){ + QString WM = LSession::handle()->sessionSettings()->value("WindowManager", "fluxbox").toString(); + QString cmd="echo WM Disabled"; + //leave the option to add other window managers here (for testing purposes) + if(WM=="openbox"){ + QString confDir = QDir::homePath()+"/.config/openbox"; + if(!QFile::exists(confDir)){ QDir dir(confDir); dir.mkpath(confDir); } + if(!QFile::exists(confDir+"lumina-rc.xml")){ + QFile::copy(":/openboxconf/lumina-rc.xml",confDir+"/lumina-rc.xml"); + QFile::setPermissions(confDir+"/lumina-rc.xml", QFile::ReadOwner | QFile::WriteOwner | QFile::ReadUser | QFile::ReadOther | QFile::ReadGroup); + } + if(!QFile::exists(confDir+"lumina-menu.xml")){ + QFile::copy(":/openboxconf/lumina-menu.xml",confDir+"/lumina-menu.xml"); + QFile::setPermissions(confDir+"/lumina-menu.xml", QFile::ReadOwner | QFile::WriteOwner | QFile::ReadUser | QFile::ReadOther | QFile::ReadGroup); + } + //Now copy the configuration files around as necessary + //if(QFile::exists(confDir+"/rc.xml")){ QFile::rename(confDir+"/rc.xml",confDir+"/openbox-rc.xml"); } + //QFile::copy(confDir+"/lumina-rc.xml",confDir+"/rc.xml"); + cmd = "openbox --debug --sm-disable --config-file "+confDir+"/lumina-rc.xml"; + }else if(WM=="fluxbox"){ + QString confDir = QDir::homePath()+"/.lumina"; + if(!QFile::exists(confDir)){ QDir dir(confDir); dir.mkpath(confDir); } + if(!QFile::exists(confDir+"/fluxbox-init")){ + QFile::copy(":/fluxboxconf/fluxbox-init-rc",confDir+"/fluxbox-init"); + QFile::setPermissions(confDir+"/fluxbox-init", QFile::ReadOwner | QFile::WriteOwner | QFile::ReadUser | QFile::ReadOther | QFile::ReadGroup); + } + // FLUXBOX BUG BYPASS: if the ~/.fluxbox dir does not exist, it will ignore the given config file + if(!QFile::exists(QDir::homePath()+"/.fluxbox")){ + QDir dir; dir.mkpath(QDir::homePath()+"/.fluxbox"); + } + cmd = "fluxbox -rc "+confDir+"/fluxbox-init -no-slit -no-toolbar"; + }else { + cmd = WM; + } + return cmd; +} + +void WMProcess::cleanupConfig(){ + //QString confDir = QDir::homePath()+"/.config/openbox"; + //if(!QFile::exists(confDir+"/rc.xml")){ return; } //Make sure that there is a current config file + //if(QFile::exists(confDir+"/lumina-rc.xml")){ QFile::remove(confDir+"/lumina-rc.xml"); } + //QFile::rename(confDir+"/rc.xml",confDir+"/lumina-rc.xml"); + //if(QFile::exists(confDir+"/openbox-rc.xml")){ QFile::rename(confDir+"/openbox-rc.xml",confDir+"/rc.xml"); } +} +// ======================= +// PRIVATE SLOTS +// ======================= +void WMProcess::processFinished(int exitcode, QProcess::ExitStatus status){ + if(!inShutdown){ + if(exitcode == 0 && status == QProcess::NormalExit){ + cleanupConfig(); + emit WMShutdown(); + }else{ + //restart the Window manager + qDebug() << "WM Stopped Unexpectedly: Restarting it..."; + this->startWM(); + } + }else{ + cleanupConfig(); + } +} diff --git a/src-qt5/core/lumina-desktop/WMProcess.h b/src-qt5/core/lumina-desktop/WMProcess.h new file mode 100644 index 00000000..ff1b3963 --- /dev/null +++ b/src-qt5/core/lumina-desktop/WMProcess.h @@ -0,0 +1,47 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2012, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef _LUMINA_DESKTOP_WMPROCESS_H +#define _LUMINA_DESKTOP_WMPROCESS_H + +#include <QProcess> +#include <QFile> +#include <QDir> +#include <QDebug> + +#include <sys/types.h> +#include <signal.h> + +class WMProcess : public QProcess{ + Q_OBJECT +public: + WMProcess(); + ~WMProcess(); + + void startWM(); + void stopWM(); + + void updateWM(); + +public slots: + void restartWM(); + +private: + bool inShutdown; + bool isRunning(); + QString setupWM(); + void cleanupConfig(); + QProcess *ssaver; + +private slots: + void processFinished(int exitcode, QProcess::ExitStatus status); + +signals: + void WMShutdown(); +}; + +#endif + diff --git a/src-qt5/core/lumina-desktop/audiofiles/LICENCE b/src-qt5/core/lumina-desktop/audiofiles/LICENCE new file mode 100644 index 00000000..2929216f --- /dev/null +++ b/src-qt5/core/lumina-desktop/audiofiles/LICENCE @@ -0,0 +1 @@ +These audio files are BSD-licensed and were created/owned by the PC-BSD Project diff --git a/src-qt5/core/lumina-desktop/audiofiles/Login.ogg b/src-qt5/core/lumina-desktop/audiofiles/Login.ogg Binary files differnew file mode 100644 index 00000000..43a07e27 --- /dev/null +++ b/src-qt5/core/lumina-desktop/audiofiles/Login.ogg diff --git a/src-qt5/core/lumina-desktop/audiofiles/Logout.ogg b/src-qt5/core/lumina-desktop/audiofiles/Logout.ogg Binary files differnew file mode 100644 index 00000000..e63ae07f --- /dev/null +++ b/src-qt5/core/lumina-desktop/audiofiles/Logout.ogg diff --git a/src-qt5/core/lumina-desktop/defaults/defaultapps.conf b/src-qt5/core/lumina-desktop/defaults/defaultapps.conf new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/src-qt5/core/lumina-desktop/defaults/defaultapps.conf @@ -0,0 +1 @@ + diff --git a/src-qt5/core/lumina-desktop/defaults/desktop-background.jpg b/src-qt5/core/lumina-desktop/defaults/desktop-background.jpg Binary files differnew file mode 100644 index 00000000..ddee66ea --- /dev/null +++ b/src-qt5/core/lumina-desktop/defaults/desktop-background.jpg diff --git a/src-qt5/core/lumina-desktop/defaults/desktop-background.pcbsd.jpg b/src-qt5/core/lumina-desktop/defaults/desktop-background.pcbsd.jpg Binary files differnew file mode 100644 index 00000000..67ad41f1 --- /dev/null +++ b/src-qt5/core/lumina-desktop/defaults/desktop-background.pcbsd.jpg diff --git a/src-qt5/core/lumina-desktop/defaults/desktopsettings.conf b/src-qt5/core/lumina-desktop/defaults/desktopsettings.conf new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/src-qt5/core/lumina-desktop/defaults/desktopsettings.conf @@ -0,0 +1 @@ + diff --git a/src-qt5/core/lumina-desktop/defaults/luminaDesktop.conf b/src-qt5/core/lumina-desktop/defaults/luminaDesktop.conf new file mode 100644 index 00000000..2c973adb --- /dev/null +++ b/src-qt5/core/lumina-desktop/defaults/luminaDesktop.conf @@ -0,0 +1,58 @@ +#This is the configuration file that generates all the default settings files for the Lumina desktop +# For any setting that can take a list of values, each vale needs to be seperated by a comma and a space (", ") +# Example: some_setting=item1, item2, item3 + +#NOTE: To pre-setup default applications for particular mime-types, you need to create *.desktop entries on +# system corresponding to the XDG mime-type specifications for default applications +# See Here for specifications: http://www.freedesktop.org/wiki/Specifications/mime-apps-spec/ + +# Possible Desktop Plugins (Lumina version 0.8.7): +# calendar, applauncher[::absolute path to *.desktop file], desktopview, notepad, audioplayer +# Possible Panel Plugins (Lumina version 0.8.7): +# userbutton, desktopbar, spacer, desktopswitcher, battery, clock, systemdashboard, systemstart +# taskmanager[-nogroups], systemtray, homebutton, appmenu, applauncher[::absolute path to *.desktop file] +# Possible Menu Plugins (Lumina version 0.8.7): +# terminal, filemanager, applications, line, settings, windowlist, app::<absolute path to *.desktop file> + +#GENERAL SESSION SETTINGS +session_enablenumlock=false #[true/false] Enable numlock on login using "numlockx" +session_playloginaudio=true #[true/false] Play the audio chimes on log in +session_playlogoutaudio=true #[true/false] Play the audio chimes on log out + +# DEFAULT UTILITIES +# Provide the full path to *.desktop file, or a binary name which exists on PATH +# *.desktop files provide better support for input formats, and are recommended +#session_default_terminal=xterm +#session_default_filemanager=lumina-fm +#session_default_webbrowser=/usr/local/share/applications/firefox.desktop +#session_default_email=/usr/local/share/applications/thunderbird.desktop + +#THEME SETTINGS +#theme.themefile=<file path> #Absolute path to the theme template file to use (disable for Lumina-Default) +theme_colorfile=Black #Name of the color spec file to use for theming +theme_iconset=oxygen #Name of the icon theme to use +theme_font=Arial #Name of the font family to use +theme_fontsize=10pt #Default size of the fonts to use on the desktop (can also use a percentage of the screen height (<number>%) ) + +#DESKTOP SETTINGS (used for the primary screen in multi-screen setups) +desktop_visiblepanels=1 #[0/1/2] The number of panels visible by default +#desktop.backgroundfiles= #list of absolute file paths for image files (disable for Lumina default) +desktop_backgroundrotateminutes=5 #[positive integer] number of minutes between background rotations (if multiple files) +desktop_plugins= #list of plugins to be shown on the desktop by default +desktop_generate_icons=true #[true/false] Auto-generate launchers for ~/Desktop items + +#PANEL SETTINGS (preface with panel1.<setting> or panel2.<setting>, depending on the number of panels you have visible by default) +panel1_location=top #[top/bottom/left/right] Screen edge the panel should be on +panel1_pixelsize=4%H #number of pixels wide/high the panel should be (or <number>%[W/H] for a percentage of the screen width/height) +panel1_autohide=false #[true/false] Have the panel become visible on mouse-over +panel1_plugins=systemstart, taskmanager-nogroups, spacer, systemtray, clock #list of plugins for the panel +panel1_pinlocation=center #[left/center/right] Note:[left/right] corresponds to [top/bottom] for vertical panels +panel1_edgepercent=90 #[1->100] percentage of the screen edge to use + +#MENU SETTINGS (right-click menu) +menu_plugins=terminal, filemanager, applications, line, settings #list of menu plugins to show + +#FAVORITES CUSTOMIZATION +#favorites_add=<file/dir path> #Create a favorites entry for this file/dir +#favorites_remove=<file/dir path> #Remove a favorites entry for this file/dir +#favorites_add_ifexists=<file/dir path> #Create a favorites entry for this file/dir if the file/dir exists diff --git a/src-qt5/core/lumina-desktop/defaults/luminaDesktop.pcbsd.conf b/src-qt5/core/lumina-desktop/defaults/luminaDesktop.pcbsd.conf new file mode 100644 index 00000000..3dd95444 --- /dev/null +++ b/src-qt5/core/lumina-desktop/defaults/luminaDesktop.pcbsd.conf @@ -0,0 +1,47 @@ +#PC-BSD configuration file for the Lumina Desktop Environment (0.8.7+) + +# See the /usr/local/share/LuminaDE/luminaDesktop.conf file for all the possible values/details + +#GENERAL SESSION SETTINGS +session_enablenumlock=false #[true/false] Enable numlock on login using "numlockx" +session_playloginaudio=true #[true/false] Play the audio chimes on log in +session_playlogoutaudio=true #[true/false] Play the audio chimes on log out + +#Note: the last "ifexists" entry has the highest priority for the next few options +session_default_terminal=/usr/local/share/applications/xterm.desktop +session_default_filemanager=/usr/local/share/applications/lumina-fm.desktop +session_default_webbrowser_ifexists=/usr/local/share/applications/chromium-browser.desktop +session_default_webbrowser_ifexists=/usr/local/share/applications/firefox.desktop +session_default_email_ifexists=/usr/local/share/applications/thunderbird.desktop + +#FAVORITES (Not shown on the desktop by default, but in the menu) +favorites_add_ifexists=/usr/local/share/applications/firefox.desktop +favorites_add_ifexists=/usr/local/share/applications/chromium-browser.desktop +favorites_add_ifexists=/usr/local/share/applications/thunderbird.desktop +favorites_add_ifexists=/usr/local/share/applications/smplayer.desktop +favorites_add_ifexists=/usr/local/share/applications/vlc.desktop +favorites_add_ifexists=/usr/local/share/applications/lumina-fm.desktop + +#THEME SETTINGS +#theme.themefile=<file path> #Absolute path to the theme template file to use (disable for Lumina-Default) +theme_colorfile=/usr/local/share/Lumina-DE/colors/PCBSD10-Default.qss.colors #Absolute path to the color spec file to use for theming +theme_iconset=oxygen #Name of the icon theme to use +theme_font=Noto Sans #Name of the font family to use +theme_fontsize=11pt #Default size of the fonts to use on the desktop + +#DESKTOP SETTINGS (used for the left-most screen in multi-screen setups) +desktop_visiblepanels=1 #The number of panels visible by default +#desktop_backgroundfiles=/usr/local/share/wallpapers/pcbsd-default.jpg #list of absolute file paths for image files (disable for Lumina default) +desktop_backgroundrotateminutes=5 #[positive integer] number of minutes between background rotations (if multiple files) +desktop_generate_icons=true #[true/false] Auto-generate launchers for ~/Desktop items + +#PANEL SETTINGS (preface with panel1.<setting> or panel2.<setting>, depending on the number of panels you have visible by default) +panel1_location=bottom #[top/bottom/left/right] Screen edge the panel should be on +panel1_pixelsize=4%H #number of pixels wide/high the panel should be (or <number>%[W/H] for a percentage of the screen width/height) +panel1_autohide=false #[true/false] Have the panel become visible on mouse-over +panel1_plugins=systemstart, taskmanager-nogroups, spacer, systemtray, clock #list of plugins for the panel +panel1_pinlocation=center #[left/center/right] Note:[left/right] corresponds to [top/bottom] for vertical panels +panel1_edgepercent=100 #[1->100] percentage of the screen edge to use + +#MENU SETTINGS (right-click menu) +menu_plugins=terminal, filemanager, applications, line, settings #list of menu plugins to show diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/LDPlugin.cpp b/src-qt5/core/lumina-desktop/desktop-plugins/LDPlugin.cpp new file mode 100644 index 00000000..69505705 --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/LDPlugin.cpp @@ -0,0 +1,57 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LDPlugin.h" + +#include "../LSession.h" +#include <LuminaXDG.h> + +LDPlugin::LDPlugin(QWidget *parent, QString id) : QFrame(parent){ + PLUGID=id; + prefix = id.replace("/","_")+"/"; + //qDebug() << "ID:" << PLUGID << prefix; + settings = LSession::handle()->DesktopPluginSettings(); + //Setup the plugin system control menu + menu = new QMenu(this); + setupMenu(); + //Setup the internal timer for when to start/stop drag events + dragTimer = new QTimer(this); + dragTimer->setSingleShot(true); + dragTimer->setInterval(500); //1/2 second to show the plugin menu + connect(dragTimer, SIGNAL(timeout()), this, SLOT(showPluginMenu())); + //Use plugin-specific values for stylesheet control (applauncher, desktopview, etc...) + this->setObjectName(id.section("---",0,0).section("::",0,0)); + this->setContextMenuPolicy(Qt::CustomContextMenu); + this->setMouseTracking(false); //only catch mouse movement events if the mouse is clicked/held on the plugin + connect(QApplication::instance(), SIGNAL(LocaleChanged()), this, SLOT(LocaleChange()) ); + connect(QApplication::instance(), SIGNAL(IconThemeChanged()), this, SLOT(ThemeChange()) ); + connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showPluginMenu()) ); +} + +void LDPlugin::setupMenu(){ + menu->clear(); + menu->addAction( LXDG::findIcon("transform-move",""), tr("Start Moving Item"), this, SLOT(slotStartMove()) ); + menu->addAction( LXDG::findIcon("transform-scale",""), tr("Start Resizing Item"), this, SLOT(slotStartResize()) ); + menu->addSeparator(); + menu->addAction( LXDG::findIcon("zoom-in",""), tr("Increase Item Sizes"), this, SIGNAL(IncreaseIconSize()) ); + menu->addAction( LXDG::findIcon("zoom-out",""), tr("Decrease Item Sizes"), this, SIGNAL(DecreaseIconSize()) ); + menu->addSeparator(); + menu->addAction( LXDG::findIcon("edit-delete",""), tr("Remove Item"), this, SLOT(slotRemovePlugin()) ); +} + +/*void LDPlugin::setInitialSize(int width, int height){ + //Note: Only run this in the plugin initization routine: + // if the plugin is completely new (first time used), it will be this size + if(settings->allKeys().filter(prefix+"location").isEmpty()){ + //Brand new plugin: set initial size + //qDebug() << "Setting Initial Size:" << PLUGID << width << height; + settings->setValue(prefix+"location/width",width); + settings->setValue(prefix+"location/height",height); + settings->sync(); + } + //Now make sure the plugin is the saved size right away + this->resize( settings->value(prefix+"location/width").toInt(), settings->value(prefix+"location/height").toInt()); +}*/
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/LDPlugin.h b/src-qt5/core/lumina-desktop/desktop-plugins/LDPlugin.h new file mode 100644 index 00000000..27fcaa24 --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/LDPlugin.h @@ -0,0 +1,155 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This class is the generic container layout for all desktop plugins +// Simply subclass this when creating a new plugin to enable correct +// visibility and usage within the desktop window +//=========================================== +// WARNING: Do *not* setup a custom context menu for the entire plugins area! +// This can prevent access to the general desktop context menu if +// the plugin was maximized to fill the desktop area! +//=========================================== +#ifndef _LUMINA_DESKTOP_DESKTOP_PLUGIN_H +#define _LUMINA_DESKTOP_DESKTOP_PLUGIN_H + +#include <QObject> +#include <QFrame> +#include <QWidget> +#include <QString> +#include <QDebug> +#include <QSettings> +#include <QMoveEvent> +#include <QResizeEvent> +#include <QMouseEvent> +#include <QTimer> +#include <QMenu> + +class LDPlugin : public QFrame{ + Q_OBJECT + +private: + QString PLUGID, prefix; + QSettings *settings; + QMenu *menu; + QTimer *dragTimer; + + void setupMenu(); + +public: + LDPlugin(QWidget *parent = 0, QString id="unknown"); + + ~LDPlugin(){} + + QString ID(){ + return PLUGID; + } + + virtual QSize defaultPluginSize(){ + //This needs to be re-implemented in the subclassed plugin + // The returned QSize is in grid points (typically 100 or 200 pixels square) + return QSize(1,1); //1x1 grid size + } + + void savePluginGeometry(QRect geom){ + settings->setValue(prefix+"geometry/desktopGridPoints", geom); + settings->sync(); + } + + QRect loadPluginGeometry(){ + return settings->value(prefix+"geometry/desktopGridPoints", QRect()).toRect(); + } + + void saveSetting(QString var, QVariant val){ + //qDebug() << "Saving Setting:" << prefix+var+QString(" = ")+val.toString(); + settings->setValue(prefix+var, val); + settings->sync(); + } + + QVariant readSetting(QString var, QVariant defaultval){ + return settings->value(prefix+var, defaultval); + } + + virtual void Cleanup(){ + //This needs to be re-implemented in the subclassed plugin + //This is where any last-minute changes are performed before a plugin is removed permanently + //Note1: This is *not* called if the plugin is being temporarily closed + //Note2: All the settings for this plugin will be automatically removed after this is finished + } + + void removeSettings(bool permanent = false){ //such as when a plugin is deleted + if(permanent){ Cleanup(); } + QStringList list = settings->allKeys().filter(prefix); + for(int i=0; i<list.length(); i++){ settings->remove(list[i]); } + + } + +public slots: + virtual void LocaleChange(){ + //This needs to be re-implemented in the subclassed plugin + //This is where all text is set/translated + setupMenu(); + } + virtual void ThemeChange(){ + //This needs to be re-implemented in the subclassed plugin + //This is where all the visuals are set if using Theme-dependant icons. + setupMenu(); + } + void showPluginMenu(){ + emit CloseDesktopMenu(); + menu->popup( QCursor::pos() ); + } + +signals: + void OpenDesktopMenu(); + void CloseDesktopMenu(); + void PluginResized(); + + //Signals for communication with the desktop layout system (not generally used by hand) + void StartMoving(QString); //ID of plugin + void StartResizing(QString); //ID of plugin + void RemovePlugin(QString); //ID of plugin + void IncreaseIconSize(); // only used for desktop icons + void DecreaseIconSize(); // only used for desktop icons + +private slots: + void slotStartMove(){ + QCursor::setPos( this->mapToGlobal(QPoint(this->width()/2, this->height()/2)) ); + emit StartMoving(PLUGID); + } + + void slotStartResize(){ + QCursor::setPos( this->mapToGlobal(QPoint(this->width()/2, this->height()/2)) ); + emit StartResizing(PLUGID); + } + + void slotRemovePlugin(){ + removeSettings(true); + emit RemovePlugin(PLUGID); + } + +protected: + void mousePressEvent(QMouseEvent *ev){ + if(!dragTimer->isActive() && ev->buttons().testFlag(Qt::LeftButton) ){ dragTimer->start(); } + QWidget::mousePressEvent(ev); + } + void mouseReleaseEvent(QMouseEvent *ev){ + if(dragTimer->isActive()){ dragTimer->stop(); } + QWidget::mouseReleaseEvent(ev); + } + void mouseMoveEvent(QMouseEvent *ev){ + if(ev->buttons().testFlag(Qt::LeftButton)){ + if(dragTimer->isActive()){ dragTimer->stop(); } + slotStartMove(); + } + QWidget::mouseMoveEvent(ev); + } + void resizeEvent(QResizeEvent *ev){ + emit PluginResized(); + QFrame::resizeEvent(ev); //do normal processing + } +}; + +#endif diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/NewDP.h b/src-qt5/core/lumina-desktop/desktop-plugins/NewDP.h new file mode 100644 index 00000000..a12341bb --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/NewDP.h @@ -0,0 +1,60 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This class is the interface to load all the different desktop plugins +//=========================================== +#ifndef _LUMINA_DESKTOP_NEW_DESKTOP_PLUGIN_H +#define _LUMINA_DESKTOP_NEW_DESKTOP_PLUGIN_H + +#include <QDebug> + +//List all the individual plugin includes here +#include "LDPlugin.h" +//#include "SamplePlugin.h" +#include "calendar/CalendarPlugin.h" +#include "applauncher/AppLauncherPlugin.h" +#include "desktopview/DesktopViewPlugin.h" +#include "notepad/NotepadPlugin.h" +#include "audioplayer/PlayerWidget.h" +#include "systemmonitor/MonitorWidget.h" +//#include "quickcontainer/QuickDPlugin.h" +//#include "messagecenter/MessageCenter.h" + +class NewDP{ +public: + static LDPlugin* createPlugin(QString plugin, QWidget* parent=0){ + //qDebug() << "Create Plugin:" << plugin; + LDPlugin *plug = 0; + /*if(plugin.section("---",0,0)=="sample"){ + plug = new SamplePlugin(parent, plugin); + }else */ + if(plugin.section("---",0,0)=="calendar"){ + plug = new CalendarPlugin(parent, plugin); + }else if(plugin.section("---",0,0).section("::",0,0)=="applauncher"){ + //This plugin can be pre-initialized to a file path after the "::" delimiter + plug = new AppLauncherPlugin(parent, plugin); + }else if(plugin.section("---",0,0)=="desktopview"){ + plug = new DesktopViewPlugin(parent, plugin); + }else if(plugin.section("---",0,0)=="notepad"){ + plug = new NotePadPlugin(parent, plugin); + }else if(plugin.section("---",0,0)=="audioplayer"){ + plug = new AudioPlayerPlugin(parent, plugin); + }else if(plugin.section("---",0,0)=="systemmonitor"){ + plug = new SysMonitorPlugin(parent, plugin); + //}else if(plugin.section("---",0,0)=="messagecenter"){ + //plug = new MessageCenterPlugin(parent, plugin); + //}else if(plugin.section("---",0,0).startsWith("quick-") && LUtils::validQuickPlugin(plugin.section("---",0,0)) ){ + //plug = new QuickDPlugin(parent, plugin); + }else{ + qWarning() << "Invalid Desktop Plugin:"<<plugin << " -- Ignored"; + } + //qDebug() << " -- done"; + return plug; + } + +}; + +#endif diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/SamplePlugin.h b/src-qt5/core/lumina-desktop/desktop-plugins/SamplePlugin.h new file mode 100644 index 00000000..4a790c2d --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/SamplePlugin.h @@ -0,0 +1,38 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This class is a quick sample desktop plugin +//=========================================== +#ifndef _LUMINA_DESKTOP_DESKTOP_PLUGIN_SAMPLE_H +#define _LUMINA_DESKTOP_DESKTOP_PLUGIN_SAMPLE_H + +#include <QPushButton> +#include <QMessageBox> +#include <QVBoxLayout> +#include "LDPlugin.h" + +class SamplePlugin : public LDPlugin{ + Q_OBJECT +public: + SamplePlugin(QWidget* parent, QString ID) : LDPlugin(parent, ID){ + this->setLayout( new QVBoxLayout()); + this->layout()->setContentsMargins(0,0,0,0); + button = new QPushButton("sample"); + this->layout()->addWidget(button); + connect(button, SIGNAL(clicked()), this, SLOT(showMessage()) ); + } + + ~SamplePlugin(){} + +private: + QPushButton *button; + +private slots: + void showMessage(){ + QMessageBox::information(this,"sample","sample desktop plugin works"); + } +}; +#endif diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.cpp b/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.cpp new file mode 100644 index 00000000..101abd31 --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.cpp @@ -0,0 +1,140 @@ +#include "AppLauncherPlugin.h" +#include "../../LSession.h" +#include "OutlineToolButton.h" + +#define OUTMARGIN 10 //special margin for fonts due to the outlining effect from the OutlineToolbutton + +AppLauncherPlugin::AppLauncherPlugin(QWidget* parent, QString ID) : LDPlugin(parent, ID){ + QVBoxLayout *lay = new QVBoxLayout(); + this->setLayout(lay); + lay->setContentsMargins(0,0,0,0); + button = new OutlineToolButton(this); + button->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + button->setAutoRaise(true); + button->setText("...\n..."); //Need to set something here so that initial sizing works properly + button->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); + lay->addWidget(button, 0, Qt::AlignCenter); + connect(button, SIGNAL(DoubleClicked()), this, SLOT(buttonClicked()) ); + button->setContextMenuPolicy(Qt::NoContextMenu); + watcher = new QFileSystemWatcher(this); + connect(watcher, SIGNAL(fileChanged(QString)), this, SLOT( loadButton()) ); + + QTimer::singleShot(200,this, SLOT(loadButton()) ); +} + +void AppLauncherPlugin::Cleanup(){ + //This is run only when the plugin was forcibly closed/removed + +} + +void AppLauncherPlugin::loadButton(){ + QString def = this->ID().section("::",1,50).section("---",0,0).simplified(); + QString path = this->readSetting("applicationpath",def).toString(); //use the default if necessary + //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(); + button->setFixedSize( this->width()-4, this->height()-4); + button->setIconSize( QSize(icosize,icosize) ); + QString txt; + if(path.endsWith(".desktop") && ok){ + XDGDesktop file = LXDG::loadDesktopFile(path, ok); + if(path.isEmpty() || !QFile::exists(path) || !ok){ + button->setWhatsThis(""); + 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,"quickopen").pixmap(QSize(icosize,icosize)).scaledToHeight(icosize, Qt::SmoothTransformation) ) ); + txt = file.name; + if(!watcher->files().isEmpty()){ watcher->removePaths(watcher->files()); } + watcher->addPath(file.filePath); //make sure to update this shortcut if the file changes + } + }else if(ok){ + QFileInfo info(path); + button->setWhatsThis(info.absoluteFilePath()); + if(info.isDir()){ + button->setIcon( LXDG::findIcon("folder","") ); + }else if(LUtils::imageExtensions().contains(info.suffix().toLower()) ){ + button->setIcon( QIcon(QPixmap(path).scaled(256,256)) ); //max size for thumbnails in memory + }else{ + button->setIcon( QIcon(LXDG::findMimeIcon(path).pixmap(QSize(icosize,icosize)).scaledToHeight(icosize, Qt::SmoothTransformation) ) ); + } + 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","").pixmap(QSize(icosize,icosize)).scaledToHeight(icosize, Qt::SmoothTransformation) ) ); + button->setText( tr("Click to Set") ); + if(!watcher->files().isEmpty()){ watcher->removePaths(watcher->files()); } + } + //If the file is a symlink, put the overlay on the icon + if(QFileInfo(path).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); + 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 + button->setToolTip(txt); + //Double check that the visual icon size matches the requested size - otherwise upscale the icon + if(button->fontMetrics().width(txt) > (button->width()-OUTMARGIN) ){ + //Text too long, try to show it on two lines + //txt = button->fontMetrics().elidedText(txt, Qt::ElideRight, 2*(button->width()-OUTMARGIN), Qt::TextWordWrap); + txt =txt.section(" ",0,2).replace(" ","\n"); //First take care of any natural breaks + //Go through and combine any lines + if(txt.contains("\n")){ + //need to check each line + QStringList txtL = txt.split("\n"); + for(int i=0; i<txtL.length(); i++){ + if(( i+1<txtL.length()) && (button->fontMetrics().width(txtL[i]) < button->width()/2) ){ + txtL[i] = txtL[i]+" "+txtL[i+1]; + txtL.removeAt(i+1); + } + } + txt = txtL.join("\n").section("\n",0,2); + } + + if(txt.contains("\n")){ + //need to check each line + QStringList txtL = txt.split("\n"); + for(int i=0; i<txtL.length(); i++){ + if(i>1){ txtL.removeAt(i); i--; } //Only take the first two lines + else{ txtL[i] = button->fontMetrics().elidedText(txtL[i], Qt::ElideRight, (button->width()-OUTMARGIN) ); } + } + txt = txtL.join("\n"); + }else{ + txt = this->fontMetrics().elidedText(txt,Qt::ElideRight, 2*(button->width()-OUTMARGIN)); + //Now split the line in half for the two lines + txt.insert( ((txt.count())/2), "\n"); + } + } + if(!txt.contains("\n")){ txt.append("\n "); } //always use two lines + //qDebug() << " - Setting Button Text:" << txt; + button->setText(txt); + + QTimer::singleShot(100, this, SLOT(update()) ); //Make sure to re-draw the image in a moment +} + +void AppLauncherPlugin::buttonClicked(){ + QString path = button->whatsThis(); + if(path.isEmpty() || !QFile::exists(path) ){ + //prompt for the user to select an application + QList<XDGDesktop> apps = LXDG::sortDesktopNames( LXDG::systemDesktopFiles() ); + QStringList names; + for(int i=0; i<apps.length(); i++){ names << apps[i].name; } + bool ok = false; + QString app = QInputDialog::getItem(this, tr("Select Application"), tr("Name:"), names, 0, false, &ok); + if(!ok || names.indexOf(app)<0){ return; } //cancelled + this->saveSetting("applicationpath", apps[ names.indexOf(app) ].filePath); + QTimer::singleShot(0,this, SLOT(loadButton())); + }else{ + LSession::LaunchApplication("lumina-open \""+path+"\""); + } + +}
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h b/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h new file mode 100644 index 00000000..a0f6a7cd --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h @@ -0,0 +1,59 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This class is a quick sample desktop plugin +//=========================================== +#ifndef _LUMINA_DESKTOP_DESKTOP_PLUGIN_APPLICATION_LAUNCHER_H +#define _LUMINA_DESKTOP_DESKTOP_PLUGIN_APPLICATION_LAUNCHER_H + +#include <QToolButton> +#include <QInputDialog> +#include <QVBoxLayout> +#include <QProcess> +#include <QFile> +#include <QFileSystemWatcher> +#include <QTimer> +#include <QMenu> +#include <QCursor> + +#include "../LDPlugin.h" + +#include <LuminaXDG.h> + +class AppLauncherPlugin : public LDPlugin{ + Q_OBJECT +public: + AppLauncherPlugin(QWidget* parent, QString ID); + ~AppLauncherPlugin(){} + + void Cleanup(); //special function for final cleanup + +private: + QToolButton *button; + QFileSystemWatcher *watcher; + //QMenu *menu; + +private slots: + void loadButton(); + void buttonClicked(); + //void openContextMenu(); + + //void increaseIconSize(); + //void decreaseIconSize(); + //void deleteFile(); + +public slots: + void LocaleChange(){ + loadButton(); //force reload + } + +protected: + void resizeEvent(QResizeEvent *ev){ + LDPlugin::resizeEvent(ev); + QTimer::singleShot(100, this, SLOT(loadButton()) ); + } +}; +#endif diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/OutlineToolButton.h b/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/OutlineToolButton.h new file mode 100644 index 00000000..eaf9e23e --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/OutlineToolButton.h @@ -0,0 +1,98 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This is a simple subclass for a QToolButton with black/white text (for transparent backgrounds) +//=========================================== +#ifndef _LUMINA_DESKTOP_PLUGIN_APPLAUNCHER_OUTLINE_TOOLBUTTON_H +#define _LUMINA_DESKTOP_PLUGIN_APPLAUNCHER_OUTLINE_TOOLBUTTON_H + +#include <QToolButton> +#include <QPainter> +#include <QPainterPath> +#include <QPen> +#include <QStyle> +#include <QStyleOption> +#include <QStylePainter> +#include <QFont> +#include <QDebug> +#include <QMouseEvent> + + +class OutlineToolButton : public QToolButton{ + Q_OBJECT +public: + OutlineToolButton(QWidget *parent=0) : QToolButton(parent){ + //This button needs slightly different font settings - do this in the constructor so that other widgets can take it into account. + QFont font = this->font(); + font.setStyleStrategy(QFont::PreferAntialias); //Always set the font strategy (just in case it starts working down the road) + this->setFont(font); + } + ~OutlineToolButton(){} + +signals: + void DoubleClicked(); + +protected: + void mouseDoubleClickEvent(QMouseEvent *ev){ + ev->accept(); + emit DoubleClicked(); + } + void mousePressEvent(QMouseEvent *ev){ + ev->ignore(); + } + void mouseReleaseEvent(QMouseEvent *ev){ + ev->ignore(); + } + + void paintEvent(QPaintEvent*){ + /* NOTE: This is what a standard QToolButton performs (peeked at Qt source code for this tidbit) + QStylePainter p(this); + QStyleOptionToolButton opt; + initStyleOption(&opt); + p.drawComplexControl(QStyle::CC_ToolButton, opt); + */ + + //Modify the standard QToolButton routine to paint the text differently + QStylePainter p(this); + QStyleOptionToolButton opt; + initStyleOption(&opt); + opt.font = this->property("font").value<QFont>(); //This ensures that the stylesheet values are incorporated + opt.font.setStyleStrategy(QFont::PreferAntialias); //Always set the font strategy (just in case it starts working down the road) + opt.font.setKerning(true); + opt.fontMetrics = QFontMetrics(opt.font); + opt.text.clear(); //Don't paint the text yet - just the background/icon + p.drawComplexControl(QStyle::CC_ToolButton, opt); //This does all the normal QToolButton stuff - just not text + //Now get the text rectangle for the widget + QRect box = p.style()->itemTextRect(opt.fontMetrics, opt.rect, Qt::AlignHCenter | Qt::AlignBottom, true, this->text()); + //Get the QColors for the outline/text + QColor textC = opt.palette.text().color().toHsl(); //need the lightness value in a moment + QColor outC = textC; + //qDebug() << "Font Color Values:" << textC << textC.lightness() << textC.lightnessF(); + if(textC.lightnessF() > 0.5){ outC.setHsl(textC.hue(), textC.hslSaturation(), 0, 90); } + else{outC.setHsl(textC.hue(), textC.hslSaturation(), 255, 50); } + //qDebug() << "Outline Color Values:" << outC; + //Now get the size of the outline border (need to scale for high-res monitors) + qreal OWidth = opt.fontMetrics.width("o")/2.0; + //qDebug() << "Outline Width:" << OWidth; + //Now generate a QPainterPath for the text + QPainterPath path; + QStringList txt = this->text().split("\n"); //need each line independently, the newline actually gets painted otherwise + for(int i=0; i<txt.length(); i++){ + path.addText(box.center().x() - (opt.fontMetrics.width(txt[i])/2), box.y()+((i+1)*(box.height()/txt.length()))-opt.fontMetrics.descent(), opt.font, txt[i] ); + } + path.setFillRule(Qt::WindingFill); + //Now paint the text + QRadialGradient RG(box.center(), box.width()*1.5); //width is always going to be greater than height + RG.setColorAt(0, outC); + RG.setColorAt(1, Qt::transparent); + p.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing); //need antialiasing for this to work well (sub-pixel painting) + p.strokePath(path, QPen(QBrush(RG),OWidth, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin) ); //This will be the outline - 1pixel thick, semi-transparent + p.fillPath(path, QBrush(textC)); //this will be the inside/text color + + } + +}; +#endif diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/audioplayer/PlayerWidget.cpp b/src-qt5/core/lumina-desktop/desktop-plugins/audioplayer/PlayerWidget.cpp new file mode 100644 index 00000000..4d293b39 --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/audioplayer/PlayerWidget.cpp @@ -0,0 +1,269 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "PlayerWidget.h" +#include "ui_PlayerWidget.h" + +#include <QDir> +#include <QUrl> +#include <QInputDialog> +#include <QFileDialog> +#include <LuminaXDG.h> +#include <QDebug> +#include <QDesktopWidget> + +PlayerWidget::PlayerWidget(QWidget *parent) : QWidget(parent), ui(new Ui::PlayerWidget()){ + ui->setupUi(this); //load the designer form + PLAYER = new QMediaPlayer(this); + PLAYER->setVolume(100); + PLAYER->setNotifyInterval(1000); //1 second interval (just needs to be a rough estimate) + PLAYLIST = new QMediaPlaylist(this); + PLAYLIST->setPlaybackMode(QMediaPlaylist::Sequential); + PLAYER->setPlaylist(PLAYLIST); + + configMenu = new QMenu(this); + ui->tool_config->setMenu(configMenu); + addMenu = new QMenu(this); + ui->tool_add->setMenu(addMenu); + + updatinglists = false; //start off as false + + LoadIcons(); + playerStateChanged(); //update button visibility + currentSongChanged(); + //Connect all the signals/slots + //connect(infoTimer, SIGNAL(timeout()), this, SLOT(rotateTrackInfo()) ); + connect(PLAYER, SIGNAL(positionChanged(qint64)),this, SLOT(updateProgress(qint64)) ); + connect(PLAYER, SIGNAL(durationChanged(qint64)), this, SLOT(updateMaxProgress(qint64)) ); + connect(PLAYLIST, SIGNAL(mediaChanged(int, int)), this, SLOT(playlistChanged()) ); + connect(PLAYER, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(playerStateChanged()) ); + connect(PLAYLIST, SIGNAL(currentMediaChanged(const QMediaContent&)), this, SLOT(currentSongChanged()) ); + connect(ui->combo_playlist, SIGNAL(currentIndexChanged(int)), this, SLOT(userlistSelectionChanged()) ); + connect(ui->tool_play, SIGNAL(clicked()), this, SLOT(playClicked()) ); + connect(ui->tool_pause, SIGNAL(clicked()), this, SLOT(pauseClicked()) ); + connect(ui->tool_stop, SIGNAL(clicked()), this, SLOT(stopClicked()) ); + connect(ui->tool_next, SIGNAL(clicked()), this, SLOT(nextClicked()) ); + connect(ui->tool_prev, SIGNAL(clicked()), this, SLOT(prevClicked()) ); + +} + +PlayerWidget::~PlayerWidget(){ + //qDebug() << "Removing PlayerWidget"; +} + +void PlayerWidget::LoadIcons(){ + ui->tool_stop->setIcon( LXDG::findIcon("media-playback-stop","") ); + ui->tool_play->setIcon( LXDG::findIcon("media-playback-start","") ); + ui->tool_pause->setIcon( LXDG::findIcon("media-playback-pause","") ); + ui->tool_next->setIcon( LXDG::findIcon("media-skip-forward","") ); + ui->tool_prev->setIcon( LXDG::findIcon("media-skip-backward","") ); + ui->tool_add->setIcon( LXDG::findIcon("list-add","") ); + ui->tool_config->setIcon( LXDG::findIcon("configure","") ); + //Now re-assemble the menus as well + configMenu->clear(); + configMenu->addAction(LXDG::findIcon("media-eject",""), tr("Clear Playlist"), this, SLOT(ClearPlaylist())); + configMenu->addAction(LXDG::findIcon("roll",""), tr("Shuffle Playlist"), this, SLOT(ShufflePlaylist())); + addMenu->clear(); + addMenu->addAction(LXDG::findIcon("document-new",""), tr("Add Files"), this, SLOT(AddFilesToPlaylist())); + addMenu->addAction(LXDG::findIcon("folder-new",""), tr("Add Directory"), this, SLOT(AddDirToPlaylist())); + addMenu->addAction(LXDG::findIcon("download",""), tr("Add URL"), this, SLOT(AddURLToPlaylist())); +} + +void PlayerWidget::playClicked(){ + PLAYER->play(); +} + +void PlayerWidget::pauseClicked(){ + PLAYER->pause(); +} + +void PlayerWidget::stopClicked(){ + PLAYER->stop(); +} + +void PlayerWidget::nextClicked(){ + PLAYLIST->next(); +} + +void PlayerWidget::prevClicked(){ + PLAYLIST->previous(); +} + +void PlayerWidget::AddFilesToPlaylist(){ + //Prompt the user to select multimedia files + QFileDialog dlg(0, Qt::Dialog | Qt::WindowStaysOnTopHint ); + dlg.setFileMode(QFileDialog::ExistingFiles); + dlg.setAcceptMode(QFileDialog::AcceptOpen); + dlg.setNameFilter( tr("Multimedia Files")+" ("+LXDG::findAVFileExtensions().join(" ")+")"); + dlg.setWindowTitle(tr("Select Multimedia Files")); + dlg.setWindowIcon( LXDG::findIcon("file-open","") ); + dlg.setDirectory(QDir::homePath()); //start in the home directory + //ensure it is centered on the current screen + QPoint center = QApplication::desktop()->screenGeometry(this).center(); + dlg.move( center.x()-(dlg.width()/2), center.y()-(dlg.height()/2) ); + dlg.show(); + while( dlg.isVisible() ){ + QApplication::processEvents(); + } + QList<QUrl> files = dlg.selectedUrls(); + if(files.isEmpty() || dlg.result()!=QDialog::Accepted){ return; } //cancelled + //Make this use show/processEvents later + //QList<QUrl> files = QFileDialog::getOpenFileUrls(0, tr("Select Multimedia Files"), QDir::homePath(), "Multimedia Files ("+LXDG::findAVFileExtensions().join(" ")+")"); + QList<QMediaContent> urls; + for(int i=0; i<files.length(); i++){ + urls << QMediaContent(files[i]); + } + PLAYLIST->addMedia(urls); + playlistChanged(); +} + +void PlayerWidget::AddDirToPlaylist(){ + QFileDialog dlg(0, Qt::Dialog | Qt::WindowStaysOnTopHint ); + dlg.setFileMode(QFileDialog::Directory); + dlg.setOption(QFileDialog::ShowDirsOnly, true); + dlg.setAcceptMode(QFileDialog::AcceptOpen); + dlg.setWindowTitle(tr("Select Multimedia Directory")); + dlg.setWindowIcon( LXDG::findIcon("folder-open","") ); + dlg.setDirectory(QDir::homePath()); //start in the home directory + //ensure it is centered on the current screen + QPoint center = QApplication::desktop()->screenGeometry(this).center(); + dlg.move( center.x()-(dlg.width()/2), center.y()-(dlg.height()/2) ); + dlg.show(); + while( dlg.isVisible() ){ + QApplication::processEvents(); + } + if(dlg.result() != QDialog::Accepted){ return; } //cancelled + QStringList sel = dlg.selectedFiles(); + if(sel.isEmpty()){ return; } //cancelled + QString dirpath = sel.first(); //QFileDialog::getExistingDirectory(0, tr("Select a Multimedia Directory"), QDir::homePath() ); + if(dirpath.isEmpty()){ return; } //cancelled + QDir dir(dirpath); + QFileInfoList files = dir.entryInfoList(LXDG::findAVFileExtensions(), QDir::Files | QDir::NoDotAndDotDot, QDir::Name); + if(files.isEmpty()){ return; } //nothing in this directory + QList<QMediaContent> urls; + for(int i=0; i<files.length(); i++){ + urls << QMediaContent(QUrl::fromLocalFile(files[i].absoluteFilePath()) ); + } + PLAYLIST->addMedia(urls); + playlistChanged(); +} + +void PlayerWidget::AddURLToPlaylist(){ + QInputDialog dlg(0, Qt::Dialog | Qt::WindowStaysOnTopHint ); + dlg.setInputMode(QInputDialog::TextInput); + dlg.setLabelText(tr("Enter a valid URL for a multimedia file or stream:")); + dlg.setTextEchoMode(QLineEdit::Normal); + dlg.setWindowTitle(tr("Multimedia URL")); + dlg.setWindowIcon( LXDG::findIcon("download","") ); + //ensure it is centered on the current screen + QPoint center = QApplication::desktop()->screenGeometry(this).center(); + dlg.move( center.x()-(dlg.width()/2), center.y()-(dlg.height()/2) ); + dlg.show(); + while( dlg.isVisible() ){ + QApplication::processEvents(); + } + QString url = dlg.textValue(); + if(url.isEmpty() || dlg.result()!=QDialog::Accepted){ return; } //cancelled + + //QString url = QInputDialog::getText(0, tr("Multimedia URL"), tr("Enter a valid URL for a multimedia file or stream"), QLineEdit::Normal); + //if(url.isEmpty()){ return; } + QUrl newurl(url); + if(!newurl.isValid()){ return; } //invalid URL + PLAYLIST->addMedia(newurl); + playlistChanged(); +} + +void PlayerWidget::ClearPlaylist(){ + PLAYER->stop(); + PLAYLIST->clear(); + playlistChanged(); +} + +void PlayerWidget::ShufflePlaylist(){ + PLAYLIST->shuffle(); +} + + +void PlayerWidget::userlistSelectionChanged(){ //front-end combobox was changed by the user + if(updatinglists){ return; } + PLAYLIST->setCurrentIndex( ui->combo_playlist->currentIndex() ); +} + +void PlayerWidget::playerStateChanged(){ + switch( PLAYER->state() ){ + case QMediaPlayer::StoppedState: + ui->tool_stop->setVisible(false); + ui->tool_play->setVisible(true); + ui->tool_pause->setVisible(false); + ui->progressBar->setVisible(false); + break; + case QMediaPlayer::PausedState: + ui->tool_stop->setVisible(true); + ui->tool_play->setVisible(true); + ui->tool_pause->setVisible(false); + ui->progressBar->setVisible(true); + break; + case QMediaPlayer::PlayingState: + ui->tool_stop->setVisible(true); + ui->tool_play->setVisible(false); + ui->tool_pause->setVisible(true); + ui->progressBar->setVisible(true); + break; + } + +} + +void PlayerWidget::playlistChanged(){ + updatinglists = true; + ui->combo_playlist->clear(); + for(int i=0; i<PLAYLIST->mediaCount(); i++){ + QUrl url = PLAYLIST->media(i).canonicalUrl(); + if(url.isLocalFile()){ + ui->combo_playlist->addItem(LXDG::findMimeIcon(url.fileName().section(".",-1)), url.fileName() ); + }else{ + ui->combo_playlist->addItem(LXDG::findIcon("download",""), url.toString() ); + } + } + if(PLAYLIST->currentIndex()<0 && PLAYLIST->mediaCount()>0){ PLAYLIST->setCurrentIndex(0); } + ui->combo_playlist->setCurrentIndex(PLAYLIST->currentIndex()); + + updatinglists = false; +} + +void PlayerWidget::currentSongChanged(){ + if(PLAYLIST->currentIndex() != ui->combo_playlist->currentIndex()){ + updatinglists = true; + ui->combo_playlist->setCurrentIndex(PLAYLIST->currentIndex()); + updatinglists = false; + } + ui->tool_next->setEnabled( PLAYLIST->nextIndex() >= 0 ); + ui->tool_prev->setEnabled( PLAYLIST->previousIndex() >= 0); + ui->label_num->setText( QString::number( PLAYLIST->currentIndex()+1)+"/"+QString::number(PLAYLIST->mediaCount()) ); + ui->progressBar->setRange(0, PLAYER->duration() ); + ui->progressBar->setValue(0); +} + +void PlayerWidget::updateProgress(qint64 val){ + //qDebug() << "Update Progress Bar:" << val; + ui->progressBar->setValue(val); +} + +void PlayerWidget::updateMaxProgress(qint64 val){ + ui->progressBar->setRange(0,val); +} + + +AudioPlayerPlugin::AudioPlayerPlugin(QWidget *parent, QString ID) : LDPlugin(parent, ID){ + player = new PlayerWidget(this); + this->setLayout( new QVBoxLayout() ); + this->layout()->setContentsMargins(0,0,0,0); + this->layout()->addWidget(player); + +} + +AudioPlayerPlugin::~AudioPlayerPlugin(){ + //qDebug() << "Remove AudioPlayerPlugin"; +}
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/audioplayer/PlayerWidget.h b/src-qt5/core/lumina-desktop/desktop-plugins/audioplayer/PlayerWidget.h new file mode 100644 index 00000000..6aaeac4c --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/audioplayer/PlayerWidget.h @@ -0,0 +1,84 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This plugin is a simple audio player on the desktop +//=========================================== +#ifndef _LUMINA_DESKTOP_PLUGIN_AUDIO_PLAYER_WIDGET_H +#define _LUMINA_DESKTOP_PLUGIN_AUDIO_PLAYER_WIDGET_H + +#include <QMediaPlaylist> +#include <QMediaPlayer> +#include <QTimer> +#include <QWidget> +#include <QMenu> + +#include "../LDPlugin.h" + +namespace Ui{ + class PlayerWidget; +}; + +class PlayerWidget : public QWidget{ + Q_OBJECT +public: + PlayerWidget(QWidget *parent = 0); + ~PlayerWidget(); + +public slots: + void LoadIcons(); + +private: + Ui::PlayerWidget *ui; + QMediaPlaylist *PLAYLIST; + QMediaPlayer *PLAYER; + QMenu *configMenu, *addMenu; + bool updatinglists; + +private slots: + void playClicked(); + void pauseClicked(); + void stopClicked(); + void nextClicked(); + void prevClicked(); + + void AddFilesToPlaylist(); + void AddDirToPlaylist(); + void AddURLToPlaylist(); + void ClearPlaylist(); + void ShufflePlaylist(); + void userlistSelectionChanged(); //front-end combobox was changed by the user + void playerStateChanged(); + void playlistChanged(); //list of items changed + void currentSongChanged(); + void updateProgress(qint64 val); + void updateMaxProgress(qint64 val); +}; + +// Wrapper class to put this into a desktop plugin container +class AudioPlayerPlugin : public LDPlugin{ + Q_OBJECT +public: + AudioPlayerPlugin(QWidget* parent, QString ID); + ~AudioPlayerPlugin(); + + virtual QSize defaultPluginSize(){ + // The returned QSize is in grid points (typically 100 or 200 pixels square) + return QSize(3,1); + } + +private: + PlayerWidget *player; + +public slots: + void LocaleChange(){ + QTimer::singleShot(0,player, SLOT(LoadIcons())); + } + void ThemeChange(){ + QTimer::singleShot(0,player, SLOT(LoadIcons())); + } +}; + +#endif diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/audioplayer/PlayerWidget.ui b/src-qt5/core/lumina-desktop/desktop-plugins/audioplayer/PlayerWidget.ui new file mode 100644 index 00000000..b1e7ee59 --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/audioplayer/PlayerWidget.ui @@ -0,0 +1,182 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>PlayerWidget</class> + <widget class="QWidget" name="PlayerWidget"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>346</width> + <height>81</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <property name="styleSheet"> + <string notr="true">QToolButton::menu-indicator{ image: none; }</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QToolButton" name="tool_config"> + <property name="text"> + <string notr="true">Config</string> + </property> + <property name="popupMode"> + <enum>QToolButton::InstantPopup</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_add"> + <property name="text"> + <string notr="true">Add</string> + </property> + <property name="popupMode"> + <enum>QToolButton::InstantPopup</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QToolButton" name="tool_prev"> + <property name="text"> + <string notr="true">prev</string> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_num"> + <property name="text"> + <string notr="true">1/10</string> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_next"> + <property name="text"> + <string notr="true">next</string> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QComboBox" name="combo_playlist"/> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QToolButton" name="tool_play"> + <property name="text"> + <string notr="true">Play</string> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_pause"> + <property name="text"> + <string notr="true">Pause</string> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_stop"> + <property name="text"> + <string notr="true">Stop</string> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QProgressBar" name="progressBar"> + <property name="value"> + <number>24</number> + </property> + <property name="textVisible"> + <bool>false</bool> + </property> + </widget> + </item> + </layout> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/calendar/CalendarPlugin.h b/src-qt5/core/lumina-desktop/desktop-plugins/calendar/CalendarPlugin.h new file mode 100644 index 00000000..b3a6a8d7 --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/calendar/CalendarPlugin.h @@ -0,0 +1,58 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This class is a quick sample desktop plugin +//=========================================== +#ifndef _LUMINA_DESKTOP_DESKTOP_PLUGIN_CALENDAR_H +#define _LUMINA_DESKTOP_DESKTOP_PLUGIN_CALENDAR_H + +#include <QCalendarWidget> +#include <QVBoxLayout> +#include <QDate> +#include <QTimer> +#include "../LDPlugin.h" + +class CalendarPlugin : public LDPlugin{ + Q_OBJECT +private: + QCalendarWidget *cal; + QTimer *timer; + +public: + CalendarPlugin(QWidget* parent, QString ID) : LDPlugin(parent, ID){ + this->setLayout( new QVBoxLayout()); + this->layout()->setContentsMargins(0,0,0,0); + cal = new QCalendarWidget(this); + cal->setSelectionMode(QCalendarWidget::NoSelection); + this->layout()->addWidget(cal); + timer = new QTimer(this); + timer->setInterval(1800000); //30 minute refresh timer + timer->start(); + QTimer::singleShot(0,this, SLOT(updateDate()) ); + connect(this, SIGNAL(PluginResized()), this, SLOT(UpdateCalendarSize())); + } + + ~CalendarPlugin(){ timer->stop(); } + + virtual QSize defaultPluginSize(){ + // The returned QSize is in grid points (typically 100 or 200 pixels square) + return QSize(3,2); + } + +private slots: + void updateDate(){ + if(cal->selectedDate() != QDate::currentDate()){ + cal->setSelectedDate(QDate::currentDate()); + cal->showSelectedDate(); + } + } + void UpdateCalendarSize(){ + cal->setFixedSize(this->size()); + } + + +}; +#endif diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/desktop-plugins.pri b/src-qt5/core/lumina-desktop/desktop-plugins/desktop-plugins.pri new file mode 100644 index 00000000..5a631b52 --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/desktop-plugins.pri @@ -0,0 +1,19 @@ +SOURCES += $$PWD/applauncher/AppLauncherPlugin.cpp \ + $$PWD/desktopview/DesktopViewPlugin.cpp \ + $$PWD/notepad/NotepadPlugin.cpp \ + $$PWD/audioplayer/PlayerWidget.cpp \ + $$PWD/systemmonitor/MonitorWidget.cpp +# $$PWD/messagecenter/MessageCenter.cpp + +HEADERS += $$PWD/calendar/CalendarPlugin.h \ + $$PWD/applauncher/AppLauncherPlugin.h \ + $$PWD/applauncher/OutlineToolButton.h \ + $$PWD/desktopview/DesktopViewPlugin.h \ + $$PWD/notepad/NotepadPlugin.h \ + $$PWD/audioplayer/PlayerWidget.h \ + $$PWD/systemmonitor/MonitorWidget.h +# $$PWD/quickcontainer/QuickDPlugin.h +# $$PWD/messagecenter/MessageCenter.h + +FORMS += $$PWD/audioplayer/PlayerWidget.ui \ + $$PWD/systemmonitor/MonitorWidget.ui
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/desktopview/DesktopViewPlugin.cpp b/src-qt5/core/lumina-desktop/desktop-plugins/desktopview/DesktopViewPlugin.cpp new file mode 100644 index 00000000..01e174e9 --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/desktopview/DesktopViewPlugin.cpp @@ -0,0 +1,215 @@ +#include "DesktopViewPlugin.h" + +#include <QFileInfo> +#include <QDir> +#include <QClipboard> +#include <QMimeData> +#include <QImageReader> + +#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->setViewMode(QListView::IconMode); + list->setFlow(QListWidget::TopToBottom); //Qt bug workaround - need the opposite flow in the widget constructor + list->setWrapping(true); + list->setSpacing(4); + list->setSelectionBehavior(QAbstractItemView::SelectItems); + list->setSelectionMode(QAbstractItemView::ExtendedSelection); + list->setContextMenuPolicy(Qt::CustomContextMenu); + list->setMovement(QListView::Snap); //make sure items are "stuck" in the grid + + menu = new QMenu(this); + menu->addAction( LXDG::findIcon("run-build-file",""), tr("Open"), this, SLOT(runItems()) ); + menu->addSeparator(); + menu->addAction( LXDG::findIcon("edit-cut",""), tr("Cut"), this, SLOT(cutItems()) ); + menu->addAction( LXDG::findIcon("edit-copy",""), tr("Copy"), this, SLOT(copyItems()) ); + menu->addSeparator(); + menu->addAction( LXDG::findIcon("zoom-in",""), tr("Increase Icons"), this, SLOT(increaseIconSize()) ); + menu->addAction( LXDG::findIcon("zoom-out",""), tr("Decrease Icons"), this, SLOT(decreaseIconSize()) ); + menu->addSeparator(); + menu->addAction( LXDG::findIcon("edit-delete",""), tr("Delete"), this, SLOT(deleteItems()) ); + menu->addSeparator(); + if(LUtils::isValidBinary("lumina-fileinfo")){ + menu->addAction( LXDG::findIcon("system-search",""), tr("Properties"), this, SLOT(displayProperties()) ); + } + this->layout()->addWidget(list); + + connect(QApplication::instance(), SIGNAL(DesktopFilesChanged()), this, SLOT(updateContents()) ); + connect(list, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(runItems()) ); + connect(list, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showMenu(const QPoint&)) ); + QTimer::singleShot(1000,this, SLOT(updateContents()) ); //wait a second before loading contents +} + +DesktopViewPlugin::~DesktopViewPlugin(){ + +} + +void DesktopViewPlugin::runItems(){ + QList<QListWidgetItem*> sel = list->selectedItems(); + for(int i=0; i<sel.length(); i++){ + LSession::LaunchApplication("lumina-open \""+sel[i]->whatsThis()+"\""); + } +} + +void DesktopViewPlugin::copyItems(){ + QList<QListWidgetItem*> sel = list->selectedItems(); + if(sel.isEmpty()){ return; } //nothing selected + QStringList items; + //Format the data string + for(int i=0; i<sel.length(); i++){ + items << "copy::::"+sel[i]->whatsThis(); + } + //Now save that data to the global clipboard + QMimeData *dat = new QMimeData; + dat->clear(); + dat->setData("x-special/lumina-copied-files", items.join("\n").toLocal8Bit()); + QApplication::clipboard()->clear(); + QApplication::clipboard()->setMimeData(dat); +} + +void DesktopViewPlugin::cutItems(){ + QList<QListWidgetItem*> sel = list->selectedItems(); + if(sel.isEmpty()){ return; } //nothing selected + QStringList items; + //Format the data string + for(int i=0; i<sel.length(); i++){ + items << "cut::::"+sel[i]->whatsThis(); + } + //Now save that data to the global clipboard + QMimeData *dat = new QMimeData; + dat->clear(); + dat->setData("x-special/lumina-copied-files", items.join("\n").toLocal8Bit()); + QApplication::clipboard()->clear(); + QApplication::clipboard()->setMimeData(dat); +} + +void DesktopViewPlugin::deleteItems(){ + QList<QListWidgetItem*> sel = list->selectedItems(); + for(int i=0; i<sel.length(); i++){ + if(QFileInfo(sel[i]->whatsThis()).isDir()){ + QProcess::startDetached("rm -r \""+sel[i]->whatsThis()+"\""); + }else{ + QFile::remove(sel[i]->whatsThis()); + } + } +} + +void DesktopViewPlugin::showMenu(const QPoint &pos){ + //Make sure there is an item underneath the mouse first + if(list->itemAt(pos)!=0){ + menu->popup(this->mapToGlobal(pos)); + }else{ + //Pass the context menu request on to the desktop (emit it from the plugin) + this->showPluginMenu(); + //emit OpenDesktopMenu(); + } +} + +void DesktopViewPlugin::increaseIconSize(){ + int icosize = this->readSetting("IconSize",64).toInt(); + icosize+=16; //go in orders of 16 pixels + //list->setIconSize(QSize(icosize,icosize)); + this->saveSetting("IconSize",icosize); + QTimer::singleShot(10, this, SLOT(updateContents())); +} + +void DesktopViewPlugin::decreaseIconSize(){ + int icosize = this->readSetting("IconSize",64).toInt(); + if(icosize < 20){ return; } //too small to decrease more + icosize-=16; //go in orders of 16 pixels + //list->setIconSize(QSize(icosize,icosize)); + this->saveSetting("IconSize",icosize); + QTimer::singleShot(10,this, SLOT(updateContents())); +} + +void DesktopViewPlugin::updateContents(){ + list->clear(); + + int icosize = this->readSetting("IconSize",64).toInt(); + QSize gridSZ = QSize(qRound(1.8*icosize),icosize+4+(2*this->fontMetrics().height()) ); + //qDebug() << "Icon Size:" << icosize <<"Grid Size:" << gridSZ.width() << gridSZ.height(); + list->setGridSize(gridSZ); + list->setIconSize(QSize(icosize,icosize)); + 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->setSizeHint(gridSZ); //ensure uniform item sizes + //it->setForeground(QBrush(Qt::black, Qt::Dense2Pattern)); //Try to use a font color which will always be visible + it->setTextAlignment(Qt::AlignCenter); + it->setWhatsThis(files[i].absoluteFilePath()); + QString txt; + if(files[i].isDir()){ + it->setIcon( LXDG::findIcon("folder","") ); + txt = 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,"unknown") ); + if(desk.name.isEmpty()){ + txt = files[i].fileName(); + }else{ + txt = desk.name; + } + }else{ + //Revert back to a standard file handling + it->setIcon( LXDG::findMimeIcon(files[i].fileName()) ); + txt = files[i].fileName(); + } + }else if(LUtils::imageExtensions().contains(files[i].suffix().toLower()) ){ + it->setIcon( QIcon( QPixmap(files[i].absoluteFilePath()).scaled(icosize,icosize,Qt::IgnoreAspectRatio, Qt::SmoothTransformation) ) ); + txt = files[i].fileName(); + }else{ + it->setIcon( LXDG::findMimeIcon( files[i].fileName() ) ); + txt = files[i].fileName(); + } + //Add the sym-link overlay to the icon as necessary + if(files[i].isSymLink()){ + QImage img = it->icon().pixmap(QSize(icosize,icosize)).toImage(); + int oSize = icosize/2; //overlay size + QPixmap overlay = LXDG::findIcon("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 + it->setIcon( QIcon(QPixmap::fromImage(img)) ); + } + //Now adjust the visible text as necessary based on font/grid sizing + it->setToolTip(txt); + if(this->fontMetrics().width(txt) > (gridSZ.width()-4) ){ + //int dash = this->fontMetrics().width("-"); + //Text too long, try to show it on two lines + txt = txt.section(" ",0,2).replace(" ","\n"); //First take care of any natural breaks + if(txt.contains("\n")){ + //need to check each line + QStringList txtL = txt.split("\n"); + for(int i=0; i<txtL.length(); i++){ txtL[i] = this->fontMetrics().elidedText(txtL[i], Qt::ElideRight, gridSZ.width()-4); } + txt = txtL.join("\n"); + if(txtL.length()>2){ txt = txt.section("\n",0,1); } //only keep the first two lines + }else{ + txt = this->fontMetrics().elidedText(txt,Qt::ElideRight, 2*(gridSZ.width()-4)); + //Now split the line in half for the two lines + txt.insert( (txt.count()/2), "\n"); + } + }else{ + txt.append("\n "); //ensure two lines (2nd one invisible) - keeps formatting sane + } + it->setText(txt); + list->addItem(it); + if( (i%10) == 0){ QApplication::processEvents(); }//keep the UI snappy, every 10 items + } + list->setFlow(QListWidget::TopToBottom); //To ensure this is consistent - issues with putting it in the constructor + list->update(); //Re-paint the widget after all items are added +} + +void DesktopViewPlugin::displayProperties(){ + QList<QListWidgetItem*> sel = list->selectedItems(); + for(int i=0; i<sel.length(); i++){ + LSession::LaunchApplication("lumina-fileinfo \""+sel[i]->whatsThis()); + } +} diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/desktopview/DesktopViewPlugin.h b/src-qt5/core/lumina-desktop/desktop-plugins/desktopview/DesktopViewPlugin.h new file mode 100644 index 00000000..046b6e5c --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/desktopview/DesktopViewPlugin.h @@ -0,0 +1,55 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This plugin is a listing/launcher for things in the ~/Desktop folder +//=========================================== +#ifndef _LUMINA_DESKTOP_DESKTOP_VIEW_PLUGIN_H +#define _LUMINA_DESKTOP_DESKTOP_VIEW_PLUGIN_H + +#include <QListWidget> +#include <QVBoxLayout> +#include <QTimer> +#include <QFileSystemWatcher> +#include <QMouseEvent> + +#include "../LDPlugin.h" + +class DesktopViewPlugin : public LDPlugin{ + Q_OBJECT +public: + DesktopViewPlugin(QWidget* parent, QString ID); + ~DesktopViewPlugin(); + + virtual QSize defaultPluginSize(){ + // The returned QSize is in grid points (typically 100 or 200 pixels square) + return QSize(3,3); + } +private: + QListWidget *list; + QMenu *menu; + +private slots: + void runItems(); + void copyItems(); + void cutItems(); + void deleteItems(); + void showMenu(const QPoint&); + void increaseIconSize(); + void decreaseIconSize(); + void updateContents(); + void displayProperties(); + + +public slots: + void LocaleChange(){ + QTimer::singleShot(0,this, SLOT(updateContents())); + } + void ThemeChange(){ + QTimer::singleShot(0,this, SLOT(updateContents())); + } + +}; +#endif diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/messagecenter/LXDG-DBusNotifier.h b/src-qt5/core/lumina-desktop/desktop-plugins/messagecenter/LXDG-DBusNotifier.h new file mode 100644 index 00000000..64413e95 --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/messagecenter/LXDG-DBusNotifier.h @@ -0,0 +1,17 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// Simple DBUS message handler for the FreeDesktop desktop notifications specification + + +class LXDG-DBusNotifier : public QDBusVirtualObkect{ + Q_OBJECT +public: + +private: + + +}; diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/messagecenter/MessageCenter.cpp b/src-qt5/core/lumina-desktop/desktop-plugins/messagecenter/MessageCenter.cpp new file mode 100644 index 00000000..df07a122 --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/messagecenter/MessageCenter.cpp @@ -0,0 +1,90 @@ +#include "MessageCenter.h" + +#include <LuminaXDG.h> +#include <QVBoxLayout> +#include <QHBoxLayout> +#include <QDBusConnection> +#include <QDBusConnectionInterface> + +MessageCenterPlugin::MessageCenterPlugin(QWidget* parent, QString ID) : LDPlugin(parent, ID){ + //Setup the UI + QVBoxLayout *vlay = new QVBoxLayout(); + this->setLayout( new QVBoxLayout() ); + this->layout()->setContentsMargins(0,0,0,0); + vlay->setContentsMargins(3,3,3,3); + frame = new QFrame(this); + frame->setObjectName("messagecenterbase"); + this->layout()->addWidget(frame); + frame->setLayout(vlay); + + + //Setup the title bar header buttons + QHBoxLayout *hlay = new QHBoxLayout(); + tool_clearall = new QToolButton(this); + tool_clearall->setAutoRaise(true); + tool_clearone = new QToolButton(this); + tool_clearone->setAutoRaise(true); + QWidget *spacer = new QWidget(this); + spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + hlay->addWidget(spacer); + hlay->addWidget(tool_clearone); + hlay->addWidget(tool_clearall); + vlay->addLayout(hlay); + + //Setup the main text widget + list_messages = new QListWidget(this); + list_messages->setSelectionMode(QAbstractItemView::SingleSelection); + list_messages->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + vlay->addWidget(list_messages); + + //Now setup the initial values + this->setInitialSize(200,300); + //Setup the button connections + connect(tool_clearall, SIGNAL(clicked()), this, SLOT(clearAllMessages()) ); + connect(tool_clearone, SIGNAL(clicked()), this, SLOT(clearSelectedMessage()) ); + + //Setup the DBUS signals/slots + if(QDBusConnection::sessionBus().isConnected()){ + if( QDBusConnection::sessionBus().registerService("org.freedesktop.Notifications") ){ + //Was able to register this service, also register everything it can do... + //SUPPORTED: "body", "body-hyperlinks", "body-markup", "icon-static" + + + } + QDBusConnection::sessionBus().connect("", "", "org.freedesktop.Notifications", "Notify", this, SLOT(newMessage(QString, uint, QString, QString, QString, QStringList, dict, int)) ); + QDBusConnection::sessionBus().interface().call("AddMatch", "interface='org.freedesktop.Notifications',member='Notify',type='method_call',eavesdrop='true'"); + qDebug() << "Available Session DBUS Services:" << QDBusConnection::sessionBus().interface()->registeredServiceNames().value(); + //connect(QString(), QString(), + } + if(QDBusConnection::systemBus().isConnected()){ + qDebug() << "Available System DBUS Services:" << QDBusConnection::systemBus().interface()->registeredServiceNames().value(); + } + + QTimer::singleShot(0,this, SLOT(loadIcons()) ); +} + +MessageCenterPlugin::~MessageCenterPlugin(){ + +} + +void MessageCenterPlugin::newMessage(QString summary, QString body){ + qDebug() << "New Message:" << summary, body; +} + +void MessageCenterPlugin::clearAllMessages(){ + list_messages->clear(); +} + +void MessageCenterPlugin::clearSelectedMessage(){ + if( list_messages->currentItem()==0){ return; } //nothing selected + list_messages->removeItemWidget( list_messages->currentItem() ); +} + + +void MessageCenterPlugin::loadIcons(){ + tool_clearall->setIcon( LXDG::findIcon("edit-clear-list","") ); + tool_clearall->setToolTip( tr("Clear all messages") ); + tool_clearone->setIcon( LXDG::findIcon("edit-delete","") ); + tool_clearone->setToolTip( tr("Clear selected message") ); + +} diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/messagecenter/MessageCenter.h b/src-qt5/core/lumina-desktop/desktop-plugins/messagecenter/MessageCenter.h new file mode 100644 index 00000000..8491546f --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/messagecenter/MessageCenter.h @@ -0,0 +1,48 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This plugin is a simple DBUS monitor which display's messages that come in +//=========================================== +#ifndef _LUMINA_DESKTOP_MESSAGE_CENTER_PLUGIN_H +#define _LUMINA_DESKTOP_MESSAGE_CENTER_PLUGIN_H + +#include <QListWidget> +#include <QToolButton> +#include <QFrame> + +#include <QTimer> +#include "../LDPlugin.h" + +class MessageCenterPlugin : public LDPlugin{ + Q_OBJECT +public: + MessageCenterPlugin(QWidget* parent, QString ID); + ~MessageCenterPlugin(); + +private: + //QDBusConnection *sess, *sys; + QListWidget *list_messages; + QFrame *frame; + QToolButton *tool_clearall; //clear all messages + QToolButton *tool_clearone; //clear selected message + +private slots: + //void newMessage(QDBusMessage *message); + void clearAllMessages(); + void clearSelectedMessage(); + + void loadIcons(); + +public slots: + void LocaleChange(){ + QTimer::singleShot(0,this, SLOT(loadIcons())); + } + void ThemeChange(){ + QTimer::singleShot(0,this, SLOT(loadIcons())); + } + +}; +#endif diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/notepad/NotepadPlugin.cpp b/src-qt5/core/lumina-desktop/desktop-plugins/notepad/NotepadPlugin.cpp new file mode 100644 index 00000000..435a57c2 --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/notepad/NotepadPlugin.cpp @@ -0,0 +1,329 @@ +#include "NotepadPlugin.h" + +#include <LuminaXDG.h> +#include "LSession.h" +#include <LuminaUtils.h> +#include <QDir> +#include <QFileDialog> +#include <QInputDialog> +#include <QtConcurrent> + +NotePadPlugin::NotePadPlugin(QWidget* parent, QString ID) : LDPlugin(parent, ID){ + //qDebug() << "Creating Notepad Plugin:"; + QVBoxLayout *vlay = new QVBoxLayout(); + this->setLayout( new QVBoxLayout() ); + this->layout()->setContentsMargins(0,0,0,0); + vlay->setContentsMargins(3,3,3,3); + frame = new QFrame(this); + frame->setObjectName("notepadbase"); + //frame->setStyleSheet("QFrame#notepadbase{border-width: 1px; background: rgba(255,255,255,50); color: black;} QFrame{ border: none; border-radius: 3px; background: rgba(255,255,255,100); color: black;}"); + this->layout()->addWidget(frame); + frame->setLayout(vlay); + + if(!QFile::exists(QDir::homePath()+"/Notes")){ + //Create the notes directory if non-existant + QDir dir; + dir.mkpath(QDir::homePath()+"/Notes"); + } + watcher = new QFileSystemWatcher(this); + //Always watch the notes directory for new files/changes + watcher->addPath(QDir::homePath()+"/Notes"); + + typeTimer = new QTimer(this); + typeTimer->setInterval(1000); // 1 second before it saves + typeTimer->setSingleShot(true); //compress lots of signals into a single save + + updating = false; + //Setup the title bar header buttons + QHBoxLayout *hlay = new QHBoxLayout(); + config = new QToolButton(this); + config->setAutoRaise(true); + config->setMenu(new QMenu(this)); + config->setPopupMode(QToolButton::InstantPopup); + /*open = new QToolButton(this); + open->setAutoRaise(true); + add = new QToolButton(this); + add->setAutoRaise(true); + rem = new QToolButton(this); + rem->setAutoRaise(true);*/ + cnote = new QComboBox(this); + + hlay->addWidget(cnote); + hlay->addWidget(config); + //hlay->addWidget(open); + //hlay->addWidget(add); + //hlay->addWidget(rem); + vlay->addLayout(hlay); + + //Setup the main text widget + edit = new QPlainTextEdit(this); + edit->setReadOnly(false); + edit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + vlay->addWidget(edit); + + //Now load the new file-based system for saving notes + //qDebug() << "Saving a new setting"; + this->saveSetting("customFile",""); //always clear this when the plugin is initialized (only maintained per-session) + //qDebug() << "Loading Notes Dir"; + QTimer::singleShot(2000, this, SLOT(notesDirChanged())); + //qDebug() << "Set Sizing"; + + //qDebug() << "Connect Signals/slots"; + //Setup the button connections + /*connect(open, SIGNAL(clicked()), this, SLOT(openNoteClicked()) ); + connect(add, SIGNAL(clicked()), this, SLOT(newNoteClicked()) ); + connect(rem, SIGNAL(clicked()), this, SLOT(remNote()) );*/ + //connect(config, SIGNAL(clicked()), this, SLOT(openConfigMenu()) ); + connect(edit, SIGNAL(textChanged()), this, SLOT(newTextAvailable()) ); + connect(cnote, SIGNAL(currentIndexChanged(QString)), this, SLOT(noteChanged()) ); + connect(typeTimer, SIGNAL(timeout()), this, SLOT(updateContents()) ); + connect(watcher, SIGNAL(directoryChanged(QString)), this, SLOT(notesDirChanged()) ); //re-load the available notes + connect(watcher, SIGNAL(fileChanged(QString)), this, SLOT(noteChanged()) ); //re-load the current file + QTimer::singleShot(0,this, SLOT(loadIcons()) ); + //qDebug() << " - Done with init"; +} + +NotePadPlugin::~NotePadPlugin(){ + +} + + +void NotePadPlugin::openNote(){ + //qDebug() << "Open New Note:"; + //Prompt for a name for the new note + QFileDialog dlg(0, Qt::Dialog | Qt::WindowStaysOnTopHint ); + dlg.setFileMode(QFileDialog::ExistingFile); + dlg.setAcceptMode(QFileDialog::AcceptOpen); + dlg.setNameFilters( QStringList() << tr("Note Files (*.note)") << tr("Text Files (*)")); + dlg.setWindowTitle(tr("Open a note file")); + dlg.setWindowIcon( LXDG::findIcon("document-open","") ); + dlg.setDirectory(QDir::homePath()); //start in the home directory + //ensure it is centered on the current screen + QPoint center = QApplication::desktop()->screenGeometry(this).center(); + dlg.move( center.x()-(dlg.width()/2), center.y()-(dlg.height()/2) ); + dlg.show(); + while( dlg.isVisible() ){ + QApplication::processEvents(); + } + QStringList sel = dlg.selectedFiles(); + if(sel.isEmpty() || dlg.result()!=QDialog::Accepted){ return; } //cancelled + QString fullpath = sel.first(); + QString name = fullpath.section("/",-1); + //qDebug() << " - Found Note:" << name << fullpath; + int index = cnote->findText(name, Qt::MatchExactly | Qt::MatchCaseSensitive); + if(QFile::exists(fullpath) && index <0){ + //Alternate option of searching for the file in the list + index = cnote->findText(fullpath, Qt::MatchExactly | Qt::MatchCaseSensitive); + } + if(index>=0){ + //This note already exists: just load it + cnote->setCurrentIndex(index); + }else{ + //New note - add it to the end of the list and then load it + cnote->addItem(name, fullpath); + this->saveSetting("customFile", fullpath); //save this as a custom file + cnote->setCurrentIndex( cnote->count()-1 ); + QTimer::singleShot(1000, this, SLOT(notesDirChanged())); //Make sure to refresh the list (only one custom file at a time) + } +} + +QString NotePadPlugin::newNoteName(QString oldname, bool tryagain){ + //Prompt for a name for the new note + //qDebug() << "Create new note"; + QInputDialog dlg(0, Qt::Dialog | Qt::WindowStaysOnTopHint ); + dlg.setInputMode(QInputDialog::TextInput); + dlg.setLabelText(tr("Name:")); + dlg.setTextEchoMode(QLineEdit::Normal); + if(tryagain){ dlg.setWindowTitle(tr("Invalid Note Name: Try Again")); } + else{ dlg.setWindowTitle(tr("Select a Note Name")); } + dlg.setWindowIcon( LXDG::findIcon("document-new","") ); + dlg.setTextValue(oldname); + //ensure it is centered on the current screen + QPoint center = QApplication::desktop()->screenGeometry(this).center(); + dlg.move( center.x()-(dlg.width()/2), center.y()-(dlg.height()/2) ); + dlg.show(); + while( dlg.isVisible() ){ + //this->thread()->usleep(300000); //300 ms between updates + QApplication::processEvents(); + } + QString name = dlg.textValue(); + //make sure to remove any "bad" characters from the name + name.remove("\""); name.remove(";"); name.remove("\'"); name.replace("/","_"); + if(name.isEmpty() || dlg.result()!=QDialog::Accepted){ return ""; } //cancelled + //Check validity of the new note filename + QString fullpath = QDir::homePath()+"/Notes/"+name; + if(!fullpath.endsWith(".note")){ fullpath.append(".note"); } + if(QFile::exists(fullpath)){ + return newNoteName(name, true); //try again + } + return name; //good name - go ahead and return it +} + +void NotePadPlugin::updateConfigMenu(){ + //Re-create the menu and open it + config->menu()->clear(); + config->menu()->addAction(LXDG::findIcon("document-open",""), tr("Open Text File"), this, SLOT(openNoteClicked()) ); + config->menu()->addAction(LXDG::findIcon("document-new",""), tr("Create a Note"), this, SLOT(newNoteClicked()) ); + if(cnote->currentIndex()>=0){ + config->menu()->addSeparator(); + config->menu()->addAction(LXDG::findIcon("document-edit",""), tr("Rename Note"), this, SLOT(renameNote()) ); + config->menu()->addAction(LXDG::findIcon("document-close",""), tr("Delete Note"), this, SLOT(remNote()) ); + } +} + +void NotePadPlugin::openNoteClicked(){ + openNote(); +} + +void NotePadPlugin::newNoteClicked(){ + //QtConcurrent::run(this, &NotePadPlugin::newNote); + QString name = newNoteName(); + if(name.isEmpty()){ return; } + QString fullpath = QDir::homePath()+"/Notes/"+name; + if(!fullpath.endsWith(".note")){ fullpath.append(".note"); } + //qDebug() << " - New Note:" << name << fullpath; + int index = cnote->findText(name, Qt::MatchExactly | Qt::MatchCaseSensitive); + if(QFile::exists(fullpath) && index <0){ + //Alternate option of searching for the file in the list + index = cnote->findText(fullpath, Qt::MatchExactly | Qt::MatchCaseSensitive); + } + if(index>=0){ + //This note already exists: just load it + cnote->setCurrentIndex(index); + }else{ + //New note - add it to the end of the list and then load it + cnote->addItem(name, fullpath); + cnote->setCurrentIndex( cnote->count()-1 ); + } +} + +void NotePadPlugin::remNote(){ + QString note = cnote->currentData().toString(); + if(note.isEmpty()){ return; } + watcher->removePath(note); //remove this file from the watcher + this->saveSetting("currentFile",""); //reset the internal value + QFile::remove(note); //remove the file + //if(!note.startsWith(QDir::homePath()+"/Notes/") ){ + //If the file was not in the notes directory, need to manually prompt for a re-load + // otherwise, the directory watcher will catch it and trigger a re-load (no need to double-load) + notesDirChanged(); + //} +} + +void NotePadPlugin::renameNote(){ + int item = cnote->currentIndex(); + if(item<0){ return; } //nothing selected + QString oldpath = cnote->currentData().toString(); + if(oldpath.isEmpty() || !oldpath.endsWith(".note")){ return; } + QString name = newNoteName(cnote->currentText()); + if(name.isEmpty()){ return; } + QString fullpath = QDir::homePath()+"/Notes/"+name; + if(!fullpath.endsWith(".note")){ fullpath.append(".note"); } + //qDebug() << " - New Note:" << name << fullpath; + //Update the current item data to point to this file + cnote->setItemText(item, name); + cnote->setItemData(item, fullpath); + //Now move the file over + QFile::rename(oldpath, fullpath); + noteChanged(); +} + +void NotePadPlugin::newTextAvailable(){ + if(updating){ return; } //programmatic change of the widget + if(typeTimer->isActive()){ typeTimer->stop(); } + typeTimer->start(); +} + +void NotePadPlugin::updateContents(){ + if(updating){ return; } //this was a programmatic change to the widget + //The text was changed in the plugin - save it in the file + QString note = cnote->currentData().toString(); + updating = true; + LUtils::writeFile(note, edit->toPlainText().split("\n"), true); + QApplication::processEvents(); //make sure to process/discard the file changed signal before disabling the flag + updating = false; +} + +void NotePadPlugin::notesDirChanged(){ + if(updating){ return; } + QString cfile = this->readSetting("currentFile","").toString(); + QStringList notes; + QDir dir(QDir::homePath()+"/Notes"); + QStringList files = dir.entryList(QStringList() << "*.note", QDir::Files | QDir::NoDotAndDotDot, QDir::Name); + for(int i=0; i<files.length(); i++){ + notes << dir.absoluteFilePath(files[i]); + } + QString custom = this->readSetting("customFile","").toString(); + if(!custom.isEmpty() && QFile::exists(custom) ){ notes << custom; } + //qDebug() << "Available Notes:" << notes << cfile; + //Now update the UI list + updating = true; //don't refresh the UI until done changing lists + cnote->clear(); + bool found = false; + for(int i=0; i<notes.length(); i++){ + QString name = notes[i].section("/",-1); + if(name.endsWith(".note")){ name.chop(5); } + cnote->addItem(name, notes[i]); + if(notes[i]==cfile){ cnote->setCurrentIndex(i); found = true;} + } + if(!found && !cfile.isEmpty() && QFile::exists(cfile)){ + //Current note is a manually-loaded text file + cnote->addItem(cfile.section("/",-1), cfile); + cnote->setCurrentIndex( cnote->count()-1 ); //last item + found = true; + } + if(!found && cnote->count()>0){ cnote->setCurrentIndex(0); } + updating =false; + noteChanged(); +} + +void NotePadPlugin::noteChanged(){ + if(updating){ return; } + updating =true; + QString note; + if(cnote->currentIndex()>=0){ + note = cnote->currentData().toString(); + } + QTimer::singleShot(0, this, SLOT(updateConfigMenu()) ); + if(note.isEmpty() && cnote->count()>0){ + updating=false; + cnote->setCurrentIndex(0); + return; + } + QString oldnote = this->readSetting("currentFile","").toString(); + //qDebug() << "Note Changed:" << note << oldnote; + if( oldnote!=note ){ + //Clear the old note file/setting + if(!oldnote.isEmpty()){ + watcher->removePath(oldnote); + this->saveSetting("currentFile",""); + } + if(!note.isEmpty()){ + this->saveSetting("currentFile",note); + watcher->addPath(note); + } + } + + if(!note.isEmpty()){ + QString text = LUtils::readFile(note).join("\n"); + if(text!=edit->toPlainText()){ + edit->setPlainText( text ); + } + }else{ + edit->clear(); + } + //If no notes available - disable the editor until a new one is created + edit->setEnabled(!note.isEmpty()); + //rem->setEnabled(!note.isEmpty()); + cnote->setEnabled(!note.isEmpty()); + //leave the new/open buttons enabled all the time + updating = false; +} + + +void NotePadPlugin::loadIcons(){ + /*open->setIcon( LXDG::findIcon("document-open","") ); + add->setIcon( LXDG::findIcon("document-new","") ); + rem->setIcon( LXDG::findIcon("document-close","") );*/ + config->setIcon( LXDG::findIcon("configure","") ); +} diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/notepad/NotepadPlugin.h b/src-qt5/core/lumina-desktop/desktop-plugins/notepad/NotepadPlugin.h new file mode 100644 index 00000000..5084dadf --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/notepad/NotepadPlugin.h @@ -0,0 +1,66 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This plugin is a simple text editor for notes on the desktop +//=========================================== +#ifndef _LUMINA_DESKTOP_NOTEPAD_PLUGIN_H +#define _LUMINA_DESKTOP_NOTEPAD_PLUGIN_H + +#include <QPlainTextEdit> +#include <QToolButton> +#include <QComboBox> +#include <QVBoxLayout> +#include <QTimer> +#include <QFileSystemWatcher> +#include "../LDPlugin.h" + +class NotePadPlugin : public LDPlugin{ + Q_OBJECT +public: + NotePadPlugin(QWidget* parent, QString ID); + ~NotePadPlugin(); + + virtual QSize defaultPluginSize(){ + // The returned QSize is in grid points (typically 100 or 200 pixels square) + return QSize(3,3); + } +private: + QPlainTextEdit *edit; + QToolButton *config; //*open, *add, *rem; + QComboBox *cnote; + QFrame *frame; + QFileSystemWatcher *watcher; + bool updating; + QTimer *typeTimer; + + void openNote(); + QString newNoteName(QString oldname = "", bool tryagain = false); + +private slots: + void updateConfigMenu(); + + void openNoteClicked(); + void newNoteClicked(); + void remNote(); + void renameNote(); + void newTextAvailable(); + void updateContents(); + + void notesDirChanged(); + void noteChanged(); + + void loadIcons(); + +public slots: + void LocaleChange(){ + QTimer::singleShot(0,this, SLOT(noteChanged())); + } + void ThemeChange(){ + QTimer::singleShot(0,this, SLOT(loadIcons())); + } + +}; +#endif diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/quickcontainer/QuickDPlugin.h b/src-qt5/core/lumina-desktop/desktop-plugins/quickcontainer/QuickDPlugin.h new file mode 100644 index 00000000..4ba74133 --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/quickcontainer/QuickDPlugin.h @@ -0,0 +1,51 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This class is a simple container for a QtQuick plugin +//=========================================== +#ifndef _LUMINA_DESKTOP_DESKTOP_PLUGIN_QUICK_H +#define _LUMINA_DESKTOP_DESKTOP_PLUGIN_QUICK_H + +#include <QQuickWidget> +#include <QVBoxLayout> +#include "../LDPlugin.h" + +#include <LuminaUtils.h> + +class QuickDPlugin : public LDPlugin{ + Q_OBJECT +public: + QuickDPlugin(QWidget* parent, QString ID) : LDPlugin(parent, ID){ + this->setLayout( new QVBoxLayout()); + this->layout()->setContentsMargins(0,0,0,0); + container = new QQuickWidget(this); + container->setResizeMode(QQuickWidget::SizeRootObjectToView); + connect(container, SIGNAL(statusChanged(QQuickWidget::Status)), this, SLOT(statusChange(QQuickWidget::Status)) ); + this->layout()->addWidget(container); + container->setSource(QUrl::fromLocalFile( LUtils::findQuickPluginFile(ID.section("---",0,0)) )); + QApplication::processEvents(); //to check for errors right away + //this->setInitialSize(container->initialSize().width(), container->initialSize().height()); + } + + ~QuickDPlugin(){} + + virtual QSize defaultPluginSize(){ + // The returned QSize is in grid points (typically 100 or 200 pixels square) + return QSize(2,2); + } +private: + QQuickWidget *container; + +private slots: + void statusChange(QQuickWidget::Status status){ + if(status == QQuickWidget::Error){ + qDebug() << "Quick Widget Error:" << this->ID(); + container->setSource(QUrl()); //clear out the script - experienced an error + } + } + +}; +#endif diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/systemmonitor/MonitorWidget.cpp b/src-qt5/core/lumina-desktop/desktop-plugins/systemmonitor/MonitorWidget.cpp new file mode 100644 index 00000000..951bcc98 --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/systemmonitor/MonitorWidget.cpp @@ -0,0 +1,63 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "MonitorWidget.h" +#include "ui_MonitorWidget.h" + + +#include <LuminaXDG.h> +#include <LuminaOS.h> + +MonitorWidget::MonitorWidget(QWidget *parent) : QWidget(parent), ui(new Ui::MonitorWidget()){ + ui->setupUi(this); //load the designer form + upTimer = new QTimer(this); + upTimer->setInterval(2000); //update every 2 seconds + connect(upTimer, SIGNAL(timeout()), this, SLOT(UpdateStats()) ); + LoadIcons(); + upTimer->start(); +} + +MonitorWidget::~MonitorWidget(){ + //qDebug() << "Removing MonitorWidget"; +} + +void MonitorWidget::LoadIcons(){ + ui->tabWidget->setTabIcon(0,LXDG::findIcon("appointment-recurring","") ); //Summary + ui->tabWidget->setTabIcon(1,LXDG::findIcon("drive-harddisk","") ); //Disk Usage + //ui->tabWidget->setTabIcon(1,LXDG::findIcon("cpu","") ); //CPU Log + //ui->tabWidget->setTabIcon(2,LXDG::findIcon("media-flash-memory-stick","") ); //Mem Log +} + +void MonitorWidget::UpdateStats(){ + //qDebug() << "Updating System statistics..."; + ui->label_temps->setText( LOS::CPUTemperatures().join(", ") ); + if(ui->progress_cpu->isEnabled()){ + int perc = LOS::CPUUsagePercent(); + ui->progress_cpu->setValue(perc); + if(perc<0){ ui->progress_cpu->setEnabled(false); } //disable this for future checks + } + if(ui->progress_mem->isEnabled()){ + int perc = LOS::MemoryUsagePercent(); + ui->progress_mem->setValue(perc); + if(perc<0){ ui->progress_mem->setEnabled(false); } //disable this for future checks + } + ui->label_diskinfo->setText( LOS::DiskUsage().join("\n") ); + //Also perform/update the logs as necessary + // -- TO DO -- +} + +SysMonitorPlugin::SysMonitorPlugin(QWidget *parent, QString ID) : LDPlugin(parent, ID){ + monitor = new MonitorWidget(this); + this->setLayout( new QVBoxLayout() ); + this->layout()->setContentsMargins(0,0,0,0); + this->layout()->addWidget(monitor); + + //this->setInitialSize(monitor->sizeHint().width(),monitor->sizeHint().height()); +} + +SysMonitorPlugin::~SysMonitorPlugin(){ + //qDebug() << "Remove SysMonitorPlugin"; +}
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/systemmonitor/MonitorWidget.h b/src-qt5/core/lumina-desktop/desktop-plugins/systemmonitor/MonitorWidget.h new file mode 100644 index 00000000..618ac8f4 --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/systemmonitor/MonitorWidget.h @@ -0,0 +1,62 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This plugin is a simple hardware status monitor on the desktop +//=========================================== +#ifndef _LUMINA_DESKTOP_PLUGIN_HW_MONITOR_WIDGET_H +#define _LUMINA_DESKTOP_PLUGIN_HW_MONITOR_WIDGET_H + +#include <QTimer> +#include <QWidget> + +#include "../LDPlugin.h" + +namespace Ui{ + class MonitorWidget; +}; + +class MonitorWidget : public QWidget{ + Q_OBJECT +public: + MonitorWidget(QWidget *parent = 0); + ~MonitorWidget(); + +public slots: + void LoadIcons(); + +private: + Ui::MonitorWidget *ui; + QTimer *upTimer; + +private slots: + void UpdateStats(); +}; + +// Wrapper class to put this into a desktop plugin container +class SysMonitorPlugin : public LDPlugin{ + Q_OBJECT +public: + SysMonitorPlugin(QWidget* parent, QString ID); + ~SysMonitorPlugin(); + + virtual QSize defaultPluginSize(){ + // The returned QSize is in grid points (typically 100 or 200 pixels square) + return QSize(3,2); + } + +private: + MonitorWidget *monitor; + +public slots: + void LocaleChange(){ + QTimer::singleShot(0,monitor, SLOT(LoadIcons())); + } + void ThemeChange(){ + QTimer::singleShot(0,monitor, SLOT(LoadIcons())); + } +}; + +#endif diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/systemmonitor/MonitorWidget.ui b/src-qt5/core/lumina-desktop/desktop-plugins/systemmonitor/MonitorWidget.ui new file mode 100644 index 00000000..8798bc25 --- /dev/null +++ b/src-qt5/core/lumina-desktop/desktop-plugins/systemmonitor/MonitorWidget.ui @@ -0,0 +1,143 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>MonitorWidget</class> + <widget class="QWidget" name="MonitorWidget"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>300</width> + <height>122</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="leftMargin"> + <number>2</number> + </property> + <property name="topMargin"> + <number>2</number> + </property> + <property name="rightMargin"> + <number>2</number> + </property> + <property name="bottomMargin"> + <number>2</number> + </property> + <item> + <widget class="QTabWidget" name="tabWidget"> + <property name="currentIndex"> + <number>0</number> + </property> + <widget class="QWidget" name="tab_summary"> + <attribute name="title"> + <string>Summary</string> + </attribute> + <layout class="QFormLayout" name="formLayout"> + <item row="0" column="0"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>CPU Temp:</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLabel" name="label_temps"> + <property name="text"> + <string notr="true"/> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>CPU Usage:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QProgressBar" name="progress_cpu"> + <property name="value"> + <number>0</number> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_3"> + <property name="text"> + <string>Mem Usage:</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QProgressBar" name="progress_mem"> + <property name="value"> + <number>0</number> + </property> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="tab_disks"> + <attribute name="title"> + <string>Disk I/O</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QScrollArea" name="scrollArea"> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="widgetResizable"> + <bool>true</bool> + </property> + <widget class="QWidget" name="scrollAreaWidgetContents"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>292</width> + <height>89</height> + </rect> + </property> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QLabel" name="label_diskinfo"> + <property name="text"> + <string notr="true"/> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </widget> + </item> + </layout> + </widget> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src-qt5/core/lumina-desktop/fluxboxconf/fluxbox-init-rc b/src-qt5/core/lumina-desktop/fluxboxconf/fluxbox-init-rc new file mode 100644 index 00000000..15283468 --- /dev/null +++ b/src-qt5/core/lumina-desktop/fluxboxconf/fluxbox-init-rc @@ -0,0 +1,82 @@ +session.screen0.window.focus.alpha: 255 +session.screen0.window.unfocus.alpha: 255 +session.screen0.titlebar.left: Stick +session.screen0.titlebar.right: Minimize Maximize Close +session.screen0.menu.alpha: 255 +session.screen0.clientMenu.usePixmap: true +session.screen0.toolbar.onhead: 2 +session.screen0.toolbar.onTop: False +session.screen0.toolbar.maxOver: false +session.screen0.toolbar.widthPercent: 100 +session.screen0.toolbar.autoHide: false +session.screen0.toolbar.placement: BottomCenter +session.screen0.toolbar.alpha: 150 +session.screen0.toolbar.visible: false +session.screen0.toolbar.layer: Dock +session.screen0.toolbar.height: 0 +session.screen0.toolbar.tools: +session.screen0.iconbar.iconWidth: 128 +session.screen0.iconbar.alignment: Left +session.screen0.iconbar.usePixmap: true +session.screen0.iconbar.iconTextPadding: 10 +session.screen0.iconbar.mode: workspace +session.screen0.slit.direction: Vertical +session.screen0.slit.onTop: False +session.screen0.slit.onhead: 0 +session.screen0.slit.autoHide: false +session.screen0.slit.maxOver: false +session.screen0.slit.placement: RightBottom +session.screen0.slit.alpha: 255 +session.screen0.slit.acceptKdeDockapps: true +session.screen0.slit.layer: Dock +session.screen0.tab.alignment: Left +session.screen0.tab.placement: Top +session.screen0.tab.width: 64 +session.screen0.tab.rotatevertical: True +session.screen0.tab.height: 16 +session.screen0.tabs.usePixmap: false +session.screen0.tabs.maxOver: false +session.screen0.tabs.intitlebar: true +session.screen0.windowPlacement: RowSmartPlacement +session.screen0.rowPlacementDirection: LeftToRight +session.screen0.opaqueMove: true +session.screen0.focusLastWindow: True +session.screen0.maxDisableMove: false +session.screen0.showwindowposition: false +session.screen0.fullMaximization: false +session.screen0.defaultDeco: NORMAL +session.screen0.workspaceNames: one,two +session.screen0.maxIgnoreIncrement: true +session.screen0.edgeSnapThreshold: 10 +session.screen0.workspaces: 2 +session.screen0.noFocusWhileTypingDelay: 0 +session.screen0.focusNewWindows: true +session.screen0.menuDelay: 200 +session.screen0.clickRaises: true +session.screen0.focusSameHead: true +session.screen0.focusModel: ClickFocus +session.screen0.workspacewarping: true +session.screen0.maxDisableResize: false +session.screen0.autoRaise: true +session.screen0.allowRemoteActions: false +session.screen0.tooltipDelay: 500 +session.screen0.colPlacementDirection: TopToBottom +session.screen0.tabFocusModel: ClickToTabFocus +session.screen0.strftimeFormat: %l:%M +session.titlebar.right: Minimize Maximize Close +session.colorsPerChannel: 4 +session.opaqueMove: False +session.styleFile: /usr/local/share/fluxbox/styles/bora_black +session.doubleClickInterval: 250 +session.iconbar: false +session.cacheLife: 5 +session.ignoreBorder: false +session.tabsAttachArea: Window +session.tabPadding: 0 +session.keyFile: ~/.lumina/fluxbox-keys +session.configVersion: 13 +session.autoRaiseDelay: 250 +session.cacheMax: 200 +session.imageDither: True +session.forcePseudoTransparency: True + diff --git a/src-qt5/core/lumina-desktop/fluxboxconf/fluxbox-keys b/src-qt5/core/lumina-desktop/fluxboxconf/fluxbox-keys new file mode 100644 index 00000000..821e463f --- /dev/null +++ b/src-qt5/core/lumina-desktop/fluxboxconf/fluxbox-keys @@ -0,0 +1,151 @@ +! fluxbox-update_configs added '(workspace=[current])' to (Next|Prev)(Window|Group) +! check lines marked by 'FBCV13' if they are correctly updated +!mouse actions added by fluxbox-update_configs +OnTitlebar Mouse1 :MacroCmd {Focus} {Raise} {ActivateTab} +!mouse actions added by fluxbox-update_configs +OnTitlebar Move1 :StartMoving +OnLeftGrip Move1 :StartResizing bottomleft +OnRightGrip Move1 :StartResizing bottomright +OnWindowBorder Move1 :StartMoving + +!mouse actions added by fluxbox-update_configs +OnTitlebar Mouse2 :StartTabbing + +!mouse actions added by fluxbox-update_configs +OnTitlebar Double Mouse1 :Shade +OnTitlebar Mouse3 :WindowMenu + +# scroll on the toolbar to change current window +OnToolbar Mouse4 :PrevWindow {static groups} (workspace=[current]) (iconhidden=no) !! FBCV13 !! +OnToolbar Mouse5 :NextWindow {static groups} (workspace=[current]) (iconhidden=no) !! FBCV13 !! + +# alt + left/right click to move/resize a window +OnWindow Mod1 Mouse1 :If {Matches (Layer=Normal)} {MacroCmd {Raise} {Focus} {StartMoving}} +OnWindow Mod1 Mouse3 :If {Matches (Layer=Normal)} {MacroCmd {Raise} {Focus} {StartResizing NearestCorner}} + +OnWindowBorder Move1 :StartMoving +OnLeftGrip Move1 :StartResizing bottomleft +OnRightGrip Move1 :StartResizing bottomright + +# alt + middle click to lower the window +OnWindow Mod1 Mouse2 :If {Matches (Layer=Normal)} {Lower} + +# control-click a window's titlebar and drag to attach windows +OnTitlebar Control Mouse1 :StartTabbing + +# double click on the titlebar to shade +OnTitlebar Double Mouse1 :Shade + +# left click on the titlebar to move the window +OnTitlebar Mouse1 :MacroCmd {Raise} {Focus} {ActivateTab} +OnTitlebar Move1 :StartMoving + +# middle click on the titlebar to lower +OnTitlebar Mouse2 :Lower + +# right click on the titlebar for a menu of options +OnTitlebar Mouse3 :WindowMenu + +# alt-tab +Mod1 Tab :NextWindow {groups} (workspace=[current]) (workspace=[current]) !! FBCV13 !! +Mod1 Shift Tab :PrevWindow {groups} (workspace=[current]) (workspace=[current]) !! FBCV13 !! + +# cycle through tabs in the current window +Mod4 Tab :NextTab +Mod4 Shift Tab :PrevTab + +# Arrange/Tile Current windows +Mod1 Left :ArrangeWindowsStackRight (Layer=Normal) +Mod1 Right :ArrangeWindowsStackLeft (Layer=Normal) + +# go to a specific tab in the current window +Mod4 1 :Tab 1 +Mod4 2 :Tab 2 +Mod4 3 :Tab 3 +Mod4 4 :Tab 4 +Mod4 5 :Tab 5 +Mod4 6 :Tab 6 +Mod4 7 :Tab 7 +Mod4 8 :Tab 8 +Mod4 9 :Tab 9 + +# open a terminal +Mod1 F1 :Exec xterm + +# open a dialog to run programs +Mod1 F2 :Exec lumina-search + +# current window commands +Mod1 F4 :If {Matches (Layer=Normal)} {Close} +Mod1 F5 :If {Matches (Layer=Normal)} {Kill} +Mod1 F9 :If {Matches (Layer=Normal)} {Minimize} +Mod1 F10 :If {Matches (Layer=Normal)} {Maximize} +Mod1 F11 :If {Matches (Layer=Normal)} {Fullscreen} + +# send the current window to previous/next workspace +Mod4 Left :If {Matches (Layer=Normal)} {SendToPrevWorkspace} +Mod4 Right :If {Matches (Layer=Normal)} {SendToNextWorkspace} + +# send the current window and follow it to previous/next workspace +Control Mod4 Left :If {Matches (Layer=Normal)} {TakeToPrevWorkspace} +Control Mod4 Right :If {Matches (Layer=Normal)} {TakeToNextWorkspace} + +# change to a specific workspace +Control F1 :Workspace 1 +Control F2 :Workspace 2 +Control F3 :Workspace 3 +Control F4 :Workspace 4 +Control F5 :Workspace 5 +Control F6 :Workspace 6 +Control F7 :Workspace 7 +Control F8 :Workspace 8 +Control F9 :Workspace 9 +Control F10 :Workspace 10 +Control F11 :Workspace 11 +Control F12 :Workspace 12 + +Control Mod1 Left :PrevWorkspace +Control Mod1 Right :NextWorkspace + +# Control + MouseWheel to change workspaces +Control Mouse4 :PrevWorkspace +Control Mouse5 :NextWorkspace + +# send the current window to a specific workspace +Mod4 F1 :SendToWorkspace 1 +Mod4 F2 :SendToWorkspace 2 +Mod4 F3 :SendToWorkspace 3 +Mod4 F4 :SendToWorkspace 4 +Mod4 F5 :SendToWorkspace 5 +Mod4 F6 :SendToWorkspace 6 +Mod4 F7 :SendToWorkspace 7 +Mod4 F8 :SendToWorkspace 8 +Mod4 F9 :SendToWorkspace 9 +Mod4 F10 :SendToWorkspace 10 +Mod4 F11 :SendToWorkspace 11 +Mod4 F12 :SendToWorkspace 12 + +# send the current window and change to a specific workspace +Control Mod4 F1 :If {Matches (Layer=Normal)} {TakeToWorkspace 1} +Control Mod4 F2 :If {Matches (Layer=Normal)} {TakeToWorkspace 2} +Control Mod4 F3 :If {Matches (Layer=Normal)} {TakeToWorkspace 3} +Control Mod4 F4 :If {Matches (Layer=Normal)} {TakeToWorkspace 4} +Control Mod4 F5 :If {Matches (Layer=Normal)} {TakeToWorkspace 5} +Control Mod4 F6 :If {Matches (Layer=Normal)} {TakeToWorkspace 6} +Control Mod4 F7 :If {Matches (Layer=Normal)} {TakeToWorkspace 7} +Control Mod4 F8 :If {Matches (Layer=Normal)} {TakeToWorkspace 8} +Control Mod4 F9 :If {Matches (Layer=Normal)} {TakeToWorkspace 9} +Control Mod4 F10 :If {Matches (Layer=Normal)} {TakeToWorkspace 10} +Control Mod4 F11 :If {Matches (Layer=Normal)} {TakeToWorkspace 11} +Control Mod4 F12 :If {Matches (Layer=Normal)} {TakeToWorkspace 12} + +#Lumina Specific defaults +Print :Exec lumina-screenshot +Pause :Exec xscreensaver-command -lock +Mod4 L :Exec xscreensaver-command -lock +Mod4 space :Exec lumina-search +Mod4 Prior :Exec lumina-open -volumeup +Mod4 Next :Exec lumina-open -volumedown +Mod4 Home :Exec lumina-open -brightnessup +Mod4 End :Exec lumina-open -brightnessdown + diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_af.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_af.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_af.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ar.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ar.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ar.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_az.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_az.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_az.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bg.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bg.ts new file mode 100644 index 00000000..c769cb89 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bg.ts @@ -0,0 +1,403 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation>Приложения</translation> + </message> + <message> + <source>Multimedia</source> + <translation>Мултимедия</translation> + </message> + <message> + <source>Development</source> + <translation>Разработка</translation> + </message> + <message> + <source>Education</source> + <translation>Образование</translation> + </message> + <message> + <source>Games</source> + <translation>Игри</translation> + </message> + <message> + <source>Graphics</source> + <translation>Графики</translation> + </message> + <message> + <source>Network</source> + <translation>Мрежа</translation> + </message> + <message> + <source>Office</source> + <translation>Офис</translation> + </message> + <message> + <source>Science</source> + <translation>Наука</translation> + </message> + <message> + <source>Settings</source> + <translation>Настройки</translation> + </message> + <message> + <source>System</source> + <translation>Системни</translation> + </message> + <message> + <source>Utility</source> + <translation>Инструменти</translation> + </message> + <message> + <source>Unsorted</source> + <translation>Несортирани</translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation>%1 % (Зарежда)</translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation>%1 % (%2 Остава)</translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation>Аудио</translation> + </message> + <message> + <source>Video</source> + <translation>Видео</translation> + </message> + <message> + <source>Pictures</source> + <translation>Изображения</translation> + </message> + <message> + <source>Other Files</source> + <translation>Други Файлове</translation> + </message> + <message> + <source>Documents</source> + <translation>Документи</translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation>Терминал</translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished">Log Out</translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation>Lumina Десктоп</translation> + </message> + <message> + <source>Workspace %1</source> + <translation>Работен плот %1</translation> + </message> + <message> + <source>Browse System</source> + <translation>Разглегай Системата</translation> + </message> + <message> + <source>Lock Desktop</source> + <translation>Заключи Десктопа</translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation>Отключи Десктопа</translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished">Snap Plugins to Grid</translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation>Работен плот %1</translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished">Log Out</translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation>Затвоти Прозореца</translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation>Настройки на Десктопа</translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished">Screensaver</translation> + </message> + <message> + <source>Desktop</source> + <translation>Десктоп</translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation>Системни Опции</translation> + </message> + <message> + <source>Restart</source> + <translation>Рестарт</translation> + </message> + <message> + <source>Shutdown</source> + <translation>Изключване</translation> + </message> + <message> + <source>Cancel</source> + <translation>Отказ</translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished">Log Out</translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished">Home</translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished">Мултимедия</translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished">Разработка</translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished">Образование</translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished">Игри</translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished">Графики</translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished">Мрежа</translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished">Офис</translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished">Наука</translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished">Настройки</translation> + </message> + <message> + <source>System</source> + <translation type="unfinished">Системни</translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished">Инструменти</translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished">Несортирани</translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bn.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bn.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bn.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bs.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bs.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bs.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cs.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cs.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cs.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cy.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cy.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cy.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_da.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_da.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_da.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_de.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_de.ts new file mode 100644 index 00000000..42b9b203 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_de.ts @@ -0,0 +1,407 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation>Anwendungen</translation> + </message> + <message> + <source>Multimedia</source> + <translation>Multimedia</translation> + </message> + <message> + <source>Development</source> + <translation>Entwicklung</translation> + </message> + <message> + <source>Education</source> + <translation>Bildung</translation> + </message> + <message> + <source>Games</source> + <translation>Spiele</translation> + </message> + <message> + <source>Graphics</source> + <translation>Grafisch</translation> + </message> + <message> + <source>Network</source> + <translation>Netzwerk</translation> + </message> + <message> + <source>Office</source> + <translation>Büro</translation> + </message> + <message> + <source>Science</source> + <translation>Wissenschaft</translation> + </message> + <message> + <source>Settings</source> + <translation>Einstellungen</translation> + </message> + <message> + <source>System</source> + <translation>System</translation> + </message> + <message> + <source>Utility</source> + <translation>Dienstprogramme</translation> + </message> + <message> + <source>Unsorted</source> + <translation>Unsortiert</translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation>%1 % (Laden)</translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation>%1 % (%2 verbleibend)</translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation>Audio</translation> + </message> + <message> + <source>Video</source> + <translation>Video</translation> + </message> + <message> + <source>Pictures</source> + <translation>Bilder</translation> + </message> + <message> + <source>Other Files</source> + <translation>Andere Dateien</translation> + </message> + <message> + <source>Documents</source> + <translation>Dokumente</translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation>Terminal</translation> + </message> + <message> + <source>Log Out</source> + <translation>Abmelden</translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation>Lumina-Arbeitsplatz</translation> + </message> + <message> + <source>Workspace %1</source> + <translation>Arbeitsplatz %1</translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation>Arbeitsplatz %1</translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished">Abmelden</translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation>Fenster schließen</translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation>Arbeitsplatzeinstellungen</translation> + </message> + <message> + <source>Screensaver</source> + <translation>Bildschirmschoner</translation> + </message> + <message> + <source>Desktop</source> + <translation>Arbeitsplatz</translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation>Systemoptionen</translation> + </message> + <message> + <source>Restart</source> + <translation>Neustart</translation> + </message> + <message> + <source>Shutdown</source> + <translation>Herunterfahren</translation> + </message> + <message> + <source>Cancel</source> + <translation>Abbruch</translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished">Abmelden</translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation>Anfang</translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished">Multimedia</translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished">Entwicklung</translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished">Bildung</translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished">Spiele</translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished">Grafisch</translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished">Netzwerk</translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished">Büro</translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished">Wissenschaft</translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished">Einstellungen</translation> + </message> + <message> + <source>System</source> + <translation type="unfinished">System</translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished">Dienstprogramme</translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished">Unsortiert</translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_el.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_el.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_el.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_GB.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_GB.ts new file mode 100644 index 00000000..a00ef9d9 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_GB.ts @@ -0,0 +1,372 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation>Click to Set</translation> + </message> + <message> + <source>Select Application</source> + <translation>Select Application</translation> + </message> + <message> + <source>Name:</source> + <translation>Name:</translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation>Applications</translation> + </message> + <message> + <source>Multimedia</source> + <translation>Multimedia</translation> + </message> + <message> + <source>Development</source> + <translation>Development</translation> + </message> + <message> + <source>Education</source> + <translation>Education</translation> + </message> + <message> + <source>Games</source> + <translation>Games</translation> + </message> + <message> + <source>Graphics</source> + <translation>Graphics</translation> + </message> + <message> + <source>Network</source> + <translation>Network</translation> + </message> + <message> + <source>Office</source> + <translation>Office</translation> + </message> + <message> + <source>Science</source> + <translation>Science</translation> + </message> + <message> + <source>Settings</source> + <translation>Settings</translation> + </message> + <message> + <source>System</source> + <translation>System</translation> + </message> + <message> + <source>Utility</source> + <translation>Utility</translation> + </message> + <message> + <source>Unsorted</source> + <translation>Unsorted</translation> + </message> + <message> + <source>Open Home</source> + <translation>Open Home</translation> + </message> + <message> + <source>Install Applications</source> + <translation>Install Applications</translation> + </message> + <message> + <source>Control Panel</source> + <translation>Control Panel</translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation>%1 % (Charging)</translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation>%1 % (%2 Remaining)</translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation>Audio</translation> + </message> + <message> + <source>Video</source> + <translation>Video</translation> + </message> + <message> + <source>Pictures</source> + <translation>Pictures</translation> + </message> + <message> + <source>Other Files</source> + <translation>Other Files</translation> + </message> + <message> + <source>Documents</source> + <translation>Documents</translation> + </message> + <message> + <source>Favorite Applications</source> + <translation>Favorite Applications</translation> + </message> + <message> + <source>Favorite Folders</source> + <translation>Favorite Folders</translation> + </message> + <message> + <source>Favorite Files</source> + <translation>Favorite Files</translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation>Terminal</translation> + </message> + <message> + <source>Log Out</source> + <translation>Log Out</translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation>Lumina Desktop</translation> + </message> + <message> + <source>Workspace %1</source> + <translation>Workspace %1</translation> + </message> + <message> + <source>Browse System</source> + <translation>Browse System</translation> + </message> + <message> + <source>Lock Desktop</source> + <translation>Lock Desktop</translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation>Unlock Desktop</translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation>Snap Plugins to Grid</translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation>Workspace %1</translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation>Form</translation> + </message> + <message> + <source>System Volume</source> + <translation>System Volume</translation> + </message> + <message> + <source>Screen Brightness</source> + <translation>Screen Brightness</translation> + </message> + <message> + <source>Battery Status</source> + <translation>Battery Status</translation> + </message> + <message> + <source>Workspace</source> + <translation>Workspace</translation> + </message> + <message> + <source>charging</source> + <translation>charging</translation> + </message> + <message> + <source>%1 of %2</source> + <translation>%1 of %2</translation> + </message> + <message> + <source>Log Out</source> + <translation>Log Out</translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation>Launch Audio Mixer</translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation>Close Window</translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation>Desktop Settings</translation> + </message> + <message> + <source>Screensaver</source> + <translation>Screensaver</translation> + </message> + <message> + <source>Desktop</source> + <translation>Desktop</translation> + </message> + <message> + <source>Window Theme</source> + <translation>Window Theme</translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation>System Options</translation> + </message> + <message> + <source>Restart</source> + <translation>Restart</translation> + </message> + <message> + <source>Shutdown</source> + <translation>Shutdown</translation> + </message> + <message> + <source>Cancel</source> + <translation>Cancel</translation> + </message> + <message> + <source>Log Out</source> + <translation>Log Out</translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation>Remove Shortcut</translation> + </message> + <message> + <source>Create Shortcut</source> + <translation>Create Shortcut</translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation>Form</translation> + </message> + <message> + <source>Favorites</source> + <translation>Favorites</translation> + </message> + <message> + <source>Favorite Applications</source> + <translation>Favorite Applications</translation> + </message> + <message> + <source>Favorite Directories</source> + <translation>Favorite Directories</translation> + </message> + <message> + <source>Favorite FIles</source> + <translation>Favorite FIles</translation> + </message> + <message> + <source>System Applications</source> + <translation>System Applications</translation> + </message> + <message> + <source>Home</source> + <translation>Home</translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation>Desktop Preferences</translation> + </message> + <message> + <source>Control Panel</source> + <translation>Control Panel</translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation>Desktop Appearance/Plugins</translation> + </message> + <message> + <source>Application Appearance</source> + <translation>Application Appearance</translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation>Screensaver Settings</translation> + </message> + <message> + <source>Multimedia</source> + <translation>Multimedia</translation> + </message> + <message> + <source>Development</source> + <translation>Development</translation> + </message> + <message> + <source>Education</source> + <translation>Education</translation> + </message> + <message> + <source>Games</source> + <translation>Games</translation> + </message> + <message> + <source>Graphics</source> + <translation>Graphics</translation> + </message> + <message> + <source>Network</source> + <translation>Network</translation> + </message> + <message> + <source>Office</source> + <translation>Office</translation> + </message> + <message> + <source>Science</source> + <translation>Science</translation> + </message> + <message> + <source>Settings</source> + <translation>Settings</translation> + </message> + <message> + <source>System</source> + <translation>System</translation> + </message> + <message> + <source>Utility</source> + <translation>Utility</translation> + </message> + <message> + <source>Unsorted</source> + <translation>Unsorted</translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_ZA.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_ZA.ts new file mode 100644 index 00000000..a00ef9d9 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_ZA.ts @@ -0,0 +1,372 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation>Click to Set</translation> + </message> + <message> + <source>Select Application</source> + <translation>Select Application</translation> + </message> + <message> + <source>Name:</source> + <translation>Name:</translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation>Applications</translation> + </message> + <message> + <source>Multimedia</source> + <translation>Multimedia</translation> + </message> + <message> + <source>Development</source> + <translation>Development</translation> + </message> + <message> + <source>Education</source> + <translation>Education</translation> + </message> + <message> + <source>Games</source> + <translation>Games</translation> + </message> + <message> + <source>Graphics</source> + <translation>Graphics</translation> + </message> + <message> + <source>Network</source> + <translation>Network</translation> + </message> + <message> + <source>Office</source> + <translation>Office</translation> + </message> + <message> + <source>Science</source> + <translation>Science</translation> + </message> + <message> + <source>Settings</source> + <translation>Settings</translation> + </message> + <message> + <source>System</source> + <translation>System</translation> + </message> + <message> + <source>Utility</source> + <translation>Utility</translation> + </message> + <message> + <source>Unsorted</source> + <translation>Unsorted</translation> + </message> + <message> + <source>Open Home</source> + <translation>Open Home</translation> + </message> + <message> + <source>Install Applications</source> + <translation>Install Applications</translation> + </message> + <message> + <source>Control Panel</source> + <translation>Control Panel</translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation>%1 % (Charging)</translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation>%1 % (%2 Remaining)</translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation>Audio</translation> + </message> + <message> + <source>Video</source> + <translation>Video</translation> + </message> + <message> + <source>Pictures</source> + <translation>Pictures</translation> + </message> + <message> + <source>Other Files</source> + <translation>Other Files</translation> + </message> + <message> + <source>Documents</source> + <translation>Documents</translation> + </message> + <message> + <source>Favorite Applications</source> + <translation>Favorite Applications</translation> + </message> + <message> + <source>Favorite Folders</source> + <translation>Favorite Folders</translation> + </message> + <message> + <source>Favorite Files</source> + <translation>Favorite Files</translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation>Terminal</translation> + </message> + <message> + <source>Log Out</source> + <translation>Log Out</translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation>Lumina Desktop</translation> + </message> + <message> + <source>Workspace %1</source> + <translation>Workspace %1</translation> + </message> + <message> + <source>Browse System</source> + <translation>Browse System</translation> + </message> + <message> + <source>Lock Desktop</source> + <translation>Lock Desktop</translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation>Unlock Desktop</translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation>Snap Plugins to Grid</translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation>Workspace %1</translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation>Form</translation> + </message> + <message> + <source>System Volume</source> + <translation>System Volume</translation> + </message> + <message> + <source>Screen Brightness</source> + <translation>Screen Brightness</translation> + </message> + <message> + <source>Battery Status</source> + <translation>Battery Status</translation> + </message> + <message> + <source>Workspace</source> + <translation>Workspace</translation> + </message> + <message> + <source>charging</source> + <translation>charging</translation> + </message> + <message> + <source>%1 of %2</source> + <translation>%1 of %2</translation> + </message> + <message> + <source>Log Out</source> + <translation>Log Out</translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation>Launch Audio Mixer</translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation>Close Window</translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation>Desktop Settings</translation> + </message> + <message> + <source>Screensaver</source> + <translation>Screensaver</translation> + </message> + <message> + <source>Desktop</source> + <translation>Desktop</translation> + </message> + <message> + <source>Window Theme</source> + <translation>Window Theme</translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation>System Options</translation> + </message> + <message> + <source>Restart</source> + <translation>Restart</translation> + </message> + <message> + <source>Shutdown</source> + <translation>Shutdown</translation> + </message> + <message> + <source>Cancel</source> + <translation>Cancel</translation> + </message> + <message> + <source>Log Out</source> + <translation>Log Out</translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation>Remove Shortcut</translation> + </message> + <message> + <source>Create Shortcut</source> + <translation>Create Shortcut</translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation>Form</translation> + </message> + <message> + <source>Favorites</source> + <translation>Favorites</translation> + </message> + <message> + <source>Favorite Applications</source> + <translation>Favorite Applications</translation> + </message> + <message> + <source>Favorite Directories</source> + <translation>Favorite Directories</translation> + </message> + <message> + <source>Favorite FIles</source> + <translation>Favorite FIles</translation> + </message> + <message> + <source>System Applications</source> + <translation>System Applications</translation> + </message> + <message> + <source>Home</source> + <translation>Home</translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation>Desktop Preferences</translation> + </message> + <message> + <source>Control Panel</source> + <translation>Control Panel</translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation>Desktop Appearance/Plugins</translation> + </message> + <message> + <source>Application Appearance</source> + <translation>Application Appearance</translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation>Screensaver Settings</translation> + </message> + <message> + <source>Multimedia</source> + <translation>Multimedia</translation> + </message> + <message> + <source>Development</source> + <translation>Development</translation> + </message> + <message> + <source>Education</source> + <translation>Education</translation> + </message> + <message> + <source>Games</source> + <translation>Games</translation> + </message> + <message> + <source>Graphics</source> + <translation>Graphics</translation> + </message> + <message> + <source>Network</source> + <translation>Network</translation> + </message> + <message> + <source>Office</source> + <translation>Office</translation> + </message> + <message> + <source>Science</source> + <translation>Science</translation> + </message> + <message> + <source>Settings</source> + <translation>Settings</translation> + </message> + <message> + <source>System</source> + <translation>System</translation> + </message> + <message> + <source>Utility</source> + <translation>Utility</translation> + </message> + <message> + <source>Unsorted</source> + <translation>Unsorted</translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_es.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_es.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_es.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_et.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_et.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_et.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_eu.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_eu.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_eu.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fa.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fa.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fa.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fi.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fi.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fi.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr.ts new file mode 100644 index 00000000..85022fb5 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr.ts @@ -0,0 +1,372 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation>Cliquez pour définir</translation> + </message> + <message> + <source>Select Application</source> + <translation>Sélectionnez une application</translation> + </message> + <message> + <source>Name:</source> + <translation>Nom:</translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation>Applications</translation> + </message> + <message> + <source>Multimedia</source> + <translation>Multimédia</translation> + </message> + <message> + <source>Development</source> + <translation>Développement</translation> + </message> + <message> + <source>Education</source> + <translation>Éducation</translation> + </message> + <message> + <source>Games</source> + <translation>Jeux</translation> + </message> + <message> + <source>Graphics</source> + <translation>Graphique</translation> + </message> + <message> + <source>Network</source> + <translation>Internet</translation> + </message> + <message> + <source>Office</source> + <translation>Bureautique</translation> + </message> + <message> + <source>Science</source> + <translation>Science</translation> + </message> + <message> + <source>Settings</source> + <translation>Paramétrages</translation> + </message> + <message> + <source>System</source> + <translation>Système</translation> + </message> + <message> + <source>Utility</source> + <translation>Utilitaires</translation> + </message> + <message> + <source>Unsorted</source> + <translation>Non triés</translation> + </message> + <message> + <source>Open Home</source> + <translation>Ouvrir Accueil</translation> + </message> + <message> + <source>Install Applications</source> + <translation>Installer des applications</translation> + </message> + <message> + <source>Control Panel</source> + <translation>Panneau Contrôle</translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation>%1 % (Charge)</translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation>%1 % (%2 Restant)</translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation>Audio</translation> + </message> + <message> + <source>Video</source> + <translation>Video</translation> + </message> + <message> + <source>Pictures</source> + <translation>Images</translation> + </message> + <message> + <source>Other Files</source> + <translation>Autres Fichiers</translation> + </message> + <message> + <source>Documents</source> + <translation>Documents</translation> + </message> + <message> + <source>Favorite Applications</source> + <translation>Applications Favorites</translation> + </message> + <message> + <source>Favorite Folders</source> + <translation>Dossiers Favoris</translation> + </message> + <message> + <source>Favorite Files</source> + <translation>Fichier Favoris</translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation>Terminal</translation> + </message> + <message> + <source>Log Out</source> + <translation>Déconnexion</translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation>Lumina Destop</translation> + </message> + <message> + <source>Workspace %1</source> + <translation>Espace de travail %1</translation> + </message> + <message> + <source>Browse System</source> + <translation>Parcourir système</translation> + </message> + <message> + <source>Lock Desktop</source> + <translation>Verrouillage du Bureau</translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation>Déverrouillage du Bureau</translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation>Aligner Greffon sur la grille</translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation>Espace de travail %1</translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation>Forme</translation> + </message> + <message> + <source>System Volume</source> + <translation>Volume Système</translation> + </message> + <message> + <source>Screen Brightness</source> + <translation>Luminosité de l'écran</translation> + </message> + <message> + <source>Battery Status</source> + <translation>État de la batterie</translation> + </message> + <message> + <source>Workspace</source> + <translation>Espace de travail</translation> + </message> + <message> + <source>charging</source> + <translation>chargement</translation> + </message> + <message> + <source>%1 of %2</source> + <translation>%1 de %2</translation> + </message> + <message> + <source>Log Out</source> + <translation>Déconnexion</translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation>Lancer Mixeur Audio</translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation>Fermer la Fenêtre</translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation>Paramètres de bureau</translation> + </message> + <message> + <source>Screensaver</source> + <translation>Économiseur d'écran</translation> + </message> + <message> + <source>Desktop</source> + <translation>Desktop</translation> + </message> + <message> + <source>Window Theme</source> + <translation>Thème Fenêtre</translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation>Options du système</translation> + </message> + <message> + <source>Restart</source> + <translation>Redémarrage</translation> + </message> + <message> + <source>Shutdown</source> + <translation>Éteindre</translation> + </message> + <message> + <source>Cancel</source> + <translation>Annuler</translation> + </message> + <message> + <source>Log Out</source> + <translation>Déconnexion</translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation>Supprimer Raccourci</translation> + </message> + <message> + <source>Create Shortcut</source> + <translation>Créer Raccourci</translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation>Forme</translation> + </message> + <message> + <source>Favorites</source> + <translation>Favoris</translation> + </message> + <message> + <source>Favorite Applications</source> + <translation>Applications Favorites</translation> + </message> + <message> + <source>Favorite Directories</source> + <translation>Répertoires favoris</translation> + </message> + <message> + <source>Favorite FIles</source> + <translation>Fichiers Favoris</translation> + </message> + <message> + <source>System Applications</source> + <translation>Applications du système</translation> + </message> + <message> + <source>Home</source> + <translation>Accueil</translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation>Préférences du Bureau</translation> + </message> + <message> + <source>Control Panel</source> + <translation>Panneau Contrôle</translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation>Bureau Apparence/Plugins</translation> + </message> + <message> + <source>Application Appearance</source> + <translation>Application Apparence</translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation>Paramètres d'économiseur d'écran</translation> + </message> + <message> + <source>Multimedia</source> + <translation>Multimédia</translation> + </message> + <message> + <source>Development</source> + <translation>Développement</translation> + </message> + <message> + <source>Education</source> + <translation>Éducation</translation> + </message> + <message> + <source>Games</source> + <translation>Jeux</translation> + </message> + <message> + <source>Graphics</source> + <translation>Graphique</translation> + </message> + <message> + <source>Network</source> + <translation>Internet</translation> + </message> + <message> + <source>Office</source> + <translation>Bureautique</translation> + </message> + <message> + <source>Science</source> + <translation>Science</translation> + </message> + <message> + <source>Settings</source> + <translation>Paramétrages</translation> + </message> + <message> + <source>System</source> + <translation>Système</translation> + </message> + <message> + <source>Utility</source> + <translation>Utilitaires</translation> + </message> + <message> + <source>Unsorted</source> + <translation>Non triés</translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr_CA.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr_CA.ts new file mode 100644 index 00000000..638b0b05 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr_CA.ts @@ -0,0 +1,372 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation>Cliquez pour définir</translation> + </message> + <message> + <source>Select Application</source> + <translation>Sélectionnez une application</translation> + </message> + <message> + <source>Name:</source> + <translation>Nom:</translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation>Applications</translation> + </message> + <message> + <source>Multimedia</source> + <translation>Multimédia</translation> + </message> + <message> + <source>Development</source> + <translation>Développement</translation> + </message> + <message> + <source>Education</source> + <translation>Éducation</translation> + </message> + <message> + <source>Games</source> + <translation>Jeux</translation> + </message> + <message> + <source>Graphics</source> + <translation>Graphique</translation> + </message> + <message> + <source>Network</source> + <translation>Internet</translation> + </message> + <message> + <source>Office</source> + <translation>Bureautique</translation> + </message> + <message> + <source>Science</source> + <translation>Science</translation> + </message> + <message> + <source>Settings</source> + <translation>Paramétrages</translation> + </message> + <message> + <source>System</source> + <translation>Système</translation> + </message> + <message> + <source>Utility</source> + <translation>Utilitaires</translation> + </message> + <message> + <source>Unsorted</source> + <translation>Non triés</translation> + </message> + <message> + <source>Open Home</source> + <translation>Ouvrir Accueil</translation> + </message> + <message> + <source>Install Applications</source> + <translation>Installer des applications</translation> + </message> + <message> + <source>Control Panel</source> + <translation>Panneau Contrôle</translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation>%1 % (Charge)</translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation>%1 % (%2 Restant)</translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation>Audio</translation> + </message> + <message> + <source>Video</source> + <translation>Video</translation> + </message> + <message> + <source>Pictures</source> + <translation>Images</translation> + </message> + <message> + <source>Other Files</source> + <translation>Autres Fichiers</translation> + </message> + <message> + <source>Documents</source> + <translation>Documents</translation> + </message> + <message> + <source>Favorite Applications</source> + <translation>Applications Favorites</translation> + </message> + <message> + <source>Favorite Folders</source> + <translation>Dossiers Favoris</translation> + </message> + <message> + <source>Favorite Files</source> + <translation>Fichier Favoris</translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation>Terminal</translation> + </message> + <message> + <source>Log Out</source> + <translation>Déconnexion</translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation>Lumina Destop</translation> + </message> + <message> + <source>Workspace %1</source> + <translation>Espace de travail %1</translation> + </message> + <message> + <source>Browse System</source> + <translation>Parcourir système</translation> + </message> + <message> + <source>Lock Desktop</source> + <translation>Verrouillage du bureau </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation>Déverrouiller le bureau</translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation>Aligner Greffon sur la grille</translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation>Espace de travail %1</translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation>Forme</translation> + </message> + <message> + <source>System Volume</source> + <translation>Volume Système</translation> + </message> + <message> + <source>Screen Brightness</source> + <translation>Luminosité de l'écran</translation> + </message> + <message> + <source>Battery Status</source> + <translation>État de la batterie</translation> + </message> + <message> + <source>Workspace</source> + <translation>Espace de travail</translation> + </message> + <message> + <source>charging</source> + <translation>chargement</translation> + </message> + <message> + <source>%1 of %2</source> + <translation>%1 de %2</translation> + </message> + <message> + <source>Log Out</source> + <translation>Déconnexion</translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation>Lancer Mixeur Audio</translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation>Fermer la Fenêtre</translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation>Paramètres de bureau</translation> + </message> + <message> + <source>Screensaver</source> + <translation>Économiseur d'écran</translation> + </message> + <message> + <source>Desktop</source> + <translation>Desktop</translation> + </message> + <message> + <source>Window Theme</source> + <translation>Thème Fenêtre </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation>Options du système</translation> + </message> + <message> + <source>Restart</source> + <translation>Redémarrage</translation> + </message> + <message> + <source>Shutdown</source> + <translation>Éteindre</translation> + </message> + <message> + <source>Cancel</source> + <translation>Annuler</translation> + </message> + <message> + <source>Log Out</source> + <translation>Déconnexion</translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation>Supprimer Raccourci</translation> + </message> + <message> + <source>Create Shortcut</source> + <translation>Créer Raccourci</translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation>Forme</translation> + </message> + <message> + <source>Favorites</source> + <translation>Favoris</translation> + </message> + <message> + <source>Favorite Applications</source> + <translation>Applications Favorites</translation> + </message> + <message> + <source>Favorite Directories</source> + <translation>Répertoires favoris</translation> + </message> + <message> + <source>Favorite FIles</source> + <translation>Fichiers Favoris</translation> + </message> + <message> + <source>System Applications</source> + <translation>Applications du système</translation> + </message> + <message> + <source>Home</source> + <translation>Home</translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation>Préférences du Bureau</translation> + </message> + <message> + <source>Control Panel</source> + <translation>Panneau Contrôle</translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation>Bureau Apparence/Plugins</translation> + </message> + <message> + <source>Application Appearance</source> + <translation>Application Apparence</translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation>Paramètres d'économiseur d'écran</translation> + </message> + <message> + <source>Multimedia</source> + <translation>Multimédia</translation> + </message> + <message> + <source>Development</source> + <translation>Développement</translation> + </message> + <message> + <source>Education</source> + <translation>Éducation</translation> + </message> + <message> + <source>Games</source> + <translation>Jeux</translation> + </message> + <message> + <source>Graphics</source> + <translation>Graphique</translation> + </message> + <message> + <source>Network</source> + <translation>Internet</translation> + </message> + <message> + <source>Office</source> + <translation>Bureautique</translation> + </message> + <message> + <source>Science</source> + <translation>Science</translation> + </message> + <message> + <source>Settings</source> + <translation>Paramétrages</translation> + </message> + <message> + <source>System</source> + <translation>Système</translation> + </message> + <message> + <source>Utility</source> + <translation>Utilitaires</translation> + </message> + <message> + <source>Unsorted</source> + <translation>Non triés</translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_gl.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_gl.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_gl.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_he.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_he.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_he.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hi.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hi.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hi.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hr.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hr.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hr.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hu.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hu.ts new file mode 100644 index 00000000..1da91c5a --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hu.ts @@ -0,0 +1,373 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="hu_HU"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation>Kattintás a beállításhoz</translation> + </message> + <message> + <source>Select Application</source> + <translation>Alkalmazás kiválasztása</translation> + </message> + <message> + <source>Name:</source> + <translation>Név:</translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation>Alkalmazások</translation> + </message> + <message> + <source>Multimedia</source> + <translation>Multimédia</translation> + </message> + <message> + <source>Development</source> + <translation>Fejlesztés</translation> + </message> + <message> + <source>Education</source> + <translation>Oktatás</translation> + </message> + <message> + <source>Games</source> + <translation>Játékok</translation> + </message> + <message> + <source>Graphics</source> + <translation>Grafika</translation> + </message> + <message> + <source>Network</source> + <translation>Hálózat</translation> + </message> + <message> + <source>Office</source> + <translation>Iroda</translation> + </message> + <message> + <source>Science</source> + <translation>Tudomány</translation> + </message> + <message> + <source>Settings</source> + <translation>Beállítások</translation> + </message> + <message> + <source>System</source> + <translation>Rendszer</translation> + </message> + <message> + <source>Utility</source> + <translation>Segédeszközök</translation> + </message> + <message> + <source>Unsorted</source> + <translation>Nem rendszerezett</translation> + </message> + <message> + <source>Open Home</source> + <translation>Saját könyvtár megnyitása</translation> + </message> + <message> + <source>Install Applications</source> + <translation>Alkalmazások telepítése</translation> + </message> + <message> + <source>Control Panel</source> + <translation>Vezérlőpult</translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation>%1 % (Töltés)</translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation>%1 % (%2 fennmaradó)</translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation>Audió</translation> + </message> + <message> + <source>Video</source> + <translation>Videó</translation> + </message> + <message> + <source>Pictures</source> + <translation>Képek</translation> + </message> + <message> + <source>Other Files</source> + <translation>Egyéb fájlok</translation> + </message> + <message> + <source>Documents</source> + <translation>Dokumentumok</translation> + </message> + <message> + <source>Favorite Applications</source> + <translation>Kedvenc alkalmazások</translation> + </message> + <message> + <source>Favorite Folders</source> + <translation>Kedvenc mappák</translation> + </message> + <message> + <source>Favorite Files</source> + <translation>Kedvenc fájlok</translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation>Terminál</translation> + </message> + <message> + <source>Log Out</source> + <translation>Kijelentkezés</translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation>Lumina Desktop</translation> + </message> + <message> + <source>Workspace %1</source> + <translation>%1 munkaterület</translation> + </message> + <message> + <source>Browse System</source> + <translation>Rendszer böngészése</translation> + </message> + <message> + <source>Lock Desktop</source> + <translation>Asztal zárolása</translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation>Asztal zárolásának feloldása</translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished">Snap Plugins to Grid</translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation>%1 munkaterület</translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished">Form</translation> + </message> + <message> + <source>System Volume</source> + <translation>Rendszer hangereje</translation> + </message> + <message> + <source>Screen Brightness</source> + <translation>Képernyő világosság</translation> + </message> + <message> + <source>Battery Status</source> + <translation>Akkumulátor állapota</translation> + </message> + <message> + <source>Workspace</source> + <translation>Munkaterület</translation> + </message> + <message> + <source>charging</source> + <translation>töltés</translation> + </message> + <message> + <source>%1 of %2</source> + <translation>%1 / %2</translation> + </message> + <message> + <source>Log Out</source> + <translation>Kijelentkezés</translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation>Hangkeverő indítása</translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation>Ablak bezárása</translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation>Asztal beállításai</translation> + </message> + <message> + <source>Screensaver</source> + <translation>Képernyővédő</translation> + </message> + <message> + <source>Desktop</source> + <translation>Asztal</translation> + </message> + <message> + <source>Window Theme</source> + <translation>Ablaktéma</translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation>Rendszer opciók</translation> + </message> + <message> + <source>Restart</source> + <translation>Újraindítás</translation> + </message> + <message> + <source>Shutdown</source> + <translation>Leállítás</translation> + </message> + <message> + <source>Cancel</source> + <translation>Mégsem</translation> + </message> + <message> + <source>Log Out</source> + <translation>Kijelentkezés</translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation>Gyorsindító eltávolítása</translation> + </message> + <message> + <source>Create Shortcut</source> + <translation>Gyorsindító létrehozása</translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished">Nem rendszerezett</translation> + </message> + <message> + <source>Favorites</source> + <translation>Kedvencek</translation> + </message> + <message> + <source>Favorite Applications</source> + <translation>Kedvenc alkalmazások</translation> + </message> + <message> + <source>Favorite Directories</source> + <translation>Kedvenc könyvtárak</translation> + </message> + <message> + <source>Favorite FIles</source> + <translation>Kedvenc fájlok</translation> + </message> + <message> + <source>System Applications</source> + <translation>Rendszer alkalmazások</translation> + </message> + <message> + <source>Home</source> + <translation>Saját könyvtár +</translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation>Asztal beállításai</translation> + </message> + <message> + <source>Control Panel</source> + <translation>Vezérlőpult</translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation>Asztal megjelenése / pluginek</translation> + </message> + <message> + <source>Application Appearance</source> + <translation>Alkalmazások megjelenése</translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation>Képernyővédő beállításai</translation> + </message> + <message> + <source>Multimedia</source> + <translation>Multimédia</translation> + </message> + <message> + <source>Development</source> + <translation>Fejlesztés</translation> + </message> + <message> + <source>Education</source> + <translation>Oktatás</translation> + </message> + <message> + <source>Games</source> + <translation>Játékok</translation> + </message> + <message> + <source>Graphics</source> + <translation>Grafika</translation> + </message> + <message> + <source>Network</source> + <translation>Hálózat</translation> + </message> + <message> + <source>Office</source> + <translation>Iroda</translation> + </message> + <message> + <source>Science</source> + <translation>Tudomány</translation> + </message> + <message> + <source>Settings</source> + <translation>Beállítások</translation> + </message> + <message> + <source>System</source> + <translation>Rendszer</translation> + </message> + <message> + <source>Utility</source> + <translation>Segédeszközök</translation> + </message> + <message> + <source>Unsorted</source> + <translation>Nem rendszerezett</translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_id.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_id.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_id.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_is.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_is.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_is.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_it.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_it.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_it.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts new file mode 100644 index 00000000..36387363 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts @@ -0,0 +1,372 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation>クリックしてセットする</translation> + </message> + <message> + <source>Select Application</source> + <translation>アプリケーションを選択する</translation> + </message> + <message> + <source>Name:</source> + <translation>名前:</translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation>アプリケーション</translation> + </message> + <message> + <source>Multimedia</source> + <translation>マルチメディア</translation> + </message> + <message> + <source>Development</source> + <translation>開発</translation> + </message> + <message> + <source>Education</source> + <translation>教育</translation> + </message> + <message> + <source>Games</source> + <translation>ゲーム</translation> + </message> + <message> + <source>Graphics</source> + <translation>グラフィック</translation> + </message> + <message> + <source>Network</source> + <translation>ネットワーク</translation> + </message> + <message> + <source>Office</source> + <translation>オフィス</translation> + </message> + <message> + <source>Science</source> + <translation>科学</translation> + </message> + <message> + <source>Settings</source> + <translation>設定</translation> + </message> + <message> + <source>System</source> + <translation>システム</translation> + </message> + <message> + <source>Utility</source> + <translation>ユーティリティ</translation> + </message> + <message> + <source>Unsorted</source> + <translation>未分類</translation> + </message> + <message> + <source>Open Home</source> + <translation>ホームディレクトリーを開く</translation> + </message> + <message> + <source>Install Applications</source> + <translation>アプリケーションをインストールする</translation> + </message> + <message> + <source>Control Panel</source> + <translation>コントロールパネル</translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation>%1 % (充電しています)</translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation>%1 % (残り %2)</translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation>オーディオ</translation> + </message> + <message> + <source>Video</source> + <translation>ビデオ</translation> + </message> + <message> + <source>Pictures</source> + <translation>写真</translation> + </message> + <message> + <source>Other Files</source> + <translation>その他のファイル</translation> + </message> + <message> + <source>Documents</source> + <translation>文書</translation> + </message> + <message> + <source>Favorite Applications</source> + <translation>お気に入りのアプリケーション</translation> + </message> + <message> + <source>Favorite Folders</source> + <translation>お気に入りのフォルダー</translation> + </message> + <message> + <source>Favorite Files</source> + <translation>お気に入りのファイル</translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation>端末</translation> + </message> + <message> + <source>Log Out</source> + <translation>ログアウト</translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation>Lumina デスクトップ</translation> + </message> + <message> + <source>Workspace %1</source> + <translation>ワークスペース %1</translation> + </message> + <message> + <source>Browse System</source> + <translation>システムを閲覧する</translation> + </message> + <message> + <source>Lock Desktop</source> + <translation>デスクトップをロックする</translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation>デスクトップのロックを解除する</translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation>プラグインをグリッドに合わせる</translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation>ワークスペース %1</translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation>フォーム</translation> + </message> + <message> + <source>System Volume</source> + <translation>システムの音量</translation> + </message> + <message> + <source>Screen Brightness</source> + <translation>画面の明るさ</translation> + </message> + <message> + <source>Battery Status</source> + <translation>バッテリーの状態</translation> + </message> + <message> + <source>Workspace</source> + <translation>ワークスペース</translation> + </message> + <message> + <source>charging</source> + <translation>充電中</translation> + </message> + <message> + <source>%1 of %2</source> + <translation>%1 / %2</translation> + </message> + <message> + <source>Log Out</source> + <translation>ログアウト</translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation>オーディオミキサーを起動する</translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation>ウィンドウを閉じる</translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation>デスクトップの設定</translation> + </message> + <message> + <source>Screensaver</source> + <translation>スクリーンセーバー</translation> + </message> + <message> + <source>Desktop</source> + <translation>デスクトップ</translation> + </message> + <message> + <source>Window Theme</source> + <translation>ウィンドウのテーマ</translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation>システムオプション</translation> + </message> + <message> + <source>Restart</source> + <translation>再起動</translation> + </message> + <message> + <source>Shutdown</source> + <translation>シャットダウン</translation> + </message> + <message> + <source>Cancel</source> + <translation>キャンセル</translation> + </message> + <message> + <source>Log Out</source> + <translation>ログアウト</translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation>ショートカットを削除する</translation> + </message> + <message> + <source>Create Shortcut</source> + <translation>ショートカットを作成する</translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation>フォーム</translation> + </message> + <message> + <source>Favorites</source> + <translation>お気に入り</translation> + </message> + <message> + <source>Favorite Applications</source> + <translation>お気に入りのアプリケーション</translation> + </message> + <message> + <source>Favorite Directories</source> + <translation>お気に入りのディレクトリー</translation> + </message> + <message> + <source>Favorite FIles</source> + <translation>お気に入りのファイル</translation> + </message> + <message> + <source>System Applications</source> + <translation>システムのアプリケーション</translation> + </message> + <message> + <source>Home</source> + <translation>ホーム</translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation>デスクトップの設定</translation> + </message> + <message> + <source>Control Panel</source> + <translation>コントロールパネル</translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation>デスクトップの外観/プラグイン</translation> + </message> + <message> + <source>Application Appearance</source> + <translation>アプリケーションの外観</translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation>スクリーンセーバーの設定</translation> + </message> + <message> + <source>Multimedia</source> + <translation>マルチメディア</translation> + </message> + <message> + <source>Development</source> + <translation>開発</translation> + </message> + <message> + <source>Education</source> + <translation>教育</translation> + </message> + <message> + <source>Games</source> + <translation>ゲーム</translation> + </message> + <message> + <source>Graphics</source> + <translation>グラフィックス</translation> + </message> + <message> + <source>Network</source> + <translation>ネットワーク</translation> + </message> + <message> + <source>Office</source> + <translation>オフィス</translation> + </message> + <message> + <source>Science</source> + <translation>科学</translation> + </message> + <message> + <source>Settings</source> + <translation>設定</translation> + </message> + <message> + <source>System</source> + <translation>システム</translation> + </message> + <message> + <source>Utility</source> + <translation>ユーティリティ</translation> + </message> + <message> + <source>Unsorted</source> + <translation>未分類</translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ka.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ka.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ka.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ko.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ko.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ko.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lt.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lt.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lt.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lv.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lv.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lv.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mk.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mk.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mk.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mn.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mn.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mn.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ms.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ms.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ms.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mt.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mt.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mt.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nb.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nb.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nb.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nl.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nl.ts new file mode 100644 index 00000000..2e1ab6cb --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nl.ts @@ -0,0 +1,372 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation>Klik om in te stellen</translation> + </message> + <message> + <source>Select Application</source> + <translation>Selecteer applicatie</translation> + </message> + <message> + <source>Name:</source> + <translation>Naam:</translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation>Applicaties</translation> + </message> + <message> + <source>Multimedia</source> + <translation>Multimedia</translation> + </message> + <message> + <source>Development</source> + <translation>Ontwikkeling</translation> + </message> + <message> + <source>Education</source> + <translation>Educatie</translation> + </message> + <message> + <source>Games</source> + <translation>Spellen</translation> + </message> + <message> + <source>Graphics</source> + <translation>Grafisch</translation> + </message> + <message> + <source>Network</source> + <translation>Netwerk</translation> + </message> + <message> + <source>Office</source> + <translation>Kantoor</translation> + </message> + <message> + <source>Science</source> + <translation>Wetenschap</translation> + </message> + <message> + <source>Settings</source> + <translation>Instellingen</translation> + </message> + <message> + <source>System</source> + <translation>Systeem</translation> + </message> + <message> + <source>Utility</source> + <translation>Hulpprogramma's</translation> + </message> + <message> + <source>Unsorted</source> + <translation>Niet gesorteerd</translation> + </message> + <message> + <source>Open Home</source> + <translation>Open huis</translation> + </message> + <message> + <source>Install Applications</source> + <translation>Installeer applicaties</translation> + </message> + <message> + <source>Control Panel</source> + <translation>Beheer paneel</translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation>%1 % (Laden)</translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation>%1 % (%2 Resterend)</translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation>Geluid</translation> + </message> + <message> + <source>Video</source> + <translation>Video</translation> + </message> + <message> + <source>Pictures</source> + <translation>Foto's</translation> + </message> + <message> + <source>Other Files</source> + <translation>Overige bestanden</translation> + </message> + <message> + <source>Documents</source> + <translation>Documenten</translation> + </message> + <message> + <source>Favorite Applications</source> + <translation>Favoriete applicaties</translation> + </message> + <message> + <source>Favorite Folders</source> + <translation>Favorite mappen</translation> + </message> + <message> + <source>Favorite Files</source> + <translation>Favoriete bestanden</translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation>Terminal</translation> + </message> + <message> + <source>Log Out</source> + <translation>Uitloggen</translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation>Lumina bureaublad</translation> + </message> + <message> + <source>Workspace %1</source> + <translation>Werkplek %1</translation> + </message> + <message> + <source>Browse System</source> + <translation>Blader door systeem</translation> + </message> + <message> + <source>Lock Desktop</source> + <translation>Vergrendel bureaublad</translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation>Ontgrendel bureaublad</translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation>Bind plugin aan rooster</translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation>Werkplek %1</translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation>Formulier</translation> + </message> + <message> + <source>System Volume</source> + <translation>Systeem geluids volume</translation> + </message> + <message> + <source>Screen Brightness</source> + <translation>Scherm helderheid</translation> + </message> + <message> + <source>Battery Status</source> + <translation>Batterij status</translation> + </message> + <message> + <source>Workspace</source> + <translation>Werkplek</translation> + </message> + <message> + <source>charging</source> + <translation>aan het opladen</translation> + </message> + <message> + <source>%1 of %2</source> + <translation>%1 van %2</translation> + </message> + <message> + <source>Log Out</source> + <translation>Uitloggen</translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation>Start audio mengpaneel</translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation>Scherm sluiten</translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation>Bureaublad instellingen</translation> + </message> + <message> + <source>Screensaver</source> + <translation>Schermbeveiliging</translation> + </message> + <message> + <source>Desktop</source> + <translation>Bureaublad</translation> + </message> + <message> + <source>Window Theme</source> + <translation>Scherm thema</translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation>System opties</translation> + </message> + <message> + <source>Restart</source> + <translation>Herstart</translation> + </message> + <message> + <source>Shutdown</source> + <translation>Afsluiten</translation> + </message> + <message> + <source>Cancel</source> + <translation>Annuleren</translation> + </message> + <message> + <source>Log Out</source> + <translation>Uitloggen</translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation>Verwijder snelkoppeling</translation> + </message> + <message> + <source>Create Shortcut</source> + <translation>Snelkoppeling aanmaken</translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation>Formulier</translation> + </message> + <message> + <source>Favorites</source> + <translation>Favorieten</translation> + </message> + <message> + <source>Favorite Applications</source> + <translation>Favoriete applicaties</translation> + </message> + <message> + <source>Favorite Directories</source> + <translation>Favoriete mappen</translation> + </message> + <message> + <source>Favorite FIles</source> + <translation>Favoriete bestanden</translation> + </message> + <message> + <source>System Applications</source> + <translation>System applicaties</translation> + </message> + <message> + <source>Home</source> + <translation>Thuis</translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation>Bureaublad voorkeuren</translation> + </message> + <message> + <source>Control Panel</source> + <translation>Beheer paneel</translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation>Bureaublad uiterlijk/plugins</translation> + </message> + <message> + <source>Application Appearance</source> + <translation>Applicatie uiterlijk</translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation>Schermbeveiliging instellingen</translation> + </message> + <message> + <source>Multimedia</source> + <translation>Multimedia</translation> + </message> + <message> + <source>Development</source> + <translation>Ontwikkeling</translation> + </message> + <message> + <source>Education</source> + <translation>Educatie</translation> + </message> + <message> + <source>Games</source> + <translation>Spellen</translation> + </message> + <message> + <source>Graphics</source> + <translation>Grafisch</translation> + </message> + <message> + <source>Network</source> + <translation>Netwerk</translation> + </message> + <message> + <source>Office</source> + <translation>Kantoor</translation> + </message> + <message> + <source>Science</source> + <translation>Wetenschap</translation> + </message> + <message> + <source>Settings</source> + <translation>Instellingen</translation> + </message> + <message> + <source>System</source> + <translation>Systeem</translation> + </message> + <message> + <source>Utility</source> + <translation>Hulpprogramma's</translation> + </message> + <message> + <source>Unsorted</source> + <translation>Niet gesorteerd</translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pa.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pa.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pa.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt_BR.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt_BR.ts new file mode 100644 index 00000000..7e1e2b2b --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt_BR.ts @@ -0,0 +1,408 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation>Aplicativos</translation> + </message> + <message> + <source>Multimedia</source> + <translation>Multimídia</translation> + </message> + <message> + <source>Development</source> + <translation>Desenvolvimento</translation> + </message> + <message> + <source>Education</source> + <translation>Educação</translation> + </message> + <message> + <source>Games</source> + <translation>Jogos</translation> + </message> + <message> + <source>Graphics</source> + <translation>Gráficos</translation> + </message> + <message> + <source>Network</source> + <translation>Rede</translation> + </message> + <message> + <source>Office</source> + <translation>Escritório</translation> + </message> + <message> + <source>Science</source> + <translation>Ciência</translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished">Configurações</translation> + </message> + <message> + <source>System</source> + <translation>Sistema</translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished">Utilitários</translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished">Sem classificação</translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished">%1 % (Carregando)</translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation>%1 % (%2 Restantes)</translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation>Áudio</translation> + </message> + <message> + <source>Video</source> + <translation>Vídeo</translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished">Fotos</translation> + </message> + <message> + <source>Other Files</source> + <translation>Outros arquivos</translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation>Terminal</translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished">Encerrar</translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished">Lumina Desktop</translation> + </message> + <message> + <source>Workspace %1</source> + <translation>Espaço de trabalho %1</translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation>Espaço de trabalho %1</translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished">Encerrar</translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation>Fechar janela</translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation>Configurações da área de trabalho</translation> + </message> + <message> + <source>Screensaver</source> + <translation>Protetor de tela</translation> + </message> + <message> + <source>Desktop</source> + <translation>Área de trabalho</translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation>Opções do sistema</translation> + </message> + <message> + <source>Restart</source> + <translation>Reiniciar</translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished">Desligar</translation> + </message> + <message> + <source>Cancel</source> + <translation>Cancelar</translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished">Encerrar</translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished">Início</translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished">Multimídia</translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished">Desenvolvimento</translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished">Educação</translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished">Jogos</translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished">Gráficos</translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished">Rede</translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished">Escritório</translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished">Ciência</translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished">Configurações</translation> + </message> + <message> + <source>System</source> + <translation type="unfinished">Sistema</translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished">Utilitários</translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished">Sem classificação</translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ro.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ro.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ro.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ru.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ru.ts new file mode 100644 index 00000000..cfcbc18f --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ru.ts @@ -0,0 +1,405 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation>Приложения</translation> + </message> + <message> + <source>Multimedia</source> + <translation>Мультимедиа</translation> + </message> + <message> + <source>Development</source> + <translation>Разработка</translation> + </message> + <message> + <source>Education</source> + <translation>Образование</translation> + </message> + <message> + <source>Games</source> + <translation>Игры</translation> + </message> + <message> + <source>Graphics</source> + <translation>Графика</translation> + </message> + <message> + <source>Network</source> + <translation>Сети</translation> + </message> + <message> + <source>Office</source> + <translation>Офис</translation> + </message> + <message> + <source>Science</source> + <translation>Наука</translation> + </message> + <message> + <source>Settings</source> + <translation>Параметры</translation> + </message> + <message> + <source>System</source> + <translation>Система</translation> + </message> + <message> + <source>Utility</source> + <translation>Инструменты</translation> + </message> + <message> + <source>Unsorted</source> + <translation>Не классифицированные </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished">%1 % (Заряжается)</translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished">%1 % (Осталось %2 )</translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation>Звук</translation> + </message> + <message> + <source>Video</source> + <translation>Видео</translation> + </message> + <message> + <source>Pictures</source> + <translation>Изображения</translation> + </message> + <message> + <source>Other Files</source> + <translation>Прочие файлы</translation> + </message> + <message> + <source>Documents</source> + <translation>Документы</translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation>Терминал</translation> + </message> + <message> + <source>Log Out</source> + <translation>Завершить сеанс</translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished">Рабочий стол Lumina</translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished">Рабочая область %1</translation> + </message> + <message> + <source>Browse System</source> + <translation>Обзор системы</translation> + </message> + <message> + <source>Lock Desktop</source> + <translation>Заблокировать рабочий стол</translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation>Разблокировать рабочий стол</translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished">Рабочий стол %1</translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished">Завершить сеанс</translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation>Закрыть окно</translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation>Настройки рабочего стола</translation> + </message> + <message> + <source>Screensaver</source> + <translation>Заставка экрана</translation> + </message> + <message> + <source>Desktop</source> + <translation>Рабочий стол</translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation>Параметры системы</translation> + </message> + <message> + <source>Restart</source> + <translation>Перезагрузить…</translation> + </message> + <message> + <source>Shutdown</source> + <translation>Выключить…</translation> + </message> + <message> + <source>Cancel</source> + <translation>Отмена</translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished">Завершить сеанс</translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished">Мультимедиа</translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished">Разработка</translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished">Образование</translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished">Игры</translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished">Графика</translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished">Сети</translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished">Офис</translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished">Наука</translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished">Параметры</translation> + </message> + <message> + <source>System</source> + <translation type="unfinished">Система</translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished">Инструменты</translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished">Не классифицированные </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sk.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sk.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sk.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sl.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sl.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sl.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sr.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sr.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sr.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sv.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sv.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sv.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sw.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sw.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sw.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ta.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ta.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ta.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tg.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tg.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tg.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_th.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_th.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_th.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tr.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tr.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tr.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uk.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uk.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uk.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uz.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uz.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uz.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_vi.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_vi.ts new file mode 100644 index 00000000..4e2e8773 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_vi.ts @@ -0,0 +1,408 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation>ứng dụng</translation> + </message> + <message> + <source>Multimedia</source> + <translation>đa phương</translation> + </message> + <message> + <source>Development</source> + <translation>Phát triển</translation> + </message> + <message> + <source>Education</source> + <translation>Giáo dục</translation> + </message> + <message> + <source>Games</source> + <translation>Trò chơi</translation> + </message> + <message> + <source>Graphics</source> + <translation>đồ họa</translation> + </message> + <message> + <source>Network</source> + <translation>Mạng</translation> + </message> + <message> + <source>Office</source> + <translation>Văn phòng</translation> + </message> + <message> + <source>Science</source> + <translation>Khoa học</translation> + </message> + <message> + <source>Settings</source> + <translation>Các thiết lập</translation> + </message> + <message> + <source>System</source> + <translation>Hệ thống</translation> + </message> + <message> + <source>Utility</source> + <translation>Tiện ích</translation> + </message> + <message> + <source>Unsorted</source> + <translation>Phân loại</translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation>% 1% (Sạc)</translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation>%1 % (%2 còn lại)</translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation>âm thanh</translation> + </message> + <message> + <source>Video</source> + <translation>Video</translation> + </message> + <message> + <source>Pictures</source> + <translation>Hình ảnh</translation> + </message> + <message> + <source>Other Files</source> + <translation>Tập tin khác</translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation>Terminal</translation> + </message> + <message> + <source>Log Out</source> + <translation>Nhập Thoát</translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation>Lumina để bàn</translation> + </message> + <message> + <source>Workspace %1</source> + <translation>Không gian làm việc %1</translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation>Không gian làm việc %1</translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished">Nhập Thoát</translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation>Đóng cửa sổ</translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation>Các thiết lập để bàn</translation> + </message> + <message> + <source>Screensaver</source> + <translation>Bảo vệ màn hình</translation> + </message> + <message> + <source>Desktop</source> + <translation>Dể bàn</translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation>Tùy chọn hệ thống</translation> + </message> + <message> + <source>Restart</source> + <translation>Khởi động lại</translation> + </message> + <message> + <source>Shutdown</source> + <translation>Tắt máy </translation> + </message> + <message> + <source>Cancel</source> + <translation>Bỏ tem</translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished">Nhập Thoát</translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation>Nhà</translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished">đa phương</translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished">Phát triển</translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished">Giáo dục</translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished">Trò chơi</translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished">đồ họa</translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished">Mạng</translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished">Văn phòng</translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished">Khoa học</translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished">Các thiết lập</translation> + </message> + <message> + <source>System</source> + <translation type="unfinished">Hệ thống</translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished">Tiện ích</translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished">Phân loại</translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_CN.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_CN.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_CN.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_HK.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_HK.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_HK.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_TW.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_TW.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_TW.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zu.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zu.ts new file mode 100644 index 00000000..2a73bbc0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zu.ts @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>AppLauncherPlugin</name> + <message> + <source>Click to Set</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Select Application</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Name:</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>AppMenu</name> + <message> + <source>Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Open Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Install Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LBattery</name> + <message> + <source>%1 % (Charging)</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 % (%2 Remaining)</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDeskBarPlugin</name> + <message> + <source>Audio</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Video</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Pictures</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Other Files</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Documents</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Folders</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Files</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktop</name> + <message> + <source>Terminal</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lumina Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Browse System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Lock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unlock Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Snap Plugins to Grid</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LDesktopSwitcher</name> + <message> + <source>Workspace %1</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LSysMenuQuick</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Volume</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screen Brightness</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Battery Status</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Workspace</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>charging</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>%1 of %2</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Launch Audio Mixer</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>LTaskButton</name> + <message> + <source>Close Window</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SettingsMenu</name> + <message> + <source>Desktop Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Window Theme</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>SystemWindow</name> + <message> + <source>System Options</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Restart</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Shutdown</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Cancel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Log Out</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserItemWidget</name> + <message> + <source>Remove Shortcut</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Create Shortcut</source> + <translation type="unfinished"> + </translation> + </message> +</context> +<context> + <name>UserWidget</name> + <message> + <source>Form</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorites</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite Directories</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Favorite FIles</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System Applications</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Preferences</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Control Panel</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Desktop Appearance/Plugins</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Application Appearance</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Screensaver Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Multimedia</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Development</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Education</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Games</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Graphics</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Network</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Office</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Science</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Settings</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>System</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Utility</source> + <translation type="unfinished"> + </translation> + </message> + <message> + <source>Unsorted</source> + <translation type="unfinished"> + </translation> + </message> +</context> +</TS> diff --git a/src-qt5/core/lumina-desktop/images/desktop-background.jpg b/src-qt5/core/lumina-desktop/images/desktop-background.jpg Binary files differnew file mode 100644 index 00000000..976e2417 --- /dev/null +++ b/src-qt5/core/lumina-desktop/images/desktop-background.jpg diff --git a/src-qt5/core/lumina-desktop/images/sample-colorschemes.ui b/src-qt5/core/lumina-desktop/images/sample-colorschemes.ui new file mode 100644 index 00000000..bc9d9972 --- /dev/null +++ b/src-qt5/core/lumina-desktop/images/sample-colorschemes.ui @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Form</class> + <widget class="QWidget" name="Form"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>300</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <widget class="QLabel" name="label"> + <property name="geometry"> + <rect> + <x>250</x> + <y>50</y> + <width>111</width> + <height>31</height> + </rect> + </property> + <property name="styleSheet"> + <string notr="true">QLabel{ background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(241, 233, 156, 240), stop:0.505682 rgba(255, 243, 127, 180), stop:1 rgba(221, 246, 255, 55)); border: 1px solid grey; border-radius: 5px;}</string> + </property> + <property name="text"> + <string>Active</string> + </property> + </widget> + <widget class="QLabel" name="label_2"> + <property name="geometry"> + <rect> + <x>250</x> + <y>90</y> + <width>111</width> + <height>31</height> + </rect> + </property> + <property name="styleSheet"> + <string notr="true">QLabel{background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(255, 255, 255, 240), stop:0.505682 rgba(240, 240, 240, 180), stop:1 rgba(210, 210, 210, 55)); border: 1px solid grey; border-radius: 5px;}</string> + </property> + <property name="text"> + <string>Visible</string> + </property> + </widget> + <widget class="QLabel" name="label_3"> + <property name="geometry"> + <rect> + <x>250</x> + <y>130</y> + <width>111</width> + <height>31</height> + </rect> + </property> + <property name="styleSheet"> + <string notr="true">QLabel{ background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(215, 215, 215, 210), stop:0.505682 rgba(184, 185, 186, 150), stop:1 rgba(221, 246, 255, 55)); border: 1px solid grey; border-radius: 5px;}</string> + </property> + <property name="text"> + <string>Invisible</string> + </property> + </widget> + <widget class="QLabel" name="label_4"> + <property name="geometry"> + <rect> + <x>250</x> + <y>170</y> + <width>111</width> + <height>31</height> + </rect> + </property> + <property name="styleSheet"> + <string notr="true">QLabel{ background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(252, 187, 127, 210), stop:0.505682 rgba(255, 222, 197, 150), stop:1 rgba(221, 246, 255, 55)); border: 1px solid grey; border-radius: 5px; } + +</string> + </property> + <property name="text"> + <string>Notification</string> + </property> + </widget> + <widget class="QLabel" name="label_5"> + <property name="geometry"> + <rect> + <x>10</x> + <y>50</y> + <width>221</width> + <height>51</height> + </rect> + </property> + <property name="styleSheet"> + <string notr="true">QLabel{ background: qlineargradient(spread:pad, x1:0.291182, y1:0, x2:0.693, y2:1, stop:0 rgb(255, 253, 250), stop:1 rgb(230, 230, 230));}</string> + </property> + <property name="text"> + <string>Taskbar</string> + </property> + </widget> + <widget class="QLabel" name="label_6"> + <property name="geometry"> + <rect> + <x>10</x> + <y>220</y> + <width>381</width> + <height>41</height> + </rect> + </property> + <property name="styleSheet"> + <string notr="true">QLabel{ background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(178, 45, 39, 255), stop:0.471591 rgba(221, 173, 68, 255), stop:0.528409 rgba(215, 202, 124, 255), stop:1 rgba(189, 17, 17, 255)); border-radius: 5px; border: 1px solid rgb(233, 218, 5);}</string> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src-qt5/core/lumina-desktop/lumina-desktop.pro b/src-qt5/core/lumina-desktop/lumina-desktop.pro new file mode 100644 index 00000000..cfc175ef --- /dev/null +++ b/src-qt5/core/lumina-desktop/lumina-desktop.pro @@ -0,0 +1,167 @@ +include($${PWD}/../../OS-detect.pri) + +QT += core gui network +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets x11extras multimedia concurrent svg + + +TARGET = Lumina-DE +target.path = $${L_BINDIR} + + +LIBS += -lLuminaUtils -lxcb -lxcb-damage +DEPENDPATH += ../libLumina + +TEMPLATE = app + + +SOURCES += main.cpp \ + WMProcess.cpp \ + LXcbEventFilter.cpp \ + LSession.cpp \ + LDesktop.cpp \ + LDesktopPluginSpace.cpp \ + LPanel.cpp \ + LWinInfo.cpp \ + AppMenu.cpp \ + SettingsMenu.cpp \ + SystemWindow.cpp \ + BootSplash.cpp \ + desktop-plugins/LDPlugin.cpp \ + + +HEADERS += Globals.h \ + WMProcess.h \ + LXcbEventFilter.h \ + LSession.h \ + LDesktop.h \ + LDesktopPluginSpace.h \ + LPanel.h \ + LWinInfo.h \ + AppMenu.h \ + SettingsMenu.h \ + SystemWindow.h \ + BootSplash.h \ + panel-plugins/LPPlugin.h \ + panel-plugins/NewPP.h \ + panel-plugins/LTBWidget.h \ + desktop-plugins/LDPlugin.h \ + desktop-plugins/NewDP.h \ + +FORMS += SystemWindow.ui \ + BootSplash.ui + +#Now include all the files for the various plugins +include(panel-plugins/panel-plugins.pri) +include(desktop-plugins/desktop-plugins.pri) + +RESOURCES+= Lumina-DE.qrc + +desktop.path = $${L_SESSDIR} +desktop.files = Lumina-DE.desktop + +icons.files = Lumina-DE.png \ + Insight-FileManager.png +icons.path = $${L_SHAREDIR}/pixmaps + +fluxconf.files = fluxboxconf/fluxbox-init-rc \ + fluxboxconf/fluxbox-keys +fluxconf.path = $${L_SHAREDIR}/Lumina-DE/ + +wallpapers.files = wallpapers/Lumina_Wispy_gold.jpg \ + wallpapers/Lumina_Wispy_green.jpg \ + wallpapers/Lumina_Wispy_purple.jpg \ + wallpapers/Lumina_Wispy_red.jpg \ + wallpapers/Lumina_Wispy_blue-grey.jpg \ + wallpapers/Lumina_Wispy_blue-grey-zoom.jpg \ + wallpapers/Lumina_Wispy_grey-blue.jpg \ + wallpapers/Lumina_Wispy_grey-blue-zoom.jpg +wallpapers.path = $${L_SHAREDIR}/wallpapers/Lumina-DE + + +defaults.files = defaults/luminaDesktop.conf \ + audiofiles/Logout.ogg \ + audiofiles/Login.ogg +defaults.path = $${L_SHAREDIR}/Lumina-DE/ + +conf.path = $${L_ETCDIR} + +#Now do any PC-BSD defaults (if set) +PCBSD{ + conf.extra = cp defaults/luminaDesktop.pcbsd.conf $(INSTALL_ROOT)$${L_ETCDIR}/luminaDesktop.conf.dist + defaults.extra = cp defaults/desktop-background.pcbsd.jpg $(INSTALL_ROOT)$${L_SHAREDIR}/Lumina-DE/desktop-background.jpg +}else{ + conf.extra = cp defaults/luminaDesktop.conf $(INSTALL_ROOT)$${L_ETCDIR}/luminaDesktop.conf.dist + defaults.extra = cp defaults/desktop-background.jpg $(INSTALL_ROOT)$${L_SHAREDIR}/Lumina-DE/desktop-background.jpg +} + +TRANSLATIONS = i18n/lumina-desktop_af.ts \ + i18n/lumina-desktop_ar.ts \ + i18n/lumina-desktop_az.ts \ + i18n/lumina-desktop_bg.ts \ + i18n/lumina-desktop_bn.ts \ + i18n/lumina-desktop_bs.ts \ + i18n/lumina-desktop_ca.ts \ + i18n/lumina-desktop_cs.ts \ + i18n/lumina-desktop_cy.ts \ + i18n/lumina-desktop_da.ts \ + i18n/lumina-desktop_de.ts \ + i18n/lumina-desktop_el.ts \ + i18n/lumina-desktop_en_GB.ts \ + i18n/lumina-desktop_en_ZA.ts \ + i18n/lumina-desktop_es.ts \ + i18n/lumina-desktop_et.ts \ + i18n/lumina-desktop_eu.ts \ + i18n/lumina-desktop_fa.ts \ + i18n/lumina-desktop_fi.ts \ + i18n/lumina-desktop_fr.ts \ + i18n/lumina-desktop_fr_CA.ts \ + i18n/lumina-desktop_gl.ts \ + i18n/lumina-desktop_he.ts \ + i18n/lumina-desktop_hi.ts \ + i18n/lumina-desktop_hr.ts \ + i18n/lumina-desktop_hu.ts \ + i18n/lumina-desktop_id.ts \ + i18n/lumina-desktop_is.ts \ + i18n/lumina-desktop_it.ts \ + i18n/lumina-desktop_ja.ts \ + i18n/lumina-desktop_ka.ts \ + i18n/lumina-desktop_ko.ts \ + i18n/lumina-desktop_lt.ts \ + i18n/lumina-desktop_lv.ts \ + i18n/lumina-desktop_mk.ts \ + i18n/lumina-desktop_mn.ts \ + i18n/lumina-desktop_ms.ts \ + i18n/lumina-desktop_mt.ts \ + i18n/lumina-desktop_nb.ts \ + i18n/lumina-desktop_nl.ts \ + i18n/lumina-desktop_pa.ts \ + i18n/lumina-desktop_pl.ts \ + i18n/lumina-desktop_pt.ts \ + i18n/lumina-desktop_pt_BR.ts \ + i18n/lumina-desktop_ro.ts \ + i18n/lumina-desktop_ru.ts \ + i18n/lumina-desktop_sk.ts \ + i18n/lumina-desktop_sl.ts \ + i18n/lumina-desktop_sr.ts \ + i18n/lumina-desktop_sv.ts \ + i18n/lumina-desktop_sw.ts \ + i18n/lumina-desktop_ta.ts \ + i18n/lumina-desktop_tg.ts \ + i18n/lumina-desktop_th.ts \ + i18n/lumina-desktop_tr.ts \ + i18n/lumina-desktop_uk.ts \ + i18n/lumina-desktop_uz.ts \ + i18n/lumina-desktop_vi.ts \ + i18n/lumina-desktop_zh_CN.ts \ + i18n/lumina-desktop_zh_HK.ts \ + i18n/lumina-desktop_zh_TW.ts \ + i18n/lumina-desktop_zu.ts + +dotrans.path=$${L_SHAREDIR}/Lumina-DE/i18n/ +dotrans.extra=cd i18n && $${LRELEASE} -nounfinished *.ts && cp *.qm $(INSTALL_ROOT)$${L_SHAREDIR}/Lumina-DE/i18n/ + +INSTALLS += target desktop icons wallpapers defaults conf fluxconf dotrans + +NO_I18N{ + INSTALLS -= dotrans +} diff --git a/src-qt5/core/lumina-desktop/main.cpp b/src-qt5/core/lumina-desktop/main.cpp new file mode 100644 index 00000000..50ad7ef4 --- /dev/null +++ b/src-qt5/core/lumina-desktop/main.cpp @@ -0,0 +1,104 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2012, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include <QDebug> +//#include <QApplication> +#include <QFile> +#include <QDir> +#include <QString> +#include <QTextStream> +//#include <QDesktopWidget> +//#include <QList> +//#include <QDebug> +#include <QUrl> + + +#include "LSession.h" +#include "Globals.h" + +#include <LuminaXDG.h> //from libLuminaUtils +#include <LuminaThemes.h> +#include <LuminaOS.h> +#include <LuminaUtils.h> + +#define DEBUG 0 + +QFile logfile(QDir::homePath()+"/.lumina/logs/runtime.log"); +void MessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg){ + QString txt; + switch(type){ + case QtDebugMsg: + txt = QString("Debug: %1").arg(msg); + break; + case QtWarningMsg: + txt = QString("Warning: %1").arg(msg); + txt += "\nContext: "+QString(context.file)+" Line: "+QString(context.line)+" Function: "+QString(context.function); + break; + case QtCriticalMsg: + txt = QString("CRITICAL: %1").arg(msg); + txt += "\nContext: "+QString(context.file)+" Line: "+QString(context.line)+" Function: "+QString(context.function); + break; + case QtFatalMsg: + txt = QString("FATAL: %1").arg(msg); + txt += "\nContext: "+QString(context.file)+" Line: "+QString(context.line)+" Function: "+QString(context.function); + break; + } + + QTextStream out(&logfile); + out << txt; + if(!txt.endsWith("\n")){ out << "\n"; } +} + +int main(int argc, char ** argv) +{ + if (argc > 1) { + if (QString(argv[1]) == QString("--version")){ + qDebug() << LUtils::LuminaDesktopVersion(); + return 0; + } + } + if(!QFile::exists(LOS::LuminaShare())){ + qDebug() << "Lumina does not appear to be installed correctly. Cannot find: " << LOS::LuminaShare(); + return 1; + } + //Setup any pre-QApplication initialization values + LTHEME::LoadCustomEnvSettings(); + LXDG::setEnvironmentVars(); + setenv("DESKTOP_SESSION","Lumina",1); + setenv("XDG_CURRENT_DESKTOP","Lumina",1); + unsetenv("QT_QPA_PLATFORMTHEME"); //causes issues with Lumina themes - not many people have this by default... + //Startup the session + LSession a(argc, argv); + if(!a.isPrimaryProcess()){ return 0; } + //Setup the log file + qDebug() << "Lumina Log File:" << logfile.fileName(); + if(QFile::exists(logfile.fileName()+".old")){ QFile::remove(logfile.fileName()+".old"); } + if(logfile.exists()){ QFile::rename(logfile.fileName(), logfile.fileName()+".old"); } + //Make sure the parent directory exists + if(!QFile::exists(QDir::homePath()+"/.lumina/logs")){ + QDir dir; + dir.mkpath(QDir::homePath()+"/.lumina/logs"); + } + logfile.open(QIODevice::WriteOnly | QIODevice::Append); + QTime *timer=0; + if(DEBUG){ timer = new QTime(); timer->start(); } + //Setup Log File + qInstallMessageHandler(MessageOutput); + if(DEBUG){ qDebug() << "Theme Init:" << timer->elapsed(); } + LuminaThemeEngine theme(&a); + QObject::connect(&theme, SIGNAL(updateIcons()), &a, SLOT(reloadIconTheme()) ); + //if(DEBUG){ qDebug() << "Load Locale:" << timer->elapsed(); } + //LUtils::LoadTranslation(&a, "lumina-desktop"); + if(DEBUG){ qDebug() << "Session Setup:" << timer->elapsed(); } + a.setupSession(); + theme.refresh(); + if(DEBUG){ qDebug() << "Exec Time:" << timer->elapsed(); delete timer;} + int retCode = a.exec(); + //qDebug() << "Stopping the window manager"; + qDebug() << "Finished Closing Down Lumina"; + logfile.close(); + return retCode; +} diff --git a/src-qt5/core/lumina-desktop/panel-plugins/LPPlugin.h b/src-qt5/core/lumina-desktop/panel-plugins/LPPlugin.h new file mode 100644 index 00000000..c4c76297 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/LPPlugin.h @@ -0,0 +1,77 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This class is the generic container layout for all panel plugins +// Simply subclass this when creating a new plugin to enable correct +// visibility and usage within a panel +//=========================================== +#ifndef _LUMINA_DESKTOP_PANEL_PLUGIN_H +#define _LUMINA_DESKTOP_PANEL_PLUGIN_H + +#include <QObject> +#include <QWidget> +#include <QString> +#include <QBoxLayout> +#include <QApplication> + +class LPPlugin : public QWidget{ + Q_OBJECT + +private: + QBoxLayout *LY; + QString plugintype; + +public: + LPPlugin(QWidget *parent = 0, QString ptype="unknown", bool horizontal = true) : QWidget(parent){ + plugintype=ptype; + this->setContentsMargins(1,1,1,1); + this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); + this->setFocusPolicy(Qt::NoFocus); //no keyboard focus on the panel/plugins + if(horizontal){LY = new QBoxLayout(QBoxLayout::LeftToRight, this); } + else{ LY = new QBoxLayout(QBoxLayout::TopToBottom, this); } + this->setObjectName(ptype.section("---",0,0)); + LY->setContentsMargins(0,0,0,0); + LY->setSpacing(1); + this->setLayout(LY); + connect(QApplication::instance(), SIGNAL(LocaleChanged()), this, SLOT(LocaleChange()) ); + connect(QApplication::instance(), SIGNAL(IconThemeChanged()), this, SLOT(ThemeChange()) ); + } + + ~LPPlugin(){ + } + + QBoxLayout* layout(){ + return LY; + } + + QString type(){ + return plugintype; + } + + virtual void AboutToClose(){ + //This needs to be re-implemented in the subclasses plugin + //This is for any last-minute cleanup before the plugin gets deleted + } + +public slots: + virtual void LocaleChange(){ + //This needs to be re-implemented in the subclassed plugin + //This is where all text is set/translated + } + virtual void ThemeChange(){ + //This needs to be re-implemented in the subclasses plugin + //This is where all the visuals are set if using Theme-dependant icons. + } + virtual void OrientationChange(){ + //This needs to be re-implemented in the subclasses plugin + //This is where any horizontal/vertical orientations can be changed appropriately + } + +signals: + void MenuClosed(); //This needs to be emitted when any plugin's menu is closed for some reason (check/set focus properly) +}; + +#endif diff --git a/src-qt5/core/lumina-desktop/panel-plugins/LTBWidget.h b/src-qt5/core/lumina-desktop/panel-plugins/LTBWidget.h new file mode 100644 index 00000000..560e5811 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/LTBWidget.h @@ -0,0 +1,71 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2013, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef _LUMINA_TOOLBAR_WIDGET_H +#define _LUMINA_TOOLBAR_WIDGET_H + +#include <QToolButton> +#include <QEvent> +#include <QWheelEvent> + +#include "Globals.h" +#include <LuminaX11.h> + +class LTBWidget : public QToolButton{ + Q_OBJECT + +private: + LXCB::WINDOWVISIBILITY cstate; + //QString rawstyle; + void updateBackground(){ + //QString background = "background: transparent; "; //default value + //QString border = "border: 1px solid transparent;"; + if(cstate == LXCB::IGNORE){ this->setObjectName(""); } //just use the defaults + else if(cstate == LXCB::VISIBLE){ this->setObjectName("WindowVisible"); }//background = "background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(255, 255, 255, 240), stop:0.505682 rgba(240, 240, 240, 150), stop:1 rgba(210, 210, 210, 55));"; border="border: 1px solid transparent;"; } + else if(cstate == LXCB::INVISIBLE){this->setObjectName("WindowInvisible"); } //background = "background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(215, 215, 215, 240), stop:0.505682 rgba(184, 185, 186, 150), stop:1 rgba(221, 246, 255, 55));"; border="border: 1px solid transparent;"; } + else if(cstate == LXCB::ACTIVE){ this->setObjectName("WindowActive"); }//background= "background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(241, 233, 156, 240), stop:0.355682 rgba(255, 243, 127, 150), stop:1 rgba(221, 246, 255, 55));"; border ="border: 1px solid transparent;"; } + else if(cstate == LXCB::ATTENTION){ this->setObjectName("WindowAttention"); }//background= "background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(252, 187, 127, 240), stop:0.505682 rgba(255, 222, 197, 150), stop:1 rgba(221, 246, 255, 55));"; border="border: 1px solid transparent;"; } + this->setStyleSheet(""); //force the object to re-evaluate the current theme stylesheet and update visuals + //QString raw = rawstyle; + //this->setStyleSheet( raw.replace("%1",background).replace("%2", border) ); + } + +signals: + + void wheelScroll(int change); + +public: + LTBWidget(QWidget* parent) : QToolButton(parent){ + //this->setStyleSheet( this->styleSheet()+" LTBWidget::menu-indicator{image: none;}"); + cstate = LXCB::IGNORE; + + this->setPopupMode(QToolButton::InstantPopup); + this->setAutoRaise(true); + + //rawstyle = "LTBWidget{ %1 %2 border-radius: 5px;} LTBWidget::menu-indicator{image: none;} LTBWidget::hover{ %1 border: 1px solid black; border-radius: 5px; } LTBWidget::menu-button{ background: transparent; width: 15px; } LTBWidget[popupMode=\"1\"]{%1 %2 border-radius: 5px; padding-right: 15px;} LTBWidget[popupMode=\"1\"]::hover{%1 border: 1px solid black; border-radius: 5px; padding-right: 15px}"; + updateBackground(); + } + + ~LTBWidget(){ + } + + void setState(LXCB::WINDOWVISIBILITY newstate){ + cstate = newstate; + updateBackground(); + } + +public slots: + + +protected: + void wheelEvent(QWheelEvent *event){ + int change = event->delta()/120; // 1/15th of a rotation (delta/120) is usually one "click" of the wheel + emit wheelScroll(change); + } + +}; + +#endif diff --git a/src-qt5/core/lumina-desktop/panel-plugins/NewPP.h b/src-qt5/core/lumina-desktop/panel-plugins/NewPP.h new file mode 100644 index 00000000..50bf2232 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/NewPP.h @@ -0,0 +1,75 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This class is the interface to load all the different panel plugins +//=========================================== +#ifndef _LUMINA_DESKTOP_NEW_PANEL_PLUGIN_H +#define _LUMINA_DESKTOP_NEW_PANEL_PLUGIN_H + +#include <QDebug> + +//List all the individual plugin includes here +#include "LPPlugin.h" +#include "userbutton/LUserButton.h" +#include "desktopbar/LDeskBar.h" +#include "spacer/LSpacer.h" +#include "line/LLine.h" +#include "clock/LClock.h" +#include "battery/LBattery.h" +#include "desktopswitcher/LDesktopSwitcher.h" +#include "taskmanager/LTaskManagerPlugin.h" +#include "systemdashboard/LSysDashboard.h" +#include "showdesktop/LHomeButton.h" +#include "appmenu/LAppMenuPlugin.h" +#include "applauncher/AppLaunchButton.h" +#include "systemstart/LStartButton.h" +//#include "quickcontainer/QuickPPlugin.h" +#include "systemtray/LSysTray.h" //must be last due to X11 compile issues + +class NewPP{ +public: + static LPPlugin* createPlugin(QString plugin, QWidget* parent = 0, bool horizontal = true){ + LPPlugin *plug = 0; + if(plugin.startsWith("userbutton---")){ + plug = new LUserButtonPlugin(parent, plugin, horizontal); + }else if(plugin.startsWith("homebutton---")){ + plug = new LHomeButtonPlugin(parent, plugin, horizontal); + }else if(plugin.startsWith("desktopbar---")){ + plug = new LDeskBarPlugin(parent, plugin, horizontal); + }else if(plugin.startsWith("spacer---")){ + plug = new LSpacerPlugin(parent, plugin, horizontal); + }else if(plugin.startsWith("line---")){ + plug = new LLinePlugin(parent, plugin, horizontal); + }else if(plugin.startsWith("taskmanager")){ + //This one can be "taskmanager[-nogroups]---" + plug = new LTaskManagerPlugin(parent, plugin, horizontal); + }else if(plugin.startsWith("systemtray---")){ + plug = new LSysTray(parent, plugin, horizontal); + }else if(plugin.startsWith("desktopswitcher---")){ + plug = new LDesktopSwitcher(parent, plugin, horizontal); + }else if(plugin.startsWith("battery---")){ + plug = new LBattery(parent, plugin, horizontal); + }else if(plugin.startsWith("clock---")){ + plug = new LClock(parent, plugin, horizontal); + }else if(plugin.startsWith("systemdashboard---")){ + plug = new LSysDashboard(parent, plugin, horizontal); + }else if(plugin.startsWith("appmenu---")){ + plug = new LAppMenuPlugin(parent, plugin, horizontal); + }else if(plugin.startsWith("systemstart---")){ + plug = new LStartButtonPlugin(parent, plugin, horizontal); + }else if(plugin.section("---",0,0).section("::",0,0)=="applauncher"){ + plug = new AppLaunchButtonPlugin(parent, plugin, horizontal); + //}else if( plugin.section("---",0,0).startsWith("quick-") && LUtils::validQuickPlugin(plugin.section("---",0,0)) ){ + //plug = new QuickPPlugin(parent, plugin, horizontal); + }else{ + qWarning() << "Invalid Panel Plugin:"<<plugin << " -- Ignored"; + } + return plug; + } + +}; + +#endif diff --git a/src-qt5/core/lumina-desktop/panel-plugins/applauncher/AppLaunchButton.cpp b/src-qt5/core/lumina-desktop/panel-plugins/applauncher/AppLaunchButton.cpp new file mode 100644 index 00000000..321970ed --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/applauncher/AppLaunchButton.cpp @@ -0,0 +1,74 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "AppLaunchButton.h" +#include "../../LSession.h" + +#include <LuminaXDG.h> +#include <QInputDialog> + +AppLaunchButtonPlugin::AppLaunchButtonPlugin(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){ + button = new QToolButton(this); + button->setAutoRaise(true); + button->setToolButtonStyle(Qt::ToolButtonIconOnly); + appfile = id.section("---",0,0).section("::",1,1); + if(!QFile::exists(appfile)){ appfile.clear(); } + connect(button, SIGNAL(clicked()), this, SLOT(AppClicked())); + this->layout()->setContentsMargins(0,0,0,0); + this->layout()->addWidget(button); + + QTimer::singleShot(0,this, SLOT(OrientationChange())); //Update icons/sizes +} + +AppLaunchButtonPlugin::~AppLaunchButtonPlugin(){ + +} + +void AppLaunchButtonPlugin::updateButtonVisuals(){ + QIcon icon; + QString tooltip = tr("Click to assign an application"); + if(appfile.endsWith(".desktop")){ + bool ok = false; + XDGDesktop desk = LXDG::loadDesktopFile(appfile,ok); + if(ok){ + icon = LXDG::findIcon(desk.icon, "unknown"); + tooltip = QString(tr("Launch %1")).arg(desk.name); + }else{ + icon = LXDG::findIcon("task-attention",""); + appfile.clear(); + } + }else if(QFile::exists(appfile)){ + icon = LXDG::findMimeIcon(appfile.section("/",-1)); + tooltip = QString(tr("Open %1")).arg(appfile.section("/",-1)); + }else{ + icon = LXDG::findIcon("task-attention", ""); + } + button->setIcon( icon ); + button->setToolTip(tooltip); +} + +// ======================== +// PRIVATE FUNCTIONS +// ======================== +void AppLaunchButtonPlugin::AppClicked(){ + if(appfile.isEmpty()){ + //No App File selected + QList<XDGDesktop> apps = LSession::handle()->applicationMenu()->currentAppHash()->value("All"); + QStringList names; + for(int i=0; i<apps.length(); i++){ names << apps[i].name; } + bool ok = false; + QString app = QInputDialog::getItem(this, tr("Select Application"), tr("Name:"), names, 0, false, &ok); + if(!ok || names.indexOf(app)<0){ return; } //cancelled + appfile = apps[ names.indexOf(app) ].filePath; + //Still need to find a way to set this value persistently + // --- perhaps replace the plugin in the desktop settings file with the new path? + // --- "applauncher::broken---<something>" -> "applauncher::fixed---<something>" ? + QTimer::singleShot(0,this, SLOT(updateButtonVisuals())); + }else{ + LSession::LaunchApplication("lumina-open \""+appfile+"\""); + } +} + diff --git a/src-qt5/core/lumina-desktop/panel-plugins/applauncher/AppLaunchButton.h b/src-qt5/core/lumina-desktop/panel-plugins/applauncher/AppLaunchButton.h new file mode 100644 index 00000000..3aa3c7ad --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/applauncher/AppLaunchButton.h @@ -0,0 +1,63 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This panel plugin is a simple button to launch a single application +//=========================================== +#ifndef _LUMINA_DESKTOP_LAUNCH_APP_PANEL_PLUGIN_H +#define _LUMINA_DESKTOP_LAUNCH_APP_PANEL_PLUGIN_H + +// Qt includes +#include <QToolButton> +#include <QString> +#include <QWidget> + + +// Lumina-desktop includes +#include "../LPPlugin.h" //main plugin widget + +// libLumina includes +#include "LuminaXDG.h" + +// PANEL PLUGIN BUTTON +class AppLaunchButtonPlugin : public LPPlugin{ + Q_OBJECT + +public: + AppLaunchButtonPlugin(QWidget *parent = 0, QString id = "applauncher", bool horizontal=true); + ~AppLaunchButtonPlugin(); + +private: + QToolButton *button; + QString appfile; + + void updateButtonVisuals(); + +private slots: + void AppClicked(); + +public slots: + void OrientationChange(){ + if(this->layout()->direction()==QBoxLayout::LeftToRight){ + this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding); + button->setIconSize( QSize(this->height(), this->height()) ); + }else{ + this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); + button->setIconSize( QSize(this->width(), this->width()) ); + } + this->layout()->update(); + updateButtonVisuals(); + } + + void LocaleChange(){ + updateButtonVisuals(); + } + + void ThemeChange(){ + updateButtonVisuals(); + } +}; + +#endif
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/panel-plugins/appmenu/LAppMenuPlugin.cpp b/src-qt5/core/lumina-desktop/panel-plugins/appmenu/LAppMenuPlugin.cpp new file mode 100644 index 00000000..318d03fa --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/appmenu/LAppMenuPlugin.cpp @@ -0,0 +1,134 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LAppMenuPlugin.h" +#include "../../LSession.h" + +#include <LuminaXDG.h> + +LAppMenuPlugin::LAppMenuPlugin(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){ + button = new QToolButton(this); + button->setAutoRaise(true); + button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + mainmenu = new QMenu(this); + button->setMenu( mainmenu ); + button->setPopupMode(QToolButton::InstantPopup); + this->layout()->setContentsMargins(0,0,0,0); + this->layout()->addWidget(button); + + connect(mainmenu, SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed())); + connect(mainmenu, SIGNAL(triggered(QAction*)), this, SLOT(LaunchItem(QAction*)) ); + connect(LSession::handle()->applicationMenu(), SIGNAL(AppMenuUpdated()), this, SLOT(UpdateMenu())); + QTimer::singleShot(0,this, SLOT(OrientationChange())); //Update icons/sizes + QTimer::singleShot(0,this, SLOT(UpdateMenu()) ); +} + +LAppMenuPlugin::~LAppMenuPlugin(){ + +} + +void LAppMenuPlugin::updateButtonVisuals(){ + button->setToolTip( tr("Quickly launch applications or open files")); + button->setText( tr("Applications") ); + //Use the PC-BSD icon by default (or the Lumina icon for non-PC-BSD systems) + button->setIcon( LXDG::findIcon("pcbsd","Lumina-DE") ); +} + +// ======================== +// PRIVATE FUNCTIONS +// ======================== +void LAppMenuPlugin::LaunchItem(QAction* item){ + QString appFile = item->whatsThis(); + if(appFile.startsWith("internal::")){ + appFile = appFile.section("::",1,50); //cut off the "internal" flag + if(appFile=="logout"){ LSession::handle()->systemWindow(); } + }else if(!appFile.isEmpty()){ + LSession::LaunchApplication("lumina-open "+appFile); + } +} + +void LAppMenuPlugin::UpdateMenu(){ + mainmenu->clear(); + QHash<QString, QList<XDGDesktop> > *HASH = LSession::handle()->applicationMenu()->currentAppHash(); + //Now Re-create the menu (orignally copied from the AppMenu class) + bool ok; //for checking inputs + //Add link to the file manager + QAction *tmpact = mainmenu->addAction( LXDG::findIcon("user-home", ""), tr("Browse Files") ); + tmpact->setWhatsThis("\""+QDir::homePath()+"\""); + //--Look for the app store + XDGDesktop store = LXDG::loadDesktopFile(LOS::AppStoreShortcut(), ok); + if(ok){ + tmpact = mainmenu->addAction( LXDG::findIcon(store.icon, ""), tr("Install Applications") ); + tmpact->setWhatsThis("\""+store.filePath+"\""); + } + //--Look for the control panel + store = LXDG::loadDesktopFile(LOS::ControlPanelShortcut(), ok); + if(ok){ + tmpact = mainmenu->addAction( LXDG::findIcon(store.icon, ""), tr("Control Panel") ); + tmpact->setWhatsThis("\""+store.filePath+"\""); + } + mainmenu->addSeparator(); + //--Now create the sub-menus + QStringList cats = HASH->keys(); + cats.sort(); //make sure they are alphabetical + for(int i=0; i<cats.length(); i++){ + //Make sure they are translated and have the right icons + QString name, icon; + if(cats[i]=="All"){continue; } //skip this listing for the menu + else if(cats[i] == "Multimedia"){ name = tr("Multimedia"); icon = "applications-multimedia"; } + else if(cats[i] == "Development"){ name = tr("Development"); icon = "applications-development"; } + else if(cats[i] == "Education"){ name = tr("Education"); icon = "applications-education"; } + else if(cats[i] == "Game"){ name = tr("Games"); icon = "applications-games"; } + else if(cats[i] == "Graphics"){ name = tr("Graphics"); icon = "applications-graphics"; } + else if(cats[i] == "Network"){ name = tr("Network"); icon = "applications-internet"; } + else if(cats[i] == "Office"){ name = tr("Office"); icon = "applications-office"; } + else if(cats[i] == "Science"){ name = tr("Science"); icon = "applications-science"; } + else if(cats[i] == "Settings"){ name = tr("Settings"); icon = "preferences-system"; } + else if(cats[i] == "System"){ name = tr("System"); icon = "applications-system"; } + else if(cats[i] == "Utility"){ name = tr("Utility"); icon = "applications-utilities"; } + else if(cats[i] == "Wine"){ name = tr("Wine"); icon = "wine"; } + else{ name = tr("Unsorted"); icon = "applications-other"; } + + QMenu *menu = new QMenu(name, this); + menu->setIcon(LXDG::findIcon(icon,"")); + QList<XDGDesktop> appL = HASH->value(cats[i]); + for( int a=0; a<appL.length(); a++){ + if(appL[a].actions.isEmpty()){ + //Just a single entry point - no extra actions + QAction *act = new QAction(LXDG::findIcon(appL[a].icon, ""), appL[a].name, menu); + act->setToolTip(appL[a].comment); + act->setWhatsThis("\""+appL[a].filePath+"\""); + menu->addAction(act); + }else{ + //This app has additional actions - make this a sub menu + // - first the main menu/action + QMenu *submenu = new QMenu(appL[a].name, menu); + submenu->setIcon( LXDG::findIcon(appL[a].icon,"") ); + //This is the normal behavior - not a special sub-action (although it needs to be at the top of the new menu) + QAction *act = new QAction(LXDG::findIcon(appL[a].icon, ""), appL[a].name, submenu); + act->setToolTip(appL[a].comment); + act->setWhatsThis(appL[a].filePath); + submenu->addAction(act); + //Now add entries for every sub-action listed + for(int sa=0; sa<appL[a].actions.length(); sa++){ + QAction *sact = new QAction(LXDG::findIcon(appL[a].actions[sa].icon, appL[a].icon), appL[a].actions[sa].name, this); + sact->setToolTip(appL[a].comment); + sact->setWhatsThis("-action \""+appL[a].actions[sa].ID+"\" \""+appL[a].filePath+"\""); + submenu->addAction(sact); + } + menu->addMenu(submenu); + } + }//end loop over apps within this category + mainmenu->addMenu(menu); + } //end loop over categories + //Now add any logout options + mainmenu->addSeparator(); + //QMenu *tmpmenu = mainmenu->addMenu(LXDG::findIcon("system-log-out",""), tr("Leave")); + tmpact =mainmenu->addAction(LXDG::findIcon("system-log-out"),tr("Leave")); + tmpact->setWhatsThis("internal::logout"); + +} + diff --git a/src-qt5/core/lumina-desktop/panel-plugins/appmenu/LAppMenuPlugin.h b/src-qt5/core/lumina-desktop/panel-plugins/appmenu/LAppMenuPlugin.h new file mode 100644 index 00000000..36cd8605 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/appmenu/LAppMenuPlugin.h @@ -0,0 +1,63 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This panel plugin is a re-creation of the classic "start" menu +//=========================================== +#ifndef _LUMINA_DESKTOP_APP_MENU_PANEL_PLUGIN_H +#define _LUMINA_DESKTOP_APP_MENU_PANEL_PLUGIN_H + +// Qt includes +#include <QMenu> +#include <QToolButton> +#include <QString> +#include <QWidget> + + +// Lumina-desktop includes +#include "../LPPlugin.h" //main plugin widget + + +// PANEL PLUGIN BUTTON +class LAppMenuPlugin : public LPPlugin{ + Q_OBJECT + +public: + LAppMenuPlugin(QWidget *parent = 0, QString id = "appmenu", bool horizontal=true); + ~LAppMenuPlugin(); + +private: + QToolButton *button; + QMenu *mainmenu; + + void updateButtonVisuals(); + +private slots: + void LaunchItem(QAction* item); + void UpdateMenu(); + +public slots: + void OrientationChange(){ + if(this->layout()->direction()==QBoxLayout::LeftToRight){ + this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding); + button->setIconSize( QSize(this->height(), this->height()) ); + }else{ + this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); + button->setIconSize( QSize(this->width(), this->width()) ); + } + this->layout()->update(); + updateButtonVisuals(); + } + + void LocaleChange(){ + updateButtonVisuals(); + } + + void ThemeChange(){ + updateButtonVisuals(); + } +}; + +#endif
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.cpp b/src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.cpp new file mode 100644 index 00000000..dda32ecd --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.cpp @@ -0,0 +1,106 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Susanne Jaeckel +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LBattery.h" + +LBattery::LBattery(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){ + iconOld = -1; + //Setup the widget + label = new QLabel(this); + label->setScaledContents(true); + //label->setAlignment(Qt::AlignCenter); + this->layout()->addWidget(label); + //Setup the timer + timer = new QTimer(); + timer->setInterval(5000); //update every 5 seconds + connect(timer,SIGNAL(timeout()), this, SLOT(updateBattery()) ); + timer->start(); + QTimer::singleShot(0,this,SLOT(OrientationChange()) ); //update the sizing/icon +} + +LBattery::~LBattery(){ + timer->stop(); + delete timer; +} + +void LBattery::updateBattery(bool force){ + // Get current state of charge + //QStringList result = LUtils::getCmdOutput("/usr/sbin/apm", QStringList() << "-al"); + int charge = LOS::batteryCharge(); //result.at(1).toInt(); +//qDebug() << "1: " << result.at(0).toInt() << " 2: " << result.at(1).toInt(); + int icon = -1; + if (charge > 90) { icon = 4; } + else if (charge > 70) { icon = 3; } + else if (charge > 50) { icon = 2; } + else if (charge > 30) { icon = 1; } + else if (charge > 0 ) { icon = 0; } + if(LOS::batteryIsCharging()){ icon = icon+10; } + //icon = icon + result.at(0).toInt() * 10; + if (icon != iconOld || force) { + switch (icon) { + case 0: + label->setPixmap( LXDG::findIcon("battery-caution", "").pixmap(label->size()) ); + break; + case 1: + label->setPixmap( LXDG::findIcon("battery-040", "").pixmap(label->size()) ); + break; + case 2: + label->setPixmap( LXDG::findIcon("battery-060", "").pixmap(label->size()) ); + break; + case 3: + label->setPixmap( LXDG::findIcon("battery-080", "").pixmap(label->size()) ); + break; + case 4: + label->setPixmap( LXDG::findIcon("battery-100", "").pixmap(label->size()) ); + break; + case 10: + label->setPixmap( LXDG::findIcon("battery-charging-caution", "").pixmap(label->size()) ); + break; + case 11: + label->setPixmap( LXDG::findIcon("battery-charging-040", "").pixmap(label->size()) ); + break; + case 12: + label->setPixmap( LXDG::findIcon("battery-charging-060", "").pixmap(label->size()) ); + break; + case 13: + label->setPixmap( LXDG::findIcon("battery-charging-080", "").pixmap(label->size()) ); + break; + case 14: + label->setPixmap( LXDG::findIcon("battery-charging", "").pixmap(label->size()) ); + break; + default: + label->setPixmap( LXDG::findIcon("battery-missing", "").pixmap(label->size()) ); + break; + } + iconOld = icon; + } + //Now update the display + QString tt; + //Make sure the tooltip can be properly translated as necessary (Ken Moore 5/9/14) + if(icon > 9 && icon < 15){ tt = QString(tr("%1 % (Charging)")).arg(QString::number(charge)); } + else{ tt = QString( tr("%1 % (%2 Remaining)") ).arg(QString::number(charge), getRemainingTime() ); } + label->setToolTip(tt); +} + +QString LBattery::getRemainingTime(){ + int secs = LOS::batterySecondsLeft(); + if(secs < 0){ return "??"; } + QString rem; //remaining + if(secs > 3600){ + int hours = secs/3600; + rem.append( QString::number(hours)+"h "); + secs = secs - (hours*3600); + } + if(secs > 60){ + int min = secs/60; + rem.append( QString::number(min)+"m "); + secs = secs - (min*60); + } + if(secs > 0){ + rem.append(QString::number(secs)+"s"); + } + return rem; +} diff --git a/src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.h b/src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.h new file mode 100644 index 00000000..3d31faad --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.h @@ -0,0 +1,53 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Susanne Jaeckel +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef _LUMINA_DESKTOP_BATTERY_H +#define _LUMINA_DESKTOP_BATTERY_H + +#include <QTimer> +#include <QWidget> +#include <QString> +#include <QLabel> + +#include <LuminaUtils.h> +#include <LuminaXDG.h> +#include <LuminaOS.h> + +#include "../../Globals.h" +//#include "../LTBWidget.h" +#include "../LPPlugin.h" + +class LBattery : public LPPlugin{ + Q_OBJECT +public: + LBattery(QWidget *parent = 0, QString id = "battery", bool horizontal=true); + ~LBattery(); + +private: + QTimer *timer; + QLabel *label; + int iconOld; + +private slots: + void updateBattery(bool force = false); + QString getRemainingTime(); + +public slots: + void LocaleChange(){ + updateBattery(true); + } + + void OrientationChange(){ + if(this->layout()->direction()==QBoxLayout::LeftToRight){ + label->setFixedSize( QSize(this->height(), this->height()) ); + }else{ + label->setFixedSize( QSize(this->width(), this->width()) ); + } + updateBattery(true); //force icon refresh + } +}; + +#endif diff --git a/src-qt5/core/lumina-desktop/panel-plugins/battery/NOTES b/src-qt5/core/lumina-desktop/panel-plugins/battery/NOTES new file mode 100644 index 00000000..3ea07778 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/battery/NOTES @@ -0,0 +1,49 @@ +Eventuell mit einem Menü implementieren, mit Einträgen für: +Anzeige des kompletten Status und Infos +Herunterfahren des Systems etc. + +apm -a + Zeigt den AC line status an + 0 = off-line + 1 = on-line + 2 = backup-power + +apm -b + Zeigt + 0 = high + 1 = low + 2 = critical + 3 = charging + +apm -l + Zeit die prozentuale Kapazitaet + 255 = nicht unterstuetzt + +apm -t + Zeigt die verbleibende Zeit in Sekunden + +Aufruf Systemfunktionen: LuminaUtils.h + +mit der Methode: +QStringList LUtils::getCmdOutput(QString cmd, QStringList args) + +Icons: +/usr/local/share/icons/oxygen/22x22/status +oder unter: +/usr/local/share/icons/oxygen/16x16/status + +battery-040.png // 40 % +battery-060.png +battery-080.png +battery-100.png + +battery-caution.png +battery-charging.png +battery-charging-040.png +battery-charging-060.png +battery-charging-080.png +battery-charging-caution.png + +battery-charging-log.png +battery-log.png +battery-missing.png diff --git a/src-qt5/core/lumina-desktop/panel-plugins/clock/LClock.cpp b/src-qt5/core/lumina-desktop/panel-plugins/clock/LClock.cpp new file mode 100644 index 00000000..0ecef3b2 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/clock/LClock.cpp @@ -0,0 +1,214 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2012-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LClock.h" +#include "LSession.h" +#include <LuminaThemes.h> +#include <LuminaXDG.h> + +LClock::LClock(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){ + button = new QToolButton(this); + button->setAutoRaise(true); + button->setToolButtonStyle(Qt::ToolButtonTextOnly); + button->setStyleSheet("font-weight: bold;"); + button->setPopupMode(QToolButton::DelayedPopup); //make sure it runs the update routine first + button->setMenu(new QMenu()); + //button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); + //this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); + connect(button, SIGNAL(clicked()), this, SLOT(openMenu())); + connect(button->menu(), SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed())); + calendar = new QCalendarWidget(this); + calAct = new QWidgetAction(this); + calAct->setDefaultWidget(calendar); + TZMenu = new QMenu(this); + connect(TZMenu, SIGNAL(triggered(QAction*)), this, SLOT(ChangeTZ(QAction*)) ); + + //Now assemble the menu + button->menu()->addAction(calAct); + button->menu()->addMenu(TZMenu); + + this->layout()->setContentsMargins(0,0,0,0); //reserve some space on left/right + this->layout()->addWidget(button); + + //Setup the timer + timer = new QTimer(); + //Load all the initial settings + updateFormats(); + LocaleChange(); + ThemeChange(); + OrientationChange(); + //Now connect/start the timer + connect(timer,SIGNAL(timeout()), this, SLOT(updateTime()) ); + connect(QApplication::instance(), SIGNAL(SessionConfigChanged()), this, SLOT(updateFormats()) ); + timer->start(); +} + +LClock::~LClock(){ + timer->stop(); + delete timer; +} + + +void LClock::updateTime(bool adjustformat){ + QDateTime CT = QDateTime::currentDateTime(); + //Now update the display + QString label; + QString timelabel; + QString datelabel; + if(deftime){ timelabel = CT.time().toString(Qt::DefaultLocaleShortDate) ; } + else{ timelabel=CT.toString(timefmt); } + if(defdate){ datelabel = CT.date().toString(Qt::DefaultLocaleShortDate); } + else{ datelabel = CT.toString(datefmt); } + if(datetimeorder == "dateonly"){ + label = datelabel; + button->setToolTip(timelabel); + }else if(datetimeorder == "timedate"){ + label = timelabel + "\n" + datelabel; + button->setToolTip(""); + }else if(datetimeorder == "datetime"){ + label = datelabel + "\n" + timelabel; + button->setToolTip(""); + }else{ + label = timelabel; + button->setToolTip(datelabel); + } + if( this->layout()->direction() == QBoxLayout::TopToBottom ){ + //different routine for vertical text (need newlines instead of spaces) + label.replace(" ","\n"); + } + if(adjustformat){ + //Check the font/spacing for the display and adjust as necessary + /*double efflines = label.count("\n")+1; //effective lines (with wordwrap) + if( (button->fontMetrics().height()*efflines) > button->height() ){ + //Force a pixel metric font size to fit everything + int szH = qRound( (button->height() - button->fontMetrics().lineSpacing() )/efflines ); + //Need to supply a *width* pixel, not a height metric + int szW = qRound( (szH*button->fontMetrics().maxWidth())/( (double) button->fontMetrics().height()) ); + qDebug() << "Change Clock font:" << button->height() << szH << szW << efflines << button->fontMetrics().height() << button->fontMetrics().lineSpacing(); + button->setStyleSheet("font-weight: bold; font-size: "+QString::number(szW)+"px;"); + }else{ + button->setStyleSheet("font-weight: bold;"); + }*/ + } + button->setText(label); + +} + +void LClock::updateFormats(){ + qDebug() << "Updating clock format"; + timefmt = LSession::handle()->sessionSettings()->value("TimeFormat","").toString(); + datefmt = LSession::handle()->sessionSettings()->value("DateFormat","").toString(); + deftime = timefmt.simplified().isEmpty(); + defdate = datefmt.simplified().isEmpty(); + //Adjust the timer interval based on the smallest unit displayed + if(deftime){ timer->setInterval(500); } //1/2 second + else if(timefmt.contains("z")){ timer->setInterval(1); } //every millisecond (smallest unit) + else if(timefmt.contains("s")){ timer->setInterval(500); } //1/2 second + else if(timefmt.contains("m")){ timer->setInterval(2000); } //2 seconds + else{ timer->setInterval(1000); } //unknown format - use 1 second interval + datetimeorder = LSession::handle()->sessionSettings()->value("DateTimeOrder", "timeonly").toString().toLower(); + //this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); + updateTime(true); + //Now fix the size of the widget with the new size hint + this->setFixedWidth( this->sizeHint().width() +6); +} + +void LClock::updateMenu(){ + QDateTime cdt = QDateTime::currentDateTime(); + TZMenu->setTitle(QString(tr("Time Zone (%1)")).arg(cdt.timeZoneAbbreviation()) ); + calendar->showToday(); //make sure the current month is visible + calendar->setSelectedDate(QDate::currentDate()); //select the actual date for today +} + +void LClock::openMenu(){ + updateMenu(); + button->showMenu(); +} + +void LClock::closeMenu(){ + button->menu()->hide(); +} + +void LClock::ChangeTZ(QAction *act){ + LTHEME::setCustomEnvSetting("TZ",act->whatsThis()); + QTimer::singleShot(500, this, SLOT(updateTime()) ); +} + +void LClock::LocaleChange(){ + //Refresh all the time zone information + TZMenu->clear(); + TZMenu->addAction(tr("Use System Time")); + TZMenu->addSeparator(); + QList<QByteArray> TZList = QTimeZone::availableTimeZoneIds(); + //Orgnize time zones for smaller menus (Continent/Country/City) + // Note: id = Continent/City + QStringList info; + for(int i=0; i<TZList.length(); i++){ + QTimeZone tz(TZList[i]); + if(!QString(tz.id()).contains("/")){ continue; } + info << "::::"+QString(tz.id()).section("/",0,0)+"::::"+QLocale::countryToString(tz.country())+"::::"+QString(tz.id()).section("/",1,100).replace("_"," ")+"::::"+QString(tz.id()); + } + //Now sort alphabetically + info.sort(); + //Now create the menu tree + QString continent, country; //current continent/country + QMenu *tmpC=0; //continent menu + QMenu *tmpCM=0; //country menu + for(int i=0; i<info.length(); i++){ + //Check if different continent + if(info[i].section("::::",1,1)!=continent){ + if(tmpC!=0){ + if(tmpCM!=0 && !tmpCM->isEmpty()){ + tmpC->addMenu(tmpCM); + } + if(!tmpC->isEmpty()){ TZMenu->addMenu(tmpC); } + } + tmpC = new QMenu(this); + tmpC->setTitle(info[i].section("::::",1,1)); + tmpCM = new QMenu(this); + tmpCM->setTitle(info[i].section("::::",2,2)); + //Check if different country + }else if(info[i].section("::::",2,2)!=country){ + if(tmpC!=0 && tmpCM!=0 && !tmpCM->isEmpty()){ + tmpC->addMenu(tmpCM); + } + tmpCM = new QMenu(this); + tmpCM->setTitle(info[i].section("::::",2,2)); + } + //Now create the entry within the country menu + if(tmpCM!=0){ + QAction *act = new QAction(info[i].section("::::",3,3), this); + act->setWhatsThis(info[i].section("::::",4,4) ); + tmpCM->addAction(act); + } + //Save the values for the next run + continent = info[i].section("::::",1,1); + country = info[i].section("::::",2,2); + + if(i== info.length()-1){ + //last go through - save all menus + if(tmpCM!=0 && tmpC!=0 && !tmpCM->isEmpty()){ tmpC->addMenu(tmpCM); } + if(tmpC!=0 && !tmpC->isEmpty()){ TZMenu->addMenu(tmpC); } + } + } + +} + +void LClock::ThemeChange(){ + TZMenu->setIcon(LXDG::findIcon("clock","")); +} + +void LClock::OrientationChange(){ + if(this->layout()->direction()==QBoxLayout::LeftToRight){ + this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); + button->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); + }else{ + this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + } + updateTime(true); //re-adjust the font/spacings + this->layout()->update(); +} diff --git a/src-qt5/core/lumina-desktop/panel-plugins/clock/LClock.h b/src-qt5/core/lumina-desktop/panel-plugins/clock/LClock.h new file mode 100644 index 00000000..8131375d --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/clock/LClock.h @@ -0,0 +1,56 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2012-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef _LUMINA_DESKTOP_CLOCK_H +#define _LUMINA_DESKTOP_CLOCK_H + +#include <QTimer> +#include <QDateTime> +#include <QLabel> +#include <QWidget> +#include <QString> +#include <QLocale> +#include <QTimeZone> +#include <QCalendarWidget> +#include <QWidgetAction> +#include <QAction> +#include <QToolButton> +#include <QMenu> + +#include "../LPPlugin.h" + +class LClock : public LPPlugin{ + Q_OBJECT +public: + LClock(QWidget *parent = 0, QString id = "clock", bool horizontal=true); + ~LClock(); + +private: + QTimer *timer; + QToolButton *button; + QString timefmt, datefmt, datetimeorder; + bool deftime, defdate; + QMenu *TZMenu; + QCalendarWidget *calendar; + QWidgetAction *calAct; + +private slots: + void updateTime(bool adjustformat = false); + void updateFormats(); + + void updateMenu(); + void openMenu(); + void closeMenu(); + + void ChangeTZ(QAction*); + +public slots: + void LocaleChange(); + void ThemeChange(); + void OrientationChange(); +}; + +#endif diff --git a/src-qt5/core/lumina-desktop/panel-plugins/desktopbar/LDeskBar.cpp b/src-qt5/core/lumina-desktop/panel-plugins/desktopbar/LDeskBar.cpp new file mode 100644 index 00000000..0aa896ce --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/desktopbar/LDeskBar.cpp @@ -0,0 +1,247 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2012-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LDeskBar.h" +#include "../../LSession.h" + +LDeskBarPlugin::LDeskBarPlugin(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){ + this->layout()->setContentsMargins(0,0,0,0); + this->setStyleSheet( "QToolButton::menu-indicator{ image: none; } QToolButton{ padding: 0px; }"); + //Find the path to the desktop folder + if(QFile::exists(QDir::homePath()+"/Desktop")){ desktopPath = QDir::homePath()+"/Desktop"; } + else if(QFile::exists(QDir::homePath()+"/desktop")){ desktopPath = QDir::homePath()+"/desktop"; } + else{ desktopPath=""; } + //Make sure the favorites directory exists + if(!QFile::exists(QDir::homePath()+"/.lumina/favorites") ){ + QDir dir; + dir.mkpath(QDir::homePath()+"/.lumina/favorites"); + } + //Setup the filter lists for the different types of files + /*audioFilter <<"*.ogg"<<"*.mp3"<<"*.wav"<<"*.aif"<<"*.iff"<<"*.m3u"<<"*.m4a"<<"*.mid"<<"*.mpa"<<"*.ra"<<"*.wma"; + videoFilter <<"*.3g2"<<"*.3gp"<<"*.asf"<<"*.asx"<<"*.avi"<<"*.flv"<<"*.m4v"<<"*.mov"<<"*.mp4"<<"*.mpg"<<"*.rm"<<"*.srt"<<"*.swf"<<"*.vob"<<"*.wmv"; + pictureFilter <<"*.bmp"<<"*.dds"<<"*.gif"<<"*.jpg"<<"*.png"<<"*.psd"<<"*.thm"<<"*.tif"<<"*.tiff"<<"*.ai"<<"*.eps"<<"*.ps"<<"*.svg"<<"*.ico"; + docsFilter << "*.txt"<<"*.rtf"<<"*.doc"<<"*.docx"<<"*.odf"<<"*.pdf";*/ + //initialize the desktop bar items + initializeDesktop(); + //setup the directory watcher + watcher = new QFileSystemWatcher(this); + if(!desktopPath.isEmpty()){ + watcher->addPath(desktopPath); + watcher->addPath(QDir::homePath()+"/.lumina/favorites"); + } + connect(watcher, SIGNAL(directoryChanged(QString)), this, SLOT(desktopChanged()) ); + QTimer::singleShot(1,this, SLOT(desktopChanged()) ); //make sure to load it the first time + QTimer::singleShot(0,this, SLOT(OrientationChange()) ); //adjust sizes/layout + connect(QApplication::instance(), SIGNAL(DesktopFilesChanged()), this, SLOT(desktopChanged()) ); +} + +LDeskBarPlugin::~LDeskBarPlugin(){ + if(!desktopPath.isEmpty()){ + watcher->removePath(desktopPath); + disconnect(watcher); + } + delete watcher; + +} + +// ======================= +// PRIVATE FUNCTIONS +// ======================= +void LDeskBarPlugin::initializeDesktop(){ + //Applications on the desktop + appB = new QToolButton(this); + appB->setToolButtonStyle(Qt::ToolButtonIconOnly); + appB->setAutoRaise(true); + appB->setPopupMode(QToolButton::InstantPopup); + appM = new QMenu(this); + appB->setMenu(appM); + this->layout()->addWidget(appB); + connect(appM,SIGNAL(triggered(QAction*)),this,SLOT(ActionTriggered(QAction*)) ); + connect(appM, SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed())); + //Directories on the desktop + dirB = new QToolButton(this); + dirB->setToolButtonStyle(Qt::ToolButtonIconOnly); + dirB->setAutoRaise(true); + dirB->setPopupMode(QToolButton::InstantPopup); + dirM = new QMenu(this); + dirB->setMenu(dirM); + this->layout()->addWidget(dirB); + connect(dirM,SIGNAL(triggered(QAction*)),this,SLOT(ActionTriggered(QAction*)) ); + connect(dirM, SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed())); + //Audio Files on the desktop + audioM = new QMenu(this); + connect(audioM,SIGNAL(triggered(QAction*)),this,SLOT(ActionTriggered(QAction*)) ); + //Video Files on the desktop + videoM = new QMenu(this); + connect(videoM,SIGNAL(triggered(QAction*)),this,SLOT(ActionTriggered(QAction*)) ); + //Picture Files on the desktop + pictureM = new QMenu(this); + connect(pictureM,SIGNAL(triggered(QAction*)),this,SLOT(ActionTriggered(QAction*)) ); + //Other Files on the desktop + otherM = new QMenu(this); + connect(otherM,SIGNAL(triggered(QAction*)),this,SLOT(ActionTriggered(QAction*)) ); + docM = new QMenu(this); + connect(docM,SIGNAL(triggered(QAction*)), this,SLOT(ActionTriggered(QAction*)) ); + //All Files Button + fileB = new QToolButton(this); + fileB->setToolButtonStyle(Qt::ToolButtonIconOnly); + fileB->setAutoRaise(true); + fileB->setPopupMode(QToolButton::InstantPopup); + fileM = new QMenu(this); + fileB->setMenu(fileM); + this->layout()->addWidget(fileB); + + updateIcons(); //set all the text/icons +} + +QAction* LDeskBarPlugin::newAction(QString filepath, QString name, QString iconpath){ + return newAction(filepath, name, QIcon(iconpath)); +} + +QAction* LDeskBarPlugin::newAction(QString filepath, QString name, QIcon icon){ + QAction *act = new QAction(icon, name, this); + act->setWhatsThis(filepath); + return act; +} + +/*void LDeskBarPlugin::updateMenu(QMenu* menu, QFileInfoList files, bool trim){ + menu->clear(); + //re-create the menu (since it is hidden from view) + QStringList filevals; + for(int i=0; i<files.length(); i++){ + qDebug() << "New Menu Item:" << files[i].fileName(); + if(trim){ totals.removeAll(files[i]); } + filevals << files[i].fileName()+"::::"+files[i].canonicalFilePath(); + //menu->addAction( newAction( files[i].canonicalFilePath(), files[i].fileName(), "") ); + } + //Now sort the list by file name + filevals.sort(); + for(int i=0; i<filevals.length(); i++){ + menu->addAction( newAction( filevals[i].section("::::",1,1), filevals[i].section("::::",0,0), "") ); + } +}*/ + +// ======================= +// PRIVATE SLOTS +// ======================= +void LDeskBarPlugin::ActionTriggered(QAction* act){ + //Open up the file with the appropriate application + QString cmd = "lumina-open \""+act->whatsThis()+"\""; + qDebug() << "Open File:" << cmd; + LSession::LaunchApplication(cmd); +} + +void LDeskBarPlugin::desktopChanged(){ + QStringList newfavs = LUtils::listFavorites(); + if(lastHomeUpdate.isNull() || (QFileInfo(QDir::homePath()+"/Desktop").lastModified() > lastHomeUpdate) || newfavs!=favs ){ + favs = newfavs; + homefiles = LSession::handle()->DesktopFiles(); + lastHomeUpdate = QDateTime::currentDateTime(); + QStringList favitems = favs; + //Remember for format for favorites: <name>::::[app/dir/<mimetype>]::::<full path> + for(int i=0; i<homefiles.length(); i++){ + QString type; + if(homefiles[i].isDir()){ type="dir"; } + else if(homefiles[i].fileName().endsWith(".desktop")){ type="app"; } + else{ type=LXDG::findAppMimeForFile(homefiles[i].fileName()); } + favitems << homefiles[i].fileName()+"::::"+type+"::::"+homefiles[i].absoluteFilePath(); + //qDebug() << "Desktop Item:" << favitems.last(); + } + + favitems.sort(); //sort them alphabetically + //Now add the items to the lists + appM->clear(); + dirM->clear(); + audioM->clear(); + videoM->clear(); + pictureM->clear(); + docM->clear(); + otherM->clear(); + for(int i=0; i<favitems.length(); i++){ + QString type = favitems[i].section("::::",1,1); + QString name = favitems[i].section("::::",0,0); + QString path = favitems[i].section("::::",2,50); + if(type=="app"){ + //Add it to appM + bool ok = false; + XDGDesktop df = LXDG::loadDesktopFile(path, ok); + if(ok){ + if( LXDG::checkValidity(df) && !df.isHidden ){ + appM->addAction( newAction(df.filePath, df.name, LXDG::findIcon(df.icon, ":/images/default-application.png")) ); + } + } + }else if(type=="dir"){ + //Add it to dirM + dirM->addAction( newAction(path, name, LXDG::findIcon("folder","")) ); + }else if(type.startsWith("audio/")){ + //Add it to audioM + audioM->addAction( newAction(path, name, LXDG::findMimeIcon(type)) ); + }else if(type.startsWith("video/")){ + //Add it to videoM + videoM->addAction( newAction(path, name, LXDG::findMimeIcon(type)) ); + }else if(type.startsWith("image/")){ + //Add it to pictureM + if(LUtils::imageExtensions().contains(path.section("/",-1).section(".",-1).toLower()) ){ + pictureM->addAction( newAction(path, name, QIcon(path)) ); + }else{ + pictureM->addAction( newAction(path, name, LXDG::findMimeIcon(type)) ); + } + }else if(type.startsWith("text/")){ + //Add it to docM + docM->addAction( newAction(path, name, LXDG::findMimeIcon(type)) ); + }else{ + //Add it to otherM + otherM->addAction( newAction(path, name, LXDG::findMimeIcon(type)) ); + } + + } + + //Now update the file menu as appropriate + fileM->clear(); + if(!audioM->isEmpty()){ fileM->addMenu(audioM); } + if(!docM->isEmpty()){ fileM->addMenu(docM); } + if(!pictureM->isEmpty()){ fileM->addMenu(pictureM); } + if(!videoM->isEmpty()){ fileM->addMenu(videoM); } + if(!otherM->isEmpty()){ fileM->addMenu(otherM); } + //Check for a single submenu, and skip the main if need be + disconnect(fileB->menu(), SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed()) ); + if(fileM->actions().length()==1){ + if(!audioM->isEmpty()){ fileB->setMenu(audioM); } + else if(!pictureM->isEmpty()){ fileB->setMenu(pictureM); } + else if(!videoM->isEmpty()){ fileB->setMenu(videoM); } + else if(!docM->isEmpty()){ fileB->setMenu(docM); } + else if(!otherM->isEmpty()){ fileB->setMenu(otherM); } + }else{ + fileB->setMenu(fileM); + } + connect(fileB->menu(), SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed())); + } //end of check for if updates are needed + + //Setup the visibility of the buttons + appB->setVisible( !appM->isEmpty() ); + dirB->setVisible( !dirM->isEmpty() ); + fileB->setVisible( !fileM->isEmpty() ); +} + +void LDeskBarPlugin::updateIcons(){ + //Set all the text/icons + appB->setIcon( LXDG::findIcon("favorites", "") ); + appB->setToolTip(tr("Favorite Applications")); + dirB->setIcon( LXDG::findIcon("folder", "") ); + dirB->setToolTip(tr("Favorite Folders")); + audioM->setTitle( tr("Audio") ); + audioM->setIcon( LXDG::findIcon("audio-x-generic","") ); + videoM->setTitle( tr("Video") ); + videoM->setIcon( LXDG::findIcon("video-x-generic","") ); + pictureM->setTitle( tr("Pictures") ); + pictureM->setIcon( LXDG::findIcon("image-x-generic","") ); + otherM->setTitle( tr("Other Files") ); + otherM->setIcon( LXDG::findIcon("unknown","") ); + docM->setTitle( tr("Documents") ); + docM->setIcon( LXDG::findIcon("x-office-document","") ); + fileB->setIcon( LXDG::findIcon("document-multiple", "") ); + fileB->setToolTip(tr("Favorite Files") ); +}
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/panel-plugins/desktopbar/LDeskBar.h b/src-qt5/core/lumina-desktop/panel-plugins/desktopbar/LDeskBar.h new file mode 100644 index 00000000..57d40e4c --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/desktopbar/LDeskBar.h @@ -0,0 +1,93 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2012, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This plugin displays the contents of the user's home directory +// as organized within a couple buttons on the panel (apps, dirs, files) +//=========================================== +#ifndef _LUMINA_DESKTOP_DESKBAR_H +#define _LUMINA_DESKTOP_DESKBAR_H + +// Qt includes +#include <QWidget> +#include <QString> +#include <QAction> +#include <QMenu> +#include <QProcess> +#include <QTimer> +#include <QFileSystemWatcher> +#include <QHBoxLayout> +#include <QIcon> +#include <QToolButton> +#include <QDebug> + +// libLumina includes +#include <LuminaXDG.h> + +// local includes +//#include "../LTBWidget.h" +#include "../LPPlugin.h" + +class LDeskBarPlugin : public LPPlugin{ + Q_OBJECT +public: + LDeskBarPlugin(QWidget* parent=0, QString id = "desktopbar", bool horizontal=true); + ~LDeskBarPlugin(); + +private: + //QHBoxLayout *layout; + QString desktopPath; + QFileSystemWatcher *watcher; + //Special toolbuttons and menus + QToolButton *appB, *fileB, *dirB; + QMenu *appM, *dirM, *audioM, *videoM, *pictureM, *fileM, *otherM, *docM; + //QStringList audioFilter, videoFilter, pictureFilter, docsFilter; + QFileInfoList homefiles; + QStringList favs; + QList<QToolButton*> APPLIST; + QDateTime lastHomeUpdate; + + void initializeDesktop(); + //bool readDesktopFile(QString path, QString &name, QString &iconpath); + + QAction* newAction(QString filepath, QString name, QString iconpath); + QAction* newAction(QString filepath, QString name, QIcon icon); + + //void updateMenu(QMenu* menu, QFileInfoList files, bool trim = true); + + +private slots: + void ActionTriggered(QAction* act); + void desktopChanged(); + void updateIcons(); + +public slots: + void LocaleChange(){ + updateIcons(); + desktopChanged(); + } + + void OrientationChange(){ + QSize sz; + if(this->layout()->direction()==QBoxLayout::LeftToRight){ + this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding); + sz = QSize(this->height(), this->height()); + }else{ + this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); + sz = QSize(this->width(), this->width()); + } + appB->setIconSize(sz); + fileB->setIconSize(sz); + dirB->setIconSize(sz); + for(int i=0; i<APPLIST.length(); i++){ + APPLIST[i]->setIconSize(sz); + } + this->layout()->update(); + } +}; + + +#endif + diff --git a/src-qt5/core/lumina-desktop/panel-plugins/desktopswitcher/LDesktopSwitcher.cpp b/src-qt5/core/lumina-desktop/panel-plugins/desktopswitcher/LDesktopSwitcher.cpp new file mode 100644 index 00000000..c51e4b4a --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/desktopswitcher/LDesktopSwitcher.cpp @@ -0,0 +1,142 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Susanne Jaeckel +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LDesktopSwitcher.h" +#include <LSession.h> + +LDesktopSwitcher::LDesktopSwitcher(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal) { + iconOld = -1; + this->setStyleSheet( "QToolButton::menu-indicator{ image: none; } QToolButton{padding: 0px;}"); + //Setup the widget + label = new QToolButton(this); + label->setPopupMode(QToolButton::DelayedPopup); + label->setAutoRaise(true); + label->setToolButtonStyle(Qt::ToolButtonIconOnly); + label->setIcon( LXDG::findIcon("preferences-desktop-display-color", "") ); + label->setToolTip(QString("Workspace 1")); + connect(label, SIGNAL(clicked()), this, SLOT(openMenu())); + menu = new QMenu(this); + connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(menuActionTriggered(QAction*))); + connect(menu, SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed())); + label->setMenu(menu); + this->layout()->addWidget(label); + + // Maybe a timer should be set to set the toolTip of the button, + // becasue the workspace could be switched via Keyboard-shortcuts ... + + QTimer::singleShot(500, this, SLOT(createMenu()) ); //needs a delay to make sure it works right the first time + QTimer::singleShot(0,this, SLOT(OrientationChange()) ); //adjust icon size +} + +LDesktopSwitcher::~LDesktopSwitcher(){ +} +/* MOVED THESE FUNCTIONS TO LIBLUMINA (LuminaX11.h) -- Ken Moore 5/9/14 +void LDesktopSwitcher::setNumberOfDesktops(int number) { + Display *display = QX11Info::display(); + Window rootWindow = QX11Info::appRootWindow(); + + Atom atom = XInternAtom(display, "_NET_NUMBER_OF_DESKTOPS", False); + XEvent xevent; + xevent.type = ClientMessage; + xevent.xclient.type = ClientMessage; + xevent.xclient.display = display; + xevent.xclient.window = rootWindow; + xevent.xclient.message_type = atom; + xevent.xclient.format = 32; + xevent.xclient.data.l[0] = number; + xevent.xclient.data.l[1] = CurrentTime; + xevent.xclient.data.l[2] = 0; + xevent.xclient.data.l[3] = 0; + xevent.xclient.data.l[4] = 0; + XSendEvent(display, rootWindow, False, SubstructureNotifyMask | SubstructureRedirectMask, &xevent); + + XFlush(display); +} + +void LDesktopSwitcher::setCurrentDesktop(int number) { + Display *display = QX11Info::display(); + Window rootWindow = QX11Info::appRootWindow(); + + Atom atom = XInternAtom(display, "_NET_CURRENT_DESKTOP", False); + XEvent xevent; + xevent.type = ClientMessage; + xevent.xclient.type = ClientMessage; + xevent.xclient.display = display; + xevent.xclient.window = rootWindow; + xevent.xclient.message_type = atom; + xevent.xclient.format = 32; + xevent.xclient.data.l[0] = number; + xevent.xclient.data.l[1] = CurrentTime; + xevent.xclient.data.l[2] = 0; + xevent.xclient.data.l[3] = 0; + xevent.xclient.data.l[4] = 0; + XSendEvent(display, rootWindow, False, SubstructureNotifyMask | SubstructureRedirectMask, &xevent); + + XFlush(display); +} + +int LDesktopSwitcher::getNumberOfDesktops() { + int number = -1; + Atom a = XInternAtom(QX11Info::display(), "_NET_NUMBER_OF_DESKTOPS", true); + Atom realType; + int format; + unsigned long num, bytes; + unsigned char *data = 0; + int status = XGetWindowProperty(QX11Info::display(), QX11Info::appRootWindow(), a, 0L, (~0L), + false, AnyPropertyType, &realType, &format, &num, &bytes, &data); + if( (status >= Success) && (num > 0) ){ + number = *data; + XFree(data); + } + return number; +} + +int LDesktopSwitcher::getCurrentDesktop() { + int number = -1; + Atom a = XInternAtom(QX11Info::display(), "_NET_CURRENT_DESKTOP", true); + Atom realType; + int format; + unsigned long num, bytes; + unsigned char *data = 0; + int status = XGetWindowProperty(QX11Info::display(), QX11Info::appRootWindow(), a, 0L, (~0L), + false, AnyPropertyType, &realType, &format, &num, &bytes, &data); + if( (status >= Success) && (num > 0) ){ + number = *data; + XFree(data); + } + return number; +} */ + +void LDesktopSwitcher::openMenu(){ + //Make sure the menu is refreshed right before it opens + createMenu(); + label->showMenu(); +} + +QAction* LDesktopSwitcher::newAction(int what, QString name) { + QAction *act = new QAction(LXDG::findIcon("preferences-desktop-display", ""), name, this); + act->setWhatsThis(QString::number(what)); + return act; +} + +void LDesktopSwitcher::createMenu() { + int cur = LSession::handle()->XCB->CurrentWorkspace(); //current desktop number + int tot = LSession::handle()->XCB->NumberOfWorkspaces(); //total number of desktops + //qDebug() << "-- vor getCurrentDesktop SWITCH"; + qDebug() << "Virtual Desktops:" << tot << cur; + menu->clear(); + for (int i = 0; i < tot; i++) { + QString name = QString(tr("Workspace %1")).arg( QString::number(i+1) ); + if(i == cur){ name.prepend("*"); name.append("*");} //identify which desktop this is currently + menu->addAction(newAction(i, name)); + } +} + +void LDesktopSwitcher::menuActionTriggered(QAction* act) { + LSession::handle()->XCB->SetCurrentWorkspace(act->whatsThis().toInt()); + label->setToolTip(QString(tr("Workspace %1")).arg(act->whatsThis().toInt() +1)); + QTimer::singleShot(500, this, SLOT(createMenu()) ); //make sure the menu gets updated +} diff --git a/src-qt5/core/lumina-desktop/panel-plugins/desktopswitcher/LDesktopSwitcher.h b/src-qt5/core/lumina-desktop/panel-plugins/desktopswitcher/LDesktopSwitcher.h new file mode 100644 index 00000000..851d9e35 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/desktopswitcher/LDesktopSwitcher.h @@ -0,0 +1,72 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Susanne Jaeckel +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef _LUMINA_DESKTOP_SWITCHER_H +#define _LUMINA_DESKTOP_SWITCHER_H + +#include <QTimer> +#include <QWidget> +#include <QString> +//#include <QX11Info> +#include <QMenu> +#include <QToolButton> + +#include <LuminaUtils.h> +#include <LuminaXDG.h> +#include <LuminaX11.h> + +//#include "../LTBWidget.h" +#include "../LPPlugin.h" + +//#include <X11/Xlib.h> +//#include <X11/Xutil.h> +//#include <X11/Xatom.h> + +class LDesktopSwitcher : public LPPlugin{ + Q_OBJECT +public: + LDesktopSwitcher(QWidget *parent = 0, QString id = "desktopswitcher", bool horizontal=true); + ~LDesktopSwitcher(); + +private: + QTimer *timer; + QToolButton *label; + QMenu *menu; + int iconOld; + + //void setNumberOfDesktops(int); + //void setCurrentDesktop(int); + //int getNumberOfDesktops(); + //int getCurrentDesktop(); + + + QAction* newAction(int, QString); + +private slots: + void openMenu(); + void createMenu(); + void menuActionTriggered(QAction*); + +public slots: + void LocaleChange(){ + createMenu(); + } + + void OrientationChange(){ + QSize sz; + if(this->layout()->direction()==QBoxLayout::LeftToRight){ + this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding); + sz = QSize(this->height(), this->height()); + }else{ + this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); + sz = QSize(this->width(), this->width()); + } + label->setIconSize(sz); + this->layout()->update(); + } +}; + +#endif diff --git a/src-qt5/core/lumina-desktop/panel-plugins/line/LLine.h b/src-qt5/core/lumina-desktop/panel-plugins/line/LLine.h new file mode 100644 index 00000000..94de486e --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/line/LLine.h @@ -0,0 +1,40 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This class is a generic line separator for the panel +//=========================================== +#ifndef _LUMINA_DESKTOP_PANEL_PLUGIN_LINE_H +#define _LUMINA_DESKTOP_PANEL_PLUGIN_LINE_H + +#include "../LPPlugin.h" +#include <QFrame> + +class LLinePlugin : public LPPlugin{ + Q_OBJECT +private: + QFrame *line; + +public: + LLinePlugin(QWidget *parent=0, QString id="spacer", bool horizontal=true) : LPPlugin(parent, id, horizontal){ + line = new QFrame(this); + line->setObjectName("LuminaPanelLine"); + this->layout()->addWidget(line); + OrientationChange(); + } + ~LLinePlugin(){} + +public slots: + void OrientationChange(){ + if(this->layout()->direction()==QBoxLayout::LeftToRight){ //horizontal + line->setFrameShape(QFrame::VLine); + }else{ //vertical + line->setFrameShape(QFrame::HLine); + } + } +}; + + +#endif
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/panel-plugins/panel-plugins.pri b/src-qt5/core/lumina-desktop/panel-plugins/panel-plugins.pri new file mode 100644 index 00000000..afa7dbe2 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/panel-plugins.pri @@ -0,0 +1,49 @@ +#Lumina Desktop Panel Plugin files + +SOURCES += $$PWD/userbutton/LUserButton.cpp \ + $$PWD/userbutton/UserWidget.cpp \ + $$PWD/userbutton/UserItemWidget.cpp \ + $$PWD/desktopbar/LDeskBar.cpp \ + $$PWD/taskmanager/LTaskManagerPlugin.cpp \ + $$PWD/taskmanager/LTaskButton.cpp \ + $$PWD/systemtray/LSysTray.cpp \ + $$PWD/systemtray/TrayIcon.cpp \ + $$PWD/clock/LClock.cpp \ + $$PWD/battery/LBattery.cpp \ + $$PWD/desktopswitcher/LDesktopSwitcher.cpp \ + $$PWD/systemdashboard/LSysDashboard.cpp \ + $$PWD/systemdashboard/SysMenuQuick.cpp \ + $$PWD/showdesktop/LHomeButton.cpp \ + $$PWD/appmenu/LAppMenuPlugin.cpp \ + $$PWD/applauncher/AppLaunchButton.cpp \ + $$PWD/systemstart/LStartButton.cpp \ + $$PWD/systemstart/StartMenu.cpp \ + $$PWD/systemstart/ItemWidget.cpp + +HEADERS += $$PWD/userbutton/LUserButton.h \ + $$PWD/userbutton/UserWidget.h \ + $$PWD/userbutton/UserItemWidget.h \ + $$PWD/desktopbar/LDeskBar.h \ + $$PWD/systemtray/LSysTray.h \ + $$PWD/systemtray/TrayIcon.h \ + $$PWD/spacer/LSpacer.h \ + $$PWD/line/LLine.h \ + $$PWD/clock/LClock.h \ + $$PWD/battery/LBattery.h \ + $$PWD/desktopswitcher/LDesktopSwitcher.h \ + $$PWD/taskmanager/LTaskManagerPlugin.h \ + $$PWD/taskmanager/LTaskButton.h \ + $$PWD/systemdashboard/LSysDashboard.h \ + $$PWD/systemdashboard/SysMenuQuick.h \ + $$PWD/showdesktop/LHomeButton.h \ + $$PWD/appmenu/LAppMenuPlugin.h \ + $$PWD/applauncher/AppLaunchButton.h \ + $$PWD/systemstart/LStartButton.h \ + $$PWD/systemstart/StartMenu.h \ + $$PWD/systemstart/ItemWidget.h +# $$PWD/quickcontainer/QuickPPlugin.h + +FORMS += $$PWD/userbutton/UserWidget.ui \ + $$PWD/systemdashboard/SysMenuQuick.ui \ + $$PWD/systemstart/StartMenu.ui +
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/panel-plugins/quickcontainer/QuickPPlugin.h b/src-qt5/core/lumina-desktop/panel-plugins/quickcontainer/QuickPPlugin.h new file mode 100644 index 00000000..e160c2b3 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/quickcontainer/QuickPPlugin.h @@ -0,0 +1,43 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This class is a simple container for a QtQuick plugin +//=========================================== +#ifndef _LUMINA_DESKTOP_PANEL_PLUGIN_QUICK_H +#define _LUMINA_DESKTOP_PANEL_PLUGIN_QUICK_H + +#include <QQuickWidget> +#include <QVBoxLayout> +#include "../LPPlugin.h" + +#include <LuminaUtils.h> +#include <QDebug> + +class QuickPPlugin : public LPPlugin{ + Q_OBJECT +public: + QuickPPlugin(QWidget* parent, QString ID, bool horizontal) : LPPlugin(parent, ID){ + container = new QQuickWidget(this); + container->setResizeMode(QQuickWidget::SizeRootObjectToView); + this->layout()->addWidget(container); + horizontal = true; //just to silence compiler warning + container->setSource(QUrl::fromLocalFile( LUtils::findQuickPluginFile(ID.section("---",0,0)) )); + } + + ~QuickPPlugin(){} + +private: + QQuickWidget *container; + +private slots: + void statusChange(QQuickWidget::Status status){ + if(status == QQuickWidget::Error){ + qDebug() << "Quick Widget Error:" << this->type(); + } + } + +}; +#endif diff --git a/src-qt5/core/lumina-desktop/panel-plugins/showdesktop/LHomeButton.cpp b/src-qt5/core/lumina-desktop/panel-plugins/showdesktop/LHomeButton.cpp new file mode 100644 index 00000000..6c259b16 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/showdesktop/LHomeButton.cpp @@ -0,0 +1,43 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LHomeButton.h" +#include "../../LSession.h" + +#include <LuminaX11.h> + +LHomeButtonPlugin::LHomeButtonPlugin(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){ + button = new QToolButton(this); + button->setAutoRaise(true); + button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + + connect(button, SIGNAL(clicked()), this, SLOT(showDesktop())); + this->layout()->setContentsMargins(0,0,0,0); + this->layout()->addWidget(button); + + QTimer::singleShot(0,this, SLOT(OrientationChange())); //Update icons/sizes +} + +LHomeButtonPlugin::~LHomeButtonPlugin(){ + +} + +void LHomeButtonPlugin::updateButtonVisuals(){ + button->setIcon( LXDG::findIcon("user-desktop", "") ); +} + +// ======================== +// PRIVATE FUNCTIONS +// ======================== +void LHomeButtonPlugin::showDesktop(){ + QList<WId> wins = LSession::handle()->XCB->WindowList(); + for(int i=0; i<wins.length(); i++){ + if( LXCB::INVISIBLE != LSession::handle()->XCB->WindowState(wins[i]) ){ + LSession::handle()->XCB->MinimizeWindow(wins[i]); + } + } +} + diff --git a/src-qt5/core/lumina-desktop/panel-plugins/showdesktop/LHomeButton.h b/src-qt5/core/lumina-desktop/panel-plugins/showdesktop/LHomeButton.h new file mode 100644 index 00000000..74aaf4fb --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/showdesktop/LHomeButton.h @@ -0,0 +1,62 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This panel plugin is a simple button to hide all windows so the desktop is visible +//=========================================== +#ifndef _LUMINA_DESKTOP_GO_HOME_PLUGIN_H +#define _LUMINA_DESKTOP_GO_HOME_PLUGIN_H + +// Qt includes +#include <QToolButton> +#include <QString> +#include <QWidget> + + +// Lumina-desktop includes +#include "../LPPlugin.h" //main plugin widget + +// libLumina includes +#include "LuminaXDG.h" + +// PANEL PLUGIN BUTTON +class LHomeButtonPlugin : public LPPlugin{ + Q_OBJECT + +public: + LHomeButtonPlugin(QWidget *parent = 0, QString id = "homebutton", bool horizontal=true); + ~LHomeButtonPlugin(); + +private: + QToolButton *button; + + void updateButtonVisuals(); + +private slots: + void showDesktop(); + +public slots: + void OrientationChange(){ + if(this->layout()->direction()==QBoxLayout::LeftToRight){ + this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding); + button->setIconSize( QSize(this->height(), this->height()) ); + }else{ + this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); + button->setIconSize( QSize(this->width(), this->width()) ); + } + this->layout()->update(); + updateButtonVisuals(); + } + + void LocaleChange(){ + updateButtonVisuals(); + } + + void ThemeChange(){ + updateButtonVisuals(); + } +}; + +#endif
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/panel-plugins/spacer/LSpacer.h b/src-qt5/core/lumina-desktop/panel-plugins/spacer/LSpacer.h new file mode 100644 index 00000000..1e60c519 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/spacer/LSpacer.h @@ -0,0 +1,34 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This class is a generic invisible spacer for the panel +//=========================================== +#ifndef _LUMINA_DESKTOP_PANEL_PLUGIN_SPACER_H +#define _LUMINA_DESKTOP_PANEL_PLUGIN_SPACER_H + +#include "../LPPlugin.h" + +class LSpacerPlugin : public LPPlugin{ + Q_OBJECT +public: + LSpacerPlugin(QWidget *parent=0, QString id="spacer", bool horizontal=true) : LPPlugin(parent, id, horizontal){ + if(horizontal){ this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); } + else{ this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); } + } + ~LSpacerPlugin(){} + +public slots: + void OrientationChange(){ + if(this->layout()->direction()==QBoxLayout::LeftToRight){ //horizontal + this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + }else{ //vertical + this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); + } + } +}; + + +#endif
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/LSysDashboard.cpp b/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/LSysDashboard.cpp new file mode 100644 index 00000000..267a7cb0 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/LSysDashboard.cpp @@ -0,0 +1,91 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LSysDashboard.h" + +LSysDashboard::LSysDashboard(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){ + upTimer = new QTimer(this); + upTimer->setInterval(10000); //10 second update ping + connect(upTimer, SIGNAL(timeout()), this, SLOT(updateIcon())); + button = new QToolButton(this); + button->setAutoRaise(true); + button->setToolButtonStyle(Qt::ToolButtonIconOnly); + button->setPopupMode(QToolButton::DelayedPopup); //make sure it runs the update routine first + connect(button, SIGNAL(clicked()), this, SLOT(openMenu())); + this->layout()->setContentsMargins(0,0,0,0); + this->layout()->addWidget(button); + menu = new QMenu(this); + connect(menu, SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed())); + sysmenu = new LSysMenuQuick(this); + connect(sysmenu, SIGNAL(CloseMenu()), this, SLOT(closeMenu()) ); + mact = new QWidgetAction(this); + mact->setDefaultWidget(sysmenu); + menu->addAction(mact); + + button->setMenu(menu); + QTimer::singleShot(0,this, SLOT(OrientationChange())); //Update icons/sizes +} + +LSysDashboard::~LSysDashboard(){ + +} + +// ======================== +// PRIVATE FUNCTIONS +// ======================== +void LSysDashboard::updateIcon(bool force){ + //For the visual, show battery state only if important + static bool batcharging = false; + QPixmap pix; + button->setToolTip(tr("System Dashboard")); + if(LOS::hasBattery()){ + int bat = LOS::batteryCharge(); + bool charging = LOS::batteryIsCharging(); + //Set the icon as necessary + if(charging && !batcharging){ + //Charging and just plugged in + if(bat < 15){ button->setIcon( LXDG::findIcon("battery-charging-low","") ); QTimer::singleShot(5000, this, SLOT(resetIcon()));} + else if(bat < 30){ button->setIcon( LXDG::findIcon("battery-charging-caution","") ); QTimer::singleShot(5000, this, SLOT(resetIcon()));} + else if(force || button->icon().isNull()){ resetIcon(); } + }else if(!charging){ + //Not charging (critical level or just unplugged) + if(bat<5){ button->setIcon( LXDG::findIcon("battery-missing","") ); } + else if(bat < 15){ button->setIcon( LXDG::findIcon("battery-low","") ); QTimer::singleShot(5000, this, SLOT(resetIcon())); } + else if(bat < 30 && batcharging){ button->setIcon( LXDG::findIcon("battery-caution","") ); QTimer::singleShot(5000, this, SLOT(resetIcon()));} + else if(bat < 50 && batcharging){ button->setIcon( LXDG::findIcon("battery-040","")); QTimer::singleShot(5000, this, SLOT(resetIcon()));} + else if(bat < 70 && batcharging){ button->setIcon( LXDG::findIcon("battery-060","")); QTimer::singleShot(5000, this, SLOT(resetIcon()));} + else if(bat < 90 && batcharging){ button->setIcon( LXDG::findIcon("battery-080","")); QTimer::singleShot(5000, this, SLOT(resetIcon()));} + else if(batcharging){ button->setIcon( LXDG::findIcon("battery-100","")); QTimer::singleShot(5000, this, SLOT(resetIcon()));} + else if(force || button->icon().isNull()){ resetIcon(); } + }else if(force || button->icon().isNull()){ + //Otherwise just use the default icon + resetIcon(); + } + //Save the values for comparison later + batcharging = charging; + if( !upTimer->isActive() ){ upTimer->start(); } //only use the timer if a battery is present + + // No battery - just use/set the normal icon + }else if(force || button->icon().isNull()){ + resetIcon(); + if(upTimer->isActive() ){ upTimer->stop(); } //no battery available - no refresh timer needed + } + +} + +void LSysDashboard::resetIcon(){ + button->setIcon( LXDG::findIcon("dashboard-show","")); +} + +void LSysDashboard::openMenu(){ + sysmenu->UpdateMenu(); + button->showMenu(); +} + +void LSysDashboard::closeMenu(){ + menu->hide(); +} + diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/LSysDashboard.h b/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/LSysDashboard.h new file mode 100644 index 00000000..782fc4e6 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/LSysDashboard.h @@ -0,0 +1,76 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This panel plugin allows the user to control different system settings +// For example: screen brightness, audio volume, workspace, and battery +//=========================================== +#ifndef _LUMINA_DESKTOP_SYSTEM_DASHBOARD_H +#define _LUMINA_DESKTOP_SYSTEM_DASHBOARD_H + +//Qt includes + +#include <QHBoxLayout> +#include <QDebug> +#include <QCoreApplication> +#include <QPainter> +#include <QPixmap> +#include <QWidgetAction> +#include <QMenu> +#include <QTimer> +#include <QToolButton> + +//libLumina includes +#include <LuminaOS.h> +#include <LuminaXDG.h> + +//Local includes +#include "../LPPlugin.h" +#include "SysMenuQuick.h" + +class LSysDashboard : public LPPlugin{ + Q_OBJECT +public: + LSysDashboard(QWidget *parent = 0, QString id="systemdashboard", bool horizontal=true); + ~LSysDashboard(); + +private: + QMenu *menu; + QWidgetAction *mact; + LSysMenuQuick *sysmenu; + QToolButton *button; + QTimer *upTimer; + +private slots: + void updateIcon(bool force = false); + void resetIcon(); + void openMenu(); + void closeMenu(); + +public slots: + void LocaleChange(){ + updateIcon(true); + sysmenu->UpdateMenu(); + } + + void ThemeChange(){ + updateIcon(true); + sysmenu->UpdateMenu(); + } + + void OrientationChange(){ + if(this->layout()->direction()==QBoxLayout::LeftToRight){ + this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding); + button->setIconSize( QSize(this->height(), this->height()) ); + }else{ + this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); + button->setIconSize( QSize(this->width(), this->width()) ); + } + updateIcon(true); //force icon refresh + this->layout()->update(); + } +}; + +#endif diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/SysMenuQuick.cpp b/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/SysMenuQuick.cpp new file mode 100644 index 00000000..1d699ea9 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/SysMenuQuick.cpp @@ -0,0 +1,211 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "SysMenuQuick.h" +#include "ui_SysMenuQuick.h" + +#include "../../LSession.h" +#include <LuminaX11.h> + +LSysMenuQuick::LSysMenuQuick(QWidget *parent) : QWidget(parent), ui(new Ui::LSysMenuQuick){ + ui->setupUi(this); + brighttimer = new QTimer(this); + brighttimer->setSingleShot(true); + brighttimer->setInterval(50); //50ms delay in setting the new value + //Now reset the initial saved settings (this is handles by the LOS/session now - 4/22/15) + firstrun = true; + UpdateMenu(); //do this once before all the signals/slots are connected below + firstrun = false; + //Now setup the connections + connect(ui->slider_volume, SIGNAL(valueChanged(int)), this, SLOT(volSliderChanged()) ); + connect(ui->slider_brightness, SIGNAL(valueChanged(int)), this, SLOT(brightSliderChanged()) ); + connect(ui->tool_wk_prev, SIGNAL(clicked()), this, SLOT(prevWorkspace()) ); + connect(ui->tool_wk_next, SIGNAL(clicked()), this, SLOT(nextWorkspace()) ); + connect(ui->tool_logout, SIGNAL(clicked()), this, SLOT(startLogout()) ); + connect(ui->tool_vol_mixer, SIGNAL(clicked()), this, SLOT(startMixer()) ); + connect(brighttimer, SIGNAL(timeout()), this, SLOT(setCurrentBrightness()) ); + connect(ui->combo_locale, SIGNAL(currentIndexChanged(int)), this, SLOT(changeLocale()) ); + //And setup the default icons + ui->label_bright_icon->setPixmap( LXDG::findIcon("preferences-system-power-management","").pixmap(ui->label_bright_icon->maximumSize()) ); + ui->tool_wk_prev->setIcon( LXDG::findIcon("go-previous-view","")); + ui->tool_wk_next->setIcon( LXDG::findIcon("go-next-view","") ); + ui->tool_logout->setIcon( LXDG::findIcon("system-log-out","") ); +} + +LSysMenuQuick::~LSysMenuQuick(){ + +} + +void LSysMenuQuick::UpdateMenu(){ + ui->retranslateUi(this); + //Audio Volume + int val = LOS::audioVolume(); + QIcon ico; + if(val > 66){ ico= LXDG::findIcon("audio-volume-high",""); } + else if(val > 33){ ico= LXDG::findIcon("audio-volume-medium",""); } + else if(val > 0){ ico= LXDG::findIcon("audio-volume-low",""); } + else{ ico= LXDG::findIcon("audio-volume-muted",""); } + bool hasMixer = LOS::hasMixerUtility(); + ui->label_vol_icon->setVisible(!hasMixer); + ui->tool_vol_mixer->setVisible(hasMixer); + if(!hasMixer){ ui->label_vol_icon->setPixmap( ico.pixmap(ui->label_vol_icon->maximumSize()) ); } + else{ ui->tool_vol_mixer->setIcon(ico); } + QString txt = QString::number(val)+"%"; + if(val<100){ txt.prepend(" "); } //make sure no widget resizing + ui->label_vol_text->setText(txt); + if(ui->slider_volume->value()!= val){ ui->slider_volume->setValue(val); } + //Screen Brightness + val = LOS::ScreenBrightness(); + if(val < 0){ + //No brightness control - hide it + ui->group_brightness->setVisible(false); + }else{ + ui->group_brightness->setVisible(true); + txt = QString::number(val)+"%"; + if(val<100){ txt.prepend(" "); } //make sure no widget resizing + ui->label_bright_text->setText(txt); + if(ui->slider_brightness->value()!=val){ ui->slider_brightness->setValue(val); } + } + + //Do any one-time checks + if(firstrun){ + hasBat = LOS::hasBattery(); //No need to check this more than once - will not change in the middle of a session + //Current Locale + QStringList locales = LUtils::knownLocales(); + ui->combo_locale->clear(); + QLocale curr; + for(int i=0; i<locales.length(); i++){ + QLocale loc( (locales[i]=="pt") ? "pt_PT" : locales[i] ); + ui->combo_locale->addItem(loc.nativeLanguageName()+" ("+locales[i]+")", locales[i]); //Make the display text prettier later + if(locales[i] == curr.name() || locales[i] == curr.name().section("_",0,0) ){ + //Current Locale + ui->combo_locale->setCurrentIndex(ui->combo_locale->count()-1); //the last item in the list right now + } + } + ui->group_locale->setVisible(locales.length() > 1); + } + + //Battery Status + if(hasBat){ + ui->group_battery->setVisible(true); + val = LOS::batteryCharge(); + if(LOS::batteryIsCharging()){ + if(val < 15){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-charging-low","").pixmap(ui->label_bat_icon->maximumSize()) ); } + else if(val < 30){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-charging-caution","").pixmap(ui->label_bat_icon->maximumSize()) ); } + else if(val < 50){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-charging-040","").pixmap(ui->label_bat_icon->maximumSize()) ); } + else if(val < 70){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-charging-060","").pixmap(ui->label_bat_icon->maximumSize()) ); } + else if(val < 90){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-charging-080","").pixmap(ui->label_bat_icon->maximumSize()) ); } + else{ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-charging","").pixmap(ui->label_bat_icon->maximumSize()) ); } + ui->label_bat_text->setText( QString("%1%\n(%2)").arg(QString::number(val), tr("connected")) ); + }else{ + if(val < 1){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-missing","").pixmap(ui->label_bat_icon->maximumSize()) ); } + else if(val < 15){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-low","").pixmap(ui->label_bat_icon->maximumSize()) ); } + else if(val < 30){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-caution","").pixmap(ui->label_bat_icon->maximumSize()) ); } + else if(val < 50){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-040","").pixmap(ui->label_bat_icon->maximumSize()) ); } + else if(val < 70){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-060","").pixmap(ui->label_bat_icon->maximumSize()) ); } + else if(val < 90){ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-080","").pixmap(ui->label_bat_icon->maximumSize()) ); } + else{ ui->label_bat_icon->setPixmap( LXDG::findIcon("battery-100","").pixmap(ui->label_bat_icon->maximumSize()) ); } + ui->label_bat_text->setText( QString("%1%\n(%2)").arg(QString::number(val), getRemainingTime()) ); + } + }else{ + ui->group_battery->setVisible(false); + } + //Workspace + val = LSession::handle()->XCB->CurrentWorkspace(); + int tot = LSession::handle()->XCB->NumberOfWorkspaces(); + ui->group_workspace->setVisible(val>=0 && tot>1); + ui->label_wk_text->setText( QString(tr("%1 of %2")).arg(QString::number(val+1), QString::number(tot)) ); +} + +void LSysMenuQuick::volSliderChanged(){ + int val = ui->slider_volume->value(); + LOS::setAudioVolume(val); + QString txt = QString::number(val)+"%"; + if(val<100){ txt.prepend(" "); } //make sure no widget resizing + ui->label_vol_text->setText( txt ); + if(val > 66){ ui->label_vol_icon->setPixmap( LXDG::findIcon("audio-volume-high","").pixmap(ui->label_vol_icon->maximumSize()) ); } + else if(val > 33){ ui->label_vol_icon->setPixmap( LXDG::findIcon("audio-volume-medium","").pixmap(ui->label_vol_icon->maximumSize()) ); } + else if(val > 0){ ui->label_vol_icon->setPixmap( LXDG::findIcon("audio-volume-low","").pixmap(ui->label_vol_icon->maximumSize()) ); } + else{ ui->label_vol_icon->setPixmap( LXDG::findIcon("audio-volume-muted","").pixmap(ui->label_vol_icon->maximumSize()) ); } +} + +void LSysMenuQuick::startMixer(){ + emit CloseMenu(); + LOS::startMixerUtility(); +} + +void LSysMenuQuick::brightSliderChanged(){ + //Brightness controls cannot operate extremely quickly - combine calls as necessary + if(brighttimer->isActive()){ brighttimer->stop(); } + brighttimer->start(); + //*DO* update the label right away + int val = ui->slider_brightness->value(); + QString txt = QString::number(val)+"%"; + if(val<100){ txt.prepend(" "); } //make sure no widget resizing + ui->label_bright_text->setText( txt ); +} + +void LSysMenuQuick::setCurrentBrightness(){ + int val = ui->slider_brightness->value(); + LOS::setScreenBrightness(val); + QString txt = QString::number(val)+"%"; + if(val<100){ txt.prepend(" "); } //make sure no widget resizing + ui->label_bright_text->setText( txt ); +} + +void LSysMenuQuick::nextWorkspace(){ + int cur = LSession::handle()->XCB->CurrentWorkspace(); + int tot = LSession::handle()->XCB->NumberOfWorkspaces(); + //qDebug()<< "Next Workspace:" << cur << tot; + cur++; + if(cur>=tot){ cur = 0; } //back to beginning + //qDebug() << " - New Current:" << cur; + LSession::handle()->XCB->SetCurrentWorkspace(cur); +ui->label_wk_text->setText( QString(tr("%1 of %2")).arg(QString::number(cur+1), QString::number(tot)) ); +} + +void LSysMenuQuick::prevWorkspace(){ + int cur = LSession::handle()->XCB->CurrentWorkspace(); + int tot = LSession::handle()->XCB->NumberOfWorkspaces(); + cur--; + if(cur<0){ cur = tot-1; } //back to last + LSession::handle()->XCB->SetCurrentWorkspace(cur); + ui->label_wk_text->setText( QString(tr("%1 of %2")).arg(QString::number(cur+1), QString::number(tot)) ); +} + +QString LSysMenuQuick::getRemainingTime(){ + int secs = LOS::batterySecondsLeft(); + if(secs < 0){ return "??"; } + QString rem; //remaining + if(secs > 3600){ + int hours = secs/3600; + rem.append( QString::number(hours)+"h "); + secs = secs - (hours*3600); + } + if(secs > 60){ + int min = secs/60; + rem.append( QString::number(min)+"m "); + secs = secs - (min*60); + } + if(secs > 0){ + rem.append( QString::number(secs)+"s"); + }else{ + rem.append( "0s" ); + } + return rem; +} + +void LSysMenuQuick::startLogout(){ + emit CloseMenu(); + LSession::handle()->systemWindow(); +} + +void LSysMenuQuick::changeLocale(){ + //Get the currently selected Locale + QString locale = ui->combo_locale->currentData().toString(); + emit CloseMenu(); + LSession::handle()->switchLocale(locale); +}
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/SysMenuQuick.h b/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/SysMenuQuick.h new file mode 100644 index 00000000..a300b5b1 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/SysMenuQuick.h @@ -0,0 +1,54 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This panel plugin allows the user to control different system settings +// For example: screen brightness, audio volume, workspace, and battery +//=========================================== +#ifndef _LUMINA_PANEL_QUICK_SYSTEM_MENU_H +#define _LUMINA_PANEL_QUICK_SYSTEM_MENU_H + +#include <QWidget> +#include <QSettings> +#include <QString> + +#include <LuminaOS.h> +#include <LuminaXDG.h> + +namespace Ui{ + class LSysMenuQuick; +}; + +class LSysMenuQuick : public QWidget{ + Q_OBJECT +public: + LSysMenuQuick(QWidget *parent=0); + ~LSysMenuQuick(); + + void UpdateMenu(); + +private: + Ui::LSysMenuQuick *ui; + QTimer *brighttimer; + bool firstrun, hasBat; + QString getRemainingTime(); //battery time left + +private slots: + void volSliderChanged(); + void brightSliderChanged(); //start the delay/collection timer + void setCurrentBrightness(); //perform the change + void startMixer(); + void nextWorkspace(); + void prevWorkspace(); + void startLogout(); + void changeLocale(); + + +signals: + void CloseMenu(); + +}; + +#endif
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/SysMenuQuick.ui b/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/SysMenuQuick.ui new file mode 100644 index 00000000..26c32c74 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/SysMenuQuick.ui @@ -0,0 +1,400 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>LSysMenuQuick</class> + <widget class="QWidget" name="LSysMenuQuick"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>171</width> + <height>317</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <property name="styleSheet"> + <string notr="true">/*QGroupBox{ +border-radius: 5px; +border: 1px solid grey; +margin-top: 1ex; +} +QGroupBox::title{ +subcontrol-origin: margin; +subcontrol-position: top center; +padding: 0 3px; +background-color: rgba(255,255,255,255); +border-radius: 5px; +font: bold; +}*/</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>1</number> + </property> + <property name="topMargin"> + <number>1</number> + </property> + <property name="rightMargin"> + <number>1</number> + </property> + <property name="bottomMargin"> + <number>1</number> + </property> + <item> + <widget class="QGroupBox" name="group_volume"> + <property name="title"> + <string>System Volume</string> + </property> + <property name="flat"> + <bool>false</bool> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>2</number> + </property> + <property name="topMargin"> + <number>2</number> + </property> + <property name="rightMargin"> + <number>2</number> + </property> + <property name="bottomMargin"> + <number>2</number> + </property> + <item> + <widget class="QLabel" name="label_vol_icon"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="text"> + <string notr="true"/> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_vol_mixer"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolTip"> + <string>Launch Audio Mixer</string> + </property> + <property name="text"> + <string/> + </property> + <property name="iconSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QSlider" name="slider_volume"> + <property name="maximum"> + <number>100</number> + </property> + <property name="value"> + <number>100</number> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_vol_text"> + <property name="text"> + <string notr="true">100%</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="group_brightness"> + <property name="title"> + <string>Screen Brightness</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>2</number> + </property> + <property name="topMargin"> + <number>2</number> + </property> + <property name="rightMargin"> + <number>2</number> + </property> + <property name="bottomMargin"> + <number>2</number> + </property> + <item> + <widget class="QLabel" name="label_bright_icon"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="text"> + <string notr="true"/> + </property> + </widget> + </item> + <item> + <widget class="QSlider" name="slider_brightness"> + <property name="minimum"> + <number>10</number> + </property> + <property name="maximum"> + <number>100</number> + </property> + <property name="value"> + <number>100</number> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_bright_text"> + <property name="text"> + <string notr="true">100%</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="group_battery"> + <property name="title"> + <string>Battery Status</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>2</number> + </property> + <property name="topMargin"> + <number>2</number> + </property> + <property name="rightMargin"> + <number>2</number> + </property> + <property name="bottomMargin"> + <number>2</number> + </property> + <item> + <widget class="QLabel" name="label_bat_icon"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="text"> + <string notr="true"/> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_bat_text"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string notr="true">100% (Plugged in)</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="group_workspace"> + <property name="title"> + <string>Workspace</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>2</number> + </property> + <property name="topMargin"> + <number>2</number> + </property> + <property name="rightMargin"> + <number>2</number> + </property> + <property name="bottomMargin"> + <number>2</number> + </property> + <item> + <widget class="QToolButton" name="tool_wk_prev"> + <property name="text"> + <string notr="true">prev</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_wk_text"> + <property name="text"> + <string notr="true">1 of 2</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_wk_next"> + <property name="text"> + <string notr="true">next</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="group_locale"> + <property name="title"> + <string>Locale</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>2</number> + </property> + <property name="topMargin"> + <number>2</number> + </property> + <property name="rightMargin"> + <number>2</number> + </property> + <property name="bottomMargin"> + <number>2</number> + </property> + <item> + <widget class="QComboBox" name="combo_locale"/> + </item> + </layout> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_6"> + <item> + <widget class="QToolButton" name="tool_logout"> + <property name="font"> + <font> + <pointsize>9</pointsize> + </font> + </property> + <property name="text"> + <string>Log Out</string> + </property> + <property name="iconSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>false</bool> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemstart/ItemWidget.cpp b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/ItemWidget.cpp new file mode 100644 index 00000000..bdd13b18 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/ItemWidget.cpp @@ -0,0 +1,256 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "ItemWidget.h" +#include <LuminaUtils.h> +#include <QMenu> +#include "../../LSession.h" + + +ItemWidget::ItemWidget(QWidget *parent, QString itemPath, QString type, bool goback) : QFrame(parent){ + createWidget(); + //Now fill it appropriately + bool inHome = type.endsWith("-home"); //internal code + if(inHome){ type = type.remove("-home"); } + if(itemPath.endsWith(".desktop") || type=="app"){ + bool ok = false; + XDGDesktop item = LXDG::loadDesktopFile(itemPath, ok); + if(ok && LXDG::checkValidity(item) ){ + icon->setPixmap( LXDG::findIcon(item.icon, "preferences-system-windows-actions").pixmap(32,32) ); + iconPath = item.icon; + text = item.name; + if(!item.genericName.isEmpty() && item.name!=item.genericName){ text.append("<br><i> -- "+item.genericName+"</i>"); } + name->setText(text); + name->setToolTip(item.comment); + setupActions(item); + }else{ + gooditem = false; + return; + } + }else if(type=="dir"){ + actButton->setVisible(false); + if(itemPath.endsWith("/")){ itemPath.chop(1); } + if(goback){ + icon->setPixmap( LXDG::findIcon("go-previous","").pixmap(64,64) ); + iconPath = "go-previous"; + text = tr("Go Back"); + name->setText( text ); + }else{ + icon->setPixmap( LXDG::findIcon("folder","").pixmap(64,64) ); + iconPath = "folder"; + name->setText( itemPath.section("/",-1)); + text = itemPath.section("/",-1); + } + }else if(type.startsWith("chcat::::")){ + //Category given + actButton->setVisible(false); + iconPath = LXDG::DesktopCatToIcon(type.section("::::",1,50)); + if(goback){ iconPath = "go-previous"; type = "chcat::::"; itemPath = "<B>("+itemPath+")</B>"; } + icon->setPixmap( LXDG::findIcon(iconPath,"applications-other").pixmap(64,64) ); + name->setText(itemPath); + text = itemPath; + icon->setWhatsThis(type); + linkPath = type; + }else{ + actButton->setVisible(false); + if(itemPath.endsWith("/")){ itemPath.chop(1); } + if(QFileInfo(itemPath).isDir()){ + type = "dir"; + icon->setPixmap( LXDG::findIcon("folder","").pixmap(64,64) ); + iconPath = "folder"; + }else if(LUtils::imageExtensions().contains(itemPath.section("/",-1).section(".",-1).toLower()) ){ + icon->setPixmap( QIcon(itemPath).pixmap(64,64) ); + }else{ + icon->setPixmap( LXDG::findMimeIcon(itemPath.section("/",-1)).pixmap(64,64) ); + } + name->setText( itemPath.section("/",-1) ); //this->fontMetrics().elidedText(itemPath.section("/",-1), Qt::ElideRight, TEXTCUTOFF) ); + text = itemPath.section("/",-1) ; + } + icon->setWhatsThis(itemPath); + if(!goback){ this->setWhatsThis(name->text()); } + isDirectory = (type=="dir"); //save this for later + if(LUtils::isFavorite(itemPath)){ + linkPath = itemPath; + isShortcut=true; + }else if( inHome ){//|| itemPath.section("/",0,-2)==QDir::homePath()+"/Desktop" ){ + isShortcut = true; + }else{ + isShortcut = false; + } + if(isShortcut && name->toolTip().isEmpty()){ + name->setToolTip(icon->whatsThis()); //also allow the user to see the full shortcut path + } + //Now setup the button appropriately + setupContextMenu(); +} + +// - Application constructor +ItemWidget::ItemWidget(QWidget *parent, XDGDesktop item) : QFrame(parent){ + createWidget(); + isDirectory = false; + if(LUtils::isFavorite(item.filePath)){ + linkPath = item.filePath; + isShortcut=true; + }else if( item.filePath.section("/",0,-2)==QDir::homePath()+"/Desktop" ){ + isShortcut = true; + }else{ + isShortcut = false; + } + if(isShortcut){ + name->setToolTip(icon->whatsThis()); //also allow the user to see the full shortcut path + } + //Now fill it appropriately + icon->setPixmap( LXDG::findIcon(item.icon,"preferences-system-windows-actions").pixmap(64,64) ); + text = item.name; + if(!item.genericName.isEmpty() && item.name!=item.genericName){ text.append("<br><i> -- "+item.genericName+"</i>"); } + name->setText(text); + name->setToolTip(item.comment); + this->setWhatsThis(item.name); + icon->setWhatsThis(item.filePath); + iconPath = item.icon; + //Now setup the buttons appropriately + setupContextMenu(); + setupActions(item); +} + +ItemWidget::~ItemWidget(){ +} + +void ItemWidget::createWidget(){ + //Initialize the widgets + gooditem = true; + menuopen = false; + menureset = new QTimer(this); + menureset->setSingleShot(true); + menureset->setInterval(1000); //1 second + this->setContentsMargins(0,0,0,0); + contextMenu = new QMenu(); + connect(contextMenu, SIGNAL(aboutToShow()), this, SLOT(actionMenuOpen()) ); + connect(contextMenu, SIGNAL(aboutToHide()), this, SLOT(actionMenuClosed()) ); + actButton = new QToolButton(this); + actButton->setPopupMode(QToolButton::InstantPopup); + actButton->setArrowType(Qt::DownArrow); + icon = new QLabel(this); + name = new QLabel(this); + name->setWordWrap(true); + name->setTextFormat(Qt::RichText); + name->setTextInteractionFlags(Qt::NoTextInteraction); + //Add them to the layout + this->setLayout(new QHBoxLayout()); + this->layout()->setContentsMargins(1,1,1,1); + this->layout()->addWidget(icon); + this->layout()->addWidget(actButton); + this->layout()->addWidget(name); + //Set a custom object name so this can be tied into the Lumina Theme stylesheets + this->setObjectName("LuminaItemWidget"); +} + +void ItemWidget::setupContextMenu(){ + //Now refresh the context menu + contextMenu->clear(); + if(!QFile::exists(QDir::homePath()+"/Desktop/"+icon->whatsThis().section("/",-1)) ){ + //Does not have a desktop link + contextMenu->addAction( LXDG::findIcon("preferences-desktop-icons",""), tr("Pin to Desktop"), this, SLOT(PinToDesktop()) ); + } + //Favorite Item + if( LUtils::isFavorite(icon->whatsThis()) ){ //Favorite Item - can always remove this + contextMenu->addAction( LXDG::findIcon("edit-delete",""), tr("Remove from Favorites"), this, SLOT(RemoveFavorite()) ); + }else{ + //This file does not have a shortcut yet -- allow the user to add it + contextMenu->addAction( LXDG::findIcon("bookmark-toolbar",""), tr("Add to Favorites"), this, SLOT(AddFavorite()) ); + } + //QuickLaunch Item + if(LSession::handle()->sessionSettings()->value("QuicklaunchApps",QStringList()).toStringList().contains(icon->whatsThis()) ){ //Favorite Item - can always remove this + contextMenu->addAction( LXDG::findIcon("edit-delete",""), tr("Remove from Quicklaunch"), this, SLOT(RemoveQL()) ); + }else{ + //This file does not have a shortcut yet -- allow the user to add it + contextMenu->addAction( LXDG::findIcon("quickopen",""), tr("Add to Quicklaunch"), this, SLOT(AddQL()) ); + } +} + +void ItemWidget::setupActions(XDGDesktop app){ + if(app.actions.isEmpty()){ actButton->setVisible(false); return; } + //Actions Available - go ahead and list them all + actButton->setMenu( new QMenu(this) ); + for(int i=0; i<app.actions.length(); i++){ + QAction *act = new QAction(LXDG::findIcon(app.actions[i].icon, app.icon), app.actions[i].name, this); + act->setToolTip(app.actions[i].ID); + act->setWhatsThis(app.actions[i].ID); + actButton->menu()->addAction(act); + } + connect(actButton->menu(), SIGNAL(triggered(QAction*)), this, SLOT(actionClicked(QAction*)) ); + connect(actButton->menu(), SIGNAL(aboutToShow()), this, SLOT(actionMenuOpen()) ); + connect(actButton->menu(), SIGNAL(aboutToHide()), this, SLOT(actionMenuClosed()) ); + connect(menureset, SIGNAL(timeout()), this, SLOT(resetmenuflag()) ); +} + +void ItemWidget::updateItems(){ + //update the text/icon to match sizes + int H = 2.3*name->fontMetrics().height(); //make sure the height is large enough for two lines + icon->setFixedSize(QSize(H-4, H-4)); + actButton->setFixedSize( QSize( (H-4)/2, H-4) ); + QStringList newname = text.split("<br>"); + for(int i=0; i<newname.length(); i++){ newname[i] = name->fontMetrics().elidedText(newname[i], Qt::ElideRight, name->width()); } + name->setText( newname.join("<br>") ); + //Now reload the icon if necessary + if(icon->pixmap()->size().height() < (H-4) ){ + if(iconPath.isEmpty()){ + //Use item path (thumbnail or mimetype) + if(LUtils::imageExtensions().contains(icon->whatsThis().section("/",-1).section(".",-1).toLower()) ){ + icon->setPixmap( QIcon(icon->whatsThis()).pixmap(H-4,H-4).scaledToHeight(H-4,Qt::SmoothTransformation) ); + }else{ + icon->setPixmap( LXDG::findMimeIcon(icon->whatsThis().section("/",-1)).pixmap(H-4,H-4).scaledToHeight(H-4,Qt::SmoothTransformation) ); + } + }else{ + icon->setPixmap( LXDG::findIcon(iconPath,"preferences-system-windows-actions").pixmap(H-4,H-4).scaledToHeight(H-4,Qt::SmoothTransformation) ); + } + }else if(icon->pixmap()->size().height() > (H-4) ){ + icon->setPixmap( icon->pixmap()->scaled(H-4, H-4, Qt::IgnoreAspectRatio, Qt::SmoothTransformation) ); + } +} + +void ItemWidget::PinToDesktop(){ + qDebug() << "Create Link on Desktop:" << icon->whatsThis(); + bool ok = QFile::link(icon->whatsThis(), QDir::homePath()+"/Desktop/"+icon->whatsThis().section("/",-1)); + qDebug() << " - " << (ok ? "Success": "Failure"); +} + +void ItemWidget::RemoveFavorite(){ + LUtils::removeFavorite(icon->whatsThis()); + linkPath.clear(); + emit RemovedShortcut(); +} + +void ItemWidget::AddFavorite(){ + if( LUtils::addFavorite(icon->whatsThis()) ){ + linkPath = icon->whatsThis(); + emit NewShortcut(); + } + +} +void ItemWidget::RemoveQL(){ + qDebug() << "Remove QuickLaunch Button:" << icon->whatsThis(); + emit toggleQuickLaunch(icon->whatsThis(), false); +} + +void ItemWidget::AddQL(){ + qDebug() << "Add QuickLaunch Button:" << icon->whatsThis(); + emit toggleQuickLaunch(icon->whatsThis(), true); +} + + +void ItemWidget::ItemClicked(){ + if(!linkPath.isEmpty()){ emit RunItem(linkPath); } + else{ emit RunItem(icon->whatsThis()); } +} + +void ItemWidget::actionClicked(QAction *act){ + actButton->menu()->hide(); + QString cmd = "lumina-open -action \""+act->whatsThis()+"\" \"%1\""; + if(!linkPath.isEmpty()){ cmd = cmd.arg(linkPath); } + else{ cmd = cmd.arg(icon->whatsThis()); } + emit RunItem(cmd); +}
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemstart/ItemWidget.h b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/ItemWidget.h new file mode 100644 index 00000000..0f24cec4 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/ItemWidget.h @@ -0,0 +1,98 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This item widget manages a single file/directory +//=========================================== +#ifndef _LUMINA_PANEL_SYSTEM_START_ITEM_WIDGET_H +#define _LUMINA_PANEL_SYSTEM_START_ITEM_WIDGET_H + +#include <QFrame> +#include <QLabel> +#include <QToolButton> +#include <QString> +#include <QHBoxLayout> +#include <QSize> +#include <QDir> +#include <QFile> +#include <QMouseEvent> +#include <QAction> +#include <QMenu> +#include <QTimer> +#include <QResizeEvent> + +#include <LuminaXDG.h> + +class ItemWidget : public QFrame{ + Q_OBJECT +public: + //Overloaded Constructors for various uses + // - Favorites (path/type) + ItemWidget(QWidget *parent=0, QString itemPath="", QString type="unknown", bool goback=false); + // - Generic Apps + ItemWidget(QWidget *parent=0, XDGDesktop item= XDGDesktop()); + // - Categories + //ItemWidget(QWidget *parent=0, QString cat=""); + + ~ItemWidget(); + + bool gooditem; + +private: + QToolButton *actButton; + QMenu *contextMenu; + QLabel *icon, *name; + bool isDirectory, isShortcut, menuopen; + QString linkPath, iconPath, text; + QTimer *menureset; + + void createWidget(); + //void setupButton(bool disable = false); + void setupContextMenu(); + void setupActions(XDGDesktop); + + void updateItems(); //update the text/icon to match sizes + +private slots: + void PinToDesktop(); + void RemoveFavorite(); + void AddFavorite(); + void RemoveQL(); + void AddQL(); + void ItemClicked(); + void actionClicked(QAction*); + //Functions to fix the submenu open/close issues + void actionMenuOpen(){ + if(menureset->isActive()){ menureset->stop(); } + menuopen = true; + } + void resetmenuflag(){ menuopen = false; } //tied to the "menureset" timer + void actionMenuClosed(){ menureset->start(); } + + +protected: + void mouseReleaseEvent(QMouseEvent *event){ + if(menuopen){ resetmenuflag(); } //skip this event if a submenu was open + else if(event->button() == Qt::RightButton && !icon->whatsThis().startsWith("chcat::::") ){ + menuopen = true; + setupContextMenu(); + contextMenu->popup(event->globalPos()); + }else if(event->button() != Qt::NoButton){ ItemClicked(); } + } + + void resizeEvent(QResizeEvent *ev){ + updateItems(); //update the sizing of everything + QFrame::resizeEvent(ev); // do the normal procedures + } + +signals: + void NewShortcut(); + void RemovedShortcut(); + void RunItem(QString cmd); + void toggleQuickLaunch(QString path, bool ok); + +}; + +#endif diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemstart/LStartButton.cpp b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/LStartButton.cpp new file mode 100644 index 00000000..e08ef1c8 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/LStartButton.cpp @@ -0,0 +1,120 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LStartButton.h" +#include "../../LSession.h" + +#include <LuminaXDG.h> +#include <LuminaUtils.h> //This contains the "ResizeMenu" class + +LStartButtonPlugin::LStartButtonPlugin(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){ + button = new QToolButton(this); + button->setAutoRaise(true); + button->setToolButtonStyle(Qt::ToolButtonIconOnly); + button->setPopupMode(QToolButton::DelayedPopup); //make sure it runs the update routine first + connect(button, SIGNAL(clicked()), this, SLOT(openMenu())); + this->layout()->setContentsMargins(0,0,0,0); + this->layout()->addWidget(button); + menu = new ResizeMenu(this); + menu->setContentsMargins(1,1,1,1); + connect(menu, SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed())); + connect(menu, SIGNAL(MenuResized(QSize)), this, SLOT(SaveMenuSize(QSize)) ); + startmenu = new StartMenu(this); + connect(startmenu, SIGNAL(CloseMenu()), this, SLOT(closeMenu()) ); + connect(startmenu, SIGNAL(UpdateQuickLaunch(QStringList)), this, SLOT(updateQuickLaunch(QStringList))); + menu->setContents(startmenu); + QSize saved = LSession::handle()->DesktopPluginSettings()->value("panelPlugs/"+this->type()+"/MenuSize", QSize(0,0)).toSize(); + if(!saved.isNull()){ startmenu->setFixedSize(saved); } //re-load the previously saved value + + button->setMenu(menu); + connect(menu, SIGNAL(aboutToHide()), this, SLOT(updateButtonVisuals()) ); + QTimer::singleShot(0,this, SLOT(OrientationChange())); //Update icons/sizes + QTimer::singleShot(0, startmenu, SLOT(ReLoadQuickLaunch()) ); +} + +LStartButtonPlugin::~LStartButtonPlugin(){ + +} + +void LStartButtonPlugin::updateButtonVisuals(){ + button->setToolTip(tr("")); + button->setText( SYSTEM::user() ); + button->setIcon( LXDG::findIcon("pcbsd","Lumina-DE") ); //force icon refresh +} + +void LStartButtonPlugin::updateQuickLaunch(QStringList apps){ + //First clear any obsolete apps + QStringList old; + qDebug() << "Update QuickLaunch Buttons"; + for(int i=0; i<QUICKL.length(); i++){ + if( !apps.contains(QUICKL[i]->whatsThis()) ){ + //App was removed + QUICKL.takeAt(i)->deleteLater(); + i--; + }else{ + //App still listed - update the button + old << QUICKL[i]->whatsThis(); //add the list of current buttons + LFileInfo info(QUICKL[i]->whatsThis()); + QUICKL[i]->setIcon( LXDG::findIcon(info.iconfile(),"unknown") ); + if(info.isDesktopFile()){ QUICKL[i]->setToolTip( info.XDG()->name ); } + else{ QUICKL[i]->setToolTip( info.fileName() ); } + } + } + //Now go through and create any new buttons + for(int i=0; i<apps.length(); i++){ + if( !old.contains(apps[i]) ){ + //New App + LQuickLaunchButton *tmp = new LQuickLaunchButton(apps[i], this); + QUICKL << tmp; + LFileInfo info(apps[i]); + tmp->setIcon( LXDG::findIcon( info.iconfile() ) ); + if(info.isDesktopFile()){ tmp->setToolTip( info.XDG()->name ); } + else{ tmp->setToolTip( info.fileName() ); } + //Now add the button to the layout and connect the signal/slots + this->layout()->insertWidget(i+1,tmp); //"button" is always in slot 0 + connect(tmp, SIGNAL(Launch(QString)), this, SLOT(LaunchQuick(QString)) ); + connect(tmp, SIGNAL(Remove(QString)), this, SLOT(RemoveQuick(QString)) ); + } + } + qDebug() << " - Done updateing QuickLaunch Buttons"; + QTimer::singleShot(0,this, SLOT(OrientationChange())); //Update icons/sizes +} + +void LStartButtonPlugin::LaunchQuick(QString file){ + //Need to get which button was clicked + qDebug() << "Quick Launch triggered:" << file; + if(!file.isEmpty()){ + LSession::LaunchApplication("lumina-open \""+file+"\""); + emit MenuClosed(); + } +} + +void LStartButtonPlugin::RemoveQuick(QString file){ + qDebug() << "Remove Quicklaunch Button:" << file; + if(!file.isEmpty()){ + startmenu->UpdateQuickLaunch(file, false); //always a removal + emit MenuClosed(); + } +} + +void LStartButtonPlugin::SaveMenuSize(QSize sz){ + //Save this size for the menu + LSession::handle()->DesktopPluginSettings()->setValue("panelPlugs/"+this->type()+"/MenuSize", sz); +} + +// ======================== +// PRIVATE FUNCTIONS +// ======================== +void LStartButtonPlugin::openMenu(){ + if(menu->isVisible()){ return; } //don't re-show it - already open + startmenu->UpdateMenu(); + button->showMenu(); +} + +void LStartButtonPlugin::closeMenu(){ + menu->hide(); +} + diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemstart/LStartButton.h b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/LStartButton.h new file mode 100644 index 00000000..f549b8d2 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/LStartButton.h @@ -0,0 +1,111 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This panel plugin is the main button that allow the user to run +// applications or logout of the desktop +//=========================================== +#ifndef _LUMINA_DESKTOP_START_MENU_PLUGIN_H +#define _LUMINA_DESKTOP_START_MENU_PLUGIN_H + +// Qt includes +#include <QMenu> +#include <QWidgetAction> +#include <QToolButton> +#include <QString> +#include <QWidget> +#include <QMenu> + +// Lumina-desktop includes +//#include "../../Globals.h" +#include "../LPPlugin.h" //main plugin widget + +// libLumina includes +#include <LuminaXDG.h> +#include <LuminaUtils.h> + +#include "StartMenu.h" + +//Simple Tool Button For QuickLaunch Items +class LQuickLaunchButton : public QToolButton{ + Q_OBJECT +signals: + void Launch(QString); + void Remove(QString); + +private slots: + void rmentry(){ + emit Remove(this->whatsThis()); + } + void launchentry(){ + emit Launch(this->whatsThis()); + } + +public: + LQuickLaunchButton(QString path, QWidget* parent = 0) : QToolButton(parent){ + this->setWhatsThis(path); + this->setMenu(new QMenu(this)); + this->setContextMenuPolicy(Qt::CustomContextMenu); + this->menu()->addAction( LXDG::findIcon("edit-delete",""), tr("Remove from Quicklaunch"), this, SLOT(rmentry()) ); + connect(this, SIGNAL(clicked()), this, SLOT(launchentry()) ); + connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showMenu()) ); + } + ~LQuickLaunchButton(){} + +}; + +// PANEL PLUGIN BUTTON +class LStartButtonPlugin : public LPPlugin{ + Q_OBJECT + +public: + LStartButtonPlugin(QWidget *parent = 0, QString id = "systemstart", bool horizontal=true); + ~LStartButtonPlugin(); + +private: + ResizeMenu *menu; + //QWidgetAction *mact; + StartMenu *startmenu; + QToolButton *button; + QList<LQuickLaunchButton*> QUICKL; + +private slots: + void openMenu(); + void closeMenu(); + + void updateButtonVisuals(); + + void updateQuickLaunch(QStringList); + void LaunchQuick(QString); + void RemoveQuick(QString); + void SaveMenuSize(QSize); + +public slots: + void OrientationChange(){ + if(this->layout()->direction()==QBoxLayout::LeftToRight){ + this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding); + button->setIconSize( QSize(this->height(), this->height()) ); + for(int i=0; i<QUICKL.length(); i++){ QUICKL[i]->setIconSize(QSize(this->height(), this->height())); } + }else{ + this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); + button->setIconSize( QSize(this->width(), this->width()) ); + for(int i=0; i<QUICKL.length(); i++){ QUICKL[i]->setIconSize(QSize(this->width(), this->width())); } + } + this->layout()->update(); + updateButtonVisuals(); + } + + void LocaleChange(){ + updateButtonVisuals(); + startmenu->UpdateAll(); + } + + void ThemeChange(){ + updateButtonVisuals(); + startmenu->UpdateAll(); + } +}; + +#endif
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp new file mode 100644 index 00000000..9f172096 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp @@ -0,0 +1,576 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "StartMenu.h" +#include "ui_StartMenu.h" +//#include <QtConcurrent> + +#include <LuminaOS.h> +#include "../../LSession.h" +#include <QtConcurrent> + +#include "ItemWidget.h" +//#define SSAVER QString("xscreensaver-demo") + +StartMenu::StartMenu(QWidget *parent) : QWidget(parent), ui(new Ui::StartMenu){ + ui->setupUi(this); //load the designer file + this->setMouseTracking(true); + sysapps = LSession::handle()->applicationMenu()->currentAppHash(); + connect(LSession::handle()->applicationMenu(), SIGNAL(AppMenuUpdated()), this, SLOT(UpdateApps()) ); + //Need to load the last used setting of the application list + QString state = LSession::handle()->DesktopPluginSettings()->value("panelPlugs/systemstart/showcategories", "partial").toString(); + if(state=="partial"){ui->check_apps_showcats->setCheckState(Qt::PartiallyChecked); } + else if(state=="true"){ ui->check_apps_showcats->setCheckState(Qt::Checked); } + else{ ui->check_apps_showcats->setCheckState(Qt::Unchecked); } + connect(ui->check_apps_showcats, SIGNAL(stateChanged(int)), this, SLOT(catViewChanged()) ); + UpdateAll(); + QTimer::singleShot(10, this,SLOT(UpdateApps())); + QTimer::singleShot(10, this, SLOT(UpdateFavs())); +} + +StartMenu::~StartMenu(){ + +} + +void StartMenu::UpdateAll(){ + //Update all the icons/text on all the pages + + // Update Text + ui->retranslateUi(this); + + //Update Icons + ui->tool_goto_apps->setIcon(LXDG::findIcon("system-run","")); + ui->tool_goto_settings->setIcon(LXDG::findIcon("preferences-system","")); + ui->tool_launch_fm->setIcon(LXDG::findIcon("user-home","")); + ui->tool_launch_desksettings->setIcon(LXDG::findIcon("preferences-desktop","")); + ui->tool_lock->setIcon(LXDG::findIcon("system-lock-screen","")); + ui->tool_goto_logout->setIcon(LXDG::findIcon("system-log-out","")); + ui->tool_back->setIcon(LXDG::findIcon("go-previous","")); + ui->tool_launch_deskinfo->setIcon(LXDG::findIcon("system-help","")); + + ui->tool_launch_mixer->setIcon( LXDG::findIcon("preferences-desktop-sound","") ); + ui->label_bright_icon->setPixmap( LXDG::findIcon("preferences-system-power-management","").pixmap(ui->tool_goto_apps->iconSize()) ); + ui->label_locale_icon->setPixmap( LXDG::findIcon("preferences-desktop-locale","").pixmap(ui->tool_goto_apps->iconSize()) ); + ui->tool_set_nextwkspace->setIcon(LXDG::findIcon("go-next-view","")); + ui->tool_set_prevwkspace->setIcon(LXDG::findIcon("go-previous-view","")); + ui->tool_logout->setIcon(LXDG::findIcon("system-log-out","")); + ui->tool_restart->setIcon(LXDG::findIcon("system-reboot","")); + ui->tool_shutdown->setIcon(LXDG::findIcon("system-shutdown","")); + ui->tool_suspend->setIcon(LXDG::findIcon("system-suspend","")); + + //Update Visibility of system/session/OS options + // -- Control Panel + QString tmp = LOS::ControlPanelShortcut(); + if(QFile::exists(tmp)){ + ui->tool_launch_controlpanel->setWhatsThis(tmp); + //Now read the file to see which icon to use + bool ok = false; + XDGDesktop desk = LXDG::loadDesktopFile(tmp, ok); + if(ok && LXDG::checkValidity(desk)){ + ui->tool_launch_controlpanel->setIcon(LXDG::findIcon(desk.icon,"preferences-other")); + }else{ ui->tool_launch_controlpanel->setVisible(false); } + }else{ ui->tool_launch_controlpanel->setVisible(false); } + // -- App Store + tmp = LOS::AppStoreShortcut(); + if(QFile::exists(tmp)){ + ui->tool_launch_store->setWhatsThis(tmp); + //Now read the file to see which icon to use + bool ok = false; + XDGDesktop desk = LXDG::loadDesktopFile(tmp, ok); + if(ok && LXDG::checkValidity(desk)){ + ui->tool_launch_store->setIcon(LXDG::findIcon(desk.icon,"utilities-file-archiver")); + }else{ ui->tool_launch_store->setVisible(false); } + }else{ ui->tool_launch_store->setVisible(false); } + //Audio Controls + ui->frame_audio->setVisible( LOS::audioVolume() >=0 ); + //Brightness controls + ui->frame_bright->setVisible( LOS::ScreenBrightness() >=0 ); + //Shutdown/restart + bool ok = LOS::userHasShutdownAccess(); + ui->frame_leave_system->setWhatsThis(ok ? "allowed": ""); + ui->frame_leave_system->setVisible(ok); + //Battery Availability + ok = LOS::hasBattery(); + ui->label_status_battery->setWhatsThis(ok ? "allowed": ""); + ui->label_status_battery->setVisible(ok); + //Locale availability + QStringList locales = LUtils::knownLocales(); + ui->stackedWidget->setCurrentWidget(ui->page_main); //need to ensure the settings page is not active + ui->combo_locale->clear(); + QString curr = LUtils::currentLocale(); + qDebug() << "Update Locales:" << locales; + qDebug() << "Current Locale:" << curr; + for(int i=0; i<locales.length(); i++){ + QLocale loc( (locales[i]=="pt") ? "pt_PT" : locales[i] ); + ui->combo_locale->addItem(loc.nativeLanguageName() +" ("+locales[i]+")", locales[i]); //Make the display text prettier later + if(locales[i] == curr || locales[i] == curr.section("_",0,0) ){ + //Current Locale + ui->combo_locale->setCurrentIndex(ui->combo_locale->count()-1); //the last item in the list right now + } + } + ui->frame_locale->setVisible(locales.length() > 1); + //User Name in status bar + ui->label_status->setText( QString::fromLocal8Bit(getlogin()) ); + //Lumina Utilities + ui->tool_launch_desksettings->setVisible(LUtils::isValidBinary("lumina-config")); + ui->tool_launch_deskinfo->setVisible(LUtils::isValidBinary("lumina-info")); + +} + +void StartMenu::UpdateMenu(bool forceall){ + if(forceall){ UpdateAll(); } + //Quick update routine before the menu is made visible + UpdateFavs(); + if(ui->stackedWidget->currentWidget() != ui->page_main){ + ui->stackedWidget->setCurrentWidget(ui->page_main); //just show the main page + }else{ + on_stackedWidget_currentChanged(0); //refresh/update the main page every time + } +} + +void StartMenu::ReLoadQuickLaunch(){ + emit UpdateQuickLaunch( LSession::handle()->sessionSettings()->value("QuicklaunchApps",QStringList()).toStringList() ); +} + +void StartMenu::UpdateQuickLaunch(QString path, bool keep){ + QStringList QL = LSession::handle()->sessionSettings()->value("QuicklaunchApps",QStringList()).toStringList(); + if(keep){QL << path; } + else{ QL.removeAll(path); } + QL.removeDuplicates(); + LSession::handle()->sessionSettings()->setValue("QuicklaunchApps",QL); + //LSession::handle()->sessionSettings()->sync(); + emit UpdateQuickLaunch(QL); +} + +// ========================== +// PRIVATE FUNCTIONS +// ========================== +void StartMenu::ClearScrollArea(QScrollArea *area){ + area->takeWidget()->deleteLater(); + area->setWidget( new QWidget() ); //create a new widget in the scroll area + area->widget()->setContentsMargins(0,0,0,0); + QVBoxLayout *layout = new QVBoxLayout; + layout->setSpacing(2); + layout->setContentsMargins(3,1,3,1); + layout->setDirection(QBoxLayout::TopToBottom); + layout->setAlignment(Qt::AlignTop); + area->widget()->setLayout(layout); +} + +void StartMenu::SortScrollArea(QScrollArea *area){ + //qDebug() << "Sorting Scroll Area:"; + //Sort all the items in the scroll area alphabetically + QLayout *lay = area->widget()->layout(); + QStringList items; + for(int i=0; i<lay->count(); i++){ + items << lay->itemAt(i)->widget()->whatsThis(); + } + + items.sort(); + //qDebug() << " - Sorted Items:" << items; + for(int i=0; i<items.length(); i++){ + if(items[i].isEmpty()){ continue; } + //QLayouts are weird in that they can only add items to the end - need to re-insert almost every item + for(int j=0; j<lay->count(); j++){ + //Find this item + if(lay->itemAt(j)->widget()->whatsThis()==items[i]){ + //Found it - now move it if necessary + //qDebug() << "Found Item:" << items[i] << i << j; + lay->addItem( lay->takeAt(j) ); + break; + } + } + } +} + +// ======================== +// PRIVATE SLOTS +// ======================== +void StartMenu::LaunchItem(QString path, bool fix){ + if(path.startsWith("chcat::::")){ + ChangeCategory(path.section("::::",1,50)); + return; + } + qDebug() << "Launching Item:" << path << fix; + if(!path.isEmpty()){ + qDebug() << "Launch Application:" << path; + if( fix && !path.startsWith("lumina-open") ){ LSession::LaunchApplication("lumina-open \""+path+"\""); } + else{ LSession::LaunchApplication(path); } + emit CloseMenu(); //so the menu container will close + } +} + +void StartMenu::ChangeCategory(QString cat){ + //This only happens on user interaction - make sure to run the update routine in a separate thread + CCat = cat; + UpdateApps(); + //QtConcurrent::run(this, &StartMenu::UpdateApps); +} + +//Listing Update routines +void StartMenu::UpdateApps(){ + ClearScrollArea(ui->scroll_apps); + //Now assemble the apps list (note: this normally happens in the background - not when it is visible/open) + //qDebug() << "Update Apps:" << CCat << ui->check_apps_showcats->checkState(); + if(ui->check_apps_showcats->checkState() == Qt::PartiallyChecked){ + //qDebug() << " - Partially Checked"; + //Show a single page of apps, but still divided up by categories + CCat.clear(); + QStringList cats = sysapps->keys(); + cats.sort(); + cats.removeAll("All"); + for(int c=0; c<cats.length(); c++){ + QList<XDGDesktop> apps = sysapps->value(cats[c]); + if(apps.isEmpty()){ continue; } + //Add the category label to the scroll + QLabel *catlabel = new QLabel("<b>"+cats[c]+"</b>",ui->scroll_apps->widget()); + catlabel->setAlignment(Qt::AlignCenter); + ui->scroll_apps->widget()->layout()->addWidget(catlabel); + //Now add all the apps for this category + for(int i=0; i<apps.length(); i++){ + ItemWidget *it = new ItemWidget(ui->scroll_apps->widget(), apps[i] ); + if(!it->gooditem){ continue; } //invalid for some reason + ui->scroll_apps->widget()->layout()->addWidget(it); + connect(it, SIGNAL(NewShortcut()), this, SLOT(UpdateFavs()) ); + connect(it, SIGNAL(RemovedShortcut()), this, SLOT(UpdateFavs()) ); + connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) ); + connect(it, SIGNAL(toggleQuickLaunch(QString, bool)), this, SLOT(UpdateQuickLaunch(QString, bool)) ); + } + } + + }else if(ui->check_apps_showcats->checkState() == Qt::Checked){ + //qDebug() << " - Checked"; + //Only show categories to start with - and have the user click-into a cat to see apps + if(CCat.isEmpty()){ + //No cat selected yet - show cats only + QStringList cats = sysapps->keys(); + cats.sort(); + cats.removeAll("All"); //This is not a "real" category + for(int c=0; c<cats.length(); c++){ + ItemWidget *it = new ItemWidget(ui->scroll_apps->widget(), cats[c], "chcat::::"+cats[c] ); + if(!it->gooditem){ continue; } //invalid for some reason + ui->scroll_apps->widget()->layout()->addWidget(it); + connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) ); + } + }else{ + //qDebug() << "Show Apps For category:" << CCat; + //Show the "go back" button + ItemWidget *it = new ItemWidget(ui->scroll_apps->widget(), CCat, "chcat::::"+CCat, true); + //if(!it->gooditem){ continue; } //invalid for some reason + ui->scroll_apps->widget()->layout()->addWidget(it); + connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) ); + //Show apps for this cat + QList<XDGDesktop> apps = sysapps->value(CCat); + for(int i=0; i<apps.length(); i++){ + //qDebug() << " - App:" << apps[i].name; + ItemWidget *it = new ItemWidget(ui->scroll_apps->widget(), apps[i] ); + if(!it->gooditem){ continue; } //invalid for some reason + ui->scroll_apps->widget()->layout()->addWidget(it); + connect(it, SIGNAL(NewShortcut()), this, SLOT(UpdateFavs()) ); + connect(it, SIGNAL(RemovedShortcut()), this, SLOT(UpdateFavs()) ); + connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) ); + connect(it, SIGNAL(toggleQuickLaunch(QString, bool)), this, SLOT(UpdateQuickLaunch(QString, bool)) ); + } + } + + }else{ + //qDebug() << " - Not Checked"; + //No categories at all - just alphabetize all the apps + QList<XDGDesktop> apps = sysapps->value("All"); + CCat.clear(); + //Now add all the apps for this category + for(int i=0; i<apps.length(); i++){ + ItemWidget *it = new ItemWidget(ui->scroll_apps->widget(), apps[i] ); + if(!it->gooditem){ continue; } //invalid for some reason + ui->scroll_apps->widget()->layout()->addWidget(it); + connect(it, SIGNAL(NewShortcut()), this, SLOT(UpdateFavs()) ); + connect(it, SIGNAL(RemovedShortcut()), this, SLOT(UpdateFavs()) ); + connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) ); + connect(it, SIGNAL(toggleQuickLaunch(QString, bool)), this, SLOT(UpdateQuickLaunch(QString, bool)) ); + } + } + + +} + +void StartMenu::UpdateFavs(){ + //SYNTAX NOTE: (per-line) "<name>::::[dir/app/<mimetype>]::::<path>" + QStringList newfavs = LUtils::listFavorites(); + if(favs == newfavs){ return; } //nothing to do - same as before + favs = newfavs; + ClearScrollArea(ui->scroll_favs); + favs.sort(); + //Iterate over types of favorites + QStringList rest = favs; + QStringList tmp; + for(int type = 0; type<3; type++){ + if(type==0){ tmp = favs.filter("::::app::::"); } //apps first + else if(type==1){ tmp = favs.filter("::::dir::::"); } //dirs next + else{ tmp = rest; } //everything left over + if(type==1){ + //Need to run a special routine for sorting the apps (already in the widget) + // Since each app actually might have a different name listed within the file + QLayout *lay = ui->scroll_favs->widget()->layout(); + QStringList items; + for(int i=0; i<lay->count(); i++){ + items << lay->itemAt(i)->widget()->whatsThis().toLower(); + } + + items.sort(); + //qDebug() << " - Sorted Items:" << items; + for(int i=0; i<items.length(); i++){ + if(items[i].isEmpty()){ continue; } + //QLayouts are weird in that they can only add items to the end - need to re-insert almost every item + for(int j=0; j<lay->count(); j++){ + //Find this item + if(lay->itemAt(j)->widget()->whatsThis().toLower()==items[i]){ + //Found it - now move it if necessary + //qDebug() << "Found Item:" << items[i] << i << j; + lay->addItem( lay->takeAt(j) ); + break; + } + } + } + }//end of special app sorting routine + tmp.sort(); //Sort alphabetically by name (dirs/files) + for(int i=0; i<tmp.length(); i++){ + if(type<2){ rest.removeAll(tmp[i]); } + if(!QFile::exists(tmp[i].section("::::",2,50))){ continue; } //invalid favorite - skip it + ItemWidget *it = new ItemWidget(ui->scroll_favs->widget(), tmp[i].section("::::",2,50), tmp[i].section("::::",1,1) ); + if(!it->gooditem){ continue; } //invalid for some reason + ui->scroll_favs->widget()->layout()->addWidget(it); + connect(it, SIGNAL(NewShortcut()), this, SLOT(UpdateFavs()) ); + connect(it, SIGNAL(RemovedShortcut()), this, SLOT(UpdateFavs()) ); + connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) ); + connect(it, SIGNAL(toggleQuickLaunch(QString, bool)), this, SLOT(UpdateQuickLaunch(QString, bool)) ); + } + QApplication::processEvents(); + } +} + +// Page update routines +void StartMenu::on_stackedWidget_currentChanged(int val){ + QWidget *page = ui->stackedWidget->widget(val); + ui->tool_back->setVisible(page != ui->page_main); + ui->line_search->setVisible(false); //not implemented yet + //Now the page specific updates + if(page == ui->page_main){ + if(!ui->label_status_battery->whatsThis().isEmpty()){ + //Battery available - update the status button + int charge = LOS::batteryCharge(); + QString TT, ICON; + if(charge < 10){ ICON="-low"; } + else if(charge<20){ ICON="-caution"; } + else if(charge<40){ ICON="-040"; } + else if(charge<60){ ICON="-060"; } + else if(charge<80){ ICON="-080"; } + else{ ICON="-100"; } + if(LOS::batteryIsCharging()){ + if(charge>=80){ ICON.clear(); } //for charging, there is no suffix to the icon name over 80% + ICON.prepend("battery-charging"); + TT = QString(tr("%1% (Plugged In)")).arg(QString::number(charge)); + }else{ + ICON.prepend("battery"); + int secs = LOS::batterySecondsLeft(); + if(secs>1){ TT = QString(tr("%1% (%2 Estimated)")).arg(QString::number(charge), LUtils::SecondsToDisplay(secs)); } + else{ TT = QString(tr("%1% Remaining")).arg(QString::number(charge)); } + } + //qDebug() << " Battery Icon:" << ICON << val << TT + ui->label_status_battery->setPixmap( LXDG::findIcon(ICON,"").pixmap(ui->tool_goto_apps->iconSize()/2) ); + ui->label_status_battery->setToolTip(TT); + } + //Network Status + ui->label_status_network->clear(); //not implemented yet + }else if(page == ui->page_apps){ + //Nothing needed for this page explicitly + }else if( page == ui->page_settings){ + // -- Workspaces + int tot = LSession::handle()->XCB->NumberOfWorkspaces(); + if(tot>1){ + ui->frame_wkspace->setVisible(true); + int cur = LSession::handle()->XCB->CurrentWorkspace(); + ui->label_wkspace->setText( QString(tr("Workspace %1/%2")).arg(QString::number(cur+1), QString::number(tot)) ); + }else{ + ui->frame_wkspace->setVisible(false); + } + // -- Brightness Controls + int tmp = LOS::ScreenBrightness(); + ui->frame_bright->setVisible(tmp >= 0); + if(tmp >= 0){ ui->slider_bright->setValue(tmp); } + // -- Audio Controls + tmp = LOS::audioVolume(); + ui->frame_audio->setVisible(tmp >= 0); + if(tmp >= 0){ ui->slider_volume->setValue(tmp); } + }else if(page == ui->page_leave){ + if( !ui->frame_leave_system->whatsThis().isEmpty() ){ + //This frame is allowed/visible - need to adjust the shutdown detection + bool updating = LOS::systemPerformingUpdates(); + ui->tool_restart->setEnabled(!updating); + ui->tool_shutdown->setEnabled(!updating); + ui->label_updating->setVisible(updating); //to let the user know *why* they can't shutdown/restart right now + } + ui->frame_leave_suspend->setVisible( LOS::systemCanSuspend() ); + } + +} + +void StartMenu::catViewChanged(){ + QString state; + switch(ui->check_apps_showcats->checkState()){ + case Qt::Checked: + state = "true"; + break; + case Qt::PartiallyChecked: + state = "partial"; + break; + default: + state = "false"; + } + LSession::handle()->DesktopPluginSettings()->setValue("panelPlugs/systemstart/showcategories", state); + //Now kick off the reload of the apps list + UpdateApps(); + //QtConcurrent::run(this, &StartMenu::UpdateApps); //this was a direct user change - keep it thread safe +} +//Page Change Buttons +void StartMenu::on_tool_goto_apps_clicked(){ + ui->stackedWidget->setCurrentWidget(ui->page_apps); +} + +void StartMenu::on_tool_goto_settings_clicked(){ + ui->stackedWidget->setCurrentWidget(ui->page_settings); +} + +void StartMenu::on_tool_goto_logout_clicked(){ + ui->stackedWidget->setCurrentWidget(ui->page_leave); +} + +void StartMenu::on_tool_back_clicked(){ + ui->stackedWidget->setCurrentWidget(ui->page_main); +} + + +//Launch Buttons +void StartMenu::on_tool_launch_controlpanel_clicked(){ + LaunchItem(ui->tool_launch_controlpanel->whatsThis()); +} + +void StartMenu::on_tool_launch_fm_clicked(){ + LaunchItem(QDir::homePath()); +} + +void StartMenu::on_tool_launch_store_clicked(){ + LaunchItem(ui->tool_launch_store->whatsThis()); +} + +void StartMenu::on_tool_launch_desksettings_clicked(){ + LaunchItem("lumina-config", false); +} + +void StartMenu::on_tool_launch_deskinfo_clicked(){ + LaunchItem("lumina-info",false); +} + +//Logout Buttons +void StartMenu::on_tool_lock_clicked(){ + QProcess::startDetached("xscreensaver-command -lock"); +} + +void StartMenu::on_tool_logout_clicked(){ + emit CloseMenu(); + LSession::handle()->StartLogout(); +} + +void StartMenu::on_tool_restart_clicked(){ + emit CloseMenu(); + LSession::handle()->StartReboot(); +} + +void StartMenu::on_tool_shutdown_clicked(){ + emit CloseMenu(); + LSession::handle()->StartShutdown(); +} + +void StartMenu::on_tool_suspend_clicked(){ + //Make sure to lock the system first (otherwise anybody can access it again) + emit CloseMenu(); + LUtils::runCmd("xscreensaver-command -lock"); + LOS::systemSuspend(); +} + + +//Audio Volume +void StartMenu::on_slider_volume_valueChanged(int val){ + ui->label_vol->setText(QString::number(val)+"%"); + LOS::setAudioVolume(val); + //Also adjust the icon for the volume + if(val<1){ ui->tool_mute_audio->setIcon(LXDG::findIcon("audio-volume-muted","")); } + else if(val<33){ ui->tool_mute_audio->setIcon(LXDG::findIcon("audio-volume-low","")); } + else if(val<66){ ui->tool_mute_audio->setIcon(LXDG::findIcon("audio-volume-medium","")); } + else{ ui->tool_mute_audio->setIcon(LXDG::findIcon("audio-volume-high","")); } +} + +void StartMenu::on_tool_launch_mixer_clicked(){ + if(LOS::hasMixerUtility()){ + emit CloseMenu(); + LOS::startMixerUtility(); + } +} + +void StartMenu::on_tool_mute_audio_clicked(){ + static int lastvol = 50; + if(ui->slider_volume->value()==0){ ui->slider_volume->setValue(lastvol); } + else{ + lastvol = ui->slider_volume->value(); + ui->slider_volume->setValue(0); + } +} + +//Screen Brightness +void StartMenu::on_slider_bright_valueChanged(int val){ + ui->label_bright->setText(QString::number(val)+"%"); + LOS::setScreenBrightness(val); +} + + +//Workspace +void StartMenu::on_tool_set_nextwkspace_clicked(){ + int cur = LSession::handle()->XCB->CurrentWorkspace(); + int tot = LSession::handle()->XCB->NumberOfWorkspaces(); + //qDebug()<< "Next Workspace:" << cur << tot; + cur++; + if(cur>=tot){ cur = 0; } //back to beginning + //qDebug() << " - New Current:" << cur; + LSession::handle()->XCB->SetCurrentWorkspace(cur); + ui->label_wkspace->setText( QString(tr("Workspace %1/%2")).arg(QString::number(cur+1), QString::number(tot)) ); +} + +void StartMenu::on_tool_set_prevwkspace_clicked(){ + int cur = LSession::handle()->XCB->CurrentWorkspace(); + int tot = LSession::handle()->XCB->NumberOfWorkspaces(); + //qDebug()<< "Next Workspace:" << cur << tot; + cur--; + if(cur<0){ cur = tot-1; } //back to end + //qDebug() << " - New Current:" << cur; + LSession::handle()->XCB->SetCurrentWorkspace(cur); + ui->label_wkspace->setText( QString(tr("Workspace %1/%2")).arg(QString::number(cur+1), QString::number(tot)) ); +} + + +//Locale +void StartMenu::on_combo_locale_currentIndexChanged(int){ + //Get the currently selected Locale + if(ui->stackedWidget->currentWidget()!=ui->page_settings){ return; } + QString locale = ui->combo_locale->currentData().toString(); + emit CloseMenu(); + LSession::processEvents(); + LSession::handle()->switchLocale(locale); +} + + +//Search +void StartMenu::on_line_search_editingFinished(){ + +} diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.h b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.h new file mode 100644 index 00000000..23aa4c07 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.h @@ -0,0 +1,99 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef _LUMINA_DESKTOP_SYSTEM_START_PANEL_PLUGIN_H +#define _LUMINA_DESKTOP_SYSTEM_START_PANEL_PLUGIN_H + +#include <QWidget> +#include <QScrollArea> +#include <QMouseEvent> + +#include <LuminaXDG.h> + +namespace Ui{ + class StartMenu; +}; + +class StartMenu : public QWidget{ + Q_OBJECT +public: + StartMenu(QWidget *parent = 0); + ~StartMenu(); + +public slots: + void UpdateAll(); //for re-translation/icon changes + void UpdateMenu(bool forceall = false); //for item changes + + void ReLoadQuickLaunch(); + void UpdateQuickLaunch(QString, bool); + +private: + Ui::StartMenu *ui; + QHash<QString, QList<XDGDesktop> > *sysapps; + QStringList favs; + QString CCat; //current category + + //Simple utility functions + void ClearScrollArea(QScrollArea *area); + void SortScrollArea(QScrollArea *area); + +private slots: + void LaunchItem(QString path, bool fix = true); + + //Application/Favorite Listings + void ChangeCategory(QString cat); + void UpdateApps(); + void UpdateFavs(); + + // Page update routines + void on_stackedWidget_currentChanged(int); //page changed + void catViewChanged(); //application categorization view mode changed + + //Page Change Buttons + void on_tool_goto_apps_clicked(); + void on_tool_goto_settings_clicked(); + void on_tool_goto_logout_clicked(); + void on_tool_back_clicked(); + + //Launch Buttons + void on_tool_launch_controlpanel_clicked(); + void on_tool_launch_fm_clicked(); + void on_tool_launch_store_clicked(); + void on_tool_launch_desksettings_clicked(); + void on_tool_launch_deskinfo_clicked(); + + //Logout Buttons + void on_tool_lock_clicked(); + void on_tool_logout_clicked(); + void on_tool_restart_clicked(); + void on_tool_shutdown_clicked(); + void on_tool_suspend_clicked(); + + //Audio Volume + void on_slider_volume_valueChanged(int); + void on_tool_launch_mixer_clicked(); + void on_tool_mute_audio_clicked(); + + //Screen Brightness + void on_slider_bright_valueChanged(int); + + //Workspace + void on_tool_set_nextwkspace_clicked(); + void on_tool_set_prevwkspace_clicked(); + + //Locale + void on_combo_locale_currentIndexChanged(int); + + //Search + void on_line_search_editingFinished(); + +signals: + void CloseMenu(); + void UpdateQuickLaunch(QStringList); + +}; + +#endif
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.ui b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.ui new file mode 100644 index 00000000..896f1c8b --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.ui @@ -0,0 +1,1127 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>StartMenu</class> + <widget class="QWidget" name="StartMenu"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>181</width> + <height>405</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <property name="styleSheet"> + <string notr="true">QScrollArea{background: transparent; border: none; }</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>1</number> + </property> + <property name="topMargin"> + <number>1</number> + </property> + <property name="rightMargin"> + <number>1</number> + </property> + <property name="bottomMargin"> + <number>1</number> + </property> + <item> + <widget class="QLineEdit" name="line_search"> + <property name="placeholderText"> + <string>Type to search</string> + </property> + </widget> + </item> + <item> + <widget class="QStackedWidget" name="stackedWidget"> + <property name="currentIndex"> + <number>2</number> + </property> + <widget class="QWidget" name="page_main"> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLabel" name="label_status_battery"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string notr="true">bat%</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_status_network"> + <property name="text"> + <string notr="true">netstat</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_status"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string notr="true"/> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="Line" name="line_14"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QScrollArea" name="scroll_favs"> + <property name="contextMenuPolicy"> + <enum>Qt::CustomContextMenu</enum> + </property> + <property name="styleSheet"> + <string notr="true"/> + </property> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Plain</enum> + </property> + <property name="verticalScrollBarPolicy"> + <enum>Qt::ScrollBarAsNeeded</enum> + </property> + <property name="horizontalScrollBarPolicy"> + <enum>Qt::ScrollBarAlwaysOff</enum> + </property> + <property name="sizeAdjustPolicy"> + <enum>QAbstractScrollArea::AdjustToContents</enum> + </property> + <property name="widgetResizable"> + <bool>true</bool> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> + </property> + <widget class="QWidget" name="scrollAreaWidgetContents"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>179</width> + <height>169</height> + </rect> + </property> + </widget> + </widget> + </item> + <item> + <widget class="Line" name="line_3"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_launch_fm"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="text"> + <string>Browse Files</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_goto_apps"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="text"> + <string>Browse Applications</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_launch_controlpanel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="text"> + <string>Control Panel</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_goto_settings"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="text"> + <string>Preferences</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="popupMode"> + <enum>QToolButton::InstantPopup</enum> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_6"> + <item> + <widget class="QToolButton" name="tool_goto_logout"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="styleSheet"> + <string notr="true">QToolButton::menu-arrow{ image: rightarrow-icon; }</string> + </property> + <property name="text"> + <string>Leave</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="popupMode"> + <enum>QToolButton::DelayedPopup</enum> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + <property name="arrowType"> + <enum>Qt::NoArrow</enum> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_lock"> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="text"> + <string notr="true">lock</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <widget class="QWidget" name="page_apps"> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QToolButton" name="tool_launch_store"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="text"> + <string>Manage Applications</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line_15"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="check_apps_showcats"> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="text"> + <string>Show Categories</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + <property name="tristate"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line_4"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QScrollArea" name="scroll_apps"> + <property name="horizontalScrollBarPolicy"> + <enum>Qt::ScrollBarAlwaysOff</enum> + </property> + <property name="sizeAdjustPolicy"> + <enum>QAbstractScrollArea::AdjustToContents</enum> + </property> + <property name="widgetResizable"> + <bool>true</bool> + </property> + <widget class="QWidget" name="scrollAreaWidgetContents_2"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>179</width> + <height>280</height> + </rect> + </property> + </widget> + </widget> + </item> + <item> + <widget class="Line" name="line_5"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="page_settings"> + <layout class="QVBoxLayout" name="verticalLayout_9"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_7"> + <item> + <widget class="QToolButton" name="tool_launch_desksettings"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="text"> + <string>Configure Desktop</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_launch_deskinfo"> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="text"> + <string notr="true">info</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="Line" name="line_8"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QFrame" name="frame_audio"> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QVBoxLayout" name="verticalLayout_8"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <item> + <widget class="QToolButton" name="tool_mute_audio"> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="text"> + <string notr="true"/> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <layout class="QVBoxLayout" name="verticalLayout_11"> + <item> + <widget class="QSlider" name="slider_volume"> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="maximum"> + <number>100</number> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_vol"> + <property name="text"> + <string notr="true">vol%</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QToolButton" name="tool_launch_mixer"> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="text"> + <string notr="true"/> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="autoRaise"> + <bool>false</bool> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="Line" name="line_7"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QFrame" name="frame_bright"> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QVBoxLayout" name="verticalLayout_7"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <widget class="QLabel" name="label_bright_icon"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="text"> + <string notr="true"/> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QSlider" name="slider_bright"> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="minimum"> + <number>10</number> + </property> + <property name="maximum"> + <number>100</number> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_bright"> + <property name="text"> + <string notr="true">br%</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="Line" name="line_9"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QFrame" name="frame_wkspace"> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QVBoxLayout" name="verticalLayout_4"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <item> + <widget class="QToolButton" name="tool_set_prevwkspace"> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="text"> + <string notr="true">prev</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_wkspace"> + <property name="text"> + <string notr="true">workspace #</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_set_nextwkspace"> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="text"> + <string notr="true">next</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="Line" name="line_10"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QFrame" name="frame_locale"> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="label_locale_icon"> + <property name="text"> + <string notr="true">Locale:</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="combo_locale"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>161</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="Line" name="line_6"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="page_leave"> + <layout class="QVBoxLayout" name="verticalLayout_6"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>185</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QFrame" name="frame_leave_suspend"> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QVBoxLayout" name="verticalLayout_10"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QToolButton" name="tool_suspend"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="text"> + <string>Suspend System</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line_11"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QFrame" name="frame_leave_system"> + <property name="styleSheet"> + <string notr="true">QFrame#frame_leave_system{border: none; background: transparent; }</string> + </property> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QVBoxLayout" name="verticalLayout_5"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QToolButton" name="tool_restart"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="text"> + <string>Restart System</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_shutdown"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="text"> + <string>Power Off System</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_updating"> + <property name="text"> + <string>(System Performing Updates)</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="Line" name="line_13"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_logout"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="text"> + <string>Sign Out User</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line_12"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + </layout> + </widget> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_back"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="text"> + <string>Back</string> + </property> + <property name="iconSize"> + <size> + <width>32</width> + <height>32</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + <property name="arrowType"> + <enum>Qt::NoArrow</enum> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemtray/LSysTray.cpp b/src-qt5/core/lumina-desktop/panel-plugins/systemtray/LSysTray.cpp new file mode 100644 index 00000000..b6af4451 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/systemtray/LSysTray.cpp @@ -0,0 +1,164 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2012-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LSysTray.h" +#include "../../LSession.h" + +LSysTray::LSysTray(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){ + frame = new QFrame(this); + frame->setContentsMargins(0,0,0,0); + //frame->setStyleSheet("QFrame{ background: transparent; border: 1px solid transparent; border-radius: 3px; }"); + LI = new QBoxLayout( this->layout()->direction()); + frame->setLayout(LI); + LI->setAlignment(Qt::AlignCenter); + LI->setSpacing(0); + LI->setContentsMargins(0,0,0,0); + this->layout()->addWidget(frame); + this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); + //TrayID=0; + upTimer = new QTimer(this); + upTimer->setInterval(300000); //maximum time between refreshes is 5 minutes + connect(upTimer, SIGNAL(timeout()), this, SLOT(checkAll()) ); + isRunning = false; stopping = false; checking = false; pending = false; + QTimer::singleShot(100, this, SLOT(start()) ); + //Also do one extra check a minute or so after startup (just in case something got missed in the initial flood of registrations) + QTimer::singleShot(90000,this, SLOT(checkAll()) ); + connect(LSession::handle(), SIGNAL(TrayListChanged()), this, SLOT(checkAll()) ); + connect(LSession::handle(), SIGNAL(TrayIconChanged(WId)), this, SLOT(UpdateTrayWindow(WId)) ); + connect(LSession::handle(), SIGNAL(VisualTrayAvailable()), this, SLOT(start()) ); +} + +LSysTray::~LSysTray(){ + if(isRunning){ + this->stop(); + } +} + +void LSysTray::start(){ + if(isRunning || stopping){ return; } //already running + isRunning = LSession::handle()->registerVisualTray(this->winId()); + qDebug() << "Visual Tray Started:" << this->type() << isRunning; + if(isRunning){ + //upTimer->start(); + QTimer::singleShot(0,this, SLOT(checkAll()) ); + } +} + +void LSysTray::stop(){ + if(!isRunning){ return; } + stopping = true; + upTimer->stop(); + //Now close down the system tray registry + qDebug() << "Stop visual system tray:" << this->type(); + //LX11::closeSystemTray(TrayID); + //TrayID = 0; + disconnect(this); //remove any signals/slots + isRunning = false; + //Release all the tray applications and delete the containers + if( !LSession::handle()->currentTrayApps(this->winId()).isEmpty() ){ + qDebug() << " - Remove tray applications"; + //This overall system tray is not closed down - go ahead and release them here + for(int i=(trayIcons.length()-1); i>=0; i--){ + trayIcons[i]->detachApp(); + TrayIcon *cont = trayIcons.takeAt(i); + LI->removeWidget(cont); + cont->deleteLater(); + } + } + //Now let some other visual tray take over + LSession::handle()->unregisterVisualTray(this->winId()); + qDebug() << "Done stopping visual tray"; +} + +// ======================== +// PRIVATE FUNCTIONS +// ======================== +void LSysTray::checkAll(){ + if(!isRunning || stopping || checking){ pending = true; return; } //Don't check if not running at the moment + checking = true; + pending = false; + //Make sure this tray should handle the windows (was not disabled in the backend) + bool TrayRunning = LSession::handle()->registerVisualTray(this->winId()); + //qDebug() << "System Tray: Check tray apps"; + QList<WId> wins = LSession::handle()->currentTrayApps(this->winId()); + for(int i=0; i<trayIcons.length(); i++){ + int index = wins.indexOf(trayIcons[i]->appID()); + if(index < 0){ + //Tray Icon no longer exists: remove it + qDebug() << " - Visual System Tray: Remove Icon:" << trayIcons[i]->appID(); + TrayIcon *cont = trayIcons.takeAt(i); + cont->cleanup(); + LI->removeWidget(cont); + cont->deleteLater(); + i--; //List size changed + //Re-adjust the maximum widget size to account for what is left + if(this->layout()->direction()==QBoxLayout::LeftToRight){ + this->setMaximumSize( trayIcons.length()*this->height(), 10000); + }else{ + this->setMaximumSize(10000, trayIcons.length()*this->width()); + } + }else{ + //Tray Icon already exists + //qDebug() << " - SysTray: Update Icon"; + trayIcons[i]->update(); + wins.removeAt(index); //Already found - remove from the list + } + } + //Now go through any remaining windows and add them + for(int i=0; i<wins.length() && TrayRunning; i++){ + qDebug() << " - Visual System Tray: Add Icon:" << wins[i]; + TrayIcon *cont = new TrayIcon(this); + connect(cont, SIGNAL(BadIcon()), this, SLOT(checkAll()) ); + //LSession::processEvents(); + trayIcons << cont; + LI->addWidget(cont); + //qDebug() << " - Update tray layout"; + if(this->layout()->direction()==QBoxLayout::LeftToRight){ + cont->setSizeSquare(this->height()-2-2*frame->frameWidth()); //horizontal tray + this->setMaximumSize( trayIcons.length()*this->height(), 10000); + }else{ + cont->setSizeSquare(this->width()-2-2*frame->frameWidth()); //vertical tray + this->setMaximumSize(10000, trayIcons.length()*this->width()); + } + //LSession::processEvents(); + //qDebug() << " - Attach tray app"; + cont->attachApp(wins[i]); + if(cont->appID()==0){ + //could not attach window - remove the widget + qDebug() << " - Invalid Tray App: Could Not Embed:"; + trayIcons.takeAt(trayIcons.length()-1); //Always at the end + LI->removeWidget(cont); + cont->deleteLater(); + continue; + } + LI->update(); //make sure there is no blank space in the layout + } + /*if(listChanged){ + //Icons got moved around: be sure to re-draw all of them to fix visuals + for(int i=0; i<trayIcons.length(); i++){ + trayIcons[i]->update(); + } + }*/ + //qDebug() << " - System Tray: check done"; + checking = false; + if(pending){ QTimer::singleShot(0,this, SLOT(checkAll()) ); } +} + +void LSysTray::UpdateTrayWindow(WId win){ + if(!isRunning || stopping || checking){ return; } + for(int i=0; i<trayIcons.length(); i++){ + if(trayIcons[i]->appID()==win){ + //qDebug() << "System Tray: Update Window " << win; + trayIcons[i]->repaint(); //don't use update() because we need an instant repaint (not a cached version) + return; //finished now + } + } + //Could not find tray in the list, run the checkall routine to make sure we are not missing any + //qDebug() << "System Tray: Missing Window - check all"; + QTimer::singleShot(0,this, SLOT(checkAll()) ); +} + + diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemtray/LSysTray.h b/src-qt5/core/lumina-desktop/panel-plugins/systemtray/LSysTray.h new file mode 100644 index 00000000..84cde5c9 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/systemtray/LSysTray.h @@ -0,0 +1,73 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2012-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef _LUMINA_DESKTOP_SYSTRAY_H +#define _LUMINA_DESKTOP_SYSTRAY_H + +//Qt includes +#include <QFrame> +#include <QHBoxLayout> +#include <QDebug> +#include <QX11Info> +#include <QCoreApplication> + +//Local includes +#include "../LPPlugin.h" +#include "TrayIcon.h" + +//SYSTEM TRAY STANDARD DEFINITIONS +#define SYSTEM_TRAY_REQUEST_DOCK 0 +#define SYSTEM_TRAY_BEGIN_MESSAGE 1 +#define SYSTEM_TRAY_CANCEL_MESSAGE 2 + +class LSysTray : public LPPlugin{ + Q_OBJECT +public: + LSysTray(QWidget *parent = 0, QString id="systemtray", bool horizontal=true); + ~LSysTray(); + + virtual void AboutToClose(){ + this->stop(); + } + +private: + bool isRunning, stopping, checking, pending; + QList<TrayIcon*> trayIcons; + QFrame *frame; + QBoxLayout *LI; //layout items + QTimer *upTimer; //manual timer to force refresh of all items + +private slots: + void checkAll(); + void UpdateTrayWindow(WId win); + + //void removeTrayIcon(WId win); + +public slots: + void start(); + void stop(); + + virtual void OrientationChange(){ + //make sure the internal layout has the same orientation as the main widget + LI->setDirection( this->layout()->direction() ); + //Re-adjust the maximum widget size + int sz; + if(this->layout()->direction()==QBoxLayout::LeftToRight){ + this->setMaximumSize( trayIcons.length()*this->height(), 10000); + sz = this->height()-2*frame->frameWidth(); + }else{ + this->setMaximumSize(10000, trayIcons.length()*this->width()); + sz = this->width()-2*frame->frameWidth(); + } + for(int i=0; i<trayIcons.length(); i++){ + trayIcons[i]->setSizeSquare(sz); + trayIcons[i]->repaint(); + } + } + +}; + +#endif diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemtray/TrayIcon.cpp b/src-qt5/core/lumina-desktop/panel-plugins/systemtray/TrayIcon.cpp new file mode 100644 index 00000000..9fdbce50 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/systemtray/TrayIcon.cpp @@ -0,0 +1,128 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "TrayIcon.h" + +#include <LSession.h> +#include <QScreen> +#include <LuminaX11.h> + +TrayIcon::TrayIcon(QWidget *parent) : QWidget(parent){ + AID = 0; //nothing yet + IID = 0; + dmgID = 0; + badpaints = 0; + //this->setLayout(new QHBoxLayout); + //this->layout()->setContentsMargins(0,0,0,0); +} + +TrayIcon::~TrayIcon(){ +} + +void TrayIcon::cleanup(){ + AID = IID = 0; +} + +WId TrayIcon::appID(){ + return AID; +} + +void TrayIcon::attachApp(WId id){ + if(id==0){ return; } //nothing to attach + else if(AID!=0){ qWarning() << "Tray Icon is already attached to a window!"; return; } + AID = id; + //WIN = QWindow::fromWinId(AID); + //connect(WIN, SIGNAL( + //this->layout()->addWidget( QWidget::createWindowContainer(WIN, this) ); + IID = this->winId(); //embed directly into this widget + dmgID = LSession::handle()->XCB->EmbedWindow(AID, IID); + if( dmgID != 0 ){ + LSession::handle()->XCB->RestoreWindow(AID); //make it visible + //qDebug() << "New System Tray App:" << AID; + QTimer::singleShot(1000, this, SLOT(updateIcon()) ); + }else{ + //qWarning() << "Could not Embed Tray Application:" << AID; + IID = 0; + AID = 0; + } +} + +void TrayIcon::setSizeSquare(int side){ + //qDebug() << " Set Fixed Systray size:" << side; + this->setFixedSize( QSize(side, side) ); +} + +// ============== +// PUBLIC SLOTS +// ============== +void TrayIcon::detachApp(){ + if(AID==0){ return; } //already detached + //qDebug() << "Detach App:" << AID; + //Temporarily move the AID, so that internal slots do not auto-run + WId tmp = AID; + AID = 0; + //Now detach the application window and clean up + //qDebug() << " - Unembed"; + //WIN->setParent(0); //Reset parentage back to the main stack + LSession::handle()->XCB->UnembedWindow(tmp); + //qDebug() << " - finished app:" << tmp; + IID = 0; +} + +// ============== +// PRIVATE SLOTS +// ============== +void TrayIcon::updateIcon(){ + if(AID==0){ return; } + //Make sure the icon is square + QSize icosize = this->size(); + LSession::handle()->XCB->ResizeWindow(AID, icosize.width(), icosize.height()); + QTimer::singleShot(500, this, SLOT(update()) ); //make sure to re-draw the window in a moment +} + +// ============= +// PROTECTED +// ============= +void TrayIcon::paintEvent(QPaintEvent *event){ + QWidget::paintEvent(event); //make sure the background is already painted + if(AID!=0){ + //Update the background on the tray app + //qDebug() << "Paint Tray Background"; + //LSession::handle()->XCB->SetWindowBackground(this, this->geometry(), AID); + //qDebug() << "Paint Tray:" << AID; + QPainter painter(this); + //Now paint the tray app on top of the background + //qDebug() << " - Draw tray:" << AID << IID << this->winId(); + //qDebug() << " - - " << event->rect().x() << event->rect().y() << event->rect().width() << event->rect().height(); + //qDebug() << " - Get image:" << AID; + QPixmap pix = LSession::handle()->XCB->TrayImage(AID); //= WIN->icon().pixmap(this->size()); + + //qDebug() << " - Pix size:" << pix.size().width() << pix.size().height(); + //qDebug() << " - Geom:" << this->geometry().x() << this->geometry().y() << this->geometry().width() << this->geometry().height(); + if(!pix.isNull()){ + if(this->size() != pix.size()){ QTimer::singleShot(10, this, SLOT(updateIcon())); } + painter.drawPixmap(0,0,this->width(), this->height(), pix.scaled(this->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation) ); + badpaints = 0; //good paint + }else{ + badpaints++; + if(badpaints>5){ + qWarning() << " - - No Tray Icon/Image found!" << "ID:" << AID; + AID = 0; //reset back to nothing + IID = 0; + emit BadIcon(); //removed/destroyed in some non-valid way? + } + } + //qDebug() << " - Done"; + } +} + +void TrayIcon::resizeEvent(QResizeEvent *event){ + //qDebug() << "Resize Event:" << event->size().width() << event->size().height(); + if(AID!=0){ + LSession::handle()->XCB->ResizeWindow(AID, event->size()); + QTimer::singleShot(500, this, SLOT(update()) ); //make sure to re-draw the window in a moment + } +} diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemtray/TrayIcon.h b/src-qt5/core/lumina-desktop/panel-plugins/systemtray/TrayIcon.h new file mode 100644 index 00000000..5d072cc1 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/systemtray/TrayIcon.h @@ -0,0 +1,55 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// Note: The basic idea behind this class that that it puts the app window +// in the same spot as the tray icon (to directly pass mouse events and such), +// while keeping the tray icon visual in sync with the app window +//=========================================== +#ifndef _LUMINA_PANEL_PLUGIN_SYSTEM_TRAY_ICON_H +#define _LUMINA_PANEL_PLUGIN_SYSTEM_TRAY_ICON_H + +//Qt includes +#include <QWidget> +#include <QTimer> +#include <QPaintEvent> +#include <QMoveEvent> +#include <QResizeEvent> +#include <QPainter> +#include <QPixmap> +#include <QImage> +//#include <QWindow> +// libLumina includes +//#include <LuminaX11.h> + +class TrayIcon : public QWidget{ + Q_OBJECT +public: + TrayIcon(QWidget* parent = 0); + ~TrayIcon(); + + void cleanup(); //about to be removed after window was detroyed + + WId appID(); //the ID for the attached application + void attachApp(WId id); + void setSizeSquare(int side); + +public slots: + void detachApp(); + void updateIcon(); + +private: + WId IID, AID; //icon ID and app ID + int badpaints; + uint dmgID; + +protected: + void paintEvent(QPaintEvent *event); + void resizeEvent(QResizeEvent *event); + +signals: + void BadIcon(); +}; +#endif
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskButton.cpp b/src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskButton.cpp new file mode 100644 index 00000000..a67ef5d6 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskButton.cpp @@ -0,0 +1,238 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LTaskButton.h" +#include "LSession.h" + +#ifndef DEBUG +#define DEBUG 0 +#endif + +LTaskButton::LTaskButton(QWidget *parent, bool smallDisplay) : LTBWidget(parent){ + actMenu = new QMenu(this); + winMenu = new QMenu(this); + UpdateMenus(); + showText = !smallDisplay; + this->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + this->setAutoRaise(false); //make sure these always look like buttons + this->setContextMenuPolicy(Qt::CustomContextMenu); + this->setFocusPolicy(Qt::NoFocus); + this->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); + winMenu->setContextMenuPolicy(Qt::CustomContextMenu); + connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(openActionMenu()) ); + connect(this, SIGNAL(clicked()), this, SLOT(buttonClicked()) ); + connect(winMenu, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(openActionMenu()) ); + connect(winMenu, SIGNAL(triggered(QAction*)), this, SLOT(winClicked(QAction*)) ); + connect(winMenu, SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed())); + connect(actMenu, SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed())); +} + +LTaskButton::~LTaskButton(){ + +} + +//=========== +// PUBLIC +//=========== +QList<WId> LTaskButton::windows(){ + QList<WId> list; + for(int i=0; i<WINLIST.length(); i++){ + list << WINLIST[i].windowID(); + } + return list; +} + +QString LTaskButton::classname(){ + return cname; +} + +bool LTaskButton::isActive(){ + return cstate == LXCB::ACTIVE; +} + +void LTaskButton::addWindow(WId win){ + WINLIST << LWinInfo(win); + UpdateButton(); +} + +void LTaskButton::rmWindow(WId win){ + for(int i=0; i<WINLIST.length(); i++){ + if(WINLIST[i].windowID() == win){ + WINLIST.removeAt(i); + break; + } + } + UpdateButton(); +} + +//========== +// PRIVATE +//========== +LWinInfo LTaskButton::currentWindow(){ + if(WINLIST.length() == 1 || cWin.windowID()==0){ + return WINLIST[0]; //only 1 window - this must be it + }else{ + return cWin; + } +} + +//============= +// PUBLIC SLOTS +//============= +void LTaskButton::UpdateButton(){ + if(winMenu->isVisible()){ return; } //skip this if the window menu is currently visible for now + bool statusOnly = (WINLIST.length() == LWINLIST.length()); + LWINLIST = WINLIST; + + winMenu->clear(); + LXCB::WINDOWVISIBILITY showstate = LXCB::IGNORE; + for(int i=0; i<WINLIST.length(); i++){ + if(WINLIST[i].windowID() == 0){ + WINLIST.removeAt(i); + i--; + continue; + } + if(i==0 && !statusOnly){ + //Update the button visuals from the first window + this->setIcon(WINLIST[i].icon(noicon)); + cname = WINLIST[i].Class(); + if(cname.isEmpty()){ + //Special case (chrome/chromium does not register *any* information with X except window title) + cname = WINLIST[i].text(); + if(cname.contains(" - ")){ cname = cname.section(" - ",-1); } + } + this->setToolTip(cname); + } + bool junk; + QAction *tmp = winMenu->addAction( WINLIST[i].icon(junk), WINLIST[i].text() ); + tmp->setData(i); //save which number in the WINLIST this entry is for + LXCB::WINDOWVISIBILITY stat = WINLIST[i].status(true); //update the saved state for the window + if(stat<LXCB::ACTIVE && WINLIST[i].windowID() == LSession::handle()->activeWindow()){ stat = LXCB::ACTIVE; } + if(stat > showstate){ showstate = stat; } //higher priority + } + //Now setup the button appropriately + // - visibility + if(showstate == LXCB::IGNORE || WINLIST.length() < 1){ this->setVisible(false); } + else{ this->setVisible(true); } + // - functionality + if(WINLIST.length() == 1){ + //single window + this->setPopupMode(QToolButton::DelayedPopup); + this->setMenu(actMenu); + if(showText){ this->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); this->setText( WINLIST[0].text()); } + else if(noicon){ this->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); this->setText( cname ); } + else{ this->setToolButtonStyle(Qt::ToolButtonIconOnly); this->setText(""); } + this->setToolTip(WINLIST[0].text()); + }else if(WINLIST.length() > 1){ + //multiple windows + this->setPopupMode(QToolButton::InstantPopup); + this->setMenu(winMenu); + this->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + if(noicon || showText){ "("+QString::number(WINLIST.length())+") "+cname; } + else{ this->setText("("+QString::number(WINLIST.length())+")"); } + } + this->setState(showstate); //Make sure this is after the button setup so that it properly sets the margins/etc + cstate = showstate; //save this for later +} + +void LTaskButton::UpdateMenus(){ + //Action menu should be auto-created for the state of the current window (cWin/cstate) + actMenu->clear(); + if(cstate!=LXCB::ACTIVE){ + actMenu->addAction( LXDG::findIcon("edit-select",""), tr("Activate Window"), this, SLOT(triggerWindow()) ); + } + if(cstate!=LXCB::INVISIBLE){ + actMenu->addAction( LXDG::findIcon("view-close",""), tr("Minimize Window"), this, SLOT(minimizeWindow()) ); + if(LSession::handle()->XCB->WindowIsMaximized(cWin.windowID()) ){ + actMenu->addAction( LXDG::findIcon("view-restore",""), tr("Restore Window"), this, SLOT(maximizeWindow()) ); + }else{ + actMenu->addAction( LXDG::findIcon("view-fullscreen",""), tr("Maximize Window"), this, SLOT(maximizeWindow()) ); + } + } + actMenu->addAction( LXDG::findIcon("window-close",""), tr("Close Window"), this, SLOT(closeWindow()) ); +} + +//============= +// PRIVATE SLOTS +//============= +void LTaskButton::buttonClicked(){ + if(WINLIST.length() > 1){ + winMenu->popup(QCursor::pos()); + }else{ + triggerWindow(); + } +} + +void LTaskButton::closeWindow(){ + if(DEBUG){ qDebug() << "Close Window:" << this->text(); } + if(winMenu->isVisible()){ winMenu->hide(); } + LWinInfo win = currentWindow(); + LSession::handle()->XCB->CloseWindow(win.windowID()); + cWin = LWinInfo(); //clear the current +} + +void LTaskButton::maximizeWindow(){ + if(DEBUG){ qDebug() << "Maximize Window:" << this->text(); } + if(winMenu->isVisible()){ winMenu->hide(); } + LWinInfo win = currentWindow(); + LSession::handle()->XCB->MaximizeWindow(win.windowID()); + //LSession::handle()->adjustWindowGeom(win.windowID(), true); //run this for now until the WM works properly + cWin = LWinInfo(); //clear the current +} + +void LTaskButton::minimizeWindow(){ + if(DEBUG){ qDebug() << "Minimize Window:" << this->text(); } + if(winMenu->isVisible()){ winMenu->hide(); } + LWinInfo win = currentWindow(); + LSession::handle()->XCB->MinimizeWindow(win.windowID()); + cWin = LWinInfo(); //clear the current + QTimer::singleShot(100, this, SLOT(UpdateButton()) ); //make sure to update this button if losing active status +} + +void LTaskButton::triggerWindow(){ + LWinInfo win = currentWindow(); + //Check which state the window is currently in and flip it to the other + //LXCB::WINDOWSTATE state = cstate; + //if(DEBUG){ qDebug() << "Window State: " << state; } + if(cstate == LXCB::ACTIVE){ + if(DEBUG){ qDebug() << "Minimize Window:" << this->text(); } + LSession::handle()->XCB->MinimizeWindow(win.windowID()); + QTimer::singleShot(100, this, SLOT(UpdateButton()) ); //make sure to update this button if losing active status + }else{ + if(DEBUG){ qDebug() << "Activate Window:" << this->text(); } + LSession::handle()->XCB->ActivateWindow(win.windowID()); + } + cWin = LWinInfo(); //clear the current +} + +void LTaskButton::winClicked(QAction* act){ + //Get the window from the action + if(act->data().toInt() < WINLIST.length()){ + cWin = WINLIST[act->data().toInt()]; + cstate = cWin.status(); + }else{ cWin = LWinInfo(); } //clear it + //Now trigger the window + triggerWindow(); +} + +void LTaskButton::openActionMenu(){ + //Get the Window the mouse is currently over + QPoint curpos = QCursor::pos(); + QAction *act = winMenu->actionAt(winMenu->mapFromGlobal(curpos)); + //qDebug() << "Button Context Menu:" << curpos.x() << curpos.y() << winMenu->geometry().x() << winMenu->geometry().y() << winMenu->geometry().width() << winMenu->geometry().height(); + cWin = WINLIST[0]; //default to the first window + if( act != 0 && winMenu->isVisible() ){ + //Get the window from the action + //qDebug() << "Found Action:" << act->data().toInt(); + if(act->data().toInt() < WINLIST.length()){ + cWin = WINLIST[act->data().toInt()]; + } + } + cstate = cWin.status(); + //Now show the action menu + UpdateMenus(); + actMenu->popup(QCursor::pos()); +} diff --git a/src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskButton.h b/src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskButton.h new file mode 100644 index 00000000..43dbaa90 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskButton.h @@ -0,0 +1,70 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef _LUMINA_DESKTOP_TASK_BUTTON_H +#define _LUMINA_DESKTOP_TASK_BUTTON_H + +// Qt includes +#include <QWidget> +#include <QList> +#include <QIcon> +#include <QCursor> +#include <QMenu> +#include <QEvent> +#include <QAction> + +// libLumina includes +#include <LuminaXDG.h> +#include <LuminaX11.h> + +// Local includes +#include "../../LWinInfo.h" +#include "../LTBWidget.h" + +class LTaskButton : public LTBWidget{ + Q_OBJECT +public: + LTaskButton(QWidget *parent=0, bool smallDisplay = true); + ~LTaskButton(); + + //Window Information + QList<WId> windows(); + QString classname(); + bool isActive(); + + //Window Management + void addWindow(WId win); //Add a window to this button + void rmWindow(WId win); //Remove a window from this button + +private: + QList<LWinInfo> WINLIST; + QList<LWinInfo> LWINLIST; + QMenu *actMenu; // action menu (custom context menu) + QMenu *winMenu; // window menu (if more than 1) + LWinInfo cWin; + QString cname; //class name for the entire button + bool noicon, showText; + + LWinInfo currentWindow(); //For getting the currently-active window + LXCB::WINDOWVISIBILITY cstate; //current state of the button + +public slots: + void UpdateButton(); //re-sync the current window infomation + void UpdateMenus(); //re-create the menus (text + icons) + +private slots: + void buttonClicked(); + void closeWindow(); //send the signal to close a window + void maximizeWindow(); //send the signal to maximize/restore a window + void minimizeWindow(); //send the signal to minimize a window (iconify) + void triggerWindow(); //change b/w visible and invisible + void winClicked(QAction*); + void openActionMenu(); + +signals: + void MenuClosed(); +}; +#endif diff --git a/src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskManagerPlugin.cpp b/src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskManagerPlugin.cpp new file mode 100644 index 00000000..3e31a534 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskManagerPlugin.cpp @@ -0,0 +1,129 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LTaskManagerPlugin.h" +#include "../../LSession.h" + +LTaskManagerPlugin::LTaskManagerPlugin(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){ + timer = new QTimer(this); + timer->setSingleShot(true); + timer->setInterval(10); // 1/100 second + connect(timer, SIGNAL(timeout()), this, SLOT(UpdateButtons()) ); + usegroups = true; //backwards-compatible default value + if(id.contains("-nogroups")){ usegroups = false; } + connect(LSession::handle(), SIGNAL(WindowListEvent()), this, SLOT(checkWindows()) ); + connect(LSession::handle(), SIGNAL(WindowListEvent(WId)), this, SLOT(UpdateButton(WId)) ); + this->layout()->setContentsMargins(0,0,0,0); + QTimer::singleShot(0,this, SLOT(UpdateButtons()) ); //perform an initial sync + //QTimer::singleShot(100,this, SLOT(OrientationChange()) ); //perform an initial sync +} + +LTaskManagerPlugin::~LTaskManagerPlugin(){ + +} + +//============== +// PRIVATE SLOTS +//============== +void LTaskManagerPlugin::UpdateButtons(){ + updating = QDateTime::currentDateTime(); //global time stamp + QDateTime ctime = updating; //current thread time stamp + + //Get the current window list + QList<WId> winlist = LSession::handle()->XCB->WindowList(); + //Do not change the status of the previously active window if it just changed to a non-visible window + //WId activeWin = LSession::handle()->XCB->ActiveWindow(); + //bool skipActive = !winlist.contains(activeWin); + //qDebug() << "Update Buttons:" << winlist; + if(updating > ctime){ return; } //another thread kicked off already - stop this one + //Now go through all the current buttons first + for(int i=0; i<BUTTONS.length(); i++){ + //Get the windows managed in this button + QList<WId> WI = BUTTONS[i]->windows(); + bool updated=false; + if(updating > ctime){ return; } //another thread kicked off already - stop this one + //Loop over all the windows for this button + for(int w=0; w<WI.length(); w++){ + if(updating > ctime){ return; } //another thread kicked off already - stop this one + if( winlist.contains( WI[w] ) ){ + //Still current window - update it later + winlist.removeAll(WI[w] ); //remove this window from the list since it is done + }else{ + //Window was closed - remove it + if(WI.length()==1){ + //Remove the entire button + //qDebug() << "Window Closed: Remove Button" ; + this->layout()->takeAt(i); //remove from the layout + BUTTONS.takeAt(i)->deleteLater(); + i--; + updated = true; //prevent updating a removed button + break; //break out of the button->window loop + }else{ + //qDebug() << "Window Closed: Remove from button:" << WI[w].windowID() << "Button:" << w; + BUTTONS[i]->rmWindow(WI[w]); // one of the multiple windows for the button + WI.removeAt(w); //remove this window from the list + w--; + } + updated=true; //button already changed + } + if(updating > ctime){ return; } //another thread kicked off already - stop this one + } + if(!updated){ + //qDebug() << "Update Button:" << i; + if(updating > ctime){ return; } //another thread kicked off already - stop this one + //if(!skipActive || !BUTTONS[i]->isActive()){ + QTimer::singleShot(1,BUTTONS[i], SLOT(UpdateButton()) ); //keep moving on + //} + } + } + //Now go through the remaining windows + for(int i=0; i<winlist.length(); i++){ + //New windows, create buttons for each (add grouping later) + if(updating > ctime){ return; } //another thread kicked off already - stop this one + //Check for a button that this can just be added to + QString ctxt = LSession::handle()->XCB->WindowClass(winlist[i]); + bool found = false; + for(int b=0; b<BUTTONS.length(); b++){ + if(updating > ctime){ return; } //another thread kicked off already - stop this one + if(BUTTONS[b]->classname()== ctxt && usegroups){ + //This adds a window to an existing group + found = true; + //qDebug() << "Add Window to Button:" << b; + BUTTONS[b]->addWindow(winlist[i]); + break; + } + } + if(!found){ + if(updating > ctime){ return; } //another thread kicked off already - stop this one + //No group, create a new button + //qDebug() << "New Button"; + LTaskButton *but = new LTaskButton(this, usegroups); + but->addWindow( winlist[i] ); + if(this->layout()->direction()==QBoxLayout::LeftToRight){ + but->setIconSize(QSize(this->height(), this->height())); + }else{ + but->setIconSize(QSize(this->width(), this->width())); + } + this->layout()->addWidget(but); + connect(but, SIGNAL(MenuClosed()), this, SIGNAL(MenuClosed())); + BUTTONS << but; + } + } +} + +void LTaskManagerPlugin::UpdateButton(WId win){ + for(int i=0; i<BUTTONS.length(); i++){ + if(BUTTONS[i]->windows().contains(win)){ + qDebug() << "Update Task Manager Button (single window ping)"; + QTimer::singleShot(0,BUTTONS[i], SLOT(UpdateButton()) ); + break; + } + } +} + +void LTaskManagerPlugin::checkWindows(){ + timer->start(); +} diff --git a/src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskManagerPlugin.h b/src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskManagerPlugin.h new file mode 100644 index 00000000..e6371f34 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/taskmanager/LTaskManagerPlugin.h @@ -0,0 +1,71 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef _LUMINA_DESKTOP_TASK_MANAGER_PLUGIN_H +#define _LUMINA_DESKTOP_TASK_MANAGER_PLUGIN_H + +// Qt includes +#include <QWidget> +#include <QList> +#include <QString> +#include <QDebug> +#include <QTimer> +#include <QEvent> +#include <QDateTime> + +// libLumina includes +#include <LuminaX11.h> + +// Local includes +#include "LTaskButton.h" +#include "LWinInfo.h" +#include "../LPPlugin.h" + +class LTaskManagerPlugin : public LPPlugin{ + Q_OBJECT +public: + LTaskManagerPlugin(QWidget *parent=0, QString id="taskmanager", bool horizontal=true); + ~LTaskManagerPlugin(); + +private: + QList<LTaskButton*> BUTTONS; //to keep track of the current buttons + QTimer *timer; + QDateTime updating; //quick flag for if it is currently working + bool usegroups; + +private slots: + void UpdateButtons(); + void UpdateButton(WId win); + void checkWindows(); + +public slots: + void LocaleChange(){ + UpdateButtons(); + } + void ThemeChange(){ + UpdateButtons(); + } + void OrientationChange(){ + if(this->layout()->direction()==QBoxLayout::LeftToRight){ //horizontal + this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + this->layout()->setAlignment(Qt::AlignLeft); + QSize sz(this->height(), this->height()); + for(int i=0; i<BUTTONS.length(); i++){ + BUTTONS[i]->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + BUTTONS[i]->setIconSize(sz); + } + }else{ //vertical + this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); + this->layout()->setAlignment(Qt::AlignTop); + QSize sz(this->width(), this->width()); + for(int i=0; i<BUTTONS.length(); i++){ + BUTTONS[i]->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + BUTTONS[i]->setIconSize(sz); + } + } + } +}; +#endif
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/panel-plugins/userbutton/LUserButton.cpp b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/LUserButton.cpp new file mode 100644 index 00000000..1fefa304 --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/LUserButton.cpp @@ -0,0 +1,57 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "LUserButton.h" +#include "../../LSession.h" + +LUserButtonPlugin::LUserButtonPlugin(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){ + button = new QToolButton(this); + button->setAutoRaise(true); + button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + button->setPopupMode(QToolButton::DelayedPopup); //make sure it runs the update routine first + connect(button, SIGNAL(clicked()), this, SLOT(openMenu())); + this->layout()->setContentsMargins(0,0,0,0); + this->layout()->addWidget(button); + menu = new QMenu(this); + menu->setContentsMargins(1,1,1,1); + connect(menu, SIGNAL(aboutToHide()), this, SIGNAL(MenuClosed())); + usermenu = new UserWidget(this); + connect(usermenu, SIGNAL(CloseMenu()), this, SLOT(closeMenu()) ); + mact = new QWidgetAction(this); + mact->setDefaultWidget(usermenu); + menu->addAction(mact); + + button->setMenu(menu); + connect(menu, SIGNAL(aboutToHide()), this, SLOT(updateButtonVisuals()) ); + QTimer::singleShot(0,this, SLOT(OrientationChange())); //Update icons/sizes +} + +LUserButtonPlugin::~LUserButtonPlugin(){ + +} + +void LUserButtonPlugin::updateButtonVisuals(){ + button->setToolTip(tr("Quickly launch applications or open files")); + button->setText( SYSTEM::user() ); + if( QFile::exists(QDir::homePath()+"/.loginIcon.png") ){ + button->setIcon( QIcon(QDir::homePath()+"/.loginIcon.png") ); + }else{ + button->setIcon( LXDG::findIcon("user-identity", ":/images/default-user.png") ); //force icon refresh + } +} + +// ======================== +// PRIVATE FUNCTIONS +// ======================== +void LUserButtonPlugin::openMenu(){ + usermenu->UpdateMenu(); + button->showMenu(); +} + +void LUserButtonPlugin::closeMenu(){ + menu->hide(); +} + diff --git a/src-qt5/core/lumina-desktop/panel-plugins/userbutton/LUserButton.h b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/LUserButton.h new file mode 100644 index 00000000..ca835bfe --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/LUserButton.h @@ -0,0 +1,74 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This panel plugin is the main button that allow the user to run +// applications or logout of the desktop +//=========================================== +#ifndef _LUMINA_DESKTOP_USER_MENU_PLUGIN_H +#define _LUMINA_DESKTOP_USER_MENU_PLUGIN_H + +// Qt includes +#include <QMenu> +#include <QWidgetAction> +#include <QToolButton> +#include <QString> +#include <QWidget> + + +// Lumina-desktop includes +//#include "../../Globals.h" +#include "../LPPlugin.h" //main plugin widget + +// libLumina includes +#include "LuminaXDG.h" + +#include "UserWidget.h" + +// PANEL PLUGIN BUTTON +class LUserButtonPlugin : public LPPlugin{ + Q_OBJECT + +public: + LUserButtonPlugin(QWidget *parent = 0, QString id = "userbutton", bool horizontal=true); + ~LUserButtonPlugin(); + +private: + QMenu *menu; + QWidgetAction *mact; + UserWidget *usermenu; + QToolButton *button; + +private slots: + void openMenu(); + void closeMenu(); + + void updateButtonVisuals(); + +public slots: + void OrientationChange(){ + if(this->layout()->direction()==QBoxLayout::LeftToRight){ + this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding); + button->setIconSize( QSize(this->height(), this->height()) ); + }else{ + this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); + button->setIconSize( QSize(this->width(), this->width()) ); + } + this->layout()->update(); + updateButtonVisuals(); + } + + void LocaleChange(){ + updateButtonVisuals(); + usermenu->UpdateAll(); + } + + void ThemeChange(){ + updateButtonVisuals(); + usermenu->UpdateAll(); + } +}; + +#endif
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserItemWidget.cpp b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserItemWidget.cpp new file mode 100644 index 00000000..1d32440a --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserItemWidget.cpp @@ -0,0 +1,204 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "UserItemWidget.h" +#include <LuminaUtils.h> +#include <QMenu> + +#define TEXTCUTOFF 165 +UserItemWidget::UserItemWidget(QWidget *parent, QString itemPath, QString type, bool goback) : QFrame(parent){ + createWidget(); + //Now fill it appropriately + bool inHome = type.endsWith("-home"); //internal code + if(inHome){ type = type.remove("-home"); } + if(itemPath.endsWith(".desktop") || type=="app"){ + bool ok = false; + XDGDesktop item = LXDG::loadDesktopFile(itemPath, ok); + if(ok && LXDG::checkValidity(item) ){ + icon->setPixmap( LXDG::findIcon(item.icon, "preferences-system-windows-actions").pixmap(32,32) ); + name->setText( this->fontMetrics().elidedText(item.name, Qt::ElideRight, TEXTCUTOFF) ); + setupActions(item); + }else{ + gooditem = false; + return; + } + }else if(type=="dir"){ + actButton->setVisible(false); + if(itemPath.endsWith("/")){ itemPath.chop(1); } + if(goback){ + icon->setPixmap( LXDG::findIcon("go-previous","").pixmap(32,32) ); + name->setText( tr("Go Back") ); + }else{ + icon->setPixmap( LXDG::findIcon("folder","").pixmap(32,32) ); + name->setText( this->fontMetrics().elidedText(itemPath.section("/",-1), Qt::ElideRight, TEXTCUTOFF) ); + } + }else{ + actButton->setVisible(false); + if(itemPath.endsWith("/")){ itemPath.chop(1); } + if(QFileInfo(itemPath).isDir()){ + type = "dir"; + icon->setPixmap( LXDG::findIcon("folder","").pixmap(32,32) ); + }else if(LUtils::imageExtensions().contains(itemPath.section("/",-1).section(".",-1).toLower()) ){ + icon->setPixmap( QIcon(itemPath).pixmap(32,32) ); + }else{ + icon->setPixmap( LXDG::findMimeIcon(itemPath.section("/",-1)).pixmap(32,32) ); + } + name->setText( this->fontMetrics().elidedText(itemPath.section("/",-1), Qt::ElideRight, TEXTCUTOFF) ); + } + icon->setWhatsThis(itemPath); + if(!goback){ this->setWhatsThis(name->text()); } + isDirectory = (type=="dir"); //save this for later + if(LUtils::isFavorite(itemPath)){ + linkPath = itemPath; + isShortcut=true; + }else if( inHome ){//|| itemPath.section("/",0,-2)==QDir::homePath()+"/Desktop" ){ + isShortcut = true; + }else{ + isShortcut = false; + } + //Now setup the button appropriately + setupButton(goback); +} + +UserItemWidget::UserItemWidget(QWidget *parent, XDGDesktop item) : QFrame(parent){ + createWidget(); + isDirectory = false; + if(LUtils::isFavorite(item.filePath)){ + linkPath = item.filePath; + isShortcut=true; + }else if( item.filePath.section("/",0,-2)==QDir::homePath()+"/Desktop" ){ + isShortcut = true; + }else{ + isShortcut = false; + } + //Now fill it appropriately + icon->setPixmap( LXDG::findIcon(item.icon,"preferences-system-windows-actions").pixmap(32,32) ); + name->setText( this->fontMetrics().elidedText(item.name, Qt::ElideRight, TEXTCUTOFF) ); + this->setWhatsThis(name->text()); + icon->setWhatsThis(item.filePath); + //Now setup the buttons appropriately + setupButton(); + setupActions(item); +} + +UserItemWidget::~UserItemWidget(){ + delete button; + delete icon; + delete name; +} + + +void UserItemWidget::createWidget(){ + //Initialize the widgets + gooditem = true; + menuopen = false; + menureset = new QTimer(this); + menureset->setSingleShot(true); + menureset->setInterval(1000); //1 second + this->setContentsMargins(0,0,0,0); + button = new QToolButton(this); + button->setIconSize( QSize(14,14) ); + button->setAutoRaise(true); + actButton = new QToolButton(this); + actButton->setPopupMode(QToolButton::InstantPopup); + actButton->setFixedSize( QSize(17,34) ); + actButton->setArrowType(Qt::DownArrow); + icon = new QLabel(this); + icon->setFixedSize( QSize(34,34) ); + 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(actButton); + this->layout()->addWidget(name); + this->layout()->addWidget(button); + //Set a custom object name so this can be tied into the Lumina Theme stylesheets + this->setObjectName("LuminaUserItemWidget"); + //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(bool disable){ + //if(isDirectory){ qDebug() << "Directory Entry:" << isShortcut << linkPath << icon->whatsThis(); } + + if(disable){ + button->setVisible(false); + }else if(isShortcut && !linkPath.isEmpty()){ //Favorite Item - can always remove this + button->setWhatsThis("remove"); + button->setIcon( LXDG::findIcon("list-remove","") ); + button->setToolTip(tr("Remove Shortcut")); + connect(button, SIGNAL(clicked()), this, SLOT(buttonClicked()) ); + }else if(isShortcut){ //Physical File/Dir - can remove + button->setWhatsThis("remove"); + button->setIcon( LXDG::findIcon("user-trash","") ); + button->setToolTip(tr("Delete File")); + connect(button, SIGNAL(clicked()), this, SLOT(buttonClicked()) ); + }else if(!isShortcut){// if( !QFile::exists( QDir::homePath()+"/Desktop/"+icon->whatsThis().section("/",-1) ) && !LUtils::isFavorite(icon->whatsThis() ) ){ + //This file does not have a shortcut yet -- allow the user to add it + button->setWhatsThis("add"); + button->setIcon( LXDG::findIcon("bookmark-toolbar","") ); + 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); + } + if(isShortcut){ + name->setToolTip(icon->whatsThis()); //also allow the user to see the full shortcut path + } +} + +void UserItemWidget::setupActions(XDGDesktop app){ + if(app.actions.isEmpty()){ actButton->setVisible(false); return; } + //Actions Available - go ahead and list them all + actButton->setMenu( new QMenu(this) ); + for(int i=0; i<app.actions.length(); i++){ + QAction *act = new QAction(LXDG::findIcon(app.actions[i].icon, app.icon), app.actions[i].name, this); + act->setToolTip(app.actions[i].ID); + act->setWhatsThis(app.actions[i].ID); + actButton->menu()->addAction(act); + } + connect(actButton->menu(), SIGNAL(triggered(QAction*)), this, SLOT(actionClicked(QAction*)) ); + connect(actButton->menu(), SIGNAL(aboutToShow()), this, SLOT(actionMenuOpen()) ); + connect(actButton->menu(), SIGNAL(aboutToHide()), this, SLOT(actionMenuClosed()) ); + connect(menureset, SIGNAL(timeout()), this, SLOT(resetmenuflag()) ); +} + +void UserItemWidget::buttonClicked(){ + button->setVisible(false); + if(button->whatsThis()=="add"){ + LUtils::addFavorite(icon->whatsThis()); + //QFile::link(icon->whatsThis(), QDir::homePath()+"/.lumina/favorites/"+icon->whatsThis().section("/",-1) ); + emit NewShortcut(); + }else if(button->whatsThis()=="remove"){ + if(linkPath.isEmpty()){ + //This is a desktop file + if(isDirectory){ + QProcess::startDetached("rm -r \""+icon->whatsThis()+"\""); + }else{ + QFile::remove(icon->whatsThis()); + } + //Don't emit the RemovedShortcut signal here - the automatic ~/Desktop watcher will see the change when finished + }else{ + LUtils::removeFavorite(icon->whatsThis()); //This is a favorite + emit RemovedShortcut(); + } + } +} + +void UserItemWidget::ItemClicked(){ + if(!linkPath.isEmpty()){ emit RunItem(linkPath); } + else{ emit RunItem(icon->whatsThis()); } +} + +void UserItemWidget::actionClicked(QAction *act){ + actButton->menu()->hide(); + QString cmd = "lumina-open -action \""+act->whatsThis()+"\" \"%1\""; + if(!linkPath.isEmpty()){ cmd = cmd.arg(linkPath); } + else{ cmd = cmd.arg(icon->whatsThis()); } + emit RunItem(cmd); +}
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserItemWidget.h b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserItemWidget.h new file mode 100644 index 00000000..2251344c --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserItemWidget.h @@ -0,0 +1,72 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This item widget manages a single file/directory +//=========================================== +#ifndef _LUMINA_PANEL_USER_ITEM_WIDGET_H +#define _LUMINA_PANEL_USER_ITEM_WIDGET_H + +#include <QFrame> +#include <QLabel> +#include <QToolButton> +#include <QString> +#include <QHBoxLayout> +#include <QSize> +#include <QDir> +#include <QFile> +#include <QMouseEvent> +#include <QAction> +#include <QMenu> +#include <QTimer> + +#include <LuminaXDG.h> + +class UserItemWidget : public QFrame{ + Q_OBJECT +public: + UserItemWidget(QWidget *parent=0, QString itemPath="", QString type="unknown", bool goback=false); + UserItemWidget(QWidget *parent=0, XDGDesktop item= XDGDesktop()); + ~UserItemWidget(); + + bool gooditem; +private: + QToolButton *button, *actButton; + QLabel *icon, *name; + bool isDirectory, isShortcut, menuopen; + QString linkPath; + QTimer *menureset; + + void createWidget(); + void setupButton(bool disable = false); + void setupActions(XDGDesktop); + +private slots: + void buttonClicked(); + void ItemClicked(); + void actionClicked(QAction*); + //Functions to fix the submenu open/close issues + void actionMenuOpen(){ + if(menureset->isActive()){ menureset->stop(); } + menuopen = true; + } + void resetmenuflag(){ menuopen = false; } //tied to the "menureset" timer + void actionMenuClosed(){ menureset->start(); } + + +protected: + void mouseReleaseEvent(QMouseEvent *event){ + if(menuopen){ resetmenuflag(); } //skip this event if a submenu was open + else if(event->button() != Qt::NoButton){ ItemClicked(); } + } + +signals: + void NewShortcut(); + void RemovedShortcut(); + void RunItem(QString cmd); + +}; + +#endif diff --git a/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.cpp b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.cpp new file mode 100644 index 00000000..f1f9d03e --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.cpp @@ -0,0 +1,385 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014-2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "UserWidget.h" +#include "ui_UserWidget.h" +#include "../../LSession.h" +#include "../../AppMenu.h" + +UserWidget::UserWidget(QWidget* parent) : QTabWidget(parent), ui(new Ui::UserWidget){ + ui->setupUi(this); + updatingfavs = false; + if(parent!=0){ parent->setMouseTracking(true); } + this->setMouseTracking(true); + sysapps = LSession::handle()->applicationMenu()->currentAppHash(); //get the raw info + + //Connect the signals/slots + connect(ui->tool_desktopsettings, SIGNAL(clicked()), this, SLOT(openDeskSettings()) ); + connect(ui->tool_config_screensaver, SIGNAL(clicked()), this, SLOT(openScreenSaverConfig()) ); + connect(ui->tool_config_screensettings, SIGNAL(clicked()), this, SLOT(openScreenConfig()) ); + connect(ui->tool_fav_apps, SIGNAL(clicked()), this, SLOT(FavChanged()) ); + connect(ui->tool_fav_files, SIGNAL(clicked()), this, SLOT(FavChanged()) ); + connect(ui->tool_fav_dirs, SIGNAL(clicked()), this, SLOT(FavChanged()) ); + connect(ui->combo_app_cats, SIGNAL(currentIndexChanged(int)), this, SLOT(updateApps()) ); + connect(ui->tool_home_gohome, SIGNAL(clicked()), this, SLOT(slotGoHome()) ); + connect(ui->tool_home_browse, SIGNAL(clicked()), this, SLOT(slotOpenDir()) ); + connect(ui->tool_home_search, SIGNAL(clicked()), this, SLOT(slotOpenSearch()) ); + connect(ui->tool_config_about, SIGNAL(clicked()), this, SLOT(openLuminaInfo()) ); + + //Setup the special buttons + connect(ui->tool_app_store, SIGNAL(clicked()), this, SLOT(openStore()) ); + connect(ui->tool_controlpanel, SIGNAL(clicked()), this, SLOT(openControlPanel()) ); + //connect(ui->tool_qtconfig, SIGNAL(clicked()), this, SLOT(openQtConfig()) ); + + lastUpdate = QDateTime(); //make sure it refreshes + + connect(LSession::handle()->applicationMenu(), SIGNAL(AppMenuUpdated()), this, SLOT(UpdateMenu()) ); + connect(QApplication::instance(), SIGNAL(DesktopFilesChanged()), this, SLOT(updateFavItems()) ); + QTimer::singleShot(10,this, SLOT(UpdateAll())); //make sure to load this once after initialization +} + +UserWidget::~UserWidget(){ +} + +//=========== +// PRIVATE +//=========== +void UserWidget::ClearScrollArea(QScrollArea *area){ + QWidget *wgt = area->takeWidget(); + delete wgt; //delete the widget and all children + area->setWidget( new QWidget() ); //create a new widget in the scroll area + area->widget()->setContentsMargins(0,0,0,0); + QVBoxLayout *layout = new QVBoxLayout; + layout->setSpacing(2); + layout->setContentsMargins(3,1,3,1); + layout->setDirection(QBoxLayout::TopToBottom); + layout->setAlignment(Qt::AlignTop); + area->widget()->setLayout(layout); +} + +void UserWidget::SortScrollArea(QScrollArea *area){ + //qDebug() << "Sorting Scroll Area:"; + //Sort all the items in the scroll area alphabetically + QLayout *lay = area->widget()->layout(); + QStringList items; + for(int i=0; i<lay->count(); i++){ + items << lay->itemAt(i)->widget()->whatsThis().toLower(); + } + + items.sort(); + //qDebug() << " - Sorted Items:" << items; + for(int i=0; i<items.length(); i++){ + if(items[i].isEmpty()){ continue; } + //QLayouts are weird in that they can only add items to the end - need to re-insert almost every item + for(int j=0; j<lay->count(); j++){ + //Find this item + if(lay->itemAt(j)->widget()->whatsThis().toLower()==items[i]){ + //Found it - now move it if necessary + //qDebug() << "Found Item:" << items[i] << i << j; + lay->addItem( lay->takeAt(j) ); + break; + } + } + } + +} + +QIcon UserWidget::rotateIcon(QIcon ico){ + //Rotate the given icon to appear vertical in the tab widget + QPixmap pix = ico.pixmap(32,32); + QTransform tran; + tran.rotate(+90); //For tabs on the left/West + pix = pix.transformed(tran); + ico = QIcon(pix); + return ico; +} + +//============ +// PRIVATE SLOTS +//============ +void UserWidget::UpdateAll(){ + ui->retranslateUi(this); + //Setup the Icons + // - favorites tab + this->setTabIcon(0, rotateIcon(LXDG::findIcon("folder-favorites","")) ); + this->setTabText(0,""); + // - apps tab + this->setTabIcon(1, rotateIcon(LXDG::findIcon("system-run","")) ); + this->setTabText(1,""); + // - home tab + this->setTabIcon(2, rotateIcon(LXDG::findIcon("user-home","")) ); + this->setTabText(2,""); + // - config tab + this->setTabIcon(3, rotateIcon(LXDG::findIcon("preferences-system","")) ); + this->setTabText(3,""); + ui->tool_fav_apps->setIcon( LXDG::findIcon("system-run","") ); + ui->tool_fav_dirs->setIcon( LXDG::findIcon("folder","") ); + ui->tool_fav_files->setIcon( LXDG::findIcon("document-multiple","") ); + ui->tool_desktopsettings->setIcon( LXDG::findIcon("preferences-desktop","") ); + ui->tool_config_screensaver->setIcon( LXDG::findIcon("preferences-desktop-screensaver","") ); + ui->tool_config_screensettings->setIcon( LXDG::findIcon("preferences-other","") ); + ui->tool_home_gohome->setIcon( LXDG::findIcon("go-home","") ); + ui->tool_home_browse->setIcon( LXDG::findIcon("document-open","") ); + ui->tool_home_search->setIcon( LXDG::findIcon("system-search","") ); + ui->tool_config_about->setIcon( LXDG::findIcon("lumina","") ); + + //Setup the special buttons + QString APPSTORE = LOS::AppStoreShortcut(); + if(QFile::exists(APPSTORE) && !APPSTORE.isEmpty()){ + //Now load the info + bool ok = false; + XDGDesktop store = LXDG::loadDesktopFile(APPSTORE, ok); + if(ok){ + ui->tool_app_store->setIcon( LXDG::findIcon(store.icon, "") ); + ui->tool_app_store->setText( store.name ); + } + ui->tool_app_store->setVisible(ok); //availability + }else{ + ui->tool_app_store->setVisible(false); //not available + } + QString CONTROLPANEL = LOS::ControlPanelShortcut(); + if(QFile::exists(CONTROLPANEL) && !CONTROLPANEL.isEmpty()){ + //Now load the info + bool ok = false; + XDGDesktop cpan = LXDG::loadDesktopFile(CONTROLPANEL, ok); + if(ok){ + ui->tool_controlpanel->setIcon( LXDG::findIcon(cpan.icon, "") ); + } + ui->tool_controlpanel->setVisible(ok); //availability + }else{ + ui->tool_controlpanel->setVisible(false); //not available + } + /*QString QTCONFIG = LOS::QtConfigShortcut(); + if(QFile::exists(QTCONFIG) && !QTCONFIG.isEmpty()){ + ui->tool_qtconfig->setVisible(true); + ui->tool_qtconfig->setIcon( LXDG::findIcon("preferences-desktop-theme","") ); + }else{ + ui->tool_qtconfig->setVisible(false); + }*/ + //Now update the menus + UpdateMenu(); +} + +void UserWidget::UpdateMenu(bool forceall){ + this->setCurrentWidget(ui->tab_fav); + ui->tool_fav_apps->setChecked(true); + ui->tool_fav_dirs->setChecked(false); + ui->tool_fav_files->setChecked(false); + cfav = 0; //favorite apps + updateFavItems(); + QString cdir = ui->label_home_dir->whatsThis(); + if(cdir.isEmpty() || !QFile::exists(cdir)){ + //Directory deleted or nothing loaded yet + ui->label_home_dir->setWhatsThis(QDir::homePath()); + QTimer::singleShot(0,this, SLOT(updateHome()) ); + }else if( lastUpdate < QFileInfo(cdir).lastModified() || forceall){ + //Directory contents changed - reload it + QTimer::singleShot(0,this, SLOT(updateHome()) ); + } + if(lastUpdate < LSession::handle()->applicationMenu()->lastHashUpdate || lastUpdate.isNull() || forceall){ + updateAppCategories(); + QTimer::singleShot(0,this, SLOT(updateApps()) ); + } + lastUpdate = QDateTime::currentDateTime(); +} + +void UserWidget::LaunchItem(QString path, bool fix){ + if(!path.isEmpty()){ + qDebug() << "Launch Application:" << path; + if( fix && !path.startsWith("lumina-open") ){ LSession::LaunchApplication("lumina-open \""+path+"\""); } + else{ LSession::LaunchApplication(path); } + emit CloseMenu(); //so the menu container will close + } +} + +void UserWidget::FavChanged(){ + //uncheck the current item for a moment + int oldfav = cfav; + if(cfav==0){ ui->tool_fav_apps->setChecked(false); } + else if(cfav==1){ ui->tool_fav_dirs->setChecked(false); } + if(cfav==2){ ui->tool_fav_files->setChecked(false); } + //Now check what other item is now the only one checked + if(ui->tool_fav_apps->isChecked() && !ui->tool_fav_dirs->isChecked() && !ui->tool_fav_files->isChecked() ){ + cfav = 0; + }else if(!ui->tool_fav_apps->isChecked() && ui->tool_fav_dirs->isChecked() && !ui->tool_fav_files->isChecked() ){ + cfav = 1; + }else if(!ui->tool_fav_apps->isChecked() && !ui->tool_fav_dirs->isChecked() && ui->tool_fav_files->isChecked() ){ + cfav = 2; + }else{ + //Re-check the old item (something invalid) + ui->tool_fav_apps->setChecked(cfav==0); + ui->tool_fav_dirs->setChecked(cfav==1); + ui->tool_fav_files->setChecked(cfav==2); + } + updateFavItems(oldfav!=cfav); +} + +void UserWidget::updateFavItems(bool newfilter){ + if(updatingfavs){ return; } + updatingfavs = true; + //qDebug() << "Updating User Favorite Items"; + QStringList newfavs = LUtils::listFavorites(); + //qDebug() << "Favorites:" << newfavs; + if(lastHomeUpdate.isNull() || (QFileInfo(QDir::homePath()+"/Desktop").lastModified() > lastHomeUpdate) || newfavs!=favs ){ + favs = newfavs; + + homefiles = LSession::handle()->DesktopFiles(); + lastHomeUpdate = QDateTime::currentDateTime(); + }else if(!newfilter){ updatingfavs = false; return; } //nothing new to change - stop now + //qDebug() << " - Passed Smoke Test..."; + QStringList favitems; + //Remember for format for favorites: <name>::::[app/dir/<mimetype>]::::<full path> + if(ui->tool_fav_apps->isChecked()){ + favitems = favs.filter("::::app::::"); + for(int i=0; i<homefiles.length(); i++){ + if(homefiles[i].fileName().endsWith(".desktop")){ + favitems << homefiles[i].fileName()+"::::app-home::::"+homefiles[i].absoluteFilePath(); + } + } + }else if(ui->tool_fav_dirs->isChecked()){ + favitems = favs.filter("::::dir::::"); + for(int i=0; i<homefiles.length(); i++){ + if(homefiles[i].isDir()){ + favitems << homefiles[i].fileName()+"::::dir-home::::"+homefiles[i].absoluteFilePath(); + } + } + }else{ + //Files + for(int i=0; i<favs.length(); i++){ + QString type = favs[i].section("::::",1,1); + if(type != "app" && type !="dir"){ + favitems << favs[i]; + } + } + for(int i=0; i<homefiles.length(); i++){ + if(!homefiles[i].isDir() && !homefiles[i].fileName().endsWith(".desktop") ){ + favitems << homefiles[i].fileName()+"::::"+LXDG::findAppMimeForFile(homefiles[i].fileName())+"-home::::"+homefiles[i].absoluteFilePath(); + } + } + } + ClearScrollArea(ui->scroll_fav); + //qDebug() << " - Sorting Items"; + favitems.sort(); //sort them alphabetically + //qDebug() << " - Creating Items:" << favitems; + for(int i=0; i<favitems.length(); i++){ + UserItemWidget *it = new UserItemWidget(ui->scroll_fav->widget(), favitems[i].section("::::",2,50), favitems[i].section("::::",1,1) ); + if(!it->gooditem){ continue; } + ui->scroll_fav->widget()->layout()->addWidget(it); + connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) ); + connect(it, SIGNAL(NewShortcut()), this, SLOT(updateFavItems()) ); + connect(it, SIGNAL(RemovedShortcut()), this, SLOT(updateFavItems()) ); + QApplication::processEvents(); //keep the UI snappy - might be a number of these + } + SortScrollArea(ui->scroll_fav); + updatingfavs = false; + //qDebug() << " - Done"; +} + +//Apps Tab +void UserWidget::updateAppCategories(){ + ui->combo_app_cats->clear(); + QStringList cats = sysapps->keys(); + cats.sort(); + for(int i=0; i<cats.length(); i++){ + QString name, icon; + if(cats[i] == "All"){ name = tr("All"); icon = "application-x-executable"; } + else if(cats[i] == "Multimedia"){ name = tr("Multimedia"); icon = "applications-multimedia"; } + else if(cats[i] == "Development"){ name = tr("Development"); icon = "applications-development"; } + else if(cats[i] == "Education"){ name = tr("Education"); icon = "applications-education"; } + else if(cats[i] == "Game"){ name = tr("Games"); icon = "applications-games"; } + else if(cats[i] == "Graphics"){ name = tr("Graphics"); icon = "applications-graphics"; } + else if(cats[i] == "Network"){ name = tr("Network"); icon = "applications-internet"; } + else if(cats[i] == "Office"){ name = tr("Office"); icon = "applications-office"; } + else if(cats[i] == "Science"){ name = tr("Science"); icon = "applications-science"; } + else if(cats[i] == "Settings"){ name = tr("Settings"); icon = "preferences-system"; } + else if(cats[i] == "System"){ name = tr("System"); icon = "applications-system"; } + else if(cats[i] == "Utility"){ name = tr("Utilities"); icon = "applications-utilities"; } + else if(cats[i] == "Wine"){ name = tr("Wine"); icon = "wine"; } + else{ name = tr("Unsorted"); icon = "applications-other"; } + ui->combo_app_cats->addItem( LXDG::findIcon(icon,""), name, cats[i] ); + } +} + +void UserWidget::updateApps(){ + if(ui->combo_app_cats->currentIndex() < 0){ return; } //no cat + QString cat = ui->combo_app_cats->itemData( ui->combo_app_cats->currentIndex() ).toString(); + QList<XDGDesktop> items = sysapps->value(cat); + ClearScrollArea(ui->scroll_apps); + for(int i=0; i<items.length(); i++){ + UserItemWidget *it = new UserItemWidget(ui->scroll_apps->widget(), items[i]); + ui->scroll_apps->widget()->layout()->addWidget(it); + connect(it, SIGNAL(RunItem(QString)), this, SLOT(LaunchItem(QString)) ); + connect(it, SIGNAL(NewShortcut()), this, SLOT(updateFavItems()) ); + connect(it, SIGNAL(RemovedShortcut()), this, SLOT(updateFavItems()) ); + QApplication::processEvents(); //keep the UI snappy - might be a number of these + } +} + +//Home Tab +void UserWidget::updateHome(){ + ClearScrollArea(ui->scroll_home); + QDir homedir(ui->label_home_dir->whatsThis()); + QStringList items; + if(QDir::homePath() == homedir.absolutePath()){ + ui->label_home_dir->setText(tr("Home")); + ui->tool_home_gohome->setVisible(false); + }else{ + ui->tool_home_gohome->setVisible(true); + ui->label_home_dir->setText( this->fontMetrics().elidedText(homedir.dirName(), Qt::ElideRight, ui->label_home_dir->width())); + //Now make sure to put a "go back" button at the top of the list + QString dir = ui->label_home_dir->whatsThis(); + if(dir.endsWith("/")){ dir.chop(1); } + dir.chop( dir.section("/",-1).length() ); + items << dir; + } + ui->label_home_dir->setToolTip(ui->label_home_dir->whatsThis()); + items << homedir.entryList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot, QDir::Name | QDir::DirsFirst); + QString type = ""; + if(homedir.absolutePath() == QDir::homePath()+"/Desktop"){ type.append("-home"); }//internal code + for(int i=0; i<items.length(); i++){ + //qDebug() << "New Home subdir:" << homedir.absoluteFilePath(items[i]); + UserItemWidget *it; + if(items[i].startsWith("/")){ it = new UserItemWidget(ui->scroll_home->widget(), items[i], "dir", true); } //go-back button + else{ it = new UserItemWidget(ui->scroll_home->widget(), homedir.absoluteFilePath(items[i]), type, false); } + ui->scroll_home->widget()->layout()->addWidget(it); + connect(it, SIGNAL(RunItem(QString)), this, SLOT(slotGoToDir(QString)) ); + connect(it, SIGNAL(NewShortcut()), this, SLOT(updateFavItems()) ); + connect(it, SIGNAL(RemovedShortcut()), this, SLOT(updateFavItems()) ); + QApplication::processEvents(); //keep the UI snappy - may be a lot of these to load + } +} + +void UserWidget::slotGoToDir(QString dir){ + if(!QFileInfo(dir).isDir()){ + LaunchItem(dir); + }else{ + ui->label_home_dir->setWhatsThis(dir); + updateHome(); + } +} + +void UserWidget::slotGoHome(){ + slotGoToDir(QDir::homePath()); +} + +void UserWidget::slotOpenDir(){ + LaunchItem(ui->label_home_dir->whatsThis()); +} + +void UserWidget::slotOpenSearch(){ + LaunchItem("lumina-search -dir \""+ui->label_home_dir->whatsThis()+"\"", false); //use command as-is +} + +void UserWidget::mouseMoveEvent( QMouseEvent *event){ + QTabBar *wid = tabBar(); + if(wid==0){ return; } //invalid widget found + QPoint relpos = wid->mapFromGlobal( this->mapToGlobal(event->pos()) ); + //qDebug() << "Mouse Move Event: " << event->pos().x() << event->pos().y() << relpos.x() << relpos.y() << wid->width() << wid->height(); + if(wid && wid->tabAt(relpos) != -1){ + qDebug() << " - Mouse over tab"; + this->setCurrentIndex( wid->tabAt(relpos) ); + } +} diff --git a/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.h b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.h new file mode 100644 index 00000000..af9408dd --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.h @@ -0,0 +1,101 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2014, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This panel plugin allows the user to quickly access user favorites and applications +//=========================================== +#ifndef _LUMINA_PANEL_USER_BUTTON_WIDGET_H +#define _LUMINA_PANEL_USER_BUTTON_WIDGET_H + +#include <QWidget> +#include <QString> +#include <QList> +#include <QHash> +#include <QVBoxLayout> +#include <QScrollArea> +#include <QDateTime> +#include <QTransform> +#include <QMouseEvent> +#include <QTabWidget> + +#include <LuminaXDG.h> +#include <LuminaOS.h> +#include "UserItemWidget.h" + +#define SSAVER QString("xscreensaver-demo") + +namespace Ui{ + class UserWidget; +}; + +class UserWidget : public QTabWidget{ + Q_OBJECT +public: + UserWidget(QWidget *parent=0); + ~UserWidget(); + +public slots: + void UpdateAll(); //for re-translation/icon changes + void UpdateMenu(bool forceall = false); //for item changes + +private: + Ui::UserWidget *ui; + QHash<QString, QList<XDGDesktop> > *sysapps; + QDateTime lastUpdate, lastHomeUpdate; + QStringList favs; + QFileInfoList homefiles; + int cfav; //current favorite category + void ClearScrollArea(QScrollArea *area); + void SortScrollArea(QScrollArea *area); + QIcon rotateIcon(QIcon); + bool updatingfavs; + +private slots: + void LaunchItem(QString path, bool fix = true); + + //Favorites Tab + void FavChanged(); //for ensuring radio-button-like behaviour + void updateFavItems(bool newfilter = true); //if false, will only update if filesystem changes + + //Apps Tab + void updateAppCategories(); + void updateApps(); + + //Home Tab + void updateHome(); + void slotGoToDir(QString dir); + void slotGoHome(); + void slotOpenDir(); + void slotOpenSearch(); + + //Slots for the special buttons + void openStore(){ + LaunchItem(LOS::AppStoreShortcut()); + } + void openControlPanel(){ + LaunchItem(LOS::ControlPanelShortcut()); + } + void openDeskSettings(){ + LaunchItem("lumina-config", false); + } + void openScreenSaverConfig(){ + LaunchItem(SSAVER, false); + } + void openScreenConfig(){ + LaunchItem("lumina-xconfig",false); + } + void openLuminaInfo(){ + LaunchItem("lumina-info",false); + } + +protected: + void mouseMoveEvent( QMouseEvent *event); + +signals: + void CloseMenu(); + +}; + +#endif diff --git a/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.ui b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.ui new file mode 100644 index 00000000..9ef5af7e --- /dev/null +++ b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.ui @@ -0,0 +1,593 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>UserWidget</class> + <widget class="QTabWidget" name="UserWidget"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>294</width> + <height>289</height> + </rect> + </property> + <property name="windowTitle"> + <string>UserWidget</string> + </property> + <property name="tabPosition"> + <enum>QTabWidget::West</enum> + </property> + <property name="currentIndex"> + <number>0</number> + </property> + <widget class="QWidget" name="tab_fav"> + <attribute name="title"> + <string>Favorites</string> + </attribute> + <attribute name="toolTip"> + <string>Favorites</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>1</number> + </property> + <property name="topMargin"> + <number>1</number> + </property> + <property name="rightMargin"> + <number>1</number> + </property> + <property name="bottomMargin"> + <number>1</number> + </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QToolButton" name="tool_fav_apps"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="cursor"> + <cursorShape>ArrowCursor</cursorShape> + </property> + <property name="toolTip"> + <string>Favorite Applications</string> + </property> + <property name="text"> + <string>Applications</string> + </property> + <property name="iconSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_fav_dirs"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="toolTip"> + <string>Favorite Directories</string> + </property> + <property name="text"> + <string>Places</string> + </property> + <property name="iconSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_fav_files"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="toolTip"> + <string>Favorite FIles</string> + </property> + <property name="text"> + <string>Files</string> + </property> + <property name="iconSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QScrollArea" name="scroll_fav"> + <property name="widgetResizable"> + <bool>true</bool> + </property> + <widget class="QWidget" name="scrollAreaWidgetContents"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>259</width> + <height>247</height> + </rect> + </property> + </widget> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="tab_apps"> + <attribute name="title"> + <string>Apps</string> + </attribute> + <attribute name="toolTip"> + <string>Applications</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>1</number> + </property> + <property name="topMargin"> + <number>1</number> + </property> + <property name="rightMargin"> + <number>1</number> + </property> + <property name="bottomMargin"> + <number>1</number> + </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QComboBox" name="combo_app_cats"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>30</height> + </size> + </property> + <property name="maxVisibleItems"> + <number>12</number> + </property> + <property name="iconSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QToolButton" name="tool_app_store"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="text"> + <string/> + </property> + <property name="iconSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QScrollArea" name="scroll_apps"> + <property name="widgetResizable"> + <bool>true</bool> + </property> + <widget class="QWidget" name="scrollAreaWidgetContents_2"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>98</width> + <height>28</height> + </rect> + </property> + </widget> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="tab_home"> + <attribute name="title"> + <string>Home</string> + </attribute> + <attribute name="toolTip"> + <string>Home Directory</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>1</number> + </property> + <property name="topMargin"> + <number>1</number> + </property> + <property name="rightMargin"> + <number>1</number> + </property> + <property name="bottomMargin"> + <number>1</number> + </property> + <item> + <layout class="QGridLayout" name="gridLayout"> + <property name="horizontalSpacing"> + <number>4</number> + </property> + <property name="verticalSpacing"> + <number>1</number> + </property> + <item row="0" column="3"> + <widget class="QToolButton" name="tool_home_search"> + <property name="toolTip"> + <string>Search this Directory</string> + </property> + <property name="text"> + <string notr="true"/> + </property> + <property name="iconSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QToolButton" name="tool_home_browse"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="toolTip"> + <string>Open Directory</string> + </property> + <property name="text"> + <string notr="true">Browse</string> + </property> + <property name="iconSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonIconOnly</enum> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QToolButton" name="tool_home_gohome"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="toolTip"> + <string>Go back to home directory</string> + </property> + <property name="text"> + <string notr="true">home</string> + </property> + <property name="iconSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLabel" name="label_home_dir"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>30</height> + </size> + </property> + <property name="font"> + <font> + <pointsize>10</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="text"> + <string notr="true"><current dir></string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + <property name="margin"> + <number>0</number> + </property> + <property name="indent"> + <number>0</number> + </property> + <property name="textInteractionFlags"> + <set>Qt::NoTextInteraction</set> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QScrollArea" name="scroll_home"> + <property name="widgetResizable"> + <bool>true</bool> + </property> + <widget class="QWidget" name="scrollAreaWidgetContents_3"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>98</width> + <height>28</height> + </rect> + </property> + </widget> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="tab_config"> + <attribute name="title"> + <string>Config</string> + </attribute> + <attribute name="toolTip"> + <string>Desktop Preferences</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_4"> + <item> + <widget class="QToolButton" name="tool_controlpanel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Control Panel</string> + </property> + <property name="iconSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_desktopsettings"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Desktop Appearance/Plugins</string> + </property> + <property name="iconSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_config_screensettings"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Screen Configuration</string> + </property> + <property name="iconSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_config_screensaver"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Screensaver Settings</string> + </property> + <property name="iconSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + </widget> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>243</width> + <height>162</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="Line" name="line"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="tool_config_about"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>About the Lumina Desktop</string> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextBesideIcon</enum> + </property> + </widget> + </item> + </layout> + </widget> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_blue-grey-zoom.jpg b/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_blue-grey-zoom.jpg Binary files differnew file mode 100644 index 00000000..481ca438 --- /dev/null +++ b/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_blue-grey-zoom.jpg diff --git a/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_blue-grey.jpg b/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_blue-grey.jpg Binary files differnew file mode 100644 index 00000000..9da67596 --- /dev/null +++ b/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_blue-grey.jpg diff --git a/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_gold.jpg b/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_gold.jpg Binary files differnew file mode 100644 index 00000000..cba03cee --- /dev/null +++ b/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_gold.jpg diff --git a/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_green.jpg b/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_green.jpg Binary files differnew file mode 100644 index 00000000..80b0d3e3 --- /dev/null +++ b/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_green.jpg diff --git a/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_grey-blue-zoom.jpg b/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_grey-blue-zoom.jpg Binary files differnew file mode 100644 index 00000000..4f753ed5 --- /dev/null +++ b/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_grey-blue-zoom.jpg diff --git a/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_grey-blue.jpg b/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_grey-blue.jpg Binary files differnew file mode 100644 index 00000000..c214cd78 --- /dev/null +++ b/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_grey-blue.jpg diff --git a/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_purple.jpg b/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_purple.jpg Binary files differnew file mode 100644 index 00000000..e4c3d7a8 --- /dev/null +++ b/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_purple.jpg diff --git a/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_red.jpg b/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_red.jpg Binary files differnew file mode 100644 index 00000000..a092f636 --- /dev/null +++ b/src-qt5/core/lumina-desktop/wallpapers/Lumina_Wispy_red.jpg |