** This is part of the CTSim program
** Copyright (C) 1983-2001 Kevin Rosenberg
**
-** $Id: backgroundmgr.cpp,v 1.1 2001/02/22 15:00:20 kevin Exp $
+** $Id: backgroundmgr.cpp,v 1.2 2001/02/22 18:22:40 kevin Exp $
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License (version 2) as
m_pCanvas = new BackgroundManagerCanvas (this);
theApp->setIconForFrame (this);
- Show(true);
- // if (m_iNumTasks == 0)
- // Show(false);
+ Show(false);
}
wxGauge*
-BackgroundManager::addTask (BackgroundTask* pTask, int iNumUnits)
+BackgroundManager::addTask (BackgroundTask* pTask, int iNumUnits, const char* const pszTaskName)
{
+ wxCriticalSectionLocker locker (m_criticalSection);
+ int iNumTasks = m_vecpBackgroundTasks.size();
+ int iTaskHeight = 20;
wxSize size (50, 10);
- wxPoint pos (4, 5);
+ wxPoint pos (4, 5 + iNumTasks * iTaskHeight);
wxGauge* pGauge = new wxGauge (m_pCanvas, -1, iNumUnits, pos, size);
m_vecpBackgroundTasks.push_back (pTask);
+ m_vecpGauges.push_back (pGauge);
+ m_vecpNames.push_back (new std::string (pszTaskName));
m_iNumTasks++;
+
+ Show(true);
return (pGauge);
}
void
BackgroundManager::taskDone (BackgroundTask* pTask)
{
- m_iNumTasks--;
+ wxCriticalSection doneSection;
+ doneSection.Enter();
+
+ StringContainer::iterator iName = m_vecpNames.begin();
+ GaugeContainer::iterator iGauge = m_vecpGauges.begin();
+ for (TaskContainer::iterator iTask = m_vecpBackgroundTasks.begin(); iTask != m_vecpBackgroundTasks.end(); iTask++) {
+ if (*iTask == pTask) {
+ delete *iName;
+ delete *iGauge;
+ m_vecpBackgroundTasks.erase (iTask);
+ m_vecpGauges.erase (iGauge);
+ m_vecpNames.erase (iName);
+ m_iNumTasks--;
+ break;
+ }
+ iTask++;
+ iGauge++;
+ }
+
+ doneSection.Leave();
+ if (m_iNumTasks <= 0)
+ Show(false);
+ m_pCanvas->Refresh();
+ // delete pTask;
}
bool