From c0c336500955a23e344651e5412c9d9d441ef4ee Mon Sep 17 00:00:00 2001 From: Ash Wolf Date: Wed, 28 Jun 2023 22:22:32 +0100 Subject: first pass of T2DLL --- src/T2DLL/T2PrefDialogBox.cpp | 203 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 200 insertions(+), 3 deletions(-) (limited to 'src/T2DLL/T2PrefDialogBox.cpp') diff --git a/src/T2DLL/T2PrefDialogBox.cpp b/src/T2DLL/T2PrefDialogBox.cpp index c476826..8f21e5c 100644 --- a/src/T2DLL/T2PrefDialogBox.cpp +++ b/src/T2DLL/T2PrefDialogBox.cpp @@ -1,25 +1,222 @@ +#include "CTokenizer.h" +#include "T2BitImage.h" +#include "T2DlgItemAllPurpose.h" +#include "T2DlgItemVScr.h" +#include "T2PluginInfoTable.h" +#include "T2PluginLoader.h" #include "T2PrefDialogBox.h" +#include "T2TowerDoc.h" T2PrefDialogBox::T2PrefDialogBox() { + mCurrentTab = -1; + mImage = NULL; + + mVScroll = NULL; + mAllPurpose = NULL; + mTopmostTab = NULL; + mCheckA = NULL; + mCheckB = NULL; + mButton1a = NULL; + mButton1b = NULL; + mButton2a = NULL; + mButton2b = NULL; + mAboutButton = NULL; + mMakePrefButton = NULL; } /*virtual*/ T2PrefDialogBox::~T2PrefDialogBox() { + if (mImage) + delete mImage; } -/*virtual*/ int T2PrefDialogBox::OnT2DialogCommand(unsigned int, long) { +/*virtual*/ BOOL T2PrefDialogBox::OnT2DialogCommand(WPARAM inWParam, LPARAM inLParam) { + BOOL result = false; + WORD code = HIWORD(inWParam); + WORD id = LOWORD(inWParam); + + if (id == 1002) { + if (mAllPurpose && mVScroll) { + RECT alppsRect, scrollRect; + + mAllPurpose->GetClientRect(&alppsRect); + mAllPurpose->ClientToScreen(&alppsRect); + ScreenToClient(&alppsRect); + + mVScroll->GetClientRect(&scrollRect); + mVScroll->ClientToScreen(&scrollRect); + ScreenToClient(&scrollRect); + + UnionRect(&alppsRect, &alppsRect, &scrollRect); + InvalidateRect(&alppsRect); + } else { + InvalidateRect(NULL); + } + result = true; + } else if (id == 1001 && code == 0 && mAllPurpose) { + RECT clientRect; + mAllPurpose->GetClientRect(&clientRect); + + POINT pt = mAllPurpose->GetUpPoint(); + if (PtInRect(&clientRect, pt)) { + int value = mVScroll->GetValue(); + pt.y += value * 72; + mCurrentTab = pt.y / 72; + if (mCurrentTab >= 0 && mCurrentTab <= 4) { + if (mTopmostTab) + mTopmostTab->ShowWindow(SW_HIDE); + + CWnd *theWindow = GetDlgItem(1003 + mCurrentTab); + theWindow->ShowWindow(SW_SHOWNORMAL); + theWindow->BringWindowToTop(); + + switch (mCurrentTab + 1003) { + case 1003: + mCheckA->BringWindowToTop(); + mCheckB->BringWindowToTop(); + break; + } + + mTopmostTab = theWindow; + } + } + + mAllPurpose->ClientToScreen(&clientRect); + ScreenToClient(&clientRect); + InvalidateRect(&clientRect); + } + + return result; } -/*virtual*/ int T2PrefDialogBox::OnT2EraseBkgnd(CDC*) { +/*virtual*/ BOOL T2PrefDialogBox::OnT2EraseBkgnd(CDC* pDC) { + int save = pDC->SaveDC(); + pDC->SelectPalette(mPalette, false); + pDC->RealizePalette(); + + if (mAllPurpose && mImage) { + // fuck it +#pragma var_order(rect3, allpsRect, var38, scrollValue, rect2, rect1) + RECT allpsRect; + mAllPurpose->GetClientRect(&allpsRect); + InflateRect(&allpsRect, -1, -1); + allpsRect.right += 1; + allpsRect.bottom += 1; + + mAllPurpose->ClientToScreen(&allpsRect); + ScreenToClient(&allpsRect); + + pDC->SelectStockObject(NULL_PEN); + pDC->SelectStockObject(WHITE_BRUSH); + pDC->Rectangle(&allpsRect); + + int scrollValue = mVScroll->GetValue(); + + RECT rect1, rect2, rect3; + SetRect(&rect1, 0, scrollValue * 32, 32, scrollValue * 32 + 32); + + SetRect(&rect2, 4, 4, 68, 68); + mAllPurpose->ClientToScreen(&rect2); + ScreenToClient(&rect2); + + int var38 = mImage->mBitmap.header.biHeight; + + while (rect2.top < allpsRect.bottom && rect1.top < var38) { + rect3 = rect2; + if (rect2.bottom > allpsRect.bottom) { + rect2.bottom = allpsRect.bottom; + rect1.bottom = rect1.top + ((rect2.bottom - rect2.top + 1) / 2) - 1; + } + + StretchDIBits(pDC->m_hDC, rect2.left, rect2.bottom - 1, rect2.right - rect2.left, rect2.top - rect2.bottom, rect1.left, rect1.top, rect1.right - rect1.left, rect1.bottom - rect1.top, mImage->mData, (BITMAPINFO *) &mImage->mBitmap, DIB_PAL_COLORS, SRCCOPY); + + if (scrollValue++ == mCurrentTab) { + CBrush brush(RGB(255, 0, 0)); + pDC->FrameRect(&rect3, &brush); + } + + OffsetRect(&rect1, 0, 32); + OffsetRect(&rect2, 0, 72); + } + } + + pDC->RestoreDC(save); + return true; } /*virtual*/ void T2PrefDialogBox::OnT2Create() { + T2TowerDoc *theDoc = mTowerDoc; +#line 146 + _ASSERT(theDoc != NULL); + + mVScroll = (T2DlgItemVScr *) GetDlgItem(1002); + mVScroll->SetPage(2); + mVScroll->SetRange(5); + mVScroll->SetValue(0); + + mAllPurpose = (T2DlgItemAllPurpose *) GetDlgItem(1001); + + HMODULE theModule = AfxGetInstanceHandle(); + mImage = new T2BitImage(theModule, 189, true); + + SetupPluginPref(); + + CWnd *theDialog = GetDlgItem(1003); + mCheckA = theDialog->GetDlgItem(1011); // check1 + mCheckB = theDialog->GetDlgItem(1012); // check2 + + theDialog = GetDlgItem(1004); + mButton1a = theDialog->GetDlgItem(1102); // button1 + mButton1b = theDialog->GetDlgItem(1103); // button2 + + theDialog = GetDlgItem(1005); + mButton2a = theDialog->GetDlgItem(1104); + mButton2b = theDialog->GetDlgItem(1105); + + theDialog = GetDlgItem(1006); + mAboutButton = theDialog->GetDlgItem(1106); + + theDialog = GetDlgItem(1007); + mMakePrefButton = theDialog->GetDlgItem(1107); } /*virtual*/ void T2PrefDialogBox::OnT2Destroy() { } -/*virtual*/ void T2PrefDialogBox::CreateDlgItem(CTokenizer&, T2Dialog::T2DialogDef&) { +/*virtual*/ void T2PrefDialogBox::CreateDlgItem(CTokenizer& inTokenizer, T2DialogDef& inDef) { + if (!_stricmp(inTokenizer.Current(), "ALPPS")) { + RECT theItemRect; + UINT theID = inTokenizer.NextInteger(); + theItemRect.left = inTokenizer.NextInteger(); + theItemRect.top = inTokenizer.NextInteger(); + theItemRect.right = inTokenizer.NextInteger(); + theItemRect.bottom = inTokenizer.NextInteger(); + + T2DlgItemAllPurpose *alpps = new T2DlgItemAllPurpose(mTowerDoc, mImageObj, mPalette); + alpps->Create("", inDef.flags, theItemRect, this, theID); + if (mCurrentFont >= 0) + alpps->SetFont(*mFonts[mCurrentFont]); + } else { + T2Dialog::CreateDlgItem(inTokenizer, inDef); + } } void T2PrefDialogBox::SetupPluginPref() { + CWnd *thePluginDialog = GetDlgItem(1006); +#line 204 + _ASSERT(thePluginDialog != NULL); + + T2PluginInfoTable *theTable = (T2PluginInfoTable *) thePluginDialog->GetDlgItem(1022); +#line 208 + _ASSERT(theTable != NULL); + + theTable->SetCellDataSize(sizeof(T2PluginSpecifier *)); + theTable->InsertCols(1, 0, NULL); + theTable->SetColWidth(500, 0, 0); + theTable->SetRowHeight(12, 0, 0); + + T2PluginSpecifier *theSpecifier; + POSITION pos; + mTowerDoc->mT2PluginLoader->SetTypeFilter(pos, 0); + while ((theSpecifier = mTowerDoc->mT2PluginLoader->GetNext(pos))) + theTable->Add(theSpecifier); } -- cgit v1.2.3