Index: picedit.c ================================================================== --- picedit.c +++ picedit.c @@ -1502,10 +1502,38 @@ sqlite3_bind_text(st,2,s,-1,SQLITE_TRANSIENT); i=sqlite3_step(st); sqlite3_finalize(st); if(i!=SQLITE_DONE) screen_message(sqlite3_errmsg(userdb)); } + +static sqlite3_int64 copy_picture(void) { + sqlite3_stmt*st; + const char*s=screen_prompt("Copy from:"); + int i; + sqlite3_set_last_insert_rowid(userdb,0); + if(!s || !*s) return 0; + if(sqlite3_prepare_v2(userdb,"INSERT INTO `PICEDIT`(`NAME`,`TYPE`,`DATA`) SELECT VALID_NAME(?2)||SUBSTR(`NAME`,-4),`TYPE`,`DATA` " + "FROM `PICEDIT` WHERE SUBSTR(`NAME`,1,LENGTH(`NAME`)-4)=?1 AND `TYPE`<>0;",-1,&st,0)) { + screen_message(sqlite3_errmsg(userdb)); + return; + } + sqlite3_bind_text(st,1,s,-1,SQLITE_TRANSIENT); + s=screen_prompt("Copy to:"); + if(!s || !*s) { + sqlite3_finalize(st); + return; + } + sqlite3_bind_text(st,2,s,-1,SQLITE_TRANSIENT); + i=sqlite3_step(st); + sqlite3_finalize(st); + if(i==SQLITE_DONE) { + return sqlite3_last_insert_rowid(userdb); + } else { + screen_message(sqlite3_errmsg(userdb)); + return 0; + } +} static void do_config(void) { sqlite3_stmt*st; const char*s; char buf[16]; @@ -1561,11 +1589,11 @@ sqlite3_bind_int(st,1,screen->h/8-1); sqlite3_bind_int(st,2,sc); SDL_LockSurface(screen); r.x=r.y=0; r.w=screen->w; r.h=screen->h; SDL_FillRect(screen,&r,0xF0); - draw_text(0,0," Save/Quit Add Delete Edit Rename AddDependent Config",0xF0,0xFB); + draw_text(0,0," Save/Quit Add Delete Edit Rename AddDependent Config Copy",0xF0,0xFB); n=0; while((i=sqlite3_step(st))==SQLITE_ROW) { ids[n++]=sqlite3_column_int64(st,0); draw_text(16,8*n,sqlite3_column_text(st,1),0xF0,sqlite3_column_int(st,2)==1?0xF7:0xF2); if(8*n+8>screen->h-8) break; @@ -1614,10 +1642,17 @@ else screen_message("Too many pictures"); goto redraw; case SDLK_F6: do_config(); goto redraw; + case SDLK_F7: + *ids=copy_picture(); + if(*ids) edit_picture(*ids); + goto redraw; + case SDLK_F12: + sqlite3_exec(userdb,screen_prompt("")?:"",response_cb,0,0); + goto redraw; } break; case SDL_MOUSEMOTION: set_cursor(XC_arrow); break; Index: picedit.doc ================================================================== --- picedit.doc +++ picedit.doc @@ -35,10 +35,15 @@ configuration, otherwise it is saved with the puzzle set, and will be used when adding new pictures. You can specify multiple sizes; it will create it with variants of all of those sizes. You can also specify the same numbers multiple times if you want multiple variants of that size. +The F7 key copies a picture. + +The F12 key allows entering a SQL statement. If there are any result rows, +only the first row and first column are displayed. + === Drawing === The following keyboard commands are available: