source: trunk/src/HaliteWindow.cpp @ 762

Revision 762, 17.3 KB checked in by Eoin, 10 years ago (diff)

Created the time picker dialog. Have only implemented pausing and exit action so far.

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        HAL_DEV_MSG(L"Posting Quit Message");
470        PostQuitMessage(0);     
471
472        } HAL_GENERIC_FN_EXCEPTION_CATCH(L"HaliteWindow::OnDestroy()")
473}
474
475void HaliteWindow::OnSize(UINT type, WTL::CSize)
476{
477        if (type == SIZE_MINIMIZED)
478        {
479                if (use_tray)
480                {
481                        ShowWindow(SW_HIDE);
482                        trayIcon_.Show();
483                }
484        }
485        else
486        {
487                if (trayIcon_.IsShowing())
488                        trayIcon_.Hide();
489
490                GetWindowRect(rect);
491        }
492       
493        UpdateLayout();
494        SetMsgHandled(false);
495}       
496
497void HaliteWindow::OnMove(WTL::CSize)
498{
499        WINDOWPLACEMENT wnd = { sizeof(WINDOWPLACEMENT ) };
500        GetWindowPlacement(&wnd);
501       
502        if (wnd.showCmd != SW_SHOWMINIMIZED)
503                GetWindowRect(rect);
504
505        SetMsgHandled(false);   
506}
507
508void HaliteWindow::OnShowWindow(BOOL bShow, UINT nStatus)
509{
510        SetMsgHandled(false);
511}
512
513LRESULT HaliteWindow::OnTrayOpenHalite(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
514{
515        trayIcon_.Hide();
516        ShowWindow(SW_RESTORE);
517       
518        return 0;
519}
520
521LRESULT HaliteWindow::OnTrayExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
522{
523        PostMessage(WM_CLOSE, 0, 0);
524       
525        return 0;
526}
527
528LRESULT HaliteWindow::OnFileOpen(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
529{
530        CSSFileDialog dlgOpen(TRUE, NULL, NULL, OFN_HIDEREADONLY, L"Torrents (*.torrent)|*.torrent|", m_hWnd);
531
532        if (dlgOpen.DoModal() == IDOK) 
533        {
534                ProcessFile(dlgOpen.m_ofn.lpstrFile);
535        }
536       
537        return 0;       
538}
539
540LRESULT HaliteWindow::OnFileNew(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
541{
542        wstring title = hal::app().res_wstr(HAL_NEWT_DIALOG_TITLE);
543
544        NewTorrentDialog newTorrent(title.c_str());     
545        newTorrent.DoModal();
546       
547        return 0;
548}
549
550LRESULT HaliteWindow::OnSettings(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
551{
552        ConfigOptionsProp sheet(this, L"Settings");     
553        sheet.DoModal();
554       
555        hal::config().settingsChanged();
556        setCorrectDialog();
557       
558        return 0;
559}
560
561LRESULT HaliteWindow::OnPauseAll(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
562{
563        hal::bittorrent::Instance().pause_all_torrents();
564       
565        issueUiUpdate();
566        return 0;
567}
568
569LRESULT HaliteWindow::OnResumeAll(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
570{
571        hal::bittorrent::Instance().unpause_all_torrents();
572       
573        issueUiUpdate();
574        return 0;
575}
576
577LRESULT HaliteWindow::OnHelp(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
578{
579        ConfigOptionsProp sheet(this, L"Settings", 4); 
580        sheet.DoModal();
581       
582        hal::config().settingsChanged();
583       
584        return 0;
585}
586
587LRESULT HaliteWindow::OnToolbarExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
588{
589        TryToCloseWithConfirmation();
590       
591        return 0;
592}
593
594LRESULT HaliteWindow::OnUnconditionalShutdown(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam)
595{
596        HAL_DEV_MSG(L"In OnUnconditionalShutdown");
597
598        DestroyWindow();
599
600        return 0;
601}
602
603void HaliteWindow::exitCallback()
604{
605        HAL_DEV_MSG(L"In callback");
606
607        PostMessage(WM_HALITE_UNCONDITIONAL_SHUTDOWN, 0, 0);
608}
609
610LRESULT HaliteWindow::OnAutoShutdown(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
611{       
612/*      WTL::CMenuHandle m;
613        WTL::CMenu menu;       
614
615        m.LoadMenu(HAL_SHUTDOWN_MENU);
616        menu.Attach(m.GetSubMenu(0));
617
618        POINT ptPoint;
619        GetCursorPos(&ptPoint);
620        menu.TrackPopupMenu(0, ptPoint.x, ptPoint.y, m_hWnd);*/
621
622//      typedef ATL::CWinTraits<WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_CENTER, WS_EX_DLGMODALFRAME> ;
623        typedef ATL::CWinTraits<WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | DTS_UPDOWN | DTS_TIMEFORMAT , 0>                                    CDateTimePickerCtrlTraits;
624        typedef WTL::CControlDialog<1598426, WTL::CDateTimePickerCtrl, CDateTimePickerCtrlTraits> CDateDialog;
625
626        boost::posix_time::time_duration time;
627        unsigned action;
628
629        TimePickerDlg dd(time, action);
630        dd.DoModal();
631
632        if (!time.is_not_a_date_time())
633        {
634               
635                hal::event_log().post(shared_ptr<hal::EventDetail>(
636                        new hal::EventMsg(hal::wform(L"OnAutoShutdown %1% %2%") % hal::from_utf8(to_simple_string(time)) % action)));
637
638                switch(action)
639                {
640                case TimePickerDlg::action_pause:
641                        hal::bittorrent::Instance().schedual_action(time, hal::bit::action_pause);
642                        break;
643                case TimePickerDlg::action_exit:
644                        hal::bittorrent::Instance().schedual_callback(
645                                time, bind(&HaliteWindow::exitCallback, this));
646                        break;
647                case TimePickerDlg::action_logoff:
648                        break;
649                case TimePickerDlg::action_shutdown:
650                        break;
651                default:
652                        break;
653                }
654        }
655        else
656        {               
657                hal::event_log().post(shared_ptr<hal::EventDetail>(
658                        new hal::EventMsg(L"Not a date_time")));
659        }
660
661//      hal::bittorrent::Instance().schedual_callback(
662//              boost::posix_time::hours(5), bind(&HaliteWindow::exitCallback, this));
663
664        return 0;
665}
666
667LRESULT HaliteWindow::OnViewStatusBar(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
668{
669        BOOL bVisible = !::IsWindowVisible(m_hWndStatusBar);
670        ::ShowWindow(m_hWndStatusBar, bVisible ? SW_SHOWNOACTIVATE : SW_HIDE);
671        UISetCheck(ID_VIEW_STATUS_BAR, bVisible);
672       
673        UpdateLayout();
674       
675        return 0;
676}       
677
678LRESULT HaliteWindow::OnEraseBkgnd(HDC dc)
679{
680        return 1;
681}
682
683LRESULT HaliteWindow::OnPaint(HDC dc)
684{
685        return 1;
686}
687
688LRESULT HaliteWindow::OnAreYouMe(UINT, WPARAM, LPARAM, BOOL&) 
689{
690        hal::event_log().post(shared_ptr<hal::EventDetail>(
691                new hal::EventMsg(L"I tried to contact me.")));         
692
693        return WM_AreYouMe_; 
694}
Note: See TracBrowser for help on using the repository browser.