Merge branch 'master' into Refactor-settings

Conflicts:
	oracle/CMakeLists.txt
This commit is contained in:
marco 2015-09-01 21:28:53 +02:00
commit baa61d0571
330 changed files with 37514 additions and 13448 deletions

View file

@ -221,7 +221,7 @@ option(WITH_CLIENT "build cockatrice" ON)
if(WITH_CLIENT) if(WITH_CLIENT)
add_subdirectory(cockatrice) add_subdirectory(cockatrice)
add_subdirectory(sounds) add_subdirectory(sounds)
add_subdirectory(zonebg) add_subdirectory(themes)
SET(CPACK_INSTALL_CMAKE_PROJECTS "cockatrice;cockatrice;ALL;/" ${CPACK_INSTALL_CMAKE_PROJECTS}) SET(CPACK_INSTALL_CMAKE_PROJECTS "cockatrice;cockatrice;ALL;/" ${CPACK_INSTALL_CMAKE_PROJECTS})
endif() endif()

View file

@ -87,6 +87,7 @@ SET(cockatrice_SOURCES
src/playerlistwidget.cpp src/playerlistwidget.cpp
src/pixmapgenerator.cpp src/pixmapgenerator.cpp
src/settingscache.cpp src/settingscache.cpp
src/thememanager.cpp
src/localserver.cpp src/localserver.cpp
src/localserverinterface.cpp src/localserverinterface.cpp
src/localclient.cpp src/localclient.cpp

View file

@ -1,57 +1,58 @@
<RCC> <RCC>
<qresource prefix="/"> <qresource prefix="/" >
<file alias="back.svg">resources/back.svg</file> <file>resources/back.svg</file>
<file>resources/lock.svg</file> <file>resources/cockatrice.svg</file>
<file>resources/icon_delete.svg</file>
<file>resources/icon_tab_changed.svg</file>
<file>resources/icon_config_general.svg</file>
<file>resources/icon_config_appearance.svg</file>
<file>resources/icon_config_interface.svg</file>
<file>resources/icon_config_messages.svg</file>
<file>resources/icon_config_deckeditor.svg</file>
<file>resources/icon_config_sound.svg</file>
<file>resources/phases/icon_phase_untap.svg</file>
<file>resources/phases/icon_phase_upkeep.svg</file>
<file>resources/phases/icon_phase_draw.svg</file>
<file>resources/phases/icon_phase_main1.svg</file>
<file>resources/phases/icon_phase_combat_start.svg</file>
<file>resources/phases/icon_phase_combat_attackers.svg</file>
<file>resources/phases/icon_phase_combat_blockers.svg</file>
<file>resources/phases/icon_phase_combat_damage.svg</file>
<file>resources/phases/icon_phase_combat_end.svg</file>
<file>resources/phases/icon_phase_main2.svg</file>
<file>resources/phases/icon_phase_cleanup.svg</file>
<file>resources/phases/icon_phase_nextturn.svg</file>
<file>resources/icon_settings.svg</file>
<file>resources/hand.svg</file> <file>resources/hand.svg</file>
<file>resources/pencil.svg</file>
<file>resources/icon_search_black.svg</file>
<file>resources/icon_clearsearch.svg</file>
<file>resources/icon_update.png</file>
<file>resources/icon_view.svg</file>
<file>resources/hr.jpg</file> <file>resources/hr.jpg</file>
<file alias="resources/appicon.svg">resources/cockatrice.svg</file>
<file>resources/add_to_sideboard.svg</file> <file>resources/icons/arrow_bottom_green.svg</file>
<file>resources/decrement.svg</file> <file>resources/icons/arrow_down_green.svg</file>
<file>resources/increment.svg</file> <file>resources/icons/arrow_left_green.svg</file>
<file>resources/remove_row.svg</file> <file>resources/icons/arrow_right_blue.svg</file>
<file>resources/arrow_left_green.svg</file> <file>resources/icons/arrow_right_green.svg</file>
<file>resources/arrow_right_green.svg</file> <file>resources/icons/arrow_top_green.svg</file>
<file>resources/arrow_top_green.svg</file> <file>resources/icons/arrow_up_green.svg</file>
<file>resources/arrow_up_green.svg</file> <file>resources/icons/clearsearch.svg</file>
<file>resources/arrow_down_green.svg</file> <file>resources/icons/conceded.svg</file>
<file>resources/arrow_bottom_green.svg</file> <file>resources/icons/decrement.svg</file>
<file>resources/icon_ready_start.svg</file> <file>resources/icons/delete.svg</file>
<file>resources/icon_not_ready_start.svg</file> <file>resources/icons/increment.svg</file>
<file>resources/icon_conceded.svg</file> <file>resources/icons/lock.svg</file>
<file>resources/icon_player.svg</file> <file>resources/icons/not_ready_start.svg</file>
<file>resources/icon_spectator.svg</file> <file>resources/icons/pencil.svg</file>
<file>resources/replay_start.svg</file> <file>resources/icons/player.svg</file>
<file>resources/replay_fastforward.svg</file> <file>resources/icons/ready_start.svg</file>
<file>resources/replay_pause.svg</file> <file>resources/icons/remove_row.svg</file>
<file>resources/genders/male.svg</file> <file>resources/icons/search.svg</file>
<file>resources/genders/female.svg</file> <file>resources/icons/settings.svg</file>
<file>resources/genders/unknown.svg</file> <file>resources/icons/spectator.svg</file>
<file>resources/icons/tab_changed.svg</file>
<file>resources/icons/update.png</file>
<file>resources/icons/view.svg</file>
<file>resources/config/general.svg</file>
<file>resources/config/appearance.svg</file>
<file>resources/config/interface.svg</file>
<file>resources/config/messages.svg</file>
<file>resources/config/deckeditor.svg</file>
<file>resources/config/shorcuts.svg</file>
<file>resources/config/sound.svg</file>
<file>resources/counters/w.svg</file>
<file>resources/counters/w_highlight.svg</file>
<file>resources/counters/u.svg</file>
<file>resources/counters/u_highlight.svg</file>
<file>resources/counters/b.svg</file>
<file>resources/counters/b_highlight.svg</file>
<file>resources/counters/r.svg</file>
<file>resources/counters/r_highlight.svg</file>
<file>resources/counters/g.svg</file>
<file>resources/counters/g_highlight.svg</file>
<file>resources/counters/storm.svg</file>
<file>resources/counters/storm_highlight.svg</file>
<file>resources/counters/general.svg</file>
<file>resources/counters/general_highlight.svg</file>
<file>resources/countries/ad.svg</file> <file>resources/countries/ad.svg</file>
<file>resources/countries/ae.svg</file> <file>resources/countries/ae.svg</file>
<file>resources/countries/af.svg</file> <file>resources/countries/af.svg</file>
@ -301,20 +302,28 @@
<file>resources/countries/za.svg</file> <file>resources/countries/za.svg</file>
<file>resources/countries/zm.svg</file> <file>resources/countries/zm.svg</file>
<file>resources/countries/zw.svg</file> <file>resources/countries/zw.svg</file>
<file>resources/counters/w.svg</file>
<file>resources/counters/w_highlight.svg</file> <file>resources/genders/male.svg</file>
<file>resources/counters/u.svg</file> <file>resources/genders/female.svg</file>
<file>resources/counters/u_highlight.svg</file> <file>resources/genders/unknown.svg</file>
<file>resources/counters/b.svg</file>
<file>resources/counters/b_highlight.svg</file> <file>resources/phases/untap.svg</file>
<file>resources/counters/r.svg</file> <file>resources/phases/upkeep.svg</file>
<file>resources/counters/r_highlight.svg</file> <file>resources/phases/draw.svg</file>
<file>resources/counters/g.svg</file> <file>resources/phases/main1.svg</file>
<file>resources/counters/g_highlight.svg</file> <file>resources/phases/combat_start.svg</file>
<file>resources/counters/storm.svg</file> <file>resources/phases/combat_attackers.svg</file>
<file>resources/counters/storm_highlight.svg</file> <file>resources/phases/combat_blockers.svg</file>
<file>resources/counters/general.svg</file> <file>resources/phases/combat_damage.svg</file>
<file>resources/counters/general_highlight.svg</file> <file>resources/phases/combat_end.svg</file>
<file>resources/phases/main2.svg</file>
<file>resources/phases/cleanup.svg</file>
<file>resources/phases/nextturn.svg</file>
<file>resources/replay/start.svg</file>
<file>resources/replay/fastforward.svg</file>
<file>resources/replay/pause.svg</file>
<file>resources/userlevels/normal.svg</file> <file>resources/userlevels/normal.svg</file>
<file>resources/userlevels/registered.svg</file> <file>resources/userlevels/registered.svg</file>
<file>resources/userlevels/registered_buddy.svg</file> <file>resources/userlevels/registered_buddy.svg</file>
@ -322,8 +331,5 @@
<file>resources/userlevels/moderator_buddy.svg</file> <file>resources/userlevels/moderator_buddy.svg</file>
<file>resources/userlevels/admin.svg</file> <file>resources/userlevels/admin.svg</file>
<file>resources/userlevels/admin_buddy.svg</file> <file>resources/userlevels/admin_buddy.svg</file>
<file>resources/news/exclamation_mark.svg</file>
<file>resources/news/question_mark.svg</file>
<file>resources/icon_config_shorcuts.svg</file>
</qresource> </qresource>
</RCC> </RCC>

View file

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View file

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

View file

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View file

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View file

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View file

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

View file

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

View file

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View file

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View file

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View file

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View file

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View file

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View file

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View file

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

View file

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

View file

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View file

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

View file

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View file

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

View file

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

View file

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View file

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View file

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View file

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View file

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

View file

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

View file

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View file

@ -1,75 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="100"
height="100"
id="svg2858"
version="1.1"
inkscape:version="0.48.0 r9654"
sodipodi:docname="icon_tab_changed.svg">
<defs
id="defs2860">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2866" />
<inkscape:perspective
id="perspective2853"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5"
inkscape:cx="4.1"
inkscape:cy="49.523097"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1280"
inkscape:window-height="949"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1" />
<metadata
id="metadata2863">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-952.36218)">
<path
style="font-size:253.89010620000001950px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#e50000;fill-opacity:1;stroke:#000000;stroke-width:2.39700006999999982;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;font-family:Century Schoolbook L;-inkscape-font-specification:Century Schoolbook L Medium"
d="m 53.225642,1018.5513 c 0.486911,-13.2677 1.704142,-22.64046 4.016877,-30.55249 3.895149,-13.38951 4.138607,-14.48503 4.138607,-19.23224 0,-7.66855 -4.260334,-12.17232 -11.320268,-12.17232 -7.181659,0 -11.441984,4.50377 -11.441984,12.17232 0,3.16481 0.60863,7.18167 1.704135,10.83336 4.868924,16.06746 5.720972,21.30157 6.45134,38.95137 l 6.451293,0 m -3.286511,6.8165 c -6.207884,0 -11.320257,5.1124 -11.320257,11.3204 0,6.2079 5.112373,11.4419 11.198528,11.4419 6.451342,0 11.563724,-5.1124 11.563724,-11.4419 0,-6.208 -5.112382,-11.3204 -11.441995,-11.3204"
id="text3838" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

View file

@ -1,105 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="100"
height="100"
id="svg2858"
version="1.1"
inkscape:version="0.48.0 r9654"
sodipodi:docname="exclamation_mark.svg">
<defs
id="defs2860">
<linearGradient
inkscape:collect="always"
id="linearGradient3795">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3797" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop3799" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2866" />
<inkscape:perspective
id="perspective2853"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3795"
id="linearGradient3801"
x1="29.834375"
y1="999.20284"
x2="72.173357"
y2="999.20284"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5"
inkscape:cx="24.413577"
inkscape:cy="49.523097"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1280"
inkscape:window-height="949"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1" />
<metadata
id="metadata2863">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-952.36218)">
<text
xml:space="preserve"
style="font-size:129.98471069px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#e00000;fill-opacity:1;stroke:#000000;stroke-width:1.78699994;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Rachana;-inkscape-font-specification:Rachana"
x="18.646267"
y="1045.775"
id="text3791"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3793"
x="18.646267"
y="1045.775"
style="fill:#e00000;fill-opacity:1;stroke-width:1.78699994;stroke-miterlimit:4;stroke-dasharray:none">?</tspan></text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

View file

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View file

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

View file

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 145 KiB

View file

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

View file

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View file

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View file

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View file

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

View file

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View file

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

View file

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

View file

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View file

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

View file

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View file

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

View file

@ -1,100 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="32px"
height="32px"
id="svg3320"
version="1.1"
inkscape:version="0.48.5 r10040"
sodipodi:docname="replay_stop.svg">
<defs
id="defs3322">
<linearGradient
id="linearGradient2237">
<stop
style="stop-color:#006000;stop-opacity:1;"
offset="0"
id="stop2239" />
<stop
style="stop-color:#48ff00;stop-opacity:1;"
offset="1"
id="stop2241" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3207"
id="linearGradient3998"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.8996584,0,0,0.8996584,543.08369,-117.97095)"
x1="293.33597"
y1="423.03891"
x2="330.00668"
y2="472.74878" />
<linearGradient
id="linearGradient3207">
<stop
id="stop3209"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop3211"
offset="1"
style="stop-color:#48ff00;stop-opacity:0;" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="22.395604"
inkscape:cx="12.669812"
inkscape:cy="27.464311"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1099"
inkscape:window-height="800"
inkscape:window-x="128"
inkscape:window-y="20"
inkscape:window-maximized="0">
<inkscape:grid
type="xygrid"
id="grid2990" />
</sodipodi:namedview>
<metadata
id="metadata3325">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<rect
style="fill:#b60000;fill-opacity:1;fill-rule:nonzero;stroke:#3f0000;stroke-opacity:1;stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none"
id="rect2994"
width="20.271835"
height="20.271835"
x="5.8940139"
y="5.2983313" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

View file

@ -1,5 +1,7 @@
#include "carddatabase.h" #include "carddatabase.h"
#include "settingscache.h" #include "settingscache.h"
#include "thememanager.h"
#include <QCryptographicHash> #include <QCryptographicHash>
#include <QDir> #include <QDir>
#include <QDirIterator> #include <QDirIterator>
@ -624,7 +626,7 @@ void CardInfo::loadPixmap(QPixmap &pixmap)
pixmap = QPixmap(); pixmap = QPixmap();
if (getName().isEmpty()) { if (getName().isEmpty()) {
pixmap.load(settingsCache->getCardBackPicturePath()); pixmap = themeManager->getCardBackPixmap();
return; return;
} }
@ -654,15 +656,15 @@ void CardInfo::getPixmap(QSize size, QPixmap &pixmap)
QPixmap bigPixmap; QPixmap bigPixmap;
loadPixmap(bigPixmap); loadPixmap(bigPixmap);
if (bigPixmap.isNull()) { if (bigPixmap.isNull()) {
if (!getName().isEmpty()) { if (getName().isEmpty()) {
pixmap = QPixmap(); // null QSvgRenderer svg(QString("theme:back.svg"));
return;
} else {
QSvgRenderer svg(QString(":/back.svg"));
bigPixmap = QPixmap(svg.defaultSize()); bigPixmap = QPixmap(svg.defaultSize());
bigPixmap.fill(Qt::transparent); bigPixmap.fill(Qt::transparent);
QPainter painter(&bigPixmap); QPainter painter(&bigPixmap);
svg.render(&painter); svg.render(&painter);
} else {
pixmap = QPixmap(); // null
return;
} }
} }
@ -790,7 +792,7 @@ CardDatabase::CardDatabase(QObject *parent)
noCard = new CardInfo(this); noCard = new CardInfo(this);
QPixmap tmp; QPixmap tmp;
noCard->loadPixmap(tmp); // cache pixmap for card back noCard->loadPixmap(tmp); // cache pixmap for card back
connect(settingsCache, SIGNAL(cardBackPicturePathChanged()), noCard, SLOT(updatePixmapCache())); connect(themeManager, SIGNAL(themeChanged()), noCard, SLOT(updatePixmapCache()));
} }
CardDatabase::~CardDatabase() CardDatabase::~CardDatabase()

View file

@ -469,7 +469,7 @@ void DeckListModel::printDeckList(QPrinter *printer)
cursor.insertBlock(headerBlockFormat, headerCharFormat); cursor.insertBlock(headerBlockFormat, headerCharFormat);
for (int i = 0; i < root->size(); i++) { for (int i = 0; i < root->size(); i++) {
cursor.insertHtml("<br><img src=:/resources/hr.jpg>"); cursor.insertHtml("<br><img src=theme:hr.jpg>");
//cursor.insertHtml("<hr>"); //cursor.insertHtml("<hr>");
cursor.insertBlock(headerBlockFormat, headerCharFormat); cursor.insertBlock(headerBlockFormat, headerCharFormat);

View file

@ -5,6 +5,7 @@
#include "decklist.h" #include "decklist.h"
#include "carddatabase.h" #include "carddatabase.h"
#include "settingscache.h" #include "settingscache.h"
#include "thememanager.h"
#include "main.h" #include "main.h"
DeckViewCardDragItem::DeckViewCardDragItem(DeckViewCard *_item, const QPointF &_hotSpot, AbstractCardDragItem *parentDrag) DeckViewCardDragItem::DeckViewCardDragItem(DeckViewCard *_item, const QPointF &_hotSpot, AbstractCardDragItem *parentDrag)
@ -128,10 +129,6 @@ void DeckViewCard::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
DeckViewCardContainer::DeckViewCardContainer(const QString &_name) DeckViewCardContainer::DeckViewCardContainer(const QString &_name)
: QGraphicsItem(), name(_name), width(0), height(0) : QGraphicsItem(), name(_name), width(0), height(0)
{ {
QString bgPath = settingsCache->getTableBgPath();
if (!bgPath.isEmpty())
bgPixmap.load(bgPath);
setCacheMode(DeviceCoordinateCache); setCacheMode(DeviceCoordinateCache);
} }
@ -144,17 +141,7 @@ void DeckViewCardContainer::paint(QPainter *painter, const QStyleOptionGraphicsI
{ {
qreal totalTextWidth = getCardTypeTextWidth(); qreal totalTextWidth = getCardTypeTextWidth();
if (bgPixmap.isNull()) { painter->fillRect(boundingRect(), themeManager->getTableBgBrush());
QLinearGradient grad1(0, 0, 1, 0);
grad1.setCoordinateMode(QGradient::ObjectBoundingMode);
grad1.setColorAt(0, QColor(30, 30, 30));
grad1.setColorAt(1, QColor(80, 80, 80));
painter->fillRect(QRectF(0, 0, width, height), QBrush(grad1));
painter->fillRect(boundingRect(), QColor(0, 0, 0, 80));
}
else
painter->fillRect(boundingRect(), QBrush(bgPixmap));
painter->setPen(QColor(255, 255, 255, 100)); painter->setPen(QColor(255, 255, 255, 100));
painter->drawLine(QPointF(0, separatorY), QPointF(width, separatorY)); painter->drawLine(QPointF(0, separatorY), QPointF(width, separatorY));

View file

@ -53,7 +53,6 @@ private:
QMultiMap<QString, DeckViewCard *> cardsByType; QMultiMap<QString, DeckViewCard *> cardsByType;
QList<QPair<int, int> > currentRowsAndCols; QList<QPair<int, int> > currentRowsAndCols;
qreal width, height; qreal width, height;
QPixmap bgPixmap;
int getCardTypeTextWidth() const; int getCardTypeTextWidth() const;
public: public:
enum { Type = typeDeckViewCardContainer }; enum { Type = typeDeckViewCardContainer };

View file

@ -83,10 +83,10 @@ DlgEditTokens::DlgEditTokens(CardDatabaseModel *_cardDatabaseModel, QWidget *par
connect(chooseTokenView->selectionModel(), SIGNAL(currentRowChanged(QModelIndex, QModelIndex)), this, SLOT(tokenSelectionChanged(QModelIndex, QModelIndex))); connect(chooseTokenView->selectionModel(), SIGNAL(currentRowChanged(QModelIndex, QModelIndex)), this, SLOT(tokenSelectionChanged(QModelIndex, QModelIndex)));
QAction *aAddToken = new QAction(tr("Add token"), this); QAction *aAddToken = new QAction(tr("Add token"), this);
aAddToken->setIcon(QIcon(":/resources/increment.svg")); aAddToken->setIcon(QIcon("theme:icons/increment.svg"));
connect(aAddToken, SIGNAL(triggered()), this, SLOT(actAddToken())); connect(aAddToken, SIGNAL(triggered()), this, SLOT(actAddToken()));
QAction *aRemoveToken = new QAction(tr("Remove token"), this); QAction *aRemoveToken = new QAction(tr("Remove token"), this);
aRemoveToken->setIcon(QIcon(":/resources/decrement.svg")); aRemoveToken->setIcon(QIcon("theme:icons/decrement.svg"));
connect(aRemoveToken, SIGNAL(triggered()), this, SLOT(actRemoveToken())); connect(aRemoveToken, SIGNAL(triggered()), this, SLOT(actRemoveToken()));
QToolBar *databaseToolBar = new QToolBar; QToolBar *databaseToolBar = new QToolBar;

View file

@ -18,9 +18,9 @@ DlgEditUser::DlgEditUser(QWidget *parent, QString email, int gender, QString cou
genderLabel = new QLabel(tr("Pronouns:")); genderLabel = new QLabel(tr("Pronouns:"));
genderEdit = new QComboBox(); genderEdit = new QComboBox();
genderLabel->setBuddy(genderEdit); genderLabel->setBuddy(genderEdit);
genderEdit->insertItem(0, QIcon(":/resources/genders/unknown.svg"), tr("Neutral")); genderEdit->insertItem(0, QIcon("theme:genders/unknown.svg"), tr("Neutral"));
genderEdit->insertItem(1, QIcon(":/resources/genders/male.svg"), tr("Masculine")); genderEdit->insertItem(1, QIcon("theme:genders/male.svg"), tr("Masculine"));
genderEdit->insertItem(2, QIcon(":/resources/genders/female.svg"), tr("Feminine")); genderEdit->insertItem(2, QIcon("theme:genders/female.svg"), tr("Feminine"));
genderEdit->setCurrentIndex(gender + 1); genderEdit->setCurrentIndex(gender + 1);
countryLabel = new QLabel(tr("Country:")); countryLabel = new QLabel(tr("Country:"));
@ -33,7 +33,7 @@ DlgEditUser::DlgEditUser(QWidget *parent, QString email, int gender, QString cou
int i = 1; int i = 1;
foreach(QString c, countries) foreach(QString c, countries)
{ {
countryEdit->addItem(QPixmap(":/resources/countries/" + c + ".svg"), c); countryEdit->addItem(QPixmap("theme:countries/" + c.toLower() + ".svg"), c);
if (c == country) if (c == country)
countryEdit->setCurrentIndex(i); countryEdit->setCurrentIndex(i);

View file

@ -46,19 +46,268 @@ DlgRegister::DlgRegister(QWidget *parent)
genderLabel = new QLabel(tr("Pronouns:")); genderLabel = new QLabel(tr("Pronouns:"));
genderEdit = new QComboBox(); genderEdit = new QComboBox();
genderLabel->setBuddy(genderEdit); genderLabel->setBuddy(genderEdit);
genderEdit->insertItem(0, QIcon(":/resources/genders/unknown.svg"), tr("Neutral")); genderEdit->insertItem(0, QIcon("theme:genders/unknown.svg"), tr("Neutral"));
genderEdit->insertItem(1, QIcon(":/resources/genders/male.svg"), tr("Masculine")); genderEdit->insertItem(1, QIcon("theme:genders/male.svg"), tr("Masculine"));
genderEdit->insertItem(2, QIcon(":/resources/genders/female.svg"), tr("Feminine")); genderEdit->insertItem(2, QIcon("theme:genders/female.svg"), tr("Feminine"));
genderEdit->setCurrentIndex(0); genderEdit->setCurrentIndex(0);
countryLabel = new QLabel(tr("Country:")); countryLabel = new QLabel(tr("Country:"));
countryEdit = new QComboBox(); countryEdit = new QComboBox();
countryLabel->setBuddy(countryEdit); countryLabel->setBuddy(countryEdit);
countryEdit->insertItem(0, tr("Undefined")); countryEdit->insertItem(0, tr("Undefined"));
countryEdit->addItem(QPixmap("theme:countries/ad.svg"), "ad");
countryEdit->addItem(QIcon("theme:countries/ae.svg"), "ae");
countryEdit->addItem(QIcon("theme:countries/af.svg"), "af");
countryEdit->addItem(QIcon("theme:countries/ag.svg"), "ag");
countryEdit->addItem(QIcon("theme:countries/ai.svg"), "ai");
countryEdit->addItem(QIcon("theme:countries/al.svg"), "al");
countryEdit->addItem(QIcon("theme:countries/am.svg"), "am");
countryEdit->addItem(QIcon("theme:countries/ao.svg"), "ao");
countryEdit->addItem(QIcon("theme:countries/aq.svg"), "aq");
countryEdit->addItem(QIcon("theme:countries/ar.svg"), "ar");
countryEdit->addItem(QIcon("theme:countries/as.svg"), "as");
countryEdit->addItem(QIcon("theme:countries/at.svg"), "at");
countryEdit->addItem(QIcon("theme:countries/au.svg"), "au");
countryEdit->addItem(QIcon("theme:countries/aw.svg"), "aw");
countryEdit->addItem(QIcon("theme:countries/ax.svg"), "ax");
countryEdit->addItem(QIcon("theme:countries/az.svg"), "az");
countryEdit->addItem(QIcon("theme:countries/ba.svg"), "ba");
countryEdit->addItem(QIcon("theme:countries/bb.svg"), "bb");
countryEdit->addItem(QIcon("theme:countries/bd.svg"), "bd");
countryEdit->addItem(QIcon("theme:countries/be.svg"), "be");
countryEdit->addItem(QIcon("theme:countries/bf.svg"), "bf");
countryEdit->addItem(QIcon("theme:countries/bg.svg"), "bg");
countryEdit->addItem(QIcon("theme:countries/bh.svg"), "bh");
countryEdit->addItem(QIcon("theme:countries/bi.svg"), "bi");
countryEdit->addItem(QIcon("theme:countries/bj.svg"), "bj");
countryEdit->addItem(QIcon("theme:countries/bl.svg"), "bl");
countryEdit->addItem(QIcon("theme:countries/bm.svg"), "bm");
countryEdit->addItem(QIcon("theme:countries/bn.svg"), "bn");
countryEdit->addItem(QIcon("theme:countries/bo.svg"), "bo");
countryEdit->addItem(QIcon("theme:countries/bq.svg"), "bq");
countryEdit->addItem(QIcon("theme:countries/br.svg"), "br");
countryEdit->addItem(QIcon("theme:countries/bs.svg"), "bs");
countryEdit->addItem(QIcon("theme:countries/bt.svg"), "bt");
countryEdit->addItem(QIcon("theme:countries/bv.svg"), "bv");
countryEdit->addItem(QIcon("theme:countries/bw.svg"), "bw");
countryEdit->addItem(QIcon("theme:countries/by.svg"), "by");
countryEdit->addItem(QIcon("theme:countries/bz.svg"), "bz");
countryEdit->addItem(QIcon("theme:countries/ca.svg"), "ca");
countryEdit->addItem(QIcon("theme:countries/cc.svg"), "cc");
countryEdit->addItem(QIcon("theme:countries/cd.svg"), "cd");
countryEdit->addItem(QIcon("theme:countries/cf.svg"), "cf");
countryEdit->addItem(QIcon("theme:countries/cg.svg"), "cg");
countryEdit->addItem(QIcon("theme:countries/ch.svg"), "ch");
countryEdit->addItem(QIcon("theme:countries/ci.svg"), "ci");
countryEdit->addItem(QIcon("theme:countries/ck.svg"), "ck");
countryEdit->addItem(QIcon("theme:countries/cl.svg"), "cl");
countryEdit->addItem(QIcon("theme:countries/cm.svg"), "cm");
countryEdit->addItem(QIcon("theme:countries/cn.svg"), "cn");
countryEdit->addItem(QIcon("theme:countries/co.svg"), "co");
countryEdit->addItem(QIcon("theme:countries/cr.svg"), "cr");
countryEdit->addItem(QIcon("theme:countries/cu.svg"), "cu");
countryEdit->addItem(QIcon("theme:countries/cv.svg"), "cv");
countryEdit->addItem(QIcon("theme:countries/cw.svg"), "cw");
countryEdit->addItem(QIcon("theme:countries/cx.svg"), "cx");
countryEdit->addItem(QIcon("theme:countries/cy.svg"), "cy");
countryEdit->addItem(QIcon("theme:countries/cz.svg"), "cz");
countryEdit->addItem(QIcon("theme:countries/de.svg"), "de");
countryEdit->addItem(QIcon("theme:countries/dj.svg"), "dj");
countryEdit->addItem(QIcon("theme:countries/dk.svg"), "dk");
countryEdit->addItem(QIcon("theme:countries/dm.svg"), "dm");
countryEdit->addItem(QIcon("theme:countries/do.svg"), "do");
countryEdit->addItem(QIcon("theme:countries/dz.svg"), "dz");
countryEdit->addItem(QIcon("theme:countries/ec.svg"), "ec");
countryEdit->addItem(QIcon("theme:countries/ee.svg"), "ee");
countryEdit->addItem(QIcon("theme:countries/eg.svg"), "eg");
countryEdit->addItem(QIcon("theme:countries/eh.svg"), "eh");
countryEdit->addItem(QIcon("theme:countries/er.svg"), "er");
countryEdit->addItem(QIcon("theme:countries/es.svg"), "es");
countryEdit->addItem(QIcon("theme:countries/et.svg"), "et");
countryEdit->addItem(QIcon("theme:countries/fi.svg"), "fi");
countryEdit->addItem(QIcon("theme:countries/fj.svg"), "fj");
countryEdit->addItem(QIcon("theme:countries/fk.svg"), "fk");
countryEdit->addItem(QIcon("theme:countries/fm.svg"), "fm");
countryEdit->addItem(QIcon("theme:countries/fo.svg"), "fo");
countryEdit->addItem(QIcon("theme:countries/fr.svg"), "fr");
countryEdit->addItem(QIcon("theme:countries/ga.svg"), "ga");
countryEdit->addItem(QIcon("theme:countries/gb.svg"), "gb");
countryEdit->addItem(QIcon("theme:countries/gd.svg"), "gd");
countryEdit->addItem(QIcon("theme:countries/ge.svg"), "ge");
countryEdit->addItem(QIcon("theme:countries/gf.svg"), "gf");
countryEdit->addItem(QIcon("theme:countries/gg.svg"), "gg");
countryEdit->addItem(QIcon("theme:countries/gh.svg"), "gh");
countryEdit->addItem(QIcon("theme:countries/gi.svg"), "gi");
countryEdit->addItem(QIcon("theme:countries/gl.svg"), "gl");
countryEdit->addItem(QIcon("theme:countries/gm.svg"), "gm");
countryEdit->addItem(QIcon("theme:countries/gn.svg"), "gn");
countryEdit->addItem(QIcon("theme:countries/gp.svg"), "gp");
countryEdit->addItem(QIcon("theme:countries/gq.svg"), "gq");
countryEdit->addItem(QIcon("theme:countries/gr.svg"), "gr");
countryEdit->addItem(QIcon("theme:countries/gs.svg"), "gs");
countryEdit->addItem(QIcon("theme:countries/gt.svg"), "gt");
countryEdit->addItem(QIcon("theme:countries/gu.svg"), "gu");
countryEdit->addItem(QIcon("theme:countries/gw.svg"), "gw");
countryEdit->addItem(QIcon("theme:countries/gy.svg"), "gy");
countryEdit->addItem(QIcon("theme:countries/hk.svg"), "hk");
countryEdit->addItem(QIcon("theme:countries/hm.svg"), "hm");
countryEdit->addItem(QIcon("theme:countries/hn.svg"), "hn");
countryEdit->addItem(QIcon("theme:countries/hr.svg"), "hr");
countryEdit->addItem(QIcon("theme:countries/ht.svg"), "ht");
countryEdit->addItem(QIcon("theme:countries/hu.svg"), "hu");
countryEdit->addItem(QIcon("theme:countries/id.svg"), "id");
countryEdit->addItem(QIcon("theme:countries/ie.svg"), "ie");
countryEdit->addItem(QIcon("theme:countries/il.svg"), "il");
countryEdit->addItem(QIcon("theme:countries/im.svg"), "im");
countryEdit->addItem(QIcon("theme:countries/in.svg"), "in");
countryEdit->addItem(QIcon("theme:countries/io.svg"), "io");
countryEdit->addItem(QIcon("theme:countries/iq.svg"), "iq");
countryEdit->addItem(QIcon("theme:countries/ir.svg"), "ir");
countryEdit->addItem(QIcon("theme:countries/is.svg"), "is");
countryEdit->addItem(QIcon("theme:countries/it.svg"), "it");
countryEdit->addItem(QIcon("theme:countries/je.svg"), "je");
countryEdit->addItem(QIcon("theme:countries/jm.svg"), "jm");
countryEdit->addItem(QIcon("theme:countries/jo.svg"), "jo");
countryEdit->addItem(QIcon("theme:countries/jp.svg"), "jp");
countryEdit->addItem(QIcon("theme:countries/ke.svg"), "ke");
countryEdit->addItem(QIcon("theme:countries/kg.svg"), "kg");
countryEdit->addItem(QIcon("theme:countries/kh.svg"), "kh");
countryEdit->addItem(QIcon("theme:countries/ki.svg"), "ki");
countryEdit->addItem(QIcon("theme:countries/km.svg"), "km");
countryEdit->addItem(QIcon("theme:countries/kn.svg"), "kn");
countryEdit->addItem(QIcon("theme:countries/kp.svg"), "kp");
countryEdit->addItem(QIcon("theme:countries/kr.svg"), "kr");
countryEdit->addItem(QIcon("theme:countries/kw.svg"), "kw");
countryEdit->addItem(QIcon("theme:countries/ky.svg"), "ky");
countryEdit->addItem(QIcon("theme:countries/kz.svg"), "kz");
countryEdit->addItem(QIcon("theme:countries/la.svg"), "la");
countryEdit->addItem(QIcon("theme:countries/lb.svg"), "lb");
countryEdit->addItem(QIcon("theme:countries/lc.svg"), "lc");
countryEdit->addItem(QIcon("theme:countries/li.svg"), "li");
countryEdit->addItem(QIcon("theme:countries/lk.svg"), "lk");
countryEdit->addItem(QIcon("theme:countries/lr.svg"), "lr");
countryEdit->addItem(QIcon("theme:countries/ls.svg"), "ls");
countryEdit->addItem(QIcon("theme:countries/lt.svg"), "lt");
countryEdit->addItem(QIcon("theme:countries/lu.svg"), "lu");
countryEdit->addItem(QIcon("theme:countries/lv.svg"), "lv");
countryEdit->addItem(QIcon("theme:countries/ly.svg"), "ly");
countryEdit->addItem(QIcon("theme:countries/ma.svg"), "ma");
countryEdit->addItem(QIcon("theme:countries/mc.svg"), "mc");
countryEdit->addItem(QIcon("theme:countries/md.svg"), "md");
countryEdit->addItem(QIcon("theme:countries/me.svg"), "me");
countryEdit->addItem(QIcon("theme:countries/mf.svg"), "mf");
countryEdit->addItem(QIcon("theme:countries/mg.svg"), "mg");
countryEdit->addItem(QIcon("theme:countries/mh.svg"), "mh");
countryEdit->addItem(QIcon("theme:countries/mk.svg"), "mk");
countryEdit->addItem(QIcon("theme:countries/ml.svg"), "ml");
countryEdit->addItem(QIcon("theme:countries/mm.svg"), "mm");
countryEdit->addItem(QIcon("theme:countries/mn.svg"), "mn");
countryEdit->addItem(QIcon("theme:countries/mo.svg"), "mo");
countryEdit->addItem(QIcon("theme:countries/mp.svg"), "mp");
countryEdit->addItem(QIcon("theme:countries/mq.svg"), "mq");
countryEdit->addItem(QIcon("theme:countries/mr.svg"), "mr");
countryEdit->addItem(QIcon("theme:countries/ms.svg"), "ms");
countryEdit->addItem(QIcon("theme:countries/mt.svg"), "mt");
countryEdit->addItem(QIcon("theme:countries/mu.svg"), "mu");
countryEdit->addItem(QIcon("theme:countries/mv.svg"), "mv");
countryEdit->addItem(QIcon("theme:countries/mw.svg"), "mw");
countryEdit->addItem(QIcon("theme:countries/mx.svg"), "mx");
countryEdit->addItem(QIcon("theme:countries/my.svg"), "my");
countryEdit->addItem(QIcon("theme:countries/mz.svg"), "mz");
countryEdit->addItem(QIcon("theme:countries/na.svg"), "na");
countryEdit->addItem(QIcon("theme:countries/nc.svg"), "nc");
countryEdit->addItem(QIcon("theme:countries/ne.svg"), "ne");
countryEdit->addItem(QIcon("theme:countries/nf.svg"), "nf");
countryEdit->addItem(QIcon("theme:countries/ng.svg"), "ng");
countryEdit->addItem(QIcon("theme:countries/ni.svg"), "ni");
countryEdit->addItem(QIcon("theme:countries/nl.svg"), "nl");
countryEdit->addItem(QIcon("theme:countries/no.svg"), "no");
countryEdit->addItem(QIcon("theme:countries/np.svg"), "np");
countryEdit->addItem(QIcon("theme:countries/nr.svg"), "nr");
countryEdit->addItem(QIcon("theme:countries/nu.svg"), "nu");
countryEdit->addItem(QIcon("theme:countries/nz.svg"), "nz");
countryEdit->addItem(QIcon("theme:countries/om.svg"), "om");
countryEdit->addItem(QIcon("theme:countries/pa.svg"), "pa");
countryEdit->addItem(QIcon("theme:countries/pe.svg"), "pe");
countryEdit->addItem(QIcon("theme:countries/pf.svg"), "pf");
countryEdit->addItem(QIcon("theme:countries/pg.svg"), "pg");
countryEdit->addItem(QIcon("theme:countries/ph.svg"), "ph");
countryEdit->addItem(QIcon("theme:countries/pk.svg"), "pk");
countryEdit->addItem(QIcon("theme:countries/pl.svg"), "pl");
countryEdit->addItem(QIcon("theme:countries/pm.svg"), "pm");
countryEdit->addItem(QIcon("theme:countries/pn.svg"), "pn");
countryEdit->addItem(QIcon("theme:countries/pr.svg"), "pr");
countryEdit->addItem(QIcon("theme:countries/ps.svg"), "ps");
countryEdit->addItem(QIcon("theme:countries/pt.svg"), "pt");
countryEdit->addItem(QIcon("theme:countries/pw.svg"), "pw");
countryEdit->addItem(QIcon("theme:countries/py.svg"), "py");
countryEdit->addItem(QIcon("theme:countries/qa.svg"), "qa");
countryEdit->addItem(QIcon("theme:countries/re.svg"), "re");
countryEdit->addItem(QIcon("theme:countries/ro.svg"), "ro");
countryEdit->addItem(QIcon("theme:countries/rs.svg"), "rs");
countryEdit->addItem(QIcon("theme:countries/ru.svg"), "ru");
countryEdit->addItem(QIcon("theme:countries/rw.svg"), "rw");
countryEdit->addItem(QIcon("theme:countries/sa.svg"), "sa");
countryEdit->addItem(QIcon("theme:countries/sb.svg"), "sb");
countryEdit->addItem(QIcon("theme:countries/sc.svg"), "sc");
countryEdit->addItem(QIcon("theme:countries/sd.svg"), "sd");
countryEdit->addItem(QIcon("theme:countries/se.svg"), "se");
countryEdit->addItem(QIcon("theme:countries/sg.svg"), "sg");
countryEdit->addItem(QIcon("theme:countries/sh.svg"), "sh");
countryEdit->addItem(QIcon("theme:countries/si.svg"), "si");
countryEdit->addItem(QIcon("theme:countries/sj.svg"), "sj");
countryEdit->addItem(QIcon("theme:countries/sk.svg"), "sk");
countryEdit->addItem(QIcon("theme:countries/sl.svg"), "sl");
countryEdit->addItem(QIcon("theme:countries/sm.svg"), "sm");
countryEdit->addItem(QIcon("theme:countries/sn.svg"), "sn");
countryEdit->addItem(QIcon("theme:countries/so.svg"), "so");
countryEdit->addItem(QIcon("theme:countries/sr.svg"), "sr");
countryEdit->addItem(QIcon("theme:countries/ss.svg"), "ss");
countryEdit->addItem(QIcon("theme:countries/st.svg"), "st");
countryEdit->addItem(QIcon("theme:countries/sv.svg"), "sv");
countryEdit->addItem(QIcon("theme:countries/sx.svg"), "sx");
countryEdit->addItem(QIcon("theme:countries/sy.svg"), "sy");
countryEdit->addItem(QIcon("theme:countries/sz.svg"), "sz");
countryEdit->addItem(QIcon("theme:countries/tc.svg"), "tc");
countryEdit->addItem(QIcon("theme:countries/td.svg"), "td");
countryEdit->addItem(QIcon("theme:countries/tf.svg"), "tf");
countryEdit->addItem(QIcon("theme:countries/tg.svg"), "tg");
countryEdit->addItem(QIcon("theme:countries/th.svg"), "th");
countryEdit->addItem(QIcon("theme:countries/tj.svg"), "tj");
countryEdit->addItem(QIcon("theme:countries/tk.svg"), "tk");
countryEdit->addItem(QIcon("theme:countries/tl.svg"), "tl");
countryEdit->addItem(QIcon("theme:countries/tm.svg"), "tm");
countryEdit->addItem(QIcon("theme:countries/tn.svg"), "tn");
countryEdit->addItem(QIcon("theme:countries/to.svg"), "to");
countryEdit->addItem(QIcon("theme:countries/tr.svg"), "tr");
countryEdit->addItem(QIcon("theme:countries/tt.svg"), "tt");
countryEdit->addItem(QIcon("theme:countries/tv.svg"), "tv");
countryEdit->addItem(QIcon("theme:countries/tw.svg"), "tw");
countryEdit->addItem(QIcon("theme:countries/tz.svg"), "tz");
countryEdit->addItem(QIcon("theme:countries/ua.svg"), "ua");
countryEdit->addItem(QIcon("theme:countries/ug.svg"), "ug");
countryEdit->addItem(QIcon("theme:countries/um.svg"), "um");
countryEdit->addItem(QIcon("theme:countries/us.svg"), "us");
countryEdit->addItem(QIcon("theme:countries/uy.svg"), "uy");
countryEdit->addItem(QIcon("theme:countries/uz.svg"), "uz");
countryEdit->addItem(QIcon("theme:countries/va.svg"), "va");
countryEdit->addItem(QIcon("theme:countries/vc.svg"), "vc");
countryEdit->addItem(QIcon("theme:countries/ve.svg"), "ve");
countryEdit->addItem(QIcon("theme:countries/vg.svg"), "vg");
countryEdit->addItem(QIcon("theme:countries/vi.svg"), "vi");
countryEdit->addItem(QIcon("theme:countries/vn.svg"), "vn");
countryEdit->addItem(QIcon("theme:countries/vu.svg"), "vu");
countryEdit->addItem(QIcon("theme:countries/wf.svg"), "wf");
countryEdit->addItem(QIcon("theme:countries/ws.svg"), "ws");
countryEdit->addItem(QIcon("theme:countries/ye.svg"), "ye");
countryEdit->addItem(QIcon("theme:countries/yt.svg"), "yt");
countryEdit->addItem(QIcon("theme:countries/za.svg"), "za");
countryEdit->addItem(QIcon("theme:countries/zm.svg"), "zm");
countryEdit->addItem(QIcon("theme:countries/zw.svg"), "zw");
countryEdit->setCurrentIndex(0); countryEdit->setCurrentIndex(0);
QStringList countries = settingsCache->getCountries(); QStringList countries = settingsCache->getCountries();
foreach(QString c, countries) foreach(QString c, countries)
countryEdit->addItem(QPixmap(":/resources/countries/" + c + ".svg"), c); countryEdit->addItem(QPixmap("theme:countries/" + c.toLower() + ".svg"), c);
realnameLabel = new QLabel(tr("Real name:")); realnameLabel = new QLabel(tr("Real name:"));
realnameEdit = new QLineEdit(); realnameEdit = new QLineEdit();

View file

@ -25,6 +25,7 @@
#include "dlg_settings.h" #include "dlg_settings.h"
#include "main.h" #include "main.h"
#include "settingscache.h" #include "settingscache.h"
#include "thememanager.h"
#include "priceupdater.h" #include "priceupdater.h"
#include "soundengine.h" #include "soundengine.h"
#include "sequenceEdit/shortcutstab.h" #include "sequenceEdit/shortcutstab.h"
@ -254,67 +255,23 @@ void GeneralSettingsPage::setEnabledStatus(bool status)
AppearanceSettingsPage::AppearanceSettingsPage() AppearanceSettingsPage::AppearanceSettingsPage()
{ {
QIcon deleteIcon(":/resources/icon_delete.svg"); QString themeName = settingsCache->getThemeName();
handBgEdit = new QLineEdit(settingsCache->getHandBgPath());
handBgEdit->setReadOnly(true);
QPushButton *handBgClearButton = new QPushButton(deleteIcon, QString());
connect(handBgClearButton, SIGNAL(clicked()), this, SLOT(handBgClearButtonClicked()));
QPushButton *handBgButton = new QPushButton("...");
connect(handBgButton, SIGNAL(clicked()), this, SLOT(handBgButtonClicked()));
stackBgEdit = new QLineEdit(settingsCache->getStackBgPath());
stackBgEdit->setReadOnly(true);
QPushButton *stackBgClearButton = new QPushButton(deleteIcon, QString());
connect(stackBgClearButton, SIGNAL(clicked()), this, SLOT(stackBgClearButtonClicked()));
QPushButton *stackBgButton = new QPushButton("...");
connect(stackBgButton, SIGNAL(clicked()), this, SLOT(stackBgButtonClicked()));
tableBgEdit = new QLineEdit(settingsCache->getTableBgPath()); QStringList themeDirs = themeManager->getAvailableThemes().keys();
tableBgEdit->setReadOnly(true); for (int i = 0; i < themeDirs.size(); i++) {
QPushButton *tableBgClearButton = new QPushButton(deleteIcon, QString()); themeBox.addItem(themeDirs[i]);
connect(tableBgClearButton, SIGNAL(clicked()), this, SLOT(tableBgClearButtonClicked())); if (themeDirs[i] == themeName)
QPushButton *tableBgButton = new QPushButton("..."); themeBox.setCurrentIndex(i);
connect(tableBgButton, SIGNAL(clicked()), this, SLOT(tableBgButtonClicked())); }
playerAreaBgEdit = new QLineEdit(settingsCache->getPlayerBgPath());
playerAreaBgEdit->setReadOnly(true);
QPushButton *playerAreaBgClearButton = new QPushButton(deleteIcon, QString());
connect(playerAreaBgClearButton, SIGNAL(clicked()), this, SLOT(playerAreaBgClearButtonClicked()));
QPushButton *playerAreaBgButton = new QPushButton("...");
connect(playerAreaBgButton, SIGNAL(clicked()), this, SLOT(playerAreaBgButtonClicked()));
cardBackPicturePathEdit = new QLineEdit(settingsCache->getCardBackPicturePath());
cardBackPicturePathEdit->setReadOnly(true);
QPushButton *cardBackPicturePathClearButton = new QPushButton(deleteIcon, QString());
connect(cardBackPicturePathClearButton, SIGNAL(clicked()), this, SLOT(cardBackPicturePathClearButtonClicked()));
QPushButton *cardBackPicturePathButton = new QPushButton("...");
connect(cardBackPicturePathButton, SIGNAL(clicked()), this, SLOT(cardBackPicturePathButtonClicked()));
QGridLayout *zoneBgGrid = new QGridLayout;
zoneBgGrid->addWidget(&handBgLabel, 0, 0);
zoneBgGrid->addWidget(handBgEdit, 0, 1);
zoneBgGrid->addWidget(handBgClearButton, 0, 2);
zoneBgGrid->addWidget(handBgButton, 0, 3);
zoneBgGrid->addWidget(&stackBgLabel, 1, 0);
zoneBgGrid->addWidget(stackBgEdit, 1, 1);
zoneBgGrid->addWidget(stackBgClearButton, 1, 2);
zoneBgGrid->addWidget(stackBgButton, 1, 3);
zoneBgGrid->addWidget(&tableBgLabel, 2, 0);
zoneBgGrid->addWidget(tableBgEdit, 2, 1);
zoneBgGrid->addWidget(tableBgClearButton, 2, 2);
zoneBgGrid->addWidget(tableBgButton, 2, 3);
zoneBgGrid->addWidget(&playerAreaBgLabel, 3, 0);
zoneBgGrid->addWidget(playerAreaBgEdit, 3, 1);
zoneBgGrid->addWidget(playerAreaBgClearButton, 3, 2);
zoneBgGrid->addWidget(playerAreaBgButton, 3, 3);
zoneBgGrid->addWidget(&cardBackPicturePathLabel, 4, 0);
zoneBgGrid->addWidget(cardBackPicturePathEdit, 4, 1);
zoneBgGrid->addWidget(cardBackPicturePathClearButton, 4, 2);
zoneBgGrid->addWidget(cardBackPicturePathButton, 4, 3);
zoneBgGroupBox = new QGroupBox; connect(&themeBox, SIGNAL(currentIndexChanged(int)), this, SLOT(themeBoxChanged(int)));
zoneBgGroupBox->setLayout(zoneBgGrid);
QGridLayout *themeGrid = new QGridLayout;
themeGrid->addWidget(&themeLabel, 0, 0);
themeGrid->addWidget(&themeBox, 0, 1);
themeGroupBox = new QGroupBox;
themeGroupBox->setLayout(themeGrid);
displayCardNamesCheckBox.setChecked(settingsCache->getDisplayCardNames()); displayCardNamesCheckBox.setChecked(settingsCache->getDisplayCardNames());
connect(&displayCardNamesCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setDisplayCardNames(int))); connect(&displayCardNamesCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setDisplayCardNames(int)));
@ -359,7 +316,7 @@ AppearanceSettingsPage::AppearanceSettingsPage()
tableGroupBox->setLayout(tableGrid); tableGroupBox->setLayout(tableGrid);
QVBoxLayout *mainLayout = new QVBoxLayout; QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(zoneBgGroupBox); mainLayout->addWidget(themeGroupBox);
mainLayout->addWidget(cardsGroupBox); mainLayout->addWidget(cardsGroupBox);
mainLayout->addWidget(handGroupBox); mainLayout->addWidget(handGroupBox);
mainLayout->addWidget(tableGroupBox); mainLayout->addWidget(tableGroupBox);
@ -367,14 +324,17 @@ AppearanceSettingsPage::AppearanceSettingsPage()
setLayout(mainLayout); setLayout(mainLayout);
} }
void AppearanceSettingsPage::themeBoxChanged(int index)
{
QStringList themeDirs = themeManager->getAvailableThemes().keys();
if(index >= 0 && index < themeDirs.count())
settingsCache->setThemeName(themeDirs.at(index));
}
void AppearanceSettingsPage::retranslateUi() void AppearanceSettingsPage::retranslateUi()
{ {
zoneBgGroupBox->setTitle(tr("Zone background pictures")); themeGroupBox->setTitle(tr("Theme settings"));
handBgLabel.setText(tr("Hand background:")); themeLabel.setText(tr("Current theme:"));
stackBgLabel.setText(tr("Stack background:"));
tableBgLabel.setText(tr("Table background:"));
playerAreaBgLabel.setText(tr("Player info background:"));
cardBackPicturePathLabel.setText(tr("Card back:"));
cardsGroupBox->setTitle(tr("Card rendering")); cardsGroupBox->setTitle(tr("Card rendering"));
displayCardNamesCheckBox.setText(tr("Display card names on cards having a picture")); displayCardNamesCheckBox.setText(tr("Display card names on cards having a picture"));
@ -389,86 +349,6 @@ void AppearanceSettingsPage::retranslateUi()
minPlayersForMultiColumnLayoutLabel.setText(tr("Minimum player count for multi-column layout:")); minPlayersForMultiColumnLayoutLabel.setText(tr("Minimum player count for multi-column layout:"));
} }
void AppearanceSettingsPage::handBgClearButtonClicked()
{
handBgEdit->setText(QString());
settingsCache->setHandBgPath(QString());
}
void AppearanceSettingsPage::handBgButtonClicked()
{
QString path = QFileDialog::getOpenFileName(this, tr("Choose path"));
if (path.isEmpty())
return;
handBgEdit->setText(path);
settingsCache->setHandBgPath(path);
}
void AppearanceSettingsPage::stackBgClearButtonClicked()
{
stackBgEdit->setText(QString());
settingsCache->setStackBgPath(QString());
}
void AppearanceSettingsPage::stackBgButtonClicked()
{
QString path = QFileDialog::getOpenFileName(this, tr("Choose path"));
if (path.isEmpty())
return;
stackBgEdit->setText(path);
settingsCache->setStackBgPath(path);
}
void AppearanceSettingsPage::tableBgClearButtonClicked()
{
tableBgEdit->setText(QString());
settingsCache->setTableBgPath(QString());
}
void AppearanceSettingsPage::tableBgButtonClicked()
{
QString path = QFileDialog::getOpenFileName(this, tr("Choose path"));
if (path.isEmpty())
return;
tableBgEdit->setText(path);
settingsCache->setTableBgPath(path);
}
void AppearanceSettingsPage::playerAreaBgClearButtonClicked()
{
playerAreaBgEdit->setText(QString());
settingsCache->setPlayerBgPath(QString());
}
void AppearanceSettingsPage::playerAreaBgButtonClicked()
{
QString path = QFileDialog::getOpenFileName(this, tr("Choose path"));
if (path.isEmpty())
return;
playerAreaBgEdit->setText(path);
settingsCache->setPlayerBgPath(path);
}
void AppearanceSettingsPage::cardBackPicturePathClearButtonClicked()
{
cardBackPicturePathEdit->setText(QString());
settingsCache->setCardBackPicturePath(QString());
}
void AppearanceSettingsPage::cardBackPicturePathButtonClicked()
{
QString path = QFileDialog::getOpenFileName(this, tr("Choose path"));
if (path.isEmpty())
return;
cardBackPicturePathEdit->setText(path);
settingsCache->setCardBackPicturePath(path);
}
UserInterfaceSettingsPage::UserInterfaceSettingsPage() UserInterfaceSettingsPage::UserInterfaceSettingsPage()
{ {
notificationsEnabledCheckBox.setChecked(settingsCache->getNotificationsEnabled()); notificationsEnabledCheckBox.setChecked(settingsCache->getNotificationsEnabled());
@ -638,10 +518,10 @@ MessagesSettingsPage::MessagesSettingsPage()
messageList->addItem(settingsCache->messages().getMessageAt(i)); messageList->addItem(settingsCache->messages().getMessageAt(i));
aAdd = new QAction(this); aAdd = new QAction(this);
aAdd->setIcon(QIcon(":/resources/increment.svg")); aAdd->setIcon(QIcon("theme:icons/increment.svg"));
connect(aAdd, SIGNAL(triggered()), this, SLOT(actAdd())); connect(aAdd, SIGNAL(triggered()), this, SLOT(actAdd()));
aRemove = new QAction(this); aRemove = new QAction(this);
aRemove->setIcon(QIcon(":/resources/decrement.svg")); aRemove->setIcon(QIcon("theme:icons/decrement.svg"));
connect(aRemove, SIGNAL(triggered()), this, SLOT(actRemove())); connect(aRemove, SIGNAL(triggered()), this, SLOT(actRemove()));
QToolBar *messageToolBar = new QToolBar; QToolBar *messageToolBar = new QToolBar;
@ -751,7 +631,7 @@ void MessagesSettingsPage::retranslateUi()
SoundSettingsPage::SoundSettingsPage() SoundSettingsPage::SoundSettingsPage()
{ {
QIcon deleteIcon(":/resources/icon_delete.svg"); QIcon deleteIcon("theme:icons/delete.svg");
soundEnabledCheckBox.setChecked(settingsCache->getSoundEnabled()); soundEnabledCheckBox.setChecked(settingsCache->getSoundEnabled());
connect(&soundEnabledCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setSoundEnabled(int))); connect(&soundEnabledCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setSoundEnabled(int)));
@ -888,37 +768,37 @@ void DlgSettings::createIcons()
generalButton = new QListWidgetItem(contentsWidget); generalButton = new QListWidgetItem(contentsWidget);
generalButton->setTextAlignment(Qt::AlignHCenter); generalButton->setTextAlignment(Qt::AlignHCenter);
generalButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); generalButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
generalButton->setIcon(QIcon(":/resources/icon_config_general.svg")); generalButton->setIcon(QIcon("theme:config/general.svg"));
appearanceButton = new QListWidgetItem(contentsWidget); appearanceButton = new QListWidgetItem(contentsWidget);
appearanceButton->setTextAlignment(Qt::AlignHCenter); appearanceButton->setTextAlignment(Qt::AlignHCenter);
appearanceButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); appearanceButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
appearanceButton->setIcon(QIcon(":/resources/icon_config_appearance.svg")); appearanceButton->setIcon(QIcon("theme:config/appearance.svg"));
userInterfaceButton = new QListWidgetItem(contentsWidget); userInterfaceButton = new QListWidgetItem(contentsWidget);
userInterfaceButton->setTextAlignment(Qt::AlignHCenter); userInterfaceButton->setTextAlignment(Qt::AlignHCenter);
userInterfaceButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); userInterfaceButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
userInterfaceButton->setIcon(QIcon(":/resources/icon_config_interface.svg")); userInterfaceButton->setIcon(QIcon("theme:config/interface.svg"));
deckEditorButton = new QListWidgetItem(contentsWidget); deckEditorButton = new QListWidgetItem(contentsWidget);
deckEditorButton->setTextAlignment(Qt::AlignHCenter); deckEditorButton->setTextAlignment(Qt::AlignHCenter);
deckEditorButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); deckEditorButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
deckEditorButton->setIcon(QIcon(":/resources/icon_config_deckeditor.svg")); deckEditorButton->setIcon(QIcon("theme:config/deckeditor.svg"));
messagesButton = new QListWidgetItem(contentsWidget); messagesButton = new QListWidgetItem(contentsWidget);
messagesButton->setTextAlignment(Qt::AlignHCenter); messagesButton->setTextAlignment(Qt::AlignHCenter);
messagesButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); messagesButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
messagesButton->setIcon(QIcon(":/resources/icon_config_messages.svg")); messagesButton->setIcon(QIcon("theme:config/messages.svg"));
soundButton = new QListWidgetItem(contentsWidget); soundButton = new QListWidgetItem(contentsWidget);
soundButton->setTextAlignment(Qt::AlignHCenter); soundButton->setTextAlignment(Qt::AlignHCenter);
soundButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); soundButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
soundButton->setIcon(QIcon(":/resources/icon_config_sound.svg")); soundButton->setIcon(QIcon("theme:config/sound.svg"));
shortcutsButton = new QListWidgetItem(contentsWidget); shortcutsButton = new QListWidgetItem(contentsWidget);
shortcutsButton->setTextAlignment(Qt::AlignHCenter); shortcutsButton->setTextAlignment(Qt::AlignHCenter);
shortcutsButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); shortcutsButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
shortcutsButton->setIcon(QIcon(":/resources/icon_config_shorcuts.svg")); shortcutsButton->setIcon(QIcon("theme:config/shorcuts.svg"));
connect(contentsWidget, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(changePage(QListWidgetItem *, QListWidgetItem *))); connect(contentsWidget, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(changePage(QListWidgetItem *, QListWidgetItem *)));
} }

View file

@ -75,40 +75,17 @@ private:
class AppearanceSettingsPage : public AbstractSettingsPage { class AppearanceSettingsPage : public AbstractSettingsPage {
Q_OBJECT Q_OBJECT
private slots: private slots:
void handBgClearButtonClicked(); void themeBoxChanged(int index);
void handBgButtonClicked();
void stackBgClearButtonClicked();
void stackBgButtonClicked();
void tableBgClearButtonClicked();
void tableBgButtonClicked();
void playerAreaBgClearButtonClicked();
void playerAreaBgButtonClicked();
void cardBackPicturePathClearButtonClicked();
void cardBackPicturePathButtonClicked();
signals:
void handBgChanged(const QString &path);
void stackBgChanged(const QString &path);
void tableBgChanged(const QString &path);
void playerAreaBgChanged(const QString &path);
void cardBackPicturePathChanged(const QString &path);
private: private:
QLabel handBgLabel; QLabel themeLabel;
QLabel stackBgLabel; QComboBox themeBox;
QLabel tableBgLabel;
QLabel playerAreaBgLabel;
QLabel cardBackPicturePathLabel;
QLabel minPlayersForMultiColumnLayoutLabel; QLabel minPlayersForMultiColumnLayoutLabel;
QLineEdit *handBgEdit;
QLineEdit *stackBgEdit;
QLineEdit *tableBgEdit;
QLineEdit *playerAreaBgEdit;
QLineEdit *cardBackPicturePathEdit;
QCheckBox displayCardNamesCheckBox; QCheckBox displayCardNamesCheckBox;
QCheckBox cardScalingCheckBox; QCheckBox cardScalingCheckBox;
QCheckBox horizontalHandCheckBox; QCheckBox horizontalHandCheckBox;
QCheckBox leftJustifiedHandCheckBox; QCheckBox leftJustifiedHandCheckBox;
QCheckBox invertVerticalCoordinateCheckBox; QCheckBox invertVerticalCoordinateCheckBox;
QGroupBox *zoneBgGroupBox; QGroupBox *themeGroupBox;
QGroupBox *cardsGroupBox; QGroupBox *cardsGroupBox;
QGroupBox *handGroupBox; QGroupBox *handGroupBox;
QGroupBox *tableGroupBox; QGroupBox *tableGroupBox;

View file

@ -26,7 +26,7 @@ FilterBuilder::FilterBuilder(QWidget *parent)
QVariant(i) QVariant(i)
); );
QPushButton *ok = new QPushButton(QIcon(":/resources/increment.svg"), QString()); QPushButton *ok = new QPushButton(QIcon("theme:icons/increment.svg"), QString());
ok->setObjectName("ok"); ok->setObjectName("ok");
ok->setMaximumSize(20, 20); ok->setMaximumSize(20, 20);

View file

@ -60,10 +60,10 @@ GameSelector::GameSelector(AbstractClient *_client, const TabSupervisor *_tabSup
gameListView->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); gameListView->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
#endif #endif
filterButton = new QPushButton; filterButton = new QPushButton;
filterButton->setIcon(QIcon(":/resources/icon_search_black.svg")); filterButton->setIcon(QIcon("theme:icons/search.svg"));
connect(filterButton, SIGNAL(clicked()), this, SLOT(actSetFilter())); connect(filterButton, SIGNAL(clicked()), this, SLOT(actSetFilter()));
clearFilterButton = new QPushButton; clearFilterButton = new QPushButton;
clearFilterButton->setIcon(QIcon(":/resources/icon_clearsearch.svg")); clearFilterButton->setIcon(QIcon("theme:icons/clearsearch.svg"));
clearFilterButton->setEnabled(true); clearFilterButton->setEnabled(true);
connect(clearFilterButton, SIGNAL(clicked()), this, SLOT(actClearFilter())); connect(clearFilterButton, SIGNAL(clicked()), this, SLOT(actClearFilter()));

View file

@ -36,7 +36,7 @@ void HandCounter::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*op
#else #else
if (!QPixmapCache::find("handCounter" + QString::number(translatedSize.width()), cachedPixmap)) { if (!QPixmapCache::find("handCounter" + QString::number(translatedSize.width()), cachedPixmap)) {
#endif #endif
QSvgRenderer svg(QString(":/resources/hand.svg")); QSvgRenderer svg(QString("theme:hand.svg"));
cachedPixmap = QPixmap(translatedSize); cachedPixmap = QPixmap(translatedSize);
cachedPixmap.fill(Qt::transparent); cachedPixmap.fill(Qt::transparent);
QPainter painter(&cachedPixmap); QPainter painter(&cachedPixmap);

View file

@ -1,6 +1,7 @@
#include <QPainter> #include <QPainter>
#include "handzone.h" #include "handzone.h"
#include "settingscache.h" #include "settingscache.h"
#include "thememanager.h"
#include "player.h" #include "player.h"
#include "carddragitem.h" #include "carddragitem.h"
#include "carditem.h" #include "carditem.h"
@ -10,16 +11,13 @@
HandZone::HandZone(Player *_p, bool _contentsKnown, int _zoneHeight, QGraphicsItem *parent) HandZone::HandZone(Player *_p, bool _contentsKnown, int _zoneHeight, QGraphicsItem *parent)
: SelectZone(_p, "hand", false, false, _contentsKnown, parent), zoneHeight(_zoneHeight) : SelectZone(_p, "hand", false, false, _contentsKnown, parent), zoneHeight(_zoneHeight)
{ {
connect(settingsCache, SIGNAL(handBgPathChanged()), this, SLOT(updateBgPixmap())); connect(themeManager, SIGNAL(themeChanged()), this, SLOT(updateBg()));
updateBgPixmap(); updateBg();
setCacheMode(DeviceCoordinateCache); setCacheMode(DeviceCoordinateCache);
} }
void HandZone::updateBgPixmap() void HandZone::updateBg()
{ {
QString bgPath = settingsCache->getHandBgPath();
if (!bgPath.isEmpty())
bgPixmap.load(bgPath);
update(); update();
} }
@ -77,10 +75,7 @@ QRectF HandZone::boundingRect() const
void HandZone::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/) void HandZone::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/)
{ {
if (bgPixmap.isNull()) painter->fillRect(boundingRect(), themeManager->getHandBgBrush());
painter->fillRect(boundingRect(), QColor(30, 30, 30));
else
painter->fillRect(boundingRect(), QBrush(bgPixmap));
} }
void HandZone::reorganizeCards() void HandZone::reorganizeCards()

View file

@ -7,9 +7,8 @@ class HandZone : public SelectZone {
Q_OBJECT Q_OBJECT
private: private:
qreal width, zoneHeight; qreal width, zoneHeight;
QPixmap bgPixmap;
private slots: private slots:
void updateBgPixmap(); void updateBg();
public slots: public slots:
void updateOrientation(); void updateOrientation();
public: public:

View file

@ -39,6 +39,7 @@
#include "dlg_settings.h" #include "dlg_settings.h"
#include "carddatabase.h" #include "carddatabase.h"
#include "settingscache.h" #include "settingscache.h"
#include "thememanager.h"
#include "pixmapgenerator.h" #include "pixmapgenerator.h"
#include "rng_sfmt.h" #include "rng_sfmt.h"
#include "soundengine.h" #include "soundengine.h"
@ -51,7 +52,7 @@ SettingsCache *settingsCache;
RNG_Abstract *rng; RNG_Abstract *rng;
SoundEngine *soundEngine; SoundEngine *soundEngine;
QSystemTrayIcon *trayIcon; QSystemTrayIcon *trayIcon;
ThemeManager *themeManager;
const QString translationPrefix = "cockatrice"; const QString translationPrefix = "cockatrice";
#ifdef TRANSLATION_PATH #ifdef TRANSLATION_PATH
@ -146,6 +147,7 @@ int main(int argc, char *argv[])
rng = new RNG_SFMT; rng = new RNG_SFMT;
settingsCache = new SettingsCache; settingsCache = new SettingsCache;
themeManager = new ThemeManager;
db = new CardDatabase; db = new CardDatabase;
qtTranslator = new QTranslator; qtTranslator = new QTranslator;
@ -213,13 +215,14 @@ int main(int argc, char *argv[])
if (settingsValid()) { if (settingsValid()) {
qDebug("main(): starting main program"); qDebug("main(): starting main program");
soundEngine = new SoundEngine; soundEngine = new SoundEngine;
qDebug("main(): SoundEngine constructor finished"); qDebug("main(): SoundEngine constructor finished");
MainWindow ui; MainWindow ui;
qDebug("main(): MainWindow constructor finished"); qDebug("main(): MainWindow constructor finished");
QIcon icon(":/resources/appicon.svg"); QIcon icon("theme:cockatrice.svg");
ui.setWindowIcon(icon); ui.setWindowIcon(icon);
settingsCache->setClientID(generateClientID()); settingsCache->setClientID(generateClientID());

View file

@ -16,7 +16,7 @@ QPixmap PhasePixmapGenerator::generatePixmap(int height, QString name)
if (pmCache.contains(key)) if (pmCache.contains(key))
return pmCache.value(key); return pmCache.value(key);
QSvgRenderer svg(QString(":/resources/phases/icon_phase_" + name + ".svg")); QSvgRenderer svg(QString("theme:phases/" + name + ".svg"));
QPixmap pixmap(height, height); QPixmap pixmap(height, height);
pixmap.fill(Qt::transparent); pixmap.fill(Qt::transparent);
@ -36,13 +36,13 @@ QPixmap CounterPixmapGenerator::generatePixmap(int height, QString name, bool hi
if (pmCache.contains(key)) if (pmCache.contains(key))
return pmCache.value(key); return pmCache.value(key);
QSvgRenderer svg(QString(":/resources/counters/" + name + ".svg")); QSvgRenderer svg(QString("theme:counters/" + name + ".svg"));
if (!svg.isValid()) { if (!svg.isValid()) {
name = "general"; name = "general";
if (highlight) if (highlight)
name.append("_highlight"); name.append("_highlight");
svg.load(QString(":/resources/counters/" + name + ".svg")); svg.load(QString("theme:counters/" + name + ".svg"));
} }
int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height()); int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height());
@ -98,7 +98,7 @@ QPixmap GenderPixmapGenerator::generatePixmap(int height, int _gender)
default: genderStr = "unknown"; default: genderStr = "unknown";
}; };
QSvgRenderer svg(QString(":/resources/genders/" + genderStr + ".svg")); QSvgRenderer svg(QString("theme:genders/" + genderStr + ".svg"));
int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height()); int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height());
QPixmap pixmap(width, height); QPixmap pixmap(width, height);
pixmap.fill(Qt::transparent); pixmap.fill(Qt::transparent);
@ -119,7 +119,7 @@ QPixmap CountryPixmapGenerator::generatePixmap(int height, const QString &countr
if (pmCache.contains(key)) if (pmCache.contains(key))
return pmCache.value(key); return pmCache.value(key);
QSvgRenderer svg(QString(":/resources/countries/" + countryCode.toLower() + ".svg")); QSvgRenderer svg(QString("theme:countries/" + countryCode.toLower() + ".svg"));
int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height()); int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height());
QPixmap pixmap(width, height); QPixmap pixmap(width, height);
pixmap.fill(Qt::transparent); pixmap.fill(Qt::transparent);
@ -154,7 +154,7 @@ QPixmap UserLevelPixmapGenerator::generatePixmap(int height, UserLevelFlags user
if (isBuddy) if (isBuddy)
levelString.append("_buddy"); levelString.append("_buddy");
QSvgRenderer svg(QString(":/resources/userlevels/" + levelString + ".svg")); QSvgRenderer svg(QString("theme:userlevels/" + levelString + ".svg"));
int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height()); int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height());
QPixmap pixmap(width, height); QPixmap pixmap(width, height);
pixmap.fill(Qt::transparent); pixmap.fill(Qt::transparent);
@ -175,7 +175,7 @@ QPixmap LockPixmapGenerator::generatePixmap(int height)
if (pmCache.contains(key)) if (pmCache.contains(key))
return pmCache.value(key); return pmCache.value(key);
QSvgRenderer svg(QString(":/resources/lock.svg")); QSvgRenderer svg(QString("theme:icons/lock.svg"));
int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height()); int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height());
QPixmap pixmap(width, height); QPixmap pixmap(width, height);
pixmap.fill(Qt::transparent); pixmap.fill(Qt::transparent);

View file

@ -15,6 +15,7 @@
#include "tab_game.h" #include "tab_game.h"
#include "gamescene.h" #include "gamescene.h"
#include "settingscache.h" #include "settingscache.h"
#include "thememanager.h"
#include "dlg_create_token.h" #include "dlg_create_token.h"
#include "carddatabase.h" #include "carddatabase.h"
#include "color.h" #include "color.h"
@ -68,25 +69,18 @@ PlayerArea::PlayerArea(QGraphicsItem *parentItem)
: QObject(), QGraphicsItem(parentItem) : QObject(), QGraphicsItem(parentItem)
{ {
setCacheMode(DeviceCoordinateCache); setCacheMode(DeviceCoordinateCache);
connect(settingsCache, SIGNAL(playerBgPathChanged()), this, SLOT(updateBgPixmap())); connect(themeManager, SIGNAL(themeChanged()), this, SLOT(updateBg()));
updateBgPixmap(); updateBg();
} }
void PlayerArea::updateBgPixmap() void PlayerArea::updateBg()
{ {
QString bgPath = settingsCache->getPlayerBgPath();
if (bgPath.isEmpty())
bgPixmapBrush = QBrush(QColor(200, 200, 200));
else {
qDebug() << "loading" << bgPath;
bgPixmapBrush = QBrush(QPixmap(bgPath));
}
update(); update();
} }
void PlayerArea::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/) void PlayerArea::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/)
{ {
painter->fillRect(bRect, bgPixmapBrush); painter->fillRect(bRect, themeManager->getPlayerBgBrush());
} }
void PlayerArea::setSize(qreal width, qreal height) void PlayerArea::setSize(qreal width, qreal height)

View file

@ -60,10 +60,9 @@ class PlayerArea : public QObject, public QGraphicsItem {
Q_OBJECT Q_OBJECT
Q_INTERFACES(QGraphicsItem) Q_INTERFACES(QGraphicsItem)
private: private:
QBrush bgPixmapBrush;
QRectF bRect; QRectF bRect;
private slots: private slots:
void updateBgPixmap(); void updateBg();
public: public:
enum { Type = typeOther }; enum { Type = typeOther };
int type() const { return Type; } int type() const { return Type; }

View file

@ -50,12 +50,12 @@ bool PlayerListTWI::operator<(const QTreeWidgetItem &other) const
PlayerListWidget::PlayerListWidget(TabSupervisor *_tabSupervisor, AbstractClient *_client, TabGame *_game, QWidget *parent) PlayerListWidget::PlayerListWidget(TabSupervisor *_tabSupervisor, AbstractClient *_client, TabGame *_game, QWidget *parent)
: QTreeWidget(parent), tabSupervisor(_tabSupervisor), client(_client), game(_game), gameStarted(false) : QTreeWidget(parent), tabSupervisor(_tabSupervisor), client(_client), game(_game), gameStarted(false)
{ {
readyIcon = QIcon(":/resources/icon_ready_start.svg"); readyIcon = QIcon("theme:icons/ready_start.svg");
notReadyIcon = QIcon(":/resources/icon_not_ready_start.svg"); notReadyIcon = QIcon("theme:icons/not_ready_start.svg");
concededIcon = QIcon(":/resources/icon_conceded.svg"); concededIcon = QIcon("theme:icons/conceded.svg");
playerIcon = QIcon(":/resources/icon_player.svg"); playerIcon = QIcon("theme:icons/player.svg");
spectatorIcon = QIcon(":/resources/icon_spectator.svg"); spectatorIcon = QIcon("theme:icons/spectator.svg");
lockIcon = QIcon(":/resources/lock.svg"); lockIcon = QIcon("theme:icons/lock.svg");
if (tabSupervisor) { if (tabSupervisor) {
itemDelegate = new PlayerListItemDelegate(this); itemDelegate = new PlayerListItemDelegate(this);

View file

@ -35,7 +35,7 @@ RemoteReplayList_TreeModel::RemoteReplayList_TreeModel(AbstractClient *_client,
QFileIconProvider fip; QFileIconProvider fip;
dirIcon = fip.icon(QFileIconProvider::Folder); dirIcon = fip.icon(QFileIconProvider::Folder);
fileIcon = fip.icon(QFileIconProvider::File); fileIcon = fip.icon(QFileIconProvider::File);
lockIcon = QIcon(":/resources/lock.svg"); lockIcon = QIcon("theme:icons/lock.svg");
refreshTree(); refreshTree();
} }

View file

@ -25,8 +25,8 @@ SequenceEdit::SequenceEdit(QString _shorcutName, QWidget *parent) : QWidget(pare
clearButton->setMaximumHeight(lineEdit->height()); clearButton->setMaximumHeight(lineEdit->height());
defaultButton->setMaximumHeight(lineEdit->height()); defaultButton->setMaximumHeight(lineEdit->height());
clearButton->setIcon(QIcon(":/resources/icon_clearsearch.svg")); clearButton->setIcon(QIcon("theme:icons/clearsearch.svg"));
defaultButton->setIcon(QIcon(":/resources/icon_update.png")); defaultButton->setIcon(QIcon("theme:icons/update.png"));
clearButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); clearButton->setAttribute(Qt::WA_LayoutUsesWidgetRect);
defaultButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); defaultButton->setAttribute(Qt::WA_LayoutUsesWidgetRect);

View file

@ -1445,7 +1445,7 @@ public:
lbl_MainWindow_aFullScreen->setText(QApplication::translate("shortcutsTab", "Full screen", 0)); lbl_MainWindow_aFullScreen->setText(QApplication::translate("shortcutsTab", "Full screen", 0));
lbl_MainWindow_aSettings->setText(QApplication::translate("shortcutsTab", "Settings", 0)); lbl_MainWindow_aSettings->setText(QApplication::translate("shortcutsTab", "Settings", 0));
lbl_MainWindow_aCheckCardUpdates->setText(QApplication::translate("shortcutsTab", "Check for card updates", 0)); lbl_MainWindow_aCheckCardUpdates->setText(QApplication::translate("shortcutsTab", "Check for card updates", 0));
lbl_MainWindow_aDisconnect->setText(QApplication::translate("shortcutsTab", "Diconnect", 0)); lbl_MainWindow_aDisconnect->setText(QApplication::translate("shortcutsTab", "Disconnect", 0));
lbl_MainWindow_aExit->setText(QApplication::translate("shortcutsTab", "Exit", 0)); lbl_MainWindow_aExit->setText(QApplication::translate("shortcutsTab", "Exit", 0));
groupBox_2->setTitle(QApplication::translate("shortcutsTab", "Deck Editor", 0)); groupBox_2->setTitle(QApplication::translate("shortcutsTab", "Deck Editor", 0));
lbl_TabDeckEditor_aAnalyzeDeck->setText(QApplication::translate("shortcutsTab", "Analyze deck", 0)); lbl_TabDeckEditor_aAnalyzeDeck->setText(QApplication::translate("shortcutsTab", "Analyze deck", 0));
@ -1497,7 +1497,7 @@ public:
lbl_Player_IncP->setText(QApplication::translate("shortcutsTab", "Add (+1/+0)", 0)); lbl_Player_IncP->setText(QApplication::translate("shortcutsTab", "Add (+1/+0)", 0));
groupBox_8->setTitle(QApplication::translate("shortcutsTab", "Game Phases", 0)); groupBox_8->setTitle(QApplication::translate("shortcutsTab", "Game Phases", 0));
lbl_TabGame_phase0->setText(QApplication::translate("shortcutsTab", "Untap", 0)); lbl_TabGame_phase0->setText(QApplication::translate("shortcutsTab", "Untap", 0));
lbl_TabGame_phase1->setText(QApplication::translate("shortcutsTab", "Unkeep", 0)); lbl_TabGame_phase1->setText(QApplication::translate("shortcutsTab", "Upkeep", 0));
lbl_TabGame_phase2->setText(QApplication::translate("shortcutsTab", "Draw", 0)); lbl_TabGame_phase2->setText(QApplication::translate("shortcutsTab", "Draw", 0));
lbl_TabGame_phase3->setText(QApplication::translate("shortcutsTab", "Main 1", 0)); lbl_TabGame_phase3->setText(QApplication::translate("shortcutsTab", "Main 1", 0));
lbl_TabGame_phase4->setText(QApplication::translate("shortcutsTab", "Start combat", 0)); lbl_TabGame_phase4->setText(QApplication::translate("shortcutsTab", "Start combat", 0));

View file

@ -138,11 +138,7 @@ SettingsCache::SettingsCache()
cardDatabasePath = settings->value("paths/carddatabase").toString(); cardDatabasePath = settings->value("paths/carddatabase").toString();
tokenDatabasePath = settings->value("paths/tokendatabase").toString(); tokenDatabasePath = settings->value("paths/tokendatabase").toString();
handBgPath = settings->value("zonebg/hand").toString(); themeName = settings->value("theme/name").toString();
stackBgPath = settings->value("zonebg/stack").toString();
tableBgPath = settings->value("zonebg/table").toString();
playerBgPath = settings->value("zonebg/playerarea").toString();
cardBackPicturePath = settings->value("paths/cardbackpicture").toString();
// we only want to reset the cache once, then its up to the user // we only want to reset the cache once, then its up to the user
bool updateCache = settings->value("revert/pixmapCacheSize", false).toBool(); bool updateCache = settings->value("revert/pixmapCacheSize", false).toBool();
@ -301,39 +297,11 @@ void SettingsCache::setTokenDatabasePath(const QString &_tokenDatabasePath)
emit tokenDatabasePathChanged(); emit tokenDatabasePathChanged();
} }
void SettingsCache::setHandBgPath(const QString &_handBgPath) void SettingsCache::setThemeName(const QString &_themeName)
{ {
handBgPath = _handBgPath; themeName = _themeName;
settings->setValue("zonebg/hand", handBgPath); settings->setValue("theme/name", themeName);
emit handBgPathChanged(); emit themeChanged();
}
void SettingsCache::setStackBgPath(const QString &_stackBgPath)
{
stackBgPath = _stackBgPath;
settings->setValue("zonebg/stack", stackBgPath);
emit stackBgPathChanged();
}
void SettingsCache::setTableBgPath(const QString &_tableBgPath)
{
tableBgPath = _tableBgPath;
settings->setValue("zonebg/table", tableBgPath);
emit tableBgPathChanged();
}
void SettingsCache::setPlayerBgPath(const QString &_playerBgPath)
{
playerBgPath = _playerBgPath;
settings->setValue("zonebg/playerarea", playerBgPath);
emit playerBgPathChanged();
}
void SettingsCache::setCardBackPicturePath(const QString &_cardBackPicturePath)
{
cardBackPicturePath = _cardBackPicturePath;
settings->setValue("paths/cardbackpicture", cardBackPicturePath);
emit cardBackPicturePathChanged();
} }
void SettingsCache::setPicDownload(int _picDownload) void SettingsCache::setPicDownload(int _picDownload)

View file

@ -30,11 +30,7 @@ signals:
void picsPathChanged(); void picsPathChanged();
void cardDatabasePathChanged(); void cardDatabasePathChanged();
void tokenDatabasePathChanged(); void tokenDatabasePathChanged();
void handBgPathChanged(); void themeChanged();
void stackBgPathChanged();
void tableBgPathChanged();
void playerBgPathChanged();
void cardBackPicturePathChanged();
void picDownloadChanged(); void picDownloadChanged();
void picDownloadHqChanged(); void picDownloadHqChanged();
void displayCardNamesChanged(); void displayCardNamesChanged();
@ -61,8 +57,7 @@ private:
QByteArray mainWindowGeometry; QByteArray mainWindowGeometry;
QString lang; QString lang;
QString deckPath, replaysPath, picsPath, cardDatabasePath, tokenDatabasePath; QString deckPath, replaysPath, picsPath, cardDatabasePath, tokenDatabasePath, themeName;
QString handBgPath, stackBgPath, tableBgPath, playerBgPath, cardBackPicturePath;
bool picDownload; bool picDownload;
bool picDownloadHq; bool picDownloadHq;
bool notificationsEnabled; bool notificationsEnabled;
@ -127,11 +122,7 @@ public:
QString getPicsPath() const { return picsPath; } QString getPicsPath() const { return picsPath; }
QString getCardDatabasePath() const { return cardDatabasePath; } QString getCardDatabasePath() const { return cardDatabasePath; }
QString getTokenDatabasePath() const { return tokenDatabasePath; } QString getTokenDatabasePath() const { return tokenDatabasePath; }
QString getHandBgPath() const { return handBgPath; } QString getThemeName() const { return themeName; }
QString getStackBgPath() const { return stackBgPath; }
QString getTableBgPath() const { return tableBgPath; }
QString getPlayerBgPath() const { return playerBgPath; }
QString getCardBackPicturePath() const { return cardBackPicturePath; }
QString getChatMentionColor() const { return chatMentionColor; } QString getChatMentionColor() const { return chatMentionColor; }
QString getChatHighlightColor() const { return chatHighlightColor; } QString getChatHighlightColor() const { return chatHighlightColor; }
bool getPicDownload() const { return picDownload; } bool getPicDownload() const { return picDownload; }
@ -207,11 +198,7 @@ public slots:
void setPicsPath(const QString &_picsPath); void setPicsPath(const QString &_picsPath);
void setCardDatabasePath(const QString &_cardDatabasePath); void setCardDatabasePath(const QString &_cardDatabasePath);
void setTokenDatabasePath(const QString &_tokenDatabasePath); void setTokenDatabasePath(const QString &_tokenDatabasePath);
void setHandBgPath(const QString &_handBgPath); void setThemeName(const QString &_themeName);
void setStackBgPath(const QString &_stackBgPath);
void setTableBgPath(const QString &_tableBgPath);
void setPlayerBgPath(const QString &_playerBgPath);
void setCardBackPicturePath(const QString &_cardBackPicturePath);
void setChatMentionColor(const QString &_chatMentionColor); void setChatMentionColor(const QString &_chatMentionColor);
void setChatHighlightColor(const QString &_chatHighlightColor); void setChatHighlightColor(const QString &_chatHighlightColor);
void setPicDownload(int _picDownload); void setPicDownload(int _picDownload);

View file

@ -3,6 +3,7 @@
#include "arrowitem.h" #include "arrowitem.h"
#include "stackzone.h" #include "stackzone.h"
#include "settingscache.h" #include "settingscache.h"
#include "thememanager.h"
#include "player.h" #include "player.h"
#include "carddragitem.h" #include "carddragitem.h"
#include "carditem.h" #include "carditem.h"
@ -12,16 +13,13 @@
StackZone::StackZone(Player *_p, int _zoneHeight, QGraphicsItem *parent) StackZone::StackZone(Player *_p, int _zoneHeight, QGraphicsItem *parent)
: SelectZone(_p, "stack", false, false, true, parent), zoneHeight(_zoneHeight) : SelectZone(_p, "stack", false, false, true, parent), zoneHeight(_zoneHeight)
{ {
connect(settingsCache, SIGNAL(stackBgPathChanged()), this, SLOT(updateBgPixmap())); connect(themeManager, SIGNAL(themeChanged()), this, SLOT(updateBg()));
updateBgPixmap(); updateBg();
setCacheMode(DeviceCoordinateCache); setCacheMode(DeviceCoordinateCache);
} }
void StackZone::updateBgPixmap() void StackZone::updateBg()
{ {
QString bgPath = settingsCache->getStackBgPath();
if (!bgPath.isEmpty())
bgPixmap.load(bgPath);
update(); update();
} }
@ -48,10 +46,7 @@ QRectF StackZone::boundingRect() const
void StackZone::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/) void StackZone::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/)
{ {
if (bgPixmap.isNull()) painter->fillRect(boundingRect(), themeManager->getStackBgBrush());
painter->fillRect(boundingRect(), QColor(113, 43, 43));
else
painter->fillRect(boundingRect(), QBrush(bgPixmap));
} }
void StackZone::handleDropEvent(const QList<CardDragItem *> &dragItems, CardZone *startZone, const QPoint &/*dropPoint*/) void StackZone::handleDropEvent(const QList<CardDragItem *> &dragItems, CardZone *startZone, const QPoint &/*dropPoint*/)

View file

@ -7,9 +7,8 @@ class StackZone : public SelectZone {
Q_OBJECT Q_OBJECT
private: private:
qreal zoneHeight; qreal zoneHeight;
QPixmap bgPixmap;
private slots: private slots:
void updateBgPixmap(); void updateBg();
public: public:
StackZone(Player *_p, int _zoneHeight, QGraphicsItem *parent = 0); StackZone(Player *_p, int _zoneHeight, QGraphicsItem *parent = 0);
void handleDropEvent(const QList<CardDragItem *> &dragItems, CardZone *startZone, const QPoint &dropPoint); void handleDropEvent(const QList<CardDragItem *> &dragItems, CardZone *startZone, const QPoint &dropPoint);

View file

@ -53,21 +53,21 @@ void SearchLineEdit::keyPressEvent(QKeyEvent *event)
void TabDeckEditor::createShowHideDocksButtons() void TabDeckEditor::createShowHideDocksButtons()
{ {
btnFilter = new QPushButton(QIcon("://resources/icon_view.svg"),QString()); btnFilter = new QPushButton(QIcon("theme:icons/view.svg"),QString());
btnFilter->setObjectName("btnFilter"); btnFilter->setObjectName("btnFilter");
btnFilter->setCheckable(true); btnFilter->setCheckable(true);
btnFilter->setChecked(true); btnFilter->setChecked(true);
btnFilter->setMaximumWidth(30); btnFilter->setMaximumWidth(30);
searchLayout->addWidget(btnFilter); searchLayout->addWidget(btnFilter);
btnDeck = new QPushButton(QIcon("://resources/hand.svg"),QString()); btnDeck = new QPushButton(QIcon("theme:hand.svg"),QString());
btnDeck->setObjectName("btnDeck"); btnDeck->setObjectName("btnDeck");
btnDeck->setCheckable(true); btnDeck->setCheckable(true);
btnDeck->setChecked(true); btnDeck->setChecked(true);
btnDeck->setMaximumWidth(30); btnDeck->setMaximumWidth(30);
searchLayout->addWidget(btnDeck); searchLayout->addWidget(btnDeck);
btnCard = new QPushButton(QIcon("://back.svg"),QString()); btnCard = new QPushButton(QIcon("theme:back.svg"),QString());
btnCard->setObjectName("btnCard"); btnCard->setObjectName("btnCard");
btnCard->setCheckable(true); btnCard->setCheckable(true);
btnCard->setChecked(true); btnCard->setChecked(true);
@ -134,7 +134,7 @@ void TabDeckEditor::createDeckDock()
/* Update price /* Update price
aUpdatePrices = new QAction(QString(), this); aUpdatePrices = new QAction(QString(), this);
aUpdatePrices->setIcon(QIcon(":/resources/icon_update.png")); aUpdatePrices->setIcon(QIcon("theme:icons/update.png"));
connect(aUpdatePrices, SIGNAL(triggered()), this, SLOT(actUpdatePrices())); connect(aUpdatePrices, SIGNAL(triggered()), this, SLOT(actUpdatePrices()));
if (!settingsCache->getPriceTagFeature()) if (!settingsCache->getPriceTagFeature())
aUpdatePrices->setVisible(false); aUpdatePrices->setVisible(false);
@ -316,11 +316,11 @@ void TabDeckEditor::createMenus()
addTabMenu(deckMenu); addTabMenu(deckMenu);
aClearFilterAll = new QAction(QString(), this); aClearFilterAll = new QAction(QString(), this);
aClearFilterAll->setIcon(QIcon(":/resources/icon_clearsearch.svg")); aClearFilterAll->setIcon(QIcon("theme:icons/clearsearch.svg"));
connect(aClearFilterAll, SIGNAL(triggered()), this, SLOT(actClearFilterAll())); connect(aClearFilterAll, SIGNAL(triggered()), this, SLOT(actClearFilterAll()));
aClearFilterOne = new QAction(QString(), this); aClearFilterOne = new QAction(QString(), this);
aClearFilterOne->setIcon(QIcon(":/resources/decrement.svg")); aClearFilterOne->setIcon(QIcon("theme:icons/decrement.svg"));
connect(aClearFilterOne, SIGNAL(triggered()), this, SLOT(actClearFilterOne())); connect(aClearFilterOne, SIGNAL(triggered()), this, SLOT(actClearFilterOne()));
dbMenu = new QMenu(this); dbMenu = new QMenu(this);
@ -342,7 +342,7 @@ void TabDeckEditor::createCentralFrame()
searchEdit = new SearchLineEdit; searchEdit = new SearchLineEdit;
searchEdit->setObjectName("searchEdit"); searchEdit->setObjectName("searchEdit");
#if QT_VERSION >= 0x050300 #if QT_VERSION >= 0x050300
searchEdit->addAction(QIcon(":/resources/icon_search_black.svg"), QLineEdit::LeadingPosition); searchEdit->addAction(QIcon("theme:icons/search.svg"), QLineEdit::LeadingPosition);
#endif #endif
setFocusProxy(searchEdit); setFocusProxy(searchEdit);
@ -381,19 +381,19 @@ void TabDeckEditor::createCentralFrame()
searchEdit->setTreeView(databaseView); searchEdit->setTreeView(databaseView);
aAddCard = new QAction(QString(), this); aAddCard = new QAction(QString(), this);
aAddCard->setIcon(QIcon(":/resources/arrow_right_green.svg")); aAddCard->setIcon(QIcon("theme:icons/arrow_right_green.svg"));
connect(aAddCard, SIGNAL(triggered()), this, SLOT(actAddCard())); connect(aAddCard, SIGNAL(triggered()), this, SLOT(actAddCard()));
aAddCardToSideboard = new QAction(QString(), this); aAddCardToSideboard = new QAction(QString(), this);
aAddCardToSideboard->setIcon(QIcon(":/resources/add_to_sideboard.svg")); aAddCardToSideboard->setIcon(QIcon("theme:icons/arrow_right_blue.svg"));
connect(aAddCardToSideboard, SIGNAL(triggered()), this, SLOT(actAddCardToSideboard())); connect(aAddCardToSideboard, SIGNAL(triggered()), this, SLOT(actAddCardToSideboard()));
aRemoveCard = new QAction(QString(), this); aRemoveCard = new QAction(QString(), this);
aRemoveCard->setIcon(QIcon(":/resources/remove_row.svg")); aRemoveCard->setIcon(QIcon("theme:icons/remove_row.svg"));
connect(aRemoveCard, SIGNAL(triggered()), this, SLOT(actRemoveCard())); connect(aRemoveCard, SIGNAL(triggered()), this, SLOT(actRemoveCard()));
aIncrement = new QAction(QString(), this); aIncrement = new QAction(QString(), this);
aIncrement->setIcon(QIcon(":/resources/increment.svg")); aIncrement->setIcon(QIcon("theme:icons/increment.svg"));
connect(aIncrement, SIGNAL(triggered()), this, SLOT(actIncrement())); connect(aIncrement, SIGNAL(triggered()), this, SLOT(actIncrement()));
aDecrement = new QAction(QString(), this); aDecrement = new QAction(QString(), this);
aDecrement->setIcon(QIcon(":/resources/decrement.svg")); aDecrement->setIcon(QIcon("theme:icons/decrement.svg"));
connect(aDecrement, SIGNAL(triggered()), this, SLOT(actDecrement())); connect(aDecrement, SIGNAL(triggered()), this, SLOT(actDecrement()));
QToolBar *deckEditToolBar = new QToolBar; QToolBar *deckEditToolBar = new QToolBar;

View file

@ -80,25 +80,25 @@ TabDeckStorage::TabDeckStorage(TabSupervisor *_tabSupervisor, AbstractClient *_c
hbox->addWidget(rightGroupBox); hbox->addWidget(rightGroupBox);
aOpenLocalDeck = new QAction(this); aOpenLocalDeck = new QAction(this);
aOpenLocalDeck->setIcon(QIcon(":/resources/pencil.svg")); aOpenLocalDeck->setIcon(QIcon("theme:icons/pencil.svg"));
connect(aOpenLocalDeck, SIGNAL(triggered()), this, SLOT(actOpenLocalDeck())); connect(aOpenLocalDeck, SIGNAL(triggered()), this, SLOT(actOpenLocalDeck()));
aUpload = new QAction(this); aUpload = new QAction(this);
aUpload->setIcon(QIcon(":/resources/arrow_right_green.svg")); aUpload->setIcon(QIcon("theme:icons/arrow_right_green.svg"));
connect(aUpload, SIGNAL(triggered()), this, SLOT(actUpload())); connect(aUpload, SIGNAL(triggered()), this, SLOT(actUpload()));
aDeleteLocalDeck = new QAction(this); aDeleteLocalDeck = new QAction(this);
aDeleteLocalDeck->setIcon(QIcon(":/resources/remove_row.svg")); aDeleteLocalDeck->setIcon(QIcon("theme:icons/remove_row.svg"));
connect(aDeleteLocalDeck, SIGNAL(triggered()), this, SLOT(actDeleteLocalDeck())); connect(aDeleteLocalDeck, SIGNAL(triggered()), this, SLOT(actDeleteLocalDeck()));
aOpenRemoteDeck = new QAction(this); aOpenRemoteDeck = new QAction(this);
aOpenRemoteDeck->setIcon(QIcon(":/resources/pencil.svg")); aOpenRemoteDeck->setIcon(QIcon("theme:icons/pencil.svg"));
connect(aOpenRemoteDeck, SIGNAL(triggered()), this, SLOT(actOpenRemoteDeck())); connect(aOpenRemoteDeck, SIGNAL(triggered()), this, SLOT(actOpenRemoteDeck()));
aDownload = new QAction(this); aDownload = new QAction(this);
aDownload->setIcon(QIcon(":/resources/arrow_left_green.svg")); aDownload->setIcon(QIcon("theme:icons/arrow_left_green.svg"));
connect(aDownload, SIGNAL(triggered()), this, SLOT(actDownload())); connect(aDownload, SIGNAL(triggered()), this, SLOT(actDownload()));
aNewFolder = new QAction(this); aNewFolder = new QAction(this);
aNewFolder->setIcon(qApp->style()->standardIcon(QStyle::SP_FileDialogNewFolder)); aNewFolder->setIcon(qApp->style()->standardIcon(QStyle::SP_FileDialogNewFolder));
connect(aNewFolder, SIGNAL(triggered()), this, SLOT(actNewFolder())); connect(aNewFolder, SIGNAL(triggered()), this, SLOT(actNewFolder()));
aDeleteRemoteDeck = new QAction(this); aDeleteRemoteDeck = new QAction(this);
aDeleteRemoteDeck->setIcon(QIcon(":/resources/remove_row.svg")); aDeleteRemoteDeck->setIcon(QIcon("theme:icons/remove_row.svg"));
connect(aDeleteRemoteDeck, SIGNAL(triggered()), this, SLOT(actDeleteRemoteDeck())); connect(aDeleteRemoteDeck, SIGNAL(triggered()), this, SLOT(actDeleteRemoteDeck()));
leftToolBar->addAction(aOpenLocalDeck); leftToolBar->addAction(aOpenLocalDeck);

View file

@ -363,17 +363,17 @@ TabGame::TabGame(TabSupervisor *_tabSupervisor, GameReplay *_replay)
replayStartButton = new QToolButton; replayStartButton = new QToolButton;
replayStartButton->setIconSize(QSize(32, 32)); replayStartButton->setIconSize(QSize(32, 32));
replayStartButton->setIcon(QIcon(":/resources/replay_start.svg")); replayStartButton->setIcon(QIcon("theme:replay/start.svg"));
connect(replayStartButton, SIGNAL(clicked()), this, SLOT(replayStartButtonClicked())); connect(replayStartButton, SIGNAL(clicked()), this, SLOT(replayStartButtonClicked()));
replayPauseButton = new QToolButton; replayPauseButton = new QToolButton;
replayPauseButton->setIconSize(QSize(32, 32)); replayPauseButton->setIconSize(QSize(32, 32));
replayPauseButton->setEnabled(false); replayPauseButton->setEnabled(false);
replayPauseButton->setIcon(QIcon(":/resources/replay_pause.svg")); replayPauseButton->setIcon(QIcon("theme:replay/pause.svg"));
connect(replayPauseButton, SIGNAL(clicked()), this, SLOT(replayPauseButtonClicked())); connect(replayPauseButton, SIGNAL(clicked()), this, SLOT(replayPauseButtonClicked()));
replayFastForwardButton = new QToolButton; replayFastForwardButton = new QToolButton;
replayFastForwardButton->setIconSize(QSize(32, 32)); replayFastForwardButton->setIconSize(QSize(32, 32));
replayFastForwardButton->setEnabled(false); replayFastForwardButton->setEnabled(false);
replayFastForwardButton->setIcon(QIcon(":/resources/replay_fastforward.svg")); replayFastForwardButton->setIcon(QIcon("theme:replay/fastforward.svg"));
replayFastForwardButton->setCheckable(true); replayFastForwardButton->setCheckable(true);
connect(replayFastForwardButton, SIGNAL(toggled(bool)), this, SLOT(replayFastForwardButtonToggled(bool))); connect(replayFastForwardButton, SIGNAL(toggled(bool)), this, SLOT(replayFastForwardButtonToggled(bool)));

View file

@ -78,24 +78,24 @@ TabReplays::TabReplays(TabSupervisor *_tabSupervisor, AbstractClient *_client)
hbox->addWidget(rightGroupBox); hbox->addWidget(rightGroupBox);
aOpenLocalReplay = new QAction(this); aOpenLocalReplay = new QAction(this);
aOpenLocalReplay->setIcon(QIcon(":/resources/icon_view.svg")); aOpenLocalReplay->setIcon(QIcon("theme:icons/view.svg"));
connect(aOpenLocalReplay, SIGNAL(triggered()), this, SLOT(actOpenLocalReplay())); connect(aOpenLocalReplay, SIGNAL(triggered()), this, SLOT(actOpenLocalReplay()));
connect(localDirView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(actOpenLocalReplay())); connect(localDirView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(actOpenLocalReplay()));
aDeleteLocalReplay = new QAction(this); aDeleteLocalReplay = new QAction(this);
aDeleteLocalReplay->setIcon(QIcon(":/resources/remove_row.svg")); aDeleteLocalReplay->setIcon(QIcon("theme:icons/remove_row.svg"));
connect(aDeleteLocalReplay, SIGNAL(triggered()), this, SLOT(actDeleteLocalReplay())); connect(aDeleteLocalReplay, SIGNAL(triggered()), this, SLOT(actDeleteLocalReplay()));
aOpenRemoteReplay = new QAction(this); aOpenRemoteReplay = new QAction(this);
aOpenRemoteReplay->setIcon(QIcon(":/resources/icon_view.svg")); aOpenRemoteReplay->setIcon(QIcon("theme:icons/view.svg"));
connect(aOpenRemoteReplay, SIGNAL(triggered()), this, SLOT(actOpenRemoteReplay())); connect(aOpenRemoteReplay, SIGNAL(triggered()), this, SLOT(actOpenRemoteReplay()));
connect(serverDirView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(actOpenRemoteReplay())); connect(serverDirView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(actOpenRemoteReplay()));
aDownload = new QAction(this); aDownload = new QAction(this);
aDownload->setIcon(QIcon(":/resources/arrow_left_green.svg")); aDownload->setIcon(QIcon("theme:icons/arrow_left_green.svg"));
connect(aDownload, SIGNAL(triggered()), this, SLOT(actDownload())); connect(aDownload, SIGNAL(triggered()), this, SLOT(actDownload()));
aKeep = new QAction(this); aKeep = new QAction(this);
aKeep->setIcon(QIcon(":/resources/lock.svg")); aKeep->setIcon(QIcon("theme:icons/lock.svg"));
connect(aKeep, SIGNAL(triggered()), this, SLOT(actKeepRemoteReplay())); connect(aKeep, SIGNAL(triggered()), this, SLOT(actKeepRemoteReplay()));
aDeleteRemoteReplay = new QAction(this); aDeleteRemoteReplay = new QAction(this);
aDeleteRemoteReplay->setIcon(QIcon(":/resources/remove_row.svg")); aDeleteRemoteReplay->setIcon(QIcon("theme:icons/remove_row.svg"));
connect(aDeleteRemoteReplay, SIGNAL(triggered()), this, SLOT(actDeleteRemoteReplay())); connect(aDeleteRemoteReplay, SIGNAL(triggered()), this, SLOT(actDeleteRemoteReplay()));
leftToolBar->addAction(aOpenLocalReplay); leftToolBar->addAction(aOpenLocalReplay);

View file

@ -71,7 +71,7 @@ TabRoom::TabRoom(TabSupervisor *_tabSupervisor, AbstractClient *_client, ServerI
connect(aOpenChatSettings, SIGNAL(triggered()), this, SLOT(actOpenChatSettings())); connect(aOpenChatSettings, SIGNAL(triggered()), this, SLOT(actOpenChatSettings()));
QToolButton *chatSettingsButton = new QToolButton; QToolButton *chatSettingsButton = new QToolButton;
chatSettingsButton->setIcon(QIcon(":/resources/icon_settings.svg")); chatSettingsButton->setIcon(QIcon("theme:icons/settings.svg"));
chatSettingsButton->setMenu(chatSettingsMenu); chatSettingsButton->setMenu(chatSettingsMenu);
chatSettingsButton->setPopupMode(QToolButton::InstantPopup); chatSettingsButton->setPopupMode(QToolButton::InstantPopup);

View file

@ -80,7 +80,7 @@ void CloseButton::paintEvent(QPaintEvent * /*event*/)
TabSupervisor::TabSupervisor(AbstractClient *_client, QWidget *parent) TabSupervisor::TabSupervisor(AbstractClient *_client, QWidget *parent)
: QTabWidget(parent), userInfo(0), client(_client), tabServer(0), tabUserLists(0), tabDeckStorage(0), tabReplays(0), tabAdmin(0) : QTabWidget(parent), userInfo(0), client(_client), tabServer(0), tabUserLists(0), tabDeckStorage(0), tabReplays(0), tabAdmin(0)
{ {
tabChangedIcon = new QIcon(":/resources/icon_tab_changed.svg"); tabChangedIcon = new QIcon("theme:icons/tab_changed.svg");
setElideMode(Qt::ElideRight); setElideMode(Qt::ElideRight);
setMovable(true); setMovable(true);
setIconSize(QSize(15, 15)); setIconSize(QSize(15, 15));

View file

@ -8,6 +8,7 @@
#include "tablezone.h" #include "tablezone.h"
#include "player.h" #include "player.h"
#include "settingscache.h" #include "settingscache.h"
#include "thememanager.h"
#include "arrowitem.h" #include "arrowitem.h"
#include "carddragitem.h" #include "carddragitem.h"
#include "carddatabase.h" #include "carddatabase.h"
@ -16,20 +17,18 @@
#include "pb/command_move_card.pb.h" #include "pb/command_move_card.pb.h"
#include "pb/command_set_card_attr.pb.h" #include "pb/command_set_card_attr.pb.h"
const QColor TableZone::BACKGROUND_COLOR = QColor(100, 100, 100); const QColor TableZone::BACKGROUND_COLOR = QColor(100, 100, 100);
const QColor TableZone::FADE_MASK = QColor(0, 0, 0, 80); const QColor TableZone::FADE_MASK = QColor(0, 0, 0, 80);
const QColor TableZone::GRADIENT_COLOR = QColor(255, 255, 255, 150); const QColor TableZone::GRADIENT_COLOR = QColor(255, 255, 255, 150);
const QColor TableZone::GRADIENT_COLORLESS = QColor(255, 255, 255, 0); const QColor TableZone::GRADIENT_COLORLESS = QColor(255, 255, 255, 0);
TableZone::TableZone(Player *_p, QGraphicsItem *parent) TableZone::TableZone(Player *_p, QGraphicsItem *parent)
: SelectZone(_p, "table", true, false, true, parent), active(false) : SelectZone(_p, "table", true, false, true, parent), active(false)
{ {
connect(settingsCache, SIGNAL(tableBgPathChanged()), this, SLOT(updateBgPixmap())); connect(themeManager, SIGNAL(themeChanged()), this, SLOT(updateBg()));
connect(settingsCache, SIGNAL(invertVerticalCoordinateChanged()), this, SLOT(reorganizeCards())); connect(settingsCache, SIGNAL(invertVerticalCoordinateChanged()), this, SLOT(reorganizeCards()));
updateBgPixmap(); updateBg();
height = MARGIN_TOP + MARGIN_BOTTOM + TABLEROWS * CARD_HEIGHT + (TABLEROWS-1) * PADDING_Y; height = MARGIN_TOP + MARGIN_BOTTOM + TABLEROWS * CARD_HEIGHT + (TABLEROWS-1) * PADDING_Y;
width = MIN_WIDTH; width = MIN_WIDTH;
@ -44,11 +43,8 @@ TableZone::TableZone(Player *_p, QGraphicsItem *parent)
} }
void TableZone::updateBgPixmap() void TableZone::updateBg()
{ {
QString bgPath = settingsCache->getTableBgPath();
if (!bgPath.isEmpty())
backgroundPixelMap.load(bgPath);
update(); update();
} }
@ -67,11 +63,7 @@ bool TableZone::isInverted() const
void TableZone::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/) void TableZone::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/)
{ {
// if no custom background is provided then use the default color painter->fillRect(boundingRect(), themeManager->getTableBgBrush());
if (backgroundPixelMap.isNull())
painter->fillRect(boundingRect(), BACKGROUND_COLOR);
else
painter->fillRect(boundingRect(), QBrush(backgroundPixelMap));
if (active) { if (active) {
paintZoneOutline(painter); paintZoneOutline(painter);

View file

@ -49,7 +49,7 @@ private:
static const int BOX_LINE_WIDTH = 10; static const int BOX_LINE_WIDTH = 10;
/* /*
Default background color, inactive mask and boarder gradient Default inactive mask and border gradient
*/ */
static const QColor BACKGROUND_COLOR; static const QColor BACKGROUND_COLOR;
static const QColor FADE_MASK; static const QColor FADE_MASK;
@ -84,7 +84,7 @@ private slots:
/** /**
Loads in any found custom background and updates Loads in any found custom background and updates
*/ */
void updateBgPixmap(); void updateBg();
public slots: public slots:
/** /**

View file

@ -0,0 +1,144 @@
#include "thememanager.h"
#include "settingscache.h"
#include <QApplication>
#include <QDebug>
#include <QColor>
#include <QLibraryInfo>
#if QT_VERSION < 0x050000
#include <QDesktopServices>
#else
#include <QStandardPaths>
#endif
#define DEFAULT_THEME_NAME "Default"
#define STYLE_CSS_NAME "style.css"
#define HANDZONE_BG_NAME "handzone"
#define PLAYERZONE_BG_NAME "playerzone"
#define STACKZONE_BG_NAME "stackzone"
#define TABLEZONE_BG_NAME "tablezone"
#define CARD_BACK_NAME "cardback"
ThemeManager::ThemeManager(QObject *parent)
:QObject(parent)
{
ensureThemeDirectoryExists();
connect(settingsCache, SIGNAL(themeChanged()), this, SLOT(themeChangedSlot()));
themeChangedSlot();
}
void ThemeManager::ensureThemeDirectoryExists()
{
if(settingsCache->getThemeName().isEmpty() ||
!getAvailableThemes().contains(settingsCache->getThemeName()))
{
qDebug() << "Theme name not set, setting default value";
settingsCache->setThemeName(DEFAULT_THEME_NAME);
}
}
QStringMap & ThemeManager::getAvailableThemes()
{
QDir dir;
availableThemes.clear();
// load themes from user profile dir
dir =
#if QT_VERSION < 0x050000
QDesktopServices::storageLocation(QDesktopServices::DataLocation) +
#else
QStandardPaths::standardLocations(QStandardPaths::DataLocation).first() +
#endif
"/themes";
foreach(QString themeName, dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot, QDir::Name))
{
if(!availableThemes.contains(themeName))
availableThemes.insert(themeName, dir.absoluteFilePath(themeName));
}
// load themes from cockatrice system dir
#ifdef Q_OS_MAC
dir = qApp->applicationDirPath() + "/../Resources/themes";
#elif defined(Q_OS_WIN)
dir = qApp->applicationDirPath() + "/themes";
#else // linux
dir = qApp->applicationDirPath() + "/../share/cockatrice/themes";
#endif
foreach(QString themeName, dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot, QDir::Name))
{
if(!availableThemes.contains(themeName))
availableThemes.insert(themeName, dir.absoluteFilePath(themeName));
}
return availableThemes;
}
QBrush ThemeManager::loadBrush(QDir dir, QString fileName, QColor fallbackColor)
{
QBrush brush;
QPixmap tmp;
QStringList exts;
exts << ".png" << ".jpg" << ".jpeg" << ".gif" << ".bmp";
brush.setColor(fallbackColor);
brush.setStyle(Qt::SolidPattern);
foreach (const QString &ext, exts) {
if (dir.exists(fileName + ext)) {
tmp.load(dir.absoluteFilePath(fileName + ext));
if(!tmp.isNull())
brush.setTexture(tmp);
break;
}
}
return brush;
}
QPixmap ThemeManager::loadPixmap(QDir dir, QString fileName)
{
QPixmap pix;
QStringList exts;
exts << ".png" << ".jpg" << ".jpeg" << ".gif" << ".bmp";
foreach (const QString &ext, exts) {
if (dir.exists(fileName + ext)) {
pix.load(dir.absoluteFilePath(fileName + ext));
break;
}
}
return pix;
}
void ThemeManager::themeChangedSlot()
{
QString themeName = settingsCache->getThemeName();
qDebug() << "Theme changed:" << themeName;
QDir dir = getAvailableThemes().value(themeName);
// css
if(dir.exists(STYLE_CSS_NAME))
qApp->setStyleSheet("file:///" + dir.absoluteFilePath(STYLE_CSS_NAME));
else
qApp->setStyleSheet("");
// card background
cardBackPixmap = loadPixmap(dir, CARD_BACK_NAME);
// zones bg
dir.cd("zones");
handBgBrush = loadBrush(dir, HANDZONE_BG_NAME, QColor(80, 100, 50));
tableBgBrush = loadBrush(dir, TABLEZONE_BG_NAME, QColor(70, 50, 100));
playerBgBrush = loadBrush(dir, PLAYERZONE_BG_NAME, QColor(200, 200, 200));
stackBgBrush = loadBrush(dir, STACKZONE_BG_NAME, QColor(113, 43, 43));
// resources
QStringList resources;
resources << dir.absolutePath() << ":/resources";
QDir::setSearchPaths("theme", resources);
emit themeChanged();
}

View file

@ -0,0 +1,42 @@
#ifndef THEMEMANAGER_H
#define THEMEMANAGER_H
#include <QObject>
#include <QBrush>
#include <QPixmap>
#include <QMap>
#include <QDir>
#include <QString>
typedef QMap<QString, QString> QStringMap;
class QApplication;
class ThemeManager : public QObject {
Q_OBJECT
public:
ThemeManager(QObject *parent = 0);
private:
QBrush handBgBrush, stackBgBrush, tableBgBrush, playerBgBrush;
QPixmap cardBackPixmap;
QStringMap availableThemes;
protected:
void ensureThemeDirectoryExists();
QBrush loadBrush(QDir dir, QString fileName, QColor fallbackColor);
QPixmap loadPixmap(QDir dir, QString fileName);
public:
QBrush &getHandBgBrush() { return handBgBrush; }
QBrush &getStackBgBrush() { return stackBgBrush; }
QBrush &getTableBgBrush() { return tableBgBrush; }
QBrush &getPlayerBgBrush() { return playerBgBrush; }
QPixmap &getCardBackPixmap() { return cardBackPixmap; }
QStringMap &getAvailableThemes();
protected slots:
void themeChangedSlot();
signals:
void themeChanged();
};
extern ThemeManager * themeManager;
#endif

View file

@ -100,7 +100,7 @@ void MainWindow::processConnectionClosedEvent(const Event_ConnectionClosed &even
void MainWindow::processServerShutdownEvent(const Event_ServerShutdown &event) void MainWindow::processServerShutdownEvent(const Event_ServerShutdown &event)
{ {
serverShutdownMessageBox.setInformativeText(tr("The server is going to be restarted in %n minute(s).\nAll running games will be lost.\nReason for shutdown: %1", "", event.minutes()).arg(QString::fromStdString(event.reason()))); serverShutdownMessageBox.setInformativeText(tr("The server is going to be restarted in %n minute(s).\nAll running games will be lost.\nReason for shutdown: %1", "", event.minutes()).arg(QString::fromStdString(event.reason())));
serverShutdownMessageBox.setIconPixmap(QPixmap(":/resources/appicon.svg").scaled(64, 64)); serverShutdownMessageBox.setIconPixmap(QPixmap("theme:appicon.svg").scaled(64, 64));
serverShutdownMessageBox.setText(tr("Scheduled server shutdown")); serverShutdownMessageBox.setText(tr("Scheduled server shutdown"));
serverShutdownMessageBox.setWindowModality(Qt::ApplicationModal); serverShutdownMessageBox.setWindowModality(Qt::ApplicationModal);
serverShutdownMessageBox.setVisible(true); serverShutdownMessageBox.setVisible(true);
@ -618,7 +618,7 @@ void MainWindow::createTrayIcon() {
trayIcon = new QSystemTrayIcon(this); trayIcon = new QSystemTrayIcon(this);
trayIcon->setContextMenu(trayIconMenu); trayIcon->setContextMenu(trayIconMenu);
trayIcon->setIcon(QIcon(":/resources/appicon.svg")); trayIcon->setIcon(QIcon("theme:cockatrice.svg"));
trayIcon->show(); trayIcon->show();
connect(trayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this, connect(trayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,

View file

@ -24,28 +24,28 @@ WndSets::WndSets(QWidget *parent)
setsEditToolBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); setsEditToolBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
aTop = new QAction(QString(), this); aTop = new QAction(QString(), this);
aTop->setIcon(QIcon(":/resources/arrow_top_green.svg")); aTop->setIcon(QIcon("theme:icons/arrow_top_green.svg"));
aTop->setToolTip(tr("Move selected set to the top")); aTop->setToolTip(tr("Move selected set to the top"));
aTop->setEnabled(false); aTop->setEnabled(false);
connect(aTop, SIGNAL(triggered()), this, SLOT(actTop())); connect(aTop, SIGNAL(triggered()), this, SLOT(actTop()));
setsEditToolBar->addAction(aTop); setsEditToolBar->addAction(aTop);
aUp = new QAction(QString(), this); aUp = new QAction(QString(), this);
aUp->setIcon(QIcon(":/resources/arrow_up_green.svg")); aUp->setIcon(QIcon("theme:icons/arrow_up_green.svg"));
aUp->setToolTip(tr("Move selected set up")); aUp->setToolTip(tr("Move selected set up"));
aUp->setEnabled(false); aUp->setEnabled(false);
connect(aUp, SIGNAL(triggered()), this, SLOT(actUp())); connect(aUp, SIGNAL(triggered()), this, SLOT(actUp()));
setsEditToolBar->addAction(aUp); setsEditToolBar->addAction(aUp);
aDown = new QAction(QString(), this); aDown = new QAction(QString(), this);
aDown->setIcon(QIcon(":/resources/arrow_down_green.svg")); aDown->setIcon(QIcon("theme:icons/arrow_down_green.svg"));
aDown->setToolTip(tr("Move selected set down")); aDown->setToolTip(tr("Move selected set down"));
aDown->setEnabled(false); aDown->setEnabled(false);
connect(aDown, SIGNAL(triggered()), this, SLOT(actDown())); connect(aDown, SIGNAL(triggered()), this, SLOT(actDown()));
setsEditToolBar->addAction(aDown); setsEditToolBar->addAction(aDown);
aBottom = new QAction(QString(), this); aBottom = new QAction(QString(), this);
aBottom->setIcon(QIcon(":/resources/arrow_bottom_green.svg")); aBottom->setIcon(QIcon("theme:icons/arrow_bottom_green.svg"));
aBottom->setToolTip(tr("Move selected set to the bottom")); aBottom->setToolTip(tr("Move selected set to the bottom"));
aBottom->setEnabled(false); aBottom->setEnabled(false);
connect(aBottom, SIGNAL(triggered()), this, SLOT(actBottom())); connect(aBottom, SIGNAL(triggered()), this, SLOT(actBottom()));

View file

@ -250,5 +250,5 @@ void ZoneViewWidget::zoneDeleted()
void ZoneViewWidget::initStyleOption(QStyleOption *option) const { void ZoneViewWidget::initStyleOption(QStyleOption *option) const {
QStyleOptionTitleBar *titleBar = qstyleoption_cast<QStyleOptionTitleBar *>(option); QStyleOptionTitleBar *titleBar = qstyleoption_cast<QStyleOptionTitleBar *>(option);
if (titleBar) if (titleBar)
titleBar->icon = QIcon(":/resources/appicon.svg"); titleBar->icon = QIcon("theme:cockatrice.svg");
} }

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -773,87 +773,92 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
<context> <context>
<name>DlgCreateGame</name> <name>DlgCreateGame</name>
<message> <message>
<location filename="../src/dlg_creategame.cpp" line="24"/> <location filename="../src/dlg_creategame.cpp" line="25"/>
<source>&amp;Description:</source> <source>&amp;Description:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_creategame.cpp" line="54"/> <location filename="../src/dlg_creategame.cpp" line="56"/>
<source>&amp;Password:</source> <source>&amp;Password:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_creategame.cpp" line="29"/> <location filename="../src/dlg_creategame.cpp" line="30"/>
<source>P&amp;layers:</source> <source>P&amp;layers:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_creategame.cpp" line="51"/> <location filename="../src/dlg_creategame.cpp" line="24"/>
<source>Re&amp;member settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_creategame.cpp" line="53"/>
<source>Game type</source> <source>Game type</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_creategame.cpp" line="58"/> <location filename="../src/dlg_creategame.cpp" line="60"/>
<source>Only &amp;buddies can join</source> <source>Only &amp;buddies can join</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_creategame.cpp" line="59"/> <location filename="../src/dlg_creategame.cpp" line="61"/>
<source>Only &amp;registered users can join</source> <source>Only &amp;registered users can join</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_creategame.cpp" line="74"/> <location filename="../src/dlg_creategame.cpp" line="76"/>
<source>Joining restrictions</source> <source>Joining restrictions</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_creategame.cpp" line="77"/> <location filename="../src/dlg_creategame.cpp" line="79"/>
<source>&amp;Spectators can watch</source> <source>&amp;Spectators can watch</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_creategame.cpp" line="80"/> <location filename="../src/dlg_creategame.cpp" line="82"/>
<source>Spectators &amp;need a password to watch</source> <source>Spectators &amp;need a password to watch</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_creategame.cpp" line="82"/> <location filename="../src/dlg_creategame.cpp" line="84"/>
<source>Spectators can see &amp;hands</source> <source>Spectators can see &amp;hands</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_creategame.cpp" line="81"/> <location filename="../src/dlg_creategame.cpp" line="83"/>
<source>Spectators can &amp;chat</source> <source>Spectators can &amp;chat</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_creategame.cpp" line="88"/> <location filename="../src/dlg_creategame.cpp" line="90"/>
<source>Spectators</source> <source>Spectators</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_creategame.cpp" line="129"/> <location filename="../src/dlg_creategame.cpp" line="136"/>
<source>&amp;Clear</source> <source>&amp;Clear</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_creategame.cpp" line="135"/> <location filename="../src/dlg_creategame.cpp" line="142"/>
<source>Create game</source> <source>Create game</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_creategame.cpp" line="177"/> <location filename="../src/dlg_creategame.cpp" line="185"/>
<source>Game information</source> <source>Game information</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_creategame.cpp" line="251"/> <location filename="../src/dlg_creategame.cpp" line="261"/>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_creategame.cpp" line="251"/> <location filename="../src/dlg_creategame.cpp" line="261"/>
<source>Server error.</source> <source>Server error.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1782,48 +1787,48 @@ Would you like to change your database location setting?</source>
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../src/window_main.cpp" line="75"/> <location filename="../src/window_main.cpp" line="81"/>
<source>There are too many concurrent connections from your address.</source> <source>There are too many concurrent connections from your address.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="86"/> <location filename="../src/window_main.cpp" line="92"/>
<source>Scheduled server shutdown.</source> <source>Scheduled server shutdown.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="77"/> <location filename="../src/window_main.cpp" line="83"/>
<source>Banned by moderator</source> <source>Banned by moderator</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="79"/> <location filename="../src/window_main.cpp" line="85"/>
<source>Expected end time: %1</source> <source>Expected end time: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="81"/> <location filename="../src/window_main.cpp" line="87"/>
<source>This ban lasts indefinitely.</source> <source>This ban lasts indefinitely.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="90"/> <location filename="../src/window_main.cpp" line="97"/>
<source>Connection closed</source> <source>Connection closed</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="90"/> <location filename="../src/window_main.cpp" line="97"/>
<source>The server has terminated your connection. <source>The server has terminated your connection.
Reason: %1</source> Reason: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="97"/> <location filename="../src/window_main.cpp" line="104"/>
<source>Scheduled server shutdown</source> <source>Scheduled server shutdown</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="../src/window_main.cpp" line="95"/> <location filename="../src/window_main.cpp" line="102"/>
<source>The server is going to be restarted in %n minute(s). <source>The server is going to be restarted in %n minute(s).
All running games will be lost. All running games will be lost.
Reason for shutdown: %1</source> Reason for shutdown: %1</source>
@ -1833,473 +1838,478 @@ Reason for shutdown: %1</source>
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="182"/> <location filename="../src/window_main.cpp" line="189"/>
<source>Number of players</source> <source>Number of players</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="182"/> <location filename="../src/window_main.cpp" line="189"/>
<source>Please enter the number of players.</source> <source>Please enter the number of players.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="192"/> <location filename="../src/window_main.cpp" line="199"/>
<location filename="../src/window_main.cpp" line="198"/> <location filename="../src/window_main.cpp" line="205"/>
<source>Player %1</source> <source>Player %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="210"/> <location filename="../src/window_main.cpp" line="217"/>
<source>Load replay</source> <source>Load replay</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="265"/> <location filename="../src/window_main.cpp" line="272"/>
<source>About Cockatrice</source> <source>About Cockatrice</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="267"/> <location filename="../src/window_main.cpp" line="274"/>
<source>Version %1</source> <source>Version %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="273"/> <location filename="../src/window_main.cpp" line="280"/>
<source>Translators:</source> <source>Translators:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="268"/> <location filename="../src/window_main.cpp" line="275"/>
<source>Project Manager:</source> <source>Project Manager:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="74"/> <location filename="../src/window_main.cpp" line="80"/>
<source>The server has reached its maximum user capacity, please check back later.</source> <source>The server has reached its maximum user capacity, please check back later.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="87"/> <location filename="../src/window_main.cpp" line="93"/>
<location filename="../src/window_main.cpp" line="345"/> <location filename="../src/window_main.cpp" line="352"/>
<source>Invalid username.</source> <source>Invalid username.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="134"/> <location filename="../src/window_main.cpp" line="94"/>
<location filename="../src/window_main.cpp" line="144"/> <source>You have been logged out due to logging in at another location.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="141"/>
<location filename="../src/window_main.cpp" line="151"/>
<source>Success</source> <source>Success</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="134"/> <location filename="../src/window_main.cpp" line="141"/>
<source>Registration accepted. <source>Registration accepted.
Will now login.</source> Will now login.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="144"/> <location filename="../src/window_main.cpp" line="151"/>
<source>Account activation accepted. <source>Account activation accepted.
Will now login.</source> Will now login.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="269"/> <location filename="../src/window_main.cpp" line="276"/>
<source>Past Project Managers:</source> <source>Past Project Managers:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="270"/> <location filename="../src/window_main.cpp" line="277"/>
<source>Developers:</source> <source>Developers:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="271"/> <location filename="../src/window_main.cpp" line="278"/>
<source>Our Developers</source> <source>Our Developers</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="272"/> <location filename="../src/window_main.cpp" line="279"/>
<source>Help Develop!</source> <source>Help Develop!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="274"/> <location filename="../src/window_main.cpp" line="281"/>
<source>Recognition Page</source> <source>Recognition Page</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="275"/> <location filename="../src/window_main.cpp" line="282"/>
<source>Help Translate!</source> <source>Help Translate!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="276"/> <location filename="../src/window_main.cpp" line="283"/>
<source>Support:</source> <source>Support:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="277"/> <location filename="../src/window_main.cpp" line="284"/>
<source>Report an Issue</source> <source>Report an Issue</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="285"/> <location filename="../src/window_main.cpp" line="292"/>
<location filename="../src/window_main.cpp" line="293"/> <location filename="../src/window_main.cpp" line="300"/>
<location filename="../src/window_main.cpp" line="296"/> <location filename="../src/window_main.cpp" line="303"/>
<location filename="../src/window_main.cpp" line="307"/> <location filename="../src/window_main.cpp" line="314"/>
<location filename="../src/window_main.cpp" line="311"/> <location filename="../src/window_main.cpp" line="318"/>
<location filename="../src/window_main.cpp" line="315"/> <location filename="../src/window_main.cpp" line="322"/>
<location filename="../src/window_main.cpp" line="320"/> <location filename="../src/window_main.cpp" line="327"/>
<location filename="../src/window_main.cpp" line="323"/> <location filename="../src/window_main.cpp" line="330"/>
<location filename="../src/window_main.cpp" line="337"/> <location filename="../src/window_main.cpp" line="344"/>
<location filename="../src/window_main.cpp" line="405"/> <location filename="../src/window_main.cpp" line="412"/>
<location filename="../src/window_main.cpp" line="409"/>
<location filename="../src/window_main.cpp" line="413"/>
<location filename="../src/window_main.cpp" line="416"/> <location filename="../src/window_main.cpp" line="416"/>
<location filename="../src/window_main.cpp" line="420"/>
<location filename="../src/window_main.cpp" line="423"/> <location filename="../src/window_main.cpp" line="423"/>
<location filename="../src/window_main.cpp" line="430"/> <location filename="../src/window_main.cpp" line="430"/>
<location filename="../src/window_main.cpp" line="437"/> <location filename="../src/window_main.cpp" line="437"/>
<location filename="../src/window_main.cpp" line="439"/> <location filename="../src/window_main.cpp" line="444"/>
<location filename="../src/window_main.cpp" line="728"/> <location filename="../src/window_main.cpp" line="446"/>
<location filename="../src/window_main.cpp" line="764"/> <location filename="../src/window_main.cpp" line="735"/>
<location filename="../src/window_main.cpp" line="771"/>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="285"/> <location filename="../src/window_main.cpp" line="292"/>
<source>Server timeout</source> <source>Server timeout</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="293"/> <location filename="../src/window_main.cpp" line="300"/>
<source>Incorrect username or password. Please check your authentication information and try again.</source> <source>Incorrect username or password. Please check your authentication information and try again.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="296"/> <location filename="../src/window_main.cpp" line="303"/>
<source>There is already an active session using this user name. <source>There is already an active session using this user name.
Please close that session first and re-login.</source> Please close that session first and re-login.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="301"/> <location filename="../src/window_main.cpp" line="308"/>
<location filename="../src/window_main.cpp" line="399"/> <location filename="../src/window_main.cpp" line="406"/>
<source>You are banned until %1.</source> <source>You are banned until %1.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="303"/> <location filename="../src/window_main.cpp" line="310"/>
<location filename="../src/window_main.cpp" line="401"/> <location filename="../src/window_main.cpp" line="408"/>
<source>You are banned indefinitely.</source> <source>You are banned indefinitely.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="315"/> <location filename="../src/window_main.cpp" line="322"/>
<source>This server requires user registration. Do you want to register now?</source> <source>This server requires user registration. Do you want to register now?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="320"/> <location filename="../src/window_main.cpp" line="327"/>
<source>This server requires client ID&apos;s. Your client is either failing to generate an ID or you are running a modified client. <source>This server requires client ID&apos;s. Your client is either failing to generate an ID or you are running a modified client.
Please close and reopen your client to try again.</source> Please close and reopen your client to try again.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="323"/> <location filename="../src/window_main.cpp" line="330"/>
<source>An internal error has occurred, please try closing and reopening your client and try again. If the error persists try updating your client to the most recent build and if need be contact your software provider.</source> <source>An internal error has occurred, please try closing and reopening your client and try again. If the error persists try updating your client to the most recent build and if need be contact your software provider.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="327"/> <location filename="../src/window_main.cpp" line="334"/>
<source>Account activation</source> <source>Account activation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="337"/> <location filename="../src/window_main.cpp" line="344"/>
<source>Unknown login error: %1</source> <source>Unknown login error: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="337"/> <location filename="../src/window_main.cpp" line="344"/>
<location filename="../src/window_main.cpp" line="416"/> <location filename="../src/window_main.cpp" line="423"/>
<source> <source>
This usually means that your client version is out of date, and the server sent a reply your client doesn&apos;t understand.</source> This usually means that your client version is out of date, and the server sent a reply your client doesn&apos;t understand.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="349"/> <location filename="../src/window_main.cpp" line="356"/>
<source>Your username must respect these rules:</source> <source>Your username must respect these rules:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="351"/> <location filename="../src/window_main.cpp" line="358"/>
<source>is %1 - %2 characters long</source> <source>is %1 - %2 characters long</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="352"/> <location filename="../src/window_main.cpp" line="359"/>
<source>can %1 contain lowercase characters</source> <source>can %1 contain lowercase characters</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="352"/> <location filename="../src/window_main.cpp" line="359"/>
<location filename="../src/window_main.cpp" line="353"/> <location filename="../src/window_main.cpp" line="360"/>
<location filename="../src/window_main.cpp" line="354"/> <location filename="../src/window_main.cpp" line="361"/>
<location filename="../src/window_main.cpp" line="367"/> <location filename="../src/window_main.cpp" line="374"/>
<source>NOT</source> <source>NOT</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="353"/> <location filename="../src/window_main.cpp" line="360"/>
<source>can %1 contain uppercase characters</source> <source>can %1 contain uppercase characters</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="354"/> <location filename="../src/window_main.cpp" line="361"/>
<source>can %1 contain numeric characters</source> <source>can %1 contain numeric characters</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="358"/> <location filename="../src/window_main.cpp" line="365"/>
<source>can contain the following punctuation: %1</source> <source>can contain the following punctuation: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="367"/> <location filename="../src/window_main.cpp" line="374"/>
<source>first character can %1 be a punctuation mark</source> <source>first character can %1 be a punctuation mark</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="372"/> <location filename="../src/window_main.cpp" line="379"/>
<source>You may only use A-Z, a-z, 0-9, _, ., and - in your username.</source> <source>You may only use A-Z, a-z, 0-9, _, ., and - in your username.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="382"/> <location filename="../src/window_main.cpp" line="389"/>
<location filename="../src/window_main.cpp" line="385"/> <location filename="../src/window_main.cpp" line="392"/>
<location filename="../src/window_main.cpp" line="388"/> <location filename="../src/window_main.cpp" line="395"/>
<location filename="../src/window_main.cpp" line="391"/> <location filename="../src/window_main.cpp" line="398"/>
<location filename="../src/window_main.cpp" line="394"/> <location filename="../src/window_main.cpp" line="401"/>
<source>Registration denied</source> <source>Registration denied</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="382"/> <location filename="../src/window_main.cpp" line="389"/>
<source>Registration is currently disabled on this server</source> <source>Registration is currently disabled on this server</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="385"/> <location filename="../src/window_main.cpp" line="392"/>
<source>There is already an existing account with the same user name.</source> <source>There is already an existing account with the same user name.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="388"/> <location filename="../src/window_main.cpp" line="395"/>
<source>It&apos;s mandatory to specify a valid email address when registering.</source> <source>It&apos;s mandatory to specify a valid email address when registering.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="391"/> <location filename="../src/window_main.cpp" line="398"/>
<source>Too many registration attempts from your IP address.</source> <source>Too many registration attempts from your IP address.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="394"/> <location filename="../src/window_main.cpp" line="401"/>
<source>Password too short.</source> <source>Password too short.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="413"/> <location filename="../src/window_main.cpp" line="420"/>
<source>Registration failed for a technical problem on the server.</source> <source>Registration failed for a technical problem on the server.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="416"/> <location filename="../src/window_main.cpp" line="423"/>
<source>Unknown registration error: %1</source> <source>Unknown registration error: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="423"/> <location filename="../src/window_main.cpp" line="430"/>
<source>Account activation failed</source> <source>Account activation failed</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="430"/> <location filename="../src/window_main.cpp" line="437"/>
<source>Socket error: %1</source> <source>Socket error: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="437"/> <location filename="../src/window_main.cpp" line="444"/>
<source>You are trying to connect to an obsolete server. Please downgrade your Cockatrice version or connect to a suitable server. <source>You are trying to connect to an obsolete server. Please downgrade your Cockatrice version or connect to a suitable server.
Local version is %1, remote version is %2.</source> Local version is %1, remote version is %2.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="439"/> <location filename="../src/window_main.cpp" line="446"/>
<source>Your Cockatrice client is obsolete. Please update your Cockatrice version. <source>Your Cockatrice client is obsolete. Please update your Cockatrice version.
Local version is %1, remote version is %2.</source> Local version is %1, remote version is %2.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="445"/> <location filename="../src/window_main.cpp" line="452"/>
<source>Connecting to %1...</source> <source>Connecting to %1...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="446"/> <location filename="../src/window_main.cpp" line="453"/>
<source>Registering to %1 as %2...</source> <source>Registering to %1 as %2...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="447"/> <location filename="../src/window_main.cpp" line="454"/>
<source>Disconnected</source> <source>Disconnected</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="448"/> <location filename="../src/window_main.cpp" line="455"/>
<source>Connected, logging in at %1</source> <source>Connected, logging in at %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="458"/> <location filename="../src/window_main.cpp" line="465"/>
<source>&amp;Connect...</source> <source>&amp;Connect...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="459"/> <location filename="../src/window_main.cpp" line="466"/>
<source>&amp;Disconnect</source> <source>&amp;Disconnect</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="460"/> <location filename="../src/window_main.cpp" line="467"/>
<source>Start &amp;local game...</source> <source>Start &amp;local game...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="461"/> <location filename="../src/window_main.cpp" line="468"/>
<source>&amp;Watch replay...</source> <source>&amp;Watch replay...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="462"/> <location filename="../src/window_main.cpp" line="469"/>
<source>&amp;Deck editor</source> <source>&amp;Deck editor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="463"/> <location filename="../src/window_main.cpp" line="470"/>
<source>&amp;Full screen</source> <source>&amp;Full screen</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="464"/> <location filename="../src/window_main.cpp" line="471"/>
<source>&amp;Register to server...</source> <source>&amp;Register to server...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="465"/> <location filename="../src/window_main.cpp" line="472"/>
<source>&amp;Settings...</source> <source>&amp;Settings...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="466"/> <location filename="../src/window_main.cpp" line="473"/>
<location filename="../src/window_main.cpp" line="634"/> <location filename="../src/window_main.cpp" line="641"/>
<source>&amp;Exit</source> <source>&amp;Exit</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="469"/> <location filename="../src/window_main.cpp" line="476"/>
<source>A&amp;ctions</source> <source>A&amp;ctions</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="471"/> <location filename="../src/window_main.cpp" line="478"/>
<source>&amp;Cockatrice</source> <source>&amp;Cockatrice</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="474"/> <location filename="../src/window_main.cpp" line="481"/>
<source>&amp;About Cockatrice</source> <source>&amp;About Cockatrice</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="475"/> <location filename="../src/window_main.cpp" line="482"/>
<source>&amp;Help</source> <source>&amp;Help</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="476"/> <location filename="../src/window_main.cpp" line="483"/>
<source>Check for card updates...</source> <source>Check for card updates...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="694"/> <location filename="../src/window_main.cpp" line="701"/>
<source>A card database update is already running.</source> <source>A card database update is already running.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="728"/> <location filename="../src/window_main.cpp" line="735"/>
<source>Unable to run the card database updater: </source> <source>Unable to run the card database updater: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="764"/> <location filename="../src/window_main.cpp" line="771"/>
<source>The card database updater exited with an error: %1</source> <source>The card database updater exited with an error: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="772"/> <location filename="../src/window_main.cpp" line="779"/>
<source>Update completed successfully. Cockatrice will now reload the card database.</source> <source>Update completed successfully. Cockatrice will now reload the card database.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="694"/> <location filename="../src/window_main.cpp" line="701"/>
<location filename="../src/window_main.cpp" line="772"/> <location filename="../src/window_main.cpp" line="779"/>
<source>Information</source> <source>Information</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="278"/> <location filename="../src/window_main.cpp" line="285"/>
<source>Troubleshooting</source> <source>Troubleshooting</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="279"/> <location filename="../src/window_main.cpp" line="286"/>
<source>F.A.Q.</source> <source>F.A.Q.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="327"/> <location filename="../src/window_main.cpp" line="334"/>
<source>Your account has not been activated yet. <source>Your account has not been activated yet.
You need to provide the activation token received in the activation email</source> You need to provide the activation token received in the activation email</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="741"/> <location filename="../src/window_main.cpp" line="748"/>
<source>failed to start.</source> <source>failed to start.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="744"/> <location filename="../src/window_main.cpp" line="751"/>
<source>crashed.</source> <source>crashed.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="747"/> <location filename="../src/window_main.cpp" line="754"/>
<source>timed out.</source> <source>timed out.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="750"/> <location filename="../src/window_main.cpp" line="757"/>
<source>write error.</source> <source>write error.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="753"/> <location filename="../src/window_main.cpp" line="760"/>
<source>read error.</source> <source>read error.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="757"/> <location filename="../src/window_main.cpp" line="764"/>
<source>unknown error.</source> <source>unknown error.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -4141,37 +4151,37 @@ You need to provide the activation token received in the activation email</sourc
<context> <context>
<name>QMenuBar</name> <name>QMenuBar</name>
<message> <message>
<location filename="../src/window_main.cpp" line="515"/> <location filename="../src/window_main.cpp" line="522"/>
<source>Services</source> <source>Services</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="516"/> <location filename="../src/window_main.cpp" line="523"/>
<source>Hide %1</source> <source>Hide %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="517"/> <location filename="../src/window_main.cpp" line="524"/>
<source>Hide Others</source> <source>Hide Others</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="518"/> <location filename="../src/window_main.cpp" line="525"/>
<source>Show All</source> <source>Show All</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="519"/> <location filename="../src/window_main.cpp" line="526"/>
<source>Preferences...</source> <source>Preferences...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="520"/> <location filename="../src/window_main.cpp" line="527"/>
<source>Quit %1</source> <source>Quit %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="521"/> <location filename="../src/window_main.cpp" line="528"/>
<source>About %1</source> <source>About %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -4179,7 +4189,7 @@ You need to provide the activation token received in the activation email</sourc
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../src/window_main.cpp" line="212"/> <location filename="../src/window_main.cpp" line="219"/>
<source>Cockatrice replays (*.cor)</source> <source>Cockatrice replays (*.cor)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -5514,11 +5524,6 @@ Please enter a name:</source>
<source>Check for card updates</source> <source>Check for card updates</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../src/sequenceEdit/ui_shortcutstab.h" line="1448"/>
<source>Diconnect</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../src/sequenceEdit/ui_shortcutstab.h" line="1449"/> <location filename="../src/sequenceEdit/ui_shortcutstab.h" line="1449"/>
<source>Exit</source> <source>Exit</source>
@ -5735,9 +5740,14 @@ Please enter a name:</source>
<source>Untap</source> <source>Untap</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../src/sequenceEdit/ui_shortcutstab.h" line="1448"/>
<source>Disconnect</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../src/sequenceEdit/ui_shortcutstab.h" line="1500"/> <location filename="../src/sequenceEdit/ui_shortcutstab.h" line="1500"/>
<source>Unkeep</source> <source>Upkeep</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Some files were not shown because too many files have changed in this diff Show more