110 lines
3.0 KiB
C++
110 lines
3.0 KiB
C++
/*
|
|
*(C) 2006 Roku LLC
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License Version 2 as published
|
|
* by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* without any warranty; without even the implied warranty of
|
|
* merchantability or fitness for a particular purpose. See the GNU General
|
|
* Public License for more details.
|
|
*
|
|
* Please read README.txt in the same directory as this source file for
|
|
* further license information.
|
|
*/
|
|
|
|
#include "stdafx.h"
|
|
#include "resource.h"
|
|
|
|
#include "MainDlg.h"
|
|
#include "FireflyShell.h"
|
|
|
|
CMainDlg::CMainDlg(bool move_window)
|
|
: m_window_move_required(move_window)
|
|
{
|
|
this->AddPage(m_pageConfig);
|
|
this->AddPage(m_pageAdvanced);
|
|
this->AddPage(m_pageLog);
|
|
this->AddPage(m_pageAbout);
|
|
|
|
ATLVERIFY(m_strTitle.LoadString(IDR_MAINFRAME));
|
|
this->SetTitle(m_strTitle);
|
|
}
|
|
|
|
LRESULT CMainDlg::OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
|
|
{
|
|
bool restart_service = false;
|
|
if (HIWORD(wParam) == BN_CLICKED)
|
|
{
|
|
const UINT id = LOWORD(wParam);
|
|
|
|
if ((id == IDOK || id == ID_APPLY_NOW)
|
|
&& GetDlgItem(ID_APPLY_NOW).IsWindowEnabled()
|
|
&& GetApplication()->GetServiceStatus().IsRunning())
|
|
{
|
|
CString title, text;
|
|
title.LoadString(IDR_MAINFRAME);
|
|
text.LoadString(IDS_QUERYSERVERRESTART);
|
|
if (MessageBox(text, title, MB_YESNO) != IDYES)
|
|
return 0;
|
|
restart_service = true;
|
|
}
|
|
}
|
|
|
|
LRESULT result = base::OnCommand(uMsg, wParam, lParam, bHandled);
|
|
if (restart_service)
|
|
GetApplication()->RestartService(m_hWnd);
|
|
|
|
return result;
|
|
}
|
|
|
|
void CMainDlg::PositionWindow()
|
|
{
|
|
POINT cursor_pt;
|
|
GetCursorPos(&cursor_pt);
|
|
|
|
CRect desktop_rect;
|
|
if (SystemParametersInfo(SPI_GETWORKAREA, 0, &desktop_rect, 0))
|
|
{
|
|
// Don't put it hard against the edge of the screen or task bar.
|
|
desktop_rect.DeflateRect(CSize(4, 4));
|
|
|
|
CRect window_rect;
|
|
GetWindowRect(&window_rect);
|
|
|
|
// First move the window so that it's middle is at the cursor position.
|
|
CPoint pos;
|
|
|
|
pos.x = cursor_pt.x - window_rect.Width()/2;
|
|
pos.y = cursor_pt.y - window_rect.Height()/2;
|
|
|
|
// Now make that window appear on the work area but in case it doesn't fit prefer to fit the
|
|
// top left.
|
|
if (pos.x + window_rect.Width() > desktop_rect.right)
|
|
pos.x = desktop_rect.right - window_rect.Width();
|
|
if (pos.y + window_rect.Height() > desktop_rect.bottom)
|
|
pos.y = desktop_rect.bottom - window_rect.Height();
|
|
|
|
if (pos.x < desktop_rect.left)
|
|
pos.x = desktop_rect.left;
|
|
if (pos.y < desktop_rect.top)
|
|
pos.y = desktop_rect.top;
|
|
|
|
SetWindowPos(NULL, pos.x, pos.y, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOZORDER);
|
|
}
|
|
}
|
|
|
|
void CMainDlg::OnMove(CPoint pt)
|
|
{
|
|
if (m_window_move_required)
|
|
{
|
|
// We don't want to recurse.
|
|
m_window_move_required = false;
|
|
PositionWindow();
|
|
}
|
|
else
|
|
{
|
|
SetMsgHandled(false);
|
|
}
|
|
} |