summaryrefslogtreecommitdiff
path: root/src/T2DLL/T2PrefDialogBox.cpp
diff options
context:
space:
mode:
authorAsh Wolf <ninji@wuffs.org>2023-06-28 22:22:32 +0100
committerAsh Wolf <ninji@wuffs.org>2023-06-28 22:22:32 +0100
commitc0c336500955a23e344651e5412c9d9d441ef4ee (patch)
tree790769c748db307cf3314f6e896e2f61c68561a2 /src/T2DLL/T2PrefDialogBox.cpp
parent37e364b2c6cc7487a1c888d256a73e5337bb7189 (diff)
downloadt2win-c0c336500955a23e344651e5412c9d9d441ef4ee.tar.gz
t2win-c0c336500955a23e344651e5412c9d9d441ef4ee.zip
first pass of T2DLL
Diffstat (limited to '')
-rw-r--r--src/T2DLL/T2PrefDialogBox.cpp203
1 files changed, 200 insertions, 3 deletions
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);
}