-
Notifications
You must be signed in to change notification settings - Fork 126
/
Copy pathDirNameParameter.cpp
91 lines (80 loc) · 3.3 KB
/
DirNameParameter.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2007-2010, Image Engine Design Inc. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// * Neither the name of Image Engine Design nor the names of any
// other contributors to this software may be used to endorse or
// promote products derived from this software without specific prior
// written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////
#include "IECore/DirNameParameter.h"
#include "IECore/CompoundObject.h"
#include "boost/algorithm/string/classification.hpp"
#include "boost/algorithm/string/split.hpp"
#if BOOST_VERSION >= 108500
#include <boost/filesystem/path.hpp>
#else
#include <boost/filesystem/convenience.hpp>
#endif
#include "boost/filesystem/operations.hpp"
#include <algorithm>
using namespace boost;
using namespace std;
using namespace IECore;
IE_CORE_DEFINERUNTIMETYPED( DirNameParameter );
DirNameParameter::DirNameParameter( const std::string &name, const std::string &description,
const std::string &defaultValue, bool allowEmptyString, PathParameter::CheckType check,
const StringParameter::PresetsContainer &presets, bool presetsOnly, ConstCompoundObjectPtr userData )
: PathParameter( name, description, defaultValue, allowEmptyString, check, presets, presetsOnly, userData )
{
}
bool DirNameParameter::valueValid( const Object *value, std::string *reason ) const
{
if (!PathParameter::valueValid( value, reason ) )
{
return false;
}
const StringData *s = static_cast<const StringData *>( value );
// empty check
if( s->readable()=="" )
{
// if empty strings are allowed and we have one then we should
// skip the other checks
return true;
}
// dir type check
if( boost::filesystem::exists(boost::filesystem::path(s->readable())) &&
!boost::filesystem::is_directory(boost::filesystem::path(s->readable())))
{
if( reason )
{
*reason = "\"" + s->readable() + "\" is not a directory!";
}
return false;
}
return true;
}