diff options
| author | George Hazan <george.hazan@gmail.com> | 2023-08-04 12:23:29 +0300 | 
|---|---|---|
| committer | George Hazan <george.hazan@gmail.com> | 2023-08-04 12:23:33 +0300 | 
| commit | ecfb490f1535aaf70d80aca4dfeee47de99f28f3 (patch) | |
| tree | c0fbeb0bcb14bed33fa7f014bcc31185bf6d503f /plugins | |
| parent | d75f7701a7c242b9953ab0e867a7eaad72c0c319 (diff) | |
fixes #3607 (NewStory: нужно засерять неактуальные кнопки в глобальном поиске) + some code reordering
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/NewStory/NewStory.vcxproj | 2 | ||||
| -rw-r--r-- | plugins/NewStory/NewStory.vcxproj.filters | 6 | ||||
| -rw-r--r-- | plugins/NewStory/src/history.h | 1 | ||||
| -rw-r--r-- | plugins/NewStory/src/history_dlg.cpp (renamed from plugins/NewStory/src/history.cpp) | 405 | ||||
| -rw-r--r-- | plugins/NewStory/src/main.cpp | 32 | 
5 files changed, 211 insertions, 235 deletions
diff --git a/plugins/NewStory/NewStory.vcxproj b/plugins/NewStory/NewStory.vcxproj index 4e626a5301..f21c2137b5 100644 --- a/plugins/NewStory/NewStory.vcxproj +++ b/plugins/NewStory/NewStory.vcxproj @@ -33,9 +33,9 @@    <ItemGroup>      <ClCompile Include="src\calendartool.cpp" />      <ClCompile Include="src\fonts.cpp" /> -    <ClCompile Include="src\history.cpp" />      <ClCompile Include="src\history_array.cpp" />      <ClCompile Include="src\history_control.cpp" /> +    <ClCompile Include="src\history_dlg.cpp" />      <ClCompile Include="src\history_log.cpp" />      <ClCompile Include="src\history_menus.cpp" />      <ClCompile Include="src\history_svc.cpp" /> diff --git a/plugins/NewStory/NewStory.vcxproj.filters b/plugins/NewStory/NewStory.vcxproj.filters index 3dd5b85af9..f24e76a215 100644 --- a/plugins/NewStory/NewStory.vcxproj.filters +++ b/plugins/NewStory/NewStory.vcxproj.filters @@ -8,15 +8,15 @@      <ClCompile Include="src\fonts.cpp">        <Filter>Source Files</Filter>      </ClCompile> -    <ClCompile Include="src\history.cpp"> -      <Filter>Source Files</Filter> -    </ClCompile>      <ClCompile Include="src\history_array.cpp">        <Filter>Source Files</Filter>      </ClCompile>      <ClCompile Include="src\history_control.cpp">        <Filter>Source Files</Filter>      </ClCompile> +    <ClCompile Include="src\history_dlg.cpp"> +      <Filter>Source Files</Filter> +    </ClCompile>      <ClCompile Include="src\history_log.cpp">        <Filter>Source Files</Filter>      </ClCompile> diff --git a/plugins/NewStory/src/history.h b/plugins/NewStory/src/history.h index 2037290466..4c477b6bab 100644 --- a/plugins/NewStory/src/history.h +++ b/plugins/NewStory/src/history.h @@ -29,7 +29,6 @@ enum  extern MWindowList g_hNewstoryWindows, g_hNewstoryLogs; -void InitHistory();  void InitMenus();  INT_PTR svcShowNewstory(WPARAM, LPARAM); diff --git a/plugins/NewStory/src/history.cpp b/plugins/NewStory/src/history_dlg.cpp index 7ff53a2598..2443370197 100644 --- a/plugins/NewStory/src/history.cpp +++ b/plugins/NewStory/src/history_dlg.cpp @@ -6,39 +6,6 @@  #include "stdafx.h" -MWindowList g_hNewstoryWindows = 0, g_hNewstoryLogs = 0; - -int evtEventAdded(WPARAM hContact, LPARAM lParam) -{ -	if (HWND hwnd = WindowList_Find(g_hNewstoryLogs, hContact)) -		SendMessage(hwnd, UM_ADDEVENT, hContact, lParam); -	return 0; -} - -int evtEventDeleted(WPARAM hContact, LPARAM lParam) -{ -	if (HWND hwnd = WindowList_Find(g_hNewstoryLogs, hContact)) -		SendMessage(hwnd, UM_REMOVEEVENT, hContact, lParam); -	return 0; -} - -int evtEventEdited(WPARAM hContact, LPARAM lParam) -{ -	if (HWND hwnd = WindowList_Find(g_hNewstoryLogs, hContact)) -		SendMessage(hwnd, UM_EDITEVENT, hContact, lParam); -	return 0; -} - -void InitHistory() -{ -	g_hNewstoryLogs = WindowList_Create(); -	g_hNewstoryWindows = WindowList_Create(); - -	HookEvent(ME_DB_EVENT_ADDED, evtEventAdded); -	HookEvent(ME_DB_EVENT_DELETED, evtEventDeleted); -	HookEvent(ME_DB_EVENT_EDITED, evtEventEdited); -} -  /////////////////////////////////////////////////////////////////////////////////////////  // Main history dialog @@ -103,7 +70,7 @@ void LayoutFilterBar(HDWP hDwp, int x, int y, int w, InfoBarEvents *ib)  		x + 32 + WND_SPACING, y + (16 + WND_SPACING) * 2, w - WND_SPACING - 32, 16, SWP_NOZORDER);  } -const char* pSettings[] = +static const char* pSettings[] =  {  	LPGEN("FirstName"),  	LPGEN("LastName"), @@ -226,141 +193,6 @@ class CHistoryDlg : public CDlgBase  		ShowWindow(m_timeTree.GetHwnd(), cmd);  	} -	void LayoutHistoryWnd() -	{ -		int i; -		RECT rc; -		GetClientRect(m_hwnd, &rc); -		int x, y; // tmp vars -		int w = rc.right - rc.left; -		int h = rc.bottom - rc.top; - -		HDWP hDwp = BeginDeferWindowPos(51); - -		// toolbar -		int hToolBar = TBTN_SIZE + WND_SPACING; -		x = WND_SPACING; -		int btnReverse = -1; -		for (i = 0; i < TBTN_COUNT; ++i) { -			hDwp = DeferWindowPos(hDwp, m_hwndBtnToolbar[i], 0, -				x, WND_SPACING, -				TBTN_SIZE, TBTN_SIZE, -				SWP_NOZORDER); -			x += TBTN_SIZE + tbtnSpacing[i]; -			if (tbtnSpacing[i] < 0) { -				btnReverse = i; -				break; -			} -		} -		x = w - WND_SPACING - TBTN_SIZE; -		for (i = TBTN_COUNT - 1; i > btnReverse; --i) { -			hDwp = DeferWindowPos(hDwp, m_hwndBtnToolbar[i], 0, -				x, WND_SPACING, -				TBTN_SIZE, TBTN_SIZE, -				SWP_NOZORDER); -			x -= TBTN_SIZE + tbtnSpacing[i - 1]; -		} - -		// infobar -		//	hDwp = DeferWindowPos(hDwp, hwndIcoProtocol, 0, -		//		w-100+WND_SPACING, WND_SPACING, -		//		16, 16, -		//		SWP_NOZORDER); -		//	hDwp = DeferWindowPos(hDwp, hwndTxtNickname, 0, -		//		w-100+WND_SPACING*2+16, WND_SPACING, -		//		100, 16, -		//		SWP_NOZORDER); -		//	hDwp = DeferWindowPos(hDwp, hwndTxtUID, 0, -		//		w-100+WND_SPACING*2+16, WND_SPACING*2+16, -		//		100, 16, -		//		SWP_NOZORDER); - -		// filter bar -		int hFilterBar = 0; -		if (m_dwOptions & WND_OPT_FILTERBAR) { -			hFilterBar = WND_SPACING + (16 + WND_SPACING) * 3; -			LayoutFilterBar(hDwp, WND_SPACING + (WND_SPACING + 75) * 0, WND_SPACING * 2 + hToolBar, 75, &ibMessages); -			LayoutFilterBar(hDwp, WND_SPACING + (WND_SPACING + 75) * 1, WND_SPACING * 2 + hToolBar, 75, &ibFiles); -			LayoutFilterBar(hDwp, WND_SPACING + (WND_SPACING + 75) * 2, WND_SPACING * 2 + hToolBar, 75, &ibUrls); -			LayoutFilterBar(hDwp, WND_SPACING + (WND_SPACING + 75) * 3, WND_SPACING * 2 + hToolBar, 75, &ibTotal); - -			GetWindowRect(m_hwndChkDateFrom, &rc); -			x = rc.right - rc.left; -			GetWindowRect(m_hwndDateFrom, &rc); -			y = hToolBar + WND_SPACING + (WND_SPACING + (16 + WND_SPACING) * 3 - (rc.bottom - rc.top) * 2 - WND_SPACING) / 2; -			hDwp = DeferWindowPos(hDwp, m_hwndChkDateFrom, 0, -				w - x - (rc.right - rc.left) - WND_SPACING * 2, y, -				x, rc.bottom - rc.top, -				SWP_NOZORDER); -			hDwp = DeferWindowPos(hDwp, m_hwndDateFrom, 0, -				w - (rc.right - rc.left) - WND_SPACING, y, -				rc.right - rc.left, rc.bottom - rc.top, -				SWP_NOZORDER); - -			hDwp = DeferWindowPos(hDwp, m_hwndChkDateTo, 0, -				w - x - (rc.right - rc.left) - WND_SPACING * 2, y + (rc.bottom - rc.top) + WND_SPACING, -				x, rc.bottom - rc.top, -				SWP_NOZORDER); -			hDwp = DeferWindowPos(hDwp, m_hwndDateTo, 0, -				w - (rc.right - rc.left) - WND_SPACING, y + (rc.bottom - rc.top) + WND_SPACING, -				rc.right - rc.left, rc.bottom - rc.top, -				SWP_NOZORDER); - -			hDwp = DeferWindowPos(hDwp, GetDlgItem(m_hwnd, IDC_IB_SEPARATOR), 0, -				WND_SPACING, hToolBar + WND_SPACING, -				w - WND_SPACING * 2, 2, -				SWP_NOZORDER); -		} - -		// general -		GetWindowRect(m_hwndStatus, &rc); -		int hStatus = rc.bottom - rc.top; -		hDwp = DeferWindowPos(hDwp, m_hwndStatus, 0, -			0, h - hStatus, -			w, hStatus, -			SWP_NOZORDER); - -		// search bar -		int hSearch = 0; -		if (m_dwOptions & WND_OPT_SEARCHBAR) { -			GetWindowRect(edtSearchText.GetHwnd(), &rc); -			hSearch = rc.bottom - rc.top; -			hDwp = DeferWindowPos(hDwp, m_hwndBtnCloseSearch, 0, -				WND_SPACING, h - hSearch - hStatus - WND_SPACING, -				TBTN_SIZE, hSearch, SWP_NOZORDER); -			hDwp = DeferWindowPos(hDwp, edtSearchText.GetHwnd(), 0, -				TBTN_SIZE + WND_SPACING * 2, h - hSearch - hStatus - WND_SPACING, -				w - WND_SPACING * 4 - TBTN_SIZE * 3, hSearch, -				SWP_NOZORDER); -			hDwp = DeferWindowPos(hDwp, btnFindPrev.GetHwnd(), 0, -				w - WND_SPACING - TBTN_SIZE * 2, h - hSearch - hStatus - WND_SPACING, -				TBTN_SIZE, hSearch, -				SWP_NOZORDER); -			hDwp = DeferWindowPos(hDwp, btnFindNext.GetHwnd(), 0, -				w - WND_SPACING - TBTN_SIZE * 1, h - hSearch - hStatus - WND_SPACING, -				TBTN_SIZE, hSearch, -				SWP_NOZORDER); -			hSearch += WND_SPACING; -		} - -		// time tree bar -		int hTimeTree = 0; -		if (m_dwOptions & WND_OPT_TIMETREE) { -			hTimeTree = 100; // need to calculate correctly -			hDwp = DeferWindowPos(hDwp, m_timeTree.GetHwnd(), 0, -				WND_SPACING, WND_SPACING + hToolBar + hFilterBar, -				hTimeTree, h - WND_SPACING * 2 - hFilterBar - hToolBar - hSearch - hStatus, -				SWP_NOZORDER); -		} - -		hDwp = DeferWindowPos(hDwp, m_histControl.GetHwnd(), 0, -			WND_SPACING + hTimeTree, WND_SPACING + hToolBar + hFilterBar, -			w - WND_SPACING * 2 - hTimeTree, h - WND_SPACING * 2 - hFilterBar - hToolBar - hSearch - hStatus, -			SWP_NOZORDER); - -		EndDeferWindowPos(hDwp); -	} -  	void UpdateTitle()  	{  		switch (m_hContact) { @@ -515,8 +347,8 @@ public:  		SendMessage(m_hwndStatus, SB_SETMINHEIGHT, GetSystemMetrics(SM_CYSMICON), 0);  		// filterbar -		SendMessage(m_hwndBtnToolbar[TBTN_FILTER], BUTTONSETASPUSHBTN, 0, 0); -		SendMessage(m_hwndBtnToolbar[TBTN_SEARCH], BUTTONSETASPUSHBTN, 0, 0); +		btnFilter.MakePush(); +		btnSearch.MakePush();  		m_hwndChkDateFrom = GetDlgItem(m_hwnd, IDC_CHK_DATE_FROM);  		m_hwndChkDateTo = GetDlgItem(m_hwnd, IDC_CHK_DATE_TO); @@ -529,6 +361,7 @@ public:  		SendMessage(ibMessages.hwndIcoIn, BUTTONSETASFLATBTN, 0, 0);  		SendMessage(ibMessages.hwndIcoIn, BUTTONSETASPUSHBTN, 0, 0);  		SendMessage(ibMessages.hwndIcoIn, BM_SETCHECK, BST_CHECKED, 0); +  		ibMessages.hwndTxtIn = GetDlgItem(m_hwnd, IDC_TXT_MESSAGES_IN);  		ibMessages.hwndIcoOut = GetDlgItem(m_hwnd, IDC_ICO_MESSAGES_OUT);  		SendMessage(ibMessages.hwndIcoOut, BUTTONSETASFLATBTN, 0, 0); @@ -540,11 +373,13 @@ public:  		ibFiles.hwndTxt = GetDlgItem(m_hwnd, IDC_TXT_FILES);  		ibFiles.hwndIcoIn = GetDlgItem(m_hwnd, IDC_ICO_FILES_IN);  		SendMessage(ibFiles.hwndIcoIn, BUTTONSETASFLATBTN, 0, 0); +  		SendMessage(ibFiles.hwndIcoIn, BUTTONSETASPUSHBTN, 0, 0);  		SendMessage(ibFiles.hwndIcoIn, BM_SETCHECK, BST_CHECKED, 0); +  		ibFiles.hwndTxtIn = GetDlgItem(m_hwnd, IDC_TXT_FILES_IN);  		ibFiles.hwndIcoOut = GetDlgItem(m_hwnd, IDC_ICO_FILES_OUT); -		SendMessage(ibFiles.hwndIcoOut, BUTTONSETASFLATBTN, 0, 0); +		SendMessage(ibFiles.hwndIcoOut, BUTTONSETASFLATBTN, 0, 0);    		SendMessage(ibFiles.hwndIcoOut, BUTTONSETASPUSHBTN, 0, 0);  		SendMessage(ibFiles.hwndIcoOut, BM_SETCHECK, BST_CHECKED, 0);  		ibFiles.hwndTxtOut = GetDlgItem(m_hwnd, IDC_TXT_FILES_OUT); @@ -555,6 +390,7 @@ public:  		SendMessage(ibUrls.hwndIcoIn, BUTTONSETASFLATBTN, 0, 0);  		SendMessage(ibUrls.hwndIcoIn, BUTTONSETASPUSHBTN, 0, 0);  		SendMessage(ibUrls.hwndIcoIn, BM_SETCHECK, BST_CHECKED, 0); +  		ibUrls.hwndTxtIn = GetDlgItem(m_hwnd, IDC_TXT_URLS_IN);  		ibUrls.hwndIcoOut = GetDlgItem(m_hwnd, IDC_ICO_URLS_OUT);  		SendMessage(ibUrls.hwndIcoOut, BUTTONSETASFLATBTN, 0, 0); @@ -568,6 +404,7 @@ public:  		SendMessage(ibTotal.hwndIcoIn, BUTTONSETASFLATBTN, 0, 0);  		SendMessage(ibTotal.hwndIcoIn, BUTTONSETASPUSHBTN, 0, 0);  		SendMessage(ibTotal.hwndIcoIn, BM_SETCHECK, BST_CHECKED, 0); +  		ibTotal.hwndTxtIn = GetDlgItem(m_hwnd, IDC_TXT_TOTAL_IN);  		ibTotal.hwndIcoOut = GetDlgItem(m_hwnd, IDC_ICO_TOTAL_OUT);  		SendMessage(ibTotal.hwndIcoOut, BUTTONSETASFLATBTN, 0, 0); @@ -583,10 +420,6 @@ public:  		UpdateTitle();  		if (m_hContact != INVALID_CONTACT_ID) { -			btnSendMsg.Disable(); -			btnUserInfo.Disable(); -			btnUserMenu.Disable(); -  			Utils_RestoreWindowPosition(m_hwnd, m_hContact, MODULENAME, "wnd_");  			ADDEVENTS tmp = { m_hContact, 0, -1 }; @@ -595,6 +428,10 @@ public:  			SetFocus(m_histControl.GetHwnd());  		}  		else { +			btnSendMsg.Disable(); +			btnUserInfo.Disable(); +			btnUserMenu.Disable(); +  			Utils_RestoreWindowPosition(m_hwnd, 0, MODULENAME, "glb_");  			m_dwOptions |= WND_OPT_SEARCHBAR;  		} @@ -639,6 +476,141 @@ public:  		return false;  	} +	void OnResize() override +	{ +		int i; +		RECT rc; +		GetClientRect(m_hwnd, &rc); +		int x, y; // tmp vars +		int w = rc.right - rc.left; +		int h = rc.bottom - rc.top; + +		HDWP hDwp = BeginDeferWindowPos(51); + +		// toolbar +		int hToolBar = TBTN_SIZE + WND_SPACING; +		x = WND_SPACING; +		int btnReverse = -1; +		for (i = 0; i < TBTN_COUNT; ++i) { +			hDwp = DeferWindowPos(hDwp, m_hwndBtnToolbar[i], 0, +				x, WND_SPACING, +				TBTN_SIZE, TBTN_SIZE, +				SWP_NOZORDER); +			x += TBTN_SIZE + tbtnSpacing[i]; +			if (tbtnSpacing[i] < 0) { +				btnReverse = i; +				break; +			} +		} +		x = w - WND_SPACING - TBTN_SIZE; +		for (i = TBTN_COUNT - 1; i > btnReverse; --i) { +			hDwp = DeferWindowPos(hDwp, m_hwndBtnToolbar[i], 0, +				x, WND_SPACING, +				TBTN_SIZE, TBTN_SIZE, +				SWP_NOZORDER); +			x -= TBTN_SIZE + tbtnSpacing[i - 1]; +		} + +		// infobar +		//	hDwp = DeferWindowPos(hDwp, hwndIcoProtocol, 0, +		//		w-100+WND_SPACING, WND_SPACING, +		//		16, 16, +		//		SWP_NOZORDER); +		//	hDwp = DeferWindowPos(hDwp, hwndTxtNickname, 0, +		//		w-100+WND_SPACING*2+16, WND_SPACING, +		//		100, 16, +		//		SWP_NOZORDER); +		//	hDwp = DeferWindowPos(hDwp, hwndTxtUID, 0, +		//		w-100+WND_SPACING*2+16, WND_SPACING*2+16, +		//		100, 16, +		//		SWP_NOZORDER); + +		// filter bar +		int hFilterBar = 0; +		if (m_dwOptions & WND_OPT_FILTERBAR) { +			hFilterBar = WND_SPACING + (16 + WND_SPACING) * 3; +			LayoutFilterBar(hDwp, WND_SPACING + (WND_SPACING + 75) * 0, WND_SPACING * 2 + hToolBar, 75, &ibMessages); +			LayoutFilterBar(hDwp, WND_SPACING + (WND_SPACING + 75) * 1, WND_SPACING * 2 + hToolBar, 75, &ibFiles); +			LayoutFilterBar(hDwp, WND_SPACING + (WND_SPACING + 75) * 2, WND_SPACING * 2 + hToolBar, 75, &ibUrls); +			LayoutFilterBar(hDwp, WND_SPACING + (WND_SPACING + 75) * 3, WND_SPACING * 2 + hToolBar, 75, &ibTotal); + +			GetWindowRect(m_hwndChkDateFrom, &rc); +			x = rc.right - rc.left; +			GetWindowRect(m_hwndDateFrom, &rc); +			y = hToolBar + WND_SPACING + (WND_SPACING + (16 + WND_SPACING) * 3 - (rc.bottom - rc.top) * 2 - WND_SPACING) / 2; +			hDwp = DeferWindowPos(hDwp, m_hwndChkDateFrom, 0, +				w - x - (rc.right - rc.left) - WND_SPACING * 2, y, +				x, rc.bottom - rc.top, +				SWP_NOZORDER); +			hDwp = DeferWindowPos(hDwp, m_hwndDateFrom, 0, +				w - (rc.right - rc.left) - WND_SPACING, y, +				rc.right - rc.left, rc.bottom - rc.top, +				SWP_NOZORDER); + +			hDwp = DeferWindowPos(hDwp, m_hwndChkDateTo, 0, +				w - x - (rc.right - rc.left) - WND_SPACING * 2, y + (rc.bottom - rc.top) + WND_SPACING, +				x, rc.bottom - rc.top, +				SWP_NOZORDER); +			hDwp = DeferWindowPos(hDwp, m_hwndDateTo, 0, +				w - (rc.right - rc.left) - WND_SPACING, y + (rc.bottom - rc.top) + WND_SPACING, +				rc.right - rc.left, rc.bottom - rc.top, +				SWP_NOZORDER); + +			hDwp = DeferWindowPos(hDwp, GetDlgItem(m_hwnd, IDC_IB_SEPARATOR), 0, +				WND_SPACING, hToolBar + WND_SPACING, +				w - WND_SPACING * 2, 2, +				SWP_NOZORDER); +		} + +		// general +		GetWindowRect(m_hwndStatus, &rc); +		int hStatus = rc.bottom - rc.top; +		hDwp = DeferWindowPos(hDwp, m_hwndStatus, 0, +			0, h - hStatus, +			w, hStatus, +			SWP_NOZORDER); + +		// search bar +		int hSearch = 0; +		if (m_dwOptions & WND_OPT_SEARCHBAR) { +			GetWindowRect(edtSearchText.GetHwnd(), &rc); +			hSearch = rc.bottom - rc.top; +			hDwp = DeferWindowPos(hDwp, m_hwndBtnCloseSearch, 0, +				WND_SPACING, h - hSearch - hStatus - WND_SPACING, +				TBTN_SIZE, hSearch, SWP_NOZORDER); +			hDwp = DeferWindowPos(hDwp, edtSearchText.GetHwnd(), 0, +				TBTN_SIZE + WND_SPACING * 2, h - hSearch - hStatus - WND_SPACING, +				w - WND_SPACING * 4 - TBTN_SIZE * 3, hSearch, +				SWP_NOZORDER); +			hDwp = DeferWindowPos(hDwp, btnFindPrev.GetHwnd(), 0, +				w - WND_SPACING - TBTN_SIZE * 2, h - hSearch - hStatus - WND_SPACING, +				TBTN_SIZE, hSearch, +				SWP_NOZORDER); +			hDwp = DeferWindowPos(hDwp, btnFindNext.GetHwnd(), 0, +				w - WND_SPACING - TBTN_SIZE * 1, h - hSearch - hStatus - WND_SPACING, +				TBTN_SIZE, hSearch, +				SWP_NOZORDER); +			hSearch += WND_SPACING; +		} + +		// time tree bar +		int hTimeTree = 0; +		if (m_dwOptions & WND_OPT_TIMETREE) { +			hTimeTree = 100; // need to calculate correctly +			hDwp = DeferWindowPos(hDwp, m_timeTree.GetHwnd(), 0, +				WND_SPACING, WND_SPACING + hToolBar + hFilterBar, +				hTimeTree, h - WND_SPACING * 2 - hFilterBar - hToolBar - hSearch - hStatus, +				SWP_NOZORDER); +		} + +		hDwp = DeferWindowPos(hDwp, m_histControl.GetHwnd(), 0, +			WND_SPACING + hTimeTree, WND_SPACING + hToolBar + hFilterBar, +			w - WND_SPACING * 2 - hTimeTree, h - WND_SPACING * 2 - hFilterBar - hToolBar - hSearch - hStatus, +			SWP_NOZORDER); + +		EndDeferWindowPos(hDwp); +	} +  	void OnDestroy() override  	{  		if (m_hContact != INVALID_CONTACT_ID) @@ -687,7 +659,7 @@ public:  		else  			m_dwOptions |= WND_OPT_TIMETREE; -		LayoutHistoryWnd(); +		OnResize();  		ShowHideControls();  		TimeTreeBuild();  	} @@ -781,41 +753,41 @@ public:  		DB::ECPTR pCursor(DB::Events(m_hContact));  		while (MEVENT hDbEvent = pCursor.FetchNext()) {  			DB::EventInfo dbei(hDbEvent); -			if (dbei) { -				if (bAppendOnly) { -					SetFilePointer(hFile, -3, nullptr, FILE_END); -					WriteFile(hFile, ",", 1, &dwBytesWritten, nullptr); -				} +			if (!dbei) +				continue; -				JSONNode pRoot2; -				pRoot2.push_back(JSONNode("type", dbei.eventType)); +			if (bAppendOnly) { +				SetFilePointer(hFile, -3, nullptr, FILE_END); +				WriteFile(hFile, ",", 1, &dwBytesWritten, nullptr); +			} -				if (mir_strcmp(dbei.szModule, proto)) -					pRoot2.push_back(JSONNode("module", dbei.szModule)); +			JSONNode pRoot2; +			pRoot2.push_back(JSONNode("type", dbei.eventType)); -				pRoot2.push_back(JSONNode("timestamp", dbei.timestamp)); +			if (mir_strcmp(dbei.szModule, proto)) +				pRoot2.push_back(JSONNode("module", dbei.szModule)); -				wchar_t szTemp[500]; -				TimeZone_PrintTimeStamp(UTC_TIME_HANDLE, dbei.timestamp, L"I", szTemp, _countof(szTemp), 0); -				pRoot2.push_back(JSONNode("isotime", T2Utf(szTemp).get())); +			pRoot2.push_back(JSONNode("timestamp", dbei.timestamp)); -				std::string flags; -				if (dbei.flags & DBEF_SENT) -					flags += "m"; -				if (dbei.flags & DBEF_READ) -					flags += "r"; -				pRoot2.push_back(JSONNode("flags", flags)); +			wchar_t szTemp[500]; +			TimeZone_PrintTimeStamp(UTC_TIME_HANDLE, dbei.timestamp, L"I", szTemp, _countof(szTemp), 0); +			pRoot2.push_back(JSONNode("isotime", T2Utf(szTemp).get())); -				ptrW msg(DbEvent_GetTextW(&dbei, CP_ACP)); -				if (msg) -					pRoot2.push_back(JSONNode("body", T2Utf(msg).get())); +			std::string flags; +			if (dbei.flags & DBEF_SENT) +				flags += "m"; +			if (dbei.flags & DBEF_READ) +				flags += "r"; +			pRoot2.push_back(JSONNode("flags", flags)); -				output = pRoot2.write_formatted(); -				output += "\n]}"; +			ptrW msg(DbEvent_GetTextW(&dbei, CP_ACP)); +			if (msg) +				pRoot2.push_back(JSONNode("body", T2Utf(msg).get())); -				WriteFile(hFile, output.c_str(), (int)output.size(), &dwBytesWritten, nullptr); -			} +			output = pRoot2.write_formatted(); +			output += "\n]}"; +			WriteFile(hFile, output.c_str(), (int)output.size(), &dwBytesWritten, nullptr);  			bAppendOnly = true;  		} @@ -832,7 +804,7 @@ public:  			m_dwOptions |= WND_OPT_FILTERBAR;  		ShowHideControls(); -		LayoutHistoryWnd(); +		OnResize();  	}  	void onClick_FindPrev(CCtrlButton *) @@ -870,7 +842,7 @@ public:  			m_dwOptions |= WND_OPT_SEARCHBAR;  		ShowHideControls(); -		LayoutHistoryWnd(); +		OnResize();  	}  	void onClick_UserInfo(CCtrlButton *) @@ -906,20 +878,6 @@ public:  		}  		switch (msg) { -		case WM_MEASUREITEM: -			LPMEASUREITEMSTRUCT lpmis; -			lpmis = (LPMEASUREITEMSTRUCT)lParam; - -			if (lpmis->CtlType == ODT_MENU) -				return Menu_MeasureItem(lParam); - -			lpmis->itemHeight = 25; -			return TRUE; - -		case WM_SIZE: -			LayoutHistoryWnd(); -			return TRUE; -  		case WM_CHARTOITEM:  			if (!((GetKeyState(VK_CONTROL) & 0x80) || (GetKeyState(VK_MENU) & 0x80))) {  				wchar_t s[] = { LOWORD(wParam), 0 }; @@ -929,15 +887,6 @@ public:  			}  			return -1; -		case WM_DRAWITEM: -			LPDRAWITEMSTRUCT lpdis; -			lpdis = (LPDRAWITEMSTRUCT)lParam; - -			if (lpdis->CtlType == ODT_MENU) -				return Menu_DrawItem(lParam); - -			return (lpdis->itemID != -1); -  		case WM_COMMAND:  			if (Clist_MenuProcessCommand(LOWORD(wParam), MPCF_CONTACTMENU, m_hContact))  				return TRUE; diff --git a/plugins/NewStory/src/main.cpp b/plugins/NewStory/src/main.cpp index 16747f78d4..a50bc01e36 100644 --- a/plugins/NewStory/src/main.cpp +++ b/plugins/NewStory/src/main.cpp @@ -16,6 +16,8 @@ CMPlugin g_plugin;  CMOption<bool> g_bOptGrouping(MODULENAME, "MessageGrouping", false);  CMOption<bool> g_bOptDrawEdge(MODULENAME, "DrawEdge", true); +MWindowList g_hNewstoryWindows = 0, g_hNewstoryLogs = 0; +  /////////////////////////////////////////////////////////////////////////////////////////  PLUGININFOEX pluginInfoEx = @@ -73,11 +75,32 @@ static IconItem icons[] =  	{ LPGEN("Help"),              "varhelp",   ICO_VARHELP    }  }; +static int evtEventAdded(WPARAM hContact, LPARAM lParam) +{ +	if (HWND hwnd = WindowList_Find(g_hNewstoryLogs, hContact)) +		SendMessage(hwnd, UM_ADDEVENT, hContact, lParam); +	return 0; +} + +static int evtEventDeleted(WPARAM hContact, LPARAM lParam) +{ +	if (HWND hwnd = WindowList_Find(g_hNewstoryLogs, hContact)) +		SendMessage(hwnd, UM_REMOVEEVENT, hContact, lParam); +	return 0; +} + +static int evtEventEdited(WPARAM hContact, LPARAM lParam) +{ +	if (HWND hwnd = WindowList_Find(g_hNewstoryLogs, hContact)) +		SendMessage(hwnd, UM_EDITEVENT, hContact, lParam); +	return 0; +} +  static int evtModulesLoaded(WPARAM, LPARAM)  {  	InitFonts();  	InitNewstoryControl(); -	InitHistory(); +  	LoadTemplates();  	return 0; @@ -98,6 +121,12 @@ int CMPlugin::Load()  	m_log = RegisterSrmmLog(this, MODULETITLE, _T(MODULENAME), NewStory_Stub); +	g_hNewstoryLogs = WindowList_Create(); +	g_hNewstoryWindows = WindowList_Create(); + +	HookEvent(ME_DB_EVENT_ADDED, evtEventAdded); +	HookEvent(ME_DB_EVENT_DELETED, evtEventDeleted); +	HookEvent(ME_DB_EVENT_EDITED, evtEventEdited);  	HookEvent(ME_OPT_INITIALISE, OptionsInitialize);  	HookEvent(ME_SYSTEM_MODULESLOADED, evtModulesLoaded);  	HookEvent(ME_SYSTEM_PRESHUTDOWN, evtPreShutdown); @@ -115,6 +144,5 @@ int CMPlugin::Unload()  	UnregisterSrmmLog(m_log);  	UnregisterClass(_T(NEWSTORYLIST_CLASS), g_plugin.getInst());  	DestroyFonts(); -  	return 0;  }  | 
