Update theming
5
cursors/default/index.theme
Normal file
|
@ -0,0 +1,5 @@
|
|||
# This file is written by nwg-look. Do not edit.
|
||||
[Icon Theme]
|
||||
Name=Default
|
||||
Comment=Default Cursor Theme
|
||||
Inherits=Posy_Cursor
|
339
kde/plasma/plasmoids/AndromedaLauncher/LICENSE
Normal file
|
@ -0,0 +1,339 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
181
kde/plasma/plasmoids/AndromedaLauncher/contents/code/tools.js
Normal file
|
@ -0,0 +1,181 @@
|
|||
/*
|
||||
SPDX-FileCopyrightText: 2013 Aurélien Gâteau <agateau@kde.org>
|
||||
SPDX-FileCopyrightText: 2013-2015 Eike Hein <hein@kde.org>
|
||||
SPDX-FileCopyrightText: 2017 Ivan Cukic <ivan.cukic@kde.org>
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
.pragma library
|
||||
|
||||
function fillActionMenu(i18n, actionMenu, actionList, favoriteModel, favoriteId) {
|
||||
// Accessing actionList can be a costly operation, so we don't
|
||||
// access it until we need the menu.
|
||||
|
||||
var actions = createFavoriteActions(i18n, favoriteModel, favoriteId);
|
||||
|
||||
if (actions) {
|
||||
if (actionList && actionList.length > 0) {
|
||||
var actionListCopy = Array.from(actionList);
|
||||
var separator = { "type": "separator" };
|
||||
actionListCopy.push(separator);
|
||||
// actionList = actions.concat(actionList); // this crashes Qt O.o
|
||||
actionListCopy.push.apply(actionListCopy, actions);
|
||||
actionList = actionListCopy;
|
||||
} else {
|
||||
actionList = actions;
|
||||
}
|
||||
}
|
||||
|
||||
actionMenu.actionList = actionList;
|
||||
}
|
||||
|
||||
function createFavoriteActions(i18n, favoriteModel, favoriteId) {
|
||||
if (!favoriteModel || !favoriteModel.enabled || !favoriteId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
if (favoriteModel.activities === undefined ||
|
||||
favoriteModel.activities.runningActivities.length <= 1) {
|
||||
var action = {};
|
||||
|
||||
if (favoriteModel.isFavorite(favoriteId)) {
|
||||
action.text = i18n("Remove from Favorites");
|
||||
action.icon = "bookmark-remove";
|
||||
action.actionId = "_kicker_favorite_remove";
|
||||
} else if (favoriteModel.maxFavorites === -1 || favoriteModel.count < favoriteModel.maxFavorites) {
|
||||
action.text = i18n("Add to Favorites");
|
||||
action.icon = "bookmark-new";
|
||||
action.actionId = "_kicker_favorite_add";
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
action.actionArgument = { favoriteModel: favoriteModel, favoriteId: favoriteId };
|
||||
|
||||
return [action];
|
||||
|
||||
} else {
|
||||
var actions = [];
|
||||
|
||||
var linkedActivities = favoriteModel.linkedActivitiesFor(favoriteId);
|
||||
|
||||
var activities = favoriteModel.activities.runningActivities;
|
||||
|
||||
// Adding the item to link/unlink to all activities
|
||||
|
||||
var linkedToAllActivities =
|
||||
!(linkedActivities.indexOf(":global") === -1);
|
||||
|
||||
actions.push({
|
||||
text : i18n("On All Activities"),
|
||||
checkable : true,
|
||||
|
||||
actionId : linkedToAllActivities ?
|
||||
"_kicker_favorite_remove_from_activity" :
|
||||
"_kicker_favorite_set_to_activity",
|
||||
checked : linkedToAllActivities,
|
||||
|
||||
actionArgument : {
|
||||
favoriteModel: favoriteModel,
|
||||
favoriteId: favoriteId,
|
||||
favoriteActivity: ""
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// Adding items for each activity separately
|
||||
|
||||
var addActivityItem = function(activityId, activityName) {
|
||||
var linkedToThisActivity =
|
||||
!(linkedActivities.indexOf(activityId) === -1);
|
||||
|
||||
actions.push({
|
||||
text : activityName,
|
||||
checkable : true,
|
||||
checked : linkedToThisActivity && !linkedToAllActivities,
|
||||
|
||||
actionId :
|
||||
// If we are on all activities, and the user clicks just one
|
||||
// specific activity, unlink from everything else
|
||||
linkedToAllActivities ? "_kicker_favorite_set_to_activity" :
|
||||
|
||||
// If we are linked to the current activity, just unlink from
|
||||
// that single one
|
||||
linkedToThisActivity ? "_kicker_favorite_remove_from_activity" :
|
||||
|
||||
// Otherwise, link to this activity, but do not unlink from
|
||||
// other ones
|
||||
"_kicker_favorite_add_to_activity",
|
||||
|
||||
actionArgument : {
|
||||
favoriteModel : favoriteModel,
|
||||
favoriteId : favoriteId,
|
||||
favoriteActivity : activityId
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Adding the item to link/unlink to the current activity
|
||||
|
||||
addActivityItem(favoriteModel.activities.currentActivity, i18n("On the Current Activity"));
|
||||
|
||||
actions.push({
|
||||
type: "separator",
|
||||
actionId: "_kicker_favorite_separator"
|
||||
});
|
||||
|
||||
// Adding the items for each activity
|
||||
|
||||
activities.forEach(function(activityId) {
|
||||
addActivityItem(activityId, favoriteModel.activityNameForId(activityId));
|
||||
});
|
||||
|
||||
return [{
|
||||
text : i18n("Show in Favorites"),
|
||||
icon : "favorite",
|
||||
subActions : actions
|
||||
}];
|
||||
}
|
||||
}
|
||||
|
||||
function triggerAction(model, index, actionId, actionArgument) {
|
||||
function startsWith(txt, needle) {
|
||||
return txt.substr(0, needle.length) === needle;
|
||||
}
|
||||
|
||||
if (startsWith(actionId, "_kicker_favorite_")) {
|
||||
handleFavoriteAction(actionId, actionArgument);
|
||||
return;
|
||||
}
|
||||
|
||||
var closeRequested = model.trigger(index, actionId, actionArgument);
|
||||
|
||||
if (closeRequested) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function handleFavoriteAction(actionId, actionArgument) {
|
||||
var favoriteId = actionArgument.favoriteId;
|
||||
var favoriteModel = actionArgument.favoriteModel;
|
||||
|
||||
if (favoriteModel === null || favoriteId === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (actionId === "_kicker_favorite_remove") {
|
||||
favoriteModel.removeFavorite(favoriteId);
|
||||
} else if (actionId === "_kicker_favorite_add") {
|
||||
favoriteModel.addFavorite(favoriteId);
|
||||
} else if (actionId === "_kicker_favorite_remove_from_activity") {
|
||||
favoriteModel.removeFavoriteFrom(favoriteId, actionArgument.favoriteActivity);
|
||||
} else if (actionId === "_kicker_favorite_add_to_activity") {
|
||||
favoriteModel.addFavoriteTo(favoriteId, actionArgument.favoriteActivity);
|
||||
} else if (actionId === "_kicker_favorite_set_to_activity") {
|
||||
favoriteModel.setFavoriteOn(favoriteId, actionArgument.favoriteActivity);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
/***************************************************************************
|
||||
* Copyright (C) 2014 by Eike Hein <hein@kde.org> *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
||||
***************************************************************************/
|
||||
|
||||
import QtQuick 2.15
|
||||
|
||||
import org.kde.plasma.configuration 2.0
|
||||
|
||||
ConfigModel {
|
||||
ConfigCategory {
|
||||
name: i18n("General")
|
||||
icon: "preferences-desktop-plasma"
|
||||
source: "ConfigGeneral.qml"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,78 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
|
||||
http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
|
||||
<kcfgfile name=""/>
|
||||
|
||||
<group name="General">
|
||||
<entry name="icon" type="String">
|
||||
<label>The name of the icon to use for the compact representation (e.g. on a small panel).</label>
|
||||
<default>start-here-kde-symbolic</default>
|
||||
</entry>
|
||||
<entry name="useCustomButtonImage" type="Bool">
|
||||
<label>Whether to use a custom image instead of an icon in the compact representation (e.g. on a small panel).</label>
|
||||
<default>false</default>
|
||||
</entry>
|
||||
<entry name="customButtonImage" type="Url">
|
||||
<label>The URL of the custtom image to use instead of an icon in the compact representation (e.g. on a small panel).</label>
|
||||
<default></default>
|
||||
</entry>
|
||||
<entry name="activationIndicator" type="Bool">
|
||||
<label>Shows an indicator underneath the launcher's icon when the launcher is opened.</label>
|
||||
<default>true</default>
|
||||
</entry>
|
||||
<entry name="indicatorColor" type="Color">
|
||||
<label>Color of the indicator.</label>
|
||||
<default>#2164C9</default>
|
||||
</entry>
|
||||
<entry name="enableGreeting" type="Bool">
|
||||
<label>Enable the greeting.</label>
|
||||
<default>true</default>
|
||||
</entry>
|
||||
<entry name="defaultPage" type="Int">
|
||||
<label>Default Page</label>
|
||||
<default>0</default>
|
||||
</entry>
|
||||
<entry name="customGreeting" type="String">
|
||||
<label>Custom greeting Text</label>
|
||||
<default></default>
|
||||
</entry>
|
||||
<entry name="launcherPosition" type="Int">
|
||||
<label>Where is the launcher supposed to open? 1: Auto (Bottom or Top panel) 2: Bottom or top center 3: Screen center</label>
|
||||
<default>0</default>
|
||||
</entry>
|
||||
<entry name="offsetX" type="Int">
|
||||
<label>Offset when floating 0 = 0.25 * Panel height</label>
|
||||
<default>0</default>
|
||||
</entry>
|
||||
<entry name="offsetY" type="Int">
|
||||
<label>Offset when floating 0 = 0.25 * Panel height</label>
|
||||
<default>0</default>
|
||||
</entry>
|
||||
<entry name="floating" type="Bool">
|
||||
<label>Gives the launcher some breathing room.</label>
|
||||
<default>false</default>
|
||||
</entry>
|
||||
<entry name="enableGlow" type="Bool">
|
||||
<label>Gives the launcher elements some glow.</label>
|
||||
<default>false</default>
|
||||
</entry>
|
||||
<entry name="glowColor" type="Int">
|
||||
<label>Color of the glow</label>
|
||||
<default>0</default>
|
||||
</entry>
|
||||
<entry name="useExtraRunners" type="Bool">
|
||||
<label>Whether to use additional KRunner plugins to produce results in the search.</label>
|
||||
<default>true</default>
|
||||
</entry>
|
||||
<entry name="extraRunners" type="StringList">
|
||||
<label>The plugin id's of additional KRunner plugins to use. Only used if useExtraRunners is true.</label>
|
||||
<default>shell,bookmarks,baloosearch,locations</default>
|
||||
</entry>
|
||||
<entry name="useSystemmFontSettings" type="Bool">
|
||||
<label>Uses system font settings instead of themes's default.</label>
|
||||
<default>false</default>
|
||||
</entry>
|
||||
</group>
|
||||
</kcfg>
|
|
@ -0,0 +1,122 @@
|
|||
/*
|
||||
SPDX-FileCopyrightText: 2013 Aurélien Gâteau <agateau@kde.org>
|
||||
SPDX-FileCopyrightText: 2014-2015 Eike Hein <hein@kde.org>
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick 2.15
|
||||
|
||||
import org.kde.plasma.extras 2.0 as PlasmaExtras
|
||||
|
||||
Item {
|
||||
id: root
|
||||
|
||||
property QtObject menu
|
||||
property Item visualParent
|
||||
property variant actionList
|
||||
property bool opened: menu ? (menu.status !== PlasmaExtras.Menu.Closed) : false
|
||||
|
||||
signal actionClicked(string actionId, variant actionArgument)
|
||||
signal closed
|
||||
|
||||
onActionListChanged: refreshMenu();
|
||||
|
||||
onOpenedChanged: {
|
||||
if (!opened) {
|
||||
closed();
|
||||
}
|
||||
}
|
||||
|
||||
function open(x, y) {
|
||||
if (!actionList) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (x && y) {
|
||||
menu.open(x, y);
|
||||
} else {
|
||||
menu.open();
|
||||
}
|
||||
}
|
||||
|
||||
function refreshMenu() {
|
||||
if (menu) {
|
||||
menu.destroy();
|
||||
}
|
||||
|
||||
if (!actionList) {
|
||||
return;
|
||||
}
|
||||
|
||||
menu = contextMenuComponent.createObject(root);
|
||||
|
||||
fillMenu(menu, actionList);
|
||||
}
|
||||
|
||||
function fillMenu(menu, items) {
|
||||
items.forEach(function(actionItem) {
|
||||
if (actionItem.subActions) {
|
||||
// This is a menu
|
||||
var submenuItem = contextSubmenuItemComponent.createObject(
|
||||
menu, { "actionItem" : actionItem });
|
||||
|
||||
fillMenu(submenuItem.submenu, actionItem.subActions);
|
||||
|
||||
} else {
|
||||
var item = contextMenuItemComponent.createObject(
|
||||
menu,
|
||||
{
|
||||
"actionItem": actionItem,
|
||||
}
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
Component {
|
||||
id: contextMenuComponent
|
||||
|
||||
PlasmaExtras.Menu {
|
||||
visualParent: root.visualParent
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: contextSubmenuItemComponent
|
||||
|
||||
PlasmaExtras.MenuItem {
|
||||
id: submenuItem
|
||||
|
||||
property variant actionItem
|
||||
|
||||
text: actionItem.text ? actionItem.text : ""
|
||||
icon: actionItem.icon ? actionItem.icon : null
|
||||
|
||||
property PlasmaExtras.Menu submenu: PlasmaExtras.Menu {
|
||||
visualParent: submenuItem.action
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: contextMenuItemComponent
|
||||
|
||||
PlasmaExtras.MenuItem {
|
||||
property variant actionItem
|
||||
|
||||
text : actionItem.text ? actionItem.text : ""
|
||||
enabled : actionItem.type !== "title" && ("enabled" in actionItem ? actionItem.enabled : true)
|
||||
separator : actionItem.type === "separator"
|
||||
section : actionItem.type === "title"
|
||||
icon : actionItem.icon ? actionItem.icon : null
|
||||
checkable : actionItem.checkable ? actionItem.checkable : false
|
||||
checked : actionItem.checked ? actionItem.checked : false
|
||||
|
||||
onClicked: {
|
||||
root.actionClicked(actionItem.actionId, actionItem.actionArgument);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
352
kde/plasma/plasmoids/AndromedaLauncher/contents/ui/AppList.qml
Normal file
|
@ -0,0 +1,352 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
||||
****************************************************************************/
|
||||
|
||||
|
||||
// Agregar condicion para que los categproes repeater solo se muestren cuando el index sea diferente a 0 para
|
||||
//evitar que aparesca el listado de a b c de .. abajo de todas las aplicaciones
|
||||
|
||||
import Qt5Compat.GraphicalEffects
|
||||
|
||||
import QtQuick 2.12
|
||||
import QtQuick.Controls 2.15
|
||||
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
import org.kde.plasma.components 3.0 as PlasmaComponents
|
||||
|
||||
import org.kde.kirigami as Kirigami
|
||||
|
||||
import org.kde.draganddrop 2.0
|
||||
|
||||
|
||||
ScrollView {
|
||||
id: scrollView
|
||||
|
||||
anchors {
|
||||
top: parent.top
|
||||
}
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
|
||||
contentWidth: availableWidth //no horizontal scrolling
|
||||
|
||||
property bool grabFocus: false
|
||||
property bool showDescriptions: false
|
||||
property int iconSize: Kirigami.Units.iconSizes.medium
|
||||
|
||||
property var pinnedModel: [globalFavorites, rootModel.modelForRow(0), rootModel.modelForRow(1)]
|
||||
property QtObject allAppsModel
|
||||
|
||||
property var currentStateIndex: Plasmoid.configuration.defaultPage
|
||||
|
||||
property bool hasListener: false
|
||||
property bool isRight: true
|
||||
|
||||
property var scrollpositon: 0.0
|
||||
property var scrollheight: 0.0
|
||||
|
||||
property var appsCategoriesList: {
|
||||
|
||||
var categories = [];
|
||||
var categoryName;
|
||||
var categoryIcon;
|
||||
|
||||
for (var i = 1; i < rootModel.count - 2; i++) {
|
||||
categoryName = rootModel.data(rootModel.index(i, 0), Qt.DisplayRole);
|
||||
categoryIcon = rootModel.data(rootModel.index(i, 0), Qt.DecorationRole);
|
||||
categories.push({
|
||||
name: categoryName,
|
||||
index: i,
|
||||
icon: categoryIcon
|
||||
});
|
||||
}
|
||||
scrollView.allAppsModel = rootModel.modelForRow(1)
|
||||
return categories;
|
||||
}
|
||||
|
||||
property var currentSelectedCategory: scrollView.appsCategoriesList[currentStateIndex]
|
||||
|
||||
function updateModels() {
|
||||
item.pinnedModel = [globalFavorites, rootModel.modelForRow(0), rootModel.modelForRow(1)]
|
||||
item.allAppsModel = rootModel.modelForRow(1)
|
||||
}
|
||||
|
||||
function reset(){
|
||||
ScrollBar.vertical.position = 0
|
||||
currentStateIndex = plasmoid.configuration.defaultPage
|
||||
currentSelectedCategory = appsCategoriesList[currentStateIndex]
|
||||
sortingLabel.text = currentSelectedCategory.name
|
||||
sortingImage.source = currentSelectedCategory.icon
|
||||
}
|
||||
function get_position(){
|
||||
return ScrollBar.vertical.position;
|
||||
}
|
||||
function get_size(){
|
||||
return ScrollBar.vertical.size;
|
||||
}
|
||||
Connections {
|
||||
target: root
|
||||
function onVisibleChanged() {
|
||||
currentStateIndex = plasmoid.configuration.defaultPage
|
||||
currentSelectedCategory = appsCategoriesList[currentStateIndex]
|
||||
sortingLabel.text = currentSelectedCategory.name
|
||||
sortingImage.source = currentSelectedCategory.icon
|
||||
}
|
||||
}
|
||||
onContentHeightChanged: {
|
||||
ScrollBar.vertical.position = scrollpositon * scrollheight / scrollView.contentHeight
|
||||
}
|
||||
Column {
|
||||
id: column
|
||||
width: parent.width
|
||||
onPositioningComplete: {
|
||||
scrollView.contentHeight = height
|
||||
if (height < appList.height) {
|
||||
scrollView.contentHeight = appList.height
|
||||
}
|
||||
}
|
||||
|
||||
DropArea {
|
||||
|
||||
width: flow.width
|
||||
height:flow.height
|
||||
visible: !main.showAllApps
|
||||
onDragMove: event => {
|
||||
|
||||
var above = flow.childAt(event.x, event.y);
|
||||
|
||||
if (above && above !== kicker.dragSource && dragSource.parent == flow) {
|
||||
repeater.model.moveRow(dragSource.itemIndex, above.itemIndex);
|
||||
}
|
||||
|
||||
}
|
||||
Flow { //Favorites
|
||||
id: flow
|
||||
width: scrollView.width
|
||||
spacing: 12
|
||||
leftPadding: 25
|
||||
visible: !main.showAllApps
|
||||
Repeater {
|
||||
id: repeater
|
||||
model: globalFavorites
|
||||
delegate:
|
||||
FavoriteItem {
|
||||
id: favitem
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Kirigami.Icon {
|
||||
id: sortingImage
|
||||
width: 15 * 1
|
||||
height: width
|
||||
visible: main.showAllApps
|
||||
source: scrollView.currentSelectedCategory.icon
|
||||
|
||||
PlasmaComponents.Label {
|
||||
id: sortingLabel
|
||||
x: parent.width + 10 * 1
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
text: i18n(scrollView.currentSelectedCategory.name)
|
||||
color: main.textColor
|
||||
font.family: main.textFont
|
||||
font.pointSize: main.textSize
|
||||
}
|
||||
MouseArea {
|
||||
id: mouseArea
|
||||
width: parent.width + sortingLabel.width + 5
|
||||
height: parent.height
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
hoverEnabled: true
|
||||
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
|
||||
onClicked: {
|
||||
if (mouse.button == Qt.LeftButton) {
|
||||
isRight = false
|
||||
currentStateIndex += 1
|
||||
} else if (mouse.button == Qt.RightButton) {
|
||||
isRight = true
|
||||
currentStateIndex -= 1
|
||||
} else if (mouse.button == Qt.MiddleButton) {
|
||||
isRight = false
|
||||
currentStateIndex = plasmoid.configuration.defaultPage
|
||||
}
|
||||
if (currentStateIndex > scrollView.appsCategoriesList.length - 1) {
|
||||
currentStateIndex = 0
|
||||
} else if (currentStateIndex < 0) {
|
||||
currentStateIndex = scrollView.appsCategoriesList.length - 1
|
||||
}
|
||||
|
||||
var currentCategory = scrollView.appsCategoriesList[currentStateIndex];
|
||||
var choosenRepeater = (currentStateIndex % 2 == 0) ? categoriesRepeater : categoriesRepeater2;
|
||||
|
||||
sortingLabel.text = currentCategory.name;
|
||||
sortingImage.source = currentCategory.icon;
|
||||
choosenRepeater.model = rootModel.modelForRow(currentCategory.index);
|
||||
}
|
||||
}
|
||||
}
|
||||
Item { //Spacer
|
||||
id: spacer
|
||||
width: 1
|
||||
height: 10 * 1
|
||||
}
|
||||
|
||||
Grid {
|
||||
id: allAppsGrid
|
||||
x: - 10 * 1
|
||||
columns: 1
|
||||
width: scrollView.width - 10 * 1
|
||||
visible: opacity > 0 && main.showAllApps
|
||||
Repeater {
|
||||
id: allAppsRepeater
|
||||
model: allAppsModel
|
||||
Repeater {
|
||||
id: repeater2
|
||||
model: allAppsRepeater.model.modelForRow(index)
|
||||
delegate:
|
||||
GenericItem {
|
||||
id: genericItem
|
||||
triggerModel: repeater2.model
|
||||
}
|
||||
}
|
||||
}
|
||||
states: [
|
||||
State {
|
||||
name: "hidden"; when: (currentStateIndex != 0)
|
||||
PropertyChanges { target: allAppsGrid; opacity: 0.0 }
|
||||
PropertyChanges { target: allAppsGrid; x: (!isRight ? -20 * 1 : 0) }
|
||||
},
|
||||
State {
|
||||
name: "shown"; when: (currentStateIndex == 0)
|
||||
PropertyChanges { target: allAppsGrid; opacity: 1.0 }
|
||||
PropertyChanges { target: allAppsGrid; x: -10 }
|
||||
}]
|
||||
transitions: [
|
||||
Transition {
|
||||
to: "hidden"
|
||||
PropertyAnimation { properties: 'opacity'; duration: 80; easing.type: Easing.InQuart}
|
||||
PropertyAnimation { properties: 'x'; from: -10 * 1; duration: 80;easing.type: Easing.InQuart}
|
||||
},
|
||||
Transition {
|
||||
to: "shown"
|
||||
PropertyAnimation { properties: 'opacity'; duration: 80; easing.type: Easing.InQuart}
|
||||
PropertyAnimation { properties: 'x'; from: (isRight ? -20 * 1 : 0); duration: 80; easing.type: Easing.InQuart}
|
||||
}
|
||||
]
|
||||
onStateChanged: {
|
||||
if (state == 'hidden') {
|
||||
scrollpositon = scrollView.ScrollBar.vertical.position
|
||||
scrollheight = scrollView.contentHeight
|
||||
}
|
||||
}
|
||||
}
|
||||
Grid { //Categories
|
||||
id: appCategories
|
||||
columns: 1
|
||||
width: scrollView.width - 10 * 1
|
||||
visible: opacity > 0 && main.showAllApps
|
||||
Repeater {
|
||||
id: categoriesRepeater
|
||||
delegate:
|
||||
GenericItem {
|
||||
id: genericItemCat
|
||||
triggerModel: categoriesRepeater.model
|
||||
}
|
||||
}
|
||||
states: [
|
||||
State {
|
||||
name: "hidden"; when: (currentStateIndex == 0 || currentStateIndex % 2 === 1)
|
||||
PropertyChanges { target: appCategories; opacity: 0.0 }
|
||||
PropertyChanges { target: appCategories; x: (isRight ? -20 * 1 : 0) }
|
||||
},
|
||||
State {
|
||||
name: "shown"; when: (currentStateIndex != 0 && currentStateIndex % 2 === 0)
|
||||
PropertyChanges { target: appCategories; opacity: 1.0 }
|
||||
PropertyChanges { target: appCategories; x: -10 * 1 }
|
||||
}]
|
||||
transitions: [
|
||||
Transition {
|
||||
to: "hidden"
|
||||
PropertyAnimation { properties: 'opacity'; duration: 80; easing.type: Easing.InQuart}
|
||||
PropertyAnimation { properties: 'x'; from: -10 * 1; duration: 80; easing.type: Easing.InQuart}
|
||||
},
|
||||
Transition {
|
||||
to: "shown"
|
||||
PropertyAnimation { properties: 'opacity'; duration: 80; easing.type: Easing.InQuart}
|
||||
PropertyAnimation { properties: 'x'; from: (isRight ? -20 * 1 : 0); duration: 80; easing.type: Easing.InQuart}
|
||||
}
|
||||
]
|
||||
onStateChanged: {
|
||||
if (state == 'hidden') {
|
||||
scrollpositon = scrollView.ScrollBar.vertical.position
|
||||
scrollheight = scrollView.contentHeight
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Grid { //Categories
|
||||
id: appCategories2
|
||||
columns: 1
|
||||
width: scrollView.width - 10 * 1
|
||||
visible: opacity > 0 && main.showAllApps
|
||||
Repeater {
|
||||
id: categoriesRepeater2
|
||||
delegate:
|
||||
GenericItem {
|
||||
id: genericItemCat2
|
||||
triggerModel: categoriesRepeater2.model
|
||||
}
|
||||
}
|
||||
states: [
|
||||
State {
|
||||
name: "hidden"; when: (currentStateIndex == 0 || currentStateIndex % 2 === 0)
|
||||
PropertyChanges { target: appCategories2; opacity: 0.0 }
|
||||
PropertyChanges { target: appCategories2; x: (isRight ? -20 * 1 : 0) }
|
||||
},
|
||||
State {
|
||||
name: "shown"; when: (currentStateIndex != 0 && currentStateIndex % 2 === 1)
|
||||
PropertyChanges { target: appCategories2; opacity: 1.0 }
|
||||
PropertyChanges { target: appCategories2; x: -10 * 1}
|
||||
}]
|
||||
transitions: [
|
||||
Transition {
|
||||
to: "hidden"
|
||||
PropertyAnimation { properties: 'opacity'; duration: 80; easing.type: Easing.InQuart}
|
||||
PropertyAnimation { properties: 'x'; from: -10 * 1; duration: 80; easing.type: Easing.InQuart}
|
||||
},
|
||||
Transition {
|
||||
to: "shown"
|
||||
PropertyAnimation { properties: 'opacity'; duration: 80; easing.type: Easing.InQuart}
|
||||
PropertyAnimation { properties: 'x'; from: (isRight ? -20 * 1 : 0);duration: 80; easing.type: Easing.InQuart}
|
||||
}
|
||||
]
|
||||
onStateChanged: {
|
||||
if (state == 'hidden') {
|
||||
scrollpositon = scrollView.ScrollBar.vertical.position
|
||||
scrollheight = scrollView.contentHeight
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Item { //Spacer
|
||||
width: 1
|
||||
height: 20 * 1
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,103 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (C) 2013-2014 by Eike Hein <hein@kde.org> *
|
||||
* Copyright (C) 2021 by Prateek SU <pankajsunal123@gmail.com> *
|
||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
||||
****************************************************************************/
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
|
||||
import org.kde.plasma.plasmoid 2.0
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
|
||||
import org.kde.kirigami as Kirigami
|
||||
|
||||
Item {
|
||||
id: root
|
||||
|
||||
property QtObject dashWindow: null
|
||||
readonly property bool useCustomButtonImage: (Plasmoid.configuration.useCustomButtonImage && Plasmoid.configuration.customButtonImage.length != 0)
|
||||
|
||||
Kirigami.Icon {
|
||||
id: buttonIcon
|
||||
|
||||
width: Plasmoid.configuration.activationIndicator ? parent.width * 0.65 : parent.width
|
||||
height: Plasmoid.configuration.activationIndicator ? parent.height * 0.65 : parent.height
|
||||
anchors.centerIn: parent
|
||||
|
||||
source: useCustomButtonImage ? Plasmoid.configuration.customButtonImage : Plasmoid.configuration.icon
|
||||
|
||||
active: mouseArea.containsMouse
|
||||
|
||||
smooth: true
|
||||
|
||||
Rectangle {
|
||||
id: indicator
|
||||
width: 0
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
height: 3 * 1
|
||||
radius: 10
|
||||
y: parent.height + height
|
||||
color: Plasmoid.configuration.indicatorColor
|
||||
visible: Plasmoid.configuration.activationIndicator
|
||||
|
||||
states: [
|
||||
State { name: "inactive"
|
||||
when: !dashWindow.visible
|
||||
PropertyChanges {
|
||||
target: indicator
|
||||
width: 0
|
||||
|
||||
}
|
||||
},
|
||||
State { name: "active"
|
||||
when: dashWindow.visible
|
||||
PropertyChanges {
|
||||
target: indicator
|
||||
width: parent.width * 0.65
|
||||
}
|
||||
}
|
||||
]
|
||||
transitions: [
|
||||
Transition {
|
||||
NumberAnimation { properties: 'width'; duration: 60}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea
|
||||
{
|
||||
id: mouseArea
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
hoverEnabled: true
|
||||
|
||||
onClicked: {
|
||||
dashWindow.visible = !dashWindow.visible;
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
dashWindow = Qt.createQmlObject("MenuRepresentation {}", root);
|
||||
plasmoid.activated.connect(function() {
|
||||
dashWindow.visible = !dashWindow.visible;
|
||||
});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,329 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (C) 2013-2014 by Eike Hein <hein@kde.org> *
|
||||
* Copyright (C) 2021 by Prateek SU <pankajsunal123@gmail.com> *
|
||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
||||
****************************************************************************/
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Controls 2.15
|
||||
import QtQuick.Dialogs
|
||||
|
||||
import org.kde.plasma.components 3.0 as PlasmaComponents
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
import org.kde.draganddrop 2.0 as DragDrop
|
||||
import org.kde.kirigami 2.3 as Kirigami
|
||||
|
||||
import org.kde.ksvg 1.0 as KSvg
|
||||
import org.kde.plasma.plasmoid 2.0
|
||||
import org.kde.kcmutils as KCM
|
||||
|
||||
import org.kde.iconthemes as KIconThemes
|
||||
|
||||
|
||||
KCM.SimpleKCM {
|
||||
id: configGeneral
|
||||
|
||||
property bool isDash: (Plasmoid.pluginName === "org.kde.plasma.kickerdash")
|
||||
|
||||
property string cfg_icon: Plasmoid.configuration.icon
|
||||
property bool cfg_useCustomButtonImage: Plasmoid.configuration.useCustomButtonImage
|
||||
property string cfg_customButtonImage: Plasmoid.configuration.customButtonImage
|
||||
property bool cfg_activationIndicator: Plasmoid.configuration.activationIndicator
|
||||
property color cfg_indicatorColor: Plasmoid.configuration.indicatorColor
|
||||
property bool cfg_enableGreeting: Plasmoid.configuration.enableGreeting
|
||||
property alias cfg_defaultPage: defaultPage.currentIndex
|
||||
property alias cfg_useExtraRunners: useExtraRunners.checked
|
||||
property alias cfg_customGreeting: customGreeting.text
|
||||
property alias cfg_floating: floating.checked
|
||||
property alias cfg_launcherPosition: launcherPosition.currentIndex
|
||||
property alias cfg_offsetX: screenOffset.value
|
||||
property alias cfg_offsetY: panelOffset.value
|
||||
|
||||
property alias cfg_enableGlow: enableGlowCheck.checked
|
||||
property alias cfg_glowColor: glowColor.currentIndex
|
||||
|
||||
property alias cfg_useSystemFontSettings: useSystemFontSettings.checked
|
||||
|
||||
Kirigami.FormLayout {
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
|
||||
Button {
|
||||
id: iconButton
|
||||
|
||||
Kirigami.FormData.label: i18n("Icon:")
|
||||
|
||||
implicitWidth: previewFrame.width + Kirigami.Units.smallSpacing * 2
|
||||
implicitHeight: previewFrame.height + Kirigami.Units.smallSpacing * 2
|
||||
|
||||
// Just to provide some visual feedback when dragging;
|
||||
// cannot have checked without checkable enabled
|
||||
checkable: true
|
||||
checked: dropArea.containsAcceptableDrag
|
||||
|
||||
onPressed: iconMenu.opened ? iconMenu.close() : iconMenu.open()
|
||||
|
||||
DragDrop.DropArea {
|
||||
id: dropArea
|
||||
|
||||
property bool containsAcceptableDrag: false
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
onDragEnter: {
|
||||
// Cannot use string operations (e.g. indexOf()) on "url" basic type.
|
||||
var urlString = event.mimeData.url.toString();
|
||||
|
||||
// This list is also hardcoded in KIconDialog.
|
||||
var extensions = [".png", ".xpm", ".svg", ".svgz"];
|
||||
containsAcceptableDrag = urlString.indexOf("file:///") === 0 && extensions.some(function (extension) {
|
||||
return urlString.indexOf(extension) === urlString.length - extension.length; // "endsWith"
|
||||
});
|
||||
|
||||
if (!containsAcceptableDrag) {
|
||||
event.ignore();
|
||||
}
|
||||
}
|
||||
onDragLeave: containsAcceptableDrag = false
|
||||
|
||||
onDrop: {
|
||||
if (containsAcceptableDrag) {
|
||||
// Strip file:// prefix, we already verified in onDragEnter that we have only local URLs.
|
||||
iconDialog.setCustomButtonImage(event.mimeData.url.toString().substr("file://".length));
|
||||
}
|
||||
containsAcceptableDrag = false;
|
||||
}
|
||||
}
|
||||
|
||||
KIconThemes.IconDialog {
|
||||
id: iconDialog
|
||||
|
||||
function setCustomButtonImage(image) {
|
||||
configGeneral.cfg_customButtonImage = image || configGeneral.cfg_icon || "start-here-kde-symbolic"
|
||||
configGeneral.cfg_useCustomButtonImage = true;
|
||||
}
|
||||
|
||||
onIconNameChanged: setCustomButtonImage(iconName);
|
||||
}
|
||||
|
||||
KSvg.FrameSvgItem {
|
||||
id: previewFrame
|
||||
anchors.centerIn: parent
|
||||
imagePath: Plasmoid.location === PlasmaCore.Types.Vertical || Plasmoid.location === PlasmaCore.Types.Horizontal
|
||||
? "widgets/panel-background" : "widgets/background"
|
||||
width: Kirigami.Units.iconSizes.large + fixedMargins.left + fixedMargins.right
|
||||
height: Kirigami.Units.iconSizes.large + fixedMargins.top + fixedMargins.bottom
|
||||
|
||||
Kirigami.Icon {
|
||||
anchors.centerIn: parent
|
||||
width: Kirigami.Units.iconSizes.large
|
||||
height: width
|
||||
source: configGeneral.cfg_useCustomButtonImage ? configGeneral.cfg_customButtonImage : configGeneral.cfg_icon
|
||||
}
|
||||
}
|
||||
|
||||
Menu {
|
||||
id: iconMenu
|
||||
|
||||
// Appear below the button
|
||||
y: +parent.height
|
||||
|
||||
onClosed: iconButton.checked = false;
|
||||
|
||||
MenuItem {
|
||||
text: i18nc("@item:inmenu Open icon chooser dialog", "Choose…")
|
||||
icon.name: "document-open-folder"
|
||||
onClicked: iconDialog.open()
|
||||
}
|
||||
MenuItem {
|
||||
text: i18nc("@item:inmenu Reset icon to default", "Clear Icon")
|
||||
icon.name: "edit-clear"
|
||||
onClicked: {
|
||||
configGeneral.cfg_icon = "start-here-kde-symbolic"
|
||||
configGeneral.cfg_useCustomButtonImage = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
CheckBox {
|
||||
id: activationIndicatorCheck
|
||||
Kirigami.FormData.label: i18n("Indicator:")
|
||||
text: i18n("Enabled")
|
||||
checked: Plasmoid.configuration.activationIndicator
|
||||
onCheckedChanged: {
|
||||
Plasmoid.configuration.activationIndicator = checked
|
||||
cfg_activationIndicator = checked
|
||||
}
|
||||
}
|
||||
Button {
|
||||
id: colorButton
|
||||
width: Kirigami.Units.iconSizes.small
|
||||
height: width
|
||||
Kirigami.FormData.label: i18n("Indicator Color:")
|
||||
|
||||
Rectangle {
|
||||
anchors.centerIn: parent
|
||||
anchors.fill: parent
|
||||
radius: 10
|
||||
color: cfg_indicatorColor
|
||||
}
|
||||
onPressed: colorDialog.visible ? colorDialog.close() : colorDialog.open()
|
||||
ColorDialog {
|
||||
id: colorDialog
|
||||
title: i18n("Please choose a color")
|
||||
onAccepted: {
|
||||
cfg_indicatorColor = colorDialog.color
|
||||
}
|
||||
}
|
||||
}
|
||||
Item {
|
||||
Kirigami.FormData.isSection: true
|
||||
}
|
||||
CheckBox {
|
||||
id: enableGreetingCheck
|
||||
Kirigami.FormData.label: i18n("Greeting:")
|
||||
text: i18n("Enabled")
|
||||
checked: Plasmoid.configuration.enableGreeting
|
||||
onCheckedChanged: {
|
||||
Plasmoid.configuration.enableGreeting = checked
|
||||
cfg_enableGreeting = checked
|
||||
customGreeting.enabled = checked
|
||||
}
|
||||
}
|
||||
TextField {
|
||||
id: customGreeting
|
||||
Kirigami.FormData.label: i18n("Custom Greeting Text:")
|
||||
placeholderText: i18n("No custom greeting set")
|
||||
}
|
||||
Item {
|
||||
Kirigami.FormData.isSection: true
|
||||
}
|
||||
CheckBox {
|
||||
id: enableGlowCheck
|
||||
Kirigami.FormData.label: i18n("Glow")
|
||||
text: i18n("Enabled")
|
||||
checked: Plasmoid.configuration.enableGlow
|
||||
onCheckedChanged: {
|
||||
Plasmoid.configuration.enableGlow = checked
|
||||
}
|
||||
}
|
||||
ComboBox {
|
||||
id: glowColor
|
||||
Kirigami.FormData.label: i18n("Glow color:")
|
||||
visible: Plasmoid.configuration.enableGlow
|
||||
model: [
|
||||
i18n("Purple (Default)"),
|
||||
i18n("Blue"),
|
||||
i18n("Red"),
|
||||
]
|
||||
}
|
||||
Item {
|
||||
Kirigami.FormData.isSection: true
|
||||
}
|
||||
ComboBox {
|
||||
id: launcherPosition
|
||||
Kirigami.FormData.label: i18n("Launcher Positioning:")
|
||||
model: [
|
||||
i18n("Default"),
|
||||
i18n("Horizontal Center"),
|
||||
i18n("Screen Center"),
|
||||
]
|
||||
onCurrentIndexChanged: {
|
||||
if (currentIndex == 2) {
|
||||
floating.enabled = false
|
||||
floating.checked = true
|
||||
} else {
|
||||
floating.enabled = true
|
||||
}
|
||||
}
|
||||
}
|
||||
CheckBox {
|
||||
id: floating
|
||||
text: i18n("Floating")
|
||||
onCheckedChanged: {
|
||||
screenOffset.visible = checked
|
||||
panelOffset.visible = checked
|
||||
}
|
||||
}
|
||||
Slider {
|
||||
id: screenOffset
|
||||
visible: Plasmoid.configuration.floating
|
||||
Kirigami.FormData.label: i18n("Offset Screen Edge (0 is Default):")
|
||||
from: 0
|
||||
value: 0
|
||||
to: 100
|
||||
stepSize: 1
|
||||
PlasmaComponents.ToolTip {
|
||||
text: screenOffset.value
|
||||
}
|
||||
}
|
||||
Slider {
|
||||
id: panelOffset
|
||||
visible: Plasmoid.configuration.floating
|
||||
Kirigami.FormData.label: i18n("Offset Panel (0 is Default):")
|
||||
from: 0
|
||||
value: 0
|
||||
to: 100
|
||||
stepSize: 1
|
||||
PlasmaComponents.ToolTip {
|
||||
text: panelOffset.value
|
||||
}
|
||||
}
|
||||
Item {
|
||||
Kirigami.FormData.isSection: true
|
||||
}
|
||||
ComboBox {
|
||||
id: defaultPage
|
||||
Kirigami.FormData.label: i18n("Default Page:")
|
||||
model: [
|
||||
i18n("All Applications (Default)"),
|
||||
i18n("Developement"),
|
||||
i18n("Games"),
|
||||
i18n("Graphics"),
|
||||
i18n("Internet"),
|
||||
i18n("Multimedia"),
|
||||
i18n("Office"),
|
||||
i18n("Science & Math"),
|
||||
i18n("Settings"),
|
||||
i18n("System"),
|
||||
i18n("Utilities"),
|
||||
i18n("Lost & Found"),
|
||||
]
|
||||
}
|
||||
Item {
|
||||
Kirigami.FormData.isSection: true
|
||||
}
|
||||
CheckBox {
|
||||
id: useExtraRunners
|
||||
Kirigami.FormData.label: i18n("Search:")
|
||||
text: i18n("Expand search to bookmarks, files and emails")
|
||||
}
|
||||
|
||||
Item {
|
||||
Kirigami.FormData.isSection: true
|
||||
}
|
||||
|
||||
CheckBox {
|
||||
id: useSystemFontSettings
|
||||
Kirigami.FormData.label: i18n("Use system font settings")
|
||||
text: i18n("Enabled")
|
||||
checked: Plasmoid.configuration.useSystemFontSettings
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,219 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
||||
****************************************************************************/
|
||||
import QtQuick 2.12
|
||||
import QtQuick.Layouts 1.12
|
||||
import Qt5Compat.GraphicalEffects
|
||||
import QtQuick.Window 2.2
|
||||
import org.kde.plasma.components 3.0 as PlasmaComponents
|
||||
import org.kde.plasma.plasmoid 2.0
|
||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||
import org.kde.coreaddons 1.0 as KCoreAddons
|
||||
import org.kde.kirigami as Kirigami
|
||||
import QtQuick.Controls 2.15
|
||||
|
||||
import "../code/tools.js" as Tools
|
||||
|
||||
Item {
|
||||
id: favItem
|
||||
|
||||
property int iconSize: Kirigami.Units.gridUnit * 3.2
|
||||
|
||||
width: 125
|
||||
height: iconSize + Kirigami.Units.smallSpacing + appname.implicitHeight + 10
|
||||
|
||||
signal itemActivated(int index, string actionId, string argument)
|
||||
signal actionTriggered(string actionId, variant actionArgument)
|
||||
signal aboutToShowActionMenu(variant actionMenu)
|
||||
|
||||
|
||||
property bool highlighted: false
|
||||
property bool isDraging: false
|
||||
|
||||
property bool hasActionList: ((model.favoriteId !== null)
|
||||
|| (("hasActionList" in model) && (model.hasActionList !== null)))
|
||||
|
||||
property int itemIndex: model.index
|
||||
|
||||
|
||||
function openActionMenu(visualParent, x, y) {
|
||||
aboutToShowActionMenu(actionMenu);
|
||||
actionMenu.visualParent = visualParent;
|
||||
actionMenu.open(x, y);
|
||||
}
|
||||
|
||||
onAboutToShowActionMenu: actionMenu => {
|
||||
const actionList = (model.hasActionList !== null) ? model.actionList : [];
|
||||
Tools.fillActionMenu(i18n, actionMenu, actionList, scrollView.pinnedModel[0], model.favoriteId);
|
||||
}
|
||||
onActionTriggered: (actionId, actionArgument) => {
|
||||
if (Tools.triggerAction(scrollView.pinnedModel[0], model.index, actionId, actionArgument) === true) {
|
||||
kicker.expanded = false;
|
||||
}
|
||||
}
|
||||
|
||||
Kirigami.Icon {
|
||||
id: appicon
|
||||
anchors {
|
||||
top: parent.top
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
width: iconSize
|
||||
height: iconSize
|
||||
source: model.decoration
|
||||
}
|
||||
|
||||
PlasmaComponents.Label {
|
||||
id: appname
|
||||
text: ("name" in model ? model.name : model.display)
|
||||
font.family: main.textFont
|
||||
font.pointSize: main.textSize
|
||||
color: main.textColor
|
||||
anchors {
|
||||
top: appicon.bottom
|
||||
topMargin: Kirigami.Units.smallSpacing
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
}
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignTop
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: rect
|
||||
z: -20
|
||||
visible: !plasmoid.configuration.enableGlow
|
||||
height: parent.height
|
||||
width: parent.width
|
||||
anchors.centerIn: parent
|
||||
radius: 8
|
||||
|
||||
color: PlasmaCore.Theme.highlightColor
|
||||
states: [
|
||||
State {
|
||||
name: "highlight"; when: (highlighted)
|
||||
PropertyChanges { target: rect; opacity: 0.3}
|
||||
},
|
||||
State {
|
||||
name: "default"; when: (!highlighted)
|
||||
PropertyChanges { target: rect; opacity: 0}
|
||||
}
|
||||
]
|
||||
transitions: highlight
|
||||
}
|
||||
|
||||
DropShadow {
|
||||
id:appIconGlow
|
||||
visible: plasmoid.configuration.enableGlow
|
||||
anchors.fill: appicon
|
||||
cached: true
|
||||
horizontalOffset: 0
|
||||
verticalOffset: 0
|
||||
radius: 15.0
|
||||
samples: 16
|
||||
color: main.glowColor1
|
||||
source: appicon
|
||||
states: [
|
||||
State {
|
||||
name: "highlight"; when: (highlighted)
|
||||
PropertyChanges { target: appIconGlow; opacity: 1}
|
||||
PropertyChanges { target: appNameGlow; opacity: 1}
|
||||
},
|
||||
State {
|
||||
name: "default"; when: (!highlighted)
|
||||
PropertyChanges { target: appIconGlow; opacity: 0}
|
||||
PropertyChanges { target: appNameGlow; opacity: 0}
|
||||
}
|
||||
]
|
||||
transitions: highlight
|
||||
}
|
||||
|
||||
DropShadow {
|
||||
id: appNameGlow
|
||||
visible: plasmoid.configuration.enableGlow
|
||||
anchors.fill: appname
|
||||
cached: true
|
||||
horizontalOffset: 0
|
||||
verticalOffset: 0
|
||||
radius: 15.0
|
||||
samples: 16
|
||||
color: main.glowColor1
|
||||
source: appname
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: ma
|
||||
anchors.fill: parent
|
||||
z: parent.z + 1
|
||||
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
hoverEnabled: true
|
||||
onClicked: {
|
||||
|
||||
if (mouse.button == Qt.RightButton ) {
|
||||
if (favItem.hasActionList) {
|
||||
var mapped = mapToItem(favItem, mouse.x, mouse.y);
|
||||
favItem.openActionMenu(favItem, mouse.x, mouse.y);
|
||||
}
|
||||
} else {
|
||||
kicker.globalFavorites.trigger(index, "", null);
|
||||
root.toggle()
|
||||
}
|
||||
|
||||
}
|
||||
onReleased: {
|
||||
isDraging: false
|
||||
}
|
||||
onEntered: {
|
||||
if(plasmoid.configuration.enableGlow) {
|
||||
appIconGlow.state = "highlight"
|
||||
} else { rect.state = "highlight" }
|
||||
|
||||
}
|
||||
onExited: {
|
||||
if(plasmoid.configuration.enableGlow) {
|
||||
appIconGlow.state = "default"
|
||||
} else { rect.state = "default" }
|
||||
}
|
||||
onPositionChanged: {
|
||||
isDraging = pressed
|
||||
if (pressed){
|
||||
if ("pluginName" in model) {
|
||||
dragHelper.startDrag(kicker, model.url, model.decoration,
|
||||
"text/x-plasmoidservicename", model.pluginName);
|
||||
} else {
|
||||
kicker.dragSource = favItem;
|
||||
dragHelper.startDrag(kicker, model.url, model.icon);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ActionMenu {
|
||||
id: actionMenu
|
||||
|
||||
onActionClicked: {
|
||||
actionTriggered(actionId, actionArgument);
|
||||
// root.toggle()
|
||||
}
|
||||
}
|
||||
Transition {
|
||||
id: highlight
|
||||
ColorAnimation {duration: 100 }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,100 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
||||
****************************************************************************/
|
||||
import QtQuick 2.12
|
||||
import QtQuick.Window 2.2
|
||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||
import org.kde.kirigami as Kirigami
|
||||
import org.kde.kirigamiaddons.components 1.0 as KirigamiComponents
|
||||
import org.kde.kcmutils as KCM
|
||||
|
||||
PlasmaCore.Dialog { //cosmic background noise is less random than the placement of this dialog
|
||||
id: avatarContainer
|
||||
|
||||
property int avatarWidth
|
||||
property bool isTop: false
|
||||
|
||||
readonly property color borderGradientColor1: plasmoid.configuration.glowColor == 0 ? "#FEAC5E" :
|
||||
plasmoid.configuration.glowColor == 1 ? "#a5fecb" :
|
||||
"#ff005d"
|
||||
readonly property color borderGradientColor2: plasmoid.configuration.glowColor == 0 ? "#C779D0" :
|
||||
plasmoid.configuration.glowColor == 1 ? "#20bdff" :
|
||||
"#ff005c"
|
||||
readonly property color borderGradientColor3: plasmoid.configuration.glowColor == 0 ? "#4BC0C8" :
|
||||
plasmoid.configuration.glowColor == 1 ? "#5433ff" :
|
||||
"#ff8b26"
|
||||
|
||||
type: "Notification"
|
||||
|
||||
x: root.x + root.width / 2 - width / 2
|
||||
y: root.y - width / 2 //you can't even add 1 without everything breaking wtf
|
||||
|
||||
mainItem:
|
||||
Item {
|
||||
onParentChanged: {
|
||||
//This removes the dialog background
|
||||
if (parent){
|
||||
var popupWindow = Window.window
|
||||
if (typeof popupWindow.backgroundHints !== "undefined"){
|
||||
popupWindow.backgroundHints = PlasmaCore.Types.NoBackground
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Item {
|
||||
id: avatarFrame
|
||||
anchors.centerIn: parent
|
||||
width: avatarWidth
|
||||
height: avatarWidth
|
||||
KirigamiComponents.AvatarButton {
|
||||
id: mainFaceIcon
|
||||
source: kuser.faceIconUrl
|
||||
anchors {
|
||||
fill: parent
|
||||
margins: Kirigami.Units.smallSpacing
|
||||
}
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
hoverEnabled: false
|
||||
onClicked: {
|
||||
KCM.KCMLauncher.openSystemSettings("kcm_users")
|
||||
root.toggle()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
visible: plasmoid.configuration.enableGlow
|
||||
anchors.centerIn: mainFaceIcon
|
||||
width: parent.width - 4 // Subtract to prevent fringing
|
||||
height: width
|
||||
radius: width / 2
|
||||
|
||||
gradient: Gradient {
|
||||
GradientStop { position: 0.0; color: borderGradientColor1 }
|
||||
GradientStop { position: 0.33; color: borderGradientColor2 }
|
||||
GradientStop { position: 1.0; color: borderGradientColor3 }
|
||||
}
|
||||
|
||||
z:-1
|
||||
rotation: 270
|
||||
transformOrigin: Item.Center
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,199 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
||||
****************************************************************************/
|
||||
import QtQuick 2.12
|
||||
import QtQuick.Layouts 1.12
|
||||
import Qt5Compat.GraphicalEffects
|
||||
import QtQuick.Window 2.2
|
||||
import org.kde.plasma.components 3.0 as PlasmaComponents
|
||||
import org.kde.plasma.plasmoid 2.0
|
||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||
import org.kde.coreaddons 1.0 as KCoreAddons
|
||||
import org.kde.kirigami 2.13 as Kirigami
|
||||
import QtQuick.Controls 2.15
|
||||
|
||||
import "../code/tools.js" as Tools
|
||||
|
||||
Item {
|
||||
id: allItem
|
||||
|
||||
width: rect.width + 4 * 1
|
||||
height: rect.height + 4 * 1
|
||||
|
||||
property bool highlighted: false
|
||||
property bool isDraging: false
|
||||
property bool canDrag: true
|
||||
property bool canNavigate: false
|
||||
property bool isMouseHighlight: false
|
||||
|
||||
property int subIndex: 0
|
||||
|
||||
signal highlightChanged
|
||||
signal aboutToShowActionMenu(variant actionMenu)
|
||||
|
||||
property bool hasActionList: ((model.favoriteId !== null)
|
||||
|| (("hasActionList" in model) && (model.hasActionList !== null)))
|
||||
|
||||
property var triggerModel
|
||||
|
||||
onAboutToShowActionMenu: {
|
||||
var actionList = allItem.hasActionList ? model.actionList : [];
|
||||
//Tools.fillActionMenu(i18n, actionMenu, actionList, ListView.view.model.favoritesModel, model.favoriteId);
|
||||
Tools.fillActionMenu(i18n, actionMenu, actionList, globalFavorites, model.favoriteId);
|
||||
}
|
||||
|
||||
function openActionMenu(x, y) {
|
||||
aboutToShowActionMenu(actionMenu);
|
||||
actionMenu.visualParent = allItem;
|
||||
actionMenu.open(x, y);
|
||||
}
|
||||
function actionTriggered(actionId, actionArgument) {
|
||||
var close = (Tools.triggerAction(triggerModel, index, actionId, actionArgument) === true);
|
||||
if (close) {
|
||||
root.toggle();
|
||||
}
|
||||
}
|
||||
function trigger() {
|
||||
triggerModel.trigger(index, "", null);
|
||||
root.toggle()
|
||||
}
|
||||
function updateHighlight() {
|
||||
if (navGrid.currentIndex == index){
|
||||
highlighted = true
|
||||
} else {
|
||||
highlighted = false
|
||||
}
|
||||
}
|
||||
function deselect(){
|
||||
highlighted = false
|
||||
listView.currentIndex = -1
|
||||
}
|
||||
Item {
|
||||
id: rect
|
||||
x: 10 * 1
|
||||
y: 10 * 1
|
||||
width: main.width - 40 * 1 - allItem.x
|
||||
height: 38 * 1
|
||||
|
||||
Kirigami.Icon {
|
||||
x: 9 * 1
|
||||
anchors.verticalCenter: rect.verticalCenter
|
||||
id: appicon
|
||||
width: 24 * 1
|
||||
height: width
|
||||
source: model.decoration
|
||||
PlasmaComponents.Label {
|
||||
id: appname
|
||||
x: appicon.width + 9 * 1
|
||||
anchors.verticalCenter: appicon.verticalCenter
|
||||
text: ("name" in model ? model.name : model.display)
|
||||
color: main.textColor
|
||||
font.family: main.textFont
|
||||
font.pointSize: main.textSize
|
||||
}
|
||||
}
|
||||
states: [
|
||||
State {
|
||||
name: "highlight"; when: !canNavigate ? highlighted : runnerList.currentMainIndex == index && runnerList.currentSubIndex == subIndex
|
||||
PropertyChanges { target: rectFill; opacity: 0.3}
|
||||
PropertyChanges { target: appname; color: highlightedTextColor}
|
||||
},
|
||||
State {
|
||||
name: "default"; when: !canNavigate ? !highlighted : runnerList.currentMainIndex != index || runnerList.currentSubIndex != subIndex
|
||||
PropertyChanges { target: rectFill; opacity: 0}
|
||||
PropertyChanges { target: appname; color: textColor}
|
||||
}]
|
||||
transitions: highlight
|
||||
onStateChanged: {
|
||||
if (state == 'default'){
|
||||
isMouseHighlight = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: rectFill
|
||||
color: PlasmaCore.Theme.highlightColor
|
||||
radius: 6
|
||||
z: -20
|
||||
anchors.fill: rect
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: ma
|
||||
anchors.fill: parent
|
||||
z: parent.z + 1
|
||||
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
hoverEnabled: true
|
||||
onClicked: {
|
||||
if (mouse.button == Qt.RightButton) {
|
||||
if (allItem.hasActionList) {
|
||||
var mapped = mapToItem(allItem, mouse.x, mouse.y);
|
||||
allItem.openActionMenu(mapped.x, mapped.y);
|
||||
}
|
||||
} else {
|
||||
trigger()
|
||||
}
|
||||
|
||||
}
|
||||
onReleased: {
|
||||
isDraging: false
|
||||
}
|
||||
onExited: {
|
||||
rect.state = "default"
|
||||
isMouseHighlight = false
|
||||
}
|
||||
onPositionChanged: {
|
||||
isDraging = pressed
|
||||
if (pressed && canDrag){
|
||||
if ("pluginName" in model) {
|
||||
dragHelper.startDrag(kicker, model.url, model.decoration,
|
||||
"text/x-plasmoidservicename", model.pluginName);
|
||||
} else {
|
||||
dragHelper.startDrag(kicker, model.url, model.decoration);
|
||||
}
|
||||
}
|
||||
if (containsMouse) {
|
||||
isMouseHighlight = true
|
||||
rect.state = "highlight"
|
||||
if (canNavigate) {
|
||||
if (runnerList.currentSubIndex != subIndex) {
|
||||
repeater.itemAt(runnerList.currentSubIndex).nGrid.currentIndex = -1
|
||||
}
|
||||
runnerList.currentSubIndex = subIndex
|
||||
runnerList.currentMainIndex = index
|
||||
listView.currentIndex = index
|
||||
listView.focus = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ActionMenu {
|
||||
id: actionMenu
|
||||
|
||||
onActionClicked: {
|
||||
visualParent.actionTriggered(actionId, actionArgument);
|
||||
//root.toggle()
|
||||
}
|
||||
}
|
||||
Transition {
|
||||
id: highlight
|
||||
ColorAnimation {duration: 100 }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,95 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
||||
****************************************************************************/
|
||||
import org.kde.plasma.components 3.0 as PlasmaComponents
|
||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||
import QtQuick.Controls 2.5
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Window 2.2
|
||||
import Qt5Compat.GraphicalEffects
|
||||
import org.kde.kcmutils as KCM
|
||||
|
||||
Item {
|
||||
property var iconSize
|
||||
width: iconSize * 3.75
|
||||
height: iconSize
|
||||
PlasmaComponents.RoundButton {
|
||||
id: settingsButton
|
||||
visible: true
|
||||
flat: true
|
||||
height: iconSize * 2
|
||||
width: height
|
||||
anchors.left: parent.left
|
||||
|
||||
PlasmaComponents.ToolTip {
|
||||
text: i18n("Settings")
|
||||
}
|
||||
Item {
|
||||
id: visualParentSettings
|
||||
y: 2 * iconSize
|
||||
}
|
||||
Image {
|
||||
id: settingsImage
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
source: "icons/feather/settings.svg"
|
||||
width: iconSize
|
||||
height: width
|
||||
ColorOverlay {
|
||||
visible: plasmoid.configuration.theming != 0
|
||||
anchors.fill: settingsImage
|
||||
source: settingsImage
|
||||
color: main.textColor
|
||||
}
|
||||
}
|
||||
onClicked: {
|
||||
KCM.KCMLauncher.openSystemSettings("kcm_landingpage")
|
||||
root.toggle()
|
||||
//plasmoid.action("configure").trigger() //might implement later
|
||||
}
|
||||
}
|
||||
PlasmaComponents.RoundButton {
|
||||
id: powerOffButton
|
||||
visible: true
|
||||
flat: true
|
||||
height: iconSize * 2
|
||||
width: height
|
||||
anchors.right: parent.right
|
||||
|
||||
PlasmaComponents.ToolTip {
|
||||
text: i18n("Power Off")
|
||||
}
|
||||
Image {
|
||||
id: powerImage
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
source: "icons/feather/power.svg"
|
||||
width: iconSize
|
||||
height: width
|
||||
ColorOverlay {
|
||||
visible: true
|
||||
anchors.fill: powerImage
|
||||
source: powerImage
|
||||
color: main.textColor
|
||||
}
|
||||
}
|
||||
onClicked: {
|
||||
pmEngine.performOperation("requestShutDown")
|
||||
}
|
||||
}
|
||||
}
|
440
kde/plasma/plasmoids/AndromedaLauncher/contents/ui/MainView.qml
Normal file
|
@ -0,0 +1,440 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
||||
****************************************************************************/
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.12
|
||||
import Qt5Compat.GraphicalEffects
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
import org.kde.plasma.components 3.0 as PlasmaComponents
|
||||
import org.kde.coreaddons 1.0 as KCoreAddons
|
||||
|
||||
import org.kde.plasma.plasma5support 2.0 as P5Support
|
||||
import org.kde.kirigami as Kirigami
|
||||
|
||||
Item {
|
||||
id: main
|
||||
anchors.fill: parent
|
||||
property bool searching: (searchBar.text != "")
|
||||
signal newTextQuery(string text)
|
||||
|
||||
readonly property color textColor: Kirigami.Theme.textColor
|
||||
readonly property string textFont: plasmoid.configuration.useSystemFontSettings ? Kirigami.Theme.defaultFont : "SF Pro Text"
|
||||
readonly property real textSize: plasmoid.configuration.useSystemFontSettings ? Kirigami.Theme.defaultFont.pointSize : 11
|
||||
readonly property color bgColor: Kirigami.Theme.backgroundColor
|
||||
readonly property color highlightColor: Kirigami.Theme.highlightColor
|
||||
readonly property color highlightedTextColor: Kirigami.Theme.highlightedTextColor
|
||||
readonly property bool isTop: plasmoid.location == PlasmaCore.Types.TopEdge & plasmoid.configuration.launcherPosition != 2 & !plasmoid.configuration.floating
|
||||
|
||||
readonly property color glowColor1: plasmoid.configuration.glowColor == 0 ? "#D300DC" :
|
||||
plasmoid.configuration.glowColor == 1 ? "#20bdff" :
|
||||
"#ff005d"
|
||||
readonly property color glowColor2: plasmoid.configuration.glowColor == 0 ? "#8700FF" :
|
||||
plasmoid.configuration.glowColor == 1 ? "#5433ff" :
|
||||
"#ff8b26"
|
||||
|
||||
property bool showAllApps: false
|
||||
|
||||
property real innerPadding: 7.5
|
||||
property real itemsWidth: width - (innerPadding * 4)
|
||||
|
||||
KCoreAddons.KUser {
|
||||
id: kuser
|
||||
}
|
||||
|
||||
P5Support.DataSource {
|
||||
id: pmEngine
|
||||
engine: "powermanagement"
|
||||
connectedSources: ["PowerDevil", "Sleep States"]
|
||||
function performOperation(what) {
|
||||
var service = serviceForSource("PowerDevil")
|
||||
var operation = service.operationDescription(what)
|
||||
service.startOperationCall(operation)
|
||||
}
|
||||
}
|
||||
|
||||
function updateStartpage(){
|
||||
appList.currentStateIndex = plasmoid.configuration.defaultPage
|
||||
}
|
||||
|
||||
function reload() {
|
||||
searchBar.clear()
|
||||
searchBar.focus = true
|
||||
appList.reset()
|
||||
}
|
||||
function reset(){
|
||||
searchBar.clear()
|
||||
searchBar.focus = true
|
||||
appList.reset()
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: backdrop
|
||||
x: 0
|
||||
y: isTop ? 0 : 125 * 1
|
||||
width: main.width
|
||||
height: isTop ? main.height - 200 * 1 : main.height - y - (searchBarContainer.height + 20)
|
||||
color: bgColor
|
||||
opacity: 0
|
||||
}
|
||||
//Floating Avatar
|
||||
Item {
|
||||
id: avatarParent
|
||||
x: main.width / 2
|
||||
y: - root.margins.top
|
||||
FloatingAvatar { //Anyone looking for an unpredictable number generator?
|
||||
id: floatingAvatar
|
||||
//visualParent: root
|
||||
isTop: main.isTop
|
||||
avatarWidth: 125 * 1
|
||||
visible: root.visible && !isTop ? true : root.visible && plasmoid.configuration.floating ? true : false
|
||||
}
|
||||
}
|
||||
//Power & Settings
|
||||
Item {
|
||||
Header {
|
||||
id: powerSettings
|
||||
x: main.width - width - iconSize / 2
|
||||
y: isTop ? main.height - 2 * height - iconSize / 2 : iconSize / 2
|
||||
iconSize: 20 * 1
|
||||
}
|
||||
}
|
||||
//Greeting
|
||||
Item {
|
||||
id: greeting
|
||||
Text {
|
||||
id: nameLabel
|
||||
x: main.width / 2 - width / 2 //This centeres the Text
|
||||
y: isTop ? main.height - height - 135 * 1 : 70 * 1
|
||||
text: plasmoid.configuration.enableGreeting && plasmoid.configuration.customGreeting ? plasmoid.configuration.customGreeting : plasmoid.configuration.enableGreeting ? 'Hi, ' + kuser.fullName : i18n("%1@%2", kuser.loginName, kuser.host)
|
||||
color: textColor
|
||||
font.family: textFont
|
||||
font.pixelSize: 25 * 1
|
||||
font.bold: true
|
||||
}
|
||||
// Text shadow for greeting label
|
||||
DropShadow {
|
||||
anchors.fill: nameLabel
|
||||
cached: true
|
||||
horizontalOffset: 0
|
||||
verticalOffset: 0
|
||||
radius: 10.0
|
||||
samples: 16
|
||||
color: glowColor1
|
||||
source: nameLabel
|
||||
visible: plasmoid.configuration.enableGlow
|
||||
}
|
||||
}
|
||||
//Searchbar
|
||||
Item {
|
||||
Rectangle {
|
||||
id: searchBarContainer
|
||||
y: isTop ? main.height - height - (2 * powerSettings.height + powerSettings.iconSize / 2) - 10 * 1 : main.height - (height + innerPadding * 2)
|
||||
width: main.width - (root.margins.left*2)
|
||||
anchors.left: parent.left
|
||||
height: 45
|
||||
radius: 8
|
||||
color: Qt.lighter(Kirigami.Theme.backgroundColor, 1.3) // better contrast color
|
||||
Image {
|
||||
id: searchIcon
|
||||
x: 15
|
||||
width: 15
|
||||
height: width
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
source: 'icons/feather/search.svg'
|
||||
ColorOverlay {
|
||||
visible: true
|
||||
anchors.fill: searchIcon
|
||||
source: searchIcon
|
||||
color: main.textColor
|
||||
}
|
||||
}
|
||||
Rectangle {
|
||||
x: parent.x + 45
|
||||
width: parent.width - 60
|
||||
height: searchBar.height
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
clip: true
|
||||
color: 'transparent'
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
cursorShape: Qt.IBeamCursor
|
||||
hoverEnabled: true
|
||||
}
|
||||
TextInput {
|
||||
id: searchBar
|
||||
width: parent.width
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
focus: true
|
||||
color: textColor
|
||||
selectByMouse: true
|
||||
selectionColor: highlightColor
|
||||
font.family: textFont
|
||||
font.pixelSize: 13 * 1
|
||||
Text {
|
||||
anchors.fill: parent
|
||||
text: i18n("Search your computer")
|
||||
color: Kirigami.Theme.disabledTextColor
|
||||
visible: !parent.text
|
||||
}
|
||||
onTextChanged: {
|
||||
runnerModel.query = text;
|
||||
newTextQuery(text)
|
||||
}
|
||||
function clear() {
|
||||
text = "";
|
||||
}
|
||||
function backspace() {
|
||||
if (searching) {
|
||||
text = text.slice(0, -1);
|
||||
}
|
||||
focus = true;
|
||||
}
|
||||
function appendText(newText) {
|
||||
if (!root.visible) {
|
||||
return;
|
||||
}
|
||||
focus = true;
|
||||
text = text + newText;
|
||||
}
|
||||
Keys.onPressed: {
|
||||
if (event.key == Qt.Key_Down) {
|
||||
event.accepted = true;
|
||||
runnerList.setFocus()
|
||||
} else if (event.key == Qt.Key_Tab || event.key == Qt.Key_Up) {
|
||||
event.accepted = true;
|
||||
runnerList.setFocus()
|
||||
} else if (event.key == Qt.Key_Escape) {
|
||||
event.accepted = true;
|
||||
if (searching) {
|
||||
clear()
|
||||
} else {
|
||||
root.toggle()
|
||||
}
|
||||
} else if (event.key == Qt.Key_Enter || event.key == Qt.Key_Return) {
|
||||
runnerList.setFocus()
|
||||
runnerList.triggerFirst()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Fvorites / All apps label
|
||||
Image {
|
||||
id: headerLabel
|
||||
source: "icons/feather/star.svg"
|
||||
width: 15
|
||||
height: width
|
||||
y: backdrop.y + width
|
||||
anchors.leftMargin: Kirigami.Units.largeSpacing
|
||||
anchors.topMargin: Kirigami.Units.largeSpacing
|
||||
anchors.left: parent.left
|
||||
|
||||
PlasmaComponents.Label {
|
||||
id: mainLabelGrid
|
||||
x: parent.width + 10
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
text: i18n(showAllApps ? "All apps" : "Favorite Apps")
|
||||
font.family: textFont
|
||||
font.pointSize: textSize
|
||||
}
|
||||
|
||||
ColorOverlay {
|
||||
visible: true
|
||||
anchors.fill: headerLabel
|
||||
source: headerLabel
|
||||
color: main.textColor
|
||||
}
|
||||
}
|
||||
// Show all app buttons
|
||||
PlasmaComponents.Button {
|
||||
MouseArea {
|
||||
hoverEnabled: true
|
||||
anchors.fill: parent
|
||||
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
onClicked: showAllApps = !showAllApps
|
||||
}
|
||||
text: i18n(showAllApps ? "Back" : "All apps")
|
||||
id: mainsecLabelGrid
|
||||
icon.name: showAllApps ? "go-previous" : "go-next"
|
||||
font.pointSize: textSize
|
||||
font.family: textFont
|
||||
icon.height: 15
|
||||
icon.width: icon.height
|
||||
LayoutMirroring.enabled: true
|
||||
LayoutMirroring.childrenInherit: !showAllApps
|
||||
flat: false
|
||||
background: Rectangle {
|
||||
color: Qt.lighter(Kirigami.Theme.backgroundColor)
|
||||
border.width: 1
|
||||
border.color: Qt.darker(Kirigami.Theme.backgroundColor, 1.14)
|
||||
radius: plasmoid.configuration.enableGlow ? height / 2 : 5
|
||||
|
||||
Rectangle {
|
||||
id: bgMask
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
radius: height / 2
|
||||
border.width: 0
|
||||
visible: plasmoid.configuration.enableGlow && !searching
|
||||
}
|
||||
Item {
|
||||
visible: plasmoid.configuration.enableGlow && !searching
|
||||
anchors.fill: bgMask
|
||||
// x: container.x - 20
|
||||
layer.enabled: true
|
||||
layer.effect: OpacityMask {
|
||||
maskSource: bgMask
|
||||
}
|
||||
|
||||
LinearGradient {
|
||||
anchors.fill: parent
|
||||
start: Qt.point(bgMask.width, 0)
|
||||
end: Qt.point(0, bgMask.height)
|
||||
gradient: Gradient {
|
||||
GradientStop { position: 0.0; color: glowColor1 }
|
||||
GradientStop { position: 1.0; color: glowColor2 }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
topPadding: 5
|
||||
bottomPadding: topPadding
|
||||
leftPadding: 8
|
||||
rightPadding: 8
|
||||
icon{
|
||||
width: height
|
||||
height: visible ? Kirigami.Units.iconSizes.small : 0
|
||||
name: showAllApps ? "go-previous" : "go-next"
|
||||
}
|
||||
|
||||
anchors {
|
||||
topMargin: Kirigami.Units.smallSpacing
|
||||
verticalCenter: headerLabel.verticalCenter
|
||||
// rightMargin: Kirigami.Units.largeSpacing
|
||||
// leftMargin: Kirigami.Units.largeSpacing
|
||||
//right: parent.right
|
||||
}
|
||||
x: main.width - (width + Kirigami.Units.largeSpacing + root.margins.right)
|
||||
visible: !searching
|
||||
}
|
||||
// All apps button shadow
|
||||
DropShadow {
|
||||
anchors.fill: mainsecLabelGrid
|
||||
cached: true
|
||||
horizontalOffset: 0
|
||||
verticalOffset: 0
|
||||
radius: 11.0
|
||||
samples: 16
|
||||
color: glowColor1
|
||||
source: mainsecLabelGrid
|
||||
visible: plasmoid.configuration.enableGlow && !searching
|
||||
}
|
||||
|
||||
//List of Apps
|
||||
AppList {
|
||||
id: appList
|
||||
state: "visible"
|
||||
anchors.top: headerLabel.bottom
|
||||
anchors.topMargin: showAllApps ? headerLabel.width : headerLabel.width * 1.5
|
||||
|
||||
width: itemsWidth
|
||||
height: backdrop.height - (headerLabel.height * 3.4)
|
||||
visible: opacity > 0
|
||||
states: [
|
||||
State {
|
||||
name: "visible"; when: (!searching)
|
||||
PropertyChanges { target: appList; opacity: 1.0 }
|
||||
PropertyChanges { target: appList; x: innerPadding }
|
||||
},
|
||||
State {
|
||||
name: "hidden"; when: (searching)
|
||||
PropertyChanges { target: appList; opacity: 0.0}
|
||||
PropertyChanges { target: appList; x: 5 * 1}
|
||||
}]
|
||||
transitions: [
|
||||
Transition {
|
||||
to: "visible"
|
||||
PropertyAnimation {properties: 'opacity'; duration: 100; easing.type: Easing.OutQuart}
|
||||
PropertyAnimation {properties: 'x'; from: 5 * 1; duration: 100; easing.type: Easing.OutQuart}
|
||||
},
|
||||
Transition {
|
||||
to: "hidden"
|
||||
PropertyAnimation {properties: 'opacity'; duration: 100; easing.type: Easing.OutQuart}
|
||||
PropertyAnimation {properties: 'x'; from: 25 * 1; duration: 100; easing.type: Easing.OutQuart}
|
||||
}
|
||||
]
|
||||
}
|
||||
RunnerList {
|
||||
id: runnerList
|
||||
model: runnerModel
|
||||
state: "hidden"
|
||||
visible: opacity > 0
|
||||
anchors.top: headerLabel.bottom
|
||||
anchors.topMargin: headerLabel.width
|
||||
width: main.width - 30 * 1
|
||||
height: backdrop.height - (headerLabel.height * 3.5)
|
||||
states: [
|
||||
State {
|
||||
name: "visible"; when: (searching)
|
||||
PropertyChanges { target: runnerList; opacity: 1.0 }
|
||||
PropertyChanges { target: runnerList; x: 20 * 1}
|
||||
},
|
||||
State {
|
||||
name: "hidden"; when: (!searching)
|
||||
PropertyChanges { target: runnerList; opacity: 0.0}
|
||||
PropertyChanges { target: runnerList; x: 40 * 1}
|
||||
}]
|
||||
transitions: [
|
||||
Transition {
|
||||
to: "visible"
|
||||
PropertyAnimation {properties: 'opacity'; duration: 100; easing.type: Easing.OutQuart}
|
||||
PropertyAnimation {properties: 'x'; from: 80 * 1; duration: 100; easing.type: Easing.OutQuart}
|
||||
},
|
||||
Transition {
|
||||
to: "hidden"
|
||||
PropertyAnimation {properties: 'opacity'; duration: 100; easing.type: Easing.OutQuart}
|
||||
PropertyAnimation {properties: 'x'; from: 20 * 1; duration: 100; easing.type: Easing.OutQuart}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Keys.onPressed: {
|
||||
if (event.key == Qt.Key_Backspace) {
|
||||
event.accepted = true;
|
||||
if (searching)
|
||||
searchBar.backspace();
|
||||
else
|
||||
searchBar.focus = true
|
||||
} else if (event.key == Qt.Key_Escape) {
|
||||
event.accepted = true;
|
||||
if (searching) {
|
||||
searchBar.clear()
|
||||
} else {
|
||||
root.toggle()
|
||||
}
|
||||
} else if (event.text != "" || event.key == Qt.Key_Down) {
|
||||
if (event.key != Qt.Key_Return){
|
||||
event.accepted = true;
|
||||
searchBar.appendText(event.text);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,171 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (C) 2014 by Weng Xuetian <wengxt@gmail.com> *
|
||||
* Copyright (C) 2013-2017 by Eike Hein <hein@kde.org> *
|
||||
* Copyright (C) 2021 by Prateek SU <pankajsunal123@gmail.com> *
|
||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
||||
****************************************************************************/
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import QtQml 2.15
|
||||
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
import org.kde.plasma.components 3.0 as PlasmaComponents
|
||||
|
||||
import org.kde.plasma.plasmoid 2.0
|
||||
|
||||
|
||||
PlasmaCore.Dialog {
|
||||
id: root
|
||||
|
||||
objectName: "popupWindow"
|
||||
flags: Qt.WindowStaysOnTopHint
|
||||
|
||||
location: Plasmoid.configuration.floating || Plasmoid.configuration.launcherPosition == 2 ? "Floating" : Plasmoid.location
|
||||
hideOnWindowDeactivate: true
|
||||
|
||||
onVisibleChanged: {
|
||||
if (!visible) {
|
||||
reset();
|
||||
} else {
|
||||
main.updateStartpage()
|
||||
var pos = popupPosition(width, height);
|
||||
x = pos.x;
|
||||
y = pos.y;
|
||||
requestActivate();
|
||||
}
|
||||
}
|
||||
|
||||
onHeightChanged: {
|
||||
var pos = popupPosition(width, height);
|
||||
x = pos.x;
|
||||
y = pos.y;
|
||||
}
|
||||
|
||||
onWidthChanged: {
|
||||
var pos = popupPosition(width, height);
|
||||
x = pos.x;
|
||||
y = pos.y;
|
||||
}
|
||||
|
||||
function toggle() {
|
||||
root.visible = false;
|
||||
}
|
||||
|
||||
function reset() {
|
||||
main.reset()
|
||||
}
|
||||
|
||||
function popupPosition(width, height) {
|
||||
var screenAvail = Plasmoid.availableScreenRect;
|
||||
var screen/*Geom*/ = kicker.screenGeometry;
|
||||
//QtBug - QTBUG-64115
|
||||
/*var screen = Qt.rect(screenAvail.x + screenGeom.x,
|
||||
screenAvail.y + screenGeom.y,
|
||||
screenAvail.width,
|
||||
screenAvail.height);*/
|
||||
|
||||
var offset = 0
|
||||
|
||||
if (Plasmoid.configuration.offsetX > 0 && Plasmoid.configuration.floating) {
|
||||
offset = Plasmoid.configuration.offsetX
|
||||
} else {
|
||||
offset = plasmoid.configuration.floating ? parent.height * 0.35 : 0
|
||||
}
|
||||
// Fall back to bottom-left of screen area when the applet is on the desktop or floating.
|
||||
var x = offset;
|
||||
var y = screen.height - height - offset;
|
||||
var horizMidPoint = screen.x + (screen.width / 2);
|
||||
var vertMidPoint = screen.y + (screen.height / 2);
|
||||
var appletTopLeft = parent.mapToGlobal(0, 0);
|
||||
var appletBottomLeft = parent.mapToGlobal(0, parent.height);
|
||||
|
||||
if (Plasmoid.configuration.launcherPosition != 0){
|
||||
x = horizMidPoint - width / 2;
|
||||
} else {
|
||||
x = (appletTopLeft.x < horizMidPoint) ? screen.x : (screen.x + screen.width) - width;
|
||||
if (Plasmoid.configuration.floating) {
|
||||
if (appletTopLeft.x < horizMidPoint) {
|
||||
x += offset
|
||||
} else if (appletTopLeft.x + width > horizMidPoint){
|
||||
x -= offset
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Plasmoid.configuration.launcherPosition != 2){
|
||||
if (Plasmoid.location == PlasmaCore.Types.TopEdge) {
|
||||
if (Plasmoid.configuration.floating) {
|
||||
/*this is floatingAvatar.width*/
|
||||
if (Plasmoid.configuration.offsetY > 0) {
|
||||
offset = (125 * 1) / 2 + Plasmoid.configuration.offsetY
|
||||
} else {
|
||||
offset = (125 * 1) / 2 + parent.height * 0.125
|
||||
}
|
||||
}
|
||||
y = screen.y + parent.height + panelSvg.margins.bottom + offset;
|
||||
} else {
|
||||
if (Plasmoid.configuration.offsetY > 0) {
|
||||
offset = Plasmoid.configuration.offsetY
|
||||
}
|
||||
y = screen.y + screen.height - parent.height - height - panelSvg.margins.top - offset * 2.5;
|
||||
}
|
||||
} else {
|
||||
y = vertMidPoint - height / 2
|
||||
}
|
||||
|
||||
return Qt.point(x, y);
|
||||
}
|
||||
|
||||
FocusScope {
|
||||
id: fs
|
||||
focus: true
|
||||
Layout.minimumWidth: 600 * 1
|
||||
Layout.minimumHeight: 550 * 1
|
||||
Layout.maximumWidth: Layout.minimumWidth
|
||||
Layout.maximumHeight: Layout.minimumHeight
|
||||
|
||||
Item {
|
||||
x: - root.margins.left
|
||||
y: - root.margins.top
|
||||
width: parent.width + root.margins.left + root.margins.right
|
||||
height: parent.height + root.margins.top + root.margins.bottom
|
||||
|
||||
MainView {
|
||||
id: main
|
||||
}
|
||||
}
|
||||
|
||||
Keys.onPressed: {
|
||||
if (event.key == Qt.Key_Escape) {
|
||||
root.visible = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function refreshModel() {
|
||||
main.reload()
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
kicker.reset.connect(reset);
|
||||
// windowSystem.hidden.connect(reset);
|
||||
|
||||
rootModel.refresh();
|
||||
}
|
||||
}
|
134
kde/plasma/plasmoids/AndromedaLauncher/contents/ui/NavGrid.qml
Normal file
|
@ -0,0 +1,134 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
||||
****************************************************************************/
|
||||
import QtQuick 2.12
|
||||
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
import org.kde.plasma.components 3.0 as PlasmaComponents
|
||||
import org.kde.plasma.extras 2.0 as PlasmaExtras
|
||||
import org.kde.kquickcontrolsaddons 2.0
|
||||
|
||||
import org.kde.draganddrop 2.0
|
||||
|
||||
FocusScope {
|
||||
id: navGrid
|
||||
|
||||
signal keyNavUp
|
||||
signal keyNavDown
|
||||
|
||||
property alias triggerModel: listView.model
|
||||
property alias count: listView.count
|
||||
property alias currentIndex: listView.currentIndex
|
||||
property alias currentItem: listView.currentItem
|
||||
property alias contentItem: listView.contentItem
|
||||
property Item flickableItem: listView
|
||||
property int subIndex: 0
|
||||
|
||||
onFocusChanged: {
|
||||
if (!focus) {
|
||||
currentIndex = -1;
|
||||
}
|
||||
}
|
||||
function setFocus() {
|
||||
currentIndex = 0
|
||||
focus = true
|
||||
runnerList.currentMainIndex = currentIndex
|
||||
}
|
||||
function setFocusLast() {
|
||||
if (count > 0) {
|
||||
currentIndex = count - 1
|
||||
focus = true
|
||||
runnerList.currentMainIndex = currentIndex
|
||||
} else {
|
||||
setFocus()
|
||||
}
|
||||
}
|
||||
|
||||
ListView {
|
||||
anchors.fill: parent
|
||||
id: listView
|
||||
currentIndex: -1
|
||||
focus: true
|
||||
// keyNavigationEnabled: true
|
||||
// highlightFollowsCurrentItem: true
|
||||
// highlightMoveDuration: 0
|
||||
snapMode: ListView.SnapToItem
|
||||
interactive: false
|
||||
// clip: false
|
||||
|
||||
|
||||
delegate: GenericItem {
|
||||
x: 20
|
||||
canNavigate: true
|
||||
canDrag: false
|
||||
triggerModel: listView.model
|
||||
subIndex: navGrid.subIndex
|
||||
}
|
||||
|
||||
onCurrentIndexChanged: {
|
||||
if (currentIndex != -1) {
|
||||
focus = true;
|
||||
}
|
||||
}
|
||||
onModelChanged: {
|
||||
currentIndex = -1;
|
||||
}
|
||||
onFocusChanged: {
|
||||
if (!focus) {
|
||||
currentIndex = -1
|
||||
}
|
||||
}
|
||||
Keys.onUpPressed: {
|
||||
|
||||
if (runnerList.currentSubIndex != subIndex) {
|
||||
repeater.itemAt(runnerList.currentSubIndex).nGrid.currentIndex = -1
|
||||
}
|
||||
if (currentIndex > 0) {
|
||||
event.accepted = true;
|
||||
currentIndex = currentIndex - 1
|
||||
runnerList.currentMainIndex = currentIndex
|
||||
runnerList.currentSubIndex = subIndex
|
||||
positionViewAtIndex(currentIndex, ListView.Contain);
|
||||
} else {
|
||||
navGrid.keyNavUp();
|
||||
}
|
||||
}
|
||||
Keys.onDownPressed: {
|
||||
if (runnerList.currentSubIndex != subIndex) {
|
||||
repeater.itemAt(runnerList.currentSubIndex).nGrid.currentIndex = -1
|
||||
}
|
||||
if (currentIndex < count - 1) { // si no ha llegado al ultimo elemento de la lists incrementa currentIndex para pasar al siguiente elemento de la lista
|
||||
event.accepted = true;
|
||||
currentIndex = currentIndex + 1;
|
||||
runnerList.currentMainIndex = currentIndex
|
||||
runnerList.currentSubIndex = subIndex
|
||||
positionViewAtIndex(currentIndex, ListView.Contain);
|
||||
} else {
|
||||
navGrid.keyNavDown();
|
||||
}
|
||||
}
|
||||
Keys.onPressed: {
|
||||
if (event.key == Qt.Key_Enter || event.key == Qt.Key_Return) {
|
||||
event.accepted = true;
|
||||
if (currentItem){
|
||||
currentItem.trigger()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,212 @@
|
|||
/*****************************************************************************
|
||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
||||
****************************************************************************/
|
||||
|
||||
import QtQuick 2.12
|
||||
|
||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||
import org.kde.plasma.extras 2.0 as PlasmaExtras
|
||||
|
||||
import org.kde.plasma.private.kicker 0.1 as Kicker
|
||||
|
||||
import QtQuick.Window 2.2
|
||||
import org.kde.plasma.components 3.0 as PlasmaComponents
|
||||
import QtQuick.Layouts 1.15
|
||||
import QtQuick.Controls 2.15
|
||||
|
||||
import Qt5Compat.GraphicalEffects
|
||||
import org.kde.kirigami as Kirigami
|
||||
|
||||
ScrollView {
|
||||
id: runnerList
|
||||
|
||||
anchors { top: parent.top }
|
||||
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
|
||||
|
||||
|
||||
contentWidth: - 1 //no horizontal scrolling
|
||||
|
||||
|
||||
// focus: true
|
||||
property alias model: repeater.model
|
||||
property alias count: repeater.count
|
||||
|
||||
// ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
|
||||
// ScrollBar.vertical.policy: ScrollBar.AsNeeded
|
||||
|
||||
property int currentMainIndex: 0
|
||||
property int currentSubIndex: 0
|
||||
|
||||
onFocusChanged: {
|
||||
if (!focus) {
|
||||
for (var i = 0; i < repeater.count; i++) {
|
||||
repeater.itemAt(i).nGrid.focus = false
|
||||
}
|
||||
} else {
|
||||
currentMainIndex = 0
|
||||
for (var i = 0; i < repeater.count; ++i) {
|
||||
if (repeater.itemAt(i).nGrid.count > 0) {
|
||||
currentSubIndex = i
|
||||
repeater.itemAt(i).nGrid.setFocus();
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function get_position(){
|
||||
return flickableItem.contentY / (flickableItem.contentHeight - height)
|
||||
}
|
||||
function get_size(){
|
||||
return (flickableItem.contentHeight <= height ? -1 : 0.99999)
|
||||
}
|
||||
function setFocus() {
|
||||
currentMainIndex = 0
|
||||
for (var i = 0; i < repeater.count; ++i) {
|
||||
if (repeater.itemAt(i).nGrid.count > 0) {
|
||||
currentSubIndex = i
|
||||
repeater.itemAt(i).nGrid.setFocus();
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
function triggerFirst(){
|
||||
repeater.itemAt(currentSubIndex).nGrid.currentItem.trigger()
|
||||
}
|
||||
|
||||
|
||||
Column {
|
||||
x: -10 * 1
|
||||
Repeater {
|
||||
id: repeater
|
||||
delegate:
|
||||
Item {
|
||||
id: section
|
||||
width: runnerList.width
|
||||
height: headerLabel.height + navGrid.height + (index == repeater.count - 1 ? 0 : 10)
|
||||
visible: navGrid.count > 0
|
||||
property Item nGrid: navGrid
|
||||
Item {
|
||||
id: headerLabel
|
||||
anchors.top: parent.top
|
||||
height: image.height
|
||||
Image {
|
||||
id: image
|
||||
x: 20 * 1
|
||||
source: repeater.model.modelForRow(index).description === 'Command Line' ? "icons/feather/code.svg" : repeater.model.modelForRow(index).description == 'File Search' ? "icons/feather/search.svg" : "icons/feather/file-text.svg"
|
||||
width: 15 * 1
|
||||
height: width
|
||||
//visible: repeater.model.modelForRow(index).count > 0
|
||||
PlasmaComponents.Label {
|
||||
x: parent.width + 10 * 1
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
text: repeater.model.modelForRow(index).name
|
||||
color: main.textColor
|
||||
font.family: main.textFont
|
||||
font.pointSize: main.textSize + 2
|
||||
}
|
||||
ColorOverlay {
|
||||
visible: true
|
||||
anchors.fill: image
|
||||
source: image
|
||||
color: main.textColor
|
||||
}
|
||||
}
|
||||
}
|
||||
NavGrid {
|
||||
id: navGrid
|
||||
width: runnerList.width
|
||||
height: Math.ceil(count * (42 * 1 )) + 10 * 1
|
||||
anchors.top: headerLabel.bottom
|
||||
subIndex: index
|
||||
triggerModel: repeater.model.modelForRow(index)
|
||||
x: 20
|
||||
|
||||
onFocusChanged: {
|
||||
if (focus) {
|
||||
runnerList.focus = true;
|
||||
}
|
||||
}
|
||||
onCountChanged: {
|
||||
if (index == 0 && count > 0) {
|
||||
currentIndex = 0;
|
||||
focus = true;
|
||||
}
|
||||
}
|
||||
onCurrentItemChanged: {
|
||||
if (!currentItem) {
|
||||
return;
|
||||
}
|
||||
if (currentItem.isMouseHighlight) {
|
||||
return
|
||||
}
|
||||
if (index == 0 && currentIndex === 0) {
|
||||
nGrid.flickableItem.contentY = 0;
|
||||
return;
|
||||
}
|
||||
var y = currentItem.y;
|
||||
y = contentItem.mapToItem(runnerList.contentItem, 0, y).y;
|
||||
if (y < runnerList.contentItem.contentY) {
|
||||
flickableItem.contentY = y;
|
||||
} else {
|
||||
y += currentItem.height + 20 * 1 + 15 * 1;
|
||||
y -= runnerList.contentItem.contentY;
|
||||
y -= runnerList.height;
|
||||
|
||||
if (y > 0) {
|
||||
runnerList.contentItem.contentY += y;
|
||||
}
|
||||
}
|
||||
}
|
||||
onKeyNavUp: {
|
||||
if (index > 0) {
|
||||
for (var i = index - 1; i > -1; --i) {
|
||||
if (repeater.itemAt(i).nGrid.count > 0) {
|
||||
repeater.itemAt(i).nGrid.setFocusLast()
|
||||
currentSubIndex = index - 1
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onKeyNavDown: {
|
||||
if (index < repeater.count - 1) {
|
||||
for (var i = index + 1; i < repeater.count; ++i) {
|
||||
if (repeater.itemAt(i).nGrid.count > 0) {
|
||||
repeater.itemAt(i).nGrid.setFocus()
|
||||
currentSubIndex = index + 1
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Kicker.WheelInterceptor {
|
||||
// anchors.fill: navGrid
|
||||
// // z: -1
|
||||
// destination: findWheelArea(runnerList.flickableItem)
|
||||
// }
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2013-2017 Cole Bemis
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
|
@ -0,0 +1,48 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="feather feather-code"
|
||||
version="1.1"
|
||||
id="svg6"
|
||||
sodipodi:docname="code.svg"
|
||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs10" />
|
||||
<sodipodi:namedview
|
||||
id="namedview8"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="26.25"
|
||||
inkscape:cx="12.019048"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="992"
|
||||
inkscape:window-x="1600"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg6" />
|
||||
<polyline
|
||||
points="16 18 22 12 16 6"
|
||||
id="polyline2"
|
||||
style="stroke:#ffffff" />
|
||||
<polyline
|
||||
points="8 6 2 12 8 18"
|
||||
id="polyline4"
|
||||
style="stroke:#ffffff" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
|
@ -0,0 +1,66 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="feather feather-file-text"
|
||||
version="1.1"
|
||||
id="svg12"
|
||||
sodipodi:docname="file-text.svg"
|
||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs16" />
|
||||
<sodipodi:namedview
|
||||
id="namedview14"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="26.25"
|
||||
inkscape:cx="12.019048"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1032"
|
||||
inkscape:window-x="1600"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg12" />
|
||||
<path
|
||||
d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"
|
||||
id="path2"
|
||||
style="stroke:#ffffff" />
|
||||
<polyline
|
||||
points="14 2 14 8 20 8"
|
||||
id="polyline4"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="16"
|
||||
y1="13"
|
||||
x2="8"
|
||||
y2="13"
|
||||
id="line6"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="16"
|
||||
y1="17"
|
||||
x2="8"
|
||||
y2="17"
|
||||
id="line8"
|
||||
style="stroke:#ffffff" />
|
||||
<polyline
|
||||
points="10 9 9 9 8 9"
|
||||
id="polyline10"
|
||||
style="stroke:#ffffff" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
|
@ -0,0 +1,57 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="feather feather-globe"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="globe.svg"
|
||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs12" />
|
||||
<sodipodi:namedview
|
||||
id="namedview10"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="26.25"
|
||||
inkscape:cx="12.019048"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="992"
|
||||
inkscape:window-x="1600"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg8" />
|
||||
<circle
|
||||
cx="12"
|
||||
cy="12"
|
||||
r="10"
|
||||
id="circle2"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="2"
|
||||
y1="12"
|
||||
x2="22"
|
||||
y2="12"
|
||||
id="line4"
|
||||
style="stroke:#ffffff" />
|
||||
<path
|
||||
d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"
|
||||
id="path6"
|
||||
style="stroke:#ffffff" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
|
@ -0,0 +1,59 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="feather feather-image"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="image.svg"
|
||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs12" />
|
||||
<sodipodi:namedview
|
||||
id="namedview10"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="26.25"
|
||||
inkscape:cx="12.019048"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="992"
|
||||
inkscape:window-x="1600"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg8" />
|
||||
<rect
|
||||
x="3"
|
||||
y="3"
|
||||
width="18"
|
||||
height="18"
|
||||
rx="2"
|
||||
ry="2"
|
||||
id="rect2"
|
||||
style="stroke:#ffffff" />
|
||||
<circle
|
||||
cx="8.5"
|
||||
cy="8.5"
|
||||
r="1.5"
|
||||
id="circle4"
|
||||
style="stroke:#ffffff" />
|
||||
<polyline
|
||||
points="21 15 16 10 5 21"
|
||||
id="polyline6"
|
||||
style="stroke:#ffffff" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
|
@ -0,0 +1,51 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="feather feather-power"
|
||||
version="1.1"
|
||||
id="svg6"
|
||||
sodipodi:docname="power.svg"
|
||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs10" />
|
||||
<sodipodi:namedview
|
||||
id="namedview8"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="26.25"
|
||||
inkscape:cx="12.019048"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="876"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="180"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg6" />
|
||||
<path
|
||||
d="M18.36 6.64a9 9 0 1 1-12.73 0"
|
||||
id="path2"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="12"
|
||||
y1="2"
|
||||
x2="12"
|
||||
y2="12"
|
||||
id="line4"
|
||||
style="stroke:#ffffff" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
|
@ -0,0 +1,53 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="feather feather-search"
|
||||
version="1.1"
|
||||
id="svg6"
|
||||
sodipodi:docname="search.svg"
|
||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs10" />
|
||||
<sodipodi:namedview
|
||||
id="namedview8"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="26.25"
|
||||
inkscape:cx="12.019048"
|
||||
inkscape:cy="11.961905"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1032"
|
||||
inkscape:window-x="1600"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg6" />
|
||||
<circle
|
||||
cx="11"
|
||||
cy="11"
|
||||
id="circle2"
|
||||
r="8"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="21"
|
||||
y1="21"
|
||||
x2="16.65"
|
||||
y2="16.65"
|
||||
id="line4"
|
||||
style="stroke:#ffffff" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
|
@ -0,0 +1,50 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="feather feather-settings"
|
||||
version="1.1"
|
||||
id="svg6"
|
||||
sodipodi:docname="settings.svg"
|
||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs10" />
|
||||
<sodipodi:namedview
|
||||
id="namedview8"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="26.25"
|
||||
inkscape:cx="12.019048"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="876"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="180"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg6" />
|
||||
<circle
|
||||
cx="12"
|
||||
cy="12"
|
||||
r="3"
|
||||
id="circle2"
|
||||
style="stroke:#ffffff" />
|
||||
<path
|
||||
d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"
|
||||
id="path4"
|
||||
style="stroke:#ffffff" />
|
||||
</svg>
|
After Width: | Height: | Size: 2 KiB |
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="feather feather-star"
|
||||
version="1.1"
|
||||
id="svg4"
|
||||
sodipodi:docname="star.svg"
|
||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
id="namedview6"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="26.25"
|
||||
inkscape:cx="12.019048"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1032"
|
||||
inkscape:window-x="1600"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4" />
|
||||
<polygon
|
||||
points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"
|
||||
id="polygon2"
|
||||
style="stroke:#ffffff" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="feather feather-tool"
|
||||
version="1.1"
|
||||
id="svg4"
|
||||
sodipodi:docname="tool.svg"
|
||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
id="namedview6"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="26.25"
|
||||
inkscape:cx="12.019048"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="992"
|
||||
inkscape:window-x="1600"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4" />
|
||||
<path
|
||||
d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"
|
||||
id="path2"
|
||||
style="stroke:#ffffff" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
|
@ -0,0 +1,62 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="feather feather-trash-2"
|
||||
version="1.1"
|
||||
id="svg10"
|
||||
sodipodi:docname="trash-2.svg"
|
||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs14" />
|
||||
<sodipodi:namedview
|
||||
id="namedview12"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="26.25"
|
||||
inkscape:cx="12.019048"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="992"
|
||||
inkscape:window-x="1600"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg10" />
|
||||
<polyline
|
||||
points="3 6 5 6 21 6"
|
||||
id="polyline2"
|
||||
style="stroke:#ffffff" />
|
||||
<path
|
||||
d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"
|
||||
id="path4"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="10"
|
||||
y1="11"
|
||||
x2="10"
|
||||
y2="17"
|
||||
id="line6"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="14"
|
||||
y1="11"
|
||||
x2="14"
|
||||
y2="17"
|
||||
id="line8"
|
||||
style="stroke:#ffffff" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
|
@ -0,0 +1,15 @@
|
|||
ISC License
|
||||
|
||||
Copyright (c) 2020, Lucide Contributors
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
@ -0,0 +1,111 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
version="1.1"
|
||||
id="svg22"
|
||||
sodipodi:docname="cpu.svg"
|
||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs26" />
|
||||
<sodipodi:namedview
|
||||
id="namedview24"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="26.25"
|
||||
inkscape:cx="12.019048"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="992"
|
||||
inkscape:window-x="1600"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg22" />
|
||||
<rect
|
||||
x="4"
|
||||
y="4"
|
||||
width="16"
|
||||
height="16"
|
||||
rx="2"
|
||||
ry="2"
|
||||
id="rect2"
|
||||
style="stroke:#ffffff" />
|
||||
<rect
|
||||
x="9"
|
||||
y="9"
|
||||
width="6"
|
||||
height="6"
|
||||
id="rect4"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="9"
|
||||
y1="1"
|
||||
x2="9"
|
||||
y2="4"
|
||||
id="line6"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="15"
|
||||
y1="1"
|
||||
x2="15"
|
||||
y2="4"
|
||||
id="line8"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="9"
|
||||
y1="20"
|
||||
x2="9"
|
||||
y2="23"
|
||||
id="line10"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="15"
|
||||
y1="20"
|
||||
x2="15"
|
||||
y2="23"
|
||||
id="line12"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="20"
|
||||
y1="9"
|
||||
x2="23"
|
||||
y2="9"
|
||||
id="line14"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="20"
|
||||
y1="14"
|
||||
x2="23"
|
||||
y2="14"
|
||||
id="line16"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="1"
|
||||
y1="9"
|
||||
x2="4"
|
||||
y2="9"
|
||||
id="line18"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="1"
|
||||
y1="14"
|
||||
x2="4"
|
||||
y2="14"
|
||||
id="line20"
|
||||
style="stroke:#ffffff" />
|
||||
</svg>
|
After Width: | Height: | Size: 2.1 KiB |
|
@ -0,0 +1,97 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
version="1.1"
|
||||
id="svg18"
|
||||
sodipodi:docname="film.svg"
|
||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs22" />
|
||||
<sodipodi:namedview
|
||||
id="namedview20"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="26.25"
|
||||
inkscape:cx="12.019048"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="992"
|
||||
inkscape:window-x="1600"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg18" />
|
||||
<rect
|
||||
x="2"
|
||||
y="2"
|
||||
width="20"
|
||||
height="20"
|
||||
rx="2.18"
|
||||
ry="2.18"
|
||||
id="rect2"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="7"
|
||||
y1="2"
|
||||
x2="7"
|
||||
y2="22"
|
||||
id="line4"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="17"
|
||||
y1="2"
|
||||
x2="17"
|
||||
y2="22"
|
||||
id="line6"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="2"
|
||||
y1="12"
|
||||
x2="22"
|
||||
y2="12"
|
||||
id="line8"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="2"
|
||||
y1="7"
|
||||
x2="7"
|
||||
y2="7"
|
||||
id="line10"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="2"
|
||||
y1="17"
|
||||
x2="7"
|
||||
y2="17"
|
||||
id="line12"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="17"
|
||||
y1="17"
|
||||
x2="22"
|
||||
y2="17"
|
||||
id="line14"
|
||||
style="stroke:#ffffff" />
|
||||
<line
|
||||
x1="17"
|
||||
y1="7"
|
||||
x2="22"
|
||||
y2="7"
|
||||
id="line16"
|
||||
style="stroke:#ffffff" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
|
@ -0,0 +1,51 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="flask-conical.svg"
|
||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs12" />
|
||||
<sodipodi:namedview
|
||||
id="namedview10"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="26.25"
|
||||
inkscape:cx="5.0857143"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="992"
|
||||
inkscape:window-x="1600"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg8" />
|
||||
<path
|
||||
style="color:#000000;fill:#ffffff;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="M 10,1 A 1,1 0 0 0 9,2 V 9.7636719 L 3.8261719,20.101562 C 3.174232,21.398629 4.1748637,23.010141 5.6269531,23 H 18.373047 c 1.452089,0.01014 2.452721,-1.601371 1.800781,-2.898438 v -0.002 L 15,9.7636719 V 2 A 1,1 0 0 0 14,1 1,1 0 0 0 13,2 v 8 a 1.0001,1.0001 0 0 0 0.105469,0.447266 l 5.28125,10.550781 a 1.0001,1.0001 0 0 0 0,0.002 1.0001,1.0001 0 0 0 -0.0059,0 H 5.6191406 a 1.0001,1.0001 0 0 0 -0.00586,0 1.0001,1.0001 0 0 0 0,-0.002 L 10.894531,10.447266 A 1.0001,1.0001 0 0 0 11,10 V 2 A 1,1 0 0 0 10,1 Z"
|
||||
id="path2" />
|
||||
<path
|
||||
style="color:#000000;fill:#ffffff;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="m 8.5,1 a 1,1 0 0 0 -1,1 1,1 0 0 0 1,1 h 7 a 1,1 0 0 0 1,-1 1,1 0 0 0 -1,-1 z"
|
||||
id="path4" />
|
||||
<path
|
||||
style="color:#000000;fill:#ffffff;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="m 7,15 a 1,1 0 0 0 -1,1 1,1 0 0 0 1,1 h 10 a 1,1 0 0 0 1,-1 1,1 0 0 0 -1,-1 z"
|
||||
id="path6" />
|
||||
</svg>
|
After Width: | Height: | Size: 2.1 KiB |
|
@ -0,0 +1,49 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="currentColor"
|
||||
stroke="none"
|
||||
stroke-width="0"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="gamepad-2.svg"
|
||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs12" />
|
||||
<sodipodi:namedview
|
||||
id="namedview10"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="26.25"
|
||||
inkscape:cx="15.638095"
|
||||
inkscape:cy="12.495238"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="992"
|
||||
inkscape:window-x="1600"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg8" />
|
||||
<path
|
||||
d="M6 10a1 1 0 0 0-1 1 1 1 0 0 0 1 1h4a1 1 0 0 0 1-1 1 1 0 0 0-1-1z"
|
||||
id="path2"
|
||||
style="fill:#ffffff" />
|
||||
<path
|
||||
d="M8 8a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1 1 1 0 0 0 1-1V9a1 1 0 0 0-1-1zM15 11a1 1 0 0 0-1 1 1 1 0 0 0 1 1h.01a1 1 0 0 0 1-1 1 1 0 0 0-1-1zM18 9a1 1 0 0 0-1 1 1 1 0 0 0 1 1h.01a1 1 0 0 0 1-1 1 1 0 0 0-1-1z"
|
||||
id="path4"
|
||||
style="fill:#ffffff" />
|
||||
<path
|
||||
d="M6.68 4a5.013 5.013 0 0 0-4.973 4.486v.002l-.014.117a1 1 0 0 0-.002.018c-.04.338-.21 1.772-.373 3.318C1.156 13.488 1 15.098 1 16c0 2.197 1.803 4 4 4 1.333 0 2.207-.793 2.707-1.293l1.414-1.414A.999.999 0 0 1 9.828 17h4.344c.265 0 .52.105.707.293l1.414 1.414c.5.5 1.374 1.293 2.707 1.293 2.197 0 4-1.803 4-4 0-.903-.156-2.514-.318-4.06a239.334 239.334 0 0 0-.373-3.317 1 1 0 0 0-.004-.02l-.012-.115v-.002A5.012 5.012 0 0 0 17.32 4zm0 2h10.64a2.987 2.987 0 0 1 2.983 2.693 1 1 0 0 0 .002.014c.003.027.007.085.02.174.041.347.21 1.749.368 3.267.16 1.528.307 3.21.307 3.852 0 1.116-.884 2-2 2-.667 0-.793-.207-1.293-.707l-1.414-1.414A3.001 3.001 0 0 0 14.172 15H9.828c-.795 0-1.559.317-2.121.879l-1.414 1.414c-.5.5-.626.707-1.293.707-1.116 0-2-.884-2-2 0-.642.146-2.323.307-3.852.159-1.52.327-2.923.369-3.27l.002-.017c.009-.071.014-.128.017-.156a1 1 0 0 0 .002-.012A2.987 2.987 0 0 1 6.68 6z"
|
||||
id="path6"
|
||||
style="fill:#ffffff" />
|
||||
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
version="1.1"
|
||||
id="svg4"
|
||||
sodipodi:docname="paperclip.svg"
|
||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
id="namedview6"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="26.25"
|
||||
inkscape:cx="12.019048"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="992"
|
||||
inkscape:window-x="1600"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4" />
|
||||
<path
|
||||
style="color:#000000;fill:#ffffff;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="M 16.015625,0.32421875 C 14.737949,0.24906105 13.362296,0.73340705 12.242188,1.8535156 L 3.0527344,11.042969 c -1.5917746,1.591774 -2.25307446,3.496569 -2.14843752,5.27539 0.10463692,1.778822 0.93005392,3.410523 2.14843752,4.628907 1.2183835,1.218383 2.8500848,2.0438 4.6289062,2.148437 1.7788215,0.104637 3.6836164,-0.556663 5.2753904,-2.148437 l 9.189453,-9.189453 a 1,1 0 0 0 0,-1.414063 1,1 0 0 0 -1.414062,0 l -9.189453,9.189453 C 10.304747,20.771425 9.0268781,21.171848 7.7988281,21.099609 6.5707782,21.027371 5.3709112,20.437317 4.4667969,19.533203 3.5626826,18.629089 2.9726291,17.429222 2.9003906,16.201172 2.8281521,14.973122 3.2285755,13.695253 4.4667969,12.457031 L 13.65625,3.2675781 c 0.766555,-0.7665554 1.515283,-0.9900249 2.242188,-0.9472656 0.726904,0.042759 1.453541,0.3969009 2.003906,0.9472656 0.550364,0.5503647 0.904506,1.2770016 0.947265,2.0039063 0.04276,0.7269047 -0.18071,1.4756321 -0.947265,2.2421875 L 8.703125,16.703125 C 8.4082356,16.998014 8.1906032,17.04453 7.9648437,17.03125 7.7390843,17.01797 7.4837244,16.89974 7.2871094,16.703125 7.0904943,16.50651 6.9722644,16.25115 6.9589844,16.025391 6.9457044,15.799631 6.99222,15.581999 7.2871094,15.287109 L 15.777344,6.8066406 a 1,1 0 0 0 0,-1.4140625 1,1 0 0 0 -1.414063,0 L 5.8730469,13.873047 c -0.6484426,0.648442 -0.9558347,1.493 -0.9101563,2.269531 0.045679,0.776531 0.399272,1.463725 0.9101563,1.974609 0.5108842,0.510885 1.1980784,0.864478 1.9746093,0.910157 0.776531,0.04568 1.6210887,-0.261714 2.2695318,-0.910157 L 19.316406,8.9277344 C 20.436515,7.8076258 20.920861,6.4319731 20.845703,5.1542969 20.770545,3.8766207 20.18104,2.7181495 19.316406,1.8535156 18.451772,0.98888172 17.293301,0.39937645 16.015625,0.32421875 Z"
|
||||
id="path2" />
|
||||
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
269
kde/plasma/plasmoids/AndromedaLauncher/contents/ui/main.qml
Normal file
|
@ -0,0 +1,269 @@
|
|||
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2014-2015 by Eike Hein <hein@kde.org> *
|
||||
* Copyright (C) 2021 by Prateek SU <pankajsunal123@gmail.com> *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
||||
***************************************************************************/
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import org.kde.plasma.plasmoid 2.0
|
||||
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
import org.kde.plasma.components 3.0 as PlasmaComponents
|
||||
|
||||
import org.kde.ksvg as KSvg
|
||||
|
||||
import org.kde.plasma.private.kicker 0.1 as Kicker
|
||||
|
||||
import org.kde.kirigami 2.20 as Kirigami
|
||||
|
||||
|
||||
PlasmoidItem {
|
||||
id: kicker
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
signal reset
|
||||
|
||||
property bool isDash: false
|
||||
|
||||
preferredRepresentation: fullRepresentation
|
||||
|
||||
compactRepresentation: null
|
||||
fullRepresentation: compactRepresentation
|
||||
|
||||
property Item dragSource: null
|
||||
|
||||
property QtObject globalFavorites: rootModel.favoritesModel
|
||||
property QtObject systemFavorites: rootModel.systemFavoritesModel
|
||||
|
||||
Plasmoid.icon: Plasmoid.configuration.useCustomButtonImage ? Plasmoid.configuration.customButtonImage : Plasmoid.configuration.icon
|
||||
|
||||
|
||||
// onSystemFavoritesChanged: {
|
||||
// systemFavorites.favorites = Plasmoid.configuration.favoriteSystemActions;
|
||||
// }
|
||||
|
||||
function action_menuedit() {
|
||||
processRunner.runMenuEditor();
|
||||
}
|
||||
|
||||
Component {
|
||||
id: compactRepresentation
|
||||
CompactRepresentation { }
|
||||
}
|
||||
|
||||
Component {
|
||||
id: menuRepresentation
|
||||
MenuRepresentation { }
|
||||
}
|
||||
|
||||
Kicker.RootModel {
|
||||
id: rootModel
|
||||
|
||||
autoPopulate: false
|
||||
|
||||
appNameFormat: 0// Plasmoid.configuration.appNameFormat
|
||||
flat: true
|
||||
sorted: true
|
||||
showSeparators: false
|
||||
appletInterface: kicker
|
||||
|
||||
showAllApps: true
|
||||
showAllAppsCategorized: true
|
||||
showTopLevelItems: !kicker.isDash
|
||||
showRecentApps: true // Plasmoid.configuration.showRecentApps
|
||||
showRecentDocs: false //Plasmoid.configuration.showRecentDocs
|
||||
// showRecentContacts: Plasmoid.configuration.showRecentContacts
|
||||
recentOrdering: 0 // Plasmoid.configuration.recentOrdering
|
||||
|
||||
onShowRecentAppsChanged: {
|
||||
Plasmoid.configuration.showRecentApps = showRecentApps;
|
||||
}
|
||||
|
||||
onShowRecentDocsChanged: {
|
||||
Plasmoid.configuration.showRecentDocs = showRecentDocs;
|
||||
}
|
||||
|
||||
// onShowRecentContactsChanged: {
|
||||
// plasmoid.configuration.showRecentContacts = showRecentContacts;
|
||||
// }
|
||||
|
||||
onRecentOrderingChanged: {
|
||||
Plasmoid.configuration.recentOrdering = recentOrdering;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Component.onCompleted: {
|
||||
favoritesModel.initForClient("org.kde.plasma.kicker.favorites.instance-" + Plasmoid.id)
|
||||
|
||||
// kicker.logListModel("rootmodel", rootModel);
|
||||
if (!Plasmoid.configuration.favoritesPortedToKAstats) {
|
||||
if (favoritesModel.count < 1) {
|
||||
favoritesModel.portOldFavorites(Plasmoid.configuration.favoriteApps);
|
||||
}
|
||||
Plasmoid.configuration.favoritesPortedToKAstats = true;
|
||||
}
|
||||
}
|
||||
|
||||
// onFavoritesModelChanged: {
|
||||
// if ("initForClient" in favoritesModel) {
|
||||
// favoritesModel.initForClient("org.kde.plasma.kicker.favorites.instance-" + plasmoid.id)
|
||||
|
||||
// if (!plasmoid.configuration.favoritesPortedToKAstats) {
|
||||
// favoritesModel.portOldFavorites(plasmoid.configuration.favoriteApps);
|
||||
// plasmoid.configuration.favoritesPortedToKAstats = true;
|
||||
// }
|
||||
// } else {
|
||||
// favoritesModel.favorites = plasmoid.configuration.favoriteApps;
|
||||
// }
|
||||
|
||||
// favoritesModel.maxFavorites = pageSize;
|
||||
// }
|
||||
|
||||
// onSystemFavoritesModelChanged: {
|
||||
// systemFavoritesModel.enabled = false;
|
||||
// systemFavoritesModel.favorites = plasmoid.configuration.favoriteSystemActions;
|
||||
// systemFavoritesModel.maxFavorites = 6;
|
||||
// }
|
||||
|
||||
// Component.onCompleted: {
|
||||
// if ("initForClient" in favoritesModel) {
|
||||
// favoritesModel.initForClient("org.kde.plasma.kicker.favorites.instance-" + plasmoid.id)
|
||||
|
||||
// if (!plasmoid.configuration.favoritesPortedToKAstats) {
|
||||
// favoritesModel.portOldFavorites(plasmoid.configuration.favoriteApps);
|
||||
// plasmoid.configuration.favoritesPortedToKAstats = true;
|
||||
// }
|
||||
// } else {
|
||||
// favoritesModel.favorites = plasmoid.configuration.favoriteApps;
|
||||
// }
|
||||
|
||||
// favoritesModel.maxFavorites = pageSize;
|
||||
// rootModel.refresh();
|
||||
// }
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: globalFavorites
|
||||
|
||||
function onFavoritesChanged() {
|
||||
Plasmoid.configuration.favoriteApps = target.favorites;
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: systemFavorites
|
||||
|
||||
function onFavoritesChanged() {
|
||||
Plasmoid.configuration.favoriteSystemActions = target.favorites;
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: Plasmoid.configuration
|
||||
|
||||
function onFavoriteAppsChanged() {
|
||||
globalFavorites.favorites = Plasmoid.configuration.favoriteApps;
|
||||
}
|
||||
|
||||
function onFavoriteSystemActionsChanged() {
|
||||
systemFavorites.favorites = Plasmoid.configuration.favoriteSystemActions;
|
||||
}
|
||||
}
|
||||
|
||||
Kicker.RunnerModel {
|
||||
id: runnerModel
|
||||
|
||||
favoritesModel: globalFavorites
|
||||
appletInterface: kicker
|
||||
|
||||
|
||||
runners: {
|
||||
const results = ["krunner_services", "krunner_systemsettings"];
|
||||
|
||||
if (kicker.isDash) {
|
||||
results.push("krunner_sessions", "krunner_powerdevil", "calculator", "unitconverter");
|
||||
}
|
||||
|
||||
if (Plasmoid.configuration.useExtraRunners) {
|
||||
results.push(...Plasmoid.configuration.extraRunners);
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
}
|
||||
|
||||
Kicker.DragHelper {
|
||||
id: dragHelper
|
||||
|
||||
dragIconSize: Kirigami.Units.iconSizes.medium
|
||||
}
|
||||
|
||||
Kicker.ProcessRunner {
|
||||
id: processRunner;
|
||||
}
|
||||
|
||||
KSvg.FrameSvgItem {
|
||||
id: highlightItemSvg
|
||||
|
||||
visible: false
|
||||
|
||||
imagePath: "widgets/viewitem"
|
||||
prefix: "hover"
|
||||
}
|
||||
|
||||
KSvg.FrameSvgItem {
|
||||
id: panelSvg
|
||||
visible: false
|
||||
imagePath: "widgets/panel-background"
|
||||
}
|
||||
|
||||
PlasmaComponents.Label {
|
||||
id: toolTipDelegate
|
||||
|
||||
width: contentWidth
|
||||
height: contentHeight
|
||||
|
||||
property Item toolTip
|
||||
|
||||
text: (toolTip != null) ? toolTip.text : ""
|
||||
}
|
||||
|
||||
function resetDragSource() {
|
||||
dragSource = null;
|
||||
}
|
||||
|
||||
Plasmoid.contextualActions: [
|
||||
PlasmaCore.Action {
|
||||
text: i18n("Edit Applications…")
|
||||
icon.name: "kmenuedit"
|
||||
visible: Plasmoid.immutability !== PlasmaCore.Types.SystemImmutable
|
||||
onTriggered: processRunner.runMenuEditor()
|
||||
}
|
||||
]
|
||||
|
||||
Component.onCompleted: {
|
||||
//plasmoid.setAction("menuedit", i18n("Edit Applications..."));
|
||||
rootModel.refreshed.connect(reset);
|
||||
|
||||
dragHelper.dropped.connect(resetDragSource);
|
||||
}
|
||||
}
|
22
kde/plasma/plasmoids/AndromedaLauncher/metadata.json
Normal file
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"KPackageStructure": "Plasma/Applet",
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "eliverlara@gmail.com",
|
||||
"Name": "EliverLara"
|
||||
}
|
||||
],
|
||||
"Category": "Application Launchers",
|
||||
"Description": "A modern Launcher for plasma!",
|
||||
"EnabledByDefault": true,
|
||||
"Icon": "start-here-kde",
|
||||
"Id": "AndromedaLauncher",
|
||||
"Name": "Andromeda Launcher",
|
||||
|
||||
"Version": "0.6",
|
||||
"Website": "https://github.com/EliverLara/AndromedaLauncher"
|
||||
},
|
||||
"X-Plasma-Provides": [ "org.kde.plasma.launchermenu" ],
|
||||
"X-Plasma-API-Minimum-Version": "6.0"
|
||||
}
|
53
kde/plasma/plasmoids/AndromedaLauncher/translate/build.sh
Normal file
|
@ -0,0 +1,53 @@
|
|||
#!/bin/sh
|
||||
# Version: 6
|
||||
|
||||
# This script will convert the *.po files to *.mo files, rebuilding the package/contents/locale folder.
|
||||
# Feature discussion: https://phabricator.kde.org/D5209
|
||||
# Eg: contents/locale/fr_CA/LC_MESSAGES/plasma_applet_org.kde.plasma.eventcalendar.mo
|
||||
|
||||
DIR=`cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd`
|
||||
plasmoidName=`kreadconfig5 --file="$DIR/../metadata.desktop" --group="Desktop Entry" --key="X-KDE-PluginInfo-Name"`
|
||||
website=`kreadconfig5 --file="$DIR/../metadata.desktop" --group="Desktop Entry" --key="X-KDE-PluginInfo-Website"`
|
||||
bugAddress="$website"
|
||||
packageRoot=".." # Root of translatable sources
|
||||
projectName="plasma_applet_${plasmoidName}" # project name
|
||||
|
||||
#---
|
||||
if [ -z "$plasmoidName" ]; then
|
||||
echo "[build] Error: Couldn't read plasmoidName."
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ -z "$(which msgfmt)" ]; then
|
||||
echo "[build] Error: msgfmt command not found. Need to install gettext"
|
||||
echo "[build] Running 'sudo apt install gettext'"
|
||||
sudo apt install gettext
|
||||
echo "[build] gettext installation should be finished. Going back to installing translations."
|
||||
fi
|
||||
|
||||
#---
|
||||
echo "[build] Compiling messages"
|
||||
|
||||
catalogs=`find . -name '*.po' | sort`
|
||||
for cat in $catalogs; do
|
||||
echo "$cat"
|
||||
catLocale=`basename ${cat%.*}`
|
||||
msgfmt -o "${catLocale}.mo" "$cat"
|
||||
|
||||
installPath="$DIR/../contents/locale/${catLocale}/LC_MESSAGES/${projectName}.mo"
|
||||
|
||||
echo "[build] Install to ${installPath}"
|
||||
mkdir -p "$(dirname "$installPath")"
|
||||
mv "${catLocale}.mo" "${installPath}"
|
||||
done
|
||||
|
||||
echo "[build] Done building messages"
|
||||
|
||||
if [ "$1" = "--restartplasma" ]; then
|
||||
echo "[build] Restarting plasmashell"
|
||||
killall plasmashell
|
||||
kstart5 plasmashell
|
||||
echo "[build] Done restarting plasmashell"
|
||||
else
|
||||
echo "[build] (re)install the plasmoid and restart plasmashell to test."
|
||||
fi
|
135
kde/plasma/plasmoids/AndromedaLauncher/translate/de.po
Normal file
|
@ -0,0 +1,135 @@
|
|||
# Translation of MMcK Launcher in German
|
||||
# Copyright (C) 2022
|
||||
# This file is distributed under the same license as the MMcK Launcher package.
|
||||
# Friedrich Schriewer <friedrich.schriewer@gmx.net>, 2022.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mmcklauncher\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/snoutbug/mmcklauncher\n"
|
||||
"POT-Creation-Date: 2022-03-07 20:42-0000\n"
|
||||
"PO-Revision-Date: 2022-03-07 20:42+0000\n"
|
||||
"Last-Translator: Friedrich Schriewer <friedrich.schriewer@gmx.net>\n"
|
||||
"Language-Team: n/a\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Einstellungen"
|
||||
|
||||
msgid "Power Off"
|
||||
msgstr "Herunterfahren"
|
||||
|
||||
msgid "Favorite Apps"
|
||||
msgstr "Favoriten"
|
||||
|
||||
msgid "General"
|
||||
msgstr "Allgemein"
|
||||
|
||||
msgid "Default Page:"
|
||||
msgstr "Startseite:"
|
||||
|
||||
msgid "All"
|
||||
msgstr "Alle"
|
||||
|
||||
msgid "Developement"
|
||||
msgstr "Entwicklung"
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Spiele"
|
||||
|
||||
msgid "Graphics"
|
||||
msgstr "Grafik"
|
||||
|
||||
msgid "Internet"
|
||||
msgstr "Internet"
|
||||
|
||||
msgid "Multimedia"
|
||||
msgstr "Multimedia"
|
||||
|
||||
msgid "Office"
|
||||
msgstr "Büro"
|
||||
|
||||
msgid "Science & Math"
|
||||
msgstr "Wissenschaft & Mathematik"
|
||||
|
||||
msgid "System"
|
||||
msgstr "System"
|
||||
|
||||
msgid "Utilities"
|
||||
msgstr "Werkzeuge"
|
||||
|
||||
msgid "Lost & Found"
|
||||
msgstr "Fundsachen"
|
||||
|
||||
msgid "Icon:"
|
||||
msgstr "Ikone:"
|
||||
|
||||
msgid "Indicator:"
|
||||
msgstr "Statusanzeige:"
|
||||
|
||||
msgid "Enabled"
|
||||
msgstr "Eingeschaltet"
|
||||
|
||||
msgid "Indicator Color:"
|
||||
msgstr "Farbe der Statusanzeige:"
|
||||
|
||||
msgid "Please choose a color"
|
||||
msgstr "Bitte wählen Sie eine Farbe"
|
||||
|
||||
msgid "Greeting:"
|
||||
msgstr "Begrüßung:"
|
||||
|
||||
msgid "Custom Greeting Text:"
|
||||
msgstr "Benutzerdefinierte Begrüßung:"
|
||||
|
||||
msgid "No custom greeting set"
|
||||
msgstr "Keine Begrüßung gesetzt"
|
||||
|
||||
msgid "Launcher Positioning:"
|
||||
msgstr "Startmenü Position:"
|
||||
|
||||
msgid "Default"
|
||||
msgstr "Standard"
|
||||
|
||||
msgid "Horizontal Center"
|
||||
msgstr "Horizontal zentriert"
|
||||
|
||||
msgid "Screen Center"
|
||||
msgstr "Bildschirmmitte"
|
||||
|
||||
msgid "Floating"
|
||||
msgstr "Schwebend"
|
||||
|
||||
msgid "Offset Screen Edge (0 is Default):"
|
||||
msgstr "Versatz Bildschirmkante (0 ist Standard):"
|
||||
|
||||
msgid "Offset Panel (0 is Default):"
|
||||
msgstr "Versatz Leiste (0 ist Standard):"
|
||||
|
||||
msgid "All Applications (Default)"
|
||||
msgstr "Alle Anwendungen (Standard)"
|
||||
|
||||
msgid "Search:"
|
||||
msgstr "Suche:"
|
||||
|
||||
msgid "Expand search to bookmarks, files and emails"
|
||||
msgstr "Erweiterte Suche für Lesezeichen, Dateien und E-Mails"
|
||||
|
||||
msgid "Theming:"
|
||||
msgstr "Thematisierung:"
|
||||
|
||||
msgid "Dark (Default)"
|
||||
msgstr "Dunkel (Standard)"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Hell"
|
||||
|
||||
msgid "Matching"
|
||||
msgstr "Automatisch anpassend"
|
||||
|
||||
msgid "Search your computer"
|
||||
msgstr "Computer durchsuchen"
|
135
kde/plasma/plasmoids/AndromedaLauncher/translate/fr.po
Normal file
|
@ -0,0 +1,135 @@
|
|||
# Translation of MMcK Launcher in French
|
||||
# Copyright (C) 2022
|
||||
# This file is distributed under the same license as the MMcK Launcher package.
|
||||
# Augustin Laurent <augustin.lrt2@icloud.com>, 2022.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mmcklauncher\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/snoutbug/mmcklauncher\n"
|
||||
"POT-Creation-Date: 2022-08-07 10:00-0000\n"
|
||||
"PO-Revision-Date: 2022-08-07 HO:MI+ZONE\n"
|
||||
"Last-Translator: ugustin Laurent <augustin.lrt2@icloud.com>\n"
|
||||
"Language-Team: French <>\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Réglages"
|
||||
|
||||
msgid "Power Off"
|
||||
msgstr "Éteindre"
|
||||
|
||||
msgid "Favorite Apps"
|
||||
msgstr "Applications préférées"
|
||||
|
||||
msgid "General"
|
||||
msgstr "Général"
|
||||
|
||||
msgid "Default Page:"
|
||||
msgstr "Page par défaut:"
|
||||
|
||||
msgid "All"
|
||||
msgstr "Tout"
|
||||
|
||||
msgid "Developement"
|
||||
msgstr "Développement"
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Jeux"
|
||||
|
||||
msgid "Graphics"
|
||||
msgstr "Graphisme"
|
||||
|
||||
msgid "Internet"
|
||||
msgstr "Internet"
|
||||
|
||||
msgid "Multimedia"
|
||||
msgstr "Multimédia"
|
||||
|
||||
msgid "Office"
|
||||
msgstr "Office"
|
||||
|
||||
msgid "Science & Math"
|
||||
msgstr "Sciences & Math"
|
||||
|
||||
msgid "System"
|
||||
msgstr "Système"
|
||||
|
||||
msgid "Utilities"
|
||||
msgstr "Utilitaires"
|
||||
|
||||
msgid "Lost & Found"
|
||||
msgstr "Lost & Found"
|
||||
|
||||
msgid "Icon:"
|
||||
msgstr "Icône:"
|
||||
|
||||
msgid "Indicator:"
|
||||
msgstr "Indicateur:"
|
||||
|
||||
msgid "Enabled"
|
||||
msgstr "Activé"
|
||||
|
||||
msgid "Indicator Color:"
|
||||
msgstr "Couleur de l'indicateur:"
|
||||
|
||||
msgid "Please choose a color"
|
||||
msgstr "Veuillez choisir une couleur"
|
||||
|
||||
msgid "Greeting:"
|
||||
msgstr "Message d'acceuil:"
|
||||
|
||||
msgid "Custom Greeting Text:"
|
||||
msgstr "Texte d'acceuil personnalisé :"
|
||||
|
||||
msgid "No custom greeting set"
|
||||
msgstr "Aucun message d'accueil personnalisé défini"
|
||||
|
||||
msgid "Launcher Positioning:"
|
||||
msgstr "Positionnement du lanceur:"
|
||||
|
||||
msgid "Default"
|
||||
msgstr "Défaut"
|
||||
|
||||
msgid "Horizontal Center"
|
||||
msgstr "Centre horizontal"
|
||||
|
||||
msgid "Screen Center"
|
||||
msgstr "Centre de l'écran"
|
||||
|
||||
msgid "Floating"
|
||||
msgstr "Flottant"
|
||||
|
||||
msgid "Offset Screen Edge (0 is Default):"
|
||||
msgstr "Décalage par rapport au bord de l'écran (0 est la valeur par défaut):"
|
||||
|
||||
msgid "Offset Panel (0 is Default):"
|
||||
msgstr "Décalage par rapport à la barre de tâche (0 est la valeur par défaut):"
|
||||
|
||||
msgid "All Applications (Default)"
|
||||
msgstr "Toutes les applications (par défaut)"
|
||||
|
||||
msgid "Search:"
|
||||
msgstr "Rechercher:"
|
||||
|
||||
msgid "Expand search to bookmarks, files and emails"
|
||||
msgstr "Étendre la recherche aux signets, fichiers et e-mails"
|
||||
|
||||
msgid "Theming:"
|
||||
msgstr "Thème:"
|
||||
|
||||
msgid "Dark (Default)"
|
||||
msgstr "Dark (Default)"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Light"
|
||||
|
||||
msgid "Matching"
|
||||
msgstr "Correspondant"
|
||||
|
||||
msgid "Search your computer"
|
||||
msgstr "Rechercher dans votre ordinateur"
|
135
kde/plasma/plasmoids/AndromedaLauncher/translate/id.po
Normal file
|
@ -0,0 +1,135 @@
|
|||
# Translation of MMcK Launcher in id
|
||||
# Copyright (C) 2022
|
||||
# This file is distributed under the same license as the MMcK Launcher package.
|
||||
# Adam Adrian <4.adam.adrian@gmail.com>, 2022.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mmcklauncher\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/snoutbug/mmcklauncher\n"
|
||||
"POT-Creation-Date: 2022-03-07 20:42-0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Adam Adrian <4.adam.adrian@gmail.com>\n"
|
||||
"Language-Team: Indonesia <>\n"
|
||||
"Language: id\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Pengaturan"
|
||||
|
||||
msgid "Power Off"
|
||||
msgstr "Matikan Daya"
|
||||
|
||||
msgid "Favorite Apps"
|
||||
msgstr "Aplikasi Favorit"
|
||||
|
||||
msgid "General"
|
||||
msgstr "Umum"
|
||||
|
||||
msgid "Default Page:"
|
||||
msgstr "Halaman Bawaan"
|
||||
|
||||
msgid "All"
|
||||
msgstr "Semua"
|
||||
|
||||
msgid "Developement"
|
||||
msgstr "Pengembangan"
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Permainan"
|
||||
|
||||
msgid "Graphics"
|
||||
msgstr "Grafis"
|
||||
|
||||
msgid "Internet"
|
||||
msgstr "Intenet"
|
||||
|
||||
msgid "Multimedia"
|
||||
msgstr "Multimedia"
|
||||
|
||||
msgid "Office"
|
||||
msgstr "Kantor"
|
||||
|
||||
msgid "Science & Math"
|
||||
msgstr "Sains & Matematika"
|
||||
|
||||
msgid "System"
|
||||
msgstr "Sistem"
|
||||
|
||||
msgid "Utilities"
|
||||
msgstr "Alat"
|
||||
|
||||
msgid "Lost & Found"
|
||||
msgstr "Hilang & Ditemukan"
|
||||
|
||||
msgid "Icon:"
|
||||
msgstr "Ikon:"
|
||||
|
||||
msgid "Indicator:"
|
||||
msgstr "Indkator:"
|
||||
|
||||
msgid "Enabled"
|
||||
msgstr "Diaktifkan"
|
||||
|
||||
msgid "Indicator Color:"
|
||||
msgstr "Warna Indikator"
|
||||
|
||||
msgid "Please choose a color"
|
||||
msgstr "Silahkan pilih sebuah warna"
|
||||
|
||||
msgid "Greeting:"
|
||||
msgstr "Sapaan:"
|
||||
|
||||
msgid "Custom Greeting Text:"
|
||||
msgstr "Teks Sapaan Kustom:"
|
||||
|
||||
msgid "No custom greeting set"
|
||||
msgstr "Tidak ada spaan kustom yang diatur"
|
||||
|
||||
msgid "Launcher Positioning:"
|
||||
msgstr "Pemosisian Peluncur:"
|
||||
|
||||
msgid "Default"
|
||||
msgstr "Default"
|
||||
|
||||
msgid "Horizontal Center"
|
||||
msgstr "Tengah Horizontal"
|
||||
|
||||
msgid "Screen Center"
|
||||
msgstr "Di Tengah Layar"
|
||||
|
||||
msgid "Floating"
|
||||
msgstr "Mengambang"
|
||||
|
||||
msgid "Offset Screen Edge (0 is Default):"
|
||||
msgstr "Offset Tepian Layar (0 = Default)"
|
||||
|
||||
msgid "Offset Panel (0 is Default):"
|
||||
msgstr "Offset Panel (0 = Default)"
|
||||
|
||||
msgid "All Applications (Default)"
|
||||
msgstr "Semua Aplikasi (Default)"
|
||||
|
||||
msgid "Search:"
|
||||
msgstr "Cari:"
|
||||
|
||||
msgid "Expand search to bookmarks, files and emails"
|
||||
msgstr "Luaskan pencaarian ke bookmark, file dan email"
|
||||
|
||||
msgid "Theming:"
|
||||
msgstr "Tema:"
|
||||
|
||||
msgid "Dark (Default)"
|
||||
msgstr "Gelap (Default)"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Terang"
|
||||
|
||||
msgid "Matching"
|
||||
msgstr "Cocokkan Tema"
|
||||
|
||||
msgid "Search your computer"
|
||||
msgstr "Cari di komputermu"
|
229
kde/plasma/plasmoids/AndromedaLauncher/translate/merge.sh
Normal file
|
@ -0,0 +1,229 @@
|
|||
#!/bin/sh
|
||||
# Version: 21
|
||||
|
||||
# https://techbase.kde.org/Development/Tutorials/Localization/i18n_Build_Systems
|
||||
# https://techbase.kde.org/Development/Tutorials/Localization/i18n_Build_Systems/Outside_KDE_repositories
|
||||
# https://invent.kde.org/sysadmin/l10n-scripty/-/blob/master/extract-messages.sh
|
||||
|
||||
DIR=`cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd`
|
||||
plasmoidName=`kreadconfig5 --file="$DIR/../metadata.desktop" --group="Desktop Entry" --key="X-KDE-PluginInfo-Name"`
|
||||
widgetName="${plasmoidName##*.}" # Strip namespace
|
||||
website=`kreadconfig5 --file="$DIR/../metadata.desktop" --group="Desktop Entry" --key="X-KDE-PluginInfo-Website"`
|
||||
bugAddress="$website"
|
||||
packageRoot=".." # Root of translatable sources
|
||||
projectName="plasma_applet_${plasmoidName}" # project name
|
||||
|
||||
#---
|
||||
if [ -z "$plasmoidName" ]; then
|
||||
echo "[merge] Error: Couldn't read plasmoidName."
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ -z "$(which xgettext)" ]; then
|
||||
echo "[merge] Error: xgettext command not found. Need to install gettext"
|
||||
echo "[merge] Running 'sudo apt install gettext'"
|
||||
sudo apt install gettext
|
||||
echo "[merge] gettext installation should be finished. Going back to merging translations."
|
||||
fi
|
||||
|
||||
#---
|
||||
echo "[merge] Extracting messages"
|
||||
potArgs="--from-code=UTF-8 --width=200 --add-location=file"
|
||||
|
||||
# Note: xgettext v0.20.1 (Kubuntu 20.04) and below will attempt to translate Icon,
|
||||
# so we need to specify Name, GenericName, Comment, and Keywords.
|
||||
# https://github.com/Zren/plasma-applet-lib/issues/1
|
||||
# https://savannah.gnu.org/support/?108887
|
||||
find "${packageRoot}" -name '*.desktop' | sort > "${DIR}/infiles.list"
|
||||
xgettext \
|
||||
${potArgs} \
|
||||
--files-from="${DIR}/infiles.list" \
|
||||
--language=Desktop \
|
||||
-k -kName -kGenericName -kComment -kKeywords \
|
||||
-D "${packageRoot}" \
|
||||
-D "${DIR}" \
|
||||
-o "template.pot.new" \
|
||||
|| \
|
||||
{ echo "[merge] error while calling xgettext. aborting."; exit 1; }
|
||||
|
||||
sed -i 's/"Content-Type: text\/plain; charset=CHARSET\\n"/"Content-Type: text\/plain; charset=UTF-8\\n"/' "template.pot.new"
|
||||
|
||||
# See Ki18n's extract-messages.sh for a full example:
|
||||
# https://invent.kde.org/sysadmin/l10n-scripty/-/blob/master/extract-messages.sh#L25
|
||||
# The -kN_ and -kaliasLocale keywords are mentioned in the Outside_KDE_repositories wiki.
|
||||
# We don't need -kN_ since we don't use intltool-extract but might as well keep it.
|
||||
# I have no idea what -kaliasLocale is used for. Googling aliasLocale found only listed kde1 code.
|
||||
# We don't need to parse -ki18nd since that'll extract messages from other domains.
|
||||
find "${packageRoot}" -name '*.cpp' -o -name '*.h' -o -name '*.c' -o -name '*.qml' -o -name '*.js' | sort > "${DIR}/infiles.list"
|
||||
xgettext \
|
||||
${potArgs} \
|
||||
--files-from="${DIR}/infiles.list" \
|
||||
-C -kde \
|
||||
-ci18n \
|
||||
-ki18n:1 -ki18nc:1c,2 -ki18np:1,2 -ki18ncp:1c,2,3 \
|
||||
-kki18n:1 -kki18nc:1c,2 -kki18np:1,2 -kki18ncp:1c,2,3 \
|
||||
-kxi18n:1 -kxi18nc:1c,2 -kxi18np:1,2 -kxi18ncp:1c,2,3 \
|
||||
-kkxi18n:1 -kkxi18nc:1c,2 -kkxi18np:1,2 -kkxi18ncp:1c,2,3 \
|
||||
-kI18N_NOOP:1 -kI18NC_NOOP:1c,2 \
|
||||
-kI18N_NOOP2:1c,2 -kI18N_NOOP2_NOSTRIP:1c,2 \
|
||||
-ktr2i18n:1 -ktr2xi18n:1 \
|
||||
-kN_:1 \
|
||||
-kaliasLocale \
|
||||
--package-name="${widgetName}" \
|
||||
--msgid-bugs-address="${bugAddress}" \
|
||||
-D "${packageRoot}" \
|
||||
-D "${DIR}" \
|
||||
--join-existing \
|
||||
-o "template.pot.new" \
|
||||
|| \
|
||||
{ echo "[merge] error while calling xgettext. aborting."; exit 1; }
|
||||
|
||||
sed -i 's/# SOME DESCRIPTIVE TITLE./'"# Translation of ${widgetName} in LANGUAGE"'/' "template.pot.new"
|
||||
sed -i 's/# Copyright (C) YEAR THE PACKAGE'"'"'S COPYRIGHT HOLDER/'"# Copyright (C) $(date +%Y)"'/' "template.pot.new"
|
||||
|
||||
if [ -f "template.pot" ]; then
|
||||
newPotDate=`grep "POT-Creation-Date:" template.pot.new | sed 's/.\{3\}$//'`
|
||||
oldPotDate=`grep "POT-Creation-Date:" template.pot | sed 's/.\{3\}$//'`
|
||||
sed -i 's/'"${newPotDate}"'/'"${oldPotDate}"'/' "template.pot.new"
|
||||
changes=`diff "template.pot" "template.pot.new"`
|
||||
if [ ! -z "$changes" ]; then
|
||||
# There's been changes
|
||||
sed -i 's/'"${oldPotDate}"'/'"${newPotDate}"'/' "template.pot.new"
|
||||
mv "template.pot.new" "template.pot"
|
||||
|
||||
addedKeys=`echo "$changes" | grep "> msgid" | cut -c 9- | sort`
|
||||
removedKeys=`echo "$changes" | grep "< msgid" | cut -c 9- | sort`
|
||||
echo ""
|
||||
echo "Added Keys:"
|
||||
echo "$addedKeys"
|
||||
echo ""
|
||||
echo "Removed Keys:"
|
||||
echo "$removedKeys"
|
||||
echo ""
|
||||
|
||||
else
|
||||
# No changes
|
||||
rm "template.pot.new"
|
||||
fi
|
||||
else
|
||||
# template.pot didn't already exist
|
||||
mv "template.pot.new" "template.pot"
|
||||
fi
|
||||
|
||||
potMessageCount=`expr $(grep -Pzo 'msgstr ""\n(\n|$)' "template.pot" | grep -c 'msgstr ""')`
|
||||
echo "| Locale | Lines | % Done|" > "./Status.md"
|
||||
echo "|----------|---------|-------|" >> "./Status.md"
|
||||
entryFormat="| %-8s | %7s | %5s |"
|
||||
templateLine=`perl -e "printf(\"$entryFormat\", \"Template\", \"${potMessageCount}\", \"\")"`
|
||||
echo "$templateLine" >> "./Status.md"
|
||||
|
||||
rm "${DIR}/infiles.list"
|
||||
echo "[merge] Done extracting messages"
|
||||
|
||||
#---
|
||||
echo "[merge] Merging messages"
|
||||
catalogs=`find . -name '*.po' | sort`
|
||||
for cat in $catalogs; do
|
||||
echo "[merge] $cat"
|
||||
catLocale=`basename ${cat%.*}`
|
||||
|
||||
widthArg=""
|
||||
catUsesGenerator=`grep "X-Generator:" "$cat"`
|
||||
if [ -z "$catUsesGenerator" ]; then
|
||||
widthArg="--width=400"
|
||||
fi
|
||||
|
||||
cp "$cat" "$cat.new"
|
||||
sed -i 's/"Content-Type: text\/plain; charset=CHARSET\\n"/"Content-Type: text\/plain; charset=UTF-8\\n"/' "$cat.new"
|
||||
|
||||
msgmerge \
|
||||
${widthArg} \
|
||||
--add-location=file \
|
||||
--no-fuzzy-matching \
|
||||
-o "$cat.new" \
|
||||
"$cat.new" "${DIR}/template.pot"
|
||||
|
||||
sed -i 's/# SOME DESCRIPTIVE TITLE./'"# Translation of ${widgetName} in ${catLocale}"'/' "$cat.new"
|
||||
sed -i 's/# Translation of '"${widgetName}"' in LANGUAGE/'"# Translation of ${widgetName} in ${catLocale}"'/' "$cat.new"
|
||||
sed -i 's/# Copyright (C) YEAR THE PACKAGE'"'"'S COPYRIGHT HOLDER/'"# Copyright (C) $(date +%Y)"'/' "$cat.new"
|
||||
|
||||
poEmptyMessageCount=`expr $(grep -Pzo 'msgstr ""\n(\n|$)' "$cat.new" | grep -c 'msgstr ""')`
|
||||
poMessagesDoneCount=`expr $potMessageCount - $poEmptyMessageCount`
|
||||
poCompletion=`perl -e "printf(\"%d\", $poMessagesDoneCount * 100 / $potMessageCount)"`
|
||||
poLine=`perl -e "printf(\"$entryFormat\", \"$catLocale\", \"${poMessagesDoneCount}/${potMessageCount}\", \"${poCompletion}%\")"`
|
||||
echo "$poLine" >> "./Status.md"
|
||||
|
||||
# mv "$cat" "$cat.old"
|
||||
mv "$cat.new" "$cat"
|
||||
done
|
||||
echo "[merge] Done merging messages"
|
||||
|
||||
#---
|
||||
echo "[merge] Updating .desktop file"
|
||||
|
||||
# Generate LINGUAS for msgfmt
|
||||
if [ -f "$DIR/LINGUAS" ]; then
|
||||
rm "$DIR/LINGUAS"
|
||||
fi
|
||||
touch "$DIR/LINGUAS"
|
||||
for cat in $catalogs; do
|
||||
catLocale=`basename ${cat%.*}`
|
||||
echo "${catLocale}" >> "$DIR/LINGUAS"
|
||||
done
|
||||
|
||||
cp -f "$DIR/../metadata.desktop" "$DIR/template.desktop"
|
||||
sed -i '/^Name\[/ d; /^GenericName\[/ d; /^Comment\[/ d; /^Keywords\[/ d' "$DIR/template.desktop"
|
||||
|
||||
msgfmt \
|
||||
--desktop \
|
||||
--template="$DIR/template.desktop" \
|
||||
-d "$DIR/" \
|
||||
-o "$DIR/new.desktop"
|
||||
|
||||
# Delete empty msgid messages that used the po header
|
||||
if [ ! -z "$(grep '^Name=$' "$DIR/new.desktop")" ]; then
|
||||
echo "[merge] Name in metadata.desktop is empty!"
|
||||
sed -i '/^Name\[/ d' "$DIR/new.desktop"
|
||||
fi
|
||||
if [ ! -z "$(grep '^GenericName=$' "$DIR/new.desktop")" ]; then
|
||||
echo "[merge] GenericName in metadata.desktop is empty!"
|
||||
sed -i '/^GenericName\[/ d' "$DIR/new.desktop"
|
||||
fi
|
||||
if [ ! -z "$(grep '^Comment=$' "$DIR/new.desktop")" ]; then
|
||||
echo "[merge] Comment in metadata.desktop is empty!"
|
||||
sed -i '/^Comment\[/ d' "$DIR/new.desktop"
|
||||
fi
|
||||
if [ ! -z "$(grep '^Keywords=$' "$DIR/new.desktop")" ]; then
|
||||
echo "[merge] Keywords in metadata.desktop is empty!"
|
||||
sed -i '/^Keywords\[/ d' "$DIR/new.desktop"
|
||||
fi
|
||||
|
||||
# Place translations at the bottom of the desktop file.
|
||||
translatedLines=`cat "$DIR/new.desktop" | grep "]="`
|
||||
if [ ! -z "${translatedLines}" ]; then
|
||||
sed -i '/^Name\[/ d; /^GenericName\[/ d; /^Comment\[/ d; /^Keywords\[/ d' "$DIR/new.desktop"
|
||||
if [ "$(tail -c 2 "$DIR/new.desktop" | wc -l)" != "2" ]; then
|
||||
# Does not end with 2 empty lines, so add an empty line.
|
||||
echo "" >> "$DIR/new.desktop"
|
||||
fi
|
||||
echo "${translatedLines}" >> "$DIR/new.desktop"
|
||||
fi
|
||||
|
||||
# Cleanup
|
||||
mv "$DIR/new.desktop" "$DIR/../metadata.desktop"
|
||||
rm "$DIR/template.desktop"
|
||||
rm "$DIR/LINGUAS"
|
||||
|
||||
#---
|
||||
# Populate ReadMe.md
|
||||
echo "[merge] Updating translate/ReadMe.md"
|
||||
sed -i -E 's`share\/plasma\/plasmoids\/(.+)\/translate`share/plasma/plasmoids/'"${plasmoidName}"'/translate`' ./ReadMe.md
|
||||
if [[ "$website" == *"github.com"* ]]; then
|
||||
sed -i -E 's`\[new issue\]\(https:\/\/github\.com\/(.+)\/(.+)\/issues\/new\)`[new issue]('"${website}"'/issues/new)`' ./ReadMe.md
|
||||
fi
|
||||
sed -i '/^|/ d' ./ReadMe.md # Remove status table from ReadMe
|
||||
cat ./Status.md >> ./ReadMe.md
|
||||
rm ./Status.md
|
||||
|
||||
echo "[merge] Done"
|
||||
|
136
kde/plasma/plasmoids/AndromedaLauncher/translate/nl.po
Normal file
|
@ -0,0 +1,136 @@
|
|||
# Translation of MMcK Launcher in LANGUAGE
|
||||
# Copyright (C) 2022
|
||||
# This file is distributed under the same license as the MMcK Launcher package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mmcklauncher\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/snoutbug/mmcklauncher\n"
|
||||
"POT-Creation-Date: 2022-03-07 20:42-0000\n"
|
||||
"PO-Revision-Date: 2022-03-08 13:20+0100\n"
|
||||
"Last-Translator: Heimen Stoffels <vistausss@fastmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: nl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Poedit 3.0.1\n"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Instellingen"
|
||||
|
||||
msgid "Power Off"
|
||||
msgstr "Uitschakelen"
|
||||
|
||||
msgid "Favorite Apps"
|
||||
msgstr "Favorieten"
|
||||
|
||||
msgid "General"
|
||||
msgstr "Algemeen"
|
||||
|
||||
msgid "Default Page:"
|
||||
msgstr "Startpagina:"
|
||||
|
||||
msgid "All"
|
||||
msgstr "Alles"
|
||||
|
||||
msgid "Developement"
|
||||
msgstr "Ontwikkeling"
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Games"
|
||||
|
||||
msgid "Graphics"
|
||||
msgstr "Grafisch"
|
||||
|
||||
msgid "Internet"
|
||||
msgstr "Internet"
|
||||
|
||||
msgid "Multimedia"
|
||||
msgstr "Multimedia"
|
||||
|
||||
msgid "Office"
|
||||
msgstr "Kantoor"
|
||||
|
||||
msgid "Science & Math"
|
||||
msgstr "Wetenschap"
|
||||
|
||||
msgid "System"
|
||||
msgstr "Systeem"
|
||||
|
||||
msgid "Utilities"
|
||||
msgstr "Hulpmiddelen"
|
||||
|
||||
msgid "Lost & Found"
|
||||
msgstr "Overig"
|
||||
|
||||
msgid "Icon:"
|
||||
msgstr "Pictogram:"
|
||||
|
||||
msgid "Indicator:"
|
||||
msgstr "Indicator:"
|
||||
|
||||
msgid "Enabled"
|
||||
msgstr "Ingeschakeld"
|
||||
|
||||
msgid "Indicator Color:"
|
||||
msgstr "Indicatorkleur:"
|
||||
|
||||
msgid "Please choose a color"
|
||||
msgstr "Kies een kleur"
|
||||
|
||||
msgid "Greeting:"
|
||||
msgstr "Begroeting:"
|
||||
|
||||
msgid "Custom Greeting Text:"
|
||||
msgstr "Eigen tekst:"
|
||||
|
||||
msgid "No custom greeting set"
|
||||
msgstr "Geen eigen tekst ingesteld"
|
||||
|
||||
msgid "Launcher Positioning:"
|
||||
msgstr "Startmenu openen op locatie:"
|
||||
|
||||
msgid "Default"
|
||||
msgstr "Standaard"
|
||||
|
||||
msgid "Horizontal Center"
|
||||
msgstr "Midden (horizontaal)"
|
||||
|
||||
msgid "Screen Center"
|
||||
msgstr "Midden van scherm"
|
||||
|
||||
msgid "Floating"
|
||||
msgstr "Zweven"
|
||||
|
||||
msgid "Offset Screen Edge (0 is Default):"
|
||||
msgstr "Ruimte vanaf schermrand (standaard: 0)"
|
||||
|
||||
msgid "Offset Panel (0 is Default):"
|
||||
msgstr "Ruimte vanaf paneel (standaard: 0)"
|
||||
|
||||
msgid "All Applications (Default)"
|
||||
msgstr "Alle programma's (standaard)"
|
||||
|
||||
msgid "Search:"
|
||||
msgstr "Zoeken:"
|
||||
|
||||
msgid "Expand search to bookmarks, files and emails"
|
||||
msgstr "Ook bladwijzers, bestanden en e-mails doorzoeken"
|
||||
|
||||
msgid "Theming:"
|
||||
msgstr "Thema:"
|
||||
|
||||
msgid "Dark (Default)"
|
||||
msgstr "Donker (standaard)"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Licht"
|
||||
|
||||
msgid "Matching"
|
||||
msgstr "Systeemthema"
|
||||
|
||||
msgid "Search your computer"
|
||||
msgstr "Doorzoek je computer"
|
135
kde/plasma/plasmoids/AndromedaLauncher/translate/template.pot
Normal file
|
@ -0,0 +1,135 @@
|
|||
# Translation of MMcK Launcher in LANGUAGE
|
||||
# Copyright (C) 2022
|
||||
# This file is distributed under the same license as the MMcK Launcher package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mmcklauncher\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/snoutbug/mmcklauncher\n"
|
||||
"POT-Creation-Date: 2022-03-07 20:42-0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Power Off"
|
||||
msgstr ""
|
||||
|
||||
msgid "Favorite Apps"
|
||||
msgstr ""
|
||||
|
||||
msgid "General"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default Page:"
|
||||
msgstr ""
|
||||
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
msgid "Developement"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr ""
|
||||
|
||||
msgid "Graphics"
|
||||
msgstr ""
|
||||
|
||||
msgid "Internet"
|
||||
msgstr ""
|
||||
|
||||
msgid "Multimedia"
|
||||
msgstr ""
|
||||
|
||||
msgid "Office"
|
||||
msgstr ""
|
||||
|
||||
msgid "Science & Math"
|
||||
msgstr ""
|
||||
|
||||
msgid "System"
|
||||
msgstr ""
|
||||
|
||||
msgid "Utilities"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lost & Found"
|
||||
msgstr ""
|
||||
|
||||
msgid "Icon:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Indicator:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enabled"
|
||||
msgstr ""
|
||||
|
||||
msgid "Indicator Color:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please choose a color"
|
||||
msgstr ""
|
||||
|
||||
msgid "Greeting:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Custom Greeting Text:"
|
||||
msgstr ""
|
||||
|
||||
msgid "No custom greeting set"
|
||||
msgstr ""
|
||||
|
||||
msgid "Launcher Positioning:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
msgid "Horizontal Center"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screen Center"
|
||||
msgstr ""
|
||||
|
||||
msgid "Floating"
|
||||
msgstr ""
|
||||
|
||||
msgid "Offset Screen Edge (0 is Default):"
|
||||
msgstr ""
|
||||
|
||||
msgid "Offset Panel (0 is Default):"
|
||||
msgstr ""
|
||||
|
||||
msgid "All Applications (Default)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Expand search to bookmarks, files and emails"
|
||||
msgstr ""
|
||||
|
||||
msgid "Theming:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dark (Default)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Light"
|
||||
msgstr ""
|
||||
|
||||
msgid "Matching"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search your computer"
|
||||
msgstr ""
|
|
@ -0,0 +1,10 @@
|
|||
import QtQuick 2.12
|
||||
import org.kde.plasma.configuration 2.0
|
||||
|
||||
ConfigModel {
|
||||
ConfigCategory {
|
||||
name: i18n("General")
|
||||
icon: "preferences-desktop"
|
||||
source: "GeneralConfig.qml"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
|
||||
http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
|
||||
<kcfgfile name=""/>
|
||||
|
||||
<group name="General">
|
||||
<entry name="opacity" type="Int">
|
||||
<default>100</default>
|
||||
<label>Opacity</label>
|
||||
</entry>
|
||||
<entry name="preferredSource" type="String">
|
||||
<default>@multiplex</default>
|
||||
<label>Preferred source name for MPRIS2</label>
|
||||
</entry>
|
||||
<entry name="fontFamily" type="String">
|
||||
<default>"Noto Sans"</default>
|
||||
<label>Font family</label>
|
||||
</entry>
|
||||
</group>
|
||||
|
||||
</kcfg>
|
|
@ -0,0 +1,229 @@
|
|||
/*
|
||||
SPDX-FileCopyrightText: 2013 Marco Martin <mart@kde.org>
|
||||
SPDX-FileCopyrightText: 2014 Sebastian Kügler <sebas@kde.org>
|
||||
SPDX-FileCopyrightText: 2014 Kai Uwe Broulik <kde@privat.broulik.de>
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Controls 2.15
|
||||
import QtQuick.Window 2.15
|
||||
|
||||
import org.kde.plasma.plasmoid 2.0
|
||||
import org.kde.plasma.components 3.0 as PC3
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
import org.kde.plasma.extras as PlasmaExtras
|
||||
|
||||
Item {
|
||||
id: container
|
||||
|
||||
/**
|
||||
* Whether the album art image is available or in loading status
|
||||
*/
|
||||
readonly property bool hasImage: (pendingImage !== null && (pendingImage.status === Image.Ready || pendingImage.status === Image.Loading))
|
||||
|| (albumArt.currentItem instanceof Image && albumArt.currentItem.status === Image.Ready)
|
||||
|
||||
readonly property bool animating: exitTransition.running || popExitTransition.running
|
||||
|
||||
/**
|
||||
* Whether the component is used in the compact representation
|
||||
*/
|
||||
property bool inCompactRepresentation: false
|
||||
|
||||
/**
|
||||
* Provides source item for \ShaderEffectSource
|
||||
*/
|
||||
readonly property alias albumArt: albumArt
|
||||
|
||||
property Image pendingImage: null
|
||||
|
||||
onWidthChanged: geometryChangeTimer.restart();
|
||||
onHeightChanged: geometryChangeTimer.restart();
|
||||
|
||||
function loadAlbumArt() {
|
||||
if (pendingImage !== null) {
|
||||
pendingImage.destroy();
|
||||
pendingImage = null;
|
||||
}
|
||||
|
||||
if (!root.albumArt) {
|
||||
albumArt.clear(StackView.PopTransition);
|
||||
return;
|
||||
}
|
||||
|
||||
const oldImageRatio = albumArt.currentItem instanceof Image ? albumArt.currentItem.sourceSize.width / albumArt.currentItem.sourceSize.height : 1;
|
||||
pendingImage = albumArtComponent.createObject(albumArt, {
|
||||
"source": root.albumArt,
|
||||
"sourceSize": Qt.size(container.width * Screen.devicePixelRatio, container.height * Screen.devicePixelRatio),
|
||||
"opacity": 0,
|
||||
});
|
||||
|
||||
function replaceWhenLoaded() {
|
||||
if (pendingImage.status === Image.Loading) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (pendingImage.status === Image.Ready) {
|
||||
const newImageRatio = pendingImage.sourceSize.width / pendingImage.sourceSize.height;
|
||||
exitTransitionOpacityAnimator.duration = oldImageRatio === newImageRatio ? 0 : PlasmaCore.Units.longDuration;
|
||||
} else {
|
||||
// Load placeholder icon, but keep the invalid image to avoid flashing application icons
|
||||
exitTransitionOpacityAnimator.duration = 0;
|
||||
}
|
||||
|
||||
albumArt.replace(pendingImage, {}, StackView.ReplaceTransition);
|
||||
pendingImage.statusChanged.disconnect(replaceWhenLoaded);
|
||||
pendingImage = null;
|
||||
}
|
||||
|
||||
pendingImage.statusChanged.connect(replaceWhenLoaded);
|
||||
replaceWhenLoaded();
|
||||
}
|
||||
|
||||
// Reload album art when size of container changes
|
||||
Timer {
|
||||
id: geometryChangeTimer
|
||||
interval: 250
|
||||
onTriggered: container.loadAlbumArt();
|
||||
}
|
||||
|
||||
StackView {
|
||||
id: albumArt
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
readonly property string icon: (mpris2Source.currentData && mpris2Source.currentData["Desktop Icon Name"]) || "media-album-cover"
|
||||
|
||||
replaceEnter: Transition {
|
||||
OpacityAnimator {
|
||||
from: 0
|
||||
to: 1
|
||||
duration: PlasmaCore.Units.longDuration
|
||||
}
|
||||
}
|
||||
|
||||
replaceExit: Transition {
|
||||
id: exitTransition
|
||||
|
||||
SequentialAnimation {
|
||||
PauseAnimation {
|
||||
duration: PlasmaCore.Units.longDuration
|
||||
}
|
||||
|
||||
/**
|
||||
* If the new ratio and the old ratio are different,
|
||||
* perform a fade-out animation for the old image
|
||||
* to prevent it from suddenly disappearing.
|
||||
*/
|
||||
OpacityAnimator {
|
||||
id: exitTransitionOpacityAnimator
|
||||
from: 1
|
||||
to: 0
|
||||
duration: 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
popExit: Transition {
|
||||
id: popExitTransition
|
||||
|
||||
OpacityAnimator {
|
||||
from: 1
|
||||
to: 0
|
||||
duration: PlasmaCore.Units.longDuration
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: albumArtComponent
|
||||
|
||||
Image { // Album Art
|
||||
horizontalAlignment: Image.AlignHCenter
|
||||
verticalAlignment: Image.AlignVCenter
|
||||
fillMode: Image.PreserveAspectFit
|
||||
|
||||
asynchronous: true
|
||||
cache: false
|
||||
|
||||
StackView.onRemoved: {
|
||||
source = ""; // HACK: Reduce memory usage
|
||||
destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: fallbackIconItem
|
||||
|
||||
PlasmaCore.IconItem { // Fallback
|
||||
id: fallbackIcon
|
||||
|
||||
anchors.margins: PlasmaCore.Units.largeSpacing * 2
|
||||
opacity: 0
|
||||
source: albumArt.icon
|
||||
|
||||
NumberAnimation {
|
||||
duration: PlasmaCore.Units.longDuration
|
||||
easing.type: Easing.OutCubic
|
||||
property: "opacity"
|
||||
running: true
|
||||
target: fallbackIcon
|
||||
to: 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// "No media playing" placeholder message
|
||||
Component {
|
||||
id: placeholderMessage
|
||||
|
||||
// Put PlaceholderMessage in Item so PlaceholderMessage will not fill its parent.
|
||||
Item {
|
||||
property alias source: message.iconName
|
||||
|
||||
PlasmaExtras.PlaceholderMessage {
|
||||
id: message
|
||||
anchors.centerIn: parent
|
||||
width: parent.width // For text wrap
|
||||
iconName: albumArt.icon
|
||||
text: (root.isPlaying || root.state === "paused") ? i18n("No title") : i18n("No media playing")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: busyComponent
|
||||
|
||||
Item {
|
||||
PC3.BusyIndicator {
|
||||
id: busyIndicator
|
||||
anchors.centerIn: parent
|
||||
opacity: 0
|
||||
}
|
||||
|
||||
NumberAnimation {
|
||||
duration: PlasmaCore.Units.longDuration
|
||||
easing.type: Easing.OutCubic
|
||||
property: "opacity"
|
||||
running: true
|
||||
target: busyIndicator
|
||||
to: 1
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Loader {
|
||||
anchors.fill: parent
|
||||
visible: active
|
||||
|
||||
readonly property bool isLoadingImage: pendingImage !== null && pendingImage.status === Image.Loading
|
||||
|
||||
active: (inCompactRepresentation || Plasmoid.expanded) && (!container.hasImage || isLoadingImage)
|
||||
asynchronous: true
|
||||
sourceComponent: root.track ? (isLoadingImage ? busyComponent : fallbackIconItem) : placeholderMessage
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
import QtQuick 2.15
|
||||
import QtQuick.Controls 2.15
|
||||
import QtQuick.Layouts 1.11
|
||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||
import org.kde.plasma.plasma5support as Plasma5Support
|
||||
|
||||
Item {
|
||||
id: configRoot
|
||||
|
||||
signal configurationChanged
|
||||
|
||||
property alias cfg_opacity: opacitySpinBox.value
|
||||
|
||||
property string cfg_preferredSource
|
||||
|
||||
property string cfg_fontFamily
|
||||
|
||||
ColumnLayout {
|
||||
spacing: units.smallSpacing * 2
|
||||
|
||||
|
||||
RowLayout{
|
||||
Label {
|
||||
text: i18n("Opacity percent")
|
||||
}
|
||||
SpinBox {
|
||||
id: opacitySpinBox
|
||||
from: 0
|
||||
to: 100
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout{
|
||||
|
||||
Label {
|
||||
text: i18n("Preferred media source")
|
||||
}
|
||||
|
||||
ListModel {
|
||||
id: sourcesModel
|
||||
Component.onCompleted: {
|
||||
var arr = []
|
||||
arr.push({
|
||||
"text": cfg_preferredSource
|
||||
})
|
||||
var sources = dataSource.sources
|
||||
for (var i = 0, j = sources.length; i < j; ++i) {
|
||||
if (sources[i] === cfg_preferredSource) {
|
||||
continue
|
||||
}
|
||||
arr.push({
|
||||
"text": sources[i]
|
||||
})
|
||||
}
|
||||
append(arr)
|
||||
}
|
||||
}
|
||||
|
||||
ComboBox {
|
||||
id: sourcesComboBox
|
||||
model: sourcesModel
|
||||
focus: true
|
||||
currentIndex: 0
|
||||
textRole: "text"
|
||||
onCurrentIndexChanged: {
|
||||
var current = model.get(currentIndex)
|
||||
if (current) {
|
||||
cfg_preferredSource = current.text
|
||||
configRoot.configurationChanged()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout{
|
||||
Label {
|
||||
text: i18n("Font")
|
||||
}
|
||||
ComboBox{
|
||||
id: fontFamilyComboBox
|
||||
model: Qt.fontFamilies()
|
||||
onCurrentIndexChanged: {
|
||||
var current = Qt.fontFamilies()[currentIndex]
|
||||
cfg_fontFamily=current
|
||||
configRoot.configurationChanged()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Plasma5Support.DataSource {
|
||||
id: dataSource
|
||||
engine: "mpris2"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,139 @@
|
|||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.11
|
||||
import QtQuick.Controls 2.15
|
||||
import org.kde.kirigami as Kirigami
|
||||
import org.kde.plasma.components 3.0 as PlasmaComponents3
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
|
||||
RowLayout {
|
||||
id: fullView
|
||||
focus: true
|
||||
|
||||
// loading fonts
|
||||
|
||||
FontLoader {
|
||||
id: antonio_Bold
|
||||
source: "../fonts/Antonio-Bold.ttf"
|
||||
}
|
||||
FontLoader {
|
||||
id: aller_Lt
|
||||
source: "../fonts/Aller_Lt.ttf"
|
||||
}
|
||||
FontLoader {
|
||||
id: aller_Bd
|
||||
source: "../fonts/Aller_Bd.ttf"
|
||||
}
|
||||
|
||||
Keys.onReleased: {
|
||||
if (!event.modifiers) {
|
||||
event.accepted = true
|
||||
if (event.key === Qt.Key_Space || event.key === Qt.Key_K) {
|
||||
root.mediaToggle()
|
||||
} else if (event.key === Qt.Key_P) {
|
||||
root.mediaPrev()
|
||||
} else if (event.key === Qt.Key_N) {
|
||||
root.mediaNext()
|
||||
} else {
|
||||
event.accepted = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
id: fullwidget
|
||||
PlasmaComponents3.Label {
|
||||
id: title
|
||||
text: track
|
||||
Layout.fillWidth: true
|
||||
font.pixelSize: 20
|
||||
font.family: aller_Bd.name
|
||||
// color: "red"
|
||||
lineHeight: 0.8
|
||||
font.bold: true
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
Rectangle {
|
||||
id: separator
|
||||
height: 1
|
||||
// color: "black"
|
||||
width: !title.height ? title.height/2 : 100
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
|
||||
PlasmaComponents3.Label {
|
||||
font.family: aller_Lt.name
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
Layout.maximumWidth: 300
|
||||
Layout.fillWidth: true
|
||||
text: artist
|
||||
font.pixelSize: 16
|
||||
// color: "red"
|
||||
lineHeight: 0.8
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
MouseArea {
|
||||
// Layout.alignment: Qt.AlignRight
|
||||
id: mediaControlsMouseArea
|
||||
height: title.height
|
||||
Layout.fillWidth: true
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
hoverEnabled: true
|
||||
RowLayout {
|
||||
id: mediaControls
|
||||
opacity: mediaControlsMouseArea.containsMouse
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
Behavior on opacity {
|
||||
PropertyAnimation {
|
||||
easing.type: Easing.InOutQuad
|
||||
duration: 250
|
||||
}
|
||||
}
|
||||
Button {
|
||||
Layout.preferredWidth: fullwidget.height/2
|
||||
Layout.preferredHeight: fullwidget.height/1.5
|
||||
contentItem: Kirigami.Icon {
|
||||
source: "media-skip-backward"
|
||||
}
|
||||
padding: 0
|
||||
background: null
|
||||
onClicked: {
|
||||
root.mediaPrev()
|
||||
console.log("prev clicked")
|
||||
}
|
||||
}
|
||||
Button {
|
||||
Layout.preferredWidth: fullwidget.height/2
|
||||
Layout.preferredHeight: fullwidget.height/1.5
|
||||
id: playButton
|
||||
contentItem: Kirigami.Icon {
|
||||
source: root.playbackStatus === 0 ? "media-playback-pause" : "media-playback-start"
|
||||
}
|
||||
padding: 0
|
||||
background: null
|
||||
onClicked: {
|
||||
root.mediaToggle()
|
||||
console.log("pause clicked")
|
||||
}
|
||||
}
|
||||
Button {
|
||||
Layout.preferredWidth: fullwidget.height/2
|
||||
Layout.preferredHeight: fullwidget.height/1.5
|
||||
contentItem: Kirigami.Icon {
|
||||
source: "media-skip-forward"
|
||||
}
|
||||
onClicked: {
|
||||
root.mediaNext()
|
||||
console.log(mediaSource.playbackStatus)
|
||||
console.log("next clicked")
|
||||
}
|
||||
padding: 0
|
||||
background: null
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
import QtQuick 2.12
|
||||
import QtQuick.Layouts 1.11
|
||||
import QtQuick.Controls 2.12
|
||||
import org.kde.plasma.plasmoid 2.0
|
||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||
import org.kde.plasma.plasma5support as Plasma5Support
|
||||
import org.kde.plasma.private.mpris as Mpris
|
||||
|
||||
PlasmoidItem {
|
||||
id: root
|
||||
|
||||
Layout.minimumWidth: units.gridUnit*25
|
||||
Layout.minimumHeight: units.gridUnit*5
|
||||
|
||||
Plasmoid.backgroundHints: "NoBackground"
|
||||
|
||||
opacity: plasmoid.configuration.opacity/100
|
||||
|
||||
|
||||
Representation {
|
||||
id: fullView
|
||||
anchors.fill: parent
|
||||
}
|
||||
|
||||
|
||||
property string artist: mpris2Model.currentPlayer?.artist ?? ""
|
||||
property string track: mpris2Model.currentPlayer?.track
|
||||
|
||||
|
||||
function mediaToggle() {
|
||||
mpris2Model.currentPlayer.PlayPause();
|
||||
}
|
||||
function mediaPrev() {
|
||||
mpris2Model.currentPlayer.Previous();
|
||||
|
||||
}
|
||||
function mediaNext() {
|
||||
mpris2Model.currentPlayer.Next();
|
||||
}
|
||||
|
||||
Mpris.Mpris2Model {
|
||||
id: mpris2Model
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
|
||||
Name=Music Minimal
|
||||
Comment=minimalist widget, with information about the track being played, based on the NowPlaylis widget by nhilistdev
|
||||
Icon=applications-multimedia
|
||||
Type=Service
|
||||
|
||||
X-Plasma-API=declarativeappletscript
|
||||
X-Plasma-MainScript=ui/main.qml
|
||||
|
||||
X-KDE-PluginInfo-Author=zayronxio and nhilistdev
|
||||
X-KDE-PluginInfo-Category=Multimedia
|
||||
X-KDE-PluginInfo-Name=org.kde.MinimalMusic
|
||||
X-KDE-PluginInfo-License=GPLv3
|
||||
X-KDE-PluginInfo-Version=2.0
|
||||
X-Plasma-StandAloneApp=true
|
||||
X-KDE-PluginInfo-Website=https://github.com/zayronxio/MinimalMusic-plasma
|
||||
X-Plasma-Provides=org.kde.plasma.multimediacontrols
|
||||
X-KDE-ServiceTypes=Plasma/Applet
|
23
kde/plasma/plasmoids/org.kde.MinimalMusic.P6/metadata.json
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Name": "zayronxio"
|
||||
}
|
||||
],
|
||||
"Name": "Music Minimal",
|
||||
"Id": "org.kde.MinimalMusic.P6",
|
||||
"Description": "minimalist widget, with information about the track being played, based on the NowPlaylis widget by nhilistdev",
|
||||
"Category": "Multimedia",
|
||||
"Icon": "applications-multimedia",
|
||||
"EnabledByDefault": true,
|
||||
"License": "GPL-3.0+",
|
||||
"ServiceTypes": [
|
||||
"Plasma/Applet"
|
||||
],
|
||||
"Version": "2.0",
|
||||
"Website": ""
|
||||
},
|
||||
"X-Plasma-API-Minimum-Version": "6.0",
|
||||
"X-Plasma-MainScript": "ui/main.qml"
|
||||
}
|
|
@ -308,7 +308,7 @@ immutability=1
|
|||
plugin=org.kde.plasma.cameraindicator
|
||||
|
||||
[Containments][48][Applets][74][Configuration]
|
||||
PreloadWeight=55
|
||||
PreloadWeight=70
|
||||
|
||||
[Containments][48][Applets][75]
|
||||
immutability=1
|
||||
|
@ -325,14 +325,14 @@ immutability=1
|
|||
plugin=org.kde.plasma.battery
|
||||
|
||||
[Containments][48][Applets][88][Configuration]
|
||||
PreloadWeight=97
|
||||
PreloadWeight=0
|
||||
|
||||
[Containments][48][Applets][89]
|
||||
immutability=1
|
||||
plugin=org.kde.plasma.brightness
|
||||
|
||||
[Containments][48][Applets][89][Configuration]
|
||||
PreloadWeight=34
|
||||
PreloadWeight=0
|
||||
|
||||
[Containments][48][Applets][91]
|
||||
immutability=1
|
||||
|
@ -342,17 +342,17 @@ plugin=org.kde.plasma.bluetooth
|
|||
PreloadWeight=44
|
||||
|
||||
[Containments][48][ConfigDialog]
|
||||
DialogHeight=540
|
||||
DialogWidth=720
|
||||
DialogHeight=570
|
||||
DialogWidth=760
|
||||
|
||||
[Containments][48][Configuration]
|
||||
PreloadWeight=26
|
||||
|
||||
[Containments][48][General]
|
||||
extraItems=org.kde.plasma.clipboard,org.kde.plasma.devicenotifier,org.kde.plasma.notifications,org.kde.plasma.volume,org.kde.plasma.cameraindicator,org.kde.plasma.printmanager,org.kde.plasma.battery,org.kde.plasma.bluetooth,org.kde.plasma.brightness
|
||||
hiddenItems=chrome_status_icon_1,org.kde.plasma.printmanager,org.kde.plasma.brightness
|
||||
hiddenItems=org.kde.plasma.printmanager,org.kde.plasma.brightness
|
||||
knownItems=org.kde.plasma.battery,org.kde.plasma.clipboard,org.kde.plasma.devicenotifier,org.kde.plasma.manage-inputmethod,org.kde.plasma.mediacontroller,org.kde.plasma.notifications,org.kde.plasma.keyboardlayout,org.kde.plasma.volume,org.kde.plasma.networkmanagement,org.kde.plasma.keyboardindicator,org.kde.plasma.bluetooth,org.kde.kscreen,org.kde.plasma.vault,org.kde.plasma.brightness,org.kde.plasma.cameraindicator,org.kde.plasma.printmanager
|
||||
shownItems=vlc,org.kde.plasma.volume,org.kde.plasma.clipboard,org.kde.plasma.devicenotifier,org.kde.plasma.battery,org.kde.plasma.cameraindicator,steam
|
||||
shownItems=vlc,org.kde.plasma.volume,org.kde.plasma.clipboard,org.kde.plasma.devicenotifier,org.kde.plasma.battery,org.kde.plasma.cameraindicator,steam,revolt-desktop1,chrome_status_icon_1
|
||||
|
||||
[Containments][8]
|
||||
activityId=
|
||||
|
@ -487,10 +487,10 @@ PreloadWeight=18
|
|||
extraItems=org.kde.plasma.battery,org.kde.plasma.clipboard,org.kde.plasma.devicenotifier,org.kde.plasma.manage-inputmethod,org.kde.plasma.mediacontroller,org.kde.plasma.notifications,org.kde.plasma.keyboardlayout,org.kde.plasma.volume,org.kde.plasma.networkmanagement,org.kde.plasma.keyboardindicator,org.kde.plasma.bluetooth,org.kde.kscreen,org.kde.plasma.vault,org.kde.plasma.brightness,org.kde.plasma.cameraindicator,org.kde.plasma.printmanager
|
||||
knownItems=org.kde.plasma.battery,org.kde.plasma.clipboard,org.kde.plasma.devicenotifier,org.kde.plasma.manage-inputmethod,org.kde.plasma.mediacontroller,org.kde.plasma.notifications,org.kde.plasma.keyboardlayout,org.kde.plasma.volume,org.kde.plasma.networkmanagement,org.kde.plasma.keyboardindicator,org.kde.plasma.bluetooth,org.kde.kscreen,org.kde.plasma.vault,org.kde.plasma.brightness,org.kde.plasma.cameraindicator,org.kde.plasma.printmanager
|
||||
|
||||
[Containments][87]
|
||||
ItemGeometries-1600x900=
|
||||
[Containments][88]
|
||||
ItemGeometries-2560x1440=
|
||||
ItemGeometriesHorizontal=
|
||||
activityId=6e15e692-c8e1-41eb-a913-fc1802af9796
|
||||
activityId=d7d15086-7d92-470b-924f-df8f497fbac9
|
||||
formfactor=0
|
||||
immutability=1
|
||||
lastScreen=0
|
||||
|
@ -498,6 +498,23 @@ location=0
|
|||
plugin=org.kde.plasma.folder
|
||||
wallpaperplugin=org.kde.image
|
||||
|
||||
[Containments][88][General]
|
||||
ToolBoxButtonState=topcenter
|
||||
ToolBoxButtonX=586
|
||||
|
||||
[Containments][89]
|
||||
activityId=d7d15086-7d92-470b-924f-df8f497fbac9
|
||||
formfactor=0
|
||||
immutability=1
|
||||
lastScreen=1
|
||||
location=0
|
||||
plugin=org.kde.plasma.folder
|
||||
wallpaperplugin=org.kde.image
|
||||
|
||||
[Containments][89][ConfigDialog]
|
||||
DialogHeight=570
|
||||
DialogWidth=760
|
||||
|
||||
[ScreenMapping]
|
||||
itemsOnDisabledScreens=
|
||||
screenMapping=
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
[Appearance]
|
||||
color_scheme_path=/usr/share/qt6ct/colors/airy.conf
|
||||
custom_palette=false
|
||||
icon_theme=BeautySolar
|
||||
icon_theme=TokyoNight-SE
|
||||
standard_dialogs=default
|
||||
style=kvantum-dark
|
||||
|
||||
[Fonts]
|
||||
fixed="Sans Serif,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
|
||||
general="Sans Serif,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
|
||||
fixed="Jost,10,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular"
|
||||
general="Jost,10,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular"
|
||||
|
||||
[Interface]
|
||||
activate_item_on_single_click=1
|
||||
|
@ -25,7 +25,7 @@ underline_shortcut=0
|
|||
wheel_scroll_lines=3
|
||||
|
||||
[SettingsWindow]
|
||||
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x3\x96\0\0\x3\xeb\0\0\0\0\0\0\0\0\0\0\x3\x96\0\0\x3\xeb\0\0\0\x1\0\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\x3\x96\0\0\x3\xeb)
|
||||
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x4\xe2\0\0\x5s\0\0\0\0\0\0\0\0\0\0\x4\xff\0\0\x5\x9f\0\0\0\0\x2\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x4\xe2\0\0\x5s)
|
||||
|
||||
[Troubleshooting]
|
||||
force_raster_widgets=1
|
||||
|
|