"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "f.tools.cc" between
fotoxx-22.30.tar.gz and fotoxx-22.35.tar.gz

About: fotoxx is a program for photo editing and collection management.

f.tools.cc  (fotoxx-22.30):f.tools.cc  (fotoxx-22.35)
skipping to change at line 28 skipping to change at line 28
******************************************************************************** * ******************************************************************************** *
Fotoxx image edit - Tools menu functions Fotoxx image edit - Tools menu functions
m_index dialog to create/update image index file m_index dialog to create/update image index file
index_rebuild create/update image index file index_rebuild create/update image index file
m_quick_index quick incremental index rebuild, no UI m_quick_index quick incremental index rebuild, no UI
index_rebuild_old use old image index file without updates index_rebuild_old use old image index file without updates
m_move_fotoxx_home move fotoxx home folder from default ~/.fotoxx m_move_fotoxx_home move fotoxx home folder from default ~/.fotoxx
m_preferences user preferences and settings dialog m_settings user preferences and settings dialog
m_KB_shortcuts edit keyboard shortcuts m_KB_shortcuts edit keyboard shortcuts
KB_shortcuts_load load KB shortcuts file into memory KB_shortcuts_load load KB shortcuts file into memory
KB_shortcuts_merge merge default + user-defined shortcuts KB_shortcuts_merge merge default + user-defined shortcuts
m_RGB_dist show RGB brightness distribution graph m_RGB_dist show RGB brightness distribution graph
m_magnify magnify the image within a radius of the mouse m_magnify magnify the image within a radius of the mouse
m_duplicates find all duplicated images m_duplicates find all duplicated images
m_measure_image measure distances within an image // 22.35
m_show_RGB show RGB values for clicked image positions m_show_RGB show RGB values for clicked image positions
m_popup_text show popup text for edit widget insertion // 22.15 m_popup_text show popup text for edit widget insertion // 22.15
m_calibrate_printer printer color calibration m_calibrate_printer printer color calibration
print_calibrated print current image file with calibrated colors print_calibrated print current image file with calibrated colors
m_grid_settings configure grid lines m_grid_settings configure grid lines
m_toggle_grid toggle grid lines on/off m_toggle_grid toggle grid lines on/off
m_line_color choose color for foreground lines m_line_color choose color for foreground lines
m_darkbrite highlight darkest and brightest pixels m_darkbrite highlight darkest and brightest pixels
m_monitor_color monitor color and contrast check m_monitor_color monitor color and contrast check
m_monitor_gamma monitor gamma check and adjust m_monitor_gamma monitor gamma check and adjust
skipping to change at line 462 skipping to change at line 463
fid = fopen(image_folders_file,"w"); // create stump index config file fid = fopen(image_folders_file,"w"); // create stump index config file
if (! fid) { // (thumbnails folder only) if (! fid) { // (thumbnails folder only)
zmessageACK(Mwin,"index config file error: %s",strerror(errno)); zmessageACK(Mwin,"index config file error: %s",strerror(errno));
quitxx(); quitxx();
} }
fprintf(fid,"thumbnails: %s\n",thumbfolder); fprintf(fid,"thumbnails: %s\n",thumbfolder);
fclose(fid); fclose(fid);
} }
if (! dirfile(thumbfolder)) { // create thumbnails folder if needed if (! dirfile(thumbfolder)) { // create thumbnails folder if needed
err = zshell("ack","mkdir -p -m 0750 \"%s\" ",thumbfolder); err = zshell("log ack","mkdir -p -m 0750 \"%s\" ",thumbfolder);
if (err) quitxx(); if (err) quitxx();
} }
Nthumb = 1; Nthumb = 1;
Plog(1,"thumbnails folder: \n"); // print thumbnails folder Plog(1,"thumbnails folder: \n"); // print thumbnails folder
Plog(1," %s \n",thumbfolder); Plog(1," %s \n",thumbfolder);
Ntopfolders = 0; // no top image folders Ntopfolders = 0; // no top image folders
Plog(1,"no image index: reports disabled \n"); // no image index Plog(1,"no image index: reports disabled \n"); // no image index
Findexvalid = 0; Findexvalid = 0;
skipping to change at line 494 skipping to change at line 495
goto cleanup; goto cleanup;
} }
cc = strlen(thumbfolder) - 11 ; // check /thumbnails name cc = strlen(thumbfolder) - 11 ; // check /thumbnails name
if (! strmatch(thumbfolder+cc,"/thumbnails")) { if (! strmatch(thumbfolder+cc,"/thumbnails")) {
zmessageACK(Mwin,thumberr,thumbfolder); zmessageACK(Mwin,thumberr,thumbfolder);
goto cleanup; goto cleanup;
} }
if (! dirfile(thumbfolder)) { // create thumbnails folder if needed if (! dirfile(thumbfolder)) { // create thumbnails folder if needed
err = zshell("ack","mkdir -p -m 0750 \"%s\" ",thumbfolder); err = zshell("log ack","mkdir -p -m 0750 \"%s\" ",thumbfolder);
if (err) quitxx(); if (err) quitxx();
} }
for (ii = 0; ii < Ntopfolders; ii++) { // disallow top dir = thumbnail dir for (ii = 0; ii < Ntopfolders; ii++) { // disallow top dir = thumbnail dir
if (strmatch(topfolders[ii],thumbfolder)) { if (strmatch(topfolders[ii],thumbfolder)) {
zmessageACK(Mwin,indexerr2,topfolders[ii]); zmessageACK(Mwin,indexerr2,topfolders[ii]);
goto cleanup; goto cleanup;
} }
} }
skipping to change at line 1093 skipping to change at line 1094
nkey = 12; // add keys for indexed metadata nkey = 12; // add keys for indexed metadata
for (ii = 0; ii < MXmax; ii++) { // from exifkeys[12] for (ii = 0; ii < MXmax; ii++) { // from exifkeys[12]
if (! xmeta_keys[ii]) break; if (! xmeta_keys[ii]) break;
exifkeys[nkey] = xmeta_keys[ii]; exifkeys[nkey] = xmeta_keys[ii];
nkey++; nkey++;
} }
err = exif_get(file,exifkeys,ppv,nkey); // get exif/iptc metadata err = exif_get(file,exifkeys,ppv,nkey); // get exif/iptc metadata
if (err) { if (err) {
Plog(1,"exif_get() failure: %s \n",file); // metadata unreadable Plog(0,"exif_get() failure: %s \n",file); // metadata unreadable
goto exit_thread; goto exit_thread;
} }
exiffile = ppv[0]; // base file name exiffile = ppv[0]; // base file name
pp = strrchr(file,'/'); pp = strrchr(file,'/');
if (! exiffile || ! strmatch(exiffile,pp+1)) { // image file has no metadata if (! exiffile || ! strmatch(exiffile,pp+1)) { // image file has no metadata
Plog(1,"exif_get() no data: %s \n",file); Plog(0,"exif_get() no data: %s \n",file);
goto exit_thread; goto exit_thread;
} }
exifdate = ppv[1]; // exif/iptc metadata returned exifdate = ppv[1]; // exif/iptc metadata returned
iptctags = ppv[2]; // 12 fixed keys iptctags = ppv[2]; // 12 fixed keys
iptcrating = ppv[3]; iptcrating = ppv[3];
exifww = ppv[4]; exifww = ppv[4];
exifhh = ppv[5]; exifhh = ppv[5];
iptctitle = ppv[6]; iptctitle = ppv[6];
iptcdesc = ppv[7]; iptcdesc = ppv[7];
skipping to change at line 1177 skipping to change at line 1178
xxrec_tab[xrec]->flongi = flongi; xxrec_tab[xrec]->flongi = flongi;
} }
xcc = 0; xcc = 0;
for (ii = 12; ii < nkey; ii++) // extra indexed metadata if any for (ii = 12; ii < nkey; ii++) // extra indexed metadata if any
{ {
if (! ppv[ii]) continue; if (! ppv[ii]) continue;
acc = strlen(exifkeys[ii]) + strlen(ppv[ii]) + 3; acc = strlen(exifkeys[ii]) + strlen(ppv[ii]) + 3;
if (acc > 100 || acc + xcc > 998) { // limit each key < 100, all < 1000 if (acc > 100 || acc + xcc > 998) { // limit each key < 100, all < 1000
Plog(1,"indexed metadata too big: %s %s \n",exifkeys[ii],file); Plog(0,"indexed metadata too big: %s %s \n",exifkeys[ii],file);
continue; continue;
} }
strcpy(xmetarec+xcc,exifkeys[ii]); // construct series strcpy(xmetarec+xcc,exifkeys[ii]); // construct series
xcc += strlen(exifkeys[ii]); // "keyname=keydata^ " xcc += strlen(exifkeys[ii]); // "keyname=keydata^ "
xmetarec[xcc++] = '='; xmetarec[xcc++] = '=';
strcpy(xmetarec+xcc,ppv[ii]); strcpy(xmetarec+xcc,ppv[ii]);
xcc += strlen(ppv[ii]); xcc += strlen(ppv[ii]);
strcpy(xmetarec+xcc,"^ "); strcpy(xmetarec+xcc,"^ ");
xcc += 2; xcc += 2;
zfree(ppv[ii]); zfree(ppv[ii]);
skipping to change at line 1296 skipping to change at line 1297
void m_quick_index(GtkWidget *, cchar *) void m_quick_index(GtkWidget *, cchar *)
{ {
char *galleryname = 0; char *galleryname = 0;
F1_help_topic = "quick index"; F1_help_topic = "quick index";
Plog(1,"m_quick_index \n"); Plog(1,"m_quick_index \n");
if (Fblock(0,"blocked edits")) return; // check nothing pending if (Fblock(0,"blocked edits")) return; // check nothing pending
if (navi::galleryname && navi::gallerytype == GDIR) // save current gallery if (navi::galleryname && navi::gallerytype == FOLDER) // save current gallery
galleryname = zstrdup(navi::galleryname,"quick-index"); galleryname = zstrdup(navi::galleryname,"quick-index");
index_rebuild(2,0); // run incremental index index_rebuild(2,0); // run incremental index
if (galleryname) { if (galleryname) {
gallery(galleryname,"init",0); // restore gallery and scroll position gallery(galleryname,"init",0); // restore gallery and scroll position
zfree(galleryname); zfree(galleryname);
gallery_memory("get"); gallery_memory("get");
gallery(0,"paint",-1); gallery(0,"paint",-1);
} }
skipping to change at line 1448 skipping to change at line 1449
zmessageACK(Mwin,"new home same as old home"); zmessageACK(Mwin,"new home same as old home");
goto retry; goto retry;
} }
yn = zmessageYN(Mwin,mess1,oldhome,newhome); // ask user to proceed yn = zmessageYN(Mwin,mess1,oldhome,newhome); // ask user to proceed
if (! yn) goto retry; if (! yn) goto retry;
Plog(1,"%s \n",mess3); // popup "moving files ..." Plog(1,"%s \n",mess3); // popup "moving files ..."
poptext_mouse(mess3,0,0,0,0); poptext_mouse(mess3,0,0,0,0);
err = zshell("ack","cp -p -R %s/* %s",oldhome,newhome); // copy all files from old home to new err = zshell("log ack","cp -p -R %s/* %s",oldhome,newhome); // copy all files from old home to new
if (err) quitxx(); if (err) quitxx();
zmainsleep(2); zmainsleep(2);
poptext_mouse(0,0,0,0,0); // kill popup poptext_mouse(0,0,0,0,0); // kill popup
strcpy(new_image_folders_file,newhome); // construct new image folders file strcpy(new_image_folders_file,newhome); // construct new image folders file
pp = image_folders_file + strlen(oldhome); // from newhome + old file name pp = image_folders_file + strlen(oldhome); // from newhome + old file name
strcat(new_image_folders_file,pp); strcat(new_image_folders_file,pp);
Plog(0,"new image folders file: %s \n",new_image_folders_file); Plog(0,"new image folders file: %s \n",new_image_folders_file);
skipping to change at line 1500 skipping to change at line 1501
new_session(0); // start fotoxx again new_session(0); // start fotoxx again
zsleep(1); // delay before SIGTERM in quitxx() zsleep(1); // delay before SIGTERM in quitxx()
quitxx(); // exit this session quitxx(); // exit this session
return; return;
} }
/******************************************************************************* */ /******************************************************************************* */
// user preferences and settings dialog // user preferences and settings dialog
namespace preferences namespace settings
{ {
cchar *startopt[8][2] = { cchar *startopt[8][2] = {
{ "recent", "Recent Files Gallery" }, // fotoxx startup view options { "recent", "Recent Files Gallery" }, // fotoxx startup view options
{ "newest", "Newest Files Gallery" }, { "newest", "Newest Files Gallery" },
{ "specG", "Specific Gallery" }, { "specG", "Specific Gallery" },
{ "album", "Album Gallery" }, { "album", "Album Gallery" },
{ "prevG", "Previous Gallery" }, { "prevG", "Previous Gallery" },
{ "prevF", "Previous File" }, { "prevF", "Previous File" },
{ "specF", "Specific File" }, { "specF", "Specific File" },
{ "blank", "Blank Window" } }; { "blank", "Blank Window" } };
skipping to change at line 1525 skipping to change at line 1526
{ "LZW", "5" }, { "LZW", "5" },
{ "PACKBITS", "32773" }, { "PACKBITS", "32773" },
{ "DEFLATE", "8" } }; { "DEFLATE", "8" } };
int NTO = 4; int NTO = 4;
int Frestart; int Frestart;
} }
// menu function // menu function
void m_preferences(GtkWidget *, cchar *) void m_settings(GtkWidget *, cchar *)
{ {
using namespace preferences; using namespace settings;
int preferences_dialog_event(zdialog *zd, cchar *event); int settings_dialog_event(zdialog *zd, cchar *event);
zdialog *zd; zdialog *zd;
int ii; int ii;
char txrgb[20], pct_scale[40]; char txrgb[20], pct_scale[40];
snprintf(pct_scale,40,"separation, %c of scale",'%'); // "separation, % of scale" snprintf(pct_scale,40,"separation, %c of scale",'%'); // "separation, % of scale"
/*** /***
____________________________________________________________________ ____________________________________________________________________
| Preferences and Settings | | Preferences and Settings |
skipping to change at line 1557 skipping to change at line 1558
| Pan Mode | (o) drag (o) scroll [x] fast | | Pan Mode | (o) drag (o) scroll [x] fast |
| JPEG files | [ 90 ] quality level | | JPEG files | [ 90 ] quality level |
| TIFF files | [ LZW |v] compression method | | TIFF files | [ LZW |v] compression method |
| Curve Node | [ 5 ] separation, % of scale | | Curve Node | [ 5 ] separation, % of scale |
| Map Markers | [ 9 ] pixel size | | Map Markers | [ 9 ] pixel size |
| Overlay Text | [ 80 ] [ 100 ] line length range (chars) | // 22.18 | Overlay Text | [ 80 ] [ 100 ] line length range (chars) | // 22.18
| Image Position | (o) centered (o) right side | | Image Position | (o) centered (o) right side |
| Confirm Exit | [x] Confirm Fotoxx exit | | Confirm Exit | [x] Confirm Fotoxx exit |
| Index Level | [ 2 ] command (2) [ 1 ] file manager (1) | | Index Level | [ 2 ] command (2) [ 1 ] file manager (1) |
| Log Level | (o) errors (o) info (o) dialog inputs | | Log Level | (o) errors (o) info (o) dialog inputs |
| Max. Threads | [ 8 ] max. working threads | // 22.35
| RAW loader | (o) dcraw (o) Raw Therapee (o) Darktable | | RAW loader | (o) dcraw (o) Raw Therapee (o) Darktable |
| RAW Options | [x] auto brighten [x] embedded image profile | | RAW Options | [x] auto brighten [x] embedded image profile |
| RAW Command | (o) [_____________________________________] | // 22.35
| RAW files | [ .cr2 .dng .raf .nef .orf .mpo .rw2 .raw ] | | RAW files | [ .cr2 .dng .raf .nef .orf .mpo .rw2 .raw ] |
| Video Files | [ .mp4 .mov .wmv .mpeg .mpg .h264 .webm ] | | Video Files | [ .mp4 .mov .wmv .mpeg .mpg .h264 .webm ] |
| Video App | [ vlc |v] | | Video App | [ vlc -q |v] |
| | | |
| [ OK ] | | [ OK ] |
|____________________________________________________________________| |____________________________________________________________________|
***/ ***/
F1_help_topic = "preferences"; F1_help_topic = "settings";
Plog(1,"m_preferences \n"); Plog(1,"m_settings \n");
if (Fblock("preferences","block edits")) return; // check pending, block if (Fblock("settings","block edits")) return; // check pending, block
zd = zdialog_new("Preferences and Settings",Mwin,"OK",null); zd = zdialog_new("Preferences and Settings",Mwin,"OK",null);
// left and right vertical boxes // left and right vertical boxes
zdialog_add_widget(zd,"scrwin","swmain","dialog",0,"expand"); zdialog_add_widget(zd,"scrwin","swmain","dialog",0,"expand");
zdialog_add_widget(zd,"hbox","hb1","swmain"); zdialog_add_widget(zd,"hbox","hb1","swmain");
zdialog_add_widget(zd,"vbox","vb1","hb1",0,"space=2|homog"); zdialog_add_widget(zd,"vbox","vb1","hb1",0,"space=2|homog");
zdialog_add_widget(zd,"vsep","sep1","hb1",0,"space=10"); zdialog_add_widget(zd,"vsep","sep1","hb1",0,"space=10");
zdialog_add_widget(zd,"vbox","vb2","hb1",0,"space=2|homog"); zdialog_add_widget(zd,"vbox","vb2","hb1",0,"space=2|homog");
skipping to change at line 1696 skipping to change at line 1699
zdialog_add_widget(zd,"zspin","fmindexlev","hbxlev","0|2|1|1","size=3"); zdialog_add_widget(zd,"zspin","fmindexlev","hbxlev","0|2|1|1","size=3");
zdialog_add_widget(zd,"label","labfmxlev2","hbxlev","file manager (1)","space =5"); zdialog_add_widget(zd,"label","labfmxlev2","hbxlev","file manager (1)","space =5");
// log level // log level
zdialog_add_widget(zd,"label","log level","vb1","Log Level"); zdialog_add_widget(zd,"label","log level","vb1","Log Level");
zdialog_add_widget(zd,"hbox","hbloglev","vb2"); zdialog_add_widget(zd,"hbox","hbloglev","vb2");
zdialog_add_widget(zd,"radio","logerrs","hbloglev","errors"); zdialog_add_widget(zd,"radio","logerrs","hbloglev","errors");
zdialog_add_widget(zd,"radio","loginfo","hbloglev","+ info messages","space=6 "); zdialog_add_widget(zd,"radio","loginfo","hbloglev","+ info messages","space=6 ");
zdialog_add_widget(zd,"radio","loginputs","hbloglev","+ dialog inputs","space =6"); zdialog_add_widget(zd,"radio","loginputs","hbloglev","+ dialog inputs","space =6");
// max. working threads
// 22.35
zdialog_add_widget(zd,"label","max threads","vb1","Max. Threads");
zdialog_add_widget(zd,"hbox","hbmwt","vb2");
zdialog_add_widget(zd,"zspin","max_threads","hbmwt","2|16|1|4","size=3");
zdialog_add_widget(zd,"label","labmwt","hbmwt","max. working threads","space=
10");
// RAW file loader // RAW file loader
zdialog_add_widget(zd,"label","raw loader","vb1","RAW Loader"); zdialog_add_widget(zd,"label","raw loader","vb1","RAW Loader");
zdialog_add_widget(zd,"hbox","hbrfl","vb2"); zdialog_add_widget(zd,"hbox","hbrfl","vb2");
zdialog_add_widget(zd,"radio","dcraw","hbrfl","dcraw"); zdialog_add_widget(zd,"radio","dcraw","hbrfl","dcraw");
zdialog_add_widget(zd,"radio","rawtherapee","hbrfl","RawTherapee","space=10") ; zdialog_add_widget(zd,"radio","rawtherapee","hbrfl","RawTherapee","space=10") ;
zdialog_add_widget(zd,"radio","darktable","hbrfl","Darktable","space=10"); zdialog_add_widget(zd,"radio","darktable","hbrfl","Darktable","space=8");
zdialog_add_widget(zd,"radio","customraw","hbrfl","Custom Command","space=8")
;
// custom RAW command
// 22.35
zdialog_add_widget(zd,"label","raw command","vb1"," ");
zdialog_add_widget(zd,"hbox","hbrc","vb2");
zdialog_add_widget(zd,"zentry","rawcommand","hbrc","...","space=5|size=50");
// RAW conversion options // RAW conversion options
zdialog_add_widget(zd,"label","raw options","vb1","RAW Options"); zdialog_add_widget(zd,"label","raw options","vb1","RAW Options");
zdialog_add_widget(zd,"hbox","hbrc","vb2"); zdialog_add_widget(zd,"hbox","hbrc","vb2");
zdialog_add_widget(zd,"check","autobright","hbrc","auto brighten"); zdialog_add_widget(zd,"check","autobright","hbrc","auto brighten");
zdialog_add_widget(zd,"check","matchthumb","hbrc","embedded image profile","s pace=10"); zdialog_add_widget(zd,"check","matchthumb","hbrc","embedded image profile","s pace=10");
// RAW file types // RAW file types
zdialog_add_widget(zd,"label","raw files","vb1","RAW Files"); zdialog_add_widget(zd,"label","raw files","vb1","RAW Files");
zdialog_add_widget(zd,"hbox","hbrft","vb2"); zdialog_add_widget(zd,"hbox","hbrft","vb2");
skipping to change at line 1805 skipping to change at line 1820
zdialog_stuff(zd,"indexlev",Findexlev); // index level, always zdialog_stuff(zd,"indexlev",Findexlev); // index level, always
zdialog_stuff(zd,"fmindexlev",FMindexlev); // index level, file manager call zdialog_stuff(zd,"fmindexlev",FMindexlev); // index level, file manager call
zdialog_stuff(zd,"logerrs",0); // message log level zdialog_stuff(zd,"logerrs",0); // message log level
zdialog_stuff(zd,"loginfo",0); zdialog_stuff(zd,"loginfo",0);
zdialog_stuff(zd,"loginputs",0); zdialog_stuff(zd,"loginputs",0);
if (zfuncs::Floglevel == 0) zdialog_stuff(zd,"logerrs",1); if (zfuncs::Floglevel == 0) zdialog_stuff(zd,"logerrs",1);
if (zfuncs::Floglevel == 1) zdialog_stuff(zd,"loginfo",1); if (zfuncs::Floglevel == 1) zdialog_stuff(zd,"loginfo",1);
if (zfuncs::Floglevel == 2) zdialog_stuff(zd,"loginputs",1); if (zfuncs::Floglevel == 2) zdialog_stuff(zd,"loginputs",1);
zdialog_stuff(zd,"max_threads",NWT);
// max. working threads 22.35
zdialog_stuff(zd,"dcraw",0); // RAW loader zdialog_stuff(zd,"dcraw",0); // RAW loader
zdialog_stuff(zd,"rawtherapee",0); zdialog_stuff(zd,"rawtherapee",0);
zdialog_stuff(zd,"darktable",0); zdialog_stuff(zd,"darktable",0);
zdialog_stuff(zd,"customraw",0);
if (Frawloader == 1) zdialog_stuff(zd,"dcraw",1); if (Frawloader == 1) zdialog_stuff(zd,"dcraw",1);
if (Frawloader == 2) zdialog_stuff(zd,"rawtherapee",1); if (Frawloader == 2) zdialog_stuff(zd,"rawtherapee",1);
if (Frawloader == 3) zdialog_stuff(zd,"darktable",1); if (Frawloader == 3) zdialog_stuff(zd,"darktable",1);
if (Frawloader == 4) zdialog_stuff(zd,"customraw",1);
// custom RAW loader command 22.35
zdialog_stuff(zd,"rawcommand",rawcommand);
// custom RAW loader command 22.35
zdialog_stuff(zd,"autobright",Fautobright); // RAW loader, auto-brighten option zdialog_stuff(zd,"autobright",Fautobright); // RAW loader, auto-brighten option
zdialog_stuff(zd,"matchthumb",Fmatchthumb); // " " match embedded image color zdialog_stuff(zd,"matchthumb",Fmatchthumb); // " " match embedded image color
zdialog_stuff(zd,"rawtypes",RAWfiletypes); // RAW file types zdialog_stuff(zd,"rawtypes",RAWfiletypes); // RAW file types
zdialog_stuff(zd,"videotypes",VIDEOfiletypes); // VIDEO file types zdialog_stuff(zd,"videotypes",VIDEOfiletypes); // VIDEO file types
zdialog_stuff(zd,"videocomm",video_command); // video play command 22.1 zdialog_stuff(zd,"videocomm",video_command); // video play command 22.1
Frestart = 0; // some changes require restart Frestart = 0; // some changes require restart
// run dialog and wait for completion // run dialog and wait for completion
zdialog_resize(zd,500,500); zdialog_resize(zd,500,500);
zmainloop(); // GTK bug - help widgets resize zmainloop(); // GTK bug - help widgets resize
zdialog_run(zd,preferences_dialog_event,"save"); // run dialog and wait for completion zdialog_run(zd,settings_dialog_event,"save"); // run dialog and wait for completion
zdialog_wait(zd); zdialog_wait(zd);
zdialog_free(zd); zdialog_free(zd);
save_params(); // save parameter changes 22.18 save_params(); // save parameter changes 22.18
gtk_window_present(MWIN); // refresh window gtk_window_present(MWIN); // refresh window
Fblock("preferences",0); Fblock("settings",0);
if (Frestart) { // start new session if needed if (Frestart) { // start new session if needed
new_session(0); new_session(0);
zsleep(1); // delay before SIGTERM in quitxx() zsleep(1); // delay before SIGTERM in quitxx()
quitxx(); quitxx();
} }
return; return;
} }
// preferences dialog event function // settings dialog event function
int preferences_dialog_event(zdialog *zd, cchar *event) // simplifications 22.16 int settings_dialog_event(zdialog *zd, cchar *event) // simplifications 22.16
{ {
using namespace preferences; using namespace settings;
int ii, jj, nn; int ii, jj, nn;
char *pp, temp[200]; char *pp, temp[200];
cchar *ppc; cchar *ppc;
char txrgb[20]; char txrgb[20];
GtkWidget *font_dialog; GtkWidget *font_dialog;
printf("event: %s \n",event); /////////////
if (strmatch(event,"escape")) zd->zstat = -2; // escape key if (strmatch(event,"escape")) zd->zstat = -2; // escape key
if (zd->zstat) return 1; // [OK] or [x] if (zd->zstat) return 1; // [OK] or [x]
if (strmatch(event,"startopt")) // set startup view if (strmatch(event,"startopt")) // set startup view
{ {
zdialog_fetch(zd,"startopt",temp,200); zdialog_fetch(zd,"startopt",temp,200);
for (ii = 0; ii < NSO; ii++) { for (ii = 0; ii < NSO; ii++) {
if (strmatch(temp,startopt[ii][1])) if (strmatch(temp,startopt[ii][1]))
zstrcopy(startdisplay,startopt[ii][0],"params"); zstrcopy(startdisplay,startopt[ii][0],"settings");
} }
} }
if (strmatch(event,"startopt-browse")) // browse for startup folder or file if (strmatch(event,"startopt-browse")) // browse for startup folder or file
{ {
if (strmatch(startdisplay,"specG")) { // set startup gallery if (strmatch(startdisplay,"specG")) { // set startup gallery
if (! startfolder && topfolders[0]) if (! startfolder && topfolders[0])
startfolder = zstrdup(topfolders[0],"params"); // default startfolder = zstrdup(topfolders[0],"settings"); // default
pp = zgetfile("Select startup folder",MWIN,"folder",startfolder); pp = zgetfile("Select startup folder",MWIN,"folder",startfolder);
if (! pp) return 1; if (! pp) return 1;
if (image_file_type(pp) != FDIR) { if (image_file_type(pp) != FDIR) {
zmessageACK(Mwin,"startup folder is invalid"); zmessageACK(Mwin,"startup folder is invalid");
zfree(pp); zfree(pp);
return 1; return 1;
} }
if (startfolder) zfree(startfolder); if (startfolder) zfree(startfolder);
startfolder = pp; startfolder = pp;
} }
skipping to change at line 1934 skipping to change at line 1957
if (ppc) GBrgb[0] = atoi(ppc); if (ppc) GBrgb[0] = atoi(ppc);
ppc = substring(txrgb,"|",2); ppc = substring(txrgb,"|",2);
if (ppc) GBrgb[1] = atoi(ppc); if (ppc) GBrgb[1] = atoi(ppc);
ppc = substring(txrgb,"|",3); ppc = substring(txrgb,"|",3);
if (ppc) GBrgb[2] = atoi(ppc); if (ppc) GBrgb[2] = atoi(ppc);
} }
if (strstr("icons text both iconsize",event)) // menu options if (strstr("icons text both iconsize",event)) // menu options
{ {
zdialog_fetch(zd,"icons",nn); // menu style = icons zdialog_fetch(zd,"icons",nn); // menu style = icons
if (nn) zstrcopy(menu_style,"icons","params"); if (nn) zstrcopy(menu_style,"icons","settings");
zdialog_fetch(zd,"text",nn); // menu style = text zdialog_fetch(zd,"text",nn); // menu style = text
if (nn) zstrcopy(menu_style,"text","params"); if (nn) zstrcopy(menu_style,"text","settings");
zdialog_fetch(zd,"both",nn); // menu style = icons + text zdialog_fetch(zd,"both",nn); // menu style = icons + text
if (nn) zstrcopy(menu_style,"both","params"); if (nn) zstrcopy(menu_style,"both","settings");
zdialog_fetch(zd,"iconsize",nn); // icon size zdialog_fetch(zd,"iconsize",nn); // icon size
if (nn != iconsize) { if (nn != iconsize) {
iconsize = nn; iconsize = nn;
} }
Frestart = 1; Frestart = 1;
} }
if (strstr("MFrgb MBrgb",event)) if (strstr("MFrgb MBrgb",event))
skipping to change at line 1982 skipping to change at line 2005
{ {
zdialog_fetch(zd,"font",temp,200); zdialog_fetch(zd,"font",temp,200);
font_dialog = gtk_font_chooser_dialog_new("select font",MWIN); font_dialog = gtk_font_chooser_dialog_new("select font",MWIN);
gtk_font_chooser_set_font(GTK_FONT_CHOOSER(font_dialog),temp); gtk_font_chooser_set_font(GTK_FONT_CHOOSER(font_dialog),temp);
gtk_dialog_run(GTK_DIALOG(font_dialog)); gtk_dialog_run(GTK_DIALOG(font_dialog));
pp = gtk_font_chooser_get_font(GTK_FONT_CHOOSER(font_dialog)); pp = gtk_font_chooser_get_font(GTK_FONT_CHOOSER(font_dialog));
gtk_widget_destroy(font_dialog); gtk_widget_destroy(font_dialog);
if (! pp) return 1; if (! pp) return 1;
zdialog_stuff(zd,"font",pp); zdialog_stuff(zd,"font",pp);
zsetfont(pp); zsetfont(pp);
dialog_font = zstrdup(pp,"params"); dialog_font = zstrdup(pp,"settings");
g_free(pp); g_free(pp);
} }
if (strmatch(event,"zoomcount")) if (strmatch(event,"zoomcount"))
{ {
zdialog_fetch(zd,"zoomcount",zoomcount); // zooms for 2x image size zdialog_fetch(zd,"zoomcount",zoomcount); // zooms for 2x image size
zoomratio = pow( 2.0, 1.0 / zoomcount); // 2.0, 1.4142, 1.2599, 1.1892 ... zoomratio = pow( 2.0, 1.0 / zoomcount); // 2.0, 1.4142, 1.2599, 1.1892 ...
} }
if (strstr("drag scroll fast",event)) // drag/scroll option if (strstr("drag scroll fast",event)) // drag/scroll option
skipping to change at line 2027 skipping to change at line 2050
if (strmatch(event,"ovtxcc0")) // overlay text line cc range 22.18 if (strmatch(event,"ovtxcc0")) // overlay text line cc range 22.18
zdialog_fetch(zd,"ovtxcc0",ovtxcc[0]); zdialog_fetch(zd,"ovtxcc0",ovtxcc[0]);
if (strmatch(event,"ovtxcc1")) if (strmatch(event,"ovtxcc1"))
zdialog_fetch(zd,"ovtxcc1",ovtxcc[1]); zdialog_fetch(zd,"ovtxcc1",ovtxcc[1]);
if (strstr("ipleft ipcenter ipright",event)) // image position in wider window 22.18 if (strstr("ipleft ipcenter ipright",event)) // image position in wider window 22.18
{ {
zdialog_fetch(zd,"ipleft",nn); zdialog_fetch(zd,"ipleft",nn);
if (nn) zstrcopy(ImagePosn,"left","params"); if (nn) zstrcopy(ImagePosn,"left","settings");
zdialog_fetch(zd,"ipcenter",nn); zdialog_fetch(zd,"ipcenter",nn);
if (nn) zstrcopy(ImagePosn,"center","params"); if (nn) zstrcopy(ImagePosn,"center","settings");
zdialog_fetch(zd,"ipright",nn); zdialog_fetch(zd,"ipright",nn);
if (nn) zstrcopy(ImagePosn,"right","params"); if (nn) zstrcopy(ImagePosn,"right","settings");
} }
if (strmatch(event,"askquit")) // ask to quit option if (strmatch(event,"askquit")) // ask to quit option
zdialog_fetch(zd,"askquit",Faskquit); zdialog_fetch(zd,"askquit",Faskquit);
if (strstr("indexlev fmindexlev",event)) // index level, if (strstr("indexlev fmindexlev",event)) // index level,
{ {
zdialog_fetch(zd,"indexlev",Findexlev); // fotoxx started directly zdialog_fetch(zd,"indexlev",Findexlev); // fotoxx started directly
zdialog_fetch(zd,"fmindexlev",FMindexlev); // fotoxx started via file manager zdialog_fetch(zd,"fmindexlev",FMindexlev); // fotoxx started via file manager
if (Findexlev < FMindexlev) Findexlev = FMindexlev; // disallow F < FM if (Findexlev < FMindexlev) Findexlev = FMindexlev; // disallow F < FM
skipping to change at line 2054 skipping to change at line 2077
if (strstr("logerrs loginfo loginputs",event)) // log message level if (strstr("logerrs loginfo loginputs",event)) // log message level
{ {
zdialog_fetch(zd,"logerrs",nn); zdialog_fetch(zd,"logerrs",nn);
if (nn == 1) zfuncs::Floglevel = 0; // 0/1/2 = errors/info/inputs if (nn == 1) zfuncs::Floglevel = 0; // 0/1/2 = errors/info/inputs
zdialog_fetch(zd,"loginfo",nn); zdialog_fetch(zd,"loginfo",nn);
if (nn == 1) zfuncs::Floglevel = 1; if (nn == 1) zfuncs::Floglevel = 1;
zdialog_fetch(zd,"loginputs",nn); zdialog_fetch(zd,"loginputs",nn);
if (nn == 1) zfuncs::Floglevel = 2; if (nn == 1) zfuncs::Floglevel = 2;
} }
if (strstr("dcraw rawtherapee darktable",event)) if (strmatch(event,"max_threads")) {
// RAW loader selection // max. working threads 22.35
zdialog_fetch(zd,"max_threads",NWT);
NST = NWT;
// server threads
}
if (strstr("dcraw rawtherapee darktable customraw",event))
// RAW loader selection
{ {
zdialog_fetch(zd,"dcraw",nn); zdialog_fetch(zd,"dcraw",nn);
if (nn == 1) Frawloader = 1; if (nn == 1) Frawloader = 1;
zdialog_fetch(zd,"rawtherapee",nn); zdialog_fetch(zd,"rawtherapee",nn);
if (nn == 1) { if (nn == 1) {
if (! Frawtherapeecli) { if (! Frawtherapeecli) {
zmessageACK(Mwin,"rawtherapee-cli (Raw Therapee) is not installed"); zmessageACK(Mwin,"rawtherapee-cli (Raw Therapee) is not installed");
zdialog_stuff(zd,"dcraw",1); zdialog_stuff(zd,"dcraw",1);
zdialog_stuff(zd,"rawtherapee",0); zdialog_stuff(zd,"rawtherapee",0);
skipping to change at line 2080 skipping to change at line 2108
zdialog_fetch(zd,"darktable",nn); zdialog_fetch(zd,"darktable",nn);
if (nn == 1) { if (nn == 1) {
if (! Fdarktablecli) { if (! Fdarktablecli) {
zmessageACK(Mwin,"darktable-cli (Darktable) is not installed"); zmessageACK(Mwin,"darktable-cli (Darktable) is not installed");
zdialog_stuff(zd,"dcraw",1); zdialog_stuff(zd,"dcraw",1);
zdialog_stuff(zd,"darktable",0); zdialog_stuff(zd,"darktable",0);
Frawloader = 1; Frawloader = 1;
} }
else Frawloader = 3; else Frawloader = 3;
} }
zdialog_fetch(zd,"customraw",nn);
// custom RAW file loader command 22.35
if (nn == 1) Frawloader = 4;
} }
zdialog_fetch(zd,"rawcommand",temp,200);
// save user RAW loader command
rawcommand = zstrdup(temp,"settings");
if (strmatch(event,"autobright")) // RAW file processing options if (strmatch(event,"autobright")) // RAW file processing options
{ {
zdialog_fetch(zd,"autobright",Fautobright); zdialog_fetch(zd,"autobright",Fautobright);
if (Fautobright) { if (Fautobright) {
Fmatchthumb = 0; // if selected, deselect alternative Fmatchthumb = 0; // if selected, deselect alternative
zdialog_stuff(zd,"matchthumb",Fmatchthumb); zdialog_stuff(zd,"matchthumb",Fmatchthumb);
} }
} }
if (strmatch(event,"matchthumb")) if (strmatch(event,"matchthumb"))
skipping to change at line 2103 skipping to change at line 2137
zdialog_fetch(zd,"matchthumb",Fmatchthumb); zdialog_fetch(zd,"matchthumb",Fmatchthumb);
if (Fmatchthumb) { if (Fmatchthumb) {
Fautobright = 0; // if selected, deselect alternative Fautobright = 0; // if selected, deselect alternative
zdialog_stuff(zd,"autobright",Fautobright); zdialog_stuff(zd,"autobright",Fautobright);
} }
} }
if (strmatch(event,"rawtypes")) // RAW file types, .raw .rw2 ... if (strmatch(event,"rawtypes")) // RAW file types, .raw .rw2 ...
{ {
zdialog_fetch(zd,"rawtypes",temp,200); zdialog_fetch(zd,"rawtypes",temp,200);
pp = zstrdup(temp,"params",100); pp = zstrdup(temp,"settings",100);
for (ii = jj = 0; temp[ii]; ii++) { // insure blanks between types for (ii = jj = 0; temp[ii]; ii++) { // insure blanks between types
if (temp[ii] == '.' && ii && temp[ii-1] != ' ') pp[jj++] = ' '; // 22.16 if (temp[ii] == '.' && ii && temp[ii-1] != ' ') pp[jj++] = ' '; // 22.16
pp[jj++] = temp[ii]; pp[jj++] = temp[ii];
} }
if (pp[jj-1] != ' ') pp[jj++] = ' '; // insure 1 final blank if (pp[jj-1] != ' ') pp[jj++] = ' '; // insure 1 final blank
pp[jj] = 0; pp[jj] = 0;
if (RAWfiletypes) zfree(RAWfiletypes); if (RAWfiletypes) zfree(RAWfiletypes);
RAWfiletypes = pp; RAWfiletypes = pp;
} }
if (strmatch(event,"videotypes")) // VIDEO file types, .mp4 .mov ... if (strmatch(event,"videotypes")) // VIDEO file types, .mp4 .mov ...
{ {
zdialog_fetch(zd,"videotypes",temp,200); zdialog_fetch(zd,"videotypes",temp,200);
pp = zstrdup(temp,"params",100); pp = zstrdup(temp,"settings",100);
for (ii = jj = 0; temp[ii]; ii++) { // insure blanks between types for (ii = jj = 0; temp[ii]; ii++) { // insure blanks between types
if (temp[ii] == '.' && ii && temp[ii-1] != ' ') pp[jj++] = ' '; // 22.16 if (temp[ii] == '.' && ii && temp[ii-1] != ' ') pp[jj++] = ' '; // 22.16
pp[jj++] = temp[ii]; pp[jj++] = temp[ii];
} }
if (pp[jj-1] != ' ') pp[jj++] = ' '; // insure 1 final blank if (pp[jj-1] != ' ') pp[jj++] = ' '; // insure 1 final blank
pp[jj] = 0; pp[jj] = 0;
if (VIDEOfiletypes) zfree(VIDEOfiletypes); if (VIDEOfiletypes) zfree(VIDEOfiletypes);
VIDEOfiletypes = pp; VIDEOfiletypes = pp;
} }
if (strmatch(event,"videocomm")) // user-selected video command if (strmatch(event,"videocomm")) // user-selected video command
{ {
zdialog_fetch(zd,"videocomm",temp,200); zdialog_fetch(zd,"videocomm",temp,200);
zstrcopy(video_command,temp,"params"); zstrcopy(video_command,temp,"settings");
} }
return 1; return 1;
} }
/******************************************************************************* */ /******************************************************************************* */
// keyboard shortcuts // keyboard shortcuts
namespace KBshortcutnames namespace KBshortcutnames
{ {
zdialog *zd; zdialog *zd;
int Nreserved = 21; // reserved shortcuts (hard coded) int Nreserved = 21; // reserved shortcuts (hard coded)
cchar *reserved[21] = { cchar *reserved[21] = {
"+", "=", "-", "Z", "F1", "F2", "F3", "F4", "F10", "F11", "+", "=", "-", "Z", "F1", "F2", "F3", "F4", "F10", "F11",
"Escape", "Delete", "Left", "Right", "Up", "Down", "First", "Last", "Escape", "Delete", "Left", "Right", "Up", "Down", "Home", "End",
"Page_Up", "Page_Down", "Open" }; "Page_Up", "Page_Down", "Open" };
kbsutab_t kbsutab2[maxkbsu]; // KB shortcuts list during editing kbsutab_t kbsutab2[maxkbsu]; // KB shortcuts list during editing
int Nkbsu2; int Nkbsu2;
} }
// KB shortcuts menu function // KB shortcuts menu function
void m_KB_shortcuts(GtkWidget *, cchar *) void m_KB_shortcuts(GtkWidget *, cchar *)
{ {
skipping to change at line 3173 skipping to change at line 3207
int Fallfiles, Fgallery; int Fallfiles, Fgallery;
} }
// menu function // menu function
void m_duplicates(GtkWidget *, const char *) void m_duplicates(GtkWidget *, const char *)
{ {
using namespace duplicates_names; using namespace duplicates_names;
int duplicates_dialog_event(zdialog *zd, cchar *event); int duplicates_dialog_event(zdialog *zd, cchar *event);
void randomize(); void duplicates_randomize();
PIXBUF *pxb; PIXBUF *pxb;
GError *gerror; GError *gerror;
uint8 *pixels, *pix1; uint8 *pixels, *pix1;
uint8 *pixelsii, *pixelsjj, *pixii, *pixjj; uint8 *pixelsii, *pixelsjj, *pixii, *pixjj;
FILE *fid = 0; FILE *fid = 0;
zdialog *zd; zdialog *zd;
int Ndups = 0; // image file and duplicate counts int Ndups = 0; // image file and duplicate counts
int thumbsize, pixdiff, pixcount; int thumbsize, pixdiff, pixcount;
int zstat, ii, jj, kk, cc, err, ndup; int zstat, ii, jj, kk, cc, err, ndup;
skipping to change at line 3215 skipping to change at line 3249
zmessageACK(Mwin,"image index disabled"); // no image index zmessageACK(Mwin,"image index disabled"); // no image index
return; return;
} }
if (Fblock("duplicates","block edits")) return; // check pending, block if (Fblock("duplicates","block edits")) return; // check pending, block
m_viewmode(0,"G"); // gallery view mode m_viewmode(0,"G"); // gallery view mode
free_resources(); free_resources();
// randomize(); 1-shot test function // duplicates_randomize(); 1-shot test function
/*** /***
_______________________________________________ _______________________________________________
| Find Duplicate Images | | Find Duplicate Images |
| | | |
| (o) All files (o) Current gallery | | (o) All files (o) Current gallery |
| File count: nnnn | | File count: nnnn |
| | | |
| thumbnail size [ 64 ] [calculate] | | thumbnail size [ 64 ] [calculate] |
| pixel difference [ 2 ] pixel count [ 2 ] | | pixel difference [ 2 ] pixel count [ 2 ] |
skipping to change at line 3333 skipping to change at line 3367
if (! files[ii]) continue; if (! files[ii]) continue;
Tdata[ii] = (Tdata_t *) zmalloc(sizeof(Tdata_t),"duplicates"); Tdata[ii] = (Tdata_t *) zmalloc(sizeof(Tdata_t),"duplicates");
Tdata[ii]->file = files[ii]; // thumbnail file Tdata[ii]->file = files[ii]; // thumbnail file
files[ii] = 0; files[ii] = 0;
kk = thumbsize; kk = thumbsize;
gerror = 0; // read thumbnail >> pixbuf gerror = 0; // read thumbnail >> pixbuf
pxb = gdk_pixbuf_new_from_file_at_size(Tdata[ii]->file,kk,kk,&gerror); pxb = gdk_pixbuf_new_from_file_at_size(Tdata[ii]->file,kk,kk,&gerror);
if (! pxb) { if (! pxb) {
Plog(1,"file: %s \n %s",Tdata[ii]->file,gerror->message); Plog(0,"file: %s \n %s",Tdata[ii]->file,gerror->message);
zfree(Tdata[ii]->file); zfree(Tdata[ii]->file);
zfree(Tdata[ii]); zfree(Tdata[ii]);
Tdata[ii] = 0; Tdata[ii] = 0;
continue; continue;
} }
ww = gdk_pixbuf_get_width(pxb); // pixbuf dimensions ww = gdk_pixbuf_get_width(pxb); // pixbuf dimensions
hh = gdk_pixbuf_get_height(pxb); hh = gdk_pixbuf_get_height(pxb);
rs = gdk_pixbuf_get_rowstride(pxb); rs = gdk_pixbuf_get_rowstride(pxb);
pixels = gdk_pixbuf_get_pixels(pxb); pixels = gdk_pixbuf_get_pixels(pxb);
skipping to change at line 3608 skipping to change at line 3642
} }
if (! zd->zstat) return 1; // wait for user input if (! zd->zstat) return 1; // wait for user input
if (zd->zstat != 1) Fkillfunc = 1; // [cancel] or [x] if (zd->zstat != 1) Fkillfunc = 1; // [cancel] or [x]
return 1; // [proceed] return 1; // [proceed]
} }
// Make small random changes to all images. // Make small random changes to all images.
// Used for testing and benchmarking Find Duplicates. // Used for testing and benchmarking Find Duplicates.
void randomize() void duplicates_randomize()
{ {
using namespace duplicates_names; using namespace duplicates_names;
char *file; char *file;
int px, py; int px, py;
int ii, jj, kk; int ii, jj, kk;
float *pixel; float *pixel;
for (ii = 0; ii < Nxxrec; ii++) // loop all files for (ii = 0; ii < Nxxrec; ii++) // loop all files
{ {
skipping to change at line 3653 skipping to change at line 3687
PXM_free(E0pxm); PXM_free(E0pxm);
zfree(file); zfree(file);
} }
return; return;
} }
/******************************************************************************* */ /******************************************************************************* */
// Show the last two pixel positions clicked and the distance between.
namespace measure_image_names
{
zdialog *zd;
int p1x, p1y, p2x, p2y;
int dx, dy, dh;
int Npix;
}
void measure_image_mousefunc();
// menu function
void m_measure_image(GtkWidget *, cchar *)
{
using namespace measure_image_names;
int measure_image_dialog_event(zdialog *zd, cchar *event);
cchar *mess = "Click image to select pixels";
F1_help_topic = "measure image";
Plog(1,"m_measure_image \n");
if (! curr_file) return;
// no image file
m_viewmode(0,"F");
// file view mode
/***
______________________________________
| Measure Image |
| |
| Click image to select pixels |
| |
| Pixel A: xxxx xxxx B: xxxx xxxx |
| Distance X: xxxx Y: xxxx H: xxxx |
| |
| [ OK ] |
|______________________________________|
***/
zd = zdialog_new("Measure Image",Mwin,"OK",null);
zdialog_add_widget(zd,"hbox","hbmess","dialog",0,"space=3");
zdialog_add_widget(zd,"label","labmess","hbmess",mess,"space=5");
zdialog_add_widget(zd,"hbox","hbpix","dialog");
zdialog_add_widget(zd,"label","labpix","hbpix","Pixel A: 0000 0000 Pixel B:
0000 0000","space=3");
zdialog_add_widget(zd,"hbox","hbdist","dialog");
zdialog_add_widget(zd,"label","labdist","hbdist","Distance X: 0000 Y: 0000
H: 0000","space=3");
zdialog_run(zd,measure_image_dialog_event,"save");
// run dialog
takeMouse(measure_image_mousefunc,dotcursor);
// connect mouse function
Npix = 0;
// no clicked pixel positions yet
p1x = p1y = p2x = p2y = 0;
dx = dy = dh = 0;
return;
}
// dialog event and completion function
int measure_image_dialog_event(zdialog *zd, cchar *event)
{
using namespace measure_image_names;
if (zd->zstat) {
// [OK] or [x]
freeMouse();
// disconnect mouse function
zdialog_free(zd);
// kill dialog
erase_toptext(102);
// clear pixel labels
Fpaint2();
return 1;
}
if (strmatch(event,"focus"))
// toggle mouse capture
takeMouse(measure_image_mousefunc,dotcursor);
// connect mouse function
return 1;
}
// mouse function
void measure_image_mousefunc()
{
using namespace measure_image_names;
char text[100];
if (! LMclick) return;
// left click
LMclick = 0;
if (Npix == 0) {
// first clicked pixel
Npix = 1;
p1x = Mxclick;
p1y = Myclick;
add_toptext(102,p1x,p1y,"A","Sans 8");
Fpaint2();
}
else if (Npix == 1) {
// 2nd clicked pixel
Npix = 2;
p2x = Mxclick;
p2y = Myclick;
}
else if (Npix == 2) {
// next clicked pixel
p1x = p2x;
// pixel 2 --> pixel 1
p1y = p2y;
p2x = Mxclick;
// new pixel --> pixel 2
p2y = Myclick;
}
if (Npix < 2) return;
erase_toptext(102);
add_toptext(102,p1x,p1y,"A","Sans 8");
add_toptext(102,p2x,p2y,"B","Sans 8");
Fpaint2();
dx = abs(p1x - p2x);
dy = abs(p1y - p2y);
dh = sqrt(dx*dx + dy*dy) + 0.5;
snprintf(text,100,"Pixel A: %d %d Pixel B: %d %d",p1x,p1y,p2x,p2y);
zdialog_stuff(zd,"labpix",text);
snprintf(text,100,"Distance X: %d Y: %d H: %d",dx,dy,dh);
zdialog_stuff(zd,"labdist",text);
return;
}
/*******************************************************************************
*/
// Show RGB values for 1-9 pixels selected with mouse-clicks. // Show RGB values for 1-9 pixels selected with mouse-clicks.
// Additional pixel position tracks active mouse position // Additional pixel position tracks active mouse position
void show_RGB_mousefunc(); void show_RGB_mousefunc();
int show_RGB_timefunc(void *); int show_RGB_timefunc(void *);
zdialog *RGBSzd; zdialog *RGBSzd;
int RGBSpixel[10][2]; // 0-9 clicked pixels + current mouse int RGBSpixel[10][2]; // 0-9 clicked pixels + current mouse
int RGBSnpix = 0; // no. clicked pixels, 0-9 int RGBSnpix = 0; // no. clicked pixels, 0-9
int RGBSdelta = 0; // abs/delta mode int RGBSdelta = 0; // abs/delta mode
skipping to change at line 5193 skipping to change at line 5365
Plog(1,"m_appimage_files \n"); Plog(1,"m_appimage_files \n");
if (! getenv("HERE")) { if (! getenv("HERE")) {
zmessageACK(Mwin,"not an appimage build"); zmessageACK(Mwin,"not an appimage build");
return; return;
} }
folder = zgetfile("save location",MWIN,"folder",getenv("HOME"),0); folder = zgetfile("save location",MWIN,"folder",getenv("HOME"),0);
if (! folder) return; if (! folder) return;
zshell(0,"cp -R $HERE/usr/share/doc/fotoxx/ %s",folder); zshell("log ack","cp -R $HERE/usr/share/doc/fotoxx/ %s",folder);
zshell(0,"cp -R $HERE/usr/share/fotoxx/data/ %s",folder); zshell("log ack","cp -R $HERE/usr/share/fotoxx/data/ %s",folder);
return; return;
} }
/******************************************************************************* */ /******************************************************************************* */
// uninstall appimage package // uninstall appimage package
void m_appimage_unstall(GtkWidget *, cchar *) void m_appimage_unstall(GtkWidget *, cchar *)
{ {
 End of changes. 52 change blocks. 
43 lines changed or deleted 246 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)