diff --git a/loopy/CMakeLists.txt b/loopy/CMakeLists.txt new file mode 100644 index 00000000..7ffd0887 --- /dev/null +++ b/loopy/CMakeLists.txt @@ -0,0 +1,18 @@ +project(loopy) + +CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0) +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules") + +find_package(KDE4 REQUIRED) + +include (MacroLibrary) +include (KDE4Defaults) + +find_package(MSGFMT REQUIRED) + +include_directories(${KDE4_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR}) + +add_subdirectory(themes) +add_subdirectory(desktop) +add_subdirectory(src) +macro_optional_add_subdirectory(po) diff --git a/loopy/INSTALL b/loopy/INSTALL new file mode 100644 index 00000000..d3c22602 --- /dev/null +++ b/loopy/INSTALL @@ -0,0 +1,9 @@ +---------------- +Installing loopy +---------------- + +mkdir build +cd build +cmake -DCMAKE_INSTALL_PREFIX=/usr .. +make +make install \ No newline at end of file diff --git a/loopy/Messages.sh b/loopy/Messages.sh new file mode 100755 index 00000000..639fe09e --- /dev/null +++ b/loopy/Messages.sh @@ -0,0 +1,42 @@ +#!/bin/sh +BASEDIR="`pwd`" # root of translatable sources + +PROJECT="loopy" # project name +BUGADDR="http://bugs.kde.org" # MSGID-Bugs +WDIR="`pwd`/po" # working dir + +echo "Preparing rc files" +cd ${BASEDIR} +# we use simple sorting to make sure the lines do not jump around too much from system to system +find . -name '*.rc' -o -name '*.ui' -o -name '*.kcfg' | sort > ${WDIR}/rcfiles.list +xargs --arg-file=${WDIR}/rcfiles.list extractrc > ${WDIR}/rc.cpp +# additional string for KAboutData +echo 'i18nc("NAME OF TRANSLATORS","Your names");' >> ${WDIR}/rc.cpp +echo 'i18nc("EMAIL OF TRANSLATORS","Your emails");' >> ${WDIR}/rc.cpp +cd ${WDIR} +echo "Done preparing rc files" +echo "Extracting messages" +cd ${BASEDIR} +# see above on sorting +find . -name '*.cpp' -o -name '*.h' -o -name '*.c' | sort > ${WDIR}/infiles.list +echo "rc.cpp" >> ${WDIR}/infiles.list +cd ${WDIR} +xgettext --from-code=UTF-8 -C -kde -ci18n -ki18n:1 -ki18nc:1c,2 -ki18np:1,2 -ki18ncp:1c,2,3 -ktr2i18n:1 \ +-kI18N_NOOP:1 -kI18N_NOOP2:1c,2 -kaliasLocale -kki18n:1 -kki18nc:1c,2 -kki18np:1,2 -kki18ncp:1c,2,3 \ +--msgid-bugs-address="${BUGADDR}" \ +--files-from=infiles.list -D ${BASEDIR} -D ${WDIR} -o ${PROJECT}.pot || { echo "error while calling xgettext. aborting."; exit 1; } +echo "Done extracting messages" +echo "Merging translations" +catalogs=`find . -name '*.po'` +for cat in $catalogs; do +echo $cat +msgmerge -o $cat.new $cat ${PROJECT}.pot +mv $cat.new $cat +done +echo "Done merging translations" +echo "Cleaning up" +cd ${WDIR} +rm rcfiles.list +rm infiles.list +rm rc.cpp +echo "Done" diff --git a/loopy/THEMING b/loopy/THEMING new file mode 100644 index 00000000..dbd490fb --- /dev/null +++ b/loopy/THEMING @@ -0,0 +1,24 @@ +------------- +Theming loopy +------------- + +If you want to create a new theme: + +- goto ~/.kde/share/apps/loopy + +- if the folder loopy doesn't exists create it + (or change the toolbar layout and you will get this loopy folder) + +- copy the theme folder from the source package there + (~/.kde/share/apps/loopy/themes) + +- open this themes folder and rename a contained folder + (~/.kde/share/apps/loopy/themes/blackglass-overkill) + +- edit the contained style.qss + +- open loopy preferences and load your style + +NEW: loopy >= 0.5.2 + +- add the reload theme button to the toolbar, and you will see your changes on the fly \ No newline at end of file diff --git a/loopy/cmake/modules/FindMSGFMT.cmake b/loopy/cmake/modules/FindMSGFMT.cmake new file mode 100644 index 00000000..154ec718 --- /dev/null +++ b/loopy/cmake/modules/FindMSGFMT.cmake @@ -0,0 +1,57 @@ +# This file is Copyright 2006-2008 +# Pedro Lopez-Cabanillas +# +# Other copyrights also apply to some parts of this work. Please +# see the AUTHORS file and individual file headers for details. +# +# 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 included with this distribution for more information. + +# Find the msgfmt program +# +# Defined variables: +# MSGFMT_FOUND +# MSGFMT_EXECUTABLE +# +# Macro: +# ADD_TRANSLATIONS +# + +IF(MSGFMT_EXECUTABLE) + SET(MSGFMT_FOUND TRUE) +ELSE(MSGFMT_EXECUTABLE) + FIND_PROGRAM(MSGFMT_EXECUTABLE + NAMES msgfmt gmsgfmt + PATHS /bin /usr/bin /usr/local/bin ) + IF(MSGFMT_EXECUTABLE) + SET(MSGFMT_FOUND TRUE) + ELSE(MSGFMT_EXECUTABLE) + IF(NOT MSGFMT_FIND_QUIETLY) + IF(MSGFMT_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "msgfmt program couldn't be found") + ENDIF(MSGFMT_FIND_REQUIRED) + ENDIF(NOT MSGFMT_FIND_QUIETLY) + ENDIF(MSGFMT_EXECUTABLE) + MARK_AS_ADVANCED(MSGFMT_EXECUTABLE) +ENDIF (MSGFMT_EXECUTABLE) + +MACRO(ADD_TRANSLATIONS _baseName) + SET(_outputs) + FOREACH(_file ${ARGN}) + GET_FILENAME_COMPONENT(_file_we ${_file} NAME_WE) + SET(_out "${CMAKE_CURRENT_BINARY_DIR}/${_file_we}.gmo") + SET(_in "${CMAKE_CURRENT_SOURCE_DIR}/${_file_we}.po") + ADD_CUSTOM_COMMAND( + OUTPUT ${_out} + COMMAND ${MSGFMT_EXECUTABLE} -o ${_out} ${_in} + DEPENDS ${_in} ) + INSTALL(FILES ${_out} + DESTINATION ${LOCALE_INSTALL_DIR}/${_file_we}/LC_MESSAGES/ + RENAME ${_baseName}.mo ) + SET(_outputs ${_outputs} ${_out}) + ENDFOREACH(_file) + ADD_CUSTOM_TARGET(translations ALL DEPENDS ${_outputs}) +ENDMACRO(ADD_TRANSLATIONS) diff --git a/loopy/desktop/CMakeLists.txt b/loopy/desktop/CMakeLists.txt new file mode 100644 index 00000000..52d85723 --- /dev/null +++ b/loopy/desktop/CMakeLists.txt @@ -0,0 +1,4 @@ + +install(FILES loopy.desktop DESTINATION ${XDG_APPS_INSTALL_DIR}) +install(FILES loopy_enqueue.desktop DESTINATION ${XDG_APPS_INSTALL_DIR}) +install(FILES loopy_play_dvd.desktop DESTINATION ${DATA_INSTALL_DIR}/solid/actions) \ No newline at end of file diff --git a/loopy/desktop/loopy.desktop b/loopy/desktop/loopy.desktop new file mode 100755 index 00000000..1ab5ab85 --- /dev/null +++ b/loopy/desktop/loopy.desktop @@ -0,0 +1,125 @@ +[Desktop Entry] +Type=Application +Exec=loopy -- %U +Icon=applications-multimedia +X-DocPath= +Comment=Media Player +Comment[be]=Медыяпрайгравальнік +Comment[bg]=Медия плеър +Comment[cs]=PÅ™ehrávač médií +Comment[csb]=Mùltimedialny grôcz +Comment[da]=Medieafspiller +Comment[de]=Medienwiedergabe +Comment[el]=Αναπαραγωγέας μέσων +Comment[en_GB]=Media Player +Comment[es]=Reproductor multimedia +Comment[et]=Meediafailide mängija +Comment[fr]=Lecteur multimédia +Comment[ga]=Seinnteoir Meán +Comment[gl]=Reprodutor multimedia +Comment[hi]=मीडिया-प्लेयर +Comment[hne]=मीडिया-प्लेयर +Comment[hu]=Médialejátszó +Comment[it]=Lettore multimediale +Comment[ja]=メディアプレーヤー +Comment[km]=កម្មវិធី​ចាក់​មេឌៀ +Comment[ko]=미디어 재생기 +Comment[ku]=Medya Lêdar +Comment[lv]=Mediju atskaņotājs +Comment[nb]=Mediespiller +Comment[nds]=Medienspeler +Comment[nl]=Mediaspeler +Comment[oc]=Media Player +Comment[pa]=ਮੀਡਿਆ ਪਲੇਅਰ +Comment[pl]=Odtwarzacz multimedialny +Comment[pt]=Leitor Multimédia +Comment[pt_BR]=Reprodutor de mídia +Comment[ro]=Media Player +Comment[ru]=Медиаплеер +Comment[sv]=Mediaspelare +Comment[th]=โปรแกรมเล่นสื่อ +Comment[tr]=Çokluortam Oynatıcı +Comment[uk]=Програвач +Comment[x-test]=xxMedia Playerxx +Comment[zh_CN]=媒体播放器 +Comment[zh_TW]=媒體播放器 +Terminal=false +Name=Loopy +Name[be]=Loopy +Name[bg]=Loopy +Name[cs]=Loopy +Name[csb]=Loopy +Name[da]=Loopy +Name[de]=Loopy +Name[el]=Loopy +Name[en_GB]=Loopy +Name[eo]=Loopy +Name[es]=Loopy +Name[et]=Loopy +Name[fr]=Loopy +Name[ga]=Loopy +Name[gl]=Loopy +Name[it]=Loopy +Name[ja]=Loopy +Name[km]=Loopy +Name[ko]=Loopy +Name[lt]=Loopy +Name[lv]=Loopy +Name[nb]=Loopy +Name[nds]=Loopy +Name[nl]=Loopy +Name[oc]=Loopy +Name[pl]=Loopy +Name[pt]=Loopy +Name[pt_BR]=Loopy +Name[ro]=Loopy +Name[ru]=Loopy +Name[sv]=Loopy +Name[th]=Loopy +Name[tr]=Loopy +Name[uk]=Loopy +Name[x-test]=xxLoopyxx +Name[zh_CN]=Loopy +GenericName=Media Player +GenericName[be]=Медыяпрайгравальнік +GenericName[bg]=Медия плеър +GenericName[cs]=PÅ™ehrávač médií +GenericName[csb]=Mùltimedialny grôcz +GenericName[da]=Medieafspiller +GenericName[de]=Medienwiedergabe +GenericName[el]=Αναπαραγωγή πολυμέσων +GenericName[en_GB]=Media Player +GenericName[es]=Reproductor multimedia +GenericName[et]=Meediafailide mängija +GenericName[fr]=Lecteur multimédia +GenericName[ga]=Seinnteoir Meán +GenericName[gl]=Reprodutor multimedia +GenericName[hi]=मीडिया-प्लेयर +GenericName[hne]=मीडिया-प्लेयर +GenericName[hu]=Multimédia lejátszó +GenericName[it]=Lettore multimediale +GenericName[ja]=メディアプレーヤー +GenericName[km]=កម្មវិធី​ចាក់​មេឌៀ +GenericName[ko]=미디어 재생기 +GenericName[ku]=Medya Lêdar +GenericName[lv]=Mediju atskaņotājs +GenericName[nb]=Mediespiller +GenericName[nds]=Medienspeler +GenericName[nl]=Mediaspeler +GenericName[oc]=Media Player +GenericName[pa]=ਮੀਡਿਆ ਪਲੇਅਰ +GenericName[pl]=Odtwarzacz multimedialny +GenericName[pt]=Leitor Multimédia +GenericName[pt_BR]=Reprodutor de mídia +GenericName[ro]=Media Player +GenericName[ru]=Медиаплеер +GenericName[sv]=Mediaspelare +GenericName[th]=โปรแกรมเล่นสื่อ +GenericName[tr]=Çokluortam Oynatıcı +GenericName[uk]=Програвач +GenericName[x-test]=xxMedia Playerxx +GenericName[zh_CN]=媒体播放器 +MimeType=application/ogg;application/ram;application/vnd.rn-realmedia;application/x-quicktime-media-link;video/ogg;video/x-theora+ogg;video/x-ogm+ogg;video/x-ms-wmv;video/x-msvideo;video/x-ms-asf;video/x-matroska;video/mpeg;video/avi;video/quicktime;video/vnd.rn-realvideo;video/x-flic;video/mp4;video/divx;video/x-msvideo;video/x-wmv;video/x-flv;video/flv; +Categories=AudioVideo;Player;Qt;KDE; +X-KDE-StartupNotify=false +X-DBUS-StartupType=Unique diff --git a/loopy/desktop/loopy_enqueue.desktop b/loopy/desktop/loopy_enqueue.desktop new file mode 100644 index 00000000..6d829f59 --- /dev/null +++ b/loopy/desktop/loopy_enqueue.desktop @@ -0,0 +1,14 @@ +[Desktop Entry] +Type=Application +Exec=loopy --add %U +Icon=applications-multimedia +X-DocPath= +Comment=Media Player +Terminal=false +Name=Enqueue in Loopy +Name[hu]=A Loopy-listába felveszi +MimeType=application/ogg;application/ram;application/vnd.rn-realmedia;application/x-quicktime-media-link;video/ogg;video/x-theora+ogg;video/x-ogm+ogg;video/x-ms-wmv;video/x-msvideo;video/x-ms-asf;video/x-matroska;video/mpeg;video/avi;video/quicktime;video/vnd.rn-realvideo;video/x-flic;video/mp4;video/divx;video/x-msvideo;video/x-wmv;video/x-flv;video/flv; +Categories=AudioVideo;Player;Qt;KDE; +X-KDE-StartupNotify=false +X-DBUS-StartupType=Unique +NoDisplay=true diff --git a/loopy/desktop/loopy_play_dvd.desktop b/loopy/desktop/loopy_play_dvd.desktop new file mode 100644 index 00000000..237eb481 --- /dev/null +++ b/loopy/desktop/loopy_play_dvd.desktop @@ -0,0 +1,47 @@ +[Desktop Entry] +Type=Service +Actions=PlayDVD; +X-KDE-Solid-Predicate=OpticalDisc.availableContent & 'VideoDvd' + +[Desktop Action PlayDVD] +Name=Play DVD with Loopy +Name[bg]=Възпроизвеждане на DVD с Loopy +Name[ca]=Reprodueix DVD amb Loopy +Name[ca@valencia]=Reprodueix DVD amb Loopy +Name[cs]=Přehrát DVD v Loopy +Name[csb]=Grôj DVD w Loopy +Name[da]=Afspil dvd med Loopy +Name[de]=DVD mit Loopy abspielen +Name[el]=Αναπαραγωγή DVD με το Loopy +Name[en_GB]=Play DVD with Loopy +Name[es]=Reproducir DVD con Loopy +Name[et]=Esita DVD Loopy'is +Name[fi]=Toista dvd-levy Loopyssa +Name[fr]=Lire un DVD avec Loopy +Name[ga]=Seinn DVD le Loopy +Name[gl]=Reproducir o DVD con Loopy +Name[hu]=DVD lejátszása a Loopy-vel +Name[it]=Riproduci DVD con Loopy +Name[km]=ចាក់​ឌីវីឌី​ជាមួយ Loopy +Name[ko]=Loopy으로 DVD 재생하기 +Name[lt]=Groti DVD su Loopy +Name[lv]=Atskaņot DVD ar Loopy +Name[nb]=Spill av DVD med Loopy +Name[nds]=DVD mit Loopy afspelen +Name[ne]=क्याफिनसँग डीभीडी प्ले गर्नुहोस् +Name[nl]=DVD met Loopy afspelen +Name[pa]=ਕੈਫ਼ੀਨ ਨਾਲ DVD ਚਲਾਓ +Name[pl]=Odtwarzaj DVD w Loopy +Name[pt]=Ver o DVD com o Loopy +Name[pt_BR]=Reproduzir DVD com o Loopy +Name[ro]=Redare DVD cu Loopy +Name[ru]=Воспроизвести DVD в Loopy +Name[sv]=Spela dvd med Loopy +Name[tg]=Намоиши DVD бо Loopy +Name[tr]=DVD'yi Loopy ile Oynat +Name[uk]=Відтворити DVD за допомогою Loopy +Name[x-test]=xxPlay DVD with Loopyxx +Name[zh_CN]=用 Loopy 播放 DVD +Name[zh_TW]=用 Loopy 播放 DVD +Exec=loopy --dvd %f +Icon=applications-multimedia diff --git a/loopy/po/CMakeLists.txt b/loopy/po/CMakeLists.txt new file mode 100644 index 00000000..6d7e6a3d --- /dev/null +++ b/loopy/po/CMakeLists.txt @@ -0,0 +1,3 @@ +FILE(GLOB_RECURSE PO_FILES *.po) +add_translations(loopy ${PO_FILES}) + diff --git a/loopy/po/cs.po b/loopy/po/cs.po new file mode 100644 index 00000000..342aef06 --- /dev/null +++ b/loopy/po/cs.po @@ -0,0 +1,388 @@ +# Copyright (C) 2010 monstermagnet@rocketmail.com +# This file is distributed under the same license as the PACKAGE package. +# Pavel, 2010. +msgid "" +msgstr "" +"Project-Id-Version: loopy\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-04-09 14:23+0200\n" +"PO-Revision-Date: 2010-03-20 19:18+0100\n" +"Last-Translator: \n" +"Language-Team: Czech \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. i18n: file: src/generaloptions.ui:17 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TrayIcon) +#. i18n: file: src/loopy.kcfg:32 +#. i18n: ectx: label, entry (TrayIcon), group (General) +#. i18n: file: src/generaloptions.ui:17 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TrayIcon) +#. i18n: file: src/loopy.kcfg:32 +#. i18n: ectx: label, entry (TrayIcon), group (General) +#: po/rc.cpp:3 po/rc.cpp:27 rc.cpp:3 rc.cpp:27 +msgid "Show tray icon" +msgstr "Ukázat ikonu v oznamovací oblasti" + +#. i18n: file: src/generaloptions.ui:24 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HidePlaylist) +#: po/rc.cpp:6 rc.cpp:6 +msgid "Always hide playlist on startup" +msgstr "Při spuštění vždy skrýt seznam přehrávaných skladeb" + +#. i18n: file: src/generaloptions.ui:31 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoResizeToVideo) +#. i18n: file: src/loopy.kcfg:40 +#. i18n: ectx: label, entry (AutoResizeToVideo), group (General) +#. i18n: file: src/generaloptions.ui:31 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoResizeToVideo) +#. i18n: file: src/loopy.kcfg:40 +#. i18n: ectx: label, entry (AutoResizeToVideo), group (General) +#: po/rc.cpp:9 po/rc.cpp:33 rc.cpp:9 rc.cpp:33 +msgid "Autoresize to videosize" +msgstr "Automatická změna velikosti na velikost videa" + +#. i18n: file: src/generaloptions.ui:38 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AlwaysEnqueue) +#. i18n: file: src/loopy.kcfg:44 +#. i18n: ectx: label, entry (AlwaysEnqueue), group (General) +#. i18n: file: src/generaloptions.ui:38 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AlwaysEnqueue) +#. i18n: file: src/loopy.kcfg:44 +#. i18n: ectx: label, entry (AlwaysEnqueue), group (General) +#: po/rc.cpp:12 po/rc.cpp:36 rc.cpp:12 rc.cpp:36 +msgid "Always enqueue files" +msgstr "Soubory zařadit vždy do fronty" + +#. i18n: file: src/loopy.kcfg:10 +#. i18n: ectx: label, entry (ButtonSeek), group (SeekingOptions) +#: po/rc.cpp:15 rc.cpp:15 +msgid "Button seek" +msgstr "Hledání pomocí tlačítka" + +#. i18n: file: src/loopy.kcfg:14 +#. i18n: ectx: label, entry (ButtonJump), group (SeekingOptions) +#: po/rc.cpp:18 rc.cpp:18 +msgid "Button jump" +msgstr "Skok pomocí tlačítka" + +#. i18n: file: src/loopy.kcfg:18 +#. i18n: ectx: label, entry (MouseWheelSeek), group (SeekingOptions) +#: po/rc.cpp:21 rc.cpp:21 +msgid "Mousewheel seek" +msgstr "Hledání pomocí kolečka myši" + +#. i18n: file: src/loopy.kcfg:25 +#. i18n: ectx: label, entry (Theme), group (Theme) +#: po/rc.cpp:24 src/options.cpp:57 rc.cpp:24 +msgid "Theme" +msgstr "Námět" + +#. i18n: file: src/loopy.kcfg:36 +#. i18n: ectx: label, entry (HidePlaylist), group (General) +#: po/rc.cpp:30 rc.cpp:30 +msgid "Hide Playlist on startup" +msgstr "Při spuštění skrýt seznam přehrávaných skladeb" + +#. i18n: file: src/loopyui.rc:6 +#. i18n: ectx: Menu (file) +#: po/rc.cpp:39 rc.cpp:39 +msgid "&File" +msgstr "&Soubor" + +#. i18n: file: src/loopyui.rc:16 +#. i18n: ectx: Menu (play) +#: po/rc.cpp:42 rc.cpp:42 +msgid "&Play" +msgstr "&Hraní" + +#. i18n: file: src/loopyui.rc:29 +#. i18n: ectx: Menu (video) +#: po/rc.cpp:45 rc.cpp:45 +msgid "&Video" +msgstr "&Obraz" + +#. i18n: file: src/loopyui.rc:31 +#. i18n: ectx: Menu (aspectmenu) +#: po/rc.cpp:48 rc.cpp:48 +msgid "&Aspect ratio" +msgstr "&Poměr stran" + +#. i18n: file: src/loopyui.rc:38 +#. i18n: ectx: Menu (scalemenu) +#: po/rc.cpp:51 rc.cpp:51 +msgid "&Scale mode" +msgstr "&Režim měřítka" + +#. i18n: file: src/loopyui.rc:43 +#. i18n: ectx: Menu (titlemenu) +#: po/rc.cpp:54 rc.cpp:54 +msgid "&Title" +msgstr "&Název" + +#. i18n: file: src/loopyui.rc:46 +#. i18n: ectx: Menu (chaptermenu) +#: po/rc.cpp:57 rc.cpp:57 +msgid "&Chapter" +msgstr "&Kapitola" + +#. i18n: file: src/loopyui.rc:49 +#. i18n: ectx: Menu (anglemenu) +#: po/rc.cpp:60 rc.cpp:60 +msgid "&Angle" +msgstr "&Úhel kamery" + +#. i18n: file: src/loopyui.rc:56 +#. i18n: ectx: Menu (audio) +#: po/rc.cpp:63 rc.cpp:63 +msgid "&Audio" +msgstr "&Zvuk" + +#. i18n: file: src/loopyui.rc:69 +#. i18n: ectx: ToolBar (mainToolBar) +#: po/rc.cpp:66 rc.cpp:66 +msgid "Main Toolbar" +msgstr "Hlavní nástrojový pruh" + +#. i18n: file: src/seekingoptions.ui:17 +#. i18n: ectx: property (title), widget (QGroupBox, seekingGroup) +#: po/rc.cpp:69 rc.cpp:69 +msgid "Seeking values in seconds " +msgstr "Hodnoty hledání v sekundách" + +#. i18n: file: src/seekingoptions.ui:23 +#. i18n: ectx: property (text), widget (QLabel, buttonSeekLabel) +#: po/rc.cpp:72 rc.cpp:72 +msgid "Button seek value" +msgstr "Hodnota hledání pro tlačítko" + +#. i18n: file: src/seekingoptions.ui:40 +#. i18n: ectx: property (text), widget (QLabel, buttonJumpLabel) +#: po/rc.cpp:75 rc.cpp:75 +msgid "Button jump value" +msgstr "Hodnota skoku pro tlačítko" + +#. i18n: file: src/seekingoptions.ui:60 +#. i18n: ectx: property (text), widget (QLabel, mouseWheelSeekLabel) +#: po/rc.cpp:78 rc.cpp:78 +msgid "Mousewheel seek value" +msgstr "Hodnota hledání pro kolečko myši" + +#. i18n: file: src/themeoptions.ui:17 +#. i18n: ectx: property (title), widget (QGroupBox, ThemeActionGroup) +#: po/rc.cpp:81 rc.cpp:81 +msgid "Choose a theme" +msgstr "Vybrat námět" + +#: po/rc.cpp:82 rc.cpp:82 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Pavel Fric" + +#: po/rc.cpp:83 rc.cpp:83 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "pavelfric@seznam.cz" + +#: src/main.cpp:43 +msgid "Loopy" +msgstr "Loopy" + +#: src/main.cpp:44 +#, fuzzy +msgid "Slim, themeable video player, based on the KDE phonon libraries." +msgstr "Jednoduchý přehrávač videa, založený na knihovnách Phonon" + +#: src/main.cpp:46 +msgid "Copyright (c) 2010 MonsterMagnet" +msgstr "Copyright (c) 2010 MonsterMagnet" + +#: src/main.cpp:49 +msgid "MonsterMagnet" +msgstr "MonsterMagnet" + +#: src/main.cpp:49 +msgid "Original Developer/Maintainer" +msgstr "Původní vývojář/údržbář" + +#: src/main.cpp:50 +msgid "The Kaffeine Developers" +msgstr "Vývojáři programu Kaffeine" + +#: src/main.cpp:50 +msgid "Single instance, DVD support and a lot more" +msgstr "Jediná úroveň, podpora pro DVD a mnoho dalšího" + +#: src/main.cpp:51 +msgid "The Gwenview Developers" +msgstr "Vývojáři programu Gwenview" + +#: src/main.cpp:51 +msgid "Fullscreenbar and qss stylesheet" +msgstr "Pruh pro obrázek na celou obrazovku a stylový list qss" + +#: src/mainwindow.cpp:125 src/mainwindow.cpp:529 +msgid "Open URL" +msgstr "Otevřít adresu (URL)" + +#: src/mainwindow.cpp:134 src/mainwindow.cpp:435 +msgid "Play DVD" +msgstr "Přehrát DVD" + +#: src/mainwindow.cpp:143 src/mainwindow.cpp:985 src/mainwindow.cpp:992 +msgid "Play" +msgstr "Přehrát" + +#: src/mainwindow.cpp:150 +msgid "Seek Forward" +msgstr "Hledat dopředu" + +#: src/mainwindow.cpp:157 +msgid "Jump Forward" +msgstr "Skočit dopředu" + +#: src/mainwindow.cpp:164 +msgid "Seek Backward" +msgstr "Hledat dozadu" + +#: src/mainwindow.cpp:171 +msgid "Jump Backward" +msgstr "Skočit dozadu" + +#: src/mainwindow.cpp:178 src/playlistdock.cpp:71 +msgid "Playlist Skip Forward" +msgstr "Skočit v seznamu skladeb dopředu" + +#: src/mainwindow.cpp:185 src/playlistdock.cpp:76 +msgid "Playlist Skip Backward" +msgstr "Skočit v seznamu skladeb dozadu" + +#: src/mainwindow.cpp:192 +msgid "Repeat" +msgstr "Opakovat" + +#: src/mainwindow.cpp:204 +msgid "Auto" +msgstr "Automaticky" + +#: src/mainwindow.cpp:210 +msgid "Scale" +msgstr "Změnit měřítko" + +#: src/mainwindow.cpp:215 +msgid "16/9" +msgstr "16/9" + +#: src/mainwindow.cpp:220 +msgid "4/3" +msgstr "4/3" + +#: src/mainwindow.cpp:229 +msgid "Fit in view" +msgstr "Přizpůsobit pohled" + +#: src/mainwindow.cpp:235 +msgid "Scale and crop" +msgstr "Změnit měřítko a oříznout" + +#: src/mainwindow.cpp:263 src/mainwindow.cpp:896 +msgid "Mute" +msgstr "Ztlumit" + +#: src/mainwindow.cpp:270 +msgid "Increase Volume" +msgstr "Zvýšit hlasitost" + +#: src/mainwindow.cpp:276 +msgid "Decrease Volume" +msgstr "Snížit hlasitost" + +#: src/mainwindow.cpp:283 src/playlistdock.cpp:16 +msgid "Playlist" +msgstr "Seznam skladeb" + +#: src/mainwindow.cpp:289 +msgid "Minimal View" +msgstr "Velmi malý pohled" + +#: src/mainwindow.cpp:312 +msgid "Volume slider" +msgstr "Posuvník hlasitosti" + +#: src/mainwindow.cpp:319 +msgid "Position slider" +msgstr "Posuvník polohy" + +#: src/mainwindow.cpp:323 +msgid "Reload Theme (for theme development)" +msgstr "" + +#: src/mainwindow.cpp:436 +msgid "Add Files or URLs to playlist" +msgstr "Přidat soubory nebo adresy (URL) do seznamu skladeb" + +#: src/mainwindow.cpp:437 +msgid "Open Files or URLs to play" +msgstr "Otevřít soubory nebo adresy (URL) pro přehrání" + +#: src/mainwindow.cpp:495 +msgid "Select file(s) to play" +msgstr "Vybrat soubory pro přehrání" + +#: src/mainwindow.cpp:520 +msgid "Add file(s) to playlist" +msgstr "Přidat soubory do seznamu skladeb" + +#: src/mainwindow.cpp:529 +msgid "Enter a URL:" +msgstr "Zadat adresu (URL)" + +#: src/mainwindow.cpp:671 +msgid "You get back to normal view with the F3 key." +msgstr "" + +#: src/mainwindow.cpp:892 +msgid "Unmute" +msgstr "Zrušit ztlumení" + +#: src/mainwindow.cpp:971 +msgid "Pause" +msgstr "Pozastavit" + +#: src/options.cpp:49 src/options.cpp:81 +msgid "no theme" +msgstr "Žádný námět" + +#: src/options.cpp:56 +msgid "General" +msgstr "Obecné" + +#: src/options.cpp:58 +msgid "Seeking" +msgstr "Hledání" + +#: src/playlistdock.cpp:46 +msgid "Clear playlist" +msgstr "Smazat seznam skladeb" + +#: src/playlistdock.cpp:51 +msgid "Add file(s)" +msgstr "Přidat soubor(y)" + +#: src/playlistdock.cpp:56 +msgid "Clear selected" +msgstr "Smazat vybrané" + +#: src/playlistdock.cpp:61 +msgid "Move up" +msgstr "Posunout nahoru" + +#: src/playlistdock.cpp:66 +msgid "Move down" +msgstr "Posunout dolů" + +#~ msgid "Show Playlist" +#~ msgstr "Ukázat seznam skladeb" diff --git a/loopy/po/de.po b/loopy/po/de.po new file mode 100644 index 00000000..a417baa9 --- /dev/null +++ b/loopy/po/de.po @@ -0,0 +1,386 @@ +# Copyright (C) 2010 monstermagnet@rocketmail.com +# This file is distributed under the same license as the PACKAGE package. +msgid "" +msgstr "" +"Project-Id-Version: loopy\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-04-09 14:23+0200\n" +"PO-Revision-Date: 2010-02-16 16:23+0100\n" +"Last-Translator: MonsterMagnet \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. i18n: file: src/generaloptions.ui:17 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TrayIcon) +#. i18n: file: src/loopy.kcfg:32 +#. i18n: ectx: label, entry (TrayIcon), group (General) +#. i18n: file: src/generaloptions.ui:17 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TrayIcon) +#. i18n: file: src/loopy.kcfg:32 +#. i18n: ectx: label, entry (TrayIcon), group (General) +#: po/rc.cpp:3 po/rc.cpp:27 rc.cpp:3 rc.cpp:27 +msgid "Show tray icon" +msgstr "Zeige Infobereich Icon" + +#. i18n: file: src/generaloptions.ui:24 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HidePlaylist) +#: po/rc.cpp:6 rc.cpp:6 +msgid "Always hide playlist on startup" +msgstr "Verstecke die Abspielliste beim Start" + +#. i18n: file: src/generaloptions.ui:31 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoResizeToVideo) +#. i18n: file: src/loopy.kcfg:40 +#. i18n: ectx: label, entry (AutoResizeToVideo), group (General) +#. i18n: file: src/generaloptions.ui:31 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoResizeToVideo) +#. i18n: file: src/loopy.kcfg:40 +#. i18n: ectx: label, entry (AutoResizeToVideo), group (General) +#: po/rc.cpp:9 po/rc.cpp:33 rc.cpp:9 rc.cpp:33 +msgid "Autoresize to videosize" +msgstr "Automatischer Skalierungsmodus" + +#. i18n: file: src/generaloptions.ui:38 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AlwaysEnqueue) +#. i18n: file: src/loopy.kcfg:44 +#. i18n: ectx: label, entry (AlwaysEnqueue), group (General) +#. i18n: file: src/generaloptions.ui:38 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AlwaysEnqueue) +#. i18n: file: src/loopy.kcfg:44 +#. i18n: ectx: label, entry (AlwaysEnqueue), group (General) +#: po/rc.cpp:12 po/rc.cpp:36 rc.cpp:12 rc.cpp:36 +msgid "Always enqueue files" +msgstr "Dateien immer zur Warteschleife hinzufügen" + +#. i18n: file: src/loopy.kcfg:10 +#. i18n: ectx: label, entry (ButtonSeek), group (SeekingOptions) +#: po/rc.cpp:15 rc.cpp:15 +msgid "Button seek" +msgstr "Tasten Suche" + +#. i18n: file: src/loopy.kcfg:14 +#. i18n: ectx: label, entry (ButtonJump), group (SeekingOptions) +#: po/rc.cpp:18 rc.cpp:18 +msgid "Button jump" +msgstr "Tasten Sprung" + +#. i18n: file: src/loopy.kcfg:18 +#. i18n: ectx: label, entry (MouseWheelSeek), group (SeekingOptions) +#: po/rc.cpp:21 rc.cpp:21 +msgid "Mousewheel seek" +msgstr "Mausrad Suche" + +#. i18n: file: src/loopy.kcfg:25 +#. i18n: ectx: label, entry (Theme), group (Theme) +#: po/rc.cpp:24 src/options.cpp:57 rc.cpp:24 +msgid "Theme" +msgstr "Thema" + +#. i18n: file: src/loopy.kcfg:36 +#. i18n: ectx: label, entry (HidePlaylist), group (General) +#: po/rc.cpp:30 rc.cpp:30 +msgid "Hide Playlist on startup" +msgstr "Verstecke die Abspielliste beim Start" + +#. i18n: file: src/loopyui.rc:6 +#. i18n: ectx: Menu (file) +#: po/rc.cpp:39 rc.cpp:39 +msgid "&File" +msgstr "&Datei" + +#. i18n: file: src/loopyui.rc:16 +#. i18n: ectx: Menu (play) +#: po/rc.cpp:42 rc.cpp:42 +msgid "&Play" +msgstr "&Wiedergabe" + +#. i18n: file: src/loopyui.rc:29 +#. i18n: ectx: Menu (video) +#: po/rc.cpp:45 rc.cpp:45 +msgid "&Video" +msgstr "Bild" + +#. i18n: file: src/loopyui.rc:31 +#. i18n: ectx: Menu (aspectmenu) +#: po/rc.cpp:48 rc.cpp:48 +msgid "&Aspect ratio" +msgstr "Seitenverhältnis" + +#. i18n: file: src/loopyui.rc:38 +#. i18n: ectx: Menu (scalemenu) +#: po/rc.cpp:51 rc.cpp:51 +msgid "&Scale mode" +msgstr "Skalierung" + +#. i18n: file: src/loopyui.rc:43 +#. i18n: ectx: Menu (titlemenu) +#: po/rc.cpp:54 rc.cpp:54 +msgid "&Title" +msgstr "&Titel" + +#. i18n: file: src/loopyui.rc:46 +#. i18n: ectx: Menu (chaptermenu) +#: po/rc.cpp:57 rc.cpp:57 +msgid "&Chapter" +msgstr "&Kapitel" + +#. i18n: file: src/loopyui.rc:49 +#. i18n: ectx: Menu (anglemenu) +#: po/rc.cpp:60 rc.cpp:60 +msgid "&Angle" +msgstr "&Kamerawinkel" + +#. i18n: file: src/loopyui.rc:56 +#. i18n: ectx: Menu (audio) +#: po/rc.cpp:63 rc.cpp:63 +msgid "&Audio" +msgstr "&Ton" + +#. i18n: file: src/loopyui.rc:69 +#. i18n: ectx: ToolBar (mainToolBar) +#: po/rc.cpp:66 rc.cpp:66 +msgid "Main Toolbar" +msgstr "Werkzeugleiste" + +#. i18n: file: src/seekingoptions.ui:17 +#. i18n: ectx: property (title), widget (QGroupBox, seekingGroup) +#: po/rc.cpp:69 rc.cpp:69 +msgid "Seeking values in seconds " +msgstr "Suchwerte in Sekunden" + +#. i18n: file: src/seekingoptions.ui:23 +#. i18n: ectx: property (text), widget (QLabel, buttonSeekLabel) +#: po/rc.cpp:72 rc.cpp:72 +msgid "Button seek value" +msgstr "Tasten Suchwert" + +#. i18n: file: src/seekingoptions.ui:40 +#. i18n: ectx: property (text), widget (QLabel, buttonJumpLabel) +#: po/rc.cpp:75 rc.cpp:75 +msgid "Button jump value" +msgstr "Tasten Sprungwert" + +#. i18n: file: src/seekingoptions.ui:60 +#. i18n: ectx: property (text), widget (QLabel, mouseWheelSeekLabel) +#: po/rc.cpp:78 rc.cpp:78 +msgid "Mousewheel seek value" +msgstr "Mausrad Suchwert" + +#. i18n: file: src/themeoptions.ui:17 +#. i18n: ectx: property (title), widget (QGroupBox, ThemeActionGroup) +#: po/rc.cpp:81 rc.cpp:81 +msgid "Choose a theme" +msgstr "Wähle ein Thema" + +#: po/rc.cpp:82 rc.cpp:82 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "MonsterMagnet" + +#: po/rc.cpp:83 rc.cpp:83 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "monstermagnet@rocketmail.com" + +#: src/main.cpp:43 +msgid "Loopy" +msgstr "" + +#: src/main.cpp:44 +msgid "Slim, themeable video player, based on the KDE phonon libraries." +msgstr "Schlanker, gestaltbarer Videoabspieler, basierend auf den KDE Phonon Bibliotheken" + +#: src/main.cpp:46 +msgid "Copyright (c) 2010 MonsterMagnet" +msgstr "" + +#: src/main.cpp:49 +msgid "MonsterMagnet" +msgstr "" + +#: src/main.cpp:49 +msgid "Original Developer/Maintainer" +msgstr "Original Entwickler/Betreuer" + +#: src/main.cpp:50 +msgid "The Kaffeine Developers" +msgstr "Die Kaffeine Entwickler" + +#: src/main.cpp:50 +msgid "Single instance, DVD support and a lot more" +msgstr "Einzige Instanz, DVD Unterstützung und vieles mehr" + +#: src/main.cpp:51 +msgid "The Gwenview Developers" +msgstr "Die Gwenview Entwickler" + +#: src/main.cpp:51 +msgid "Fullscreenbar and qss stylesheet" +msgstr "Vollbildleiste und qss stylesheet" + +#: src/mainwindow.cpp:125 src/mainwindow.cpp:529 +msgid "Open URL" +msgstr "Öffne URL" + +#: src/mainwindow.cpp:134 src/mainwindow.cpp:435 +msgid "Play DVD" +msgstr "DVD abspielen" + +#: src/mainwindow.cpp:143 src/mainwindow.cpp:985 src/mainwindow.cpp:992 +msgid "Play" +msgstr "Wiedergabe" + +#: src/mainwindow.cpp:150 +msgid "Seek Forward" +msgstr "Suche Vorwärts" + +#: src/mainwindow.cpp:157 +msgid "Jump Forward" +msgstr "Springe Vorwärts" + +#: src/mainwindow.cpp:164 +msgid "Seek Backward" +msgstr "Suche Rückwärts" + +#: src/mainwindow.cpp:171 +msgid "Jump Backward" +msgstr "Springe Rückwärts" + +#: src/mainwindow.cpp:178 src/playlistdock.cpp:71 +msgid "Playlist Skip Forward" +msgstr "Abspielliste vorwärts springen" + +#: src/mainwindow.cpp:185 src/playlistdock.cpp:76 +msgid "Playlist Skip Backward" +msgstr "Abspielliste rückwärts springen" + +#: src/mainwindow.cpp:192 +msgid "Repeat" +msgstr "Wiederholen" + +#: src/mainwindow.cpp:204 +msgid "Auto" +msgstr "Automatisch" + +#: src/mainwindow.cpp:210 +msgid "Scale" +msgstr "Skalieren" + +#: src/mainwindow.cpp:215 +msgid "16/9" +msgstr "" + +#: src/mainwindow.cpp:220 +msgid "4/3" +msgstr "" + +#: src/mainwindow.cpp:229 +msgid "Fit in view" +msgstr "Ansicht anpassen" + +#: src/mainwindow.cpp:235 +msgid "Scale and crop" +msgstr "Skalieren und wegschneiden" + +#: src/mainwindow.cpp:263 src/mainwindow.cpp:896 +msgid "Mute" +msgstr "Ton aus" + +#: src/mainwindow.cpp:270 +msgid "Increase Volume" +msgstr "Lautstärke erhöhen" + +#: src/mainwindow.cpp:276 +msgid "Decrease Volume" +msgstr "Lautstärke senken" + +#: src/mainwindow.cpp:283 src/playlistdock.cpp:16 +msgid "Playlist" +msgstr "Abspielliste" + +#: src/mainwindow.cpp:289 +msgid "Minimal View" +msgstr "Minimal Ansicht" + +#: src/mainwindow.cpp:312 +msgid "Volume slider" +msgstr "Lautstärkeschieber" + +#: src/mainwindow.cpp:319 +msgid "Position slider" +msgstr "Positionsschieber" + +#: src/mainwindow.cpp:323 +msgid "Reload Theme (for theme development)" +msgstr "Thema erneut laden (für Themenentwickler)" + +#: src/mainwindow.cpp:436 +msgid "Add Files or URLs to playlist" +msgstr "Dateien oder URLs zur Abspielliste hinzufügen" + +#: src/mainwindow.cpp:437 +msgid "Open Files or URLs to play" +msgstr "Dateien oder URLs zum Abspielen öffnen" + +#: src/mainwindow.cpp:495 +msgid "Select file(s) to play" +msgstr "Dateien zum Abspielen auswählen" + +#: src/mainwindow.cpp:520 +msgid "Add file(s) to playlist" +msgstr "Dateien zur Abspielliste hinzufügen" + +#: src/mainwindow.cpp:529 +msgid "Enter a URL:" +msgstr "Gebe eine URL ein" + +#: src/mainwindow.cpp:671 +msgid "You get back to normal view with the F3 key." +msgstr "Zurück zur normalen Ansicht mit der F3 Taste" + +#: src/mainwindow.cpp:892 +msgid "Unmute" +msgstr "Ton an" + +#: src/mainwindow.cpp:971 +msgid "Pause" +msgstr "" + +#: src/options.cpp:49 src/options.cpp:81 +msgid "no theme" +msgstr "kein Thema" + +#: src/options.cpp:56 +msgid "General" +msgstr "Allgemein" + +#: src/options.cpp:58 +msgid "Seeking" +msgstr "Suche" + +#: src/playlistdock.cpp:46 +msgid "Clear playlist" +msgstr "Abspielliste löschen" + +#: src/playlistdock.cpp:51 +msgid "Add file(s)" +msgstr "Dateien hinzufügen" + +#: src/playlistdock.cpp:56 +msgid "Clear selected" +msgstr "Ausgewählte löschen" + +#: src/playlistdock.cpp:61 +msgid "Move up" +msgstr "Hoch" + +#: src/playlistdock.cpp:66 +msgid "Move down" +msgstr "Runter" + +#~ msgid "Show Playlist" +#~ msgstr "Zeige Abspielliste" diff --git a/loopy/po/hu.po b/loopy/po/hu.po new file mode 100644 index 00000000..c438bc13 --- /dev/null +++ b/loopy/po/hu.po @@ -0,0 +1,387 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: loopy\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-04-09 14:23+0200\n" +"PO-Revision-Date: 2010-03-21 14:05+0100\n" +"Last-Translator: Barcza Károly \n" +"Language-Team: blackPanther Europe \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Hungarian\n" +"X-Poedit-Country: HUNGARY\n" + +#. i18n: file: src/generaloptions.ui:17 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TrayIcon) +#. i18n: file: src/loopy.kcfg:32 +#. i18n: ectx: label, entry (TrayIcon), group (General) +#. i18n: file: src/generaloptions.ui:17 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TrayIcon) +#. i18n: file: src/loopy.kcfg:32 +#. i18n: ectx: label, entry (TrayIcon), group (General) +#: po/rc.cpp:3 po/rc.cpp:27 rc.cpp:3 rc.cpp:27 +msgid "Show tray icon" +msgstr "Panelikon megjelenítése" + +#. i18n: file: src/generaloptions.ui:24 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HidePlaylist) +#: po/rc.cpp:6 rc.cpp:6 +msgid "Always hide playlist on startup" +msgstr "Mindig rejtse el induláskor a lejátszólistát" + +#. i18n: file: src/generaloptions.ui:31 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoResizeToVideo) +#. i18n: file: src/loopy.kcfg:40 +#. i18n: ectx: label, entry (AutoResizeToVideo), group (General) +#. i18n: file: src/generaloptions.ui:31 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoResizeToVideo) +#. i18n: file: src/loopy.kcfg:40 +#. i18n: ectx: label, entry (AutoResizeToVideo), group (General) +#: po/rc.cpp:9 po/rc.cpp:33 rc.cpp:9 rc.cpp:33 +msgid "Autoresize to videosize" +msgstr "Automatikus átméretezés a videó méretéhez" + +#. i18n: file: src/generaloptions.ui:38 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AlwaysEnqueue) +#. i18n: file: src/loopy.kcfg:44 +#. i18n: ectx: label, entry (AlwaysEnqueue), group (General) +#. i18n: file: src/generaloptions.ui:38 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AlwaysEnqueue) +#. i18n: file: src/loopy.kcfg:44 +#. i18n: ectx: label, entry (AlwaysEnqueue), group (General) +#: po/rc.cpp:12 po/rc.cpp:36 rc.cpp:12 rc.cpp:36 +msgid "Always enqueue files" +msgstr "A fájlok listába mindig" + +#. i18n: file: src/loopy.kcfg:10 +#. i18n: ectx: label, entry (ButtonSeek), group (SeekingOptions) +#: po/rc.cpp:15 rc.cpp:15 +msgid "Button seek" +msgstr "Gombléptetés" + +#. i18n: file: src/loopy.kcfg:14 +#. i18n: ectx: label, entry (ButtonJump), group (SeekingOptions) +#: po/rc.cpp:18 rc.cpp:18 +msgid "Button jump" +msgstr "Gombugrás" + +#. i18n: file: src/loopy.kcfg:18 +#. i18n: ectx: label, entry (MouseWheelSeek), group (SeekingOptions) +#: po/rc.cpp:21 rc.cpp:21 +msgid "Mousewheel seek" +msgstr "EgérgörgÅ‘ léptetés" + +#. i18n: file: src/loopy.kcfg:25 +#. i18n: ectx: label, entry (Theme), group (Theme) +#: po/rc.cpp:24 src/options.cpp:57 rc.cpp:24 +msgid "Theme" +msgstr "Téma" + +#. i18n: file: src/loopy.kcfg:36 +#. i18n: ectx: label, entry (HidePlaylist), group (General) +#: po/rc.cpp:30 rc.cpp:30 +msgid "Hide Playlist on startup" +msgstr "A lejátszólista elrejtése induláskor" + +#. i18n: file: src/loopyui.rc:6 +#. i18n: ectx: Menu (file) +#: po/rc.cpp:39 rc.cpp:39 +msgid "&File" +msgstr "&Fájl" + +#. i18n: file: src/loopyui.rc:16 +#. i18n: ectx: Menu (play) +#: po/rc.cpp:42 rc.cpp:42 +msgid "&Play" +msgstr "Le&játszás" + +#. i18n: file: src/loopyui.rc:29 +#. i18n: ectx: Menu (video) +#: po/rc.cpp:45 rc.cpp:45 +msgid "&Video" +msgstr "&Videó" + +#. i18n: file: src/loopyui.rc:31 +#. i18n: ectx: Menu (aspectmenu) +#: po/rc.cpp:48 rc.cpp:48 +msgid "&Aspect ratio" +msgstr "&Képarány" + +#. i18n: file: src/loopyui.rc:38 +#. i18n: ectx: Menu (scalemenu) +#: po/rc.cpp:51 rc.cpp:51 +msgid "&Scale mode" +msgstr "&Átméretezési mód" + +#. i18n: file: src/loopyui.rc:43 +#. i18n: ectx: Menu (titlemenu) +#: po/rc.cpp:54 rc.cpp:54 +msgid "&Title" +msgstr "&Cím" + +#. i18n: file: src/loopyui.rc:46 +#. i18n: ectx: Menu (chaptermenu) +#: po/rc.cpp:57 rc.cpp:57 +msgid "&Chapter" +msgstr "&Fejezet" + +#. i18n: file: src/loopyui.rc:49 +#. i18n: ectx: Menu (anglemenu) +#: po/rc.cpp:60 rc.cpp:60 +msgid "&Angle" +msgstr "&DÅ‘lésszög" + +#. i18n: file: src/loopyui.rc:56 +#. i18n: ectx: Menu (audio) +#: po/rc.cpp:63 rc.cpp:63 +msgid "&Audio" +msgstr "&Hang" + +#. i18n: file: src/loopyui.rc:69 +#. i18n: ectx: ToolBar (mainToolBar) +#: po/rc.cpp:66 rc.cpp:66 +msgid "Main Toolbar" +msgstr "Alap eszköztár" + +#. i18n: file: src/seekingoptions.ui:17 +#. i18n: ectx: property (title), widget (QGroupBox, seekingGroup) +#: po/rc.cpp:69 rc.cpp:69 +msgid "Seeking values in seconds " +msgstr "Léptetési érték másodpercben" + +#. i18n: file: src/seekingoptions.ui:23 +#. i18n: ectx: property (text), widget (QLabel, buttonSeekLabel) +#: po/rc.cpp:72 rc.cpp:72 +msgid "Button seek value" +msgstr "Gombléptetés értéke" + +#. i18n: file: src/seekingoptions.ui:40 +#. i18n: ectx: property (text), widget (QLabel, buttonJumpLabel) +#: po/rc.cpp:75 rc.cpp:75 +msgid "Button jump value" +msgstr "Gombugrás értéke" + +#. i18n: file: src/seekingoptions.ui:60 +#. i18n: ectx: property (text), widget (QLabel, mouseWheelSeekLabel) +#: po/rc.cpp:78 rc.cpp:78 +msgid "Mousewheel seek value" +msgstr "EgérgörgÅ‘ léptetési értéke" + +#. i18n: file: src/themeoptions.ui:17 +#. i18n: ectx: property (title), widget (QGroupBox, ThemeActionGroup) +#: po/rc.cpp:81 rc.cpp:81 +msgid "Choose a theme" +msgstr "Téma kiválasztása" + +#: po/rc.cpp:82 rc.cpp:82 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Barcza Károly (www.blackpanther.hu)" + +#: po/rc.cpp:83 rc.cpp:83 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "kbarcza@blackpanther.hu" + +#: src/main.cpp:43 +msgid "Loopy" +msgstr "Loopy" + +#: src/main.cpp:44 +#, fuzzy +msgid "Slim, themeable video player, based on the KDE phonon libraries." +msgstr "Egy hagyományos videó lejátszó phonon alapokon." + +#: src/main.cpp:46 +msgid "Copyright (c) 2010 MonsterMagnet" +msgstr "Copyright (c) 2010 MonsterMagnet" + +#: src/main.cpp:49 +msgid "MonsterMagnet" +msgstr "MonsterMagnet" + +#: src/main.cpp:49 +msgid "Original Developer/Maintainer" +msgstr "Eredeti fejlesztÅ‘ és karbantartó" + +#: src/main.cpp:50 +msgid "The Kaffeine Developers" +msgstr "A Kaffeine készítÅ‘i" + +#: src/main.cpp:50 +msgid "Single instance, DVD support and a lot more" +msgstr "Egyetlen példány, DVD támogatás és egyéb" + +#: src/main.cpp:51 +msgid "The Gwenview Developers" +msgstr "A Gwenview készítÅ‘i" + +#: src/main.cpp:51 +msgid "Fullscreenbar and qss stylesheet" +msgstr "TeljesképernyÅ‘-bár és qss stíluslap" + +#: src/mainwindow.cpp:125 src/mainwindow.cpp:529 +msgid "Open URL" +msgstr "URL megnyitása" + +#: src/mainwindow.cpp:134 src/mainwindow.cpp:435 +msgid "Play DVD" +msgstr "DVD lejátszása" + +#: src/mainwindow.cpp:143 src/mainwindow.cpp:985 src/mainwindow.cpp:992 +msgid "Play" +msgstr "Lejátszás" + +#: src/mainwindow.cpp:150 +msgid "Seek Forward" +msgstr "Léptetés elÅ‘re" + +#: src/mainwindow.cpp:157 +msgid "Jump Forward" +msgstr "Ugrás elÅ‘re" + +#: src/mainwindow.cpp:164 +msgid "Seek Backward" +msgstr "Léptetés vissza" + +#: src/mainwindow.cpp:171 +msgid "Jump Backward" +msgstr "Ugrás vissza" + +#: src/mainwindow.cpp:178 src/playlistdock.cpp:71 +msgid "Playlist Skip Forward" +msgstr "Lejátszás kihagyása, tovább" + +#: src/mainwindow.cpp:185 src/playlistdock.cpp:76 +msgid "Playlist Skip Backward" +msgstr "Lejátszás kihagyása, vissza" + +#: src/mainwindow.cpp:192 +msgid "Repeat" +msgstr "Ismétlés" + +#: src/mainwindow.cpp:204 +msgid "Auto" +msgstr "Automatikus" + +#: src/mainwindow.cpp:210 +msgid "Scale" +msgstr "Méretezés" + +#: src/mainwindow.cpp:215 +msgid "16/9" +msgstr "16/9" + +#: src/mainwindow.cpp:220 +msgid "4/3" +msgstr "4/3" + +#: src/mainwindow.cpp:229 +msgid "Fit in view" +msgstr "Kitöltés a nézetben" + +#: src/mainwindow.cpp:235 +msgid "Scale and crop" +msgstr "Méretezés és levágás" + +#: src/mainwindow.cpp:263 src/mainwindow.cpp:896 +msgid "Mute" +msgstr "Némítás" + +#: src/mainwindow.cpp:270 +msgid "Increase Volume" +msgstr "A hangerÅ‘ fel" + +#: src/mainwindow.cpp:276 +msgid "Decrease Volume" +msgstr "A hangerÅ‘ le" + +#: src/mainwindow.cpp:283 src/playlistdock.cpp:16 +msgid "Playlist" +msgstr "Lejátszólista" + +#: src/mainwindow.cpp:289 +msgid "Minimal View" +msgstr "Minimális nézet" + +#: src/mainwindow.cpp:312 +msgid "Volume slider" +msgstr "HangerÅ‘ csúszka" + +#: src/mainwindow.cpp:319 +msgid "Position slider" +msgstr "PozíciójelzÅ‘" + +#: src/mainwindow.cpp:323 +msgid "Reload Theme (for theme development)" +msgstr "" + +#: src/mainwindow.cpp:436 +msgid "Add Files or URLs to playlist" +msgstr "Fájlok vagy URL-ek hozzáadása a lejátszólistához" + +#: src/mainwindow.cpp:437 +msgid "Open Files or URLs to play" +msgstr "Fájlok vagy URL-el megnyitása lejátszásra" + +#: src/mainwindow.cpp:495 +msgid "Select file(s) to play" +msgstr "A lejátszandó fájl(ok) kiválasztása" + +#: src/mainwindow.cpp:520 +msgid "Add file(s) to playlist" +msgstr "Fájl(ok)hozzáadása a lejátszólistához" + +#: src/mainwindow.cpp:529 +msgid "Enter a URL:" +msgstr "Adjon meg egy URL-t:" + +#: src/mainwindow.cpp:671 +msgid "You get back to normal view with the F3 key." +msgstr "" + +#: src/mainwindow.cpp:892 +msgid "Unmute" +msgstr "Nem némít" + +#: src/mainwindow.cpp:971 +msgid "Pause" +msgstr "Szünet" + +#: src/options.cpp:49 src/options.cpp:81 +msgid "no theme" +msgstr "Nincs kiválasztva téma" + +#: src/options.cpp:56 +msgid "General" +msgstr "Általános" + +#: src/options.cpp:58 +msgid "Seeking" +msgstr "Léptetés" + +#: src/playlistdock.cpp:46 +msgid "Clear playlist" +msgstr "A lejátszólista kiürítése..." + +#: src/playlistdock.cpp:51 +msgid "Add file(s)" +msgstr "Fájl(ok) hozzá&adása..." + +#: src/playlistdock.cpp:56 +msgid "Clear selected" +msgstr "A kiválasztott törlése" + +#: src/playlistdock.cpp:61 +msgid "Move up" +msgstr "Mozgatás fel" + +#: src/playlistdock.cpp:66 +msgid "Move down" +msgstr "Mozgatás le" diff --git a/loopy/po/loopy.pot b/loopy/po/loopy.pot new file mode 100644 index 00000000..b43d6c90 --- /dev/null +++ b/loopy/po/loopy.pot @@ -0,0 +1,385 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-04-09 14:23+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#. i18n: file: src/generaloptions.ui:17 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TrayIcon) +#. i18n: file: src/loopy.kcfg:32 +#. i18n: ectx: label, entry (TrayIcon), group (General) +#. i18n: file: src/generaloptions.ui:17 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TrayIcon) +#. i18n: file: src/loopy.kcfg:32 +#. i18n: ectx: label, entry (TrayIcon), group (General) +#: po/rc.cpp:3 po/rc.cpp:27 rc.cpp:3 rc.cpp:27 +msgid "Show tray icon" +msgstr "" + +#. i18n: file: src/generaloptions.ui:24 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HidePlaylist) +#: po/rc.cpp:6 rc.cpp:6 +msgid "Always hide playlist on startup" +msgstr "" + +#. i18n: file: src/generaloptions.ui:31 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoResizeToVideo) +#. i18n: file: src/loopy.kcfg:40 +#. i18n: ectx: label, entry (AutoResizeToVideo), group (General) +#. i18n: file: src/generaloptions.ui:31 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoResizeToVideo) +#. i18n: file: src/loopy.kcfg:40 +#. i18n: ectx: label, entry (AutoResizeToVideo), group (General) +#: po/rc.cpp:9 po/rc.cpp:33 rc.cpp:9 rc.cpp:33 +msgid "Autoresize to videosize" +msgstr "" + +#. i18n: file: src/generaloptions.ui:38 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AlwaysEnqueue) +#. i18n: file: src/loopy.kcfg:44 +#. i18n: ectx: label, entry (AlwaysEnqueue), group (General) +#. i18n: file: src/generaloptions.ui:38 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AlwaysEnqueue) +#. i18n: file: src/loopy.kcfg:44 +#. i18n: ectx: label, entry (AlwaysEnqueue), group (General) +#: po/rc.cpp:12 po/rc.cpp:36 rc.cpp:12 rc.cpp:36 +msgid "Always enqueue files" +msgstr "" + +#. i18n: file: src/loopy.kcfg:10 +#. i18n: ectx: label, entry (ButtonSeek), group (SeekingOptions) +#: po/rc.cpp:15 rc.cpp:15 +msgid "Button seek" +msgstr "" + +#. i18n: file: src/loopy.kcfg:14 +#. i18n: ectx: label, entry (ButtonJump), group (SeekingOptions) +#: po/rc.cpp:18 rc.cpp:18 +msgid "Button jump" +msgstr "" + +#. i18n: file: src/loopy.kcfg:18 +#. i18n: ectx: label, entry (MouseWheelSeek), group (SeekingOptions) +#: po/rc.cpp:21 rc.cpp:21 +msgid "Mousewheel seek" +msgstr "" + +#. i18n: file: src/loopy.kcfg:25 +#. i18n: ectx: label, entry (Theme), group (Theme) +#: po/rc.cpp:24 src/options.cpp:57 rc.cpp:24 +msgid "Theme" +msgstr "" + +#. i18n: file: src/loopy.kcfg:36 +#. i18n: ectx: label, entry (HidePlaylist), group (General) +#: po/rc.cpp:30 rc.cpp:30 +msgid "Hide Playlist on startup" +msgstr "" + +#. i18n: file: src/loopyui.rc:6 +#. i18n: ectx: Menu (file) +#: po/rc.cpp:39 rc.cpp:39 +msgid "&File" +msgstr "" + +#. i18n: file: src/loopyui.rc:16 +#. i18n: ectx: Menu (play) +#: po/rc.cpp:42 rc.cpp:42 +msgid "&Play" +msgstr "" + +#. i18n: file: src/loopyui.rc:29 +#. i18n: ectx: Menu (video) +#: po/rc.cpp:45 rc.cpp:45 +msgid "&Video" +msgstr "" + +#. i18n: file: src/loopyui.rc:31 +#. i18n: ectx: Menu (aspectmenu) +#: po/rc.cpp:48 rc.cpp:48 +msgid "&Aspect ratio" +msgstr "" + +#. i18n: file: src/loopyui.rc:38 +#. i18n: ectx: Menu (scalemenu) +#: po/rc.cpp:51 rc.cpp:51 +msgid "&Scale mode" +msgstr "" + +#. i18n: file: src/loopyui.rc:43 +#. i18n: ectx: Menu (titlemenu) +#: po/rc.cpp:54 rc.cpp:54 +msgid "&Title" +msgstr "" + +#. i18n: file: src/loopyui.rc:46 +#. i18n: ectx: Menu (chaptermenu) +#: po/rc.cpp:57 rc.cpp:57 +msgid "&Chapter" +msgstr "" + +#. i18n: file: src/loopyui.rc:49 +#. i18n: ectx: Menu (anglemenu) +#: po/rc.cpp:60 rc.cpp:60 +msgid "&Angle" +msgstr "" + +#. i18n: file: src/loopyui.rc:56 +#. i18n: ectx: Menu (audio) +#: po/rc.cpp:63 rc.cpp:63 +msgid "&Audio" +msgstr "" + +#. i18n: file: src/loopyui.rc:69 +#. i18n: ectx: ToolBar (mainToolBar) +#: po/rc.cpp:66 rc.cpp:66 +msgid "Main Toolbar" +msgstr "" + +#. i18n: file: src/seekingoptions.ui:17 +#. i18n: ectx: property (title), widget (QGroupBox, seekingGroup) +#: po/rc.cpp:69 rc.cpp:69 +msgid "Seeking values in seconds " +msgstr "" + +#. i18n: file: src/seekingoptions.ui:23 +#. i18n: ectx: property (text), widget (QLabel, buttonSeekLabel) +#: po/rc.cpp:72 rc.cpp:72 +msgid "Button seek value" +msgstr "" + +#. i18n: file: src/seekingoptions.ui:40 +#. i18n: ectx: property (text), widget (QLabel, buttonJumpLabel) +#: po/rc.cpp:75 rc.cpp:75 +msgid "Button jump value" +msgstr "" + +#. i18n: file: src/seekingoptions.ui:60 +#. i18n: ectx: property (text), widget (QLabel, mouseWheelSeekLabel) +#: po/rc.cpp:78 rc.cpp:78 +msgid "Mousewheel seek value" +msgstr "" + +#. i18n: file: src/themeoptions.ui:17 +#. i18n: ectx: property (title), widget (QGroupBox, ThemeActionGroup) +#: po/rc.cpp:81 rc.cpp:81 +msgid "Choose a theme" +msgstr "" + +#: po/rc.cpp:82 rc.cpp:82 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" + +#: po/rc.cpp:83 rc.cpp:83 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" + +#: src/main.cpp:43 +msgid "Loopy" +msgstr "" + +#: src/main.cpp:44 +msgid "Slim, themeable video player, based on the KDE phonon libraries." +msgstr "" + +#: src/main.cpp:46 +msgid "Copyright (c) 2010 MonsterMagnet" +msgstr "" + +#: src/main.cpp:49 +msgid "MonsterMagnet" +msgstr "" + +#: src/main.cpp:49 +msgid "Original Developer/Maintainer" +msgstr "" + +#: src/main.cpp:50 +msgid "The Kaffeine Developers" +msgstr "" + +#: src/main.cpp:50 +msgid "Single instance, DVD support and a lot more" +msgstr "" + +#: src/main.cpp:51 +msgid "The Gwenview Developers" +msgstr "" + +#: src/main.cpp:51 +msgid "Fullscreenbar and qss stylesheet" +msgstr "" + +#: src/mainwindow.cpp:125 src/mainwindow.cpp:529 +msgid "Open URL" +msgstr "" + +#: src/mainwindow.cpp:134 src/mainwindow.cpp:435 +msgid "Play DVD" +msgstr "" + +#: src/mainwindow.cpp:143 src/mainwindow.cpp:985 src/mainwindow.cpp:992 +msgid "Play" +msgstr "" + +#: src/mainwindow.cpp:150 +msgid "Seek Forward" +msgstr "" + +#: src/mainwindow.cpp:157 +msgid "Jump Forward" +msgstr "" + +#: src/mainwindow.cpp:164 +msgid "Seek Backward" +msgstr "" + +#: src/mainwindow.cpp:171 +msgid "Jump Backward" +msgstr "" + +#: src/mainwindow.cpp:178 src/playlistdock.cpp:71 +msgid "Playlist Skip Forward" +msgstr "" + +#: src/mainwindow.cpp:185 src/playlistdock.cpp:76 +msgid "Playlist Skip Backward" +msgstr "" + +#: src/mainwindow.cpp:192 +msgid "Repeat" +msgstr "" + +#: src/mainwindow.cpp:204 +msgid "Auto" +msgstr "" + +#: src/mainwindow.cpp:210 +msgid "Scale" +msgstr "" + +#: src/mainwindow.cpp:215 +msgid "16/9" +msgstr "" + +#: src/mainwindow.cpp:220 +msgid "4/3" +msgstr "" + +#: src/mainwindow.cpp:229 +msgid "Fit in view" +msgstr "" + +#: src/mainwindow.cpp:235 +msgid "Scale and crop" +msgstr "" + +#: src/mainwindow.cpp:263 src/mainwindow.cpp:896 +msgid "Mute" +msgstr "" + +#: src/mainwindow.cpp:270 +msgid "Increase Volume" +msgstr "" + +#: src/mainwindow.cpp:276 +msgid "Decrease Volume" +msgstr "" + +#: src/mainwindow.cpp:283 src/playlistdock.cpp:16 +msgid "Playlist" +msgstr "" + +#: src/mainwindow.cpp:289 +msgid "Minimal View" +msgstr "" + +#: src/mainwindow.cpp:312 +msgid "Volume slider" +msgstr "" + +#: src/mainwindow.cpp:319 +msgid "Position slider" +msgstr "" + +#: src/mainwindow.cpp:323 +msgid "Reload Theme (for theme development)" +msgstr "" + +#: src/mainwindow.cpp:436 +msgid "Add Files or URLs to playlist" +msgstr "" + +#: src/mainwindow.cpp:437 +msgid "Open Files or URLs to play" +msgstr "" + +#: src/mainwindow.cpp:495 +msgid "Select file(s) to play" +msgstr "" + +#: src/mainwindow.cpp:520 +msgid "Add file(s) to playlist" +msgstr "" + +#: src/mainwindow.cpp:529 +msgid "Enter a URL:" +msgstr "" + +#: src/mainwindow.cpp:671 +msgid "You get back to normal view with the F3 key." +msgstr "" + +#: src/mainwindow.cpp:892 +msgid "Unmute" +msgstr "" + +#: src/mainwindow.cpp:971 +msgid "Pause" +msgstr "" + +#: src/options.cpp:49 src/options.cpp:81 +msgid "no theme" +msgstr "" + +#: src/options.cpp:56 +msgid "General" +msgstr "" + +#: src/options.cpp:58 +msgid "Seeking" +msgstr "" + +#: src/playlistdock.cpp:46 +msgid "Clear playlist" +msgstr "" + +#: src/playlistdock.cpp:51 +msgid "Add file(s)" +msgstr "" + +#: src/playlistdock.cpp:56 +msgid "Clear selected" +msgstr "" + +#: src/playlistdock.cpp:61 +msgid "Move up" +msgstr "" + +#: src/playlistdock.cpp:66 +msgid "Move down" +msgstr "" diff --git a/loopy/po/pt_BR.po b/loopy/po/pt_BR.po new file mode 100644 index 00000000..9558f7e5 --- /dev/null +++ b/loopy/po/pt_BR.po @@ -0,0 +1,387 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Márcio Moraes , 2010. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2010-04-09 14:23+0200\n" +"PO-Revision-Date: 2010-03-23 21:25-0300\n" +"Last-Translator: Márcio Moraes \n" +"Language-Team: Brazilian Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Language: pt_BR\n" + +#. i18n: file: src/generaloptions.ui:17 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TrayIcon) +#. i18n: file: src/loopy.kcfg:32 +#. i18n: ectx: label, entry (TrayIcon), group (General) +#. i18n: file: src/generaloptions.ui:17 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TrayIcon) +#. i18n: file: src/loopy.kcfg:32 +#. i18n: ectx: label, entry (TrayIcon), group (General) +#: po/rc.cpp:3 po/rc.cpp:27 rc.cpp:3 rc.cpp:27 +msgid "Show tray icon" +msgstr "Mostrar ícone na área de notificação" + +#. i18n: file: src/generaloptions.ui:24 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HidePlaylist) +#: po/rc.cpp:6 rc.cpp:6 +msgid "Always hide playlist on startup" +msgstr "Sempre ocultar lista de reprodução ao iniciar" + +#. i18n: file: src/generaloptions.ui:31 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoResizeToVideo) +#. i18n: file: src/loopy.kcfg:40 +#. i18n: ectx: label, entry (AutoResizeToVideo), group (General) +#. i18n: file: src/generaloptions.ui:31 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoResizeToVideo) +#. i18n: file: src/loopy.kcfg:40 +#. i18n: ectx: label, entry (AutoResizeToVideo), group (General) +#: po/rc.cpp:9 po/rc.cpp:33 rc.cpp:9 rc.cpp:33 +msgid "Autoresize to videosize" +msgstr "Redimensionar automaticamente para o tamanho do vídeo" + +#. i18n: file: src/generaloptions.ui:38 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AlwaysEnqueue) +#. i18n: file: src/loopy.kcfg:44 +#. i18n: ectx: label, entry (AlwaysEnqueue), group (General) +#. i18n: file: src/generaloptions.ui:38 +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AlwaysEnqueue) +#. i18n: file: src/loopy.kcfg:44 +#. i18n: ectx: label, entry (AlwaysEnqueue), group (General) +#: po/rc.cpp:12 po/rc.cpp:36 rc.cpp:12 rc.cpp:36 +msgid "Always enqueue files" +msgstr "Sempre enfileirar arquivos" + +#. i18n: file: src/loopy.kcfg:10 +#. i18n: ectx: label, entry (ButtonSeek), group (SeekingOptions) +#: po/rc.cpp:15 rc.cpp:15 +msgid "Button seek" +msgstr "Botão de busca" + +#. i18n: file: src/loopy.kcfg:14 +#. i18n: ectx: label, entry (ButtonJump), group (SeekingOptions) +#: po/rc.cpp:18 rc.cpp:18 +msgid "Button jump" +msgstr "Botão de pulo" + +#. i18n: file: src/loopy.kcfg:18 +#. i18n: ectx: label, entry (MouseWheelSeek), group (SeekingOptions) +#: po/rc.cpp:21 rc.cpp:21 +msgid "Mousewheel seek" +msgstr "Roda do mouse busca" + +#. i18n: file: src/loopy.kcfg:25 +#. i18n: ectx: label, entry (Theme), group (Theme) +#: po/rc.cpp:24 src/options.cpp:57 rc.cpp:24 +msgid "Theme" +msgstr "Tema" + +#. i18n: file: src/loopy.kcfg:36 +#. i18n: ectx: label, entry (HidePlaylist), group (General) +#: po/rc.cpp:30 rc.cpp:30 +msgid "Hide Playlist on startup" +msgstr "Ocultar lista de reprodução ao iniciar" + +#. i18n: file: src/loopyui.rc:6 +#. i18n: ectx: Menu (file) +#: po/rc.cpp:39 rc.cpp:39 +msgid "&File" +msgstr "&Arquivo" + +#. i18n: file: src/loopyui.rc:16 +#. i18n: ectx: Menu (play) +#: po/rc.cpp:42 rc.cpp:42 +msgid "&Play" +msgstr "&Reproduzir" + +#. i18n: file: src/loopyui.rc:29 +#. i18n: ectx: Menu (video) +#: po/rc.cpp:45 rc.cpp:45 +msgid "&Video" +msgstr "&Vídeo" + +#. i18n: file: src/loopyui.rc:31 +#. i18n: ectx: Menu (aspectmenu) +#: po/rc.cpp:48 rc.cpp:48 +msgid "&Aspect ratio" +msgstr "&Relação de aspecto" + +#. i18n: file: src/loopyui.rc:38 +#. i18n: ectx: Menu (scalemenu) +#: po/rc.cpp:51 rc.cpp:51 +msgid "&Scale mode" +msgstr "Modo e&scala" + +#. i18n: file: src/loopyui.rc:43 +#. i18n: ectx: Menu (titlemenu) +#: po/rc.cpp:54 rc.cpp:54 +msgid "&Title" +msgstr "&Título" + +#. i18n: file: src/loopyui.rc:46 +#. i18n: ectx: Menu (chaptermenu) +#: po/rc.cpp:57 rc.cpp:57 +msgid "&Chapter" +msgstr "&Episódio" + +#. i18n: file: src/loopyui.rc:49 +#. i18n: ectx: Menu (anglemenu) +#: po/rc.cpp:60 rc.cpp:60 +msgid "&Angle" +msgstr "Â&ngulo" + +#. i18n: file: src/loopyui.rc:56 +#. i18n: ectx: Menu (audio) +#: po/rc.cpp:63 rc.cpp:63 +msgid "&Audio" +msgstr "Áu&dio" + +#. i18n: file: src/loopyui.rc:69 +#. i18n: ectx: ToolBar (mainToolBar) +#: po/rc.cpp:66 rc.cpp:66 +msgid "Main Toolbar" +msgstr "Barra de ferramentas principal" + +#. i18n: file: src/seekingoptions.ui:17 +#. i18n: ectx: property (title), widget (QGroupBox, seekingGroup) +#: po/rc.cpp:69 rc.cpp:69 +msgid "Seeking values in seconds " +msgstr "Buscando valores em segundos" + +#. i18n: file: src/seekingoptions.ui:23 +#. i18n: ectx: property (text), widget (QLabel, buttonSeekLabel) +#: po/rc.cpp:72 rc.cpp:72 +msgid "Button seek value" +msgstr "Botão busca o valor" + +#. i18n: file: src/seekingoptions.ui:40 +#. i18n: ectx: property (text), widget (QLabel, buttonJumpLabel) +#: po/rc.cpp:75 rc.cpp:75 +msgid "Button jump value" +msgstr "Botão pula o valor" + +#. i18n: file: src/seekingoptions.ui:60 +#. i18n: ectx: property (text), widget (QLabel, mouseWheelSeekLabel) +#: po/rc.cpp:78 rc.cpp:78 +msgid "Mousewheel seek value" +msgstr "Roda do mouse busca o valor" + +#. i18n: file: src/themeoptions.ui:17 +#. i18n: ectx: property (title), widget (QGroupBox, ThemeActionGroup) +#: po/rc.cpp:81 rc.cpp:81 +msgid "Choose a theme" +msgstr "Escolher um tema" + +#: po/rc.cpp:82 rc.cpp:82 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Márcio Moreas" + +#: po/rc.cpp:83 rc.cpp:83 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "marciopanto@gmail.com" + +#: src/main.cpp:43 +msgid "Loopy" +msgstr "Loopy" + +#: src/main.cpp:44 +#, fuzzy +msgid "Slim, themeable video player, based on the KDE phonon libraries." +msgstr "Um reprodutor de vídeo simples, com base nas bibliotecas phonon." + +#: src/main.cpp:46 +msgid "Copyright (c) 2010 MonsterMagnet" +msgstr "Copyright (c) 2010 MonsterMagnet" + +#: src/main.cpp:49 +msgid "MonsterMagnet" +msgstr "MonsterMagnet" + +#: src/main.cpp:49 +msgid "Original Developer/Maintainer" +msgstr "Mantenedor/Desenvolvedor original" + +#: src/main.cpp:50 +msgid "The Kaffeine Developers" +msgstr "Os desenvolvedores Kaffeine" + +#: src/main.cpp:50 +msgid "Single instance, DVD support and a lot more" +msgstr "Única instância, suporte a DVD e muito mais" + +#: src/main.cpp:51 +msgid "The Gwenview Developers" +msgstr "Os desenvolvedores Gwenview" + +#: src/main.cpp:51 +msgid "Fullscreenbar and qss stylesheet" +msgstr "Barra de tela cheia e folha de estilo QSS" + +#: src/mainwindow.cpp:125 src/mainwindow.cpp:529 +msgid "Open URL" +msgstr "Abrir URL" + +#: src/mainwindow.cpp:134 src/mainwindow.cpp:435 +msgid "Play DVD" +msgstr "Reproduzir DVD" + +#: src/mainwindow.cpp:143 src/mainwindow.cpp:985 src/mainwindow.cpp:992 +msgid "Play" +msgstr "Reproduzir" + +#: src/mainwindow.cpp:150 +msgid "Seek Forward" +msgstr "Avançar busca" + +#: src/mainwindow.cpp:157 +msgid "Jump Forward" +msgstr "Avançar pulo" + +#: src/mainwindow.cpp:164 +msgid "Seek Backward" +msgstr "Retroceder busca" + +#: src/mainwindow.cpp:171 +msgid "Jump Backward" +msgstr "Retroceder pulo" + +#: src/mainwindow.cpp:178 src/playlistdock.cpp:71 +msgid "Playlist Skip Forward" +msgstr "Avançar na lista de reprodução" + +#: src/mainwindow.cpp:185 src/playlistdock.cpp:76 +msgid "Playlist Skip Backward" +msgstr "Retroceder na lista de reprodução" + +#: src/mainwindow.cpp:192 +msgid "Repeat" +msgstr "Repetir" + +#: src/mainwindow.cpp:204 +msgid "Auto" +msgstr "Automático" + +#: src/mainwindow.cpp:210 +msgid "Scale" +msgstr "Escala" + +#: src/mainwindow.cpp:215 +msgid "16/9" +msgstr "16:9" + +#: src/mainwindow.cpp:220 +msgid "4/3" +msgstr "4:3" + +#: src/mainwindow.cpp:229 +msgid "Fit in view" +msgstr "Ajustar à visualização" + +#: src/mainwindow.cpp:235 +msgid "Scale and crop" +msgstr "Escalar e cortar" + +#: src/mainwindow.cpp:263 src/mainwindow.cpp:896 +msgid "Mute" +msgstr "Mudo" + +#: src/mainwindow.cpp:270 +msgid "Increase Volume" +msgstr "Aumentar volume" + +#: src/mainwindow.cpp:276 +msgid "Decrease Volume" +msgstr "Diminuir volume" + +#: src/mainwindow.cpp:283 src/playlistdock.cpp:16 +msgid "Playlist" +msgstr "Lista de reprodução" + +#: src/mainwindow.cpp:289 +msgid "Minimal View" +msgstr "Visualização compacta" + +#: src/mainwindow.cpp:312 +msgid "Volume slider" +msgstr "Volume deslizante" + +#: src/mainwindow.cpp:319 +msgid "Position slider" +msgstr "Posição deslizante" + +#: src/mainwindow.cpp:323 +msgid "Reload Theme (for theme development)" +msgstr "" + +#: src/mainwindow.cpp:436 +msgid "Add Files or URLs to playlist" +msgstr "Adicionar arquivos ou URLs à lista de reprodução" + +#: src/mainwindow.cpp:437 +msgid "Open Files or URLs to play" +msgstr "Abrir arquivos ou URLs para rproduzir" + +#: src/mainwindow.cpp:495 +msgid "Select file(s) to play" +msgstr "Selecionar arquivo(s) para reproduzir" + +#: src/mainwindow.cpp:520 +msgid "Add file(s) to playlist" +msgstr "Adicionar arquivo(s) à lista de reprodução" + +#: src/mainwindow.cpp:529 +msgid "Enter a URL:" +msgstr "Digitar uma URL:" + +#: src/mainwindow.cpp:671 +msgid "You get back to normal view with the F3 key." +msgstr "" + +#: src/mainwindow.cpp:892 +msgid "Unmute" +msgstr "Desfazer mudo" + +#: src/mainwindow.cpp:971 +msgid "Pause" +msgstr "Pausar" + +#: src/options.cpp:49 src/options.cpp:81 +msgid "no theme" +msgstr "nenhum tema" + +#: src/options.cpp:56 +msgid "General" +msgstr "Geral" + +#: src/options.cpp:58 +msgid "Seeking" +msgstr "Busca" + +#: src/playlistdock.cpp:46 +msgid "Clear playlist" +msgstr "Limpar lista de reprodução" + +#: src/playlistdock.cpp:51 +msgid "Add file(s)" +msgstr "Adicionar arquivo(s)" + +#: src/playlistdock.cpp:56 +msgid "Clear selected" +msgstr "Limpar selecionado" + +#: src/playlistdock.cpp:61 +msgid "Move up" +msgstr "Mover para cima" + +#: src/playlistdock.cpp:66 +msgid "Move down" +msgstr "Mover para baixo" diff --git a/loopy/src/.directory b/loopy/src/.directory new file mode 100644 index 00000000..b9b276a0 --- /dev/null +++ b/loopy/src/.directory @@ -0,0 +1,2 @@ +[Dolphin] +Timestamp=2010,2,16,14,22,20 diff --git a/loopy/src/CMakeLists.txt b/loopy/src/CMakeLists.txt new file mode 100644 index 00000000..b230362d --- /dev/null +++ b/loopy/src/CMakeLists.txt @@ -0,0 +1,30 @@ +set(loopy_SRCS + main.cpp + mainwindow.cpp + videowidget.cpp + playlistdock.cpp + timelabel.cpp + infolabel.cpp + options.cpp + fullscreenbar.cpp + fullscreenplaylist.cpp + titlelabel.cpp + tooltipeater.cpp + seekingoptions.ui + themeoptions.ui + generaloptions.ui +) + +kde4_add_kcfg_files(loopy_SRCS settings.kcfgc) + +add_executable(loopy ${loopy_SRCS}) + +target_link_libraries(loopy ${KDE4_KDEUI_LIBS} + ${KDE4_PHONON_LIBS} + ${KDE4_SOLID_LIBS} + ${KDE4_KFILE_LIBS}) + +install(TARGETS loopy DESTINATION ${INSTALL_TARGETS_DEFAULT_ARGS}) +install(FILES loopyui.rc DESTINATION ${DATA_INSTALL_DIR}/loopy) + +install(FILES loopy.kcfg DESTINATION ${KCFG_INSTALL_DIR}) diff --git a/loopy/src/astyle.sh b/loopy/src/astyle.sh new file mode 100644 index 00000000..978b3f91 --- /dev/null +++ b/loopy/src/astyle.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +# apply kdelibs coding style to all c, cpp and header files in and below the current directory +# +# the coding style is defined in http://techbase.kde.org/Policies/Kdelibs_Coding_Style +# +# requirements: installed astyle + +astyle --indent=spaces=4 --brackets=linux \ + --indent-labels --pad=oper --unpad=paren \ + --one-line=keep-statements --convert-tabs \ + --indent-preprocessor \ + `find -type f -name '*.c'` `find -type f -name '*.cpp'` `find -type f -name '*.h'` + diff --git a/loopy/src/fullscreenbar.cpp b/loopy/src/fullscreenbar.cpp new file mode 100644 index 00000000..04654f40 --- /dev/null +++ b/loopy/src/fullscreenbar.cpp @@ -0,0 +1,25 @@ +#include +#include + +#include "fullscreenbar.h" + +const int HEIGHT = 100; + +FullScreenBar::FullScreenBar(QWidget* parent) : KToolBar(parent, "fullscreenbar") +{ + QRect screen = QApplication::desktop()->screenGeometry(parentWidget()); + int screenHeight = screen.height(); + int screenWidth = screen.width(); + + setObjectName("fullscreenbar"); + setAutoFillBackground(true); + setFixedHeight(HEIGHT); + setFixedWidth(screenWidth); + setToolButtonStyle(Qt::ToolButtonIconOnly); + move(0, screenHeight - HEIGHT); +} + +FullScreenBar::~FullScreenBar() +{ +} + diff --git a/loopy/src/fullscreenbar.h b/loopy/src/fullscreenbar.h new file mode 100644 index 00000000..2fbfcda7 --- /dev/null +++ b/loopy/src/fullscreenbar.h @@ -0,0 +1,15 @@ +#ifndef FULLSCREENBAR_H +#define FULLSCREENBAR_H + +#include + +class FullScreenBar : public KToolBar +{ + Q_OBJECT + +public: + FullScreenBar(QWidget* parent); + ~FullScreenBar(); +}; + +#endif // FULLSCREENBAR_H diff --git a/loopy/src/fullscreenplaylist.cpp b/loopy/src/fullscreenplaylist.cpp new file mode 100644 index 00000000..65c9f868 --- /dev/null +++ b/loopy/src/fullscreenplaylist.cpp @@ -0,0 +1,24 @@ +#include +#include + +#include "fullscreenplaylist.h" + +const int WIDTH = 300; + +FullScreenPlaylist::FullScreenPlaylist(QWidget* parent) : KToolBar(parent, "fullscreenplaylist") +{ + QRect screen = QApplication::desktop()->screenGeometry(parentWidget()); + int screenHeight = screen.height(); + int screenWidth = screen.width(); + + setObjectName("fullscreenplaylist"); + setHidden(true); + setAutoFillBackground(true); + setFixedHeight(screenHeight); + setFixedWidth(WIDTH); + move(screenWidth - WIDTH, 0 ); +} + +FullScreenPlaylist::~FullScreenPlaylist() +{ +} diff --git a/loopy/src/fullscreenplaylist.h b/loopy/src/fullscreenplaylist.h new file mode 100644 index 00000000..851c0421 --- /dev/null +++ b/loopy/src/fullscreenplaylist.h @@ -0,0 +1,13 @@ +#ifndef FULLSCREENPLAYLIST_H +#define FULLSCREENPLAYLIST_H +#include + +class FullScreenPlaylist : public KToolBar +{ + Q_OBJECT + +public: + FullScreenPlaylist(QWidget* parent); + ~FullScreenPlaylist(); +}; +#endif // FULLSCREENPLAYLIST_H diff --git a/loopy/src/generaloptions.ui b/loopy/src/generaloptions.ui new file mode 100644 index 00000000..61349834 --- /dev/null +++ b/loopy/src/generaloptions.ui @@ -0,0 +1,46 @@ + + + GeneralOptions + + + + 0 + 0 + 290 + 266 + + + + + + + Show tray icon + + + + + + + Always hide playlist on startup + + + + + + + Autoresize to videosize + + + + + + + Always enqueue files + + + + + + + + diff --git a/loopy/src/infolabel.cpp b/loopy/src/infolabel.cpp new file mode 100644 index 00000000..fcba5d2e --- /dev/null +++ b/loopy/src/infolabel.cpp @@ -0,0 +1,47 @@ +#include +#include + +#include "infolabel.h" +#include "mainwindow.h" + +InfoLabel::InfoLabel(MainWindow *parent) +{ + this->parent = parent; + setObjectName("infolabel"); + setAcceptDrops(true); + setAlignment(Qt::AlignCenter); + setAutoFillBackground(true); + setPixmap(KIcon("applications-multimedia").pixmap(128, 128)); +} + +InfoLabel::~InfoLabel() +{ +} + +void InfoLabel::contextMenuEvent(QContextMenuEvent *e) +{ + QMenu *popup = static_cast(parent->guiFactory()->container("context_info_popup", parent)); + popup->popup(e->globalPos()); +} + +void InfoLabel::mouseDoubleClickEvent(QMouseEvent *e) +{ + if (e->button() == Qt::LeftButton) { + parent->toggleFullscreen(); + e->accept(); + } +} + +void InfoLabel::dropEvent(QDropEvent *e) +{ + KUrl::List uriList = KUrl::List::fromMimeData(e->mimeData()); + if (!uriList.isEmpty()) { + parent->openUrls(uriList); + } +} + +void InfoLabel::dragEnterEvent(QDragEnterEvent *e) +{ + KUrl::List uriList = KUrl::List::fromMimeData(e->mimeData()); + e->setAccepted(!uriList.isEmpty()); +} diff --git a/loopy/src/infolabel.h b/loopy/src/infolabel.h new file mode 100644 index 00000000..920dbb6e --- /dev/null +++ b/loopy/src/infolabel.h @@ -0,0 +1,29 @@ +#ifndef INFOLABEL_H +#define INFOLABEL_H + +#include +#include +#include + +class MainWindow; + +class InfoLabel : public QLabel +{ + Q_OBJECT + +public: + InfoLabel(MainWindow* parent); + ~InfoLabel(); + +private: + MainWindow* parent; + +private slots: + void contextMenuEvent(QContextMenuEvent *e); + +protected: + void mouseDoubleClickEvent(QMouseEvent *e); + void dragEnterEvent(QDragEnterEvent *e); + void dropEvent(QDropEvent *e); +}; +#endif // INFOLABEL_H diff --git a/loopy/src/loopy.kcfg b/loopy/src/loopy.kcfg new file mode 100644 index 00000000..1ffcabd1 --- /dev/null +++ b/loopy/src/loopy.kcfg @@ -0,0 +1,49 @@ + + + + + + + + 10 + + + + 60 + + + + 10 + + + + + + + graygradients + + + + + + + false + + + + true + + + + false + + + + false + + + + diff --git a/loopy/src/loopyui.rc b/loopy/src/loopyui.rc new file mode 100644 index 00000000..27ca3c98 --- /dev/null +++ b/loopy/src/loopyui.rc @@ -0,0 +1,92 @@ + + + + + + &File + + + + + + + + + + &Play + + + + + + + + + + + + + &Video + + &Aspect ratio + + + + + + + &Scale mode + + + + + &Title + + + &Chapter + + + &Angle + + + + + + + &Audio + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/loopy/src/main.cpp b/loopy/src/main.cpp new file mode 100644 index 00000000..c6729b46 --- /dev/null +++ b/loopy/src/main.cpp @@ -0,0 +1,58 @@ +#include +#include +#include + +#include "mainwindow.h" + +class LoopyApplication : public KUniqueApplication +{ +public: + LoopyApplication() : firstInstance(true) { + loopy = new MainWindow(); + loopy->show(); + loopy->parseArgs(); + } + + ~LoopyApplication() { + // unlike qt, kde sets Qt::WA_DeleteOnClose and needs it to work properly ... + } + +private: + int newInstance(); + + MainWindow *loopy; + bool firstInstance; +}; + +int LoopyApplication::newInstance() +{ + if (firstInstance) { + // using KFileWidget, newInstance() might be called _during_ loopy construction + firstInstance = false; + } + else { + loopy->parseArgs(); + } + + return KUniqueApplication::newInstance(); +} + +int main(int argc, char *argv[]) +{ + KAboutData aboutData("loopy", "loopy", + ki18n("Loopy"), "0.5.3", + ki18n("Slim, themeable video player, based on the KDE phonon libraries."), + KAboutData::License_GPL_V2, + ki18n("Copyright (c) 2010 MonsterMagnet")); + + aboutData.setProgramIconName("applications-multimedia"); + aboutData.addAuthor(ki18n("MonsterMagnet"), ki18n("Original Developer/Maintainer"), "monstermagnet@rocketmail.com"); + aboutData.addCredit(ki18n("The Kaffeine Developers"),ki18n("Single instance, DVD support and a lot more")); + aboutData.addCredit(ki18n("The Gwenview Developers"),ki18n("Fullscreenbar and qss stylesheet")); + + KCmdLineArgs::init(argc, argv, &aboutData); + KCmdLineArgs::addCmdLineOptions(MainWindow::cmdLineOptions()); + + LoopyApplication app; + return app.exec(); +} diff --git a/loopy/src/mainwindow.cpp b/loopy/src/mainwindow.cpp new file mode 100644 index 00000000..14f0bbb8 --- /dev/null +++ b/loopy/src/mainwindow.cpp @@ -0,0 +1,1186 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "mainwindow.h" + +MainWindow::MainWindow() : KXmlGuiWindow() +{ + //Phonon + mediaObject = new Phonon::MediaObject(this); + mediaController = new Phonon::MediaController(mediaObject); + m_videoWidget = new VideoWidget(this); + audioOutput = new Phonon::AudioOutput(Phonon::VideoCategory, this); + Phonon::createPath(mediaObject, audioOutput); + Phonon::createPath(mediaObject, m_videoWidget); + + mediaObject->setTickInterval(1000); + + connect(mediaObject, SIGNAL(stateChanged(Phonon::State, Phonon::State)), + this, SLOT(mediaStateChanged(Phonon::State, Phonon::State))); + connect(mediaObject, SIGNAL(currentSourceChanged(const Phonon::MediaSource &)), + this, SLOT(sourceChanged(const Phonon::MediaSource &))); + connect(mediaObject, SIGNAL(aboutToFinish()), this, SLOT(aboutToFinish())); + connect(mediaObject, SIGNAL(finished()), this, SLOT(finished())); + connect(mediaObject, SIGNAL(metaDataChanged()), this, SLOT(updateCaption()));//For DVD + + m_infoLabel = new InfoLabel(this); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->setSpacing(0); + mainLayout->setMargin(0); + mainLayout->addWidget(m_videoWidget); + m_videoWidget->hide(); + mainLayout->addWidget(m_infoLabel); + + QWidget *widget = new QWidget; + widget->setLayout(mainLayout); + + setCentralWidget(widget); + + m_playlistDock = new PlaylistDock(this); + addDockWidget(Qt::RightDockWidgetArea, m_playlistDock); + + m_timeLabel = new TimeLabel(statusBar()); + m_timeLabel->setObjectName("timelabel"); + connect(mediaObject, SIGNAL(tick(qint64)), m_timeLabel, SLOT(setCurrentTime(qint64))); + connect(mediaObject, SIGNAL(totalTimeChanged(qint64)), m_timeLabel, SLOT(setTotalTime(qint64))); + statusBar()->addPermanentWidget(m_timeLabel); + + //Eats the tooltips in fullscreenmode + m_toolTipEater = new ToolTipEater(this); + + setupActions(); + setupFullScreenToolBar(); + + setupGUI(); //load loopyui.rc file + { + //qDebug()<actions(); + + //Disable Help menu actions + QAction *helpContentsAction = actionCollection()->action("help_contents"); + actionCollection()->removeAction(helpContentsAction); + + QAction *helpWhatsThisAction = actionCollection()->action("help_whats_this"); + actionCollection()->removeAction(helpWhatsThisAction); + + QAction *optionsShowStatusbar = actionCollection()->action("options_show_statusbar"); + actionCollection()->removeAction(optionsShowStatusbar); + + setStandardToolBarMenuEnabled (false); + } + + disableScreenSaverTimer = new QTimer(this); + connect(disableScreenSaverTimer, SIGNAL(timeout()), this, SLOT(disableScreenSaver())); + + loadStyleSheet(Settings::theme()); + + createTrayIcon(); + + if (Settings::hidePlaylist()) m_playlistDock->setVisible(false); + + //Restore windowstate after crash, fullscreen exit etc. + bool wasVisible = KConfigGroup(KGlobal::config(), "GUIOptions") + .readEntry("ViewMode", false); + + menuBar()->setHidden(wasVisible); + toolBar()->setHidden(wasVisible); + statusBar()->setHidden(wasVisible); + + audioOutput->setMuted(KConfigGroup(KGlobal::config(), "Audio"). + readEntry("Muted", false)); + + audioOutput->setVolume(qreal(KConfigGroup(KGlobal::config(), "Audio"). + readEntry("Volume", 1.0))); + + updateTitleMenu(); + updateChapterMenu(); + updateAngleMenu(); +} + +MainWindow::~MainWindow() +{ + //Save Settings + actionOpenRecent->saveEntries(KConfigGroup(KGlobal::config(), "Recent Files")); + KGlobal::config()->group("PlayingOptions").writeEntry("Repeat", action("repeatAction")->isChecked()); + KGlobal::config()->group("GUIOptions").writeEntry("ViewMode", action("toggleViewMode")->isChecked()); + KGlobal::config()->group("Audio").writeEntry("Volume", audioOutput->volume()); + KGlobal::config()->group("Audio").writeEntry("Muted", audioOutput->isMuted()); +} + +void MainWindow::setupActions() +{ + //File menu + KStandardAction::open(this, SLOT(openFile()), actionCollection()); + + KAction* openUrlAction = actionCollection()->addAction("openUrlAction"); + openUrlAction->setText(i18n("Open URL")); + openUrlAction->setIcon(KIcon("uri-mms")); + openUrlAction->setShortcut(Qt::CTRL | Qt::Key_U); + connect(openUrlAction, SIGNAL(triggered()), this, SLOT(openUrl())); + + actionOpenRecent = KStandardAction::openRecent(this, SLOT(openUrl(KUrl)), actionCollection()); + actionOpenRecent->loadEntries(KConfigGroup(KGlobal::config(), "Recent Files")); + + KAction* playDVDAction = actionCollection()->addAction("playDVDAction"); + playDVDAction->setText(i18n("Play DVD")); + playDVDAction->setIcon(KIcon("media-optical-dvd")); + connect(playDVDAction, SIGNAL(triggered()), this, SLOT(playDVD())); + + //KStandardAction::quit(kapp, SLOT(quit()), actionCollection()); + KStandardAction::quit(this, SLOT(close()), actionCollection()); + + //Play menu + KAction* playPauseAction = actionCollection()->addAction("pause"); + playPauseAction->setText(i18n("Play")); + playPauseAction->setIcon(KIcon("media-playback-start")); + playPauseAction->setShortcut(KShortcut(Qt::Key_Space, Qt::Key_MediaPlay)); + connect(playPauseAction, SIGNAL(triggered()), this, SLOT(playPause())); + playPauseAction->setEnabled(false); + + KAction* seekForwardAction = actionCollection()->addAction("seekforward"); + seekForwardAction->setText(i18n("Seek Forward")); + seekForwardAction->setShortcut(Qt::Key_Right); + seekForwardAction->setIcon(KIcon("media-seek-forward")); + connect(seekForwardAction, SIGNAL(triggered()), this, SLOT(seekForward())); + seekForwardAction->setEnabled(false); + + KAction* jumpForwardAction = actionCollection()->addAction("jumpforward"); + jumpForwardAction->setText(i18n("Jump Forward")); + jumpForwardAction->setShortcut(Qt::Key_Up); + jumpForwardAction->setIcon(KIcon("media-skip-forward")); + connect(jumpForwardAction, SIGNAL(triggered()), this, SLOT(jumpForward())); + jumpForwardAction->setEnabled(false); + + KAction* seekBackwardAction = actionCollection()->addAction("seekbackward"); + seekBackwardAction->setText(i18n("Seek Backward")); + seekBackwardAction->setIcon(KIcon("media-seek-backward")); + seekBackwardAction->setShortcut(Qt::Key_Left); + connect(seekBackwardAction, SIGNAL(triggered()), this, SLOT(seekBackward())); + seekBackwardAction->setEnabled(false); + + KAction* jumpBackwardAction = actionCollection()->addAction("jumpbackward"); + jumpBackwardAction->setText(i18n("Jump Backward")); + jumpBackwardAction->setShortcut(Qt::Key_Down); + jumpBackwardAction->setIcon(KIcon("media-skip-backward")); + connect(jumpBackwardAction, SIGNAL(triggered()), this, SLOT(jumpBackward())); + jumpBackwardAction->setEnabled(false); + + KAction* skipForwardAction = actionCollection()->addAction("skipforward"); + skipForwardAction->setText(i18n("Playlist Skip Forward")); + skipForwardAction->setIcon(KIcon("media-skip-forward")); + skipForwardAction->setShortcut(KShortcut(Qt::Key_PageDown, Qt::Key_MediaNext)); + connect(skipForwardAction, SIGNAL(triggered()), this, SLOT(skipForward())); + skipForwardAction->setEnabled(false); + + KAction* skipBackwardAction = actionCollection()->addAction("skipbackward"); + skipBackwardAction->setText(i18n("Playlist Skip Backward")); + skipBackwardAction->setIcon(KIcon("media-skip-backward")); + skipBackwardAction->setShortcut(KShortcut(Qt::Key_PageUp, Qt::Key_MediaPrevious)); + connect(skipBackwardAction, SIGNAL(triggered()), this, SLOT(skipBackward())); + skipBackwardAction->setEnabled(false); + + KAction* repeatAction = actionCollection()->addAction("repeatAction"); + repeatAction->setText(i18n("Repeat")); + repeatAction->setIcon(KIcon("view-refresh")); + repeatAction->setCheckable(true); + repeatAction->setChecked(KConfigGroup(KGlobal::config(), "PlayingOptions") + .readEntry("Repeat", false)); + + //Video menu + QActionGroup *aspectGroup = new QActionGroup(this); + connect(aspectGroup, SIGNAL(triggered(QAction *)), this, SLOT(aspectChanged(QAction *))); + aspectGroup->setExclusive(true); + + QAction* aspectActionAuto = actionCollection()->addAction("aspectActionAuto"); + aspectActionAuto->setText(i18n("Auto")); + aspectActionAuto->setCheckable(true); + aspectActionAuto->setChecked(true); + aspectGroup->addAction(aspectActionAuto); + + QAction* aspectActionScale = actionCollection()->addAction("aspectActionScale"); + aspectActionScale->setText(i18n("Scale")); + aspectActionScale->setCheckable(true); + aspectGroup->addAction(aspectActionScale); + + QAction* aspectAction16_9 = actionCollection()->addAction("aspectAction16_9"); + aspectAction16_9->setText(i18n("16/9")); + aspectAction16_9->setCheckable(true); + aspectGroup->addAction(aspectAction16_9); + + QAction* aspectAction4_3 = actionCollection()->addAction("aspectAction4_3"); + aspectAction4_3->setText(i18n("4/3")); + aspectAction4_3->setCheckable(true); + aspectGroup->addAction(aspectAction4_3); + + QActionGroup *scaleGroup = new QActionGroup(this); + connect(scaleGroup, SIGNAL(triggered(QAction *)), this, SLOT(scaleChanged(QAction *))); + scaleGroup->setExclusive(true); + + QAction* scaleActionFit = actionCollection()->addAction("scaleActionFit"); + scaleActionFit->setText(i18n("Fit in view")); + scaleActionFit->setCheckable(true); + scaleActionFit->setChecked(true); + scaleGroup->addAction(scaleActionFit); + + QAction* scaleActionCrop = actionCollection()->addAction("scaleActionCrop"); + scaleActionCrop->setText(i18n("Scale and crop")); + scaleActionCrop->setCheckable(true); + scaleGroup->addAction(scaleActionCrop); + + //Video submenus only for DVD + titleGroup = new QActionGroup(this); + titleCount = 0; + connect(titleGroup, SIGNAL(triggered(QAction*)), this, SLOT(changeTitle(QAction*))); + connect(mediaController, SIGNAL(availableTitlesChanged(int)), + this, SLOT(titleCountChanged(int))); + connect(mediaController, SIGNAL(titleChanged(int)), this, SLOT(updateTitleMenu())); + + chapterGroup = new QActionGroup(this); + chapterCount = 0; + connect(chapterGroup, SIGNAL(triggered(QAction*)), this, SLOT(changeChapter(QAction*))); + connect(mediaController, SIGNAL(availableChaptersChanged(int)), + this, SLOT(chapterCountChanged(int))); + connect(mediaController, SIGNAL(chapterChanged(int)), this, SLOT(updateChapterMenu())); + + angleGroup = new QActionGroup(this); + angleCount = 0; + connect(angleGroup, SIGNAL(triggered(QAction*)), this, SLOT(changeAngle(QAction*))); + connect(mediaController, SIGNAL(availableAnglesChanged(int)), + this, SLOT(angleCountChanged(int))); + connect(mediaController, SIGNAL(angleChanged(int)), this, SLOT(updateAngleMenu())); + + //Audio menu + KAction* muteAction = actionCollection()->addAction("mute"); + muteAction->setText(i18n("Mute")); + muteAction->setIcon(KIcon("audio-volume-medium")); + muteAction->setShortcut(KShortcut(Qt::Key_M, Qt::Key_VolumeMute)); + connect(muteAction, SIGNAL(triggered(bool)), this, SLOT(toggleMuted())); + connect(audioOutput, SIGNAL(mutedChanged(bool)), this, SLOT(mutedChanged(bool))); + + KAction* increaseVolumeAction = actionCollection()->addAction("increasevolume"); + increaseVolumeAction->setText(i18n("Increase Volume")); + increaseVolumeAction->setIcon(KIcon("audio-volume-high")); + increaseVolumeAction->setShortcut(KShortcut(Qt::Key_Plus, Qt::Key_VolumeUp)); + connect(increaseVolumeAction, SIGNAL(triggered()), this, SLOT(increaseVolume())); + + KAction* decreaseVolumeAction = actionCollection()->addAction("decreasevolume"); + decreaseVolumeAction->setText(i18n("Decrease Volume")); + decreaseVolumeAction->setIcon(KIcon("audio-volume-low")); + decreaseVolumeAction->setShortcut(KShortcut(Qt::Key_Minus, Qt::Key_VolumeDown)); + connect(decreaseVolumeAction, SIGNAL(triggered()), this, SLOT(decreaseVolume())); + + //Settings menu + KAction* playListAction = actionCollection()->addAction("playListAction"); + playListAction->setText(i18n("Playlist")); + playListAction->setIcon(KIcon("view-media-playlist")); + playListAction->setShortcut(Qt::Key_F9); + connect(playListAction, SIGNAL(triggered()), m_playlistDock->toggleViewAction(), SLOT(trigger())); + + KAction* toggleViewModeAction = actionCollection()->addAction("toggleViewMode"); + toggleViewModeAction->setText(i18n("Minimal View")); + toggleViewModeAction->setShortcut(Qt::Key_F3); + toggleViewModeAction->setCheckable(true); + toggleViewModeAction->setChecked(KConfigGroup(KGlobal::config(), "GUIOptions") + .readEntry("ViewMode", false)); + connect(toggleViewModeAction, SIGNAL(triggered()),this, SLOT(toggleViewMode())); + + KToggleFullScreenAction* toggleFullScreen = new KToggleFullScreenAction(this); + toggleFullScreen->setShortcut(Qt::Key_F); + actionCollection()->addAction("fullscreen", toggleFullScreen); + connect(toggleFullScreen, SIGNAL(toggled(bool)), MainWindow::window(), SLOT(fullscreen(bool))); + + KStandardAction::preferences(this, SLOT(showSettings()), actionCollection()); + + //KStandardAction::showMenubar(this, SLOT(showMenuBar()), actionCollection()); + + //Phonon sliders + Phonon::VolumeSlider *volumeSlider = new Phonon::VolumeSlider; + volumeSlider->setAudioOutput(audioOutput); + //volumeSlider->setFixedWidth(80); + volumeSlider->setMaximumWidth(80); + //volumeSlider->setMuteVisible(0); + KAction* volume = actionCollection()->addAction("volumeslider"); + volume->setText(i18n("Volume slider")); + volume->setDefaultWidget(volumeSlider); + + Phonon::SeekSlider *seekSlider = new Phonon::SeekSlider; + seekSlider->setMediaObject(mediaObject); + seekSlider->setIconVisible(0); + KAction* positionSlider = actionCollection()->addAction("positionslider"); + positionSlider->setText(i18n("Position slider")); + positionSlider->setDefaultWidget(seekSlider); + + KAction* reloadThemeAction = actionCollection()->addAction("reloadThemeAction"); + reloadThemeAction->setText(i18n("Reload Theme (for theme development)")); + reloadThemeAction->setIcon(KIcon("fill-color")); + connect(reloadThemeAction, SIGNAL(triggered()), this, SLOT(reloadTheme())); +} + +void MainWindow::setupFullScreenToolBar() +{ + QToolButton *fullscreenButton = new QToolButton(m_videoWidget->fullScreenBar); + fullscreenButton->setIcon(KIcon("view-restore")); + fullscreenButton->setIconSize(QSize(22, 22)); + connect(fullscreenButton, SIGNAL(pressed()), this, SLOT(toggleFullscreen())); + + playPauseButton = new QToolButton(m_videoWidget->fullScreenBar); + playPauseButton->setIcon(KIcon("media-playback-start")); + playPauseButton->setIconSize(QSize(48, 48)); + connect(playPauseButton, SIGNAL(pressed()), this, SLOT(playPause())); + + QToolButton *jumpBackwardButton = new QToolButton(m_videoWidget->fullScreenBar); + jumpBackwardButton->setIcon(KIcon("media-skip-backward")); + jumpBackwardButton->setIconSize(QSize(36, 36)); + connect(jumpBackwardButton, SIGNAL(pressed()), this, SLOT(jumpBackward())); + + QToolButton *seekBackwardButton = new QToolButton(m_videoWidget->fullScreenBar); + seekBackwardButton->setIcon(KIcon("media-seek-backward")); + seekBackwardButton->setIconSize(QSize(36, 36)); + connect(seekBackwardButton, SIGNAL(pressed()), this, SLOT(seekBackward())); + + QToolButton *seekForwardButton = new QToolButton(m_videoWidget->fullScreenBar); + seekForwardButton->setIcon(KIcon("media-seek-forward")); + seekForwardButton->setIconSize(QSize(36, 36)); + connect(seekForwardButton, SIGNAL(pressed()), this, SLOT(seekForward())); + + QToolButton *jumpForwardButton = new QToolButton(m_videoWidget->fullScreenBar); + jumpForwardButton->setIcon(KIcon("media-skip-forward")); + jumpForwardButton->setIconSize(QSize(36, 36)); + connect(jumpForwardButton, SIGNAL(pressed()), this, SLOT(jumpForward())); + + muteButton = new QToolButton(m_videoWidget->fullScreenBar); + //muteButton->setIcon(KIcon("player-volume")); + muteButton->setIcon(KIcon("audio-volume-medium")); + muteButton->setIconSize(QSize(22, 22)); + connect(muteButton, SIGNAL(pressed()), this, SLOT(toggleMuted())); + + Phonon::SeekSlider *seekSlider = new Phonon::SeekSlider(m_videoWidget->fullScreenBar); + seekSlider->setMediaObject(mediaObject); + seekSlider->setIconVisible(0); + + volumeSlider = new QSlider(m_videoWidget->fullScreenBar); + volumeSlider->setFocusPolicy(Qt::NoFocus); + volumeSlider->setOrientation(Qt::Horizontal); + volumeSlider->setRange(0, 100); + volumeSlider->setFixedWidth(80); + volumeSlider->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); + connect(volumeSlider, SIGNAL(valueChanged(int)), this, SLOT(changeVolume(int))); + connect(audioOutput, SIGNAL(volumeChanged(qreal)), this, SLOT(volumeChanged(qreal))); + + m_timeLabelFullScreenBar = new TimeLabel(m_videoWidget->fullScreenBar); + m_timeLabelFullScreenBar->setObjectName("fullscreenbarTimeLabel"); + connect(mediaObject, SIGNAL(tick(qint64)), m_timeLabelFullScreenBar, SLOT(setCurrentTime(qint64))); + connect(mediaObject, SIGNAL(totalTimeChanged(qint64)), m_timeLabelFullScreenBar, SLOT(setTotalTime(qint64))); + + m_titleLabelFullScreenBar = new TitleLabel(m_videoWidget->fullScreenBar); + + QHBoxLayout *sliderLayout = new QHBoxLayout; + sliderLayout->setSpacing(0); + sliderLayout->setMargin(0); + sliderLayout->insertSpacing(0, 15); + sliderLayout->addWidget(seekSlider); + sliderLayout->insertSpacing(-1, 15); + + QWidget *sliderBox = new QWidget; + sliderBox->setLayout(sliderLayout); + + QHBoxLayout *buttonLayout = new QHBoxLayout; + buttonLayout->setSpacing(0); + buttonLayout->setMargin(0); + buttonLayout->insertSpacing(0, 15); + buttonLayout->addWidget(fullscreenButton); + buttonLayout->addWidget(m_titleLabelFullScreenBar); + buttonLayout->addWidget(jumpBackwardButton); + buttonLayout->addWidget(seekBackwardButton); + buttonLayout->addWidget(playPauseButton); + buttonLayout->addWidget(seekForwardButton); + buttonLayout->addWidget(jumpForwardButton); + buttonLayout->addWidget(m_timeLabelFullScreenBar); + buttonLayout->addWidget(muteButton); + buttonLayout->addWidget(volumeSlider); + buttonLayout->insertSpacing(-1, 15); + + QWidget *buttonBox = new QWidget; + buttonBox->setLayout(buttonLayout); + + QVBoxLayout *toolLayout = new QVBoxLayout; + toolLayout->setSpacing(0); + toolLayout->setMargin(10); + toolLayout->addWidget(buttonBox); + toolLayout->addWidget(sliderBox); + + QWidget *toolBox = new QWidget; + toolBox->setObjectName("fullscreenbarlayout"); + toolBox->setLayout(toolLayout); + m_videoWidget->fullScreenBar->addWidget(toolBox); + + m_videoWidget->fullScreenBar->hide(); +} + +///////////////////////////////////////////////////// +///Add files +//////////////////////////////////////////////////// +KCmdLineOptions MainWindow::cmdLineOptions() +{ + KCmdLineOptions options; + options.add("dvd", ki18n("Play DVD")); + options.add("add", ki18n("Add Files or URLs to playlist")); + options.add("+[file]", ki18n("Open Files or URLs to play")); + return options; +} + +void MainWindow::parseArgs() +{ + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + + if (args->isSet("dvd")) { + playDVD(); + args->clear(); + return; + } + + if (args->count() > 0) { + QList urls; + + for (int i = 0; i < args->count(); ++i) { + KUrl url = args->url(i); + + if (url.isValid()) { + urls.append(url); + } + } + if (!urls.isEmpty()) { + if (args->isSet("add")) { + addUrls(urls); + } else { + openUrls(urls); + } + } + } + args->clear(); +} + +void MainWindow::openFile() +{ + //FIXME ->some backends don't return all useable mimetypes + //QStringList mimeTypes = Phonon::BackendCapabilities::availableMimeTypes(); + + if (Settings::alwaysEnqueue()) { + addFile(); + return; + } + + QStringList mimeTypes; + + KMimeType::List mimeList = KMimeType::allMimeTypes(); + + Q_FOREACH(KMimeType::Ptr mime, mimeList) { + if (mime->name().startsWith("video/")) { + mimeTypes << mime->name(); + } + } + + QList urls = KFileDialog::getOpenUrls(KUrl("kfiledialog:///loopy") + , mimeTypes.join(" ") + , this + , i18n("Select file(s) to play")); + + if (!urls.isEmpty()) { + openUrls(urls); + } +} + +void MainWindow::addFile() +{ + //FIXME + //QStringList mimeTypes = Phonon::BackendCapabilities::availableMimeTypes(); + + QStringList mimeTypes; + + KMimeType::List mimeList = KMimeType::allMimeTypes(); + + Q_FOREACH(KMimeType::Ptr mime, mimeList) { + if (mime->name().startsWith("video/")) { + mimeTypes << mime->name(); + } + } + + QList urls = KFileDialog::getOpenUrls(KUrl("kfiledialog:///loopy") + , mimeTypes.join(" ") + , this + , i18n("Add file(s) to playlist")); + + if (!urls.isEmpty()) { + addUrls(urls); + } +} + +void MainWindow::openUrl() +{ + openUrl(KInputDialog::getText(i18n("Open URL"), i18n("Enter a URL:"))); +} + +void MainWindow::openUrls(const QList &urls) +{ + if (urls.isEmpty()) { + return; + } + if (Settings::alwaysEnqueue()) { + addUrls(urls); + return; + } + m_playlistDock->deleteAll(); + mediaObject->clearQueue(); + + Q_FOREACH(const KUrl &url, urls) { + + Phonon::MediaSource source(url); + + QString title; + title = source.url().toString(); + title = (title.right(title.length() - title.lastIndexOf('/') - 1)); + + QListWidgetItem *titleItem = new QListWidgetItem(title); + titleItem->setIcon(KIcon("media-playback-start")); + int currentRow = m_playlistDock->visiblePlayList->count(); + m_playlistDock->visiblePlayList->insertItem(currentRow, titleItem); + + hiddenPlayList.append(source); + } + mediaObject->setCurrentSource(hiddenPlayList.at(0)); + mediaObject->play(); +} + +void MainWindow::addUrls(const QList &urls) +{ + if (urls.isEmpty()) { + return; + } + + Q_FOREACH(const KUrl &url, urls) { + + Phonon::MediaSource source(url); + + QString title; + title = source.url().toString(); + title = (title.right(title.length() - title.lastIndexOf('/') - 1)); + + QListWidgetItem *titleItem = new QListWidgetItem(title); + titleItem->setIcon(KIcon("media-playback-start")); + int currentRow = m_playlistDock->visiblePlayList->count(); + m_playlistDock->visiblePlayList->insertItem(currentRow, titleItem); + + hiddenPlayList.append(source); + } + + if (!hiddenPlayList.isEmpty() && mediaObject->state() != Phonon::PlayingState) { + mediaObject->setCurrentSource(hiddenPlayList.at(0)); + mediaObject->play(); + } +} + +void MainWindow::openUrl(const KUrl &url) +{ + if (!url.isValid()) { + return; + } + + if (Settings::alwaysEnqueue()) { + QList urls; + urls.append(url); + addUrls(urls); + return; + } + + m_playlistDock->deleteAll(); + mediaObject->clearQueue(); + + Phonon::MediaSource source(url); + QString title; + title = source.url().toString(); + title = (title.right(title.length() - title.lastIndexOf('/') - 1)); + + QListWidgetItem *titleItem = new QListWidgetItem(title); + titleItem->setIcon(KIcon("media-playback-start")); + int currentRow = m_playlistDock->visiblePlayList->count(); + m_playlistDock->visiblePlayList->insertItem(currentRow, titleItem); + + hiddenPlayList.append(source); + mediaObject->setCurrentSource(hiddenPlayList.at(0)); + mediaObject->play(); +} + +void MainWindow::playDVD() +{ + m_playlistDock->deleteAll(); + mediaObject->clearQueue(); + + QList devices = + Solid::Device::listFromQuery("OpticalDisc.availableContent & 'VideoDvd'"); + QString deviceName; + + if (!devices.isEmpty()) { + Solid::Block *block = devices.first().as(); + + if (block != NULL) { + deviceName = block->device(); + } + } + + Phonon::MediaSource source(Phonon::Dvd, deviceName); + //FIXME ->maybe it's better not to show this at the playlist, + //instead show the DVD titles ? Overkill ??? + QString title; + title = "DVD"; + + QListWidgetItem *titleItem = new QListWidgetItem(title); + titleItem->setIcon(KIcon("media-playback-start")); + int currentRow = m_playlistDock->visiblePlayList->count(); + m_playlistDock->visiblePlayList->insertItem(currentRow, titleItem); + + hiddenPlayList.append(source); + + mediaObject->setCurrentSource(hiddenPlayList.at(0)); + mediaObject->play(); + +} + +///////////////////////////////////////////////////// +///Toggle MenuBar (NOT USED !) +//////////////////////////////////////////////////// +void MainWindow::showMenuBar() +{ + menuBar()->setVisible(action("options_show_menubar")->isChecked()); +} + +///////////////////////////////////////////////////// +///Toggle MinimalMode +//////////////////////////////////////////////////// +void MainWindow::toggleViewMode() +{ + if (action("toggleViewMode")->isChecked()) { + KMessageBox::information(this, i18n("You get back to normal view with the F3 key."), "", "ViewModeMessage"); + menuBar()->setHidden(true); + toolBar("mainToolBar")->setHidden(true); + statusBar()->setHidden(true); + } + else { + menuBar()->setVisible(true); + toolBar("mainToolBar")->setVisible(true); + statusBar()->setVisible(true); + } +} + +///////////////////////////////////////////////////// +///Fullscreen +//////////////////////////////////////////////////// +void MainWindow::fullscreen(bool isFullScreen) +{ + window()->setWindowState((isFullScreen ? Qt::WindowFullScreen : Qt::WindowNoState)); + + if (isFullScreen) { + menuBar()->setHidden(true); + toolBar("mainToolBar")->setHidden(true); + statusBar()->setHidden(true); + + isPlayListDock = m_playlistDock->toggleViewAction()->isChecked(); + m_playlistDock->setHidden(true); + + disableScreenSaverTimer->start(30000); + m_videoWidget->fullScreenPlaylist->addWidget(m_playlistDock->widget); + m_playlistDock->toolbar->setIconSize(QSize(22,22)); + kapp->installEventFilter(m_toolTipEater); + action("toggleViewMode")->setDisabled(true); + } + else { + if (action("toggleViewMode")->isChecked()) { + menuBar()->setHidden(true); + toolBar("mainToolBar")->setHidden(true); + statusBar()->setHidden(true); + } + else { + menuBar()->setVisible(true); + toolBar("mainToolBar")->setVisible(true); + statusBar()->setVisible(true); + } + + m_playlistDock->setVisible(isPlayListDock); + + disableScreenSaverTimer->stop(); + + m_playlistDock->setWidget(m_playlistDock->widget); + m_playlistDock->toolbar->setIconSize(QSize(16, 16)); + kapp->removeEventFilter(m_toolTipEater); + action("toggleViewMode")->setDisabled(false); + } +} + +void MainWindow::toggleFullscreen() +{ + action("fullscreen")->toggle(); +} + +///////////////////////////////////////////////////// +///Disable ScreenSaver +//////////////////////////////////////////////////// +void MainWindow::disableScreenSaver() +{ + QDBusInterface interface("org.freedesktop.ScreenSaver", "/ScreenSaver"); + interface.call(QDBus::NoBlock, "SimulateUserActivity"); +} + +///////////////////////////////////////////////////// +///Load Stylesheet +//////////////////////////////////////////////////// +void MainWindow::loadStyleSheet(QString themeName) +{ + //kapp->setStyle("Plastique"); + //setWindowFlags(Qt::FramelessWindowHint); + + QString themeDir = KStandardDirs::locate("appdata", "themes/" + themeName + "/"); + if (themeDir.isEmpty()) { + qDebug() << "Loopy: Theme: Couldn't find theme" << themeName; + kapp->setStyleSheet(""); + return; + } + QString styleSheetPath = themeDir + "style.qss"; + QFile file(styleSheetPath); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qDebug() << "Loopy: Theme: Couldn't open" << styleSheetPath; + kapp->setStyleSheet(""); + return; + } + QString styleSheet = QLatin1String(file.readAll()); + styleSheet = styleSheet.replace("$themeDir", themeDir); + kapp->setStyleSheet(styleSheet); + qDebug() << "Loopy: Theme: " << themeName; +} + +void MainWindow::reloadTheme() +{ + loadStyleSheet(Settings::theme()); +} + +///////////////////////////////////////////////////// +///Trayicon +//////////////////////////////////////////////////// +void MainWindow::createTrayIcon() +{ + //FIXME ->Save windowstate + m_trayIcon = new KSystemTrayIcon(this); + m_trayIcon->setIcon(KIcon("applications-multimedia")); + m_trayIcon->contextMenu()->addAction(action("pause")); + m_trayIcon->contextMenu()->addAction(action("seekforward")); + m_trayIcon->contextMenu()->addAction(action("seekbackward")); + m_trayIcon->contextMenu()->addAction(action("skipforward")); + m_trayIcon->contextMenu()->addAction(action("skipbackward")); + m_trayIcon->contextMenu()->addSeparator(); + m_trayIcon->contextMenu()->addAction(action("file_open")); + m_trayIcon->contextMenu()->addSeparator(); + m_trayIcon->contextMenu()->addAction(action("toggleViewMode")); + m_trayIcon->contextMenu()->addAction(action("playListAction")); + m_trayIcon->contextMenu()->addSeparator(); + m_trayIcon->contextMenu()->addAction(action("options_configure")); + + connect(m_trayIcon, SIGNAL(quitSelected()), this, SLOT(close())); + m_trayIcon->setVisible(Settings::trayIcon()); +} + +///////////////////////////////////////////////////// +///Player controls +//////////////////////////////////////////////////// +void MainWindow::playPause() +{ + if (mediaObject->state() == Phonon::PlayingState) { + mediaObject->pause(); + } + else { + if (mediaObject->currentTime() == mediaObject->totalTime()) { + mediaObject->seek(0); + } + mediaObject->play(); + } +} + +void MainWindow::seekForward() +{ + const qint64 new_pos = mediaObject->currentTime() + Settings::buttonSeek() * 1000 ; + if (new_pos > 0) { + mediaObject->seek(new_pos); + } +} + +void MainWindow::jumpForward() +{ + const qint64 new_pos = mediaObject->currentTime() + Settings::buttonJump() * 1000 ; + if (new_pos > 0) { + mediaObject->seek(new_pos); + } +} + +void MainWindow::mouseWheelSeekForward() +{ + const qint64 new_pos = mediaObject->currentTime() + Settings::mouseWheelSeek() * 1000 ; + if (new_pos > 0) { + mediaObject->seek(new_pos); + } +} + +void MainWindow::seekBackward() +{ + const qint64 new_pos = mediaObject->currentTime() - Settings::buttonSeek() * 1000 ; + if (new_pos > 0) { + mediaObject->seek(new_pos); + } +} + +void MainWindow::jumpBackward() +{ + const qint64 new_pos = mediaObject->currentTime() - Settings::buttonJump() * 1000 ; + if (new_pos > 0) { + mediaObject->seek(new_pos); + } +} + +void MainWindow::mouseWheelSeekBackward() +{ + const qint64 new_pos = mediaObject->currentTime() - Settings::mouseWheelSeek() * 1000 ; + if (new_pos > 0) { + mediaObject->seek(new_pos); + } +} + +void MainWindow::skipForward() +{ + int index = hiddenPlayList.indexOf(mediaObject->currentSource()) + 1; + if (hiddenPlayList.size() > index) { + mediaObject->setCurrentSource(hiddenPlayList.at(index)); + mediaObject->play(); + } +} + +void MainWindow::skipBackward() +{ + int index = hiddenPlayList.indexOf(mediaObject->currentSource()) - 1; + if (index >= 0) { + mediaObject->setCurrentSource(hiddenPlayList.at(index)); + mediaObject->play(); + } +} + +///////////////////////////////////////////////////// +///Audio settings +//////////////////////////////////////////////////// +void MainWindow::toggleMuted() +{ + audioOutput->setMuted(!audioOutput->isMuted()); +} + +void MainWindow::mutedChanged(bool muted) +{ + if (muted) { + action("mute")->setIcon(KIcon("audio-volume-muted")); + action("mute")->setText(i18n("Unmute")); + muteButton->setIcon(KIcon("audio-volume-muted")); + } else { + action("mute")->setIcon(KIcon("audio-volume-medium")); + action("mute")->setText(i18n("Mute")); + muteButton->setIcon(KIcon("audio-volume-medium")); + } +} + +void MainWindow::increaseVolume() +{ + if (audioOutput->volume() < 1) + audioOutput->setVolume(audioOutput->volume() + qreal(0.05)); +} + +void MainWindow::decreaseVolume() +{ + if (audioOutput->volume() > 0) + audioOutput->setVolume(audioOutput->volume() - qreal(0.05)); +} + +void MainWindow::changeVolume(int volume) +{ + audioOutput->setVolume(volume * qreal(0.01)); +} + +void MainWindow::volumeChanged(qreal volume) +{ + int percentage = volume * 100 + qreal(0.5); + volumeSlider->setValue(percentage); +} + +///////////////////////////////////////////////////// +///Video settings +//////////////////////////////////////////////////// +void MainWindow::aspectChanged(QAction *act) +{ + if (act->objectName() == "aspectAction16_9") + m_videoWidget->setAspectRatio(Phonon::VideoWidget::AspectRatio16_9); + else if (act->objectName() == "aspectActionScale") + m_videoWidget->setAspectRatio(Phonon::VideoWidget::AspectRatioWidget); + else if (act->objectName() == "aspectAction4_3") + m_videoWidget->setAspectRatio(Phonon::VideoWidget::AspectRatio4_3); + else + m_videoWidget->setAspectRatio(Phonon::VideoWidget::AspectRatioAuto); +} + +void MainWindow::scaleChanged(QAction *act) +{ + if (act->objectName() == "scaleActionCrop") + m_videoWidget->setScaleMode(Phonon::VideoWidget::ScaleAndCrop); + else + m_videoWidget->setScaleMode(Phonon::VideoWidget::FitInView); +} + +void MainWindow::resizeToVideo() +{ + if (!isFullScreen() && !isMaximized() && Settings::autoResizeToVideo()) { + resize(size() - centralWidget()->size() + m_videoWidget->sizeHint()); + } +} + +///////////////////////////////////////////////////// +///Media state +//////////////////////////////////////////////////// +void MainWindow::mediaStateChanged(Phonon::State newState, Phonon::State /* oldState */) +{ + m_videoWidget->setVisible(mediaObject->hasVideo()); + m_infoLabel->setVisible(!mediaObject->hasVideo()); + + switch (newState) { + case Phonon::ErrorState: + qDebug() << "Loopy: MediaState:" << mediaObject->errorString(); + KMessageBox::error(this, mediaObject->errorString(), "Phonon"); + break; + case Phonon::PlayingState: + qDebug() << "Loopy: MediaState: Playing"; + resizeToVideo(); + action("pause")->setIcon(KIcon("media-playback-pause")); + action("pause")->setText(i18n("Pause")); + playPauseButton->setIcon(KIcon("media-playback-pause"));//fullscreenbar + action("pause")->setEnabled(true); + action("seekforward")->setEnabled(true); + action("seekbackward")->setEnabled(true); + action("jumpforward")->setEnabled(true); + action("jumpbackward")->setEnabled(true); + action("skipforward")->setEnabled(true); + action("skipbackward")->setEnabled(true); + break; + case Phonon::PausedState: + qDebug() << "Loopy: MediaState: Paused"; + action("pause")->setEnabled(true); + action("pause")->setIcon(KIcon("media-playback-start")); + action("pause")->setText(i18n("Play")); + playPauseButton->setIcon(KIcon("media-playback-start")); + break; + case Phonon::StoppedState: + qDebug() << "Loopy: MediaState: Stopped"; + action("pause")->setEnabled(true); + action("pause")->setIcon(KIcon("media-playback-start")); + action("pause")->setText(i18n("Play")); + playPauseButton->setIcon(KIcon("media-playback-start")); + /*if (!action("repeatAction")->isChecked()) { + m_videoWidget->setVisible(false); + m_infoLabel->setVisible(true); + }*/ + break; + case Phonon::BufferingState: + qDebug() << "Loopy: MediaState: Buffering"; + break; + default: + ; + } +} + +void MainWindow::updateCaption() +{ + QString mediatitle; + QStringList strings = mediaObject->metaData(Phonon::TitleMetaData); + + if (!strings.isEmpty() && !strings.at(0).isEmpty()) { + mediatitle = strings.at(0); + } + else { + mediatitle = KUrl(mediaObject->currentSource().url()).fileName(); + } + setCaption(mediatitle); + m_titleLabelFullScreenBar->setText(mediatitle); + m_trayIcon->setToolTip(mediatitle); +} + +void MainWindow::sourceChanged(const Phonon::MediaSource &source)//File changed +{ + if (!source.url().isEmpty()) { + qDebug() << "Loopy: Source changed" << source.url(); + m_playlistDock->visiblePlayList->setCurrentRow(hiddenPlayList.indexOf(source)); + m_playlistDock->visiblePlayList->currentItem()->setIcon(KIcon("task-complete")); + actionOpenRecent->addUrl(source.url()); + updateCaption(); + } +} + +void MainWindow::aboutToFinish()//Enqueue file +{ + qDebug() << "Loopy: About to Finish"; + int index = hiddenPlayList.indexOf(mediaObject->currentSource()) + 1; + if (hiddenPlayList.size() > index) { + mediaObject->enqueue(hiddenPlayList.at(index)); + } + else if (hiddenPlayList.size() >= 2 && action("repeatAction")->isChecked()) { + mediaObject->enqueue(hiddenPlayList.at(0)); + mediaObject->play(); + } +} + +void MainWindow::finished()//Repeat file/playlist +{ + qDebug() << "Loopy: Finished"; + if (hiddenPlayList.size() <= 1 && action("repeatAction")->isChecked()) { + mediaObject->seek(0); + mediaObject->play(); + } +} + +///////////////////////////////////////////////////// +///DVD +//////////////////////////////////////////////////// +void MainWindow::titleCountChanged(int count) +{ + titleCount = count; + updateTitleMenu(); +} + +void MainWindow::updateTitleMenu() +{ + QMenu *titleMenu = static_cast(guiFactory()->container("titlemenu", this)); + + if (titleCount > 1) { + QList actions = titleGroup->actions(); + + if (actions.count() < titleCount) { + for (int i = actions.count(); i < titleCount; ++i) { + QAction *action = titleGroup->addAction(QString::number(i + 1)); + action->setCheckable(true); + titleMenu->addAction(action); + } + } + else if (actions.count() > titleCount) { + for (int i = actions.count(); i > titleCount; --i) { + delete actions.at(i - 1); + } + } + + int current = mediaController->currentTitle() - 1; + + if ((current >= 0) && (current < titleCount)) { + titleGroup->actions().at(current)->setChecked(true); + } + titleMenu->setEnabled(true); + } + else { + titleMenu->setEnabled(false); + } +} + +void MainWindow::changeTitle(QAction *action) +{ + mediaController->setCurrentTitle(titleGroup->actions().indexOf(action) + 1); +} + +void MainWindow::chapterCountChanged(int count) +{ + chapterCount = count; + updateChapterMenu(); +} + +void MainWindow::updateChapterMenu() +{ + QMenu *chapterMenu = static_cast(guiFactory()->container("chaptermenu", this)); + + if (chapterCount > 1) { + QList actions = chapterGroup->actions(); + + if (actions.count() < chapterCount) { + for (int i = actions.count(); i < chapterCount; ++i) { + QAction *action = chapterGroup->addAction(QString::number(i + 1)); + action->setCheckable(true); + chapterMenu->addAction(action); + } + } + else if (actions.count() > chapterCount) { + for (int i = actions.count(); i > chapterCount; --i) { + delete actions.at(i - 1); + } + } + + int current = mediaController->currentChapter() - 1; + + if ((current >= 0) && (current < chapterCount)) { + chapterGroup->actions().at(current)->setChecked(true); + } + chapterMenu->setEnabled(true); + } + else { + chapterMenu->setEnabled(false); + } +} + +void MainWindow::changeChapter(QAction *action) +{ + mediaController->setCurrentChapter(chapterGroup->actions().indexOf(action) + 1); +} + +void MainWindow::angleCountChanged(int count) +{ + angleCount = count; + updateAngleMenu(); +} + +void MainWindow::updateAngleMenu() +{ + QMenu *angleMenu = static_cast(guiFactory()->container("anglemenu", this)); + + if (angleCount > 1) { + QList actions = angleGroup->actions(); + + if (actions.count() < angleCount) { + for (int i = actions.count(); i < angleCount; ++i) { + QAction *action = angleGroup->addAction(QString::number(i + 1)); + action->setCheckable(true); + angleMenu->addAction(action); + } + } + else if (actions.count() > angleCount) { + for (int i = actions.count(); i > angleCount; --i) { + delete actions.at(i - 1); + } + } + + int current = mediaController->currentAngle() - 1; + + if ((current >= 0) && (current < angleCount)) { + angleGroup->actions().at(current)->setChecked(true); + } + angleMenu->setEnabled(true); + } + else { + angleMenu->setEnabled(false); + } +} + +void MainWindow::changeAngle(QAction *action) +{ + mediaController->setCurrentAngle(angleGroup->actions().indexOf(action) + 1); +} diff --git a/loopy/src/mainwindow.h b/loopy/src/mainwindow.h new file mode 100644 index 00000000..7e804680 --- /dev/null +++ b/loopy/src/mainwindow.h @@ -0,0 +1,171 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "videowidget.h" +#include "playlistdock.h" +#include "titlelabel.h" +#include "timelabel.h" +#include "infolabel.h" +#include "fullscreenbar.h" +#include "fullscreenplaylist.h" + +#include "tooltipeater.h" + +#include "settings.h" //generated by kconfig_compiler from loopy.kcfg + +class SeekingOptions; +class ThemeOptions; +class GeneralOptions; + +class MainWindow : public KXmlGuiWindow +{ + Q_OBJECT + +public: + MainWindow(); + ~MainWindow(); + + QList hiddenPlayList; + Phonon::MediaObject *mediaObject; + PlaylistDock *m_playlistDock; + +public slots: + static KCmdLineOptions cmdLineOptions(); + void openUrls(const QList &urls); + void addUrls(const QList &urls); + void parseArgs(); + void mouseWheelSeekForward(); + void mouseWheelSeekBackward(); + void toggleFullscreen(); + +private slots: + void playPause(); + void seekForward(); + void jumpForward(); + void skipForward(); + void seekBackward(); + void jumpBackward(); + void skipBackward(); + void toggleMuted(); + void mutedChanged(bool muted); + void changeVolume(int volume); + void volumeChanged(qreal volume); + void increaseVolume(); + void decreaseVolume(); + + void showMenuBar(); + void toggleViewMode(); + + void disableScreenSaver(); + void loadStyleSheet(QString themeName); + void reloadTheme(); + + void openFile(); + void addFile(); + void openUrl(); + void openUrl(const KUrl &url); + void playDVD(); + + void mediaStateChanged(Phonon::State newState, Phonon::State oldState); + void sourceChanged(const Phonon::MediaSource &source); + void aboutToFinish(); + void finished(); + void updateCaption(); + void updateTitleMenu();//DVD + void updateChapterMenu();//DVD + void updateAngleMenu();//DVD + void chapterCountChanged(int);//DVD + void titleCountChanged(int);//DVD + void changeTitle(QAction*);//DVD + void changeChapter(QAction*);//DVD + void changeAngle(QAction*);//DVD + void angleCountChanged(int);//DVD + + void scaleChanged(QAction *); + void aspectChanged(QAction *); + void resizeToVideo(); + + void fullscreen(bool isFullScreen); + + //-->options.cpp + void showSettings(); + void saveSettings(); + +private: + Phonon::AudioOutput *audioOutput; + Phonon::MediaController *mediaController; + + KSystemTrayIcon *m_trayIcon; + + VideoWidget *m_videoWidget; + + //PlaylistDock *m_playlistDock; + TitleLabel *m_titleLabelFullScreenBar; + TimeLabel *m_timeLabel; + TimeLabel *m_timeLabelFullScreenBar; + InfoLabel *m_infoLabel; + + SeekingOptions *m_seekingConfigDialog; + ThemeOptions *m_themeConfigDialog; + GeneralOptions *m_generalConfigDialog; + + ToolTipEater *m_toolTipEater; + + QTimer *disableScreenSaverTimer; + + QActionGroup *titleGroup;//DVD + QActionGroup *chapterGroup;//DVD + QActionGroup *angleGroup;//DVD + + QSlider *volumeSlider; + QToolButton *muteButton; + QToolButton *playPauseButton; + + KRecentFilesAction *actionOpenRecent; + + void setupActions(); + void setupFullScreenToolBar(); + void createTrayIcon(); + + bool isMainToolBar; + bool isPlayListDock; + int titleCount;//DVD + int chapterCount;//DVD + int angleCount;//DVD + +}; + +#endif diff --git a/loopy/src/options.cpp b/loopy/src/options.cpp new file mode 100644 index 00000000..205d8ec3 --- /dev/null +++ b/loopy/src/options.cpp @@ -0,0 +1,90 @@ +#include +#include + +#include "mainwindow.h" +#include "ui_themeoptions.h" +#include "ui_seekingoptions.h" +#include "ui_generaloptions.h" + +class SeekingOptions : public QWidget, public Ui::SeekingOptions +{ +public: + SeekingOptions(QWidget *parent = 0) : QWidget(parent) { + setupUi(this); + } +}; + +class ThemeOptions : public QWidget, public Ui::ThemeOptions +{ +public: + ThemeOptions(QWidget *parent = 0) : QWidget(parent) { + setupUi(this); + } +}; + +class GeneralOptions : public QWidget, public Ui::GeneralOptions +{ +public: + GeneralOptions(QWidget *parent = 0) : QWidget(parent) { + setupUi(this); + } +}; + +void MainWindow::showSettings() +{ + if (KConfigDialog::showDialog("settings")) + return; + + m_seekingConfigDialog = new SeekingOptions(); + m_themeConfigDialog = new ThemeOptions(); + m_generalConfigDialog = new GeneralOptions(); + + //Create a list of available themes + QStringList list; + const QStringList themeBaseDirs = KGlobal::mainComponent().dirs()->findDirs("appdata", "themes"); + Q_FOREACH(const QString& themeBaseDir, themeBaseDirs) { + QDir dir(themeBaseDir); + list += dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); + } + m_themeConfigDialog->kcfg_Theme->addItem(i18n("no theme")); + m_themeConfigDialog->kcfg_Theme->addItems(list); + + int row = list.indexOf(Settings::theme()); + m_themeConfigDialog->kcfg_Theme->setCurrentRow(row + 1); + + KConfigDialog *dialog = new KConfigDialog(this, "settings", Settings::self()); + dialog->addPage(m_generalConfigDialog, i18n("General"), "configure"); + dialog->addPage(m_themeConfigDialog, i18n("Theme"), "fill-color"); + dialog->addPage(m_seekingConfigDialog, i18n("Seeking"), "media-seek-forward"); + //dialog->setInitialSize(QSize(440, 390)); + connect(dialog, SIGNAL(settingsChanged(const QString &)), this, SLOT(saveSettings())); + + //If theme selection has changed enable KConfigDialog "Apply" + QObject::connect(m_themeConfigDialog->kcfg_Theme, SIGNAL(currentTextChanged(const QString&)), + dialog, SLOT(updateButtons())); + + dialog->show(); +} + +void MainWindow::saveSettings() +{ + //Tray icon + m_trayIcon->setVisible(m_generalConfigDialog->kcfg_TrayIcon->isChecked()); + + //Autoresize to videosize + if (!hiddenPlayList.isEmpty()) { + resizeToVideo(); + } + + //Theme + QString themeName = m_themeConfigDialog->kcfg_Theme->currentItem()->text(); + if (themeName.isEmpty() || themeName == i18n("no theme")) { + loadStyleSheet("none"); + return; + } + Settings::setTheme(themeName); + Settings::self()->writeConfig(); + loadStyleSheet("none");//clear current style + loadStyleSheet(themeName); +} + diff --git a/loopy/src/playlistdock.cpp b/loopy/src/playlistdock.cpp new file mode 100644 index 00000000..43d3a24d --- /dev/null +++ b/loopy/src/playlistdock.cpp @@ -0,0 +1,168 @@ +#include +#include +#include +#include + +#include +#include + +#include "playlistdock.h" +#include "mainwindow.h" + +PlaylistDock::PlaylistDock(MainWindow* parent) +{ + this->parent = parent; + setObjectName("playlistdock"); + setWindowTitle(i18n("Playlist")); + setAcceptDrops(true); + + QVBoxLayout *layout = new QVBoxLayout; + layout->setSpacing(0); + layout->setMargin(0); + + widget = new QWidget; + widget->setLayout(layout); + + visiblePlayList = new KListWidget(); + visiblePlayList->setAlternatingRowColors(true); + visiblePlayList->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + visiblePlayList->setObjectName("playlist"); + connect(visiblePlayList, SIGNAL(executed(QListWidgetItem *)), this, SLOT(playItem())); + + setupActions(); + layout->addWidget(visiblePlayList); + layout->addWidget(toolbar); + + setWidget(widget); +} + +PlaylistDock::~PlaylistDock() +{ +} + +void PlaylistDock::setupActions() +{ + QAction *deleteAllAction = new QAction(this); + deleteAllAction->setText(i18n("Clear playlist")); + deleteAllAction->setIcon(KIcon("edit-clear-list")); + connect(deleteAllAction, SIGNAL(triggered()), this, SLOT(deleteAll())); + + QAction *addItemAction = new QAction(this); + addItemAction->setText(i18n("Add file(s)")); + addItemAction->setIcon(KIcon("list-add")); + connect(addItemAction, SIGNAL(triggered()), parent, SLOT(addFile())); + + QAction *deleteItemAction = new QAction(this); + deleteItemAction->setText(i18n("Clear selected")); + deleteItemAction->setIcon(KIcon("list-remove")); + connect(deleteItemAction, SIGNAL(triggered()), this, SLOT(deleteItem())); + + QAction* moveItemUpAction = new QAction(this); + moveItemUpAction->setText(i18n("Move up")); + moveItemUpAction->setIcon(KIcon("arrow-up")); + connect(moveItemUpAction, SIGNAL(triggered()), this, SLOT(moveItemUp())); + + QAction* moveItemDownAction = new QAction(this); + moveItemDownAction->setText(i18n("Move down")); + moveItemDownAction->setIcon(KIcon("arrow-down")); + connect(moveItemDownAction, SIGNAL(triggered()), this, SLOT(moveItemDown())); + + QAction* skipForwardAction = new QAction(this); + skipForwardAction->setText(i18n("Playlist Skip Forward")); + skipForwardAction->setIcon(KIcon("media-skip-forward")); + connect(skipForwardAction, SIGNAL(triggered()), parent, SLOT(skipForward())); + + QAction* skipBackwardAction = new QAction(this); + skipBackwardAction->setText(i18n("Playlist Skip Backward")); + skipBackwardAction->setIcon(KIcon("media-skip-backward")); + connect(skipBackwardAction, SIGNAL(triggered()), parent, SLOT(skipBackward())); + + toolbar = new QToolBar(this); + toolbar->setToolButtonStyle(Qt::ToolButtonIconOnly); + toolbar->setIconSize(QSize(16, 16)); + toolbar->setObjectName("playlisttoolbar"); + toolbar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); + toolbar->addAction(deleteAllAction); + toolbar->addAction(addItemAction); + toolbar->addAction(deleteItemAction); + toolbar->addAction(moveItemUpAction); + toolbar->addAction(moveItemDownAction); + toolbar->addAction(skipBackwardAction); + toolbar->addAction(skipForwardAction); +} + +void PlaylistDock::playItem() +{ + int rowNumber = visiblePlayList->currentRow(); + bool wasPlaying = parent->mediaObject->state() == Phonon::PlayingState; + + parent->mediaObject->stop(); + parent->mediaObject->clearQueue(); + + if (rowNumber >= parent->hiddenPlayList.size()) { + return; + } + + parent->mediaObject->setCurrentSource(parent->hiddenPlayList[rowNumber]); + + if (wasPlaying) { + parent->mediaObject->play(); + } + else { + parent->mediaObject->stop(); + } +} + +void PlaylistDock::deleteAll() +{ + visiblePlayList->clear(); + parent->hiddenPlayList.clear(); +} + +void PlaylistDock::deleteItem() +{ + QListWidgetItem *item = visiblePlayList->currentItem(); + + if (item) { + int r = visiblePlayList->row(item); + parent->hiddenPlayList.removeAt(r); + visiblePlayList->takeItem(r); + delete item; + } +} + +void PlaylistDock::moveItemUp() +{ + int row = visiblePlayList->currentRow(); + if (row > 0) { + QListWidgetItem* item = visiblePlayList->takeItem(row); + visiblePlayList->insertItem(row - 1, item); + visiblePlayList->setCurrentItem(item); + parent->hiddenPlayList.move(row - 1, row); + } +} + +void PlaylistDock::moveItemDown() +{ + int row = visiblePlayList->currentRow(); + if (row < visiblePlayList->count() - 1) { + QListWidgetItem* item = visiblePlayList->takeItem(row); + visiblePlayList->insertItem(row + 1, item); + visiblePlayList->setCurrentItem(item); + parent->hiddenPlayList.move(row + 1, row); + } +} + +void PlaylistDock::dropEvent(QDropEvent *e) +{ + KUrl::List uriList = KUrl::List::fromMimeData(e->mimeData()); + if (!uriList.isEmpty()) { + parent->addUrls(uriList); + } +} + +void PlaylistDock::dragEnterEvent(QDragEnterEvent *e) +{ + KUrl::List uriList = KUrl::List::fromMimeData(e->mimeData()); + e->setAccepted(!uriList.isEmpty()); +} diff --git a/loopy/src/playlistdock.h b/loopy/src/playlistdock.h new file mode 100644 index 00000000..1cbd7e85 --- /dev/null +++ b/loopy/src/playlistdock.h @@ -0,0 +1,40 @@ +#ifndef PLAYLISTDOCK_H +#define PLAYLISTDOCK_H + +#include + +#include +#include + +class MainWindow; + +class PlaylistDock : public QDockWidget +{ + Q_OBJECT + +public: + PlaylistDock(MainWindow* parent); + ~PlaylistDock(); + KListWidget *visiblePlayList; + QToolBar *toolbar; + QWidget *widget; + +public slots: + void deleteAll(); + +private: + MainWindow* parent; + +private slots: + void setupActions(); + void deleteItem(); + void playItem(); + void moveItemDown(); + void moveItemUp(); + +protected: + void dragEnterEvent(QDragEnterEvent *e); + void dropEvent(QDropEvent *e); + +}; +#endif // PLAYLISTDOCK_H diff --git a/loopy/src/seekingoptions.ui b/loopy/src/seekingoptions.ui new file mode 100644 index 00000000..5906de15 --- /dev/null +++ b/loopy/src/seekingoptions.ui @@ -0,0 +1,81 @@ + + + SeekingOptions + + + + 0 + 0 + 290 + 266 + + + + + + + Seeking values in seconds + + + + + + Button seek value + + + + + + + 5 + + + 600 + + + + + + + Button jump value + + + + + + + 10 + + + 600 + + + 10 + + + + + + + Mousewheel seek value + + + + + + + 10 + + + 600 + + + + + + + + + + + diff --git a/loopy/src/settings.kcfgc b/loopy/src/settings.kcfgc new file mode 100644 index 00000000..af19adb0 --- /dev/null +++ b/loopy/src/settings.kcfgc @@ -0,0 +1,6 @@ +# Code generation options for kconfig_compiler +File=loopy.kcfg +ClassName=Settings +Singleton=true +Mutators=true + diff --git a/loopy/src/themeoptions.ui b/loopy/src/themeoptions.ui new file mode 100644 index 00000000..81467e71 --- /dev/null +++ b/loopy/src/themeoptions.ui @@ -0,0 +1,30 @@ + + + ThemeOptions + + + + 0 + 0 + 444 + 264 + + + + + + + Choose a theme + + + + + + + + + + + + + diff --git a/loopy/src/timelabel.cpp b/loopy/src/timelabel.cpp new file mode 100644 index 00000000..fa0926b7 --- /dev/null +++ b/loopy/src/timelabel.cpp @@ -0,0 +1,57 @@ +#include "timelabel.h" + +#include + +TimeLabel::TimeLabel(QWidget *parent) : QLabel("00:00:00 / 00:00:00", parent) + , m_currentTime(0) +{ + setAlignment(Qt::AlignCenter); +} + +TimeLabel::~TimeLabel() +{ +} + +void TimeLabel::updateTime() +{ + long len = m_totalTime; + long pos = m_currentTime; + QString timeString; + + if (pos || len) { + int sec = pos / 1000; + int min = sec / 60; + int hour = min / 60; + int msec = pos; + + QTime playTime(hour % 60, min % 60, sec % 60, msec % 1000); + sec = len / 1000; + min = sec / 60; + hour = min / 60; + msec = len; + + QTime stopTime(hour % 60, min % 60, sec % 60, msec % 1000); + QString timeFormat = "hh:mm:ss"; + timeString = playTime.toString(timeFormat); + + if (len) + timeString += " / " + stopTime.toString(timeFormat); + if (len == -1) + timeString += "00:00:00"; + + } + setText(timeString); +} + +void TimeLabel::setCurrentTime(qint64 time) +{ + m_currentTime = time; + updateTime(); +} + +void TimeLabel::setTotalTime(qint64 time) +{ + m_totalTime = time; + m_currentTime = 0; + updateTime(); +} diff --git a/loopy/src/timelabel.h b/loopy/src/timelabel.h new file mode 100644 index 00000000..f5966c0e --- /dev/null +++ b/loopy/src/timelabel.h @@ -0,0 +1,23 @@ +#ifndef TIMELABEL_H +#define TIMELABEL_H + +#include + +class TimeLabel : public QLabel +{ + Q_OBJECT + +public: + TimeLabel(QWidget *parent); + ~TimeLabel(); + +public slots: + void setCurrentTime(qint64); + void setTotalTime(qint64); + void updateTime(); + +private: + qint64 m_currentTime; + qint64 m_totalTime; +}; +#endif // TIMELABEL_H diff --git a/loopy/src/titlelabel.cpp b/loopy/src/titlelabel.cpp new file mode 100644 index 00000000..834af799 --- /dev/null +++ b/loopy/src/titlelabel.cpp @@ -0,0 +1,11 @@ +#include "titlelabel.h" + +TitleLabel::TitleLabel(QWidget *parent) : QLabel(" No Media ", parent) +{ + setObjectName("fullscreenbarTitlelabel"); + setAlignment(Qt::AlignCenter); +} + +TitleLabel::~TitleLabel() +{ +} diff --git a/loopy/src/titlelabel.h b/loopy/src/titlelabel.h new file mode 100644 index 00000000..28efb0dd --- /dev/null +++ b/loopy/src/titlelabel.h @@ -0,0 +1,14 @@ +#ifndef TITLELABEL_H +#define TITLELABEL_H + +#include + +class TitleLabel : public QLabel +{ + Q_OBJECT + +public: + TitleLabel(QWidget *parent); + ~TitleLabel(); +}; +#endif // TITLELABEL_H diff --git a/loopy/src/tooltipeater.cpp b/loopy/src/tooltipeater.cpp new file mode 100644 index 00000000..c56ed34b --- /dev/null +++ b/loopy/src/tooltipeater.cpp @@ -0,0 +1,14 @@ +#include "tooltipeater.h" + +#include + +bool ToolTipEater::eventFilter(QObject *obj, QEvent *event) +{ + if (event->type() == QEvent::ToolTip) { + return true; + } + else { + // standard event processing + return QObject::eventFilter(obj, event); + } +} diff --git a/loopy/src/tooltipeater.h b/loopy/src/tooltipeater.h new file mode 100644 index 00000000..214de00e --- /dev/null +++ b/loopy/src/tooltipeater.h @@ -0,0 +1,19 @@ +#ifndef TOOLTIPEATER_H +#define TOOLTIPEATER_H + +#include +#include + +class ToolTipEater : public QObject +{ + Q_OBJECT + + public: + ToolTipEater(QObject * parent = 0) : QObject(parent) {}; + ~ToolTipEater() {}; + + protected: + bool eventFilter(QObject *obj, QEvent *event); +}; + +#endif // TOOLTIPEATER_H diff --git a/loopy/src/videowidget.cpp b/loopy/src/videowidget.cpp new file mode 100644 index 00000000..9d1f5260 --- /dev/null +++ b/loopy/src/videowidget.cpp @@ -0,0 +1,109 @@ +#include + +#include + +#include "videowidget.h" +#include "mainwindow.h" +#include "fullscreenbar.h" +#include "fullscreenplaylist.h" +#include "settings.h" + +const int HIDE_CURSOR_TIME = 1000; +const int MOUSE_REGION = 20; + +VideoWidget::VideoWidget(MainWindow *parent) : Phonon::VideoWidget(parent) +{ + this->parent = parent; + setAcceptDrops(true); + + fullScreenBar = new FullScreenBar(this); + fullScreenPlaylist = new FullScreenPlaylist(this); + + hideCursorTimer = new QTimer(this); + hideCursorTimer->setInterval(HIDE_CURSOR_TIME); + hideCursorTimer->setSingleShot(true); + connect(hideCursorTimer, SIGNAL(timeout()), SLOT(hideCursor())); +} + +VideoWidget::~VideoWidget() +{ +} + +void VideoWidget::contextMenuEvent(QContextMenuEvent *e) +{ + QMenu *popup = static_cast(parent->guiFactory()->container("video", parent)); + popup->popup(e->globalPos()); +} + +void VideoWidget::wheelEvent(QWheelEvent * e) +{ + if (e->delta() > 0) + parent->mouseWheelSeekBackward(); + else + parent->mouseWheelSeekForward(); + + e->accept(); +} + +void VideoWidget::mouseDoubleClickEvent(QMouseEvent *e) +{ + if (e->button() == Qt::LeftButton && childrenRect().y() == y()) { + parent->toggleFullscreen(); + e->accept(); + } +} + +void VideoWidget::mouseMoveEvent(QMouseEvent * e) +{ + unsetCursor(); + hideCursorTimer->start(); + + if (parent->isFullScreen()) { + int y = e->pos().y(); + int x = e->pos().x(); + + if (y >= height() - MOUSE_REGION) { + fullScreenBar->show(); + fullScreenPlaylist->hide(); + hideCursorTimer->stop(); + return; + } + if (y <= height() - MOUSE_REGION) { + fullScreenBar->hide(); + } + if (x >= width() - MOUSE_REGION) { + fullScreenPlaylist->show(); + fullScreenBar->hide(); + hideCursorTimer->stop(); + return; + } + if (x <= width() - 1) { + fullScreenPlaylist->hide(); + } + } +} + +void VideoWidget::hideCursor() +{ + //Workaround for Xine backend KDE 4.3 + QBitmap empty(QSize(32, 32)); + empty.clear(); + QCursor blankCursor(empty, empty); + setCursor(blankCursor); + + //setCursor(Qt::BlankCursor); +} + +void VideoWidget::dropEvent(QDropEvent *e) +{ + KUrl::List uriList = KUrl::List::fromMimeData(e->mimeData()); + if (!uriList.isEmpty()) { + parent->openUrls(uriList); + } +} + +void VideoWidget::dragEnterEvent(QDragEnterEvent *e) +{ + KUrl::List uriList = KUrl::List::fromMimeData(e->mimeData()); + e->setAccepted(!uriList.isEmpty()); +} diff --git a/loopy/src/videowidget.h b/loopy/src/videowidget.h new file mode 100644 index 00000000..f54efe16 --- /dev/null +++ b/loopy/src/videowidget.h @@ -0,0 +1,43 @@ +#ifndef VIDEOWIDGET_H +#define VIDEOWIDGET_H + +#include +#include +#include +#include +#include + +#include + +class MainWindow; +class FullScreenBar; +class FullScreenPlaylist; + +class VideoWidget : public Phonon::VideoWidget +{ + Q_OBJECT + +public: + VideoWidget(MainWindow* parent); + ~VideoWidget(); + FullScreenBar *fullScreenBar; + FullScreenPlaylist *fullScreenPlaylist; + +private: + QTimer *hideCursorTimer; + MainWindow* parent; + +private slots: + void hideCursor(); + void contextMenuEvent(QContextMenuEvent *e); + +protected: + void mouseDoubleClickEvent(QMouseEvent *e); + void wheelEvent(QWheelEvent *e); + void mouseMoveEvent(QMouseEvent *e); + + void dragEnterEvent(QDragEnterEvent *e); + void dropEvent(QDropEvent *e); +}; + +#endif // VIDEOWIDGET_H diff --git a/loopy/themes/CMakeLists.txt b/loopy/themes/CMakeLists.txt new file mode 100644 index 00000000..1e793f35 --- /dev/null +++ b/loopy/themes/CMakeLists.txt @@ -0,0 +1,24 @@ + +install( + + DIRECTORY blackglass-light + DESTINATION ${DATA_INSTALL_DIR}/loopy/themes + ) + +install( + + DIRECTORY blackglass-fat + DESTINATION ${DATA_INSTALL_DIR}/loopy/themes + ) + +install( + + DIRECTORY blackglass-overkill + DESTINATION ${DATA_INSTALL_DIR}/loopy/themes + ) + +install( + + DIRECTORY graygradients + DESTINATION ${DATA_INSTALL_DIR}/loopy/themes + ) diff --git a/loopy/themes/blackglass-fat/close-icon.png b/loopy/themes/blackglass-fat/close-icon.png new file mode 100644 index 00000000..2c2f99eb Binary files /dev/null and b/loopy/themes/blackglass-fat/close-icon.png differ diff --git a/loopy/themes/blackglass-fat/normal-icon.png b/loopy/themes/blackglass-fat/normal-icon.png new file mode 100644 index 00000000..978ea435 Binary files /dev/null and b/loopy/themes/blackglass-fat/normal-icon.png differ diff --git a/loopy/themes/blackglass-fat/style.qss b/loopy/themes/blackglass-fat/style.qss new file mode 100644 index 00000000..1634bd32 --- /dev/null +++ b/loopy/themes/blackglass-fat/style.qss @@ -0,0 +1,232 @@ +/*+++ Startscreen +++*/ + +#infolabel { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + color: white; + border-top: 1px solid gray; +} + +/*+++ Fullscreenplaylist +++*/ + +#fullscreenplaylist { + background-color:black; + border-left: 1px solid gray; +} + +/*+++ Fullscreenbar +++*/ + +#fullscreenbar { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + border-top: 1px solid gray; + /*padding:10px;*/ + color: white; +} + +#fullscreenbarTitlelabel { + color:white; + text-align:left; +} + +#fullscreenbarTimeLabel { + text-align:right; + color:white; +} + +#fullscreenbar QSlider:groove { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 black, stop:1 #444); + border:1px solid gray; + border-radius: 4px; + height: 8px; +} + +#fullscreenbar QSlider:handle { + margin-top: -2px; + margin-bottom: -2px; + width: 8px; + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #333, stop: 0.5 black, stop:1 black); + border-radius: 4px; + border:1px solid gray; +} + +#fullscreenbar QToolButton { + border: 1px solid transparent; + border-radius: 4px; +} + +#fullscreenbar QToolButton:hover { + border: 1px solid gray; +} + +#fullscreenbar QToolButton:pressed { + border: 1px solid #444; +} + +/*+++ Toolbar +++*/ + +#mainToolBar { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + border-top:1px solid gray; + border-radius: 0px; + padding:5px; +} + +#mainToolBar QSlider:groove { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 black, stop:1 #444); + border:1px solid gray; + border-radius: 4px; + height: 8px; +} + +#mainToolBar QSlider:handle { + margin-top: -2px; + margin-bottom: -2px; + width: 8px; + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #333, stop: 0.5 black, stop:1 black); + border-radius: 4px; + border:1px solid gray; +} + +#mainToolBar QToolButton { + border: 1px solid transparent; + border-radius: 4px; +} + +#mainToolBar QToolButton:hover { + border: 1px solid gray; +} + +#mainToolBar QToolButton:pressed { + border: 1px solid #444; +} + +/*+++ Statusbar +++*/ + +QStatusBar { + background-color: black; +} + +#timelabel { + color: lightgray; + padding-right:5px; + padding-left:5px; +} + +/*+++ Playlist +++*/ + +/*KListWidget*/ + +#playlist { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + border-radius: 0px; + show-decoration-selected: 1; /* make the selection span the entire width of the view */ +} + +#playlist::item { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #7FBAE3, stop: 1 #063E72); + color:black; +} + +#playlist::item:alternate { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #7FBAE3, stop: 1 #063E72); + color:black; +} + +#playlist::item:selected { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #7FBAE3, stop: 1 #063E72); + color:lightgray; +} + +#playlist::item:selected:!active { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #7FBAE3, stop: 1 #063E72); + color:lightgray; +} + +#playlist::item:selected:active { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #7FBAE3, stop: 1 #063E72); + color:lightgray; +} + +#playlist::item:hover { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #7FBAE3, stop: 1 #063E72); + color:lightgray; +} + +/*KToolbar*/ + +#playlisttoolbar { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + border-radius: 0px; + border-top:1px solid gray; + padding:5px; +} + +#playlisttoolbar QToolButton { + border: 1px solid transparent; + border-radius: 4px; +} + +#playlisttoolbar QToolButton:hover { + border: 1px solid gray; +} + +#playlisttoolbar QToolButton:pressed { + border: 1px solid #444; +} + +/*QDockWidget*/ + +QMainWindow::separator { + border-left: 1px solid gray; + border-right: 1px solid gray; + border-top: 1px solid gray; + background-color:black; + width: 10px; /* when vertical */ + height: 10px; /* when horizontal */ +} + +QMainWindow::separator:hover { + background: gray; +} + +QToolBar::handle { + /*background:url($themeDir/toolbar-handle.png);*/ + color:white; +} + +#playlistdock { + background-color:black; + color:lightgray; + titlebar-close-icon: url($themeDir/close-icon.png); + titlebar-normal-icon: url($themeDir/normal-icon.png); +} + +#playlistdock::title { + text-align: left; + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + border-top:1px solid gray; + border-bottom:1px solid gray; + padding:5px; +} + +#playlistdock::close-button, #playlistdock::float-button { + border: 0px; + padding: 0px; +} + +#playlistdock::close-button:hover, #playlistdock::float-button:hover { + background: transparent; + border: 1px solid gray; + border-radius: 6px; +} + +#playlistdock::close-button:pressed, #playlistdock::float-button:pressed { + padding: 1px -1px -1px 1px; +} + + \ No newline at end of file diff --git a/loopy/themes/blackglass-light/close-icon.png b/loopy/themes/blackglass-light/close-icon.png new file mode 100644 index 00000000..2c2f99eb Binary files /dev/null and b/loopy/themes/blackglass-light/close-icon.png differ diff --git a/loopy/themes/blackglass-light/normal-icon.png b/loopy/themes/blackglass-light/normal-icon.png new file mode 100644 index 00000000..978ea435 Binary files /dev/null and b/loopy/themes/blackglass-light/normal-icon.png differ diff --git a/loopy/themes/blackglass-light/style.qss b/loopy/themes/blackglass-light/style.qss new file mode 100644 index 00000000..98d4d8c3 --- /dev/null +++ b/loopy/themes/blackglass-light/style.qss @@ -0,0 +1,232 @@ +/*+++ Startscreen +++*/ + +#infolabel { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + color: white; + border-top: 1px solid gray; +} + +/*+++ Fullscreenplaylist +++*/ + +#fullscreenplaylist { + background-color:black; + border-left: 1px solid gray; +} + +/*+++ Fullscreenbar +++*/ + +#fullscreenbar { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + border-top: 1px solid gray; + /*padding:10px;*/ + color: white; +} + +#fullscreenbarTitlelabel { + color:white; + text-align:left; +} + +#fullscreenbarTimeLabel { + text-align:right; + color:white; +} + +#fullscreenbar QSlider:groove { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 black, stop:1 #444); + border:1px solid gray; + border-radius: 4px; + height: 8px; +} + +#fullscreenbar QSlider:handle { + margin-top: -2px; + margin-bottom: -2px; + width: 8px; + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #333, stop: 0.5 black, stop:1 black); + border-radius: 4px; + border:1px solid gray; +} + +#fullscreenbar QToolButton { + border: 1px solid transparent; + border-radius: 4px; +} + +#fullscreenbar QToolButton:hover { + border: 1px solid gray; +} + +#fullscreenbar QToolButton:pressed { + border: 1px solid #444; +} + +/*+++ Toolbar +++ + +#mainToolBar { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + border-top:1px solid gray; + border-radius: 0px; + padding:5px; +} + +#mainToolBar QSlider:groove { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 black, stop:1 #444); + border:1px solid gray; + border-radius: 4px; + height: 8px; +} + +#mainToolBar QSlider:handle { + margin-top: -2px; + margin-bottom: -2px; + width: 8px; + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #333, stop: 0.5 black, stop:1 black); + border-radius: 4px; + border:1px solid gray; +} + +#mainToolBar QToolButton { + border: 1px solid transparent; + border-radius: 4px; +} + +#mainToolBar QToolButton:hover { + border: 1px solid gray; +} + +#mainToolBar QToolButton:pressed { + border: 1px solid #444; +}*/ + +/*+++ Statusbar +++*/ + +QStatusBar { + background-color: black; +} + +#timelabel { + color: lightgray; + padding-right:5px; + padding-left:5px; +} + +/*+++ Playlist +++*/ + +/*KListWidget*/ + +#playlist { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + border-radius: 0px; + show-decoration-selected: 1; /* make the selection span the entire width of the view */ +} + +#playlist::item { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #7FBAE3, stop: 1 #063E72); + color:white; +} + +#playlist::item:alternate { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #7FBAE3, stop: 1 #063E72); + color:white; +} + +#playlist::item:selected { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #C9C9C9, stop: 1 #848484); + color:black; +} + +#playlist::item:selected:!active { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #C9C9C9, stop: 1 #848484); + color:black; +} + +#playlist::item:selected:active { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #C9C9C9, stop: 1 #848484); + color:black; +} + +#playlist::item:hover { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #C9C9C9, stop: 1 #848484); + color:black; +} + +/*KToolbar*/ + +#playlisttoolbar { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + border-radius: 0px; + border-top:1px solid gray; + padding:5px; +} + +#playlisttoolbar QToolButton { + border: 1px solid transparent; + border-radius: 4px; +} + +#playlisttoolbar QToolButton:hover { + border: 1px solid gray; +} + +#playlisttoolbar QToolButton:pressed { + border: 1px solid #444; +} + +/*QDockWidget*/ + +QMainWindow::separator { + border-left: 1px solid gray; + border-right: 1px solid gray; + border-top: 1px solid gray; + background-color:black; + width: 10px; /* when vertical */ + height: 10px; /* when horizontal */ +} + +QMainWindow::separator:hover { + background: gray; +} + +QToolBar::handle { + /*background:url($themeDir/toolbar-handle.png);*/ + color:white; +} + +#playlistdock { + background-color:black; + color:lightgray; + titlebar-close-icon: url($themeDir/close-icon.png); + titlebar-normal-icon: url($themeDir/normal-icon.png); +} + +#playlistdock::title { + text-align: left; + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + border-top:1px solid gray; + border-bottom:1px solid gray; + padding:5px; +} + +#playlistdock::close-button, #playlistdock::float-button { + border: 0px; + padding: 0px; +} + +#playlistdock::close-button:hover, #playlistdock::float-button:hover { + background: transparent; + border: 1px solid gray; + border-radius: 6px; +} + +#playlistdock::close-button:pressed, #playlistdock::float-button:pressed { + padding: 1px -1px -1px 1px; +} + + \ No newline at end of file diff --git a/loopy/themes/blackglass-overkill/close-icon.png b/loopy/themes/blackglass-overkill/close-icon.png new file mode 100644 index 00000000..2c2f99eb Binary files /dev/null and b/loopy/themes/blackglass-overkill/close-icon.png differ diff --git a/loopy/themes/blackglass-overkill/draw-circle.png b/loopy/themes/blackglass-overkill/draw-circle.png new file mode 100644 index 00000000..30087f10 Binary files /dev/null and b/loopy/themes/blackglass-overkill/draw-circle.png differ diff --git a/loopy/themes/blackglass-overkill/draw-donut.png b/loopy/themes/blackglass-overkill/draw-donut.png new file mode 100644 index 00000000..37aaa942 Binary files /dev/null and b/loopy/themes/blackglass-overkill/draw-donut.png differ diff --git a/loopy/themes/blackglass-overkill/normal-icon.png b/loopy/themes/blackglass-overkill/normal-icon.png new file mode 100644 index 00000000..978ea435 Binary files /dev/null and b/loopy/themes/blackglass-overkill/normal-icon.png differ diff --git a/loopy/themes/blackglass-overkill/style.qss b/loopy/themes/blackglass-overkill/style.qss new file mode 100644 index 00000000..09e4ca9f --- /dev/null +++ b/loopy/themes/blackglass-overkill/style.qss @@ -0,0 +1,316 @@ +/*+++ Startscreen +++*/ + +#infolabel { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + color: white; + border-top: 1px solid gray; +} + +/*+++ Fullscreenplaylist +++*/ + +#fullscreenplaylist { + background-color:black; + border-left: 1px solid gray; +} + +/*+++ Fullscreenbar +++*/ + +#fullscreenbar { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + border-top: 1px solid gray; + /*padding:10px;*/ + color: white; +} + +#fullscreenbarTitlelabel { + color:white; + text-align:left; +} + +#fullscreenbarTimeLabel { + text-align:right; + color:white; +} + +#fullscreenbar QSlider:groove { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 black, stop:1 #444); + border:1px solid gray; + border-radius: 4px; + height: 8px; + /*margin:10px;*/ +} + +#fullscreenbar QSlider:handle { + margin-top: -2px; + margin-bottom: -2px; + width: 8px; + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #333, stop: 0.5 black, stop:1 black); + border-radius: 4px; + border:1px solid gray; +} + +#fullscreenbar QToolButton { + border: 1px solid transparent; + border-radius: 4px; +} + +#fullscreenbar QToolButton:hover { + border: 1px solid gray; +} + +#fullscreenbar QToolButton:pressed { + border: 1px solid #444; +} + +/*+++ Toolbar +++*/ + +#mainToolBar { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + border-top:1px solid gray; + border-radius: 0px; + padding:5px; +} + +#mainToolBar QSlider:groove { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 black, stop:1 #444); + border:1px solid gray; + border-radius: 4px; + height: 8px; +} + +#mainToolBar QSlider:handle { + margin-top: -2px; + margin-bottom: -2px; + width: 8px; + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #333, stop: 0.5 black, stop:1 black); + border-radius: 4px; + border:1px solid gray; +} + +#mainToolBar QToolButton { + border: 1px solid transparent; + border-radius: 4px; +} + +#mainToolBar QToolButton:hover { + border: 1px solid gray; +} + +#mainToolBar QToolButton:pressed { + border: 1px solid #444; +} + +/*+++ Menubar +++*/ + +QMenuBar { + background-color:black; + color:lightgray; +} + +QMenuBar::item { + spacing: 3px; /* spacing between menu bar items */ + padding: 2px 8px; + background: transparent; + border-radius: 4px; +} + +QMenuBar::item:selected { /* when selected using mouse or keyboard */ + background: gray; +} + +QMenuBar::item:pressed { + background: gray; +} + +/*+++ Menu items +++*/ + +QMenu { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + color:lightgray; + border-radius: 0px; +} + +QMenu::item { + padding: 4px 20px; +} + +QMenu::item:selected { + background: gray; +} + +QMenu::icon:checked { + background: lightgray; + border: 1px inset gray; + position: absolute; + top: 1px; + right: 1px; + bottom: 1px; + left: 1px; +} + +QMenu::separator { + height: 1px; + background: lightgray; + margin-left: 0px; + margin-right: 0px; +} + +QMenu::indicator { + width: 13px; + height: 13px; +} + +/*non-exclusive indicator = check box style indicator (see QActionGroup::setExclusive)*/ +QMenu::indicator:non-exclusive:unchecked { + image: url($themeDir/draw-circle.png); +} + +QMenu::indicator:non-exclusive:unchecked:selected { + image: url($themeDir/draw-circle.png); +} + +QMenu::indicator:non-exclusive:checked { + image: url($themeDir/draw-donut.png); +} + +QMenu::indicator:non-exclusive:checked:selected { + image: url($themeDir/draw-donut.png); +} + +/* exclusive indicator = radio button style indicator (see QActionGroup::setExclusive)*/ +QMenu::indicator:exclusive:unchecked { + image: url($themeDir/draw-circle.png); +} + +QMenu::indicator:exclusive:unchecked:selected { + image: url($themeDir/draw-circle.png); +} + +QMenu::indicator:exclusive:checked { + image: url($themeDir/draw-donut.png); +} + +QMenu::indicator:exclusive:checked:selected { + image: url($themeDir/draw-donut.png); +} + +/*+++ Statusbar +++*/ + +QStatusBar { + background-color: black; +} + +#timelabel { + color: lightgray; + padding-right:5px; + padding-left:5px; +} + +/*+++ Playlist +++*/ + +/*KListWidget*/ + +#playlist { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + border-radius: 0px; + show-decoration-selected: 1; /* make the selection span the entire width of the view */ +} + +#playlist::item { + background: red; +} + +#playlist::item:alternate { + background: yellow; +} + +#playlist::item:selected { + background: green; +} + +#playlist::item:selected:!active { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #F5D0A9, stop: 1 #FF8000); +} + +#playlist::item:selected:active { + background: blue; +} + +#playlist::item:hover { + background: brown; +} + +/*KToolbar*/ + +#playlisttoolbar { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + border-radius: 0px; + border-top:1px solid gray; + padding:5px; +} + +#playlisttoolbar QToolButton { + border: 1px solid transparent; + border-radius: 4px; +} + +#playlisttoolbar QToolButton:hover { + border: 1px solid gray; +} + +#playlisttoolbar QToolButton:pressed { + border: 1px solid #444; +} + +/*QDockWidget*/ + +QMainWindow::separator { + border-left: 1px solid gray; + border-right: 1px solid gray; + border-top: 1px solid gray; + background-color:black; + width: 10px; /* when vertical */ + height: 10px; /* when horizontal */ +} + +QMainWindow::separator:hover { + background: gray; +} + +QToolBar::handle { + /*background:url($themeDir/toolbar-handle.png);*/ + color:white; +} + +#playlistdock { + background-color:black; + color:lightgray; + titlebar-close-icon: url($themeDir/close-icon.png); + titlebar-normal-icon: url($themeDir/normal-icon.png); +} + +#playlistdock::title { + text-align: left; + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + border-top:1px solid gray; + border-bottom:1px solid gray; + padding:5px; +} + +#playlistdock::close-button, #playlistdock::float-button { + border: 0px; + padding: 0px; +} + +#playlistdock::close-button:hover, #playlistdock::float-button:hover { + background: transparent; + border: 1px solid gray; + border-radius: 6px; +} + +#playlistdock::close-button:pressed, #playlistdock::float-button:pressed { + padding: 1px -1px -1px 1px; +} + + \ No newline at end of file diff --git a/loopy/themes/graygradients/close-icon.png b/loopy/themes/graygradients/close-icon.png new file mode 100644 index 00000000..2c2f99eb Binary files /dev/null and b/loopy/themes/graygradients/close-icon.png differ diff --git a/loopy/themes/graygradients/draw-circle.png b/loopy/themes/graygradients/draw-circle.png new file mode 100644 index 00000000..30087f10 Binary files /dev/null and b/loopy/themes/graygradients/draw-circle.png differ diff --git a/loopy/themes/graygradients/draw-donut.png b/loopy/themes/graygradients/draw-donut.png new file mode 100644 index 00000000..37aaa942 Binary files /dev/null and b/loopy/themes/graygradients/draw-donut.png differ diff --git a/loopy/themes/graygradients/normal-icon.png b/loopy/themes/graygradients/normal-icon.png new file mode 100644 index 00000000..978ea435 Binary files /dev/null and b/loopy/themes/graygradients/normal-icon.png differ diff --git a/loopy/themes/graygradients/style.qss b/loopy/themes/graygradients/style.qss new file mode 100644 index 00000000..1a2ccf94 --- /dev/null +++ b/loopy/themes/graygradients/style.qss @@ -0,0 +1,323 @@ + +/*+++ Startscreen +++*/ + +#infolabel { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + color: white; + border-top: 1px solid gray; +} + +/*+++ Fullscreenplaylist +++*/ + +#fullscreenplaylist { + background-color:black; + border-left: 1px solid gray; +} + +/*+++ Fullscreenbar +++*/ + +#fullscreenbar { + background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 darkgray, stop:1 lightgray); + border-top: 1px solid gray; + /*padding:10px;*/ + color: black; +} + +#fullscreenbarTitlelabel { + color:black; + text-align:left; +} + +#fullscreenbarTimeLabel { + text-align:right; + color:black; +} + +#fullscreenbar QSlider:groove { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 lightgray, stop:1 darkgray); + border:1px solid gray; + border-radius: 6px; + height: 12px; +} + +#fullscreenbar QSlider:handle { + margin-top: 0px; + margin-bottom: 0px; + width: 12px; + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 lightgray, stop: 0.5 darkgray, stop:1 darkgray); + border-radius: 6px; + border:1px solid gray; +} + +#fullscreenbar QToolButton { + border: 1px solid transparent; + border-radius: 4px; +} + +#fullscreenbar QToolButton:hover { + border: 1px solid gray; +} + +#fullscreenbar QToolButton:pressed { + border: 1px solid #444; +} + +/*+++ Toolbar +++*/ + +#mainToolBar { + background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 darkgray, stop:1 lightgray); + border-radius: 0px; + padding:5px; +} + +#mainToolBar QSlider:groove { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 lightgray, stop:1 darkgray); + border:1px solid gray; + border-radius: 6px; + height: 12px; +} + +#mainToolBar QSlider:handle { + margin-top: 0px; + margin-bottom: 0px; + width: 12px; + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 lightgray, stop: 0.5 darkgray, stop:1 darkgray); + border-radius: 6px; + border:1px solid gray; +} + +#mainToolBar QToolButton { + border: 1px solid transparent; + border-radius: 4px; +} + +#mainToolBar QToolButton:hover { + border: 1px solid gray; +} + +#mainToolBar QToolButton:pressed { + border: 1px solid #444; +} + +/*+++ Menubar +++*/ + +QMenuBar { + background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 lightgray, stop:1 darkgray); + color:black; +} + +QMenuBar::item { + spacing: 3px; /* spacing between menu bar items */ + padding: 2px 8px; + background: transparent; + border-radius: 4px; +} + +QMenuBar::item:selected { /* when selected using mouse or keyboard */ + background: gray; +} + +QMenuBar::item:pressed { + background: gray; +} + +/*+++ Menu items +++*/ + +/*QMenu { + background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #444, stop: 0.6 black, stop:1 black); + color:lightgray; + border-radius: 0px; +} + +QMenu::item { + padding: 4px 20px; +} + +QMenu::item:selected { + background: gray; +} + +QMenu::icon:checked { + background: lightgray; + border: 1px inset gray; + position: absolute; + top: 1px; + right: 1px; + bottom: 1px; + left: 1px; +} + +QMenu::separator { + height: 1px; + background: lightgray; + margin-left: 0px; + margin-right: 0px; +} + +QMenu::indicator { + width: 13px; + height: 13px; +}*/ + +/*non-exclusive indicator = check box style indicator (see QActionGroup::setExclusive)*/ +/*QMenu::indicator:non-exclusive:unchecked { + image: url($themeDir/draw-circle.png); +} + +QMenu::indicator:non-exclusive:unchecked:selected { + image: url($themeDir/draw-circle.png); +} + +QMenu::indicator:non-exclusive:checked { + image: url($themeDir/draw-donut.png); +} + +QMenu::indicator:non-exclusive:checked:selected { + image: url($themeDir/draw-donut.png); +}*/ + +/* exclusive indicator = radio button style indicator (see QActionGroup::setExclusive)*/ +/*QMenu::indicator:exclusive:unchecked { + image: url($themeDir/draw-circle.png); +} + +QMenu::indicator:exclusive:unchecked:selected { + image: url($themeDir/draw-circle.png); +} + +QMenu::indicator:exclusive:checked { + image: url($themeDir/draw-donut.png); +} + +QMenu::indicator:exclusive:checked:selected { + image: url($themeDir/draw-donut.png); +}*/ + +/*+++ Statusbar +++*/ + +QStatusBar { + background-color: lightgray; +} + +#timelabel { + color: black; + padding-right:5px; + padding-left:5px; +} + +/*+++ Playlist +++*/ + +/*KListWidget*/ + +#playlist { + background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 lightgray, stop:1 darkgray); + border-radius: 0px; + show-decoration-selected: 1; /* make the selection span the entire width of the view */ +} + +#playlist::item { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #C9C9C9, stop: 1 #848484); + color:black; +} + +#playlist::item:alternate { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #C9C9C9, stop: 1 #848484); + color:black; +} + +#playlist::item:selected { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #7FBAE3, stop: 1 #063E72); + color:white; +} + +#playlist::item:selected:!active { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #7FBAE3, stop: 1 #063E72); + color:white; +} + +#playlist::item:selected:active { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #7FBAE3, stop: 1 #063E72); + color:white; +} + +#playlist::item:hover { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #7FBAE3, stop: 1 #063E72); + color:white; +} + +/*KToolbar*/ + +#playlisttoolbar { + background-color: darkgray; + border-radius: 0px; + padding:5px; +} + +#playlisttoolbar QToolButton { + border: 1px solid transparent; + border-radius: 4px; +} + +#playlisttoolbar QToolButton:hover { + border: 1px solid gray; +} + +#playlisttoolbar QToolButton:pressed { + border: 1px solid #444; +} + +/*QDockWidget*/ + +QMainWindow::separator { + border-left: 1px solid gray; + border-right: 1px solid gray; + border-top: 1px solid gray; + background-color:lightgray; + width: 10px; /* when vertical */ + height: 10px; /* when horizontal */ +} + +QMainWindow::separator:hover { + background: black; +} + +QToolBar::handle { + /*background:url($themeDir/toolbar-handle.png);*/ + color:white; +} + +#playlistdock { + background-color: darkgray; + color:black; + titlebar-close-icon: url($themeDir/close-icon.png); + titlebar-normal-icon: url($themeDir/normal-icon.png); +} + +#playlistdock::title { + text-align: left; + background-color: darkgray; + padding:5px; +} + +#playlistdock::close-button, #playlistdock::float-button { + border: 0px; + padding: 0px; +} + +#playlistdock::close-button:hover, #playlistdock::float-button:hover { + background: transparent; + border: 1px solid gray; + border-radius: 6px; +} + +#playlistdock::close-button:pressed, #playlistdock::float-button:pressed { + padding: 1px -1px -1px 1px; +} + + \ No newline at end of file