Ticket #6627: mythgame_to_mythui2.patch
File mythgame_to_mythui2.patch, 87.4 KB (added by , 16 years ago) |
---|
-
mythtv/themes/Terra/game-ui.xml
1 <mythuitheme> 2 3 <window name="gameui"> 4 5 <imagetype name="fanart" from="basebackdrop" /> 6 <imagetype name="topbar" from="basetopbar" /> 7 8 <textarea name="heading" from="baseheading"> 9 <value>Play Games</value> 10 </textarea> 11 12 <buttontree name="gametreelist"> 13 <area>8,52,1264,375</area> 14 <numlists>3</numlists> 15 <spacing>10</spacing> 16 <buttonlist name="listtemplate"> 17 <area>0,0,1264,375</area> 18 <layout>vertical</layout> 19 <buttonarea>0,0,100%,97%</buttonarea> 20 <statetype name="buttonitem"> 21 <state name="active"> 22 <area>0,0,100%,30</area> 23 <imagetype name="buttonbackground"> 24 <gradient start="#4b4b3e" end="#4b4b3e" alpha="255"/> 25 </imagetype> 26 <textarea name="buttontext"> 27 <area>5,0,85%,30</area> 28 <font>basesmall</font> 29 <cutdown>yes</cutdown> 30 <align>left,vcenter</align> 31 </textarea> 32 </state> 33 <state name="selected" from="active"> 34 <imagetype name="buttonbackground"> 35 <gradient start="#8a916f" end="#8a916f" alpha="255"/> 36 </imagetype> 37 <textarea name="buttontext"> 38 <area>5,0,85%,30</area> 39 <font>basesmallbrown</font> 40 <cutdown>yes</cutdown> 41 <align>left,vcenter</align> 42 </textarea> 43 </state> 44 <state name="inactive" from="active" /> 45 </statetype> 46 </buttonlist> 47 </buttontree> 48 49 <textarea name="gametitle"> 50 <area>296,440,752,60</area> 51 <font>baseextralarge</font> 52 </textarea> 53 54 <textarea name="system"> 55 <area>296,510,140,35</area> 56 <font>basemedium</font> 57 <value>System:</value> 58 </textarea> 59 60 <textarea name="systemname"> 61 <area>436,510,580,35</area> 62 <font>basemedium</font> 63 </textarea> 64 65 <textarea name="year"> 66 <area>296,545,140,35</area> 67 <font>basemedium</font> 68 <value>Year:</value> 69 </textarea> 70 71 <textarea name="yearname"> 72 <area>436,545,580,35</area> 73 <font>basemedium</font> 74 </textarea> 75 76 <textarea name="genre"> 77 <area>296,580,140,35</area> 78 <font>basemedium</font> 79 <value>Genre:</value> 80 </textarea> 81 82 <textarea name="genrename"> 83 <area>436,580,580,35</area> 84 <font>basemedium</font> 85 </textarea> 86 87 <textarea name="favorite"> 88 <area>296,615,140,35</area> 89 <font>basemedium</font> 90 <value>Favorite:</value> 91 </textarea> 92 93 <textarea name="showfavorite"> 94 <area>436,615,580,35</area> 95 <font>basemedium</font> 96 </textarea> 97 98 <imagetype name="gameimage"> 99 <area>880,448,300,196</area> 100 </imagetype> 101 102 <imagetype name="boxart"> 103 <area>25,448,300,196</area> 104 <preserveaspect>true</preserveaspect> 105 </imagetype> 106 107 </window> 108 109 </mythuitheme> -
mythplugins/mythgame/theme/default/game-ui.xml
1 1 <mythuitheme> 2 2 3 <window name="game tree">3 <window name="gameui"> 4 4 5 <font name="active" face="Arial"> 6 <color>#ffffff</color> 7 <size>18</size> 8 <bold>yes</bold> 9 </font> 5 <imagetype name="fanart"> 6 <area>0,0,800,600</area> 7 </imagetype> 10 8 11 <font name="inactive" face="Arial">12 <color>#9999cc</color>13 <size>18</size>14 <bold>yes</bold>15 </font>16 17 <font name="selectable" face="Arial">18 <color>#8cdeff</color>19 <size>18</size>20 <bold>yes</bold>21 </font>22 23 9 <font name="largetitle" face="Arial"> 24 10 <color>#ffffff</color> 25 11 <dropcolor>#000000</dropcolor> … … 33 19 <size>20</size> 34 20 <bold>yes</bold> 35 21 </font> 36 37 <container name="background"> 38 <image name="filler" draworder="0" fleximage="yes"> 39 <filename>background.png</filename> 40 <position>0,10</position> 41 </image> 42 <image name="titlelines" draworder="0" fleximage="no"> 43 <filename>trans-titles.png</filename> 44 <position>0,10</position> 45 </image> 46 <image name="infofiller" draworder="0" fleximage="no"> 47 <filename>pf-top.png</filename> 48 <position>26,350</position> 49 </image> 50 </container> 51 52 <container name="gameselector"> 22 23 <buttontree name="gametreelist"> 53 24 <area>0,10,800,310</area> 54 <managedtreelist name="gametreelist" draworder="1" bins="2"> 55 <area>40,10,720,270</area> 56 <image function="selectionbar" filename="mv_selectionbar.png"></image> 57 <image function="uparrow" filename="mv_up_arrow.png"></image> 58 <image function="downarrow" filename="mv_down_arrow.png"></image> 59 <image function="leftarrow" filename="mv_left_arrow.png"></image> 60 <image function="rightarrow" filename="mv_right_arrow.png"></image> 61 <bin number="1"> 62 <area>30,16,190,250</area> 63 <fcnfont name="active" function="active"></fcnfont> 64 <fcnfont name="inactive" function="inactive"></fcnfont> 65 <fcnfont name="active" function="selected"></fcnfont> 66 <fcnfont name="selectable" function="selectable"></fcnfont> 67 </bin> 68 <bin number="2"> 69 <area>235,10,535,270</area> 70 <fcnfont name="active" function="active"></fcnfont> 71 <fcnfont name="active" function="selected"></fcnfont> 72 <fcnfont name="inactive" function="inactive"></fcnfont> 73 <fcnfont name="selectable" function="selectable"></fcnfont> 74 </bin> 75 </managedtreelist> 25 <numlists>2</numlists> 26 <spacing>10</spacing> 27 <buttonlist name="listtemplate" from="basebuttonlist" /> 28 </buttontree> 76 29 77 <image name="showinglines" draworder="2" fleximage="yes"> 78 <filename>showings.png</filename> 79 <position>0,0</position> 80 </image> 81 </container> 82 83 <container name="game_info"> 84 <area>25,355,750,220</area> 85 86 <textarea name="gametitle" draworder="6"> 87 <area>13,5,500,50</area> 30 <textarea name="gametitle"> 31 <area>38,360,500,50</area> 88 32 <font>largetitle</font> 89 33 </textarea> 90 34 91 <textarea name="system" draworder="6">92 <area> 13,75,150,35</area>35 <textarea name="system"> 36 <area>38,430,150,35</area> 93 37 <font>infofont</font> 94 38 <value>System:</value> 95 39 </textarea> 96 40 97 <textarea name="systemname" draworder="6">98 <area>1 53,75,500,35</area>41 <textarea name="systemname"> 42 <area>178,430,500,35</area> 99 43 <font>infofont</font> 100 44 </textarea> 101 45 102 <textarea name="year" draworder="6">103 <area> 13,110,150,35</area>46 <textarea name="year"> 47 <area>38,465,150,35</area> 104 48 <font>infofont</font> 105 49 <value>Year:</value> 106 50 </textarea> 107 51 108 <textarea name="yearname" draworder="6">109 <area>1 53,110,500,35</area>52 <textarea name="yearname"> 53 <area>178,465,500,35</area> 110 54 <font>infofont</font> 111 55 </textarea> 112 56 113 <textarea name="genre" draworder="6">114 <area> 13,140,150,35</area>57 <textarea name="genre"> 58 <area>38,495,150,35</area> 115 59 <font>infofont</font> 116 60 <value>Genre:</value> 117 61 </textarea> 118 62 119 <textarea name="genrename" draworder="6">120 <area>1 53,140,500,35</area>63 <textarea name="genrename"> 64 <area>178,495,500,35</area> 121 65 <font>infofont</font> 122 66 </textarea> 123 67 124 <textarea name="favorite" draworder="6">125 <area> 13,170,150,35</area>68 <textarea name="favorite"> 69 <area>38,525,150,35</area> 126 70 <font>infofont</font> 127 71 <value>Favorite:</value> 128 72 </textarea> 129 73 130 <textarea name="showfavorite" draworder="6">131 <area>1 53,170,500,35</area>74 <textarea name="showfavorite"> 75 <area>178,525,500,35</area> 132 76 <font>infofont</font> 133 77 </textarea> 134 78 135 <image name="gameimage" draworder="6" fleximage="no"> 136 <position>535,25</position> 137 <staticsize>180,150</staticsize> 138 </image> 139 </container> 140 79 <imagetype name="gameimage"> 80 <area>600,420,180,150</area> 81 </imagetype> 82 83 <imagetype name="boxart"> 84 <area>410,420,180,150</area> 85 <preserveaspect>true</preserveaspect> 86 </imagetype> 87 141 88 </window> 142 89 90 <window name="edit_metadata"> 91 92 <textarea name="title" from="basetextarea"> 93 <area>10,50,1260,50</area> 94 <value>Edit Game Information</value> 95 <align>hcenter,vcenter</align> 96 <font>baselarge</font> 97 </textarea> 98 99 <!-- Labels --> 100 101 <textarea name="gamename_label" from="basetextarea"> 102 <area>250,110,250,40</area> 103 <value>Game Name:</value> 104 <align>right,top</align> 105 </textarea> 106 107 <textarea name="genre_label" from="basetextarea"> 108 <area>250,155,250,40</area> 109 <value>Genre:</value> 110 <align>right,top</align> 111 </textarea> 112 113 <textarea name="year_label" from="basetextarea"> 114 <area>250,200,250,40</area> 115 <value>Year:</value> 116 <align>right,top</align> 117 </textarea> 118 119 <textarea name="country_label" from="basetextarea"> 120 <area>250,245,250,40</area> 121 <value>Country:</value> 122 <align>right,top</align> 123 </textarea> 124 125 <textarea name="publisher_label" from="basetextarea"> 126 <area>250,290,250,40</area> 127 <value>Publisher:</value> 128 <align>right,top</align> 129 </textarea> 130 131 <textarea name="favorite_label" from="basetextarea"> 132 <area>250,335,250,40</area> 133 <value>Favorite:</value> 134 <align>right,top</align> 135 </textarea> 136 137 <textarea name="fanart_label" from="basetextarea"> 138 <area>250,380,250,40</area> 139 <value>Fanart:</value> 140 <align>right,top</align> 141 </textarea> 142 143 <textarea name="boxart_label" from="basetextarea"> 144 <area>250,425,250,40</area> 145 <value>Boxart:</value> 146 <align>right,top</align> 147 </textarea> 148 149 <!-- Widgets --> 150 151 <textedit name="gamename_edit" from="basetextedit"> 152 <position>510,100</position> 153 </textedit> 154 155 <textedit name="genre_edit" from="basetextedit"> 156 <position>510,145</position> 157 </textedit> 158 159 <textedit name="year_edit" from="basetextedit"> 160 <position>510,190</position> 161 </textedit> 162 163 <textedit name="country_edit" from="basetextedit"> 164 <position>510,235</position> 165 </textedit> 166 167 <textedit name="publisher_edit" from="basetextedit"> 168 <position>510,280</position> 169 </textedit> 170 171 <checkbox name="favorite_check" from="basecheckbox"> 172 <position>510,330</position> 173 </checkbox> 174 175 <button name="fanart_button" from="basesearchbutton"> 176 <position>510,370</position> 177 </button> 178 179 <textarea name="fanart_text" from="basetextarea"> 180 <area>550,375,250,40</area> 181 <value>/path/to/the/thing.jpg</value> 182 </textarea> 183 184 <button name="boxart_button" from="basesearchbutton"> 185 <position>510,415</position> 186 </button> 187 188 <textarea name="boxart_text" from="basetextarea"> 189 <area>550,420,250,40</area> 190 <value>/path/to/the/thing.jpg</value> 191 </textarea> 192 193 <button name="done_button" from="basebutton"> 194 <position>510,565</position> 195 <value>Done</value> 196 </button> 197 198 </window> 199 200 <window name="gamedetailspopup"> 201 202 <imagetype name="fanart"> 203 <area>0,0,800,600</area> 204 </imagetype> 205 206 <textarea name="gamename_lab" from="basetextarea"> 207 <area>40,60,140,40</area> 208 <value>Game:</value> 209 <align>right</align> 210 </textarea> 211 212 <textarea name="gamename" from="basetextarea"> 213 <area>190,60,570,40</area> 214 </textarea> 215 216 <textarea name="gametype_lab" from="basetextarea"> 217 <area>40,100,140,40</area> 218 <value>Type:</value> 219 <align>right</align> 220 </textarea> 221 222 <textarea name="gametype" from="basetextarea"> 223 <area>190,100,570,40</area> 224 </textarea> 225 226 <textarea name="romname_lab" from="basetextarea"> 227 <area>40,140,140,40</area> 228 <value>Filename:</value> 229 <align>right</align> 230 </textarea> 231 232 <textarea name="romname" from="basetextarea"> 233 <area>190,140,570,40</area> 234 </textarea> 235 236 <textarea name="rompath_lab" from="basetextarea"> 237 <area>40,180,140,40</area> 238 <value>Rompath:</value> 239 <align>right</align> 240 </textarea> 241 242 <textarea name="rompath" from="basetextarea"> 243 <area>190,180,570,40</area> 244 </textarea> 245 246 <textarea name="allsystems_lab" from="basetextarea"> 247 <area>40,220,140,40</area> 248 <value>System(s):</value> 249 <align>right</align> 250 </textarea> 251 252 <textarea name="allsystems" from="basetextarea"> 253 <area>190,220,570,40</area> 254 </textarea> 255 256 <textarea name="genre_lab" from="basetextarea"> 257 <area>40,260,140,40</area> 258 <value>Genre:</value> 259 <align>right</align> 260 </textarea> 261 262 <textarea name="genre" from="basetextarea"> 263 <area>190,260,570,40</area> 264 </textarea> 265 266 <textarea name="year_lab" from="basetextarea"> 267 <area>40,300,140,40</area> 268 <value>Year:</value> 269 <align>right</align> 270 </textarea> 271 272 <textarea name="year" from="basetextarea"> 273 <area>190,300,400,40</area> 274 </textarea> 275 276 <textarea name="country_lab" from="basetextarea"> 277 <area>40,340,140,40</area> 278 <value>Country:</value> 279 <align>right</align> 280 </textarea> 281 282 <textarea name="country" from="basetextarea"> 283 <area>190,340,400,40</area> 284 </textarea> 285 286 <textarea name="publisher_lab" from="basetextarea"> 287 <area>40,380,140,40</area> 288 <value>Publisher:</value> 289 <align>right</align> 290 </textarea> 291 292 <textarea name="publisher" from="basetextarea"> 293 <area>190,380,400,40</area> 294 </textarea> 295 296 <textarea name="crc_lab" from="basetextarea"> 297 <area>40,420,140,40</area> 298 <value>CRC:</value> 299 <align>right</align> 300 </textarea> 301 302 <textarea name="crc" from="basetextarea"> 303 <area>190,420,400,40</area> 304 </textarea> 305 306 <imagetype name="boxart"> 307 <area>600,300,180,150</area> 308 <preserveaspect>true</preserveaspect> 309 </imagetype> 310 311 <button name="play_button" from="basebutton"> 312 <position>118,517</position> 313 <value>Play</value> 314 </button> 315 316 <button name="done_button" from="basebutton"> 317 <position>529,517</position> 318 <value>Done</value> 319 </button> 320 321 </window> 322 143 323 </mythuitheme> -
mythplugins/mythgame/theme/default-wide/game-ui.xml
1 1 <mythuitheme> 2 2 3 <window name="game tree">3 <window name="gameui"> 4 4 5 <font name="active" face="Trebuchet MS"> 6 <color>#ffffff</color> 7 <size>18</size> 8 <bold>yes</bold> 9 </font> 5 <imagetype name="fanart"> 6 <area>0,0,1280,720</area> 7 </imagetype> 10 8 11 <font name="inactive" face="Trebuchet MS">12 <color>#9999cc</color>13 <size>18</size>14 <bold>yes</bold>15 </font>16 17 <font name="selectable" face="Trebuchet MS">18 <color>#8cdeff</color>19 <size>18</size>20 <bold>yes</bold>21 </font>22 23 9 <font name="largetitle" face="Trebuchet MS"> 24 10 <color>#ffffff</color> 25 11 <dropcolor>#000000</dropcolor> … … 34 20 <bold>yes</bold> 35 21 </font> 36 22 37 <container name="background"> 38 <image name="filler" draworder="0" fleximage="yes"> 39 <filename>background.png</filename> <!-- 1280x326 --> 40 <position>0,48</position> 41 </image> 42 <image name="titlelines" draworder="0" fleximage="no"> 43 <filename>trans-titles.png</filename> <!-- 1280x326 --> 44 <position>0,50</position> 45 <staticsize>280,315</staticsize> 46 </image> 47 <image name="infofiller" draworder="0" fleximage="no"> 48 <filename>pf-top.png</filename> <!-- 1152x260 --> 49 <position>64,412</position> 50 </image> 51 </container> 52 53 <container name="gameselector"> 23 <buttontree name="gametreelist"> 54 24 <area>8,52,1264,310</area> 55 <managedtreelist name="gametreelist" draworder="1" bins="2"> 56 <area>32,0,1200,296</area> 57 <image function="selectionbar" filename="mv_selectionbar.png"></image> 58 <image function="uparrow" filename="mv_up_arrow.png"></image> 59 <image function="downarrow" filename="mv_down_arrow.png"></image> 60 <image function="leftarrow" filename="mv_left_arrow.png"></image> 61 <image function="rightarrow" filename="mv_right_arrow.png"></image> 62 <bin number="1"> 63 <area>56,28,288,271</area> 64 <fcnfont name="active" function="active"></fcnfont> 65 <fcnfont name="inactive" function="inactive"></fcnfont> 66 <fcnfont name="active" function="selected"></fcnfont> 67 <fcnfont name="selectable" function="selectable"></fcnfont> 68 </bin> 69 <bin number="2"> 70 <area>384,0,816,296</area> 71 <fcnfont name="active" function="active"></fcnfont> 72 <fcnfont name="active" function="selected"></fcnfont> 73 <fcnfont name="inactive" function="inactive"></fcnfont> 74 <fcnfont name="selectable" function="selectable"></fcnfont> 75 </bin> 76 </managedtreelist> 25 <numlists>3</numlists> 26 <spacing>10</spacing> 27 <buttonlist name="listtemplate" from="basebuttonlist" /> 28 </buttontree> 77 29 78 <image name="showinglines" draworder="2" fleximage="yes"> 79 <filename>showings.png</filename> 80 <position>20,10</position> 81 <staticsize>1200,310</staticsize> 82 </image> 83 </container> 84 85 <container name="game_info"> 86 <area>64,412,1152,260</area> 87 88 <textarea name="gametitle" draworder="6"> 89 <area>32,28,752,60</area> 30 <textarea name="gametitle"> 31 <area>96,440,752,60</area> 90 32 <font>largetitle</font> 91 33 </textarea> 92 34 93 <textarea name="system" draworder="6">94 <area> 32,98,140,35</area>35 <textarea name="system"> 36 <area>96,510,140,35</area> 95 37 <font>infofont</font> 96 38 <value>System:</value> 97 39 </textarea> 98 40 99 <textarea name="systemname" draworder="6">100 <area> 172,98,580,35</area>41 <textarea name="systemname"> 42 <area>236,510,580,35</area> 101 43 <font>infofont</font> 102 44 </textarea> 103 45 104 <textarea name="year" draworder="6">105 <area> 32,133,140,35</area>46 <textarea name="year"> 47 <area>96,545,140,35</area> 106 48 <font>infofont</font> 107 49 <value>Year:</value> 108 50 </textarea> 109 51 110 <textarea name="yearname" draworder="6">111 <area> 172,133,580,35</area>52 <textarea name="yearname"> 53 <area>236,545,580,35</area> 112 54 <font>infofont</font> 113 55 </textarea> 114 56 115 <textarea name="genre" draworder="6">116 <area> 32,168,140,35</area>57 <textarea name="genre"> 58 <area>96,580,140,35</area> 117 59 <font>infofont</font> 118 60 <value>Genre:</value> 119 61 </textarea> 120 62 121 <textarea name="genrename" draworder="6">122 <area> 172,168,580,35</area>63 <textarea name="genrename"> 64 <area>236,580,580,35</area> 123 65 <font>infofont</font> 124 66 </textarea> 125 67 126 <textarea name="favorite" draworder="6">127 <area> 32,203,140,35</area>68 <textarea name="favorite"> 69 <area>96,615,140,35</area> 128 70 <font>infofont</font> 129 71 <value>Favorite:</value> 130 72 </textarea> 131 73 132 <textarea name="showfavorite" draworder="6">133 <area> 172,203,580,35</area>74 <textarea name="showfavorite"> 75 <area>236,615,580,35</area> 134 76 <font>infofont</font> 135 77 </textarea> 136 78 137 <image name="gameimage" draworder="6" fleximage="no"> 138 <position>816,36</position> 139 <staticsize>300,196</staticsize> 140 </image> 141 </container> 142 79 <imagetype name="boxart"> 80 <area>610,500,180,150</area> 81 <preserveaspect>true</preserveaspect> 82 </imagetype> 83 84 <imagetype name="gameimage"> 85 <area>880,500,300,196</area> 86 </imagetype> 87 143 88 </window> 144 89 90 <window name="gamedetailspopup"> 91 92 <imagetype name="fanart"> 93 <area>0,0,1280,720</area> 94 </imagetype> 95 96 <textarea name="title" from="basetextarea"> 97 <area>10,50,1260,50</area> 98 <value>Game Information</value> 99 <align>hcenter,vcenter</align> 100 <font>baselarge</font> 101 </textarea> 102 103 <textarea name="gamename_lab" from="basetextarea"> 104 <area>40,160,140,40</area> 105 <value>Game:</value> 106 <align>right</align> 107 </textarea> 108 109 <textarea name="gamename" from="basetextarea"> 110 <area>190,160,570,40</area> 111 </textarea> 112 113 <textarea name="gametype_lab" from="basetextarea"> 114 <area>40,200,140,40</area> 115 <value>Type:</value> 116 <align>right</align> 117 </textarea> 118 119 <textarea name="gametype" from="basetextarea"> 120 <area>190,200,570,40</area> 121 </textarea> 122 123 <textarea name="romname_lab" from="basetextarea"> 124 <area>40,240,140,40</area> 125 <value>Filename:</value> 126 <align>right</align> 127 </textarea> 128 129 <textarea name="romname" from="basetextarea"> 130 <area>190,240,570,40</area> 131 </textarea> 132 133 <textarea name="rompath_lab" from="basetextarea"> 134 <area>40,280,140,40</area> 135 <value>Rompath:</value> 136 <align>right</align> 137 </textarea> 138 139 <textarea name="rompath" from="basetextarea"> 140 <area>190,280,570,40</area> 141 </textarea> 142 143 <textarea name="allsystems_lab" from="basetextarea"> 144 <area>40,320,140,40</area> 145 <value>System(s):</value> 146 <align>right</align> 147 </textarea> 148 149 <textarea name="allsystems" from="basetextarea"> 150 <area>190,320,570,40</area> 151 </textarea> 152 153 <textarea name="genre_lab" from="basetextarea"> 154 <area>40,360,140,40</area> 155 <value>Genre:</value> 156 <align>right</align> 157 </textarea> 158 159 <textarea name="genre" from="basetextarea"> 160 <area>190,360,570,40</area> 161 </textarea> 162 163 <textarea name="year_lab" from="basetextarea"> 164 <area>40,400,140,40</area> 165 <value>Year:</value> 166 <align>right</align> 167 </textarea> 168 169 <textarea name="year" from="basetextarea"> 170 <area>190,400,400,40</area> 171 </textarea> 172 173 <textarea name="country_lab" from="basetextarea"> 174 <area>40,440,140,40</area> 175 <value>Country:</value> 176 <align>right</align> 177 </textarea> 178 179 <textarea name="country" from="basetextarea"> 180 <area>190,440,400,40</area> 181 </textarea> 182 183 <textarea name="publisher_lab" from="basetextarea"> 184 <area>40,480,140,40</area> 185 <value>Publisher:</value> 186 <align>right</align> 187 </textarea> 188 189 <textarea name="publisher" from="basetextarea"> 190 <area>190,480,400,40</area> 191 </textarea> 192 193 <textarea name="crc_lab" from="basetextarea"> 194 <area>40,520,140,40</area> 195 <value>CRC:</value> 196 <align>right</align> 197 </textarea> 198 199 <textarea name="crc" from="basetextarea"> 200 <area>190,520,400,40</area> 201 </textarea> 202 203 <imagetype name="boxart"> 204 <area>800,200,415,320</area> 205 <preserveaspect>true</preserveaspect> 206 </imagetype> 207 208 <button name="play_button" from="basebutton"> 209 <position>347,600</position> 210 <value>Play</value> 211 </button> 212 213 <button name="done_button" from="basebutton"> 214 <position>629,600</position> 215 <value>Done</value> 216 </button> 217 218 </window> 219 220 <window name="edit_metadata"> 221 222 <textarea name="title" from="basetextarea"> 223 <area>10,50,1260,50</area> 224 <value>Edit Game Information</value> 225 <align>hcenter,vcenter</align> 226 <font>baselarge</font> 227 </textarea> 228 229 <!-- Labels --> 230 231 <textarea name="gamename_label" from="basetextarea"> 232 <area>250,110,250,40</area> 233 <value>Game Name:</value> 234 <align>right,top</align> 235 </textarea> 236 237 <textarea name="genre_label" from="basetextarea"> 238 <area>250,155,250,40</area> 239 <value>Genre:</value> 240 <align>right,top</align> 241 </textarea> 242 243 <textarea name="year_label" from="basetextarea"> 244 <area>250,200,250,40</area> 245 <value>Year:</value> 246 <align>right,top</align> 247 </textarea> 248 249 <textarea name="country_label" from="basetextarea"> 250 <area>250,245,250,40</area> 251 <value>Country:</value> 252 <align>right,top</align> 253 </textarea> 254 255 <textarea name="publisher_label" from="basetextarea"> 256 <area>250,290,250,40</area> 257 <value>Publisher:</value> 258 <align>right,top</align> 259 </textarea> 260 261 <textarea name="favorite_label" from="basetextarea"> 262 <area>250,335,250,40</area> 263 <value>Favorite:</value> 264 <align>right,top</align> 265 </textarea> 266 267 <textarea name="fanart_label" from="basetextarea"> 268 <area>250,380,250,40</area> 269 <value>Fanart:</value> 270 <align>right,top</align> 271 </textarea> 272 273 <textarea name="boxart_label" from="basetextarea"> 274 <area>250,425,250,40</area> 275 <value>Boxart:</value> 276 <align>right,top</align> 277 </textarea> 278 279 <!-- Widgets --> 280 281 <textedit name="gamename_edit" from="basetextedit"> 282 <position>510,100</position> 283 </textedit> 284 285 <textedit name="genre_edit" from="basetextedit"> 286 <position>510,145</position> 287 </textedit> 288 289 <textedit name="year_edit" from="basetextedit"> 290 <position>510,190</position> 291 </textedit> 292 293 <textedit name="country_edit" from="basetextedit"> 294 <position>510,235</position> 295 </textedit> 296 297 <textedit name="publisher_edit" from="basetextedit"> 298 <position>510,280</position> 299 </textedit> 300 301 <checkbox name="favorite_check" from="basecheckbox"> 302 <position>510,330</position> 303 </checkbox> 304 305 <button name="fanart_button" from="basesearchbutton"> 306 <position>510,370</position> 307 </button> 308 309 <textarea name="fanart_text" from="basetextarea"> 310 <area>550,375,750,40</area> 311 <value>/path/to/the/thing.jpg</value> 312 </textarea> 313 314 <button name="boxart_button" from="basesearchbutton"> 315 <position>510,415</position> 316 </button> 317 318 <textarea name="boxart_text" from="basetextarea"> 319 <area>550,420,750,40</area> 320 <value>/path/to/the/thing.jpg</value> 321 </textarea> 322 323 <button name="done_button" from="basebutton"> 324 <position>510,565</position> 325 <value>Done</value> 326 </button> 327 328 </window> 329 145 330 </mythuitheme> -
mythplugins/mythgame/mythgame/romedit.cpp
1 #include <qstring.h> 1 #include <QImageReader> 2 #include <QApplication> 2 3 3 4 #include <mythtv/mythcontext.h> 5 #include <mythtv/mythdirs.h> 4 6 7 #include <mythtv/libmythui/mythmainwindow.h> 8 #include <mythtv/libmythui/mythdialogbox.h> 9 #include <mythtv/libmythui/mythuibuttonlist.h> 10 #include <mythtv/libmythui/mythuitext.h> 11 #include <mythtv/libmythui/mythuitextedit.h> 12 #include <mythtv/libmythui/mythuibutton.h> 13 #include <mythtv/libmythui/mythuicheckbox.h> 14 5 15 #include "romedit.h" 16 #include "rominfo.h" 6 17 7 class Gamename : public LineEditSetting, public GenericDBStorage 18 EditRomInfoDialog::EditRomInfoDialog(MythScreenStack *parent, 19 QString name, RomInfo *romInfo) : MythScreenType(parent, name), 20 m_id(""), m_retObject(0), m_gamenameEdit(0), m_genreEdit(0), 21 m_yearEdit(0), m_countryEdit(0), m_publisherEdit(0), m_favoriteCheck(0), 22 m_fanartButton(0), m_fanartText(0), m_boxartButton(0), m_boxartText(0), 23 m_doneButton(0) 8 24 { 9 public: 10 Gamename(const QString &romname) : 11 LineEditSetting(this), GenericDBStorage( 12 this, "gamemetadata", "gamename", "romname", romname) 13 { 14 setLabel(QObject::tr("Game Name")); 15 setHelpText(QObject::tr("Friendly name of this Game.")); 16 } 17 }; 25 m_workingRomInfo = new RomInfo(*romInfo); 26 } 18 27 19 class Genre : public LineEditSetting, public GenericDBStorage 28 EditRomInfoDialog::~EditRomInfoDialog() 20 29 { 21 public: 22 Genre(const QString &romname) : 23 LineEditSetting(this), GenericDBStorage( 24 this, "gamemetadata", "genre", "romname", romname) 30 delete m_workingRomInfo; 31 } 32 33 bool EditRomInfoDialog::Create() 34 { 35 if (!LoadWindowFromXML("game-ui.xml", "edit_metadata", this)) 36 return false; 37 38 bool err = false; 39 UIUtilE::Assign(this, m_gamenameEdit, "gamename_edit", &err); 40 UIUtilE::Assign(this, m_genreEdit, "genre_edit", &err); 41 UIUtilE::Assign(this, m_yearEdit, "year_edit", &err); 42 UIUtilE::Assign(this, m_countryEdit, "country_edit", &err); 43 UIUtilE::Assign(this, m_publisherEdit, "publisher_edit", &err); 44 45 UIUtilE::Assign(this, m_favoriteCheck, "favorite_check", &err); 46 47 UIUtilE::Assign(this, m_fanartButton, "fanart_button", &err); 48 UIUtilE::Assign(this, m_fanartText, "fanart_text", &err); 49 UIUtilE::Assign(this, m_boxartButton, "boxart_button", &err); 50 UIUtilE::Assign(this, m_boxartText, "boxart_text", &err); 51 52 UIUtilE::Assign(this, m_doneButton, "done_button", &err); 53 54 if (err) 25 55 { 26 setLabel(QObject::tr("Genre"));27 setHelpText(QObject::tr("Genre/Category this game falls under."));56 VERBOSE(VB_IMPORTANT, "Cannot load screen 'edit_metadata'"); 57 return false; 28 58 } 29 };30 59 31 class Year : public LineEditSetting, public GenericDBStorage 60 fillWidgets(); 61 62 if (!BuildFocusList()) 63 VERBOSE(VB_IMPORTANT, "Failed to build a focuslist."); 64 65 connect(m_gamenameEdit, SIGNAL(valueChanged()), SLOT(SetGamename())); 66 connect(m_genreEdit, SIGNAL(valueChanged()), SLOT(SetGenre())); 67 connect(m_yearEdit, SIGNAL(valueChanged()), SLOT(SetYear())); 68 connect(m_countryEdit, SIGNAL(valueChanged()), SLOT(SetCountry())); 69 connect(m_publisherEdit, SIGNAL(valueChanged()), SLOT(SetPublisher())); 70 71 connect(m_favoriteCheck, SIGNAL(valueChanged()), SLOT(ToggleFavorite())); 72 73 connect(m_fanartButton, SIGNAL(Clicked()), SLOT(FindFanart())); 74 connect(m_boxartButton, SIGNAL(Clicked()), SLOT(FindBoxart())); 75 76 connect(m_doneButton, SIGNAL(Clicked()), SLOT(SaveAndExit())); 77 78 return true; 79 } 80 81 namespace 32 82 { 33 public: 34 Year(const QString &romname) : 35 LineEditSetting(this), GenericDBStorage( 36 this, "gamemetadata", "year", "romname", romname) 83 QStringList GetSupportedImageExtensionFilter() 37 84 { 38 setLabel(QObject::tr("Year")); 39 setHelpText(QObject::tr("The Year the game was released.")); 85 QStringList ret; 86 87 QList<QByteArray> exts = QImageReader::supportedImageFormats(); 88 for (QList<QByteArray>::iterator p = exts.begin(); p != exts.end(); ++p) 89 { 90 ret.append(QString("*.").append(*p)); 91 } 92 93 return ret; 40 94 } 41 };42 95 43 class Country : public LineEditSetting, public GenericDBStorage 44 { 45 public: 46 Country(const QString &romname) : 47 LineEditSetting(this), GenericDBStorage( 48 this, "gamemetadata", "country", "romname", romname) 96 void FindImagePopup(const QString &prefix, const QString &prefixAlt, 97 QObject &inst, const QString &returnEvent) 49 98 { 50 setLabel(QObject::tr("Country")); 51 setHelpText(QObject::tr("The Country this game was " 52 "originally distributed in.")); 99 QString fp = prefix.isEmpty() ? prefixAlt : prefix; 100 101 MythScreenStack *popupStack = 102 GetMythMainWindow()->GetStack("popup stack"); 103 104 MythUIFileBrowser *fb = new MythUIFileBrowser(popupStack, fp); 105 fb->SetNameFilter(GetSupportedImageExtensionFilter()); 106 if (fb->Create()) 107 { 108 fb->SetReturnEvent(&inst, returnEvent); 109 popupStack->AddScreen(fb); 110 } 111 else 112 delete fb; 53 113 } 54 };55 114 56 class Publisher : public LineEditSetting, public GenericDBStorage 115 const QString CEID_FANARTFILE = "fanartfile"; 116 const QString CEID_BOXARTFILE = "boxartfile"; 117 } 118 119 void EditRomInfoDialog::customEvent(QEvent *event) 57 120 { 58 public: 59 Publisher(const QString &romname) : 60 LineEditSetting(this), GenericDBStorage( 61 this, "gamemetadata", "publisher", "romname", romname) 121 if (event->type() == kMythDialogBoxCompletionEventType) 62 122 { 63 setLabel(QObject::tr("Publisher")); 64 setHelpText(QObject::tr("The Company that made and " 65 "published this game.")); 123 DialogCompletionEvent *dce = 124 dynamic_cast<DialogCompletionEvent*>(event); 125 126 if (!dce) 127 return; 128 129 const QString resultid = dce->GetId(); 130 131 if (resultid == CEID_FANARTFILE) 132 SetFanart(dce->GetResultText()); 133 else if (resultid == CEID_BOXARTFILE) 134 SetBoxart(dce->GetResultText()); 66 135 } 67 } ;136 } 68 137 138 void EditRomInfoDialog::fillWidgets() 139 { 140 m_gamenameEdit->SetText(m_workingRomInfo->Gamename()); 141 m_genreEdit->SetText(m_workingRomInfo->Genre()); 142 m_yearEdit->SetText(m_workingRomInfo->Year()); 143 m_countryEdit->SetText(m_workingRomInfo->Country()); 144 m_publisherEdit->SetText(m_workingRomInfo->Publisher()); 69 145 70 class Favourite : public CheckBoxSetting, public GenericDBStorage 146 if (m_workingRomInfo->Favorite()) 147 m_favoriteCheck->SetCheckState(MythUIStateType::Full); 148 149 m_fanartText->SetText(m_workingRomInfo->Fanart()); 150 m_boxartText->SetText(m_workingRomInfo->Boxart()); 151 } 152 153 void EditRomInfoDialog::SetReturnEvent(QObject *retobject, 154 const QString &resultid) 71 155 { 72 public: 73 Favourite(const QString &romname) : 74 CheckBoxSetting(this), GenericDBStorage( 75 this, "gamemetadata", "favorite", "romname", romname) 156 m_retObject = retobject; 157 m_id = resultid; 158 } 159 160 void EditRomInfoDialog::SaveAndExit() 161 { 162 if (m_retObject) 76 163 { 77 setLabel(QObject::tr("Favorite")); 78 setHelpText(QObject::tr("ROM status as a Favorite")); 164 RomInfo *romInfo = new RomInfo(*m_workingRomInfo); 165 DialogCompletionEvent *dce = 166 new DialogCompletionEvent(m_id, 0, "", 167 qVariantFromValue(romInfo)); 168 169 QApplication::postEvent(m_retObject, dce); 79 170 } 80 }; 171 Close(); 172 } 81 173 82 GameEditDialog::GameEditDialog(const QString &romname)174 void EditRomInfoDialog::SetGamename() 83 175 { 84 QString title = QObject::tr("Editing Metadata - ") + romname; 176 m_workingRomInfo->setGamename(m_gamenameEdit->GetText()); 177 } 85 178 86 VerticalConfigurationGroup *group = 87 new VerticalConfigurationGroup(false); 179 void EditRomInfoDialog::SetGenre() 180 { 181 m_workingRomInfo->setGenre(m_genreEdit->GetText()); 182 } 88 183 89 group->setLabel(title); 90 group->addChild(new Gamename(romname)); 91 group->addChild(new Genre(romname)); 92 group->addChild(new Year(romname)); 93 group->addChild(new Country(romname)); 94 group->addChild(new Publisher(romname)); 95 group->addChild(new Favourite(romname)); 96 addChild(group); 184 void EditRomInfoDialog::SetYear() 185 { 186 m_workingRomInfo->setYear(m_yearEdit->GetText()); 97 187 } 98 188 189 void EditRomInfoDialog::SetCountry() 190 { 191 m_workingRomInfo->setCountry(m_countryEdit->GetText()); 192 } 99 193 194 void EditRomInfoDialog::SetPublisher() 195 { 196 m_workingRomInfo->setPublisher(m_publisherEdit->GetText()); 197 } 198 199 void EditRomInfoDialog::ToggleFavorite() 200 { 201 m_workingRomInfo->setFavorite(); 202 } 203 204 void EditRomInfoDialog::FindFanart() 205 { 206 FindImagePopup(gContext->GetSetting("mythgame.fanartDir"), 207 GetConfDir() + "/MythGame/Fanart", 208 *this, CEID_FANARTFILE); 209 } 210 211 void EditRomInfoDialog::FindBoxart() 212 { 213 FindImagePopup(gContext->GetSetting("mythgame.boxartDir"), 214 GetConfDir() + "/MythGame/Boxart", 215 *this, CEID_BOXARTFILE); 216 } 217 218 void EditRomInfoDialog::SetFanart(QString file) 219 { 220 if (file.isEmpty()) 221 return; 222 223 m_workingRomInfo->setFanart(file); 224 m_fanartText->SetText(file); 225 } 226 227 void EditRomInfoDialog::SetBoxart(QString file) 228 { 229 if (file.isEmpty()) 230 return; 231 232 m_workingRomInfo->setBoxart(file); 233 m_boxartText->SetText(file); 234 } -
mythplugins/mythgame/mythgame/gamehandler.cpp
149 149 150 150 void GameHandler::GetMetadata(GameHandler *handler, QString rom, QString* Genre, QString* Year, 151 151 QString* Country, QString* CRC32, QString* GameName, 152 QString *Publisher, QString *Version) 152 QString *Publisher, QString *Version, QString* Fanart, 153 QString* Boxart) 153 154 { 154 155 QString key; 155 156 QString tmpcrc; … … 165 166 *Genre = QObject::tr("Unknown"); 166 167 *Publisher = QObject::tr("Unknown"); 167 168 *Version = QObject::tr("0"); 169 *Fanart = QObject::tr(""); 170 *Boxart = QObject::tr(""); 168 171 169 172 if (*CRC32 != "") 170 173 { … … 411 414 QString Year; 412 415 QString Publisher; 413 416 QString Version; 417 QString Fanart; 418 QString Boxart; 414 419 415 420 int removalprompt = gContext->GetSetting("GameRemovalPrompt").toInt(); 416 421 int indepth = gContext->GetSetting("GameDeepScan").toInt(); … … 423 428 if (indepth) 424 429 { 425 430 GetMetadata(handler, iter.data().RomFullPath(), &Genre, &Year, &Country, &CRC32, &GameName, 426 &Publisher, &Version );431 &Publisher, &Version, &Fanart, &Boxart); 427 432 } 428 433 else 429 434 { … … 434 439 GameName = QObject::tr("Unknown"); 435 440 Publisher = QObject::tr("Unknown"); 436 441 Version = QObject::tr("0"); 442 Fanart = QObject::tr(""); 443 Boxart = QObject::tr(""); 437 444 } 438 445 439 446 if (GameName == QObject::tr("Unknown")) … … 446 453 query.prepare("INSERT INTO gamemetadata " 447 454 "(system, romname, gamename, genre, year, gametype, " 448 455 "rompath, country, crc_value, diskcount, display, " 449 "publisher, version ) "456 "publisher, version, fanart, boxart) " 450 457 "VALUES (:SYSTEM, :ROMNAME, :GAMENAME, :GENRE, :YEAR, " 451 ":GAMETYPE, :ROMPATH, :COUNTRY, :CRC32, '1', '1', :PUBLISHER, :VERSION)"); 458 ":GAMETYPE, :ROMPATH, :COUNTRY, :CRC32, '1', '1', :PUBLISHER, :VERSION, " 459 ":FANART, BOXART)"); 452 460 453 461 454 462 … … 463 471 query.bindValue(":CRC32", CRC32); 464 472 query.bindValue(":PUBLISHER", Publisher); 465 473 query.bindValue(":VERSION", Version); 466 474 query.bindValue(":FANART", Fanart); 475 query.bindValue(":BOXART", Boxart); 476 467 477 query.exec(); 468 478 } 469 479 else if ((iter.data().FoundLoc() == inDatabase) && (removalprompt)) -
mythplugins/mythgame/mythgame/gameui.cpp
1 #include <mythcontext.h> 2 #include <mythuibuttontree.h> 3 #include <mythdialogbox.h> 4 #include <mythgenerictree.h> 5 6 // MythGame headers 7 #include "gameui.h" 8 #include "gamehandler.h" 9 #include "rominfo.h" 10 #include "gamedetails.h" 11 #include "romedit.h" 12 13 class GameTreeInfo 14 { 15 public: 16 GameTreeInfo(const QString& levels, const QString& filter) 17 : m_levels(QStringList::split(" ", levels)) 18 , m_filter(filter) 19 { 20 } 21 22 int getDepth() const { return m_levels.size(); } 23 const QString& getLevel(unsigned i) const { return m_levels[i]; } 24 const QString& getFilter() const { return m_filter; } 25 26 private: 27 QStringList m_levels; 28 QString m_filter; 29 }; 30 31 Q_DECLARE_METATYPE(GameTreeInfo *) 32 33 GameUI::GameUI(MythScreenStack *parent) 34 : MythScreenType(parent, "GameUI") 35 { 36 gContext->addCurrentLocation("mythgame"); 37 } 38 39 GameUI::~GameUI() 40 { 41 gContext->removeCurrentLocation(); 42 } 43 44 bool GameUI::Create() 45 { 46 if (!LoadWindowFromXML("game-ui.xml", "gameui", this)) 47 return false; 48 49 bool err = false; 50 UIUtilE::Assign(this, m_gameTreeUI, "gametreelist", &err); 51 UIUtilE::Assign(this, m_gameTitle, "gametitle", &err); 52 UIUtilE::Assign(this, m_gameSystem, "systemname", &err); 53 UIUtilE::Assign(this, m_gameYear, "yearname", &err); 54 UIUtilE::Assign(this, m_gameGenre, "genrename", &err); 55 UIUtilE::Assign(this, m_gameFavourite, "showfavorite", &err); 56 UIUtilE::Assign(this, m_gameImage, "gameimage", &err); 57 UIUtilE::Assign(this, m_fanartImage, "fanart", &err); 58 UIUtilE::Assign(this, m_boxImage, "boxart", &err); 59 60 if (err) 61 { 62 VERBOSE(VB_IMPORTANT, "Cannot load screen 'gameui'"); 63 return false; 64 } 65 66 connect(m_gameTreeUI, SIGNAL(itemClicked(MythUIButtonListItem*)), 67 this, SLOT(itemClicked(MythUIButtonListItem*))); 68 69 connect(m_gameTreeUI, SIGNAL(nodeChanged(MythGenericTree*)), 70 this, SLOT(nodeChanged(MythGenericTree*))); 71 72 m_gameShowFileName = gContext->GetSetting("GameShowFileNames").toInt(); 73 74 m_gameTree = new MythGenericTree("game root", 0, false); 75 76 timer = new QTimer(this); 77 connect(timer, SIGNAL(timeout()), SLOT(showImageTimeout())); 78 79 // create system filter to only select games where handlers are present 80 QString systemFilter; 81 82 // The call to GameHandler::count() fills the handler list for us 83 // to move through. 84 unsigned handlercount = GameHandler::count(); 85 86 for (unsigned i = 0; i < handlercount; ++i) 87 { 88 QString system = GameHandler::getHandler(i)->SystemName(); 89 if (i == 0) 90 systemFilter = "system in ('" + system + "'"; 91 else 92 systemFilter += ",'" + system + "'"; 93 } 94 if (systemFilter.isEmpty()) 95 { 96 systemFilter = "1=0"; 97 VERBOSE(VB_GENERAL, QString("Couldn't find any game handlers!")); 98 } 99 else 100 systemFilter += ")"; 101 102 m_showHashed = gContext->GetSetting("GameTreeView").toInt(); 103 104 // create a few top level nodes - this could be moved to a config based 105 // approach with multiple roots if/when someone has the time to create 106 // the relevant dialog screens 107 108 QString levels = gContext->GetSetting("GameFavTreeLevels"); 109 110 MythGenericTree *new_node = new MythGenericTree("Favourites", 1, true); 111 new_node->SetData(qVariantFromValue( 112 new GameTreeInfo(levels, systemFilter + " and favorite=1"))); 113 m_favouriteNode = m_gameTree->addNode(new_node); 114 115 levels = gContext->GetSetting("GameAllTreeLevels"); 116 117 if (m_showHashed) 118 { 119 int pos = levels.find("gamename",0); 120 if (pos >= 0) 121 levels.insert(pos, " hash "); 122 } 123 124 new_node = new MythGenericTree(tr("All Games"), 1, true); 125 new_node->SetData(qVariantFromValue( 126 new GameTreeInfo(levels, systemFilter))); 127 m_gameTree->addNode(new_node); 128 129 new_node = new MythGenericTree(tr("- By Genre"), 1, true); 130 new_node->SetData(qVariantFromValue( 131 new GameTreeInfo("genre gamename", systemFilter))); 132 m_gameTree->addNode(new_node); 133 134 new_node = new MythGenericTree(tr("- By Year"), 1, true); 135 new_node->SetData(qVariantFromValue( 136 new GameTreeInfo("year gamename", systemFilter))); 137 m_gameTree->addNode(new_node); 138 139 new_node = new MythGenericTree(tr("- By Name"), 1, true); 140 new_node->SetData(qVariantFromValue( 141 new GameTreeInfo("gamename", systemFilter))); 142 m_gameTree->addNode(new_node); 143 144 new_node = new MythGenericTree(tr("- By Publisher"), 1, true); 145 new_node->SetData(qVariantFromValue( 146 new GameTreeInfo("publisher gamename", systemFilter))); 147 m_gameTree->addNode(new_node); 148 149 m_gameTreeUI->AssignTree(m_gameTree); 150 151 BuildFocusList(); 152 153 return true; 154 } 155 156 bool GameUI::keyPressEvent(QKeyEvent *event) 157 { 158 if (GetFocusWidget()->keyPressEvent(event)) 159 return true; 160 161 bool handled = false; 162 QStringList actions; 163 gContext->GetMainWindow()->TranslateKeyPress("Game", event, actions); 164 165 for (int i = 0; i < actions.size() && !handled; i++) 166 { 167 QString action = actions[i]; 168 handled = true; 169 170 if (action == "MENU") 171 showMenu(); 172 else if (action == "INFO") 173 showInfo(); 174 else if (action == "TOGGLEFAV") 175 toggleFavorite(); 176 else if (action == "INCSEARCH") 177 searchStart(); 178 else if (action == "INCSEARCHNEXT") 179 searchStart(); 180 else 181 handled = false; 182 } 183 if (!handled && MythScreenType::keyPressEvent(event)) 184 handled = true; 185 186 return handled; 187 } 188 189 void GameUI::nodeChanged(MythGenericTree* node) 190 { 191 if (!isLeaf(node)) 192 { 193 if (node->childCount() == 0 || node == m_favouriteNode) 194 { 195 node->deleteAllChildren(); 196 fillNode(node); 197 } 198 if (timer->isActive()) 199 timer->stop(); 200 clearRomInfo(); 201 } 202 else 203 { 204 RomInfo *romInfo = qVariantValue<RomInfo *>(node->GetData()); 205 if (romInfo->Romname().isEmpty()) 206 romInfo->fillData(); 207 updateRomInfo(romInfo); 208 if (!romInfo->ImagePath().isEmpty() || !romInfo->Fanart().isEmpty() || 209 !romInfo->Boxart().isEmpty()) 210 { 211 if (timer->isActive()) 212 timer->changeInterval(330); 213 else 214 timer->start(330, true); 215 } 216 else 217 { 218 if (m_gameImage->IsVisible()) 219 m_gameImage->Hide(); 220 if (m_fanartImage->IsVisible()) 221 m_fanartImage->Hide(); 222 if (m_boxImage->IsVisible()) 223 m_boxImage->Hide(); 224 } 225 } 226 } 227 228 void GameUI::itemClicked(MythUIButtonListItem*) 229 { 230 MythGenericTree *node = m_gameTreeUI->GetCurrentNode(); 231 if (isLeaf(node)) 232 { 233 RomInfo *romInfo = qVariantValue<RomInfo *>(node->GetData()); 234 if (romInfo->RomCount() == 1) 235 { 236 GameHandler::Launchgame(romInfo, NULL); 237 } 238 else 239 { 240 QString msg = QObject::tr("Choose System for") + 241 ":\n" + node->getString(); 242 MythScreenStack *popupStack = GetMythMainWindow()-> 243 GetStack("popup stack"); 244 MythDialogBox *chooseSystemPopup = new MythDialogBox( 245 msg, popupStack, "chooseSystemPopup"); 246 247 if (chooseSystemPopup->Create()) 248 { 249 chooseSystemPopup->SetReturnEvent(this, "chooseSystemPopup"); 250 QString all_systems = romInfo->AllSystems(); 251 QStringList players = QStringList::split(",", all_systems); 252 for (QStringList::Iterator it = players.begin(); 253 it != players.end(); ++it) 254 { 255 chooseSystemPopup->AddButton(*it); 256 } 257 chooseSystemPopup->AddButton(tr("Cancel")); 258 popupStack->AddScreen(chooseSystemPopup); 259 } 260 else 261 delete chooseSystemPopup; 262 } 263 } 264 } 265 266 void GameUI::showImageTimeout(void) 267 { 268 m_gameImage->Load(); 269 if (!m_gameImage->IsVisible()) 270 m_gameImage->Show(); 271 m_fanartImage->Load(); 272 if (!m_fanartImage->IsVisible()) 273 m_fanartImage->Show(); 274 m_boxImage->Load(); 275 if (!m_boxImage->IsVisible()) 276 m_boxImage->Show(); 277 } 278 279 void GameUI::searchComplete(QString string) 280 { 281 MythGenericTree *parent = m_gameTreeUI->GetCurrentNode()->getParent(); 282 MythGenericTree *new_node = parent->getChildByName(string); 283 if (new_node) 284 { 285 m_gameTreeUI->SetCurrentNode(new_node); 286 // SetActive updates the buttonlist but SetCurrentNode doesn't. 287 m_gameTreeUI->SetActive(true); 288 } 289 } 290 291 void GameUI::updateRomInfo(RomInfo *rom) 292 { 293 m_gameTitle->SetText(rom->Gamename()); 294 m_gameSystem->SetText(rom->System()); 295 m_gameYear->SetText(rom->Year()); 296 m_gameGenre->SetText(rom->Genre()); 297 298 if (rom->Favorite()) 299 m_gameFavourite->SetText("Yes"); 300 else 301 m_gameFavourite->SetText("No"); 302 303 m_gameImage->SetFilename(rom->ImagePath()); 304 m_fanartImage->SetFilename(rom->Fanart()); 305 m_boxImage->SetFilename(rom->Boxart()); 306 } 307 308 void GameUI::clearRomInfo(void) { 309 m_gameTitle->SetText(""); 310 m_gameSystem->SetText(""); 311 m_gameYear->SetText(""); 312 m_gameGenre->SetText(""); 313 m_gameFavourite->SetText(""); 314 315 if (m_gameImage->IsVisible()) 316 m_gameImage->Hide(); 317 318 if (m_fanartImage->IsVisible()) 319 m_fanartImage->Hide(); 320 321 if (m_boxImage->IsVisible()) 322 m_boxImage->Hide(); 323 } 324 325 void GameUI::edit(void) 326 { 327 MythGenericTree *node = m_gameTreeUI->GetCurrentNode(); 328 if (isLeaf(node)) 329 { 330 RomInfo *romInfo = qVariantValue<RomInfo *>(node->GetData()); 331 332 MythScreenStack *screenStack = GetScreenStack(); 333 334 EditRomInfoDialog *md_editor = new EditRomInfoDialog(screenStack, 335 "mythgameeditmetadata", romInfo); 336 337 if (md_editor->Create()) 338 { 339 screenStack->AddScreen(md_editor); 340 md_editor->SetReturnEvent(this, "editMetadata"); 341 } 342 else 343 delete md_editor; 344 } 345 } 346 347 void GameUI::showInfo() 348 { 349 MythGenericTree *node = m_gameTreeUI->GetCurrentNode(); 350 if (isLeaf(node)) 351 { 352 RomInfo *romInfo = qVariantValue<RomInfo *>(node->GetData()); 353 MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack(); 354 GameDetailsPopup *details_dialog = 355 new GameDetailsPopup(mainStack, romInfo); 356 357 if (details_dialog->Create()) 358 { 359 mainStack->AddScreen(details_dialog); 360 details_dialog->SetReturnEvent(this, "detailsPopup"); 361 } 362 else 363 delete details_dialog; 364 } 365 } 366 367 void GameUI::showMenu() 368 { 369 MythGenericTree *node = m_gameTreeUI->GetCurrentNode(); 370 if (isLeaf(node)) 371 { 372 RomInfo *romInfo = qVariantValue<RomInfo *>(node->GetData()); 373 MythScreenStack *popupStack = GetMythMainWindow()-> 374 GetStack("popup stack"); 375 MythDialogBox *showMenuPopup = 376 new MythDialogBox(node->getString(), popupStack, "showMenuPopup"); 377 378 if (showMenuPopup->Create()) 379 { 380 showMenuPopup->SetReturnEvent(this, "showMenuPopup"); 381 showMenuPopup->AddButton(tr("Show Information")); 382 if (romInfo->Favorite()) 383 showMenuPopup->AddButton(tr("Remove Favorite")); 384 else 385 showMenuPopup->AddButton(tr("Make Favorite")); 386 showMenuPopup->AddButton(tr("Edit")); 387 popupStack->AddScreen(showMenuPopup); 388 } 389 else 390 delete showMenuPopup; 391 } 392 } 393 394 void GameUI::searchStart(void) 395 { 396 MythGenericTree *parent = m_gameTreeUI->GetCurrentNode()->getParent(); 397 398 if (parent != NULL) 399 { 400 QStringList childList; 401 QList<MythGenericTree*>::iterator it; 402 QList<MythGenericTree*> *children = parent->getAllChildren(); 403 404 for (it = children->begin(); it != children->end(); ++it) 405 { 406 MythGenericTree *child = *it; 407 childList << child->getString(); 408 } 409 410 MythScreenStack *popupStack = 411 GetMythMainWindow()->GetStack("popup stack"); 412 MythUISearchDialog *searchDialog = new MythUISearchDialog(popupStack, 413 tr("Game Search"), childList, true, ""); 414 415 if (searchDialog->Create()) 416 { 417 connect(searchDialog, SIGNAL(haveResult(QString)), 418 SLOT(searchComplete(QString))); 419 420 popupStack->AddScreen(searchDialog); 421 } 422 else 423 delete searchDialog; 424 } 425 } 426 427 void GameUI::toggleFavorite(void) 428 { 429 MythGenericTree *node = m_gameTreeUI->GetCurrentNode(); 430 if (isLeaf(node)) 431 { 432 RomInfo *romInfo = qVariantValue<RomInfo *>(node->GetData()); 433 romInfo->setFavorite(true); 434 updateChangedNode(node, romInfo); 435 } 436 } 437 438 void GameUI::customEvent(QEvent *event) 439 { 440 if (event->type() == kMythDialogBoxCompletionEventType) 441 { 442 DialogCompletionEvent *dce = 443 dynamic_cast<DialogCompletionEvent*>(event); 444 445 QString resultid = dce->GetId(); 446 QString resulttext = dce->GetResultText(); 447 448 if (resultid == "showMenuPopup") 449 { 450 if (resulttext == tr("Edit")) { 451 edit(); 452 } 453 else if (resulttext == tr("Show Information")) 454 { 455 showInfo(); 456 } 457 else if (resulttext == tr("Make Favorite") || 458 resulttext == tr("Remove Favorite")) 459 { 460 toggleFavorite(); 461 } 462 } 463 else if (resultid == "chooseSystemPopup") 464 { 465 if (resulttext != "" && resulttext != tr("Cancel")) { 466 MythGenericTree *node = m_gameTreeUI->GetCurrentNode(); 467 RomInfo *romInfo = qVariantValue<RomInfo *>(node->GetData()); 468 GameHandler::Launchgame(romInfo, resulttext); 469 } 470 } 471 else if (resultid == "editMetadata") 472 { 473 MythGenericTree *node = m_gameTreeUI->GetCurrentNode(); 474 RomInfo *oldRomInfo = qVariantValue<RomInfo *>(node->GetData()); 475 delete oldRomInfo; 476 477 RomInfo *romInfo = qVariantValue<RomInfo *>(dce->GetData()); 478 node->SetData(qVariantFromValue(romInfo)); 479 node->setString(romInfo->Gamename()); 480 481 romInfo->UpdateDatabase(); 482 updateChangedNode(node, romInfo); 483 } 484 else if (resultid == "detailsPopup") 485 { 486 // Play button pushed 487 itemClicked(0); 488 } 489 } 490 } 491 492 QString GameUI::getFillSql(MythGenericTree *node) const 493 { 494 QString layer = node->getString(); 495 int childDepth = node->getInt() + 1; 496 QString childLevel = getChildLevelString(node); 497 QString filter = getFilter(node); 498 bool childIsLeaf = childDepth == getLevelsOnThisBranch(node) + 1; 499 RomInfo *romInfo = qVariantValue<RomInfo *>(node->GetData()); 500 501 QString columns; 502 QString conj = "where "; 503 504 if (!filter.isEmpty()) 505 { 506 filter = conj + filter; 507 conj = " and "; 508 } 509 if ((childLevel == "gamename") && (m_gameShowFileName)) 510 { 511 columns = childIsLeaf 512 ? "romname,system,year,genre,gamename" 513 : "romname"; 514 515 if (m_showHashed) 516 filter += " and romname like '" + layer + "%'"; 517 518 } 519 else if ((childLevel == "gamename") && (layer.length() == 1)) { 520 columns = childIsLeaf 521 ? childLevel + ",system,year,genre,gamename" 522 : childLevel; 523 524 if (m_showHashed) 525 filter += " and gamename like '" + layer + "%'"; 526 527 } 528 else if (childLevel == "hash") { 529 columns = "left(gamename,1)"; 530 } 531 else { 532 533 columns = childIsLeaf 534 ? childLevel + ",system,year,genre,gamename" 535 : childLevel; 536 } 537 538 // this whole section ought to be in rominfo.cpp really, but I've put it 539 // in here for now to minimise the number of files changed by this mod 540 if (romInfo) { 541 if (!romInfo->System().isEmpty()) 542 { 543 filter += conj + "trim(system)=:SYSTEM"; 544 conj = " and "; 545 } 546 if (!romInfo->Year().isEmpty()) 547 { 548 filter += conj + "year=:YEAR"; 549 conj = " and "; 550 } 551 if (!romInfo->Genre().isEmpty()) 552 { 553 filter += conj + "trim(genre)=:GENRE"; 554 conj = " and "; 555 } 556 if (!romInfo->Publisher().isEmpty()) 557 { 558 filter += conj + "publisher=:PUBLISHER"; 559 conj = " and "; 560 } 561 562 if (!romInfo->Gamename().isEmpty()) 563 { 564 filter += conj + "trim(gamename)=:GAMENAME"; 565 } 566 567 } 568 569 filter += conj + " display = 1 "; 570 571 QString sql; 572 573 if ((childLevel == "gamename") && (m_gameShowFileName)) 574 { 575 sql = "select distinct " 576 + columns 577 + " from gamemetadata " 578 + filter 579 + " order by romname" 580 + ";"; 581 } 582 else if (childLevel == "hash") { 583 sql = "select distinct " 584 + columns 585 + " from gamemetadata " 586 + filter 587 + " order by gamename,romname" 588 + ";"; 589 } 590 else 591 { 592 sql = "select distinct " 593 + columns 594 + " from gamemetadata " 595 + filter 596 + " order by " 597 + childLevel 598 + ";"; 599 } 600 601 return sql; 602 } 603 604 QString GameUI::getChildLevelString(MythGenericTree *node) const 605 { 606 unsigned this_level = node->getInt(); 607 while (node->getInt() != 1) 608 node = node->getParent(); 609 610 GameTreeInfo *gi = qVariantValue<GameTreeInfo *>(node->GetData()); 611 return gi->getLevel(this_level - 1); 612 } 613 614 QString GameUI::getFilter(MythGenericTree *node) const 615 { 616 while (node->getInt() != 1) 617 node = node->getParent(); 618 GameTreeInfo *gi = qVariantValue<GameTreeInfo *>(node->GetData()); 619 return gi->getFilter(); 620 } 621 622 int GameUI::getLevelsOnThisBranch(MythGenericTree *node) const 623 { 624 while (node->getInt() != 1) 625 node = node->getParent(); 626 627 GameTreeInfo *gi = qVariantValue<GameTreeInfo *>(node->GetData()); 628 return gi->getDepth(); 629 } 630 631 bool GameUI::isLeaf(MythGenericTree *node) const 632 { 633 return (node->getInt() - 1) == getLevelsOnThisBranch(node); 634 } 635 636 void GameUI::fillNode(MythGenericTree *node) 637 { 638 QString layername = node->getString(); 639 RomInfo *romInfo = qVariantValue<RomInfo *>(node->GetData()); 640 641 MSqlQuery query(MSqlQuery::InitCon()); 642 643 query.prepare(getFillSql(node)); 644 645 if (romInfo) 646 { 647 if (!romInfo->System().isEmpty()) 648 query.bindValue(":SYSTEM", romInfo->System()); 649 if (!romInfo->Year().isEmpty()) 650 query.bindValue(":YEAR", romInfo->Year()); 651 if (!romInfo->Genre().isEmpty()) 652 query.bindValue(":GENRE", romInfo->Genre()); 653 if (!romInfo->Publisher().isEmpty()) 654 query.bindValue(":PUBLISHER", romInfo->Publisher()); 655 if (!romInfo->Gamename().isEmpty()) 656 query.bindValue(":GAMENAME", romInfo->Gamename()); 657 } 658 659 bool IsLeaf = node->getInt() == getLevelsOnThisBranch(node); 660 if (query.exec() && query.size() > 0) 661 { 662 while (query.next()) 663 { 664 QString current = query.value(0).toString().stripWhiteSpace(); 665 MythGenericTree *new_node = 666 new MythGenericTree(current, node->getInt() + 1, false); 667 if (IsLeaf) 668 { 669 RomInfo *temp = new RomInfo(); 670 temp->setSystem(query.value(1).toString().stripWhiteSpace()); 671 temp->setYear(query.value(2).toString()); 672 temp->setGenre(query.value(3).toString().stripWhiteSpace()); 673 temp->setGamename(query.value(4).toString().stripWhiteSpace()); 674 new_node->SetData(qVariantFromValue(temp)); 675 node->addNode(new_node); 676 } 677 else 678 { 679 RomInfo *newRomInfo; 680 if (node->getInt() > 1) 681 { 682 RomInfo *currentRomInfo; 683 currentRomInfo = qVariantValue<RomInfo *>(node->GetData()); 684 newRomInfo = new RomInfo(*currentRomInfo); 685 } 686 else 687 { 688 newRomInfo = new RomInfo(); 689 } 690 new_node->SetData(qVariantFromValue(newRomInfo)); 691 node->addNode(new_node); 692 if (getChildLevelString(node) != "hash") 693 newRomInfo->setField(getChildLevelString(node), current); 694 } 695 } 696 } 697 } 698 699 void GameUI::resetOtherTrees(MythGenericTree *node) 700 { 701 MythGenericTree *top_level = node; 702 while (top_level->getParent() != m_gameTree) 703 { 704 top_level = top_level->getParent(); 705 } 706 707 QList<MythGenericTree*>::iterator it; 708 QList<MythGenericTree*> *children = m_gameTree->getAllChildren(); 709 710 for (it = children->begin(); it != children->end(); ++it) 711 { 712 MythGenericTree *child = *it; 713 if (child != top_level) 714 { 715 child->deleteAllChildren(); 716 } 717 } 718 } 719 720 void GameUI::updateChangedNode(MythGenericTree *node, RomInfo *romInfo) 721 { 722 resetOtherTrees(node); 723 724 if (node->getParent() == m_favouriteNode && romInfo->Favorite() == 0) { 725 // node is being removed 726 m_gameTreeUI->SetCurrentNode(m_favouriteNode); 727 } 728 else 729 { 730 nodeChanged(node); 731 } 732 // SetActive to update the buttonlist text 733 m_gameTreeUI->SetActive(true); 734 } -
mythplugins/mythgame/mythgame/romedit.h
1 1 #ifndef ROMEDITDLG_H_ 2 2 #define ROMEDITDLG_H_ 3 3 4 #include < qstring.h>4 #include <mythtv/libmythui/mythscreentype.h> 5 5 6 #include <mythtv/mythcontext.h> 7 #include <mythtv/settings.h> 6 class RomInfo; 8 7 9 class GameEditDialog : public ConfigurationWizard8 class EditRomInfoDialog : public MythScreenType 10 9 { 10 Q_OBJECT 11 11 12 public: 12 GameEditDialog(const QString &romname); 13 EditRomInfoDialog(MythScreenStack *parent, 14 QString name, 15 RomInfo *romInfo); 16 17 ~EditRomInfoDialog(); 18 19 bool Create(); 20 void customEvent(QEvent *levent); 21 void SetReturnEvent(QObject *retobject, const QString &resultid); 22 23 public slots: 24 void SetGamename(); 25 void SetGenre(); 26 void SetYear(); 27 void SetCountry(); 28 void SetPublisher(); 29 void ToggleFavorite(); 30 void FindFanart(); 31 void FindBoxart(); 32 void SaveAndExit(); 33 34 private: 35 void fillWidgets(); 36 void SetFanart(QString file); 37 void SetBoxart(QString file); 38 39 private: 40 RomInfo *m_workingRomInfo; 41 QString m_id; 42 QObject *m_retObject; 43 44 MythUITextEdit *m_gamenameEdit; 45 MythUITextEdit *m_genreEdit; 46 MythUITextEdit *m_yearEdit; 47 MythUITextEdit *m_countryEdit; 48 MythUITextEdit *m_publisherEdit; 49 MythUICheckBox *m_favoriteCheck; 50 MythUIButton *m_fanartButton; 51 MythUIText *m_fanartText; 52 MythUIButton *m_boxartButton; 53 MythUIText *m_boxartText; 54 MythUIButton *m_doneButton; 13 55 }; 14 56 15 57 #endif // ROMEDITDLG_H_ -
mythplugins/mythgame/mythgame/rominfo.cpp
1 1 #include <qfile.h> 2 2 3 3 #include <mythtv/mythdb.h> 4 #include <mythtv/mythcontext.h> 4 5 5 6 #include "rominfo.h" 6 7 #include "romedit.h" … … 15 16 return false; 16 17 } 17 18 18 19 void RomInfo::edit_rominfo() 19 void RomInfo::UpdateDatabase() 20 20 { 21 QString rom_ver = Version(); 21 MSqlQuery query(MSqlQuery::InitCon()); 22 query.prepare("SELECT gamename,genre,year,country,publisher,favorite," 23 "fanart,boxart " 24 "FROM gamemetadata " 25 "WHERE gametype = :GAMETYPE " 26 "AND romname = :ROMNAME"); 22 27 23 GameEditDialog romeditdlg(Romname()); 28 query.bindValue(":GAMETYPE", GameType()); 29 query.bindValue(":ROMNAME", Romname()); 24 30 25 DialogCode res = romeditdlg.exec(); 31 if (!query.exec()) 32 { 33 MythDB::DBError("RomInfo::UpdateDatabase", query); 34 return; 35 } 26 36 27 if ( kDialogCodeRejected == res)37 if (!query.next()) 28 38 return; 29 39 30 if (res) 40 QString t_gamename = query.value(0).toString(); 41 QString t_genre = query.value(1).toString(); 42 QString t_year = query.value(2).toString(); 43 QString t_country = query.value(3).toString(); 44 QString t_publisher = query.value(4).toString(); 45 bool t_favourite = query.value(5).toBool(); 46 QString t_fanart = query.value(6).toString(); 47 QString t_boxart = query.value(7).toString(); 48 49 if ((t_gamename != Gamename()) || (t_genre != Genre()) || 50 (t_year != Year()) || (t_country != Country()) || 51 (t_publisher != Publisher()) || (t_favourite != Favorite()) || 52 (t_fanart != Fanart()) || (t_boxart != Boxart())) 31 53 { 32 MSqlQuery query(MSqlQuery::InitCon()); 33 query.prepare("SELECT gamename,genre,year,country,publisher,favorite " 34 "FROM gamemetadata " 35 "WHERE gametype = :GAMETYPE " 36 "AND romname = :ROMNAME"); 37 54 query.prepare("UPDATE gamemetadata " 55 "SET version = 'CUSTOM', " 56 " gamename = :GAMENAME," 57 " genre = :GENRE," 58 " year = :YEAR," 59 " country = :COUNTRY," 60 " publisher = :PUBLISHER," 61 " favorite = :FAVORITE," 62 " fanart = :FANART," 63 " boxart = :BOXART " 64 "WHERE gametype = :GAMETYPE AND " 65 " romname = :ROMNAME"); 66 query.bindValue(":GAMENAME", Gamename()); 67 query.bindValue(":GENRE", Genre()); 68 query.bindValue(":YEAR", Year()); 69 query.bindValue(":COUNTRY", Country()); 70 query.bindValue(":PUBLISHER", Publisher()); 71 query.bindValue(":FAVORITE", Favorite()); 72 query.bindValue(":FANART", Fanart()); 73 query.bindValue(":BOXART", Boxart()); 38 74 query.bindValue(":GAMETYPE", GameType()); 39 75 query.bindValue(":ROMNAME", Romname()); 40 76 41 77 if (!query.exec()) 42 78 { 43 MythDB::DBError("RomInfo:: edit_rominfo", query);79 MythDB::DBError("RomInfo::UpdateDatabase", query); 44 80 return; 45 81 } 46 47 if (!query.next()) 48 return; 49 50 QString t_gamename = query.value(0).toString(); 51 QString t_genre = query.value(1).toString(); 52 QString t_year = query.value(2).toString(); 53 QString t_country = query.value(3).toString(); 54 QString t_publisher = query.value(4).toString(); 55 bool t_favourite = query.value(5).toBool(); 56 57 if ((t_gamename != Gamename()) || (t_genre != Genre()) || 58 (t_year != Year()) || (t_country != Country()) || 59 (t_publisher != Publisher()) || (t_favourite != Favorite())) 60 { 61 query.prepare("UPDATE gamemetadata " 62 "SET version = 'CUSTOM' " 63 "WHERE gametype = :GAMETYPE AND " 64 " romname = :ROMNAME"); 65 query.bindValue(":GAMETYPE", GameType()); 66 query.bindValue(":ROMNAME", Romname()); 67 68 if (!query.exec()) 69 { 70 MythDB::DBError("RomInfo::edit_rominfo", query); 71 return; 72 } 73 } 74 } 82 } 75 83 } 76 84 77 85 // Return the count of how many times this appears in the db already … … 147 155 favorite = data.toInt(); 148 156 else if (field == "rompath") 149 157 rompath = data; 158 else if (field == "fanart") 159 fanart = data; 160 else if (field == "boxart") 161 boxart = data; 150 162 else if (field == "country") 151 163 country = data; 152 164 else if (field == "publisher") … … 164 176 165 177 } 166 178 167 void RomInfo::setFavorite( )179 void RomInfo::setFavorite(bool updateDatabase) 168 180 { 169 181 favorite = 1 - favorite; 170 182 171 MSqlQuery query(MSqlQuery::InitCon()); 183 if (updateDatabase) 184 { 185 MSqlQuery query(MSqlQuery::InitCon()); 172 186 173 query.prepare("UPDATE gamemetadata SET favorite = :FAV "174 "WHERE romname = :ROMNAME");187 query.prepare("UPDATE gamemetadata SET favorite = :FAV " 188 "WHERE romname = :ROMNAME"); 175 189 176 query.bindValue(":FAV", favorite);177 query.bindValue(":ROMNAME",romname);190 query.bindValue(":FAV", favorite); 191 query.bindValue(":ROMNAME",romname); 178 192 179 if (!query.exec()) 180 { 181 MythDB::DBError("RomInfo::setFavorite", query); 193 if (!query.exec()) 194 { 195 MythDB::DBError("RomInfo::setFavorite", query); 196 } 182 197 } 183 198 } 184 199 … … 211 226 212 227 QString thequery = "SELECT system,gamename,genre,year,romname,favorite," 213 228 "rompath,country,crc_value,diskcount,gametype,publisher," 214 "version FROM gamemetadata WHERE gamename = :GAMENAME "229 "version,fanart,boxart FROM gamemetadata WHERE gamename = :GAMENAME " 215 230 + systemtype + " ORDER BY diskcount DESC"; 216 231 217 232 query.prepare(thequery); … … 234 249 setGameType(query.value(10).toString()); 235 250 setPublisher(query.value(11).toString()); 236 251 setVersion(query.value(12).toString()); 252 setFanart(query.value(13).toString()); 253 setBoxart(query.value(14).toString()); 237 254 } 238 255 239 256 query.prepare("SELECT screenshots FROM gameplayers " -
mythplugins/mythgame/mythgame/gameui.h
1 #ifndef GAMEUI_H_ 2 #define GAMEUI_H_ 3 4 #include <qtimer.h> 5 6 // myth 7 #include <mythscreentype.h> 8 9 class MythUIButtonTree; 10 class MythGenericTree; 11 class RomInfo; 12 13 class GameUI : public MythScreenType 14 { 15 Q_OBJECT 16 17 public: 18 GameUI(MythScreenStack *parentStack); 19 ~GameUI(); 20 21 bool Create(); 22 bool keyPressEvent(QKeyEvent *event); 23 24 public slots: 25 void nodeChanged(MythGenericTree* node); 26 void itemClicked(MythUIButtonListItem* item); 27 void showImageTimeout(void); 28 void searchComplete(QString); 29 30 private: 31 void updateRomInfo(RomInfo *rom); 32 void clearRomInfo(void); 33 void edit(void); 34 void showInfo(void); 35 void showMenu(void); 36 void searchStart(void); 37 void toggleFavorite(void); 38 void customEvent(QEvent *event); 39 40 QString getFillSql(MythGenericTree* node) const; 41 QString getChildLevelString(MythGenericTree *node) const; 42 QString getFilter(MythGenericTree *node) const; 43 int getLevelsOnThisBranch(MythGenericTree *node) const; 44 bool isLeaf(MythGenericTree *node) const; 45 void fillNode(MythGenericTree *node); 46 void resetOtherTrees(MythGenericTree *node); 47 void updateChangedNode(MythGenericTree *node, RomInfo *romInfo); 48 49 private: 50 bool m_showHashed; 51 int m_gameShowFileName; 52 QTimer *timer; 53 54 MythGenericTree *m_gameTree; 55 MythGenericTree *m_favouriteNode; 56 57 MythUIButtonTree *m_gameTreeUI; 58 MythUIText *m_gameTitle; 59 MythUIText *m_gameSystem; 60 MythUIText *m_gameYear; 61 MythUIText *m_gameGenre; 62 MythUIText *m_gameFavourite; 63 MythUIImage *m_gameImage; 64 MythUIImage *m_fanartImage; 65 MythUIImage *m_boxImage; 66 }; 67 68 #endif -
mythplugins/mythgame/mythgame/gamehandler.h
67 67 void GetMetadata(GameHandler *handler, QString rom, 68 68 QString* Genre, QString* Year, QString* Country, 69 69 QString* CRC32, QString* GameName, 70 QString* Publisher, QString* Version); 70 QString* Publisher, QString* Version, 71 QString* Fanart, QString* Boxart); 71 72 72 73 void promptForRemoval(QString filename, QString RomPath ); 73 74 void UpdateGameDB(GameHandler *handler); -
mythplugins/mythgame/mythgame/rominfo.h
12 12 QString lgenre = "", QString lyear = "", bool lfavorite = FALSE, 13 13 QString lrompath = "", QString lcountry ="", QString lcrc_value = "", 14 14 int ldiskcount = 0, QString lgametype = "", int lromcount = 0, 15 QString lallsystems = "", QString lpublisher = "", QString lversion = "") 15 QString lallsystems = "", QString lpublisher = "", QString lversion = "", 16 QString lfanart = "", QString lboxart = "") 16 17 { 17 18 romname = lromname; 18 19 system = lsystem; … … 21 22 year = lyear; 22 23 favorite = lfavorite; 23 24 rompath = lrompath; 25 fanart = lfanart; 26 boxart = lboxart; 24 27 country = lcountry; 25 28 crc_value = lcrc_value; 26 29 diskcount = ldiskcount; … … 37 40 system = lhs.system; 38 41 gamename = lhs.gamename; 39 42 genre = lhs.genre; 43 imagepath = lhs.imagepath; 40 44 year = lhs.year; 41 45 favorite = lhs.favorite; 42 46 rompath = lhs.rompath; 47 fanart = lhs.fanart; 48 boxart = lhs.boxart; 43 49 country = lhs.country; 44 50 crc_value = lhs.crc_value; 45 51 diskcount = lhs.diskcount; … … 50 56 version = lhs.version; 51 57 } 52 58 53 virtual~RomInfo() {}59 ~RomInfo() {} 54 60 55 61 bool FindImage(QString BaseFileName, QString *result); 56 62 57 63 QString Rompath() const { return rompath; } 58 64 void setRompath(const QString &lrompath) { rompath = lrompath; } 59 65 66 QString Fanart() const { return fanart; } 67 void setFanart(const QString &lfanart) { fanart = lfanart; } 68 69 QString Boxart() const { return boxart; } 70 void setBoxart(const QString &lboxart) { boxart = lboxart; } 71 60 72 QString Romname() const { return romname; } 61 73 void setRomname(const QString &lromname) { romname = lromname; } 62 74 63 QString System() { return system; }75 QString System() const { return system; } 64 76 void setSystem(const QString &lsystem) { system = lsystem; } 65 77 66 QString Gamename() { return gamename; }78 QString Gamename() const { return gamename; } 67 79 void setGamename(const QString &lgamename) { gamename = lgamename; } 68 80 69 QString Genre() { return genre; }81 QString Genre() const { return genre; } 70 82 void setGenre(const QString &lgenre) { genre = lgenre; } 71 83 72 QString Country() { return country; }84 QString Country() const { return country; } 73 85 void setCountry(const QString &lcountry) { country = lcountry; } 74 86 75 QString GameType() { return gametype; }87 QString GameType() const { return gametype; } 76 88 void setGameType(const QString &lgametype) { gametype = lgametype; } 77 89 78 int RomCount() { return romcount; }90 int RomCount() const { return romcount; } 79 91 void setRomCount(const int &lromcount) { romcount = lromcount; } 80 92 81 QString AllSystems() { return allsystems; }93 QString AllSystems() const { return allsystems; } 82 94 void setAllSystems(const QString &lallsystems) { allsystems = lallsystems; } 83 95 84 int DiskCount() { return diskcount; }96 int DiskCount() const { return diskcount; } 85 97 void setDiskCount(const int &ldiskcount) { diskcount = ldiskcount; } 86 98 87 QString CRC_VALUE() { return crc_value; }99 QString CRC_VALUE() const { return crc_value; } 88 100 void setCRC_VALUE(const QString &lcrc_value) { crc_value = lcrc_value; } 89 101 90 QString ImagePath() { return imagepath; }102 QString ImagePath() const { return imagepath; } 91 103 void setImagePath(const QString &limagepath) { imagepath = limagepath; } 92 104 93 QString Publisher() { return publisher; }105 QString Publisher() const { return publisher; } 94 106 void setPublisher(const QString &lpublisher) { publisher = lpublisher; } 95 107 96 QString Version() { return version; }108 QString Version() const { return version; } 97 109 void setVersion(const QString &lversion) { version = lversion; } 98 110 99 100 QString Year() { return year; } 111 QString Year() const { return year; } 101 112 void setYear(const QString &lyear) { year = lyear; } 102 113 103 int Favorite() { return favorite; }104 virtual void setFavorite();114 int Favorite() const { return favorite; } 115 void setFavorite(bool updateDatabase = false); 105 116 106 117 QString getExtension(); 107 118 108 v irtual void setField(QString field, QString data);109 v irtual void fillData();110 v irtual void edit_rominfo();119 void setField(QString field, QString data); 120 void fillData(); 121 void UpdateDatabase(); 111 122 112 123 protected: 113 124 QString romname; … … 126 137 QString year; 127 138 bool favorite; 128 139 QString rompath; 140 QString fanart; 141 QString boxart; 129 142 }; 130 143 131 144 bool operator==(const RomInfo& a, const RomInfo& b); 132 145 146 Q_DECLARE_METATYPE(RomInfo *) 147 133 148 #endif -
mythplugins/mythgame/mythgame/gamedetails.cpp
1 #include <QFile> 2 #include <QApplication> 3 4 #include "mythcontext.h" 5 #include "mythuihelper.h" 6 #include "mythuitext.h" 7 #include "mythuiimage.h" 8 #include "mythuibutton.h" 9 #include "mythdialogbox.h" 10 11 #include "gamedetails.h" 12 13 GameDetailsPopup::GameDetailsPopup(MythScreenStack *parent, 14 const RomInfo *romInfo) 15 : MythScreenType (parent, "gamedetailspopup") 16 { 17 m_romInfo = romInfo; 18 } 19 20 GameDetailsPopup::~GameDetailsPopup(void) 21 { 22 } 23 24 void GameDetailsPopup::handleText(const QString &name, const QString &value) 25 { 26 MythUIText *textarea; 27 UIUtilE::Assign(this, textarea, name); 28 if (textarea) 29 { 30 textarea->SetText(value); 31 } 32 } 33 34 void GameDetailsPopup::handleImage(const QString &name, const QString &filename) 35 { 36 MythUIImage *image; 37 UIUtilW::Assign(this, image, name); 38 if (image) 39 { 40 if (filename.size()) 41 { 42 image->SetFilename(filename); 43 image->Load(); 44 } 45 else 46 image->Reset(); 47 } 48 } 49 50 bool GameDetailsPopup::Create(void) 51 { 52 if (!LoadWindowFromXML("game-ui.xml", "gamedetailspopup", this)) 53 return false; 54 55 UIUtilW::Assign(this, m_playButton, "play_button"); 56 UIUtilW::Assign(this, m_doneButton, "done_button"); 57 58 if (m_playButton) 59 connect(m_playButton, SIGNAL(Clicked()), SLOT(Play())); 60 61 if (m_doneButton) 62 connect(m_doneButton, SIGNAL(Clicked()), SLOT(Close())); 63 64 BuildFocusList(); 65 66 if (m_playButton || m_doneButton) 67 SetFocusWidget(m_playButton ? m_playButton : m_doneButton); 68 69 handleText("gamename", m_romInfo->Gamename()); 70 handleText("gametype", m_romInfo->GameType()); 71 handleText("romname", m_romInfo->Romname()); 72 handleText("crc", m_romInfo->CRC_VALUE()); 73 handleText("rompath", m_romInfo->Rompath()); 74 handleText("genre", m_romInfo->Genre()); 75 handleText("year", m_romInfo->Year()); 76 handleText("country", m_romInfo->Country()); 77 handleText("publisher", m_romInfo->Publisher()); 78 handleText("allsystems", m_romInfo->AllSystems()); 79 handleImage("fanart", m_romInfo->Fanart()); 80 handleImage("boxart", m_romInfo->Boxart()); 81 82 return true; 83 } 84 85 void GameDetailsPopup::Play() 86 { 87 if (m_retObject) 88 { 89 DialogCompletionEvent *dce = 90 new DialogCompletionEvent(m_id, 0, "", ""); 91 QApplication::postEvent(m_retObject, dce); 92 Close(); 93 } 94 } 95 96 void GameDetailsPopup::SetReturnEvent(QObject *retobject, 97 const QString &resultid) 98 { 99 m_retObject = retobject; 100 m_id = resultid; 101 } -
mythplugins/mythgame/mythgame/dbcheck.cpp
12 12 13 13 #include "gamesettings.h" 14 14 15 const QString currentDatabaseVersion = "101 4";15 const QString currentDatabaseVersion = "1015"; 16 16 17 17 static bool UpdateDBVersionNumber(const QString &newnumber) 18 18 { … … 384 384 return false; 385 385 } 386 386 387 if (dbver == "1014") 388 { 389 const QString updates[] = { 387 390 391 "ALTER TABLE gamemetadata ADD fanart VARCHAR(255) NOT NULL AFTER rompath," 392 "ADD boxart VARCHAR( 255 ) NOT NULL AFTER fanart;", 393 "" 394 }; 395 396 if (!performActualUpdate(updates, "1015", dbver)) 397 return false; 398 } 399 388 400 return true; 389 401 } -
mythplugins/mythgame/mythgame/main.cpp
6 6 #include <QDir> 7 7 #include <QApplication> 8 8 9 #include "gameui.h" 9 10 #include "gamehandler.h" 10 11 #include "rominfo.h" 11 12 #include "gamesettings.h" 12 #include "gametree.h"13 13 #include "dbcheck.h" 14 14 15 15 #include <mythtv/mythcontext.h> … … 60 60 { 61 61 QString themedir = GetMythUI()->GetThemeDir(); 62 62 63 MythThemedMenu * diag= new MythThemedMenu(63 MythThemedMenu *menu = new MythThemedMenu( 64 64 themedir, which_menu, GetMythMainWindow()->GetMainStack(), "game menu"); 65 65 66 66 GameData data; 67 67 68 diag->setCallback(GameCallback, &data);69 diag->setKillable();68 menu->setCallback(GameCallback, &data); 69 menu->setKillable(); 70 70 71 if ( diag->foundTheme())71 if (menu->foundTheme()) 72 72 { 73 if (class LCD * lcd = LCD::Get()) 74 { 73 if (LCD * lcd = LCD::Get()) 75 74 lcd->switchToTime(); 76 } 77 GetMythMainWindow()->GetMainStack()->AddScreen( diag);75 76 GetMythMainWindow()->GetMainStack()->AddScreen(menu); 78 77 return 0; 79 78 } 80 79 else 81 80 { 82 81 VERBOSE(VB_IMPORTANT, QString("Couldn't find menu %1 or theme %2") 83 82 .arg(which_menu).arg(themedir)); 84 delete diag;83 delete menu; 85 84 return -1; 86 85 } 87 86 } 88 87 89 88 void runGames(void); 89 int RunGames(void); 90 90 91 91 void setupKeys(void) 92 92 { … … 105 105 { 106 106 if (!gContext->TestPopupVersion("mythgame", libversion, 107 107 MYTH_BINARY_VERSION)) 108 { 109 VERBOSE(VB_IMPORTANT, 110 QString("libmythgame.so/main.o: binary version mismatch")); 108 111 return -1; 112 } 109 113 110 111 114 gContext->ActivateSettingsCache(false); 112 115 if (!UpgradeGameDatabaseSchema()) 113 116 { … … 126 129 return 0; 127 130 } 128 131 129 void runGames( void)132 void runGames() 130 133 { 131 gContext->addCurrentLocation("mythgame"); 132 GameTree gametree(gContext->GetMainWindow(), "gametree", "game-"); 133 gametree.exec(); 134 gContext->removeCurrentLocation(); 134 RunGames(); 135 135 } 136 136 137 int RunGames(void) 138 { 139 MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack(); 140 GameUI *game = new GameUI(mainStack); 141 142 if (game->Create()) 143 { 144 mainStack->AddScreen(game); 145 return 0; 146 } 147 else 148 { 149 delete game; 150 return -1; 151 } 152 } 153 137 154 int mythplugin_run(void) 138 155 { 139 runGames(); 140 return 0; 156 return RunGames(); 141 157 } 142 158 143 159 int mythplugin_config(void) -
mythplugins/mythgame/mythgame/gamedetails.h
1 #ifndef GAMEDETAILS_H_ 2 #define GAMEDETAILS_H_ 3 4 #include <QString> 5 6 #include "mythscreentype.h" 7 #include "rominfo.h" 8 9 class GameDetailsPopup : public MythScreenType 10 { 11 Q_OBJECT 12 13 public: 14 GameDetailsPopup(MythScreenStack *parent, const RomInfo *romInfo); 15 ~GameDetailsPopup(); 16 17 bool Create(void); 18 void SetReturnEvent(QObject *retobject, const QString &resultid); 19 20 private slots: 21 void Play(void); 22 23 private: 24 void handleText(const QString &name, const QString &value); 25 void handleImage(const QString &name, const QString &filename); 26 27 const RomInfo *m_romInfo; 28 QString m_id; 29 QObject *m_retObject; 30 31 MythUIText *m_gameName; 32 MythUIText *m_gameType; 33 MythUIText *m_romName; 34 MythUIText *m_crc; 35 MythUIText *m_romPath; 36 MythUIText *m_genre; 37 MythUIText *m_year; 38 MythUIText *m_country; 39 MythUIText *m_publisher; 40 MythUIText *m_allSystems; 41 MythUIImage *m_fanartImage; 42 MythUIImage *m_boxImage; 43 44 MythUIButton *m_playButton; 45 MythUIButton *m_doneButton; 46 }; 47 48 #endif -
mythplugins/mythgame/mythgame/mythgame.pro
9 9 INSTALLS += target 10 10 11 11 # Input 12 HEADERS += gamehandler.h rominfo.h unzip.h gamesettings.h game tree.h13 HEADERS += rom_metadata.h romedit.h 12 HEADERS += gamehandler.h rominfo.h unzip.h gamesettings.h gameui.h 13 HEADERS += rom_metadata.h romedit.h gamedetails.h 14 14 15 SOURCES += main.cpp gamehandler.cpp rominfo.cpp game tree.cpp unzip.c15 SOURCES += main.cpp gamehandler.cpp rominfo.cpp gameui.cpp unzip.c 16 16 SOURCES += gamesettings.cpp dbcheck.cpp rom_metadata.cpp romedit.cpp 17 SOURCES += gamedetails.cpp 17 18 18 19 use_hidesyms { 19 20 QMAKE_CXXFLAGS += -fvisibility=hidden