// // QPerforce is a gui interface to the perforce revision control // system. It is based on the qt library, and should be easily portable // across any platform that has this toolkit available. // // Copyright (C) 2002 Jacob Gladish // #ifndef __I_UPDATEABLE_H__ #define __I_UPDATEABLE_H__ #include <qdatetime.h> #include <qlist.h> #include "clientapi.h" template< typename T > class IUpdateable : public ClientUser { public: IUpdateable() { _nextUpdateTime = QDateTime::currentDateTime(); // cache is stale very ten minutes by default. _maxCacheLifeSeconds = static_cast< int >( 60 * 10 ); } inline bool cacheIsStale(); inline void setMaxCacheLife( int seconds ); inline int getMaxCacheLife( void ) const; inline const T& getCache( bool forceFlush = false ); void refreshCache(); void updateCacheIfNecessary(); static void dumpDict( StrDict* varList ); static void replaceNewlinesWithSpaces( QString& s ); protected: virtual void updateCache() = 0; QDateTime _nextUpdateTime; int _maxCacheLifeSeconds; T _cache; }; template< typename T > inline bool IUpdateable<T>::cacheIsStale() { return QDateTime::currentDateTime() >= _nextUpdateTime; } template< typename T > inline void IUpdateable<T>::setMaxCacheLife( int seconds ) { _maxCacheLifeSeconds = seconds; } template< typename T > inline int IUpdateable<T>::getMaxCacheLife( void ) const { return _maxCacheLifeSeconds; } template< typename T > inline void IUpdateable<T>::updateCacheIfNecessary() { if (this->cacheIsStale()) { this->refreshCache(); } } template< typename T > inline const T& IUpdateable<T>::getCache( bool forceFlush ) { if (forceFlush) { this->refreshCache(); } else { if (this->cacheIsStale()) { this->refreshCache(); } } return _cache; } template< typename T > inline void IUpdateable<T>::refreshCache() { updateCache(); // qDebug( "Last UPdate: %s", _nextUpdateTime.toString().latin1() ); _nextUpdateTime = QDateTime::currentDateTime(); // qDebug( "Next update before: %s", _nextUpdateTime.toString().latin1() ); _nextUpdateTime = _nextUpdateTime.addSecs( _maxCacheLifeSeconds ); // qDebug( "Next update after: %s", _nextUpdateTime.toString().latin1() ); } template< typename T > inline void IUpdateable<T>::dumpDict( StrDict* varList ) { // qDebug ("User::UserListCache::OutputStat"); ASSERT( varList != NULL ); StrBuf msg; StrPtr var, val; for (int i = 0; varList->GetVar(i, var, val); i++) { msg.Clear(); msg << var << " " << val; char level = strncmp(var.Text(), "other", 5) ? '1' : '2'; switch( level ) { default: case '0': qDebug ("Default: %s", msg.Text()); break; case '1': qDebug ("... %s", msg.Text()); break; case '2': qDebug ("... ... %s", msg.Text()); break; } } } template< typename T > void IUpdateable<T>::replaceNewlinesWithSpaces( QString& s ) { for (unsigned i = 0; i < s.length(); i++) { if (s.at(i) == '\r' || s.at(i) == '\n') { s.replace( i, 1," " ); } } } #endif
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#9 | 3782 | Jacob Gladish | I have no clue... | ||
#8 | 2157 | Jacob Gladish | Adding initial support for the client view of the depot. | ||
#7 | 2145 | Jacob Gladish | Added PendingChanges listview | ||
#6 | 2128 | Jacob Gladish | Renamed changelist to change | ||
#5 | 2118 | Jacob Gladish | changed server interface to use perforce c++ api instead of p4 command. | ||
#4 | 2100 | Jacob Gladish | Adding more menu's, tables, and a few icons. | ||
#3 | 2098 | Jacob Gladish |
changed the IUpdateable abstract class to be a template. The template parameter is the structure that backs the storage for the class. |
||
#2 | 2095 | Jacob Gladish | Added ability to view submitted changelists. | ||
#1 | 2092 | Jacob Gladish | Importing initial code |