00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "ShedulerWnd.h"
00009 #include "plugins.h"
00010 #include "ScheduleSheet.h"
00011 #include "plugincmds.h"
00012 #include "DownloadsWnd.h"
00013 #include "mfchelp.h"
00014
00015 #ifdef _DEBUG
00016 #define new DEBUG_NEW
00017 #undef THIS_FILE
00018 static char THIS_FILE[] = __FILE__;
00019 #endif
00020
00021 CShedulerWnd* _pwndScheduler;
00022
00023 extern CDownloadsWnd* _pwndDownloads;
00024
00025 CShedulerWnd::CShedulerWnd()
00026 {
00027 m_mgr.SetEventFunc (_ScheduleMgrEventFunc, this);
00028 m_mgr.SetEventDescFunc (_ScheduleMgrEventDesc, this);
00029 m_wndLog.SetEvMgr (&m_evMgr);
00030 }
00031
00032 CShedulerWnd::~CShedulerWnd()
00033 {
00034
00035 }
00036
00037 BEGIN_MESSAGE_MAP(CShedulerWnd, CWnd)
00038
00039 ON_WM_DESTROY()
00040 ON_WM_CREATE()
00041 ON_WM_SIZE()
00042 ON_COMMAND(ID_TASKS_DELETETASK, OnTasksDeletetask)
00043 ON_COMMAND(ID_TASKS_DISABLE, OnTasksDisable)
00044 ON_COMMAND(ID_TASKS_ENABLE, OnTasksEnable)
00045 ON_COMMAND(ID_TASKS_PROPERTIES, OnTasksProperties)
00046 ON_COMMAND(ID_CREATENEWTASK, OnCreatenewtask)
00047 ON_WM_SETFOCUS()
00048
00049
00050 ON_MESSAGE (WM_WGP_SHUTDOWN, OnAppExit)
00051 ON_MESSAGE (WM_WGP_READYTOSHUTDOWN, OnAppQueryExit)
00052 ON_MESSAGE (WM_WGP_UPDATE_MENUMAIN, OnUpdateMenu)
00053 ON_MESSAGE (WM_WGP_UPDATE_MENUVIEW, OnUpdateMenuView)
00054 ON_MESSAGE (WM_WGP_UPDATE_CMDITEM, OnUpdateToolBar)
00055 ON_MESSAGE (WM_WGP_INSERT, OnInsert)
00056
00057 ON_COMMAND(WGP_MENU_VIEWSMPLITEM_CMDSTART+0, OnShowLog)
00058
00059 ON_COMMAND_RANGE(ID_TASKS_1, ID_TASKS_4, OnTasksListShowCol)
00060 ON_COMMAND_RANGE(ID_LOG_1, ID_LOG_3, OnLogShowCol)
00061
00062 END_MESSAGE_MAP()
00063
00064 HWND CShedulerWnd::Plugin_CreateMainWindow(HWND hParent)
00065 {
00066 fsnew1 (_pwndScheduler, CShedulerWnd);
00067
00068 _pwndScheduler->Create (CWnd::FromHandle (hParent));
00069
00070 return _pwndScheduler->m_hWnd;
00071 }
00072
00073 BOOL CShedulerWnd::Create(CWnd *pParent)
00074 {
00075 CRect rc (0, 0, 50, 50);
00076
00077 if (FALSE == CWnd::Create (AfxRegisterWndClass (0, NULL,
00078 NULL, NULL), NULL, WS_CHILD | WS_VISIBLE, rc, pParent, 0x16721))
00079 return FALSE;
00080
00081 return TRUE;
00082 }
00083
00084 void CShedulerWnd::OnDestroy()
00085 {
00086 CWnd::OnDestroy();
00087
00088 delete _pwndScheduler;
00089 }
00090
00091 LRESULT CShedulerWnd::OnAppExit(WPARAM, LPARAM)
00092 {
00093 LOG ("Shutting down Scheduler..." << nl);
00094
00095 LOG ("saving all..." << nl);
00096
00097 SaveAll ();
00098
00099 LOG ("stopping ScheduleMgr..." << nl);
00100
00101 m_mgr.Stop ();
00102
00103 LOG ("Scheduler shutted down" << nl);
00104
00105 return 0;
00106 }
00107
00108 LRESULT CShedulerWnd::OnAppQueryExit(WPARAM, LPARAM)
00109 {
00110 return 0;
00111 }
00112
00113 int CShedulerWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
00114 {
00115 if (CWnd::OnCreate(lpCreateStruct) == -1)
00116 return -1;
00117
00118 m_bShowLog = _App.View_SchedulerLog ();
00119
00120 if (FALSE == m_wndTasks.Create (this))
00121 return -1;
00122
00123 if (FALSE == m_wndLog.Create (this))
00124 return -1;
00125
00126 if (FALSE == m_wndSplitter.Create (AfxGetInstanceHandle (), m_hWnd, WST_HORIZONTAL))
00127 return -1;
00128
00129 m_wndSplitter.SetWnd1 (m_wndTasks);
00130 m_wndSplitter.SetWnd2 (m_wndLog);
00131 m_wndSplitter.SetRatio (_App.View_SplitterRatio ("Scheduler_T_L"));
00132
00133 LoadTasks ();
00134
00135 _pwndDownloads->UpdateAllDownloads ();
00136
00137 ShowLog (m_bShowLog);
00138
00139 return 0;
00140 }
00141
00142 void CShedulerWnd::OnSize(UINT , int cx, int cy)
00143 {
00144 if (m_bShowLog)
00145 m_wndSplitter.ApplyRatio ();
00146 else
00147 m_wndTasks.MoveWindow (0, 0, cx, cy);
00148 }
00149
00150 void CShedulerWnd::OnCreatenewtask()
00151 {
00152 CScheduleSheet sheet (LS (L_NEWTASK), this);
00153
00154 fsSchedule task;
00155
00156
00157 _App.Scheduler_LastTask_read (&task);
00158
00159 sheet.Init (&task);
00160
00161 _DlgMgr.OnDoModal (&sheet);
00162
00163 if (IDOK != sheet.DoModal ())
00164 {
00165 _DlgMgr.OnEndDialog (&sheet);
00166 return;
00167 }
00168
00169 _DlgMgr.OnEndDialog (&sheet);
00170
00171 _App.Scheduler_LastTask_save (&task);
00172
00173 AddTask (&task);
00174 }
00175
00176 void CShedulerWnd::_ScheduleMgrEventFunc(fsSchedule *task, fsScheduleMgrEvent ev, LPVOID lp)
00177 {
00178 CShedulerWnd *pThis = (CShedulerWnd*) lp;
00179
00180 switch (ev)
00181 {
00182 case SME_TASK_WILLBEDELETED:
00183 pThis->m_wndTasks.DeleteTaskFromList (task);
00184 break;
00185
00186 default:
00187 pThis->m_wndTasks.UpdateTask (task);
00188 }
00189 }
00190
00191 void CShedulerWnd::OnProperties(fsSchedule *task)
00192 {
00193 CScheduleSheet sheet (LS (L_TASKPROP), this);
00194
00195 sheet.Init (task);
00196
00197 if (IDOK != _DlgMgr.DoModal (&sheet))
00198 return;
00199
00200 if (sheet.IsNeedRecalculateStartTime ())
00201 m_mgr.CalculateStartTime (task);
00202
00203 m_mgr.OnTaskUpdated (task);
00204 }
00205
00206 void CShedulerWnd::LoadTasks()
00207 {
00208 CString strFile = fsGetDataFilePath ("schedules.sav");
00209
00210 if (GetFileAttributes (strFile) == DWORD (-1))
00211 return;
00212
00213 HANDLE hFile = CreateFile (strFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
00214
00215 BOOL bOk = hFile != INVALID_HANDLE_VALUE;
00216
00217 if (bOk)
00218 bOk = m_mgr.LoadStateFromFile (hFile);
00219
00220 if (bOk == FALSE)
00221 {
00222 if (hFile != INVALID_HANDLE_VALUE)
00223 CloseHandle (hFile);
00224
00225 return;
00226 }
00227
00228
00229 if (_App.App_2_0_SchedulerFixPerformed () == FALSE)
00230 {
00231 _App.App_2_0_SchedulerFixPerformed (TRUE);
00232
00233 int pos;
00234
00235 while (-1 != (pos = m_mgr.FindTask (WTS_SHUTDOWN)))
00236 m_mgr.DeleteTask (m_mgr.GetTask (pos));
00237
00238 while (-1 != (pos = m_mgr.FindTask (WTS_EXIT)))
00239 m_mgr.DeleteTask (m_mgr.GetTask (pos));
00240
00241 while (-1 != (pos = m_mgr.FindTask (WTS_HANGUP)))
00242 m_mgr.DeleteTask (m_mgr.GetTask (pos));
00243 }
00244
00245 int cTasks = m_mgr.GetTaskCount ();
00246 for (int i = 0; i < cTasks; i++)
00247 {
00248 m_wndTasks.AddTask (m_mgr.GetTask (i));
00249 }
00250
00251 if (FALSE == m_evMgr.Load (hFile))
00252 MessageBox (LS (L_CANTLOADSCHEDULERLOG), LS (L_ERR), MB_ICONERROR);
00253 else
00254 {
00255 int cEvents = m_evMgr.GetEventCount ();
00256
00257 for (int i = 0; i < cEvents; i++)
00258 m_wndLog.AddRecord (m_evMgr.GetEvent (i));
00259 }
00260
00261 CloseHandle (hFile);
00262 }
00263
00264 fsScheduleMgr* CShedulerWnd::GetMgr()
00265 {
00266 return &m_mgr;
00267 }
00268
00269 void CShedulerWnd::_ScheduleMgrEventDesc(LPCSTR pszEvent, fsScheduleMgrEventType enType, LPVOID lp)
00270 {
00271 CShedulerWnd *pThis = (CShedulerWnd*) lp;
00272
00273 fsDescEvent ev;
00274
00275 switch (enType)
00276 {
00277 case SMET_S:
00278 ev.clrBg = CLR_RESPONSE_S;
00279 ev.clrText = RGB (0, 0, 0);
00280 ev.iImage = 2;
00281 break;
00282
00283 case SMET_E:
00284 ev.clrBg = CLR_RESPONSE_E;
00285 ev.clrText = RGB (0, 0, 0);
00286 ev.iImage = 3;
00287 break;
00288
00289 case SMET_INPROGRESS:
00290 ev.clrBg = CLR_INQUIRY;
00291 ev.clrText = RGB (0, 0, 0);
00292 ev.iImage = 0;
00293 break;
00294 }
00295
00296 fsnew (ev.pszEvent, char, strlen (pszEvent) + 1);
00297 strcpy (ev.pszEvent, pszEvent);
00298
00299 pThis->m_evMgr.add (&ev);
00300 pThis->m_wndLog.AddRecord (&ev);
00301 }
00302
00303 void CShedulerWnd::AddTask(fsSchedule *task)
00304 {
00305 m_mgr.CalculateStartTime (task);
00306
00307 task->dwFlags |= SCHEDULE_ENABLED;
00308
00309 int iTask = m_mgr.AddTask (task);
00310
00311 m_wndTasks.AddTask (m_mgr.GetTask (iTask));
00312 }
00313
00314 LRESULT CShedulerWnd::OnUpdateMenu(WPARAM, LPARAM lp)
00315 {
00316 m_wndTasks.UpdateMenu (CMenu::FromHandle (*((HMENU*)lp)));
00317 return 0;
00318 }
00319
00320 void CShedulerWnd::OnTasksDeletetask()
00321 {
00322 m_wndTasks.OnTasksDeletetask ();
00323 }
00324
00325 void CShedulerWnd::OnTasksDisable()
00326 {
00327 m_wndTasks.OnTasksDisable ();
00328 }
00329
00330 void CShedulerWnd::OnTasksEnable()
00331 {
00332 m_wndTasks.OnTasksEnable ();
00333 }
00334
00335 void CShedulerWnd::OnTasksProperties()
00336 {
00337 m_wndTasks.OnTasksProperties ();
00338 }
00339
00340 void CShedulerWnd::UpdateTask(fsSchedule *task)
00341 {
00342 m_wndTasks.UpdateTask (task);
00343 }
00344
00345 void CShedulerWnd::SaveAll()
00346 {
00347 do
00348 {
00349 if (FALSE == SaveSchedules ())
00350 {
00351
00352 break;
00353 }
00354 else
00355 break;
00356 }
00357 while (TRUE);
00358
00359 _App.View_SplitterRatio ("Scheduler_T_L", m_wndSplitter.GetRatio ());
00360 m_wndTasks.SaveState ("SchedulerTasks");
00361 m_wndLog.SaveState ("SchedulerLog");
00362 }
00363
00364 void CShedulerWnd::Plugin_GetToolBarInfo(wgTButtonInfo **ppButtons, int *pcButtons)
00365 {
00366 static wgTButtonInfo btns [] =
00367 {
00368 wgTButtonInfo (ID_CREATENEWTASK, TBSTYLE_BUTTON, ""),
00369 wgTButtonInfo (ID_TASKS_PROPERTIES, TBSTYLE_BUTTON, ""),
00370 };
00371
00372 btns [0].pszToolTip = LS (L_NEWTASK);
00373 btns [1].pszToolTip = LS (L_TASKPROP);
00374
00375 *ppButtons = btns;
00376 *pcButtons = sizeof (btns) / sizeof (wgTButtonInfo);
00377 }
00378
00379 LRESULT CShedulerWnd::OnUpdateToolBar(WPARAM wp, LPARAM)
00380 {
00381 return m_wndTasks.OnUpdateToolBar (wp);
00382 }
00383
00384 void CShedulerWnd::Plugin_GetMenuImages(fsSetImage **ppImages, int *pcImages)
00385 {
00386 static fsSetImage images [] =
00387 {
00388 fsSetImage (ID_CREATENEWTASK, 0),
00389 fsSetImage (ID_TASKS_PROPERTIES, 1),
00390 fsSetImage (ID_TASKS_DELETETASK, 2)
00391 };
00392
00393 *ppImages = images;
00394 *pcImages = sizeof (images) / sizeof (fsSetImage);
00395 }
00396
00397 BOOL CShedulerWnd::HangupWhenDone(int* ppos)
00398 {
00399 int pos = -1;
00400 bool bEn = false;
00401
00402 do {
00403 pos = m_mgr.FindTask (WTS_HANGUP, pos);
00404 if (pos != -1 && m_mgr.GetTask (pos)->hts.enType == HTS_WHENDONE)
00405 break;
00406 }
00407 while (pos != -1);
00408
00409 if (pos != -1)
00410 bEn = (m_mgr.GetTask (pos)->dwFlags & SCHEDULE_ENABLED) != 0;
00411
00412 if (ppos)
00413 *ppos = pos;
00414
00415 return pos != -1 && bEn;
00416 }
00417
00418 void CShedulerWnd::HangupWhenDone(BOOL bUse)
00419 {
00420 int pos;
00421 if (!bUse == !HangupWhenDone (&pos))
00422 return;
00423
00424 if (bUse)
00425 {
00426 if (pos != -1) {
00427 m_mgr.GetTask (pos)->dwFlags |= SCHEDULE_ENABLED;
00428 m_wndTasks.UpdateTask (pos);
00429 return;
00430 }
00431
00432 fsSchedule task;
00433 task.dwFlags = SCHEDULE_ENABLED;
00434 if (_App.WD_DisableAfterExec ())
00435 task.dwFlags |= SCHEDULE_AUTODIS;
00436 task.uWaitForConfirmation = _App.ConfTimeout_Hangup ();
00437 task.wts.enType = WTS_HANGUP;
00438 task.wts.pszHangupConnection = NULL;
00439 task.hts.uTimeNothingReceived = 30;
00440 task.hts.enType = HTS_WHENDONE;
00441 m_mgr.AddTask (&task);
00442 m_wndTasks.AddTask (m_mgr.GetTask (m_mgr.GetTaskCount () - 1));
00443 }
00444 else
00445 {
00446
00447 m_mgr.GetTask (pos)->dwFlags &= ~SCHEDULE_ENABLED;
00448 m_wndTasks.UpdateTask (pos);
00449 }
00450 }
00451
00452 BOOL CShedulerWnd::ExitWhenDone(int* ppos)
00453 {
00454 int pos = -1;
00455 bool bEn = false;
00456
00457 do {
00458 pos = m_mgr.FindTask (WTS_EXIT, pos);
00459 if (pos != -1 && m_mgr.GetTask (pos)->hts.enType == HTS_WHENDONE)
00460 break;
00461 }
00462 while (pos != -1);
00463
00464 if (pos != -1)
00465 bEn = (m_mgr.GetTask (pos)->dwFlags & SCHEDULE_ENABLED) != 0;
00466
00467 if (ppos)
00468 *ppos = pos;
00469
00470 return pos != -1 && bEn;
00471 }
00472
00473 void CShedulerWnd::ExitWhenDone(BOOL bUse)
00474 {
00475 int pos;
00476 if (!bUse == !ExitWhenDone (&pos))
00477 return;
00478
00479 if (bUse)
00480 {
00481 if (pos != -1) {
00482 m_mgr.GetTask (pos)->dwFlags |= SCHEDULE_ENABLED;
00483 m_wndTasks.UpdateTask (pos);
00484 return;
00485 }
00486
00487 fsSchedule task;
00488 task.dwFlags = SCHEDULE_ENABLED;
00489 if (_App.WD_DisableAfterExec ())
00490 task.dwFlags |= SCHEDULE_AUTODIS;
00491 task.uWaitForConfirmation = _App.ConfTimeout_Exit ();
00492 task.wts.enType = WTS_EXIT;
00493 task.hts.uTimeNothingReceived = 30;
00494 task.hts.enType = HTS_WHENDONE;
00495 m_mgr.AddTask (&task);
00496 m_wndTasks.AddTask (m_mgr.GetTask (m_mgr.GetTaskCount () - 1));
00497 }
00498 else
00499 {
00500
00501 m_mgr.GetTask (pos)->dwFlags &= ~SCHEDULE_ENABLED;
00502 m_wndTasks.UpdateTask (pos);
00503 }
00504 }
00505
00506 BOOL CShedulerWnd::TurnoffWhenDone(fsShutdownType , int* ppos)
00507 {
00508 int pos = -1;
00509 bool bEn = false;
00510
00511 do {
00512 pos = m_mgr.FindTask (WTS_SHUTDOWN, pos);
00513 if (pos != -1 && m_mgr.GetTask (pos)->hts.enType == HTS_WHENDONE)
00514 break;
00515 }
00516 while (pos != -1);
00517
00518 if (pos != -1)
00519 bEn = (m_mgr.GetTask (pos)->dwFlags & SCHEDULE_ENABLED) != 0;
00520
00521 if (ppos)
00522 *ppos = pos;
00523
00524 return pos != -1 && bEn;
00525 }
00526
00527 void CShedulerWnd::TurnoffWhenDone(fsShutdownType enST, BOOL bUse)
00528 {
00529 int pos;
00530 if (!bUse == !TurnoffWhenDone (enST, &pos))
00531 return;
00532
00533 if (bUse)
00534 {
00535 if (pos != -1) {
00536 fsSchedule* task = m_mgr.GetTask (pos);
00537 task->wts.shutdown.enShutdown = enST;
00538 task->dwFlags |= SCHEDULE_ENABLED;
00539 m_wndTasks.UpdateTask (pos);
00540 return;
00541 }
00542
00543 fsSchedule task;
00544 task.dwFlags = SCHEDULE_ENABLED;
00545 if (_App.WD_DisableAfterExec ())
00546 task.dwFlags |= SCHEDULE_AUTODIS;
00547 task.uWaitForConfirmation = _App.ConfTimeout_Shutdown ();
00548 task.wts.enType = WTS_SHUTDOWN;
00549 task.wts.shutdown.enShutdown = enST;
00550 task.wts.shutdown.bForce = FALSE;
00551 task.hts.uTimeNothingReceived = 30;
00552
00553 task.hts.enType = HTS_WHENDONE;
00554 m_mgr.AddTask (&task);
00555 m_wndTasks.AddTask (m_mgr.GetTask (m_mgr.GetTaskCount () - 1));
00556 }
00557 else
00558 {
00559
00560 m_mgr.GetTask (pos)->dwFlags &= ~SCHEDULE_ENABLED;
00561 m_wndTasks.UpdateTask (pos);
00562 }
00563 }
00564
00565 void CShedulerWnd::Plugin_GetMenuViewItems(wgMenuViewItem **ppItems, int * cItems)
00566 {
00567 static wgMenuViewItem aItems [] = {
00568 wgMenuViewItem ("", &_pwndScheduler->m_bShowLog),
00569 };
00570
00571 aItems [0].pszName = LS (L_SCHEDULERLOG);
00572
00573 *ppItems = aItems;
00574 *cItems = sizeof (aItems) / sizeof (wgMenuViewItem);
00575 }
00576
00577 void CShedulerWnd::OnShowLog()
00578 {
00579 ShowLog (m_bShowLog == FALSE);
00580 }
00581
00582 void CShedulerWnd::ShowLog(BOOL bShow)
00583 {
00584 UINT nShow = bShow ? SW_SHOW : SW_HIDE;
00585 m_wndLog.ShowWindow (nShow);
00586 ::ShowWindow (m_wndSplitter.m_wndSplitter, nShow);
00587
00588 m_bShowLog = bShow;
00589 _App.View_SchedulerLog (bShow);
00590
00591 RECT rc;
00592 GetClientRect (&rc);
00593 OnSize (0, rc.right, rc.bottom);
00594 }
00595
00596 void CShedulerWnd::Plugin_GetPluginNames(LPCSTR *ppszLong, LPCSTR *ppszShort)
00597 {
00598 static CString strName;
00599 strName = LSNP (L_SCHEDULER);
00600 *ppszLong = *ppszShort = strName;
00601 }
00602
00603 BOOL CShedulerWnd::SaveSchedules()
00604 {
00605 CString strFile = fsGetDataFilePath ("schedules.sav");
00606
00607 HANDLE hFile = CreateFile (strFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
00608 FILE_ATTRIBUTE_HIDDEN, NULL);
00609
00610 BOOL bOk = TRUE;
00611
00612 if (hFile == INVALID_HANDLE_VALUE)
00613 bOk = FALSE;
00614 else
00615 bOk = m_mgr.SaveStateToFile (hFile);
00616
00617 if (bOk)
00618 m_evMgr.Save (hFile);
00619
00620 if (hFile != INVALID_HANDLE_VALUE)
00621 CloseHandle (hFile);
00622
00623 return bOk;
00624 }
00625
00626 void CShedulerWnd::OnSetFocus(CWnd* pOldWnd)
00627 {
00628 CWnd::OnSetFocus(pOldWnd);
00629 m_wndTasks.SetFocus ();
00630 }
00631
00632 void CShedulerWnd::Plugin_SetLanguage(wgLanguage, HMENU hMenuMain, HMENU hMenuView)
00633 {
00634 CMenu *menu = CMenu::FromHandle (hMenuMain);
00635 _pwndScheduler->m_wndTasks.ApplyLanguageToMenu (menu);
00636 _pwndScheduler->m_wndTasks.ApplyLanguage ();
00637 _pwndScheduler->m_wndLog.ApplyLanguage ();
00638 _pwndScheduler->ApplyLanguageToMenuView (CMenu::FromHandle (hMenuView));
00639 }
00640
00641 void CShedulerWnd::ApplyLanguageToMenuView(CMenu *menu)
00642 {
00643 menu->ModifyMenu (0, MF_BYPOSITION | MF_STRING, 0, LS (L_LISTOFTASKS));
00644 menu->ModifyMenu (1, MF_BYPOSITION | MF_STRING, 0, LS (L_SCHEDULERLOG));
00645
00646 UINT aCmds [] = {ID_TASKS_1, ID_TASKS_2, ID_TASKS_3, ID_TASKS_4, ID_LOG_1, ID_LOG_2, ID_LOG_3 };
00647 LPCSTR apszCmds [] = {LS (L_WTS), LS (L_HTS), LS (L_NEXTSTART), LS (L_LASTSTART), LS (L_TIME),
00648 LS (L_DATE), LS (L_INFORMATION)};
00649
00650 for (int i = 0; i < sizeof (aCmds) / sizeof (UINT); i++)
00651 menu->ModifyMenu (aCmds [i], MF_BYCOMMAND|MF_STRING, aCmds [i], apszCmds [i]);
00652 }
00653
00654 LRESULT CShedulerWnd::OnUpdateMenuView(WPARAM, LPARAM lp)
00655 {
00656 HMENU* pMenus = (HMENU*) lp;
00657 UpdateTasksListColMenu (CMenu::FromHandle (pMenus [0]));
00658 UpdateLogColMenu (CMenu::FromHandle (pMenus [1]));
00659 return 0;
00660 }
00661
00662 void CShedulerWnd::UpdateTasksListColMenu(CMenu *menu)
00663 {
00664 BOOL bEn = m_wndTasks.GetHeaderCtrl ()->GetItemCount () > 1;
00665 for (int i = 0; i < 4; i++)
00666 {
00667 if (m_wndTasks.IsColumnShown (i))
00668 {
00669 menu->CheckMenuItem (ID_TASKS_1+i, MF_CHECKED);
00670 if (bEn == FALSE)
00671 menu->EnableMenuItem (ID_TASKS_1+i, MF_GRAYED);
00672 }
00673 }
00674 }
00675
00676 void CShedulerWnd::UpdateLogColMenu(CMenu *menu)
00677 {
00678 BOOL bEn = m_wndLog.GetHeaderCtrl ()->GetItemCount () > 1;
00679 for (int i = 0; i < 3; i++)
00680 {
00681 if (m_wndLog.IsColumnShown (i))
00682 {
00683 menu->CheckMenuItem (ID_LOG_1+i, MF_CHECKED);
00684 if (bEn == FALSE)
00685 menu->EnableMenuItem (ID_LOG_1+i, MF_GRAYED);
00686 }
00687 }
00688 }
00689
00690 void CShedulerWnd::OnTasksListShowCol(UINT uCmd)
00691 {
00692 int iCol = uCmd - ID_TASKS_1;
00693 m_wndTasks.ChangeColumnVisibility (iCol);
00694 }
00695
00696 void CShedulerWnd::OnLogShowCol(UINT uCmd)
00697 {
00698 int iCol = uCmd - ID_LOG_1;
00699 m_wndLog.ChangeColumnVisibility (iCol);
00700 }
00701
00702 LRESULT CShedulerWnd::OnInsert(WPARAM, LPARAM)
00703 {
00704 m_wndTasks.OnCreatenewtask ();
00705 return 0;
00706 }
00707
00708 HMENU CShedulerWnd::Plugin_GetMainMenu()
00709 {
00710 return LoadMenu (AfxGetInstanceHandle (), MAKEINTRESOURCE (IDM_TASKS));
00711 }
00712
00713 HMENU CShedulerWnd::Plugin_GetViewMenu()
00714 {
00715 return LoadMenu (AfxGetInstanceHandle (), MAKEINTRESOURCE (IDM_TASKS_VIEW));
00716 }