Skip to content

Commit

Permalink
Re #7876. Fix potential memory leaked.
Browse files Browse the repository at this point in the history
This leaked if m was NULL at line 12178. Use RAII to avoid the problem.
  • Loading branch information
RussellTaylor committed Sep 4, 2013
1 parent 5972346 commit fccb578
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 35 deletions.
32 changes: 18 additions & 14 deletions Code/Mantid/MantidPlot/src/ApplicationWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12087,8 +12087,7 @@ Graph3D* ApplicationWindow::openSurfacePlot(ApplicationWindow* app, const QStrin
}
Spectrogram* ApplicationWindow::openSpectrogram(Graph*ag,const std::string &specgramwsName,const QStringList &lst)
{
ProjectData *prjData=new ProjectData;
if(!prjData)return 0;
ProjectData prjData;

foreach (QString str, lst) {
if(str.contains("<ColorMap>"))
Expand All @@ -12097,7 +12096,7 @@ Spectrogram* ApplicationWindow::openSpectrogram(Graph*ag,const std::string &spe
QString colormapLine=lst[index+1];
QStringList list=colormapLine.split("\t");
QString colormapFile=list[2];
prjData->setColormapFile(colormapFile);
prjData.setColormapFile(colormapFile);
}
if(str.contains("<ColorPolicy>"))
{ //read the colormap policy to set gray scale
Expand All @@ -12106,7 +12105,7 @@ Spectrogram* ApplicationWindow::openSpectrogram(Graph*ag,const std::string &spe
int index1=colormapPolicy.indexOf(">");
int index2=colormapPolicy.lastIndexOf("<");
bool gray=colormapPolicy.mid(index1+1,index2-index1-1).toInt();
prjData->setGrayScale(gray);
prjData.setGrayScale(gray);

}
if (str.contains("\t<ContourLines>"))
Expand All @@ -12116,14 +12115,14 @@ Spectrogram* ApplicationWindow::openSpectrogram(Graph*ag,const std::string &spe
int index1=contourlines.indexOf(">");
int index2=contourlines.lastIndexOf("<");
int bcontour=contourlines.mid(index1+1,index2-index1-1).toInt();
if(bcontour)prjData->setContourMode(true);
if(bcontour)prjData.setContourMode(true);

//setting contour levels
QString contourlevels=lst[index+1];
index1=contourlevels.indexOf(">");
index2=contourlevels.lastIndexOf("<");
int levels=contourlevels.mid(index1+1,index2-index1-1).toInt();
prjData->setContourLevels(levels);
prjData.setContourLevels(levels);

//setting contour default pen
QString pen=lst[index+2];
Expand All @@ -12145,15 +12144,15 @@ Spectrogram* ApplicationWindow::openSpectrogram(Graph*ag,const std::string &spe
QString penstyle=stylestring.mid(index1+1,index2-index1-1);
QColor qcolor(pencolor);
QPen pen = QPen(qcolor, penwidth.toDouble(),Graph::getPenStyle(penstyle.toInt()));
prjData->setDefaultContourPen(pen);
prjData->setColorMapPen(false);
prjData.setDefaultContourPen(pen);
prjData.setColorMapPen(false);
}
else if (pen.contains("<CustomPen>"))
{ ContourLinesEditor* contourLinesEditor = new ContourLinesEditor(this->locale());
prjData->setCotntourLinesEditor(contourLinesEditor);
prjData->setCustomPen(true);
prjData.setCotntourLinesEditor(contourLinesEditor);
prjData.setCustomPen(true);
}
else prjData->setColorMapPen(true);
else prjData.setColorMapPen(true);
}
if(str.contains("<IntensityChanged>"))
{ //read the intensity changed line from file and setting the spectrogram flag for intenisity
Expand All @@ -12163,7 +12162,7 @@ Spectrogram* ApplicationWindow::openSpectrogram(Graph*ag,const std::string &spe
int index1=intensity.indexOf(">");
int index2=intensity.lastIndexOf("<");
bool bIntensity=intensity.mid(index1+1,index2-index1-1).toInt();
prjData->setIntensity(bIntensity);
prjData.setIntensity(bIntensity);
}

}
Expand All @@ -12175,8 +12174,13 @@ Spectrogram* ApplicationWindow::openSpectrogram(Graph*ag,const std::string &spe
if( *matrixItr && specgramwsName==(*matrixItr)->getWorkspaceName() )
m = *matrixItr;
}
if(!m) return 0 ;
Spectrogram* sp=m->plotSpectrogram(ag,this,Graph::ColorMap,true,prjData);

if ( !m )
{
return NULL;
}

Spectrogram* sp=m->plotSpectrogram(ag,this,Graph::ColorMap,true,&prjData);
if ( ag->multiLayer() != NULL )
{
m->attachMultilayer( ag->multiLayer() );
Expand Down
5 changes: 2 additions & 3 deletions Code/Mantid/MantidPlot/src/Mantid/MantidMatrix.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -684,14 +684,13 @@ MultiLayer* MantidMatrix::plotGraph2D(Graph::CurveType type)
//#799 fix for multiple dialog creation on double clicking/ on right click menu scale on 2d plot
// a->connectMultilayerPlot(g);
Graph* plot = g->activeGraph();
ProjectData *prjData=0;
plotSpectrogram(plot,a,type,false,prjData);
plotSpectrogram(plot,a,type,false,NULL);
// g->confirmClose(false);
QApplication::restoreOverrideCursor();
return g;
}

Spectrogram* MantidMatrix::plotSpectrogram(Graph* plot,ApplicationWindow* app,Graph::CurveType type,bool project,ProjectData *prjData)
Spectrogram* MantidMatrix::plotSpectrogram(Graph* plot, ApplicationWindow* app, Graph::CurveType type,bool project,const ProjectData* const prjData)
{
app->setPreferences(plot);
plot->setTitle(tr("Workspace ") + name());
Expand Down
36 changes: 18 additions & 18 deletions Code/Mantid/MantidPlot/src/Mantid/MantidMatrix.h
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ class MantidMatrix : public MdiSubWindow, MantidQt::API::WorkspaceObserver
/// returns the workspace name
const std::string & getWorkspaceName();

Spectrogram* plotSpectrogram(Graph* plot ,ApplicationWindow* app,Graph::CurveType type,bool project,ProjectData*prjdata);
Spectrogram* plotSpectrogram(Graph* plot, ApplicationWindow* app, Graph::CurveType type, bool project, const ProjectData * const prjdata);
/// Add a multilayer as a dependent mdi sub-window. This method is addeed to fix a crash (ticket #5732).
/// A better solution is needed
void attachMultilayer(MultiLayer*);
Expand Down Expand Up @@ -297,26 +297,26 @@ class ProjectData
m_customPen(0),m_contourLabels(0),m_colormapPen(0),m_ContourLinesEditor(0)
{}
~ProjectData(){}
bool getGrayScale()const {return m_grayScale;}
bool getIntensity()const {return m_intensityChanged;}
bool getContourMode()const{return m_contourMode;}
bool getGrayScale() const {return m_grayScale;}
bool getIntensity() const {return m_intensityChanged;}
bool getContourMode() const {return m_contourMode;}
const QString& getColormapFile() const {return m_colormapFile;}
void setGrayScale(bool grayscale) {m_grayScale=grayscale;}
void setIntensity(bool intensity) {m_intensityChanged=intensity;}
void setColormapFile(const QString & fileName){m_colormapFile=fileName;}
void setContourMode(bool contourmode){m_contourMode=contourmode;}
void setContourLevels(int levels){m_contourLevels=levels;}
int getContourLevels()const{return m_contourLevels;}
void setDefaultContourPen(const QPen& defaultpen){m_defaultPen=defaultpen;}
QPen getDefaultContourPen()const {return m_defaultPen;}
void setColorMapPen(bool colormappen){m_colormapPen=colormappen;}
bool getColorMapPen(){return m_colormapPen;}
void setCustomPen(bool custompen){m_customPen=custompen;}
bool getcustomPen(){return m_customPen;}
void setContourLineLabels(bool contourlabels){m_contourLabels=contourlabels;}
bool getContourLineLabels(){return m_contourLabels;}
void setCotntourLinesEditor(ContourLinesEditor *ceditor){m_ContourLinesEditor=ceditor;}
ContourLinesEditor* getContourLinesEditor(){return m_ContourLinesEditor;}
void setColormapFile(const QString & fileName) {m_colormapFile=fileName;}
void setContourMode(bool contourmode) {m_contourMode=contourmode;}
void setContourLevels(int levels) {m_contourLevels=levels;}
int getContourLevels() const {return m_contourLevels;}
void setDefaultContourPen(const QPen& defaultpen) {m_defaultPen=defaultpen;}
QPen getDefaultContourPen() const {return m_defaultPen;}
void setColorMapPen(bool colormappen) {m_colormapPen=colormappen;}
bool getColorMapPen() const {return m_colormapPen;}
void setCustomPen(bool custompen) {m_customPen=custompen;}
bool getcustomPen() const {return m_customPen;}
void setContourLineLabels(bool contourlabels) {m_contourLabels=contourlabels;}
bool getContourLineLabels() const {return m_contourLabels;}
void setCotntourLinesEditor(ContourLinesEditor *ceditor) {m_ContourLinesEditor=ceditor;}
ContourLinesEditor* getContourLinesEditor() const {return m_ContourLinesEditor;}

private:
bool m_grayScale;
Expand Down

0 comments on commit fccb578

Please sign in to comment.