source: trunk/src/HaliteWindow.cpp @ 770

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

Preparing for snapshot release.

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().updatetorrent_details_manager(
323                haliteList.is_selected_begin()->text().c_str(), s);
324
325        ui_update_signal_(torrents);
326
327        } HAL_GENERIC_FN_EXCEPTION_CATCH(L"HaliteWindow::issueUiUpdate()")
328}
329
330LRESULT HaliteWindow::OnCopyData(HWND, PCOPYDATASTRUCT pCSD)
331{
332        hal::event_log().post(shared_ptr<hal::EventDetail>(
333                new hal::EventMsg(L"I recieved data.")));
334               
335        switch (pCSD->dwData)
336        {
337                case HALITE_SENDING_CMD:
338                {       
339                        wstring filename(static_cast<wchar_t*>(pCSD->lpData), pCSD->cbData/sizeof(wchar_t));
340                       
341                        hal::event_log().post(shared_ptr<hal::EventDetail>(
342                                new hal::EventMsg((hal::wform(L"Recieved data: %1%.") % filename), hal::event_logger::info)));
343               
344                        ProcessFile(filename.c_str());
345                        break;
346                }
347                default:
348                        break;
349        }
350        return 0;
351}
352
353void HaliteWindow::ProcessFile(LPCTSTR lpszPath)
354{
355        try
356        {       
357        wstring default_save_folder = wpath(hal::config().default_save_folder_).native_file_string();
358        wstring default_move_folder = wpath(hal::config().default_move_folder_).native_file_string();
359        bool use_move_to = hal::config().use_move_to_;
360        bool startPaused = false;
361        bool managed = false;
362        hal::bit::allocations allocation_type = hal::bit::sparse_allocation;
363       
364        if (!boost::filesystem::exists(default_save_folder))
365                boost::filesystem::create_directory(default_save_folder);
366
367        if (hal::config().save_prompt_)
368        {
369                AddTorrentDialog addTorrent(default_save_folder, default_move_folder, use_move_to, startPaused, managed, allocation_type);     
370               
371                if (IDOK != addTorrent.DoModal())
372                        return;
373        }
374       
375        wpath file(lpszPath, boost::filesystem::native);       
376
377        if (use_move_to)
378                hal::bittorrent::Instance().add_torrent(file, wpath(default_save_folder), startPaused, managed, allocation_type, 
379                        wpath(default_move_folder));
380        else
381                hal::bittorrent::Instance().add_torrent(file, wpath(default_save_folder), startPaused, managed, allocation_type);
382
383        issueUiUpdate();
384
385        }
386        catch(const boost::filesystem::filesystem_error&)
387        {
388                hal::event_log().post(shared_ptr<hal::EventDetail>(
389                        new hal::EventDebug(hal::event_logger::warning, L"filesystem error")));
390        }
391}
392
393void HaliteWindow::OnClose()
394{
395        if (closeToTray && trayIcon_.IsHidden())
396        {               
397                ShowWindow(SW_HIDE);
398                trayIcon_.Show();
399        }
400        else
401        {
402                TryToCloseWithConfirmation();
403        }
404}
405
406void HaliteWindow::ShutdownThread()
407{
408        try
409        {
410        win32_exception::install_handler();
411
412        hal::bittorrent::Instance().close_all(0);
413
414        hal::bittorrent::Instance().stop_event_receiver();
415        Sleep(500);
416
417        hal::bittorrent::Instance().shutdown_session();
418
419        } HAL_GENERIC_FN_EXCEPTION_CATCH(L"HaliteWindow::ShutdownThread()")
420}
421
422void HaliteWindow::TryToCloseWithConfirmation()
423{
424        bool noTorrentsAreActive = !hal::bittorrent::Instance().is_any_torrent_active();
425       
426        if (noTorrentsAreActive || !confirmClose || (confirmClose && 
427                MessageBox(hal::app().res_wstr(HAL_WINDOW_CLOSECONFRIM).c_str(), 
428                        hal::app().res_wstr(HAL_HALITE).c_str(), MB_YESNO) == IDYES))
429        {
430                DestroyWindow();
431        }
432}
433
434void HaliteWindow::OnDestroy()
435{       
436        try
437        {
438
439        KillTimer(ID_UPDATE_TIMER);
440        KillTimer(ID_SAVE_TIMER);
441
442        Sleep(0);
443
444        splitterPos = m_Split.GetSplitterPos();
445
446        save_to_ini();
447        hal::ini().save_data();
448       
449        if (halite().showMessage())
450        {
451                HAL_DEV_MSG(L"Showing SplashDialog");
452
453                SplashDialog splDlg;
454                splDlg.DoModal();
455        }
456        else
457        {               
458                HAL_DEV_MSG(L"No SplashDialog");
459
460                thread shutdown(bind(& HaliteWindow::ShutdownThread, this));
461                shutdown.join();
462        }
463               
464        HAL_DEV_MSG(L"Saving before quiting");
465
466        // Resave for sake of your health.
467        save_to_ini();
468        halite().save_to_ini();
469        hal::ini().save_data();
470
471        if (post_halite_function_) post_halite_function_();
472               
473        HAL_DEV_MSG(L"Posting Quit Message");
474        PostQuitMessage(0);     
475
476        } HAL_GENERIC_FN_EXCEPTION_CATCH(L"HaliteWindow::OnDestroy()")
477}
478
479void HaliteWindow::OnSize(UINT type, WTL::CSize)
480{
481        if (type == SIZE_MINIMIZED)
482        {
483                if (use_tray)
484                {
485                        ShowWindow(SW_HIDE);
486                        trayIcon_.Show();
487                }
488        }
489        else
490        {
491                if (trayIcon_.IsShowing())
492                        trayIcon_.Hide();
493
494                GetWindowRect(rect);
495        }
496       
497        UpdateLayout();
498        SetMsgHandled(false);
499}       
500
501void HaliteWindow::OnMove(WTL::CSize)
502{
503        WINDOWPLACEMENT wnd = { sizeof(WINDOWPLACEMENT ) };
504        GetWindowPlacement(&wnd);
505       
506        if (wnd.showCmd != SW_SHOWMINIMIZED)
507                GetWindowRect(rect);
508
509        SetMsgHandled(false);   
510}
511
512void HaliteWindow::OnShowWindow(BOOL bShow, UINT nStatus)
513{
514        SetMsgHandled(false);
515}
516
517LRESULT HaliteWindow::OnTrayOpenHalite(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
518{
519        trayIcon_.Hide();
520        ShowWindow(SW_RESTORE);
521       
522        return 0;
523}
524
525LRESULT HaliteWindow::OnTrayExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
526{
527        PostMessage(WM_CLOSE, 0, 0);
528       
529        return 0;
530}
531
532LRESULT HaliteWindow::OnFileOpen(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
533{
534        CSSFileDialog dlgOpen(TRUE, NULL, NULL, OFN_HIDEREADONLY, L"Torrents (*.torrent)|*.torrent|", m_hWnd);
535
536        if (dlgOpen.DoModal() == IDOK) 
537        {
538                ProcessFile(dlgOpen.m_ofn.lpstrFile);
539        }
540       
541        return 0;       
542}
543
544LRESULT HaliteWindow::OnFileNew(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
545{
546        wstring title = hal::app().res_wstr(HAL_NEWT_DIALOG_TITLE);
547
548        NewTorrentDialog newTorrent(title.c_str());     
549        newTorrent.DoModal();
550       
551        return 0;
552}
553
554LRESULT HaliteWindow::OnSettings(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
555{
556        ConfigOptionsProp sheet(this, L"Settings");     
557        sheet.DoModal();
558       
559        hal::config().settingsChanged();
560        setCorrectDialog();
561       
562        return 0;
563}
564
565LRESULT HaliteWindow::OnPauseAll(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
566{
567        hal::bittorrent::Instance().pause_all_torrents();
568       
569        issueUiUpdate();
570        return 0;
571}
572
573LRESULT HaliteWindow::OnResumeAll(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
574{
575        hal::bittorrent::Instance().unpause_all_torrents();
576       
577        issueUiUpdate();
578        return 0;
579}
580
581LRESULT HaliteWindow::OnHelp(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
582{
583        ConfigOptionsProp sheet(this, L"Settings", 6); 
584        sheet.DoModal();
585       
586        hal::config().settingsChanged();
587       
588        return 0;
589}
590
591LRESULT HaliteWindow::OnToolbarExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
592{
593        TryToCloseWithConfirmation();
594       
595        return 0;
596}
597
598LRESULT HaliteWindow::OnUnconditionalShutdown(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam)
599{
600        HAL_DEV_MSG(L"In OnUnconditionalShutdown");
601
602        DestroyWindow();
603
604        return 0;
605}
606
607void HaliteWindow::exitCallback()
608{
609        HAL_DEV_MSG(L"In exit callback");
610
611        PostMessage(WM_HALITE_UNCONDITIONAL_SHUTDOWN, 0, 0);
612}
613
614void HaliteWindow::logoffCallback()
615{
616        HAL_DEV_MSG(L"In logoff callback");
617
618        post_halite_function_ = bind(boost::function<BOOL (UINT, DWORD)>(ExitWindowsEx), 
619                EWX_LOGOFF, SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER | SHTDN_REASON_FLAG_PLANNED);
620
621        PostMessage(WM_HALITE_UNCONDITIONAL_SHUTDOWN, 0, 0);
622}
623
624void HaliteWindow::shutdownCallback()
625{
626        HAL_DEV_MSG(L"In shutdown callback");
627
628        post_halite_function_ = bind(boost::function<BOOL (UINT, DWORD)>(ExitWindowsEx), 
629                EWX_SHUTDOWN, SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER | SHTDN_REASON_FLAG_PLANNED);
630
631        PostMessage(WM_HALITE_UNCONDITIONAL_SHUTDOWN, 0, 0);
632}
633
634LRESULT HaliteWindow::OnAutoShutdown(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
635{       
636        boost::posix_time::ptime time = action_time_;
637        unsigned action = action_action_;
638
639        TimePickerDlg dd(time, action);
640
641        if (dd.DoModal() == 1)
642        {               
643                if (!time.is_not_a_date_time())
644                {
645                        hal::event_log().post(shared_ptr<hal::EventDetail>(
646                                new hal::EventMsg(hal::wform(L"OnAutoShutdown %1% %2%") 
647                                        % hal::from_utf8(to_simple_string(time)) % action)));
648
649                        switch(action)
650                        {
651                        case TimePickerDlg::action_pause:
652                                hal::bittorrent::Instance().schedual_action(time, hal::bit::action_pause);
653                                break;
654
655                        case TimePickerDlg::action_exit:
656                                hal::bittorrent::Instance().schedual_callback(
657                                        time, bind(&HaliteWindow::exitCallback, this));
658                                break;
659
660                        case TimePickerDlg::action_logoff:
661
662                                hal::bittorrent::Instance().schedual_callback(
663                                        time, bind(&HaliteWindow::logoffCallback, this));
664                                break;
665
666                        case TimePickerDlg::action_shutdown:
667
668                                hal::bittorrent::Instance().schedual_callback(
669                                        time, bind(&HaliteWindow::shutdownCallback, this));
670                                break;
671
672                        case TimePickerDlg::action_na:
673                        default:
674                                action_time_ = boost::posix_time::not_a_date_time;
675                                hal::bittorrent::Instance().schedual_cancel();
676                                return 0;
677                        }
678
679                        action_time_ = time;
680                        action_action_ = action;
681                }
682                else
683                {
684                        action_time_ = boost::posix_time::not_a_date_time;
685                        hal::bittorrent::Instance().schedual_cancel();
686                }
687        }
688        else
689        {               
690                hal::event_log().post(shared_ptr<hal::EventDetail>(new hal::EventMsg(L"Not a date_time")));
691        }
692
693        return 0;
694}
695
696LRESULT HaliteWindow::OnViewStatusBar(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
697{
698        BOOL bVisible = !::IsWindowVisible(m_hWndStatusBar);
699        ::ShowWindow(m_hWndStatusBar, bVisible ? SW_SHOWNOACTIVATE : SW_HIDE);
700        UISetCheck(ID_VIEW_STATUS_BAR, bVisible);
701       
702        UpdateLayout();
703       
704        return 0;
705}       
706
707LRESULT HaliteWindow::OnEraseBkgnd(HDC dc)
708{
709        return 1;
710}
711
712LRESULT HaliteWindow::OnPaint(HDC dc)
713{
714        return 1;
715}
716
717LRESULT HaliteWindow::OnAreYouMe(UINT, WPARAM, LPARAM, BOOL&) 
718{
719        hal::event_log().post(shared_ptr<hal::EventDetail>(
720                new hal::EventMsg(L"I tried to contact me.")));         
721
722        return WM_AreYouMe_; 
723}
Note: See TracBrowser for help on using the repository browser.