source: trunk/src/HaliteWindow.cpp @ 763

Revision 763, 17.9 KB checked in by Eoin, 10 years ago (diff)

Halite handles shutdown and logoff actions too.

Line 
1
2//         Copyright Eóin O'Callaghan 2006 - 2009.
3// Distributed under the Boost Software License, Version 1.0.
4//    (See accompanying file LICENSE_1_0.txt or copy at
5//          http://www.boost.org/LICENSE_1_0.txt)
6
7#include "stdAfx.hpp"
8#include "Halite.hpp"
9#include "HaliteWindow.hpp"
10
11#include "CSSFileDialog.hpp"
12#include "RadioPaneDlg.hpp"
13
14#include "HaliteDialog.hpp"
15#include "AdvHaliteDialog.hpp"
16#include "AddTorrentDialog.hpp"
17#include "NewTorrentDialog.hpp"
18#include "SplashDialog.hpp"
19#include "TimePickerDlg.hpp"
20
21#include "ConfigOptions.hpp"
22#include "halConfig.hpp"
23
24HaliteWindow::HaliteWindow(unsigned areYouMe = 0) :
25        iniClass("HaliteWindow", "HaliteWindow"),
26        haliteList(*this),
27        WM_AreYouMe_(areYouMe),
28        splitterPos(100),
29        use_tray(true),
30        advancedUI(false),
31        closeToTray(false),
32        confirmClose(true),
33        activeTab(0)
34{
35        rect.top = 10;
36        rect.left = 10;
37        rect.bottom = 430;
38        rect.right = 620;
39       
40        load_from_ini();
41}
42
43HaliteWindow::~HaliteWindow()
44{
45        save_to_ini();
46        ATLASSERT(!::IsWindow(m_hWnd));
47}
48
49BOOL HaliteWindow::PreTranslateMessage(MSG* pMsg)
50{
51        if(CFrameWindowImpl<thisClass>::PreTranslateMessage(pMsg))
52                return TRUE;
53
54        if (!advancedUI)
55                return mp_dlg->PreTranslateMessage(pMsg);
56        else
57                return mp_advDlg->PreTranslateMessage(pMsg);
58}
59
60LRESULT HaliteWindow::OnCreate(LPCREATESTRUCT lpcs)
61{
62        try
63        {
64        HAL_DEV_MSG(L"HaliteWindow::OnCreate");
65       
66        SetWindowText(L"Halite");
67        MoveWindow(rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, false);     
68
69//              MARGINS m = {20, 20, 0, 100};
70//              SetMargins(m);
71
72        hal::event_log().post(shared_ptr<hal::EventDetail>(
73                new hal::EventMsg(L"Loading Halite configuration ...")));
74        hal::config().load_from_ini();
75        hal::event_log().post(shared_ptr<hal::EventDetail>(
76                new hal::EventMsg(L"    ... Done")));
77       
78        hal::event_log().post(shared_ptr<hal::EventDetail>(
79                new hal::EventMsg(L"Applying BitTorrent settings ...")));
80        if (!hal::config().settingsChanged())
81        {
82                hal::event_log().post(boost::shared_ptr<hal::EventDetail>(
83                        new hal::EventDebug(hal::event_logger::critical, hal::app().res_wstr(HAL_WINDOW_SOCKETS_FAILED))));
84                       
85                MessageBox(hal::app().res_wstr(HAL_WINDOW_SOCKETS_FAILED).c_str(), 0, 0);
86               
87                DestroyWindow();
88                return 0;
89        }
90        hal::event_log().post(shared_ptr<hal::EventDetail>(
91                new hal::EventMsg(L"    ... Done")));
92       
93        hal::event_log().post(shared_ptr<hal::EventDetail>(
94                new hal::EventMsg(L"Starting Halite GUI ...")));
95       
96        RECT rc; GetClientRect(&rc);
97        SetMenu(0);
98       
99        //Init ToolBar
100        HWND hWndToolBar = CreateSimpleToolBarCtrl(m_hWnd, HAL_MAINFRAME, FALSE, ATL_SIMPLE_TOOLBAR_PANE_STYLE);
101       
102        // Init ReBar
103        CreateSimpleReBar(ATL_SIMPLE_REBAR_NOBORDER_STYLE);
104        AddSimpleReBarBand(hWndToolBar, NULL, TRUE);
105       
106        // Init the StatusBar   
107        m_hWndStatusBar = m_StatusBar.Create(*this);
108        UIAddStatusBar(m_hWndStatusBar);
109       
110        int panes[] = {ID_DEFAULT_PANE, IDPANE_FILTER, IDPANE_DHT, IDPANE_STATUS};
111        m_StatusBar.SetPanes(panes, 4, false);
112       
113        // Create the Splitter Control
114        m_Split.Create(m_hWnd, rc, NULL, WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN);
115        m_Split.SetSplitterExtendedStyle(!SPLIT_PROPORTIONAL, SPLIT_PROPORTIONAL);
116        m_Split.SetSplitterPos(splitterPos);
117       
118        m_hWndClient = m_Split.m_hWnd;
119
120        hal::event_log().post(shared_ptr<hal::EventDetail>(
121                new hal::EventMsg(L"    ... Creating main listview"))); 
122        // Create ListView and Dialog
123        haliteList.Create(m_Split.m_hWnd, rc, NULL, 
124                LVS_REPORT|WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|LVS_SHOWSELALWAYS|LVS_OWNERDATA);
125//      haliteList.manager().attach(bind(&HaliteWindow::issueUiUpdate, this));
126
127
128        hal::event_log().post(shared_ptr<hal::EventDetail>(
129                new hal::EventMsg(L"    ... Creating classic dialog...")));             
130        mp_dlg.reset(new HaliteDialog(*this)),
131        mp_dlg->Create(m_Split.m_hWnd);
132//      mp_dlg->ShowWindow(true);
133       
134
135        hal::event_log().post(shared_ptr<hal::EventDetail>(
136                new hal::EventMsg(L"    ... Creating advanced dialog")));
137        mp_advDlg.reset(new AdvHaliteDialog(*this));
138        mp_advDlg->Create(m_Split.m_hWnd);
139//      mp_advDlg->ShowWindow(true);
140       
141//      m_Split.SetSplitterPanes(*mp_list, *mp_dlg);
142       
143        hal::event_log().post(shared_ptr<hal::EventDetail>(
144                new hal::EventMsg(L"    ... Creating tray icon..."))); 
145        // Create the tray icon.
146        trayIcon_.Create(this, HAL_TRAY_MENU, L"Halite", 
147                CTrayNotifyIcon::LoadIconResource(HAL_APP_ICON), WM_TRAYNOTIFY, HAL_TRAY_MENU);
148        trayIcon_.Hide();
149       
150        // Add ToolBar and register it along with StatusBar for UIUpdates
151        UIAddToolBar(hWndToolBar);
152        UISetCheck(ID_VIEW_TOOLBAR, true);
153        UISetCheck(ID_VIEW_STATUS_BAR, true);
154        UISetCheck(HAL_TRAY_MENU, true);       
155       
156//      TBBUTTONINFO tbinfo = { sizeof(TBBUTTONINFO) };
157//      tbinfo.dwMask = TBIF_STATE;
158//      tbinfo.fsState = TBSTATE_INDETERMINATE;
159//      ::SendMessage(hWndToolBar, TB_SETBUTTONINFO, ID_FILE_NEW, (LPARAM)&tbinfo);
160
161        // Register UIEvents and the timer for the monitoring interval
162        SetTimer(ID_UPDATE_TIMER, 500);
163        SetTimer(ID_SAVE_TIMER, 300000);
164        connectUiUpdate(bind(&HaliteWindow::updateWindow, this));
165       
166        hal::event_log().post(shared_ptr<hal::EventDetail>(
167                new hal::EventMsg(L"    ... Registering drop target")));       
168        RegisterDropTarget();
169       
170        // Register object for message filtering and idle updates
171        WTL::CMessageLoop* pLoop = _Module.GetMessageLoop();
172        assert(pLoop != NULL);
173        pLoop->AddMessageFilter(this);
174        pLoop->AddIdleHandler(this);
175       
176        setCorrectDialog();
177       
178        hal::event_log().post(shared_ptr<hal::EventDetail>(
179                new hal::EventMsg(L"Starting BitTorrent event reciever ...")));
180        hal::bittorrent::Instance().start_event_receiver();
181
182        hal::event_log().post(shared_ptr<hal::EventDetail>(
183                new hal::EventMsg(L"Restoring torrent states ...")));
184        hal::bittorrent::Instance().resume_all();
185
186        hal::event_log().post(shared_ptr<hal::EventDetail>(
187                new hal::EventMsg(L"Initial setup complete!")));
188
189        UpdateLayout();
190        issueUiUpdate();
191
192               
193        }
194        catch(const std::exception& e)
195        {
196                hal::event_log().post(boost::shared_ptr<hal::EventDetail>(
197                        new hal::EventStdException(hal::event_logger::critical, e, L"HaliteWindow::OnCreate"))); 
198
199                DestroyWindow();
200        }
201
202        return 0;
203}
204
205LRESULT HaliteWindow::OnAdvanced(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
206{
207        advancedUI = !advancedUI;
208        setCorrectDialog();
209       
210        return 0;
211}
212
213LRESULT HaliteWindow::OnTrayNotification(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam)
214{
215    trayIcon_.OnTrayNotification(wParam, lParam);
216   
217    return 0;
218}
219
220void HaliteWindow::setCorrectDialog()
221{
222        if (!advancedUI)
223        {               
224                mp_dlg->ShowWindow(SW_SHOW);
225                mp_advDlg->ShowWindow(SW_HIDE);
226                m_Split.SetSplitterPanes(haliteList, *mp_dlg);
227        }
228        else
229        {               
230                mp_dlg->ShowWindow(SW_HIDE);
231                mp_advDlg->ShowWindow(SW_SHOW);
232                m_Split.SetSplitterPanes(haliteList, *mp_advDlg);
233        }
234
235        issueUiUpdate();
236}
237
238void HaliteWindow::updateWindow()
239{
240        try
241        {
242       
243        hal::SessionDetail details = hal::bittorrent::Instance().get_session_details();
244       
245        if (details.port > -1)
246                UISetText(0, 
247                        (hal::wform(hal::app().res_wstr(HAL_PORT_OPEN)) % details.port ).str().c_str());       
248        else
249                UISetText(0, hal::app().res_wstr(HAL_NOT_LISTENING).c_str());
250       
251        wstring downloadRates = (hal::wform(hal::app().res_wstr(HAL_DOWN_RATES)) 
252                        % (details.speed.first/1024) 
253                        % (details.speed.second/1024)).str();
254       
255        UISetText(3, downloadRates.c_str());   
256        trayIcon_.SetTooltipText(downloadRates.c_str());
257       
258        if (details.dht_on)
259        {
260                wstring dht = (hal::wform(hal::app().res_wstr(HAL_DHT_ON))
261                        % details.dht_nodes).str();
262                       
263                UISetText(2, dht.c_str());
264        }
265        else
266        {
267                UISetText(2, hal::app().res_wstr(HAL_DHT_OFF).c_str());
268        }
269       
270        if (details.ip_filter_on)
271        {
272                wstring filter = (hal::wform(hal::app().res_wstr(HAL_IPFILTER_ON))
273                        % details.ip_ranges_filtered).str();
274               
275                UISetText(1, filter.c_str());
276        }
277        else
278        {
279                UISetText(1, hal::app().res_wstr(HAL_IPFILTER_OFF).c_str());
280        }
281
282        UpdateLayout();
283       
284        } HAL_GENERIC_FN_EXCEPTION_CATCH(L"HaliteWindow::updateWindow()")
285}
286
287void HaliteWindow::OnTimer(UINT uTimerID)
288{               
289        if (uTimerID == ID_UPDATE_TIMER) 
290        {       
291                issueUiUpdate();
292        }
293        else if (uTimerID == ID_SAVE_TIMER) 
294        {
295                try
296                {
297
298                hal::ini().save_data();
299                hal::bittorrent::Instance().save_torrent_data();       
300       
301                } HAL_GENERIC_FN_EXCEPTION_CATCH(L"HaliteWindow::OnTimer(ID_SAVE_TIMER)")
302        }
303        else 
304        {               
305                SetMsgHandled(false);
306        }       
307}       
308
309void HaliteWindow::issueUiUpdate()
310{       
311        try
312        {
313        std::set<wstring> s;
314
315        foreach(const HaliteListViewCtrl::listClass::list_value_type val, std::make_pair(haliteList.is_selected_begin(), haliteList.is_selected_end()))
316        {
317                s.insert(val.text().c_str());
318        }
319       
320        const hal::torrent_details_manager& torrents = hal::bittorrent::Instance().updatetorrent_details_manager(
321                haliteList.is_selected_begin()->text().c_str(), s);
322
323        ui_update_signal_(torrents);
324
325        } HAL_GENERIC_FN_EXCEPTION_CATCH(L"HaliteWindow::issueUiUpdate()")
326}
327
328LRESULT HaliteWindow::OnCopyData(HWND, PCOPYDATASTRUCT pCSD)
329{
330        hal::event_log().post(shared_ptr<hal::EventDetail>(
331                new hal::EventMsg(L"I recieved data.")));
332               
333        switch (pCSD->dwData)
334        {
335                case HALITE_SENDING_CMD:
336                {       
337                        wstring filename(static_cast<wchar_t*>(pCSD->lpData), pCSD->cbData/sizeof(wchar_t));
338                       
339                        hal::event_log().post(shared_ptr<hal::EventDetail>(
340                                new hal::EventMsg((hal::wform(L"Recieved data: %1%.") % filename), hal::event_logger::info)));
341               
342                        ProcessFile(filename.c_str());
343                        break;
344                }
345                default:
346                        break;
347        }
348        return 0;
349}
350
351void HaliteWindow::ProcessFile(LPCTSTR lpszPath)
352{
353        try
354        {       
355        wstring default_save_folder = wpath(hal::config().default_save_folder_).native_file_string();
356        wstring default_move_folder = wpath(hal::config().default_move_folder_).native_file_string();
357        bool use_move_to = hal::config().use_move_to_;
358        bool startPaused = false;
359        bool managed = false;
360        hal::bit::allocations allocation_type = hal::bit::sparse_allocation;
361       
362        if (!boost::filesystem::exists(default_save_folder))
363                boost::filesystem::create_directory(default_save_folder);
364
365        if (hal::config().save_prompt_)
366        {
367                AddTorrentDialog addTorrent(default_save_folder, default_move_folder, use_move_to, startPaused, managed, allocation_type);     
368               
369                if (IDOK != addTorrent.DoModal())
370                        return;
371        }
372       
373        wpath file(lpszPath, boost::filesystem::native);       
374
375        if (use_move_to)
376                hal::bittorrent::Instance().add_torrent(file, wpath(default_save_folder), startPaused, managed, allocation_type, 
377                        wpath(default_move_folder));
378        else
379                hal::bittorrent::Instance().add_torrent(file, wpath(default_save_folder), startPaused, managed, allocation_type);
380
381        issueUiUpdate();
382
383        }
384        catch(const boost::filesystem::filesystem_error&)
385        {
386                hal::event_log().post(shared_ptr<hal::EventDetail>(
387                        new hal::EventDebug(hal::event_logger::warning, L"filesystem error")));
388        }
389}
390
391void HaliteWindow::OnClose()
392{
393        if (closeToTray && trayIcon_.IsHidden())
394        {               
395                ShowWindow(SW_HIDE);
396                trayIcon_.Show();
397        }
398        else
399        {
400                TryToCloseWithConfirmation();
401        }
402}
403
404void HaliteWindow::ShutdownThread()
405{
406        try
407        {
408        win32_exception::install_handler();
409
410        hal::bittorrent::Instance().close_all(0);
411
412        hal::bittorrent::Instance().stop_event_receiver();
413        Sleep(500);
414
415        hal::bittorrent::Instance().shutdown_session();
416
417        } HAL_GENERIC_FN_EXCEPTION_CATCH(L"HaliteWindow::ShutdownThread()")
418}
419
420void HaliteWindow::TryToCloseWithConfirmation()
421{
422        bool noTorrentsAreActive = !hal::bittorrent::Instance().is_any_torrent_active();
423       
424        if (noTorrentsAreActive || !confirmClose || (confirmClose && 
425                MessageBox(hal::app().res_wstr(HAL_WINDOW_CLOSECONFRIM).c_str(), 
426                        hal::app().res_wstr(HAL_HALITE).c_str(), MB_YESNO) == IDYES))
427        {
428                DestroyWindow();
429        }
430}
431
432void HaliteWindow::OnDestroy()
433{       
434        try
435        {
436
437        KillTimer(ID_UPDATE_TIMER);
438        KillTimer(ID_SAVE_TIMER);
439
440        Sleep(0);
441
442        splitterPos = m_Split.GetSplitterPos();
443
444        save_to_ini();
445        hal::ini().save_data();
446       
447        if (halite().showMessage())
448        {
449                HAL_DEV_MSG(L"Showing SplashDialog");
450
451                SplashDialog splDlg;
452                splDlg.DoModal();
453        }
454        else
455        {               
456                HAL_DEV_MSG(L"No SplashDialog");
457
458                thread shutdown(bind(& HaliteWindow::ShutdownThread, this));
459                shutdown.join();
460        }
461               
462        HAL_DEV_MSG(L"Saving before quiting");
463
464        // Resave for sake of your health.
465        save_to_ini();
466        halite().save_to_ini();
467        hal::ini().save_data();
468
469        if (post_halite_function_) post_halite_function_();
470               
471        HAL_DEV_MSG(L"Posting Quit Message");
472        PostQuitMessage(0);     
473
474        } HAL_GENERIC_FN_EXCEPTION_CATCH(L"HaliteWindow::OnDestroy()")
475}
476
477void HaliteWindow::OnSize(UINT type, WTL::CSize)
478{
479        if (type == SIZE_MINIMIZED)
480        {
481                if (use_tray)
482                {
483                        ShowWindow(SW_HIDE);
484                        trayIcon_.Show();
485                }
486        }
487        else
488        {
489                if (trayIcon_.IsShowing())
490                        trayIcon_.Hide();
491
492                GetWindowRect(rect);
493        }
494       
495        UpdateLayout();
496        SetMsgHandled(false);
497}       
498
499void HaliteWindow::OnMove(WTL::CSize)
500{
501        WINDOWPLACEMENT wnd = { sizeof(WINDOWPLACEMENT ) };
502        GetWindowPlacement(&wnd);
503       
504        if (wnd.showCmd != SW_SHOWMINIMIZED)
505                GetWindowRect(rect);
506
507        SetMsgHandled(false);   
508}
509
510void HaliteWindow::OnShowWindow(BOOL bShow, UINT nStatus)
511{
512        SetMsgHandled(false);
513}
514
515LRESULT HaliteWindow::OnTrayOpenHalite(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
516{
517        trayIcon_.Hide();
518        ShowWindow(SW_RESTORE);
519       
520        return 0;
521}
522
523LRESULT HaliteWindow::OnTrayExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
524{
525        PostMessage(WM_CLOSE, 0, 0);
526       
527        return 0;
528}
529
530LRESULT HaliteWindow::OnFileOpen(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
531{
532        CSSFileDialog dlgOpen(TRUE, NULL, NULL, OFN_HIDEREADONLY, L"Torrents (*.torrent)|*.torrent|", m_hWnd);
533
534        if (dlgOpen.DoModal() == IDOK) 
535        {
536                ProcessFile(dlgOpen.m_ofn.lpstrFile);
537        }
538       
539        return 0;       
540}
541
542LRESULT HaliteWindow::OnFileNew(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
543{
544        wstring title = hal::app().res_wstr(HAL_NEWT_DIALOG_TITLE);
545
546        NewTorrentDialog newTorrent(title.c_str());     
547        newTorrent.DoModal();
548       
549        return 0;
550}
551
552LRESULT HaliteWindow::OnSettings(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
553{
554        ConfigOptionsProp sheet(this, L"Settings");     
555        sheet.DoModal();
556       
557        hal::config().settingsChanged();
558        setCorrectDialog();
559       
560        return 0;
561}
562
563LRESULT HaliteWindow::OnPauseAll(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
564{
565        hal::bittorrent::Instance().pause_all_torrents();
566       
567        issueUiUpdate();
568        return 0;
569}
570
571LRESULT HaliteWindow::OnResumeAll(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
572{
573        hal::bittorrent::Instance().unpause_all_torrents();
574       
575        issueUiUpdate();
576        return 0;
577}
578
579LRESULT HaliteWindow::OnHelp(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
580{
581        ConfigOptionsProp sheet(this, L"Settings", 4); 
582        sheet.DoModal();
583       
584        hal::config().settingsChanged();
585       
586        return 0;
587}
588
589LRESULT HaliteWindow::OnToolbarExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
590{
591        TryToCloseWithConfirmation();
592       
593        return 0;
594}
595
596LRESULT HaliteWindow::OnUnconditionalShutdown(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam)
597{
598        HAL_DEV_MSG(L"In OnUnconditionalShutdown");
599
600        DestroyWindow();
601
602        return 0;
603}
604
605void HaliteWindow::exitCallback()
606{
607        HAL_DEV_MSG(L"In callback");
608
609        PostMessage(WM_HALITE_UNCONDITIONAL_SHUTDOWN, 0, 0);
610}
611
612LRESULT HaliteWindow::OnAutoShutdown(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
613{       
614/*      WTL::CMenuHandle m;
615        WTL::CMenu menu;       
616
617        m.LoadMenu(HAL_SHUTDOWN_MENU);
618        menu.Attach(m.GetSubMenu(0));
619
620        POINT ptPoint;
621        GetCursorPos(&ptPoint);
622        menu.TrackPopupMenu(0, ptPoint.x, ptPoint.y, m_hWnd);*/
623
624//      typedef ATL::CWinTraits<WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_CENTER, WS_EX_DLGMODALFRAME> ;
625        typedef ATL::CWinTraits<WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | DTS_UPDOWN | DTS_TIMEFORMAT , 0>                                    CDateTimePickerCtrlTraits;
626        typedef WTL::CControlDialog<1598426, WTL::CDateTimePickerCtrl, CDateTimePickerCtrlTraits> CDateDialog;
627
628        boost::posix_time::time_duration time;
629        unsigned action;
630
631        TimePickerDlg dd(time, action);
632        dd.DoModal();
633
634        if (!time.is_not_a_date_time())
635        {               
636                hal::event_log().post(shared_ptr<hal::EventDetail>(
637                        new hal::EventMsg(hal::wform(L"OnAutoShutdown %1% %2%") % hal::from_utf8(to_simple_string(time)) % action)));
638
639                switch(action)
640                {
641                case TimePickerDlg::action_pause:
642                        hal::bittorrent::Instance().schedual_action(time, hal::bit::action_pause);
643                        break;
644                case TimePickerDlg::action_exit:
645                        hal::bittorrent::Instance().schedual_callback(
646                                time, bind(&HaliteWindow::exitCallback, this));
647                        break;
648                case TimePickerDlg::action_logoff:
649                        post_halite_function_ = bind(boost::function<BOOL (UINT, DWORD)>(ExitWindowsEx), 
650                                EWX_LOGOFF, SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER | SHTDN_REASON_FLAG_PLANNED);
651
652                        hal::bittorrent::Instance().schedual_callback(
653                                time, bind(&HaliteWindow::exitCallback, this));
654                        break;
655                case TimePickerDlg::action_shutdown:
656                        post_halite_function_ = bind(boost::function<BOOL (UINT, DWORD)>(ExitWindowsEx), 
657                                EWX_SHUTDOWN, SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER | SHTDN_REASON_FLAG_PLANNED);
658
659                        hal::bittorrent::Instance().schedual_callback(
660                                time, bind(&HaliteWindow::exitCallback, this));
661                        break;
662                default:
663                        break;
664                }
665        }
666        else
667        {               
668                hal::event_log().post(shared_ptr<hal::EventDetail>(
669                        new hal::EventMsg(L"Not a date_time")));
670        }
671
672//      hal::bittorrent::Instance().schedual_callback(
673//              boost::posix_time::hours(5), bind(&HaliteWindow::exitCallback, this));
674
675        return 0;
676}
677
678LRESULT HaliteWindow::OnViewStatusBar(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
679{
680        BOOL bVisible = !::IsWindowVisible(m_hWndStatusBar);
681        ::ShowWindow(m_hWndStatusBar, bVisible ? SW_SHOWNOACTIVATE : SW_HIDE);
682        UISetCheck(ID_VIEW_STATUS_BAR, bVisible);
683       
684        UpdateLayout();
685       
686        return 0;
687}       
688
689LRESULT HaliteWindow::OnEraseBkgnd(HDC dc)
690{
691        return 1;
692}
693
694LRESULT HaliteWindow::OnPaint(HDC dc)
695{
696        return 1;
697}
698
699LRESULT HaliteWindow::OnAreYouMe(UINT, WPARAM, LPARAM, BOOL&) 
700{
701        hal::event_log().post(shared_ptr<hal::EventDetail>(
702                new hal::EventMsg(L"I tried to contact me.")));         
703
704        return WM_AreYouMe_; 
705}
Note: See TracBrowser for help on using the repository browser.