TimerManager::TimerManager(Stack* documents, QWidget* parent) : QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint), m_documents(documents) { setWindowTitle(tr("Timers")); // Set up interaction with timer display m_display = new TimerDisplay(m_timers, this); m_display->setContextMenuPolicy(Qt::CustomContextMenu); connect(m_display, SIGNAL(clicked()), this, SLOT(toggleVisibility())); connect(m_display, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(recentTimerMenuRequested(const QPoint&))); // Create clock m_clock_label = new QLabel(this); m_clock_label->setAlignment(Qt::AlignCenter); m_clock_timer = new QTimer(this); m_clock_timer->setInterval(1000); connect(m_clock_timer, SIGNAL(timeout()), this, SLOT(updateClock())); startClock(); // Create timers layout QWidget* timers_widget = new QWidget(this); m_timers_layout = new QVBoxLayout(timers_widget); m_timers_layout->addStretch(); m_timers_layout->setSizeConstraint(QLayout::SetMinAndMaxSize); m_timers_area = new QScrollArea(this); m_timers_area->setWidget(timers_widget); m_timers_area->setWidgetResizable(true); // Create action buttons QDialogButtonBox* buttons = new QDialogButtonBox(QDialogButtonBox::Close, Qt::Horizontal, this); connect(buttons, SIGNAL(rejected()), this, SLOT(close())); m_new_button = buttons->addButton(tr("New"), QDialogButtonBox::ActionRole); m_new_button->setDefault(true); connect(m_new_button, SIGNAL(clicked()), this, SLOT(newTimer())); m_recent_timers = new QMenu(this); m_recent_button = buttons->addButton(tr("Recent"), QDialogButtonBox::ActionRole); m_recent_button->setMenu(m_recent_timers); setupRecentMenu(); connect(m_recent_timers, SIGNAL(triggered(QAction*)), this, SLOT(recentTimer(QAction*))); // Lay out window QVBoxLayout* layout = new QVBoxLayout(this); layout->addWidget(m_clock_label); layout->addWidget(m_timers_area, 1); layout->addWidget(buttons); setMinimumHeight(sizeHint().width()); QSettings settings; settings.beginGroup("Timers"); resize(settings.value("DialogSize").toSize()); // Load currently running timers QStringList ids = settings.childKeys(); foreach (const QString& id, ids) { int i = id.mid(5).toInt(); if (!id.startsWith("Timer") || i == 0) { continue; } Timer* timer = new Timer(id, m_documents, this); addTimer(timer); timerChanged(timer); }
void Timer::startTicking() { ++secondCounting; timerChanged(); }