2002-11-04 18:57:47 +00:00
|
|
|
// The contents of this file are subject to the Mozilla Public License
|
|
|
|
// Version 1.0 (the "License"); you may not use this file except in
|
|
|
|
// compliance with the License. You may obtain a copy of the License at
|
|
|
|
// http://www.mozilla.org/MPL/
|
|
|
|
//
|
|
|
|
// Software distributed under the License is distributed on an "AS IS"
|
|
|
|
// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
|
|
|
// License for the specific language governing rights and limitations
|
|
|
|
// under the License.
|
|
|
|
//
|
|
|
|
// The Original Code is the Berkeley Open Infrastructure for Network Computing.
|
|
|
|
//
|
|
|
|
// The Initial Developer of the Original Code is the SETI@home project.
|
|
|
|
// Portions created by the SETI@home project are Copyright (C) 2002
|
|
|
|
// University of California at Berkeley. All Rights Reserved.
|
|
|
|
//
|
|
|
|
// Contributor(s):
|
|
|
|
//
|
|
|
|
|
2002-10-06 01:14:37 +00:00
|
|
|
#ifndef __WINGUI_H_
|
|
|
|
#define __WINGUI_H_
|
|
|
|
|
|
|
|
// includes
|
|
|
|
|
|
|
|
#include <afxwin.h>
|
2002-10-05 23:10:46 +00:00
|
|
|
#include <afxcmn.h>
|
|
|
|
#include <afxtempl.h>
|
|
|
|
#include <afxcoll.h>
|
2002-11-04 18:57:47 +00:00
|
|
|
#include <afxext.h>
|
|
|
|
#include <afxhtml.h>
|
|
|
|
#include <math.h>
|
|
|
|
#include "filesys.h"
|
2002-10-06 01:14:37 +00:00
|
|
|
#include "log_flags.h"
|
|
|
|
#include "client_state.h"
|
|
|
|
#include "account.h"
|
|
|
|
#include "resource.h"
|
|
|
|
#include "win_net.h"
|
|
|
|
|
|
|
|
// constants
|
|
|
|
|
2002-11-04 18:57:47 +00:00
|
|
|
#define DEF_COL_WIDTH 80 // default width of list columns
|
|
|
|
|
2002-10-06 01:14:37 +00:00
|
|
|
#define SORT_ASCEND 0 // sorting orders
|
|
|
|
#define SORT_DESCEND 1
|
|
|
|
|
|
|
|
#define EDGE_BUFFER 2 // buffer pixels around edge of client
|
|
|
|
|
2002-11-04 18:57:47 +00:00
|
|
|
#define MAX_MESSAGE_LINES 20 // the maximum lines in the message control
|
|
|
|
|
2002-10-06 01:14:37 +00:00
|
|
|
#define ID_TIMER 104 // timer id
|
2002-10-05 23:10:46 +00:00
|
|
|
|
2002-11-04 18:57:47 +00:00
|
|
|
#define PIE_BUFFER 20 // buffer pixels around edge of pie chart
|
|
|
|
#define PIE_DEPTH 0.25 // depth of pie chart
|
|
|
|
#define PI 3.14159 // pi
|
|
|
|
|
2002-11-18 22:15:21 +00:00
|
|
|
// typedefs
|
|
|
|
|
|
|
|
typedef BOOL (CALLBACK* InitFn)();
|
|
|
|
typedef void (CALLBACK* TermFn)();
|
|
|
|
typedef DWORD (CALLBACK* GetFn)();
|
|
|
|
|
2002-10-06 01:14:37 +00:00
|
|
|
// classes
|
2002-10-05 23:10:46 +00:00
|
|
|
|
2002-11-04 18:57:47 +00:00
|
|
|
//////////
|
|
|
|
// class: CProgressBarCtrl
|
|
|
|
// parent: CProgressCtrl
|
|
|
|
// description: forwards specific mouse messages to parent window.
|
2002-10-05 23:10:46 +00:00
|
|
|
class CProgressBarCtrl : public CProgressCtrl
|
|
|
|
{
|
2002-08-12 00:51:42 +00:00
|
|
|
public:
|
2002-10-05 23:10:46 +00:00
|
|
|
CProgressBarCtrl();
|
|
|
|
|
|
|
|
protected:
|
|
|
|
afx_msg void OnLButtonDown(UINT, CPoint);
|
|
|
|
afx_msg void OnLButtonUp(UINT, CPoint);
|
|
|
|
DECLARE_MESSAGE_MAP()
|
2002-08-12 00:51:42 +00:00
|
|
|
};
|
|
|
|
|
2002-11-04 18:57:47 +00:00
|
|
|
//////////
|
|
|
|
// class: CProgressHeaderCtrl
|
|
|
|
// parent: CHeaderCtrl
|
|
|
|
// description: forwards specific mouse messages to parent window.
|
2002-10-05 23:10:46 +00:00
|
|
|
class CProgressHeaderCtrl : public CHeaderCtrl
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
CProgressHeaderCtrl();
|
|
|
|
|
|
|
|
protected:
|
|
|
|
afx_msg void OnRButtonDown(UINT, CPoint);
|
2002-11-04 18:57:47 +00:00
|
|
|
afx_msg void OnRButtonUp(UINT, CPoint);
|
2002-10-05 23:10:46 +00:00
|
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
};
|
2002-08-12 00:51:42 +00:00
|
|
|
|
2002-11-04 18:57:47 +00:00
|
|
|
//////////
|
|
|
|
// class: CProgressListCtrl
|
|
|
|
// parent: CListCtrl
|
|
|
|
// description: extends basic functionality of standard list control by
|
|
|
|
// allowind embedded progress controls, sorting by columns,
|
|
|
|
// and hiding columns.
|
2002-10-05 23:10:46 +00:00
|
|
|
class CProgressListCtrl : public CListCtrl
|
|
|
|
{
|
2002-08-12 00:51:42 +00:00
|
|
|
public:
|
2002-10-05 23:10:46 +00:00
|
|
|
CProgressListCtrl();
|
2002-11-13 05:37:55 +00:00
|
|
|
~CProgressListCtrl();
|
2002-11-09 01:17:05 +00:00
|
|
|
BOOL DeleteItem(int);
|
2002-10-05 23:10:46 +00:00
|
|
|
void SetItemProgress(int, int, int);
|
|
|
|
void RepositionProgress();
|
|
|
|
int InsertColumn(int, LPCTSTR, int, int, int);
|
2002-11-04 18:57:47 +00:00
|
|
|
int GetColumnWidth(int);
|
2002-10-05 23:10:46 +00:00
|
|
|
BOOL SetColumnWidth(int, int);
|
|
|
|
|
2002-08-12 00:51:42 +00:00
|
|
|
protected:
|
2002-11-04 18:57:47 +00:00
|
|
|
CMenu m_PopupMenu; // context menu for header
|
|
|
|
CMapStringToOb m_Progs; // maps coordinate string to progress control
|
|
|
|
CProgressHeaderCtrl m_Header; // header for subclassing
|
|
|
|
CArray<int,int> m_ColWidths; // column widths for hiding and unhiding; a[i] > 0: col i shown; a[i] < 0: col i hidden, previous width -(a[i] - 1)
|
|
|
|
int m_iSort; // column and order of last sort: i = 0: no sort; i > 0: sorted ascending by col i - 1; < 0 sorted descending by col -(i-1)
|
2002-10-05 23:10:46 +00:00
|
|
|
|
|
|
|
void SwapItems(int, int);
|
2002-11-04 18:57:47 +00:00
|
|
|
// TODO: fix selection sort algorithm
|
2002-10-05 23:10:46 +00:00
|
|
|
void Sort(int, int);
|
|
|
|
void SwapColumnVisibility(int);
|
|
|
|
|
|
|
|
afx_msg BOOL OnCommand(WPARAM, LPARAM);
|
|
|
|
afx_msg int OnCreate(LPCREATESTRUCT);
|
|
|
|
afx_msg void OnDestroy();
|
|
|
|
afx_msg BOOL OnNotify(WPARAM, LPARAM, LRESULT*);
|
|
|
|
afx_msg void OnPaint();
|
2002-11-04 18:57:47 +00:00
|
|
|
// TODO: context menu for items?
|
2002-10-05 23:10:46 +00:00
|
|
|
afx_msg void OnRButtonDown(UINT, CPoint);
|
|
|
|
DECLARE_MESSAGE_MAP()
|
2002-08-12 00:51:42 +00:00
|
|
|
};
|
|
|
|
|
2002-11-04 18:57:47 +00:00
|
|
|
//////////
|
|
|
|
// class: CPieChartCtrl
|
|
|
|
// parent: CWnd
|
|
|
|
// description: contains the functionality of a pie chart
|
|
|
|
class CPieChartCtrl : public CWnd
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
CPieChartCtrl();
|
|
|
|
void AddPiece(LPTSTR, COLORREF, float, float);
|
|
|
|
void SetPiece(int, float);
|
|
|
|
BOOL Create(DWORD, const RECT&, CWnd*, UINT);
|
|
|
|
void SetFont(CFont*);
|
2002-11-20 20:06:40 +00:00
|
|
|
void SetTag(char*);
|
2002-11-04 18:57:47 +00:00
|
|
|
|
|
|
|
protected:
|
|
|
|
float m_Total; // total percentage taken up by pieces
|
|
|
|
CArray<float,float> m_Percents; // specific percentages of pieces
|
|
|
|
CArray<COLORREF,COLORREF> m_Colors; // colors of pieces
|
|
|
|
CArray<CString,CString> m_Labels; // labels of pieces
|
|
|
|
CFont* m_Font; // font for control
|
|
|
|
float m_Base; // base units of pie
|
2002-11-20 20:06:40 +00:00
|
|
|
CString m_Tag; // tag for numbers on labels
|
2002-11-04 18:57:47 +00:00
|
|
|
|
|
|
|
void DrawPiePiece(CDC*, float, float);
|
|
|
|
void CirclePoint(CPoint*, int, float, CPoint*);
|
|
|
|
void EllipsePoint(CRect*, float, CPoint*);
|
|
|
|
|
|
|
|
afx_msg void OnPaint();
|
|
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
};
|
|
|
|
|
|
|
|
//////////
|
|
|
|
// class: CMyApp
|
|
|
|
// parent: CWinApp
|
|
|
|
// description: subclasses CWinApp to create main window.
|
2002-10-05 23:10:46 +00:00
|
|
|
class CMyApp : public CWinApp
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
virtual BOOL InitInstance();
|
|
|
|
};
|
2002-08-12 00:51:42 +00:00
|
|
|
|
2002-11-04 18:57:47 +00:00
|
|
|
//////////
|
|
|
|
// class: CMainWindow
|
|
|
|
// parent: CWnd
|
|
|
|
// description: the main window, organizes child control windows and client
|
|
|
|
// state, handles timer updates, some display features.
|
|
|
|
class CMainWindow : public CWnd
|
2002-10-05 23:10:46 +00:00
|
|
|
{
|
2002-08-12 00:51:42 +00:00
|
|
|
public:
|
2002-11-04 18:57:47 +00:00
|
|
|
CMainWindow ();
|
2002-10-05 23:10:46 +00:00
|
|
|
static void CALLBACK TimerProc(HWND, UINT, UINT, DWORD);
|
2002-11-04 18:57:47 +00:00
|
|
|
void UpdateGUI(CLIENT_STATE*);
|
|
|
|
void MessageUser(char*,char*);
|
2002-10-05 23:10:46 +00:00
|
|
|
|
2002-08-12 00:51:42 +00:00
|
|
|
protected:
|
2002-11-04 18:57:47 +00:00
|
|
|
CMenu m_MainMenu; // window's main menu
|
|
|
|
CBitmap m_Logo; // bitmap of the boinc logo
|
|
|
|
CProgressListCtrl m_ProjectListCtrl; // list control
|
|
|
|
CProgressListCtrl m_XferListCtrl; // list control
|
|
|
|
CProgressListCtrl m_ResultListCtrl; // list control
|
|
|
|
CPieChartCtrl m_UsagePieCtrl; // pie chart control
|
|
|
|
CEdit m_MessageEditCtrl; // edit control for messages to user
|
|
|
|
CFont m_Font; // window's font
|
|
|
|
CTabCtrl m_TabCtrl; // tab control for choosing display
|
|
|
|
CImageList m_TabIL; // image list for tab control
|
|
|
|
CBitmap m_TabBMP[5]; // bitmaps for tab image list
|
2002-11-18 22:15:21 +00:00
|
|
|
HINSTANCE m_IdleDll; // handle to dll for user idle
|
2002-11-04 18:57:47 +00:00
|
|
|
|
2002-11-13 05:37:55 +00:00
|
|
|
void StatusIcon(DWORD);
|
2002-11-04 18:57:47 +00:00
|
|
|
void SaveUserSettings();
|
|
|
|
void LoadUserSettings();
|
2002-11-20 20:06:40 +00:00
|
|
|
double GetDiskSize();
|
|
|
|
double GetDiskFree();
|
2002-11-18 22:15:21 +00:00
|
|
|
DWORD GetUserIdleTime();
|
2002-11-04 18:57:47 +00:00
|
|
|
void Syncronize(CProgressListCtrl*, vector<void*>*);
|
|
|
|
virtual void PostNcDestroy();
|
|
|
|
|
|
|
|
afx_msg void OnClose();
|
2002-11-20 20:06:40 +00:00
|
|
|
afx_msg void OnCommandAccountQuit();
|
2002-10-05 23:10:46 +00:00
|
|
|
afx_msg void OnCommandAccountLogin();
|
|
|
|
afx_msg void OnCommandHelpAbout();
|
|
|
|
afx_msg void OnCommandFileClose();
|
2002-11-13 05:37:55 +00:00
|
|
|
afx_msg void OnCommandStatusIconHide();
|
|
|
|
afx_msg void OnCommandStatusIconQuit();
|
|
|
|
afx_msg void OnCommandStatusIconShow();
|
2002-10-05 23:10:46 +00:00
|
|
|
afx_msg int OnCreate(LPCREATESTRUCT);
|
|
|
|
afx_msg BOOL OnNotify(WPARAM, LPARAM, LRESULT*);
|
|
|
|
afx_msg void OnPaint();
|
|
|
|
afx_msg void OnSize(UINT, int, int);
|
2002-11-13 05:37:55 +00:00
|
|
|
afx_msg LRESULT OnStatusIcon(WPARAM, LPARAM);
|
2002-10-05 23:10:46 +00:00
|
|
|
DECLARE_MESSAGE_MAP()
|
2002-08-12 00:51:42 +00:00
|
|
|
};
|
|
|
|
|
2002-11-04 18:57:47 +00:00
|
|
|
//////////
|
|
|
|
// class: CLoginDialog
|
|
|
|
// parent: CDialog
|
|
|
|
// description: gets login information from user.
|
2002-10-05 23:10:46 +00:00
|
|
|
class CLoginDialog : public CDialog
|
|
|
|
{
|
2002-08-12 00:51:42 +00:00
|
|
|
public:
|
2002-10-05 23:10:46 +00:00
|
|
|
CLoginDialog(UINT);
|
|
|
|
afx_msg BOOL OnInitDialog();
|
|
|
|
CString m_url;
|
|
|
|
CString m_auth;
|
|
|
|
|
|
|
|
protected:
|
|
|
|
afx_msg void OnOK();
|
|
|
|
DECLARE_MESSAGE_MAP()
|
2002-08-12 00:51:42 +00:00
|
|
|
};
|
2002-10-05 23:10:46 +00:00
|
|
|
|
2002-11-20 20:06:40 +00:00
|
|
|
//////////
|
|
|
|
// class: CQuitDialog
|
|
|
|
// parent: CDialog
|
|
|
|
// description: gets project quit information from user.
|
|
|
|
class CQuitDialog : public CDialog
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
CQuitDialog(UINT);
|
|
|
|
afx_msg BOOL OnInitDialog();
|
|
|
|
int m_sel;
|
|
|
|
|
|
|
|
protected:
|
|
|
|
afx_msg void OnOK();
|
|
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
};
|
|
|
|
|
2002-11-04 18:57:47 +00:00
|
|
|
// globals
|
|
|
|
|
|
|
|
extern CMyApp myApp;
|
|
|
|
extern CMainWindow* myWnd;
|
|
|
|
|
2002-10-06 01:14:37 +00:00
|
|
|
#endif
|