Ya queda poco, ahora tendría que documentar su uso pero vaya.. es muy intuitivo y como todo va por eventos se puede seguir el source code de una forma muy sencilla, por poner un ejemplo para que se vea lo modularizado que está todo, esto es el código del proceso que hace de Explorador del archivo FPG
[Codebox=gemix file=Untitled.gemix]process FPG_explorer();
private
int container_;
int i;
int offset_x;
int offset_y;
int numMaps_;
string pwd_status = "YES";
string cmp_status = "YES";
int WAIT_FOR_SELECT_FILE_TO_LOAD = FALSE; // cuando se abre el OPEN_FILE de la egui esto se pone a true.. hasta que se cierra el OEPN_FILE.. cuando se cierre hay que cargar el archivo que indique la variable de ruta de la egui..
int counter_; // este contador se usa en el momento de cargar un FPG.. para contar las miniaturas que se crean en función de los mapas que contenga el FPG que se ha cargado..
int id_;
string str_ = ""; // usado en el parser de directorio y nombre de arhcivo en el momento de cargar un archivo desde disco..
int str_tokens_;
int str_len_;
string fileName_to_export_;
begin
id_fpg_explorer = ID;
graph = gui_new_form( 800, 300 );
gui_window_Set_position( 0,301 );
gui_set_title( "FPG Explorer", fnt_system_, -4 );
gui_new_menu( 30,32,"FPG", "NEW FPG*LOAD FPG*SAVE FPG*SAVE FPG AS*CLOSE FPG", "*" );
gui_new_menu( 90,32,"CONFIGURATION", "SET PWD PROTECTION*UNSET PWD PROTECTION*CHANGE PASSWORD..*SET COMPRESSION*UNSET COMRESSION*CHANGE ADD OFFSET..*SELECT EXPORT FORMAT..", "*" );
gui_new_menu( 150,32,"FILE", "SELECT ALL*UNSELECT ALL*DELETE SELECTED*EXPORT SELECTED", "*" );
gui_button( 540, 32, -1, 14, "ANIMATION", "open_Animation_", FNT_magenta );
gui_button( 610, 32, -1, 14, "C_POINT", "open_cpoint_", fnt_dark_green );
// marco superior donde muestro algunos datos..
gui_draw_form( 200,25,300,12,1 );
gui_write_label( fnt_dark_red, 220,32,3,"COMPRESSION [ ] PWD PROTECTION [ ]" );
// mini recuadro donde mostaré el número de SLOT actual para seguir añadiendo gráficos al fpg..
gui_draw_form( 740,25,45,12,1 );
gui_write_label( fnt_dark_red, 750, 32, 3, "#" );
gui_draw_form( 10,40,775,240,0 ); // region donde se muestran las miniaturas..
define_Region( 3, x+10, y+40, 775, 240); // redefinición de la region para mostrar las miniaturas..
loop
if(onDrag)
offset_x = x+10;
offset_y = y+40;
define_region( 3, offset_x, offset_y, 775, 240 ); // redefinición de la region para mostrar los mapas..
end
if(eventListener != null)
//..................................................................................
// reescanear el número de mapas que contiene el FPG..
// este evento lo lanzan los procesos FILE_ITEM_ cuando añaden su miniatura al fpg..
if(eventListener == "update_numMaps_")
numMaps_ = FPG_GET_NUMMAPS(fpg_works.id_);
end
//..................................................................................
// gestión del menu FPG..
if( gui_menu_event_from( "FPG" ) );
i = gui_menu_get_option( "FPG" );
switch(i)
case 1:
// NEW FPG.. una vez seleccionado el nuevo archivo este proceso recibirá el evento "new_fpg_has_created_"..
if(!WINDOW_FPG_NEW_)
FPG_explorer_SUB_new_fpg();
end
end
case 2:
// LOAD FPG..
if(!WINDOW_OPEN_FILE)
OPEN_FILE(200, 150, "fpg", father);
WAIT_FOR_SELECT_FILE_TO_LOAD = true;
end
end
case 3:
// SAVE FPG..
if(fpg_works.id_ != -1)
fpg_save( fpg_works.id_, FPG_WORKS.fullpath + fpg_works.name );
end
end
case 4:
// SAVE FPG AS..
if(!WINDOW_FPG_SAVE_AS_)
if(fpg_works.id_ != -1)
FPG_explorer_SUB_save_fpg_as();
end
end
end
case 5:
// CLOSE FPG..
gui_draw_form( 10,40,775,240,0 );
signal( type FPG_MAP_ITEM_, s_kill );
clear_fpg_data();
end
end
end
//..................................................................................
// gestión del menu CONFIGURATION
if( gui_menu_event_from( "CONFIGURATION" ) );
i = gui_menu_get_option( "CONFIGURATION" );
switch(i)
case 1:
// set password protection..
fpg_works.password = fpg_password_;
end
case 2:
// delete password protection..
fpg_works.password = "";
end
case 3:
// Change password..
if(!WINDOW_CHANGE_PASSWORD_)
FPG_explorer_SUB_change_password();
end
end
case 4:
// set compresion..
fpg_works.compression = 1;
end
case 5:
// unset compresion..
fpg_works.compression = 0;
end
case 6:
// Change ADD offset..
if(!WINDOW_CHANGE_ADD_OFFSET_)
FPG_explorer_SUB_change_ADD_offset();
end
end
case 7:
// Select EXPORT format..
if(!WINDOW_SELECT_EXPORT_FORMAT_)
FPG_explorer_SUB_select_export_format();
end
end
end
end
//..................................................................................
// gestion del menu FILE..
if( gui_menu_event_from( "FILE" ) )
i = gui_menu_get_option( "FILE" );
switch(i)
case 1:
// Select all..
id_ = get_id( type FPG_MAP_ITEM_ );
while(id_)
id_.estado = 2;
id_ = get_id( type FPG_MAP_ITEM_ );
end
end
case 2:
// UNselect all..
id_ = get_id( type FPG_MAP_ITEM_ );
while(id_)
id_.estado = 4;
id_ = get_id( type FPG_MAP_ITEM_ );
end
end
case 3:
// DELETE selected..
id_ = get_id( type FPG_MAP_ITEM_ );
while(id_)
if( id_.estado == 2 )
FPG_UNLOAD_MAP( FPG_WORKS.id_, id_.FPG_MAP_POS_ );
signal( id_, s_kill );
end
id_ = get_id( type FPG_MAP_ITEM_ );
end
end
case 4:
// EXPORT selected..
id_ = get_id( type FPG_MAP_ITEM_ );
while(id_)
if( id_.estado == 2 )
fileName_to_export_ = strGetToken( map_get_name( FPG_WORKS.ID_, id_.FPG_MAP_POS_ ), ".", 1 );
switch( IMAGE_EXPORT_FORMAT_ )
case img_format_map:
fileName_to_export_ += ".map";
end
case img_format_bmp:
fileName_to_export_ += ".bmp";
end
case img_format_jpeg:
fileName_to_export_ += ".jpg";
end
case img_format_png:
fileName_to_export_ += ".png";
end
case img_format_tga:
fileName_to_export_ += ".tga";
end
end
if(IMAGE_EXPORT_COMPRESION_)
IMAGE_SAVE( FPG_WORKS.ID_, id_.FPG_MAP_POS_, fileName_to_export_, IMAGE_EXPORT_FORMAT_, 1 );
else
IMAGE_SAVE( FPG_WORKS.ID_, id_.FPG_MAP_POS_, fileName_to_export_, IMAGE_EXPORT_FORMAT_ );
end
end
id_ = get_id( type FPG_MAP_ITEM_ );
end
end
end
end
//..................................................................................
// crear un nuevo archivo fpg en memoria..
if(eventListener == "new_fpg_has_created_") // se crea un nuevo fpg en memoria..
gui_draw_form( 10,40,775,240,1 ); // pinto un form balnco para que el atontao del user vea que ha creado algo xD..
clear_fpg_data(); // limpio el registro de lo que hubiera del antiguo fpg.. implica descargar el fpg actual..
fpg_works.id_ = fpg_new(); // creo el nuevo fpg..
fpg_save( fpg_works.id_, fpg_works.name ); // esto no guarda nada por que el fpg está vacio.. cosas de gemix XD.. pero debería guardar el archivo..
numMaps_ = load_fpg_from_disk(); // esto no carga nada por que el fpg estaba vacio cuando se ha intentado guardar en disco.. mas cosas estupendas XD..
end
//..................................................................................
// abrir el visor de animaciones..
if(eventListener == "open_Animation_")
if(WINDOW_ANIMATE_SPRITES_ == false)
FPG_EXPLORER_SUB_ANIMATE_SPRITES();
end
end
//..................................................................................
// abrir el cpoint manager..
if(eventListener == "open_cpoint_")
if(!WINDOW_CPOINT_MANAGER_)
id_ = get_id( type FPG_MAP_ITEM_ );
while(id_)
if( id_.estado == 2 )
FPG_explorer_SUB_cpoint_manager( id_.FPG_MAP_POS_ );
id_ = false;
else
id_ = get_id( type FPG_MAP_ITEM_ );
end
end
end
end
//..................................................................................
eventListener = null;
end
// cargar un archivo desde disco..
if(WAIT_FOR_SELECT_FILE_TO_LOAD == true) // se ha abierto el explorador de archivos de la egui para cargar un FPG..
if(!exists( type OPEN_FILE )) // cuando el explorador se cierre..
if(_egui_route_browser_file_ != "null") // si hay algo que cargar..
gui_draw_form( 10,40,775,240,1 ); // hago saber al user que ahora se ha cargado algo cambiando el color del form a blanco..
clear_fpg_data(); // descargo y limpio registros actuales..
//fpg_save( fpg_works.id_, fpg_works.name );
// parser del direcotrio y el nombre del archivo por separado..
str_ = _egui_route_browser_file_; // uso a str_ como buffer..
str_tokens_ = strtokencount( str_, "\" ); // miro cuentos tokens hay.. los tokens son la profundidad en directorios y el nombre del arhcivo..
fpg_works.name = strGetToken( str_, "\", str_Tokens_ ); // extraigo una copia del ultimo token.. osea.. el nombre del archivo..
str_len_ = strlen( fpg_works.name ); // calculos el número de chars del nombre del archivo..
strdel(str_, 0, str_len_); // ahora si.. le borro los chars por el final que contienen el nombre del archivo..
fpg_works.fullpath = str_; // asigno el parseo del directorio a la información del fpg..
numMaps_ = load_fpg_from_disk(); // cargo el FPG que me indica la egui..
// creo las miniaturas de los mapas que contenga el fpg cargado..
for(counter_=1; counter_<999; counter_++)
if( map_exists( fpg_works.id_, counter_ ) )
FPG_MAP_ITEM_( counter_, Fpg_Explorer_miniature_slot_ );
Fpg_Explorer_miniature_slot_ ++;
FPG_ADD_POSITION_ = counter_ + 1; // coloco el cursor de adición en la posición siguiente a este gráfico..
end
end
_egui_route_browser_file_ = "null";
WAIT_FOR_SELECT_FILE_TO_LOAD = false; // reseteo esta movida..
end
end
end
if( gui_is_window_focus() )
// control de scroll de las miniaturas..
if( mouse_on_region(3) )
if(mouse.wheelup)
if(offset_y_fpg_ > 0)
offset_y_fpg_ -=50;
end
end
if(mouse.wheeldown)
if( numMaps_ > 7)
if( offset_y_fpg_ < (numMaps_/7) * 100);
offset_y_fpg_ +=100;
end
end
end
end
// actualizar los cartelitos que muestran la selección de pasword y compresión..
if(fpg_works.compression > 0)
CMP_STATUS = "YES";
else
CMP_STATUS = "NO";
end
if(fpg_works.password != "")
PWD_STATUS = "YES";
else
PWD_STATUS = "NO";
end
end
SCREEN_DRAW_TEXT( fnt_blue, itoa(FPG_ADD_POSITION_), 5, x+778, y+32, z-1, 0,100,100,0,0,0,0,0);
SCREEN_DRAW_TEXT( fnt_red, CMP_STATUS, 4, x+307, y+32, z-1, 0,100,100,0,0,0,0,region);
SCREEN_DRAW_TEXT( fnt_red, PWD_STATUS, 4, x+469, y+32, z-1, 0,100,100,0,0,0,0,region);
frame;
end
end[/Codebox]
Yo creo que de un vistazo rápido se entiende perfectamente que sucede cuando se recibe un evento de la EGUI
