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)
add_subdirectory(cockatrice)
add_subdirectory(sounds)
add_subdirectory(zonebg)
add_subdirectory(themes)
SET(CPACK_INSTALL_CMAKE_PROJECTS "cockatrice;cockatrice;ALL;/" ${CPACK_INSTALL_CMAKE_PROJECTS})
endif()

View file

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

View file

@ -1,57 +1,58 @@
<RCC>
<qresource prefix="/">
<file alias="back.svg">resources/back.svg</file>
<file>resources/lock.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>
<qresource prefix="/" >
<file>resources/back.svg</file>
<file>resources/cockatrice.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 alias="resources/appicon.svg">resources/cockatrice.svg</file>
<file>resources/add_to_sideboard.svg</file>
<file>resources/decrement.svg</file>
<file>resources/increment.svg</file>
<file>resources/remove_row.svg</file>
<file>resources/arrow_left_green.svg</file>
<file>resources/arrow_right_green.svg</file>
<file>resources/arrow_top_green.svg</file>
<file>resources/arrow_up_green.svg</file>
<file>resources/arrow_down_green.svg</file>
<file>resources/arrow_bottom_green.svg</file>
<file>resources/icon_ready_start.svg</file>
<file>resources/icon_not_ready_start.svg</file>
<file>resources/icon_conceded.svg</file>
<file>resources/icon_player.svg</file>
<file>resources/icon_spectator.svg</file>
<file>resources/replay_start.svg</file>
<file>resources/replay_fastforward.svg</file>
<file>resources/replay_pause.svg</file>
<file>resources/genders/male.svg</file>
<file>resources/genders/female.svg</file>
<file>resources/genders/unknown.svg</file>
<file>resources/icons/arrow_bottom_green.svg</file>
<file>resources/icons/arrow_down_green.svg</file>
<file>resources/icons/arrow_left_green.svg</file>
<file>resources/icons/arrow_right_blue.svg</file>
<file>resources/icons/arrow_right_green.svg</file>
<file>resources/icons/arrow_top_green.svg</file>
<file>resources/icons/arrow_up_green.svg</file>
<file>resources/icons/clearsearch.svg</file>
<file>resources/icons/conceded.svg</file>
<file>resources/icons/decrement.svg</file>
<file>resources/icons/delete.svg</file>
<file>resources/icons/increment.svg</file>
<file>resources/icons/lock.svg</file>
<file>resources/icons/not_ready_start.svg</file>
<file>resources/icons/pencil.svg</file>
<file>resources/icons/player.svg</file>
<file>resources/icons/ready_start.svg</file>
<file>resources/icons/remove_row.svg</file>
<file>resources/icons/search.svg</file>
<file>resources/icons/settings.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/ae.svg</file>
<file>resources/countries/af.svg</file>
@ -301,20 +302,28 @@
<file>resources/countries/za.svg</file>
<file>resources/countries/zm.svg</file>
<file>resources/countries/zw.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/genders/male.svg</file>
<file>resources/genders/female.svg</file>
<file>resources/genders/unknown.svg</file>
<file>resources/phases/untap.svg</file>
<file>resources/phases/upkeep.svg</file>
<file>resources/phases/draw.svg</file>
<file>resources/phases/main1.svg</file>
<file>resources/phases/combat_start.svg</file>
<file>resources/phases/combat_attackers.svg</file>
<file>resources/phases/combat_blockers.svg</file>
<file>resources/phases/combat_damage.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/registered.svg</file>
<file>resources/userlevels/registered_buddy.svg</file>
@ -322,8 +331,5 @@
<file>resources/userlevels/moderator_buddy.svg</file>
<file>resources/userlevels/admin.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>
</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 "settingscache.h"
#include "thememanager.h"
#include <QCryptographicHash>
#include <QDir>
#include <QDirIterator>
@ -624,7 +626,7 @@ void CardInfo::loadPixmap(QPixmap &pixmap)
pixmap = QPixmap();
if (getName().isEmpty()) {
pixmap.load(settingsCache->getCardBackPicturePath());
pixmap = themeManager->getCardBackPixmap();
return;
}
@ -654,15 +656,15 @@ void CardInfo::getPixmap(QSize size, QPixmap &pixmap)
QPixmap bigPixmap;
loadPixmap(bigPixmap);
if (bigPixmap.isNull()) {
if (!getName().isEmpty()) {
pixmap = QPixmap(); // null
return;
} else {
QSvgRenderer svg(QString(":/back.svg"));
if (getName().isEmpty()) {
QSvgRenderer svg(QString("theme:back.svg"));
bigPixmap = QPixmap(svg.defaultSize());
bigPixmap.fill(Qt::transparent);
QPainter painter(&bigPixmap);
svg.render(&painter);
} else {
pixmap = QPixmap(); // null
return;
}
}
@ -790,7 +792,7 @@ CardDatabase::CardDatabase(QObject *parent)
noCard = new CardInfo(this);
QPixmap tmp;
noCard->loadPixmap(tmp); // cache pixmap for card back
connect(settingsCache, SIGNAL(cardBackPicturePathChanged()), noCard, SLOT(updatePixmapCache()));
connect(themeManager, SIGNAL(themeChanged()), noCard, SLOT(updatePixmapCache()));
}
CardDatabase::~CardDatabase()

View file

@ -469,7 +469,7 @@ void DeckListModel::printDeckList(QPrinter *printer)
cursor.insertBlock(headerBlockFormat, headerCharFormat);
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.insertBlock(headerBlockFormat, headerCharFormat);

View file

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

View file

@ -53,7 +53,6 @@ private:
QMultiMap<QString, DeckViewCard *> cardsByType;
QList<QPair<int, int> > currentRowsAndCols;
qreal width, height;
QPixmap bgPixmap;
int getCardTypeTextWidth() const;
public:
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)));
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()));
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()));
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:"));
genderEdit = new QComboBox();
genderLabel->setBuddy(genderEdit);
genderEdit->insertItem(0, QIcon(":/resources/genders/unknown.svg"), tr("Neutral"));
genderEdit->insertItem(1, QIcon(":/resources/genders/male.svg"), tr("Masculine"));
genderEdit->insertItem(2, QIcon(":/resources/genders/female.svg"), tr("Feminine"));
genderEdit->insertItem(0, QIcon("theme:genders/unknown.svg"), tr("Neutral"));
genderEdit->insertItem(1, QIcon("theme:genders/male.svg"), tr("Masculine"));
genderEdit->insertItem(2, QIcon("theme:genders/female.svg"), tr("Feminine"));
genderEdit->setCurrentIndex(gender + 1);
countryLabel = new QLabel(tr("Country:"));
@ -33,7 +33,7 @@ DlgEditUser::DlgEditUser(QWidget *parent, QString email, int gender, QString cou
int i = 1;
foreach(QString c, countries)
{
countryEdit->addItem(QPixmap(":/resources/countries/" + c + ".svg"), c);
countryEdit->addItem(QPixmap("theme:countries/" + c.toLower() + ".svg"), c);
if (c == country)
countryEdit->setCurrentIndex(i);

View file

@ -46,19 +46,268 @@ DlgRegister::DlgRegister(QWidget *parent)
genderLabel = new QLabel(tr("Pronouns:"));
genderEdit = new QComboBox();
genderLabel->setBuddy(genderEdit);
genderEdit->insertItem(0, QIcon(":/resources/genders/unknown.svg"), tr("Neutral"));
genderEdit->insertItem(1, QIcon(":/resources/genders/male.svg"), tr("Masculine"));
genderEdit->insertItem(2, QIcon(":/resources/genders/female.svg"), tr("Feminine"));
genderEdit->insertItem(0, QIcon("theme:genders/unknown.svg"), tr("Neutral"));
genderEdit->insertItem(1, QIcon("theme:genders/male.svg"), tr("Masculine"));
genderEdit->insertItem(2, QIcon("theme:genders/female.svg"), tr("Feminine"));
genderEdit->setCurrentIndex(0);
countryLabel = new QLabel(tr("Country:"));
countryEdit = new QComboBox();
countryLabel->setBuddy(countryEdit);
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);
QStringList countries = settingsCache->getCountries();
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:"));
realnameEdit = new QLineEdit();

View file

@ -25,6 +25,7 @@
#include "dlg_settings.h"
#include "main.h"
#include "settingscache.h"
#include "thememanager.h"
#include "priceupdater.h"
#include "soundengine.h"
#include "sequenceEdit/shortcutstab.h"
@ -254,67 +255,23 @@ void GeneralSettingsPage::setEnabledStatus(bool status)
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()));
QStringList themeDirs = themeManager->getAvailableThemes().keys();
for (int i = 0; i < themeDirs.size(); i++) {
themeBox.addItem(themeDirs[i]);
if (themeDirs[i] == themeName)
themeBox.setCurrentIndex(i);
}
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()));
connect(&themeBox, SIGNAL(currentIndexChanged(int)), this, SLOT(themeBoxChanged(int)));
tableBgEdit = new QLineEdit(settingsCache->getTableBgPath());
tableBgEdit->setReadOnly(true);
QPushButton *tableBgClearButton = new QPushButton(deleteIcon, QString());
connect(tableBgClearButton, SIGNAL(clicked()), this, SLOT(tableBgClearButtonClicked()));
QPushButton *tableBgButton = new QPushButton("...");
connect(tableBgButton, SIGNAL(clicked()), this, SLOT(tableBgButtonClicked()));
QGridLayout *themeGrid = new QGridLayout;
themeGrid->addWidget(&themeLabel, 0, 0);
themeGrid->addWidget(&themeBox, 0, 1);
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;
zoneBgGroupBox->setLayout(zoneBgGrid);
themeGroupBox = new QGroupBox;
themeGroupBox->setLayout(themeGrid);
displayCardNamesCheckBox.setChecked(settingsCache->getDisplayCardNames());
connect(&displayCardNamesCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setDisplayCardNames(int)));
@ -359,7 +316,7 @@ AppearanceSettingsPage::AppearanceSettingsPage()
tableGroupBox->setLayout(tableGrid);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(zoneBgGroupBox);
mainLayout->addWidget(themeGroupBox);
mainLayout->addWidget(cardsGroupBox);
mainLayout->addWidget(handGroupBox);
mainLayout->addWidget(tableGroupBox);
@ -367,14 +324,17 @@ AppearanceSettingsPage::AppearanceSettingsPage()
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()
{
zoneBgGroupBox->setTitle(tr("Zone background pictures"));
handBgLabel.setText(tr("Hand background:"));
stackBgLabel.setText(tr("Stack background:"));
tableBgLabel.setText(tr("Table background:"));
playerAreaBgLabel.setText(tr("Player info background:"));
cardBackPicturePathLabel.setText(tr("Card back:"));
themeGroupBox->setTitle(tr("Theme settings"));
themeLabel.setText(tr("Current theme:"));
cardsGroupBox->setTitle(tr("Card rendering"));
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:"));
}
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()
{
notificationsEnabledCheckBox.setChecked(settingsCache->getNotificationsEnabled());
@ -638,10 +518,10 @@ MessagesSettingsPage::MessagesSettingsPage()
messageList->addItem(settingsCache->messages().getMessageAt(i));
aAdd = new QAction(this);
aAdd->setIcon(QIcon(":/resources/increment.svg"));
aAdd->setIcon(QIcon("theme:icons/increment.svg"));
connect(aAdd, SIGNAL(triggered()), this, SLOT(actAdd()));
aRemove = new QAction(this);
aRemove->setIcon(QIcon(":/resources/decrement.svg"));
aRemove->setIcon(QIcon("theme:icons/decrement.svg"));
connect(aRemove, SIGNAL(triggered()), this, SLOT(actRemove()));
QToolBar *messageToolBar = new QToolBar;
@ -751,7 +631,7 @@ void MessagesSettingsPage::retranslateUi()
SoundSettingsPage::SoundSettingsPage()
{
QIcon deleteIcon(":/resources/icon_delete.svg");
QIcon deleteIcon("theme:icons/delete.svg");
soundEnabledCheckBox.setChecked(settingsCache->getSoundEnabled());
connect(&soundEnabledCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setSoundEnabled(int)));
@ -888,37 +768,37 @@ void DlgSettings::createIcons()
generalButton = new QListWidgetItem(contentsWidget);
generalButton->setTextAlignment(Qt::AlignHCenter);
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->setTextAlignment(Qt::AlignHCenter);
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->setTextAlignment(Qt::AlignHCenter);
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->setTextAlignment(Qt::AlignHCenter);
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->setTextAlignment(Qt::AlignHCenter);
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->setTextAlignment(Qt::AlignHCenter);
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->setTextAlignment(Qt::AlignHCenter);
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 *)));
}

View file

@ -75,40 +75,17 @@ private:
class AppearanceSettingsPage : public AbstractSettingsPage {
Q_OBJECT
private slots:
void handBgClearButtonClicked();
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);
void themeBoxChanged(int index);
private:
QLabel handBgLabel;
QLabel stackBgLabel;
QLabel tableBgLabel;
QLabel playerAreaBgLabel;
QLabel cardBackPicturePathLabel;
QLabel themeLabel;
QComboBox themeBox;
QLabel minPlayersForMultiColumnLayoutLabel;
QLineEdit *handBgEdit;
QLineEdit *stackBgEdit;
QLineEdit *tableBgEdit;
QLineEdit *playerAreaBgEdit;
QLineEdit *cardBackPicturePathEdit;
QCheckBox displayCardNamesCheckBox;
QCheckBox cardScalingCheckBox;
QCheckBox horizontalHandCheckBox;
QCheckBox leftJustifiedHandCheckBox;
QCheckBox invertVerticalCoordinateCheckBox;
QGroupBox *zoneBgGroupBox;
QGroupBox *themeGroupBox;
QGroupBox *cardsGroupBox;
QGroupBox *handGroupBox;
QGroupBox *tableGroupBox;

View file

@ -26,7 +26,7 @@ FilterBuilder::FilterBuilder(QWidget *parent)
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->setMaximumSize(20, 20);

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -16,7 +16,7 @@ QPixmap PhasePixmapGenerator::generatePixmap(int height, QString name)
if (pmCache.contains(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);
pixmap.fill(Qt::transparent);
@ -36,13 +36,13 @@ QPixmap CounterPixmapGenerator::generatePixmap(int height, QString name, bool hi
if (pmCache.contains(key))
return pmCache.value(key);
QSvgRenderer svg(QString(":/resources/counters/" + name + ".svg"));
QSvgRenderer svg(QString("theme:counters/" + name + ".svg"));
if (!svg.isValid()) {
name = "general";
if (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());
@ -98,7 +98,7 @@ QPixmap GenderPixmapGenerator::generatePixmap(int height, int _gender)
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());
QPixmap pixmap(width, height);
pixmap.fill(Qt::transparent);
@ -119,7 +119,7 @@ QPixmap CountryPixmapGenerator::generatePixmap(int height, const QString &countr
if (pmCache.contains(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());
QPixmap pixmap(width, height);
pixmap.fill(Qt::transparent);
@ -154,7 +154,7 @@ QPixmap UserLevelPixmapGenerator::generatePixmap(int height, UserLevelFlags user
if (isBuddy)
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());
QPixmap pixmap(width, height);
pixmap.fill(Qt::transparent);
@ -175,7 +175,7 @@ QPixmap LockPixmapGenerator::generatePixmap(int height)
if (pmCache.contains(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());
QPixmap pixmap(width, height);
pixmap.fill(Qt::transparent);

View file

@ -15,6 +15,7 @@
#include "tab_game.h"
#include "gamescene.h"
#include "settingscache.h"
#include "thememanager.h"
#include "dlg_create_token.h"
#include "carddatabase.h"
#include "color.h"
@ -68,25 +69,18 @@ PlayerArea::PlayerArea(QGraphicsItem *parentItem)
: QObject(), QGraphicsItem(parentItem)
{
setCacheMode(DeviceCoordinateCache);
connect(settingsCache, SIGNAL(playerBgPathChanged()), this, SLOT(updateBgPixmap()));
updateBgPixmap();
connect(themeManager, SIGNAL(themeChanged()), this, SLOT(updateBg()));
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();
}
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)

View file

@ -60,10 +60,9 @@ class PlayerArea : public QObject, public QGraphicsItem {
Q_OBJECT
Q_INTERFACES(QGraphicsItem)
private:
QBrush bgPixmapBrush;
QRectF bRect;
private slots:
void updateBgPixmap();
void updateBg();
public:
enum { Type = typeOther };
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)
: QTreeWidget(parent), tabSupervisor(_tabSupervisor), client(_client), game(_game), gameStarted(false)
{
readyIcon = QIcon(":/resources/icon_ready_start.svg");
notReadyIcon = QIcon(":/resources/icon_not_ready_start.svg");
concededIcon = QIcon(":/resources/icon_conceded.svg");
playerIcon = QIcon(":/resources/icon_player.svg");
spectatorIcon = QIcon(":/resources/icon_spectator.svg");
lockIcon = QIcon(":/resources/lock.svg");
readyIcon = QIcon("theme:icons/ready_start.svg");
notReadyIcon = QIcon("theme:icons/not_ready_start.svg");
concededIcon = QIcon("theme:icons/conceded.svg");
playerIcon = QIcon("theme:icons/player.svg");
spectatorIcon = QIcon("theme:icons/spectator.svg");
lockIcon = QIcon("theme:icons/lock.svg");
if (tabSupervisor) {
itemDelegate = new PlayerListItemDelegate(this);

View file

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

View file

@ -25,8 +25,8 @@ SequenceEdit::SequenceEdit(QString _shorcutName, QWidget *parent) : QWidget(pare
clearButton->setMaximumHeight(lineEdit->height());
defaultButton->setMaximumHeight(lineEdit->height());
clearButton->setIcon(QIcon(":/resources/icon_clearsearch.svg"));
defaultButton->setIcon(QIcon(":/resources/icon_update.png"));
clearButton->setIcon(QIcon("theme:icons/clearsearch.svg"));
defaultButton->setIcon(QIcon("theme:icons/update.png"));
clearButton->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_aSettings->setText(QApplication::translate("shortcutsTab", "Settings", 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));
groupBox_2->setTitle(QApplication::translate("shortcutsTab", "Deck Editor", 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));
groupBox_8->setTitle(QApplication::translate("shortcutsTab", "Game Phases", 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_phase3->setText(QApplication::translate("shortcutsTab", "Main 1", 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();
tokenDatabasePath = settings->value("paths/tokendatabase").toString();
handBgPath = settings->value("zonebg/hand").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();
themeName = settings->value("theme/name").toString();
// we only want to reset the cache once, then its up to the user
bool updateCache = settings->value("revert/pixmapCacheSize", false).toBool();
@ -301,39 +297,11 @@ void SettingsCache::setTokenDatabasePath(const QString &_tokenDatabasePath)
emit tokenDatabasePathChanged();
}
void SettingsCache::setHandBgPath(const QString &_handBgPath)
void SettingsCache::setThemeName(const QString &_themeName)
{
handBgPath = _handBgPath;
settings->setValue("zonebg/hand", handBgPath);
emit handBgPathChanged();
}
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();
themeName = _themeName;
settings->setValue("theme/name", themeName);
emit themeChanged();
}
void SettingsCache::setPicDownload(int _picDownload)

View file

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

View file

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

View file

@ -7,9 +7,8 @@ class StackZone : public SelectZone {
Q_OBJECT
private:
qreal zoneHeight;
QPixmap bgPixmap;
private slots:
void updateBgPixmap();
void updateBg();
public:
StackZone(Player *_p, int _zoneHeight, QGraphicsItem *parent = 0);
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()
{
btnFilter = new QPushButton(QIcon("://resources/icon_view.svg"),QString());
btnFilter = new QPushButton(QIcon("theme:icons/view.svg"),QString());
btnFilter->setObjectName("btnFilter");
btnFilter->setCheckable(true);
btnFilter->setChecked(true);
btnFilter->setMaximumWidth(30);
searchLayout->addWidget(btnFilter);
btnDeck = new QPushButton(QIcon("://resources/hand.svg"),QString());
btnDeck = new QPushButton(QIcon("theme:hand.svg"),QString());
btnDeck->setObjectName("btnDeck");
btnDeck->setCheckable(true);
btnDeck->setChecked(true);
btnDeck->setMaximumWidth(30);
searchLayout->addWidget(btnDeck);
btnCard = new QPushButton(QIcon("://back.svg"),QString());
btnCard = new QPushButton(QIcon("theme:back.svg"),QString());
btnCard->setObjectName("btnCard");
btnCard->setCheckable(true);
btnCard->setChecked(true);
@ -134,7 +134,7 @@ void TabDeckEditor::createDeckDock()
/* Update price
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()));
if (!settingsCache->getPriceTagFeature())
aUpdatePrices->setVisible(false);
@ -316,11 +316,11 @@ void TabDeckEditor::createMenus()
addTabMenu(deckMenu);
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()));
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()));
dbMenu = new QMenu(this);
@ -342,7 +342,7 @@ void TabDeckEditor::createCentralFrame()
searchEdit = new SearchLineEdit;
searchEdit->setObjectName("searchEdit");
#if QT_VERSION >= 0x050300
searchEdit->addAction(QIcon(":/resources/icon_search_black.svg"), QLineEdit::LeadingPosition);
searchEdit->addAction(QIcon("theme:icons/search.svg"), QLineEdit::LeadingPosition);
#endif
setFocusProxy(searchEdit);
@ -381,19 +381,19 @@ void TabDeckEditor::createCentralFrame()
searchEdit->setTreeView(databaseView);
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()));
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()));
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()));
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()));
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()));
QToolBar *deckEditToolBar = new QToolBar;

View file

@ -80,25 +80,25 @@ TabDeckStorage::TabDeckStorage(TabSupervisor *_tabSupervisor, AbstractClient *_c
hbox->addWidget(rightGroupBox);
aOpenLocalDeck = new QAction(this);
aOpenLocalDeck->setIcon(QIcon(":/resources/pencil.svg"));
aOpenLocalDeck->setIcon(QIcon("theme:icons/pencil.svg"));
connect(aOpenLocalDeck, SIGNAL(triggered()), this, SLOT(actOpenLocalDeck()));
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()));
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()));
aOpenRemoteDeck = new QAction(this);
aOpenRemoteDeck->setIcon(QIcon(":/resources/pencil.svg"));
aOpenRemoteDeck->setIcon(QIcon("theme:icons/pencil.svg"));
connect(aOpenRemoteDeck, SIGNAL(triggered()), this, SLOT(actOpenRemoteDeck()));
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()));
aNewFolder = new QAction(this);
aNewFolder->setIcon(qApp->style()->standardIcon(QStyle::SP_FileDialogNewFolder));
connect(aNewFolder, SIGNAL(triggered()), this, SLOT(actNewFolder()));
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()));
leftToolBar->addAction(aOpenLocalDeck);

View file

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

View file

@ -78,24 +78,24 @@ TabReplays::TabReplays(TabSupervisor *_tabSupervisor, AbstractClient *_client)
hbox->addWidget(rightGroupBox);
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(localDirView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(actOpenLocalReplay()));
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()));
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(serverDirView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(actOpenRemoteReplay()));
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()));
aKeep = new QAction(this);
aKeep->setIcon(QIcon(":/resources/lock.svg"));
aKeep->setIcon(QIcon("theme:icons/lock.svg"));
connect(aKeep, SIGNAL(triggered()), this, SLOT(actKeepRemoteReplay()));
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()));
leftToolBar->addAction(aOpenLocalReplay);

View file

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

View file

@ -80,7 +80,7 @@ void CloseButton::paintEvent(QPaintEvent * /*event*/)
TabSupervisor::TabSupervisor(AbstractClient *_client, QWidget *parent)
: 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);
setMovable(true);
setIconSize(QSize(15, 15));

View file

@ -8,6 +8,7 @@
#include "tablezone.h"
#include "player.h"
#include "settingscache.h"
#include "thememanager.h"
#include "arrowitem.h"
#include "carddragitem.h"
#include "carddatabase.h"
@ -16,20 +17,18 @@
#include "pb/command_move_card.pb.h"
#include "pb/command_set_card_attr.pb.h"
const QColor TableZone::BACKGROUND_COLOR = QColor(100, 100, 100);
const QColor TableZone::FADE_MASK = QColor(0, 0, 0, 80);
const QColor TableZone::GRADIENT_COLOR = QColor(255, 255, 255, 150);
const QColor TableZone::GRADIENT_COLORLESS = QColor(255, 255, 255, 0);
TableZone::TableZone(Player *_p, QGraphicsItem *parent)
: 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()));
updateBgPixmap();
updateBg();
height = MARGIN_TOP + MARGIN_BOTTOM + TABLEROWS * CARD_HEIGHT + (TABLEROWS-1) * PADDING_Y;
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();
}
@ -67,11 +63,7 @@ bool TableZone::isInverted() const
void TableZone::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/)
{
// if no custom background is provided then use the default color
if (backgroundPixelMap.isNull())
painter->fillRect(boundingRect(), BACKGROUND_COLOR);
else
painter->fillRect(boundingRect(), QBrush(backgroundPixelMap));
painter->fillRect(boundingRect(), themeManager->getTableBgBrush());
if (active) {
paintZoneOutline(painter);

View file

@ -49,7 +49,7 @@ private:
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 FADE_MASK;
@ -84,7 +84,7 @@ private slots:
/**
Loads in any found custom background and updates
*/
void updateBgPixmap();
void updateBg();
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)
{
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.setWindowModality(Qt::ApplicationModal);
serverShutdownMessageBox.setVisible(true);
@ -618,7 +618,7 @@ void MainWindow::createTrayIcon() {
trayIcon = new QSystemTrayIcon(this);
trayIcon->setContextMenu(trayIconMenu);
trayIcon->setIcon(QIcon(":/resources/appicon.svg"));
trayIcon->setIcon(QIcon("theme:cockatrice.svg"));
trayIcon->show();
connect(trayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,

View file

@ -24,28 +24,28 @@ WndSets::WndSets(QWidget *parent)
setsEditToolBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
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->setEnabled(false);
connect(aTop, SIGNAL(triggered()), this, SLOT(actTop()));
setsEditToolBar->addAction(aTop);
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->setEnabled(false);
connect(aUp, SIGNAL(triggered()), this, SLOT(actUp()));
setsEditToolBar->addAction(aUp);
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->setEnabled(false);
connect(aDown, SIGNAL(triggered()), this, SLOT(actDown()));
setsEditToolBar->addAction(aDown);
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->setEnabled(false);
connect(aBottom, SIGNAL(triggered()), this, SLOT(actBottom()));

View file

@ -250,5 +250,5 @@ void ZoneViewWidget::zoneDeleted()
void ZoneViewWidget::initStyleOption(QStyleOption *option) const {
QStyleOptionTitleBar *titleBar = qstyleoption_cast<QStyleOptionTitleBar *>(option);
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>
<name>DlgCreateGame</name>
<message>
<location filename="../src/dlg_creategame.cpp" line="24"/>
<location filename="../src/dlg_creategame.cpp" line="25"/>
<source>&amp;Description:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_creategame.cpp" line="54"/>
<location filename="../src/dlg_creategame.cpp" line="56"/>
<source>&amp;Password:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_creategame.cpp" line="29"/>
<location filename="../src/dlg_creategame.cpp" line="30"/>
<source>P&amp;layers:</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_creategame.cpp" line="74"/>
<location filename="../src/dlg_creategame.cpp" line="76"/>
<source>Joining restrictions</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_creategame.cpp" line="77"/>
<location filename="../src/dlg_creategame.cpp" line="79"/>
<source>&amp;Spectators can watch</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_creategame.cpp" line="81"/>
<location filename="../src/dlg_creategame.cpp" line="83"/>
<source>Spectators can &amp;chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_creategame.cpp" line="88"/>
<location filename="../src/dlg_creategame.cpp" line="90"/>
<source>Spectators</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_creategame.cpp" line="129"/>
<location filename="../src/dlg_creategame.cpp" line="136"/>
<source>&amp;Clear</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_creategame.cpp" line="135"/>
<location filename="../src/dlg_creategame.cpp" line="142"/>
<source>Create game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_creategame.cpp" line="177"/>
<location filename="../src/dlg_creategame.cpp" line="185"/>
<source>Game information</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_creategame.cpp" line="251"/>
<location filename="../src/dlg_creategame.cpp" line="261"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_creategame.cpp" line="251"/>
<location filename="../src/dlg_creategame.cpp" line="261"/>
<source>Server error.</source>
<translation type="unfinished"></translation>
</message>
@ -1782,48 +1787,48 @@ Would you like to change your database location setting?</source>
<context>
<name>MainWindow</name>
<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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="86"/>
<location filename="../src/window_main.cpp" line="92"/>
<source>Scheduled server shutdown.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="77"/>
<location filename="../src/window_main.cpp" line="83"/>
<source>Banned by moderator</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="79"/>
<location filename="../src/window_main.cpp" line="85"/>
<source>Expected end time: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="81"/>
<location filename="../src/window_main.cpp" line="87"/>
<source>This ban lasts indefinitely.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="90"/>
<location filename="../src/window_main.cpp" line="97"/>
<source>Connection closed</source>
<translation type="unfinished"></translation>
</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.
Reason: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="97"/>
<location filename="../src/window_main.cpp" line="104"/>
<source>Scheduled server shutdown</source>
<translation type="unfinished"></translation>
</message>
<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).
All running games will be lost.
Reason for shutdown: %1</source>
@ -1833,473 +1838,478 @@ Reason for shutdown: %1</source>
</translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="182"/>
<location filename="../src/window_main.cpp" line="189"/>
<source>Number of players</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="192"/>
<location filename="../src/window_main.cpp" line="198"/>
<location filename="../src/window_main.cpp" line="199"/>
<location filename="../src/window_main.cpp" line="205"/>
<source>Player %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="210"/>
<location filename="../src/window_main.cpp" line="217"/>
<source>Load replay</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="265"/>
<location filename="../src/window_main.cpp" line="272"/>
<source>About Cockatrice</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="267"/>
<location filename="../src/window_main.cpp" line="274"/>
<source>Version %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="273"/>
<location filename="../src/window_main.cpp" line="280"/>
<source>Translators:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="268"/>
<location filename="../src/window_main.cpp" line="275"/>
<source>Project Manager:</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="87"/>
<location filename="../src/window_main.cpp" line="345"/>
<location filename="../src/window_main.cpp" line="93"/>
<location filename="../src/window_main.cpp" line="352"/>
<source>Invalid username.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="134"/>
<location filename="../src/window_main.cpp" line="144"/>
<location filename="../src/window_main.cpp" line="94"/>
<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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="134"/>
<location filename="../src/window_main.cpp" line="141"/>
<source>Registration accepted.
Will now login.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="144"/>
<location filename="../src/window_main.cpp" line="151"/>
<source>Account activation accepted.
Will now login.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="269"/>
<location filename="../src/window_main.cpp" line="276"/>
<source>Past Project Managers:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="270"/>
<location filename="../src/window_main.cpp" line="277"/>
<source>Developers:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="271"/>
<location filename="../src/window_main.cpp" line="278"/>
<source>Our Developers</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="272"/>
<location filename="../src/window_main.cpp" line="279"/>
<source>Help Develop!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="274"/>
<location filename="../src/window_main.cpp" line="281"/>
<source>Recognition Page</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="275"/>
<location filename="../src/window_main.cpp" line="282"/>
<source>Help Translate!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="276"/>
<location filename="../src/window_main.cpp" line="283"/>
<source>Support:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="277"/>
<location filename="../src/window_main.cpp" line="284"/>
<source>Report an Issue</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="285"/>
<location filename="../src/window_main.cpp" line="293"/>
<location filename="../src/window_main.cpp" line="296"/>
<location filename="../src/window_main.cpp" line="307"/>
<location filename="../src/window_main.cpp" line="311"/>
<location filename="../src/window_main.cpp" line="315"/>
<location filename="../src/window_main.cpp" line="320"/>
<location filename="../src/window_main.cpp" line="323"/>
<location filename="../src/window_main.cpp" line="337"/>
<location filename="../src/window_main.cpp" line="405"/>
<location filename="../src/window_main.cpp" line="409"/>
<location filename="../src/window_main.cpp" line="413"/>
<location filename="../src/window_main.cpp" line="292"/>
<location filename="../src/window_main.cpp" line="300"/>
<location filename="../src/window_main.cpp" line="303"/>
<location filename="../src/window_main.cpp" line="314"/>
<location filename="../src/window_main.cpp" line="318"/>
<location filename="../src/window_main.cpp" line="322"/>
<location filename="../src/window_main.cpp" line="327"/>
<location filename="../src/window_main.cpp" line="330"/>
<location filename="../src/window_main.cpp" line="344"/>
<location filename="../src/window_main.cpp" line="412"/>
<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="430"/>
<location filename="../src/window_main.cpp" line="437"/>
<location filename="../src/window_main.cpp" line="439"/>
<location filename="../src/window_main.cpp" line="728"/>
<location filename="../src/window_main.cpp" line="764"/>
<location filename="../src/window_main.cpp" line="444"/>
<location filename="../src/window_main.cpp" line="446"/>
<location filename="../src/window_main.cpp" line="735"/>
<location filename="../src/window_main.cpp" line="771"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="285"/>
<location filename="../src/window_main.cpp" line="292"/>
<source>Server timeout</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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.
Please close that session first and re-login.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="301"/>
<location filename="../src/window_main.cpp" line="399"/>
<location filename="../src/window_main.cpp" line="308"/>
<location filename="../src/window_main.cpp" line="406"/>
<source>You are banned until %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="303"/>
<location filename="../src/window_main.cpp" line="401"/>
<location filename="../src/window_main.cpp" line="310"/>
<location filename="../src/window_main.cpp" line="408"/>
<source>You are banned indefinitely.</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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.
Please close and reopen your client to try again.</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="327"/>
<location filename="../src/window_main.cpp" line="334"/>
<source>Account activation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="337"/>
<location filename="../src/window_main.cpp" line="344"/>
<source>Unknown login error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="337"/>
<location filename="../src/window_main.cpp" line="416"/>
<location filename="../src/window_main.cpp" line="344"/>
<location filename="../src/window_main.cpp" line="423"/>
<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>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="352"/>
<location filename="../src/window_main.cpp" line="353"/>
<location filename="../src/window_main.cpp" line="354"/>
<location filename="../src/window_main.cpp" line="367"/>
<location filename="../src/window_main.cpp" line="359"/>
<location filename="../src/window_main.cpp" line="360"/>
<location filename="../src/window_main.cpp" line="361"/>
<location filename="../src/window_main.cpp" line="374"/>
<source>NOT</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="382"/>
<location filename="../src/window_main.cpp" line="385"/>
<location filename="../src/window_main.cpp" line="388"/>
<location filename="../src/window_main.cpp" line="391"/>
<location filename="../src/window_main.cpp" line="394"/>
<location filename="../src/window_main.cpp" line="389"/>
<location filename="../src/window_main.cpp" line="392"/>
<location filename="../src/window_main.cpp" line="395"/>
<location filename="../src/window_main.cpp" line="398"/>
<location filename="../src/window_main.cpp" line="401"/>
<source>Registration denied</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="394"/>
<location filename="../src/window_main.cpp" line="401"/>
<source>Password too short.</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="416"/>
<location filename="../src/window_main.cpp" line="423"/>
<source>Unknown registration error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="423"/>
<location filename="../src/window_main.cpp" line="430"/>
<source>Account activation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="430"/>
<location filename="../src/window_main.cpp" line="437"/>
<source>Socket error: %1</source>
<translation type="unfinished"></translation>
</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.
Local version is %1, remote version is %2.</source>
<translation type="unfinished"></translation>
</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.
Local version is %1, remote version is %2.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="445"/>
<location filename="../src/window_main.cpp" line="452"/>
<source>Connecting to %1...</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="447"/>
<location filename="../src/window_main.cpp" line="454"/>
<source>Disconnected</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="458"/>
<location filename="../src/window_main.cpp" line="465"/>
<source>&amp;Connect...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="459"/>
<location filename="../src/window_main.cpp" line="466"/>
<source>&amp;Disconnect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="460"/>
<location filename="../src/window_main.cpp" line="467"/>
<source>Start &amp;local game...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="461"/>
<location filename="../src/window_main.cpp" line="468"/>
<source>&amp;Watch replay...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="462"/>
<location filename="../src/window_main.cpp" line="469"/>
<source>&amp;Deck editor</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="463"/>
<location filename="../src/window_main.cpp" line="470"/>
<source>&amp;Full screen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="464"/>
<location filename="../src/window_main.cpp" line="471"/>
<source>&amp;Register to server...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="465"/>
<location filename="../src/window_main.cpp" line="472"/>
<source>&amp;Settings...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="466"/>
<location filename="../src/window_main.cpp" line="634"/>
<location filename="../src/window_main.cpp" line="473"/>
<location filename="../src/window_main.cpp" line="641"/>
<source>&amp;Exit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="469"/>
<location filename="../src/window_main.cpp" line="476"/>
<source>A&amp;ctions</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="471"/>
<location filename="../src/window_main.cpp" line="478"/>
<source>&amp;Cockatrice</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="474"/>
<location filename="../src/window_main.cpp" line="481"/>
<source>&amp;About Cockatrice</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="475"/>
<location filename="../src/window_main.cpp" line="482"/>
<source>&amp;Help</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="476"/>
<location filename="../src/window_main.cpp" line="483"/>
<source>Check for card updates...</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="694"/>
<location filename="../src/window_main.cpp" line="772"/>
<location filename="../src/window_main.cpp" line="701"/>
<location filename="../src/window_main.cpp" line="779"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="278"/>
<location filename="../src/window_main.cpp" line="285"/>
<source>Troubleshooting</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="279"/>
<location filename="../src/window_main.cpp" line="286"/>
<source>F.A.Q.</source>
<translation type="unfinished"></translation>
</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.
You need to provide the activation token received in the activation email</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="741"/>
<location filename="../src/window_main.cpp" line="748"/>
<source>failed to start.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="744"/>
<location filename="../src/window_main.cpp" line="751"/>
<source>crashed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="747"/>
<location filename="../src/window_main.cpp" line="754"/>
<source>timed out.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="750"/>
<location filename="../src/window_main.cpp" line="757"/>
<source>write error.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="753"/>
<location filename="../src/window_main.cpp" line="760"/>
<source>read error.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="757"/>
<location filename="../src/window_main.cpp" line="764"/>
<source>unknown error.</source>
<translation type="unfinished"></translation>
</message>
@ -4141,37 +4151,37 @@ You need to provide the activation token received in the activation email</sourc
<context>
<name>QMenuBar</name>
<message>
<location filename="../src/window_main.cpp" line="515"/>
<location filename="../src/window_main.cpp" line="522"/>
<source>Services</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="516"/>
<location filename="../src/window_main.cpp" line="523"/>
<source>Hide %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="517"/>
<location filename="../src/window_main.cpp" line="524"/>
<source>Hide Others</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="518"/>
<location filename="../src/window_main.cpp" line="525"/>
<source>Show All</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="519"/>
<location filename="../src/window_main.cpp" line="526"/>
<source>Preferences...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="520"/>
<location filename="../src/window_main.cpp" line="527"/>
<source>Quit %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/window_main.cpp" line="521"/>
<location filename="../src/window_main.cpp" line="528"/>
<source>About %1</source>
<translation type="unfinished"></translation>
</message>
@ -4179,7 +4189,7 @@ You need to provide the activation token received in the activation email</sourc
<context>
<name>QObject</name>
<message>
<location filename="../src/window_main.cpp" line="212"/>
<location filename="../src/window_main.cpp" line="219"/>
<source>Cockatrice replays (*.cor)</source>
<translation type="unfinished"></translation>
</message>
@ -5514,11 +5524,6 @@ Please enter a name:</source>
<source>Check for card updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/sequenceEdit/ui_shortcutstab.h" line="1448"/>
<source>Diconnect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/sequenceEdit/ui_shortcutstab.h" line="1449"/>
<source>Exit</source>
@ -5735,9 +5740,14 @@ Please enter a name:</source>
<source>Untap</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/sequenceEdit/ui_shortcutstab.h" line="1448"/>
<source>Disconnect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/sequenceEdit/ui_shortcutstab.h" line="1500"/>
<source>Unkeep</source>
<source>Upkeep</source>
<translation type="unfinished"></translation>
</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