a800ab9
diff -r 7510fdcc8b8a -r 185ccbce5421 src/3Depict.cpp
a800ab9
--- src/3Depict.cpp	Mon Aug 25 14:41:48 2014 +0100
a800ab9
+++ src/3Depict.cpp	Mon Aug 25 14:42:29 2014 +0100
a800ab9
@@ -39,6 +39,12 @@
a800ab9
 
a800ab9
 class threeDepictApp: public wxApp {
a800ab9
 private:
a800ab9
+#ifndef DEBUG
a800ab9
+	//instance of this class suppresses internal wx error dialogs.
a800ab9
+	// these are a nuisance in release code, as recovered errors often annoy the user
a800ab9
+	wxLogNull nullifyLogs;
a800ab9
+#endif
a800ab9
+
a800ab9
 	MainWindowFrame* MainFrame ;
a800ab9
 	wxArrayString commandLineFiles;
a800ab9
 	wxLocale* usrLocale;
a800ab9
@@ -62,9 +68,6 @@
a800ab9
     void MacReopenFile(const wxString & fileName);
a800ab9
 #endif
a800ab9
 
a800ab9
-#ifdef DEBUG
a800ab9
-    void setEventloggerFile(const char *file);
a800ab9
-#endif
a800ab9
 };
a800ab9
 
a800ab9
 //Check version is in place because wxT is deprecated for wx 2.9
a800ab9
diff -r 185ccbce5421 -r c8ff86119e58 src/backend/filters/clusterAnalysis.cpp
a800ab9
--- src/backend/filters/clusterAnalysis.cpp	Mon Aug 25 14:42:29 2014 +0100
a800ab9
+++ src/backend/filters/clusterAnalysis.cpp	Mon Aug 25 14:43:10 2014 +0100
a800ab9
@@ -264,7 +264,7 @@
a800ab9
 
a800ab9
 ClusterAnalysisFilter::ClusterAnalysisFilter() : algorithm(CLUSTER_LINK_ERODE),
a800ab9
 	enableCoreClassify(false), coreDist(0.0f), coreKNN(1), linkDist(0.5f), 
a800ab9
-	enableBulkLink(false), bulkLink(1), enableErosion(false), dErosion(0.25),
a800ab9
+	enableBulkLink(false), bulkLink(0.25), enableErosion(false), dErosion(0.25),
a800ab9
 	wantClusterID(false), wantCropSize(false), nMin(0),nMax(std::numeric_limits<size_t>::max()),
a800ab9
 	wantClusterSizeDist(false),logClusterSize(false),
a800ab9
 	wantClusterComposition(true),normaliseComposition(true),
a800ab9
diff -r c8ff86119e58 -r 55ec5e056846 src/gui/mainFrame.cpp
a800ab9
--- src/gui/mainFrame.cpp	Mon Aug 25 14:43:10 2014 +0100
a800ab9
+++ src/gui/mainFrame.cpp	Mon Aug 25 14:51:53 2014 +0100
a800ab9
@@ -464,7 +464,7 @@
a800ab9
     fileExport->Append(ID_FILE_EXPORT_IMAGE, TRANS("&Image...\tCtrl+I"), TRANS("Export Current 3D View"), wxITEM_NORMAL);
a800ab9
     fileExport->Append(ID_FILE_EXPORT_IONS, TRANS("Ion&s...\tCtrl+N"), TRANS("Export Ion Data"), wxITEM_NORMAL);
a800ab9
     fileExport->Append(ID_FILE_EXPORT_RANGE, TRANS("Ran&ges...\tCtrl+G"), TRANS("Export Range Data"), wxITEM_NORMAL);
a800ab9
-    fileExport->Append(ID_FILE_EXPORT_FILTER_ANIMATION, TRANS("&Animate Filters...\tCtrl+A"), TRANS("Export Animated Filter"), wxITEM_NORMAL);
a800ab9
+    fileExport->Append(ID_FILE_EXPORT_FILTER_ANIMATION, TRANS("&Animate Filters...\tCtrl+T"), TRANS("Export Animated Filter"), wxITEM_NORMAL);
a800ab9
     fileExport->Append(ID_FILE_EXPORT_ANIMATION, TRANS("Ani&mate Camera...\tCtrl+M"), TRANS("Export Animated Camera"), wxITEM_NORMAL);
a800ab9
     fileExport->Append(ID_FILE_EXPORT_PACKAGE, TRANS("Pac&kage...\tCtrl+K"), TRANS("Export analysis package"), wxITEM_NORMAL);
a800ab9
 
a800ab9
diff -r 9d545342c3ad -r 3c853d1f5af7 src/backend/filters/externalProgram.cpp
a800ab9
--- src/backend/filters/externalProgram.cpp	Mon Aug 25 14:52:42 2014 +0100
a800ab9
+++ src/backend/filters/externalProgram.cpp	Mon Aug 25 14:53:04 2014 +0100
a800ab9
@@ -551,7 +551,7 @@
a800ab9
 	
a800ab9
 	p.name=TRANS("Work Dir");
a800ab9
 	p.data= workingDir;
a800ab9
-	p.type=PROPERTY_TYPE_STRING;
a800ab9
+	p.type=PROPERTY_TYPE_DIR;
a800ab9
 	p.helpText=TRANS("Directory to run the command in");
a800ab9
 	p.key=EXTERNALPROGRAM_KEY_WORKDIR;		
a800ab9
 	propertyList.addProperty(p,curGroup);
a800ab9
diff -r 9d545342c3ad -r 3c853d1f5af7 src/common/constants.h
a800ab9
--- src/common/constants.h	Mon Aug 25 14:52:42 2014 +0100
a800ab9
+++ src/common/constants.h	Mon Aug 25 14:53:04 2014 +0100
a800ab9
@@ -57,6 +57,7 @@
a800ab9
 	PROPERTY_TYPE_POINT3D,
a800ab9
 	PROPERTY_TYPE_CHOICE,
a800ab9
 	PROPERTY_TYPE_FILE,
a800ab9
+	PROPERTY_TYPE_DIR,
a800ab9
 	PROPERTY_TYPE_ENUM_END //Not a prop, just end of enum
a800ab9
 };
a800ab9
 
a800ab9
diff -r 9d545342c3ad -r 3c853d1f5af7 src/wx/propertyGridUpdater.cpp
a800ab9
--- src/wx/propertyGridUpdater.cpp	Mon Aug 25 14:52:42 2014 +0100
a800ab9
+++ src/wx/propertyGridUpdater.cpp	Mon Aug 25 14:53:04 2014 +0100
a800ab9
@@ -61,7 +61,7 @@
a800ab9
 		g->Append(new wxPropertyCategory(string("") + title,title));
a800ab9
 		
a800ab9
 		
a800ab9
-		//Set the children of thies property
a800ab9
+		//Set the children of this property
a800ab9
 		for(size_t uj=0;uj
a800ab9
 		{
a800ab9
 			FilterProperty fp;
a800ab9
@@ -83,6 +83,7 @@
a800ab9
 							boolVal);
a800ab9
 					break;
a800ab9
 				};
a800ab9
+				//TODO: we need a PROPERTY_TYPE_UINT
a800ab9
 				case PROPERTY_TYPE_INTEGER:
a800ab9
 				{
a800ab9
 					long long iV;
a800ab9
@@ -145,16 +146,24 @@
a800ab9
 					
a800ab9
 					break;
a800ab9
 				}
a800ab9
+				case PROPERTY_TYPE_DIR:
a800ab9
+				{
a800ab9
+					pgp = new wxDirProperty(fp.name,keyStr,fp.data);
a800ab9
+					break;
a800ab9
+				}
a800ab9
 			}
a800ab9
 
a800ab9
+			//Set the tooltip
a800ab9
 			pgp->SetHelpString(fp.helpText);
a800ab9
 
a800ab9
+			//add the property to the grid
a800ab9
 			g->Append(pgp);
a800ab9
 
a800ab9
 			switch(fp.type)
a800ab9
 			{
a800ab9
 				case PROPERTY_TYPE_BOOL:
a800ab9
 				{
a800ab9
+					//if a bool property, use a checkbox to edit
a800ab9
 					g->SetPropertyEditor(pgp,wxPGEditor_CheckBox);
a800ab9
 					break;
a800ab9
 				}
a800ab9
diff -r 7372047ee6f9 src/common/basics.cpp
a800ab9
--- src/common/basics.cpp	Sun Aug 03 16:58:06 2014 -0400
a800ab9
+++ src/common/basics.cpp	Sun Aug 03 17:01:04 2014 -0400
a800ab9
@@ -1471,6 +1471,21 @@
a800ab9
 	return 0;
a800ab9
 }
a800ab9
 
a800ab9
+bool isNotDirectory(const char *filename)
a800ab9
+{
a800ab9
+	struct stat statbuf;
a800ab9
+
a800ab9
+	if(stat(filename,&statbuf) == -1)
a800ab9
+		return false;
a800ab9
+
a800ab9
+	return (statbuf.st_mode !=S_IFDIR);
a800ab9
+}
a800ab9
+
a800ab9
+bool rmFile(const std::string &filename)
a800ab9
+{
a800ab9
+	return remove(filename.c_str()) == 0;
a800ab9
+}
a800ab9
+
a800ab9
 #ifdef DEBUG
a800ab9
 bool isValidXML(const char *filename)
a800ab9
 {
a800ab9
@@ -1503,27 +1518,6 @@
a800ab9
 	return true;
a800ab9
 }
a800ab9
 
a800ab9
-#if !defined(__WIN32__) && !defined(__WIN64)
a800ab9
 	
a800ab9
-bool isNotDirectory(const char *filename)
a800ab9
-{
a800ab9
-	struct stat statbuf;
a800ab9
-
a800ab9
-	if(stat(filename,&statbuf) == -1)
a800ab9
-		return false;
a800ab9
-
a800ab9
-	return (statbuf.st_mode !=S_IFDIR);
a800ab9
-}
a800ab9
-
a800ab9
-bool rmFile(const std::string &filename)
a800ab9
-{
a800ab9
-	return remove(filename.c_str()) == 0;
a800ab9
-}
a800ab9
-#elif defined(__WIN32) || defined(__WIN64)
a800ab9
-bool rmFile(const std::string &filename)
a800ab9
-{ 
a800ab9
-	return DeleteFile((const wchar_t*)filename.c_str()) == 0;
a800ab9
-}
a800ab9
-#endif
a800ab9
 
a800ab9
 #endif