Example #1
0
    MistString Path::GetHome() {
#if defined(MIST_OS_WINDOWS)
        MistString result = Path::GetEnv(L"HOMEDRIVE");
        result.append(Path::GetEnv(L"HOMEPATH"));
       
        size_t n = result.size();
        if(n > 0 && result[n-1] != L'\\')
            result.append(L"\\");
        return result;
        
#elif defined(MIST_OS_FAMILY_UNIX)
        std::string path;
        struct passwd* pwd = getpwuid(getuid());
        if(pwd)
            path = pwd->pw_dir;
        else {
            pwd = getpwuid(getuid());
            if(pwd) 
                path = pwd->pw_dir;
            else 
                return Path::GetEnv(L"HOME") + L"/";
        }
        
        size_t n = path.size();
        if(n > 0 && path[n-1] != '/')
            path.append("/");
        return string::StringToWStringFast(path);
#endif           
    }
Example #2
0
 void FormatString::replace(const MistString& search, const MistString& replacement) {
     size_t pos = 0;
     while((pos = mStr.find(search, pos)) != MistString::npos) {
         mStr.replace(pos, search.length(), replacement);
         pos += replacement.length();
     }
 }
Example #3
0
 MistString Path::GetFileNameWithoutExtension(const MistString& path) {
     MistString filename = Path::GetFileName(path);
     size_t rs = filename.rfind(L'.');
     if(rs != MistString::npos) {
         return MistString(filename.begin(), filename.begin() + rs);
     }
     return filename;
 }
Example #4
0
 MistString Path::GetDirectory(const MistString& path) {
     size_t rs = path.rfind(L'/');
     if(rs == MistString::npos) {
         rs = path.rfind(L'\\');
     }
     if(rs != MistString::npos) {
         return MistString(path.begin(), path.begin() + rs + 1);
     }
     return MistString(L"");
 }
Example #5
0
 MistString Path::GetFileName(const MistString& path) {
     size_t rs = path.rfind(L'/');
     if(rs == MistString::npos) {
         rs = path.rfind(L'\\');
     }
     if(rs != MistString::npos) {
         return MistString(path.begin() + (rs+1), path.end());
     }
     return path;
 }
Example #6
0
 DirectoryIterator& DirectoryIterator ::operator++() {
     if(mImpl) {
         MistString n = mImpl->next();
         if(n.empty())
             mIsEnd = true;
         else {
             mFile = mPath + mImpl->get();
         }
     }
     return *this;
 }
Example #7
0
    bool File::MoveDirectory(const MistString& src, const MistString& dst) {
#if defined(MIST_OS_WINDOWS)
        return ::MoveFileW(src.c_str(),
                           dst.c_str()) == TRUE;
        
#elif defined(MIST_OS_FAMILY_APPLE)
        return mist_apple_moveitem(src, dst);
        
#elif defined(MIST_OS_FAMILY_UNIX)
        return ::rename(string::WStringToString(src).c_str(),
                        string::WStringToString(dst).c_str()) == 0;
        
#endif
    }
Example #8
0
        DirectoryIteratorImpl(const MistString& path) {
            MistString findPath = path + L"/*";
            
            mFH = FindFirstFileW(findPath.c_str(), &mFD);
            if(mFH == INVALID_HANDLE_VALUE) {
				DWORD error = GetLastError();
                if(error != ERROR_NO_MORE_FILES) {
                    
                }
            } else {
                mCurrent = mFD.cFileName;
                if(mCurrent == L"." || mCurrent == L"..")
                    next();
            }
        }
Example #9
0
    MistString Path::GetEnv(const MistString& env) {
#if defined(MIST_OS_WINDOWS)
        DWORD len = GetEnvironmentVariableW(env.c_str(), 0, 0);
        if (len != 0) {
            wchar_t* buffer = new wchar_t[len];
            GetEnvironmentVariableW(env.c_str(), buffer, len);
            MistString result(buffer);
            delete [] buffer;
            return result;
        }
        
#elif defined(MIST_OS_FAMILY_UNIX)
        return string::StringToWStringFast(getenv(string::WStringToString(env).c_str()));
#endif
        
        return MistString();
    }
Example #10
0
    bool File::CopyFile(const MistString& src, const MistString& dst) {
     
#if defined(MIST_OS_WINDOWS)
        
        return ::CopyFileW(src.c_str(),
                           dst.c_str(),
                           FALSE) == TRUE;
        
#elif defined(MIST_OS_FAMILY_APPLE)
        return mist_apple_copyitem(src, dst);
        
#elif defined(MIST_OS_FAMILY_UNIX)
        return mist_generic_cp_mv("/bin/cp",
                                  string::WStringToString(src).c_str(),
                                  string::WStringToString(dst).c_str());
        
#endif
        
    }
Example #11
0
    float4 Convert::ToFloat4(const MistString& str) {
        MistString buffer;
        size_t pos = 0;
        float4 result;
        while(str[pos] == L' ') 
            pos ++;
        for(int i=0; i<4; ++i) {
            while(str[pos] != ' ' && pos < str.size()) {
                buffer.push_back(str[pos]);
                pos ++;
            }
            result.value[i] = (float)Convert::ToDouble(buffer);
            buffer.clear();

            while(str[pos] == L' ' && pos < str.size()) 
                pos ++;
        }
        return result;
    }
Example #12
0
    bool File::CopyDirectory(const MistString& src, const MistString& dst) {
#if defined(MIST_OS_WINDOWS)
        SHFILEOPSTRUCT s = { 0 };
        s.hwnd = 0;
        s.wFunc = FO_COPY;
        s.fFlags = FOF_SILENT;
        s.pTo = dst.c_str();
        s.pFrom = src.c_str();
        return SHFileOperation(&s) == 0;
        
#elif defined(MIST_OS_FAMILY_APPLE)
        return mist_apple_copyitem(src, dst);      
        
#elif defined(MIST_OS_FAMILY_UNIX)
        return mist_generic_cp_mv("/bin/cp",
                                  string::WStringToString(src).c_str(),
                                  string::WStringToString(dst).c_str(),
                                  true);
        
#endif
        
    }
Example #13
0
    MistString Path::ExpandPath(const MistString& path) {
#if defined(MIST_OS_WINDOWS)
        wchar_t buffer[_MAX_PATH];
        DWORD n = ExpandEnvironmentStringsW(path.c_str(), buffer, sizeof(buffer));
        if(n > 0 && n < sizeof(buffer)) {
            return MistString(buffer, n-1);
        } else
            return path;
        
#elif defined(MIST_OS_FAMILY_UNIX)
        MistString result;
        MistString::const_iterator it  = path.begin();
        MistString::const_iterator end = path.end();
        if (it != end && *it == L'~') {
            ++it;
            if (it != end && *it == L'/') {
                result += Path::GetHome(); ++it;
            }
            else result += '~';
        }
        while (it != end) {
            if (*it == L'$') {
                std::wstring var;
                ++it;
                if (it != end && *it == L'{') {
                    ++it;
                    while (it != end && *it != L'}') var += *it++;
                    if (it != end) ++it;
                }
                else {
                    while (it != end && (((*it >= L'a' && *it <= L'z') || (*it >= L'A' && *it <= L'Z') || (*it >= L'0' && *it <= L'9')) || *it == L'_')) var += *it++;
                }
                result += Path::GetEnv(var);
            }
            else result += *it++;
        }
        return result;
#endif    
    }
Example #14
0
    bool File::DeleteDirectory(const MistString& src) {
#if defined(MIST_OS_WINDOWS)
        return ::RemoveDirectoryW(src.c_str()) == TRUE;
        
#elif defined(MIST_OS_FAMILY_APPLE)
        return mist_apple_deleteitem(src);
        
#elif defined(MIST_OS_FAMILY_UNIX)
        return mist_generic_rm(string::WStringToString(src).c_str(),
                               true);
        
#endif
    }
Example #15
0
    bool File::DeleteFile(const MistString& src) {
#if defined(MIST_OS_WINDOWS)
        return ::DeleteFileW(src.c_str()) == TRUE;
        
#elif defined(MIST_OS_FAMILY_APPLE)
        return mist_apple_deleteitem(src);
        
        
#elif defined(MIST_OS_FAMILY_UNIX)
        return ::remove(string::WStringToString(src).cstr()) == 0;
        
#endif
    }
Example #16
0
    bool File::PathExists(const MistString& path) {
#ifdef MIST_OS_WINDOWS
        return PathFileExistsW(path.c_str())?true:false;

#else
        struct stat sb;
        
        if (stat(string::WStringToString(path).c_str(), &sb) == 0 && S_ISDIR(sb.st_mode)) {
            return true;
        }
#endif
        
        return false;
    }
Example #17
0
    bool File::CreateDirectory(const MistString& dir){
#if defined(MIST_OS_WINDOWS)
        return ::CreateDirectoryW(dir.c_str(),
                                  NULL) == TRUE;
        
#elif defined(MIST_OS_FAMILY_APPLE)

        return mist_apple_createdirectory(dir);
        
#elif defined(MIST_OS_FAMILY_UNIX)
        return mkdir(string::WStringToString(dir).c_str(),
                     S_IRWXU) == 0;
        
#endif
    }
Example #18
0
    bool File::FileExists(const MistString& filepath) {
#ifdef MIST_OS_WINDOWS
        return PathFileExistsW(filepath.c_str())?true:false;
        
#elif defined(MIST_OS_FAMILY_APPLE)
        return mist_apple_file_exists(filepath);
#else
        
        struct stat sb;
        
        if (stat(Miststring::WStringToString(filepath).c_str(), &sb) == 0 && S_ISREG(sb.st_mode)) {
            return true;
        }
#endif
        return false;
    }
Example #19
0
 bool AnimationPlayer::deserialize(const ConfigParserPtr& parser) {
     if(parser->toNode(L"animations")) {
         if(parser->toFirstChild()) {
             do {
                 StoryBoardPtr storyboard = MakeSharedPtr<StoryBoard>();
                 MistString name = parser->getString(L"name");
                 if(!name.empty()) {
                     bool isdefault = parser->getBool(L"default", false);
                     if(isdefault)
                         setDefault(name);
                     
                     if(parser->toFirstChild()) {
                         do {
                             MistString type = parser->getCurrentNodeName();
                             
                             // linear animation
                             if(type == L"linear") {
                                 MistString prop_name = parser->getString(L"prop");
                                 MistString prop_type = parser->getString(L"prop_type");
                                 
                                 void* prop = getProperty(prop_name);
                                 if(prop) {
                                     create_linear_animation(prop_type,
                                                             prop,
                                                             parser,
                                                             storyboard.get());
                                 }
                                 
                             // keyframe animation
                             } else if(type == L"keyframe") {
                                 MistString prop_name = parser->getString(L"prop");
                                 MistString prop_type = parser->getString(L"prop_type");
                                 void* prop = getProperty(prop_name);
                                 if(prop) {
                                     create_key_frame_animation(prop_type,
                                                                prop,
                                                                parser,
                                                                storyboard.get());
                                   
                                     // back to parent node
                                     parser->toParent();
                                 }
                             }
                             
                         } while(parser->toNextChild());
                         
                         // back to parent node
                         parser->toParent();
                         
                         // add storyboard
                         mStoryBoards[name] = storyboard;
                         // connect to finish event
                         storyboard->onComplete() += Bind(this, &AnimationPlayer::onAnimationFinished);
                     }
                         
                 }
                 
             } while(parser->toNextChild());
             
             parser->toParent();
         }
         
         parser->toParent();
     } else
         return false;
     
     if(!mDefault.empty())
         play(mDefault);
     
     return true;
 }