Commit 50b19f28 authored by hrchilds's avatar hrchilds

Update from August 25, 2003

git-svn-id: http://visit.ilight.com/svn/visit/trunk/src@65 18c085ea-50e0-402c-830e-de6fd14e8384
parent 0f7f7881
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.
......@@ -107,6 +107,31 @@ VisItException::Log(void)
#endif
}
// ****************************************************************************
// Method: VisItException::LogCatch
//
// Purpose:
// Saves information about a caught exception to the log file.
//
// Arguments:
// exceptionName : The name of the exception being caught.
// srcFile : The source file where the exception was caught.
// srcLine : The source line where the exception was caught.
//
// Programmer: Brad Whitlock
// Creation: Mon Aug 25 15:15:26 PST 2003
//
// Modifications:
//
// ****************************************************************************
void
VisItException::LogCatch(const char *exceptionName, const char *srcFile,
int srcLine)
{
debug1_real << "catch(" << exceptionName << ") " << srcFile << ":" << srcLine << endl;
}
#ifdef FAKE_EXCEPTIONS
// ****************************************************************************
// Fake C++ exception code that gets us by on sucky platforms.
......
......@@ -14,9 +14,6 @@
#include <misc_exports.h>
// Must be re-added
//#include <arch.h>
#ifdef FAKE_EXCEPTIONS
#define VISIT_THROW_NOTHING
#else
......@@ -62,6 +59,9 @@
// Eric Brugger, Wed Jul 23 13:46:05 PDT 2003
// No longer inherit from exception.
//
// Brad Whitlock, Mon Aug 25 15:05:14 PST 2003
// Added LogCatch.
//
// ****************************************************************************
class MISC_API VisItException
......@@ -83,6 +83,9 @@ class MISC_API VisItException
int GetLine() const { return line; };
const std::string &GetFilename() const { return filename; };
static void LogCatch(const char *exceptionType, const char *srcFile,
int srcLine);
protected:
int line;
std::string filename;
......@@ -140,11 +143,11 @@ class MISC_API VisItException
throw _visit_exception;\
}
#define TRY try
#define CATCH(T) catch(T)
#define CATCH2(T, A) catch(T A)
#define CATCHALL catch
#define ENDTRY
#define TRY try {
#define CATCH(T) } catch(T) { VisItException::LogCatch(#T, __FILE__, __LINE__);
#define CATCH2(T, A) } catch(T A) { VisItException::LogCatch(#T, __FILE__, __LINE__);
#define CATCHALL(T) } catch(...) { VisItException::LogCatch(#T, __FILE__, __LINE__);
#define ENDTRY }
#define RETHROW throw
#define CATCH_RETURN(n) return
#define CATCH_RETURN2(n, v) return (v)
......@@ -237,7 +240,7 @@ int exception_default_id();
} \
else if(exception_compatible(#e)) \
{ \
EXPRINT(debug1 << "CATCH(" << #e << ") Lookup on " << #e << " successful." << endl;) \
VisItException::LogCatch(#e, __FILE__, __LINE__); \
exception_caught = true;
......@@ -246,7 +249,7 @@ int exception_default_id();
} \
else if(exception_compatible(#e)) \
{ \
EXPRINT(debug1 << "CATCH2(" << #e << ") Lookup on " << #e << " successful." << endl;) \
VisItException::LogCatch(#e, __FILE__, __LINE__); \
e & N = *((e *)exception_object); \
exception_caught = true;
......@@ -256,8 +259,8 @@ int exception_default_id();
} \
else \
{ \
VisItException::LogCatch(#e, __FILE__, __LINE__); \
exception_caught = true; \
EXPRINT(debug1 << "CATCHALL(...) Doing the catch." << endl;)
#define ENDTRY \
......
......@@ -49,7 +49,7 @@ UnifyDobInfo(void *ibuf, void *iobuf, int *count, MPI_Datatype *datatype)
ostr.GetWholeString(tmp,tmpLen);
// check lengths
if (tmpLen != len)
if (tmpLen > len)
MPI_Abort(MPI_COMM_WORLD, 1);
// copy string to output buffer
......@@ -210,21 +210,28 @@ avtDataObjectInformation::ParallelMerge(const avtDataObjectWriter_p dobw)
// convert this processor's avtDataObjectInformation to its char* rep.
avtDataObjectString localDobStr;
Write(localDobStr, *dobw);
char *localStr; int len;
char *localStr; int len, reducedLen;
localDobStr.GetWholeString(localStr,len);
// create storage for reduced result
char *reducedStr = new char [len];
// make sure all processors agree on len of string
MPI_Allreduce(&len, &reducedLen, 1, MPI_INT, MPI_MAX, MPI_COMM_WORLD);
// create storage for copy and reduced result
char *copiedStr = new char [reducedLen];
char *reducedStr = new char [reducedLen];
// copy localStr to the copiedStr buffer for MPI
strncpy(copiedStr, localStr, len);
// create mpi type to circumvent possible buffer chopping during reduce
MPI_Type_contiguous(len, MPI_CHAR, &mpiTypeDobStr);
MPI_Type_contiguous(reducedLen, MPI_CHAR, &mpiTypeDobStr);
MPI_Type_commit(&mpiTypeDobStr);
// setup unifyDobInfo_writer variable so UnifyDobInfo operator can see it
unifyDobInfo_writer = dobw;
// do the parallel reduction on char* rep of avtDataObjectInformation
MPI_Allreduce(localStr, reducedStr, 1, mpiTypeDobStr,
MPI_Allreduce(copiedStr, reducedStr, 1, mpiTypeDobStr,
avtDataObjectInformation::mpiOpUnifyDobInfo, MPI_COMM_WORLD);
// convert char* rep. back to real avtDataObjectInformation objects
......@@ -240,6 +247,7 @@ avtDataObjectInformation::ParallelMerge(const avtDataObjectWriter_p dobw)
// cleanup
MPI_Type_free(&mpiTypeDobStr);
delete [] reducedStr;
delete [] copiedStr;
#endif
}
......
......@@ -145,7 +145,12 @@ NetworkManager::ClearAllNetworks(void)
// This ensures that we pick up the metadata and SIL for the time state
// that we're intersted in.
//
// Brad Whitlock, Mon Aug 25 16:51:35 PST 2003
// Changed the return statement to CATCH_RETURN2 so bad things don't happen
// when we use fake exceptions.
//
// ****************************************************************************
NetnodeDB *
NetworkManager::GetDBFromCache(const string &filename, int time)
{
......@@ -203,7 +208,7 @@ NetworkManager::GetDBFromCache(const string &filename, int time)
netDB->SetDBInfo(filename, "", time);
const avtIOInformation & ioinfo = db->GetIOInformation();
loadBalancer->AddDatabase(filename, ioinfo);
return netDB;
CATCH_RETURN2(1, netDB);
}
CATCH(DatabaseException)
{
......
......@@ -2056,7 +2056,9 @@ QvisGUIApplication::WritePluginWindowConfigs(DataNode *parentNode)
// Creation: Mon Jul 14 11:52:52 PDT 2003
//
// Modifications:
//
// Brad Whitlock, Tue Aug 12 11:23:52 PDT 2003
// Added code to force the session file to have a .session extension.
//
// ****************************************************************************
void
......@@ -2074,6 +2076,10 @@ QvisGUIApplication::SaveSession()
// to that file.
if(!fileName.isNull())
{
// Force the file to have a .session extension.
if(fileName.right(8) != ".session")
fileName += ".session";
++sessionCount;
viewer->ExportEntireState(fileName.latin1());
......
......@@ -85,6 +85,9 @@ using std::vector;
// Brad Whitlock, Thu Apr 10 15:53:17 PST 2003
// I connected some new signals and slots for plotListBox.
//
// Brad Whitlock, Mon Aug 25 09:38:58 PDT 2003
// I changed a label string.
//
// ****************************************************************************
QvisPlotManagerWidget::QvisPlotManagerWidget(QWidget *parent, const char *name)
......@@ -140,7 +143,7 @@ QvisPlotManagerWidget::QvisPlotManagerWidget(QWidget *parent, const char *name)
topLayout->addMultiCellWidget(plotListBox, 1, 1, 0, 3);
// Create the "Apply operator to all plots" toggle.
applyOperatorToggle = new QCheckBox("Apply operator to all plots", this,
applyOperatorToggle = new QCheckBox("Apply operators and selection to all plots", this,
"applyOperatorToggle");
connect(applyOperatorToggle, SIGNAL(toggled(bool)),
this, SLOT(applyOperatorToggled(bool)));
......
No preview for this file type
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.
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>VisIt 1.2.1 Release Notes</title>
</head>
<body>
<p align="center"><b><font size="6">VisIt 1.2.1 Release Notes</font></b></p>
<p>Welcome to VisIt's release notes page. This page describes the important
enhancements and bug-fixes that were added to this release.</p>
<p><b><font size="4">Features added in version 1.2.1</font></b></p>
<ul>
<li>VisIt's expression code has been completely revamped so that all expression constructs such as constants, vectors, and user-defined functions work properly.</li>
<li>Pick can now return values for expression variables.</li>
<li>VisIt now has conditional expressions such as: if, and, or, which allow you to create sophisticated expressions.</li>
<li>The Clip operator has been rewritten so it is 15 to 100 times faster than the older version.</li>
<li>VisIt now has better support for vector expressions, including having vector dot and cross functions.</li>
<li>VisIt has a new BoxLib database reader plugin.</li>
<li>VisIt now has more glyph types for point meshes.</li>
<li>VisIt now recognizes .curve files so that they can be plotted by the Curve plot.</li>
<li>VisIt has a new matvf expression that can extract the material volume fractions from a material and create a scalar field so volume fractions can be plotted.</li>
<li>VisIt has support for parallel Plot3D files.</li>
<li>The vertex normals filter is faster.</li>
<li>Changing preference to orthogonal slice in the Slice operator window changes the origin type.</li>
</ul>
<p><b><font size="4">Bugs fixed in version 1.2.1</font></b></p>
<ul>
<li>Pick does not work on expression variables.</li>
<li>VisIt crashes when material selecting a volume plot when running in parallel.</li>
<li>The Subset plot, in conjunction with the Clip operator, can generate surfaces with bad normals.</li>
<li>All curves appear to be regenerated when a new curve is added.</li>
<li>VisIt appeared to hang when starting to generate a plot on white.</li>
<li>The Host profiles window causes the GUI to crash with certain config settings.</li>
<li>VisIt crashes when given an invalid expression.</li>
<li>The viewer sometimes crashes when the Engine selection window is active.</li>
<li>Empty functions in expressions crash the viewer.</li>
<li>2D vector plot with zero y-component still creates vertical arrows.</li>
<li>Must click "Apply" too often in the Host profiles window.</li>
<li>There is an extra print statement somewhere in the scalable rendering code.</li>
<li>The Point tool has a swarm of extra points that move when the tool is moved.</li>
<li>If software volume rendering crashes the compute engine then the viewer also crashes.</li>
<li>Expressions do not clean up unused variables in the compute engine.</li>
<li>Axis labeling off with a Djehuty dataset.</li>
<li>The MDServer needs an interface to create expressions.</li>
<li>Rendering attributes are not setting set in the compute engine when in scalable rendering mode.</li>
<li>VisIt locks up when playing animations in Windows.</li>
<li>VisIt has problems reading certain VTK files.</li>
<li>Errors for invalid expressions should be made more clear.</li>
<li>Save movie does not work on Windows.</li>
<li>No -v flag passed to mpeg_encode from save movie.</li>
<li>The Box operator does not correctly handle thin boxes.</li>
<li>When the Reflect operator is in 2d mode, it shouldn't have +z on the original input quadrant.</li>
<li>Restore sessions doe not clear out saved views.</li>
<li>Saving sessions with multiple windows adds extra plots.</li>
<li>Save session now enforces a .session extension on session files.</li>
</ul>
<p>Click the following link to view the release notes for the previous version
of VisIt: <a href="relnotes1.2.html">VisIt 1.2 Release Notes</a>.</p>
</body>
</html>
......@@ -474,11 +474,13 @@ avtVolumePlot::EnhanceSpecification(avtPipelineSpecification_p spec)
// Creation: November 20, 2001
//
// Modifications:
//
// Hank Childs, Sun Aug 10 19:39:52 PDT 2003
// Add support for software volume rendering crashing the engine (meaning
// make sure the engine doesn't crash as well.)
//
// Brad Whitlock, Mon Aug 25 17:22:30 PST 2003
// Added missing ENDTRY.
//
// ****************************************************************************
void
......@@ -510,6 +512,7 @@ avtVolumePlot::OverrideWithSoftwareImage(avtDataObject_p &dob)
{
lastImage = NULL;
}
ENDTRY
}
atts.SetDoSoftware(false);
......
......@@ -4,6 +4,7 @@ set VISITDIR = "/data_vobs/VisIt"
escan $VISITDIR/common/comm/*.C
escan $VISITDIR/common/misc/*.C
escan $VISITDIR/common/parser/*.C
escan $VISITDIR/common/plugin/*.C
escan $VISITDIR/common/siloobj/*.C
escan $VISITDIR/common/siloobj_vtk_db/*.C
......@@ -17,17 +18,21 @@ escan $VISITDIR/components/Database/*.C
escan $VISITDIR/components/Database/Database/*.C
escan $VISITDIR/components/Database/Formats/*.C
escan $VISITDIR/components/Database/Ghost/*.C
escan $VISITDIR/components/Database/MIR/*.C
escan $VISITDIR/components/Exceptions/*.C
escan $VISITDIR/components/Exceptions/Database/*.C
escan $VISITDIR/components/Exceptions/Pipeline/*.C
escan $VISITDIR/components/Exceptions/VisWindow/*.C
escan $VISITDIR/components/Expressions/*.C
escan $VISITDIR/components/Expressions/Abstract/*.C
escan $VISITDIR/components/Expressions/Conditional/*.C
escan $VISITDIR/components/Expressions/General/*.C
escan $VISITDIR/components/Expressions/Management/*.C
escan $VISITDIR/components/Expressions/Math/*.C
escan $VISITDIR/components/Expressions/MeshQuality/*.C
escan $VISITDIR/components/Math/*.C
escan $VISITDIR/components/MIR/Base/*.C
escan $VISITDIR/components/MIR/Tet/*.C
escan $VISITDIR/components/MIR/Zoo/*.C
escan $VISITDIR/components/Pipeline/*.C
escan $VISITDIR/components/Pipeline/Data/*.C
escan $VISITDIR/components/Pipeline/Pipeline/*.C
......@@ -46,20 +51,6 @@ escan $VISITDIR/components/VisWindow/Interactors/*.C
escan $VISITDIR/components/VisWindow/Proxies/*.C
escan $VISITDIR/components/VisWindow/Tools/*.C
escan $VISITDIR/components/VisWindow/VisWindow/*.C
escan $VISITDIR/databases/*.C
escan $VISITDIR/databases/Curve2D/*.C
escan $VISITDIR/databases/Exodus/*.C
escan $VISITDIR/databases/KullLite/*.C
escan $VISITDIR/databases/Lines/*.C
escan $VISITDIR/databases/PDB/*.C
escan $VISITDIR/databases/PLOT3D/*.C
escan $VISITDIR/databases/SAF/*.C
escan $VISITDIR/databases/STL/*.C
escan $VISITDIR/databases/Silo/*.C
escan $VISITDIR/databases/Tetrad/*.C
escan $VISITDIR/databases/TimeVaryingExodus/*.C
escan $VISITDIR/databases/VTK/*.C
escan $VISITDIR/databases/WavefrontOBJ/*.C
escan $VISITDIR/engine/main/*.C
escan $VISITDIR/engine/parstate/*.C
escan $VISITDIR/engine/proxy/*.C
......@@ -68,52 +59,12 @@ escan $VISITDIR/gui/*.C
escan $VISITDIR/mdserver/main/*.C
escan $VISITDIR/mdserver/proxy/*.C
escan $VISITDIR/mdserver/rpc/*.C
escan $VISITDIR/operators/*.C
escan $VISITDIR/operators/Box/*.C
escan $VISITDIR/operators/Cone/*.C
escan $VISITDIR/operators/ConnCompReduce/*.C
escan $VISITDIR/operators/Context/*.C
escan $VISITDIR/operators/Decimate/*.C
escan $VISITDIR/operators/Displace/*.C
escan $VISITDIR/operators/Erase/*.C
escan $VISITDIR/operators/ExternalSurface/*.C
escan $VISITDIR/operators/IndexSelect/*.C
escan $VISITDIR/operators/InverseGhostZone/*.C
escan $VISITDIR/operators/Isosurface/*.C
escan $VISITDIR/operators/Lineout/*.C
escan $VISITDIR/operators/MetricThreshold/*.C
escan $VISITDIR/operators/OnionPeel/*.C
escan $VISITDIR/operators/Reflect/*.C
escan $VISITDIR/operators/Revolve/*.C
escan $VISITDIR/operators/SiloDump/*.C
escan $VISITDIR/operators/Slice/*.C
escan $VISITDIR/operators/SphereSlice/*.C
escan $VISITDIR/operators/Threshold/*.C
escan $VISITDIR/operators/Transform/*.C
escan $VISITDIR/operators/Tube/*.C
escan $VISITDIR/plots/Contour/*.C
escan $VISITDIR/plots/Curve/*.C
escan $VISITDIR/plots/FastVolume/*.C
escan $VISITDIR/plots/Kerbel/*.C
escan $VISITDIR/plots/Mesh/*.C
escan $VISITDIR/plots/Pseudocolor/*.C
escan $VISITDIR/plots/Streamline/*.C
escan $VISITDIR/plots/Subset/*.C
escan $VISITDIR/plots/Surface/*.C
escan $VISITDIR/plots/Vector/*.C
escan $VISITDIR/plugins/*.C
escan $VISITDIR/plugins/databases/*.C
escan $VISITDIR/plugins/operators/*.C
escan $VISITDIR/plugins/plots/*.C
escan $VISITDIR/splashscreen/*.C
escan $VISITDIR/splashscreen/main/*.C
escan $VISITDIR/splashscreen/proxy/*.C
escan $VISITDIR/splashscreen/rpc/*.C
escan $VISITDIR/viewer/main/*.C
escan $VISITDIR/viewer/main/icons/*.C
escan $VISITDIR/viewer/parser/*.C
escan $VISITDIR/viewer/proxy/*.C
escan $VISITDIR/viewer/rpc/*.C
escan $VISITDIR/visit_vtk/*.C
escan $VISITDIR/visitpy/*.C
escan $VISITDIR/vtkqt/*.C
escan $VISITDIR/databases/*/*.C
escan $VISITDIR/operators/*/*.C
escan $VISITDIR/plots/*/*.C
......@@ -311,6 +311,38 @@ SaveViewAction::DeleteViews()
views.clear();
}
// ****************************************************************************
// Method: SaveViewAction::DeleteViewsFromInterface(
//
// Purpose:
// Deletes the saved views from the interface (toolbar, menu).
//
// Programmer: Brad Whitlock
// Creation: Thu Aug 14 16:13:47 PST 2003
//
// Modifications:
//
// ****************************************************************************
void
SaveViewAction::DeleteViewsFromInterface()
{
// Delete the views.
DeleteViews();
// Remove the action from the popup menu and the toolbar.
window->GetPopupMenu()->RemoveAction(this);
window->GetToolbar()->RemoveAction(this);
// Remove all of the choices after the second choice.
int s = children.size();
for(int i = 2; i < s; ++i)
{
delete children[s - i + 1];
children.pop_back();
}
}
// ****************************************************************************
// Method: SaveViewAction::Execute
//
......@@ -327,6 +359,9 @@ SaveViewAction::DeleteViews()
// Brad Whitlock, Thu Feb 27 14:41:35 PST 2003
// I added support for curve views.
//
// Brad Whitlock, Thu Aug 14 16:13:03 PST 2003
// I moved code into DeleteViewsFromInterface.
//
// ****************************************************************************
void
......@@ -334,20 +369,8 @@ SaveViewAction::Execute(int val)
{
if(val == 0)
{
// Delete the views.
DeleteViews();
// Remove the action from the popup menu and the toolbar.
window->GetPopupMenu()->RemoveAction(this);
window->GetToolbar()->RemoveAction(this);
// Remove all of the choices after the second choice.
int s = children.size();
for(int i = 2; i < s; ++i)
{
delete children[s - i + 1];
children.pop_back();
}
// Delete the views from the interface.
DeleteViewsFromInterface();
// Update the construction.
UpdateConstruction();
......@@ -689,7 +712,10 @@ SaveViewAction::CreateNode(DataNode *parentNode)
// Creation: Tue Jul 1 14:58:58 PST 2003
//
// Modifications:
//
// Brad Whitlock, Tue Aug 12 11:31:04 PDT 2003
// I made it clear out views before reading them back in so we don't get
// an ever-increasing number of views.
//
// ****************************************************************************
void
......@@ -706,10 +732,16 @@ SaveViewAction::SetFromNode(DataNode *parentNode)
if(viewTypesNode == 0)
return;
bool addedOrRemovedViews = false;
if(views.size() > 0)
{
DeleteViewsFromInterface();
addedOrRemovedViews = true;
}
const intVector &viewTypes = viewTypesNode->AsIntVector();
DataNode **views = saveviewNode->GetChildren();
int index = 0;
bool addedViews = false;
for(int i = 0; i < saveviewNode->GetNumChildren(); ++i)
{
if(views[i]->GetKey() == "ViewAttributes")
......@@ -743,7 +775,7 @@ SaveViewAction::SetFromNode(DataNode *parentNode)
if(viewPtr)
{
AddNewView(viewPtr, viewTypes[index]);
addedViews = true;
addedOrRemovedViews = true;
}
++index;
......@@ -751,6 +783,6 @@ SaveViewAction::SetFromNode(DataNode *parentNode)
}
// If we added some views, update the menus.
if(addedViews)
if(addedOrRemovedViews)
UpdateConstruction();
}
......@@ -185,6 +185,9 @@ public:
// Brad Whitlock, Tue Jul 1 10:24:25 PDT 2003
// I added SetFromNode and CreateNode.
//
// Brad Whitlock, Thu Aug 14 16:12:22 PST 2003
// I added DeleteViewsFromInterface.
//
// ****************************************************************************
class VIEWER_API SaveViewAction : public ViewerMultipleAction
......@@ -213,6 +216,7 @@ public:
virtual bool CreateNode(DataNode *);
virtual void SetFromNode(DataNode *);
private:
void DeleteViewsFromInterface();
void DeleteViews();
void SaveCurrentView();
void UseSavedView(int index);
......
......@@ -5,6 +5,7 @@
#include <AttributeSubject.h>
#include <ViewerSubject.h>
#include <ViewerMessaging.h>
#include <DebugStream.h>
// ****************************************************************************
// Method: ViewerConfigManager::ViewerConfigManager
......@@ -216,6 +217,10 @@ ViewerConfigManager::ReadConfigFile(const char *filename)
// Brad Whitlock, Fri Mar 21 10:06:56 PDT 2003
// I added code to process old versions and modify the viewer DataNode.
//
// Brad Whitlock, Mon Aug 25 14:36:52 PST 2003
// Added code to unselect all fields in the AttributeSubjects so we have
// the option of later only sending the ones that changed.
//
// ****************************************************************************
void
......@@ -241,25 +246,27 @@ ViewerConfigManager::ProcessConfigSettings(DataNode *node)
if(defaultsNode == 0)
defaultsNode = viewerNode;
//
// Unselect all fields in the connected AttributeSubjects so we can
// later send only the ones that changed to the client.
//
std::vector<AttributeSubject *>::iterator pos;
for (pos = subjectList.begin(); pos != subjectList.end(); ++pos)
(*pos)->UnSelectAll();
// Get the version
DataNode *version = visitRoot->GetNode("Version");
if(version != 0)
{
// Do any modifications on the tree that need to be done.
std::string configVersion(version->AsString());
std::vector<AttributeSubject *>::iterator pos;
for (pos = subjectList.begin(); pos != subjectList.end(); ++pos)
{
(*pos)->ProcessOldVersions(defaultsNode, configVersion.c_str());
}
}
// Read the attributes into the state objects and notify the observers.
std::vector<AttributeSubject *>::iterator pos;
for (pos = subjectList.begin(); pos != subjectList.end(); ++pos)
{
(*pos)->SetFromNode(defaultsNode);
}
}
// ****************************************************************************
......@@ -286,6 +293,41 @@ ViewerConfigManager::Notify()
}
}
// ****************************************************************************
// Method: ViewerConfigManager::NotifyIfSelected
//
// Purpose:
// Calls Notify on all subjects registered with the config manager that have
// some fields that have been selected.
//
// Programmer: Brad Whitlock
// Creation: Mon Aug 25 14:32:02 PST 2003
//
// Modifications:
//
// ****************************************************************************
void
ViewerConfigManager::NotifyIfSelected()
{
// Call Notify() on all subjects.
std::vector<AttributeSubject *>::iterator pos;
for (pos = subjectList.begin(); pos != subjectList.end(); ++pos)
{
if((*pos)->NumAttributesSelected() > 0)
{
debug4 << "Sending " << (*pos)->TypeName().c_str()
<< " to client." << endl;
(*pos)->Notify();
}
else
{
debug4 << "Not sending " << (*pos)->TypeName().c_str()
<< " to client." << endl;
}
}
}
// ****************************************************************************
// Method: ViewerConfigManager::ClearSubjects
//
......
......@@ -51,6 +51,9 @@ class ViewerSubject;
// Brad Whitlock, Wed Jul 9 12:44:08 PDT 2003
// I added methods to export the entire state and import the entire state.
//
// Brad Whitlock, Mon Aug 25 14:28:23 PST 2003
// Added NotifyIfSelected.
//
// ****************************************************************************
class VIEWER_API ViewerConfigManager : public ConfigManager
......@@ -63,6 +66,7 @@ public:
virtual DataNode *ReadConfigFile(const char *filename);
void ProcessConfigSettings(DataNode *);
void Notify();
void NotifyIfSelected();
void ClearSubjects();
void Add(AttributeSubject *subject);
......
......@@ -3222,6 +3222,9 @@ ViewerSubject::ExportEntireState()
// Brad Whitlock, Wed Jul 30 14:48:56 PST 2003
// Added another argument to ImportEntireState.
//
// Brad Whitlock, Mon Aug 25 14:28:00 PST 2003
// Added the NotifyIfSelected method call.
//
// ****************************************************************************
void
......@@ -3229,6 +3232,7 @@ ViewerSubject::ImportEntireState()
{
configMgr->ImportEntireState(viewerRPC.GetVariable(),
viewerRPC.GetBoolFlag());
configMgr->NotifyIfSelected();
}
// ****************************************************************************
......
......@@ -5452,6 +5452,10 @@ ViewerWindowManager::CreateNode(DataNode *parentNode, bool detailed)
// Brad Whitlock, Thu Jul 17 14:25:02 PST 2003
// Added code to reconstruct all of the windows in the config file.
//
// Brad Whitlock, Mon Aug 25 11:42:49 PDT 2003
// Added code to temporarily disable "clone window on first reference" when
// setting the active window once all the windows are established.
//
// ****************************************************************************
void
......@@ -5586,7 +5590,7 @@ ViewerWindowManager::SetFromNode(DataNode *parentNode)
}
}
else if(nWindows < newNWindows)
AddWindow();
AddWindow(false);
}
delete [] existingWindows;
......@@ -5606,6 +5610,8 @@ ViewerWindowManager::SetFromNode(DataNode *parentNode)
//
// Set the active window.
//
bool cloneWindowFlag = clientAtts->GetCloneWindowOnFirstRef();
clientAtts->SetCloneWindowOnFirstRef(false);
DataNode *node;
if((node = searchNode->GetNode("activeWindow")) != 0)
{
......@@ -5617,6 +5623,7 @@ ViewerWindowManager::SetFromNode(DataNode *parentNode)
}
else
UpdateAllAtts();
clientAtts->SetCloneWindowOnFirstRef(cloneWindowFlag);
//
// Set the lineout window.
......
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.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment