Init locallabgtk3

This commit is contained in:
Desmis
2017-01-21 15:34:40 +01:00
parent 928c4c7d02
commit 273e1cb3b2
47 changed files with 18583 additions and 3345 deletions

View File

@@ -28,7 +28,7 @@
using namespace rtengine::procparams;
ToolPanelCoordinator::ToolPanelCoordinator () : ipc(nullptr), editDataProvider(nullptr)
ToolPanelCoordinator::ToolPanelCoordinator () : ipc (nullptr), editDataProvider (nullptr)
{
exposurePanel = Gtk::manage (new ToolVBox ());
@@ -53,7 +53,7 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(nullptr), editDataProvider(n
colortoning = Gtk::manage (new ColorToning ());
lensgeom = Gtk::manage (new LensGeometry ());
lensProf = Gtk::manage (new LensProfilePanel ());
lensProf->setLensGeomRef(lensgeom);
lensProf->setLensGeomRef (lensgeom);
distortion = Gtk::manage (new Distortion ());
rotate = Gtk::manage (new Rotate ());
vibrance = Gtk::manage (new Vibrance ());
@@ -62,6 +62,7 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(nullptr), editDataProvider(n
vignetting = Gtk::manage (new Vignetting ());
retinex = Gtk::manage (new Retinex ());
gradient = Gtk::manage (new Gradient ());
locallab = Gtk::manage (new Locallab ());
pcvignette = Gtk::manage (new PCVignette ());
perspective = Gtk::manage (new PerspCorrection ());
cacorrection = Gtk::manage (new CACorrection ());
@@ -135,6 +136,9 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(nullptr), editDataProvider(n
toolPanels.push_back (gradient);
addPanel (exposurePanel, lcurve);
toolPanels.push_back (lcurve); // << TODO: Add "Enabled" ???
addPanel (exposurePanel, locallab);
toolPanels.push_back (locallab);
addPanel (exposurePanel, colorappearance);
toolPanels.push_back (colorappearance);
addPanel (detailsPanel, impulsedenoise);
@@ -203,8 +207,8 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(nullptr), editDataProvider(n
toolPanelNotebook = new Gtk::Notebook ();
toolPanelNotebook->set_name ("ToolPanelNotebook");
metadataPanel->append_page (*exifpanel, M("MAIN_TAB_EXIF"));
metadataPanel->append_page (*iptcpanel, M("MAIN_TAB_IPTC"));
metadataPanel->append_page (*exifpanel, M ("MAIN_TAB_EXIF"));
metadataPanel->append_page (*iptcpanel, M ("MAIN_TAB_IPTC"));
exposurePanelSW = Gtk::manage (new MyScrolledWindow ());
detailsPanelSW = Gtk::manage (new MyScrolledWindow ());
@@ -217,47 +221,47 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(nullptr), editDataProvider(n
// load panel endings
for (int i = 0; i < 6; i++) {
vbPanelEnd[i] = Gtk::manage (new Gtk::VBox ());
imgPanelEnd[i] = Gtk::manage (new RTImage("PanelEnding.png"));
imgPanelEnd[i] = Gtk::manage (new RTImage ("PanelEnding.png"));
imgPanelEnd[i]->show ();
vbPanelEnd[i]->pack_start (*imgPanelEnd[i], Gtk::PACK_SHRINK);
vbPanelEnd[i]->show_all();
}
exposurePanelSW->add (*exposurePanel);
exposurePanel->pack_start (*Gtk::manage(new Gtk::HSeparator), Gtk::PACK_SHRINK, 0);
exposurePanel->pack_start (*Gtk::manage (new Gtk::HSeparator), Gtk::PACK_SHRINK, 0);
exposurePanel->pack_start (*vbPanelEnd[0], Gtk::PACK_SHRINK, 4);
detailsPanelSW->add (*detailsPanel);
detailsPanel->pack_start (*Gtk::manage(new Gtk::HSeparator), Gtk::PACK_SHRINK, 0);
detailsPanel->pack_start (*Gtk::manage (new Gtk::HSeparator), Gtk::PACK_SHRINK, 0);
detailsPanel->pack_start (*vbPanelEnd[1], Gtk::PACK_SHRINK, 4);
colorPanelSW->add (*colorPanel);
colorPanel->pack_start (*Gtk::manage(new Gtk::HSeparator), Gtk::PACK_SHRINK, 0);
colorPanel->pack_start (*Gtk::manage (new Gtk::HSeparator), Gtk::PACK_SHRINK, 0);
colorPanel->pack_start (*vbPanelEnd[2], Gtk::PACK_SHRINK, 4);
waveletPanelSW->add (*waveletPanel);
waveletPanel->pack_start (*Gtk::manage(new Gtk::HSeparator), Gtk::PACK_SHRINK, 0);
waveletPanel->pack_start (*Gtk::manage (new Gtk::HSeparator), Gtk::PACK_SHRINK, 0);
waveletPanel->pack_start (*vbPanelEnd[5], Gtk::PACK_SHRINK, 0);
transformPanelSW->add (*transformPanel);
transformPanel->pack_start (*Gtk::manage(new Gtk::HSeparator), Gtk::PACK_SHRINK, 0);
transformPanel->pack_start (*Gtk::manage (new Gtk::HSeparator), Gtk::PACK_SHRINK, 0);
transformPanel->pack_start (*vbPanelEnd[3], Gtk::PACK_SHRINK, 4);
rawPanelSW->add (*rawPanel);
rawPanel->pack_start (*Gtk::manage(new Gtk::HSeparator), Gtk::PACK_SHRINK, 0);
rawPanel->pack_start (*Gtk::manage (new Gtk::HSeparator), Gtk::PACK_SHRINK, 0);
rawPanel->pack_start (*vbPanelEnd[4], Gtk::PACK_SHRINK, 0);
TOITypes type = options.UseIconNoText ? TOI_ICON : TOI_TEXT;
toiE = Gtk::manage (new TextOrIcon ("exposure.png" , M("MAIN_TAB_EXPOSURE") , M("MAIN_TAB_EXPOSURE_TOOLTIP") , type));
toiD = Gtk::manage (new TextOrIcon ("detail.png" , M("MAIN_TAB_DETAIL") , M("MAIN_TAB_DETAIL_TOOLTIP") , type));
toiC = Gtk::manage (new TextOrIcon ("colour.png" , M("MAIN_TAB_COLOR") , M("MAIN_TAB_COLOR_TOOLTIP") , type));
toiW = Gtk::manage (new TextOrIcon ("wavelet.png" , M("MAIN_TAB_WAVELET") , M("MAIN_TAB_WAVELET_TOOLTIP") , type));
toiT = Gtk::manage (new TextOrIcon ("transform.png", M("MAIN_TAB_TRANSFORM"), M("MAIN_TAB_TRANSFORM_TOOLTIP"), type));
toiR = Gtk::manage (new TextOrIcon ("raw.png" , M("MAIN_TAB_RAW") , M("MAIN_TAB_RAW_TOOLTIP") , type));
toiM = Gtk::manage (new TextOrIcon ("meta.png" , M("MAIN_TAB_METADATA") , M("MAIN_TAB_METADATA_TOOLTIP") , type));
toiE = Gtk::manage (new TextOrIcon ("exposure.png" , M ("MAIN_TAB_EXPOSURE") , M ("MAIN_TAB_EXPOSURE_TOOLTIP") , type));
toiD = Gtk::manage (new TextOrIcon ("detail.png" , M ("MAIN_TAB_DETAIL") , M ("MAIN_TAB_DETAIL_TOOLTIP") , type));
toiC = Gtk::manage (new TextOrIcon ("colour.png" , M ("MAIN_TAB_COLOR") , M ("MAIN_TAB_COLOR_TOOLTIP") , type));
toiW = Gtk::manage (new TextOrIcon ("wavelet.png" , M ("MAIN_TAB_WAVELET") , M ("MAIN_TAB_WAVELET_TOOLTIP") , type));
toiT = Gtk::manage (new TextOrIcon ("transform.png", M ("MAIN_TAB_TRANSFORM"), M ("MAIN_TAB_TRANSFORM_TOOLTIP"), type));
toiR = Gtk::manage (new TextOrIcon ("raw.png" , M ("MAIN_TAB_RAW") , M ("MAIN_TAB_RAW_TOOLTIP") , type));
toiM = Gtk::manage (new TextOrIcon ("meta.png" , M ("MAIN_TAB_METADATA") , M ("MAIN_TAB_METADATA_TOOLTIP") , type));
toolPanelNotebook->append_page (*exposurePanelSW, *toiE);
toolPanelNotebook->append_page (*detailsPanelSW, *toiD);
@@ -287,17 +291,17 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(nullptr), editDataProvider(n
icm->setICMPanelListener (this);
toolBar = new ToolBar ();
toolBar->setToolBarListener(this);
toolBar->setToolBarListener (this);
}
void ToolPanelCoordinator::addPanel (Gtk::Box* where, FoldableToolPanel* panel, int level)
{
panel->setParent(where);
panel->setLevel(level);
panel->setParent (where);
panel->setLevel (level);
expList.push_back (panel->getExpander());
where->pack_start(*panel->getExpander(), false, false);
where->pack_start (*panel->getExpander(), false, false);
}
ToolPanelCoordinator::~ToolPanelCoordinator ()
@@ -316,7 +320,7 @@ void ToolPanelCoordinator::panelChanged (rtengine::ProcEvent event, const Glib::
return;
}
int changeFlags = refreshmap[(int)event];
int changeFlags = refreshmap[ (int)event];
ProcParams* params = ipc->beginUpdateParams ();
@@ -326,14 +330,15 @@ void ToolPanelCoordinator::panelChanged (rtengine::ProcEvent event, const Glib::
// Compensate rotation on flip
if (event == rtengine::EvCTHFlip || event == rtengine::EvCTVFlip) {
if (fabs(params->rotate.degree) > 0.001) {
if (fabs (params->rotate.degree) > 0.001) {
params->rotate.degree *= -1;
changeFlags |= refreshmap[(int)rtengine::EvROTDegree];
changeFlags |= refreshmap[ (int)rtengine::EvROTDegree];
rotate->read (params);
}
}
int tr = TR_NONE;
if (params->coarse.rotate == 90) {
tr = TR_R90;
} else if (params->coarse.rotate == 180) {
@@ -348,6 +353,7 @@ void ToolPanelCoordinator::panelChanged (rtengine::ProcEvent event, const Glib::
int fw, fh;
ipc->getInitialImage()->getImageSource()->getFullSize (fw, fh, tr);
gradient->updateGeometry (params->gradient.centerX, params->gradient.centerY, params->gradient.feather, params->gradient.degree, fw, fh);
locallab->updateGeometry (params->locallab.centerX, params->locallab.centerY, params->locallab.circrad, params->locallab.locY, params->locallab.degree, params->locallab.locX, params->locallab.locYT, params->locallab.locXL, fw, fh);
}
// some transformations make the crop change for convenience
@@ -398,14 +404,14 @@ void ToolPanelCoordinator::profileChange (const PartialProfile *nparams, rtengi
}
// And apply the partial profile nparams to mergedParams
nparams->applyTo(mergedParams);
nparams->applyTo (mergedParams);
// Derive the effective changes, if it's a profile change, to prevent slow RAW rerendering if not necessary
bool filterRawRefresh = false;
if (event != rtengine::EvPhotoLoaded) {
ParamsEdited pe(true);
std::vector<rtengine::procparams::ProcParams> lParams(2);
ParamsEdited pe (true);
std::vector<rtengine::procparams::ProcParams> lParams (2);
lParams[0] = *params;
lParams[1] = *mergedParams;
pe.initFrom (lParams);
@@ -417,6 +423,7 @@ void ToolPanelCoordinator::profileChange (const PartialProfile *nparams, rtengi
delete mergedParams;
tr = TR_NONE;
if (params->coarse.rotate == 90) {
tr = TR_R90;
} else if (params->coarse.rotate == 180) {
@@ -427,7 +434,7 @@ void ToolPanelCoordinator::profileChange (const PartialProfile *nparams, rtengi
// trimming overflowing cropped area
ipc->getInitialImage()->getImageSource()->getFullSize (fw, fh, tr);
crop->trim(params, fw, fh);
crop->trim (params, fw, fh);
// updating the GUI with updated values
for (auto toolPanel : toolPanels) {
@@ -441,11 +448,13 @@ void ToolPanelCoordinator::profileChange (const PartialProfile *nparams, rtengi
if (event == rtengine::EvPhotoLoaded || event == rtengine::EvProfileChanged || event == rtengine::EvHistoryBrowsed || event == rtengine::EvCTRotate) {
// updating the "on preview" geometry
gradient->updateGeometry (params->gradient.centerX, params->gradient.centerY, params->gradient.feather, params->gradient.degree, fw, fh);
locallab->updateGeometry (params->locallab.centerX, params->locallab.centerY, params->locallab.circrad, params->locallab.locY, params->locallab.degree, params->locallab.locX, params->locallab.locYT, params->locallab.locXL, fw, fh);
}
// start the IPC processing
if (filterRawRefresh) {
ipc->endUpdateParams ( refreshmap[(int)event] & ALLNORAW );
ipc->endUpdateParams ( refreshmap[ (int)event] & ALLNORAW );
} else {
ipc->endUpdateParams (event);
}
@@ -492,12 +501,13 @@ void ToolPanelCoordinator::initImage (rtengine::StagedImageProcessor* ipc_, bool
ipc->setAutoChromaListener (dirpyrdenoise);
ipc->setWaveletListener (wavelet);
ipc->setRetinexListener (retinex);
ipc->setlocalListener (locallab);
ipc->setSizeListener (crop);
ipc->setSizeListener (resize);
}
flatfield->setShortcutPath(Glib::path_get_dirname(ipc->getInitialImage()->getFileName()));
flatfield->setShortcutPath (Glib::path_get_dirname (ipc->getInitialImage()->getFileName()));
icm->setRawMeta (raw, (const rtengine::ImageData*)pMetaData);
lensProf->setRawMeta (raw, pMetaData);
@@ -521,7 +531,7 @@ void ToolPanelCoordinator::closeAllTools()
for (size_t i = 0; i < options.tpOpen.size(); i++)
if (i < expList.size()) {
expList.at(i)->set_expanded (false);
expList.at (i)->set_expanded (false);
}
}
@@ -530,7 +540,7 @@ void ToolPanelCoordinator::openAllTools()
for (size_t i = 0; i < options.tpOpen.size(); i++)
if (i < expList.size()) {
expList.at(i)->set_expanded (true);
expList.at (i)->set_expanded (true);
}
}
@@ -539,19 +549,19 @@ void ToolPanelCoordinator::updateToolState()
for (size_t i = 0; i < options.tpOpen.size(); i++)
if (i < expList.size()) {
expList.at(i)->set_expanded (options.tpOpen.at(i));
expList.at (i)->set_expanded (options.tpOpen.at (i));
}
if(options.tpOpen.size() > expList.size()) {
if (options.tpOpen.size() > expList.size()) {
size_t sizeWavelet = options.tpOpen.size() - expList.size();
std::vector<int> temp;
for (size_t i = 0; i < sizeWavelet; i++) {
temp.push_back(options.tpOpen.at(i + expList.size()));
temp.push_back (options.tpOpen.at (i + expList.size()));
}
wavelet->updateToolState(temp);
wavelet->setExpanded(true);
wavelet->updateToolState (temp);
wavelet->setExpanded (true);
}
}
@@ -568,11 +578,11 @@ void ToolPanelCoordinator::writeOptions ()
options.tpOpen.clear ();
for (size_t i = 0; i < expList.size(); i++) {
options.tpOpen.push_back (expList.at(i)->get_expanded ());
options.tpOpen.push_back (expList.at (i)->get_expanded ());
}
wavelet->writeOptions(options.tpOpen);
retinex->writeOptions(options.tpOpen);
wavelet->writeOptions (options.tpOpen);
retinex->writeOptions (options.tpOpen);
}
@@ -647,14 +657,14 @@ rtengine::RawImage* ToolPanelCoordinator::getDF()
const rtengine::ImageMetaData *imd = ipc->getInitialImage()->getMetaData();
if(imd) {
if (imd) {
int iso = imd->getISOSpeed();
double shutter = imd->getShutterSpeed();
std::string maker( imd->getMake() );
std::string model( imd->getModel() );
std::string maker ( imd->getMake() );
std::string model ( imd->getModel() );
time_t timestamp = imd->getDateTimeAsTS();
return rtengine::dfm.searchDarkFrame( maker, model, iso, shutter, timestamp);
return rtengine::dfm.searchDarkFrame ( maker, model, iso, shutter, timestamp);
}
return nullptr;
@@ -668,17 +678,17 @@ rtengine::RawImage* ToolPanelCoordinator::getFF()
const rtengine::ImageMetaData *imd = ipc->getInitialImage()->getMetaData();
if(imd) {
if (imd) {
// int iso = imd->getISOSpeed(); temporarilly removed because unused
// double shutter = imd->getShutterSpeed(); temporarilly removed because unused
double aperture = imd->getFNumber();
double focallength = imd->getFocalLen();
std::string maker( imd->getMake() );
std::string model( imd->getModel() );
std::string lens( imd->getLens() );
std::string maker ( imd->getMake() );
std::string model ( imd->getModel() );
std::string lens ( imd->getLens() );
time_t timestamp = imd->getDateTimeAsTS();
return rtengine::ffm.searchFlatField( maker, model, lens, focallength, aperture, timestamp);
return rtengine::ffm.searchFlatField ( maker, model, lens, focallength, aperture, timestamp);
}
return nullptr;
@@ -751,8 +761,8 @@ void ToolPanelCoordinator::updateCurveBackgroundHistogram (LUTu & histToneCurve,
colorappearance->updateCurveBackgroundHistogram (histToneCurve, histLCurve, histCCurve, /*histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI);
toneCurve->updateCurveBackgroundHistogram (histToneCurve, histLCurve, histCCurve,/* histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI);
lcurve->updateCurveBackgroundHistogram (histToneCurve, histLCurve, histCCurve, /*histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI);
rgbcurves->updateCurveBackgroundHistogram(histToneCurve, histLCurve, histCCurve,/* histCLurve, histLLCurve, */histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI);
retinex->updateCurveBackgroundHistogram(histToneCurve, histLCurve, histCCurve,/* histCLurve, histLLCurve, */histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI);
rgbcurves->updateCurveBackgroundHistogram (histToneCurve, histLCurve, histCCurve,/* histCLurve, histLLCurve, */histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI);
retinex->updateCurveBackgroundHistogram (histToneCurve, histLCurve, histCCurve,/* histCLurve, histLLCurve, */histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI);
}
@@ -766,10 +776,10 @@ void ToolPanelCoordinator::foldAllButOne (Gtk::Box* parent, FoldableToolPanel* o
if (currentTP->getParent() == parent) {
// Section in the same tab, we unfold it if it's not the one that has been clicked
if (currentTP != openedSection) {
currentTP->setExpanded(false);
currentTP->setExpanded (false);
} else {
if (!currentTP->getExpanded()) {
currentTP->setExpanded(true);
currentTP->setExpanded (true);
}
}
}
@@ -785,36 +795,36 @@ bool ToolPanelCoordinator::handleShortcutKey (GdkEventKey* event)
bool alt = event->state & GDK_MOD1_MASK;
if (alt) {
switch(event->keyval) {
case GDK_KEY_e:
toolPanelNotebook->set_current_page (toolPanelNotebook->page_num(*exposurePanelSW));
return true;
case GDK_KEY_d:
toolPanelNotebook->set_current_page (toolPanelNotebook->page_num(*detailsPanelSW));
return true;
case GDK_KEY_c:
toolPanelNotebook->set_current_page (toolPanelNotebook->page_num(*colorPanelSW));
return true;
case GDK_KEY_t:
toolPanelNotebook->set_current_page (toolPanelNotebook->page_num(*transformPanelSW));
return true;
case GDK_KEY_r:
toolPanelNotebook->set_current_page (toolPanelNotebook->page_num(*rawPanelSW));
return true;
case GDK_KEY_w:
toolPanelNotebook->set_current_page (toolPanelNotebook->page_num(*waveletPanelSW));
return true;
case GDK_KEY_m:
if (metadataPanel) {
toolPanelNotebook->set_current_page (toolPanelNotebook->page_num(*metadataPanel));
switch (event->keyval) {
case GDK_KEY_e:
toolPanelNotebook->set_current_page (toolPanelNotebook->page_num (*exposurePanelSW));
return true;
}
case GDK_KEY_d:
toolPanelNotebook->set_current_page (toolPanelNotebook->page_num (*detailsPanelSW));
return true;
case GDK_KEY_c:
toolPanelNotebook->set_current_page (toolPanelNotebook->page_num (*colorPanelSW));
return true;
case GDK_KEY_t:
toolPanelNotebook->set_current_page (toolPanelNotebook->page_num (*transformPanelSW));
return true;
case GDK_KEY_r:
toolPanelNotebook->set_current_page (toolPanelNotebook->page_num (*rawPanelSW));
return true;
case GDK_KEY_w:
toolPanelNotebook->set_current_page (toolPanelNotebook->page_num (*waveletPanelSW));
return true;
case GDK_KEY_m:
if (metadataPanel) {
toolPanelNotebook->set_current_page (toolPanelNotebook->page_num (*metadataPanel));
return true;
}
}
}
@@ -833,7 +843,7 @@ void ToolPanelCoordinator::updateVScrollbars (bool hide)
waveletPanelSW->set_policy (Gtk::POLICY_AUTOMATIC, policy);
for (auto currExp : expList) {
currExp->updateVScrollbars(hide);
currExp->updateVScrollbars (hide);
}
}
@@ -842,14 +852,14 @@ void ToolPanelCoordinator::updateTabsHeader (bool useIcons)
GThreadLock lock; // All GUI acces from idle_add callbacks or separate thread HAVE to be protected
TOITypes type = useIcons ? TOI_ICON : TOI_TEXT;
toiE->switchTo(type);
toiD->switchTo(type);
toiC->switchTo(type);
toiT->switchTo(type);
toiR->switchTo(type);
toiE->switchTo (type);
toiD->switchTo (type);
toiC->switchTo (type);
toiT->switchTo (type);
toiR->switchTo (type);
if (toiM) {
toiM->switchTo(type);
toiM->switchTo (type);
}
}
@@ -868,24 +878,24 @@ void ToolPanelCoordinator::toolSelected (ToolMode tool)
GThreadLock lock; // All GUI acces from idle_add callbacks or separate thread HAVE to be protected
switch (tool) {
case TMCropSelect:
crop->setExpanded(true);
toolPanelNotebook->set_current_page(toolPanelNotebook->page_num(*transformPanelSW));
break;
case TMCropSelect:
crop->setExpanded (true);
toolPanelNotebook->set_current_page (toolPanelNotebook->page_num (*transformPanelSW));
break;
case TMSpotWB:
whitebalance->setExpanded(true);
toolPanelNotebook->set_current_page(toolPanelNotebook->page_num(*colorPanelSW));
break;
case TMSpotWB:
whitebalance->setExpanded (true);
toolPanelNotebook->set_current_page (toolPanelNotebook->page_num (*colorPanelSW));
break;
case TMStraighten:
lensgeom->setExpanded(true);
rotate->setExpanded(true);
toolPanelNotebook->set_current_page(toolPanelNotebook->page_num(*transformPanelSW));
break;
case TMStraighten:
lensgeom->setExpanded (true);
rotate->setExpanded (true);
toolPanelNotebook->set_current_page (toolPanelNotebook->page_num (*transformPanelSW));
break;
default:
break;
default:
break;
}
}
@@ -899,14 +909,14 @@ void ToolPanelCoordinator::editModeSwitchedOff ()
void ToolPanelCoordinator::dirSelected (const Glib::ustring& dirname, const Glib::ustring& openfile)
{
flatfield->setShortcutPath(dirname);
flatfield->setShortcutPath (dirname);
}
void ToolPanelCoordinator::setEditProvider(EditDataProvider *provider)
void ToolPanelCoordinator::setEditProvider (EditDataProvider *provider)
{
editDataProvider = provider;
for (size_t i = 0; i < toolPanels.size(); i++) {
toolPanels.at(i)->setEditProvider(provider);
toolPanels.at (i)->setEditProvider (provider);
}
}