diff options
author | Ash Wolf <ninji@wuffs.org> | 2023-06-28 22:22:32 +0100 |
---|---|---|
committer | Ash Wolf <ninji@wuffs.org> | 2023-06-28 22:22:32 +0100 |
commit | c0c336500955a23e344651e5412c9d9d441ef4ee (patch) | |
tree | 790769c748db307cf3314f6e896e2f61c68561a2 /src/T2DLL/T2GuestroomTable.cpp | |
parent | 37e364b2c6cc7487a1c888d256a73e5337bb7189 (diff) | |
download | t2win-c0c336500955a23e344651e5412c9d9d441ef4ee.tar.gz t2win-c0c336500955a23e344651e5412c9d9d441ef4ee.zip |
first pass of T2DLL
Diffstat (limited to '')
-rw-r--r-- | src/T2DLL/T2GuestroomTable.cpp | 369 |
1 files changed, 337 insertions, 32 deletions
diff --git a/src/T2DLL/T2GuestroomTable.cpp b/src/T2DLL/T2GuestroomTable.cpp index e7dbf5b..4458d0f 100644 --- a/src/T2DLL/T2GuestroomTable.cpp +++ b/src/T2DLL/T2GuestroomTable.cpp @@ -1,115 +1,420 @@ #include "T2GuestroomTable.h" +#include "T2Tenant.h" +#include "T2TenantDef.h" +#include "T2TowerDoc.h" +#include "T2TowerMainView.h" -/*virtual*/ int T2GuestroomTable::OnT2DlgItemCreate(CREATESTRUCTA*) { +/*virtual*/ int T2GuestroomTable::OnT2DlgItemCreate(CREATESTRUCT* cs) { + return T2DlgItemTable::OnT2DlgItemCreate(cs); } -T2GuestroomTable::T2GuestroomTable(T2TowerDoc*, T2ImageObj*, CPalette*) { +T2GuestroomTable::T2GuestroomTable(T2TowerDoc* inDoc, T2ImageObj* inImageObj, CPalette* inPalette) + : T2VerticalTable(inDoc, inImageObj, inPalette) +{ + mClearBackground = true; + + SetCellDataSize(sizeof(T2GuestroomItem *)); + InsertCols(1, 0, NULL); + SetHScrollerStyle(AlwaysHide); + SetVScrollerStyle(AlwaysShow); + + mClickTime = 0; } /*virtual*/ T2GuestroomTable::~T2GuestroomTable() { + T2GuestroomItem *item; + + while (mArray.FetchItemAt(1, &item)) { + delete item; + mArray.RemoveItemsAt(1, 1); + } +} + +/*virtual*/ void T2GuestroomTable::Add(T2GuestroomItem* inItem) { + unsigned int index = mRows; + InsertRows(1, index, &inItem); +} + +/*virtual*/ void T2GuestroomTable::DrawCellSelf(CDC* pDC, const TableCellT& inCell, BOOL inSelected) { + DrawCell(pDC, inCell); +} + +/*virtual*/ void T2GuestroomTable::DrawCell(CDC* pDC, const TableCellT& inCell) { + CFont numberFont; + CFont statusFont; + + int savedDC = pDC->SaveDC(); + pDC->SelectPalette(mPalette, false); + pDC->RealizePalette(); + + RECT cellRect; + if (FetchLocalCellFrame(inCell, cellRect)) { + T2GuestroomItem *item; + GetCellData(inCell, &item); + if (item) { + CString str; + + int numberFontWeight = FW_DONTCARE; + if (item->IsRelation()) + numberFontWeight = FW_BOLD; + + numberFont.CreateFont(-9, 0, 0, 0, numberFontWeight, false, false, false, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_TT_ALWAYS, DRAFT_QUALITY, DEFAULT_PITCH, "Terminal"); + pDC->SelectObject(&numberFont); + pDC->SetBkMode(TRANSPARENT); + + int roomNum = item->GetRoomNumber(); + if (roomNum < 0) + str.Format("B%d", 0 - roomNum); + else + str.Format("%d", roomNum); + + pDC->TextOut(cellRect.left + 4, cellRect.bottom - 12, str, strlen(str)); + + COLORREF colorArray[4]; + colorArray[0] = RGB(29, 29, 255); + colorArray[1] = RGB(255, 0, 0); + colorArray[2] = RGB(235, 0, 235); + colorArray[3] = RGB(0, 0, 0); + int col = 3; + + if (item->IsFreeRelation()) { + // "未接続" - disconnected + str = "\x96\xA2\x90\xDA\x91\xB1"; + } else { + switch (item->GetRoomStatus()) { + case kTenantStatus31: + col = 0; + // "予約済み" - Reserved + str = "\x97\x5C\x96\xF1\x8D\xCF\x82\xDD"; + break; + case kTenantStatus32: + case kTenantStatus33: + case kTenantStatus34: + col = 0; + // "宿泊中" - staying + str = "\x8F\x68\x94\x91\x92\x86"; + break; + case kTenantStatus35: + case kTenantStatus36: + case kTenantStatus37: + col = 1; + // "未メンテ" - unmaintained + str = "\x96\xA2\x83\x81\x83\x93\x83\x65"; + break; + case kTenantStatus38: + col = 2; + // "ゴキブリ" - cockroach + str = "\x83\x53\x83\x4C\x83\x75\x83\x8A"; + break; + default: + str = ""; + } + } + + statusFont.CreateFont(-9, 0, 0, 0, FW_DONTCARE, false, false, false, SHIFTJIS_CHARSET, OUT_TT_PRECIS, CLIP_TT_ALWAYS, PROOF_QUALITY, DEFAULT_PITCH, "\x82\x6C\x82\x72 \x83\x53\x83\x56\x83\x62\x83\x4E"); + pDC->SelectObject(&statusFont); + pDC->SetTextColor(colorArray[col]); + pDC->SetBkMode(TRANSPARENT); + pDC->TextOut(cellRect.left + 40, cellRect.bottom - 12, str, strlen(str)); + } + } + + pDC->RestoreDC(savedDC); +} + +/*virtual*/ void T2GuestroomTable::ClickCell(const TableCellT& inCell, const CPoint& inPt) { + T2DlgItemTable::ClickCell(inCell, inPt); + + if (IsValidCell(mSelectedCell)) { + T2GuestroomItem *item; + GetCellData(mSelectedCell, &item); + if (item) { + DWORD time = GetTickCount(); + if ((time - mClickTime) < GetDoubleClickTime()) + BroadcastMessage(0xFFFFE40C, NULL); + else + BroadcastMessage(-GetDlgCtrlID(), item); + mClickTime = time; + } + } +} + +/*virtual*/ void T2GuestroomTable::AddList(T2Tenant* inTenant, int inRoomNumber) { + T2GuestroomItem *item = new T2GuestroomItem(inTenant, mFront, inRoomNumber); + if (item) + mArray.InsertItemsAt(1, mArray.GetCount() + 1, &item); } -/*virtual*/ void T2GuestroomTable::Add(T2GuestroomItem*) { -} +/*virtual*/ void T2GuestroomTable::ValidRelation() { + LArrayIterator iterator(mArray); + T2GuestroomItem *item; -/*virtual*/ void T2GuestroomTable::DrawCellSelf(CDC*, const TableCellT&, int) { + while (iterator.Next(&item)) { + if (item->IsRelation()) + item->ValidRelation(); + else if (item->WasRelation()) + item->InvalidRelation(); + } } -/*virtual*/ void T2GuestroomTable::DrawCell(CDC*, const TableCellT&) { -} +/*virtual*/ void T2GuestroomTable::RevertRelation() { + LArrayIterator iterator(mArray); + T2GuestroomItem *item; -/*virtual*/ void T2GuestroomTable::ClickCell(const TableCellT&, const CPoint&) { + while (iterator.Next(&item)) { + item->RevertRelation(); + } } -/*virtual*/ void T2GuestroomTable::AddList(T2Tenant*, int) { -} +/*virtual*/ void T2GuestroomTable::ResetRoomList(int inRoomType) { + Clear(); -/*virtual*/ void T2GuestroomTable::ValidRelation() { -} + int what = (inRoomType == 0) ? 1 : (inRoomType * 2); -/*virtual*/ void T2GuestroomTable::RevertRelation() { -} + LArrayIterator iterator(mArray); + T2GuestroomItem *item; -/*virtual*/ void T2GuestroomTable::ResetRoomList(int) { + while (iterator.Next(&item)) { + if (item->GetRoomType() == inRoomType) + Add(item); + } + + Invalidate(false); } -/*virtual*/ int T2GuestroomTable::CountRooms(int, int) { +/*virtual*/ int T2GuestroomTable::CountRooms(int inRoomType, int inRoomStatus) { + int count = 0; + LArrayIterator iterator(mArray); + T2GuestroomItem *item; + + while (iterator.Next(&item)) { + if (item->IsRelation() && item->GetRoomType() == inRoomType) { + if (inRoomStatus == 0 || item->GetRoomStatus() == inRoomStatus) + count++; + } + } + + return count; } -/*virtual*/ void T2GuestroomTable::ToggleRelation(const TableCellT&, int) { +/*virtual*/ void T2GuestroomTable::ToggleRelation(const TableCellT& inCell, int inMoneyIndex) { + T2GuestroomItem *item; + GetCellData(inCell, &item); + + if (item) + item->ToggleRelation(inMoneyIndex); } -/*virtual*/ void T2GuestroomTable::SetInMoneyIndex(int) { +/*virtual*/ void T2GuestroomTable::SetInMoneyIndex(int inMoneyIndex) { + T2GuestroomItem *item; + TableCellT theCell; + theCell.row = 1; + theCell.col = 1; + + for (unsigned int i = 1; i <= mRows; i++) { + theCell.row = i; + GetCellData(theCell, &item); + + if (item && item->IsRelation() && !item->IsStay()) + item->SetInMoneyIndex(inMoneyIndex); + } } -/*virtual*/ int T2GuestroomTable::GetInMoneyIndex(int) { +/*virtual*/ int T2GuestroomTable::GetInMoneyIndex(int inRoomType) { + int moneyIndex = 0; + LArrayIterator iterator(mArray); + T2GuestroomItem *item; + + while (iterator.Next(&item)) { + if (item->GetRoomType() == inRoomType) { + if (item->IsRelation()) + return item->GetInMoneyIndex(); + + if (moneyIndex == 0) { + T2Tenant *theTenant = item->GetTenant(); + T2EquipDef *theDef = theTenant ? theTenant->GetEquipDef() : NULL; + if (theDef) { + moneyIndex = theDef->GetNumOfInMoney(); + moneyIndex = (moneyIndex > 1) ? ((moneyIndex / 2) + 1) : 1; + } + } + } + } + + return (moneyIndex > 0) ? moneyIndex : 1; } -/*virtual*/ int T2GuestroomTable::CalcInMoney(int) { +/*virtual*/ int T2GuestroomTable::CalcInMoney(int inRoomType) { + int result = 0; + LArrayIterator iterator(mArray); + T2GuestroomItem *item; + + while (iterator.Next(&item)) { + if (item->IsRelation() && item->GetRoomType() == inRoomType) { + switch (item->GetRoomStatus()) { + case kTenantStatus31: + case kTenantStatus32: + case kTenantStatus33: + case kTenantStatus34: + result += item->GetInMoney(); + break; + } + } + } + + return result; } -void T2GuestroomTable::UpdateTenantEstimation(T2TowerDoc*, int) { +void T2GuestroomTable::UpdateTenantEstimation(T2TowerDoc* inDoc, int inRoomType) { + LArrayIterator iterator(mArray); + T2GuestroomItem *item; + + while (iterator.Next(&item)) { + if (inRoomType == -1 || item->GetRoomType() == inRoomType) + item->UpdateTenantEstimation(inDoc); + } } -/*virtual*/ void T2GuestroomTable::OnT2DlgItemLButtonDown(unsigned int, CPoint) { +/*virtual*/ void T2GuestroomTable::OnT2DlgItemLButtonDown(UINT inFlags, CPoint inPt) { + CPoint pt = inPt; + ClientToView(&pt, 1); + + TableCellT cell; + FetchCellHitBy(pt, cell); + + if (IsValidCell(cell)) + ClickCell(cell, inPt); } -/*virtual*/ int T2GuestroomTable::OnT2DlgItemEraseBkgnd(CDC*) { +/*virtual*/ BOOL T2GuestroomTable::OnT2DlgItemEraseBkgnd(CDC* pDC) { + T2VerticalTable::OnT2DlgItemEraseBkgnd(pDC); + + unsigned int numOfRows, numOfColumns, theRow, theColumn; + + GetTableSize(numOfRows, numOfColumns); + for (theColumn = 1; theColumn <= numOfColumns; theColumn++) { + for (theRow = 1; theRow <= numOfRows; theRow++) { + TableCellT cell; + cell.row = theRow; + cell.col = theColumn; + DrawCell(pDC, cell); + } + } + + T2DlgItemTable::HiliteCell(pDC, mSelectedCell); + return true; } -T2GuestroomItem::T2GuestroomItem(T2Tenant*, int, long) { + + +T2GuestroomItem::T2GuestroomItem(T2Tenant* inTenant, int inSaveTenantID, long inRoomNumber) { + mTenant = inTenant; + mSaveTenantID = inSaveTenantID; + mRoomNumber = inRoomNumber; + mRelation = WasRelation(); + mDefaultInMoneyIndex = inTenant->GetInMoneyIndex() + 1; } int T2GuestroomItem::GetRoomNumber() { + return mRoomNumber; } int T2GuestroomItem::GetRoomStatus() { + return mTenant->GetStatus(); } int T2GuestroomItem::GetCapacity() { + return mTenant->GetCapacity(); } int T2GuestroomItem::GetRoomType() { + return GetRoomType(mTenant); } -/*static*/ int T2GuestroomItem::GetRoomType(T2Tenant*) { +/*static*/ int T2GuestroomItem::GetRoomType(T2Tenant* inTenant) { + int result = -1; + + T2EquipDef *theEquipDef = inTenant->GetEquipDef(); + if (theEquipDef) { + switch (theEquipDef->GetToolType()) { + case 1401: + result = 0; + break; + case 1402: + result = 1; + break; + case 1403: + result = 2; + break; + case 1481: + result = 0; + break; + case 1482: + result = 1; + break; + } + } + + return result; } -void T2GuestroomItem::ToggleRelation(int) { +void T2GuestroomItem::ToggleRelation(int inMoneyIndex) { + mRelation = !mRelation; + SetInMoneyIndex(mRelation ? inMoneyIndex : mDefaultInMoneyIndex); } -int T2GuestroomItem::IsRelation() { +BOOL T2GuestroomItem::IsRelation() { + return mRelation; } -int T2GuestroomItem::WasRelation() { +BOOL T2GuestroomItem::WasRelation() { + return mTenant->GetRelatedTenantID() == mSaveTenantID; } void T2GuestroomItem::ValidRelation() { + mTenant->SetRelatedTenantID(mSaveTenantID); } void T2GuestroomItem::InvalidRelation() { + mTenant->SetRelatedTenantID(0); } void T2GuestroomItem::RevertRelation() { + SetInMoneyIndex(mDefaultInMoneyIndex); } -int T2GuestroomItem::IsFreeRelation() { +BOOL T2GuestroomItem::IsFreeRelation() { + return !IsRelation() && (WasRelation() || mTenant->GetRelatedTenantID() == 0); } -int T2GuestroomItem::IsStay() { +BOOL T2GuestroomItem::IsStay() { + return mTenant->GetTotalBelong() > 0; } -void T2GuestroomItem::SetInMoneyIndex(int) { +void T2GuestroomItem::SetInMoneyIndex(int inIndex) { + mTenant->SetInMoneyIndex((inIndex < 1) ? 0 : (inIndex - 1)); } int T2GuestroomItem::GetInMoneyIndex() { + return mTenant->GetInMoneyIndex() + 1; } int T2GuestroomItem::GetInMoney() { + return mTenant->IsTherePeople() ? mTenant->GetInMoney() : 0; } int T2GuestroomItem::GetOutMoney() { + return mTenant->GetOutMoney(); } -void T2GuestroomItem::UpdateTenantEstimation(T2TowerDoc*) { +void T2GuestroomItem::UpdateTenantEstimation(T2TowerDoc* inDoc) { + BOOL isChanged = mTenant->UpdateResidencialEstimate(inDoc); + int viewMode = inDoc->towerDoc_vf140(); + if ((viewMode == ViewMode_2 && isChanged) || (viewMode == ViewMode_3)) { + mTenant->SetDrawMode(DrawMode1); + + RECT rect; + mTenant->GetEquipArea(rect); + inDoc->GetTowerMainView()->tmv_vf128(rect); + } } |