| 
									
										
										
										
											2007-11-19 22:29:24 +08:00
										 |  |  | /* ASE - Allegro Sprite Editor
 | 
					
						
							| 
									
										
										
										
											2009-01-24 08:41:01 +08:00
										 |  |  |  * Copyright (C) 2001-2009  David Capello | 
					
						
							| 
									
										
										
										
											2007-11-19 22:29:24 +08:00
										 |  |  |  * | 
					
						
							|  |  |  |  * This program is free software; you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU General Public License as published by | 
					
						
							|  |  |  |  * the Free Software Foundation; either version 2 of the License, or | 
					
						
							|  |  |  |  * (at your option) any later version. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |  * GNU General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  |  * along with this program; if not, write to the Free Software | 
					
						
							|  |  |  |  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "config.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-05 09:30:50 +08:00
										 |  |  | #include "jinete/jinete.h"
 | 
					
						
							| 
									
										
										
										
											2007-11-19 22:29:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-05 09:30:50 +08:00
										 |  |  | #include "commands/commands.h"
 | 
					
						
							| 
									
										
										
										
											2007-11-19 22:29:24 +08:00
										 |  |  | #include "modules/gui.h"
 | 
					
						
							|  |  |  | #include "raster/sprite.h"
 | 
					
						
							| 
									
										
										
										
											2009-06-11 23:11:11 +08:00
										 |  |  | #include "undoable.h"
 | 
					
						
							| 
									
										
										
										
											2007-11-19 22:29:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-11 23:11:11 +08:00
										 |  |  | class SpriteReader; | 
					
						
							|  |  |  | void dialogs_frame_length(const SpriteReader& sprite, int sprite_frame); | 
					
						
							| 
									
										
										
										
											2007-11-19 22:29:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-05 09:30:50 +08:00
										 |  |  | static bool cmd_frame_properties_enabled(const char *argument) | 
					
						
							| 
									
										
										
										
											2007-11-19 22:29:24 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-06-11 23:11:11 +08:00
										 |  |  |   const CurrentSpriteReader sprite; | 
					
						
							|  |  |  |   return | 
					
						
							|  |  |  |     sprite != NULL; | 
					
						
							| 
									
										
										
										
											2007-11-19 22:29:24 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-05 09:30:50 +08:00
										 |  |  | static void cmd_frame_properties_execute(const char *argument) | 
					
						
							| 
									
										
										
										
											2007-11-19 22:29:24 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-06-11 23:11:11 +08:00
										 |  |  |   const CurrentSpriteReader sprite; | 
					
						
							|  |  |  |   dialogs_frame_length(sprite, sprite->frame); | 
					
						
							| 
									
										
										
										
											2007-11-19 22:29:24 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* if sprite_frame < 0, set the frame length of all frames */ | 
					
						
							| 
									
										
										
										
											2009-06-11 23:11:11 +08:00
										 |  |  | void dialogs_frame_length(const SpriteReader& sprite, int sprite_frame) | 
					
						
							| 
									
										
										
										
											2007-11-19 22:29:24 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-06-11 23:11:11 +08:00
										 |  |  |   JWidget frame, frlen, ok; | 
					
						
							| 
									
										
										
										
											2007-11-19 22:29:24 +08:00
										 |  |  |   char buf[64]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-11 23:50:10 +08:00
										 |  |  |   JWidgetPtr window(load_widget("frlen.jid", "frame_duration")); | 
					
						
							| 
									
										
										
										
											2009-06-11 23:11:11 +08:00
										 |  |  |   get_widgets(window, | 
					
						
							|  |  |  | 	      "frame", &frame, | 
					
						
							|  |  |  | 	      "frlen", &frlen, | 
					
						
							|  |  |  | 	      "ok", &ok, NULL); | 
					
						
							| 
									
										
										
										
											2007-11-19 22:29:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   if (sprite_frame < 0) | 
					
						
							|  |  |  |     strcpy(buf, "All"); | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     sprintf(buf, "%d", sprite_frame+1); | 
					
						
							|  |  |  |   jwidget_set_text(frame, buf); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-11 23:59:13 +08:00
										 |  |  |   sprintf(buf, "%d", sprite_get_frlen(sprite, sprite->frame)); | 
					
						
							| 
									
										
										
										
											2007-11-19 22:29:24 +08:00
										 |  |  |   jwidget_set_text(frlen, buf); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   jwindow_open_fg(window); | 
					
						
							|  |  |  |   if (jwindow_get_killer(window) == ok) { | 
					
						
							|  |  |  |     int num = strtol(jwidget_get_text(frlen), NULL, 10); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (sprite_frame < 0) { | 
					
						
							|  |  |  |       if (jalert("Warning" | 
					
						
							| 
									
										
										
										
											2008-10-11 23:59:13 +08:00
										 |  |  | 		 "<<Do you want to change the duration of all frames?" | 
					
						
							|  |  |  | 		 "||&Yes||&No") == 1) { | 
					
						
							| 
									
										
										
										
											2009-06-11 23:11:11 +08:00
										 |  |  | 	SpriteWriter sprite_writer(sprite); | 
					
						
							|  |  |  | 	Undoable undoable(sprite_writer, "Constant Frame-Rate"); | 
					
						
							| 
									
										
										
										
											2008-10-11 23:59:13 +08:00
										 |  |  | 	undoable.set_constant_frame_rate(num); | 
					
						
							|  |  |  | 	undoable.commit(); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     else { | 
					
						
							| 
									
										
										
										
											2009-06-11 23:11:11 +08:00
										 |  |  |       SpriteWriter sprite_writer(sprite); | 
					
						
							|  |  |  |       Undoable undoable(sprite_writer, "Frame Duration"); | 
					
						
							| 
									
										
										
										
											2008-10-11 23:59:13 +08:00
										 |  |  |       undoable.set_frame_duration(sprite_frame, num); | 
					
						
							|  |  |  |       undoable.commit(); | 
					
						
							| 
									
										
										
										
											2007-11-19 22:29:24 +08:00
										 |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2007-12-05 09:30:50 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Command cmd_frame_properties = { | 
					
						
							|  |  |  |   CMD_FRAME_PROPERTIES, | 
					
						
							|  |  |  |   cmd_frame_properties_enabled, | 
					
						
							|  |  |  |   NULL, | 
					
						
							|  |  |  |   cmd_frame_properties_execute, | 
					
						
							|  |  |  | }; |