mirror of
https://gitlab.xiph.org/xiph/icecast-server.git
synced 2025-02-02 15:07:36 -05:00
oddsock's win32 port/GUI
svn path=/trunk/icecast/; revision=3787
This commit is contained in:
parent
1c17ddad0e
commit
15783d12f8
3
AUTHORS
3
AUTHORS
@ -1 +1,4 @@
|
|||||||
Jack Moffitt <jack@icecast.org>
|
Jack Moffitt <jack@icecast.org>
|
||||||
|
Michael Smith <msmith@icecast.org>
|
||||||
|
oddsock <oddsock@oddsock.org>
|
||||||
|
|
||||||
|
10
TODO
10
TODO
@ -2,15 +2,9 @@ BUGS
|
|||||||
----
|
----
|
||||||
- stats get off? this needs testing more testing.
|
- stats get off? this needs testing more testing.
|
||||||
|
|
||||||
- seem to be some segfaults in httpp still. in a few of the cores i've
|
- autoconf doesn't set HAS_POLL
|
||||||
been sent, the avl_tree is null when calling into the avl module.
|
|
||||||
|
|
||||||
- ensure we don't connect a source if the fd would be more then FD_SETSIZE
|
|
||||||
(1024, on linux). Otherwise memory gets overrun, and crashes result.
|
|
||||||
Preferably allow using poll() instead of select() through a lightweight
|
|
||||||
abstraction.
|
|
||||||
|
|
||||||
|
|
||||||
|
- automake isn't installing things (conf, web) correctly.
|
||||||
|
|
||||||
|
|
||||||
FEATURES
|
FEATURES
|
||||||
|
@ -5,8 +5,8 @@ AUTOMAKE_OPTIONS = foreign
|
|||||||
EXTRA_DIST = icecast.xml
|
EXTRA_DIST = icecast.xml
|
||||||
|
|
||||||
debug:
|
debug:
|
||||||
$(MAKE) all CFLAGS="@DEBUG@"
|
$(MAKE) all CFLAGS="@DEBUG@"
|
||||||
|
|
||||||
profile:
|
profile:
|
||||||
$(MAKE) all CFLAGS="@PROFILE@"
|
$(MAKE) all CFLAGS="@PROFILE@"
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
<paths>
|
<paths>
|
||||||
<basedir>/usr/local/icecast</basedir>
|
<basedir>/usr/local/icecast</basedir>
|
||||||
<logdir>/tmp</logdir>
|
<logdir>/tmp</logdir>
|
||||||
<webroot>/usr/local/icecast/webroot</webroot>
|
<webroot>/usr/local/icecast/web</webroot>
|
||||||
</paths>
|
</paths>
|
||||||
|
|
||||||
<logging>
|
<logging>
|
||||||
|
@ -94,7 +94,7 @@ a:hover {color: black; font-family:Verdana}
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<font class="default2">
|
<font class="default2">
|
||||||
<b><xsl:value-of select="description" /></b>
|
<b><xsl:value-of select="name" /></b>
|
||||||
</font>
|
</font>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -104,7 +104,17 @@ a:hover {color: black; font-family:Verdana}
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<font class="default2">
|
<font class="default2">
|
||||||
<b></b>
|
<b><xsl:value-of select="genre" /></b>
|
||||||
|
</font>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="100" >
|
||||||
|
<font class="default1">Stream Description: </font>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<font class="default2">
|
||||||
|
<b><xsl:value-of select="description" /></b>
|
||||||
</font>
|
</font>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
79
win32/ConfigTab.cpp
Normal file
79
win32/ConfigTab.cpp
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
// ConfigTab.cpp : implementation file
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "Icecast2win.h"
|
||||||
|
#include "ConfigTab.h"
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
#define new DEBUG_NEW
|
||||||
|
#undef THIS_FILE
|
||||||
|
static char THIS_FILE[] = __FILE__;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CConfigTab dialog
|
||||||
|
|
||||||
|
|
||||||
|
CConfigTab::CConfigTab(CWnd* pParent /*=NULL*/)
|
||||||
|
: CTabPageSSL(CConfigTab::IDD, pParent)
|
||||||
|
{
|
||||||
|
//{{AFX_DATA_INIT(CConfigTab)
|
||||||
|
m_Config = _T("");
|
||||||
|
//}}AFX_DATA_INIT
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CConfigTab::DoDataExchange(CDataExchange* pDX)
|
||||||
|
{
|
||||||
|
CTabPageSSL::DoDataExchange(pDX);
|
||||||
|
//{{AFX_DATA_MAP(CConfigTab)
|
||||||
|
DDX_Control(pDX, IDC_CONFIG, m_ConfigCtrl);
|
||||||
|
DDX_Text(pDX, IDC_CONFIG, m_Config);
|
||||||
|
//}}AFX_DATA_MAP
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP(CConfigTab, CTabPageSSL)
|
||||||
|
//{{AFX_MSG_MAP(CConfigTab)
|
||||||
|
ON_EN_KILLFOCUS(IDC_CONFIG, OnKillfocusConfig)
|
||||||
|
//}}AFX_MSG_MAP
|
||||||
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CConfigTab message handlers
|
||||||
|
|
||||||
|
void CConfigTab::SaveConfiguration()
|
||||||
|
{
|
||||||
|
// TODO: Add your command handler code here
|
||||||
|
// TODO: Add your control notification handler code here
|
||||||
|
FILE *filep;
|
||||||
|
char buffer[2046] = "";
|
||||||
|
CIcecast2winApp *myApp = (CIcecast2winApp *)AfxGetApp();
|
||||||
|
|
||||||
|
UpdateData(TRUE);
|
||||||
|
if (m_Config != "") {
|
||||||
|
filep = fopen(myApp->m_configFile, "w");
|
||||||
|
if (filep) {
|
||||||
|
fputs(LPCSTR(m_Config), filep);
|
||||||
|
fclose(filep);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CConfigTab::OnInitDialog()
|
||||||
|
{
|
||||||
|
CTabPageSSL::OnInitDialog();
|
||||||
|
|
||||||
|
// TODO: Add extra initialization here
|
||||||
|
AddAnchor(IDC_CONFIG, TOP_LEFT, BOTTOM_RIGHT);
|
||||||
|
|
||||||
|
return TRUE; // return TRUE unless you set the focus to a control
|
||||||
|
// EXCEPTION: OCX Property Pages should return FALSE
|
||||||
|
}
|
||||||
|
|
||||||
|
void CConfigTab::OnKillfocusConfig()
|
||||||
|
{
|
||||||
|
// TODO: Add your control notification handler code here
|
||||||
|
SaveConfiguration();
|
||||||
|
}
|
50
win32/ConfigTab.h
Normal file
50
win32/ConfigTab.h
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
#if !defined(AFX_CONFIGTAB_H__D8B0CC28_59FA_44E8_91A4_377C64F67DCF__INCLUDED_)
|
||||||
|
#define AFX_CONFIGTAB_H__D8B0CC28_59FA_44E8_91A4_377C64F67DCF__INCLUDED_
|
||||||
|
|
||||||
|
#if _MSC_VER > 1000
|
||||||
|
#pragma once
|
||||||
|
#endif // _MSC_VER > 1000
|
||||||
|
// ConfigTab.h : header file
|
||||||
|
//
|
||||||
|
#include "TabPageSSL.h"
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CConfigTab dialog
|
||||||
|
|
||||||
|
class CConfigTab : public CTabPageSSL
|
||||||
|
{
|
||||||
|
// Construction
|
||||||
|
public:
|
||||||
|
void SaveConfiguration();
|
||||||
|
CConfigTab(CWnd* pParent = NULL); // standard constructor
|
||||||
|
|
||||||
|
// Dialog Data
|
||||||
|
//{{AFX_DATA(CConfigTab)
|
||||||
|
enum { IDD = IDD_CONFIGDIALOG };
|
||||||
|
CEdit m_ConfigCtrl;
|
||||||
|
CString m_Config;
|
||||||
|
//}}AFX_DATA
|
||||||
|
|
||||||
|
|
||||||
|
// Overrides
|
||||||
|
// ClassWizard generated virtual function overrides
|
||||||
|
//{{AFX_VIRTUAL(CConfigTab)
|
||||||
|
protected:
|
||||||
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
|
||||||
|
//}}AFX_VIRTUAL
|
||||||
|
|
||||||
|
// Implementation
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Generated message map functions
|
||||||
|
//{{AFX_MSG(CConfigTab)
|
||||||
|
virtual BOOL OnInitDialog();
|
||||||
|
afx_msg void OnKillfocusConfig();
|
||||||
|
//}}AFX_MSG
|
||||||
|
DECLARE_MESSAGE_MAP()
|
||||||
|
};
|
||||||
|
|
||||||
|
//{{AFX_INSERT_LOCATION}}
|
||||||
|
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
|
||||||
|
|
||||||
|
#endif // !defined(AFX_CONFIGTAB_H__D8B0CC28_59FA_44E8_91A4_377C64F67DCF__INCLUDED_)
|
87
win32/Icecast2win.cpp
Normal file
87
win32/Icecast2win.cpp
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
// Icecast2win.cpp : Defines the class behaviors for the application.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "Icecast2win.h"
|
||||||
|
#include "Icecast2winDlg.h"
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
#define new DEBUG_NEW
|
||||||
|
#undef THIS_FILE
|
||||||
|
static char THIS_FILE[] = __FILE__;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CIcecast2winApp
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP(CIcecast2winApp, CWinApp)
|
||||||
|
//{{AFX_MSG_MAP(CIcecast2winApp)
|
||||||
|
// NOTE - the ClassWizard will add and remove mapping macros here.
|
||||||
|
// DO NOT EDIT what you see in these blocks of generated code!
|
||||||
|
//}}AFX_MSG
|
||||||
|
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
|
||||||
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
#include "colors.h"
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CIcecast2winApp construction
|
||||||
|
|
||||||
|
CIcecast2winApp::CIcecast2winApp()
|
||||||
|
{
|
||||||
|
// TODO: add construction code here,
|
||||||
|
// Place all significant initialization in InitInstance
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// The one and only CIcecast2winApp object
|
||||||
|
|
||||||
|
CIcecast2winApp theApp;
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CIcecast2winApp initialization
|
||||||
|
|
||||||
|
BOOL CIcecast2winApp::InitInstance()
|
||||||
|
{
|
||||||
|
AfxEnableControlContainer();
|
||||||
|
|
||||||
|
// Standard initialization
|
||||||
|
// If you are not using these features and wish to reduce the size
|
||||||
|
// of your final executable, you should remove from the following
|
||||||
|
// the specific initialization routines you do not need.
|
||||||
|
|
||||||
|
if (strlen(m_lpCmdLine) > 0) {
|
||||||
|
strcpy(m_configFile, m_lpCmdLine);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
strcpy(m_configFile, ".\\icecast.xml");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef _AFXDLL
|
||||||
|
Enable3dControls(); // Call this when using MFC in a shared DLL
|
||||||
|
#else
|
||||||
|
Enable3dControlsStatic(); // Call this when linking to MFC statically
|
||||||
|
#endif
|
||||||
|
|
||||||
|
CIcecast2winDlg dlg;
|
||||||
|
m_pMainWnd = &dlg;
|
||||||
|
|
||||||
|
// SetDialogBkColor(BGCOLOR,TEXTCOLOR);
|
||||||
|
|
||||||
|
int nResponse = dlg.DoModal();
|
||||||
|
if (nResponse == IDOK)
|
||||||
|
{
|
||||||
|
// TODO: Place code here to handle when the dialog is
|
||||||
|
// dismissed with OK
|
||||||
|
}
|
||||||
|
else if (nResponse == IDCANCEL)
|
||||||
|
{
|
||||||
|
// TODO: Place code here to handle when the dialog is
|
||||||
|
// dismissed with Cancel
|
||||||
|
}
|
||||||
|
|
||||||
|
// Since the dialog has been closed, return FALSE so that we exit the
|
||||||
|
// application, rather than start the application's message pump.
|
||||||
|
return FALSE;
|
||||||
|
}
|
267
win32/Icecast2win.dsp
Normal file
267
win32/Icecast2win.dsp
Normal file
@ -0,0 +1,267 @@
|
|||||||
|
# Microsoft Developer Studio Project File - Name="Icecast2win" - Package Owner=<4>
|
||||||
|
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||||
|
# ** DO NOT EDIT **
|
||||||
|
|
||||||
|
# TARGTYPE "Win32 (x86) Application" 0x0101
|
||||||
|
|
||||||
|
CFG=Icecast2win - Win32 Debug
|
||||||
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||||
|
!MESSAGE use the Export Makefile command and run
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "Icecast2win.mak".
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "Icecast2win.mak" CFG="Icecast2win - Win32 Debug"
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE Possible choices for configuration are:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE "Icecast2win - Win32 Release" (based on "Win32 (x86) Application")
|
||||||
|
!MESSAGE "Icecast2win - Win32 Debug" (based on "Win32 (x86) Application")
|
||||||
|
!MESSAGE
|
||||||
|
|
||||||
|
# Begin Project
|
||||||
|
# PROP AllowPerConfigDependencies 0
|
||||||
|
# PROP Scc_ProjName ""
|
||||||
|
# PROP Scc_LocalPath ""
|
||||||
|
CPP=cl.exe
|
||||||
|
MTL=midl.exe
|
||||||
|
RSC=rc.exe
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "Icecast2win - Win32 Release"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 5
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "Release"
|
||||||
|
# PROP BASE Intermediate_Dir "Release"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 5
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "Release"
|
||||||
|
# PROP Intermediate_Dir "Release"
|
||||||
|
# PROP Ignore_Export_Lib 0
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Yu"stdafx.h" /FD /c
|
||||||
|
# ADD CPP /nologo /MT /W3 /GX /O2 /I "../" /I "../../libxslt/include" /I "../../iconv/include" /I "../../libxml2/include" /I "../src" /I "../src/httpp" /I "../src/thread" /I "../src/log" /I "../src/avl" /I "../src/net" /I "src/timings" /I "../../pthreads" /I "../../ogg/include" /I "../../vorbis/include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
|
||||||
|
# SUBTRACT CPP /YX /Yc /Yu
|
||||||
|
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||||
|
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||||
|
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 /nologo /subsystem:windows /machine:I386
|
||||||
|
# ADD LINK32 Releaseicecast\icecast.lib ..\..\ogg\win32\Static_Release\ogg_static.lib ..\..\vorbis\win32\Vorbis_Static_Release\vorbis_static.lib ..\..\libxml2\lib\libxml2.lib ..\..\libxslt\lib\libxslt.lib ..\..\iconv\lib\iconv.lib ..\..\pthreads\pthreadVSE.lib ws2_32.lib winmm.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"libc.lib" /out:"Release/Icecast2.exe"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "Icecast2win - Win32 Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 5
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 6
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "Debug"
|
||||||
|
# PROP Intermediate_Dir "Debug"
|
||||||
|
# PROP Ignore_Export_Lib 0
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Yu"stdafx.h" /FD /GZ /c
|
||||||
|
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../" /I "../../libxslt/include" /I "../../iconv/include" /I "../../libxml2/include" /I "../src" /I "../src/httpp" /I "../src/thread" /I "../src/log" /I "../src/avl" /I "../src/net" /I "src/timings" /I "../../pthreads" /I "../../ogg/include" /I "../../vorbis/include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_WIN32" /D "_AFXDLL" /FD /GZ /c
|
||||||
|
# SUBTRACT CPP /YX /Yc /Yu
|
||||||
|
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||||
|
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||||
|
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
|
||||||
|
# ADD LINK32 Debugicecast\icecast.lib ..\..\..\ogg\win32\Static_Debug\ogg_static_d.lib ..\..\..\vorbis\win32\Vorbis_Static_Debug\vorbis_static_d.lib ..\..\libxml2\lib\libxml2.lib ..\..\libxslt\lib\libxslt.lib ..\..\iconv\lib\iconv.lib ..\..\pthreads\pthreadVSE.lib ws2_32.lib winmm.lib /nologo /subsystem:windows /incremental:no /debug /machine:I386 /nodefaultlib:"libcd.lib" /nodefaultlib:"LIBCMTD.lib" /pdbtype:sept
|
||||||
|
# SUBTRACT LINK32 /pdb:none
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# Begin Target
|
||||||
|
|
||||||
|
# Name "Icecast2win - Win32 Release"
|
||||||
|
# Name "Icecast2win - Win32 Debug"
|
||||||
|
# Begin Group "Source Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\ConfigTab.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\Icecast2win.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\Icecast2win.rc
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\Icecast2winDlg.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\ResizableDialog.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\ResizableDialog.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\StatsTab.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\Status.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\StdAfx.cpp
|
||||||
|
# ADD CPP /Yc"stdafx.h"
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\TabCtrlSSL.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\TabCtrlSSL.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\TabPageSSL.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\TabPageSSL.h
|
||||||
|
# End Source File
|
||||||
|
# End Group
|
||||||
|
# Begin Group "Header Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\colors.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\ConfigTab.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\Icecast2win.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\Icecast2winDlg.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\Resource.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\StatsTab.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\Status.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\StdAfx.h
|
||||||
|
# End Source File
|
||||||
|
# End Group
|
||||||
|
# Begin Group "Resource Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\bitmap1.bmp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\bitmap2.bmp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\black.bmp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\cursor1.cur
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\cursor2.cur
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\green1.ico
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\icecast.ico
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\Icecast2.ico
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\res\Icecast2.ico
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\icecast2logo.bmp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\icecast2logo2.bmp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\res\Icecast2win.ico
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\res\Icecast2win.rc2
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\ico00001.ico
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\icon1.ico
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\icon2.ico
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\running.bmp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\stopped.bmp
|
||||||
|
# End Source File
|
||||||
|
# End Group
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\ReadMe.txt
|
||||||
|
# End Source File
|
||||||
|
# End Target
|
||||||
|
# End Project
|
77
win32/Icecast2win.dsw
Normal file
77
win32/Icecast2win.dsw
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||||
|
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "Icecast2win"=.\Icecast2win.dsp - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name libxml
|
||||||
|
End Project Dependency
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name icecast
|
||||||
|
End Project Dependency
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name ogg_static
|
||||||
|
End Project Dependency
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name vorbis_static
|
||||||
|
End Project Dependency
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "icecast"=.\icecast.dsp - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "ogg_static"=..\..\ogg\win32\ogg_static.dsp - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "vorbis_static"=..\..\vorbis\win32\vorbis_static.dsp - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Global:
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<3>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
50
win32/Icecast2win.h
Normal file
50
win32/Icecast2win.h
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
// Icecast2win.h : main header file for the ICECAST2WIN application
|
||||||
|
//
|
||||||
|
|
||||||
|
#if !defined(AFX_ICECAST2WIN_H__76A528C9_A424_4417_BFDF_0E556A9EE4F1__INCLUDED_)
|
||||||
|
#define AFX_ICECAST2WIN_H__76A528C9_A424_4417_BFDF_0E556A9EE4F1__INCLUDED_
|
||||||
|
|
||||||
|
#if _MSC_VER > 1000
|
||||||
|
#pragma once
|
||||||
|
#endif // _MSC_VER > 1000
|
||||||
|
|
||||||
|
#ifndef __AFXWIN_H__
|
||||||
|
#error include 'stdafx.h' before including this file for PCH
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "resource.h" // main symbols
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CIcecast2winApp:
|
||||||
|
// See Icecast2win.cpp for the implementation of this class
|
||||||
|
//
|
||||||
|
|
||||||
|
class CIcecast2winApp : public CWinApp
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
char m_configFile[1024];
|
||||||
|
CIcecast2winApp();
|
||||||
|
|
||||||
|
// Overrides
|
||||||
|
// ClassWizard generated virtual function overrides
|
||||||
|
//{{AFX_VIRTUAL(CIcecast2winApp)
|
||||||
|
public:
|
||||||
|
virtual BOOL InitInstance();
|
||||||
|
//}}AFX_VIRTUAL
|
||||||
|
|
||||||
|
// Implementation
|
||||||
|
|
||||||
|
//{{AFX_MSG(CIcecast2winApp)
|
||||||
|
// NOTE - the ClassWizard will add and remove member functions here.
|
||||||
|
// DO NOT EDIT what you see in these blocks of generated code !
|
||||||
|
//}}AFX_MSG
|
||||||
|
DECLARE_MESSAGE_MAP()
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
//{{AFX_INSERT_LOCATION}}
|
||||||
|
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
|
||||||
|
|
||||||
|
#endif // !defined(AFX_ICECAST2WIN_H__76A528C9_A424_4417_BFDF_0E556A9EE4F1__INCLUDED_)
|
270
win32/Icecast2win.rc
Normal file
270
win32/Icecast2win.rc
Normal file
@ -0,0 +1,270 @@
|
|||||||
|
//Microsoft Developer Studio generated resource script.
|
||||||
|
//
|
||||||
|
#include "resource.h"
|
||||||
|
|
||||||
|
#define APSTUDIO_READONLY_SYMBOLS
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Generated from the TEXTINCLUDE 2 resource.
|
||||||
|
//
|
||||||
|
#include "afxres.h"
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// English (U.S.) resources
|
||||||
|
|
||||||
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||||
|
#ifdef _WIN32
|
||||||
|
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||||
|
#pragma code_page(1252)
|
||||||
|
#endif //_WIN32
|
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// TEXTINCLUDE
|
||||||
|
//
|
||||||
|
|
||||||
|
1 TEXTINCLUDE DISCARDABLE
|
||||||
|
BEGIN
|
||||||
|
"resource.h\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
2 TEXTINCLUDE DISCARDABLE
|
||||||
|
BEGIN
|
||||||
|
"#include ""afxres.h""\r\n"
|
||||||
|
"\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
3 TEXTINCLUDE DISCARDABLE
|
||||||
|
BEGIN
|
||||||
|
"#define _AFX_NO_SPLITTER_RESOURCES\r\n"
|
||||||
|
"#define _AFX_NO_OLE_RESOURCES\r\n"
|
||||||
|
"#define _AFX_NO_TRACKER_RESOURCES\r\n"
|
||||||
|
"#define _AFX_NO_PROPERTY_RESOURCES\r\n"
|
||||||
|
"\r\n"
|
||||||
|
"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
|
||||||
|
"#ifdef _WIN32\r\n"
|
||||||
|
"LANGUAGE 9, 1\r\n"
|
||||||
|
"#pragma code_page(1252)\r\n"
|
||||||
|
"#endif //_WIN32\r\n"
|
||||||
|
"#include ""res\\Icecast2win.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
|
||||||
|
"#include ""afxres.rc"" // Standard components\r\n"
|
||||||
|
"#endif\r\n"
|
||||||
|
"\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Dialog
|
||||||
|
//
|
||||||
|
|
||||||
|
IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 235, 55
|
||||||
|
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
|
CAPTION "About Icecast2win"
|
||||||
|
FONT 8, "MS Sans Serif"
|
||||||
|
BEGIN
|
||||||
|
ICON IDR_MAINFRAME,IDC_STATIC,11,17,20,20
|
||||||
|
LTEXT "Icecast 2 Win32",IDC_STATIC,40,10,119,8,SS_NOPREFIX
|
||||||
|
DEFPUSHBUTTON "OK",IDOK,178,7,50,14,WS_GROUP
|
||||||
|
END
|
||||||
|
|
||||||
|
IDD_ICECAST2WIN_DIALOG DIALOGEX 0, 0, 318, 249
|
||||||
|
STYLE WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION |
|
||||||
|
WS_SYSMENU | WS_THICKFRAME
|
||||||
|
EXSTYLE WS_EX_APPWINDOW
|
||||||
|
CAPTION "icecast2"
|
||||||
|
FONT 8, "MS Sans Serif", 0, 0, 0x1
|
||||||
|
BEGIN
|
||||||
|
CONTROL "Tab1",IDC_MAINTAB,"SysTabControl32",0x0,0,48,318,201
|
||||||
|
PUSHBUTTON "Start Server",IDC_START,17,31,56,14
|
||||||
|
CONTROL "Start Server on Application Startup",IDC_AUTOSTART,
|
||||||
|
"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,76,
|
||||||
|
29,81,17
|
||||||
|
CONTROL 159,IDC_STATIC,"Static",SS_BITMAP,0,0,117,20
|
||||||
|
CONTROL 151,IDC_SERVERSTATUS,"Static",SS_BITMAP,253,28,65,18,
|
||||||
|
WS_EX_CLIENTEDGE
|
||||||
|
RTEXT "Server Status",IDC_STATIC_SS,163,28,86,14
|
||||||
|
CONTROL 150,IDC_STATICBLACK,"Static",SS_BITMAP,116,0,200,20
|
||||||
|
END
|
||||||
|
|
||||||
|
IDD_SSTATUS DIALOG DISCARDABLE 0, 0, 320, 210
|
||||||
|
STYLE WS_CHILD
|
||||||
|
FONT 8, "MS Sans Serif"
|
||||||
|
BEGIN
|
||||||
|
LTEXT "",IDC_FILLER2,0,199,319,11
|
||||||
|
CONTROL "List1",IDC_GLOBALSTAT_LIST,"SysListView32",LVS_REPORT |
|
||||||
|
WS_BORDER | WS_TABSTOP,9,34,300,147
|
||||||
|
CTEXT "Global Statistics",IDC_STATIC_GS,9,9,300,21
|
||||||
|
LTEXT "Server Has Been Running For ",IDC_STATIC_RUN,46,184,100,
|
||||||
|
8
|
||||||
|
LTEXT "",IDC_RUNNINGFOR,149,184,156,8
|
||||||
|
END
|
||||||
|
|
||||||
|
IDD_CONFIGDIALOG DIALOG DISCARDABLE 0, 0, 320, 210
|
||||||
|
STYLE WS_CHILD
|
||||||
|
FONT 8, "MS Sans Serif"
|
||||||
|
BEGIN
|
||||||
|
EDITTEXT IDC_CONFIG,0,0,320,210,ES_MULTILINE | ES_AUTOVSCROLL |
|
||||||
|
ES_AUTOHSCROLL | ES_WANTRETURN | WS_VSCROLL
|
||||||
|
END
|
||||||
|
|
||||||
|
IDD_STATSDIALOG DIALOG DISCARDABLE 0, 0, 320, 210
|
||||||
|
STYLE WS_CHILD
|
||||||
|
FONT 8, "MS Sans Serif"
|
||||||
|
BEGIN
|
||||||
|
CONTROL "List1",IDC_STATSLIST,"SysListView32",LVS_REPORT |
|
||||||
|
WS_BORDER | WS_TABSTOP,142,34,149,160
|
||||||
|
CONTROL "List2",IDC_SOURCELIST,"SysListView32",LVS_REPORT |
|
||||||
|
WS_BORDER | WS_TABSTOP,9,34,111,159
|
||||||
|
LTEXT "",IDC_FILLER1,0,199,320,11
|
||||||
|
CTEXT "Source Level Statistics",IDC_STATIC_SLS,9,7,300,15
|
||||||
|
LTEXT "Click source to view statistics",IDC_STATIC,18,25,111,8
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _MAC
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Version
|
||||||
|
//
|
||||||
|
|
||||||
|
VS_VERSION_INFO VERSIONINFO
|
||||||
|
FILEVERSION 1,0,0,1
|
||||||
|
PRODUCTVERSION 1,0,0,1
|
||||||
|
FILEFLAGSMASK 0x3fL
|
||||||
|
#ifdef _DEBUG
|
||||||
|
FILEFLAGS 0x1L
|
||||||
|
#else
|
||||||
|
FILEFLAGS 0x0L
|
||||||
|
#endif
|
||||||
|
FILEOS 0x4L
|
||||||
|
FILETYPE 0x1L
|
||||||
|
FILESUBTYPE 0x0L
|
||||||
|
BEGIN
|
||||||
|
BLOCK "StringFileInfo"
|
||||||
|
BEGIN
|
||||||
|
BLOCK "040904B0"
|
||||||
|
BEGIN
|
||||||
|
VALUE "CompanyName", "\0"
|
||||||
|
VALUE "FileDescription", "Icecast2win MFC Application\0"
|
||||||
|
VALUE "FileVersion", "1, 0, 0, 1\0"
|
||||||
|
VALUE "InternalName", "Icecast2win\0"
|
||||||
|
VALUE "LegalCopyright", "Copyright (C) 2001\0"
|
||||||
|
VALUE "LegalTrademarks", "\0"
|
||||||
|
VALUE "OriginalFilename", "Icecast2win.EXE\0"
|
||||||
|
VALUE "ProductName", "Icecast2win Application\0"
|
||||||
|
VALUE "ProductVersion", "1, 0, 0, 1\0"
|
||||||
|
END
|
||||||
|
END
|
||||||
|
BLOCK "VarFileInfo"
|
||||||
|
BEGIN
|
||||||
|
VALUE "Translation", 0x409, 1200
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
#endif // !_MAC
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// DESIGNINFO
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
GUIDELINES DESIGNINFO DISCARDABLE
|
||||||
|
BEGIN
|
||||||
|
IDD_ABOUTBOX, DIALOG
|
||||||
|
BEGIN
|
||||||
|
LEFTMARGIN, 7
|
||||||
|
RIGHTMARGIN, 228
|
||||||
|
TOPMARGIN, 7
|
||||||
|
BOTTOMMARGIN, 48
|
||||||
|
END
|
||||||
|
END
|
||||||
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Bitmap
|
||||||
|
//
|
||||||
|
|
||||||
|
IDB_BITMAP4 BITMAP DISCARDABLE "black.bmp"
|
||||||
|
IDB_BITMAP5 BITMAP DISCARDABLE "stopped.bmp"
|
||||||
|
IDB_BITMAP6 BITMAP DISCARDABLE "running.bmp"
|
||||||
|
IDB_BITMAP7 BITMAP DISCARDABLE "icecast2logo2.bmp"
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Icon
|
||||||
|
//
|
||||||
|
|
||||||
|
// Icon with lowest ID value placed first to ensure application icon
|
||||||
|
// remains consistent on all systems.
|
||||||
|
IDR_MAINFRAME ICON DISCARDABLE "icecast.ico"
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Menu
|
||||||
|
//
|
||||||
|
|
||||||
|
IDR_MENU2 MENU DISCARDABLE
|
||||||
|
BEGIN
|
||||||
|
POPUP "Popup"
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "Add To Global Stat List", ID_POPUP_ADDTOGLOBALSTATLIST
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
IDR_MENU3 MENU DISCARDABLE
|
||||||
|
BEGIN
|
||||||
|
POPUP " "
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "Delete From Global Stats", ID__DELETEFROMGLOBALSTATS
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// String Table
|
||||||
|
//
|
||||||
|
|
||||||
|
STRINGTABLE DISCARDABLE
|
||||||
|
BEGIN
|
||||||
|
IDS_ABOUTBOX "&About Icecast2win..."
|
||||||
|
END
|
||||||
|
|
||||||
|
#endif // English (U.S.) resources
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef APSTUDIO_INVOKED
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Generated from the TEXTINCLUDE 3 resource.
|
||||||
|
//
|
||||||
|
#define _AFX_NO_SPLITTER_RESOURCES
|
||||||
|
#define _AFX_NO_OLE_RESOURCES
|
||||||
|
#define _AFX_NO_TRACKER_RESOURCES
|
||||||
|
#define _AFX_NO_PROPERTY_RESOURCES
|
||||||
|
|
||||||
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||||
|
#ifdef _WIN32
|
||||||
|
LANGUAGE 9, 1
|
||||||
|
#pragma code_page(1252)
|
||||||
|
#endif //_WIN32
|
||||||
|
#include "res\Icecast2win.rc2" // non-Microsoft Visual C++ edited resources
|
||||||
|
#include "afxres.rc" // Standard components
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
#endif // not APSTUDIO_INVOKED
|
||||||
|
|
1054
win32/Icecast2winDlg.cpp
Normal file
1054
win32/Icecast2winDlg.cpp
Normal file
File diff suppressed because it is too large
Load Diff
111
win32/Icecast2winDlg.h
Normal file
111
win32/Icecast2winDlg.h
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
// Icecast2winDlg.h : header file
|
||||||
|
//
|
||||||
|
|
||||||
|
#if !defined(AFX_ICECAST2WINDLG_H__23B4DA8B_C9BC_49C8_A62C_37FC6BC5E54A__INCLUDED_)
|
||||||
|
#define AFX_ICECAST2WINDLG_H__23B4DA8B_C9BC_49C8_A62C_37FC6BC5E54A__INCLUDED_
|
||||||
|
|
||||||
|
#include "ResizableDialog.h"
|
||||||
|
#include "TabCtrlSSL.h"
|
||||||
|
#include "TabPageSSL.h"
|
||||||
|
|
||||||
|
#include "ConfigTab.h"
|
||||||
|
#include "StatsTab.h"
|
||||||
|
#include "Status.h"
|
||||||
|
|
||||||
|
#if _MSC_VER > 1000
|
||||||
|
#pragma once
|
||||||
|
#endif // _MSC_VER > 1000
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CIcecast2winDlg dialog
|
||||||
|
|
||||||
|
class CIcecast2winDlg : public CResizableDialog
|
||||||
|
{
|
||||||
|
// Construction
|
||||||
|
public:
|
||||||
|
time_t serverStart;
|
||||||
|
void config_read();
|
||||||
|
void config_write();
|
||||||
|
void UpdateStatsLists();
|
||||||
|
CConfigTab configTab;
|
||||||
|
CStatsTab statsTab;
|
||||||
|
CStatus statusTab;
|
||||||
|
int m_colSource0Width;
|
||||||
|
int m_colStats0Width;
|
||||||
|
int m_colStats1Width;
|
||||||
|
int m_colGStats0Width;
|
||||||
|
int m_colGStats1Width;
|
||||||
|
int m_colGStats2Width;
|
||||||
|
CFont labelFont;
|
||||||
|
CBitmap runningBitmap;
|
||||||
|
CBitmap stoppedBitmap;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void StopServer();
|
||||||
|
bool m_isRunning;
|
||||||
|
void DisableControl(UINT control);
|
||||||
|
void EnableControl(UINT control);
|
||||||
|
void getTag(char *pbuf, char *ptag, char *dest);
|
||||||
|
CString m_ErrorLog;
|
||||||
|
CString m_AccessLog;
|
||||||
|
void ParseConfig();
|
||||||
|
void LoadConfig();
|
||||||
|
CIcecast2winDlg(CWnd* pParent = NULL); // standard constructor
|
||||||
|
|
||||||
|
// Dialog Data
|
||||||
|
//{{AFX_DATA(CIcecast2winDlg)
|
||||||
|
enum { IDD = IDD_ICECAST2WIN_DIALOG };
|
||||||
|
CStatic m_SS;
|
||||||
|
CStatic m_ServerStatusBitmap;
|
||||||
|
CStatic m_iceLogo;
|
||||||
|
CButton m_StartButton;
|
||||||
|
CEdit m_StatsEditCtrl;
|
||||||
|
CEdit m_ConfigEditCtrl;
|
||||||
|
CEdit m_ErrorEditCtrl;
|
||||||
|
CEdit m_AccessEditCtrl;
|
||||||
|
CTabCtrlSSL m_MainTab;
|
||||||
|
CString m_AccessEdit;
|
||||||
|
CString m_ErrorEdit;
|
||||||
|
CString m_ConfigEdit;
|
||||||
|
CString m_ServerStatus;
|
||||||
|
CString m_SourcesConnected;
|
||||||
|
CString m_NumClients;
|
||||||
|
FILE *filep_accesslog;
|
||||||
|
FILE *filep_errorlog;
|
||||||
|
CString m_StatsEdit;
|
||||||
|
BOOL m_Autostart;
|
||||||
|
//}}AFX_DATA
|
||||||
|
|
||||||
|
// ClassWizard generated virtual function overrides
|
||||||
|
//{{AFX_VIRTUAL(CIcecast2winDlg)
|
||||||
|
protected:
|
||||||
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
|
||||||
|
//}}AFX_VIRTUAL
|
||||||
|
|
||||||
|
// Implementation
|
||||||
|
protected:
|
||||||
|
HICON m_hIcon;
|
||||||
|
|
||||||
|
// Generated message map functions
|
||||||
|
//{{AFX_MSG(CIcecast2winDlg)
|
||||||
|
virtual BOOL OnInitDialog();
|
||||||
|
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
|
||||||
|
afx_msg void OnPaint();
|
||||||
|
afx_msg HCURSOR OnQueryDragIcon();
|
||||||
|
afx_msg void OnSelchangeMaintab(NMHDR* pNMHDR, LRESULT* pResult);
|
||||||
|
afx_msg void OnFileExit();
|
||||||
|
afx_msg void OnTimer(UINT nIDEvent);
|
||||||
|
afx_msg void OnFileStartserver();
|
||||||
|
afx_msg void OnFileStopserver();
|
||||||
|
afx_msg void OnStart();
|
||||||
|
afx_msg void OnClose();
|
||||||
|
afx_msg void OnSize(UINT nType, int cx, int cy);
|
||||||
|
//}}AFX_MSG
|
||||||
|
DECLARE_MESSAGE_MAP()
|
||||||
|
};
|
||||||
|
|
||||||
|
//{{AFX_INSERT_LOCATION}}
|
||||||
|
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
|
||||||
|
|
||||||
|
#endif // !defined(AFX_ICECAST2WINDLG_H__23B4DA8B_C9BC_49C8_A62C_37FC6BC5E54A__INCLUDED_)
|
442
win32/ResizableDialog.cpp
Normal file
442
win32/ResizableDialog.cpp
Normal file
@ -0,0 +1,442 @@
|
|||||||
|
// ResizableDialog.cpp : implementation file
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright (C) 2000 by Paolo Messina
|
||||||
|
// (ppescher@yahoo.com)
|
||||||
|
//
|
||||||
|
// Free for non-commercial use.
|
||||||
|
// You may change the code to your needs,
|
||||||
|
// provided that credits to the original
|
||||||
|
// author is given in the modified files.
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "ResizableDialog.h"
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
#define new DEBUG_NEW
|
||||||
|
#undef THIS_FILE
|
||||||
|
static char THIS_FILE[] = __FILE__;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CResizableDialog
|
||||||
|
|
||||||
|
inline void CResizableDialog::Construct()
|
||||||
|
{
|
||||||
|
m_bInitDone = FALSE;
|
||||||
|
|
||||||
|
m_bUseMinTrack = TRUE;
|
||||||
|
m_bUseMaxTrack = FALSE;
|
||||||
|
m_bUseMaxRect = FALSE;
|
||||||
|
|
||||||
|
m_bShowGrip = TRUE;
|
||||||
|
|
||||||
|
m_bEnableSaveRestore = FALSE;
|
||||||
|
|
||||||
|
m_szGripSize.cx = GetSystemMetrics(SM_CXVSCROLL);
|
||||||
|
m_szGripSize.cy = GetSystemMetrics(SM_CYHSCROLL);
|
||||||
|
}
|
||||||
|
|
||||||
|
CResizableDialog::CResizableDialog()
|
||||||
|
{
|
||||||
|
Construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
CResizableDialog::CResizableDialog(UINT nIDTemplate, CWnd* pParentWnd)
|
||||||
|
: CDialog(nIDTemplate, pParentWnd)
|
||||||
|
{
|
||||||
|
Construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
CResizableDialog::CResizableDialog(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
|
||||||
|
: CDialog(lpszTemplateName, pParentWnd)
|
||||||
|
{
|
||||||
|
Construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
CResizableDialog::~CResizableDialog()
|
||||||
|
{
|
||||||
|
// for safety
|
||||||
|
m_arrLayout.RemoveAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP(CResizableDialog, CDialog)
|
||||||
|
//{{AFX_MSG_MAP(CResizableDialog)
|
||||||
|
ON_WM_NCHITTEST()
|
||||||
|
ON_WM_GETMINMAXINFO()
|
||||||
|
ON_WM_SIZE()
|
||||||
|
ON_WM_DESTROY()
|
||||||
|
ON_WM_PAINT()
|
||||||
|
//}}AFX_MSG_MAP
|
||||||
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CResizableDialog message handlers
|
||||||
|
|
||||||
|
|
||||||
|
BOOL CResizableDialog::OnInitDialog()
|
||||||
|
{
|
||||||
|
CDialog::OnInitDialog();
|
||||||
|
|
||||||
|
UpdateGripPos();
|
||||||
|
|
||||||
|
// gets the template size as the min track size
|
||||||
|
CRect rc;
|
||||||
|
GetWindowRect(&rc);
|
||||||
|
m_ptMinTrackSize.x = rc.Width();
|
||||||
|
m_ptMinTrackSize.y = rc.Height();
|
||||||
|
|
||||||
|
m_bInitDone = TRUE;
|
||||||
|
|
||||||
|
return TRUE; // return TRUE unless you set the focus to a control
|
||||||
|
// EXCEPTION: OCX Property Pages should return FALSE
|
||||||
|
}
|
||||||
|
|
||||||
|
void CResizableDialog::OnDestroy()
|
||||||
|
{
|
||||||
|
CDialog::OnDestroy();
|
||||||
|
|
||||||
|
if (m_bEnableSaveRestore)
|
||||||
|
SaveWindowRect();
|
||||||
|
|
||||||
|
// remove old windows
|
||||||
|
m_arrLayout.RemoveAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CResizableDialog::OnPaint()
|
||||||
|
{
|
||||||
|
CPaintDC dc(this); // device context for painting
|
||||||
|
|
||||||
|
if (m_bShowGrip && !IsZoomed())
|
||||||
|
{
|
||||||
|
// draw size-grip
|
||||||
|
dc.DrawFrameControl(&m_rcGripRect, DFC_SCROLL, DFCS_SCROLLSIZEGRIP);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CResizableDialog::OnSize(UINT nType, int cx, int cy)
|
||||||
|
{
|
||||||
|
CWnd::OnSize(nType, cx, cy);
|
||||||
|
|
||||||
|
if (nType == SIZE_MAXHIDE || nType == SIZE_MAXSHOW)
|
||||||
|
return; // arrangement not needed
|
||||||
|
|
||||||
|
if (m_bInitDone)
|
||||||
|
{
|
||||||
|
ArrangeLayout();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT CResizableDialog::OnNcHitTest(CPoint point)
|
||||||
|
{
|
||||||
|
CPoint pt = point;
|
||||||
|
ScreenToClient(&pt);
|
||||||
|
|
||||||
|
// if in size grip and in client area
|
||||||
|
if (m_bShowGrip && m_rcGripRect.PtInRect(pt) &&
|
||||||
|
pt.x >= 0 && pt.y >= 0)
|
||||||
|
return HTBOTTOMRIGHT;
|
||||||
|
|
||||||
|
return CDialog::OnNcHitTest(point);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CResizableDialog::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
|
||||||
|
{
|
||||||
|
if (!m_bInitDone)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (m_bUseMinTrack)
|
||||||
|
lpMMI->ptMinTrackSize = m_ptMinTrackSize;
|
||||||
|
|
||||||
|
if (m_bUseMaxTrack)
|
||||||
|
lpMMI->ptMaxTrackSize = m_ptMaxTrackSize;
|
||||||
|
|
||||||
|
if (m_bUseMaxRect)
|
||||||
|
{
|
||||||
|
lpMMI->ptMaxPosition = m_ptMaxPos;
|
||||||
|
lpMMI->ptMaxSize = m_ptMaxSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// layout functions
|
||||||
|
|
||||||
|
void CResizableDialog::AddAnchor(HWND wnd, CSize tl_type, CSize br_type)
|
||||||
|
{
|
||||||
|
ASSERT(wnd != NULL && ::IsWindow(wnd));
|
||||||
|
ASSERT(::IsChild(*this, wnd));
|
||||||
|
ASSERT(tl_type != NOANCHOR);
|
||||||
|
|
||||||
|
// get control's window class
|
||||||
|
|
||||||
|
CString st;
|
||||||
|
GetClassName(wnd, st.GetBufferSetLength(MAX_PATH), MAX_PATH);
|
||||||
|
st.ReleaseBuffer();
|
||||||
|
st.MakeUpper();
|
||||||
|
|
||||||
|
// add the style 'clipsiblings' to a GroupBox
|
||||||
|
// to avoid unnecessary repainting of controls inside
|
||||||
|
if (st == "BUTTON")
|
||||||
|
{
|
||||||
|
DWORD style = GetWindowLong(wnd, GWL_STYLE);
|
||||||
|
if (style & BS_GROUPBOX)
|
||||||
|
SetWindowLong(wnd, GWL_STYLE, style | WS_CLIPSIBLINGS);
|
||||||
|
}
|
||||||
|
|
||||||
|
// wnd classes that don't redraw client area correctly
|
||||||
|
// when the hor scroll pos changes due to a resizing
|
||||||
|
BOOL hscroll = FALSE;
|
||||||
|
if (st == "LISTBOX")
|
||||||
|
hscroll = TRUE;
|
||||||
|
|
||||||
|
// wnd classes that need refresh when resized
|
||||||
|
BOOL refresh = FALSE;
|
||||||
|
if (st == "STATIC")
|
||||||
|
{
|
||||||
|
DWORD style = GetWindowLong(wnd, GWL_STYLE);
|
||||||
|
|
||||||
|
switch (style & SS_TYPEMASK)
|
||||||
|
{
|
||||||
|
case SS_LEFT:
|
||||||
|
case SS_CENTER:
|
||||||
|
case SS_RIGHT:
|
||||||
|
// word-wrapped text needs refresh
|
||||||
|
refresh = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// centered images or text need refresh
|
||||||
|
if (style & SS_CENTERIMAGE)
|
||||||
|
refresh = TRUE;
|
||||||
|
|
||||||
|
// simple text never needs refresh
|
||||||
|
if (style & SS_TYPEMASK == SS_SIMPLE)
|
||||||
|
refresh = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get dialog's and control's rect
|
||||||
|
CRect wndrc, objrc;
|
||||||
|
|
||||||
|
GetClientRect(&wndrc);
|
||||||
|
::GetWindowRect(wnd, &objrc);
|
||||||
|
ScreenToClient(&objrc);
|
||||||
|
|
||||||
|
CSize tl_margin, br_margin;
|
||||||
|
|
||||||
|
if (br_type == NOANCHOR)
|
||||||
|
br_type = tl_type;
|
||||||
|
|
||||||
|
// calculate margin for the top-left corner
|
||||||
|
|
||||||
|
tl_margin.cx = objrc.left - wndrc.Width() * tl_type.cx / 100;
|
||||||
|
tl_margin.cy = objrc.top - wndrc.Height() * tl_type.cy / 100;
|
||||||
|
|
||||||
|
// calculate margin for the bottom-right corner
|
||||||
|
|
||||||
|
br_margin.cx = objrc.right - wndrc.Width() * br_type.cx / 100;
|
||||||
|
br_margin.cy = objrc.bottom - wndrc.Height() * br_type.cy / 100;
|
||||||
|
|
||||||
|
// add to the list
|
||||||
|
Layout obj(wnd, tl_type, tl_margin, br_type, br_margin, hscroll, refresh);
|
||||||
|
m_arrLayout.Add(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CResizableDialog::ArrangeLayout()
|
||||||
|
{
|
||||||
|
// update size-grip
|
||||||
|
InvalidateRect(&m_rcGripRect);
|
||||||
|
UpdateGripPos();
|
||||||
|
InvalidateRect(&m_rcGripRect);
|
||||||
|
|
||||||
|
// init some vars
|
||||||
|
CRect wndrc;
|
||||||
|
GetClientRect(&wndrc);
|
||||||
|
|
||||||
|
int i, count = m_arrLayout.GetSize();
|
||||||
|
HDWP hdwp = BeginDeferWindowPos(count);
|
||||||
|
|
||||||
|
for (i=0; i<count; ++i)
|
||||||
|
{
|
||||||
|
Layout& obj = m_arrLayout[i];
|
||||||
|
|
||||||
|
CRect objrc, newrc;
|
||||||
|
CWnd* wnd = CWnd::FromHandle(obj.hwnd); // temporary solution
|
||||||
|
|
||||||
|
wnd->GetWindowRect(&objrc);
|
||||||
|
ScreenToClient(&objrc);
|
||||||
|
|
||||||
|
// calculate new top-left corner
|
||||||
|
|
||||||
|
newrc.left = obj.tl_margin.cx + wndrc.Width() * obj.tl_type.cx / 100;
|
||||||
|
newrc.top = obj.tl_margin.cy + wndrc.Height() * obj.tl_type.cy / 100;
|
||||||
|
|
||||||
|
// calculate new bottom-right corner
|
||||||
|
|
||||||
|
newrc.right = obj.br_margin.cx + wndrc.Width() * obj.br_type.cx / 100;
|
||||||
|
newrc.bottom = obj.br_margin.cy + wndrc.Height() * obj.br_type.cy / 100;
|
||||||
|
|
||||||
|
if (!newrc.EqualRect(&objrc))
|
||||||
|
{
|
||||||
|
if (obj.adj_hscroll)
|
||||||
|
{
|
||||||
|
// needs repainting, due to horiz scrolling
|
||||||
|
int diff = newrc.Width() - objrc.Width();
|
||||||
|
int max = wnd->GetScrollLimit(SB_HORZ);
|
||||||
|
|
||||||
|
obj.need_refresh = FALSE;
|
||||||
|
if (max > 0 && wnd->GetScrollPos(SB_HORZ) > max - diff)
|
||||||
|
{
|
||||||
|
obj.need_refresh = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// set flags
|
||||||
|
DWORD flags = SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOREPOSITION;
|
||||||
|
if (newrc.TopLeft() == objrc.TopLeft())
|
||||||
|
flags |= SWP_NOMOVE;
|
||||||
|
if (newrc.Size() == objrc.Size())
|
||||||
|
flags |= SWP_NOSIZE;
|
||||||
|
|
||||||
|
DeferWindowPos(hdwp, obj.hwnd, NULL, newrc.left, newrc.top,
|
||||||
|
newrc.Width(), newrc.Height(), flags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// go re-arrange child windows
|
||||||
|
EndDeferWindowPos(hdwp);
|
||||||
|
|
||||||
|
// refresh those that need
|
||||||
|
for (i=0; i<count; ++i)
|
||||||
|
{
|
||||||
|
Layout& obj = m_arrLayout[i];
|
||||||
|
CWnd* wnd = CWnd::FromHandle(obj.hwnd); // temporary solution
|
||||||
|
|
||||||
|
if (obj.need_refresh)
|
||||||
|
{
|
||||||
|
wnd->Invalidate();
|
||||||
|
wnd->UpdateWindow();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CResizableDialog::UpdateGripPos()
|
||||||
|
{
|
||||||
|
// size-grip goes bottom right in the client area
|
||||||
|
|
||||||
|
GetClientRect(&m_rcGripRect);
|
||||||
|
|
||||||
|
m_rcGripRect.left = m_rcGripRect.right - m_szGripSize.cx;
|
||||||
|
m_rcGripRect.top = m_rcGripRect.bottom - m_szGripSize.cy;
|
||||||
|
}
|
||||||
|
|
||||||
|
// protected members
|
||||||
|
|
||||||
|
void CResizableDialog::ShowSizeGrip(BOOL bShow)
|
||||||
|
{
|
||||||
|
if (m_bShowGrip != bShow)
|
||||||
|
{
|
||||||
|
m_bShowGrip = bShow;
|
||||||
|
InvalidateRect(&m_rcGripRect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CResizableDialog::SetMaximizedRect(const CRect& rc)
|
||||||
|
{
|
||||||
|
m_bUseMaxRect = TRUE;
|
||||||
|
|
||||||
|
m_ptMaxPos = rc.TopLeft();
|
||||||
|
m_ptMaxSize.x = rc.Width();
|
||||||
|
m_ptMaxSize.y = rc.Height();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CResizableDialog::ResetMaximizedRect()
|
||||||
|
{
|
||||||
|
m_bUseMaxRect = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CResizableDialog::SetMinTrackSize(const CSize& size)
|
||||||
|
{
|
||||||
|
m_bUseMinTrack = TRUE;
|
||||||
|
|
||||||
|
m_ptMinTrackSize.x = size.cx;
|
||||||
|
m_ptMinTrackSize.y = size.cy;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CResizableDialog::ResetMinTrackSize()
|
||||||
|
{
|
||||||
|
m_bUseMinTrack = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CResizableDialog::SetMaxTrackSize(const CSize& size)
|
||||||
|
{
|
||||||
|
m_bUseMaxTrack = TRUE;
|
||||||
|
|
||||||
|
m_ptMaxTrackSize.x = size.cx;
|
||||||
|
m_ptMaxTrackSize.y = size.cy;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CResizableDialog::ResetMaxTrackSize()
|
||||||
|
{
|
||||||
|
m_bUseMaxTrack = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: this must be called after all the other settings
|
||||||
|
// to have the dialog and its controls displayed properly
|
||||||
|
void CResizableDialog::EnableSaveRestore(LPCTSTR pszSection, LPCTSTR pszEntry)
|
||||||
|
{
|
||||||
|
m_sSection = pszSection;
|
||||||
|
m_sEntry = pszEntry;
|
||||||
|
|
||||||
|
m_bEnableSaveRestore = TRUE;
|
||||||
|
|
||||||
|
LoadWindowRect();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// used to save/restore window's size and position
|
||||||
|
// either in the registry or a private .INI file
|
||||||
|
// depending on your application settings
|
||||||
|
|
||||||
|
#define PROFILE_FMT _T("%d,%d,%d,%d,%d,%d")
|
||||||
|
|
||||||
|
void CResizableDialog::SaveWindowRect()
|
||||||
|
{
|
||||||
|
CString data;
|
||||||
|
WINDOWPLACEMENT wp;
|
||||||
|
|
||||||
|
ZeroMemory(&wp, sizeof(WINDOWPLACEMENT));
|
||||||
|
wp.length = sizeof(WINDOWPLACEMENT);
|
||||||
|
GetWindowPlacement(&wp);
|
||||||
|
|
||||||
|
RECT& rc = wp.rcNormalPosition; // alias
|
||||||
|
|
||||||
|
data.Format(PROFILE_FMT, rc.left, rc.top,
|
||||||
|
rc.right, rc.bottom, wp.showCmd, wp.flags);
|
||||||
|
|
||||||
|
AfxGetApp()->WriteProfileString(m_sSection, m_sEntry, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CResizableDialog::LoadWindowRect()
|
||||||
|
{
|
||||||
|
CString data;
|
||||||
|
WINDOWPLACEMENT wp;
|
||||||
|
|
||||||
|
data = AfxGetApp()->GetProfileString(m_sSection, m_sEntry);
|
||||||
|
|
||||||
|
if (data.IsEmpty()) // never saved before
|
||||||
|
return;
|
||||||
|
|
||||||
|
ZeroMemory(&wp, sizeof(WINDOWPLACEMENT));
|
||||||
|
wp.length = sizeof(WINDOWPLACEMENT);
|
||||||
|
GetWindowPlacement(&wp);
|
||||||
|
|
||||||
|
RECT& rc = wp.rcNormalPosition; // alias
|
||||||
|
|
||||||
|
if (_stscanf(data, PROFILE_FMT, &rc.left, &rc.top,
|
||||||
|
&rc.right, &rc.bottom, &wp.showCmd, &wp.flags) == 6)
|
||||||
|
{
|
||||||
|
SetWindowPlacement(&wp);
|
||||||
|
}
|
||||||
|
}
|
173
win32/ResizableDialog.h
Normal file
173
win32/ResizableDialog.h
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
#if !defined(AFX_RESIZABLEDIALOG_H__INCLUDED_)
|
||||||
|
#define AFX_RESIZABLEDIALOG_H__INCLUDED_
|
||||||
|
|
||||||
|
#if _MSC_VER > 1000
|
||||||
|
#pragma once
|
||||||
|
#endif // _MSC_VER > 1000
|
||||||
|
|
||||||
|
// ResizableDialog.h : header file
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright (C) 2000 by Paolo Messina
|
||||||
|
// (ppescher@yahoo.com)
|
||||||
|
//
|
||||||
|
// Free for non-commercial use.
|
||||||
|
// You may change the code to your needs,
|
||||||
|
// provided that credits to the original
|
||||||
|
// author is given in the modified files.
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <afxtempl.h>
|
||||||
|
#include <afxwin.h>
|
||||||
|
|
||||||
|
// useful compatibility constants (the only one required is NOANCHOR)
|
||||||
|
|
||||||
|
#if !defined(__SIZE_ANCHORS_)
|
||||||
|
#define __SIZE_ANCHORS_
|
||||||
|
|
||||||
|
const CSize
|
||||||
|
NOANCHOR(-1,-1),
|
||||||
|
TOP_LEFT(0,0), TOP_CENTER(50,0), TOP_RIGHT(100,0),
|
||||||
|
MIDDLE_LEFT(0,50), MIDDLE_CENTER(50,50), MIDDLE_RIGHT(100,50),
|
||||||
|
BOTTOM_LEFT(0,100), BOTTOM_CENTER(50,100), BOTTOM_RIGHT(100,100);
|
||||||
|
|
||||||
|
#endif // !defined(__SIZE_ANCHORS_)
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CResizableDialog window
|
||||||
|
|
||||||
|
class CResizableDialog : public CDialog
|
||||||
|
{
|
||||||
|
|
||||||
|
// Construction
|
||||||
|
public:
|
||||||
|
CResizableDialog();
|
||||||
|
CResizableDialog(UINT nIDTemplate, CWnd* pParentWnd = NULL);
|
||||||
|
CResizableDialog(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL);
|
||||||
|
|
||||||
|
// Attributes
|
||||||
|
private:
|
||||||
|
// flags
|
||||||
|
BOOL m_bShowGrip;
|
||||||
|
BOOL m_bUseMaxTrack;
|
||||||
|
BOOL m_bUseMinTrack;
|
||||||
|
BOOL m_bUseMaxRect;
|
||||||
|
BOOL m_bEnableSaveRestore;
|
||||||
|
|
||||||
|
// internal status
|
||||||
|
CString m_sSection; // section name and
|
||||||
|
CString m_sEntry; // entry for save/restore
|
||||||
|
|
||||||
|
BOOL m_bInitDone; // if all internal vars initialized
|
||||||
|
|
||||||
|
SIZE m_szGripSize; // set at construction time
|
||||||
|
|
||||||
|
CRect m_rcGripRect; // current pos of grip
|
||||||
|
|
||||||
|
POINT m_ptMinTrackSize; // min tracking size
|
||||||
|
POINT m_ptMaxTrackSize; // max tracking size
|
||||||
|
POINT m_ptMaxPos; // maximized position
|
||||||
|
POINT m_ptMaxSize; // maximized size
|
||||||
|
|
||||||
|
class Layout
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
HWND hwnd;
|
||||||
|
|
||||||
|
BOOL adj_hscroll;
|
||||||
|
BOOL need_refresh;
|
||||||
|
|
||||||
|
// upper-left corner
|
||||||
|
CSize tl_type;
|
||||||
|
CSize tl_margin;
|
||||||
|
|
||||||
|
// bottom-right corner
|
||||||
|
CSize br_type;
|
||||||
|
CSize br_margin;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Layout()
|
||||||
|
: hwnd(NULL), adj_hscroll(FALSE), need_refresh(FALSE),
|
||||||
|
tl_type(0,0), tl_margin(0,0),
|
||||||
|
br_type(0,0), br_margin(0,0)
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
Layout(HWND hw, SIZE tl_t, SIZE tl_m,
|
||||||
|
SIZE br_t, SIZE br_m, BOOL hscroll, BOOL refresh)
|
||||||
|
{
|
||||||
|
hwnd = hw;
|
||||||
|
|
||||||
|
adj_hscroll = hscroll;
|
||||||
|
need_refresh = refresh;
|
||||||
|
|
||||||
|
tl_type = tl_t;
|
||||||
|
tl_margin = tl_m;
|
||||||
|
|
||||||
|
br_type = br_t;
|
||||||
|
br_margin = br_m;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
CArray<Layout, Layout&> m_arrLayout; // list of repositionable controls
|
||||||
|
|
||||||
|
// Operations
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Overrides
|
||||||
|
// ClassWizard generated virtual function overrides
|
||||||
|
//{{AFX_VIRTUAL(CResizableDialog)
|
||||||
|
//}}AFX_VIRTUAL
|
||||||
|
|
||||||
|
// Implementation
|
||||||
|
public:
|
||||||
|
virtual ~CResizableDialog();
|
||||||
|
|
||||||
|
// used internally
|
||||||
|
private:
|
||||||
|
void Construct();
|
||||||
|
void LoadWindowRect();
|
||||||
|
void SaveWindowRect();
|
||||||
|
void ArrangeLayout();
|
||||||
|
void UpdateGripPos();
|
||||||
|
|
||||||
|
// callable from derived classes
|
||||||
|
//protected:
|
||||||
|
public:
|
||||||
|
void AddAnchor(HWND wnd, CSize tl_type,
|
||||||
|
CSize br_type = NOANCHOR); // add anchors to a control
|
||||||
|
void AddAnchor(UINT ctrl_ID, CSize tl_type,
|
||||||
|
CSize br_type = NOANCHOR) // add anchors to a control
|
||||||
|
{
|
||||||
|
AddAnchor(::GetDlgItem(*this, ctrl_ID), tl_type, br_type);
|
||||||
|
};
|
||||||
|
void ShowSizeGrip(BOOL bShow); // show or hide the size grip
|
||||||
|
void SetMaximizedRect(const CRect& rc); // set window rect when maximized
|
||||||
|
void ResetMaximizedRect(); // reset to default maximized rect
|
||||||
|
void SetMinTrackSize(const CSize& size); // set minimum tracking size
|
||||||
|
void ResetMinTrackSize(); // reset to default minimum tracking size
|
||||||
|
void SetMaxTrackSize(const CSize& size); // set maximum tracking size
|
||||||
|
void ResetMaxTrackSize(); // reset to default maximum tracking size
|
||||||
|
void EnableSaveRestore(LPCTSTR pszSection, LPCTSTR pszEntry); // section and entry in app's profile
|
||||||
|
|
||||||
|
// Generated message map functions
|
||||||
|
protected:
|
||||||
|
//{{AFX_MSG(CResizableDialog)
|
||||||
|
virtual BOOL OnInitDialog();
|
||||||
|
afx_msg UINT OnNcHitTest(CPoint point);
|
||||||
|
afx_msg void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);
|
||||||
|
afx_msg void OnSize(UINT nType, int cx, int cy);
|
||||||
|
afx_msg void OnDestroy();
|
||||||
|
afx_msg void OnPaint();
|
||||||
|
//}}AFX_MSG
|
||||||
|
DECLARE_MESSAGE_MAP()
|
||||||
|
};
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
//{{AFX_INSERT_LOCATION}}
|
||||||
|
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
|
||||||
|
|
||||||
|
#endif // !defined(AFX_RESIZABLEDIALOG_H__INCLUDED_)
|
148
win32/StatsTab.cpp
Normal file
148
win32/StatsTab.cpp
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
// StatsTab.cpp : implementation file
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "Icecast2win.h"
|
||||||
|
#include "StatsTab.h"
|
||||||
|
|
||||||
|
#include "Icecast2winDlg.h"
|
||||||
|
|
||||||
|
extern CIcecast2winDlg *g_mainDialog;
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
#define new DEBUG_NEW
|
||||||
|
#undef THIS_FILE
|
||||||
|
static char THIS_FILE[] = __FILE__;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern void AddToAdditionalGlobalStats(CString source, CString name);
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CStatsTab dialog
|
||||||
|
|
||||||
|
|
||||||
|
CStatsTab::CStatsTab(CWnd* pParent /*=NULL*/)
|
||||||
|
: CTabPageSSL(CStatsTab::IDD, pParent)
|
||||||
|
{
|
||||||
|
//{{AFX_DATA_INIT(CStatsTab)
|
||||||
|
// NOTE: the ClassWizard will add member initialization here
|
||||||
|
//}}AFX_DATA_INIT
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CStatsTab::DoDataExchange(CDataExchange* pDX)
|
||||||
|
{
|
||||||
|
CTabPageSSL::DoDataExchange(pDX);
|
||||||
|
//{{AFX_DATA_MAP(CStatsTab)
|
||||||
|
DDX_Control(pDX, IDC_STATIC_SLS, m_SLS);
|
||||||
|
DDX_Control(pDX, IDC_STATSLIST, m_StatsListCtrl);
|
||||||
|
DDX_Control(pDX, IDC_SOURCELIST, m_SourceListCtrl);
|
||||||
|
//}}AFX_DATA_MAP
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP(CStatsTab, CTabPageSSL)
|
||||||
|
//{{AFX_MSG_MAP(CStatsTab)
|
||||||
|
ON_NOTIFY(NM_DBLCLK, IDC_SOURCELIST, OnDblclkSourcelist)
|
||||||
|
ON_NOTIFY(NM_RCLICK, IDC_STATSLIST, OnRclickStatslist)
|
||||||
|
ON_NOTIFY(NM_CLICK, IDC_SOURCELIST, OnClickSourcelist)
|
||||||
|
//}}AFX_MSG_MAP
|
||||||
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CStatsTab message handlers
|
||||||
|
|
||||||
|
BOOL CStatsTab::OnInitDialog()
|
||||||
|
{
|
||||||
|
CTabPageSSL::OnInitDialog();
|
||||||
|
|
||||||
|
// TODO: Add extra initialization here
|
||||||
|
m_SourceListCtrl.InsertColumn(0, _T("Source"), LVCFMT_LEFT, m_colSource0Width);
|
||||||
|
m_StatsListCtrl.InsertColumn(0, _T("Statistic"), LVCFMT_LEFT, m_colStats0Width);
|
||||||
|
m_StatsListCtrl.InsertColumn(1, _T("Value"), LVCFMT_LEFT, m_colStats1Width);
|
||||||
|
|
||||||
|
AddAnchor(IDC_STATSLIST, TOP_LEFT, BOTTOM_RIGHT);
|
||||||
|
AddAnchor(IDC_SOURCELIST, TOP_LEFT, BOTTOM_LEFT);
|
||||||
|
AddAnchor(IDC_FILLER1, BOTTOM_LEFT, BOTTOM_RIGHT);
|
||||||
|
|
||||||
|
m_SourceListCtrl.SetSelectionMark(0);
|
||||||
|
m_SLS.SetFont(&(g_mainDialog->labelFont), TRUE);
|
||||||
|
|
||||||
|
return TRUE; // return TRUE unless you set the focus to a control
|
||||||
|
// EXCEPTION: OCX Property Pages should return FALSE
|
||||||
|
}
|
||||||
|
|
||||||
|
void CStatsTab::OnDblclkSourcelist(NMHDR* pNMHDR, LRESULT* pResult)
|
||||||
|
{
|
||||||
|
// TODO: Add your control notification handler code here
|
||||||
|
g_mainDialog->UpdateStatsLists();
|
||||||
|
*pResult = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CStatsTab::OnRclickStatslist(NMHDR* pNMHDR, LRESULT* pResult)
|
||||||
|
{
|
||||||
|
// TODO: Add your control notification handler code here
|
||||||
|
CMenu menu;
|
||||||
|
|
||||||
|
|
||||||
|
CPoint point;
|
||||||
|
::GetCursorPos(&point); //where is the mouse?
|
||||||
|
|
||||||
|
DWORD dwSelectionMade;
|
||||||
|
menu.LoadMenu(IDR_MENU2);
|
||||||
|
CMenu *pmenuPopup = menu.GetSubMenu(0);
|
||||||
|
dwSelectionMade = pmenuPopup->TrackPopupMenu( (TPM_LEFTALIGN|TPM_LEFTBUTTON|
|
||||||
|
TPM_NONOTIFY|TPM_RETURNCMD),
|
||||||
|
point.x, point.y, this);
|
||||||
|
|
||||||
|
pmenuPopup->DestroyMenu();
|
||||||
|
char msg[255] ="";
|
||||||
|
char buffer[1024] = "";
|
||||||
|
char buffer2[1024] = "";
|
||||||
|
|
||||||
|
CString name;
|
||||||
|
CString source;
|
||||||
|
POSITION pos;
|
||||||
|
switch (dwSelectionMade) {
|
||||||
|
case ID_POPUP_ADDTOGLOBALSTATLIST :
|
||||||
|
pos = m_StatsListCtrl.GetFirstSelectedItemPosition();
|
||||||
|
if (pos != NULL) {
|
||||||
|
int nItem = m_StatsListCtrl.GetNextSelectedItem(pos);
|
||||||
|
LVITEM lvi;
|
||||||
|
|
||||||
|
lvi.mask = LVIF_TEXT;
|
||||||
|
lvi.iItem = nItem;
|
||||||
|
lvi.iSubItem = 0;
|
||||||
|
lvi.pszText = buffer;
|
||||||
|
lvi.cchTextMax = sizeof(buffer);
|
||||||
|
m_StatsListCtrl.GetItem(&lvi);
|
||||||
|
name = buffer;
|
||||||
|
}
|
||||||
|
pos = m_SourceListCtrl.GetFirstSelectedItemPosition();
|
||||||
|
if (pos != NULL) {
|
||||||
|
int nItem = m_SourceListCtrl.GetNextSelectedItem(pos);
|
||||||
|
LVITEM lvi;
|
||||||
|
|
||||||
|
lvi.mask = LVIF_TEXT;
|
||||||
|
lvi.iItem = nItem;
|
||||||
|
lvi.iSubItem = 0;
|
||||||
|
lvi.pszText = buffer2;
|
||||||
|
lvi.cchTextMax = sizeof(buffer2);
|
||||||
|
m_SourceListCtrl.GetItem(&lvi);
|
||||||
|
source = buffer2;
|
||||||
|
}
|
||||||
|
AddToAdditionalGlobalStats(source, name);
|
||||||
|
break;
|
||||||
|
default :
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
*pResult = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CStatsTab::OnClickSourcelist(NMHDR* pNMHDR, LRESULT* pResult)
|
||||||
|
{
|
||||||
|
// TODO: Add your control notification handler code here
|
||||||
|
OnDblclkSourcelist(pNMHDR, pResult);
|
||||||
|
*pResult = 0;
|
||||||
|
}
|
55
win32/StatsTab.h
Normal file
55
win32/StatsTab.h
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
#if !defined(AFX_STATSTAB_H__64B82CAB_8D6D_45A6_84FD_666F6317E5F2__INCLUDED_)
|
||||||
|
#define AFX_STATSTAB_H__64B82CAB_8D6D_45A6_84FD_666F6317E5F2__INCLUDED_
|
||||||
|
|
||||||
|
#if _MSC_VER > 1000
|
||||||
|
#pragma once
|
||||||
|
#endif // _MSC_VER > 1000
|
||||||
|
// StatsTab.h : header file
|
||||||
|
//
|
||||||
|
#include "TabPageSSL.h"
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CStatsTab dialog
|
||||||
|
|
||||||
|
class CStatsTab : public CTabPageSSL
|
||||||
|
{
|
||||||
|
// Construction
|
||||||
|
public:
|
||||||
|
int m_colStats1Width;
|
||||||
|
int m_colStats0Width;
|
||||||
|
int m_colSource0Width;
|
||||||
|
CStatsTab(CWnd* pParent = NULL); // standard constructor
|
||||||
|
|
||||||
|
// Dialog Data
|
||||||
|
//{{AFX_DATA(CStatsTab)
|
||||||
|
enum { IDD = IDD_STATSDIALOG };
|
||||||
|
CStatic m_SLS;
|
||||||
|
CListCtrl m_StatsListCtrl;
|
||||||
|
CListCtrl m_SourceListCtrl;
|
||||||
|
//}}AFX_DATA
|
||||||
|
|
||||||
|
|
||||||
|
// Overrides
|
||||||
|
// ClassWizard generated virtual function overrides
|
||||||
|
//{{AFX_VIRTUAL(CStatsTab)
|
||||||
|
protected:
|
||||||
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
|
||||||
|
//}}AFX_VIRTUAL
|
||||||
|
|
||||||
|
// Implementation
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Generated message map functions
|
||||||
|
//{{AFX_MSG(CStatsTab)
|
||||||
|
virtual BOOL OnInitDialog();
|
||||||
|
afx_msg void OnDblclkSourcelist(NMHDR* pNMHDR, LRESULT* pResult);
|
||||||
|
afx_msg void OnRclickStatslist(NMHDR* pNMHDR, LRESULT* pResult);
|
||||||
|
afx_msg void OnClickSourcelist(NMHDR* pNMHDR, LRESULT* pResult);
|
||||||
|
//}}AFX_MSG
|
||||||
|
DECLARE_MESSAGE_MAP()
|
||||||
|
};
|
||||||
|
|
||||||
|
//{{AFX_INSERT_LOCATION}}
|
||||||
|
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
|
||||||
|
|
||||||
|
#endif // !defined(AFX_STATSTAB_H__64B82CAB_8D6D_45A6_84FD_666F6317E5F2__INCLUDED_)
|
136
win32/Status.cpp
Normal file
136
win32/Status.cpp
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
// Status.cpp : implementation file
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "Icecast2win.h"
|
||||||
|
#include "Status.h"
|
||||||
|
|
||||||
|
#include "Icecast2winDlg.h"
|
||||||
|
|
||||||
|
extern CIcecast2winDlg *g_mainDialog;
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
#define new DEBUG_NEW
|
||||||
|
#undef THIS_FILE
|
||||||
|
static char THIS_FILE[] = __FILE__;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern void RemoveFromAdditionalGlobalStats(CString source, CString name);
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CStatus dialog
|
||||||
|
|
||||||
|
|
||||||
|
CStatus::CStatus(CWnd* pParent /*=NULL*/)
|
||||||
|
: CTabPageSSL(CStatus::IDD, pParent)
|
||||||
|
{
|
||||||
|
//{{AFX_DATA_INIT(CStatus)
|
||||||
|
m_Clients = _T("");
|
||||||
|
m_Sources = _T("");
|
||||||
|
m_RunningFor = _T("");
|
||||||
|
//}}AFX_DATA_INIT
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CStatus::DoDataExchange(CDataExchange* pDX)
|
||||||
|
{
|
||||||
|
CTabPageSSL::DoDataExchange(pDX);
|
||||||
|
//{{AFX_DATA_MAP(CStatus)
|
||||||
|
DDX_Control(pDX, IDC_STATIC_GS, m_GS);
|
||||||
|
DDX_Control(pDX, IDC_GLOBALSTAT_LIST, m_GlobalStatList);
|
||||||
|
DDX_Text(pDX, IDC_RUNNINGFOR, m_RunningFor);
|
||||||
|
//}}AFX_DATA_MAP
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP(CStatus, CTabPageSSL)
|
||||||
|
//{{AFX_MSG_MAP(CStatus)
|
||||||
|
ON_NOTIFY(NM_RCLICK, IDC_GLOBALSTAT_LIST, OnRclickGlobalstatList)
|
||||||
|
//}}AFX_MSG_MAP
|
||||||
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CStatus message handlers
|
||||||
|
|
||||||
|
BOOL CStatus::OnInitDialog()
|
||||||
|
{
|
||||||
|
CTabPageSSL::OnInitDialog();
|
||||||
|
|
||||||
|
|
||||||
|
m_GlobalStatList.InsertColumn(0, _T("Stat Type"), LVCFMT_LEFT, m_colStats0Width);
|
||||||
|
m_GlobalStatList.InsertColumn(1, _T("Name"), LVCFMT_LEFT, m_colStats1Width);
|
||||||
|
m_GlobalStatList.InsertColumn(2, _T("Value"), LVCFMT_LEFT, m_colStats2Width);
|
||||||
|
|
||||||
|
m_GlobalStatList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
|
||||||
|
// TODO: Add extra initialization here
|
||||||
|
AddAnchor(IDC_FILLER2, BOTTOM_LEFT, BOTTOM_RIGHT);
|
||||||
|
AddAnchor(IDC_GLOBALSTAT_LIST, TOP_LEFT, BOTTOM_RIGHT);
|
||||||
|
AddAnchor(IDC_STATIC_RUN, BOTTOM_LEFT, BOTTOM_RIGHT);
|
||||||
|
AddAnchor(IDC_RUNNINGFOR, BOTTOM_LEFT, BOTTOM_RIGHT);
|
||||||
|
|
||||||
|
m_GS.SetFont(&(g_mainDialog->labelFont), TRUE);
|
||||||
|
|
||||||
|
return TRUE; // return TRUE unless you set the focus to a control
|
||||||
|
// EXCEPTION: OCX Property Pages should return FALSE
|
||||||
|
}
|
||||||
|
|
||||||
|
void CStatus::OnRclickGlobalstatList(NMHDR* pNMHDR, LRESULT* pResult)
|
||||||
|
{
|
||||||
|
// TODO: Add your control notification handler code here
|
||||||
|
CMenu menu;
|
||||||
|
|
||||||
|
|
||||||
|
CPoint point;
|
||||||
|
::GetCursorPos(&point); //where is the mouse?
|
||||||
|
|
||||||
|
DWORD dwSelectionMade;
|
||||||
|
menu.LoadMenu(IDR_MENU3);
|
||||||
|
CMenu *pmenuPopup = menu.GetSubMenu(0);
|
||||||
|
dwSelectionMade = pmenuPopup->TrackPopupMenu( (TPM_LEFTALIGN|TPM_LEFTBUTTON|
|
||||||
|
TPM_NONOTIFY|TPM_RETURNCMD),
|
||||||
|
point.x, point.y, this);
|
||||||
|
|
||||||
|
pmenuPopup->DestroyMenu();
|
||||||
|
char msg[255] ="";
|
||||||
|
char buffer[1024] = "";
|
||||||
|
char buffer2[1024] = "";
|
||||||
|
|
||||||
|
CString name;
|
||||||
|
CString source;
|
||||||
|
POSITION pos;
|
||||||
|
int nItem;
|
||||||
|
switch (dwSelectionMade) {
|
||||||
|
case ID__DELETEFROMGLOBALSTATS :
|
||||||
|
pos = m_GlobalStatList.GetFirstSelectedItemPosition();
|
||||||
|
if (pos != NULL) {
|
||||||
|
nItem = m_GlobalStatList.GetNextSelectedItem(pos);
|
||||||
|
LVITEM lvi;
|
||||||
|
|
||||||
|
lvi.mask = LVIF_TEXT;
|
||||||
|
lvi.iItem = nItem;
|
||||||
|
lvi.iSubItem = 0;
|
||||||
|
lvi.pszText = buffer;
|
||||||
|
lvi.cchTextMax = sizeof(buffer);
|
||||||
|
m_GlobalStatList.GetItem(&lvi);
|
||||||
|
source = buffer;
|
||||||
|
lvi.iSubItem = 1;
|
||||||
|
lvi.pszText = buffer2;
|
||||||
|
lvi.cchTextMax = sizeof(buffer2);
|
||||||
|
m_GlobalStatList.GetItem(&lvi);
|
||||||
|
name = buffer2;
|
||||||
|
|
||||||
|
if (source == "Global Stat") {
|
||||||
|
MessageBox("Sorry, but you can't delete this type of stat", NULL, MB_OK);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
RemoveFromAdditionalGlobalStats(source, name);
|
||||||
|
m_GlobalStatList.DeleteItem(nItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default :
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
*pResult = 0;
|
||||||
|
}
|
59
win32/Status.h
Normal file
59
win32/Status.h
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
#if !defined(AFX_STATUS_H__DE59E22B_FD4F_4131_B347_48BD9FAC9348__INCLUDED_)
|
||||||
|
#define AFX_STATUS_H__DE59E22B_FD4F_4131_B347_48BD9FAC9348__INCLUDED_
|
||||||
|
|
||||||
|
#if _MSC_VER > 1000
|
||||||
|
#pragma once
|
||||||
|
#endif // _MSC_VER > 1000
|
||||||
|
// Status.h : header file
|
||||||
|
//
|
||||||
|
#include "TabPageSSL.h"
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CStatus dialog
|
||||||
|
|
||||||
|
class CStatus : public CTabPageSSL
|
||||||
|
{
|
||||||
|
// Construction
|
||||||
|
public:
|
||||||
|
int m_colStats2Width;
|
||||||
|
int m_colStats1Width;
|
||||||
|
int m_colStats0Width;
|
||||||
|
CFont labelFont;
|
||||||
|
CStatus(CWnd* pParent = NULL); // standard constructor
|
||||||
|
|
||||||
|
// Dialog Data
|
||||||
|
CBitmap runningBitmap;
|
||||||
|
CBitmap stoppedBitmap;
|
||||||
|
|
||||||
|
//{{AFX_DATA(CStatus)
|
||||||
|
enum { IDD = IDD_SSTATUS };
|
||||||
|
CStatic m_GS;
|
||||||
|
CListCtrl m_GlobalStatList;
|
||||||
|
CString m_Clients;
|
||||||
|
CString m_Sources;
|
||||||
|
CString m_RunningFor;
|
||||||
|
//}}AFX_DATA
|
||||||
|
|
||||||
|
|
||||||
|
// Overrides
|
||||||
|
// ClassWizard generated virtual function overrides
|
||||||
|
//{{AFX_VIRTUAL(CStatus)
|
||||||
|
protected:
|
||||||
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
|
||||||
|
//}}AFX_VIRTUAL
|
||||||
|
|
||||||
|
// Implementation
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Generated message map functions
|
||||||
|
//{{AFX_MSG(CStatus)
|
||||||
|
virtual BOOL OnInitDialog();
|
||||||
|
afx_msg void OnRclickGlobalstatList(NMHDR* pNMHDR, LRESULT* pResult);
|
||||||
|
//}}AFX_MSG
|
||||||
|
DECLARE_MESSAGE_MAP()
|
||||||
|
};
|
||||||
|
|
||||||
|
//{{AFX_INSERT_LOCATION}}
|
||||||
|
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
|
||||||
|
|
||||||
|
#endif // !defined(AFX_STATUS_H__DE59E22B_FD4F_4131_B347_48BD9FAC9348__INCLUDED_)
|
8
win32/StdAfx.cpp
Normal file
8
win32/StdAfx.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
// stdafx.cpp : source file that includes just the standard includes
|
||||||
|
// Icecast2win.pch will be the pre-compiled header
|
||||||
|
// stdafx.obj will contain the pre-compiled type information
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
27
win32/StdAfx.h
Normal file
27
win32/StdAfx.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
// stdafx.h : include file for standard system include files,
|
||||||
|
// or project specific include files that are used frequently, but
|
||||||
|
// are changed infrequently
|
||||||
|
//
|
||||||
|
|
||||||
|
#if !defined(AFX_STDAFX_H__2C2EF8C3_43CD_47D2_A979_EC36873E602D__INCLUDED_)
|
||||||
|
#define AFX_STDAFX_H__2C2EF8C3_43CD_47D2_A979_EC36873E602D__INCLUDED_
|
||||||
|
|
||||||
|
#if _MSC_VER > 1000
|
||||||
|
#pragma once
|
||||||
|
#endif // _MSC_VER > 1000
|
||||||
|
|
||||||
|
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
|
||||||
|
|
||||||
|
#include <afxwin.h> // MFC core and standard components
|
||||||
|
#include <afxext.h> // MFC extensions
|
||||||
|
#include <afxdisp.h> // MFC Automation classes
|
||||||
|
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
|
||||||
|
#ifndef _AFX_NO_AFXCMN_SUPPORT
|
||||||
|
#include <afxcmn.h> // MFC support for Windows Common Controls
|
||||||
|
#endif // _AFX_NO_AFXCMN_SUPPORT
|
||||||
|
|
||||||
|
|
||||||
|
//{{AFX_INSERT_LOCATION}}
|
||||||
|
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
|
||||||
|
|
||||||
|
#endif // !defined(AFX_STDAFX_H__2C2EF8C3_43CD_47D2_A979_EC36873E602D__INCLUDED_)
|
499
win32/TabCtrlSSL.cpp
Normal file
499
win32/TabCtrlSSL.cpp
Normal file
@ -0,0 +1,499 @@
|
|||||||
|
// TabCtrlSSL.cpp : implementation file
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "TabCtrlSSL.h"
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
#define new DEBUG_NEW
|
||||||
|
#undef THIS_FILE
|
||||||
|
static char THIS_FILE[] = __FILE__;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Construction
|
||||||
|
|
||||||
|
CTabCtrlSSL::CTabCtrlSSL () {
|
||||||
|
#ifndef _AFX_NO_OCC_SUPPORT
|
||||||
|
AfxEnableControlContainer ();
|
||||||
|
#endif // !_AFX_NO_OCC_SUPPORT
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Destruction
|
||||||
|
|
||||||
|
CTabCtrlSSL::~CTabCtrlSSL (void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP(CTabCtrlSSL, CTabCtrl)
|
||||||
|
//{{AFX_MSG_MAP(CTabCtrlSSL)
|
||||||
|
ON_WM_DESTROY ()
|
||||||
|
ON_WM_SETFOCUS ()
|
||||||
|
ON_WM_KILLFOCUS ()
|
||||||
|
ON_NOTIFY_REFLECT (TCN_SELCHANGING, OnSelChanging)
|
||||||
|
ON_NOTIFY_REFLECT (TCN_SELCHANGE, OnSelChange)
|
||||||
|
//}}AFX_MSG_MAP
|
||||||
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Page Functions
|
||||||
|
|
||||||
|
int CTabCtrlSSL::AddSSLPage (LPCTSTR pszTitle, int nPageID, CTabPageSSL* pTabPage) {
|
||||||
|
// Add a page to the tab control.
|
||||||
|
TabDelete tabDelete;
|
||||||
|
tabDelete.pTabPage = pTabPage;
|
||||||
|
tabDelete.bDelete = FALSE;
|
||||||
|
|
||||||
|
return AddPage (pszTitle, nPageID, tabDelete);
|
||||||
|
}
|
||||||
|
|
||||||
|
int CTabCtrlSSL::AddSSLPage (LPCTSTR pszTitle, int nPageID, LPCTSTR pszTemplateName) {
|
||||||
|
// Verify that the dialog template is compatible with CTabCtrlSSL
|
||||||
|
// (debug builds only). If your app asserts here, make sure the dialog
|
||||||
|
// resource you're adding to the view is a borderless child window and
|
||||||
|
// is not marked visible.
|
||||||
|
#ifdef _DEBUG
|
||||||
|
if (pszTemplateName != NULL) {
|
||||||
|
BOOL bResult = CheckDialogTemplate (pszTemplateName);
|
||||||
|
ASSERT (bResult);
|
||||||
|
}
|
||||||
|
#endif // _DEBUG
|
||||||
|
|
||||||
|
// Add a page to the tab control.
|
||||||
|
// Create a modeless dialog box.
|
||||||
|
CTabPageSSL* pDialog = new CTabPageSSL;
|
||||||
|
|
||||||
|
if (pDialog == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!pDialog->Create (pszTemplateName, this)) {
|
||||||
|
pDialog->DestroyWindow ();
|
||||||
|
delete pDialog;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
TabDelete tabDelete;
|
||||||
|
tabDelete.pTabPage = pDialog;
|
||||||
|
tabDelete.bDelete = TRUE;
|
||||||
|
|
||||||
|
return AddPage (pszTitle, nPageID, tabDelete);
|
||||||
|
}
|
||||||
|
|
||||||
|
int CTabCtrlSSL::AddSSLPage (LPCTSTR pszTitle, int nPageID, int nTemplateID) {
|
||||||
|
return AddSSLPage (pszTitle, nPageID, MAKEINTRESOURCE (nTemplateID));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CTabCtrlSSL::RemoveSSLPage (int nIndex) {
|
||||||
|
if (nIndex >= GetItemCount ())
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
// Notify derived classes that the page is being destroyed.
|
||||||
|
OnDestroyPage (nIndex, m_nPageIDs[nIndex]);
|
||||||
|
|
||||||
|
// Switch pages if the page being deleted is the current page and it's
|
||||||
|
// not the only remaining page.
|
||||||
|
int nCount = GetItemCount ();
|
||||||
|
if (nCount > 1 && nIndex == GetCurSel ()) {
|
||||||
|
int nPage = nIndex + 1;
|
||||||
|
if (nPage >= nCount)
|
||||||
|
nPage = nCount - 2;
|
||||||
|
ActivateSSLPage (nPage);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove the page from the tab control.
|
||||||
|
DeleteItem (nIndex);
|
||||||
|
|
||||||
|
// Destroy the dialog (if any) that represents the page.
|
||||||
|
TabDelete tabDelete = m_tabs[nIndex];
|
||||||
|
CTabPageSSL* pDialog = tabDelete.pTabPage;
|
||||||
|
if (pDialog != NULL) {
|
||||||
|
pDialog->DestroyWindow ();
|
||||||
|
delete pDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clean up, repaint, and return.
|
||||||
|
m_tabs.RemoveAt (nIndex);
|
||||||
|
m_hFocusWnd.RemoveAt (nIndex);
|
||||||
|
m_nPageIDs.RemoveAt (nIndex);
|
||||||
|
Invalidate ();
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CTabCtrlSSL::GetSSLPageCount (void) {
|
||||||
|
return GetItemCount ();
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CTabCtrlSSL::GetSSLPageTitle (int nIndex, CString &strTitle) {
|
||||||
|
if (nIndex >= GetItemCount ())
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
TCHAR szTitle[1024];
|
||||||
|
|
||||||
|
TC_ITEM item;
|
||||||
|
item.mask = TCIF_TEXT;
|
||||||
|
item.pszText = szTitle;
|
||||||
|
item.cchTextMax = sizeof szTitle / sizeof (TCHAR);
|
||||||
|
|
||||||
|
if (!GetItem (nIndex, &item))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
strTitle = item.pszText;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CTabCtrlSSL::SetSSLPageTitle (int nIndex, LPCTSTR pszTitle) {
|
||||||
|
if (nIndex >= GetItemCount ())
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
TC_ITEM item;
|
||||||
|
item.mask = TCIF_TEXT;
|
||||||
|
item.pszText = (LPTSTR) pszTitle;
|
||||||
|
|
||||||
|
BOOL bResult = SetItem (nIndex, &item);
|
||||||
|
if (bResult)
|
||||||
|
Invalidate ();
|
||||||
|
return bResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CTabCtrlSSL::GetSSLPageID (int nIndex) {
|
||||||
|
if (nIndex >= GetItemCount ())
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return m_nPageIDs[nIndex];
|
||||||
|
}
|
||||||
|
|
||||||
|
int CTabCtrlSSL::SetSSLPageID (int nIndex, int nPageID) {
|
||||||
|
if (nIndex >= GetItemCount ())
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
int nOldPageID = m_nPageIDs[nIndex];
|
||||||
|
m_nPageIDs[nIndex] = nPageID;
|
||||||
|
return nOldPageID;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CTabCtrlSSL::ActivateSSLPage (int nIndex) {
|
||||||
|
if (nIndex >= GetItemCount ())
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
// Do nothing if the specified page is already active.
|
||||||
|
if (nIndex == GetCurSel ())
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
// Deactivate the current page.
|
||||||
|
int nOldIndex = GetCurSel ();
|
||||||
|
|
||||||
|
if (nIndex != -1) {
|
||||||
|
TabDelete tabDelete = m_tabs[nOldIndex];
|
||||||
|
CTabPageSSL* pDialog = tabDelete.pTabPage;
|
||||||
|
if (pDialog != NULL) {
|
||||||
|
m_hFocusWnd[nOldIndex] = ::GetFocus ();
|
||||||
|
pDialog->ShowWindow (SW_HIDE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Activate the new one.
|
||||||
|
SetCurSel (nIndex);
|
||||||
|
TabDelete tabDelete = m_tabs[nIndex];
|
||||||
|
CTabPageSSL* pDialog = tabDelete.pTabPage;
|
||||||
|
|
||||||
|
if (pDialog != NULL) {
|
||||||
|
::SetFocus (m_hFocusWnd[nIndex]);
|
||||||
|
CRect rect;
|
||||||
|
GetClientRect (&rect);
|
||||||
|
ResizeDialog (nIndex, rect.Width (), rect.Height ());
|
||||||
|
pDialog->ShowWindow (SW_SHOW);
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CTabCtrlSSL::GetSSLActivePage (void) {
|
||||||
|
return GetCurSel ();
|
||||||
|
}
|
||||||
|
|
||||||
|
CWnd* CTabCtrlSSL::GetSSLPage (int nIndex) {
|
||||||
|
if (nIndex >= GetItemCount ())
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
TabDelete tabDelete = m_tabs[nIndex];
|
||||||
|
return (CWnd*) tabDelete.pTabPage;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CTabCtrlSSL::GetSSLPageIndex (int nPageID) {
|
||||||
|
int nCount = GetItemCount ();
|
||||||
|
if (nCount == 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
for (int i=0; i<nCount; i++) {
|
||||||
|
if (m_nPageIDs[i] == nPageID)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Private helper functions
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
BOOL CTabCtrlSSL::CheckDialogTemplate (LPCTSTR pszTemplateName) {
|
||||||
|
// Verify that the dialog resource exists.
|
||||||
|
ASSERT (pszTemplateName != NULL);
|
||||||
|
HINSTANCE hInstance = AfxFindResourceHandle (pszTemplateName, RT_DIALOG);
|
||||||
|
HRSRC hResource = ::FindResource (hInstance, pszTemplateName, RT_DIALOG);
|
||||||
|
|
||||||
|
if (hResource == NULL)
|
||||||
|
return FALSE; // Resource doesn't exist
|
||||||
|
|
||||||
|
HGLOBAL hTemplate = LoadResource (hInstance, hResource);
|
||||||
|
ASSERT (hTemplate != NULL);
|
||||||
|
|
||||||
|
// Get the dialog's style bits.
|
||||||
|
DLGTEMPLATEEX* pTemplate = (DLGTEMPLATEEX*) LockResource (hTemplate);
|
||||||
|
|
||||||
|
DWORD dwStyle;
|
||||||
|
if (pTemplate->signature == 0xFFFF)
|
||||||
|
dwStyle = pTemplate->style;
|
||||||
|
else
|
||||||
|
dwStyle = ((DLGTEMPLATE*) pTemplate)->style;
|
||||||
|
|
||||||
|
UnlockResource (hTemplate);
|
||||||
|
FreeResource (hTemplate);
|
||||||
|
|
||||||
|
// Verify that the dialog is an invisible child window.
|
||||||
|
if (dwStyle & WS_VISIBLE)
|
||||||
|
return FALSE; // WS_VISIBLE flag is set
|
||||||
|
|
||||||
|
if (!(dwStyle & WS_CHILD))
|
||||||
|
return FALSE; // WS_CHILD flag isn't set
|
||||||
|
|
||||||
|
// Verify that the dialog has no border and no title bar.
|
||||||
|
if (dwStyle & (WS_BORDER | WS_THICKFRAME | DS_MODALFRAME))
|
||||||
|
return FALSE; // One or more border flags are set
|
||||||
|
|
||||||
|
if (dwStyle & WS_CAPTION)
|
||||||
|
return FALSE; // WS_CAPTION flag is set
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
#endif // _DEBUG
|
||||||
|
|
||||||
|
void CTabCtrlSSL::ResizeDialog (int nIndex, int cx, int cy) {
|
||||||
|
if (nIndex != -1) {
|
||||||
|
TabDelete tabDelete = m_tabs[nIndex];
|
||||||
|
CTabPageSSL* pDialog = tabDelete.pTabPage;
|
||||||
|
|
||||||
|
if (pDialog != NULL) {
|
||||||
|
CRect rect;
|
||||||
|
GetItemRect (nIndex, &rect);
|
||||||
|
|
||||||
|
int x, y, nWidth, nHeight;
|
||||||
|
DWORD dwStyle = GetStyle ();
|
||||||
|
|
||||||
|
if (dwStyle & TCS_VERTICAL) { // Vertical tabs
|
||||||
|
int nTabWidth =
|
||||||
|
rect.Width () * GetRowCount ();
|
||||||
|
x = (dwStyle & TCS_RIGHT) ? 4 : nTabWidth + 4;
|
||||||
|
y = 4;
|
||||||
|
nWidth = cx - nTabWidth - 8;
|
||||||
|
nHeight = cy - 8;
|
||||||
|
}
|
||||||
|
else { // Horizontal tabs
|
||||||
|
int nTabHeight =
|
||||||
|
rect.Height () * GetRowCount ();
|
||||||
|
x = 4;
|
||||||
|
y = (dwStyle & TCS_BOTTOM) ? 4 : nTabHeight + 4;
|
||||||
|
nWidth = cx - 8;
|
||||||
|
nHeight = cy - nTabHeight - 8;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
pDialog->SetWindowPos (NULL, x, y, nWidth, nHeight, SWP_NOZORDER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Overridables
|
||||||
|
|
||||||
|
BOOL CTabCtrlSSL::OnInitPage (int nIndex, int nPageID) {
|
||||||
|
// TODO: Override in derived class to initialise pages.
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTabCtrlSSL::OnActivatePage (int nIndex, int nPageID) {
|
||||||
|
// TODO: Override in derived class to respond to page activations.
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTabCtrlSSL::OnDeactivatePage (int nIndex, int nPageID) {
|
||||||
|
// TODO: Override in derived class to respond to page deactivations.
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTabCtrlSSL::OnDestroyPage (int nIndex, int nPageID) {
|
||||||
|
// TODO: Override in derived class to free resources.
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Message handlers
|
||||||
|
|
||||||
|
void CTabCtrlSSL::OnSelChanging (NMHDR* pNMHDR, LRESULT* pResult) {
|
||||||
|
// Notify derived classes that the selection is changing.
|
||||||
|
int nIndex = GetCurSel ();
|
||||||
|
if (nIndex == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
OnDeactivatePage (nIndex, m_nPageIDs[nIndex]);
|
||||||
|
|
||||||
|
// Save the input focus and hide the old page.
|
||||||
|
TabDelete tabDelete = m_tabs[nIndex];
|
||||||
|
CTabPageSSL* pDialog = tabDelete.pTabPage;
|
||||||
|
|
||||||
|
if (pDialog != NULL) {
|
||||||
|
m_hFocusWnd[nIndex] = ::GetFocus ();
|
||||||
|
pDialog->ShowWindow (SW_HIDE);
|
||||||
|
}
|
||||||
|
*pResult = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTabCtrlSSL::OnSelChange (NMHDR* pNMHDR, LRESULT* pResult) {
|
||||||
|
int nIndex = GetCurSel ();
|
||||||
|
if (nIndex == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Show the new page.
|
||||||
|
TabDelete tabDelete = m_tabs[nIndex];
|
||||||
|
CTabPageSSL* pDialog = tabDelete.pTabPage;
|
||||||
|
|
||||||
|
if (pDialog != NULL) {
|
||||||
|
::SetFocus (m_hFocusWnd[nIndex]);
|
||||||
|
CRect rect;
|
||||||
|
GetClientRect (&rect);
|
||||||
|
ResizeDialog (nIndex, rect.Width (), rect.Height ());
|
||||||
|
pDialog->ShowWindow (SW_SHOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Notify derived classes that the selection has changed.
|
||||||
|
OnActivatePage (nIndex, m_nPageIDs[nIndex]);
|
||||||
|
*pResult = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTabCtrlSSL::OnSetFocus (CWnd* pOldWnd) {
|
||||||
|
CTabCtrl::OnSetFocus (pOldWnd);
|
||||||
|
|
||||||
|
// Set the focus to a control on the current page.
|
||||||
|
int nIndex = GetCurSel ();
|
||||||
|
if (nIndex != -1)
|
||||||
|
::SetFocus (m_hFocusWnd[nIndex]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTabCtrlSSL::OnKillFocus (CWnd* pNewWnd) {
|
||||||
|
CTabCtrl::OnKillFocus (pNewWnd);
|
||||||
|
|
||||||
|
// Save the HWND of the control that holds the input focus.
|
||||||
|
int nIndex = GetCurSel ();
|
||||||
|
if (nIndex != -1)
|
||||||
|
m_hFocusWnd[nIndex] = ::GetFocus ();
|
||||||
|
}
|
||||||
|
|
||||||
|
// My thanks to Tomasz Sowinski for all his help coming up with a workable
|
||||||
|
// solution to the stack versus heap object destruction
|
||||||
|
void CTabCtrlSSL::OnDestroy (void) {
|
||||||
|
int nCount = m_tabs.GetSize ();
|
||||||
|
|
||||||
|
// Destroy dialogs and delete CTabCtrlSSL objects.
|
||||||
|
if (nCount > 0) {
|
||||||
|
for (int i=nCount - 1; i>=0; i--) {
|
||||||
|
OnDestroyPage (i, m_nPageIDs[i]);
|
||||||
|
TabDelete tabDelete = m_tabs[i];
|
||||||
|
CTabPageSSL* pDialog = tabDelete.pTabPage;
|
||||||
|
if (pDialog != NULL) {
|
||||||
|
pDialog->DestroyWindow ();
|
||||||
|
if (TRUE == tabDelete.bDelete) {
|
||||||
|
delete pDialog;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clean up the internal arrays.
|
||||||
|
m_tabs.RemoveAll ();
|
||||||
|
m_hFocusWnd.RemoveAll ();
|
||||||
|
m_nPageIDs.RemoveAll ();
|
||||||
|
|
||||||
|
CTabCtrl::OnDestroy ();
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CTabCtrlSSL::OnCommand (WPARAM wParam, LPARAM lParam) {
|
||||||
|
// Forward WM_COMMAND messages to the dialog's parent.
|
||||||
|
return GetParent ()->SendMessage (WM_COMMAND, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CTabCtrlSSL::OnNotify (WPARAM wParam, LPARAM lParam, LRESULT* pResult) {
|
||||||
|
// Forward WM_NOTIFY messages to the dialog's parent.
|
||||||
|
return GetParent ()->SendMessage (WM_NOTIFY, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CTabCtrlSSL::OnCmdMsg (UINT nID, int nCode, void* pExtra,
|
||||||
|
AFX_CMDHANDLERINFO* pHandlerInfo) {
|
||||||
|
// Forward ActiveX control events to the dialog's parent.
|
||||||
|
#ifndef _AFX_NO_OCC_SUPPORT
|
||||||
|
if (nCode == CN_EVENT)
|
||||||
|
return GetParent ()->OnCmdMsg (nID, nCode, pExtra, pHandlerInfo);
|
||||||
|
#endif // !_AFX_NO_OCC_SUPPORT
|
||||||
|
|
||||||
|
return CTabCtrl::OnCmdMsg (nID, nCode, pExtra, pHandlerInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
int CTabCtrlSSL::AddPage (LPCTSTR pszTitle, int nPageID, TabDelete tabDelete) {
|
||||||
|
// Add a page to the tab control.
|
||||||
|
TC_ITEM item;
|
||||||
|
item.mask = TCIF_TEXT;
|
||||||
|
item.pszText = (LPTSTR) pszTitle;
|
||||||
|
int nIndex = GetItemCount ();
|
||||||
|
|
||||||
|
if (InsertItem (nIndex, &item) == -1)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (NULL == tabDelete.pTabPage) {
|
||||||
|
// Fail - no point calling the function with a NULL pointer!
|
||||||
|
DeleteItem (nIndex);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Record the address of the dialog object and the page ID.
|
||||||
|
int nArrayIndex = m_tabs.Add (tabDelete);
|
||||||
|
ASSERT (nIndex == nArrayIndex);
|
||||||
|
|
||||||
|
nArrayIndex = m_nPageIDs.Add (nPageID);
|
||||||
|
ASSERT (nIndex == nArrayIndex);
|
||||||
|
|
||||||
|
// Size and position the dialog box within the view.
|
||||||
|
tabDelete.pTabPage->SetParent (this); // Just to be sure
|
||||||
|
|
||||||
|
CRect rect;
|
||||||
|
GetClientRect (&rect);
|
||||||
|
|
||||||
|
if (rect.Width () > 0 && rect.Height () > 0)
|
||||||
|
ResizeDialog (nIndex, rect.Width (), rect.Height ());
|
||||||
|
|
||||||
|
// Initialize the page.
|
||||||
|
if (OnInitPage (nIndex, nPageID)) {
|
||||||
|
// Make sure the first control in the dialog is the one that
|
||||||
|
// receives the input focus when the page is displayed.
|
||||||
|
HWND hwndFocus = tabDelete.pTabPage->GetTopWindow ()->m_hWnd;
|
||||||
|
nArrayIndex = m_hFocusWnd.Add (hwndFocus);
|
||||||
|
ASSERT (nIndex == nArrayIndex);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Make the control that currently has the input focus is the one
|
||||||
|
// that receives the input focus when the page is displayed.
|
||||||
|
m_hFocusWnd.Add (::GetFocus ());
|
||||||
|
}
|
||||||
|
|
||||||
|
// If this is the first page added to the view, make it visible.
|
||||||
|
if (nIndex == 0)
|
||||||
|
tabDelete.pTabPage->ShowWindow (SW_SHOW);
|
||||||
|
}
|
||||||
|
return nIndex;
|
||||||
|
}
|
98
win32/TabCtrlSSL.h
Normal file
98
win32/TabCtrlSSL.h
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
#if !defined(AFX_TABCTRLSSL_H__75BE48A7_864C_11D5_9F04_000102FB9990__INCLUDED_)
|
||||||
|
#define AFX_TABCTRLSSL_H__75BE48A7_864C_11D5_9F04_000102FB9990__INCLUDED_
|
||||||
|
|
||||||
|
#if _MSC_VER > 1000
|
||||||
|
#pragma once
|
||||||
|
#endif // _MSC_VER > 1000
|
||||||
|
// TabCtrlEx.h : header file
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <afxtempl.h>
|
||||||
|
#include "TabPageSSL.h"
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
#pragma pack (push, 1)
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
WORD dlgVer;
|
||||||
|
WORD signature;
|
||||||
|
DWORD helpID;
|
||||||
|
DWORD exStyle;
|
||||||
|
DWORD style;
|
||||||
|
WORD cDlgItems;
|
||||||
|
short x;
|
||||||
|
short y;
|
||||||
|
short cx;
|
||||||
|
short cy;
|
||||||
|
} DLGTEMPLATEEX;
|
||||||
|
|
||||||
|
#pragma pack (pop)
|
||||||
|
#endif // _DEBUG
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CTabCtrlSSL window
|
||||||
|
|
||||||
|
class CTabCtrlSSL : public CTabCtrl {
|
||||||
|
public:
|
||||||
|
// Construction
|
||||||
|
CTabCtrlSSL ();
|
||||||
|
// Destruction
|
||||||
|
virtual ~CTabCtrlSSL (void);
|
||||||
|
// Page Functions
|
||||||
|
int AddSSLPage (LPCTSTR pszTitle, int nPageID, CTabPageSSL* pTabPage);
|
||||||
|
int AddSSLPage (LPCTSTR pszTitle, int nPageID, LPCTSTR pszTemplateName);
|
||||||
|
int AddSSLPage (LPCTSTR pszTitle, int nPageID, int nTemplateID);
|
||||||
|
BOOL RemoveSSLPage (int nIndex);
|
||||||
|
int GetSSLPageCount (void);
|
||||||
|
BOOL GetSSLPageTitle (int nIndex, CString& strTitle);
|
||||||
|
BOOL SetSSLPageTitle (int nIndex, LPCTSTR pszTitle);
|
||||||
|
int GetSSLPageID (int nIndex);
|
||||||
|
int SetSSLPageID (int nIndex, int nPageID);
|
||||||
|
BOOL ActivateSSLPage (int nIndex);
|
||||||
|
int GetSSLActivePage (void);
|
||||||
|
CWnd* GetSSLPage (int nIndex);
|
||||||
|
int GetSSLPageIndex (int nPageID);
|
||||||
|
void ResizeDialog (int nIndex, int cx, int cy);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
struct TabDelete {
|
||||||
|
CTabPageSSL* pTabPage;
|
||||||
|
BOOL bDelete;
|
||||||
|
};
|
||||||
|
CArray<TabDelete, TabDelete> m_tabs;
|
||||||
|
CArray<HWND, HWND> m_hFocusWnd;
|
||||||
|
CArray<int, int> m_nPageIDs;
|
||||||
|
|
||||||
|
int AddPage (LPCTSTR pszTitle, int nPageID, TabDelete tabDelete);
|
||||||
|
|
||||||
|
virtual BOOL OnInitPage (int nIndex, int nPageID);
|
||||||
|
virtual void OnActivatePage (int nIndex, int nPageID);
|
||||||
|
virtual void OnDeactivatePage (int nIndex, int nPageID);
|
||||||
|
virtual void OnDestroyPage (int nIndex, int nPageID);
|
||||||
|
virtual BOOL OnCommand (WPARAM wParam, LPARAM lParam);
|
||||||
|
virtual BOOL OnNotify (WPARAM wParam, LPARAM lParam, LRESULT* pResult);
|
||||||
|
virtual BOOL OnCmdMsg (UINT nID, int nCode, void* pExtra,
|
||||||
|
AFX_CMDHANDLERINFO* pHandlerInfo);
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
BOOL CheckDialogTemplate (LPCTSTR pszTemplateName);
|
||||||
|
#endif // _DEBUG
|
||||||
|
// Generated message map functions
|
||||||
|
protected:
|
||||||
|
//{{AFX_MSG(CTabCtrlSSL)
|
||||||
|
afx_msg void OnDestroy (void);
|
||||||
|
afx_msg void OnSetFocus (CWnd* pOldWnd);
|
||||||
|
afx_msg void OnKillFocus (CWnd* pNewWnd);
|
||||||
|
afx_msg void OnSelChanging (NMHDR* pNMHDR, LRESULT* pResult);
|
||||||
|
afx_msg void OnSelChange (NMHDR* pNMHDR, LRESULT* pResult);
|
||||||
|
//}}AFX_MSG
|
||||||
|
|
||||||
|
DECLARE_MESSAGE_MAP()
|
||||||
|
};
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
//{{AFX_INSERT_LOCATION}}
|
||||||
|
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
|
||||||
|
|
||||||
|
#endif // !defined(AFX_TABCTRLSSL_H__75BE48A7_864C_11D5_9F04_000102FB9990__INCLUDED_)
|
76
win32/TabPageSSL.cpp
Normal file
76
win32/TabPageSSL.cpp
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
#include "stdafx.h"
|
||||||
|
#include "TabPageSSL.h"
|
||||||
|
#include "ResizableDialog.h"
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
#define new DEBUG_NEW
|
||||||
|
#undef THIS_FILE
|
||||||
|
static char THIS_FILE[] = __FILE__;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Construction
|
||||||
|
|
||||||
|
CTabPageSSL::CTabPageSSL () {
|
||||||
|
#ifndef _AFX_NO_OCC_SUPPORT
|
||||||
|
AfxEnableControlContainer ();
|
||||||
|
#endif // !_AFX_NO_OCC_SUPPORT
|
||||||
|
}
|
||||||
|
|
||||||
|
CTabPageSSL::CTabPageSSL (UINT nIDTemplate, CWnd* pParent /*=NULL*/)
|
||||||
|
: CResizableDialog(nIDTemplate, pParent) {
|
||||||
|
#ifndef _AFX_NO_OCC_SUPPORT
|
||||||
|
AfxEnableControlContainer ();
|
||||||
|
#endif // !_AFX_NO_OCC_SUPPORT
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Destruction
|
||||||
|
|
||||||
|
CTabPageSSL::~CTabPageSSL () {
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Message Handlers
|
||||||
|
|
||||||
|
void CTabPageSSL::OnOK (void) {
|
||||||
|
//
|
||||||
|
// Prevent CDialog::OnOK from calling EndDialog.
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTabPageSSL::OnCancel (void) {
|
||||||
|
//
|
||||||
|
// Prevent CDialog::OnCancel from calling EndDialog.
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CTabPageSSL::OnCommand (WPARAM wParam, LPARAM lParam) {
|
||||||
|
// Call base class OnCommand to allow message map processing
|
||||||
|
CResizableDialog::OnCommand (wParam, lParam);
|
||||||
|
//
|
||||||
|
// Forward WM_COMMAND messages to the dialog's parent.
|
||||||
|
//
|
||||||
|
return GetParent ()->SendMessage (WM_COMMAND, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CTabPageSSL::OnNotify (WPARAM wParam, LPARAM lParam, LRESULT* pResult) {
|
||||||
|
//
|
||||||
|
// Forward WM_NOTIFY messages to the dialog's parent.
|
||||||
|
//
|
||||||
|
CResizableDialog::OnNotify (wParam, lParam, pResult);
|
||||||
|
return GetParent ()->SendMessage (WM_NOTIFY, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CTabPageSSL::OnCmdMsg (UINT nID, int nCode, void* pExtra,
|
||||||
|
AFX_CMDHANDLERINFO* pHandlerInfo) {
|
||||||
|
//
|
||||||
|
// Forward ActiveX control events to the dialog's parent.
|
||||||
|
//
|
||||||
|
#ifndef _AFX_NO_OCC_SUPPORT
|
||||||
|
if (nCode == CN_EVENT)
|
||||||
|
return GetParent ()->OnCmdMsg (nID, nCode, pExtra, pHandlerInfo);
|
||||||
|
#endif // !_AFX_NO_OCC_SUPPORT
|
||||||
|
|
||||||
|
return CResizableDialog::OnCmdMsg (nID, nCode, pExtra, pHandlerInfo);
|
||||||
|
}
|
27
win32/TabPageSSL.h
Normal file
27
win32/TabPageSSL.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#if !defined(AFX_TABPAGESSL_H__619331B3_7DE7_4DB1_A039_2103E87E8E71__INCLUDED_)
|
||||||
|
#define AFX_TABPAGESSL_H__619331B3_7DE7_4DB1_A039_2103E87E8E71__INCLUDED_
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CTabPageSSL declaration
|
||||||
|
#include "ResizableDialog.h"
|
||||||
|
|
||||||
|
class CTabPageSSL : public CResizableDialog
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Construction
|
||||||
|
CTabPageSSL (); // Default Constructor
|
||||||
|
CTabPageSSL (UINT nIDTemplate, CWnd* pParent = NULL); // Standard Constructor
|
||||||
|
// Destruction
|
||||||
|
~CTabPageSSL ();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// Message Handlers
|
||||||
|
virtual BOOL OnCommand (WPARAM wParam, LPARAM lParam);
|
||||||
|
virtual BOOL OnNotify (WPARAM wParam, LPARAM lParam, LRESULT* pResult);
|
||||||
|
virtual void OnOK (void);
|
||||||
|
virtual void OnCancel (void);
|
||||||
|
virtual BOOL OnCmdMsg (UINT nID, int nCode, void* pExtra,
|
||||||
|
AFX_CMDHANDLERINFO* pHandlerInfo);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // !defined(AFX_TABPAGE_H__619331B3_7DE7_4DB1_A039_2103E87E8E71__INCLUDED_)
|
BIN
win32/black.bmp
Normal file
BIN
win32/black.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 28 KiB |
5
win32/colors.h
Normal file
5
win32/colors.h
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#define BGCOLOR RGB(0,0,0)
|
||||||
|
#define TEXTCOLOR RGB(175,175,175)
|
||||||
|
#define TEXTBGCOLOR RGB(0,0,0)
|
||||||
|
#define LOGOCOLOR RGB(175,175,175)
|
||||||
|
|
277
win32/icecast.dsp
Normal file
277
win32/icecast.dsp
Normal file
@ -0,0 +1,277 @@
|
|||||||
|
# Microsoft Developer Studio Project File - Name="icecast" - Package Owner=<4>
|
||||||
|
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||||
|
# ** DO NOT EDIT **
|
||||||
|
|
||||||
|
# TARGTYPE "Win32 (x86) Static Library" 0x0104
|
||||||
|
|
||||||
|
CFG=icecast - Win32 Debug
|
||||||
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||||
|
!MESSAGE use the Export Makefile command and run
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "icecast.mak".
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "icecast.mak" CFG="icecast - Win32 Debug"
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE Possible choices for configuration are:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE "icecast - Win32 Release" (based on "Win32 (x86) Static Library")
|
||||||
|
!MESSAGE "icecast - Win32 Debug" (based on "Win32 (x86) Static Library")
|
||||||
|
!MESSAGE
|
||||||
|
|
||||||
|
# Begin Project
|
||||||
|
# PROP AllowPerConfigDependencies 0
|
||||||
|
# PROP Scc_ProjName ""
|
||||||
|
# PROP Scc_LocalPath ""
|
||||||
|
CPP=cl.exe
|
||||||
|
RSC=rc.exe
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "icecast - Win32 Release"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "Release"
|
||||||
|
# PROP BASE Intermediate_Dir "Release"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "Releaseicecast"
|
||||||
|
# PROP Intermediate_Dir "Releaseicecast"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
|
||||||
|
# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../../libxslt/include" /I "../../iconv/include" /I "../../libxml2/include" /I "..\src" /I "..\src/httpp" /I "..\src/thread" /I "..\src/log" /I "..\src/avl" /I "..\src/net" /I "..\src/timings" /I "../../pthreads" /I "../../ogg/include" /I "../../vorbis/include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
|
||||||
|
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LIB32=link.exe -lib
|
||||||
|
# ADD BASE LIB32 /nologo
|
||||||
|
# ADD LIB32 /nologo
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "icecast - Win32 Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "Debugicecast"
|
||||||
|
# PROP Intermediate_Dir "Debugicecast"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
||||||
|
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../" /I "../../libxslt/include" /I "../../iconv/include" /I "../../libxml2/include" /I "..\src" /I "..\src/httpp" /I "..\src/thread" /I "..\src/log" /I "..\src/avl" /I "..\src/net" /I "..\src/timings" /I "../../pthreads" /I "../../ogg/include" /I "../../vorbis/include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_WIN32" /FD /GZ /c
|
||||||
|
# SUBTRACT CPP /YX
|
||||||
|
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LIB32=link.exe -lib
|
||||||
|
# ADD BASE LIB32 /nologo
|
||||||
|
# ADD LIB32 /nologo
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# Begin Target
|
||||||
|
|
||||||
|
# Name "icecast - Win32 Release"
|
||||||
|
# Name "icecast - Win32 Debug"
|
||||||
|
# Begin Group "Source Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\avl\avl.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\avl\avl.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\client.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\client.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\compat.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\config.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\config.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\connection.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\connection.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\format.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\format.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\format_mp3.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\format_mp3.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\format_vorbis.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\format_vorbis.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\global.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\global.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\httpp\httpp.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\httpp\httpp.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\log\log.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\log\log.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\logging.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\logging.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\main.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\os.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\refbuf.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\refbuf.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\net\resolver.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\net\resolver.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\sighandler.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\sighandler.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\slave.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\net\sock.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\net\sock.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\source.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\source.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\stats.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\stats.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\thread\thread.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\thread\thread.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\timing\timing.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\util.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\util.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\xslt.c
|
||||||
|
# End Source File
|
||||||
|
# End Group
|
||||||
|
# Begin Group "Header Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\timing\timing.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\src\xslt.h
|
||||||
|
# End Source File
|
||||||
|
# End Group
|
||||||
|
# End Target
|
||||||
|
# End Project
|
BIN
win32/icecast.ico
Normal file
BIN
win32/icecast.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
50
win32/icecast.xml
Normal file
50
win32/icecast.xml
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
<icecast>
|
||||||
|
<location>Jack's House</location>
|
||||||
|
<admin>jack@icecast.org</admin>
|
||||||
|
|
||||||
|
<limits>
|
||||||
|
<clients>100</clients>
|
||||||
|
<sources>2</sources>
|
||||||
|
<threadpool>5</threadpool>
|
||||||
|
<client-timeout>30</client-timeout>
|
||||||
|
<header-timeout>15</header-timeout>
|
||||||
|
<source-timeout>10</source-timeout>
|
||||||
|
</limits>
|
||||||
|
|
||||||
|
<source-password>hackme</source-password>
|
||||||
|
|
||||||
|
<directory>
|
||||||
|
<touch-freq>5</touch-freq>
|
||||||
|
<server>
|
||||||
|
<host>yp.icecast.org</host>
|
||||||
|
<touch-freq>15</touch-freq>
|
||||||
|
</server>
|
||||||
|
</directory>
|
||||||
|
|
||||||
|
<hostname>localhost</hostname>
|
||||||
|
<port>8100</port>
|
||||||
|
<!--<bind-address>127.0.0.1</bind-address>-->
|
||||||
|
|
||||||
|
<!--<master-server>127.0.0.1</master-server>-->
|
||||||
|
<!--<master-server-port>8001</master-server-port>-->
|
||||||
|
<!--<master-update-interval>120</master-update-interval>-->
|
||||||
|
|
||||||
|
<paths>
|
||||||
|
<webroot>.\webroot</webroot>
|
||||||
|
<basedir>.</basedir>
|
||||||
|
<logdir>.</logdir>
|
||||||
|
</paths>
|
||||||
|
|
||||||
|
<logging>
|
||||||
|
<accesslog>access.log</accesslog>
|
||||||
|
<errorlog>error.log</errorlog>
|
||||||
|
</logging>
|
||||||
|
|
||||||
|
<security>
|
||||||
|
<chroot>0</chroot>
|
||||||
|
<!-- <changeowner>
|
||||||
|
<user>nobody</user>
|
||||||
|
<group>nogroup</group>
|
||||||
|
</changeowner> -->
|
||||||
|
</security>
|
||||||
|
</icecast>
|
13
win32/res/Icecast2win.rc2
Normal file
13
win32/res/Icecast2win.rc2
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
//
|
||||||
|
// ICECAST2WIN.RC2 - resources Microsoft Visual C++ does not edit directly
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
#error this file is not editable by Microsoft Visual C++
|
||||||
|
#endif //APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Add manually edited resources here...
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
68
win32/resource.h
Normal file
68
win32/resource.h
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
//{{NO_DEPENDENCIES}}
|
||||||
|
// Microsoft Developer Studio generated include file.
|
||||||
|
// Used by Icecast2win.rc
|
||||||
|
//
|
||||||
|
#define IDM_ABOUTBOX 0x0010
|
||||||
|
#define IDD_ABOUTBOX 100
|
||||||
|
#define IDS_ABOUTBOX 101
|
||||||
|
#define IDD_ICECAST2WIN_DIALOG 102
|
||||||
|
#define IDR_MAINFRAME 128
|
||||||
|
#define IDR_MENU1 132
|
||||||
|
#define IDB_BITMAP1 134
|
||||||
|
#define IDB_BITMAP2 135
|
||||||
|
#define IDI_R 141
|
||||||
|
#define IDI_G 142
|
||||||
|
#define IDI_ICON1 142
|
||||||
|
#define IDD_SERVERSTATUS 144
|
||||||
|
#define IDD_SSTATUS 145
|
||||||
|
#define IDD_CONFIGDIALOG 146
|
||||||
|
#define IDD_STATSDIALOG 147
|
||||||
|
#define IDB_BITMAP3 149
|
||||||
|
#define IDB_BITMAP4 150
|
||||||
|
#define IDB_BITMAP5 151
|
||||||
|
#define IDB_BITMAP6 152
|
||||||
|
#define IDR_MENU2 153
|
||||||
|
#define IDR_MENU3 154
|
||||||
|
#define IDC_CURSOR1 155
|
||||||
|
#define IDC_CURSOR2 156
|
||||||
|
#define IDB_BITMAP7 159
|
||||||
|
#define IDC_MAINTAB 1000
|
||||||
|
#define IDC_ERROR_EDIT 1003
|
||||||
|
#define IDC_ACCESS_EDIT 1004
|
||||||
|
#define IDC_CONFIG_EDIT 1006
|
||||||
|
#define IDC_SERVERSTATUS 1008
|
||||||
|
#define IDC_SOURCES_CONNECTED 1009
|
||||||
|
#define IDC_NUMBER_CLIENTS 1010
|
||||||
|
#define IDC_GROUP1 1011
|
||||||
|
#define IDC_STATS_EDIT 1012
|
||||||
|
#define IDC_CONFIG 1020
|
||||||
|
#define IDC_STATSLIST 1021
|
||||||
|
#define IDC_SOURCELIST 1022
|
||||||
|
#define IDC_START 1023
|
||||||
|
#define IDC_AUTOSTART 1024
|
||||||
|
#define IDC_FILLER1 1025
|
||||||
|
#define IDC_FILLER2 1026
|
||||||
|
#define IDC_STATIC_SS 1029
|
||||||
|
#define IDC_GLOBALSTAT_LIST 1030
|
||||||
|
#define IDC_STATIC_GS 1031
|
||||||
|
#define IDC_STATIC_SLS 1032
|
||||||
|
#define IDC_RUNNINGFOR 1033
|
||||||
|
#define IDC_STATIC_RUN 1034
|
||||||
|
#define IDC_STATICBLACK 1035
|
||||||
|
#define ID_FILE_STARTSERVER 32771
|
||||||
|
#define ID_FILE_EXIT 32772
|
||||||
|
#define ID_FILE_STOPSERVER 32774
|
||||||
|
#define ID_FILE 32775
|
||||||
|
#define ID_POPUP_ADDTOGLOBALSTATLIST 32776
|
||||||
|
#define ID__DELETEFROMGLOBALSTATS 32777
|
||||||
|
|
||||||
|
// Next default values for new objects
|
||||||
|
//
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
#define _APS_NEXT_RESOURCE_VALUE 160
|
||||||
|
#define _APS_NEXT_COMMAND_VALUE 32778
|
||||||
|
#define _APS_NEXT_CONTROL_VALUE 1036
|
||||||
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
|
#endif
|
||||||
|
#endif
|
BIN
win32/running.bmp
Normal file
BIN
win32/running.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.2 KiB |
BIN
win32/stopped.bmp
Normal file
BIN
win32/stopped.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.2 KiB |
Loading…
Reference in New Issue
Block a user