diff options
Diffstat (limited to 'c/main.cpp')
-rw-r--r-- | c/main.cpp | 159 |
1 files changed, 60 insertions, 99 deletions
@@ -6,8 +6,8 @@ #include "resource.h" #include "defs.h" -EpisodeListView g_elv; DataListView g_dlv; +EpisodeListView g_elv; atom_t g_aThread; char g_szLimitScreenwriter[64] = {0}; @@ -17,11 +17,11 @@ HMENU g_hPopupMenu; HWND g_hFocus; HWND g_hWnd; HWND g_hWndStatus; +int g_bThemes; int g_bViewTVOriginal = 1; int g_bViewWatched = 1; int g_bThread = 0; int g_iDPI = -1; -static int g_bThemes; static int g_cxVScroll; static LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); static INT_PTR CALLBACK AboutDlgProc(HWND, UINT, WPARAM, LPARAM); @@ -34,21 +34,17 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow) { - char *argv[2]; - HMODULE hModule; HWND hWnd; LPTSTR tszErr; - MSG msg; - INITCOMMONCONTROLSEX icc; - WNDCLASSEX wc; /* Set constant values. */ - hModule = LoadLibrary(TEXT("uxtheme.dll")); - g_bThemes = hModule && GetProcAddress(hModule,"SetWindowTheme"); + HMODULE hModule = LoadLibrary(TEXT("uxtheme.dll")); + g_bThemes = hModule && GetProcAddress(hModule, "SetWindowTheme"); if (hModule) FreeLibrary(hModule); g_cxVScroll = GetSystemMetrics(SM_CXVSCROLL); /* Initialize Prolog. */ + char *argv[2]; argv[0] = (char *)"EpisodeBrowser"; argv[1] = NULL; tszErr = TEXT("Could not initialize Prolog."); @@ -57,6 +53,7 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, if (!Attach()) goto f; /* Initialize common controls, load menu and register window class. */ + INITCOMMONCONTROLSEX icc; icc.dwSize = sizeof(icc); icc.dwICC = ICC_WIN95_CLASSES; tszErr = TEXT("Could not initialize common controls."); @@ -65,6 +62,7 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, g_hPopupMenu = LoadMenu(NULL, MAKEINTRESOURCE(IDR_POPUPMENU)); g_hPopupMenu = GetSubMenu(g_hPopupMenu, 0); + WNDCLASSEX wc; memset(&wc, 0, sizeof(WNDCLASSEX)); wc.cbSize = sizeof(WNDCLASSEX); wc.lpfnWndProc = WndProc; @@ -95,8 +93,9 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, /* Populate episode list view. */ Pl("track_episodes", "update_tracked_episodes", ""); g_elv.Update(); - g_elv.SelectFocus(); + g_elv.RestoreFocus(); + MSG msg; while (GetMessage(&msg, NULL, 0, 0) > 0) { if (IsDialogMessage(hWnd, &msg)) continue; TranslateMessage(&msg); @@ -116,31 +115,37 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) switch (uMsg) { case WM_CREATE: { - HMODULE hModule; - UINT (*GetDpiForWindow)(HWND); g_hWnd = hWnd; - g_iDPI = 96; - hModule = LoadLibrary(TEXT("User32.dll")); + + /* Get DPI. */ + UINT (*GetDpiForWindow)(HWND); + HMODULE hModule = LoadLibrary(TEXT("User32.dll")); if (hModule && (GetDpiForWindow = (UINT (*)(HWND))GetProcAddress(hModule, "GetDpiForWindow"))) { g_iDPI = GetDpiForWindow(g_hWnd); FreeLibrary(hModule); - } + } else + g_iDPI = 96; + + /* Set window size. */ SetWindowPos(hWnd, NULL, -1, -1, Dpi(510), Dpi(400), SWP_NOMOVE); + + /* Get and apply saved view settings. */ if (Pl("cfg","get_view_watched","i",&g_bViewWatched)) CheckMenuItem(GetMenu(hWnd), IDM_VIEW_WATCHED, g_bViewWatched? MF_CHECKED: MF_UNCHECKED); + if (Pl("cfg","get_view_tv_original","i",&g_bViewTVOriginal)) CheckMenuItem(GetMenu(hWnd), IDM_VIEW_TV_ORIGINAL, g_bViewTVOriginal? MF_CHECKED: MF_UNCHECKED); - { - char *sz; - if (!Pl("cfg","get_limit_screenwriter","s",&sz)) - goto s; - strcpy_s(g_szLimitScreenwriter, - sizeof(g_szLimitScreenwriter), sz); - CheckMenuItem(GetMenu(hWnd), IDM_VIEW_OTHERS, - g_szLimitScreenwriter[0]? MF_UNCHECKED: MF_CHECKED); - } + + char *sz; + if (!Pl("cfg","get_limit_screenwriter","s",&sz)) + goto s; + strcpy_s(g_szLimitScreenwriter, + sizeof(g_szLimitScreenwriter), sz); + CheckMenuItem(GetMenu(hWnd), IDM_VIEW_OTHERS, + g_szLimitScreenwriter[0]? MF_UNCHECKED: MF_CHECKED); + s: SetupFonts(); g_dlv.Create(); g_elv.Create(); @@ -153,13 +158,7 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) break; case WM_DESTROY: { - LVITEM lvi; - HWND hElv; - hElv = g_elv.HWnd(); - lvi.mask = LVIF_PARAM; - if ((lvi.iItem=ListView_GetNextItem(hElv,-1,LVNI_FOCUSED)) != -1 - && ListView_GetItem(hElv, &lvi)) - Pl("cfg","set_focus","I",lvi.lParam); + g_elv.SaveFocus(); PostQuitMessage(0); break; } @@ -170,7 +169,8 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) case WM_GETMINMAXINFO: { LPMINMAXINFO lpMMI = (LPMINMAXINFO)lParam; - lpMMI->ptMinTrackSize.y = g_dlv.Height(0)+80; + lpMMI->ptMinTrackSize.x = Dpi(220); + lpMMI->ptMinTrackSize.y = g_dlv.Height(0)+Dpi(180); break; } case WM_THEMECHANGED: @@ -259,38 +259,32 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) case IDM_VIEW_WATCHED: { int iEpFocus; - HWND hElv; - hElv = g_elv.HWnd(); CheckMenuItem(GetMenu(hWnd), IDM_VIEW_WATCHED, g_bViewWatched? MF_UNCHECKED: MF_CHECKED); g_bViewWatched = !g_bViewWatched; g_elv.Update(); Pl("cfg","set_view_watched","I",g_bViewWatched); - iEpFocus = ListView_GetNextItem(hElv, -1, LVNI_FOCUSED); + iEpFocus = ListView_GetNextItem(g_elv.HWnd(), -1, LVNI_FOCUSED); if (iEpFocus == -1) break; - ListView_EnsureVisible(hElv, iEpFocus, TRUE); + ListView_EnsureVisible(g_elv.HWnd(), iEpFocus, TRUE); break; } case IDM_VIEW_TV_ORIGINAL: { int iEpFocus; - HWND hElv; - hElv = g_elv.HWnd(); CheckMenuItem(GetMenu(hWnd), IDM_VIEW_TV_ORIGINAL, g_bViewTVOriginal? MF_UNCHECKED: MF_CHECKED); g_bViewTVOriginal = !g_bViewTVOriginal; g_elv.Update(); Pl("cfg","set_view_tv_original","I",g_bViewTVOriginal); - iEpFocus = ListView_GetNextItem(hElv, -1, LVNI_FOCUSED); + iEpFocus = ListView_GetNextItem(g_elv.HWnd(), -1, LVNI_FOCUSED); if (iEpFocus == -1) break; - ListView_EnsureVisible(hElv, iEpFocus, TRUE); + ListView_EnsureVisible(g_elv.HWnd(), iEpFocus, TRUE); break; } case IDM_VIEW_OTHERS: /* Show/hide other screenwriters. */ { int iEpFocus; - HWND hElv; - hElv = g_elv.HWnd(); if (g_szLimitScreenwriter[0]) { CheckMenuItem(GetMenu(hWnd), IDM_VIEW_OTHERS, MF_CHECKED); @@ -298,11 +292,11 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) } else { char *sz; LVITEM lvi; - iEpFocus = ListView_GetNextItem(hElv, -1, LVNI_FOCUSED); + iEpFocus = ListView_GetNextItem(g_elv.HWnd(), -1, LVNI_FOCUSED); if (iEpFocus == -1) break; lvi.iItem = iEpFocus; lvi.mask = LVIF_PARAM; - if (!ListView_GetItem(hElv, &lvi)) break; + if (!ListView_GetItem(g_elv.HWnd(), &lvi)) break; if (!Pl("episode_data","episode_datum","ISs", lvi.lParam,"Screenwriter",&sz)) break; @@ -314,9 +308,9 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) g_elv.Update(); Pl("cfg","set_limit_screenwriter","S", g_szLimitScreenwriter); - iEpFocus = ListView_GetNextItem(hElv, -1, LVNI_FOCUSED); + iEpFocus = ListView_GetNextItem(g_elv.HWnd(), -1, LVNI_FOCUSED); if (iEpFocus == -1) break; - ListView_EnsureVisible(hElv, iEpFocus, TRUE); + ListView_EnsureVisible(g_elv.HWnd(), iEpFocus, TRUE); break; } case IDM_WATCH_LOCALLY: @@ -339,8 +333,6 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { int iRating; LVITEM lvi; - HWND hElv; - hElv = g_elv.HWnd(); /* Look through selected items, applying the * selected command to each one. */ @@ -348,8 +340,8 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) lvi.mask = LVIF_PARAM; lvi.iItem = -1; while ((lvi.iItem = ListView_GetNextItem( - hElv, lvi.iItem, LVNI_SELECTED)) != -1) { - if (!ListView_GetItem(hElv, &lvi)) goto b; + g_elv.HWnd(), lvi.iItem, LVNI_SELECTED)) != -1) { + if (!ListView_GetItem(g_elv.HWnd(), &lvi)) goto b; switch (LOWORD(wParam)) { case IDM_WATCH_LOCALLY: @@ -519,34 +511,30 @@ UpdateLayout() { int cxColumn, cyDlv, yStatus; RECT rc, rcStatus; - HWND hDlv, hElv; - - hDlv = g_dlv.HWnd(); - hElv = g_elv.HWnd(); GetClientRect(g_hWnd, &rc); GetClientRect(g_hWndStatus, &rcStatus); yStatus = rcStatus.bottom-rcStatus.top; /* Resize data list view. */ - SendMessage(hDlv, WM_SETREDRAW, FALSE, 0); - SendMessage(hElv, WM_SETREDRAW, FALSE, 0); + SendMessage(g_dlv.HWnd(), WM_SETREDRAW, FALSE, 0); + SendMessage(g_elv.HWnd(), WM_SETREDRAW, FALSE, 0); cyDlv = rc.bottom-yStatus-g_dlv.Height(DLVSIKEY); - MoveWindow(hDlv, 0, cyDlv, rc.right, rc.bottom-yStatus-cyDlv, TRUE); - ListView_SetColumnWidth(hDlv, DLVSIKEY, LVSCW_AUTOSIZE); - cxColumn = ListView_GetColumnWidth(hDlv, 0)+4; - ListView_SetColumnWidth(hDlv, DLVSIKEY, cxColumn); - ListView_SetColumnWidth(hDlv, DLVSIVALUE, rc.right-cxColumn-g_cxVScroll-4); + MoveWindow(g_dlv.HWnd(), 0, cyDlv, rc.right, rc.bottom-yStatus-cyDlv, TRUE); + ListView_SetColumnWidth(g_dlv.HWnd(), DLVSIKEY, LVSCW_AUTOSIZE); + cxColumn = ListView_GetColumnWidth(g_dlv.HWnd(), 0)+4; + ListView_SetColumnWidth(g_dlv.HWnd(), DLVSIKEY, cxColumn); + ListView_SetColumnWidth(g_dlv.HWnd(), DLVSIVALUE, rc.right-cxColumn-g_cxVScroll-4); /* Resize episode list view. */ - MoveWindow(hElv, 0, 0, rc.right, cyDlv+1, TRUE); - ListView_SetColumnWidth(hElv, ELVSIEPISODE, LVSCW_AUTOSIZE); - cxColumn = ListView_GetColumnWidth(hElv, ELVSIEPISODE)+4; - ListView_SetColumnWidth(hElv, ELVSIEPISODE, cxColumn); - cxColumn += ListView_GetColumnWidth(hElv, ELVSIRATING); - ListView_SetColumnWidth(hElv, ELVSITITLE, rc.right-cxColumn-g_cxVScroll-4); - SendMessage(hElv, WM_SETREDRAW, TRUE, 0); - SendMessage(hDlv, WM_SETREDRAW, TRUE, 0); + MoveWindow(g_elv.HWnd(), 0, 0, rc.right, cyDlv+1, TRUE); + ListView_SetColumnWidth(g_elv.HWnd(), ELVSIEPISODE, LVSCW_AUTOSIZE); + cxColumn = ListView_GetColumnWidth(g_elv.HWnd(), ELVSIEPISODE)+4; + ListView_SetColumnWidth(g_elv.HWnd(), ELVSIEPISODE, cxColumn); + cxColumn += ListView_GetColumnWidth(g_elv.HWnd(), ELVSIRATING); + ListView_SetColumnWidth(g_elv.HWnd(), ELVSITITLE, rc.right-cxColumn-g_cxVScroll-4); + SendMessage(g_elv.HWnd(), WM_SETREDRAW, TRUE, 0); + SendMessage(g_dlv.HWnd(), WM_SETREDRAW, TRUE, 0); /* Resize status bar parts. */ { @@ -560,34 +548,7 @@ UpdateLayout() void UpdateTheme() { - DWORD dwStyle; - LPTSTR tszTheme; - WORD wAction; - HWND hDlv, hElv; - - hDlv = g_dlv.HWnd(); - hElv = g_elv.HWnd(); - - if (!g_bThemes) return; - if (IsThemeActive()) { - dwStyle = LVS_EX_DOUBLEBUFFER; - tszTheme = TEXT("Explorer"); - wAction = UIS_SET; - } else { - dwStyle = 0; - tszTheme = NULL; - wAction = UIS_CLEAR; - } - - /* Use modern "Explorer" theme. */ - SetWindowTheme(hElv, tszTheme, NULL); - SetWindowTheme(hDlv, tszTheme, NULL); - - /* The modern theme requires double buffering. */ - ListView_SetExtendedListViewStyleEx(hElv, LVS_EX_DOUBLEBUFFER, dwStyle); - ListView_SetExtendedListViewStyleEx(hDlv, LVS_EX_DOUBLEBUFFER, dwStyle); - - /* Hide focus rectangles. */ - SendMessage(hElv, WM_UPDATEUISTATE, MAKEWPARAM(wAction, UISF_HIDEFOCUS), 0); - SendMessage(hDlv, WM_UPDATEUISTATE, MAKEWPARAM(wAction, UISF_HIDEFOCUS), 0); + BOOL bThemeActive = IsThemeActive(); + g_dlv.UpdateTheme(bThemeActive); + g_elv.UpdateTheme(bThemeActive); } |