summaryrefslogtreecommitdiff
path: root/src/T2DLL/T2GuestroomTable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/T2DLL/T2GuestroomTable.cpp')
-rw-r--r--src/T2DLL/T2GuestroomTable.cpp369
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);
+ }
}