diff options
46 files changed, 5277 insertions, 0 deletions
@@ -0,0 +1,340 @@ + 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. @@ -0,0 +1,33 @@ +VDR Plugin 'skinflat' Revision History +--------------------------------------- + +2013-22-09: Version 0.1.1 +- [add] show disk usage in topbar @ menu recordings & timer +- [add] support text progressbar in menu +- [update] bigger replay progress bar & marks +- [update] diplay message - position at bottom of screen +- [update] Makefile, imageloader - use ResourceDirectory instead of ConfigDirectory +- [update] themes less transparency +- [update] item padding = 5 pixel (before: 2 pixel) + +2013-09-08: Version 0.1.0 +- [add] parameter to set channel logos path (-l --logo) +- [add] 3 new themes - green, gold, red (include icons) +- [update] themes - color values +- [update] top bar - 2 rows date, separate color for date, background color +- [update] display tracks - text margin, background color +- [update] display volume - text margin, new mute logo, progressbar color +- [update] display message - position (middle of screen), text margin +- [update] display replay - marks, progressbar, colors, position, speed color +- [update] epg/rec info - title color, text margin, position +- [update] dipslay menu - scrollbar width, colors +- [update] display channel - separate color for following epg, progressbar color, background color logo +- [fix] many, many fixes + +2013-30-07: Version 0.0.2 +- [add] replay marks +- [change] colors +- [change] progressbar + +2013-29-07: Version 0.0.1 +- Erste Version diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0f7b0d9 --- /dev/null +++ b/Makefile @@ -0,0 +1,135 @@ +# +# Makefile for a Video Disk Recorder plugin +# +# $Id$ + +# The official name of this plugin. +# This name will be used in the '-P...' option of VDR to load the plugin. +# By default the main source file also carries this name. +# IMPORTANT: the presence of this macro is important for the Make.config +# file. So it must be defined, even if it is not used here! +# +PLUGIN = skinlcarsng + +### The version number of this plugin (taken from the main source file): + +VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).c | awk '{ print $$6 }' | sed -e 's/[";]//g') + +### The directory environment: + +# Use package data if installed...otherwise assume we're under the VDR source directory: +PKGCFG = $(if $(VDRDIR),$(shell pkg-config --variable=$(1) $(VDRDIR)/vdr.pc),$(shell pkg-config --variable=$(1) vdr || pkg-config --variable=$(1) ../../../vdr.pc)) +LIBDIR = $(call PKGCFG,libdir) +LOCDIR = $(call PKGCFG,locdir) +PLGCFG = $(call PKGCFG,plgcfg) +VDRCONFDIR = $(call PKGCFG,configdir) +PLGRESDIR = $(call PKGCFG,resdir)/plugins/$(PLUGIN) +TMPDIR ?= /tmp + +### The compiler options: +export CFLAGS = $(call PKGCFG,cflags) +export CXXFLAGS = $(call PKGCFG,cxxflags) + +### Allow user defined options to overwrite defaults: + +-include $(PLGCFG) + +### The version number of VDR's plugin API: +APIVERSION = $(call PKGCFG,apiversion) + +### The name of the distribution archive: + +ARCHIVE = $(PLUGIN)-$(VERSION) +PACKAGE = vdr-$(ARCHIVE) + +### The name of the shared object file: + +SOFILE = libvdr-$(PLUGIN).so + +### Includes and Defines and Dependencies (add further entries here): + +INCLUDES += $(shell pkg-config --cflags Magick++) + +DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"' + +LIBS += $(shell pkg-config --libs Magick++) + +### The object files (add further files here): + +OBJS = lcarsng.o $(PLUGIN).o +#OBJS = config.o imageloader.o baserender.o displaychannel.o displaymenu.o displaymessage.o \ + displayreplay.o displaytracks.o displayvolume.o flat.o $(PLUGIN).o + +### The main target: + +all: $(SOFILE) i18n + +### Implicit rules: + +%.o: %.c + $(CXX) -Wall $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) -o $@ $< + +### Dependencies: + +MAKEDEP = $(CXX) -MM -MG +DEPFILE = .dependencies +$(DEPFILE): Makefile + @$(MAKEDEP) $(CXXFLAGS) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@ + +-include $(DEPFILE) + +### Internationalization (I18N): + +PODIR = po +I18Npo = $(wildcard $(PODIR)/*.po) +I18Nmo = $(addsuffix .mo, $(foreach file, $(I18Npo), $(basename $(file)))) +I18Nmsgs = $(addprefix $(DESTDIR)$(LOCDIR)/, $(addsuffix /LC_MESSAGES/vdr-$(PLUGIN).mo, $(notdir $(foreach file, $(I18Npo), $(basename $(file)))))) +I18Npot = $(PODIR)/$(PLUGIN).pot + +%.mo: %.po + msgfmt -c -o $@ $< + +$(I18Npot): $(wildcard *.c) + xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=vdr-$(PLUGIN) --package-version=$(VERSION) --msgid-bugs-address='<see README>' -o $@ `ls $^` + +%.po: $(I18Npot) + msgmerge -U --no-wrap --no-location --backup=none -q -N $@ $< + @touch $@ + +$(I18Nmsgs): $(DESTDIR)$(LOCDIR)/%/LC_MESSAGES/vdr-$(PLUGIN).mo: $(PODIR)/%.mo + install -D -m644 $< $@ + +.PHONY: i18n +i18n: $(I18Nmo) $(I18Npot) + +install-i18n: $(I18Nmsgs) + +### Targets: + +$(SOFILE): $(OBJS) + $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(OBJS) $(LIBS) -o $@ + +install-lib: $(SOFILE) + install -D $^ $(DESTDIR)$(LIBDIR)/$^.$(APIVERSION) + +install-themes: + mkdir -p $(DESTDIR)$(VDRCONFDIR)/themes + cp themes/* $(DESTDIR)$(VDRCONFDIR)/themes + +install-icons: + mkdir -p $(DESTDIR)$(PLGRESDIR)/icons + cp -r icons/* $(DESTDIR)$(PLGRESDIR)/icons + +install: install-lib install-i18n install-themes install-icons + +dist: $(I18Npo) clean + @-rm -rf $(TMPDIR)/$(ARCHIVE) + @mkdir $(TMPDIR)/$(ARCHIVE) + @cp -a * $(TMPDIR)/$(ARCHIVE) + @tar czf $(PACKAGE).tgz --exclude .git* --exclude *.o --exclude *.rej --exclude *.orig -C $(TMPDIR) $(ARCHIVE) + @-rm -rf $(TMPDIR)/$(ARCHIVE) + @echo Distribution package created as $(PACKAGE).tgz + +clean: + @-rm -f $(PODIR)/*.mo $(PODIR)/*.pot + @-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~ @@ -0,0 +1,41 @@ +This is a "plugin" for the Video Disk Recorder (VDR). + +Written by: Mase <vdr.skinlcarsng@test.test> +Thanks to: LCARS-Skin from Klaus Schmiedinger + +Project's homepage: + + +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. +See the file COPYING for more information. + +Requirements +------------ + +- VDR version >= 1.7.34 + +Description +----------- +skinlcarsng ist ein Skin für den VDR aufbauend auf dem Skin LCARS, der dem VDR original beiliegt. +Der Skin ist ohne Konfiguration. + +Installation +------------ +Installation wie bei allen VDR Plugins. + make + make install + +Der Skin muss im Menü unter Einstellungen -> OSD ausgewählt werden. + + +Themes +------------------------------- +Der Skin ist weitestgehend über Themes anpassbar. + +Alle dem VDR beiliegenden LCARS-Themes können hier parallel benutzt werden, z.B. durch verlinken: + +ln -s lcars-default.theme lcarsng-default.theme + diff --git a/lcarsng.c b/lcarsng.c new file mode 100644 index 0000000..b1d17e0 --- /dev/null +++ b/lcarsng.c @@ -0,0 +1,2397 @@ +/* + * skinlcars.c: A VDR skin with Star Trek's "LCARS" layout + * + * See the main source file 'vdr.c' for copyright information and + * how to reach the author. + * + * $Id: skinlcars.c 3.3 2013/08/18 13:45:36 kls Exp $ + */ + +// "Star Trek: The Next Generation"(R) is a registered trademark of Paramount Pictures, +// registered in the United States Patent and Trademark Office, all rights reserved. +// The LCARS system is based upon the designs of Michael Okuda and his Okudagrams. +// +// "LCARS" is short for "Library Computer Access and Retrieval System". +// Some resources used for writing this skin can be found at +// http://www.lcars.org.uk +// http://www.lcarsdeveloper.com +// http://www.lcarscom.net +// http://lds-jedi.deviantart.com/art/LCARS-Swept-Tutorial-213936938 +// http://lds-jedi.deviantart.com/art/LCARS-Button-Tutorial-210783437 +// http://zelldenver.deviantart.com/art/LCARS-Color-Standard-179565780 +// http://www.lcars47.com +// http://www.bracercom.com/tutorial/content/CoherentLCARSInterface/LCARSCoherentInterface.html +// http://www.bracercom.com/tutorial/content/lcars_manifesto/the_lcars_manifesto.html + +#include "lcarsng.h" +#include <vdr/font.h> +#include <vdr/menu.h> +#include <vdr/osd.h> +#include <vdr/positioner.h> +#include <vdr/themes.h> +#include <vdr/videodir.h> + +#include "symbols/arrowdown.xpm" +#include "symbols/arrowup.xpm" +#include "symbols/audio.xpm" +#include "symbols/audioleft.xpm" +#include "symbols/audioright.xpm" +#include "symbols/audiostereo.xpm" +#include "symbols/dolbydigital.xpm" +#include "symbols/encrypted.xpm" +#include "symbols/ffwd.xpm" +#include "symbols/ffwd1.xpm" +#include "symbols/ffwd2.xpm" +#include "symbols/ffwd3.xpm" +#include "symbols/frew.xpm" +#include "symbols/frew1.xpm" +#include "symbols/frew2.xpm" +#include "symbols/frew3.xpm" +#include "symbols/mute.xpm" +#include "symbols/pause.xpm" +#include "symbols/play.xpm" +#include "symbols/radio.xpm" +#include "symbols/recording.xpm" +#include "symbols/sfwd.xpm" +#include "symbols/sfwd1.xpm" +#include "symbols/sfwd2.xpm" +#include "symbols/sfwd3.xpm" +#include "symbols/srew.xpm" +#include "symbols/srew1.xpm" +#include "symbols/srew2.xpm" +#include "symbols/srew3.xpm" +#include "symbols/teletext.xpm" +#include "symbols/volume.xpm" + +#define Gap (Setup.FontOsdSize / 5 & ~1) // must be even +#define TextFrame (Setup.FontOsdSize / TEXT_ALIGN_BORDER) +#define TextSpacing (2 * TextFrame) +#define SymbolSpacing TextSpacing +#define ShowSeenExtent (Setup.FontOsdSize / 5) // pixels by which the "seen" bar extends out of the frame + +#define DISKUSAGEALERTLIMIT 95 // percent of disk usage above which the display goes into alert mode +#define SIGNALDISPLAYDELTA 2 // seconds between subsequent device signal displays + +static cTheme Theme; +cRect availableRect; +cRect videoWindowRect; + +// Color domains: + +#define CLR_BACKGROUND 0x99000000 +#define CLR_MAIN_FRAME 0xFFFF9966 +#define CLR_CHANNEL_FRAME 0xFF8A9EC9 +#define CLR_REPLAY_FRAME 0xFFCC6666 +#define CLR_DATE 0xFF99CCFF +#define CLR_MENU_ITEMS 0xFF9999FF +#define CLR_TIMER 0xFF99CCFF +#define CLR_DEVICE 0xFFF1B1AF +#define CLR_CHANNEL_NAME 0xFF99CCFF +#define CLR_EVENT_TITLE 0xFF99CCFF +#define CLR_EVENT_TIME 0xFFFFCC66 +#define CLR_EVENT_SHORTTEXT 0xFFFFCC66 +#define CLR_TEXT 0xFF99CCFF +#define CLR_TRACK 0xFFFFCC66 +#define CLR_SEEN 0xFFCC99CC +#define CLR_ALERT 0xFFFF0000 +#define CLR_EXPOSED 0xFF990000 +#define CLR_WHITE 0xFFFFFFFF +#define CLR_RED 0xFFCC6666 +#define CLR_GREEN 0xFFA0FF99 +#define CLR_YELLOW 0xFFF1DF60 +#define CLR_BLUE 0xFF9A99FF +#define CLR_BLACK 0xFF000000 + +// General colors: + +THEME_CLR(Theme, clrBackground, CLR_BACKGROUND); +THEME_CLR(Theme, clrDateFg, CLR_BLACK); +THEME_CLR(Theme, clrDateBg, CLR_DATE); +THEME_CLR(Theme, clrTimerFg, CLR_BLACK); +THEME_CLR(Theme, clrTimerBg, CLR_TIMER); +THEME_CLR(Theme, clrDeviceFg, CLR_BLACK); +THEME_CLR(Theme, clrDeviceBg, CLR_DEVICE); +THEME_CLR(Theme, clrSignalValue, CLR_GREEN); +THEME_CLR(Theme, clrSignalRest, CLR_RED); +THEME_CLR(Theme, clrSeen, CLR_SEEN); +THEME_CLR(Theme, clrTrackName, CLR_TRACK); +THEME_CLR(Theme, clrAlertFg, CLR_WHITE); +THEME_CLR(Theme, clrAlertBg, CLR_ALERT); +THEME_CLR(Theme, clrChannelName, CLR_CHANNEL_NAME); +THEME_CLR(Theme, clrEventTitle, CLR_EVENT_TITLE); +THEME_CLR(Theme, clrEventTime, CLR_EVENT_TIME); +THEME_CLR(Theme, clrEventShortText, CLR_EVENT_SHORTTEXT); +THEME_CLR(Theme, clrEventDescription, CLR_TEXT); + +// Buttons: + +THEME_CLR(Theme, clrButtonRedFg, CLR_BLACK); +THEME_CLR(Theme, clrButtonRedBg, CLR_RED); +THEME_CLR(Theme, clrButtonGreenFg, CLR_BLACK); +THEME_CLR(Theme, clrButtonGreenBg, CLR_GREEN); +THEME_CLR(Theme, clrButtonYellowFg, CLR_BLACK); +THEME_CLR(Theme, clrButtonYellowBg, CLR_YELLOW); +THEME_CLR(Theme, clrButtonBlueFg, CLR_BLACK); +THEME_CLR(Theme, clrButtonBlueBg, CLR_BLUE); + +// Messages: + +THEME_CLR(Theme, clrMessageStatusFg, CLR_BLACK); +THEME_CLR(Theme, clrMessageStatusBg, CLR_BLUE); +THEME_CLR(Theme, clrMessageInfoFg, CLR_BLACK); +THEME_CLR(Theme, clrMessageInfoBg, CLR_GREEN); +THEME_CLR(Theme, clrMessageWarningFg, CLR_BLACK); +THEME_CLR(Theme, clrMessageWarningBg, CLR_YELLOW); +THEME_CLR(Theme, clrMessageErrorFg, CLR_BLACK); +THEME_CLR(Theme, clrMessageErrorBg, CLR_RED); + +// Volume: + +THEME_CLR(Theme, clrVolumeFrame, CLR_MAIN_FRAME); +THEME_CLR(Theme, clrVolumeSymbol, CLR_BLACK); +THEME_CLR(Theme, clrVolumeBarUpper, RgbShade(CLR_MAIN_FRAME, -0.2)); +THEME_CLR(Theme, clrVolumeBarLower, CLR_GREEN); + +// Channel display: + +THEME_CLR(Theme, clrChannelFrameFg, CLR_BLACK); +THEME_CLR(Theme, clrChannelFrameBg, CLR_CHANNEL_FRAME); +THEME_CLR(Theme, clrChannelSymbolOn, CLR_BLACK); +THEME_CLR(Theme, clrChannelSymbolOff, RgbShade(CLR_CHANNEL_FRAME, -0.2)); +THEME_CLR(Theme, clrChannelSymbolRecFg, CLR_WHITE); +THEME_CLR(Theme, clrChannelSymbolRecBg, CLR_RED); + +// Menu: + +THEME_CLR(Theme, clrMenuFrameFg, CLR_BLACK); +THEME_CLR(Theme, clrMenuFrameBg, CLR_MAIN_FRAME); +THEME_CLR(Theme, clrMenuTitle, CLR_MAIN_FRAME); +THEME_CLR(Theme, clrMenuMainBracket, CLR_MENU_ITEMS); +THEME_CLR(Theme, clrMenuTimerRecording, CLR_DEVICE); +THEME_CLR(Theme, clrMenuDeviceRecording, CLR_TIMER); +THEME_CLR(Theme, clrMenuItemCurrentFg, CLR_MAIN_FRAME); +THEME_CLR(Theme, clrMenuItemCurrentBg, RgbShade(CLR_MENU_ITEMS, -0.5)); +THEME_CLR(Theme, clrMenuItemSelectable, CLR_MENU_ITEMS); +THEME_CLR(Theme, clrMenuItemNonSelectable, CLR_TEXT); +THEME_CLR(Theme, clrMenuScrollbarTotal, RgbShade(CLR_MAIN_FRAME, 0.2)); +THEME_CLR(Theme, clrMenuScrollbarShown, CLR_SEEN); +THEME_CLR(Theme, clrMenuScrollbarArrow, CLR_BLACK); +THEME_CLR(Theme, clrMenuText, CLR_TEXT); + +// Replay display: + +THEME_CLR(Theme, clrReplayFrameFg, CLR_BLACK); +THEME_CLR(Theme, clrReplayFrameBg, CLR_REPLAY_FRAME); +THEME_CLR(Theme, clrReplayPosition, CLR_SEEN); +THEME_CLR(Theme, clrReplayJumpFg, CLR_BLACK); +THEME_CLR(Theme, clrReplayJumpBg, CLR_SEEN); +THEME_CLR(Theme, clrReplayProgressSeen, CLR_SEEN); +THEME_CLR(Theme, clrReplayProgressRest, RgbShade(CLR_WHITE, -0.2)); +THEME_CLR(Theme, clrReplayProgressSelected, CLR_EXPOSED); +THEME_CLR(Theme, clrReplayProgressMark, CLR_BLACK); +THEME_CLR(Theme, clrReplayProgressCurrent, CLR_EXPOSED); + +// Track display: + +THEME_CLR(Theme, clrTrackFrameFg, CLR_BLACK); +THEME_CLR(Theme, clrTrackFrameBg, CLR_TRACK); +THEME_CLR(Theme, clrTrackItemFg, CLR_BLACK); +THEME_CLR(Theme, clrTrackItemBg, RgbShade(CLR_TRACK, 0.5)); +THEME_CLR(Theme, clrTrackItemCurrentFg, CLR_BLACK); +THEME_CLR(Theme, clrTrackItemCurrentBg, CLR_TRACK); + +// --- Helper functions ------------------------------------------------------ + +static bool TwoColors = false; + +static cOsd *CreateOsd(int Left, int Top, int x0, int y0, int x1, int y1) +{ + cOsd *Osd = cOsdProvider::NewOsd(Left, Top); + int Bpp[] = { 32, 8, 4, 2, 1 }; + tArea Area = { x0, y0, x1, y1, 0 }; + for (unsigned int i = 0; i < sizeof(Bpp) / sizeof(int); i++) { + Area.bpp = Bpp[i]; + if (Osd->CanHandleAreas(&Area, 1) == oeOk) { + Osd->SetAreas(&Area, 1); + Osd->SetAntiAliasGranularity(20, 16); + TwoColors = Area.bpp == 1; + break; + } + } + return Osd; +} + +static cFont *CreateTinyFont(int LineHeight) +{ + // Creates a font that is not higher than half of LineHeight. + LineHeight /= 1.75; + int Height = LineHeight; + for (;;) { + cFont *TinyFont = cFont::CreateFont(Setup.FontOsd, Height); + if (Height < 2 || TinyFont->Height() <= LineHeight) + return TinyFont; + delete TinyFont; + Height -= 1; + } +} + +static bool DrawDeviceData(cOsd *Osd, const cDevice *Device, int x0, int y0, int x1, int y1, int &xs, const cFont *TinyFont, cString &LastDeviceType, cCamSlot *&LastCamSlot, bool Initial) +{ + cString DeviceType = Device->DeviceType(); + cCamSlot *CamSlot = Device->CamSlot(); + if (Initial || strcmp(DeviceType, LastDeviceType) || CamSlot != LastCamSlot) { + const cFont *font = cFont::GetFont(fontOsd); + tColor ColorFg = Theme.Color(clrDeviceFg); + tColor ColorBg = Theme.Color(clrDeviceBg); + Osd->DrawRectangle(x0, y0, x1 - 1, y1 - 1, ColorBg); + int x = x0; + // Device number: + cString Nr = itoa(Device->DeviceNumber() + 1); + int w = max(font->Width(Nr), y1 - y0); + Osd->DrawText(x, y0, Nr, ColorFg, ColorBg, font, w, y1 - y0, taCenter); + x += w; + // Device type: + Osd->DrawText(x, y0, DeviceType, ColorFg, ColorBg, TinyFont); + xs = max(xs, x + TinyFont->Width(DeviceType)); + LastDeviceType = DeviceType; + // CAM: + if (CamSlot) { + cString s = cString::sprintf("CAM %d", CamSlot->SlotNumber()); + Osd->DrawText(x, y1 - TinyFont->Height(), s, ColorFg, ColorBg, TinyFont); + xs = max(xs, x + TinyFont->Width(s)); + } + LastCamSlot = CamSlot; + return true; + } + return false; +} + +static void DrawDeviceSignal(cOsd *Osd, const cDevice *Device, int x0, int y0, int x1, int y1, int &LastSignalStrength, int &LastSignalQuality, bool Initial) +{ + int SignalStrength = Device->SignalStrength(); + int SignalQuality = Device->SignalQuality(); + int d = max((y1 - y0) / 10, 1); + int x00 = x0 + d; + int x01 = x1 - d; + int h = (y1 - y0 - 3 * d) / 2; + int w = x01 - x00; + int y00 = y0 + d; + int y01 = y00 + h; + int y03 = y1 - d; + int y02 = y03 - h; + tColor ColorSignalValue, ColorSignalRest; + if (TwoColors) { + ColorSignalValue = Theme.Color(clrBackground); + ColorSignalRest = Theme.Color(clrMenuFrameBg); + } + else { + ColorSignalValue = Theme.Color(clrSignalValue); + ColorSignalRest = Theme.Color(clrSignalRest); + } + if (SignalStrength >= 0 && (Initial || SignalStrength != LastSignalStrength)) { + int s = SignalStrength * w / 100; + Osd->DrawRectangle(x00, y00, x00 + s - 1, y01 - 1, ColorSignalValue); + Osd->DrawRectangle(x00 + s, y00, x01 - 1, y01 - 1, ColorSignalRest); + LastSignalStrength = SignalStrength; + } + if (SignalQuality >= 0 && (Initial || SignalQuality != LastSignalQuality)) { + int q = SignalQuality * w / 100; + Osd->DrawRectangle(x00, y02, x00 + q - 1, y03 - 1, ColorSignalValue); + Osd->DrawRectangle(x00 + q, y02, x01 - 1, y03 - 1, ColorSignalRest); + LastSignalQuality = SignalQuality; + } +} + +static void DrawDevicePosition(cOsd *Osd, const cPositioner *Positioner, int x0, int y0, int x1, int y1, int &LastCurrent) +{ + int HorizonLeft = Positioner->HorizonLongitude(cPositioner::pdLeft); + int HorizonRight = Positioner->HorizonLongitude(cPositioner::pdRight); + int HardLimitLeft = cPositioner::NormalizeAngle(HorizonLeft - Positioner->HardLimitLongitude(cPositioner::pdLeft)); + int HardLimitRight = cPositioner::NormalizeAngle(Positioner->HardLimitLongitude(cPositioner::pdRight) - HorizonRight); + int HorizonDelta = cPositioner::NormalizeAngle(HorizonLeft - HorizonRight); + int Current = cPositioner::NormalizeAngle(HorizonLeft - Positioner->CurrentLongitude()); + int Target = cPositioner::NormalizeAngle(HorizonLeft - Positioner->TargetLongitude()); + int d = (y1 - y0) / 2; + int w = x1 - x0 - 2 * d; + int l = max(x0 + d, x0 + d + w * HardLimitLeft / HorizonDelta); + int r = min(x1 - d, x1 - d - w * HardLimitRight / HorizonDelta) - 1; + int c = constrain(x0 + d + w * Current / HorizonDelta, l, r); + int t = constrain(x0 + d + w * Target / HorizonDelta, l, r); + if (c == LastCurrent) + return; + if (c > t) + swap(c, t); + tColor ColorRange, ColorMove; + if (TwoColors) { + ColorRange = Theme.Color(clrChannelFrameBg); + ColorMove = Theme.Color(clrBackground); + } + else { + ColorRange = Theme.Color(clrChannelFrameBg); + ColorMove = Theme.Color(clrDeviceBg); + } + Osd->DrawRectangle(x0, y0, x1 - 1, y1 - 1, Theme.Color(clrBackground)); + Osd->DrawEllipse(l - d, y0, l, y1 - 1, ColorRange, 7); + Osd->DrawRectangle(l, y0, r, y1 - 1, ColorRange); + Osd->DrawEllipse(r, y0, r + d, y1 - 1, ColorRange, 5); + Osd->DrawEllipse(c - d, y0, c, y1 - 1, ColorMove, 7); + Osd->DrawRectangle(c, y0, t, y1 - 1, ColorMove); + Osd->DrawEllipse(t, y0, t + d, y1 - 1, ColorMove, 5); + LastCurrent = c; +} + +// --- cLCARSNGDisplayChannel ---------------------------------------------- + +class cLCARSNGDisplayChannel : public cSkinDisplayChannel { +private: + cOsd *osd; + int xc00, xc01, xc02, xc03, xc04, xc05, xc06, xc07, xc08, xc09, xc10, xc11, xc12, xc13, xc14, xc15; + int yc00, yc01, yc02, yc03, yc04, yc05, yc06, yc07, yc08, yc09, yc10, yc11, yc12; + int xs; // starting column for signal display + bool withInfo; + int lineHeight; + cFont *tinyFont; + cFont *tallFont; + tColor frameColor; + bool message; + const cEvent *present; + bool initial; + cString lastDate; + int lastSeen; + int lastCurrentPosition; + int lastDeviceNumber; + cString lastDeviceType; + cCamSlot *lastCamSlot; + int lastSignalStrength; + int lastSignalQuality; + time_t lastSignalDisplay; + tTrackId lastTrackId; + static cBitmap bmTeletext, bmRadio, bmAudio, bmDolbyDigital, bmEncrypted, bmRecording; + void DrawDate(void); + void DrawTrack(void); + void DrawSeen(int Current, int Total); + void DrawDevice(void); + void DrawSignal(void); +public: + cLCARSNGDisplayChannel(bool WithInfo); + virtual ~cLCARSNGDisplayChannel(); + virtual void SetChannel(const cChannel *Channel, int Number); + virtual void SetEvents(const cEvent *Present, const cEvent *Following); + virtual void SetMessage(eMessageType Type, const char *Text); + virtual void SetPositioner(const cPositioner *Positioner); + virtual void Flush(void); + }; + +cBitmap cLCARSNGDisplayChannel::bmTeletext(teletext_xpm); +cBitmap cLCARSNGDisplayChannel::bmRadio(radio_xpm); +cBitmap cLCARSNGDisplayChannel::bmAudio(audio_xpm); +cBitmap cLCARSNGDisplayChannel::bmDolbyDigital(dolbydigital_xpm); +cBitmap cLCARSNGDisplayChannel::bmEncrypted(encrypted_xpm); +cBitmap cLCARSNGDisplayChannel::bmRecording(recording_xpm); + +cLCARSNGDisplayChannel::cLCARSNGDisplayChannel(bool WithInfo) +{ + tallFont = cFont::CreateFont(Setup.FontOsd, Setup.FontOsdSize * 1.8); + initial = true; + present = NULL; + lastSeen = -1; + lastCurrentPosition = -1; + lastDeviceNumber = -1; + lastCamSlot = NULL; + lastSignalStrength = -1; + lastSignalQuality = -1; + lastSignalDisplay = 0; + memset(&lastTrackId, 0, sizeof(lastTrackId)); + const cFont *font = cFont::GetFont(fontOsd); + withInfo = WithInfo; + lineHeight = font->Height(); + tinyFont = CreateTinyFont(lineHeight); + frameColor = Theme.Color(clrChannelFrameBg); + message = false; + int d = 5 * lineHeight; + xc00 = 0; + xc01 = xc00 + d / 2; + xc02 = xc00 + d; + xc03 = xc02 + lineHeight; + xc04 = xc02 + d / 4; + xc05 = xc02 + d; + xc06 = xc05 + Gap; + xc15 = cOsd::OsdWidth(); + xc14 = xc15 - lineHeight; + xc13 = xc14 - Gap; + xc07 = (xc15 + xc00) / 2; + xc08 = xc07 + Gap; + xc09 = xc08 + lineHeight; + xc10 = xc09 + Gap; + xc11 = (xc10 + xc13 + Gap) / 2; + xc12 = xc11 + Gap; + + yc00 = 0; + yc01 = yc00 + lineHeight; + yc02 = yc01 + lineHeight; + yc03 = yc02 + Gap; + yc04 = yc03 + 2 * lineHeight; + yc05 = yc04 + Gap; + yc06 = yc05 + 2 * lineHeight; + + yc07 = yc06 + Gap; + yc12 = yc07 + 3 * lineHeight + Gap / 2; + yc11 = yc12 - lineHeight; + yc10 = yc11 - lineHeight; + yc09 = yc11 - d / 4; + yc08 = yc12 - d / 2; + + xs = 0; + + int y1 = withInfo ? yc12 : yc02; + int y0 = cOsd::OsdTop() + (Setup.ChannelInfoPos ? 0 : cOsd::OsdHeight() - y1); + osd = CreateOsd(cOsd::OsdLeft(), y0, xc00, yc00, xc15 - 1, y1 - 1); + osd->DrawRectangle(xc00, yc00, xc15 - 1, y1 - 1, Theme.Color(clrBackground)); + // Rectangles: + osd->DrawRectangle(xc00, yc00, xc02 - 1, yc02 - 1, frameColor); + if (withInfo) { + osd->DrawRectangle(xc00, yc03, xc02 - 1, yc04 - 1, frameColor); + osd->DrawRectangle(xc00, yc05, xc02 - 1, yc06 - 1, frameColor); + // Elbow: + osd->DrawRectangle(xc00, yc07, xc01 - 1, yc08 - 1, frameColor); + osd->DrawRectangle(xc00, yc08, xc01 - 1, yc12 - 1, clrTransparent); + osd->DrawEllipse (xc00, yc08, xc01 - 1, yc12 - 1, frameColor, 3); + osd->DrawRectangle(xc01, yc07, xc02 - 1, yc12 - 1, frameColor); + osd->DrawEllipse (xc02, yc09, xc04 - 1, yc11 - 1, frameColor, -3); + osd->DrawRectangle(xc02, yc11, xc05 - 1, yc12 - 1, frameColor); + // Status area: + osd->DrawRectangle(xc06, yc11 + lineHeight / 2, xc07 - 1, yc12 - 1, frameColor); + osd->DrawRectangle(xc08, yc11, xc09 - 1, yc12 - 1, frameColor); + osd->DrawRectangle(xc10, yc11, xc11 - 1, yc12 - 1, Theme.Color(clrDeviceBg)); +// osd->DrawRectangle(xc12, yc11, xc13 - 1, yc12 - 1, Theme.Color(clrDateBg)); + osd->DrawRectangle(xc14, yc11, xc14 + lineHeight / 2 - 1, yc12 - 1, frameColor); + osd->DrawRectangle(xc14 + lineHeight / 2, yc11 + lineHeight / 2, xc15 - 1, yc12 - 1, clrTransparent); + osd->DrawEllipse (xc14 + lineHeight / 2, yc11, xc15 - 1, yc12 - 1, frameColor, 5); + } + // Icons: + osd->DrawRectangle(xc14, yc00, xc14 + lineHeight / 2 - 1, yc01 - 1, frameColor); + osd->DrawRectangle(xc14 + lineHeight / 2, yc00, xc15 - 1, yc00 + lineHeight / 2 - 1, clrTransparent); + osd->DrawEllipse (xc14 + lineHeight / 2, yc00, xc15 - 1, yc01 - 1, frameColor, 5); +} + +cLCARSNGDisplayChannel::~cLCARSNGDisplayChannel() +{ + delete tallFont; + delete tinyFont; + delete osd; + cDevice::PrimaryDevice()->ScaleVideo(cRect::Null); +} + +void cLCARSNGDisplayChannel::DrawDate(void) +{ + cString s = DayDateTime(); + if (initial || strcmp(s, lastDate)) { + osd->DrawText(xc12, yc00, s, Theme.Color(clrDateFg), Theme.Color(clrDateBg), cFont::GetFont(fontOsd), xc13 - xc12, lineHeight, taRight | taBorder); + lastDate = s; + } +} + +void cLCARSNGDisplayChannel::DrawTrack(void) +{ + cDevice *Device = cDevice::PrimaryDevice(); + const tTrackId *Track = Device->GetTrack(Device->GetCurrentAudioTrack()); + if (!Track && *lastTrackId.description || Track && strcmp(lastTrackId.description, Track->description)) { + osd->DrawText(xc03, yc07, Track ? Track->description : "", Theme.Color(clrTrackName), Theme.Color(clrBackground), cFont::GetFont(fontOsd), xc07 - xc03); + strn0cpy(lastTrackId.description, Track ? Track->description : "", sizeof(lastTrackId.description)); + } +} + +void cLCARSNGDisplayChannel::DrawSeen(int Current, int Total) +{ + if (lastCurrentPosition >= 0) + return; // to not interfere with SetPositioner() + int Seen = (Total > 0) ? min(xc07 - xc06, int((xc07 - xc06) * double(Current) / Total)) : 0; + if (initial || Seen != lastSeen) { + int y0 = yc11 - ShowSeenExtent; + int y1 = yc11 + lineHeight / 2 - Gap / 2; + osd->DrawRectangle(xc06, y0, xc06 + Seen - 1, y1 - 1, Theme.Color(clrSeen)); + osd->DrawRectangle(xc06 + Seen, y0, xc07 - 1, y1 - 1, Theme.Color(clrBackground)); + // Restzeit anzeigen +// if ((Current < Total) && ((Current / 60) > 0)) +// if ((Current / 60) > 0) + osd->DrawText(xc00, yc03 + lineHeight, ((Current / 60.0) > 0.1) ? cString::sprintf("-%d", max((int)ceil((Total - Current) / 60.0), 0)) : cString::sprintf(" "), Theme.Color(clrChannelFrameFg), frameColor, cFont::GetFont(fontOsd), xc02 - xc00, 0, taRight | taBorder); + lastSeen = Seen; + } +} + +void cLCARSNGDisplayChannel::DrawDevice(void) +{ + const cDevice *Device = cDevice::ActualDevice(); + if (DrawDeviceData(osd, Device, xc10, yc11, xc11, yc12, xs, tinyFont, lastDeviceType, lastCamSlot, Device->DeviceNumber() != lastDeviceNumber)) { + lastDeviceNumber = Device->DeviceNumber(); + // Make sure signal meters are redrawn: + lastSignalStrength = -1; + lastSignalQuality = -1; + lastSignalDisplay = 0; + } +} + +void cLCARSNGDisplayChannel::DrawSignal(void) +{ + time_t Now = time(NULL); + if (Now != lastSignalDisplay) { + DrawDeviceSignal(osd, cDevice::ActualDevice(), xs + lineHeight / 2, yc11, xc11, yc12, lastSignalStrength, lastSignalQuality, initial); + lastSignalDisplay = Now; + } +} + +void cLCARSNGDisplayChannel::SetChannel(const cChannel *Channel, int Number) +{ + int x = xc13; + int xi = x - SymbolSpacing - + bmRecording.Width() - SymbolSpacing - + bmEncrypted.Width() - SymbolSpacing - + bmDolbyDigital.Width() - SymbolSpacing - + bmAudio.Width() - SymbolSpacing - + max(bmTeletext.Width(), bmRadio.Width()) - SymbolSpacing; + osd->DrawRectangle(xc12, yc11, xc13 - 1, yc12 - 1, frameColor); + if (Channel && !Channel->GroupSep()) { + bool rec = cRecordControls::Active(); + x -= bmRecording.Width() + SymbolSpacing; + osd->DrawBitmap(x, yc11 + (yc12 - yc11 - bmRecording.Height()) / 2, bmRecording, Theme.Color(rec ? clrChannelSymbolRecFg : clrChannelSymbolOff), rec ? Theme.Color(clrChannelSymbolRecBg) : frameColor); + x -= bmEncrypted.Width() + SymbolSpacing; + osd->DrawBitmap(x, yc11 + (yc12 - yc11 - bmEncrypted.Height()) / 2, bmEncrypted, Theme.Color(Channel->Ca() ? clrChannelSymbolOn : clrChannelSymbolOff), frameColor); + x -= bmDolbyDigital.Width() + SymbolSpacing; + osd->DrawBitmap(x, yc11 + (yc12 - yc11 - bmDolbyDigital.Height()) / 2, bmDolbyDigital, Theme.Color(Channel->Dpid(0) ? clrChannelSymbolOn : clrChannelSymbolOff), frameColor); + x -= bmAudio.Width() + SymbolSpacing; + osd->DrawBitmap(x, yc11 + (yc12 - yc11 - bmAudio.Height()) / 2, bmAudio, Theme.Color(Channel->Apid(1) ? clrChannelSymbolOn : clrChannelSymbolOff), frameColor); + if (Channel->Vpid()) { + x -= bmTeletext.Width() + SymbolSpacing; + osd->DrawBitmap(x, yc11 + (yc12 - yc11 - bmTeletext.Height()) / 2, bmTeletext, Theme.Color(Channel->Tpid() ? clrChannelSymbolOn : clrChannelSymbolOff), frameColor); + } + else if (Channel->Apid(0)) { + x -= bmRadio.Width() + SymbolSpacing; + osd->DrawBitmap(x, yc11 + (yc12 - yc11 - bmRadio.Height()) / 2, bmRadio, Theme.Color(clrChannelSymbolOn), frameColor); + } + } + cString ChNumber(""); + cString ChName(""); + if (Channel) { + ChName = Channel->Name(); + if (!Channel->GroupSep()) + ChNumber = cString::sprintf("%d%s", Channel->Number(), Number ? "-" : ""); + } + else if (Number) + ChNumber = cString::sprintf("%d-", Number); + else + ChName = ChannelString(NULL, 0); + osd->DrawText(xc00, yc00, ChNumber, Theme.Color(clrChannelFrameFg), frameColor, tallFont, xc02 - xc00, yc02 - yc00, taTop | taRight | taBorder); + osd->DrawText(xc03, yc00, ChName, Theme.Color(clrChannelName), Theme.Color(clrBackground), tallFont, xi - xc03 - lineHeight, 0, taTop | taLeft); + lastSignalDisplay = 0; + if (withInfo) { + if (Channel) { + int x = xc00 + (yc10 - yc09); // compensate for the arc + osd->DrawText(x, yc07, cSource::ToString(Channel->Source()), Theme.Color(clrChannelFrameFg), frameColor, cFont::GetFont(fontOsd), xc02 - x, yc10 - yc07, taTop | taRight | taBorder); + } + DrawDevice(); + } +} + +void cLCARSNGDisplayChannel::SetEvents(const cEvent *Present, const cEvent *Following) +{ + if (!withInfo) + return; + if (present != Present) + lastSeen = -1; + present = Present; + for (int i = 0; i < 2; i++) { + const cEvent *e = !i ? Present : Following; + int y = !i ? yc03 : yc05; + if (e) { + osd->DrawText(xc00, y, e->GetTimeString(), Theme.Color(clrChannelFrameFg), frameColor, cFont::GetFont(fontOsd), xc02 - xc00, 0, taRight | taBorder); + osd->DrawText(xc03, y, e->Title(), Theme.Color(clrEventTitle), Theme.Color(clrBackground), cFont::GetFont(fontOsd), xc13 - xc03); + osd->DrawText(xc03, y + lineHeight, e->ShortText(), Theme.Color(clrEventShortText), Theme.Color(clrBackground), cFont::GetFont(fontSml), xc13 - xc03); + } + else { + osd->DrawRectangle(xc00, y, xc02 - 1, y + lineHeight, frameColor); + osd->DrawRectangle(xc02, y, xc13 - 1, y + 2 * lineHeight, Theme.Color(clrBackground)); + } + } +} + +void cLCARSNGDisplayChannel::SetMessage(eMessageType Type, const char *Text) +{ + if (Text) { + int x0, x1, y0, y1, y2; + if (withInfo) { + x0 = xc06; + x1 = xc13; + y0 = yc11 - ShowSeenExtent; + y1 = yc11; + y2 = yc12; + } + else { + x0 = xc03; + x1 = xc13; + y0 = y1 = yc00; + y2 = yc02; + } + osd->SaveRegion(x0, y0, x1 - 1, y2 - 1); + if (withInfo) + osd->DrawRectangle(xc06, y0, xc07, y1 - 1, Theme.Color(clrBackground)); // clears the "seen" bar + osd->DrawText(x0, y1, Text, Theme.Color(clrMessageStatusFg + 2 * Type), Theme.Color(clrMessageStatusBg + 2 * Type), cFont::GetFont(fontSml), x1 - x0, y2 - y1, taCenter); + message = true; + } + else { + osd->RestoreRegion(); + message = false; + } +} + +void cLCARSNGDisplayChannel::SetPositioner(const cPositioner *Positioner) +{ + if (Positioner) { + int y0 = yc11 - ShowSeenExtent; + int y1 = yc11 + lineHeight / 2 - Gap / 2; + DrawDevicePosition(osd, Positioner, xc06, y0, xc07, y1, lastCurrentPosition); + } + else { + lastCurrentPosition = -1; + initial = true; // to have DrawSeen() refresh the progress bar + } + return; +} + +void cLCARSNGDisplayChannel::Flush(void) +{ + if (withInfo) { + if (!message) { + DrawDate(); + DrawTrack(); + DrawDevice(); + DrawSignal(); + int Current = 0; + int Total = 0; + if (present) { + time_t t = time(NULL); + if (t > present->StartTime()) + Current = t - present->StartTime(); + Total = present->Duration(); + } + DrawSeen(Current, Total); + } + } + osd->Flush(); +// cDevice::PrimaryDevice()->ScaleVideo(videoWindowRect); + initial = false; +} + +// --- cLCARSNGDisplayMenu ------------------------------------------------- + +class cLCARSNGDisplayMenu : public cSkinDisplayMenu { +private: + cOsd *osd; + int xa00, xa01, xa02, xa03, xa04, xa05, xa06, xa07, xa08, xa09; + int yt00, yt01, yt02, yt03, yt04, yt05, yt06, yt07, yt08; + int yc00, yc01, yc02, yc03, yc04, yc05, yc06, yc07, yc08, yc09, yc10, yc11; + int yb00, yb01, yb02, yb03, yb04, yb05, yb06, yb07, yb08, yb09, yb10, yb11, yb12, yb13, yb14, yb15; + int xm00, xm01, xm02, xm03, xm04, xm05, xm06, xm07, xm08; + int ym00, ym01, ym02, ym03, ym04, ym05, ym06, ym07; + int xs00, xs01, xs02, xs03, xs04, xs05, xs06, xs07, xs08, xs09, xs10, xs11, xs12, xs13; + int ys00, ys01, ys02, ys03, ys04, ys05; + int xi00, xi01, xi02, xi03; + int yi00, yi01; + int xb00, xb01, xb02, xb03, xb04, xb05, xb06, xb07, xb08, xb09, xb10, xb11, xb12, xb13, xb14, xb15; + int xd00, xd01, xd02, xd03, xd04, xd05, xd06, xd07; + int yd00, yd01, yd02, yd03, yd04, yd05; + int xs; // starting column for signal display + int lineHeight; + cFont *tinyFont; + cFont *tallFont; + tColor frameColor; + int currentIndex; + cVector<int> deviceOffset; + cVector<bool> deviceRecording; + cString lastDeviceType[MAXDEVICES]; + cVector<cCamSlot *> lastCamSlot; + cVector<int> lastSignalStrength; + cVector<int> lastSignalQuality; + bool initial; + enum eCurrentMode { cmUnknown, cmLive, cmPlay }; + eCurrentMode lastMode; + cString lastDate; + int lastDiskUsageState; + bool lastDiskAlert; + double lastSystemLoad; + int lastTimersState; + time_t lastSignalDisplay; + int lastLiveIndicatorY; + bool lastLiveIndicatorTransferring; + const cChannel *lastChannel; + const cEvent *lastEvent; + const cRecording *lastRecording; + cString lastHeader; + int lastSeen; + static cBitmap bmArrowUp, bmArrowDown, bmTransferMode; + void DrawMainFrameUpper(tColor Color); + void DrawMainFrameLower(void); + void DrawMainButton(const char *Text, int x0, int x1, int x2, int x3, int y0, int y1, tColor ColorFg, tColor ColorBg, const cFont *Font); + void DrawMenuFrame(void); + void DrawMainBracket(void); + void DrawStatusElbows(void); + void DrawDate(void); + void DrawDisk(void); + void DrawLoad(void); + void DrawFrameDisplay(void); + void DrawScrollbar(int Total, int Offset, int Shown, bool CanScrollUp, bool CanScrollDown); + void DrawTimer(const cTimer *Timer, int y, bool MultiRec); + void DrawTimers(void); + void DrawDevice(const cDevice *Device); + void DrawDevices(void); + void DrawLiveIndicator(void); + void DrawSignals(void); + void DrawLive(const cChannel *Channel); + void DrawPlay(cControl *Control); + void DrawInfo(const cEvent *Event, bool WithTime); + void DrawSeen(int Current, int Total); + void DrawTextScrollbar(void); +public: + cLCARSNGDisplayMenu(void); + virtual ~cLCARSNGDisplayMenu(); + virtual void Scroll(bool Up, bool Page); + virtual int MaxItems(void); + virtual void Clear(void); + virtual void SetMenuCategory(eMenuCategory MenuCategory); + virtual void SetTitle(const char *Title); + virtual void SetButtons(const char *Red, const char *Green = NULL, const char *Yellow = NULL, const char *Blue = NULL); + virtual void SetMessage(eMessageType Type, const char *Text); + virtual void SetItem(const char *Text, int Index, bool Current, bool Selectable); + virtual void SetScrollbar(int Total, int Offset); + virtual void SetEvent(const cEvent *Event); + virtual void SetRecording(const cRecording *Recording); + virtual void SetText(const char *Text, bool FixedFont); + virtual int GetTextAreaWidth(void) const; + virtual const cFont *GetTextAreaFont(bool FixedFont) const; + virtual void Flush(void); + }; + +cBitmap cLCARSNGDisplayMenu::bmArrowUp(arrowup_xpm); +cBitmap cLCARSNGDisplayMenu::bmArrowDown(arrowdown_xpm); +cBitmap cLCARSNGDisplayMenu::bmTransferMode(play_xpm); + +cLCARSNGDisplayMenu::cLCARSNGDisplayMenu(void) +{ + tallFont = cFont::CreateFont(Setup.FontOsd, Setup.FontOsdSize * 1.6); + initial = true; + lastMode = cmUnknown; + lastChannel = NULL; + lastEvent = NULL; + lastRecording = NULL; + lastSeen = -1; + lastTimersState = -1; + lastSignalDisplay = 0; + lastLiveIndicatorY = -1; + lastLiveIndicatorTransferring = false; + lastDiskUsageState = -1; + lastDiskAlert = false; + lastSystemLoad = -1; + const cFont *font = cFont::GetFont(fontOsd); + lineHeight = font->Height(); + tinyFont = CreateTinyFont(lineHeight); + frameColor = Theme.Color(clrMenuFrameBg); + currentIndex = -1; + // The outer frame: + int d = 5 * lineHeight; + xa00 = 0; + xa01 = xa00 + d / 2; + xa02 = xa00 + d; + xa03 = xa02 + lineHeight; + xa04 = xa02 + d / 4; + xa05 = xa02 + d; + xa06 = xa05 + Gap; + xa09 = cOsd::OsdWidth(); + xa08 = xa09 - lineHeight; + xa07 = xa08 - Gap; + + yt00 = 0; + yt01 = yt00 + lineHeight; + yt02 = yt01 + lineHeight; + yt03 = yt01 + d / 4; + yt04 = yt02 + Gap; + yt05 = yt00 + d / 2; + yt06 = yt04 + 2 * lineHeight; + yt07 = yt06 + Gap; + yt08 = yt07 + 2 * lineHeight; + +// yc00 = yt06 + Gap; + yc00 = yt08 + Gap; +// yc05 = yc00 + 3 * lineHeight + Gap / 2; // Button in der Mitte + yc05 = yc00 + 5 * lineHeight + Gap / 2; + yc04 = yc05 - lineHeight; + yc03 = yc04 - lineHeight; + yc02 = yc04 - d / 4; + yc01 = yc05 - d / 2; + + yc06 = yc05 + Gap; +// yc06 = yc05 + 2 * lineHeight + Gap; // Button in der Mitte + yc07 = yc06 + lineHeight; + yc08 = yc07 + lineHeight; + yc09 = yc07 + d / 4; + yc10 = yc06 + d / 2; + yc11 = yc06 + 3 * lineHeight + Gap / 2; + + yb00 = yc11 + Gap; + yb01 = yb00 + 2 * lineHeight; + yb02 = yb01 + Gap; + yb03 = yb02 + 2 * lineHeight; + yb04 = yb03 + Gap; // Load + yb05 = yb04 + 1 * lineHeight; // Load % + yb06 = yb05 + Gap; + yb07 = yb06 + 2 * lineHeight; + yb08 = yb07 + Gap; + + yb15 = cOsd::OsdHeight(); + yb14 = yb15 - lineHeight; + yb13 = yb14 - lineHeight; + yb12 = yb14 - d / 4; + yb11 = yb15 - d / 2; +// yb10 = yb13 - Gap - 2 * lineHeight; // VDR + yb10 = yb13 - Gap - lineHeight; + yb09 = yb10 - Gap; + + // Compensate for large font size: + if (yb09 - yb08 < 2 * lineHeight) { + yb08 = yb06; + yb06 = 0; // drop empty rectangle + } + if (yb09 - yb08 < 2 * lineHeight) { + yb05 = yb09; + yb08 = 0; // drop "LCARSNG" display + } + if (yb05 - yb04 < 1 * lineHeight) { + yb03 = yb09; + yb04 = 0; // drop "LOAD" display + } + if (yb03 - yb02 < 2 * lineHeight) { + yb01 = yb09; + yb02 = 0; // drop "DISK" display + } + // Anything else is just insanely large... + + // The main command menu: + xm00 = xa03; + xm01 = xa05; + xm02 = xa06; + xm08 = (xa09 + xa00) / 2; + xm07 = xm08 - lineHeight; + xm06 = xm07 - lineHeight / 2; + xm05 = xm06 - lineHeight / 2; + xm04 = xm05 - lineHeight; + xm03 = xm04 - Gap; + ym00 = yc08; // Bezug Menü oben + ym01 = ym00 + lineHeight / 2; + ym02 = ym01 + lineHeight / 2; + ym03 = ym02 + Gap; + ym07 = yb15; + ym06 = ym07 - lineHeight / 2; + ym05 = ym06 - lineHeight / 2; + ym04 = ym05 - Gap; + + // The status area: + xs00 = xm08 + Gap + lineHeight + Gap; + xs13 = xa09; //cOsd::OsdWidth() + xs12 = xa08; + xs11 = xa07; + xs05 = (xs00 + xs11 + Gap) / 2; + xs04 = xs05 - lineHeight / 2; + xs03 = xs04 - lineHeight / 2; + xs02 = xs03 - 2 * lineHeight; + xs01 = xs02 - Gap; + xs06 = xs05 + Gap; + xs07 = xs06 + lineHeight / 2; + xs08 = xs07 + lineHeight / 2; + xs09 = xs08 + 2 * lineHeight; + xs10 = xs09 + Gap; + ys00 = yc06; // Bezug Status oben + ys01 = ys00 + lineHeight; + ys02 = ys01 + lineHeight / 2; + ys04 = ys01 + lineHeight; + ys03 = ys04 - Gap; + ys05 = yb15; + + // The color buttons in submenus: + xb00 = xa06; + xb15 = xa07; + int w = (xa08 - xa06) / 4; + xb01 = xb00 + lineHeight / 2; + xb02 = xb01 + Gap; + xb04 = xb00 + w; + xb03 = xb04 - Gap; + xb05 = xb04 + lineHeight / 2; + xb06 = xb05 + Gap; + xb08 = xb04 + w; + xb07 = xb08 - Gap; + xb09 = xb08 + lineHeight / 2; + xb10 = xb09 + Gap; + xb12 = xb08 + w; + xb11 = xb12 - Gap; + xb13 = xb12 + lineHeight / 2; + xb14 = xb13 + Gap; + + // The color buttons in the main menu: + int r = lineHeight; +// xd07 = xa09; + xd07 = xm05 - Gap; + xd06 = xd07 - r; + xd05 = xd06 - 5 * r; + xd04 = xd05 - r; + xd03 = xd04 - Gap; + xd02 = xd03 - r; + xd01 = xd02 - 5 * r; + xd00 = xd01 - r; + yd00 = yt00; + yd05 = yc04 - 3 * Gap; +// yd05 = yc06 - Gap; // Button in der Mitte + yd04 = yd05 - r; //0.85 * r; // Button in der Mitte + yd03 = yd04 - Gap; + yd02 = yd03 - r; //0.85 * r; // Button in der Mitte + yd01 = yd02 - Gap; + + xs = 0; + + osd = CreateOsd(cOsd::OsdLeft(), cOsd::OsdTop(), xa00, yt00, xa09 - 1, yb15 - 1); +} + +cLCARSNGDisplayMenu::~cLCARSNGDisplayMenu() +{ + delete tallFont; + delete tinyFont; + delete osd; + cDevice::PrimaryDevice()->ScaleVideo(cRect::Null); +} + +void cLCARSNGDisplayMenu::SetMenuCategory(eMenuCategory MenuCategory) +{ + if (initial || MenuCategory != cSkinDisplayMenu::MenuCategory()) { + cSkinDisplayMenu::SetMenuCategory(MenuCategory); + initial = true; + osd->DrawRectangle(xa00, yt00, xa09 - 1, yb15 - 1, Theme.Color(clrBackground)); + switch (MenuCategory) { + case mcMain: + case mcSetup: + case mcCommand: + yi00 = ym03; + yi01 = ym04; + xi00 = xm00; + xi01 = xm03; + xi02 = xm04; + xi03 = xm05; + lastTimersState = -1; + DrawMainFrameLower(); + DrawMainBracket(); + DrawStatusElbows(); + break; + case mcChannel: + osd->DrawRectangle(xa00, yt00, xa09 - 1, yb15 - 1, 0x00000000); + yi00 = ym03; + yi01 = ym04; + xi00 = xm00; + xi01 = xm03; + xi02 = xm04; + xi03 = xm05; + DrawMainBracket(); + break; + case mcSchedule: + case mcScheduleNow: + case mcScheduleNext: + case mcEvent: + case mcRecording: + case mcRecordingInfo: + case mcTimer: + case mcTimerEdit: + yi00 = ym00; + yi01 = ym07; + xi00 = xa03; + xi01 = xa07; + xi02 = xa08; + xi03 = xa09; + DrawMainFrameLower(); + DrawMainBracket(); + break; + default: + yi00 = yt02; + yi01 = yb13; + xi00 = xa03; + xi01 = xa07; + xi02 = xa08; + xi03 = xa09; + DrawMenuFrame(); + } + } +} + +void cLCARSNGDisplayMenu::DrawMainFrameUpper(tColor Color) +{ + // Top left rectangles: + osd->DrawRectangle(xa00, yt00, xa02 - 1, yt02 - 1, Color); + osd->DrawRectangle(xa00, yt04, xa02 - 1, yt06 - 1, Color); + osd->DrawRectangle(xa00, yt07, xa02 - 1, yt08 - 1, Color); + // Upper elbow: + osd->DrawRectangle(xa00, yc00, xa01 - 1, yc01 - 1, Color); + osd->DrawEllipse (xa00, yc01, xa01 - 1, yc05 - 1, Color, 3); + osd->DrawRectangle(xa01, yc00, xa02 - 1, yc05 - 1, Color); + osd->DrawEllipse (xa02, yc02, xa04 - 1, yc04 - 1, Color, -3); + osd->DrawRectangle(xa02, yc04, xa05 - 1, yc05 - 1, Color); + // Upper delimiter: + osd->DrawRectangle(xa06, yc04 + lineHeight / 2, xm03 - 1, yc05 - 1, Color); + osd->DrawRectangle(xm03 + Gap, yc04 + lineHeight / 2, xm07 - 1, yc05 - 1, Color); + // Top right rectangles: + osd->DrawRectangle(xm07, yt00, xm08 - 1, yc04 -Gap - 1, Color); + osd->DrawEllipse (xm07, yc04, xm08 - 1, yc05 - 1, Color, 4); + osd->DrawEllipse (xm05, yc04, xm07 - 1, yc05 - 1 - lineHeight / 2, Color, -4); +} + +void cLCARSNGDisplayMenu::DrawMainFrameLower(void) +{ +// unterer gelber Rahmen + const cFont *font = cFont::GetFont(fontOsd); + // Lower elbow: + osd->DrawRectangle(xa00, yc10, xa01 - 1, yc11 - 1, frameColor); + osd->DrawEllipse (xa00, yc06, xa01 - 1, yc10 - 1, frameColor, 2); + osd->DrawRectangle(xa01, yc06, xa02 - 1, yc11 - 1, frameColor); + osd->DrawEllipse (xa02, yc07, xa04 - 1, yc09 - 1, frameColor, -2); + osd->DrawRectangle(xa02, yc06, xa05 - 1, yc07 - 1, frameColor); + // Lower delimiter: + osd->DrawRectangle(xa06, yc06, xm03 - 1, yc07 - lineHeight / 2 - 1, frameColor); + osd->DrawRectangle(xm03 + Gap, yc06, xm08 - 1, yc07 - 1, frameColor); + osd->DrawRectangle(xm08 + Gap, yc06, xs00 - Gap - 1, yc07 - 1, frameColor); + // VDR version: + osd->DrawRectangle(xa00, yb10, xa02 - 1, yb15 - 1, frameColor); + osd->DrawText(xa00, yb10, "VDR", Theme.Color(clrMenuFrameFg), frameColor, tallFont, xa02 - xa00, yb11 - yb10, taTop | taRight | taBorder); + osd->DrawText(xa00, yb15 - lineHeight, VDRVERSION, Theme.Color(clrMenuFrameFg), frameColor, font, xa02 - xa00, lineHeight, taBottom | taRight | taBorder); +} + +void cLCARSNGDisplayMenu::DrawMainButton(const char *Text, int x0, int x1, int x2, int x3, int y0, int y1, tColor ColorFg, tColor ColorBg, const cFont *Font) +{ + int h = y1 - y0; + osd->DrawEllipse(x0, y0, x1 - 1, y1 - 1, ColorBg, 7); + osd->DrawText(x1, y0, Text, ColorFg, ColorBg, Font, x2 - x1, h, taBottom | taRight); + osd->DrawEllipse(x2, y0, x3 - 1, y1 - 1, ColorBg, 5); +} + +void cLCARSNGDisplayMenu::DrawMenuFrame(void) +{ + // Upper elbow: + osd->DrawRectangle(xa00, yt05, xa01 - 1, yt06 - 1, frameColor); + osd->DrawRectangle(xa00, yt00, xa01 - 1, yt05 - 1, clrTransparent); + osd->DrawEllipse (xa00, yt00, xa01 - 1, yt05 - 1, frameColor, 2); + osd->DrawRectangle(xa01, yt00, xa02 - 1, yt06 - 1, frameColor); + osd->DrawEllipse (xa02, yt01, xa04 - 1, yt03 - 1, frameColor, -2); + osd->DrawRectangle(xa02, yt00, xa05 - 1, yt01 - 1, frameColor); + osd->DrawRectangle(xa06, yt00, xa07 - 1, yt01 - 1, frameColor); + osd->DrawRectangle(xa08, yt00, xa08 + lineHeight / 2 - 1, yt01 - 1, frameColor); + osd->DrawRectangle(xa08 + lineHeight / 2, yt00, xa09 - 1, yt00 + lineHeight / 2 - 1, clrTransparent); + osd->DrawEllipse (xa08 + lineHeight / 2, yt00, xa09 - 1, yt01 - 1, frameColor, 5); + // Center part: + osd->DrawRectangle(xa00, yt06 + Gap, xa02 - 1, yc00 - 1 - Gap, frameColor); + osd->DrawRectangle(xa00, yc00, xa02 - 1, yc11 - 1, frameColor); + // Lower elbow: + osd->DrawRectangle(xa00, yb10, xa02 - 1, yb11 - 1, frameColor); + osd->DrawRectangle(xa00, yb11, xa01 - 1, yb15 - 1, clrTransparent); + osd->DrawEllipse (xa00, yb11, xa01 - 1, yb15 - 1, frameColor, 3); + osd->DrawRectangle(xa01, yb11, xa02 - 1, yb15 - 1, frameColor); + osd->DrawEllipse (xa02, yb12, xa04 - 1, yb14 - 1, frameColor, -3); + osd->DrawRectangle(xa02, yb14, xa05 - 1, yb15 - 1, frameColor); + osd->DrawRectangle(xa08, yb14, xa08 + lineHeight / 2 - 1, yb15 - 1, frameColor); + osd->DrawRectangle(xa08 + lineHeight / 2, yb14 + lineHeight / 2, xa09 - 1, yb15 - 1, clrTransparent); + osd->DrawEllipse (xa08 + lineHeight / 2, yb14, xa09 - 1, yb15 - 1, frameColor, 5); + osd->DrawText(xa00, yb10, "VDR", Theme.Color(clrMenuFrameFg), frameColor, tallFont, xa02 - xa00, yb11 - yb10, taTop | taRight | taBorder); + // Color buttons: + tColor lutBg[] = { clrButtonRedBg, clrButtonGreenBg, clrButtonYellowBg, clrButtonBlueBg }; + osd->DrawRectangle(xb00, yb14, xb01 - 1, yb15 - 1, Theme.Color(lutBg[Setup.ColorKey0])); + osd->DrawRectangle(xb04, yb14, xb05 - 1, yb15 - 1, Theme.Color(lutBg[Setup.ColorKey1])); + osd->DrawRectangle(xb08, yb14, xb09 - 1, yb15 - 1, Theme.Color(lutBg[Setup.ColorKey2])); + osd->DrawRectangle(xb12, yb14, xb13 - 1, yb15 - 1, Theme.Color(lutBg[Setup.ColorKey3])); +} + +void cLCARSNGDisplayMenu::DrawDate(void) +{ + cString s = DayDateTime(); + if (initial || strcmp(s, lastDate)) { + const cFont *font = cFont::GetFont(fontOsd); + tColor ColorFg = Theme.Color(clrDateFg); + tColor ColorBg = Theme.Color(clrDateBg); + lastDate = s; + const char *t = strrchr(s, ' '); + osd->DrawText(xa00, yb01 - lineHeight, t, ColorFg, ColorBg, font, xa02 - xa00, lineHeight, taBottom | taRight | taBorder); + s.Truncate(t - s); + osd->DrawText(xa00, yb00, s, ColorFg, ColorBg, font, xa02 - xa00, yb01 - yb00 - lineHeight, taTop | taRight | taBorder); + } +} + +void cLCARSNGDisplayMenu::DrawDisk(void) +{ + if (yb02) { + if (cVideoDiskUsage::HasChanged(lastDiskUsageState) || initial) { // must call HasChanged() first, or it shows an outdated value in the 'initial' case! + const cFont *font = cFont::GetFont(fontOsd); + int DiskUsage = cVideoDiskUsage::UsedPercent(); + bool DiskAlert = DiskUsage > DISKUSAGEALERTLIMIT; + tColor ColorFg = DiskAlert ? Theme.Color(clrAlertFg) : Theme.Color(clrMenuFrameFg); + tColor ColorBg = DiskAlert ? Theme.Color(clrAlertBg) : frameColor; + if (initial || DiskAlert != lastDiskAlert) + osd->DrawText(xa00, yb02, tr("DISK"), ColorFg, ColorBg, tinyFont, xa02 - xa00, yb03 - yb02, taTop | taLeft | taBorder); + osd->DrawText(xa01, yb02, cString::sprintf("%02d%s", DiskUsage, "%"), ColorFg, ColorBg, font, xa02 - xa01, lineHeight, taBottom | taRight | taBorder); + osd->DrawText(xa00, yb03 - lineHeight, cString::sprintf("%02d:%02d", cVideoDiskUsage::FreeMinutes() / 60, cVideoDiskUsage::FreeMinutes() % 60), ColorFg, ColorBg, font, xa02 - xa00, 0, taBottom | taRight | taBorder); + lastDiskAlert = DiskAlert; + } + } +} + +void cLCARSNGDisplayMenu::DrawLoad(void) +{ + if (yb04) { + tColor ColorFg = Theme.Color(clrMenuFrameFg); + tColor ColorBg = frameColor; + if (initial) + osd->DrawText(xa00, yb04, tr("LOAD"), ColorFg, ColorBg, tinyFont, xa02 - xa00, yb05 - yb04, taTop | taLeft | taBorder); + double SystemLoad; + if (getloadavg(&SystemLoad, 1) > 0) { + if (initial || SystemLoad != lastSystemLoad) { + osd->DrawText(xa01, yb04, cString::sprintf("%.1f", SystemLoad), ColorFg, ColorBg, cFont::GetFont(fontOsd), xa02 - xa01, lineHeight, taBottom | taRight | taBorder); + lastSystemLoad = SystemLoad; + } + } + } +} + +void cLCARSNGDisplayMenu::DrawMainBracket(void) +{ + const cFont *font = cFont::GetFont(fontOsd); + tColor Color = Theme.Color(clrMenuMainBracket); + if (MenuCategory() != mcSchedule && MenuCategory() != mcScheduleNow && MenuCategory() != mcScheduleNext && MenuCategory() != mcEvent && MenuCategory() != mcRecording && MenuCategory() != mcRecordingInfo && MenuCategory() != mcTimer && MenuCategory() != mcTimerEdit) { + osd->DrawRectangle(xm00, ym00, xm01 - 1, ym01 - 1, Color); + osd->DrawRectangle(xm02, ym00, xm07 - 1, ym01 - 1, Color); + osd->DrawEllipse (xm07, ym00, xm08 - 1, ym02 - 1, Color, 1); + osd->DrawEllipse (xm06, ym01, xm07 - 1, ym02 - 1, Color, -1); + osd->DrawRectangle(xm07, ym03, xm08 - 1, ym04 - 1, Color); + osd->DrawEllipse (xm06, ym05, xm07 - 1, ym06 - 1, Color, -4); + osd->DrawEllipse (xm07, ym05, xm08 - 1, ym07 - 1, Color, 4); + osd->DrawRectangle(xm02, ym06, xm07 - 1, ym07 - 1, Color); + osd->DrawRectangle(xm00, ym06, xm01 - 1, ym07 - 1, Color); + } + if (MenuCategory() == mcSetup) + osd->DrawText(xm02, ys00, tr("Setup"), Theme.Color(clrMenuFrameFg), frameColor, font, xm04 - xm02 - Gap, lineHeight, taBottom | taLeft | taBorder); + if (MenuCategory() == mcCommand) + osd->DrawText(xm02, ys00, tr("Commands"), Theme.Color(clrMenuFrameFg), frameColor, font, xm04 - xm02 - Gap, lineHeight, taBottom | taLeft | taBorder); + if (MenuCategory() == mcChannel) + osd->DrawText(xm02, ys00, tr("Channels"), Theme.Color(clrMenuFrameFg), frameColor, font, xm04 - xm02 - Gap, lineHeight, taBottom | taLeft | taBorder); + if (MenuCategory() != mcMain && MenuCategory() != mcSchedule && MenuCategory() != mcScheduleNow && MenuCategory() != mcScheduleNext && MenuCategory() != mcEvent && MenuCategory() != mcRecording && MenuCategory() != mcRecordingInfo && MenuCategory() != mcTimer && MenuCategory() != mcTimerEdit) { + osd->DrawRectangle(xm04 - Gap, ym00, xm04, ym01 - 1, Theme.Color(clrBackground)); + osd->DrawRectangle(xm04 - Gap, ym06, xm04, ym07 - 1, Theme.Color(clrBackground)); + } +} + +void cLCARSNGDisplayMenu::DrawStatusElbows(void) +{ + const cFont *font = cFont::GetFont(fontOsd); + osd->DrawText (xs00, ys00, tr("TIMERS"), Theme.Color(clrMenuFrameFg), frameColor, font, xs01 - xs00, lineHeight, taBottom | taLeft | taBorder); + osd->DrawRectangle(xs02, ys00, xs03 - 1, ys01 - 1, frameColor); + osd->DrawEllipse (xs03, ys00, xs05 - 1, ys01 - 1, frameColor, 1); + osd->DrawEllipse (xs03, ys01, xs04 - 1, ys02 - 1, frameColor, -1); + osd->DrawRectangle(xs04, ys01, xs05 - 1, ys03 - 1, frameColor); + osd->DrawRectangle(xs04, ys04, xs05 - 1, ys05 - 1, frameColor); + osd->DrawText (xs10, ys00, tr("DEVICES"), Theme.Color(clrMenuFrameFg), frameColor, font, xs11 - xs10, lineHeight, taBottom | taRight | taBorder); + osd->DrawRectangle(xs08, ys00, xs09 - 1, ys01 - 1, frameColor); + osd->DrawEllipse (xs06, ys00, xs08 - 1, ys01 - 1, frameColor, 2); + osd->DrawEllipse (xs07, ys01, xs08 - 1, ys02 - 1, frameColor, -2); + osd->DrawRectangle(xs06, ys01, xs07 - 1, ys03 - 1, frameColor); + osd->DrawRectangle(xs06, ys04, xs07 - 1, ys05 - 1, frameColor); + osd->DrawRectangle(xs12, ys00, xs13 - 1, ys01 - 1, frameColor); +} + +void cLCARSNGDisplayMenu::DrawFrameDisplay(void) +{ + if (MenuCategory() != mcChannel) { + DrawDate(); + DrawDisk(); + DrawLoad(); + if (initial) { + if (yb06) + osd->DrawRectangle(xa00, yb06, xa02 - 1, yb07 - 1, frameColor); + if (yb08) { + const cFont *font = cFont::GetFont(fontOsd); + osd->DrawRectangle(xa00, yb08, xa02 - 1, yb09 - 1, frameColor); + osd->DrawText(xa00, yb09 - lineHeight, "LCARSNG", Theme.Color(clrMenuFrameFg), frameColor, font, xa02 - xa00, lineHeight, taBottom | taRight | taBorder); + } + } + } +} + +void cLCARSNGDisplayMenu::DrawScrollbar(int Total, int Offset, int Shown, bool CanScrollUp, bool CanScrollDown) +{ + int x0, x1, tt, tb; + tColor ClearColor; + if (MenuCategory() == mcMain || MenuCategory() == mcSetup || MenuCategory() == mcCommand || MenuCategory() == mcChannel) { + x0 = xm07; + x1 = xm08; + tt = ym03; + tb = ym04; + ClearColor = Theme.Color(clrMenuMainBracket); + } + else { + x0 = xa02 + Gap; + x1 = x0 + lineHeight / 2; + ClearColor = Theme.Color(clrBackground); + int d = TextFrame; + if (MenuCategory() == mcSchedule || MenuCategory() == mcScheduleNow || MenuCategory() == mcScheduleNext || MenuCategory() == mcEvent || MenuCategory() == mcRecording || MenuCategory() == mcRecordingInfo || MenuCategory() == mcTimer || MenuCategory() == mcTimerEdit) { + tt = yb00; + tb = yb07 + lineHeight + Gap; + } + else { + tt = yc00; + tb = yc11; + if (CanScrollUp) + osd->DrawBitmap(xa02 - bmArrowUp.Width() - d, tt + d, bmArrowUp, Theme.Color(clrMenuScrollbarArrow), frameColor); + else + osd->DrawRectangle(xa02 - bmArrowUp.Width() - d, tt + d, xa02 - d - 1, tt + d + bmArrowUp.Height() - 1, frameColor); + if (CanScrollDown) + osd->DrawBitmap(xa02 - bmArrowDown.Width() - d, tb - d - bmArrowDown.Height(), bmArrowDown, Theme.Color(clrMenuScrollbarArrow), frameColor); + else + osd->DrawRectangle(xa02 - bmArrowDown.Width() - d, tb - d - bmArrowDown.Height(), xa02 - d - 1, tb - d - 1, frameColor); + } + } + if (Total > 0 && Total > Shown) { + int sw = x1 - x0; + int sh = max(int((tb - tt) * double(Shown) / Total + 0.5), sw); + int st = min(int(tt + (tb - tt) * double(Offset) / Total + 0.5), tb - sh); + int sb = min(st + sh, tb); + osd->DrawRectangle(x0, tt, x1 - 1, tb - 1, Theme.Color(clrMenuScrollbarTotal)); + osd->DrawRectangle(x0, st, x1 - 1, sb - 1, Theme.Color(clrMenuScrollbarShown)); + } + else if (MenuCategory() != mcMain && MenuCategory() != mcSetup && MenuCategory() != mcCommand && MenuCategory() != mcChannel) + osd->DrawRectangle(x0, tt, x1 - 1, tb - 1, ClearColor); +} + +void cLCARSNGDisplayMenu::DrawTimer(const cTimer *Timer, int y, bool MultiRec) +{ + // The timer data: + bool Alert = !Timer->Recording() && Timer->Pending(); + tColor ColorFg = Alert ? Theme.Color(clrAlertFg) : Theme.Color(clrTimerFg); + tColor ColorBg = Alert ? Theme.Color(clrAlertBg) : Theme.Color(clrTimerBg); + osd->DrawRectangle(xs00, y, xs03 - 1, y + lineHeight - 1, ColorBg); + cString Date; + if (Timer->Recording()) + Date = cString::sprintf("-%s", *TimeString(Timer->StopTime())); + else { + time_t Now = time(NULL); + cString Today = WeekDayName(Now); + cString Time = TimeString(Timer->StartTime()); + cString Day = WeekDayName(Timer->StartTime()); + if (Timer->StartTime() > Now + 6 * SECSINDAY) + Date = DayDateTime(Timer->StartTime()); + else if (strcmp(Day, Today) != 0) + Date = cString::sprintf("%s %s", *Day, *Time); + else + Date = Time; + } + if (Timer->Flags() & tfVps) + Date = cString::sprintf("VPS %s", *Date); + const cChannel *Channel = Timer->Channel(); + const cEvent *Event = Timer->Event(); + int d = max(TextFrame / 2, 1); + if (Channel) { + osd->DrawText(xs00 + d, y, Channel->Name(), ColorFg, ColorBg, tinyFont, xs03 - xs00 - d); + osd->DrawText(xs03 - tinyFont->Width(Date) - d, y, Date, ColorFg, ColorBg, tinyFont); + } + if (Event) + osd->DrawText(xs00 + d, y + lineHeight - tinyFont->Height(), Event->Title(), ColorFg, ColorBg, tinyFont, xs03 - xs00 - 2 * d); + // The timer recording indicator: + if (Timer->Recording()) + osd->DrawRectangle(xs03 + Gap, y - (MultiRec ? Gap : 0), xs04 - Gap / 2 - 1, y + lineHeight - 1, Theme.Color(clrMenuTimerRecording)); +} + +void cLCARSNGDisplayMenu::DrawTimers(void) +{ + if (Timers.Modified(lastTimersState)) { + deviceRecording.Clear(); + const cFont *font = cFont::GetFont(fontOsd); + osd->DrawRectangle(xs00, ys04, xs04 - 1, ys05 - 1, Theme.Color(clrBackground)); + osd->DrawRectangle(xs07, ys04, xs13 - 1, ys05 - 1, Theme.Color(clrBackground)); + cSortedTimers SortedTimers; + cVector<int> FreeDeviceSlots; + int NumDevices = 0; + int y = ys04; + // Timers and recording devices: + while (1) { + int NumTimers = 0; + const cDevice *Device = NULL; + for (int i = 0; i < SortedTimers.Size(); i++) { + if (y + lineHeight > ys05) + break; + if (const cTimer *Timer = SortedTimers[i]) { + if (Timer->Recording()) { + if (cRecordControl *RecordControl = cRecordControls::GetRecordControl(Timer)) { + if (!Device || Device == RecordControl->Device()) { + DrawTimer(Timer, y, NumTimers > 0); + NumTimers++; + if (!Device) { + Device = RecordControl->Device(); + deviceOffset[Device->DeviceNumber()] = y; + deviceRecording[Device->DeviceNumber()] = true; + NumDevices++; + } + else + FreeDeviceSlots.Append(y); + y += lineHeight + Gap; + } + else + continue; + } + SortedTimers[i] = NULL; + } + else if (!Device && Timer->HasFlags(tfActive)) { + DrawTimer(Timer, y, false); + FreeDeviceSlots.Append(y); + y += lineHeight + Gap; + SortedTimers[i] = NULL; + } + } + } + if (!Device) + break; + } + // Devices currently not recording: + int Slot = 0; + for (int i = 0; i < cDevice::NumDevices(); i++) { + if (const cDevice *Device = cDevice::GetDevice(i)) { + if (Device->NumProvidedSystems()) { + if (!deviceRecording[Device->DeviceNumber()]) { + if (Slot < FreeDeviceSlots.Size()) { + y = FreeDeviceSlots[Slot]; + Slot++; + } + if (y + lineHeight > ys05) + break; + deviceOffset[Device->DeviceNumber()] = y; + y += lineHeight + Gap; + NumDevices++; + } + } + } + } + // Total number of active timers: + int NumTimers = 0; + for (cTimer *Timer = Timers.First(); Timer; Timer = Timers.Next(Timer)) { + if (Timer->HasFlags(tfActive)) + NumTimers++; + } + osd->DrawText(xs02, ys00, itoa(NumTimers), Theme.Color(clrMenuFrameFg), frameColor, font, xs03 - xs02, ys01 - ys00, taBottom | taLeft | taBorder); + osd->DrawText(xs08, ys00, itoa(NumDevices), Theme.Color(clrMenuFrameFg), frameColor, font, xs09 - xs08, ys01 - ys00, taBottom | taRight | taBorder); + lastSignalDisplay = 0; + initial = true; // forces redrawing of devices + } +} + +void cLCARSNGDisplayMenu::DrawDevice(const cDevice *Device) +{ + int dn = Device->DeviceNumber(); + int y = deviceOffset[dn]; + if (y + lineHeight <= ys05) { + if (DrawDeviceData(osd, Device, xs08, y, xs11, y + lineHeight, xs, tinyFont, lastDeviceType[dn], lastCamSlot[dn], initial)) { + // Make sure signal meters are redrawn: + lastSignalStrength[dn] = -1; + lastSignalQuality[dn] = -1; + lastSignalDisplay = 0; + } + // The device recording indicator: + if (deviceRecording[dn]) + osd->DrawRectangle(xs07 + Gap / 2, y, xs08 - Gap - 1, y + lineHeight - 1, Theme.Color(clrMenuDeviceRecording)); + } +} + +void cLCARSNGDisplayMenu::DrawDevices(void) +{ + for (int i = 0; i < cDevice::NumDevices(); i++) { + if (const cDevice *Device = cDevice::GetDevice(i)) { + if (Device->NumProvidedSystems()) + DrawDevice(Device); + } + } +} + +void cLCARSNGDisplayMenu::DrawLiveIndicator(void) +{ + cDevice *Device = cDevice::PrimaryDevice(); + int y = -1; + bool Transferring = Device->Transferring(); + if (!Device->Replaying() || Transferring) + y = deviceOffset[cDevice::ActualDevice()->DeviceNumber()]; + if (initial || y != lastLiveIndicatorY || Transferring != lastLiveIndicatorTransferring) { + if (lastLiveIndicatorY >= 0) + osd->DrawRectangle(xs12, lastLiveIndicatorY, xs13 - 1, lastLiveIndicatorY + lineHeight - 1, Theme.Color(clrBackground)); + if (y >= 0) { + tColor ColorBg = Theme.Color(clrChannelFrameBg); + osd->DrawRectangle(xs12, y, xs12 + lineHeight / 2 - 1, y + lineHeight - 1, ColorBg); + osd->DrawEllipse (xs12 + lineHeight / 2, y, xs13 - 1, y + lineHeight - 1, ColorBg, 5); + if (Transferring) { + int w = bmTransferMode.Width(); + int h = bmTransferMode.Height(); + int b = w * w + h * h; // the diagonal of the bitmap (squared) + int c = lineHeight * lineHeight; // the diameter of the circle (squared) + const cBitmap *bm = &bmTransferMode; + if (b > c) { + // the bitmap doesn't fit, so scale it down: + double f = sqrt(double(c) / (2 * b)); + bm = bmTransferMode.Scaled(f, f); + } + osd->DrawBitmap((xs12 + xs13 - bm->Width()) / 2, y + (lineHeight - bm->Height()) / 2, *bm, Theme.Color(clrChannelFrameFg), ColorBg); + if (bm != &bmTransferMode) + delete bm; + } + } + lastLiveIndicatorY = y; + lastLiveIndicatorTransferring = Transferring; + } +} + +void cLCARSNGDisplayMenu::DrawSignals(void) +{ + time_t Now = time(NULL); + if (initial || Now - lastSignalDisplay >= SIGNALDISPLAYDELTA) { + for (int i = 0; i < cDevice::NumDevices(); i++) { + if (const cDevice *Device = cDevice::GetDevice(i)) { + if (Device->NumProvidedSystems()) { + if (int y = deviceOffset[i]) + DrawDeviceSignal(osd, Device, xs + lineHeight / 2, y, xs11, y + lineHeight, lastSignalStrength[i], lastSignalQuality[i], initial); + } + } + } + lastSignalDisplay = Now; + } +} + +void cLCARSNGDisplayMenu::DrawLive(const cChannel *Channel) +{ + if (lastMode != cmLive) { + initial = true; + lastMode = cmLive; + } + if (initial) { + DrawMainFrameUpper(Theme.Color(clrChannelFrameBg)); + osd->DrawText(xd00, yd00, tr("LIVE"), Theme.Color(clrChannelFrameBg), Theme.Color(clrBackground), tallFont, xd07 - xd00, yt02 - yd00, taTop | taRight | taBorder); + } + if (!Channel) + return; + if (initial || Channel != lastChannel) { + osd->DrawText(xa00, yt04, itoa(Channel->Number()), Theme.Color(clrChannelFrameFg), Theme.Color(clrChannelFrameBg), tallFont, xa02 - xa00, yt06 - yt04, taTop | taRight | taBorder); + osd->DrawText(xa03, yt04, Channel->Name(), Theme.Color(clrChannelName), Theme.Color(clrBackground), tallFont, xd07 - xa03, yt06 - yt04, taTop | taLeft); + int x = xa00 + (yc03 - yc02); // compensate for the arc + osd->DrawText(x, yc00, cSource::ToString(Channel->Source()), Theme.Color(clrChannelFrameFg), Theme.Color(clrChannelFrameBg), cFont::GetFont(fontOsd), xa02 - x, yc03 - yc00, taTop | taRight | taBorder); + lastChannel = Channel; + DrawSeen(0, 0); + } + // The current programme: + cSchedulesLock SchedulesLock; + if (const cSchedules *Schedules = cSchedules::Schedules(SchedulesLock)) { + if (const cSchedule *Schedule = Schedules->GetSchedule(Channel)) { + const cEvent *Event = Schedule->GetPresentEvent(); + if (initial || Event != lastEvent) { + DrawInfo(Event, true); + lastEvent = Event; + lastSeen = -1; + } + int Current = 0; + int Total = 0; + if (Event) { + time_t t = time(NULL); + if (t > Event->StartTime()) + Current = t - Event->StartTime(); + Total = Event->Duration(); + } + DrawSeen(Current, Total); + } + } +} + +void cLCARSNGDisplayMenu::DrawPlay(cControl *Control) +{ + if (lastMode != cmPlay) { + initial = true; + lastMode = cmPlay; + } + if (initial) { + DrawMainFrameUpper(Theme.Color(clrReplayFrameBg)); + osd->DrawText(xd00, yd00, tr("PLAY"), Theme.Color(clrReplayFrameBg), Theme.Color(clrBackground), tallFont, xd07 - xd00, yt02 - yd00, taTop | taRight | taBorder); + } + // The current progress: + int Current = 0; + int Total = 0; + if (Control->GetIndex(Current, Total)) + DrawSeen(Current, Total); + // The current programme: + if (const cRecording *Recording = Control->GetRecording()) { + if (initial || Recording != lastRecording) { + const cFont *font = cFont::GetFont(fontOsd); + if (const cRecordingInfo *Info = Recording->Info()) { + osd->DrawText(xa03, yt04, Info->ChannelName(), Theme.Color(clrChannelName), Theme.Color(clrBackground), tallFont, xd07 - xa03, yt06 - yt04, taTop | taLeft); + DrawInfo(Info->GetEvent(), false); + } + else + osd->DrawText(xa03, yt04, Recording->Name(), Theme.Color(clrEventTitle), Theme.Color(clrBackground), font, xd07 - xa03, 0, taTop | taLeft); + osd->DrawText(xa00, yt07, ShortDateString(Recording->Start()), Theme.Color(clrReplayFrameFg), Theme.Color(clrReplayFrameBg), font, xa02 - xa00, 0, taTop | taRight | taBorder); + osd->DrawText(xa00, yt07 + lineHeight, TimeString(Recording->Start()), Theme.Color(clrReplayFrameFg), Theme.Color(clrReplayFrameBg), font, xa02 - xa00, 0, taBottom | taRight | taBorder); + lastRecording = Recording; + } + } + else { + cString Header = Control->GetHeader(); + if (!*lastHeader || strcmp(Header, lastHeader)) { + osd->DrawText(xa03, yt04, Header, Theme.Color(clrMenuText), Theme.Color(clrBackground), tallFont, xd00 - xa03, yd01 - yd00, taTop | taLeft); + lastHeader = Header; + } + } +} + +void cLCARSNGDisplayMenu::DrawInfo(const cEvent *Event, bool WithTime) +{ + if (Event) { + const cFont *font = cFont::GetFont(fontOsd); + int y = yt07; + osd->DrawText(xa03, y, Event->Title(), Theme.Color(clrEventTitle), Theme.Color(clrBackground), font, xd07 - xa03 - lineHeight, lineHeight, taBottom | taLeft); + y += lineHeight; + osd->DrawText(xa03, y, Event->ShortText(), Theme.Color(clrEventShortText), Theme.Color(clrBackground), cFont::GetFont(fontSml), xd07 - xa03 - lineHeight, lineHeight, taTop | taLeft); + if (WithTime) { + osd->DrawText(xa00, y - lineHeight, Event->GetTimeString(), Theme.Color(clrChannelFrameFg), Theme.Color(clrChannelFrameBg), font, xa02 - xa00, lineHeight, taTop | taRight | taBorder); + osd->DrawText(xa00, y, cString::sprintf("-%s", *Event->GetEndTimeString()), Theme.Color(clrChannelFrameFg), Theme.Color(clrChannelFrameBg), font, xa02 - xa00, lineHeight, taBottom | taRight | taBorder); + } + } +} + +void cLCARSNGDisplayMenu::DrawSeen(int Current, int Total) +{ +// Fortschrittsbalken + int Seen = (Total > 0) ? min(xm03 - xm02, int((xm03 - xm02) * double(Current) / Total)) : 0; + if (initial || Seen != lastSeen) { + int y0 = yc04 - ShowSeenExtent; + int y1 = yc04 + lineHeight / 2 - Gap / 2; + osd->DrawRectangle(xm02, y0, xm02 + Seen - 1, y1 - 1, Theme.Color(clrSeen)); + osd->DrawRectangle(xm02 + Seen, y0, xm03 - 1, y1 - 1, Theme.Color(clrBackground)); + lastSeen = Seen; + } +} + +void cLCARSNGDisplayMenu::DrawTextScrollbar(void) +{ + if (textScroller.CanScroll()) + DrawScrollbar(textScroller.Total(), textScroller.Offset(), textScroller.Shown(), textScroller.CanScrollUp(), textScroller.CanScrollDown()); +} + +void cLCARSNGDisplayMenu::Scroll(bool Up, bool Page) +{ + cSkinDisplayMenu::Scroll(Up, Page); + DrawTextScrollbar(); +} + +int cLCARSNGDisplayMenu::MaxItems(void) +{ + switch (MenuCategory()) { + case mcMain: + case mcSetup: + case mcCommand: + case mcChannel: + return (ym04 - ym03) / lineHeight; + break; + case mcSchedule: + case mcScheduleNow: + case mcScheduleNext: + case mcEvent: + case mcRecording: + case mcRecordingInfo: + case mcTimer: + case mcTimerEdit: + return (ym07 - ym00) / lineHeight; + break; + default: + return (yb13 - yt02) / lineHeight; + } +} + +void cLCARSNGDisplayMenu::Clear(void) +{ + textScroller.Reset(); + osd->DrawRectangle(xi00, yi00, xi03 - 1, yi01 - 1, Theme.Color(clrBackground)); +} + +void cLCARSNGDisplayMenu::SetTitle(const char *Title) +{ + const cFont *font = cFont::GetFont(fontOsd); + switch (MenuCategory()) { + case mcMain: + case mcSetup: + case mcCommand: + case mcChannel: + break; + case mcSchedule: + case mcScheduleNow: + case mcScheduleNext: + case mcEvent: + case mcRecording: + case mcRecordingInfo: + case mcTimer: + case mcTimerEdit: + osd->DrawText(xs00, ys00, Title, Theme.Color(clrMenuFrameFg), frameColor, font, xs11 - xs00, lineHeight, taBottom | taRight | taBorder); + osd->DrawRectangle(xs12, ys00, xs13 - 1, ys01 - 1, frameColor); + break; + default: + int w = font->Width(Title); + osd->DrawRectangle(xa06, yt00, xa07 - w - Gap - 1, yt01 - 1, frameColor); + osd->DrawText(xa07 - w - Gap, yt00, Title, Theme.Color(clrMenuTitle), Theme.Color(clrBackground), font, w + Gap, yt01 - yt00, taRight); + } +} + +void cLCARSNGDisplayMenu::SetButtons(const char *Red, const char *Green, const char *Yellow, const char *Blue) +{ + const char *lutText[] = { Red, Green, Yellow, Blue }; + tColor lutFg[] = { clrButtonRedFg, clrButtonGreenFg, clrButtonYellowFg, clrButtonBlueFg }; + tColor lutBg[] = { clrButtonRedBg, clrButtonGreenBg, clrButtonYellowBg, clrButtonBlueBg }; + const cFont *font = cFont::GetFont(fontSml); + if (MenuCategory() == mcMain || MenuCategory() == mcSetup || MenuCategory() == mcCommand || MenuCategory() == mcChannel || MenuCategory() == mcSchedule || MenuCategory() == mcScheduleNow || MenuCategory() == mcScheduleNext || MenuCategory() == mcEvent || MenuCategory() == mcRecording || MenuCategory() == mcRecordingInfo || MenuCategory() == mcTimer || MenuCategory() == mcTimerEdit) { + DrawMainButton(lutText[Setup.ColorKey0], xd00, xd01, xd02, xd03, yd02, yd03, Theme.Color(lutFg[Setup.ColorKey0]), Theme.Color(lutBg[Setup.ColorKey0]), font); + DrawMainButton(lutText[Setup.ColorKey1], xd04, xd05, xd06, xd07, yd02, yd03, Theme.Color(lutFg[Setup.ColorKey1]), Theme.Color(lutBg[Setup.ColorKey1]), font); + DrawMainButton(lutText[Setup.ColorKey2], xd00, xd01, xd02, xd03, yd04, yd05, Theme.Color(lutFg[Setup.ColorKey2]), Theme.Color(lutBg[Setup.ColorKey2]), font); + DrawMainButton(lutText[Setup.ColorKey3], xd04, xd05, xd06, xd07, yd04, yd05, Theme.Color(lutFg[Setup.ColorKey3]), Theme.Color(lutBg[Setup.ColorKey3]), font); + } + else { + int h = yb15 - yb14; + osd->DrawText(xb02, yb14, lutText[Setup.ColorKey0], Theme.Color(lutFg[Setup.ColorKey0]), Theme.Color(lutBg[Setup.ColorKey0]), font, xb03 - xb02, h, taLeft | taBorder); + osd->DrawText(xb06, yb14, lutText[Setup.ColorKey1], Theme.Color(lutFg[Setup.ColorKey1]), Theme.Color(lutBg[Setup.ColorKey1]), font, xb07 - xb06, h, taLeft | taBorder); + osd->DrawText(xb10, yb14, lutText[Setup.ColorKey2], Theme.Color(lutFg[Setup.ColorKey2]), Theme.Color(lutBg[Setup.ColorKey2]), font, xb11 - xb10, h, taLeft | taBorder); + osd->DrawText(xb14, yb14, lutText[Setup.ColorKey3], Theme.Color(lutFg[Setup.ColorKey3]), Theme.Color(lutBg[Setup.ColorKey3]), font, xb15 - xb14, h, taLeft | taBorder); + } +} + +void cLCARSNGDisplayMenu::SetMessage(eMessageType Type, const char *Text) +{ + if (Text) { + osd->SaveRegion(xb00, yb14, xb15 - 1, yb15 - 1); + osd->DrawText(xb00, yb14, Text, Theme.Color(clrMessageStatusFg + 2 * Type), Theme.Color(clrMessageStatusBg + 2 * Type), cFont::GetFont(fontSml), xb15 - xb00, yb15 - yb14, taCenter); + } + else + osd->RestoreRegion(); +} + +void cLCARSNGDisplayMenu::SetItem(const char *Text, int Index, bool Current, bool Selectable) +{ + int y = yi00 + Index * lineHeight; + tColor ColorFg, ColorBg; + if (Current) { + if (TwoColors) { + ColorFg = Theme.Color(clrBackground); + ColorBg = Theme.Color(clrMenuFrameBg); + } + else { + ColorFg = Theme.Color(clrMenuItemCurrentFg); + ColorBg = Theme.Color(clrMenuItemCurrentBg); + } + osd->DrawRectangle(xi00, y, xi01 - 1, y + lineHeight - 1, ColorBg); + osd->DrawRectangle(xi02, y, xi02 + lineHeight / 2 - 1, y + lineHeight - 1, ColorBg); + osd->DrawEllipse (xi02 + lineHeight / 2, y, xi03 - 1, y + lineHeight - 1, ColorBg, 5); + currentIndex = Index; + } + else { + ColorFg = Theme.Color(Selectable ? clrMenuItemSelectable : clrMenuItemNonSelectable); + ColorBg = Theme.Color(clrBackground); + if (currentIndex == Index) + osd->DrawRectangle(xi00, y, xi03 - 1, y + lineHeight - 1, Theme.Color(clrBackground)); + } + const cFont *font = cFont::GetFont(fontOsd); + for (int i = 0; i < MaxTabs; i++) { + const char *s = GetTabbedText(Text, i); + if (s) { + int xt = xi00 + TextSpacing + Tab(i); + osd->DrawText(xt, y, s, ColorFg, ColorBg, font, xi01 - xt); + } + if (!Tab(i + 1)) + break; + } + SetEditableWidth(xi02 - xi00 - TextSpacing - Tab(1)); +} + +void cLCARSNGDisplayMenu::SetScrollbar(int Total, int Offset) +{ + DrawScrollbar(Total, Offset, MaxItems(), Offset > 0, Offset + MaxItems() < Total); +} + +void cLCARSNGDisplayMenu::SetEvent(const cEvent *Event) +{ + if (!Event) + return; + const cFont *font = cFont::GetFont(fontOsd); + int xl = xi00; + int y = yi00; + cTextScroller ts; + char t[32]; + snprintf(t, sizeof(t), "%s %s - %s", *Event->GetDateString(), *Event->GetTimeString(), *Event->GetEndTimeString()); + ts.Set(osd, xl, y, xi01 - xl, yi01 - y, t, font, Theme.Color(clrEventTime), Theme.Color(clrBackground)); + if (Event->Vps() && Event->Vps() != Event->StartTime()) { + cString buffer = cString::sprintf(" VPS: %s ", *Event->GetVpsString()); + const cFont *font = cFont::GetFont(fontSml); + int w = font->Width(buffer); + osd->DrawText(xi01 - w, y, buffer, Theme.Color(clrMenuFrameFg), frameColor, font, w); + int yb = y + font->Height(); + osd->DrawRectangle(xi02, y, xi02 + lineHeight / 2 - 1, yb - 1, frameColor); + osd->DrawEllipse (xi02 + lineHeight / 2, y, xi03 - 1, yb - 1, frameColor, 5); + } + y += ts.Height(); + if (Event->ParentalRating()) { + cString buffer = cString::sprintf(" %s ", *Event->GetParentalRatingString()); + const cFont *font = cFont::GetFont(fontSml); + int w = font->Width(buffer); + osd->DrawText(xi01 - w, y, buffer, Theme.Color(clrMenuFrameFg), frameColor, font, w); + int yb = y + font->Height(); + osd->DrawRectangle(xi02, y, xi02 + lineHeight / 2 - 1, yb - 1, frameColor); + osd->DrawEllipse (xi02 + lineHeight / 2, y, xi03 - 1, yb - 1, frameColor, 5); + } + y += font->Height(); + ts.Set(osd, xl, y, xi01 - xl, yi01 - y, Event->Title(), font, Theme.Color(clrEventTitle), Theme.Color(clrBackground)); + y += ts.Height(); + if (!isempty(Event->ShortText())) { + const cFont *font = cFont::GetFont(fontSml); + ts.Set(osd, xl, y, xi01 - xl, yi01 - y, Event->ShortText(), font, Theme.Color(clrEventShortText), Theme.Color(clrBackground)); + y += ts.Height(); + } + y += font->Height(); + if (!isempty(Event->Description())) { + int yt = y; + int yb = yi01; + textScroller.Set(osd, xl, yt, xi01 - xl, yb - yt, Event->Description(), font, Theme.Color(clrEventDescription), Theme.Color(clrBackground)); + DrawTextScrollbar(); + } +} + +void cLCARSNGDisplayMenu::SetRecording(const cRecording *Recording) +{ + if (!Recording) + return; + const cRecordingInfo *Info = Recording->Info(); + const cFont *font = cFont::GetFont(fontOsd); + int xl = xi00; + int y = yi00; + cTextScroller ts; + cString t = cString::sprintf("%s %s %s", *DateString(Recording->Start()), *TimeString(Recording->Start()), Info->ChannelName() ? Info->ChannelName() : ""); + ts.Set(osd, xl, y, xi01 - xl, yi01 - y, t, font, Theme.Color(clrEventTime), Theme.Color(clrBackground)); + y += ts.Height(); + if (Info->GetEvent()->ParentalRating()) { + cString buffer = cString::sprintf(" %s ", *Info->GetEvent()->GetParentalRatingString()); + const cFont *font = cFont::GetFont(fontSml); + int w = font->Width(buffer); + osd->DrawText(xi01 - w, y, buffer, Theme.Color(clrMenuFrameFg), frameColor, font, w); + int yb = y + font->Height(); + osd->DrawRectangle(xi02, y, xi02 + lineHeight / 2 - 1, yb - 1, frameColor); + osd->DrawEllipse (xi02 + lineHeight / 2, y, xi03 - 1, yb - 1, frameColor, 5); + } + y += font->Height(); + const char *Title = Info->Title(); + if (isempty(Title)) + Title = Recording->Name(); + ts.Set(osd, xl, y, xi01 - xl, yi01 - y, Title, font, Theme.Color(clrEventTitle), Theme.Color(clrBackground)); + y += ts.Height(); + if (!isempty(Info->ShortText())) { + const cFont *font = cFont::GetFont(fontSml); + ts.Set(osd, xl, y, xi01 - xl, yi01 - y, Info->ShortText(), font, Theme.Color(clrEventShortText), Theme.Color(clrBackground)); + y += ts.Height(); + } + y += font->Height(); + if (!isempty(Info->Description())) { + int yt = y; + int yb = yi01; + textScroller.Set(osd, xl, yt, xi01 - xl, yb - yt, Info->Description(), font, Theme.Color(clrEventDescription), Theme.Color(clrBackground)); + DrawTextScrollbar(); + } +} + +void cLCARSNGDisplayMenu::SetText(const char *Text, bool FixedFont) +{ + textScroller.Set(osd, xi00, yi00, GetTextAreaWidth(), yi01 - yi00, Text, GetTextAreaFont(FixedFont), Theme.Color(clrMenuText), Theme.Color(clrBackground)); + DrawTextScrollbar(); +} + +int cLCARSNGDisplayMenu::GetTextAreaWidth(void) const +{ + return xi01 - xi00; +} + +const cFont *cLCARSNGDisplayMenu::GetTextAreaFont(bool FixedFont) const +{ + const cFont *font = cFont::GetFont(FixedFont ? fontFix : fontOsd); + //XXX -> make a way to let the text define which font to use + return font; +} + +void cLCARSNGDisplayMenu::Flush(void) +{ + + cDevice *Device = cDevice::PrimaryDevice(); + cRect videoWindowRect( 0.575 * xa09, lineHeight, 0.44 * xa09, yc06 - lineHeight / 2); + DrawFrameDisplay(); + switch (MenuCategory()) { + case mcMain: + case mcSetup: + case mcCommand: +// case mcChannel: + DrawTimers(); + DrawDevices(); + DrawLiveIndicator(); + DrawSignals(); + case mcSchedule: + case mcScheduleNow: + case mcScheduleNext: + case mcEvent: + case mcRecording: + case mcRecordingInfo: + case mcTimer: + case mcTimerEdit: +// cDevice *Device = cDevice::PrimaryDevice(); + if (!Device->Replaying() || Device->Transferring()) { + const cChannel *Channel = Channels.GetByNumber(cDevice::PrimaryDevice()->CurrentChannel()); + DrawLive(Channel); + } + else if (cControl *Control = cControl::Control(true)) + DrawPlay(Control); + osd->DrawRectangle( xs00, 0, xa09, yc06 - 1, 0x00000000); +// cRect videoWindowRect( 0.575 * xa09, lineHeight, 0.44 * xa09, yc06 - lineHeight / 2); + if (initial) { + availableRect = cDevice::PrimaryDevice()->CanScaleVideo(videoWindowRect); + osd->Flush(); + cDevice::PrimaryDevice()->ScaleVideo(availableRect); + } + else + osd->Flush(); + break; + default: + availableRect = cDevice::PrimaryDevice()->CanScaleVideo(cRect::Null); + osd->Flush(); + cDevice::PrimaryDevice()->ScaleVideo(availableRect); + } + initial = false; +} + +// --- cLCARSNGDisplayReplay ----------------------------------------------- + +class cLCARSNGDisplayReplay : public cSkinDisplayReplay { +private: + cOsd *osd; + int xp00, xp01, xp02, xp03, xp04, xp05, xp06, xp07, xp08, xp09, xp10, xp11, xp12, xp13, xp14, xp15; + int yp00, yp01, yp02, yp03, yp04, yp05, yp06, yp07, yp08, yp09; + bool modeOnly; + int lineHeight; + tColor frameColor; + int lastCurrentWidth; + int lastTotalWidth; + cString lastDate; + tTrackId lastTrackId; + void DrawDate(void); + void DrawTrack(void); +public: + cLCARSNGDisplayReplay(bool ModeOnly); + virtual ~cLCARSNGDisplayReplay(); + virtual void SetRecording(const cRecording *Recording); + virtual void SetTitle(const char *Title); + virtual void SetMode(bool Play, bool Forward, int Speed); + virtual void SetProgress(int Current, int Total); + virtual void SetCurrent(const char *Current); + virtual void SetTotal(const char *Total); + virtual void SetJump(const char *Jump); + virtual void SetMessage(eMessageType Type, const char *Text); + virtual void Flush(void); + }; + +cLCARSNGDisplayReplay::cLCARSNGDisplayReplay(bool ModeOnly) +{ + const cFont *font = cFont::GetFont(fontOsd); + modeOnly = ModeOnly; + lineHeight = font->Height(); + frameColor = Theme.Color(clrReplayFrameBg); + lastCurrentWidth = 0; + lastTotalWidth = 0; + int d = 5 * lineHeight; + xp00 = 0; + xp01 = xp00 + d / 2; + xp02 = xp00 + d; + xp03 = xp02 + lineHeight; + xp04 = xp02 + d / 4; + xp05 = xp02 + d; + xp06 = xp05 + Gap; + xp15 = cOsd::OsdWidth(); + xp14 = xp15 - lineHeight; + xp13 = xp14 - Gap; + xp07 = (xp15 + xp00) / 2; + xp08 = xp07 + Gap; + xp09 = xp08 + lineHeight; + xp10 = xp09 + Gap; + xp11 = (xp10 + xp13 + Gap) / 2; + xp12 = xp11 + Gap; + + yp00 = lineHeight; + yp01 = yp00 + 2 * lineHeight; + yp02 = yp01 + Gap; + yp03 = yp02 + 2 * lineHeight; + + yp04 = yp03 + Gap; + yp09 = yp04 + 3 * lineHeight + Gap / 2; + yp08 = yp09 - lineHeight; + yp07 = yp08 - lineHeight; + yp06 = yp08 - d / 4; + yp05 = yp09 - d / 2; + + osd = CreateOsd(cOsd::OsdLeft(), cOsd::OsdTop() + cOsd::OsdHeight() - yp09, xp00, yp00 - lineHeight, xp15 - 1, yp09 - 1); + osd->DrawRectangle(xp00, yp00, xp15 - 1, yp09 - 1, modeOnly ? clrTransparent : Theme.Color(clrBackground)); + // Rectangles: + if (!modeOnly) + osd->DrawRectangle(xp00, yp00, xp02 - 1, yp01 - 1, frameColor); + osd->DrawRectangle(xp00, yp02, xp02 - 1, yp03 - 1, frameColor); + if (!modeOnly) { + // Elbow: + osd->DrawRectangle(xp00, yp04, xp01 - 1, yp05 - 1, frameColor); + osd->DrawRectangle(xp00, yp05, xp01 - 1, yp09 - 1, clrTransparent); + osd->DrawEllipse (xp00, yp05, xp01 - 1, yp09 - 1, frameColor, 3); + osd->DrawRectangle(xp01, yp04, xp02 - 1, yp09 - 1, frameColor); + osd->DrawEllipse (xp02, yp06, xp04 - 1, yp08 - 1, frameColor, -3); + osd->DrawRectangle(xp02, yp08, xp05 - 1, yp09 - 1, frameColor); + // Status area: + osd->DrawRectangle(xp06, yp08, xp07 - 1, yp09 - 1, frameColor); + osd->DrawRectangle(xp08, yp08, xp09 - 1, yp09 - 1, frameColor); + osd->DrawRectangle(xp10, yp08, xp11 - 1, yp09 - 1, frameColor); + osd->DrawRectangle(xp12, yp08, xp13 - 1, yp09 - 1, frameColor); + osd->DrawRectangle(xp14, yp08, xp14 + lineHeight / 2 - 1, yp09 - 1, frameColor); + osd->DrawRectangle(xp14 + lineHeight / 2, yp08 + lineHeight / 2, xp15 - 1, yp09 - 1, clrTransparent); + osd->DrawEllipse (xp14 + lineHeight / 2, yp08, xp15 - 1, yp09 - 1, frameColor, 5); + } +} + +cLCARSNGDisplayReplay::~cLCARSNGDisplayReplay() +{ + delete osd; + cDevice::PrimaryDevice()->ScaleVideo(cRect::Null); +} + +void cLCARSNGDisplayReplay::DrawDate(void) +{ + cString s = DayDateTime(); + if (!*lastDate || strcmp(s, lastDate)) { + osd->DrawText(xp12, yp00 - lineHeight, s, Theme.Color(clrDateFg), Theme.Color(clrDateBg), cFont::GetFont(fontOsd), xp13 - xp12, lineHeight, taRight | taBorder); + lastDate = s; + } +} + +void cLCARSNGDisplayReplay::DrawTrack(void) +{ + cDevice *Device = cDevice::PrimaryDevice(); + const tTrackId *Track = Device->GetTrack(Device->GetCurrentAudioTrack()); + if (!Track && *lastTrackId.description || Track && strcmp(lastTrackId.description, Track->description)) { + osd->DrawText(xp03, yp04, Track ? Track->description : "", Theme.Color(clrTrackName), Theme.Color(clrBackground), cFont::GetFont(fontOsd), xp07 - xp03); + strn0cpy(lastTrackId.description, Track ? Track->description : "", sizeof(lastTrackId.description)); + } +} + +void cLCARSNGDisplayReplay::SetRecording(const cRecording *Recording) +{ + const cRecordingInfo *RecordingInfo = Recording->Info(); + SetTitle(RecordingInfo->Title()); + osd->DrawText(xp03, yp01 - lineHeight, RecordingInfo->ShortText(), Theme.Color(clrEventShortText), Theme.Color(clrBackground), cFont::GetFont(fontSml), xp13 - xp03); + osd->DrawText(xp00, yp00, ShortDateString(Recording->Start()), Theme.Color(clrReplayFrameFg), frameColor, cFont::GetFont(fontOsd), xp02 - xp00, 0, taTop | taRight | taBorder); + osd->DrawText(xp00, yp01 - lineHeight, TimeString(Recording->Start()), Theme.Color(clrReplayFrameFg), frameColor, cFont::GetFont(fontOsd), xp02 - xp00, 0, taBottom | taRight | taBorder); +} + +void cLCARSNGDisplayReplay::SetTitle(const char *Title) +{ + osd->DrawText(xp03, yp00, Title, Theme.Color(clrEventTitle), Theme.Color(clrBackground), cFont::GetFont(fontOsd), xp13 - xp03); +} + +static const char *const *ReplaySymbols[2][2][5] = { + { { pause_xpm, srew_xpm, srew1_xpm, srew2_xpm, srew3_xpm }, + { pause_xpm, sfwd_xpm, sfwd1_xpm, sfwd2_xpm, sfwd3_xpm }, }, + { { play_xpm, frew_xpm, frew1_xpm, frew2_xpm, frew3_xpm }, + { play_xpm, ffwd_xpm, ffwd1_xpm, ffwd2_xpm, ffwd3_xpm } } + }; + +void cLCARSNGDisplayReplay::SetMode(bool Play, bool Forward, int Speed) +{ + Speed = constrain(Speed, -1, 3); + cBitmap bm(ReplaySymbols[Play][Forward][Speed + 1]); + osd->DrawBitmap(xp01 - bm.Width() / 2, (yp02 + yp03 - bm.Height()) / 2, bm, Theme.Color(clrReplayFrameFg), frameColor); +} + +void cLCARSNGDisplayReplay::SetProgress(int Current, int Total) +{ + cProgressBar pb(xp13 - xp03, lineHeight, Current, Total, marks, Theme.Color(clrReplayProgressSeen), Theme.Color(clrReplayProgressRest), Theme.Color(clrReplayProgressSelected), Theme.Color(clrReplayProgressMark), Theme.Color(clrReplayProgressCurrent)); + osd->DrawBitmap(xp03, yp02, pb); +} + +void cLCARSNGDisplayReplay::SetCurrent(const char *Current) +{ + const cFont *font = cFont::GetFont(fontOsd); + int w = font->Width(Current); + osd->DrawText(xp03, yp03 - lineHeight, Current, Theme.Color(clrReplayPosition), Theme.Color(clrBackground), font, max(lastCurrentWidth, w), 0, taLeft); + lastCurrentWidth = w; +} + +void cLCARSNGDisplayReplay::SetTotal(const char *Total) +{ + const cFont *font = cFont::GetFont(fontOsd); + int w = font->Width(Total); + osd->DrawText(xp13 - w, yp03 - lineHeight, Total, Theme.Color(clrReplayPosition), Theme.Color(clrBackground), font, max(lastTotalWidth, w), 0, taRight); + lastTotalWidth = w; +} + +void cLCARSNGDisplayReplay::SetJump(const char *Jump) +{ + osd->DrawText(xp06, yp08, Jump, Theme.Color(clrReplayJumpFg), Jump ? Theme.Color(clrReplayJumpBg) : frameColor, cFont::GetFont(fontOsd), xp07 - xp06, 0, taCenter); +} + +void cLCARSNGDisplayReplay::SetMessage(eMessageType Type, const char *Text) +{ + if (Text) { + osd->SaveRegion(xp06, yp08, xp13 - 1, yp09 - 1); + osd->DrawText(xp06, yp08, Text, Theme.Color(clrMessageStatusFg + 2 * Type), Theme.Color(clrMessageStatusBg + 2 * Type), cFont::GetFont(fontSml), xp13 - xp06, yp09 - yp08, taCenter); + } + else + osd->RestoreRegion(); +} + +void cLCARSNGDisplayReplay::Flush(void) +{ + if (!modeOnly) { + DrawDate(); + DrawTrack(); + } + osd->Flush(); +// cDevice::PrimaryDevice()->ScaleVideo(videoWindowRect); +} + +// --- cLCARSNGDisplayVolume ----------------------------------------------- + +class cLCARSNGDisplayVolume : public cSkinDisplayVolume { +private: + cOsd *osd; + int x0, x1, x2, x3, x4, x5, x6, x7; + int y0, y1; + tColor frameColor; + int mute; +public: + cLCARSNGDisplayVolume(void); + virtual ~cLCARSNGDisplayVolume(); + virtual void SetVolume(int Current, int Total, bool Mute); + virtual void Flush(void); + }; + +cLCARSNGDisplayVolume::cLCARSNGDisplayVolume(void) +{ + const cFont *font = cFont::GetFont(fontOsd); + int lineHeight = font->Height(); + frameColor = Theme.Color(clrVolumeFrame); + mute = -1; + x0 = 0; + x1 = lineHeight / 2; + x2 = lineHeight; + x3 = x2 + Gap; + x7 = cOsd::OsdWidth(); + x6 = x7 - lineHeight / 2; + x5 = x6 - lineHeight / 2; + x4 = x5 - Gap; + y0 = 0; + y1 = lineHeight; + osd = CreateOsd(cOsd::OsdLeft(), cOsd::OsdTop() + cOsd::OsdHeight() - y1, x0, y0, x7 - 1, y1 - 1); + osd->DrawRectangle(x0, y0, x7 - 1, y1 - 1, Theme.Color(clrBackground)); + osd->DrawRectangle(x0, y0, x1 - 1, y1 - 1, clrTransparent); + osd->DrawEllipse (x0, y0, x1 - 1, y1 - 1, frameColor, 7); + osd->DrawRectangle(x1, y0, x2 - 1, y1 - 1, frameColor); + osd->DrawRectangle(x3, y0, x4 - 1, y1 - 1, frameColor); + osd->DrawRectangle(x5, y0, x6 - 1, y1 - 1, frameColor); + osd->DrawRectangle(x6, y0, x7 - 1, y1 - 1, clrTransparent); + osd->DrawEllipse (x6, y0, x7 - 1, y1 - 1, frameColor, 5); +} + +cLCARSNGDisplayVolume::~cLCARSNGDisplayVolume() +{ + delete osd; + cDevice::PrimaryDevice()->ScaleVideo(cRect::Null); +} + +void cLCARSNGDisplayVolume::SetVolume(int Current, int Total, bool Mute) +{ + int xl = x3 + TextSpacing; + int xr = x4 - TextSpacing; + int yt = y0 + TextFrame; + int yb = y1 - TextFrame; + if (mute != Mute) { + osd->DrawRectangle(x3, y0, x4 - 1, y1 - 1, frameColor); + mute = Mute; + } + cBitmap bm(Mute ? mute_xpm : volume_xpm); + osd->DrawBitmap(xl, y0 + (y1 - y0 - bm.Height()) / 2, bm, Theme.Color(clrVolumeSymbol), frameColor); + if (!Mute) { + xl += bm.Width() + TextSpacing; + int w = (y1 - y0) / 3; + int d = TextFrame; + int n = (xr - xl + d) / (w + d); + int x = xr - n * (w + d); + tColor Color = Theme.Color(clrVolumeBarLower); + for (int i = 0; i < n; i++) { + if (Total * i >= Current * n) + Color = Theme.Color(clrVolumeBarUpper); + osd->DrawRectangle(x, yt, x + w - 1, yb - 1, Color); + x += w + d; + } + } +} + +void cLCARSNGDisplayVolume::Flush(void) +{ + osd->Flush(); +// cDevice::PrimaryDevice()->ScaleVideo(videoWindowRect); +} + +// --- cLCARSNGDisplayTracks ----------------------------------------------- + +class cLCARSNGDisplayTracks : public cSkinDisplayTracks { +private: + cOsd *osd; + int xt00, xt01, xt02, xt03, xt04, xt05, xt06, xt07, xt08, xt09, xt10, xt11, xt12; + int yt00, yt01, yt02, yt03, yt04, yt05, yt06, yt07; + int lineHeight; + tColor frameColor; + int currentIndex; + static cBitmap bmAudioLeft, bmAudioRight, bmAudioStereo; + void SetItem(const char *Text, int Index, bool Current); +public: + cLCARSNGDisplayTracks(const char *Title, int NumTracks, const char * const *Tracks); + virtual ~cLCARSNGDisplayTracks(); + virtual void SetTrack(int Index, const char * const *Tracks); + virtual void SetAudioChannel(int AudioChannel); + virtual void Flush(void); + }; + +cBitmap cLCARSNGDisplayTracks::bmAudioLeft(audioleft_xpm); +cBitmap cLCARSNGDisplayTracks::bmAudioRight(audioright_xpm); +cBitmap cLCARSNGDisplayTracks::bmAudioStereo(audiostereo_xpm); + +cLCARSNGDisplayTracks::cLCARSNGDisplayTracks(const char *Title, int NumTracks, const char * const *Tracks) +{ + const cFont *font = cFont::GetFont(fontOsd); + lineHeight = font->Height(); + frameColor = Theme.Color(clrTrackFrameBg); + currentIndex = -1; + xt00 = 0; + xt01 = xt00 + lineHeight / 2; + xt02 = xt01 + Gap; + xt03 = xt00 + 2 * lineHeight; + int ItemsWidth = font->Width(Title) + xt03 - xt02; + for (int i = 0; i < NumTracks; i++) + ItemsWidth = max(ItemsWidth, font->Width(Tracks[i]) + 2 * TextFrame); + xt04 = xt02 + ItemsWidth; + xt05 = xt04 + Gap; + xt06 = xt04 + lineHeight; + xt07 = xt05 + lineHeight; + xt08 = xt07 + lineHeight; + xt09 = xt08 + Gap; + xt10 = xt09 + lineHeight / 2; + xt11 = xt10 + Gap; + xt12 = xt11 + lineHeight; + yt00 = 0; + yt01 = yt00 + lineHeight; + yt02 = yt01 + lineHeight; + yt03 = yt02 + Gap; + yt04 = yt03 + NumTracks * lineHeight + (NumTracks - 1) * Gap; + yt05 = yt04 + Gap; + yt06 = yt05 + lineHeight; + yt07 = yt06 + lineHeight; + while (yt07 > cOsd::OsdHeight()) { + yt04 -= lineHeight + Gap; + yt05 = yt04 + Gap; + yt06 = yt05 + lineHeight; + yt07 = yt06 + lineHeight; + } + osd = CreateOsd(cOsd::OsdLeft(), cOsd::OsdTop() + cOsd::OsdHeight() - yt07, xt00, yt00, xt12 - 1, yt07 - 1); + // The upper elbow: + osd->DrawRectangle(xt00, yt00, xt12 - 1, yt07 - 1, Theme.Color(clrBackground)); + osd->DrawRectangle(xt00, yt00, xt03 - 1, yt02 - 1, clrTransparent); + osd->DrawEllipse (xt00, yt00, xt03 - 1, yt02 - 1, frameColor, 2); + osd->DrawRectangle(xt03, yt00, xt04 - 1, yt02 - 1, frameColor); + osd->DrawRectangle(xt04, yt00, xt08 - 1, yt01 - 1, frameColor); + osd->DrawEllipse (xt04, yt01, xt06 - 1, yt02 - 1, frameColor, -2); + osd->DrawRectangle(xt09, yt00, xt10 - 1, yt01 - 1, frameColor); + osd->DrawRectangle(xt11, yt00, xt11 + lineHeight / 2 - 1, yt01 - 1, frameColor); + osd->DrawRectangle(xt11 + lineHeight / 2, yt00, xt12 - 1, yt00 + lineHeight / 2 - 1, clrTransparent); + osd->DrawEllipse (xt11 + lineHeight / 2, yt00, xt12 - 1, yt01 - 1, frameColor, 5); + osd->DrawText(xt03, yt00, Title, Theme.Color(clrTrackFrameFg), frameColor, font, xt04 - xt03, 0, taTop | taRight); + // The items: + for (int i = 0; i < NumTracks; i++) + SetItem(Tracks[i], i, false); + // The lower elbow: + osd->DrawRectangle(xt00, yt05, xt03 - 1, yt07 - 1, clrTransparent); + osd->DrawEllipse (xt00, yt05, xt03 - 1, yt07 - 1, frameColor, 3); + osd->DrawRectangle(xt03, yt05, xt04 - 1, yt07 - 1, frameColor); + osd->DrawRectangle(xt04, yt06, xt08 - 1, yt07 - 1, frameColor); + osd->DrawEllipse (xt04, yt05, xt06 - 1, yt06 - 1, frameColor, -3); + osd->DrawRectangle(xt09, yt06, xt10 - 1, yt07 - 1, frameColor); + osd->DrawRectangle(xt11, yt06, xt11 + lineHeight / 2 - 1, yt07 - 1, frameColor); + osd->DrawRectangle(xt11 + lineHeight / 2, yt06 + lineHeight / 2, xt12 - 1, yt07 - 1, clrTransparent); + osd->DrawEllipse (xt11 + lineHeight / 2, yt06, xt12 - 1, yt07 - 1, frameColor, 5); +} + +cLCARSNGDisplayTracks::~cLCARSNGDisplayTracks() +{ + delete osd; + cDevice::PrimaryDevice()->ScaleVideo(cRect::Null); +} + +void cLCARSNGDisplayTracks::SetItem(const char *Text, int Index, bool Current) +{ + int y0 = yt03 + Index * (lineHeight + Gap); + int y1 = y0 + lineHeight; + if (y1 > yt04) + return; + tColor ColorFg, ColorBg; + if (Current) { + ColorFg = Theme.Color(clrTrackItemCurrentFg); + ColorBg = Theme.Color(clrTrackItemCurrentBg); + osd->DrawRectangle(xt00, y0, xt01 - 1, y1 - 1, frameColor); + osd->DrawRectangle(xt02, y0, xt04 - 1, y1 - 1, ColorBg); + osd->DrawRectangle(xt05, y0, xt05 + lineHeight / 2 - 1, y1 - 1, ColorBg); + osd->DrawEllipse (xt05 + lineHeight / 2, y0, xt07 - 1, y1 - 1, ColorBg, 5); + currentIndex = Index; + } + else { + ColorFg = Theme.Color(clrTrackItemFg); + ColorBg = Theme.Color(clrTrackItemBg); + osd->DrawRectangle(xt00, y0, xt01 - 1, y1 - 1, frameColor); + osd->DrawRectangle(xt02, y0, xt04 - 1, y1 - 1, ColorBg); + if (currentIndex == Index) + osd->DrawRectangle(xt05, y0, xt07 - 1, y1 - 1, Theme.Color(clrBackground)); + } + const cFont *font = cFont::GetFont(fontOsd); + osd->DrawText(xt02, y0, Text, ColorFg, ColorBg, font, xt04 - xt02, y1 - y0, taTop | taLeft | taBorder); +} + +void cLCARSNGDisplayTracks::SetTrack(int Index, const char * const *Tracks) +{ + if (currentIndex >= 0) + SetItem(Tracks[currentIndex], currentIndex, false); + SetItem(Tracks[Index], Index, true); +} + +void cLCARSNGDisplayTracks::SetAudioChannel(int AudioChannel) +{ + cBitmap *bm = NULL; + switch (AudioChannel) { + case 0: bm = &bmAudioStereo; break; + case 1: bm = &bmAudioLeft; break; + case 2: bm = &bmAudioRight; break; + default: ; + } + if (bm) + osd->DrawBitmap(xt04 - bm->Width(), (yt06 + yt07 - bm->Height()) / 2, *bm, Theme.Color(clrTrackFrameFg), frameColor); + else + osd->DrawRectangle(xt03, yt06, xt04 - 1, yt07 - 1, frameColor); +} + +void cLCARSNGDisplayTracks::Flush(void) +{ + osd->Flush(); +// cDevice::PrimaryDevice()->ScaleVideo(videoWindowRect); +} + +// --- cLCARSNGDisplayMessage ---------------------------------------------- + +class cLCARSNGDisplayMessage : public cSkinDisplayMessage { +private: + cOsd *osd; + int x0, x1, x2, x3, x4, x5, x6, x7; + int y0, y1; +public: + cLCARSNGDisplayMessage(void); + virtual ~cLCARSNGDisplayMessage(); + virtual void SetMessage(eMessageType Type, const char *Text); + virtual void Flush(void); + }; + +cLCARSNGDisplayMessage::cLCARSNGDisplayMessage(void) +{ + const cFont *font = cFont::GetFont(fontOsd); + int lineHeight = font->Height(); + x0 = 0; + x1 = lineHeight / 2; + x2 = lineHeight; + x3 = x2 + Gap; + x7 = cOsd::OsdWidth(); + x6 = x7 - lineHeight / 2; + x5 = x6 - lineHeight / 2; + x4 = x5 - Gap; + y0 = 0; + y1 = lineHeight; + osd = CreateOsd(cOsd::OsdLeft(), cOsd::OsdTop() + cOsd::OsdHeight() - y1, x0, y0, x7 - 1, y1 - 1); +} + +cLCARSNGDisplayMessage::~cLCARSNGDisplayMessage() +{ + delete osd; + cDevice::PrimaryDevice()->ScaleVideo(cRect::Null); +} + +void cLCARSNGDisplayMessage::SetMessage(eMessageType Type, const char *Text) +{ + tColor ColorFg = Theme.Color(clrMessageStatusFg + 2 * Type); + tColor ColorBg = Theme.Color(clrMessageStatusBg + 2 * Type); + osd->DrawRectangle(x0, y0, x7 - 1, y1 - 1, Theme.Color(clrBackground)); + osd->DrawRectangle(x0, y0, x1 - 1, y1 - 1, clrTransparent); + osd->DrawEllipse (x0, y0, x1 - 1, y1 - 1, ColorBg, 7); + osd->DrawRectangle(x1, y0, x2 - 1, y1 - 1, ColorBg); + osd->DrawText(x3, y0, Text, ColorFg, ColorBg, cFont::GetFont(fontSml), x4 - x3, y1 - y0, taCenter); + osd->DrawRectangle(x5, y0, x6 - 1, y1 - 1, ColorBg); + osd->DrawRectangle(x6, y0, x7 - 1, y1 - 1, clrTransparent); + osd->DrawEllipse (x6, y0, x7 - 1, y1 - 1, ColorBg, 5); +} + +void cLCARSNGDisplayMessage::Flush(void) +{ + osd->Flush(); +// cDevice::PrimaryDevice()->ScaleVideo(videoWindowRect); +} + +// --- cLCARSNG ------------------------------------------------------------ + +cLCARSNG::cLCARSNG(void) +:cSkin("lcarsng", &::Theme) +{ +} + +const char *cLCARSNG::Description(void) +{ + return "LCARSNG"; +} + +cSkinDisplayChannel *cLCARSNG::DisplayChannel(bool WithInfo) +{ + return new cLCARSNGDisplayChannel(WithInfo); +} + +cSkinDisplayMenu *cLCARSNG::DisplayMenu(void) +{ + return new cLCARSNGDisplayMenu; +} + +cSkinDisplayReplay *cLCARSNG::DisplayReplay(bool ModeOnly) +{ + return new cLCARSNGDisplayReplay(ModeOnly); +} + +cSkinDisplayVolume *cLCARSNG::DisplayVolume(void) +{ + return new cLCARSNGDisplayVolume; +} + +cSkinDisplayTracks *cLCARSNG::DisplayTracks(const char *Title, int NumTracks, const char * const *Tracks) +{ + return new cLCARSNGDisplayTracks(Title, NumTracks, Tracks); +} + +cSkinDisplayMessage *cLCARSNG::DisplayMessage(void) +{ + return new cLCARSNGDisplayMessage; +} diff --git a/lcarsng.h b/lcarsng.h new file mode 100644 index 0000000..7720c4c --- /dev/null +++ b/lcarsng.h @@ -0,0 +1,27 @@ +/* + * skinlcars.h: A VDR skin with Star Trek's "LCARS" layout + * + * See the main source file 'vdr.c' for copyright information and + * how to reach the author. + * + * $Id: skinlcars.h 3.0 2012/04/15 13:17:35 kls Exp $ + */ + +#ifndef __SKINLCARS_H +#define __SKINLCARS_H + +#include <vdr/skins.h> + +class cLCARSNG : public cSkin { +public: + cLCARSNG(void); + virtual const char *Description(void); + virtual cSkinDisplayChannel *DisplayChannel(bool WithInfo); + virtual cSkinDisplayMenu *DisplayMenu(void); + virtual cSkinDisplayReplay *DisplayReplay(bool ModeOnly); + virtual cSkinDisplayVolume *DisplayVolume(void); + virtual cSkinDisplayTracks *DisplayTracks(const char *Title, int NumTracks, const char * const *Tracks); + virtual cSkinDisplayMessage *DisplayMessage(void); + }; + +#endif //__SKINLCARS_H diff --git a/po/de_DE.po b/po/de_DE.po new file mode 100644 index 0000000..7051224 --- /dev/null +++ b/po/de_DE.po @@ -0,0 +1,55 @@ +# VDR plugin language source file. +# Copyright (C) 2008 Martin Schirrmacher <vdr.skinflat@schirrmacher.eu> +# This file is distributed under the same license as the skinflat package. +# +msgid "" +msgstr "" +"Project-Id-Version: vdr-skinlcarsng 0.0.1\n" +"Report-Msgid-Bugs-To: <see README>\n" +"POT-Creation-Date: 2013-10-18 12:01+0200\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=ISO-8859-15\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "clock" +msgstr "Uhr" + +msgid "disk usage" +msgstr "" + +msgid "free space" +msgstr "" + +msgid "Volume" +msgstr "Lautstärke" + +msgid "DISK" +msgstr "PLATTE" + +msgid "LOAD" +msgstr "LAST" + +msgid "Setup" +msgstr "Einstellungen" + +msgid "Commands" +msgstr "Befehle" + +msgid "Channels" +msgstr "Kanäle" + +msgid "TIMERS" +msgstr "TIMER" + +msgid "DEVICES" +msgstr "EMPFÄNGER" + +msgid "LIVE" +msgstr "LIVE" + +msgid "PLAY" +msgstr "WIEDERGABE" diff --git a/skinlcarsng.c b/skinlcarsng.c new file mode 100644 index 0000000..59c3649 --- /dev/null +++ b/skinlcarsng.c @@ -0,0 +1,133 @@ +/* + * skinflat.c: A plugin for the Video Disk Recorder + * + * See the README file for copyright information and how to reach the author. + * + * $Id$ + */ +#include <getopt.h> +#include <vdr/plugin.h> + +#if defined(APIVERSNUM) && APIVERSNUM < 10734 +#error "VDR-1.7.34 API version or greater is required!" +#endif + +#include "lcarsng.h" + +static const char *VERSION = "0.0.1"; +static const char *DESCRIPTION = "skin lcarsng"; + +class cPluginLCARSNG : public cPlugin { + private: + cLCARSNG *lcarsng; + public: + cPluginLCARSNG(void); + virtual ~cPluginLCARSNG(); + virtual const char *Version(void) { return VERSION; } + virtual const char *Description(void) { return DESCRIPTION; } + virtual const char *CommandLineHelp(void); + virtual bool ProcessArgs(int argc, char *argv[]); + virtual bool Initialize(void); + virtual bool Start(void); + virtual void Stop(void); + virtual void Housekeeping(void); + virtual void MainThreadHook(void); + virtual cString Active(void); + virtual time_t WakeupTime(void); + virtual const char *MainMenuEntry(void) {return NULL;} + virtual cOsdObject *MainMenuAction(void); + virtual cMenuSetupPage *SetupMenu(void); + virtual bool SetupParse(const char *Name, const char *Value); + virtual bool Service(const char *Id, void *Data = NULL); + virtual const char **SVDRPHelpPages(void); + virtual cString SVDRPCommand(const char *Command, const char *Option, int &ReplyCode); +}; + +cPluginLCARSNG::cPluginLCARSNG(void) { + lcarsng = NULL; +} + +cPluginLCARSNG::~cPluginLCARSNG() { +} + +const char *cPluginLCARSNG::CommandLineHelp(void) { + return " -l <LOGOPATH>, --logopath=<LOGOPATH> Set directory where Channel Logos are stored.\n"; +} + +bool cPluginLCARSNG::ProcessArgs(int argc, char *argv[]) { + // Implement command line argument processing here if applicable. + static const struct option long_options[] = { + { "logopath", required_argument, NULL, 'l' }, + { NULL } + }; + + int c; + while ((c = getopt_long(argc, argv, "l:", long_options, NULL)) != -1) { + switch (c) { + case 'l': +// Config.SetLogoPath(cString(optarg)); + break; + default: + return false; + } + } + return true; +} + +bool cPluginLCARSNG::Initialize(void) { +// Config.Init(); + return true; +} + +bool cPluginLCARSNG::Start(void) { + if (!cOsdProvider::SupportsTrueColor()) { + esyslog("skinlcarsng: No TrueColor OSD found! Aborting!"); + return false; + } else + dsyslog("skinlcarsng: TrueColor OSD found"); + lcarsng = new cLCARSNG; + return lcarsng; +} + +void cPluginLCARSNG::Stop(void) { +} + +void cPluginLCARSNG::Housekeeping(void) { +} + +void cPluginLCARSNG::MainThreadHook(void) { +} + +cString cPluginLCARSNG::Active(void) { + return NULL; +} + +time_t cPluginLCARSNG::WakeupTime(void) { + return 0; +} + +cOsdObject *cPluginLCARSNG::MainMenuAction(void) { + return NULL; +} + +cMenuSetupPage *cPluginLCARSNG::SetupMenu(void) { + return NULL; +} + +bool cPluginLCARSNG::SetupParse(const char *Name, const char *Value) { + return true; +} + +bool cPluginLCARSNG::Service(const char *Id, void *Data) { + return false; +} + +const char **cPluginLCARSNG::SVDRPHelpPages(void) { + return NULL; +} + +cString cPluginLCARSNG::SVDRPCommand(const char *Command, const char *Option, int &ReplyCode) { + return NULL; +} + +VDRPLUGINCREATOR(cPluginLCARSNG); // Don't touch this! diff --git a/symbols/arrowdown.xpm b/symbols/arrowdown.xpm new file mode 100644 index 0000000..899a1ea --- /dev/null +++ b/symbols/arrowdown.xpm @@ -0,0 +1,29 @@ +/* XPM */ +static const char *const arrowdown_xpm[] = { +"24 24 2 1", +"# c #ffffff", +". c #000000", +"........................", +"........................", +"........................", +"#......................#", +"#......................#", +"##....................##", +"##....................##", +"###..................###", +"###..................###", +"####................####", +"####................####", +"#####..............#####", +"#####..............#####", +"######............######", +"######............######", +"#######..........#######", +"#######..........#######", +"########........########", +"########........########", +"#########......#########", +"#########......#########", +"##########....##########", +"##########....##########", +"###########..###########"}; diff --git a/symbols/arrowup.xpm b/symbols/arrowup.xpm new file mode 100644 index 0000000..c9751a1 --- /dev/null +++ b/symbols/arrowup.xpm @@ -0,0 +1,29 @@ +/* XPM */ +static const char *const arrowup_xpm[] = { +"24 24 2 1", +". c #FFFFFF", +"+ c #000000", +"...........++...........", +"..........++++..........", +"..........++++..........", +".........++++++.........", +".........++++++.........", +"........++++++++........", +"........++++++++........", +".......++++++++++.......", +".......++++++++++.......", +"......++++++++++++......", +"......++++++++++++......", +".....++++++++++++++.....", +".....++++++++++++++.....", +"....++++++++++++++++....", +"....++++++++++++++++....", +"...++++++++++++++++++...", +"...++++++++++++++++++...", +"..++++++++++++++++++++..", +"..++++++++++++++++++++..", +".++++++++++++++++++++++.", +".++++++++++++++++++++++.", +"++++++++++++++++++++++++", +"++++++++++++++++++++++++", +"++++++++++++++++++++++++"}; diff --git a/symbols/audio.xpm b/symbols/audio.xpm new file mode 100644 index 0000000..9c7f5da --- /dev/null +++ b/symbols/audio.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *const audio_xpm[] = { +"54 36 2 1", +". c #ffffff", +"+ c #000000", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"....++++++++++++++++++++++++++++++++++++++++++++++....", +"....++++++++++++++++++++++++++++++++++++++++++++++....", +"....++++++++++++++++++++++++++++++++++++++++++++++....", +"....+++........................................+++....", +"....+++........................................+++....", +"....+++........................................+++....", +"....+++........................................+++....", +"....+++.........++++..............++++.........+++....", +"....+++........++++++............++++++........+++....", +"....+++.......++++++++..........++++++++.......+++....", +"....+++......++++..++++........++++..++++......+++....", +"....+++.....++++....++++......++++....++++.....+++....", +"....+++....++++......++++....++++......++++....+++....", +"....+++....+++........+++....+++........+++....+++....", +"....+++....+++........+++....+++........+++....+++....", +"....+++....++++......++++....++++......++++....+++....", +"....+++.....++++....++++......++++....++++.....+++....", +"....+++......++++..++++........++++..++++......+++....", +"....+++.......++++++++..........++++++++.......+++....", +"....+++........++++++............++++++........+++....", +"....+++.........++++..............++++.........+++....", +"....+++........................................+++....", +"....+++........................................+++....", +"....+++........................................+++....", +"....+++........................................+++....", +"....++++++++++++++++++++++++++++++++++++++++++++++....", +"....++++++++++++++++++++++++++++++++++++++++++++++....", +"....++++++++++++++++++++++++++++++++++++++++++++++....", +"......................................................", +"......................................................", +"......................................................", +"......................................................"}; diff --git a/symbols/audioleft.xpm b/symbols/audioleft.xpm new file mode 100644 index 0000000..3534239 --- /dev/null +++ b/symbols/audioleft.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *const audioleft_xpm[] = { +"54 36 2 1", +". c #ffffff", +"# c #000000", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"...........######....................######...........", +".........##########................##########.........", +"........############..............############........", +".......##############............##############.......", +"......################..........#####......#####......", +".....##################........#####........#####.....", +".....##################........####..........####.....", +"....####################......####............####....", +"....####################......####............####....", +"....####################......####............####....", +"....####################......####............####....", +"....####################......####............####....", +"....####################......####............####....", +".....##################........####..........####.....", +".....##################........#####........#####.....", +"......################..........#####......#####......", +".......##############............##############.......", +"........############..............############........", +".........##########................##########.........", +"...........######....................######...........", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................"}; diff --git a/symbols/audioright.xpm b/symbols/audioright.xpm new file mode 100644 index 0000000..f16920d --- /dev/null +++ b/symbols/audioright.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *const audioright_xpm[] = { +"54 36 2 1", +". c #ffffff", +"# c #000000", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"...........######....................######...........", +".........##########................##########.........", +"........############..............############........", +".......##############............##############.......", +"......#####......#####..........################......", +".....#####........#####........##################.....", +".....####..........####........##################.....", +"....####............####......####################....", +"....####............####......####################....", +"....####............####......####################....", +"....####............####......####################....", +"....####............####......####################....", +"....####............####......####################....", +".....####..........####........##################.....", +".....#####........#####........##################.....", +"......#####......#####..........################......", +".......##############............##############.......", +"........############..............############........", +".........##########................##########.........", +"...........######....................######...........", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................"}; diff --git a/symbols/audiostereo.xpm b/symbols/audiostereo.xpm new file mode 100644 index 0000000..6529b79 --- /dev/null +++ b/symbols/audiostereo.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *const audiostereo_xpm[] = { +"54 36 2 1", +". c #ffffff", +"# c #000000", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"...........######....................######...........", +".........##########................##########.........", +"........############..............############........", +".......##############............##############.......", +"......################..........################......", +".....##################........##################.....", +".....##################........##################.....", +"....####################......####################....", +"....####################......####################....", +"....####################......####################....", +"....####################......####################....", +"....####################......####################....", +"....####################......####################....", +".....##################........##################.....", +".....##################........##################.....", +"......################..........################......", +".......##############............##############.......", +"........############..............############........", +".........##########................##########.........", +"...........######....................######...........", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"......................................................"}; diff --git a/symbols/dolbydigital.xpm b/symbols/dolbydigital.xpm new file mode 100644 index 0000000..99e0e3e --- /dev/null +++ b/symbols/dolbydigital.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *const dolbydigital_xpm[] = { +"54 36 2 1", +". c #ffffff", +"+ c #000000", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"....+++++++++++++++++++++....+++++++++++++++++++++....", +"....+++++++++++++++++++++....+++++++++++++++++++++....", +"....+++++++++++++++++++++....+++++++++++++++++++++....", +"....+++.....+++++++++++++....+++++++++++++.....+++....", +"....+++.........+++++++++....+++++++++.........+++....", +"....+++...........+++++++....+++++++...........+++....", +"....+++............++++++....++++++............+++....", +"....+++.............+++++....+++++.............+++....", +"....+++.............+++++....+++++.............+++....", +"....+++..............++++....++++..............+++....", +"....+++..............++++....++++..............+++....", +"....+++...............+++....+++...............+++....", +"....+++...............+++....+++...............+++....", +"....+++...............+++....+++...............+++....", +"....+++...............+++....+++...............+++....", +"....+++...............+++....+++...............+++....", +"....+++...............+++....+++...............+++....", +"....+++..............++++....++++..............+++....", +"....+++..............++++....++++..............+++....", +"....+++.............+++++....+++++.............+++....", +"....+++.............+++++....+++++.............+++....", +"....+++............++++++....++++++............+++....", +"....+++...........+++++++....+++++++...........+++....", +"....+++.........+++++++++....+++++++++.........+++....", +"....+++.....+++++++++++++....+++++++++++++.....+++....", +"....+++++++++++++++++++++....+++++++++++++++++++++....", +"....+++++++++++++++++++++....+++++++++++++++++++++....", +"....+++++++++++++++++++++....+++++++++++++++++++++....", +"......................................................", +"......................................................", +"......................................................", +"......................................................"}; diff --git a/symbols/encrypted.xpm b/symbols/encrypted.xpm new file mode 100644 index 0000000..36d1787 --- /dev/null +++ b/symbols/encrypted.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *const encrypted_xpm[] = { +"54 36 2 1", +". c #ffffff", +"+ c #000000", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"....++++++++++++++++++++++++++++++++++++++++++++++....", +"....++++++++++++++++++++++++++++++++++++++++++++++....", +"....++++++++++++++++++++++++++++++++++++++++++++++....", +"....+++........................................+++....", +"....+++........................................+++....", +"....+++........................................+++....", +"....+++...........................++++.........+++....", +"....+++..........................++++++........+++....", +"....+++.........................++++++++.......+++....", +"....+++........................++++++++++......+++....", +"....+++.......................+++++..+++++.....+++....", +"....+++......................+++++....+++++....+++....", +"....+++...+++++++++++++++++++++++......+++++...+++....", +"....+++...++++++++++++++++++++++........++++...+++....", +"....+++...++++++++++++++++++++++........++++...+++....", +"....+++...+++++++++++++++++++++++......+++++...+++....", +"....+++.....++++++...........+++++....+++++....+++....", +"....+++.....++++++............+++++..+++++.....+++....", +"....+++.....++++++.............++++++++++......+++....", +"....+++.....++++++..............++++++++.......+++....", +"....+++.....++++++...............++++++........+++....", +"....+++...........................++++.........+++....", +"....+++........................................+++....", +"....+++........................................+++....", +"....+++........................................+++....", +"....++++++++++++++++++++++++++++++++++++++++++++++....", +"....++++++++++++++++++++++++++++++++++++++++++++++....", +"....++++++++++++++++++++++++++++++++++++++++++++++....", +"......................................................", +"......................................................", +"......................................................", +"......................................................"}; diff --git a/symbols/ffwd.xpm b/symbols/ffwd.xpm new file mode 100644 index 0000000..969d5f1 --- /dev/null +++ b/symbols/ffwd.xpm @@ -0,0 +1,57 @@ +/* XPM */ +static const char *const ffwd_xpm[] = { +"56 52 2 1", +". c #ffffff", +"# c #000000", +"........................................................", +"........................................................", +"........................................................", +"........................................................", +"....####............#####...............................", +"....#####...........#######.............................", +"....######..........########............................", +"....#######.........#########...........................", +"....########........###########.........................", +"....#########........###########........................", +"....##########........###########.......................", +"....###########........############.....................", +"....############........############....................", +"....#############........############...................", +"....##############........#############.................", +"....###############........#############................", +"....################........#############...............", +"....#################........##############.............", +"....##################........##############............", +"....###################........##############...........", +"....####################........###############.........", +"....#####################........###############........", +"....######################........###############.......", +"....#######################........################.....", +"....########################........################....", +"....########################........################....", +"....########################........################....", +"....########################........################....", +"....#######################........################.....", +"....######################........###############.......", +"....#####################........###############........", +"....####################........###############.........", +"....###################........##############...........", +"....##################........##############............", +"....#################........##############.............", +"....################........#############...............", +"....###############........#############................", +"....##############........#############.................", +"....#############........############...................", +"....############........############....................", +"....###########........############.....................", +"....##########........###########.......................", +"....#########........###########........................", +"....########........###########.........................", +"....#######.........#########...........................", +"....######..........########............................", +"....#####...........#######.............................", +"....####............#####...............................", +"........................................................", +"........................................................", +"........................................................", +"........................................................"}; diff --git a/symbols/ffwd1.xpm b/symbols/ffwd1.xpm new file mode 100644 index 0000000..ec63484 --- /dev/null +++ b/symbols/ffwd1.xpm @@ -0,0 +1,57 @@ +/* XPM */ +static const char *const ffwd1_xpm[] = { +"56 52 2 1", +". c #ffffff", +"# c #000000", +"........................................................", +"........................................................", +"........................................................", +"........................................................", +"....######..........########............................", +"....#######.........#########...........................", +"....########........###########.........................", +"....#########........###########........................", +"....##########........###########.......................", +"....###########........############.....................", +"....############........############....................", +"....#############........############...................", +"....##############........#############.................", +"....###############........#############................", +"....################........#############...............", +"....#################........##############.............", +"....##################........##############............", +"....###################........##############...........", +"....####################........###############.........", +"....#####################........###############........", +"....######################........###############.......", +"....#######################........################.....", +"....########################........################....", +"....########################........################....", +"....########################........################....", +"....########################........################....", +"....#######################........################.....", +"....######################........###############.......", +"....#####################........###############........", +"....####################........###############.........", +"....###################........##############...........", +"....##################........##############............", +"....#################........##############.............", +"....################........#############...............", +"....###############........#############................", +"....##############........#############.................", +"....#############........############...................", +"....############........############....................", +"....###########........############.....................", +"....##########........###########.......................", +"....#########........###########........................", +"....########........###########.........................", +"....#######.........#########...........................", +"....######..........########............................", +"........................................................", +"........................................................", +"....############........................................", +"....############........................................", +"....############........................................", +"........................................................", +"........................................................", +"........................................................"}; diff --git a/symbols/ffwd2.xpm b/symbols/ffwd2.xpm new file mode 100644 index 0000000..654cc11 --- /dev/null +++ b/symbols/ffwd2.xpm @@ -0,0 +1,57 @@ +/* XPM */ +static const char *const ffwd2_xpm[] = { +"56 52 2 1", +". c #ffffff", +"# c #000000", +"........................................................", +"........................................................", +"........................................................", +"........................................................", +"....######..........########............................", +"....#######.........#########...........................", +"....########........###########.........................", +"....#########........###########........................", +"....##########........###########.......................", +"....###########........############.....................", +"....############........############....................", +"....#############........############...................", +"....##############........#############.................", +"....###############........#############................", +"....################........#############...............", +"....#################........##############.............", +"....##################........##############............", +"....###################........##############...........", +"....####################........###############.........", +"....#####################........###############........", +"....######################........###############.......", +"....#######################........################.....", +"....########################........################....", +"....########################........################....", +"....########################........################....", +"....########################........################....", +"....#######################........################.....", +"....######################........###############.......", +"....#####################........###############........", +"....####################........###############.........", +"....###################........##############...........", +"....##################........##############............", +"....#################........##############.............", +"....################........#############...............", +"....###############........#############................", +"....##############........#############.................", +"....#############........############...................", +"....############........############....................", +"....###########........############.....................", +"....##########........###########.......................", +"....#########........###########........................", +"....########........###########.........................", +"....#######.........#########...........................", +"....######..........########............................", +"........................................................", +"........................................................", +"....############......############......................", +"....############......############......................", +"....############......############......................", +"........................................................", +"........................................................", +"........................................................"}; diff --git a/symbols/ffwd3.xpm b/symbols/ffwd3.xpm new file mode 100644 index 0000000..0e71a04 --- /dev/null +++ b/symbols/ffwd3.xpm @@ -0,0 +1,57 @@ +/* XPM */ +static const char *const ffwd3_xpm[] = { +"56 52 2 1", +". c #ffffff", +"# c #000000", +"........................................................", +"........................................................", +"........................................................", +"........................................................", +"....######..........########............................", +"....#######.........#########...........................", +"....########........###########.........................", +"....#########........###########........................", +"....##########........###########.......................", +"....###########........############.....................", +"....############........############....................", +"....#############........############...................", +"....##############........#############.................", +"....###############........#############................", +"....################........#############...............", +"....#################........##############.............", +"....##################........##############............", +"....###################........##############...........", +"....####################........###############.........", +"....#####################........###############........", +"....######################........###############.......", +"....#######################........################.....", +"....########################........################....", +"....########################........################....", +"....########################........################....", +"....########################........################....", +"....#######################........################.....", +"....######################........###############.......", +"....#####################........###############........", +"....####################........###############.........", +"....###################........##############...........", +"....##################........##############............", +"....#################........##############.............", +"....################........#############...............", +"....###############........#############................", +"....##############........#############.................", +"....#############........############...................", +"....############........############....................", +"....###########........############.....................", +"....##########........###########.......................", +"....#########........###########........................", +"....########........###########.........................", +"....#######.........#########...........................", +"....######..........########............................", +"........................................................", +"........................................................", +"....############......############......############....", +"....############......############......############....", +"....############......############......############....", +"........................................................", +"........................................................", +"........................................................"}; diff --git a/symbols/frew.xpm b/symbols/frew.xpm new file mode 100644 index 0000000..d26460e --- /dev/null +++ b/symbols/frew.xpm @@ -0,0 +1,57 @@ +/* XPM */ +static const char *const frew_xpm[] = { +"56 52 2 1", +". c #FFFFFF", +"+ c #000000", +"........................................................", +"........................................................", +"........................................................", +"........................................................", +"...............................+++++............++++....", +".............................+++++++...........+++++....", +"............................++++++++..........++++++....", +"...........................+++++++++.........+++++++....", +".........................+++++++++++........++++++++....", +"........................+++++++++++........+++++++++....", +".......................+++++++++++........++++++++++....", +".....................++++++++++++........+++++++++++....", +"....................++++++++++++........++++++++++++....", +"...................++++++++++++........+++++++++++++....", +".................+++++++++++++........++++++++++++++....", +"................+++++++++++++........+++++++++++++++....", +"...............+++++++++++++........++++++++++++++++....", +".............++++++++++++++........+++++++++++++++++....", +"............++++++++++++++........++++++++++++++++++....", +"...........++++++++++++++........+++++++++++++++++++....", +".........+++++++++++++++........++++++++++++++++++++....", +"........+++++++++++++++........+++++++++++++++++++++....", +".......+++++++++++++++........++++++++++++++++++++++....", +".....++++++++++++++++........+++++++++++++++++++++++....", +"....++++++++++++++++........++++++++++++++++++++++++....", +"....++++++++++++++++........++++++++++++++++++++++++....", +"....++++++++++++++++........++++++++++++++++++++++++....", +"....++++++++++++++++........++++++++++++++++++++++++....", +".....++++++++++++++++........+++++++++++++++++++++++....", +".......+++++++++++++++........++++++++++++++++++++++....", +"........+++++++++++++++........+++++++++++++++++++++....", +".........+++++++++++++++........++++++++++++++++++++....", +"...........++++++++++++++........+++++++++++++++++++....", +"............++++++++++++++........++++++++++++++++++....", +".............++++++++++++++........+++++++++++++++++....", +"...............+++++++++++++........++++++++++++++++....", +"................+++++++++++++........+++++++++++++++....", +".................+++++++++++++........++++++++++++++....", +"...................++++++++++++........+++++++++++++....", +"....................++++++++++++........++++++++++++....", +".....................++++++++++++........+++++++++++....", +".......................+++++++++++........++++++++++....", +"........................+++++++++++........+++++++++....", +".........................+++++++++++........++++++++....", +"...........................+++++++++.........+++++++....", +"............................++++++++..........++++++....", +".............................+++++++...........+++++....", +"...............................+++++............++++....", +"........................................................", +"........................................................", +"........................................................", +"........................................................"}; diff --git a/symbols/frew1.xpm b/symbols/frew1.xpm new file mode 100644 index 0000000..bfc526c --- /dev/null +++ b/symbols/frew1.xpm @@ -0,0 +1,57 @@ +/* XPM */ +static const char *const frew1_xpm[] = { +"56 52 2 1", +". c #FFFFFF", +"+ c #000000", +"........................................................", +"........................................................", +"........................................................", +"........................................................", +"............................++++++++..........++++++....", +"...........................+++++++++.........+++++++....", +".........................+++++++++++........++++++++....", +"........................+++++++++++........+++++++++....", +".......................+++++++++++........++++++++++....", +".....................++++++++++++........+++++++++++....", +"....................++++++++++++........++++++++++++....", +"...................++++++++++++........+++++++++++++....", +".................+++++++++++++........++++++++++++++....", +"................+++++++++++++........+++++++++++++++....", +"...............+++++++++++++........++++++++++++++++....", +".............++++++++++++++........+++++++++++++++++....", +"............++++++++++++++........++++++++++++++++++....", +"...........++++++++++++++........+++++++++++++++++++....", +".........+++++++++++++++........++++++++++++++++++++....", +"........+++++++++++++++........+++++++++++++++++++++....", +".......+++++++++++++++........++++++++++++++++++++++....", +".....++++++++++++++++........+++++++++++++++++++++++....", +"....++++++++++++++++........++++++++++++++++++++++++....", +"....++++++++++++++++........++++++++++++++++++++++++....", +"....++++++++++++++++........++++++++++++++++++++++++....", +"....++++++++++++++++........++++++++++++++++++++++++....", +".....++++++++++++++++........+++++++++++++++++++++++....", +".......+++++++++++++++........++++++++++++++++++++++....", +"........+++++++++++++++........+++++++++++++++++++++....", +".........+++++++++++++++........++++++++++++++++++++....", +"...........++++++++++++++........+++++++++++++++++++....", +"............++++++++++++++........++++++++++++++++++....", +".............++++++++++++++........+++++++++++++++++....", +"...............+++++++++++++........++++++++++++++++....", +"................+++++++++++++........+++++++++++++++....", +".................+++++++++++++........++++++++++++++....", +"...................++++++++++++........+++++++++++++....", +"....................++++++++++++........++++++++++++....", +".....................++++++++++++........+++++++++++....", +".......................+++++++++++........++++++++++....", +"........................+++++++++++........+++++++++....", +".........................+++++++++++........++++++++....", +"...........................+++++++++.........+++++++....", +"............................++++++++..........++++++....", +"........................................................", +"........................................................", +"........................................++++++++++++....", +"........................................++++++++++++....", +"........................................++++++++++++....", +"........................................................", +"........................................................", +"........................................................"}; diff --git a/symbols/frew2.xpm b/symbols/frew2.xpm new file mode 100644 index 0000000..626c12a --- /dev/null +++ b/symbols/frew2.xpm @@ -0,0 +1,57 @@ +/* XPM */ +static const char *const frew2_xpm[] = { +"56 52 2 1", +". c #FFFFFF", +"+ c #000000", +"........................................................", +"........................................................", +"........................................................", +"........................................................", +"............................++++++++..........++++++....", +"...........................+++++++++.........+++++++....", +".........................+++++++++++........++++++++....", +"........................+++++++++++........+++++++++....", +".......................+++++++++++........++++++++++....", +".....................++++++++++++........+++++++++++....", +"....................++++++++++++........++++++++++++....", +"...................++++++++++++........+++++++++++++....", +".................+++++++++++++........++++++++++++++....", +"................+++++++++++++........+++++++++++++++....", +"...............+++++++++++++........++++++++++++++++....", +".............++++++++++++++........+++++++++++++++++....", +"............++++++++++++++........++++++++++++++++++....", +"...........++++++++++++++........+++++++++++++++++++....", +".........+++++++++++++++........++++++++++++++++++++....", +"........+++++++++++++++........+++++++++++++++++++++....", +".......+++++++++++++++........++++++++++++++++++++++....", +".....++++++++++++++++........+++++++++++++++++++++++....", +"....++++++++++++++++........++++++++++++++++++++++++....", +"....++++++++++++++++........++++++++++++++++++++++++....", +"....++++++++++++++++........++++++++++++++++++++++++....", +"....++++++++++++++++........++++++++++++++++++++++++....", +".....++++++++++++++++........+++++++++++++++++++++++....", +".......+++++++++++++++........++++++++++++++++++++++....", +"........+++++++++++++++........+++++++++++++++++++++....", +".........+++++++++++++++........++++++++++++++++++++....", +"...........++++++++++++++........+++++++++++++++++++....", +"............++++++++++++++........++++++++++++++++++....", +".............++++++++++++++........+++++++++++++++++....", +"...............+++++++++++++........++++++++++++++++....", +"................+++++++++++++........+++++++++++++++....", +".................+++++++++++++........++++++++++++++....", +"...................++++++++++++........+++++++++++++....", +"....................++++++++++++........++++++++++++....", +".....................++++++++++++........+++++++++++....", +".......................+++++++++++........++++++++++....", +"........................+++++++++++........+++++++++....", +".........................+++++++++++........++++++++....", +"...........................+++++++++.........+++++++....", +"............................++++++++..........++++++....", +"........................................................", +"........................................................", +"......................++++++++++++......++++++++++++....", +"......................++++++++++++......++++++++++++....", +"......................++++++++++++......++++++++++++....", +"........................................................", +"........................................................", +"........................................................"}; diff --git a/symbols/frew3.xpm b/symbols/frew3.xpm new file mode 100644 index 0000000..11d6451 --- /dev/null +++ b/symbols/frew3.xpm @@ -0,0 +1,57 @@ +/* XPM */ +static const char *const frew3_xpm[] = { +"56 52 2 1", +". c #FFFFFF", +"+ c #000000", +"........................................................", +"........................................................", +"........................................................", +"........................................................", +"............................++++++++..........++++++....", +"...........................+++++++++.........+++++++....", +".........................+++++++++++........++++++++....", +"........................+++++++++++........+++++++++....", +".......................+++++++++++........++++++++++....", +".....................++++++++++++........+++++++++++....", +"....................++++++++++++........++++++++++++....", +"...................++++++++++++........+++++++++++++....", +".................+++++++++++++........++++++++++++++....", +"................+++++++++++++........+++++++++++++++....", +"...............+++++++++++++........++++++++++++++++....", +".............++++++++++++++........+++++++++++++++++....", +"............++++++++++++++........++++++++++++++++++....", +"...........++++++++++++++........+++++++++++++++++++....", +".........+++++++++++++++........++++++++++++++++++++....", +"........+++++++++++++++........+++++++++++++++++++++....", +".......+++++++++++++++........++++++++++++++++++++++....", +".....++++++++++++++++........+++++++++++++++++++++++....", +"....++++++++++++++++........++++++++++++++++++++++++....", +"....++++++++++++++++........++++++++++++++++++++++++....", +"....++++++++++++++++........++++++++++++++++++++++++....", +"....++++++++++++++++........++++++++++++++++++++++++....", +".....++++++++++++++++........+++++++++++++++++++++++....", +".......+++++++++++++++........++++++++++++++++++++++....", +"........+++++++++++++++........+++++++++++++++++++++....", +".........+++++++++++++++........++++++++++++++++++++....", +"...........++++++++++++++........+++++++++++++++++++....", +"............++++++++++++++........++++++++++++++++++....", +".............++++++++++++++........+++++++++++++++++....", +"...............+++++++++++++........++++++++++++++++....", +"................+++++++++++++........+++++++++++++++....", +".................+++++++++++++........++++++++++++++....", +"...................++++++++++++........+++++++++++++....", +"....................++++++++++++........++++++++++++....", +".....................++++++++++++........+++++++++++....", +".......................+++++++++++........++++++++++....", +"........................+++++++++++........+++++++++....", +".........................+++++++++++........++++++++....", +"...........................+++++++++.........+++++++....", +"............................++++++++..........++++++....", +"........................................................", +"........................................................", +"....++++++++++++......++++++++++++......++++++++++++....", +"....++++++++++++......++++++++++++......++++++++++++....", +"....++++++++++++......++++++++++++......++++++++++++....", +"........................................................", +"........................................................", +"........................................................"}; diff --git a/symbols/mute-1.xpm b/symbols/mute-1.xpm new file mode 100644 index 0000000..8900c3e --- /dev/null +++ b/symbols/mute-1.xpm @@ -0,0 +1,45 @@ +/* XPM */ +static const char *const mute_xpm[] = { +"52 40 2 1", +". c #ffffff", +"# c #000000", +"............###...............####...............###", +"............####..............####..............####", +"............#####...........######.............#####", +".............#####........########............#####.", +"..............#####.....##########...........#####..", +"...............#####...###########..........#####...", +"................#####..####...####.........#####....", +".................#####..#.....####........#####.....", +"..................#####.......####.......#####......", +"..............##...#####......####......#####.......", +"............#####...#####.....####.....#####........", +"..........########...#####....####....#####.........", +"#################.....#####..........#####..........", +"###############........#####........#####...........", +"##############..........#####......#####............", +"##############...........#####....#####.............", +"####......####............############..............", +"####......####.............##########...............", +"####......####..............########................", +"####......####..............########................", +"####......####..............########................", +"####......####..............########................", +"####......####.............##########...............", +"####......####............############..............", +"##############...........#####....#####.............", +"##############..........#####......#####............", +"###############........#####........#####...........", +"#################.....#####..........#####..........", +"..........########...#####....####....#####.........", +"............#####...#####.....####.....#####........", +"..............##...#####......####......#####.......", +"..................#####.......####.......#####......", +".................#####..#.....####........#####.....", +"................#####..####...####.........#####....", +"...............#####...###########..........#####...", +"..............#####.....##########...........#####..", +".............#####........########............#####.", +"............#####...........######.............#####", +"............####..............####..............####", +"............###...............####...............###"}; diff --git a/symbols/mute.xpm b/symbols/mute.xpm new file mode 100644 index 0000000..7aa0b2c --- /dev/null +++ b/symbols/mute.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *const mute_xpm[] = { +"54 36 2 1", +". c #ffffff", +"# c #000000", +"............#####..............####..............#####", +"............######...........######.............######", +".............######........########............######.", +"..............######.....##########...........######..", +"...............######..############..........######...", +"................######..####...####.........######....", +".................######..#.....####........######.....", +"..................######.......####.......######......", +"...............#...######......####......######.......", +".............####...######.....####.....######........", +"...........#######...######....####....######.........", +"..###############.....######..........######..........", +"###############........######........######...........", +"##############..........######......######............", +"##############...........################.............", +"####.......###............##############..............", +"####.......###.............############...............", +"####.......###..............##########................", +"####.......###..............##########................", +"####.......###.............############...............", +"####.......###............##############..............", +"##############...........################.............", +"##############..........######......######............", +"###############........######........######...........", +"..###############.....######..........######..........", +"...........#######...######....####....######.........", +".............####...######.....####.....######........", +"...............#...######......####......######.......", +"..................######.......####.......######......", +".................######..#.....####........######.....", +"................######..####...####.........######....", +"...............######..############..........######...", +"..............######.....##########...........######..", +".............######........########............######.", +"............######...........######.............######", +"............#####..............####..............#####"}; diff --git a/symbols/pause.xpm b/symbols/pause.xpm new file mode 100644 index 0000000..d9283f9 --- /dev/null +++ b/symbols/pause.xpm @@ -0,0 +1,57 @@ +/* XPM */ +static const char *const pause_xpm[] = { +"56 52 2 1", +". c #ffffff", +"# c #000000", +"........................................................", +"........................................................", +"........................................................", +"........................................................", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"............##########............##########............", +"........................................................", +"........................................................", +"........................................................", +"........................................................"}; diff --git a/symbols/play.xpm b/symbols/play.xpm new file mode 100644 index 0000000..68c112f --- /dev/null +++ b/symbols/play.xpm @@ -0,0 +1,57 @@ +/* XPM */ +static const char *const play_xpm[] = { +"56 52 2 1", +". c #ffffff", +"# c #000000", +"........................................................", +"........................................................", +"........................................................", +"........................................................", +"............#####.......................................", +"............#######.....................................", +"............########....................................", +"............#########...................................", +"............###########.................................", +"............############................................", +"............#############...............................", +"............###############.............................", +"............################............................", +"............#################...........................", +"............###################.........................", +"............####################........................", +"............#####################.......................", +"............#######################.....................", +"............########################....................", +"............#########################...................", +"............###########################.................", +"............############################................", +"............#############################...............", +"............###############################.............", +"............################################............", +"............################################............", +"............################################............", +"............################################............", +"............###############################.............", +"............#############################...............", +"............############################................", +"............###########################.................", +"............#########################...................", +"............########################....................", +"............#######################.....................", +"............#####################.......................", +"............####################........................", +"............###################.........................", +"............#################...........................", +"............################............................", +"............###############.............................", +"............#############...............................", +"............############................................", +"............###########.................................", +"............#########...................................", +"............########....................................", +"............#######.....................................", +"............#####.......................................", +"........................................................", +"........................................................", +"........................................................", +"........................................................"}; diff --git a/symbols/radio.xpm b/symbols/radio.xpm new file mode 100644 index 0000000..1230f9b --- /dev/null +++ b/symbols/radio.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *const radio_xpm[] = { +"54 36 2 1", +". c #ffffff", +"+ c #000000", +"......................................................", +"......................................................", +"........................++++++++++....................", +"........................++++++++++++++................", +"........................++++++++++++++++++............", +"........................++++++++++++++++++++..........", +"........................++++++++++++++++++++++........", +"........................+++++++++++++++++++++++.......", +"........................++++++.......+++++++++++......", +"........................++++++..........++++++++......", +"........................++++++............++++++......", +"........................++++++............+++++.......", +"........................++++++...........+++++........", +"........................++++++..........+++++.........", +"........................++++++..........++++..........", +"........................++++++..........+++...........", +"........................++++++........................", +"........................++++++........................", +"........................++++++........................", +"........................++++++........................", +"........................++++++........................", +"........................++++++........................", +"............++++++++++++++++++........................", +"..........++++++++++++++++++++........................", +"........+++++++++++++++++++++++.......................", +"......++++++++++++++++++++++++++......................", +"....++++++++++++++++++++++++++++++....................", +"....++++++++++++++++++++++++++++++....................", +"....++++++++++++++++++++++++++++++....................", +"....++++++++++++++++++++++++++++++....................", +"......++++++++++++++++++++++++++......................", +"........+++++++++++++++++++++++.......................", +"..........+++++++++++++++++++.........................", +"............+++++++++++++++...........................", +"......................................................", +"......................................................"}; diff --git a/symbols/recording.xpm b/symbols/recording.xpm new file mode 100644 index 0000000..9134059 --- /dev/null +++ b/symbols/recording.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *const recording_xpm[] = { +"54 36 2 1", +". c #ffffff", +"+ c #000000", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"....+++++++++++.......++++++++++++....++++++++++++....", +"....++++++++++++.....+++++++++++++...+++++++++++++....", +"....+++++++++++++...++++++++++++++..++++++++++++++....", +"....++++++++++++++..++++++++++++++..++++++++++++++....", +"....+++++....+++++..+++++...........+++++.............", +"....++++......++++..++++............++++..............", +"....++++......++++..++++............++++..............", +"....++++......++++..++++............++++..............", +"....++++......++++..++++............++++..............", +"....++++......++++..++++............++++..............", +"....++++......++++..++++............++++..............", +"....+++++....+++++..+++++...........++++..............", +"....+++++++++++++...++++++++++......++++..............", +"....++++++++++++....++++++++++......++++..............", +"....++++++++++......++++++++++......++++..............", +"....+++++++++.......++++++++++......++++..............", +"....++++++++++......+++++...........++++..............", +"....++++..+++++.....++++............++++..............", +"....++++...+++++....++++............++++..............", +"....++++....+++++...++++............++++..............", +"....++++.....+++++..++++............++++..............", +"....++++......++++..++++............++++..............", +"....++++......++++..++++............++++..............", +"....++++......++++..+++++...........+++++.............", +"....++++......++++..++++++++++++++..++++++++++++++....", +"....++++......++++..++++++++++++++..++++++++++++++....", +"....++++......++++...+++++++++++++...+++++++++++++....", +"....++++......++++....++++++++++++....++++++++++++....", +"......................................................", +"......................................................", +"......................................................", +"......................................................"}; diff --git a/symbols/sfwd.xpm b/symbols/sfwd.xpm new file mode 100644 index 0000000..a6a1246 --- /dev/null +++ b/symbols/sfwd.xpm @@ -0,0 +1,57 @@ +/* XPM */ +static const char *const sfwd_xpm[] = { +"56 52 2 1", +". c #ffffff", +"# c #000000", +"........................................................", +"........................................................", +"........................................................", +"........................................................", +"....##########......#####...............................", +"....##########......#######.............................", +"....##########......########............................", +"....##########......#########...........................", +"....##########......###########.........................", +"....##########......############........................", +"....##########......#############.......................", +"....##########......###############.....................", +"....##########......################....................", +"....##########......#################...................", +"....##########......###################.................", +"....##########......####################................", +"....##########......#####################...............", +"....##########......#######################.............", +"....##########......########################............", +"....##########......#########################...........", +"....##########......###########################.........", +"....##########......############################........", +"....##########......#############################.......", +"....##########......###############################.....", +"....##########......################################....", +"....##########......################################....", +"....##########......################################....", +"....##########......################################....", +"....##########......###############################.....", +"....##########......#############################.......", +"....##########......############################........", +"....##########......###########################.........", +"....##########......#########################...........", +"....##########......########################............", +"....##########......#######################.............", +"....##########......#####################...............", +"....##########......####################................", +"....##########......###################.................", +"....##########......#################...................", +"....##########......################....................", +"....##########......###############.....................", +"....##########......#############.......................", +"....##########......############........................", +"....##########......###########.........................", +"....##########......#########...........................", +"....##########......########............................", +"....##########......#######.............................", +"....##########......#####...............................", +"........................................................", +"........................................................", +"........................................................", +"........................................................"}; diff --git a/symbols/sfwd1.xpm b/symbols/sfwd1.xpm new file mode 100644 index 0000000..5c2365f --- /dev/null +++ b/symbols/sfwd1.xpm @@ -0,0 +1,57 @@ +/* XPM */ +static const char *const sfwd1_xpm[] = { +"56 52 2 1", +". c #ffffff", +"# c #000000", +"........................................................", +"........................................................", +"........................................................", +"........................................................", +"....##########......########............................", +"....##########......#########...........................", +"....##########......###########.........................", +"....##########......############........................", +"....##########......#############.......................", +"....##########......###############.....................", +"....##########......################....................", +"....##########......#################...................", +"....##########......###################.................", +"....##########......####################................", +"....##########......#####################...............", +"....##########......#######################.............", +"....##########......########################............", +"....##########......#########################...........", +"....##########......###########################.........", +"....##########......############################........", +"....##########......#############################.......", +"....##########......###############################.....", +"....##########......################################....", +"....##########......################################....", +"....##########......################################....", +"....##########......################################....", +"....##########......###############################.....", +"....##########......#############################.......", +"....##########......############################........", +"....##########......###########################.........", +"....##########......#########################...........", +"....##########......########################............", +"....##########......#######################.............", +"....##########......#####################...............", +"....##########......####################................", +"....##########......###################.................", +"....##########......#################...................", +"....##########......################....................", +"....##########......###############.....................", +"....##########......#############.......................", +"....##########......############........................", +"....##########......###########.........................", +"....##########......#########...........................", +"....##########......########............................", +"........................................................", +"........................................................", +"....############........................................", +"....############........................................", +"....############........................................", +"........................................................", +"........................................................", +"........................................................"}; diff --git a/symbols/sfwd2.xpm b/symbols/sfwd2.xpm new file mode 100644 index 0000000..9a5c224 --- /dev/null +++ b/symbols/sfwd2.xpm @@ -0,0 +1,57 @@ +/* XPM */ +static const char *const sfwd2_xpm[] = { +"56 52 2 1", +". c #ffffff", +"# c #000000", +"........................................................", +"........................................................", +"........................................................", +"........................................................", +"....##########......########............................", +"....##########......#########...........................", +"....##########......###########.........................", +"....##########......############........................", +"....##########......#############.......................", +"....##########......###############.....................", +"....##########......################....................", +"....##########......#################...................", +"....##########......###################.................", +"....##########......####################................", +"....##########......#####################...............", +"....##########......#######################.............", +"....##########......########################............", +"....##########......#########################...........", +"....##########......###########################.........", +"....##########......############################........", +"....##########......#############################.......", +"....##########......###############################.....", +"....##########......################################....", +"....##########......################################....", +"....##########......################################....", +"....##########......################################....", +"....##########......###############################.....", +"....##########......#############################.......", +"....##########......############################........", +"....##########......###########################.........", +"....##########......#########################...........", +"....##########......########################............", +"....##########......#######################.............", +"....##########......#####################...............", +"....##########......####################................", +"....##########......###################.................", +"....##########......#################...................", +"....##########......################....................", +"....##########......###############.....................", +"....##########......#############.......................", +"....##########......############........................", +"....##########......###########.........................", +"....##########......#########...........................", +"....##########......########............................", +"........................................................", +"........................................................", +"....############......############......................", +"....############......############......................", +"....############......############......................", +"........................................................", +"........................................................", +"........................................................"}; diff --git a/symbols/sfwd3.xpm b/symbols/sfwd3.xpm new file mode 100644 index 0000000..37e90f5 --- /dev/null +++ b/symbols/sfwd3.xpm @@ -0,0 +1,57 @@ +/* XPM */ +static const char *const sfwd3_xpm[] = { +"56 52 2 1", +". c #ffffff", +"# c #000000", +"........................................................", +"........................................................", +"........................................................", +"........................................................", +"....##########......########............................", +"....##########......#########...........................", +"....##########......###########.........................", +"....##########......############........................", +"....##########......#############.......................", +"....##########......###############.....................", +"....##########......################....................", +"....##########......#################...................", +"....##########......###################.................", +"....##########......####################................", +"....##########......#####################...............", +"....##########......#######################.............", +"....##########......########################............", +"....##########......#########################...........", +"....##########......###########################.........", +"....##########......############################........", +"....##########......#############################.......", +"....##########......###############################.....", +"....##########......################################....", +"....##########......################################....", +"....##########......################################....", +"....##########......################################....", +"....##########......###############################.....", +"....##########......#############################.......", +"....##########......############################........", +"....##########......###########################.........", +"....##########......#########################...........", +"....##########......########################............", +"....##########......#######################.............", +"....##########......#####################...............", +"....##########......####################................", +"....##########......###################.................", +"....##########......#################...................", +"....##########......################....................", +"....##########......###############.....................", +"....##########......#############.......................", +"....##########......############........................", +"....##########......###########.........................", +"....##########......#########...........................", +"....##########......########............................", +"........................................................", +"........................................................", +"....############......############......############....", +"....############......############......############....", +"....############......############......############....", +"........................................................", +"........................................................", +"........................................................"}; diff --git a/symbols/srew.xpm b/symbols/srew.xpm new file mode 100644 index 0000000..1ae2115 --- /dev/null +++ b/symbols/srew.xpm @@ -0,0 +1,57 @@ +/* XPM */ +static const char *const srew_xpm[] = { +"56 52 2 1", +". c #FFFFFF", +"+ c #000000", +"........................................................", +"........................................................", +"........................................................", +"........................................................", +"...............................+++++......++++++++++....", +".............................+++++++......++++++++++....", +"............................++++++++......++++++++++....", +"...........................+++++++++......++++++++++....", +".........................+++++++++++......++++++++++....", +"........................++++++++++++......++++++++++....", +".......................+++++++++++++......++++++++++....", +".....................+++++++++++++++......++++++++++....", +"....................++++++++++++++++......++++++++++....", +"...................+++++++++++++++++......++++++++++....", +".................+++++++++++++++++++......++++++++++....", +"................++++++++++++++++++++......++++++++++....", +"...............+++++++++++++++++++++......++++++++++....", +".............+++++++++++++++++++++++......++++++++++....", +"............++++++++++++++++++++++++......++++++++++....", +"...........+++++++++++++++++++++++++......++++++++++....", +".........+++++++++++++++++++++++++++......++++++++++....", +"........++++++++++++++++++++++++++++......++++++++++....", +".......+++++++++++++++++++++++++++++......++++++++++....", +".....+++++++++++++++++++++++++++++++......++++++++++....", +"....++++++++++++++++++++++++++++++++......++++++++++....", +"....++++++++++++++++++++++++++++++++......++++++++++....", +"....++++++++++++++++++++++++++++++++......++++++++++....", +"....++++++++++++++++++++++++++++++++......++++++++++....", +".....+++++++++++++++++++++++++++++++......++++++++++....", +".......+++++++++++++++++++++++++++++......++++++++++....", +"........++++++++++++++++++++++++++++......++++++++++....", +".........+++++++++++++++++++++++++++......++++++++++....", +"...........+++++++++++++++++++++++++......++++++++++....", +"............++++++++++++++++++++++++......++++++++++....", +".............+++++++++++++++++++++++......++++++++++....", +"...............+++++++++++++++++++++......++++++++++....", +"................++++++++++++++++++++......++++++++++....", +".................+++++++++++++++++++......++++++++++....", +"...................+++++++++++++++++......++++++++++....", +"....................++++++++++++++++......++++++++++....", +".....................+++++++++++++++......++++++++++....", +".......................+++++++++++++......++++++++++....", +"........................++++++++++++......++++++++++....", +".........................+++++++++++......++++++++++....", +"...........................+++++++++......++++++++++....", +"............................++++++++......++++++++++....", +".............................+++++++......++++++++++....", +"...............................+++++......++++++++++....", +"........................................................", +"........................................................", +"........................................................", +"........................................................"}; diff --git a/symbols/srew1.xpm b/symbols/srew1.xpm new file mode 100644 index 0000000..a61bd90 --- /dev/null +++ b/symbols/srew1.xpm @@ -0,0 +1,57 @@ +/* XPM */ +static const char *const srew1_xpm[] = { +"56 52 2 1", +". c #FFFFFF", +"+ c #000000", +"........................................................", +"........................................................", +"........................................................", +"........................................................", +"............................++++++++......++++++++++....", +"...........................+++++++++......++++++++++....", +".........................+++++++++++......++++++++++....", +"........................++++++++++++......++++++++++....", +".......................+++++++++++++......++++++++++....", +".....................+++++++++++++++......++++++++++....", +"....................++++++++++++++++......++++++++++....", +"...................+++++++++++++++++......++++++++++....", +".................+++++++++++++++++++......++++++++++....", +"................++++++++++++++++++++......++++++++++....", +"...............+++++++++++++++++++++......++++++++++....", +".............+++++++++++++++++++++++......++++++++++....", +"............++++++++++++++++++++++++......++++++++++....", +"...........+++++++++++++++++++++++++......++++++++++....", +".........+++++++++++++++++++++++++++......++++++++++....", +"........++++++++++++++++++++++++++++......++++++++++....", +".......+++++++++++++++++++++++++++++......++++++++++....", +".....+++++++++++++++++++++++++++++++......++++++++++....", +"....++++++++++++++++++++++++++++++++......++++++++++....", +"....++++++++++++++++++++++++++++++++......++++++++++....", +"....++++++++++++++++++++++++++++++++......++++++++++....", +"....++++++++++++++++++++++++++++++++......++++++++++....", +".....+++++++++++++++++++++++++++++++......++++++++++....", +".......+++++++++++++++++++++++++++++......++++++++++....", +"........++++++++++++++++++++++++++++......++++++++++....", +".........+++++++++++++++++++++++++++......++++++++++....", +"...........+++++++++++++++++++++++++......++++++++++....", +"............++++++++++++++++++++++++......++++++++++....", +".............+++++++++++++++++++++++......++++++++++....", +"...............+++++++++++++++++++++......++++++++++....", +"................++++++++++++++++++++......++++++++++....", +".................+++++++++++++++++++......++++++++++....", +"...................+++++++++++++++++......++++++++++....", +"....................++++++++++++++++......++++++++++....", +".....................+++++++++++++++......++++++++++....", +".......................+++++++++++++......++++++++++....", +"........................++++++++++++......++++++++++....", +".........................+++++++++++......++++++++++....", +"...........................+++++++++......++++++++++....", +"............................++++++++......++++++++++....", +"........................................................", +"........................................................", +"........................................++++++++++++....", +"........................................++++++++++++....", +"........................................++++++++++++....", +"........................................................", +"........................................................", +"........................................................"}; diff --git a/symbols/srew2.xpm b/symbols/srew2.xpm new file mode 100644 index 0000000..7449f8a --- /dev/null +++ b/symbols/srew2.xpm @@ -0,0 +1,57 @@ +/* XPM */ +static const char *const srew2_xpm[] = { +"56 52 2 1", +". c #FFFFFF", +"+ c #000000", +"........................................................", +"........................................................", +"........................................................", +"........................................................", +"............................++++++++......++++++++++....", +"...........................+++++++++......++++++++++....", +".........................+++++++++++......++++++++++....", +"........................++++++++++++......++++++++++....", +".......................+++++++++++++......++++++++++....", +".....................+++++++++++++++......++++++++++....", +"....................++++++++++++++++......++++++++++....", +"...................+++++++++++++++++......++++++++++....", +".................+++++++++++++++++++......++++++++++....", +"................++++++++++++++++++++......++++++++++....", +"...............+++++++++++++++++++++......++++++++++....", +".............+++++++++++++++++++++++......++++++++++....", +"............++++++++++++++++++++++++......++++++++++....", +"...........+++++++++++++++++++++++++......++++++++++....", +".........+++++++++++++++++++++++++++......++++++++++....", +"........++++++++++++++++++++++++++++......++++++++++....", +".......+++++++++++++++++++++++++++++......++++++++++....", +".....+++++++++++++++++++++++++++++++......++++++++++....", +"....++++++++++++++++++++++++++++++++......++++++++++....", +"....++++++++++++++++++++++++++++++++......++++++++++....", +"....++++++++++++++++++++++++++++++++......++++++++++....", +"....++++++++++++++++++++++++++++++++......++++++++++....", +".....+++++++++++++++++++++++++++++++......++++++++++....", +".......+++++++++++++++++++++++++++++......++++++++++....", +"........++++++++++++++++++++++++++++......++++++++++....", +".........+++++++++++++++++++++++++++......++++++++++....", +"...........+++++++++++++++++++++++++......++++++++++....", +"............++++++++++++++++++++++++......++++++++++....", +".............+++++++++++++++++++++++......++++++++++....", +"...............+++++++++++++++++++++......++++++++++....", +"................++++++++++++++++++++......++++++++++....", +".................+++++++++++++++++++......++++++++++....", +"...................+++++++++++++++++......++++++++++....", +"....................++++++++++++++++......++++++++++....", +".....................+++++++++++++++......++++++++++....", +".......................+++++++++++++......++++++++++....", +"........................++++++++++++......++++++++++....", +".........................+++++++++++......++++++++++....", +"...........................+++++++++......++++++++++....", +"............................++++++++......++++++++++....", +"........................................................", +"........................................................", +"......................++++++++++++......++++++++++++....", +"......................++++++++++++......++++++++++++....", +"......................++++++++++++......++++++++++++....", +"........................................................", +"........................................................", +"........................................................"}; diff --git a/symbols/srew3.xpm b/symbols/srew3.xpm new file mode 100644 index 0000000..c719a5d --- /dev/null +++ b/symbols/srew3.xpm @@ -0,0 +1,57 @@ +/* XPM */ +static const char *const srew3_xpm[] = { +"56 52 2 1", +". c #FFFFFF", +"+ c #000000", +"........................................................", +"........................................................", +"........................................................", +"........................................................", +"............................++++++++......++++++++++....", +"...........................+++++++++......++++++++++....", +".........................+++++++++++......++++++++++....", +"........................++++++++++++......++++++++++....", +".......................+++++++++++++......++++++++++....", +".....................+++++++++++++++......++++++++++....", +"....................++++++++++++++++......++++++++++....", +"...................+++++++++++++++++......++++++++++....", +".................+++++++++++++++++++......++++++++++....", +"................++++++++++++++++++++......++++++++++....", +"...............+++++++++++++++++++++......++++++++++....", +".............+++++++++++++++++++++++......++++++++++....", +"............++++++++++++++++++++++++......++++++++++....", +"...........+++++++++++++++++++++++++......++++++++++....", +".........+++++++++++++++++++++++++++......++++++++++....", +"........++++++++++++++++++++++++++++......++++++++++....", +".......+++++++++++++++++++++++++++++......++++++++++....", +".....+++++++++++++++++++++++++++++++......++++++++++....", +"....++++++++++++++++++++++++++++++++......++++++++++....", +"....++++++++++++++++++++++++++++++++......++++++++++....", +"....++++++++++++++++++++++++++++++++......++++++++++....", +"....++++++++++++++++++++++++++++++++......++++++++++....", +".....+++++++++++++++++++++++++++++++......++++++++++....", +".......+++++++++++++++++++++++++++++......++++++++++....", +"........++++++++++++++++++++++++++++......++++++++++....", +".........+++++++++++++++++++++++++++......++++++++++....", +"...........+++++++++++++++++++++++++......++++++++++....", +"............++++++++++++++++++++++++......++++++++++....", +".............+++++++++++++++++++++++......++++++++++....", +"...............+++++++++++++++++++++......++++++++++....", +"................++++++++++++++++++++......++++++++++....", +".................+++++++++++++++++++......++++++++++....", +"...................+++++++++++++++++......++++++++++....", +"....................++++++++++++++++......++++++++++....", +".....................+++++++++++++++......++++++++++....", +".......................+++++++++++++......++++++++++....", +"........................++++++++++++......++++++++++....", +".........................+++++++++++......++++++++++....", +"...........................+++++++++......++++++++++....", +"............................++++++++......++++++++++....", +"........................................................", +"........................................................", +"....++++++++++++......++++++++++++......++++++++++++....", +"....++++++++++++......++++++++++++......++++++++++++....", +"....++++++++++++......++++++++++++......++++++++++++....", +"........................................................", +"........................................................", +"........................................................"}; diff --git a/symbols/teletext.xpm b/symbols/teletext.xpm new file mode 100644 index 0000000..0e57687 --- /dev/null +++ b/symbols/teletext.xpm @@ -0,0 +1,41 @@ +/* XPM */ +static const char *const teletext_xpm[] = { +"54 36 2 1", +". c #ffffff", +"+ c #000000", +"......................................................", +"......................................................", +"......................................................", +"......................................................", +"....++++++++++++++++++++++++++++++++++++++++++++++....", +"....++++++++++++++++++++++++++++++++++++++++++++++....", +"....++++++++++++++++++++++++++++++++++++++++++++++....", +"....+++........................................+++....", +"....+++........................................+++....", +"....+++........................................+++....", +"....+++.....++++++++++++++++++++++++++++++.....+++....", +"....+++.....++++++++++++++++++++++++++++++.....+++....", +"....+++.....++++++++++++++++++++++++++++++.....+++....", +"....+++........................................+++....", +"....+++........................................+++....", +"....+++........................................+++....", +"....+++.....++++++++++++++++++++++++++++++.....+++....", +"....+++.....++++++++++++++++++++++++++++++.....+++....", +"....+++.....++++++++++++++++++++++++++++++.....+++....", +"....+++........................................+++....", +"....+++........................................+++....", +"....+++........................................+++....", +"....+++.....++++++++++++++++++++++++++++++.....+++....", +"....+++.....++++++++++++++++++++++++++++++.....+++....", +"....+++.....++++++++++++++++++++++++++++++.....+++....", +"....+++........................................+++....", +"....+++........................................+++....", +"....+++........................................+++....", +"....+++........................................+++....", +"....++++++++++++++++++++++++++++++++++++++++++++++....", +"....++++++++++++++++++++++++++++++++++++++++++++++....", +"....++++++++++++++++++++++++++++++++++++++++++++++....", +"......................................................", +"......................................................", +"......................................................", +"......................................................"}; diff --git a/symbols/volume.xpm b/symbols/volume.xpm new file mode 100644 index 0000000..b5cb5d3 --- /dev/null +++ b/symbols/volume.xpm @@ -0,0 +1,33 @@ +/* XPM */ +static const char *const volume_xpm[] = { +"56 28 2 1", +". c #ffffff", +"# c #000000", +"....................................................####", +"....................................................####", +"................................................########", +"................................................########", +"............................................############", +"............................................############", +"........................................################", +"........................................################", +"....................................####################", +"....................................####################", +"................................########################", +"................................########################", +"............................############################", +"............................############################", +"........................################################", +"........................################################", +"....................####################################", +"....................####################################", +"................########################################", +"................########################################", +"............############################################", +"............############################################", +"........################################################", +"........################################################", +"....####################################################", +"....####################################################", +"########################################################", +"########################################################"}; diff --git a/themes/lcarsng-390Lb.theme b/themes/lcarsng-390Lb.theme new file mode 100644 index 0000000..f608c24 --- /dev/null +++ b/themes/lcarsng-390Lb.theme @@ -0,0 +1,110 @@ +Description = 390Lb +clrBackground = A0141717 + +clrTrackName = FFFFCC66 +clrAlertFg = FFFFFFFF +clrAlertBg = FFFF0000 +clrChannelName = FF99CCFF +clrEventTitle = FF99CCFF +clrEventTime = FFFFCC66 +clrEventShortText = FFFFCC66 +clrEventDescription = FF99CCFF + + +clrButtonRedFg = FF000000 +clrButtonRedBg = FFf97d7d +clrButtonGreenFg = FF000000 +clrButtonGreenBg = FF9df97d +clrButtonYellowFg = FF000000 +clrButtonYellowBg = FFf9f47d +clrButtonBlueFg = FF000000 +clrButtonBlueBg = FF7db4f9 + + +clrMessageStatusFg = FFFFFFFF +clrMessageStatusBg = FF0000B2 +clrMessageInfoFg = FF000000 +clrMessageInfoBg = FF00B200 +clrMessageWarningFg = FF000000 +clrMessageWarningBg = FFB2B200 +clrMessageErrorFg = FFFFFFFF +clrMessageErrorBg = FFB20000 +clrVolumeFrame = FFF1DF6F +clrVolumeSymbol = FF000000 +clrVolumeBarUpper = FFC1B259 +clrVolumeBarLower = FF00B200 + +clrChannelFrameFg = FF000000 +clrChannelFrameBg = FF8a9ec9 + +clrChannelSymbolOn = FF50638b +clrChannelSymbolOff = FF738ec9 +clrChannelSymbolRecFg = FFFFFFFF +clrChannelSymbolRecBg = FFB20000 + + +#Pegel Text +clrDeviceFg = FFff9900 +#Pegel Hintergrund +clrDeviceBg = A0141717 +#Pegel Balken +clrSignalValue = FFff9966 +#Pegel Hintergrund +clrSignalRest = FFffcc99 +#Timer Text +clrTimerFg = FF000000 +#Timer hintergrund +clrTimerBg = FF99CCFF +#Sendungsfortschritt +clrSeen = FFCC99CC +#Datum Vordergrund +clrDateFg = FF000000 +#Datum Hintergrund +clrDateBg = FF99CCFF +#Umrandung unten Vordergrund +clrMenuFrameFg = FF202740 +#Umrandung unten Hintergrund +#c#lrMenuFrameBg = FFe0606d +clrMenuFrameBg = FFFF9966 +#Menue Titel Text +clrMenuTitle = FFea962d + +#Menu Liste +clrMenuMainBracket = FF9999ff +#Liste Aktiv Vordergrund +clrMenuItemCurrentFg = FFffa201 +#Liste Aktiv Hintergrund +clrMenuItemCurrentBg = FF202740 +#Liste Eintrag +clrMenuItemSelectable = FF8a9ec9 +#Liste Eintrag (inaktiv) +clrMenuItemNonSelectable = FF99CCFF + + + + +clrMenuTimerRecording = FFF1B1AF +clrMenuDeviceRecording = FF99CCFF + + +clrMenuScrollbarTotal = FFFFBC57 +clrMenuScrollbarShown = FFCC99CC +clrMenuScrollbarArrow = FF000000 +clrMenuText = FFff00ff + +clrReplayFrameFg = FF000000 +clrReplayFrameBg = FFCC6666 +clrReplayPosition = FFCC99CC +clrReplayJumpFg = FF000000 +clrReplayJumpBg = FFCC99CC +clrReplayProgressSeen = FFCC99CC +clrReplayProgressRest = FFCCCCCC +clrReplayProgressSelected = FF990000 +clrReplayProgressMark = FF000000 +clrReplayProgressCurrent = FF990000 +clrTrackFrameFg = FF000000 +clrTrackFrameBg = FFFFCC66 +clrTrackItemFg = FF000000 +clrTrackItemBg = FFFFE6B3 +clrTrackItemCurrentFg = FF000000 +clrTrackItemCurrentBg = FFFFCC66 diff --git a/themes/lcarsng-BlueGlass.theme b/themes/lcarsng-BlueGlass.theme new file mode 100644 index 0000000..59dc3db --- /dev/null +++ b/themes/lcarsng-BlueGlass.theme @@ -0,0 +1,104 @@ +Description = BlueGlass +clrBackground = 8C1B1B1B + +clrTrackName = FFFFCC66 +clrAlertFg = FFFFFFFF +clrAlertBg = DCFF0000 +clrChannelName = FFFFFFFF +clrEventTitle = FF99CCFF +clrEventTime = FFFFFFFF #FFCC66 +clrEventShortText = FFFFCC66 +clrEventDescription = FF99CCFF + +# Pulsanti +clrButtonRedFg = FF000000 +clrButtonRedBg = DCf97d7d +clrButtonGreenFg = FF000000 +clrButtonGreenBg = DC9df97d +clrButtonYellowFg = FF000000 +clrButtonYellowBg = DCf9f47d +clrButtonBlueFg = FF000000 +clrButtonBlueBg = DC7db4f9 + +# Messaggi di stato +clrMessageStatusFg = FFFFFFFF +clrMessageStatusBg = DC0000B2 +clrMessageInfoFg = FF000000 +clrMessageInfoBg = DC00B200 +clrMessageWarningFg = FF000000 +clrMessageWarningBg = DC005B9A #B2B200 +clrMessageErrorFg = FFFFFFFF +clrMessageErrorBg = DCB20000 + +# Volume +clrVolumeFrame = DCFFFFFF #sfondo volume +clrVolumeSymbol = FF000000 +clrVolumeBarUpper = DCC0C0C0 #barra volume non attivo +clrVolumeBarLower = FF336699 #barra volume attivo + +# Menu info canale +clrChannelFrameFg = FFFFFFFF #numero canale e orario programma +clrChannelFrameBg = DC323D68 #cornice +clrChannelSymbolOn = FFFFFFFF #50638b +clrChannelSymbolOff = DC666666 +clrChannelSymbolRecFg = FFFFFFFF +clrChannelSymbolRecBg = FFB20000 + +# Device +clrDeviceFg = FFff9900 #testo +clrDeviceBg = A01B1B1B #sfondo +clrSignalValue = DCFFCC00 #livello segnale +clrSignalRest = A0000000 #resto segnale + +# Timer Text +clrTimerFg = FF000000 #testo +clrTimerBg = DCE9E0DB #sfondo + +# Progressbar +clrSeen = A0F9F6F4 + +# Data e ora +clrDateFg = FF000000 #testo +clrDateBg = DCE9E0DB #sfondo + +# Menu principale +clrMenuFrameFg = FFFFCC99 #testo +clrMenuFrameBg = DC21244B #cornice +clrMenuTitle = FFEA962D #testo titoli + +# Menu lista voci +clrMenuMainBracket = DC202740 #cornice sup/inf +clrMenuItemCurrentFg = FFffcc99 #Voce selezionata (testo) +clrMenuItemCurrentBg = FF202740 #Voce selezionata (barra) +clrMenuItemSelectable = FF99CCFF #Lista delle voci selezionabili +clrMenuItemNonSelectable = FF8C8C8C #lista delle voci (non selezionabili) + +# Tempo registrazione +clrMenuTimerRecording = FFF6A03D #FFF1B1AF +clrMenuDeviceRecording = A01B1B1B #FF99CCFF #A0141717 + +# Scrollbar +clrMenuScrollbarTotal = A0202740 +clrMenuScrollbarShown = FF202740 +clrMenuScrollbarArrow = FF000000 +clrMenuText = FFFFFFFF #FFff00ff + +# Replay OSD +clrReplayFrameFg = FFFFFFFF #FF000000 +clrReplayFrameBg = DC007090 +clrReplayPosition = FFCC99CC +clrReplayJumpFg = FF000000 +clrReplayJumpBg = FFCC99CC +clrReplayProgressSeen = FFF6A03D #CC99CC +clrReplayProgressRest = FFCCCCCC +clrReplayProgressSelected = FF990000 +clrReplayProgressMark = FF000000 +clrReplayProgressCurrent = FF990000 + +# Audio +clrTrackFrameFg = FFFFFFFF +clrTrackFrameBg = DC323D68 #Audio skin +clrTrackItemFg = DC858585 +clrTrackItemBg = A0FFFFFF #Audio no select +clrTrackItemCurrentFg = FF000000 +clrTrackItemCurrentBg = FFFFFFFF #Audio select diff --git a/themes/lcarsng-LbSense.theme b/themes/lcarsng-LbSense.theme new file mode 100644 index 0000000..faed2f1 --- /dev/null +++ b/themes/lcarsng-LbSense.theme @@ -0,0 +1,105 @@ +Description = LbSense +clrBackground = A0141717 + +clrTrackName = FFFFCC66 +clrAlertFg = FFFFFFFF +clrAlertBg = FFFF0000 +clrChannelName = FFFFFFFF #FF99CCFF +clrEventTitle = FFFFCC99 #99CCFF +clrEventTime = FFFFCC66 +clrEventShortText = FF99CCFF #FFCC66 +clrEventDescription = FF99CCFF #99CCFF + +# Pulsanti +clrButtonRedFg = FF000000 +clrButtonRedBg = FFf97d7d +clrButtonGreenFg = FF000000 +clrButtonGreenBg = FF9df97d +clrButtonYellowFg = FF000000 +clrButtonYellowBg = FFf9f47d +clrButtonBlueFg = FF000000 +clrButtonBlueBg = FF7db4f9 + +# Messaggi di stato +clrMessageStatusFg = FFFFFFFF +clrMessageStatusBg = FF0000B2 +clrMessageInfoFg = FF000000 +clrMessageInfoBg = FF00B200 +clrMessageWarningFg = FF000000 +clrMessageWarningBg = FFB2B200 +clrMessageErrorFg = FFFFFFFF +clrMessageErrorBg = FFB20000 + +# Volume +clrVolumeFrame = DCFFFFFF #FF99CCFF #FFF1DF6F +clrVolumeSymbol = FF000000 +clrVolumeBarUpper = A08C8C8C #DCFFCC99 #FFC1B259 +clrVolumeBarLower = DC7DB4F9 #FF8A9EC9 #FF9966 #FF00B200 + +# Menu info canale +clrChannelFrameFg = FF000000 +clrChannelFrameBg = FF8A9EC9 +clrChannelSymbolOn = FF202740 #FFFFFF #50638b +clrChannelSymbolOff = FF738ec9 +clrChannelSymbolRecFg = FFFFFFFF +clrChannelSymbolRecBg = FFB20000 + +# Device +clrDeviceFg = FFff9900 +clrDeviceBg = A0141717 +clrSignalValue = FFff9966 +clrSignalRest = FFffcc99 + +# Timer Text +clrTimerFg = FF000000 +clrTimerBg = FF99CCFF + +# Progressbar +clrSeen = FFCC99CC + +# Data e ora +clrDateFg = FF000000 +clrDateBg = FF99CCFF + +# Menu principale +clrMenuFrameFg = FF202740 +clrMenuFrameBg = FFFFCC99 #FFFF9966 +clrMenuTitle = FFea962d + +# Menu lista voci +clrMenuMainBracket = FF9999ff +clrMenuItemCurrentFg = FFffcc99 #FFffa201 +clrMenuItemCurrentBg = FF202740 +clrMenuItemSelectable = FF99CCFF #8A9EC9 +clrMenuItemNonSelectable = FF99CCFF + +# Tempo registrazione +clrMenuTimerRecording = FFF1B1AF +clrMenuDeviceRecording = FF99CCFF + +# Scrollbar +clrMenuScrollbarTotal = FF9999ff #FFFFBC57 +clrMenuScrollbarShown = FFCC99CC +clrMenuScrollbarArrow = FF000000 +clrMenuText = FFff00ff + +# Replay OSD +clrReplayFrameFg = FF000000 +clrReplayFrameBg = FFCC6666 +clrReplayPosition = FFCC99CC +clrReplayJumpFg = FF000000 +clrReplayJumpBg = FFCC99CC +clrReplayProgressSeen = FFCC99CC +clrReplayProgressRest = FFCCCCCC +clrReplayProgressSelected = FF990000 +clrReplayProgressMark = FF000000 +clrReplayProgressCurrent = FF990000 + +# Audio +clrTrackFrameFg = FF000000 +clrTrackFrameBg = FFFFFCC99 #skin +clrTrackItemFg = DC858585 +clrTrackItemBg = A0FFFFFF #Audio no select +clrTrackItemCurrentFg = FF000000 +clrTrackItemCurrentBg = FF99CCFF #Audio select + diff --git a/themes/lcarsng-default.theme b/themes/lcarsng-default.theme new file mode 100644 index 0000000..e83206a --- /dev/null +++ b/themes/lcarsng-default.theme @@ -0,0 +1,75 @@ +Description = Default +clrBackground = 99000000 +clrDateFg = FF000000 +clrDateBg = FF99CCFF +clrTimerFg = FF000000 +clrTimerBg = FF99CCFF +clrDeviceFg = FF000000 +clrDeviceBg = FFF1B1AF +clrSignalValue = FFA0FF99 +clrSignalRest = FFCC6666 +clrSeen = FFCC99CC +clrTrackName = FFFFCC66 +clrAlertFg = FFFFFFFF +clrAlertBg = FFFF0000 +clrChannelName = FF99CCFF +clrEventTitle = FF99CCFF +clrEventTime = FFFFCC66 +clrEventShortText = FFFFCC66 +clrEventDescription = FF99CCFF +clrButtonRedFg = FF000000 +clrButtonRedBg = FFCC6666 +clrButtonGreenFg = FF000000 +clrButtonGreenBg = FFA0FF99 +clrButtonYellowFg = FF000000 +clrButtonYellowBg = FFF1DF60 +clrButtonBlueFg = FF000000 +clrButtonBlueBg = FF9A99FF +clrMessageStatusFg = FF000000 +clrMessageStatusBg = FF9A99FF +clrMessageInfoFg = FF000000 +clrMessageInfoBg = FFA0FF99 +clrMessageWarningFg = FF000000 +clrMessageWarningBg = FFF1DF60 +clrMessageErrorFg = FF000000 +clrMessageErrorBg = FFCC6666 +clrVolumeFrame = FFFF9966 +clrVolumeSymbol = FF000000 +clrVolumeBarUpper = FFCC7A52 +clrVolumeBarLower = FFA0FF99 +clrChannelFrameFg = FF000000 +clrChannelFrameBg = FF8A9EC9 +clrChannelSymbolOn = FF000000 +clrChannelSymbolOff = FF6E7EA1 +clrChannelSymbolRecFg = FFFFFFFF +clrChannelSymbolRecBg = FFCC6666 +clrMenuFrameFg = FF000000 +clrMenuFrameBg = FFFF9966 +clrMenuTitle = FFFF9966 +clrMenuMainBracket = FF9999FF +clrMenuTimerRecording = FFF1B1AF +clrMenuDeviceRecording = FF99CCFF +clrMenuItemCurrentFg = FFFF9966 +clrMenuItemCurrentBg = FF4D4D80 +clrMenuItemSelectable = FF9999FF +clrMenuItemNonSelectable = FF99CCFF +clrMenuScrollbarTotal = FFFFAD85 +clrMenuScrollbarShown = FFCC99CC +clrMenuScrollbarArrow = FF000000 +clrMenuText = FF99CCFF +clrReplayFrameFg = FF000000 +clrReplayFrameBg = FFCC6666 +clrReplayPosition = FFCC99CC +clrReplayJumpFg = FF000000 +clrReplayJumpBg = FFCC99CC +clrReplayProgressSeen = FFCC99CC +clrReplayProgressRest = FFCCCCCC +clrReplayProgressSelected = FF990000 +clrReplayProgressMark = FF000000 +clrReplayProgressCurrent = FF990000 +clrTrackFrameFg = FF000000 +clrTrackFrameBg = FFFFCC66 +clrTrackItemFg = FF000000 +clrTrackItemBg = FFFFE6B3 +clrTrackItemCurrentFg = FF000000 +clrTrackItemCurrentBg = FFFFCC66 diff --git a/themes/lcarsng-mein.theme b/themes/lcarsng-mein.theme new file mode 100644 index 0000000..fd58057 --- /dev/null +++ b/themes/lcarsng-mein.theme @@ -0,0 +1,75 @@ +Description = mein +clrBackground = 90000000 +clrDateFg = FF000000 +clrDateBg = FF99CCFF +clrTimerFg = FF000000 +clrTimerBg = FF99CCFF +clrDeviceFg = FF000000 +clrDeviceBg = FFF1B1AF +clrSignalValue = FFA0FF99 +clrSignalRest = FFCC6666 +clrSeen = FFCC99CC +clrTrackName = FFFFCC66 +clrAlertFg = FFFFFFFF +clrAlertBg = FFFF0000 +clrChannelName = FF99CCFF +clrEventTitle = FF99CCFF +clrEventTime = FFFFCC66 +clrEventShortText = FFFFCC66 +clrEventDescription = FF99CCFF +clrButtonRedFg = FF000000 +clrButtonRedBg = FFCC6666 +clrButtonGreenFg = FF000000 +clrButtonGreenBg = FFA0FF99 +clrButtonYellowFg = FF000000 +clrButtonYellowBg = FFF1DF60 +clrButtonBlueFg = FF000000 +clrButtonBlueBg = FF9A99FF +clrMessageStatusFg = FFFFFFFF +clrMessageStatusBg = FF9A99FF +clrMessageInfoFg = FF000000 +clrMessageInfoBg = FFA0FF99 +clrMessageWarningFg = FF000000 +clrMessageWarningBg = FFF1DF60 +clrMessageErrorFg = FFFFFFFF +clrMessageErrorBg = FFCC6666 +clrVolumeFrame = FFF1DF6F +clrVolumeSymbol = FF000000 +clrVolumeBarUpper = FFC1B259 +clrVolumeBarLower = FFA0FF99 +clrChannelFrameFg = FF000000 +clrChannelFrameBg = FFFFCC99 +clrChannelSymbolOn = FF000000 +clrChannelSymbolOff = FFCCA37A +clrChannelSymbolRecFg = FFFFFFFF +clrChannelSymbolRecBg = FFCC6666 +clrMenuFrameFg = FF000000 +clrMenuFrameBg = FFF1DF6F +clrMenuTitle = FFF1DF6F +clrMenuMainBracket = FFFFBC57 +clrMenuTimerRecording = FFF1B1AF +clrMenuDeviceRecording = FF99CCFF +clrMenuItemCurrentFg = FF000000 +clrMenuItemCurrentBg = FFFFBC57 +clrMenuItemSelectable = FFFFBC57 +clrMenuItemNonSelectable = FF99CCFF +clrMenuScrollbarTotal = FFFFBC57 +clrMenuScrollbarShown = FFCC99CC +clrMenuScrollbarArrow = FF000000 +clrMenuText = FF99CCFF +clrReplayFrameFg = FF000000 +clrReplayFrameBg = FFCC6666 +clrReplayPosition = FFCC99CC +clrReplayJumpFg = FF000000 +clrReplayJumpBg = FFCC99CC +clrReplayProgressSeen = FFCC99CC +clrReplayProgressRest = FFCCCCCC +clrReplayProgressSelected = FF990000 +clrReplayProgressMark = FF000000 +clrReplayProgressCurrent = FF990000 +clrTrackFrameFg = FF000000 +clrTrackFrameBg = FFFFCC66 +clrTrackItemFg = FF000000 +clrTrackItemBg = FFFFE6B3 +clrTrackItemCurrentFg = FF000000 +clrTrackItemCurrentBg = FFFFCC66 diff --git a/themes/lcarsng-meins.theme b/themes/lcarsng-meins.theme new file mode 100644 index 0000000..88de19c --- /dev/null +++ b/themes/lcarsng-meins.theme @@ -0,0 +1,75 @@ +Description = meins +clrBackground = 90000000 +clrDateFg = FFFFA060 +clrDateBg = FF990000 +clrTimerFg = FF000000 +clrTimerBg = FF99CCFF +clrDeviceFg = FF000000 +clrDeviceBg = FFF1B1AF +clrSignalValue = FFA0FF99 +clrSignalRest = FFCC6666 +clrSeen = FFCC99CC +clrTrackName = FFFFCC66 +clrAlertFg = FFFFFFFF +clrAlertBg = FFFF0000 +clrChannelName = FF99CCFF +clrEventTitle = FF99CCFF +clrEventTime = FFFFCC66 +clrEventShortText = FFFFCC66 +clrEventDescription = FF99CCFF +clrButtonRedFg = FF000000 +clrButtonRedBg = FFCC6666 +clrButtonGreenFg = FF000000 +clrButtonGreenBg = FFA0FF99 +clrButtonYellowFg = FF000000 +clrButtonYellowBg = FFF1DF60 +clrButtonBlueFg = FF000000 +clrButtonBlueBg = FF9A99FF +clrMessageStatusFg = FFFFFFFF +clrMessageStatusBg = FF9A99FF +clrMessageInfoFg = FF000000 +clrMessageInfoBg = FFA0FF99 +clrMessageWarningFg = FF000000 +clrMessageWarningBg = FFF1DF60 +clrMessageErrorFg = FFFFFFFF +clrMessageErrorBg = FFCC6666 +clrVolumeFrame = FFF1DF6F +clrVolumeSymbol = FF000000 +clrVolumeBarUpper = FFC1B259 +clrVolumeBarLower = FFA0FF99 +clrChannelFrameFg = FFFFA060 +clrChannelFrameBg = FF306040 +clrChannelSymbolOn = FFFFA060 +clrChannelSymbolOff = FF000000 +clrChannelSymbolRecFg = FFFFFFFF +clrChannelSymbolRecBg = FFCC6666 +clrMenuFrameFg = FFFFA060 +clrMenuFrameBg = FF604040 +clrMenuTitle = FFF1DF6F +clrMenuMainBracket = FFFFA060 +clrMenuTimerRecording = FFF1B1AF +clrMenuDeviceRecording = FF99CCFF +clrMenuItemCurrentFg = FF000000 +clrMenuItemCurrentBg = FFFFA060 +clrMenuItemSelectable = FFFFA060 +clrMenuItemNonSelectable = FF99CCFF +clrMenuScrollbarTotal = FFFFA060 +clrMenuScrollbarShown = FFCC99CC +clrMenuScrollbarArrow = FF000000 +clrMenuText = FF99CCFF +clrReplayFrameFg = FFFFA060 +clrReplayFrameBg = FF804030 +clrReplayPosition = FFCC99CC +clrReplayJumpFg = FF000000 +clrReplayJumpBg = FFCC99CC +clrReplayProgressSeen = FFCC99CC +clrReplayProgressRest = FFCCCCCC +clrReplayProgressSelected = FF990000 +clrReplayProgressMark = FF000000 +clrReplayProgressCurrent = FF990000 +clrTrackFrameFg = FF000000 +clrTrackFrameBg = FFFFCC66 +clrTrackItemFg = FF000000 +clrTrackItemBg = FFFFE6B3 +clrTrackItemCurrentFg = FF000000 +clrTrackItemCurrentBg = FFFFCC66 |