#include <config.h>
+#include "support/lassert.h"
+#include "support/Timeout.h"
+#include "support/debug.h"
+
#include <QObject>
#include <QTimerEvent>
-#include "debug.h"
-#include "Timeout.h"
+#include <ctime>
+#include <iomanip>
+#include <sstream>
+using namespace std;
namespace lyx {
///
Impl(Timeout & owner) : owner_(owner), timeout_id(-1) {}
///
- bool running() const { return timeout_id != -1; }
+ bool running() const { return timeout_id != -1; }
/// start the timer
void start();
/// stop the timer
unsigned int timeout_ms() const { return owner_.timeout_ms; }
protected:
- ///
+ ///
void timerEvent(QTimerEvent *) { owner_.emit(); }
private:
void Timeout::Impl::start()
{
if (running())
- lyxerr << "Timeout::start: already running!" << std::endl;
+ lyxerr << "Timeout::start: already running!" << endl;
timeout_id = startTimer(timeout_ms());
}
Timeout & Timeout::setTimeout(unsigned int msec)
{
// Can't have a timeout of zero!
- BOOST_ASSERT(msec);
+ LASSERT(msec, msec = 1000);
timeout_ms = msec;
return *this;
}
+struct Timer::Private
+{
+ time_t start_time;
+};
+
+
+Timer::Timer() : d(new Private)
+{
+ restart();
+}
+
+
+void Timer::restart()
+{
+ time(&d->start_time);
+}
+
+
+int Timer::elapsed() const
+{
+ time_t end_time;
+ time(&end_time);
+ double diff = difftime(end_time, d->start_time);
+ return int(diff);
+}
+
+
+string Timer::timeStr(char separator) const
+{
+ tm * timeinfo = localtime(&d->start_time);
+ // With less flexibility we could also use:
+ //strftime(buffer, 10, "%X", timeinfo);
+ ostringstream out;
+ out << setw(2) << setfill('0');
+ if (separator) {
+ out << separator << setw(2) << setfill('0') << timeinfo->tm_hour
+ << separator << setw(2) << setfill('0') << timeinfo->tm_min
+ << separator << setw(2) << setfill('0') << timeinfo->tm_sec;
+ } else {
+ out << setw(2) << setfill('0') << timeinfo->tm_hour
+ << setw(2) << setfill('0') << timeinfo->tm_min
+ << setw(2) << setfill('0') << timeinfo->tm_sec;
+ }
+ return out.str();
+}
+
+
+string Timer::dateStr(char separator) const
+{
+ tm * timeinfo = localtime(&d->start_time);
+ // With less flexibility we could also use:
+ //res = strftime(buffer, 10, "%d%m%y", timeinfo);
+ ostringstream out;
+ out << setw(2) << setfill('0') << timeinfo->tm_mday;
+ if (separator)
+ out << separator;
+ out << setw(2) << setfill('0') << timeinfo->tm_mon;
+ if (separator)
+ out << separator;
+ out << setw(2) << setfill('0') << timeinfo->tm_year - 100;
+ return out.str();
+}
+
+
+string Timer::toStr() const
+{
+ tm * timeinfo = localtime(&d->start_time);
+ return asctime(timeinfo);
+}
+
+
+string Timer::currentToStr()
+{
+ time_t current_time;
+ time(¤t_time);
+ tm * timeinfo = localtime(¤t_time);
+ return asctime(timeinfo);
+}
+
} // namespace lyx