New MPD Module to show MPD status in the shelf.
SVN revision: 33073
This commit is contained in:
commit
6ad3c03937
|
@ -0,0 +1,218 @@
|
||||||
|
Notes on the Free Translation Project
|
||||||
|
*************************************
|
||||||
|
|
||||||
|
Free software is going international! The Free Translation Project
|
||||||
|
is a way to get maintainers of free software, translators, and users all
|
||||||
|
together, so that will gradually become able to speak many languages.
|
||||||
|
A few packages already provide translations for their messages.
|
||||||
|
|
||||||
|
If you found this `ABOUT-NLS' file inside a distribution, you may
|
||||||
|
assume that the distributed package does use GNU `gettext' internally,
|
||||||
|
itself available at your nearest GNU archive site. But you do _not_
|
||||||
|
need to install GNU `gettext' prior to configuring, installing or using
|
||||||
|
this package with messages translated.
|
||||||
|
|
||||||
|
Installers will find here some useful hints. These notes also
|
||||||
|
explain how users should proceed for getting the programs to use the
|
||||||
|
available translations. They tell how people wanting to contribute and
|
||||||
|
work at translations should contact the appropriate team.
|
||||||
|
|
||||||
|
When reporting bugs in the `intl/' directory or bugs which may be
|
||||||
|
related to internationalization, you should tell about the version of
|
||||||
|
`gettext' which is used. The information can be found in the
|
||||||
|
`intl/VERSION' file, in internationalized packages.
|
||||||
|
|
||||||
|
Quick configuration advice
|
||||||
|
==========================
|
||||||
|
|
||||||
|
If you want to exploit the full power of internationalization, you
|
||||||
|
should configure it using
|
||||||
|
|
||||||
|
./configure --with-included-gettext
|
||||||
|
|
||||||
|
to force usage of internationalizing routines provided within this
|
||||||
|
package, despite the existence of internationalizing capabilities in the
|
||||||
|
operating system where this package is being installed. So far, only
|
||||||
|
the `gettext' implementation in the GNU C library version 2 provides as
|
||||||
|
many features (such as locale alias, message inheritance, automatic
|
||||||
|
charset conversion or plural form handling) as the implementation here.
|
||||||
|
It is also not possible to offer this additional functionality on top
|
||||||
|
of a `catgets' implementation. Future versions of GNU `gettext' will
|
||||||
|
very likely convey even more functionality. So it might be a good idea
|
||||||
|
to change to GNU `gettext' as soon as possible.
|
||||||
|
|
||||||
|
So you need _not_ provide this option if you are using GNU libc 2 or
|
||||||
|
you have installed a recent copy of the GNU gettext package with the
|
||||||
|
included `libintl'.
|
||||||
|
|
||||||
|
INSTALL Matters
|
||||||
|
===============
|
||||||
|
|
||||||
|
Some packages are "localizable" when properly installed; the
|
||||||
|
programs they contain can be made to speak your own native language.
|
||||||
|
Most such packages use GNU `gettext'. Other packages have their own
|
||||||
|
ways to internationalization, predating GNU `gettext'.
|
||||||
|
|
||||||
|
By default, this package will be installed to allow translation of
|
||||||
|
messages. It will automatically detect whether the system already
|
||||||
|
provides the GNU `gettext' functions. If not, the GNU `gettext' own
|
||||||
|
library will be used. This library is wholly contained within this
|
||||||
|
package, usually in the `intl/' subdirectory, so prior installation of
|
||||||
|
the GNU `gettext' package is _not_ required. Installers may use
|
||||||
|
special options at configuration time for changing the default
|
||||||
|
behaviour. The commands:
|
||||||
|
|
||||||
|
./configure --with-included-gettext
|
||||||
|
./configure --disable-nls
|
||||||
|
|
||||||
|
will respectively bypass any pre-existing `gettext' to use the
|
||||||
|
internationalizing routines provided within this package, or else,
|
||||||
|
_totally_ disable translation of messages.
|
||||||
|
|
||||||
|
When you already have GNU `gettext' installed on your system and run
|
||||||
|
configure without an option for your new package, `configure' will
|
||||||
|
probably detect the previously built and installed `libintl.a' file and
|
||||||
|
will decide to use this. This might be not what is desirable. You
|
||||||
|
should use the more recent version of the GNU `gettext' library. I.e.
|
||||||
|
if the file `intl/VERSION' shows that the library which comes with this
|
||||||
|
package is more recent, you should use
|
||||||
|
|
||||||
|
./configure --with-included-gettext
|
||||||
|
|
||||||
|
to prevent auto-detection.
|
||||||
|
|
||||||
|
The configuration process will not test for the `catgets' function
|
||||||
|
and therefore it will not be used. The reason is that even an
|
||||||
|
emulation of `gettext' on top of `catgets' could not provide all the
|
||||||
|
extensions of the GNU `gettext' library.
|
||||||
|
|
||||||
|
Internationalized packages have usually many `po/LL.po' files, where
|
||||||
|
LL gives an ISO 639 two-letter code identifying the language. Unless
|
||||||
|
translations have been forbidden at `configure' time by using the
|
||||||
|
`--disable-nls' switch, all available translations are installed
|
||||||
|
together with the package. However, the environment variable `LINGUAS'
|
||||||
|
may be set, prior to configuration, to limit the installed set.
|
||||||
|
`LINGUAS' should then contain a space separated list of two-letter
|
||||||
|
codes, stating which languages are allowed.
|
||||||
|
|
||||||
|
Using This Package
|
||||||
|
==================
|
||||||
|
|
||||||
|
As a user, if your language has been installed for this package, you
|
||||||
|
only have to set the `LANG' environment variable to the appropriate
|
||||||
|
`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
|
||||||
|
and `CC' is an ISO 3166 two-letter country code. For example, let's
|
||||||
|
suppose that you speak German and live in Germany. At the shell
|
||||||
|
prompt, merely execute `setenv LANG de_DE' (in `csh'),
|
||||||
|
`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
|
||||||
|
This can be done from your `.login' or `.profile' file, once and for
|
||||||
|
all.
|
||||||
|
|
||||||
|
You might think that the country code specification is redundant.
|
||||||
|
But in fact, some languages have dialects in different countries. For
|
||||||
|
example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
|
||||||
|
country code serves to distinguish the dialects.
|
||||||
|
|
||||||
|
The locale naming convention of `LL_CC', with `LL' denoting the
|
||||||
|
language and `CC' denoting the country, is the one use on systems based
|
||||||
|
on GNU libc. On other systems, some variations of this scheme are
|
||||||
|
used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
|
||||||
|
locales supported by your system for your country by running the command
|
||||||
|
`locale -a | grep '^LL''.
|
||||||
|
|
||||||
|
Not all programs have translations for all languages. By default, an
|
||||||
|
English message is shown in place of a nonexistent translation. If you
|
||||||
|
understand other languages, you can set up a priority list of languages.
|
||||||
|
This is done through a different environment variable, called
|
||||||
|
`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
|
||||||
|
for the purpose of message handling, but you still need to have `LANG'
|
||||||
|
set to the primary language; this is required by other parts of the
|
||||||
|
system libraries. For example, some Swedish users who would rather
|
||||||
|
read translations in German than English for when Swedish is not
|
||||||
|
available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
|
||||||
|
|
||||||
|
In the `LANGUAGE' environment variable, but not in the `LANG'
|
||||||
|
environment variable, `LL_CC' combinations can be abbreviated as `LL'
|
||||||
|
to denote the language's main dialect. For example, `de' is equivalent
|
||||||
|
to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
|
||||||
|
(Portuguese as spoken in Portugal) in this context.
|
||||||
|
|
||||||
|
Translating Teams
|
||||||
|
=================
|
||||||
|
|
||||||
|
For the Free Translation Project to be a success, we need interested
|
||||||
|
people who like their own language and write it well, and who are also
|
||||||
|
able to synergize with other translators speaking the same language.
|
||||||
|
Each translation team has its own mailing list. The up-to-date list of
|
||||||
|
teams can be found at the Free Translation Project's homepage,
|
||||||
|
`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
|
||||||
|
area.
|
||||||
|
|
||||||
|
If you'd like to volunteer to _work_ at translating messages, you
|
||||||
|
should become a member of the translating team for your own language.
|
||||||
|
The subscribing address is _not_ the same as the list itself, it has
|
||||||
|
`-request' appended. For example, speakers of Swedish can send a
|
||||||
|
message to `sv-request@li.org', having this message body:
|
||||||
|
|
||||||
|
subscribe
|
||||||
|
|
||||||
|
Keep in mind that team members are expected to participate
|
||||||
|
_actively_ in translations, or at solving translational difficulties,
|
||||||
|
rather than merely lurking around. If your team does not exist yet and
|
||||||
|
you want to start one, or if you are unsure about what to do or how to
|
||||||
|
get started, please write to `translation@iro.umontreal.ca' to reach the
|
||||||
|
coordinator for all translator teams.
|
||||||
|
|
||||||
|
The English team is special. It works at improving and uniformizing
|
||||||
|
the terminology in use. Proven linguistic skill are praised more than
|
||||||
|
programming skill, here.
|
||||||
|
|
||||||
|
Available Packages
|
||||||
|
==================
|
||||||
|
|
||||||
|
Languages are not equally supported in all packages. The following
|
||||||
|
matrix shows the current state of internationalization, as of April
|
||||||
|
2005. The matrix shows, in regard of each package, for which languages
|
||||||
|
PO files have been submitted to translation coordination, with a
|
||||||
|
translation percentage of at least 50%.
|
||||||
|
|
||||||
|
Ready PO files en fr ja de bg es fi pl pt ru
|
||||||
|
+-------------------------------+
|
||||||
|
enlightenment | [] [] [] [] [] [] [] [] [] [] |
|
||||||
|
|
||||||
|
|
||||||
|
Some counters in the preceding matrix are higher than the number of
|
||||||
|
visible blocks let us expect. This is because a few extra PO files are
|
||||||
|
used for implementing regional variants of languages, or language
|
||||||
|
dialects.
|
||||||
|
|
||||||
|
For a PO file in the matrix above to be effective, the package to
|
||||||
|
which it applies should also have been internationalized and
|
||||||
|
distributed as such by its maintainer. There might be an observable
|
||||||
|
lag between the mere existence a PO file and its wide availability in a
|
||||||
|
distribution.
|
||||||
|
|
||||||
|
If August 2002 seems to be old, you may fetch a more recent copy of
|
||||||
|
this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
|
||||||
|
matrix with full percentage details can be found at
|
||||||
|
`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
|
||||||
|
|
||||||
|
Using `gettext' in new packages
|
||||||
|
===============================
|
||||||
|
|
||||||
|
If you are writing a freely available program and want to
|
||||||
|
internationalize it you are welcome to use GNU `gettext' in your
|
||||||
|
package. Of course you have to respect the GNU Library General Public
|
||||||
|
License which covers the use of the GNU `gettext' library. This means
|
||||||
|
in particular that even non-free programs can use `libintl' as a shared
|
||||||
|
library, whereas only free software can use `libintl' as a static
|
||||||
|
library or use modified versions of `libintl'.
|
||||||
|
|
||||||
|
Once the sources are changed appropriately and the setup can handle
|
||||||
|
to use of `gettext' the only thing missing are the translations. The
|
||||||
|
Free Translation Project is also available for packages which are not
|
||||||
|
developed inside the GNU project. Therefore the information given above
|
||||||
|
applies also for every other Free Software Project. Contact
|
||||||
|
`translation@iro.umontreal.ca' to make the `.pot' files available to
|
||||||
|
the translation teams.
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
Copyright (C) 2007 Sthithaprajna Garapaty and various contributors (see AUTHORS)
|
||||||
|
|
||||||
|
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 of the Software and its Copyright notices. In addition publicly
|
||||||
|
documented acknowledgment must be given that this software has been used if no
|
||||||
|
source code of this software is made available publicly. This includes
|
||||||
|
acknowledgments in either Copyright notices, Manuals, Publicity and Marketing
|
||||||
|
documents or any documentation provided with any product containing this
|
||||||
|
software. This License does not apply to any software that links to the
|
||||||
|
libraries provided by this software (statically or dynamically), but only to
|
||||||
|
the software provided.
|
||||||
|
|
||||||
|
Please see the COPYING.PLAIN for a plain-english explanation of this notice
|
||||||
|
and it's intent.
|
||||||
|
|
||||||
|
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 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,2 @@
|
||||||
|
09/06/2005 Christopher Michael <devilhorns@comcast.net>
|
||||||
|
* Added Support For Virtual Desktops
|
|
@ -0,0 +1,229 @@
|
||||||
|
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
|
||||||
|
Foundation, Inc.
|
||||||
|
|
||||||
|
This file is free documentation; the Free Software Foundation gives
|
||||||
|
unlimited permission to copy, distribute and modify it.
|
||||||
|
|
||||||
|
Basic Installation
|
||||||
|
==================
|
||||||
|
|
||||||
|
These are generic installation instructions.
|
||||||
|
|
||||||
|
The `configure' shell script attempts to guess correct values for
|
||||||
|
various system-dependent variables used during compilation. It uses
|
||||||
|
those values to create a `Makefile' in each directory of the package.
|
||||||
|
It may also create one or more `.h' files containing system-dependent
|
||||||
|
definitions. Finally, it creates a shell script `config.status' that
|
||||||
|
you can run in the future to recreate the current configuration, and a
|
||||||
|
file `config.log' containing compiler output (useful mainly for
|
||||||
|
debugging `configure').
|
||||||
|
|
||||||
|
It can also use an optional file (typically called `config.cache'
|
||||||
|
and enabled with `--cache-file=config.cache' or simply `-C') that saves
|
||||||
|
the results of its tests to speed up reconfiguring. (Caching is
|
||||||
|
disabled by default to prevent problems with accidental use of stale
|
||||||
|
cache files.)
|
||||||
|
|
||||||
|
If you need to do unusual things to compile the package, please try
|
||||||
|
to figure out how `configure' could check whether to do them, and mail
|
||||||
|
diffs or instructions to the address given in the `README' so they can
|
||||||
|
be considered for the next release. If you are using the cache, and at
|
||||||
|
some point `config.cache' contains results you don't want to keep, you
|
||||||
|
may remove or edit it.
|
||||||
|
|
||||||
|
The file `configure.ac' (or `configure.in') is used to create
|
||||||
|
`configure' by a program called `autoconf'. You only need
|
||||||
|
`configure.ac' if you want to change it or regenerate `configure' using
|
||||||
|
a newer version of `autoconf'.
|
||||||
|
|
||||||
|
The simplest way to compile this package is:
|
||||||
|
|
||||||
|
1. `cd' to the directory containing the package's source code and type
|
||||||
|
`./configure' to configure the package for your system. If you're
|
||||||
|
using `csh' on an old version of System V, you might need to type
|
||||||
|
`sh ./configure' instead to prevent `csh' from trying to execute
|
||||||
|
`configure' itself.
|
||||||
|
|
||||||
|
Running `configure' takes awhile. While running, it prints some
|
||||||
|
messages telling which features it is checking for.
|
||||||
|
|
||||||
|
2. Type `make' to compile the package.
|
||||||
|
|
||||||
|
3. Optionally, type `make check' to run any self-tests that come with
|
||||||
|
the package.
|
||||||
|
|
||||||
|
4. Type `make install' to install the programs and any data files and
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
5. You can remove the program binaries and object files from the
|
||||||
|
source code directory by typing `make clean'. To also remove the
|
||||||
|
files that `configure' created (so you can compile the package for
|
||||||
|
a different kind of computer), type `make distclean'. There is
|
||||||
|
also a `make maintainer-clean' target, but that is intended mainly
|
||||||
|
for the package's developers. If you use it, you may have to get
|
||||||
|
all sorts of other programs in order to regenerate files that came
|
||||||
|
with the distribution.
|
||||||
|
|
||||||
|
Compilers and Options
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Some systems require unusual options for compilation or linking that
|
||||||
|
the `configure' script does not know about. Run `./configure --help'
|
||||||
|
for details on some of the pertinent environment variables.
|
||||||
|
|
||||||
|
You can give `configure' initial values for configuration parameters
|
||||||
|
by setting variables in the command line or in the environment. Here
|
||||||
|
is an example:
|
||||||
|
|
||||||
|
./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
|
||||||
|
|
||||||
|
*Note Defining Variables::, for more details.
|
||||||
|
|
||||||
|
Compiling For Multiple Architectures
|
||||||
|
====================================
|
||||||
|
|
||||||
|
You can compile the package for more than one kind of computer at the
|
||||||
|
same time, by placing the object files for each architecture in their
|
||||||
|
own directory. To do this, you must use a version of `make' that
|
||||||
|
supports the `VPATH' variable, such as GNU `make'. `cd' to the
|
||||||
|
directory where you want the object files and executables to go and run
|
||||||
|
the `configure' script. `configure' automatically checks for the
|
||||||
|
source code in the directory that `configure' is in and in `..'.
|
||||||
|
|
||||||
|
If you have to use a `make' that does not support the `VPATH'
|
||||||
|
variable, you have to compile the package for one architecture at a
|
||||||
|
time in the source code directory. After you have installed the
|
||||||
|
package for one architecture, use `make distclean' before reconfiguring
|
||||||
|
for another architecture.
|
||||||
|
|
||||||
|
Installation Names
|
||||||
|
==================
|
||||||
|
|
||||||
|
By default, `make install' will install the package's files in
|
||||||
|
`/usr/local/bin', `/usr/local/man', etc. You can specify an
|
||||||
|
installation prefix other than `/usr/local' by giving `configure' the
|
||||||
|
option `--prefix=PATH'.
|
||||||
|
|
||||||
|
You can specify separate installation prefixes for
|
||||||
|
architecture-specific files and architecture-independent files. If you
|
||||||
|
give `configure' the option `--exec-prefix=PATH', the package will use
|
||||||
|
PATH as the prefix for installing programs and libraries.
|
||||||
|
Documentation and other data files will still use the regular prefix.
|
||||||
|
|
||||||
|
In addition, if you use an unusual directory layout you can give
|
||||||
|
options like `--bindir=PATH' to specify different values for particular
|
||||||
|
kinds of files. Run `configure --help' for a list of the directories
|
||||||
|
you can set and what kinds of files go in them.
|
||||||
|
|
||||||
|
If the package supports it, you can cause programs to be installed
|
||||||
|
with an extra prefix or suffix on their names by giving `configure' the
|
||||||
|
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
|
||||||
|
|
||||||
|
Optional Features
|
||||||
|
=================
|
||||||
|
|
||||||
|
Some packages pay attention to `--enable-FEATURE' options to
|
||||||
|
`configure', where FEATURE indicates an optional part of the package.
|
||||||
|
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
||||||
|
is something like `gnu-as' or `x' (for the X Window System). The
|
||||||
|
`README' should mention any `--enable-' and `--with-' options that the
|
||||||
|
package recognizes.
|
||||||
|
|
||||||
|
For packages that use the X Window System, `configure' can usually
|
||||||
|
find the X include and library files automatically, but if it doesn't,
|
||||||
|
you can use the `configure' options `--x-includes=DIR' and
|
||||||
|
`--x-libraries=DIR' to specify their locations.
|
||||||
|
|
||||||
|
Specifying the System Type
|
||||||
|
==========================
|
||||||
|
|
||||||
|
There may be some features `configure' cannot figure out
|
||||||
|
automatically, but needs to determine by the type of machine the package
|
||||||
|
will run on. Usually, assuming the package is built to be run on the
|
||||||
|
_same_ architectures, `configure' can figure that out, but if it prints
|
||||||
|
a message saying it cannot guess the machine type, give it the
|
||||||
|
`--build=TYPE' option. TYPE can either be a short name for the system
|
||||||
|
type, such as `sun4', or a canonical name which has the form:
|
||||||
|
|
||||||
|
CPU-COMPANY-SYSTEM
|
||||||
|
|
||||||
|
where SYSTEM can have one of these forms:
|
||||||
|
|
||||||
|
OS KERNEL-OS
|
||||||
|
|
||||||
|
See the file `config.sub' for the possible values of each field. If
|
||||||
|
`config.sub' isn't included in this package, then this package doesn't
|
||||||
|
need to know the machine type.
|
||||||
|
|
||||||
|
If you are _building_ compiler tools for cross-compiling, you should
|
||||||
|
use the `--target=TYPE' option to select the type of system they will
|
||||||
|
produce code for.
|
||||||
|
|
||||||
|
If you want to _use_ a cross compiler, that generates code for a
|
||||||
|
platform different from the build platform, you should specify the
|
||||||
|
"host" platform (i.e., that on which the generated programs will
|
||||||
|
eventually be run) with `--host=TYPE'.
|
||||||
|
|
||||||
|
Sharing Defaults
|
||||||
|
================
|
||||||
|
|
||||||
|
If you want to set default values for `configure' scripts to share,
|
||||||
|
you can create a site shell script called `config.site' that gives
|
||||||
|
default values for variables like `CC', `cache_file', and `prefix'.
|
||||||
|
`configure' looks for `PREFIX/share/config.site' if it exists, then
|
||||||
|
`PREFIX/etc/config.site' if it exists. Or, you can set the
|
||||||
|
`CONFIG_SITE' environment variable to the location of the site script.
|
||||||
|
A warning: not all `configure' scripts look for a site script.
|
||||||
|
|
||||||
|
Defining Variables
|
||||||
|
==================
|
||||||
|
|
||||||
|
Variables not defined in a site shell script can be set in the
|
||||||
|
environment passed to `configure'. However, some packages may run
|
||||||
|
configure again during the build, and the customized values of these
|
||||||
|
variables may be lost. In order to avoid this problem, you should set
|
||||||
|
them in the `configure' command line, using `VAR=value'. For example:
|
||||||
|
|
||||||
|
./configure CC=/usr/local2/bin/gcc
|
||||||
|
|
||||||
|
will cause the specified gcc to be used as the C compiler (unless it is
|
||||||
|
overridden in the site shell script).
|
||||||
|
|
||||||
|
`configure' Invocation
|
||||||
|
======================
|
||||||
|
|
||||||
|
`configure' recognizes the following options to control how it
|
||||||
|
operates.
|
||||||
|
|
||||||
|
`--help'
|
||||||
|
`-h'
|
||||||
|
Print a summary of the options to `configure', and exit.
|
||||||
|
|
||||||
|
`--version'
|
||||||
|
`-V'
|
||||||
|
Print the version of Autoconf used to generate the `configure'
|
||||||
|
script, and exit.
|
||||||
|
|
||||||
|
`--cache-file=FILE'
|
||||||
|
Enable the cache: use and save the results of the tests in FILE,
|
||||||
|
traditionally `config.cache'. FILE defaults to `/dev/null' to
|
||||||
|
disable caching.
|
||||||
|
|
||||||
|
`--config-cache'
|
||||||
|
`-C'
|
||||||
|
Alias for `--cache-file=config.cache'.
|
||||||
|
|
||||||
|
`--quiet'
|
||||||
|
`--silent'
|
||||||
|
`-q'
|
||||||
|
Do not print messages saying which checks are being made. To
|
||||||
|
suppress all normal output, redirect it to `/dev/null' (any error
|
||||||
|
messages will still be shown).
|
||||||
|
|
||||||
|
`--srcdir=DIR'
|
||||||
|
Look for the package's source code in directory DIR. Usually
|
||||||
|
`configure' can determine that directory automatically.
|
||||||
|
|
||||||
|
`configure' also accepts some other, not widely useful, options. Run
|
||||||
|
`configure --help' for more details.
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
MAINTAINERCLEANFILES = Makefile.in
|
||||||
|
|
||||||
|
SUBDIRS =
|
||||||
|
|
||||||
|
EDJE_CC = @edje_cc@
|
||||||
|
EDJE_FLAGS = -v \
|
||||||
|
-id $(top_srcdir) \
|
||||||
|
-fd $(top_srcdir)
|
||||||
|
|
||||||
|
filesdir = $(datadir)
|
||||||
|
files_DATA = e-module-mpdule.edj \
|
||||||
|
module.desktop \
|
||||||
|
mpdule.edj
|
||||||
|
|
||||||
|
EXTRA_DIST = $(files_DATA) \
|
||||||
|
e_modules-mpdule.spec \
|
||||||
|
mpdule.edc \
|
||||||
|
VeraMono.ttf
|
||||||
|
|
||||||
|
CONFIG_CLEAN_FILES = e_modules-mpdule.spec mpdule.edj
|
||||||
|
|
||||||
|
# the module .so file
|
||||||
|
INCLUDES = -I. \
|
||||||
|
-I$(top_srcdir) \
|
||||||
|
-I$(includedir) \
|
||||||
|
@e_cflags@
|
||||||
|
pkgdir = $(datadir)/$(MODULE_ARCH)
|
||||||
|
|
||||||
|
pkg_LTLIBRARIES = module.la
|
||||||
|
module_la_SOURCES = e_mod_main.c \
|
||||||
|
e_mod_main.h \
|
||||||
|
e_mod_config.c
|
||||||
|
module_la_LIBADD = @e_libs@
|
||||||
|
module_la_LDFLAGS = -module -avoid-version
|
||||||
|
module_la_DEPENDENCIES = $(top_builddir)/config.h $(top_builddir)/mpdule.edj
|
||||||
|
|
||||||
|
%.edj: %.edc
|
||||||
|
$(EDJE_CC) $(EDJE_FLAGS) $< $@
|
||||||
|
|
||||||
|
clean-local:
|
||||||
|
rm -rf *.edj *~
|
|
@ -0,0 +1,5 @@
|
||||||
|
Simple MPD module
|
||||||
|
Load it into your shelf. Set it to: Able to be Resized, and resize to a good size for best experience.
|
||||||
|
|
||||||
|
To see more than just the artist and title, edit the theme (See comments in the theme for more info).
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,17 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
rm -rf autom4te.cache
|
||||||
|
rm -f aclocal.m4 ltmain.sh
|
||||||
|
|
||||||
|
touch README
|
||||||
|
|
||||||
|
echo "Running autopoint..." ; autopoint -f || :
|
||||||
|
echo "Running aclocal..." ; aclocal -I m4 $ACLOCAL_FLAGS || exit 1
|
||||||
|
echo "Running autoheader..." ; autoheader || exit 1
|
||||||
|
echo "Running autoconf..." ; autoconf || exit 1
|
||||||
|
echo "Running libtoolize..." ; (libtoolize --copy --automake || glibtoolize --automake) || exit 1
|
||||||
|
echo "Running automake..." ; automake --add-missing --copy --gnu || exit 1
|
||||||
|
|
||||||
|
if [ -z "$NOCONFIGURE" ]; then
|
||||||
|
./configure "$@"
|
||||||
|
fi
|
|
@ -0,0 +1,105 @@
|
||||||
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
|
# get rid of that stupid cache mechanism
|
||||||
|
rm -f config.cache
|
||||||
|
|
||||||
|
AC_INIT(configure.in)
|
||||||
|
AC_CANONICAL_BUILD
|
||||||
|
AC_CANONICAL_HOST
|
||||||
|
|
||||||
|
AM_INIT_AUTOMAKE(mpdule, 0.0.1)
|
||||||
|
AM_CONFIG_HEADER(config.h)
|
||||||
|
AC_ISC_POSIX
|
||||||
|
AC_PROG_CC
|
||||||
|
AM_PROG_CC_STDC
|
||||||
|
AC_HEADER_STDC
|
||||||
|
AC_HEADER_TIME
|
||||||
|
AC_CHECK_HEADERS(sys/time.h libmpd/libmpdclient.h)
|
||||||
|
AC_C_CONST
|
||||||
|
AM_ENABLE_SHARED
|
||||||
|
AM_PROG_LIBTOOL
|
||||||
|
|
||||||
|
ALL_LINGUAS=""
|
||||||
|
AC_SUBST(ALL_LINGUAS)
|
||||||
|
|
||||||
|
AM_GNU_GETTEXT([external])
|
||||||
|
AM_GNU_GETTEXT_VERSION(0.14)
|
||||||
|
|
||||||
|
MODULE_ARCH="$host_os-$host_cpu"
|
||||||
|
AC_SUBST(MODULE_ARCH)
|
||||||
|
AC_DEFINE_UNQUOTED(MODULE_ARCH, "$MODULE_ARCH", "Module architecture")
|
||||||
|
|
||||||
|
CPPFLAGS="`enlightenment-config --cflags` `pkg-config libmpd --cflags`"
|
||||||
|
LDFLAGS="`enlightenment-config --libs` `pkg-config libmpd --libs`"
|
||||||
|
|
||||||
|
dnl Set PACKAGE_DATA_DIR in config.h.
|
||||||
|
if test "x${prefix}" = "xNONE"; then
|
||||||
|
AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${HOME}/.e/e/modules/${PACKAGE}", "Package installed data destination")
|
||||||
|
datadir="${HOME}/.e/e/modules/${PACKAGE}"
|
||||||
|
else
|
||||||
|
AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${libdir}/enlightenment/modules/${PACKAGE}", "Package installed data destination")
|
||||||
|
datadir="${libdir}/enlightenment/modules/${PACKAGE}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_PREFIX_DEFAULT(${HOME}/.e/e)
|
||||||
|
if test "x$prefix" = "xNONE"; then
|
||||||
|
datarootdir=${ac_default_prefix}
|
||||||
|
else
|
||||||
|
datarootdir=${prefix}/share
|
||||||
|
fi
|
||||||
|
localedir=${datarootdir}/locale
|
||||||
|
AC_SUBST(LOCALEDIR, "${localedir}")
|
||||||
|
AC_DEFINE_UNQUOTED(LOCALEDIR, "${localedir}", [Module Locale Directory])
|
||||||
|
|
||||||
|
#AC_CHECK_LIB(dl, dlopen, dlopen_libs=-ldl)
|
||||||
|
#AC_SUBST(dlopen_libs)
|
||||||
|
|
||||||
|
AC_ARG_WITH(edje-config,
|
||||||
|
[ --with-edje-config=EDJE_CONFIG use edje-config specified ],
|
||||||
|
[
|
||||||
|
EDJE_CONFIG=$withval;
|
||||||
|
echo "using "$EDJE_CONFIG" for edje-config";
|
||||||
|
/
|
||||||
|
],[
|
||||||
|
PROG="edje-config";
|
||||||
|
AC_PATH_PROG(EDJE_CONFIG, $PROG, "", $PATH)
|
||||||
|
])
|
||||||
|
edje_cflags=`$EDJE_CONFIG --cflags`
|
||||||
|
edje_libs=`$EDJE_CONFIG --libs`
|
||||||
|
AC_SUBST(edje_cflags)
|
||||||
|
AC_SUBST(edje_libs)
|
||||||
|
|
||||||
|
edje_cc="`$EDJE_CONFIG --prefix`/bin/edje_cc"
|
||||||
|
AC_ARG_WITH(edje-cc,
|
||||||
|
[ --with-edje-cc=PATH specify a specific path to edje_cc],
|
||||||
|
[
|
||||||
|
v=$withval;
|
||||||
|
edje_cc=$v
|
||||||
|
echo " Enlightenment edje_cc explicitly set to "$edje_cc;
|
||||||
|
],[
|
||||||
|
edje_cc="`$EDJE_CONFIG --prefix`/bin/edje_cc"
|
||||||
|
])
|
||||||
|
AC_SUBST(edje_cc)
|
||||||
|
|
||||||
|
AC_ARG_WITH(enlightenment-config,
|
||||||
|
[ --with-enlightenment-config=E_CONFIG use enlightenment-config specified ],
|
||||||
|
[
|
||||||
|
E_CONFIG=$withval;
|
||||||
|
echo "using "$E_CONFIG" for enlightenment-config";
|
||||||
|
],[
|
||||||
|
PROG="enlightenment-config";
|
||||||
|
AC_PATH_PROG(E_CONFIG, $PROG, "", $PATH)
|
||||||
|
])
|
||||||
|
e_cflags=`$E_CONFIG --cflags`
|
||||||
|
e_libs=`$E_CONFIG --libs`
|
||||||
|
e_modules=`$E_CONFIG --module-dir`
|
||||||
|
AC_SUBST(e_cflags)
|
||||||
|
AC_SUBST(e_libs)
|
||||||
|
AC_SUBST(e_modules)
|
||||||
|
|
||||||
|
AC_OUTPUT([
|
||||||
|
Makefile
|
||||||
|
e_modules-mpdule.spec
|
||||||
|
],[
|
||||||
|
])
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,136 @@
|
||||||
|
#include <e.h>
|
||||||
|
#include "e_mod_main.h"
|
||||||
|
|
||||||
|
struct _E_Config_Dialog_Data
|
||||||
|
{
|
||||||
|
int poll_time;
|
||||||
|
char *hostname;
|
||||||
|
char *port;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Protos */
|
||||||
|
static void *_create_data (E_Config_Dialog * cfd);
|
||||||
|
static void _free_data (E_Config_Dialog * cfd, E_Config_Dialog_Data * cfdata);
|
||||||
|
static Evas_Object *_basic_create_widgets (E_Config_Dialog * cfd, Evas * evas,
|
||||||
|
E_Config_Dialog_Data * cfdata);
|
||||||
|
static int _basic_apply_data (E_Config_Dialog * cfd,
|
||||||
|
E_Config_Dialog_Data * cfdata);
|
||||||
|
static void onTimeCheckChange (void *data, Evas_Object * obj);
|
||||||
|
static void onDateCheckChange (void *data, Evas_Object * obj);
|
||||||
|
|
||||||
|
void
|
||||||
|
_config_mpdule_module (Config_Item * ci)
|
||||||
|
{
|
||||||
|
E_Config_Dialog *cfd;
|
||||||
|
E_Config_Dialog_View *v;
|
||||||
|
E_Container *con;
|
||||||
|
char buf[4096];
|
||||||
|
|
||||||
|
v = E_NEW (E_Config_Dialog_View, 1);
|
||||||
|
|
||||||
|
v->create_cfdata = _create_data;
|
||||||
|
v->free_cfdata = _free_data;
|
||||||
|
v->basic.apply_cfdata = _basic_apply_data;
|
||||||
|
v->basic.create_widgets = _basic_create_widgets;
|
||||||
|
|
||||||
|
snprintf (buf, sizeof (buf), "%s/e-module-mpdule.edj",
|
||||||
|
e_module_dir_get (mpdule_config->module));
|
||||||
|
con = e_container_current_get (e_manager_current_get ());
|
||||||
|
cfd = e_config_dialog_new (con, D_ ("MPDule Configuration"), "MPDule", "_e_modules_mpdule_config_dialog", buf, 0, v, ci);
|
||||||
|
mpdule_config->config_dialog = cfd;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_fill_data (Config_Item * ci, E_Config_Dialog_Data * cfdata)
|
||||||
|
{
|
||||||
|
char buf[128];
|
||||||
|
|
||||||
|
cfdata->poll_time = ci->poll_time;
|
||||||
|
cfdata->hostname = strdup(ci->hostname);
|
||||||
|
snprintf(buf, sizeof(buf), "%d", ci->port);
|
||||||
|
cfdata->port = strdup(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *
|
||||||
|
_create_data (E_Config_Dialog * cfd)
|
||||||
|
{
|
||||||
|
E_Config_Dialog_Data *cfdata;
|
||||||
|
Config_Item *ci;
|
||||||
|
|
||||||
|
ci = cfd->data;
|
||||||
|
cfdata = E_NEW (E_Config_Dialog_Data, 1);
|
||||||
|
|
||||||
|
_fill_data (ci, cfdata);
|
||||||
|
return cfdata;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_free_data (E_Config_Dialog * cfd, E_Config_Dialog_Data * cfdata)
|
||||||
|
{
|
||||||
|
if (!mpdule_config)
|
||||||
|
return;
|
||||||
|
mpdule_config->config_dialog = NULL;
|
||||||
|
free(cfdata->hostname);
|
||||||
|
E_FREE(cfdata);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Evas_Object *
|
||||||
|
_basic_create_widgets (E_Config_Dialog * cfd, Evas * evas,
|
||||||
|
E_Config_Dialog_Data * cfdata)
|
||||||
|
{
|
||||||
|
Evas_Object *o, *of, *ob, *time_entry, *time_check, *hostname_entry, *port_entry;
|
||||||
|
E_Radio_Group *rg;
|
||||||
|
|
||||||
|
o = e_widget_list_add (evas, 0, 0);
|
||||||
|
|
||||||
|
of = e_widget_frametable_add (evas, D_ ("Configuration"), 1);
|
||||||
|
ob = e_widget_label_add (evas, D_ ("Poll Time:"));
|
||||||
|
e_widget_frametable_object_append (of, ob, 0, 0, 1, 1, 1, 0, 1, 0);
|
||||||
|
ob = e_widget_slider_add (evas, 1, 0, D_ ("%1.0f seconds"), 1, 60, 1, 0, NULL, &(cfdata->poll_time), 100);
|
||||||
|
e_widget_frametable_object_append (of, ob, 0, 1, 1, 1, 1, 0, 1, 0);
|
||||||
|
ob = e_widget_label_add (evas, D_ ("Hostname:"));
|
||||||
|
e_widget_frametable_object_append (of, ob, 0, 2, 1, 1, 1, 0, 1, 0);
|
||||||
|
hostname_entry = e_widget_entry_add (evas, &cfdata->hostname, NULL, NULL, NULL);
|
||||||
|
e_widget_min_size_set (hostname_entry, 150, 1);
|
||||||
|
e_widget_frametable_object_append (of, hostname_entry, 0, 3, 1, 1, 1, 0, 1, 0);
|
||||||
|
ob = e_widget_label_add (evas, D_ ("Port:"));
|
||||||
|
e_widget_frametable_object_append (of, ob, 0, 4, 1, 1, 1, 0, 1, 0);
|
||||||
|
port_entry = e_widget_entry_add (evas, &cfdata->port, NULL, NULL, NULL);
|
||||||
|
e_widget_min_size_set (hostname_entry, 150, 1);
|
||||||
|
e_widget_frametable_object_append (of, port_entry, 0, 5, 1, 1, 1, 0, 1, 0);
|
||||||
|
e_widget_list_object_append (o, of, 1, 1, 0.5);
|
||||||
|
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_basic_apply_data (E_Config_Dialog * cfd, E_Config_Dialog_Data * cfdata)
|
||||||
|
{
|
||||||
|
Config_Item *ci;
|
||||||
|
|
||||||
|
ci = cfd->data;
|
||||||
|
ci->poll_time = cfdata->poll_time;
|
||||||
|
if (ci->hostname)
|
||||||
|
evas_stringshare_del(ci->hostname);
|
||||||
|
ci->hostname = evas_stringshare_add(cfdata->hostname);
|
||||||
|
ci->port = atoi(cfdata->port);
|
||||||
|
e_config_save_queue ();
|
||||||
|
_mpdule_config_updated (ci);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
onTimeCheckChange (void *data, Evas_Object * obj)
|
||||||
|
{
|
||||||
|
int checked = e_widget_check_checked_get (obj);
|
||||||
|
|
||||||
|
e_widget_disabled_set (data, !checked);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
onDateCheckChange (void *data, Evas_Object * obj)
|
||||||
|
{
|
||||||
|
int checked = e_widget_check_checked_get (obj);
|
||||||
|
|
||||||
|
e_widget_disabled_set (data, !checked);
|
||||||
|
}
|
|
@ -0,0 +1,557 @@
|
||||||
|
#include <e.h>
|
||||||
|
#include "e_mod_main.h"
|
||||||
|
#if TIME_WITH_SYS_TIME
|
||||||
|
# include <sys/time.h>
|
||||||
|
# include <time.h>
|
||||||
|
#else
|
||||||
|
# if HAVE_SYS_TIME_H
|
||||||
|
# include <sys/time.h>
|
||||||
|
# else
|
||||||
|
# include <time.h>
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#include <libmpd/libmpdclient.h>
|
||||||
|
|
||||||
|
#define MAX_SONG_LENGTH 255
|
||||||
|
|
||||||
|
/* Func Proto Requirements for Gadcon */
|
||||||
|
static E_Gadcon_Client *_gc_init (E_Gadcon * gc, const char *name,
|
||||||
|
const char *id, const char *style);
|
||||||
|
static void _gc_shutdown (E_Gadcon_Client * gcc);
|
||||||
|
static void _gc_orient (E_Gadcon_Client * gcc);
|
||||||
|
static char *_gc_label (void);
|
||||||
|
static Evas_Object *_gc_icon (Evas * evas);
|
||||||
|
static const char *_gc_id_new(void);
|
||||||
|
|
||||||
|
/* Module Protos */
|
||||||
|
static void _mpdule_cb_mouse_down (void *data, Evas * e, Evas_Object * obj,
|
||||||
|
void *event_info);
|
||||||
|
static void _mpdule_menu_cb_configure (void *data, E_Menu * m,
|
||||||
|
E_Menu_Item * mi);
|
||||||
|
static void _mpdule_menu_cb_post (void *data, E_Menu * m);
|
||||||
|
static int _mpdule_cb_check (void *data);
|
||||||
|
static Config_Item *_mpdule_config_item_get (const char *id);
|
||||||
|
|
||||||
|
static E_Config_DD *conf_edd = NULL;
|
||||||
|
static E_Config_DD *conf_item_edd = NULL;
|
||||||
|
|
||||||
|
Config *mpdule_config = NULL;
|
||||||
|
|
||||||
|
/* Define the class and gadcon functions this module provides */
|
||||||
|
static const E_Gadcon_Client_Class _gc_class = {
|
||||||
|
GADCON_CLIENT_CLASS_VERSION,
|
||||||
|
"mpdule", {_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, NULL},
|
||||||
|
E_GADCON_CLIENT_STYLE_PLAIN
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct _Instance Instance;
|
||||||
|
struct _Instance
|
||||||
|
{
|
||||||
|
E_Gadcon_Client *gcc;
|
||||||
|
Evas_Object *mpdule;
|
||||||
|
mpd_Connection *mpd;
|
||||||
|
Ecore_Timer *update_timer;
|
||||||
|
Config_Item *ci;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static void _mpdule_connect (Instance * inst);
|
||||||
|
static void _mpdule_disconnect (Instance * inst);
|
||||||
|
static void _mpdule_update_song (Instance * inst);
|
||||||
|
static void _mpdule_update_song_cb (void *data);
|
||||||
|
|
||||||
|
static E_Gadcon_Client *
|
||||||
|
_gc_init (E_Gadcon * gc, const char *name, const char *id, const char *style)
|
||||||
|
{
|
||||||
|
Evas_Object *o;
|
||||||
|
E_Gadcon_Client *gcc;
|
||||||
|
Instance *inst;
|
||||||
|
char buf[4096];
|
||||||
|
|
||||||
|
inst = E_NEW (Instance, 1);
|
||||||
|
|
||||||
|
inst->ci = _mpdule_config_item_get (id);
|
||||||
|
if (!inst->ci->id)
|
||||||
|
inst->ci->id = evas_stringshare_add (id);
|
||||||
|
|
||||||
|
o = edje_object_add (gc->evas);
|
||||||
|
snprintf (buf, sizeof (buf), "%s/mpdule.edj",
|
||||||
|
e_module_dir_get (mpdule_config->module));
|
||||||
|
if (!e_theme_edje_object_set
|
||||||
|
(o, "base/theme/modules/mpdule", "modules/mpdule/main"))
|
||||||
|
edje_object_file_set (o, buf, "modules/mpdule/main");
|
||||||
|
evas_object_show (o);
|
||||||
|
|
||||||
|
gcc = e_gadcon_client_new (gc, name, id, style, o);
|
||||||
|
gcc->data = inst;
|
||||||
|
inst->gcc = gcc;
|
||||||
|
inst->mpdule = o;
|
||||||
|
|
||||||
|
evas_object_event_callback_add (o, EVAS_CALLBACK_MOUSE_DOWN,
|
||||||
|
_mpdule_cb_mouse_down, inst);
|
||||||
|
_mpdule_connect(inst);
|
||||||
|
_mpdule_update_song(inst);
|
||||||
|
inst->update_timer = ecore_timer_add((double)inst->ci->poll_time,
|
||||||
|
_mpdule_update_song_cb, inst);
|
||||||
|
|
||||||
|
|
||||||
|
mpdule_config->instances =
|
||||||
|
evas_list_append (mpdule_config->instances, inst);
|
||||||
|
return gcc;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_gc_shutdown (E_Gadcon_Client * gcc)
|
||||||
|
{
|
||||||
|
Instance *inst;
|
||||||
|
|
||||||
|
inst = gcc->data;
|
||||||
|
if (inst->update_timer)
|
||||||
|
ecore_timer_del(inst->update_timer);
|
||||||
|
_mpdule_disconnect(inst);
|
||||||
|
mpdule_config->instances =
|
||||||
|
evas_list_remove (mpdule_config->instances, inst);
|
||||||
|
|
||||||
|
evas_object_event_callback_del (inst->mpdule, EVAS_CALLBACK_MOUSE_DOWN,
|
||||||
|
_mpdule_cb_mouse_down);
|
||||||
|
|
||||||
|
evas_object_del (inst->mpdule);
|
||||||
|
free (inst);
|
||||||
|
inst = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_gc_orient (E_Gadcon_Client * gcc)
|
||||||
|
{
|
||||||
|
Instance *inst;
|
||||||
|
Evas_Coord mw, mh;
|
||||||
|
|
||||||
|
inst = gcc->data;
|
||||||
|
edje_object_size_min_calc (inst->mpdule, &mw, &mh);
|
||||||
|
e_gadcon_client_min_size_set (gcc, mw, mh);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
_gc_label (void)
|
||||||
|
{
|
||||||
|
return D_ ("MPDule");
|
||||||
|
}
|
||||||
|
|
||||||
|
static Evas_Object *
|
||||||
|
_gc_icon (Evas * evas)
|
||||||
|
{
|
||||||
|
Evas_Object *o;
|
||||||
|
char buf[4096];
|
||||||
|
|
||||||
|
o = edje_object_add (evas);
|
||||||
|
snprintf (buf, sizeof (buf), "%s/e-module-mpdule.edj",
|
||||||
|
e_module_dir_get (mpdule_config->module));
|
||||||
|
edje_object_file_set (o, buf, "icon");
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
_gc_id_new(void)
|
||||||
|
{
|
||||||
|
Config_Item *ci;
|
||||||
|
|
||||||
|
ci = _mpdule_config_item_get(NULL);
|
||||||
|
return ci->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_mpdule_cb_mouse_down (void *data, Evas * e, Evas_Object * obj,
|
||||||
|
void *event_info)
|
||||||
|
{
|
||||||
|
Instance *inst;
|
||||||
|
Evas_Event_Mouse_Down *ev;
|
||||||
|
|
||||||
|
inst = data;
|
||||||
|
ev = event_info;
|
||||||
|
if ((ev->button == 3) && (!mpdule_config->menu))
|
||||||
|
{
|
||||||
|
E_Menu *mn;
|
||||||
|
E_Menu_Item *mi;
|
||||||
|
int x, y, w, h;
|
||||||
|
|
||||||
|
mn = e_menu_new ();
|
||||||
|
e_menu_post_deactivate_callback_set (mn, _mpdule_menu_cb_post, inst);
|
||||||
|
mpdule_config->menu = mn;
|
||||||
|
|
||||||
|
mi = e_menu_item_new (mn);
|
||||||
|
e_menu_item_label_set (mi, D_ ("Configuration"));
|
||||||
|
e_util_menu_item_edje_icon_set (mi, "enlightenment/configuration");
|
||||||
|
e_menu_item_callback_set (mi, _mpdule_menu_cb_configure, inst);
|
||||||
|
|
||||||
|
mi = e_menu_item_new (mn);
|
||||||
|
e_menu_item_separator_set (mi, 1);
|
||||||
|
|
||||||
|
e_gadcon_client_util_menu_items_append (inst->gcc, mn, 0);
|
||||||
|
e_gadcon_canvas_zone_geometry_get (inst->gcc->gadcon, &x, &y, &w, &h);
|
||||||
|
e_menu_activate_mouse (mn,
|
||||||
|
e_util_zone_current_get (e_manager_current_get
|
||||||
|
()), x + ev->output.x,
|
||||||
|
y + ev->output.y, 1, 1,
|
||||||
|
E_MENU_POP_DIRECTION_DOWN, ev->timestamp);
|
||||||
|
evas_event_feed_mouse_up (inst->gcc->gadcon->evas, ev->button,
|
||||||
|
EVAS_BUTTON_NONE, ev->timestamp, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_mpdule_menu_cb_post (void *data, E_Menu * m)
|
||||||
|
{
|
||||||
|
if (!mpdule_config->menu)
|
||||||
|
return;
|
||||||
|
e_object_del (E_OBJECT (mpdule_config->menu));
|
||||||
|
mpdule_config->menu = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_mpdule_menu_cb_configure (void *data, E_Menu * m, E_Menu_Item * mi)
|
||||||
|
{
|
||||||
|
Instance *inst;
|
||||||
|
|
||||||
|
inst = data;
|
||||||
|
_config_mpdule_module (inst->ci);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_mpdule_config_updated (Config_Item *ci)
|
||||||
|
{
|
||||||
|
Evas_List *l;
|
||||||
|
|
||||||
|
if (!mpdule_config)
|
||||||
|
return;
|
||||||
|
for (l = mpdule_config->instances; l; l = l->next)
|
||||||
|
{
|
||||||
|
Instance *inst;
|
||||||
|
|
||||||
|
inst = l->data;
|
||||||
|
if (!inst->ci != ci)
|
||||||
|
continue;
|
||||||
|
_mpdule_disconnect(inst);
|
||||||
|
_mpdule_connect(inst);
|
||||||
|
_mpdule_update_song(inst);
|
||||||
|
if (inst->update_timer)
|
||||||
|
ecore_timer_interval_set (inst->update_timer,
|
||||||
|
(double) ci->poll_time);
|
||||||
|
else
|
||||||
|
inst->update_timer =
|
||||||
|
ecore_timer_add ((double) ci->poll_time, _mpdule_update_song_cb,
|
||||||
|
inst);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static Config_Item *
|
||||||
|
_mpdule_config_item_get (const char *id)
|
||||||
|
{
|
||||||
|
Evas_List *l;
|
||||||
|
Config_Item *ci;
|
||||||
|
char buf[128];
|
||||||
|
|
||||||
|
|
||||||
|
if (!id)
|
||||||
|
{
|
||||||
|
int num = 0;
|
||||||
|
|
||||||
|
/* Create id */
|
||||||
|
if (mpdule_config->items)
|
||||||
|
{
|
||||||
|
const char *p;
|
||||||
|
ci = evas_list_last(mpdule_config->items)->data;
|
||||||
|
p = strrchr(ci->id, '.');
|
||||||
|
if (p) num = atoi(p + 1) + 1;
|
||||||
|
}
|
||||||
|
snprintf(buf, sizeof(buf), "%s.%d", _gc_class.name, num);
|
||||||
|
id = buf;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (l = mpdule_config->items; l; l = l->next)
|
||||||
|
{
|
||||||
|
ci = l->data;
|
||||||
|
if (!ci->id)
|
||||||
|
continue;
|
||||||
|
if (!strcmp (ci->id, id))
|
||||||
|
return ci;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ci = E_NEW (Config_Item, 1);
|
||||||
|
ci->id = evas_stringshare_add (id);
|
||||||
|
ci->poll_time = 1.0;
|
||||||
|
ci->hostname = evas_stringshare_add ("localhost");
|
||||||
|
ci->port = 6600;
|
||||||
|
|
||||||
|
mpdule_config->items = evas_list_append (mpdule_config->items, ci);
|
||||||
|
return ci;
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI E_Module_Api e_modapi = {
|
||||||
|
E_MODULE_API_VERSION,
|
||||||
|
"MPDule"
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
_mpdule_connect(Instance *inst)
|
||||||
|
{
|
||||||
|
mpd_Connection *mpd;
|
||||||
|
Config_Item *ci;
|
||||||
|
|
||||||
|
ci = inst->ci;
|
||||||
|
mpd = mpd_newConnection(ci->hostname, ci->port, 3.0);
|
||||||
|
inst->mpd = mpd;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_mpdule_disconnect(Instance *inst)
|
||||||
|
{
|
||||||
|
if (inst->mpd) {
|
||||||
|
mpd_closeConnection(inst->mpd);
|
||||||
|
inst->mpd = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_mpdule_update_song_cb(void *data)
|
||||||
|
{
|
||||||
|
Instance *inst;
|
||||||
|
|
||||||
|
inst = data;
|
||||||
|
_mpdule_update_song(inst);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_mpdule_update_song(Instance *inst)
|
||||||
|
{
|
||||||
|
mpd_Connection *mpd;
|
||||||
|
Evas_Object *mpdule;
|
||||||
|
|
||||||
|
if (!inst->mpd)
|
||||||
|
return;
|
||||||
|
mpd = inst->mpd;
|
||||||
|
mpdule = inst->mpdule;
|
||||||
|
mpd_sendStatusCommand(mpd);
|
||||||
|
if (mpd->error == 0)
|
||||||
|
{
|
||||||
|
mpd_Status *status = mpd_getStatus(mpd);
|
||||||
|
|
||||||
|
if (status)
|
||||||
|
{
|
||||||
|
if (status->state == MPD_STATUS_STATE_UNKNOWN)
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.status", D_ ("Unknown"));
|
||||||
|
}
|
||||||
|
else if (status->state == MPD_STATUS_STATE_STOP)
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.status", D_ ("Stopped"));
|
||||||
|
}
|
||||||
|
else if (status->state == MPD_STATUS_STATE_PLAY)
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.status", D_ ("Playing"));
|
||||||
|
}
|
||||||
|
else if (status->state == MPD_STATUS_STATE_PAUSE)
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.status", D_ ("Paused"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status->state > MPD_STATUS_STATE_STOP)
|
||||||
|
{
|
||||||
|
mpd_sendCurrentSongCommand(mpd);
|
||||||
|
mpd_InfoEntity *entity = NULL;
|
||||||
|
|
||||||
|
while ( (entity = mpd_getNextInfoEntity(mpd)) )
|
||||||
|
{
|
||||||
|
if ( entity->type == MPD_INFO_ENTITY_TYPE_SONG &&
|
||||||
|
entity->info.song->id == status->songid )
|
||||||
|
{
|
||||||
|
mpd_Song *song = entity->info.song;
|
||||||
|
|
||||||
|
if (song->artist)
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.artist", song->artist);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.artist", "");
|
||||||
|
}
|
||||||
|
if (song->title)
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.title", song->title);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.title", "");
|
||||||
|
}
|
||||||
|
if (song->album)
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.album", song->album);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.album", "");
|
||||||
|
}
|
||||||
|
if (song->track)
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.track", song->track);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.track", "");
|
||||||
|
}
|
||||||
|
if (song->date)
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.date", song->date);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.date", "");
|
||||||
|
}
|
||||||
|
if (song->genre)
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.genre", song->genre);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.genre", "");
|
||||||
|
}
|
||||||
|
if (song->composer)
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.composer", song->composer);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.composer", "");
|
||||||
|
}
|
||||||
|
if (song->time)
|
||||||
|
{
|
||||||
|
char * songtime;
|
||||||
|
sprintf(songtime, "%i", song->time);
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.time", songtime);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.time", "");
|
||||||
|
}
|
||||||
|
if (song->file)
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.file", song->file);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
edje_object_part_text_set (mpdule, "mpdule.file", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mpd_freeInfoEntity(entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mpd_freeStatus(status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_mpdule_disconnect(inst);
|
||||||
|
_mpdule_connect(inst);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void *
|
||||||
|
e_modapi_init (E_Module * m)
|
||||||
|
{
|
||||||
|
bindtextdomain (PACKAGE, LOCALEDIR);
|
||||||
|
bind_textdomain_codeset (PACKAGE, "UTF-8");
|
||||||
|
|
||||||
|
conf_item_edd = E_CONFIG_DD_NEW ("MPDule_Config_Item", Config_Item);
|
||||||
|
#undef T
|
||||||
|
#undef D
|
||||||
|
#define T Config_Item
|
||||||
|
#define D conf_item_edd
|
||||||
|
E_CONFIG_VAL (D, T, id, STR);
|
||||||
|
E_CONFIG_VAL (D, T, poll_time, DOUBLE);
|
||||||
|
E_CONFIG_VAL (D, T, hostname, STR);
|
||||||
|
E_CONFIG_VAL (D, T, port, INT);
|
||||||
|
|
||||||
|
conf_edd = E_CONFIG_DD_NEW ("MPDule_Config", Config);
|
||||||
|
#undef T
|
||||||
|
#undef D
|
||||||
|
#define T Config
|
||||||
|
#define D conf_edd
|
||||||
|
E_CONFIG_LIST (D, T, items, conf_item_edd);
|
||||||
|
|
||||||
|
mpdule_config = e_config_domain_load ("module.mpdule", conf_edd);
|
||||||
|
if (!mpdule_config)
|
||||||
|
{
|
||||||
|
Config_Item *ci;
|
||||||
|
|
||||||
|
mpdule_config = E_NEW (Config, 1);
|
||||||
|
|
||||||
|
ci = E_NEW (Config_Item, 1);
|
||||||
|
ci->id = evas_stringshare_add ("0");
|
||||||
|
ci->poll_time = 1.0;
|
||||||
|
ci->hostname = evas_stringshare_add ("localhost");
|
||||||
|
ci->port = 6600;
|
||||||
|
|
||||||
|
mpdule_config->items = evas_list_append (mpdule_config->items, ci);
|
||||||
|
}
|
||||||
|
mpdule_config->module = m;
|
||||||
|
|
||||||
|
e_gadcon_provider_register (&_gc_class);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI int
|
||||||
|
e_modapi_shutdown (E_Module * m)
|
||||||
|
{
|
||||||
|
mpdule_config->module = NULL;
|
||||||
|
e_gadcon_provider_unregister (&_gc_class);
|
||||||
|
|
||||||
|
if (mpdule_config->config_dialog)
|
||||||
|
e_object_del (E_OBJECT (mpdule_config->config_dialog));
|
||||||
|
if (mpdule_config->menu)
|
||||||
|
{
|
||||||
|
e_menu_post_deactivate_callback_set (mpdule_config->menu, NULL, NULL);
|
||||||
|
e_object_del (E_OBJECT (mpdule_config->menu));
|
||||||
|
mpdule_config->menu = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (mpdule_config->items)
|
||||||
|
{
|
||||||
|
Config_Item *ci;
|
||||||
|
|
||||||
|
ci = mpdule_config->items->data;
|
||||||
|
mpdule_config->items =
|
||||||
|
evas_list_remove_list (mpdule_config->items, mpdule_config->items);
|
||||||
|
if (ci->id)
|
||||||
|
evas_stringshare_del (ci->id);
|
||||||
|
free (ci);
|
||||||
|
ci = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
free (mpdule_config);
|
||||||
|
mpdule_config = NULL;
|
||||||
|
E_CONFIG_DD_FREE (conf_item_edd);
|
||||||
|
E_CONFIG_DD_FREE (conf_edd);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI int
|
||||||
|
e_modapi_save (E_Module * m)
|
||||||
|
{
|
||||||
|
e_config_domain_save ("module.mpdule", conf_edd, mpdule_config);
|
||||||
|
return 1;
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
#define D_(str) dgettext(PACKAGE, str)
|
||||||
|
|
||||||
|
#ifndef E_MOD_MAIN_H
|
||||||
|
#define E_MOD_MAIN_H
|
||||||
|
|
||||||
|
#define RESOLUTION_MINUTE 0
|
||||||
|
#define RESOLUTION_SECOND 1
|
||||||
|
|
||||||
|
typedef struct _Config Config;
|
||||||
|
typedef struct _Config_Item Config_Item;
|
||||||
|
|
||||||
|
struct _Config
|
||||||
|
{
|
||||||
|
E_Module *module;
|
||||||
|
E_Config_Dialog *config_dialog;
|
||||||
|
E_Menu *menu;
|
||||||
|
Evas_List *instances;
|
||||||
|
Evas_List *items;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _Config_Item
|
||||||
|
{
|
||||||
|
const char *id;
|
||||||
|
double poll_time;
|
||||||
|
const char *hostname;
|
||||||
|
int port;
|
||||||
|
};
|
||||||
|
|
||||||
|
EAPI extern E_Module_Api e_modapi;
|
||||||
|
|
||||||
|
EAPI void *e_modapi_init(E_Module *m);
|
||||||
|
EAPI int e_modapi_shutdown(E_Module *m);
|
||||||
|
EAPI int e_modapi_save(E_Module *m);
|
||||||
|
|
||||||
|
void _config_mpdule_module(Config_Item *ci);
|
||||||
|
void _mpdule_config_updated(Config_Item *ci);
|
||||||
|
extern Config *mpdule_config;
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,50 @@
|
||||||
|
%define module_name mpdule
|
||||||
|
|
||||||
|
Summary: %{module_name} module for the Enlightenment window manager
|
||||||
|
Name: e_modules-%{module_name}
|
||||||
|
Version: @VERSION@
|
||||||
|
Release: 0.%(date '+%Y%m%d')
|
||||||
|
License: BSD
|
||||||
|
Group: User Interface/Desktops
|
||||||
|
URL: http://www.enlightenment.org/
|
||||||
|
Source: ftp://ftp.enlightenment.org/pub/enlightenment/%{module_name}-%{version}.tar.gz
|
||||||
|
Packager: %{?_packager:%{_packager}}%{!?_packager:Michael Jennings <mej@eterm.org>}
|
||||||
|
Vendor: %{?_vendorinfo:%{_vendorinfo}}%{!?_vendorinfo:The Enlightenment Project (http://www.enlightenment.org/)}
|
||||||
|
Distribution: %{?_distribution:%{_distribution}}%{!?_distribution:%{_vendor}}
|
||||||
|
BuildRequires: ecore-devel, evas-devel, esmart-devel, edje-bin
|
||||||
|
BuildRequires: edje-devel, eet-devel, enlightenment-devel >= 0.16.999
|
||||||
|
Requires: enlightenment >= 0.16.999
|
||||||
|
BuildRoot: %{_tmppath}/%{name}-%{version}-root
|
||||||
|
|
||||||
|
%description
|
||||||
|
%{module_name} module for the Enlightenment window manager.
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q -n %{module_name}-%{version}
|
||||||
|
|
||||||
|
%build
|
||||||
|
%{configure}
|
||||||
|
%{__make} %{?_smp_mflags} %{?mflags}
|
||||||
|
|
||||||
|
%install
|
||||||
|
%{__make} %{?mflags_install} DESTDIR=$RPM_BUILD_ROOT install
|
||||||
|
%{find_lang} %{module_name} || true > %{module_name}.lang
|
||||||
|
|
||||||
|
%clean
|
||||||
|
test "x$RPM_BUILD_ROOT" != "x/" && rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
|
%post
|
||||||
|
/sbin/ldconfig
|
||||||
|
|
||||||
|
%postun
|
||||||
|
/sbin/ldconfig
|
||||||
|
|
||||||
|
%files -f %{module_name}.lang
|
||||||
|
%defattr(-, root, root)
|
||||||
|
%doc AUTHORS ChangeLog COPYING* INSTALL NEWS README
|
||||||
|
%if "%{module_name}" == "emu"
|
||||||
|
%{_bindir}/%{module_name}*
|
||||||
|
%endif
|
||||||
|
%{_libdir}/enlightenment/modules/%{module_name}*
|
||||||
|
|
||||||
|
%changelog
|
|
@ -0,0 +1,6 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Mixer
|
||||||
|
Icon=e-module-mixer
|
||||||
|
Comment=<hilight>Mixer Gadget</hilight><br>Allows you to control your system<br>volume.
|
||||||
|
Comment[it]=<hilight>Modulo Mixer</hilight><br>Permette di controllare il volume<br>dell'audio del sistema.
|
|
@ -0,0 +1,159 @@
|
||||||
|
fonts {
|
||||||
|
font: "VeraMono.ttf" "VeraMono";
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Available labels:
|
||||||
|
mpdule.status
|
||||||
|
mpdule.artist
|
||||||
|
mpdule.title
|
||||||
|
mpdule.album
|
||||||
|
mpdule.track
|
||||||
|
mpdule.date
|
||||||
|
mpdule.genre
|
||||||
|
mpdule.composer
|
||||||
|
mpdule.time
|
||||||
|
mpdule.file
|
||||||
|
*/
|
||||||
|
collections
|
||||||
|
{
|
||||||
|
group
|
||||||
|
{
|
||||||
|
name: "modules/mpdule/main";
|
||||||
|
parts
|
||||||
|
{
|
||||||
|
part
|
||||||
|
{
|
||||||
|
name: "base";
|
||||||
|
type: RECT;
|
||||||
|
mouse_events: 0;
|
||||||
|
description {
|
||||||
|
state: "default" 0.0;
|
||||||
|
color: 255 255 255 255;
|
||||||
|
rel1 {
|
||||||
|
relative: 0.0 0.0;
|
||||||
|
}
|
||||||
|
rel2 {
|
||||||
|
relative: 1.0 1.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
part
|
||||||
|
{
|
||||||
|
name: "item_clip";
|
||||||
|
type: RECT;
|
||||||
|
mouse_events: 1;
|
||||||
|
description {
|
||||||
|
state: "default" 0.0;
|
||||||
|
color: 255 255 255 0;
|
||||||
|
rel1 {
|
||||||
|
relative: 0.0 0.0;
|
||||||
|
}
|
||||||
|
rel2 {
|
||||||
|
relative: 1.0 1.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
part
|
||||||
|
{
|
||||||
|
name: "mpdule.artist";
|
||||||
|
type: TEXT;
|
||||||
|
effect: OUTLINE_SOFT_SHADOW;
|
||||||
|
clip_to: "base";
|
||||||
|
mouse_events: 1;
|
||||||
|
description
|
||||||
|
{
|
||||||
|
state: "default" 0.0;
|
||||||
|
visible: 1;
|
||||||
|
align: 0.5 0.5;
|
||||||
|
rel1
|
||||||
|
{
|
||||||
|
relative: 0.0 0.0;
|
||||||
|
offset: 0 4;
|
||||||
|
}
|
||||||
|
rel2
|
||||||
|
{
|
||||||
|
relative: 1.0 0.5;
|
||||||
|
offset: -1 -3;
|
||||||
|
}
|
||||||
|
color: 255 255 255 255;
|
||||||
|
color2: 0 0 0 96;
|
||||||
|
color3: 0 0 0 32;
|
||||||
|
text {
|
||||||
|
text: "";
|
||||||
|
font: "VeraMono";
|
||||||
|
size: 10;
|
||||||
|
min: 1 1;
|
||||||
|
align: 0.5 0.5;
|
||||||
|
text_class: "mpdule";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
description
|
||||||
|
{
|
||||||
|
state: "hidden" 0.0;
|
||||||
|
inherit: "default" 0.0;
|
||||||
|
visible: 0;
|
||||||
|
}
|
||||||
|
description
|
||||||
|
{
|
||||||
|
state: "visible" 0.0;
|
||||||
|
inherit: "default" 0.0;
|
||||||
|
visible: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
part
|
||||||
|
{
|
||||||
|
name: "mpdule.title";
|
||||||
|
type: TEXT;
|
||||||
|
clip_to: "base";
|
||||||
|
effect: OUTLINE_SOFT_SHADOW;
|
||||||
|
mouse_events: 1;
|
||||||
|
description
|
||||||
|
{
|
||||||
|
state: "default" 0.0;
|
||||||
|
visible: 1;
|
||||||
|
align: 0.5 0.5;
|
||||||
|
rel1
|
||||||
|
{
|
||||||
|
relative: 0.0 0.5;
|
||||||
|
offset: 0 4;
|
||||||
|
}
|
||||||
|
rel2
|
||||||
|
{
|
||||||
|
relative: 1.0 1.0;
|
||||||
|
offset: -1 -3;
|
||||||
|
}
|
||||||
|
color: 255 255 255 255;
|
||||||
|
color2: 0 0 0 96;
|
||||||
|
color3: 0 0 0 32;
|
||||||
|
text {
|
||||||
|
text: "";
|
||||||
|
font: "VeraMono";
|
||||||
|
size: 9;
|
||||||
|
min: 1 1;
|
||||||
|
align: 0.5 0.5;
|
||||||
|
text_class: "mpdule";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
description
|
||||||
|
{
|
||||||
|
state: "hidden" 0.0;
|
||||||
|
inherit: "default" 0.0;
|
||||||
|
visible: 0;
|
||||||
|
}
|
||||||
|
description
|
||||||
|
{
|
||||||
|
state: "visible" 0.0;
|
||||||
|
inherit: "default" 0.0;
|
||||||
|
visible: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Close Parts */
|
||||||
|
programs
|
||||||
|
{
|
||||||
|
}
|
||||||
|
/* Close Programs */
|
||||||
|
}
|
||||||
|
/* Close Group */
|
||||||
|
}
|
||||||
|
/* Close Coll */
|
Loading…
Reference in New Issue