mirror of
https://github.com/owntone/owntone-server.git
synced 2025-11-11 14:30:20 -05:00
Merge from dev-FireflyShell branch
This commit is contained in:
167
win32/FireflyShell/AdvancedPage.cpp
Normal file
167
win32/FireflyShell/AdvancedPage.cpp
Normal file
@@ -0,0 +1,167 @@
|
||||
/*
|
||||
*(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 "AdvancedPage.h"
|
||||
#include "IniFile.h"
|
||||
#include "FireflyShell.h"
|
||||
|
||||
LRESULT CAdvancedPage::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
||||
{
|
||||
IniFile ini(GetApplication()->GetConfigPath());
|
||||
m_server_port = ini.GetInteger(_T("general"), _T("port"), 9999);
|
||||
|
||||
DoDataExchange(false);
|
||||
m_port_spin.SetRange32(1, 65535);
|
||||
|
||||
switch (GetApplication()->IsAutoStartEnabled())
|
||||
{
|
||||
case 0:
|
||||
m_autostart_check.SetCheck(BST_UNCHECKED);
|
||||
break;
|
||||
case 1:
|
||||
m_autostart_check.SetCheck(BST_CHECKED);
|
||||
break;
|
||||
case 2:
|
||||
// Be sneaky here. Make it capable of showing indeterminate but
|
||||
// don't make it automatically change on click. We'll revert
|
||||
// to a normal checkbox when the click happens.
|
||||
m_autostart_check.SetButtonStyle(BS_3STATE);
|
||||
m_autostart_check.SetCheck(BST_INDETERMINATE);
|
||||
break;
|
||||
}
|
||||
UpdateControls();
|
||||
|
||||
GetApplication()->ServiceStatusSubscribe(this);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void CAdvancedPage::OnDestroy()
|
||||
{
|
||||
GetApplication()->ServiceStatusUnsubscribe(this);
|
||||
}
|
||||
|
||||
void CAdvancedPage::UpdateControls()
|
||||
{
|
||||
Service::Status status = GetApplication()->GetServiceStatus();
|
||||
UpdateControls(status);
|
||||
}
|
||||
|
||||
void CAdvancedPage::UpdateControls(Service::Status status)
|
||||
{
|
||||
UINT state_id;
|
||||
if (status.IsPending())
|
||||
{
|
||||
state_id = IDS_SERVER_PENDING;
|
||||
GetDlgItem(IDC_STARTSERVICE).ShowWindow(SW_HIDE);
|
||||
GetDlgItem(IDC_STOPSERVICE).ShowWindow(SW_HIDE);
|
||||
}
|
||||
else if (status.IsRunning())
|
||||
{
|
||||
state_id = IDS_SERVER_RUNNING;
|
||||
GetDlgItem(IDC_STARTSERVICE).ShowWindow(SW_HIDE);
|
||||
GetDlgItem(IDC_STOPSERVICE).ShowWindow(SW_SHOW);
|
||||
}
|
||||
else
|
||||
{
|
||||
state_id = IDS_SERVER_STOPPED;
|
||||
GetDlgItem(IDC_STARTSERVICE).ShowWindow(SW_SHOW);
|
||||
GetDlgItem(IDC_STOPSERVICE).ShowWindow(SW_HIDE);
|
||||
}
|
||||
|
||||
const bool can_configure = GetApplication()->CanConfigure();
|
||||
GetDlgItem(IDC_SERVERPORT).EnableWindow(can_configure);
|
||||
GetDlgItem(IDC_PORTSPIN).EnableWindow(can_configure);
|
||||
|
||||
// If we can't control the service then don't give the user
|
||||
// the impression that we can.
|
||||
const bool can_control = GetApplication()->CanControlService();
|
||||
GetDlgItem(IDC_STARTSERVICE).EnableWindow(can_control);
|
||||
GetDlgItem(IDC_STOPSERVICE).EnableWindow(can_control);
|
||||
GetDlgItem(IDC_AUTOSTART).EnableWindow(can_control);
|
||||
|
||||
CString state;
|
||||
state.LoadString(state_id);
|
||||
if (!can_control)
|
||||
{
|
||||
CString s;
|
||||
s.LoadString(IDS_NOT_ADMIN);
|
||||
state += " ";
|
||||
state += s;
|
||||
}
|
||||
|
||||
GetDlgItem(IDC_SERVERSTATE).SetWindowText(state);
|
||||
}
|
||||
|
||||
int CAdvancedPage::OnApply()
|
||||
{
|
||||
ATLTRACE("CAdvancedPage::OnApply\n");
|
||||
|
||||
if (!DoDataExchange(true))
|
||||
return false;
|
||||
|
||||
IniFile ini(GetApplication()->GetConfigPath());
|
||||
ini.SetInteger(_T("general"), _T("port"), m_server_port);
|
||||
|
||||
switch (m_autostart_check.GetCheck())
|
||||
{
|
||||
case BST_CHECKED:
|
||||
GetApplication()->EnableAutoStart(m_hWnd, true);
|
||||
break;
|
||||
case BST_UNCHECKED:
|
||||
GetApplication()->EnableAutoStart(m_hWnd, false);
|
||||
break;
|
||||
case BST_INDETERMINATE:
|
||||
// Ignore
|
||||
break;
|
||||
}
|
||||
|
||||
// Incorrectly documented in WTL
|
||||
return true;
|
||||
}
|
||||
|
||||
LRESULT CAdvancedPage::OnStartService(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
|
||||
{
|
||||
GetApplication()->StartService(m_hWnd);
|
||||
UpdateControls();
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT CAdvancedPage::OnStopService(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
|
||||
{
|
||||
GetApplication()->StopService(m_hWnd);
|
||||
UpdateControls();
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT CAdvancedPage::OnWebAdmin(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
|
||||
{
|
||||
// Go to the config file because we might not have committed a change yet.
|
||||
IniFile ini(GetApplication()->GetConfigPath());
|
||||
unsigned int port = ini.GetInteger(_T("general"), _T("port"), 9999);
|
||||
|
||||
CString url;
|
||||
url.Format(_T("http://localhost:%u/"), port);
|
||||
|
||||
::ShellExecute(m_hWnd, _T("open"), url, NULL, NULL, SW_SHOWNORMAL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void CAdvancedPage::OnServiceStatus(Service::Status old_status, Service::Status new_status)
|
||||
{
|
||||
UpdateControls(new_status);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user