diff --git a/rtdata/languages/default b/rtdata/languages/default index 993c27bf5..3d2f1bbcd 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -601,9 +601,15 @@ PROFILEPANEL_TOOLTIPCOPY;Copy current profile to clipboard PROFILEPANEL_TOOLTIPLOAD;Load a profile from file PROFILEPANEL_TOOLTIPPASTE; Paste profile from clipboard PROFILEPANEL_TOOLTIPSAVE;Save current profile +PROGRESSBAR_BADPIXELS;Bad pixels... +PROGRESSBAR_CACORRECTION;CA correction... +PROGRESSBAR_DARKFRAME;Darkframe... PROGRESSBAR_DECODING;Decoding raw file... PROGRESSBAR_DEMOSAICING;Demosaicing... +PROGRESSBAR_GREENEQUIL;Green equilibrate... +PROGRESSBAR_LINEDENOISE;Line Denoise... PROGRESSBAR_LOADING;Loading Image... +PROGRESSBAR_LOADINGTHUMBS;Loading thumbnails... PROGRESSBAR_LOADJPEG;Loading JPEG file... PROGRESSBAR_LOADPNG;Loading PNG file... PROGRESSBAR_LOADTIFF;Loading TIFF file... @@ -612,10 +618,7 @@ PROGRESSBAR_READY;Ready. PROGRESSBAR_SAVEJPEG;Saving JPEG file... PROGRESSBAR_SAVEPNG;Saving PNG file... PROGRESSBAR_SAVETIFF;Saving TIFF file... -PROGRESSDLG_LOADING;Loading file... -PROGRESSDLG_PROCESSING;Processing image... PROGRESSDLG_PROFILECHANGEDINBROWSER;Profile changed in browser -PROGRESSDLG_SAVING;Saving file... QINFO_FOCALLENGTH;Focal length QINFO_ISO;ISO QINFO_LENS;Lens diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index 8403c8adf..106b255ed 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -467,10 +467,8 @@ void RawImageSource::CA_correct_RT(double cared, double cablue) { //data structure: blockshifts[blocknum][R/B][v/h] //if (c==0) printf("vblock= %d hblock= %d blockshiftsmedian= %f \n",vblock,hblock,blockshifts[(vblock)*hblsz+hblock][c][0]); } - - if(plistener) plistener->setProgress(0.5*fabs((float)top/height)); - } + if(plistener) plistener->setProgress(0.16 + 0.02*(double)(top+border)/height); } //end of diagnostic pass @@ -587,7 +585,7 @@ void RawImageSource::CA_correct_RT(double cared, double cablue) { // Main algorithm: Tile loop //#pragma omp parallel for shared(image,height,width) private(top,left,indx,indx1) schedule(dynamic) - for (top=-border, vblock=1; top < height; top += TS-border2, vblock++) + for (top=-border, vblock=1; top < height; top += TS-border2, vblock++){ for (left=-border, hblock=1; left < width; left += TS-border2, hblock++) { int bottom = MIN( top+TS,height+border); int right = MIN(left+TS, width+border); @@ -825,11 +823,9 @@ void RawImageSource::CA_correct_RT(double cared, double cablue) { //image[indx][c] = CLIP((int)(65535.0*rgb[(rr)*TS+cc][c] + 0.5));//for dcraw implementation } - - if(plistener) plistener->setProgress(0.5+0.5*fabs((float)top/height)); - } - + if(plistener) plistener->setProgress(0.18 + 0.02*(double)(top+border)/height); + } // clean up free(buffer); free(Gtmp); diff --git a/rtengine/amaze_demosaic_RT.cc b/rtengine/amaze_demosaic_RT.cc index d92a84c40..4c76eff74 100644 --- a/rtengine/amaze_demosaic_RT.cc +++ b/rtengine/amaze_demosaic_RT.cc @@ -209,14 +209,6 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) { //if (verbose) fprintf (stderr,_("AMaZE interpolation ...\n")); //t1 = clock(); - // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - if (plistener) { - plistener->setProgressStr ("AMaZE Demosaicing..."); - plistener->setProgress (0.0); - } - - // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //determine GRBG coset; (ey,ex) is the offset of the R subarray @@ -1002,7 +994,7 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) { { progress=1.0; } - if(plistener) plistener->setProgress(progress); + if(plistener) plistener->setProgress( 0.2 + 0.2*progress ); } // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/rtengine/cfa_linedn_RT.cc b/rtengine/cfa_linedn_RT.cc index d49b53f74..cbdc91a19 100644 --- a/rtengine/cfa_linedn_RT.cc +++ b/rtengine/cfa_linedn_RT.cc @@ -77,15 +77,6 @@ void RawImageSource::CLASS cfa_linedn(float noise) dctblock[j] = bbrr[j]; } - - // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - if (plistener) { - plistener->setProgressStr ("Line Denoise..."); - plistener->setProgress (0.0); - } - - // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% float noisevar=SQR(3*noise*65535); // _noise_ (as a fraction of saturation) is input to the algorithm volatile double progress = 0.0; @@ -262,9 +253,9 @@ void RawImageSource::CLASS cfa_linedn(float noise) { progress=1.0; } - if(plistener) plistener->setProgress(progress); - - //if(plistener) plistener->setProgress(fabs((float)top/height)); + if(plistener) plistener->setProgress(0.14 +0.02*progress); + + } // clean up delete [] cfain; diff --git a/rtengine/fast_demo.cc b/rtengine/fast_demo.cc index a81494141..ccccb2e95 100644 --- a/rtengine/fast_demo.cc +++ b/rtengine/fast_demo.cc @@ -44,10 +44,6 @@ void RawImageSource::fast_demo(int winx, int winy, int winw, int winh) { //int winx=0, winy=0; //int winw=W, winh=H; - if (plistener) { - plistener->setProgressStr ("Fast demosaicing..."); - plistener->setProgress (0.0); - } float progress = 0.0; @@ -178,7 +174,7 @@ void RawImageSource::fast_demo(int winx, int winy, int winw, int winh) { }//i }//j - if(plistener) plistener->setProgress(0.05); + if(plistener) plistener->setProgress(0.25); //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -212,7 +208,7 @@ void RawImageSource::fast_demo(int winx, int winy, int winw, int winh) { //progress+=(double)0.33/(H); //if(plistener) plistener->setProgress(progress); } - if(plistener) plistener->setProgress(0.4); + if(plistener) plistener->setProgress(0.3); #pragma omp for @@ -235,7 +231,7 @@ void RawImageSource::fast_demo(int winx, int winy, int winw, int winh) { //progress+=(double)0.33/(H); //if(plistener) plistener->setProgress(progress); } - if(plistener) plistener->setProgress(0.7); + if(plistener) plistener->setProgress(0.35); #pragma omp barrier @@ -251,10 +247,9 @@ void RawImageSource::fast_demo(int winx, int winy, int winw, int winh) { blue[i][j] = CLIP((int)(green[i][j] - 0.25*((green[i-1][j]-blue[i-1][j])+(green[i+1][j]-blue[i+1][j])+ \ (green[i][j-1]-blue[i][j-1])+(green[i][j+1]-blue[i][j+1])))); } - progress+=(double)0.33/(H); - //if(plistener) plistener->setProgress(progress); + } - if(plistener) plistener->setProgress(0.99); + if(plistener) plistener->setProgress(0.4 ); } #undef bord diff --git a/rtengine/imageio.cc b/rtengine/imageio.cc index 410c97c5c..793098c6f 100644 --- a/rtengine/imageio.cc +++ b/rtengine/imageio.cc @@ -150,7 +150,7 @@ int ImageIO::loadPNG (Glib::ustring fname) { return IMIO_CANNOTREADFILE; if (pl) { - pl->setProgressStr ("Loading PNG file..."); + pl->setProgressStr ("PROGRESSBAR_LOADPNG"); pl->setProgress (0.0); } @@ -266,7 +266,7 @@ int ImageIO::loadPNG (Glib::ustring fname) { delete [] row; fclose(file); if (pl) { - pl->setProgressStr ("Ready."); + pl->setProgressStr ("PROGRESSBAR_READY"); pl->setProgress (1.0); } return IMIO_SUCCESS; @@ -283,7 +283,7 @@ int ImageIO::loadJPEGFromMemory (const char* buffer, int bufsize) if ( setjmp(((rt_jpeg_error_mgr*)cinfo.src)->error_jmp_buf) == 0 ) { if (pl) { - pl->setProgressStr ("Loading JPEG file..."); + pl->setProgressStr ("PROGRESSBAR_LOADJPEG"); pl->setProgress (0.0); } @@ -327,7 +327,7 @@ int ImageIO::loadJPEGFromMemory (const char* buffer, int bufsize) jpeg_finish_decompress(&cinfo); jpeg_destroy_decompress(&cinfo); if (pl) { - pl->setProgressStr ("Ready."); + pl->setProgressStr ("PROGRESSBAR_READY"); pl->setProgress (1.0); } return IMIO_SUCCESS; @@ -354,7 +354,7 @@ int ImageIO::loadJPEG (Glib::ustring fname) { if ( setjmp(((rt_jpeg_error_mgr*)cinfo.src)->error_jmp_buf) == 0 ) { if (pl) { - pl->setProgressStr ("Loading JPEG file..."); + pl->setProgressStr ("PROGRESSBAR_LOADJPEG"); pl->setProgress (0.0); } @@ -399,7 +399,7 @@ int ImageIO::loadJPEG (Glib::ustring fname) { jpeg_destroy_decompress(&cinfo); fclose(file); if (pl) { - pl->setProgressStr ("Ready."); + pl->setProgressStr ("PROGRESSBAR_READY"); pl->setProgress (1.0); } return IMIO_SUCCESS; @@ -423,7 +423,7 @@ int ImageIO::loadTIFF (Glib::ustring fname) { return IMIO_CANNOTREADFILE; if (pl) { - pl->setProgressStr ("Loading TIFF file..."); + pl->setProgressStr ("PROGRESSBAR_LOADTIFF"); pl->setProgress (0.0); } @@ -481,7 +481,7 @@ int ImageIO::loadTIFF (Glib::ustring fname) { delete [] linebuffer; if (pl) { - pl->setProgressStr ("Ready."); + pl->setProgressStr ("PROGRESSBAR_READY"); pl->setProgress (1.0); } @@ -522,7 +522,7 @@ int ImageIO::savePNG (Glib::ustring fname, int compression, int bps) { return IMIO_CANNOTREADFILE; if (pl) { - pl->setProgressStr ("Saving PNG file..."); + pl->setProgressStr ("PROGRESSBAR_SAVEPNG"); pl->setProgress (0.0); } @@ -584,7 +584,7 @@ int ImageIO::savePNG (Glib::ustring fname, int compression, int bps) { fclose (file); if (pl) { - pl->setProgressStr ("Ready."); + pl->setProgressStr ("PROGRESSBAR_READY"); pl->setProgress (1.0); } @@ -606,7 +606,7 @@ int ImageIO::saveJPEG (Glib::ustring fname, int quality) { return IMIO_CANNOTREADFILE; if (pl) { - pl->setProgressStr ("Saving JPEG file..."); + pl->setProgressStr ("PROGRESSBAR_SAVEJPEG"); pl->setProgress (0.0); } @@ -694,7 +694,7 @@ int ImageIO::saveJPEG (Glib::ustring fname, int quality) { fclose (file); if (pl) { - pl->setProgressStr ("Ready."); + pl->setProgressStr ("PROGRESSBAR_READY"); pl->setProgress (1.0); } @@ -719,7 +719,7 @@ int ImageIO::saveTIFF (Glib::ustring fname, int bps, bool uncompressed) { return IMIO_CANNOTREADFILE; if (pl) { - pl->setProgressStr ("Saving TIFF file ..."); + pl->setProgressStr ("PROGRESSBAR_SAVETIFF"); pl->setProgress (0.0); } @@ -772,7 +772,7 @@ int ImageIO::saveTIFF (Glib::ustring fname, int bps, bool uncompressed) { return IMIO_CANNOTREADFILE; if (pl) { - pl->setProgressStr ("Saving TIFF file ..."); + pl->setProgressStr ("PROGRESSBAR_SAVETIFF"); pl->setProgress (0.0); } @@ -843,7 +843,7 @@ int ImageIO::saveTIFF (Glib::ustring fname, int bps, bool uncompressed) { delete [] linebuffer; if (pl) { - pl->setProgressStr ("Ready."); + pl->setProgressStr ("PROGRESSBAR_READY"); pl->setProgress (1.0); } diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index ccb151d44..0d1374706 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -109,8 +109,6 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) { mProcessing.lock (); - int numofphases = 10; - int readyphase = 0; ipf.setScale (scale); @@ -127,7 +125,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) { rp.hotdeadpix_filt = false; rp.ccSteps = 0; } - progress ("Applying white balance, color correction & sRBG conversion...",100*readyphase/numofphases); + if ( todo & M_PREPROC) imgsrc->preprocess( rp ); if( todo & M_RAW){ @@ -163,13 +161,13 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) { imgsrc->getFullSize (fw, fh, tr); PreviewProps pp (0, 0, fw, fh, scale); setScale (scale, true); + progress ("Sample ...",45); imgsrc->getImage (currWB, tr, orig_prev, pp, params.hlrecovery, params.icm, params.raw); ipf.firstAnalysis (orig_prev, ¶ms, vhist16, imgsrc->getGamma()); minit.unlock (); } - readyphase++; - progress ("Rotate / Distortion...",100*readyphase/numofphases); + progress ("Rotate / Distortion...",50); bool needstransform = ipf.needsTransform(); if (!needstransform && orig_prev!=oprevi) { delete oprevi; @@ -180,15 +178,14 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) { if ((todo & M_TRANSFORM) && needstransform) ipf.transform (orig_prev, oprevi, 0, 0, 0, 0, pW, pH); - readyphase++; - progress ("Preparing shadow/highlight map...",100*readyphase/numofphases); + + progress ("Shadow/highlight...",55); if ((todo & M_BLURMAP) && params.sh.enabled) { double radius = sqrt (double(pW*pW+pH*pH)) / 2.0; double shradius = radius / 1800.0 * params.sh.radius; shmap->update (oprevi, (unsigned short**)buffer, shradius, ipf.lumimul, params.sh.hq); } - readyphase++; if (todo & M_AUTOEXP) { if (params.toneCurve.autoexp) { @@ -201,7 +198,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) { } } - progress ("Exposure curve & CIELAB conversion...",100*readyphase/numofphases); + progress ("Lab/curves ...",60); if (todo & M_RGBCURVE) { CurveFactory::complexCurve (params.toneCurve.expcomp, params.toneCurve.black/65535.0, \ params.toneCurve.hlcompr, params.toneCurve.hlcomprthresh, \ @@ -216,7 +213,6 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) { for (int j=0; jL[i][j]]++; } - readyphase++; if (todo & M_LUMACURVE) { CurveFactory::complexCurve (0.0, 0.0, 0.0, 0.0, 0.0, params.labCurve.brightness, params.labCurve.contrast, 0.0, 0.0, false, \ @@ -229,47 +225,38 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) { if (todo & (M_LUMINANCE+M_COLOR) ) { - progress ("Applying Luminance Curve...",100*readyphase/numofphases); + progress ("Luminance curve...",65); ipf.luminanceCurve (oprevl, nprevl, lumacurve); - readyphase++; - progress ("Applying Color Boost...",100*readyphase/numofphases); + + progress ("Color curve...",70); ipf.chrominanceCurve (oprevl, nprevl, chroma_acurve, chroma_bcurve); ipf.colorCurve (nprevl, nprevl); - readyphase++; + if (scale==1) { - progress ("Denoising luminance impulse...",100*readyphase/numofphases); + progress ("Denoising ...",75); ipf.impulsedenoise (nprevl); - } - if (scale==1) { - progress ("Defringing...",100*readyphase/numofphases); + + progress ("Defringing...",80); ipf.defringe (nprevl); - } - if (scale==1) { - progress ("Denoising luminance...",100*readyphase/numofphases); + + progress ("Denoising luminance...",82); ipf.lumadenoise (nprevl, buffer); - } - readyphase++; - if (scale==1) { - progress ("Denoising color...",100*readyphase/numofphases); + + progress ("Denoising color...",84); ipf.colordenoise (nprevl, buffer); - } - if (scale==1) { - progress ("Denoising luma/chroma...",100*readyphase/numofphases); + + progress ("Denoising luma/chroma...",86); ipf.dirpyrdenoise (nprevl); - } - if (scale==1) { - progress ("Sharpening...",100*readyphase/numofphases); + + progress ("Sharpening...",88); ipf.sharpening (nprevl, (unsigned short**)buffer); - } - readyphase++; - if (scale==1) { - progress ("Pyramid equalizer...",100*readyphase/numofphases); + + progress ("Pyramid equalizer...",90); ipf.dirpyrequalizer (nprevl); - } - if (scale==1) { - progress ("Wavelet...",100*readyphase/numofphases); + + progress ("Wavelet...",92); ipf.waveletEqualizer (nprevl, true, true); } @@ -281,7 +268,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) { if (crops[i]->hasListener () && cropCall != crops[i] ) crops[i]->update (todo, true); - progress ("Conversion to RGB...",100*readyphase/numofphases); + progress ("Conversion to RGB...",95); if (todo!=CROP) { previmg->getMutex().lock(); try @@ -304,7 +291,6 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) { if (imageListener) imageListener->imageReady (params.crop); - readyphase++; if (hListener) { int hx1 = 0, hx2 = pW, hy1 = 0, hy2 = pH; @@ -318,7 +304,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) { hListener->histogramChanged (rhist, ghist, bhist, Lhist, bcrgbhist, bcLhist); } - progress ("Ready",100*readyphase/numofphases); + progress ("PROGRESSBAR_READY",100); mProcessing.unlock (); } @@ -442,10 +428,10 @@ void ImProcCoordinator::updateHistograms (int x1, int y1, int x2, int y2) { void ImProcCoordinator::progress (Glib::ustring str, int pr) { -/* if (plistener) { + if (plistener) { plistener->setProgressStr (str); plistener->setProgress ((double)pr / 100.0); - }*/ + } } void ImProcCoordinator::getAutoWB (double& temp, double& green) { diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 72cf49b91..b6fa04355 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -816,7 +816,7 @@ int RawImageSource::load (Glib::ustring fname, bool batch) { fileName = fname; if (plistener) { - plistener->setProgressStr ("Decoding..."); + plistener->setProgressStr ("PROGRESSBAR_DECODING"); plistener->setProgress (0.0); } @@ -920,6 +920,11 @@ void RawImageSource::preprocess (const RAWParams &raw) if( rif && settings->verbose) { printf( "Flat Field Correction:%s\n",rif->get_filename().c_str()); } + if (plistener) { + plistener->setProgress (0.0); + if( rid || rif) + plistener->setProgressStr ("PROGRESSBAR_DARKFRAME"); + } copyOriginalPixels(raw, ri, rid, rif); //FLATFIELD end @@ -956,16 +961,17 @@ void RawImageSource::preprocess (const RAWParams &raw) defGain = log(initialGain) / log(2.0); if ( raw.hotdeadpix_filt ) { - if (plistener) { - plistener->setProgressStr ("Hot/Dead Pixel Filter..."); - plistener->setProgress (0.0); - } + int nFound =findHotDeadPixel( bitmapBads, 10.0 ); totBP += nFound; if( settings->verbose && nFound>0){ printf( "Correcting %d hot/dead pixels found inside image\n",nFound ); } } + if (plistener) { + plistener->setProgressStr ("PROGRESSBAR_BADPIXELS"); + plistener->setProgress (0.1); + } if( totBP ) cfaCleanFromMap( bitmapBads ); @@ -1003,8 +1009,8 @@ void RawImageSource::preprocess (const RAWParams &raw) if ( raw.greenthresh >0) { if (plistener) { - plistener->setProgressStr ("Green equilibrate..."); - plistener->setProgress (0.0); + plistener->setProgressStr ("PROGRESSBAR_GREENEQUIL"); + plistener->setProgress (0.12); } green_equilibrate(0.01*(raw.greenthresh)); } @@ -1012,8 +1018,8 @@ void RawImageSource::preprocess (const RAWParams &raw) if ( raw.linenoise >0 ) { if (plistener) { - plistener->setProgressStr ("Line Denoise..."); - plistener->setProgress (0.0); + plistener->setProgressStr ("PROGRESSBAR_LINEDENOISE"); + plistener->setProgress (0.14); } cfa_linedn(0.00002*(raw.linenoise)); @@ -1021,20 +1027,15 @@ void RawImageSource::preprocess (const RAWParams &raw) if ( raw.ca_autocorrect || raw.cared || raw.cablue ) { if (plistener) { - plistener->setProgressStr ("CA Auto Correction..."); - plistener->setProgress (0.0); + plistener->setProgressStr ("PROGRESSBAR_CACORRECTION"); + plistener->setProgress (0.16); } CA_correct_RT(raw.cared, raw.cablue); } if ( raw.expos !=1 ) { // exposure - if (plistener) { - plistener->setProgressStr ("Exposure Correction..."); - plistener->setProgress (0.0); - } exp_bef(raw.expos, raw.preser); - } t2.set(); @@ -1047,6 +1048,11 @@ void RawImageSource::demosaic(const RAWParams &raw) if (ri->isBayer()) { MyTime t1,t2; t1.set(); + + if (plistener) { + plistener->setProgressStr ("PROGRESSBAR_DEMOSAICING"); + plistener->setProgress (0.20); + } if ( raw.dmethod == RAWParams::methodstring[RAWParams::hphd] ) hphd_demosaic (); else if (raw.dmethod == RAWParams::methodstring[RAWParams::vng4] ) @@ -1068,11 +1074,6 @@ void RawImageSource::demosaic(const RAWParams &raw) if( settings->verbose ) printf("Demosaicing: %s - %d usec\n",raw.dmethod.c_str(), t2.etime(t1)); } - if (plistener) { - plistener->setProgressStr ("Ready."); - plistener->setProgress (1.0); - } - } @@ -1081,7 +1082,6 @@ void RawImageSource::demosaic(const RAWParams &raw) */ void RawImageSource::copyOriginalPixels(const RAWParams &raw, RawImage *src, RawImage *riDark, RawImage *riFlatFile ) { - if (ri->isBayer()) { if (!rawData) rawData = allocArray< unsigned short >(W,H); @@ -1119,8 +1119,7 @@ void RawImageSource::copyOriginalPixels(const RAWParams &raw, RawImage *src, Raw } } } - - + if (ri->isBayer() && riFlatFile && W == riFlatFile->get_width() && H == riFlatFile->get_height()) { //TODO: flat field correction for non-Bayer raw data //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -1571,11 +1570,6 @@ void RawImageSource::colorSpaceConversion (Image16* im, ColorManagementParams cm void RawImageSource::eahd_demosaic () { - if (plistener) { - plistener->setProgressStr ("Demosaicing..."); - plistener->setProgress (0.0); - } - // prepare chache and constants for cielab conversion lc00 = (0.412453 * coeff[0][0] + 0.357580 * coeff[1][0] + 0.180423 * coeff[2][0]) / 0.950456; lc01 = (0.412453 * coeff[0][1] + 0.357580 * coeff[1][1] + 0.180423 * coeff[2][1]) / 0.950456; @@ -1788,7 +1782,7 @@ void RawImageSource::eahd_demosaic () { } if (!(i%20) && plistener) - plistener->setProgress ((double)i / (H-2)); + plistener->setProgress (0.2 + 0.2*(double)i / (H-2) ); } // finish H-2th and H-1th row, homogenity value is still valailable int hc, vc; @@ -2007,10 +2001,6 @@ void RawImageSource::hphd_green () { void RawImageSource::hphd_demosaic () { - if (plistener) { - plistener->setProgressStr ("Demosaicing..."); - plistener->setProgress (0.0); - } float** hpmap = new float*[H]; for (int i=0; isetProgress (0.33); + plistener->setProgress (0.25); for (int i=0; ihpmap[i], 0, W*sizeof(char)); @@ -2057,7 +2047,7 @@ void RawImageSource::hphd_demosaic () { freeArray(hpmap, H); if (plistener) - plistener->setProgress (0.66); + plistener->setProgress (0.30); hphd_green (); @@ -2073,7 +2063,7 @@ void RawImageSource::hphd_demosaic () { } if (plistener) - plistener->setProgress (1.0); + plistener->setProgress (0.35); } void RawImageSource::HLRecovery_Luminance (unsigned short* rin, unsigned short* gin, unsigned short* bin, unsigned short* rout, unsigned short* gout, unsigned short* bout, int width, int maxval) { @@ -2479,10 +2469,6 @@ void RawImageSource::vng4_demosaic () { +1,+0,+2,+1,0,0x10 }, chood[] = { -1,-1, -1,0, -1,+1, 0,+1, +1,+1, +1,0, +1,-1, 0,-1 }; - if (plistener) { - plistener->setProgressStr ("Demosaicing..."); - plistener->setProgress (0.0); - } ushort (*brow[5])[4], *pix; int prow=7, pcol=1, *ip, *code[16][16], gval[8], gmin, gmax, sum[4]; @@ -2615,7 +2601,7 @@ void RawImageSource::vng4_demosaic () { for (g=0; g < 4; g++) brow[(g-1) & 3] = brow[g]; if (!(row%20) && plistener) - plistener->setProgress ((double)row / (H-2)); + plistener->setProgress (0.2 + 0.2*(double)row / (H-2) ); } memcpy (image[(row-2)*width+2], brow[0]+2, (width-4)*sizeof *image); memcpy (image[(row-1)*width+2], brow[1]+2, (width-4)*sizeof *image); @@ -2704,11 +2690,6 @@ void RawImageSource::ahd_demosaic(int winx, int winy, int winw, int winh) const float d65_white[3] = { 0.950456, 1, 1.088754 }; - if (plistener) { - plistener->setProgressStr ("Demosaicing..."); - plistener->setProgress (0.0); - } - image = (ushort (*)[4]) calloc (H*W, sizeof *image); for (int ii=0; iisetProgress((double)tile / n_tiles); + plistener->setProgress(0.20 + 0.20*(double)tile / n_tiles); } } - if(plistener) plistener->setProgress (1.0); free (buffer); for (int i=0; isetProgressStr ("DCB Demosaicing..."); - plistener->setProgress (currentProgress); - } - int wTiles = W/TILESIZE + (W%TILESIZE?1:0); int hTiles = H/TILESIZE + (H%TILESIZE?1:0); int numTiles = wTiles * hTiles; @@ -3393,7 +3368,7 @@ void RawImageSource::dcb_demosaic(int iterations, int dcb_enhance) { if( plistener && double(tilesDone)/numTiles > currentProgress){ currentProgress+=0.1; // Show progress each 10% - plistener->setProgress (currentProgress); + plistener->setProgress (0.2 + 0.2*currentProgress); } } #pragma omp atomic @@ -3413,7 +3388,6 @@ void RawImageSource::dcb_demosaic(int iterations, int dcb_enhance) free(image3); free(chroma); - if(plistener) plistener->setProgress (1.0); } #undef TILEBORDER #undef TILESIZE diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 8a7b44462..037e7b2f9 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -40,7 +40,7 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p ProcessingJobImpl* job = (ProcessingJobImpl*) pjob; if (pl) { - pl->setProgressStr ("Processing..."); + pl->setProgressStr ("PROGRESSBAR_PROCESSING"); pl->setProgress (0.0); } @@ -56,6 +56,7 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p // aquire image from imagesource ImageSource* imgsrc = ii->getImageSource (); + imgsrc->setProgressListener(NULL); int tr = TR_NONE; if (params.coarse.rotate==90) tr |= TR_R90; @@ -100,11 +101,12 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p Image16* baseImg; PreviewProps pp (0, 0, fw, fh, 1); imgsrc->preprocess( params.raw ); + if (pl) pl->setProgress (0.20); imgsrc->demosaic( params.raw ); + if (pl) pl->setProgress (0.40); baseImg = new Image16 (fw, fh); imgsrc->getImage (currWB, tr, baseImg, pp, params.hlrecovery, params.icm, params.raw); - if (pl) - pl->setProgress (0.25); + if (pl) pl->setProgress (0.45); // perform first analysis unsigned int* hist16 = new unsigned int[65536]; @@ -197,7 +199,7 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p delete [] buffer; if (pl) - pl->setProgress (0.70); + pl->setProgress (0.60); // crop and convert to rgb16 Image16* readyImg; @@ -214,7 +216,7 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p delete labView; if (pl) - pl->setProgress (0.85); + pl->setProgress (0.70); // get the resize parameters int refw, refh; @@ -284,8 +286,6 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p else readyImg->setMetadata (ii->getMetaData()->getExifData (), params.exif, params.iptc); - if (pl) - pl->setProgress (1.0); ProfileContent pc; if (params.icm.output.compare (0, 6, "No ICM") && params.icm.output!="") @@ -299,11 +299,8 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p ii->decreaseRef (); delete job; - - if (pl) { - pl->setProgress (1.0); - pl->setProgressStr ("Ready."); - } + if (pl) + pl->setProgress (0.75); return readyImg; } diff --git a/rtengine/stdimagesource.cc b/rtengine/stdimagesource.cc index b662316a4..dedd8b619 100644 --- a/rtengine/stdimagesource.cc +++ b/rtengine/stdimagesource.cc @@ -76,7 +76,7 @@ int StdImageSource::load (Glib::ustring fname, bool batch) { img = new Image16 (); if (plistener) { - plistener->setProgressStr ("Loading..."); + plistener->setProgressStr ("PROGRESSBAR_LOADING"); plistener->setProgress (0.0); img->setProgressListener (plistener); } @@ -92,7 +92,7 @@ int StdImageSource::load (Glib::ustring fname, bool batch) { idata = new ImageData (fname); if (plistener) { - plistener->setProgressStr ("Ready."); + plistener->setProgressStr ("PROGRESSBAR_READY"); plistener->setProgress (1.0); } diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index 6fbdffbd4..be2a04032 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -185,13 +185,11 @@ EditorPanel::EditorPanel (FilePanel* filePanel) : beforePreviewHandler(NULL), be // Status box statusBox = Gtk::manage (new Gtk::HBox ()); - progressLabel = Gtk::manage (new Gtk::Label("")); + progressLabel = Gtk::manage (new Gtk::ProgressBar()); + progressLabel->set_fraction(0.0); + progressLabel->modify_bg( Gtk::STATE_NORMAL,Gdk::Color("red") ); + statusBox->pack_start (*progressLabel); - red = new Gtk::Image (argv0+"/images/red.png"); - green = new Gtk::Image (argv0+"/images/green.png"); - red->show (); - green->show (); - statusBox->pack_end (*green, Gtk::PACK_SHRINK, 2); iops->pack_start(*statusBox, Gtk::PACK_SHRINK, 2); // tbRightPanel_1 @@ -304,8 +302,6 @@ EditorPanel::~EditorPanel () { delete tpc; - delete red; - delete green; delete leftbox; delete vboxright; delete saveAsDialog; @@ -537,24 +533,23 @@ void EditorPanel::setProgressState (int state) { struct spparams { double val; Glib::ustring str; - rtengine::ProgressListener* progListener; + Gtk::ProgressBar *pProgress; }; -int _setprogress( void *p ) -{ - spparams *s= (spparams*)p; - gdk_threads_enter (); - s->progListener->setProgress( s->val ); - gdk_threads_leave (); - delete s; - return 0; -} - int _setprogressStr( void *p ) { spparams *s= (spparams*)p; gdk_threads_enter (); - s->progListener->setProgressStr( s->str ); + + if( ! s->str.empty() ) + s->pProgress->set_text( M(s->str) ); + if( s->val >=0 ){ + s->pProgress->set_fraction( s->val ); + if( s->val <1.0 ) + s->pProgress->modify_bg( Gtk::STATE_NORMAL,Gdk::Color("red") ); + else + s->pProgress->modify_bg( Gtk::STATE_NORMAL,Gdk::Color("grey") ); + } gdk_threads_leave (); delete s; return 0; @@ -564,15 +559,16 @@ void EditorPanel::setProgress (double p) { spparams *s=new spparams; s->val = p; - s->progListener = parent; - g_idle_add (_setprogress, s); + s->pProgress = progressLabel; + g_idle_add (_setprogressStr, s); } void EditorPanel::setProgressStr (Glib::ustring str) { spparams *s=new spparams; s->str = str; - s->progListener = parent; + s->val = -1; + s->pProgress = progressLabel; g_idle_add (_setprogressStr, s); } @@ -585,19 +581,14 @@ void EditorPanel::refreshProcessingState (bool inProcessing) { openThm->setProcParams (pparams, EDITOR, false); } - // change state of the led - std::vector children = (std::vector) statusBox->get_children(); - if (children.size()>=1) { - Gtk::Widget* wlast = children[children.size()-1]; - if (wlast) - statusBox->remove (*wlast); - } - - if (inProcessing) { if (processingStartedTime==0) processingStartedTime = ::time(NULL); - statusBox->pack_end (*red, Gtk::PACK_SHRINK, 2); + spparams *s=new spparams; + s->str = "PROGRESSBAR_PROCESSING"; + s->val = 0.0; + s->pProgress = progressLabel; + g_idle_add (_setprogressStr, s); } else { if (processingStartedTime!=0) { time_t curTime= ::time(NULL); @@ -607,7 +598,11 @@ void EditorPanel::refreshProcessingState (bool inProcessing) { processingStartedTime = 0; } - statusBox->pack_end (*green, Gtk::PACK_SHRINK, 2); + spparams *s=new spparams; + s->str = "PROGRESSBAR_READY"; + s->val = 1.0; + s->pProgress = progressLabel; + g_idle_add (_setprogressStr, s); } } @@ -893,6 +888,8 @@ bool EditorPanel::idle_saveImage (ProgressConnector *pc, Gl sendtogimp->set_sensitive(true); } + rtengine::ImageSource* imgsrc = isrc->getImageSource (); + imgsrc->setProgressListener(this); return false; } diff --git a/rtgui/editorpanel.h b/rtgui/editorpanel.h index 8ce26ad63..0d9574bcf 100644 --- a/rtgui/editorpanel.h +++ b/rtgui/editorpanel.h @@ -51,7 +51,7 @@ class EditorPanel : public Gtk::VBox, public rtengine::HistogramListener { protected: - Gtk::Label *progressLabel; + Gtk::ProgressBar *progressLabel; Gtk::ToggleButton* info; Gtk::ToggleButton* hidehp; Gtk::ToggleButton* tbShowHideSidePanels; @@ -64,8 +64,6 @@ class EditorPanel : public Gtk::VBox, Gtk::HPaned* hpanedl; Gtk::HPaned* hpanedr; Gtk::HBox* statusBox; - Gtk::Image* red; - Gtk::Image* green; Gtk::Image *iHistoryShow, *iHistoryHide; Gtk::Image *iTopPanel_1_Show, *iTopPanel_1_Hide; Gtk::Image *iRightPanel_1_Show, *iRightPanel_1_Hide; diff --git a/rtgui/filebrowser.cc b/rtgui/filebrowser.cc index d805fffc2..2b949c522 100644 --- a/rtgui/filebrowser.cc +++ b/rtgui/filebrowser.cc @@ -31,7 +31,7 @@ extern Options options; FileBrowser::FileBrowser () - : tbl(NULL) { + : tbl(NULL),numFiltered(0) { fbih = new FileBrowserIdleHelper; fbih->fbrowser = this; @@ -568,8 +568,11 @@ void FileBrowser::applyFilter (const BrowserFilter& filter) { // remove items not complying the filter from the selection bool selchanged = false; - for (int i=0; iselected && !checkFilter (fd[i])) { + numFiltered=0; + for (int i=0; iselected ) { fd[i]->selected = false; std::vector::iterator j = std::find (selected.begin(), selected.end(), fd[i]); selected.erase (j); diff --git a/rtgui/filebrowser.h b/rtgui/filebrowser.h index 328e5d37b..91ccd78b0 100644 --- a/rtgui/filebrowser.h +++ b/rtgui/filebrowser.h @@ -89,7 +89,7 @@ class FileBrowser : public ThumbBrowserBase, public LWButtonListener { FileBrowserListener* tbl; BrowserFilter filter; PartialPasteDlg partialPasteDlg; - + int numFiltered; FileBrowserIdleHelper* fbih; void toTrashRequested (std::vector tbe); @@ -115,6 +115,7 @@ class FileBrowser : public ThumbBrowserBase, public LWButtonListener { void applyMenuItemActivated (Glib::ustring ppname); void applyFilter (const BrowserFilter& filter); + int getNumFiltered(){ return numFiltered;} void buttonPressed (LWButton* button, int actionCode, void* actionData); void redrawNeeded (LWButton* button); diff --git a/rtgui/filecatalog.cc b/rtgui/filecatalog.cc index 2f0ffd374..874eabf62 100644 --- a/rtgui/filecatalog.cc +++ b/rtgui/filecatalog.cc @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -57,7 +58,10 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : filterPanel(NULL), coarsePanel(cp), toolBar(tb), - filepanel(filepanel) { + filepanel(filepanel), + previewsToLoad(0), + previewsLoaded(0) + { inTabMode=false; @@ -183,12 +187,6 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : fileBrowser->applyFilter (getFilter()); pack_start (*hBox); - buttonBar2 = new Gtk::HBox (); - pack_end (*buttonBar2, Gtk::PACK_SHRINK); - progressBar = new Gtk::ProgressBar (); - buttonBar2->pack_start (*progressBar, Gtk::PACK_SHRINK, 4); - progressBar->set_size_request (-1, 16); - buttonBar->pack_start (*zoomBox, Gtk::PACK_SHRINK); // add browserPath @@ -330,6 +328,7 @@ void FileCatalog::dirSelected (const Glib::ustring& dirname, const Glib::ustring } _refreshProgressBar (); + filepanel->loadingThumbs(M("PROGRESSBAR_LOADINGTHUMBS"),0); #ifdef _WIN32 wdMonitor = new WinDirMonitor (selectedDirectory, this); @@ -348,8 +347,6 @@ void FileCatalog::dirSelected (const Glib::ustring& dirname, const Glib::ustring void FileCatalog::enableTabMode(bool enable) { inTabMode = enable; - if (!inTabMode) progressBar->hide (); // just needed once - fileBrowser->enableTabMode(inTabMode); redrawAll(); @@ -360,13 +357,29 @@ void FileCatalog::_refreshProgressBar () { // Also mention that this progress bar only measures the FIRST pass (quick thumbnails) // The second, usually longer pass is done multithreaded down in the single entries and is NOT measured by this if (!inTabMode) { - if (previewsToLoad>0) { - progressBar->set_fraction ((double)previewsLoaded / previewsToLoad); - progressBar->show (); + Gtk::Notebook *nb =(Gtk::Notebook *)(filepanel->get_parent()); + Gtk::Box* hbb=NULL; + Gtk::Label *label=NULL; + if( options.mainNBVertical ) + hbb = Gtk::manage (new Gtk::VBox ()); + else + hbb = Gtk::manage (new Gtk::HBox ()); + if (!previewsToLoad ) { + hbb->pack_start (*Gtk::manage (new Gtk::Image (Gtk::Stock::DIRECTORY, Gtk::ICON_SIZE_MENU))); + label = Gtk::manage (new Gtk::Label (M("MAIN_FRAME_FILEBROWSER")+" ("+Glib::ustring::format(fileBrowser->getNumFiltered())+"/"+Glib::ustring::format(previewsLoaded)+")")); } else { - progressBar->set_fraction (1.0); - progressBar->hide (); + hbb->pack_start (*Gtk::manage (new Gtk::Image (Gtk::Stock::FIND, Gtk::ICON_SIZE_MENU))); + label = Gtk::manage (new Gtk::Label (M("MAIN_FRAME_FILEBROWSER")+" [" +Glib::ustring::format(std::fixed, std::setprecision(0), std::setw(3), (double)previewsLoaded / previewsToLoad*100 )+"%]" )); + filepanel->loadingThumbs("",(double)previewsLoaded / previewsToLoad); } + if( options.mainNBVertical ) + label->set_angle(90); + hbb->pack_start (*label); + hbb->set_spacing (2); + hbb->set_tooltip_markup (M("MAIN_FRAME_FILEBROWSER_TOOLTIP")); + hbb->show_all (); + nb->set_tab_label(*filepanel,*hbb); + } } @@ -432,8 +445,6 @@ void FileCatalog::_previewsFinished () { redrawAll (); previewsToLoad = 0; - previewsLoaded = 0; - progressBar->hide (); if (filterPanel) { filterPanel->set_sensitive (true); @@ -446,6 +457,9 @@ void FileCatalog::_previewsFinished () { } // restart anything that might have been loaded low quality fileBrowser->refreshQuickThumbImages(); + fileBrowser->applyFilter (getFilter()); + _refreshProgressBar(); + filepanel->loadingThumbs(M("PROGRESSBAR_READY"),0); } void FileCatalog::previewsFinished (int dir_id) { @@ -459,6 +473,7 @@ void FileCatalog::previewsFinished (int dir_id) { if (!hasValidCurrentEFS) currentEFS = dirEFS; + g_idle_add (prevfinished, this); } @@ -860,6 +875,7 @@ void FileCatalog::categoryButtonToggled (Gtk::ToggleButton* b) { } fileBrowser->applyFilter (getFilter ()); + _refreshProgressBar(); //rearrange panels according to the selected filter removeIfThere (hBox, trashButtonBox); @@ -896,7 +912,8 @@ BrowserFilter FileCatalog::getFilter () { void FileCatalog::filterChanged () { - fileBrowser->applyFilter (getFilter()); + fileBrowser->applyFilter (getFilter()); + _refreshProgressBar(); } int FileCatalog::reparseDirectory () { @@ -1051,6 +1068,7 @@ void FileCatalog::exifFilterChanged () { currentEFS = filterPanel->getFilter (); hasValidCurrentEFS = true; fileBrowser->applyFilter (getFilter ()); + _refreshProgressBar(); } void FileCatalog::setFilterPanel (FilterPanel* fpanel) { diff --git a/rtgui/filecatalog.h b/rtgui/filecatalog.h index 90076e7c0..b72c51860 100644 --- a/rtgui/filecatalog.h +++ b/rtgui/filecatalog.h @@ -108,7 +108,6 @@ class FileCatalog : public Gtk::VBox, Glib::RefPtr dirMonitor; - Gtk::ProgressBar* progressBar; int previewsToLoad; int previewsLoaded; diff --git a/rtgui/filepanel.cc b/rtgui/filepanel.cc index ff8de7fa0..c0d0828f2 100644 --- a/rtgui/filepanel.cc +++ b/rtgui/filepanel.cc @@ -246,3 +246,10 @@ bool FilePanel::handleShortcutKey (GdkEventKey* event) { return false; } + +void FilePanel::loadingThumbs(Glib::ustring str, double rate) +{ + if( !str.empty()) + parent->setProgressStr(str); + parent->setProgress( rate ); +} diff --git a/rtgui/filepanel.h b/rtgui/filepanel.h index f392f1e7b..86e9111e2 100644 --- a/rtgui/filepanel.h +++ b/rtgui/filepanel.h @@ -70,6 +70,7 @@ class FilePanel : public Gtk::HPaned, void setAspect(); void open (const Glib::ustring& d); // open a file or a directory void refreshEditedState (const std::set& efiles) { fileCatalog->refreshEditedState (efiles); } + void loadingThumbs(Glib::ustring str, double rate); // call this before closeing rt: it saves file browser relating things into options void saveOptions (); diff --git a/rtgui/previewloader.cc b/rtgui/previewloader.cc index 906907409..de600e55d 100644 --- a/rtgui/previewloader.cc +++ b/rtgui/previewloader.cc @@ -26,7 +26,7 @@ #include #endif -#define DEBUG(format,args...) +#define DEBUG(format,args...) //#define DEBUG(format,args...) printf("PreviewLoader::%s: " format "\n", __FUNCTION__, ## args) class PreviewLoader::Impl @@ -64,7 +64,7 @@ public: typedef std::set JobSet; - Impl() + Impl():nConcurrentThreads(0) { int threadCount=2; #ifdef _OPENMP @@ -80,6 +80,8 @@ public: JobSet jobs_; + gint nConcurrentThreads; + void processNextJob(void) { @@ -100,27 +102,33 @@ public: DEBUG("processing %s",j.dir_entry_.c_str()); DEBUG("%d job(s) remaining",jobs_.size()); } - + g_atomic_int_inc (&nConcurrentThreads); // unlock and do processing; will relock on block exit, then call listener // if something got - Thumbnail* tmb = 0; - { - if (safe_file_test(j.dir_entry_, Glib::FILE_TEST_EXISTS)) + try{ + Thumbnail* tmb = 0; { - tmb = cacheMgr->getEntry(j.dir_entry_); + if (safe_file_test(j.dir_entry_, Glib::FILE_TEST_EXISTS)) + { + tmb = cacheMgr->getEntry(j.dir_entry_); + } } - } - // we got something so notify listener - if ( tmb ) - { - j.listener_->previewReady(j.dir_id_,new FileBrowserEntry(tmb,j.dir_entry_)); - } + // we got something so notify listener + if ( tmb ) + { + j.listener_->previewReady(j.dir_id_,new FileBrowserEntry(tmb,j.dir_entry_)); + } + }catch(Glib::Error){ + + }catch(...){} + bool last = g_atomic_int_dec_and_test(& nConcurrentThreads); // signal at end if ( jobs_.empty() ) { - j.listener_->previewsFinished(j.dir_id_); + if(last) + j.listener_->previewsFinished(j.dir_id_); } } }; @@ -163,8 +171,8 @@ PreviewLoader::add(int dir_id, const Glib::ustring& dir_entry, PreviewLoaderList void PreviewLoader::removeAllJobs(void) { - DEBUG("stop"); - + DEBUG("stop %d",impl_->nConcurrentThreads); + Glib::Mutex::Lock lock(impl_->mutex_); impl_->jobs_.clear(); } diff --git a/rtgui/progressconnector.h b/rtgui/progressconnector.h index f69cba4b6..15e5ea08e 100644 --- a/rtgui/progressconnector.h +++ b/rtgui/progressconnector.h @@ -27,48 +27,35 @@ class PLDBridge : public rtengine::ProgressListener { - Gtk::Label* label; - Gtk::ProgressBar* progBar; + rtengine::ProgressListener* pl; public: - PLDBridge ( Gtk::Label* l, Gtk::ProgressBar* pb) - : label(l), progBar(pb) {} + PLDBridge ( rtengine::ProgressListener* pb) + : pl(pb) {} // ProgressListener interface void setProgress (double p) { gdk_threads_enter (); - progBar->set_fraction (p); + pl->setProgress(p); gdk_threads_leave (); } void setProgressStr (Glib::ustring str) { gdk_threads_enter (); Glib::ustring progrstr; - if (str=="Decoding...") - progrstr = M("PROGRESSBAR_DECODING"); - else if (str=="Ready.") - progrstr = M("PROGRESSBAR_READY"); - else if (str=="Demosaicing...") - progrstr = M("PROGRESSBAR_DEMOSAICING"); - else if (str=="Loading...") - progrstr = M("PROGRESSBAR_LOADING"); - else if (str=="Loading PNG file...") - progrstr = M("PROGRESSBAR_LOADPNG"); - else if (str=="Loading JPEG file...") - progrstr = M("PROGRESSBAR_LOADJPEG"); - else if (str=="Loading TIFF file...") - progrstr = M("PROGRESSBAR_LOADTIFF"); - else if (str=="Saving PNG file...") - progrstr = M("PROGRESSBAR_SAVEPNG"); - else if (str=="Saving JPEG file...") - progrstr = M("PROGRESSBAR_SAVEJPEG"); - else if (str=="Saving TIFF file...") - progrstr = M("PROGRESSBAR_SAVETIFF"); - else if (str=="Processing...") - progrstr = M("PROGRESSBAR_PROCESSING"); - else - progrstr = str; + progrstr = M(str); + pl->setProgressStr(progrstr); + gdk_threads_leave (); + } - label->set_text (progrstr); + void setProgressState (int state){ + gdk_threads_enter (); + pl->setProgressState(state); + gdk_threads_leave (); + } + + void error (Glib::ustring descr){ + gdk_threads_enter (); + pl->error(descr); gdk_threads_leave (); } }; diff --git a/rtgui/rtwindow.cc b/rtgui/rtwindow.cc index 584ef333b..a9d3479dd 100644 --- a/rtgui/rtwindow.cc +++ b/rtgui/rtwindow.cc @@ -138,8 +138,6 @@ RTWindow::RTWindow () Gtk::VBox* mainBox = Gtk::manage (new Gtk::VBox ()); mainBox->pack_start (*mainNB); - Gtk::HBox* bottomBox = Gtk::manage (new Gtk::HBox ()); - mainBox->pack_start (*bottomBox, Gtk::PACK_SHRINK, 1); // filling bottom box iFullScreen = new Gtk::Image(argv0+"/images/fullscreen.png"); @@ -157,14 +155,32 @@ RTWindow::RTWindow () btn_fullscreen->set_tooltip_markup (M("MAIN_BUTTON_FULLSCREEN")); btn_fullscreen->set_image (*iFullScreen); btn_fullscreen->signal_clicked().connect( sigc::mem_fun(*this, &RTWindow::toggle_fullscreen) ); - bottomBox->pack_start (*preferences, Gtk::PACK_SHRINK, 0); +#if GTKMM_MINOR_VERSION >= 20 + if (options.mainNBVertical) { + Gtk::VBox* bottomVBox = Gtk::manage (new Gtk::VBox ()); + bottomVBox->pack_start (prProgBar, Gtk::PACK_SHRINK, 1); + bottomVBox->pack_end (*preferences, Gtk::PACK_SHRINK, 0); + bottomVBox->pack_end (*btn_fullscreen, Gtk::PACK_EXPAND_WIDGET, 1); + prProgBar.set_orientation(Gtk::PROGRESS_BOTTOM_TO_TOP); + mainNB->set_action_widget( bottomVBox,Gtk::PACK_END); + bottomVBox->show_all(); + }else{ + Gtk::HBox* bottomHBox = Gtk::manage (new Gtk::HBox ()); + bottomHBox->pack_end (*btn_fullscreen, Gtk::PACK_SHRINK, 1); + bottomHBox->pack_end (*preferences, Gtk::PACK_SHRINK, 0); + bottomHBox->pack_start (prProgBar, Gtk::PACK_EXPAND_WIDGET, 1); + mainNB->set_action_widget( bottomHBox,Gtk::PACK_END); + bottomHBox->show_all(); + } +#else + Gtk::HBox* bottomBox = Gtk::manage (new Gtk::HBox ()); bottomBox->pack_end (*btn_fullscreen, Gtk::PACK_SHRINK, 1); - bottomBox->pack_start (*rtWeb, Gtk::PACK_SHRINK, 1); - bottomBox->pack_start (prLabel ); - prLabel.set_alignment(Gtk::ALIGN_RIGHT); - bottomBox->pack_start (prProgBar, Gtk::PACK_SHRINK, 1); + bottomBox->pack_end (*preferences, Gtk::PACK_SHRINK, 0); + bottomBox->pack_start (prProgBar, Gtk::PACK_EXPAND_WIDGET, 1); + mainBox->pack_start (*bottomBox, Gtk::PACK_SHRINK, 1); +#endif - pldBridge = new PLDBridge(&prLabel,&prProgBar); + pldBridge = new PLDBridge(static_cast(this)); Glib::RefPtr style = Gtk::RcStyle::create (); style->set_xthickness (0); @@ -365,16 +381,15 @@ void RTWindow::setProgress (double p) { } void RTWindow::setProgressStr (Glib::ustring str) { - prLabel.set_text ( str ); + if (!options.mainNBVertical) + prProgBar.set_text ( str ); } void RTWindow::setProgressState (int state) { if (state) { prProgBar.show(); - prLabel.show(); } else { prProgBar.hide(); - prLabel.hide(); } } @@ -395,7 +410,7 @@ void RTWindow::toggle_fullscreen () { } void RTWindow::error (Glib::ustring descr){ - prLabel.set_text ( descr ); + prProgBar.set_text ( descr ); } void RTWindow::SetEditorCurrent() diff --git a/rtgui/rtwindow.h b/rtgui/rtwindow.h index 42a82546b..c29e797da 100644 --- a/rtgui/rtwindow.h +++ b/rtgui/rtwindow.h @@ -34,7 +34,6 @@ class RTWindow : public Gtk::Window, public rtengine::ProgressListener{ std::set filesEdited; std::map epanels; - Gtk::Label prLabel; Gtk::ProgressBar prProgBar; PLDBridge* pldBridge; bool is_fullscreen; diff --git a/rtgui/zoompanel.cc b/rtgui/zoompanel.cc index 29eef8fa0..f9fffb011 100644 --- a/rtgui/zoompanel.cc +++ b/rtgui/zoompanel.cc @@ -24,11 +24,6 @@ ZoomPanel::ZoomPanel (ImageArea* iarea) : iarea(iarea) { set_border_width (0); - Gtk::Label* label = Gtk::manage (new Gtk::Label (Glib::ustring("") + "Zoom" + ": ")); - label->set_use_markup (true); - - pack_start (*label, Gtk::PACK_SHRINK, 4); - Gtk::Image* imageOut = Gtk::manage (new Gtk::Image (Gtk::StockID ("gtk-zoom-out"), Gtk::ICON_SIZE_SMALL_TOOLBAR)); imageOut->set_padding(0,0); Gtk::Image* imageIn = Gtk::manage (new Gtk::Image (Gtk::StockID ("gtk-zoom-in"), Gtk::ICON_SIZE_SMALL_TOOLBAR));