better handle moving sand saving of rom browser window location
This commit is contained in:
parent
167ceb11b1
commit
811a41d494
|
@ -9,8 +9,10 @@
|
|||
* *
|
||||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
#include "Settings/SettingType/SettingsType-Application.h"
|
||||
|
||||
extern "C" {
|
||||
extern "C"
|
||||
{
|
||||
void EnterLogOptions(HWND hwndOwner);
|
||||
}
|
||||
|
||||
|
@ -19,28 +21,13 @@ void EnterLogOptions(HWND hwndOwner);
|
|||
DWORD CALLBACK AboutBoxProc (HWND WndHandle, DWORD uMsg, DWORD wParam, DWORD lParam);
|
||||
DWORD CALLBACK MainGui_Proc (HWND WndHandle, DWORD uMsg, DWORD wParam, DWORD lParam);
|
||||
|
||||
bool CMainGui::RegisterWinClass ( void ) {
|
||||
WNDCLASS wcl;
|
||||
|
||||
wcl.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
|
||||
wcl.cbClsExtra = 0;
|
||||
wcl.cbWndExtra = 0;
|
||||
wcl.hIcon = LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_PJ64_Icon));
|
||||
wcl.hCursor = LoadCursor(NULL,IDC_ARROW);
|
||||
wcl.hInstance = GetModuleHandle(NULL);
|
||||
|
||||
wcl.lpfnWndProc = (WNDPROC)MainGui_Proc;
|
||||
wcl.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
|
||||
wcl.lpszMenuName = NULL;
|
||||
wcl.lpszClassName = "Project64 2.0";
|
||||
if (RegisterClass(&wcl) == 0) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMainGui::CMainGui (bool bMainWindow, const char * WindowTitle ) :
|
||||
CRomBrowser(m_hMainWindow,m_hStatusWnd),
|
||||
m_ThreadId(GetCurrentThreadId()),
|
||||
m_bMainWindow(bMainWindow)
|
||||
m_bMainWindow(bMainWindow),
|
||||
m_Created(false),
|
||||
m_AttachingMenu(false),
|
||||
m_MakingVisible(false)
|
||||
{
|
||||
#ifdef BETA_RELEASE
|
||||
m_hacked = false;
|
||||
|
@ -98,6 +85,26 @@ CMainGui::~CMainGui (void)
|
|||
WriteTrace(TraceDebug,__FUNCTION__ ": Done");
|
||||
}
|
||||
|
||||
bool CMainGui::RegisterWinClass ( void )
|
||||
{
|
||||
WNDCLASS wcl;
|
||||
|
||||
wcl.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
|
||||
wcl.cbClsExtra = 0;
|
||||
wcl.cbWndExtra = 0;
|
||||
wcl.hIcon = LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_PJ64_Icon));
|
||||
wcl.hCursor = LoadCursor(NULL,IDC_ARROW);
|
||||
wcl.hInstance = GetModuleHandle(NULL);
|
||||
|
||||
wcl.lpfnWndProc = (WNDPROC)MainGui_Proc;
|
||||
wcl.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
|
||||
wcl.lpszMenuName = NULL;
|
||||
wcl.lpszClassName = "Project64 2.0";
|
||||
if (RegisterClass(&wcl) == 0) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void RomBowserEnabledChanged (CMainGui * Gui)
|
||||
{
|
||||
if (Gui && g_Settings->LoadBool(RomBrowser_Enabled))
|
||||
|
@ -316,10 +323,12 @@ void CMainGui::Caption (LPCSTR Caption) {
|
|||
SetWindowText((HWND)m_hMainWindow,Caption);
|
||||
}
|
||||
|
||||
void CMainGui::Create (const char * WindowTitle) {
|
||||
void CMainGui::Create (const char * WindowTitle)
|
||||
{
|
||||
m_hMainWindow = (HWND)CreateWindow ("Project64 2.0", WindowTitle, WS_OVERLAPPED | WS_CLIPCHILDREN |
|
||||
WS_CLIPSIBLINGS | WS_SYSMENU | WS_MINIMIZEBOX,5,5,640,480,
|
||||
NULL,NULL,GetModuleHandle(NULL),this );
|
||||
m_Created = m_hMainWindow != NULL;
|
||||
}
|
||||
|
||||
void CMainGui::CreateStatusBar (void) {
|
||||
|
@ -372,14 +381,21 @@ void CMainGui::Resize (DWORD /*fwSizeType*/, WORD nWidth, WORD nHeight) {
|
|||
MoveWindow ( (HWND)m_hStatusWnd, 0, clrect.bottom - swrect.bottom,nWidth, nHeight, TRUE );
|
||||
}
|
||||
|
||||
void CMainGui::Show (bool Visible) {
|
||||
void CMainGui::Show (bool Visible)
|
||||
{
|
||||
m_MakingVisible = true;
|
||||
|
||||
CGuard Guard(m_CS);
|
||||
if (m_hMainWindow) {
|
||||
if (m_hMainWindow)
|
||||
{
|
||||
ShowWindow((HWND)m_hMainWindow,Visible?SW_SHOW:SW_HIDE);
|
||||
if (Visible && RomBrowserVisible()) {
|
||||
if (Visible && RomBrowserVisible())
|
||||
{
|
||||
RomBrowserToTop();
|
||||
}
|
||||
}
|
||||
|
||||
m_MakingVisible = false;
|
||||
}
|
||||
|
||||
void CMainGui::EnterLogOptions (void)
|
||||
|
@ -395,7 +411,8 @@ int CMainGui::Height (void) {
|
|||
return rect.bottom - rect.top;
|
||||
}
|
||||
|
||||
int CMainGui::Width (void) {
|
||||
int CMainGui::Width (void)
|
||||
{
|
||||
if (!m_hMainWindow) { return 0; }
|
||||
|
||||
RECT rect;
|
||||
|
@ -403,13 +420,16 @@ int CMainGui::Width (void) {
|
|||
return rect.right - rect.left;
|
||||
}
|
||||
|
||||
void CMainGui::SetPos (int X, int Y) {
|
||||
void CMainGui::SetPos (int X, int Y)
|
||||
{
|
||||
SetWindowPos((HWND)m_hMainWindow,NULL,X,Y,0,0,SWP_NOZORDER|SWP_NOSIZE);
|
||||
}
|
||||
|
||||
void CMainGui::SetWindowMenu (CBaseMenu * Menu) {
|
||||
HMENU hMenu = NULL;
|
||||
void CMainGui::SetWindowMenu (CBaseMenu * Menu)
|
||||
{
|
||||
m_AttachingMenu = true;
|
||||
|
||||
HMENU hMenu = NULL;
|
||||
{
|
||||
CGuard Guard(m_CS);
|
||||
m_Menu = Menu;
|
||||
|
@ -420,6 +440,8 @@ void CMainGui::SetWindowMenu (CBaseMenu * Menu) {
|
|||
{
|
||||
SetMenu((HWND)m_hMainWindow,hMenu);
|
||||
}
|
||||
|
||||
m_AttachingMenu = false;
|
||||
}
|
||||
|
||||
void CMainGui::RefreshMenu (void)
|
||||
|
@ -455,11 +477,13 @@ void CMainGui::ShowStatusBar ( bool ShowBar )
|
|||
|
||||
void CMainGui::SaveWindowLoc ( void )
|
||||
{
|
||||
bool flush = false;
|
||||
if (m_SaveMainWindowPos)
|
||||
{
|
||||
m_SaveMainWindowPos = false;
|
||||
g_Settings->SaveDword(UserInterface_MainWindowTop,m_SaveMainWindowTop);
|
||||
g_Settings->SaveDword(UserInterface_MainWindowLeft,m_SaveMainWindowLeft);
|
||||
flush = true;
|
||||
}
|
||||
|
||||
if (m_SaveRomBrowserPos)
|
||||
|
@ -467,8 +491,13 @@ void CMainGui::SaveWindowLoc ( void )
|
|||
m_SaveRomBrowserPos = false;
|
||||
g_Settings->SaveDword(RomBrowser_Top,m_SaveRomBrowserTop);
|
||||
g_Settings->SaveDword(RomBrowser_Left,m_SaveRomBrowserLeft);
|
||||
flush = true;
|
||||
}
|
||||
|
||||
if (flush)
|
||||
{
|
||||
CSettingTypeApplication::Flush();
|
||||
}
|
||||
}
|
||||
|
||||
DWORD CALLBACK CMainGui::MainGui_Proc (HWND hWnd, DWORD uMsg, DWORD wParam, DWORD lParam) {
|
||||
|
@ -534,44 +563,64 @@ DWORD CALLBACK CMainGui::MainGui_Proc (HWND hWnd, DWORD uMsg, DWORD wParam, DWOR
|
|||
break;
|
||||
case WM_MOVE:
|
||||
{
|
||||
CMainGui * _this = (CMainGui *)GetProp((HWND)hWnd,"Class");
|
||||
CMainGui * _this = (CMainGui *)GetProp((HWND)hWnd,"Class");
|
||||
|
||||
if (_this->m_bMainWindow)
|
||||
if (!_this->m_bMainWindow ||
|
||||
!_this->m_Created ||
|
||||
_this->m_AttachingMenu ||
|
||||
_this->m_MakingVisible ||
|
||||
IsIconic((HWND)hWnd) ||
|
||||
_this->ShowingRomBrowser())
|
||||
{
|
||||
if (!IsIconic((HWND)hWnd)) {
|
||||
//get the current position of the window
|
||||
RECT WinRect;
|
||||
GetWindowRect((HWND)hWnd, &WinRect );
|
||||
break;
|
||||
}
|
||||
|
||||
//save the location of the window
|
||||
if (!_this->ShowingRomBrowser()) {
|
||||
if (_this->RomBrowserVisible())
|
||||
{
|
||||
if (!IsZoomed((HWND)hWnd))
|
||||
{
|
||||
_this->m_SaveRomBrowserPos = true;
|
||||
_this->m_SaveRomBrowserTop = WinRect.top;
|
||||
_this->m_SaveRomBrowserLeft = WinRect.left;
|
||||
}
|
||||
} else {
|
||||
_this->m_SaveMainWindowPos = true;
|
||||
_this->m_SaveMainWindowTop = WinRect.top;
|
||||
_this->m_SaveMainWindowLeft = WinRect.left;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (CGuiSettings::bCPURunning() && g_BaseSystem) {
|
||||
if (g_Plugins->Gfx() && g_Plugins->Gfx()->MoveScreen) {
|
||||
WriteTrace(TraceGfxPlugin,__FUNCTION__ ": Starting");
|
||||
g_Plugins->Gfx()->MoveScreen((int)(short) LOWORD(lParam), (int)(short) HIWORD(lParam));
|
||||
WriteTrace(TraceGfxPlugin,__FUNCTION__ ": Done");
|
||||
}
|
||||
if (IsZoomed((HWND)hWnd))
|
||||
{
|
||||
if (_this->RomBrowserVisible())
|
||||
{
|
||||
// save that browser is maximized
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
//get the current position of the window
|
||||
RECT WinRect;
|
||||
GetWindowRect((HWND)hWnd, &WinRect );
|
||||
|
||||
//save the location of the window
|
||||
if (_this->RomBrowserVisible())
|
||||
{
|
||||
_this->m_SaveRomBrowserPos = true;
|
||||
_this->m_SaveRomBrowserTop = WinRect.top;
|
||||
_this->m_SaveRomBrowserLeft = WinRect.left;
|
||||
} else {
|
||||
_this->m_SaveMainWindowPos = true;
|
||||
_this->m_SaveMainWindowTop = WinRect.top;
|
||||
_this->m_SaveMainWindowLeft = WinRect.left;
|
||||
}
|
||||
KillTimer(hWnd,Timer_SetWindowPos);
|
||||
SetTimer(hWnd,Timer_SetWindowPos,1000,NULL);
|
||||
}
|
||||
if (CGuiSettings::bCPURunning() && g_BaseSystem)
|
||||
{
|
||||
if (g_Plugins->Gfx() && g_Plugins->Gfx()->MoveScreen)
|
||||
{
|
||||
WriteTrace(TraceGfxPlugin,__FUNCTION__ ": Starting");
|
||||
g_Plugins->Gfx()->MoveScreen((int)(short) LOWORD(lParam), (int)(short) HIWORD(lParam));
|
||||
WriteTrace(TraceGfxPlugin,__FUNCTION__ ": Done");
|
||||
}
|
||||
}
|
||||
break;
|
||||
#ifdef BETA_RELEASE
|
||||
case WM_TIMER:
|
||||
if (wParam == Timer_SetWindowPos)
|
||||
{
|
||||
KillTimer(hWnd,Timer_SetWindowPos);
|
||||
CMainGui * _this = (CMainGui *)GetProp((HWND)hWnd,"Class");
|
||||
_this->SaveWindowLoc();
|
||||
break;
|
||||
}
|
||||
#ifdef BETA_RELEASE
|
||||
{
|
||||
CMainGui * _this = (CMainGui *)GetProp((HWND)hWnd,"Class");
|
||||
static DWORD CallCount = 0;
|
||||
|
@ -592,8 +641,8 @@ DWORD CALLBACK CMainGui::MainGui_Proc (HWND hWnd, DWORD uMsg, DWORD wParam, DWOR
|
|||
CallCount++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
break;
|
||||
case WM_SIZE:
|
||||
{
|
||||
CMainGui * _this = (CMainGui *)GetProp((HWND)hWnd,"Class");
|
||||
|
|
|
@ -31,6 +31,8 @@ class CMainGui :
|
|||
{
|
||||
enum { StatusBarID = 400 };
|
||||
|
||||
enum { Timer_SetWindowPos = 1 };
|
||||
|
||||
typedef struct
|
||||
{
|
||||
CN64System * system;
|
||||
|
@ -112,6 +114,10 @@ private:
|
|||
DWORD m_InvalidExeMsg;
|
||||
#endif
|
||||
const bool m_bMainWindow;
|
||||
bool m_Created;
|
||||
bool m_AttachingMenu;
|
||||
bool m_MakingVisible;
|
||||
|
||||
CriticalSection m_CS;
|
||||
|
||||
bool m_SaveMainWindowPos;
|
||||
|
|
|
@ -1556,11 +1556,17 @@ void CRomBrowser::SelectRomDir(void)
|
|||
}
|
||||
}
|
||||
|
||||
void CRomBrowser::FixRomListWindow (void) {
|
||||
void CRomBrowser::FixRomListWindow (void)
|
||||
{
|
||||
//Change the window Style
|
||||
long Style = GetWindowLong((HWND)m_MainWindow,GWL_STYLE) | WS_SIZEBOX | WS_MAXIMIZEBOX;
|
||||
long Style = GetWindowLong(m_MainWindow,GWL_STYLE) | WS_SIZEBOX | WS_MAXIMIZEBOX;
|
||||
SetWindowLong((HWND)m_MainWindow,GWL_STYLE,Style);
|
||||
|
||||
DWORD X, Y;
|
||||
g_Settings->LoadDword(RomBrowser_Top,(DWORD &)Y);
|
||||
g_Settings->LoadDword(RomBrowser_Left,(DWORD &)X);
|
||||
SetWindowPos(m_MainWindow,NULL,X,Y,0,0,SWP_NOZORDER|SWP_NOSIZE);
|
||||
|
||||
//Fix height and width
|
||||
int Width = g_Settings->LoadDword(RomBrowser_Width);
|
||||
int Height = g_Settings->LoadDword(RomBrowser_Height);
|
||||
|
|
Loading…
Reference in New Issue