source: trunk/src/HaliteWindow.cpp @ 778

Revision 778, 18.0 KB checked in by Eoin, 10 years ago (diff)

Made get torrent details non-blocking. Need to do same for get session details.

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