Commit 40df1c52 authored by hrchilds's avatar hrchilds

Update from February 18, 2005

git-svn-id: http://visit.ilight.com/svn/visit/trunk/src@416 18c085ea-50e0-402c-830e-de6fd14e8384
parent a42fbfe2
......@@ -183,7 +183,7 @@ sub mkman ($@) {
next;
};
while (<MAKEFILE>) {
if (/^([A-Z_]*(SRC|HDR)|(NOT_)?DISTRIB)\s*=\s*(.*)$/) {
if (/^([A-Z_]*(SRC|HDR)|(NOT_|IF_AVAILABLE_)?DISTRIB)\s*=\s*(.*)$/) {
my ($macro, $value) = ($1, $4);
## Read continuation lines
......@@ -208,7 +208,7 @@ sub mkman ($@) {
if (!(($basename =~ /^\$/) || ($basename =~ /^\@.*\@$/)))
{
warn "Directory: $file\n" if (-d $file);
warn "Not found: $file\n" unless (-d $file);
warn "Not found: $file\n" unless ((-d $file) || ($macro eq "IF_AVAILABLE_DISTRIB"));
}
} else {
$manref->{$file} = "$makefile \$($macro)";
......
......@@ -62,23 +62,23 @@
# Jeremy Meredith, Fri Dec 10 13:30:38 PST 2004
# Added the new exe directory.
#
withhelp=no
# Brad Whitlock, Thu Feb 17 16:35:39 PST 2005
# I removed the withhelp argument.
#
# The loop is executed once for each symbol on the execute line. This means
# that $1 may be blank for later executions of the loop if any "shift 2"
# commands are executed. The variable abc is not used in the loop.
#
for abc
do
case $1 in
-withhelp)
withhelp=yes
shift
;;
esac
done
#for abc
#do
# case $1 in
# -withhelp)
# withhelp=yes
# shift
# ;;
# esac
#done
if [ ! -d engine ]; then
echo "invoke $0 from the root of the VisIt source tree" 2>&1
......@@ -111,9 +111,7 @@ PATH="$PATH:./clearcase_bin"
./clearcase_bin/mkman --quiet --recursive --simple ./bin
./clearcase_bin/mkman --quiet --recursive --simple ./exe
./clearcase_bin/mkman --quiet --simple ./lib
if [ $withhelp = yes ]; then
./clearcase_bin/mkman --quiet --simple ./help
fi
./clearcase_bin/mkman --quiet --simple ./help
./clearcase_bin/mkman --quiet --recursive --simple ./archives
./clearcase_bin/mkman --quiet --recursive --simple ./plugins
./clearcase_bin/mkman --quiet --recursive --simple ./clearcase_bin
......
......@@ -75,6 +75,10 @@ $0 = shift @ARGV;
# Added -withtest option and code to add relevant test
# files to list of files
#
# Brad Whitlock, Thu Feb 17 16:37:11 PST 2005
# I removed the -withhelp option from source_files because now it
# returns at least the static HTML files in the help directory.
#
require "newgetopt.pl";
......@@ -97,14 +101,8 @@ if($opt_withhelp)
}
$dist = "";
if ($opt_withhelp)
{
$filelist = "./clearcase_bin/source_files -withhelp";
}
else
{
$filelist = "./clearcase_bin/source_files";
}
$filelist = "./clearcase_bin/source_files";
$fulldist = shift;
if (!defined($fulldist))
{
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -2,7 +2,6 @@
#include <DataNode.h>
#include <DebugStream.h>
#include <Utility.h>
#include <VisItException.h>
#include <visit-config.h>
// ****************************************************************************
......@@ -60,6 +59,9 @@ ColorTableManager::~ColorTableManager()
// I fixed a bug where you could not save out color tables that were already
// external. I also changed how the message is returned.
//
// Brad Whitlock, Thu Feb 17 15:57:41 PST 2005
// I changed how WriteConfigFile is used.
//
// ****************************************************************************
bool
......@@ -80,20 +82,14 @@ ColorTableManager::Export(const std::string &ctName,
ctFileName = ctName;
}
bool retval = false;
TRY
{
// Try and write out the color table.
WriteConfigFile(ctFileName.c_str());
retval = true;
bool retval;
if((retval = WriteConfigFile(ctFileName.c_str())) == true)
message = ctFileName;
}
CATCH(VisItException)
else
{
message = std::string("VisIt could not export ") + ctName +
std::string(" to ") + ctFileName + ".";
}
ENDTRY
return retval;
}
......@@ -141,9 +137,12 @@ ColorTableManager::ImportColorTables(ColorTableAttributes *cta)
// Brad Whitlock, Thu Dec 18 11:18:06 PDT 2003
// I made it call CreateNode with the new completeSave flag set to false.
//
// Brad Whitlock, Thu Feb 17 15:55:29 PST 2005
// I removed the exception and made the function return a bool.
//
// ****************************************************************************
void
bool
ColorTableManager::WriteConfigFile(const char *filename)
{
DataNode topLevel("topLevel");
......@@ -159,7 +158,7 @@ ColorTableManager::WriteConfigFile(const char *filename)
// Try to open the output file.
if((fp = fopen(filename, "wb")) == 0)
{
EXCEPTION0(VisItException);
return false;
}
// Write the output file.
......@@ -169,6 +168,8 @@ ColorTableManager::WriteConfigFile(const char *filename)
// Close the file
fclose(fp);
fp = 0;
return true;
}
// ****************************************************************************
......
......@@ -22,6 +22,9 @@ class DataNode;
// Brad Whitlock, Thu Nov 13 11:51:47 PDT 2003
// I changed how messages are passed out of Export.
//
// Brad Whitlock, Thu Feb 17 15:54:26 PST 2005
// Made WriteConfigFile return bool.
//
// ****************************************************************************
class STATE_API ColorTableManager : public ConfigManager
......@@ -35,7 +38,7 @@ public:
std::string &message);
bool ImportColorTables(ColorTableAttributes *cta);
virtual void WriteConfigFile(const char *filename);
virtual bool WriteConfigFile(const char *filename);
virtual DataNode *ReadConfigFile(const char *filename);
protected:
void ImportColorTable(const std::string &ctFileName);
......
......@@ -36,6 +36,9 @@
// Removed GetUserVisItDirectory, GetDefaultConfigFile, GetSystemConfigFile
// methods and made them part of the utility library (Utility.h).
//
// Brad Whitlock, Thu Feb 17 15:45:19 PST 2005
// I made WriteConfigFile return a bool.
//
// ****************************************************************************
class STATE_API ConfigManager
......@@ -44,7 +47,7 @@ public:
ConfigManager();
virtual ~ConfigManager();
virtual void WriteConfigFile(const char *filename) = 0;
virtual bool WriteConfigFile(const char *filename) = 0;
virtual DataNode *ReadConfigFile(const char *filename) = 0;
protected:
// Functions to write out the tree.
......
......@@ -23,6 +23,7 @@ using std::vector;
#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
#include <pwd.h>
#endif
// ****************************************************************************
......@@ -1011,3 +1012,85 @@ ConfigStateIncrementRunCount(ConfigStateEnum &code)
#endif
}
// ****************************************************************************
// Function: ExpandUserPath
//
// Purpose:
// Expands a path that contains ~ as its first character so it contains the
// absolute path to the specified user's home directory.
//
// Arguments:
// path : The path to expand.
//
// Returns: If the first character is "~" then the path gets expanded,
// otherwise the path is returned unmodified.
//
// Programmer: Brad Whitlock
// Creation: Thu Feb 17 14:57:57 PST 2005
//
// Modifications:
//
// ****************************************************************************
std::string
ExpandUserPath(const std::string &path)
{
std::string newPath(path);
if(path[0] == '~')
{
char username[256];
int i;
// Find the user name portion of the path, ie ~user
for (i = 1; isalnum(path[i]); i++)
{
username[i - 1] = path[i];
}
username[i - 1] = '\0';
#if defined(_WIN32)
if(i == 1)
{
// User just specified '~', get the current user name.
GetUserName(username, 256);
}
// Append the rest of the path to the home directory.
std::string restOfPath(path.substr(i, path.length() - i + 1));
std::string homeDir("C:\\Documents and Settings\\");
newPath = homeDir + std::string(username) + restOfPath;
#else
// Check if the user specified '~' or '~name'.
struct passwd *users_passwd_entry = NULL;
if (i == 1)
{
// User just specified '~', get /etc/passwd entry
users_passwd_entry = getpwuid(getuid());
}
else
{
// User specified '~name', get /etc/passwd entry
users_passwd_entry = getpwnam(username);
}
// Now that we have a passwd entry, validate it.
if (users_passwd_entry == NULL)
{
// Did not specify a valid user name. Do nothing.
return newPath;
}
if (users_passwd_entry->pw_dir == NULL)
{
// Passwd entry is invalid. Do nothing.
return newPath;
}
// Append the rest of the path to the home directory.
std::string restOfPath(path.substr(i, path.length() - i + 1));
newPath = std::string(users_passwd_entry->pw_dir) + restOfPath;
#endif
}
return newPath;
}
......@@ -27,6 +27,8 @@ bool UTILITY_API ReadAndProcessDirectory(const std::string &,
ProcessDirectoryCallback *,
void * = 0,
bool = false);
std::string UTILITY_API ExpandUserPath(const std::string &);
void UTILITY_API WaitUntilFile(const char *);
bool UTILITY_API WildcardStringMatch(const char *p, const char *s);
bool UTILITY_API WildcardStringMatch(const std::string &p, const std::string &s);
......
......@@ -10,7 +10,6 @@
#include <vtkCellData.h>
#include <vtkCellTypes.h>
#include <vtkDisjointCubesFacelistFilter.h>
#include <vtkGeometryFilter.h>
#include <vtkPointData.h>
#include <vtkPolyData.h>
#include <vtkRectilinearGrid.h>
......@@ -188,6 +187,9 @@ avtFacelistFilter::SetForceFaceConsolidation(bool afc)
// Hank Childs, Fri Mar 28 08:21:05 PST 2003
// Add support for points.
//
// Kathleen Bonnell, Fri Feb 18 15:08:32 PST 2005
// Convert 'point' and 'line' Structured or Rectilinear grids to poly data.
//
// ****************************************************************************
vtkDataSet *
......@@ -224,7 +226,15 @@ avtFacelistFilter::ExecuteData(vtkDataSet *in_ds, int domain, std::string)
// Points and lines
case 0:
case 1:
out_ds = in_ds;
if (in_ds->GetDataObjectType() != VTK_STRUCTURED_GRID &&
in_ds->GetDataObjectType() != VTK_RECTILINEAR_GRID)
{
out_ds = in_ds;
}
else
{
out_ds = ConvertToPolys(in_ds, tDim);
}
break;
// 2D meshes or surfaces
......@@ -620,6 +630,80 @@ avtFacelistFilter::TakeFacesForDisjointElementMesh(vtkDataSet *in_ds, int dom)
}
// ****************************************************************************
// Method: avtFacelistFilter::ConvertToPolys
//
// Purpose:
// Converts the incoming dataset to polydata.
//
// Arguments:
// in_ds The input dataset.
//
// Returns: The output dataset.
//
// Programmer: Kathleen Bonnell
// Creation: February 18, 2005
//
// Modifications:
//
// ****************************************************************************
vtkDataSet *
avtFacelistFilter::ConvertToPolys(vtkDataSet *in_ds, int tDim)
{
int dstype = in_ds->GetDataObjectType();
if (dstype != VTK_STRUCTURED_GRID && dstype != VTK_RECTILINEAR_GRID)
{
return in_ds;
}
//
// Set up all of the things that won't change -- the points and the point
// and cell data.
//
vtkPoints *pts = vtkVisItUtility::GetPoints(in_ds);
vtkPolyData *out_ds = vtkPolyData::New();
out_ds->SetPoints(pts);
pts->Delete();
out_ds->GetPointData()->PassData(in_ds->GetPointData());
out_ds->GetCellData()->PassData(in_ds->GetCellData());
out_ds->GetFieldData()->PassData(in_ds->GetFieldData());
int nPts = pts->GetNumberOfPoints();
vtkCellArray *cells = vtkCellArray::New();
cells->Allocate(nPts*(tDim+1));
vtkIdType ids[2] = {0, 0};
int i;
if (tDim == 0)
{
for (i = 0; i < nPts; i++)
{
ids[0] = i;
cells->InsertNextCell(1, ids);
}
out_ds->SetVerts(cells);
}
else
{
for (i = 0; i < nPts-1; i++)
{
ids[0] = i;
ids[1] = i+1;
cells->InsertNextCell(2, ids);
}
out_ds->SetLines(cells);
}
cells->Delete();
ManageMemory(out_ds);
out_ds->Delete();
return out_ds;
}
// ****************************************************************************
// Method: avtFacelistFilter::InitializeFilter
//
......
......@@ -55,6 +55,9 @@ class avtMultiFacelist;
// Hank Childs, Wed Aug 11 09:46:53 PDT 2004
// Added PerformRestriction.
//
// Kathleen Bonnell, Fri Feb 18 11:13:16 PST 2005
// Added ConvertToPolys.
//
// ****************************************************************************
class AVTFILTERS_API avtFacelistFilter : public avtStreamer
......@@ -86,6 +89,7 @@ class AVTFILTERS_API avtFacelistFilter : public avtStreamer
vtkDataSet *Take3DFaces(vtkDataSet *, int);
vtkDataSet *TakeFacesForDisjointElementMesh(
vtkDataSet *, int);
vtkDataSet *ConvertToPolys(vtkDataSet *, int);
virtual void InitializeFilter(void);
......
......@@ -95,5 +95,5 @@ MILI_DIR=/usr/gapps/visit/mili/current/sunos_57
##
## Silo
##
DEFAULT_SILO_INCLUDES=/usr/gapps/silo/4.4.2-pre2/sunos_57/include
DEFAULT_SILO_LIBRARY=/usr/gapps/silo/4.4.2-pre2/sunos_57/lib
DEFAULT_SILO_INCLUDES=/usr/gapps/silo/4.4.2-pre3/sunos_57/include
DEFAULT_SILO_LIBRARY=/usr/gapps/silo/4.4.2-pre3/sunos_57/lib
......@@ -95,5 +95,5 @@ MILI_DIR=/usr/gapps/visit/mili/current/sunos_57
##
## Silo
##
DEFAULT_SILO_INCLUDES=/usr/gapps/silo/4.4.2-pre2/sunos_57/include
DEFAULT_SILO_LIBRARY=/usr/gapps/silo/4.4.2-pre2/sunos_57/lib
DEFAULT_SILO_INCLUDES=/usr/gapps/silo/4.4.2-pre3/sunos_57/include
DEFAULT_SILO_LIBRARY=/usr/gapps/silo/4.4.2-pre3/sunos_57/lib
......@@ -69,6 +69,8 @@ static void AddDefvars(const char *, avtDatabaseMetaData *);
static int SiloZoneTypeToVTKZoneType(int);
static void TranslateSiloWedgeToVTKWedge(const int *, vtkIdType [6]);
static void TranslateSiloPyramidToVTKPyramid(const int *, vtkIdType [5]);
static void TranslateSiloTetrahedronToVTKTetrahedron(const int *,
vtkIdType [4]);
static int ComputeNumZonesSkipped(vector<int>& zoneRangesSkipped);
......@@ -4025,6 +4027,9 @@ avtSiloFileFormat::GetUnstructuredMesh(DBfile *dbfile, const char *mn,
// Hank Childs, Fri Aug 27 17:18:37 PDT 2004
// Rename ghost zone arrays.
//
// Hank Childs, Tue Jan 11 14:48:38 PST 2005
// Translate tetrahedrons as well.
//
// ****************************************************************************
void
......@@ -4153,6 +4158,7 @@ avtSiloFileFormat::ReadInConnectivity(vtkUnstructuredGrid *ugrid,
if (vtk_zonetype != VTK_WEDGE &&
vtk_zonetype != VTK_PYRAMID &&
vtk_zonetype != VTK_TETRA &&
vtk_zonetype != -1)
{
*nl++ = shapesize;
......@@ -4181,6 +4187,18 @@ avtSiloFileFormat::ReadInConnectivity(vtkUnstructuredGrid *ugrid,
*nl++ = vtk_pyramid[k]-origin;
}
}
else if (vtk_zonetype == VTK_TETRA)
{
*nl++ = 4;
vtkIdType vtk_tetra[4];
TranslateSiloTetrahedronToVTKTetrahedron(nodelist,
vtk_tetra);
for (k = 0 ; k < 4 ; k++)
{
*nl++ = vtk_tetra[k]-origin;
}
}
else if (vtk_zonetype == -1)
{
*nl++ = 4;
......@@ -7229,6 +7247,10 @@ SiloZoneTypeToVTKZoneType(int zonetype)
// Kathleen Bonnell, Thu Aug 9 15:50:15 PDT 2001
// Changed parameters from int to vtkIdType to match VTK 4.0 API.
//
// Hank Childs, Tue Jan 11 14:48:38 PST 2005
// We were following the comment in vtkWedge.h, which turns out to be
// wrong. Correct it now.
//
// ****************************************************************************
void
......@@ -7241,11 +7263,11 @@ TranslateSiloWedgeToVTKWedge(const int *siloWedge, vtkIdType vtkWedge[6])
// and edge lists in vtkWedge.cxx.
//
vtkWedge[0] = siloWedge[2];
vtkWedge[1] = siloWedge[5];
vtkWedge[2] = siloWedge[1];
vtkWedge[1] = siloWedge[1];
vtkWedge[2] = siloWedge[5];
vtkWedge[3] = siloWedge[3];
vtkWedge[4] = siloWedge[4];
vtkWedge[5] = siloWedge[0];
vtkWedge[4] = siloWedge[0];
vtkWedge[5] = siloWedge[4];
}
......@@ -7262,6 +7284,8 @@ TranslateSiloWedgeToVTKWedge(const int *siloWedge, vtkIdType vtkWedge[6])
// Programmer: Kathleen Bonnell
// Creation: May 23, 2001
//
// Modifications:
//
// Kathleen Bonnell, Thu Aug 9 15:50:15 PDT 2001
// Changed parameters from int to vtkIdType to match VTK 4.0 API.
//
......@@ -7283,6 +7307,37 @@ TranslateSiloPyramidToVTKPyramid(const int *siloPyramid, vtkIdType vtkPyramid[5]
vtkPyramid[4] = siloPyramid[4];
}
// ****************************************************************************
// Function: TranslateSiloTetrahedronToVTKTetrahedron
//
// Purpose:
// The silo and VTK tetrahedrons are stored differently; translate between
// them.
//
// Arguments:
// siloTetrahedron A list of nodes from a Silo node list.
// vtkTetrahedron The list of nodes in VTK ordering.
//
// Programmer: Hank Childs
// Creation: January 11, 2005
//
// ****************************************************************************
void
TranslateSiloTetrahedronToVTKTetrahedron(const int *siloTetrahedron,
vtkIdType vtkTetrahedron[4])
{
//
// The Silo and VTK tetrahedrons are inverted.
//
vtkTetrahedron[0] = siloTetrahedron[1];
vtkTetrahedron[1] = siloTetrahedron[0];
vtkTetrahedron[2] = siloTetrahedron[2];
vtkTetrahedron[3] = siloTetrahedron[3];
}
// ****************************************************************************
// Function: ComputeNumZonesSkipped
//
......
......@@ -9,7 +9,6 @@
#include <RemoteProcess.h>
#include <SocketConnection.h>
#include <StatusAttributes.h>
#include <ParsingExprList.h>
#include <ExpressionList.h>
#include <DebugStream.h>
#include <TimingsManager.h>
......@@ -319,18 +318,24 @@ EngineProxy::SendKeepAlive()
// Hank Childs, Tue Mar 9 14:37:46 PST 2004
// Add the file format type.
//
// Brad Whitlock, Fri Feb 18 09:40:52 PDT 2005
// Added expressions argument so we don't have to rely on what's actually
// stored in ParsingExprList since that can be unreliable with respect
// to database expressions.
//
// ****************************************************************************
void
EngineProxy::ReadDataObject(const string &format, const string &file,
const string &var, const int time,
avtSILRestriction_p silr,
const MaterialAttributes &matopts)
const MaterialAttributes &matopts,
const ExpressionList &expressions)
{
// Make sure the engine knows about our current expression list.
ExpressionList *vel = ParsingExprList::Instance()->GetList();
if (exprList != *vel)
if (exprList != expressions)
{
exprList.CopyAttributes(vel);
exprList = expressions;
exprList.Notify();
}
......
......@@ -212,6 +212,11 @@ class StatusAttributes;
//
// Mark C. Miller, Tue Jan 4 10:23:19 PST 2005
// Added window id to various methods to support multi-window SR
//
// Brad Whitlock, Fri Feb 18 09:35:11 PDT 2005
// I added ExpressionList to the call to ReadDataObject so we can pass
// in the right list of expressions.
//
// ****************************************************************************
class ENGINE_PROXY_API EngineProxy : public RemoteProxyBase
......@@ -253,7 +258,8 @@ public:
const std::string&,
const std::string&, const int,
avtSILRestriction_p,
const MaterialAttributes&);
const MaterialAttributes&,
const ExpressionList &);
void ApplyOperator(const std::string&,
const AttributeSubject*);
void ApplyNamedFunction(const std::string &name, int nargs);
......
......@@ -1069,7 +1069,7 @@ QvisGUIApplication::FinalInitialization()
ConfigStateEnum code;
ConfigStateIncrementRunCount(code);
if(code == CONFIGSTATE_FIRSTTIME)
QTimer::singleShot(1000, this, SLOT(displayReleaseNotes()));
QTimer::singleShot(1000, this, SLOT(displayReleaseNotesIfAvailable()));
}
visitTimer->StopTimer(timeid, "stage 10 - Incrementing run count");
visitTimer->StopTimer(stagedInit, "FinalInitialization");
......@@ -2688,9 +2688,12 @@ QvisGUIApplication::EnsureOperatorWindowIsCreated(int i)
// Brad Whitlock, Wed May 5 16:11:34 PST 2004
// I changed how we iterate through otherWindows.
//
// Brad Whitlock, Thu Feb 17 16:02:55 PST 2005
// I made it return a bool.
//
// ****************************************************************************
void
bool
QvisGUIApplication::WriteConfigFile(const char *filename)
{
// Create the root node called "VisIt" and create a "Version"
......@@ -2760,7 +2763,7 @@ QvisGUIApplication::WriteConfigFile(const char *filename)
// Try to open the output file.
if((fp = fopen(filename, "wt")) == 0)
return;
return false;
// Write the output file to stdout for now.
fprintf(fp, "<?xml version=\"1.0\"?>\n");
......@@ -2769,6 +2772,8 @@ QvisGUIApplication::WriteConfigFile(const char *filename)
// close the file
fclose(fp);
fp = 0;
return true;
}
// ****************************************************************************
......@@ -5089,8 +5094,10 @@ void QvisGUIApplication::showMaterialWindow() { GetInitializedWindowPoint
void QvisGUIApplication::showHelpWindow() { GetInitializedWindowPointer(WINDOW_HELP)->show(); }
void QvisGUIApplication::displayCopyright() { ((QvisHelpWindow *)GetInitializedWindowPointer(WINDOW_HELP))->displayCopyright(); }
void QvisGUIApplication::displayReleaseNotes() { ((QvisHelpWindow *)GetInitializedWindowPointer(WINDOW_HELP))->displayReleaseNotes(); }
void QvisGUIApplication::displayReleaseNotesIfAvailable()
{ ((QvisHelpWindow *)GetInitializedWindowPointer(WINDOW_HELP))->displayReleaseNotesIfAvailable(); }
void QvisGUIApplication::showQueryWindow() { GetInitializedWindowPointer(WINDOW_QUERY)->show(); }
void QvisGUIApplication::showRenderingWindow() { GetInitializedWindowPointer(WINDOW_RENDERING)->show(); }
void QvisGUIApplication::showCorrelationListWindow() { GetInitializedWindowPointer(WINDOW_CORRELATION)->show(); }
void QvisGUIApplication::showQueryOverTimeWindow() { GetInitializedWindowPointer(WINDOW_TIMEQUERY)->show(); }
void QvisGUIApplication::showInteractorWindow() { GetInitializedWindowPointer(WINDOW_INTERACTOR)->show(); }
void QvisGUIApplication::showInteractorWindow() { GetInitializedWindowPointer(WINDOW_INTERACTOR)->show(); }
......@@ -275,7 +275,7 @@ private:
void ProcessConfigSettings(DataNode *settings, bool systemConfig);
void ProcessWindowConfigSettings(DataNode *settings);
void SetOrientation(int orientation);
virtual void WriteConfigFile(const char *filename);
virtual bool WriteConfigFile(const char *filename);
void ReadPluginWindowConfigs(DataNode *parentNode, const char *configVersion);
void WritePluginWindowConfigs(DataNode *parentNode);
......@@ -341,6 +341,7 @@ private slots:
void showHelpWindow();
void displayCopyright();