- Timestamp:
- 09/04/11 03:54:54 (13 years ago)
- Location:
- ps/trunk/binaries/data/mods/public/gui
- Files:
-
- 10 edited
-
civinfo/civinfo.xml (modified) (2 diffs)
-
common/functions_utility_music.js (modified) (2 diffs)
-
gamesetup/gamesetup.xml (modified) (7 diffs)
-
manual/manual.xml (modified) (2 diffs)
-
page_session.xml (modified) (1 diff)
-
pregame/mainmenu.js (modified) (2 diffs)
-
session/music.js (modified) (1 diff)
-
session/session.js (modified) (3 diffs)
-
session/session.xml (modified) (1 diff)
-
summary/summary.xml (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
ps/trunk/binaries/data/mods/public/gui/civinfo/civinfo.xml
r10156 r10182 27 27 </object> 28 28 29 <object name="civSelection" type="dropdown" style="StoneDropDown" size="50%-96 10 50%+96 38">29 <object name="civSelection" type="dropdown" style="StoneDropDown" size="50%-96 10 50%+96 40"> 30 30 <action on="SelectionChange">selectCiv(this.list_data[this.selected]);</action> 31 31 </object> … … 112 112 type="button" 113 113 style="StoneButton" 114 size="100%-1 48 100%-48 100%-20 100%-20"114 size="100%-164 100%-52 100%-24 100%-24" 115 115 >Close 116 <action on="Press"><![CDATA[ 117 Engine.PopGuiPage(); 118 ]]></action> 116 <action on="Press"> 117 <![CDATA[ 118 Engine.PopGuiPage(); 119 ]]> 120 </action> 119 121 </object> 120 122 -
ps/trunk/binaries/data/mods/public/gui/common/functions_utility_music.js
r10179 r10182 3 3 NOTES : 4 4 */ 5 6 7 /* 8 * These constants are used in session and summary 9 */ 10 var g_MusicGain = 0.3; 11 12 const RELATIVE_MUSIC_PATH = "audio/music/"; 13 var g_PeaceTracks = []; 14 var g_BattleTracks = []; 15 16 const MAIN_MENU = "main_menu"; 17 const DEFEAT_CUE = "gen_loss_cue"; 18 const DEFEAT_MUSIC = "gen_loss_track"; 19 const VICTORY_MUSIC = "win_1"; 5 20 6 21 // ==================================================================== … … 105 120 106 121 // ==================================================================== 122 123 124 125 126 /* 127 * At some point, this ought to be extended to do dynamic music selection and 128 * crossfading - it at least needs to pick the music track based on the player's 129 * civ and peace/battle 130 */ 131 132 /* 133 * These functions are used in session and summary 134 * 135 */ 136 137 function storeTracks(civMusic) 138 { 139 for each (var music in civMusic) 140 { 141 if ("peace" == music["Type"]) 142 { 143 g_PeaceTracks.push(music["File"]); 144 } 145 else if ("battle" == music["Type"]) 146 { 147 g_BattleTracks.push(music["File"]); 148 } 149 } 150 } 151 152 function getRandomPeaceTrack() 153 { 154 return RELATIVE_MUSIC_PATH + g_PeaceTracks[getRandom(0, g_PeaceTracks.length-1)]; 155 } 156 157 function getRandomBattleTrack() 158 { 159 return RELATIVE_MUSIC_PATH + g_BattleTracks[getRandom(0, g_BattleTracks.length-1)]; 160 } 161 162 function playMainMenuMusic() 163 { 164 if (global.curr_music) 165 switchMusic(MAIN_MENU, 0.0, true); 166 else 167 playMusic(MAIN_MENU, 0.0, true); 168 } 169 170 function stopMainMenuMusic() 171 { 172 if (global.main_menu_music) 173 global.main_menu_music.fade(-1, 0.0, 5.0); 174 } 175 176 177 function playDefeatMusic() 178 { 179 switchMusic(DEFEAT_CUE, 0.0, false); 180 switchMusic(DEFEAT_MUSIC, 10.0, true); 181 } 182 183 function playVictoryMusic() 184 { 185 switchMusic(VICTORY_MUSIC, 0.0, true); 186 } 187 188 function startSessionSounds(civMusic) 189 { 190 storeTracks(civMusic); 191 playAmbientSounds(); 192 playRandomCivMusic(); 193 } 194 195 function playRandomCivMusic() 196 { 197 global.curr_music = new Sound(getRandomPeaceTrack()); 198 if (global.curr_music) 199 { 200 global.curr_music.loop(); 201 global.curr_music.fade(0.0, g_MusicGain, 10.0); 202 } 203 } 204 205 function playAmbientSounds() 206 { 207 global.curr_ambient = new Sound("audio/ambient/dayscape/day_temperate_gen_03.ogg"); 208 if (global.curr_ambient) 209 { 210 global.curr_ambient.loop(); 211 global.curr_ambient.setGain(0.8); 212 } 213 } 214 215 function playMusic(track, fadeInPeriod, isLooping) 216 { 217 global.curr_music = new Sound(RELATIVE_MUSIC_PATH + track + ".ogg"); 218 219 if (global.curr_music) 220 { 221 if (isLooping) 222 global.curr_music.loop(); 223 else 224 global.curr_music.play(); 225 226 if (fadeInPeriod) 227 global.curr_music.fade(0.0, g_MusicGain, fadeInPeriod); 228 } 229 } 230 231 function switchMusic(track, fadeInPeriod, isLooping) 232 { 233 if (global.curr_music) 234 global.curr_music.fade(-1, 0.0, 5.0); 235 236 playMusic(track, fadeInPeriod, isLooping); 237 } 238 239 function stopSound() 240 { 241 stopMusic(); 242 stopAmbient(); 243 } 244 245 function stopMusic() 246 { 247 if (global.curr_music) 248 { 249 global.curr_music.fade(-1, 0.0, 5.0); 250 global.curr_music = null; 251 } 252 } 253 254 function stopAmbientSounds() 255 { 256 if (global.curr_ambient) 257 { 258 global.curr_ambient.fade(-1, 0.0, 5.0); 259 global.curr_ambient = null; 260 } 261 } 262 263 function isMusicPlaying() 264 { 265 if (global.curr_music) 266 return true; 267 268 return false; 269 } 270 271 //function isEndingMusicPlaying() 272 //{ 273 // if (global.curr_music) 274 // { 275 // if (global.curr_music[DEFEAT_CUE] || 276 // global.curr_music[DEFEAT_MUSIC] || 277 // global.curr_music[VICTORY_MUSIC]) 278 // { 279 // return true; 280 // } 281 // } 282 // 283 // return false; 284 //} 285 // 286 // 287 //function isMusicPlaying() 288 //{ 289 // if (global.curr_music) 290 // return global.curr_music.isPlaying(); 291 // 292 // return false; 293 //} -
ps/trunk/binaries/data/mods/public/gui/gamesetup/gamesetup.xml
r10155 r10182 37 37 <object size="20 64 300 100%-20"> 38 38 39 <object size="0 0 100%-180 100%">40 <object name="mapTypeHeading" type="text" style="RightLabelText" size="0 0 100% 28">Match Type:</object>41 <object name="mapFilterHeading" type="text" style="RightLabelText" size="0 34 100% 60">Map Filter:</object>42 </object>43 44 <object name="mapTypeSelection"39 <object size="0 0 100%-180 100%"> 40 <object name="mapTypeHeading" type="text" style="RightLabelText" size="0 0 100% 28">Match Type:</object> 41 <object name="mapFilterHeading" type="text" style="RightLabelText" size="0 34 100% 60">Map Filter:</object> 42 </object> 43 44 <object name="mapTypeSelection" 45 45 type="dropdown" 46 46 style="StoneDropDown" 47 size="100%-180 0 100% 28"47 size="100%-180 0 100% 30" 48 48 tooltip_style="onscreenToolTip" 49 49 tooltip="Select a map type."> … … 54 54 type="dropdown" 55 55 style="StoneDropDown" 56 size="100%-180 34 100% 6 0"56 size="100%-180 34 100% 64" 57 57 tooltip_style="onscreenToolTip" 58 58 tooltip="Select a map filter."> … … 77 77 78 78 <!-- Player assignments --> 79 <object name="numPlayersBox" size="320 28 100% 30" hidden="true">79 <object name="numPlayersBox" size="320 28 100% 58" hidden="true"> 80 80 <object name="numPlayersSelectionHeading" type="text" style="LeftLabelText" size="160 0 100% 32">Number of Players</object> 81 81 <object name="numPlayersSelection" … … 112 112 <object name="playerColour[n]" type="image" size="0 0 100% 100%"/> 113 113 <object name="playerName[n]" type="text" style="RightLabelText" size="0 0 100 100%"/> 114 <object name="playerAssignment[n]" type="dropdown" style="StoneDropDown" size="100 2 250 100%-2" tooltip_style="onscreenToolTip" tooltip="Select player"/>114 <object name="playerAssignment[n]" type="dropdown" style="StoneDropDown" size="100 2 250 30" tooltip_style="onscreenToolTip" tooltip="Select player"/> 115 115 <object name="playerConfig[n]" type="button" style="StoneButton" size="251 6 264 24" 116 116 tooltip_style="onscreenToolTip" … … 168 168 sprite="BackgroundTranslucent" 169 169 hidden="true" 170 size="100%-656 100%-64 100%-3 04 100%-16"170 size="100%-656 100%-64 100%-312 100%-24" 171 171 >[Tooltip text]</object> 172 172 … … 176 176 type="button" 177 177 style="StoneButton" 178 size="100%-30 4 100%-48 100%-164 100%-20"178 size="100%-308 100%-52 100%-168 100%-24" 179 179 tooltip_style="onscreenToolTip" 180 180 tooltip="Click this button to start a new game with the current settings." … … 188 188 type="button" 189 189 style="StoneButton" 190 size="100%-16 0 100%-48 100%-20 100%-20"190 size="100%-164 100%-52 100%-24 100%-24" 191 191 tooltip_style="onscreenToolTip" 192 192 tooltip="Click this button to return to the main menu." 193 193 >Cancel 194 <action on="Press"><![CDATA[ 195 cancelSetup(); 196 Engine.PopGuiPage(); 197 ]]></action> 194 <action on="Press"> 195 <![CDATA[ 196 cancelSetup(); 197 Engine.PopGuiPage(); 198 ]]> 199 </action> 198 200 </object> 199 201 -
ps/trunk/binaries/data/mods/public/gui/manual/manual.xml
r10158 r10182 10 10 <object type="image" style="StonePanelLight" size="50%-466 50%-316 50%+466 50%+316"> 11 11 12 <object type="image" sprite="BackgroundTranslucent" size="20 20 100%-20 100%-52">13 <object name="mainText" type="text" style="textPanel"/>14 </object>15 <object type="button" style="StoneButton" size="100%-324 100%-48 100%-164 100%-20">12 <object type="image" sprite="BackgroundTranslucent" size="20 20 100%-20 100%-58"> 13 <object name="mainText" type="text" style="textPanel"/> 14 </object> 15 <object type="button" style="StoneButton" size="100%-308 100%-52 100%-168 100%-24"> 16 16 Online Manual 17 17 <action on="Press"><![CDATA[ … … 21 21 ]]></action> 22 22 </object> 23 <object type="button" style="StoneButton" tooltip_style="snToolTip" size="100%-1 48 100%-48 100%-20 100%-20">23 <object type="button" style="StoneButton" tooltip_style="snToolTip" size="100%-164 100%-52 100%-24 100%-24"> 24 24 Close 25 25 <action on="Press"><![CDATA[Engine.PopGuiPage();]]></action> -
ps/trunk/binaries/data/mods/public/gui/page_session.xml
r10072 r10182 6 6 <include>common/icon_sprites.xml</include> 7 7 8 <include>common/init.xml</include> 8 9 <include>common/common_sprites.xml</include> 9 10 <include>common/common_styles.xml</include> -
ps/trunk/binaries/data/mods/public/gui/pregame/mainmenu.js
r10179 r10182 5 5 function init() 6 6 { 7 global.curr_music = newRandomSound("music", "menu"); 8 if (global.curr_music) 9 global.curr_music.loop(); 7 playMainMenuMusic(); 10 8 11 9 userReportEnabledText = getGUIObjectByName("userReportEnabledText").caption; 12 10 13 // initialize currentSubmenuType with placeholder to avoid null 11 // initialize currentSubmenuType with placeholder to avoid null when switching 14 12 currentSubmenuType = "submenuSinglePlayer"; 15 13 } … … 180 178 // hide submenu screen 181 179 getGUIObjectByName("submenuScreen").hidden = false; 182 console.write(getGUIObjectByName("submenuScreen").hidden);183 180 } 184 181 -
ps/trunk/binaries/data/mods/public/gui/session/music.js
r9430 r10182 1 var g_CurrentMusic = null; 2 var g_CurrentAmbient = null; 3 4 var g_MusicGain = 0.3; 5 6 const MUSIC_PATH = "audio/music/"; 7 var g_PeaceTracks = []; 8 var g_BattleTracks = []; 9 10 /* 11 * At some point, this ought to be extended to do dynamic music selection and 12 * crossfading - it at least needs to pick the music track based on the player's 13 * civ and peace/battle 14 */ 15 16 function storeTracks(civMusic) 17 { 18 for each (var music in civMusic) 19 { 20 if ("peace" == music["Type"]) 21 { 22 g_PeaceTracks.push(music["File"]); 23 } 24 else if ("battle" == music["Type"]) 25 { 26 g_BattleTracks.push(music["File"]); 27 } 28 } 29 } 30 31 function getRandomPeaceTrack() 32 { 33 return MUSIC_PATH + g_PeaceTracks[getRandom(0, g_PeaceTracks.length-1)]; 34 } 35 36 function getRandomBattleTrack() 37 { 38 return MUSIC_PATH + g_BattleTracks[getRandom(0, g_BattleTracks.length-1)]; 39 } 40 41 function startMusic(civMusic) 42 { 43 storeTracks(civMusic); 44 45 g_CurrentAmbient = new Sound("audio/ambient/dayscape/day_temperate_gen_03.ogg"); 46 if (g_CurrentAmbient) 47 { 48 g_CurrentAmbient.loop(); 49 g_CurrentAmbient.setGain(0.8); 50 } 51 52 g_CurrentMusic = new Sound(getRandomPeaceTrack()); 53 if (g_CurrentMusic) 54 { 55 g_CurrentMusic.loop(); 56 g_CurrentMusic.fade(0.0, g_MusicGain, 10.0); 57 } 58 } 59 60 function switchMusic(track, fadeInPeriod) 61 { 62 if (g_CurrentMusic) 63 g_CurrentMusic.fade(-1, 0.0, 5.0); 64 65 g_CurrentMusic = new Sound(MUSIC_PATH + track + ".ogg"); 66 67 if (g_CurrentMusic) 68 { 69 g_CurrentMusic.loop(); 70 if (fadeInPeriod) 71 g_CurrentMusic.fade(0.0, g_MusicGain, fadeInPeriod); 72 } 73 } 74 75 function stopMusic() 76 { 77 if (g_CurrentMusic) 78 { 79 g_CurrentMusic.fade(-1, 0.0, 5.0); 80 g_CurrentMusic = null; 81 } 82 83 if (g_CurrentAmbient) 84 { 85 g_CurrentAmbient.fade(-1, 0.0, 5.0); 86 g_CurrentAmbient = null; 87 } 88 } 1 //var g_CurrentMusic = null; 2 //var g_CurrentAmbient = null; 3 // 4 //var g_MusicGain = 0.5; 5 // 6 //const MUSIC_PATH = "audio/music/"; 7 //var g_PeaceTracks = []; 8 //var g_BattleTracks = []; 9 // 10 // 11 //const DEFEAT_CUE = "gen_loss_cue"; 12 //const DEFEAT_MUSIC = "gen_loss_track"; 13 //const VICTORY_MUSIC = "win_1"; 14 // 15 ///* 16 // * At some point, this ought to be extended to do dynamic music selection and 17 // * crossfading - it at least needs to pick the music track based on the player's 18 // * civ and peace/battle 19 // */ 20 // 21 //function storeTracks(civMusic) 22 //{ 23 // for each (var music in civMusic) 24 // { 25 // if ("peace" == music["Type"]) 26 // { 27 // g_PeaceTracks.push(music["File"]); 28 // } 29 // else if ("battle" == music["Type"]) 30 // { 31 // g_BattleTracks.push(music["File"]); 32 // } 33 // } 34 //} 35 // 36 //function getRandomPeaceTrack() 37 //{ 38 // return MUSIC_PATH + g_PeaceTracks[getRandom(0, g_PeaceTracks.length-1)]; 39 //} 40 // 41 //function getRandomBattleTrack() 42 //{ 43 // return MUSIC_PATH + g_BattleTracks[getRandom(0, g_BattleTracks.length-1)]; 44 //} 45 // 46 //function playDefeatMusic() 47 //{ 48 // switchMusic(DEFEAT_CUE, 0.0, false); 49 // switchMusic(DEFEAT_MUSIC, 10.0, true); 50 //} 51 // 52 //function playVictoryMusic() 53 //{ 54 // switchMusic(VICTORY_MUSIC, 0.0, true); 55 //} 56 // 57 //function isEndingMusicPlaying() 58 //{ 59 // if (g_CurrentMusic) 60 // { 61 // if (g_CurrentMusic[DEFEAT_CUE] || 62 // g_CurrentMusic[DEFEAT_MUSIC] || 63 // g_CurrentMusic[VICTORY_MUSIC]) 64 // { 65 // return true; 66 // } 67 // } 68 // 69 // return false; 70 //} 71 // 72 // 73 //function isMusicPlaying() 74 //{ 75 // if (g_CurrentMusic) 76 // return g_CurrentMusic.isPlaying(); 77 // 78 // return false; 79 //} 80 // 81 //function startSound(civMusic) 82 //{ 83 // storeTracks(civMusic); 84 // 85 // g_CurrentAmbient = new Sound("audio/ambient/dayscape/day_temperate_gen_03.ogg"); 86 // if (g_CurrentAmbient) 87 // { 88 // g_CurrentAmbient.loop(); 89 // g_CurrentAmbient.setGain(0.8); 90 // } 91 // 92 // g_CurrentMusic = new Sound(getRandomPeaceTrack()); 93 // if (g_CurrentMusic) 94 // { 95 // g_CurrentMusic.loop(); 96 // g_CurrentMusic.fade(0.0, g_MusicGain, 10.0); 97 // } 98 //} 99 // 100 //function switchMusic(track, fadeInPeriod, isLooping) 101 //{ 102 // if (g_CurrentMusic) 103 // g_CurrentMusic.fade(-1, 0.0, 5.0); 104 // 105 // g_CurrentMusic = new Sound(MUSIC_PATH + track + ".ogg"); 106 // 107 // if (g_CurrentMusic) 108 // { 109 // if (isLooping) 110 // g_CurrentMusic.loop(); 111 // else 112 // g_CurrentMusic.play(); 113 // 114 // if (fadeInPeriod) 115 // g_CurrentMusic.fade(0.0, g_MusicGain, fadeInPeriod); 116 // } 117 //} 118 // 119 //function stopSound() 120 //{ 121 // stopMusic(); 122 // stopAmbient(); 123 //} 124 // 125 //function stopMusic() 126 //{ 127 // if (g_CurrentMusic) 128 // { 129 // g_CurrentMusic.fade(-1, 0.0, 5.0); 130 // g_CurrentMusic = null; 131 // } 132 //} 133 // 134 //function stopAmbient() 135 //{ 136 // if (g_CurrentAmbient) 137 // { 138 // g_CurrentAmbient.fade(-1, 0.0, 5.0); 139 // g_CurrentAmbient = null; 140 // } 141 //} -
ps/trunk/binaries/data/mods/public/gui/session/session.js
r10149 r10182 79 79 else 80 80 { 81 start Music(g_CivData[g_Players[Engine.GetPlayerID()].civ].Music); // Starting for the first time:81 startSessionSounds(g_CivData[g_Players[Engine.GetPlayerID()].civ].Music); // Starting for the first time: 82 82 } 83 83 … … 131 131 }); 132 132 133 } 134 135 stopMusic(); 133 134 playDefeatMusic(); 135 } 136 137 stopAmbientSounds(); 136 138 endGame(); 137 139 138 140 Engine.SwitchGuiPage("page_summary.xml", 139 { "gameResult" : gameResult,140 "timeElapsed" : extendedSimState.timeElapsed,141 "playerStates": extendedSimState.players142 });141 { "gameResult" : gameResult, 142 "timeElapsed" : extendedSimState.timeElapsed, 143 "playerStates": extendedSimState.players 144 }); 143 145 } 144 146 … … 198 200 { 199 201 g_GameEnded = true; 200 switchMusic("loss_1", 0.0);201 202 closeMenu();203 closeOpenDialogs();204 205 var btCaptions = ["Yes", "No"];206 var btCode = [leaveGame, null];207 messageBox(400, 200, "You have been defeated...\nDo you want to leave the game now?", "Defeat", 0, btCaptions, btCode);202 playDefeatMusic(); 203 204 closeMenu(); 205 closeOpenDialogs(); 206 207 var btCaptions = ["Yes", "No"]; 208 var btCode = [leaveGame, null]; 209 messageBox(400, 200, "You have been defeated...\nDo you want to leave the game now?", "Defeat", 0, btCaptions, btCode); 208 210 } 209 211 else if (playerState.state == "won") 210 212 { 211 213 g_GameEnded = true; 212 switchMusic("win_1", 0.0);213 214 closeMenu();215 closeOpenDialogs();214 playVictoryMusic(); 215 216 closeMenu(); 217 closeOpenDialogs(); 216 218 217 219 if (!getGUIObjectByName("devCommandsRevealMap").checked) 218 220 getGUIObjectByName("devCommandsRevealMap").checked = true; 219 221 220 var btCaptions = ["Yes", "No"];221 var btCode = [leaveGame, null];222 messageBox(400, 200, "You have won the battle!\nDo you want to leave the game now?", "Victory", 0, btCaptions, btCode);222 var btCaptions = ["Yes", "No"]; 223 var btCode = [leaveGame, null]; 224 messageBox(400, 200, "You have won the battle!\nDo you want to leave the game now?", "Victory", 0, btCaptions, btCode); 223 225 } 224 226 } -
ps/trunk/binaries/data/mods/public/gui/session/session.xml
r10177 r10182 10 10 <script file="gui/session/selection.js"/> 11 11 <script file="gui/session/input.js"/> 12 <script file="gui/session/music.js"/>13 12 <script file="gui/session/menu.js"/> 14 13 <script file="gui/session/selection_details.js"/> -
ps/trunk/binaries/data/mods/public/gui/summary/summary.xml
r10150 r10182 40 40 </object> 41 41 42 <object name="tabDividerLeft" type="image" sprite="TabSpacer" size="172 100 174 102"/>43 <object name="tabDividerRight" type="image" sprite="TabSpacer" size="328 100 330 102"/>42 <object name="tabDividerLeft" type="image" sprite="TabSpacer" size="172 100 174 102"/> 43 <object name="tabDividerRight" type="image" sprite="TabSpacer" size="328 100 330 102"/> 44 44 45 45 <object name="unitsBuildingsPanelButton" type="button" sprite="ForegroundTab" size="20 75 170 100"> … … 58 58 </object> 59 59 60 <object name="unitsBuildingsPanel" type="image" sprite="ForegroundBody" size="20 100 100%-20 100%-5 4">60 <object name="unitsBuildingsPanel" type="image" sprite="ForegroundBody" size="20 100 100%-20 100%-58"> 61 61 62 62 <object size="0 0 100% 100%-50"> … … 102 102 103 103 </object> 104 <object name="conquestPanel" type="image" sprite="ForegroundBody" size="20 100 100%-20 100%-5 4" hidden="true">104 <object name="conquestPanel" type="image" sprite="ForegroundBody" size="20 100 100%-20 100%-58" hidden="true"> 105 105 106 106 <object size="0 0 100% 100%-50"> … … 133 133 134 134 </object> 135 <object name="resourcesPanel" type="image" sprite="ForegroundBody" size="20 100 100%-20 100%-5 4" hidden="true">135 <object name="resourcesPanel" type="image" sprite="ForegroundBody" size="20 100 100%-20 100%-58" hidden="true"> 136 136 137 137 <object size="0 0 100% 100%-50"> … … 177 177 </object> 178 178 179 <object type="button" style="StoneButton" size="100%-1 76 100%-48 100%-20 100%-20">179 <object type="button" style="StoneButton" size="100%-180 100%-52 100%-24 100%-24"> 180 180 Main Menu 181 <action on="Press"><![CDATA[ 182 Engine.SwitchGuiPage("page_pregame.xml"); 183 ]]></action> 181 <action on="Press"> 182 <![CDATA[ 183 Engine.SwitchGuiPage("page_pregame.xml"); 184 ]]> 185 </action> 184 186 </object> 185 187
Note:
See TracChangeset
for help on using the changeset viewer.
