home *** CD-ROM | disk | FTP | other *** search
- /* Project partsasm
- Project Team DoGA
- Copyright (c) 1995. All Rights Reserved.
-
- サブシステム: partsasm.apx Application
- ファイル: partsdlg.cpp
- 作成者: Taka2
-
-
- 概要
- ====
- PartsDialog (TDialog) のインプリメンテーション用のソースファイル
- */
-
- #include <owl\owlpch.h>
- #pragma hdrstop
-
- #include <stdio.h>
- #include "partsdlg.h"
- //#include "pasmapp.rh"
- #include "profile.h"
- #include "files.h"
- #include "log.h"
-
- static const int PixelWidth=512, PixelHeight=384;
- static const TColor& cSelect = TColor::LtRed;
- static const TSize CatalogSize(PixelWidth, PixelHeight);
- //static const TPoint CatalogPosition(120, 10);
- #define CatalogPosition TPoint(textwidth*15,textwidth)
-
-
- //
- // このアプリケーションで処理するすべてのメッセージ/コマンドの
- // 応答テーブルを作成する
- //
- DEFINE_RESPONSE_TABLE1(PartsDialog, TDialog)
- //{{PartsDialogRSP_TBL_BEGIN}}
- EV_WM_LBUTTONDOWN,
- EV_WM_PAINT,
- EV_LBN_SELCHANGE(IDC_PARTS_LISTBOX, LBNSelchange),
- EV_WM_PALETTECHANGED,
- EV_WM_QUERYNEWPALETTE,
- EV_WM_LBUTTONDBLCLK,
- //{{PartsDialogRSP_TBL_END}}
- END_RESPONSE_TABLE;
-
-
- //{{PartsDialog Implementation}}
-
-
- PartsDialog::PartsDialog (TWindow* parent, int lastmenu, int lastparts):
- TDialog(parent, IDD_PARTS, NULL)
- {
- // INSERT>> コンストラクタ用のコードはここに
-
- // SetBkgndColor(TColor::LtGray);
-
- pListBox = new TListBox(this, IDC_PARTS_LISTBOX);
- pStatic = new TStatic(this, IDC_PARTS_NAME);
- // pStatic->SetBkgndColor(TColor::LtGray);
-
- nowmenu = -1;
- nowparts = -1;
- CatalogDib = NULL;
- CatalogPalette = NULL;
- // partsname = NULL;
- // partscount = 0;
- // ProfileRead();
- OpenCatalog(lastmenu);
- SelectParts(lastparts);
- }
-
-
- PartsDialog::~PartsDialog ()
- {
- Destroy();
-
- // INSERT>> デストラクタ用のコードはここに
- delete CatalogPalette;
- delete CatalogDib;
- // delete [] partsname;
- }
-
- void PartsDialog::SelectParts(int no)
- {
- if (no == -1) {
- nowparts = -1;
- filename[0] = '\0';
- pStatic->SetText(filename);
- } else if (nowparts != no) {
- nowparts = no;
- wsprintf(filename, "%s%02d", partsname[nowmenu].partsfile.c_str(), no+1);
- pStatic->SetText(filename);
- strcat(filename, ".SUF");
- }
- }
-
- static void GetXY(int *ux, int *uy, int tw)
- {
- if (tw < 8) {
- *ux = tw * 16;
- *uy = tw * 12;
- } else {
- *ux = PixelWidth/4;
- *uy = PixelHeight/4;
- }
- }
-
- void PartsDialog::drawSelBox(TDC& dc, int no)
- {
- if (no < 0 || no >= 16) {
- return;
- }
- // const int ux=textwidth*16, uy=textwidth*12;
- int ux, uy;
- GetXY(&ux, &uy, textwidth);
- int x = no % 4;
- int y = no / 4;
- dc.MoveTo(CatalogPosition + TPoint( x *ux, y *uy));
- dc.LineTo(CatalogPosition + TPoint((x+1)*ux, y *uy));
- dc.LineTo(CatalogPosition + TPoint((x+1)*ux, (y+1)*uy));
- dc.LineTo(CatalogPosition + TPoint( x *ux, (y+1)*uy));
- dc.LineTo(CatalogPosition + TPoint( x *ux, y *uy));
- dc.MoveTo(CatalogPosition + TPoint( x *ux+1, y *uy+1));
- dc.LineTo(CatalogPosition + TPoint((x+1)*ux-1, y *uy+1));
- dc.LineTo(CatalogPosition + TPoint((x+1)*ux-1, (y+1)*uy-1));
- dc.LineTo(CatalogPosition + TPoint( x *ux+1, (y+1)*uy-1));
- dc.LineTo(CatalogPosition + TPoint( x *ux+1, y *uy+1));
-
- }
-
- void PartsDialog::EvLButtonDown (UINT modKeys, TPoint& point)
- {
- TDialog::EvLButtonDown(modKeys, point);
-
- // INSERT>> 追加コードはここに
-
- // const ux=textwidth*16, uy=textwidth*12;
- int ux, uy;
- GetXY(&ux, &uy, textwidth);
-
- TPoint p;
- p = point - CatalogPosition;
- if (nowmenu >= 0 && 0 <= p.x && p.x < ux*4 && 0 <= p.y && p.y < uy*4) {
- int x, y, n;
- x = p.x / ux;
- y = p.y / uy;
- n = y * 4 + x;
- if (n != nowparts) {
- TClientDC dc(*this);
- dc.SelectStockObject(WHITE_PEN);
- // dc.SelectObject(TPen(TColor::LtGray));
- drawSelBox(dc, nowparts);
- dc.SelectObject(TPen(cSelect));
- drawSelBox(dc, n);
- SelectParts(n);
- }
- }
- }
-
- void PartsDialog::EvPaint ()
- {
- TDialog::EvPaint();
-
- // int ux=textwidth*16, uy=textwidth*12;
- int ux, uy;
- GetXY(&ux, &uy, textwidth);
-
- // INSERT>> 追加コードはここに
- TClientDC dc(*this);
-
- if (CatalogPalette) {
- dc.SelectObject(*CatalogPalette, FALSE);
- dc.RealizePalette();
- }
-
- TRect clientRect(CatalogPosition, TSize(ux*4,uy*4));
- if (CatalogDib) {
- if (textwidth < 8) {
- TRect srcRect(TPoint(0,0), CatalogSize);
- dc.StretchDIBits(clientRect, srcRect, *CatalogDib);
- } else {
- dc.SetDIBitsToDevice(clientRect, TPoint(0,0), *CatalogDib);
- }
- } else {
- dc.PatBlt(clientRect, PATCOPY);
- }
- // dc.SelectObject(TPen(TColor::LtGray));
- dc.SelectStockObject(WHITE_PEN);
- for (int i = 0; i < 5; ++i) {
- dc.MoveTo(CatalogPosition + TPoint( 0, i*uy-1)); dc.LineTo(CatalogPosition + TPoint(4*ux, i*uy-1));
- dc.MoveTo(CatalogPosition + TPoint( 0, i*uy)); dc.LineTo(CatalogPosition + TPoint(4*ux, i*uy ));
- dc.MoveTo(CatalogPosition + TPoint( 0, i*uy+1)); dc.LineTo(CatalogPosition + TPoint(4*ux, i*uy+1));
- dc.MoveTo(CatalogPosition + TPoint(i*ux-1, 0)); dc.LineTo(CatalogPosition + TPoint(i*ux-1, 4*uy));
- dc.MoveTo(CatalogPosition + TPoint(i*ux , 0)); dc.LineTo(CatalogPosition + TPoint(i*ux , 4*uy));
- dc.MoveTo(CatalogPosition + TPoint(i*ux+1, 0)); dc.LineTo(CatalogPosition + TPoint(i*ux+1, 4*uy));
- }
- if (nowparts >= 0) {
- dc.SelectObject(TPen(cSelect));
- drawSelBox(dc, nowparts);
- }
- }
-
-
- void PartsDialog::LBNSelchange ()
- {
- // INSERT>> 追加コードはここに
- int no;
- if ((no = int(pListBox->GetItemData(pListBox->GetSelIndex()))) != nowmenu) {
- OpenCatalog(no);
- EvPaint();
- }
- }
-
- void PartsDialog::SetupWindow ()
- {
- TDialog::SetupWindow();
-
- // INSERT>> 追加のコードはここに
- for (int i = 0; i < partscount; ++i) {
- int no = pListBox->AddString(partsname[i].title.c_str());
- pListBox->SetItemData(no, i);
- }
- pListBox->SetSelIndex(nowmenu);
-
- int n = nowparts;
- nowparts = -1;
- SelectParts(n);
- TEXTMETRIC metric;
- TClientDC(*this).GetTextMetrics(metric);
- textwidth = metric.tmAveCharWidth;
-
- }
-
- void PartsDialog::UpdatePalette(BOOL alwaysRepaint)
- {
- if (CatalogPalette) {
- TClientDC clientDC(*this);
- #if !defined(__WIN32__)
- CatalogPalette->UnrealizeObject();
- #endif
- clientDC.SelectObject(*CatalogPalette, FALSE);
- if (clientDC.RealizePalette() > 0)
- if (alwaysRepaint)
- Invalidate(FALSE);
- else
- clientDC.UpdateColors();
- }
- }
-
-
- void PartsDialog::OpenCatalog(int no)
- {
- if (no < 0 || no >= partscount) {
- return;
- }
- TDib* dib = 0;
- try {
- dib = new TDib(partsname[no].catalogfile.c_str());
- }
- catch (TGdiBase::TXGdi) {
- char str[120];
- sprintf(str, "ビットマップファイル(%s)を開けません", partsname[no].catalogfile.c_str());
- MessageBox(str, GetApplication()->GetName(), MB_OK);
- return;
- }
- nowmenu = no;
- SelectParts(-1);
- delete CatalogDib;
- delete CatalogPalette;
- CatalogDib = dib;
- CatalogPalette = new TPalette(*dib);
-
- UpdatePalette(TRUE);
- }
-
-
-
- void PartsDialog::EvPaletteChanged (HWND hWndPalChg)
- {
- TDialog::EvPaletteChanged(hWndPalChg);
-
- // INSERT>> 追加コードはここに
-
- if (hWndPalChg != HWindow)
- UpdatePalette(TRUE); // 再描画する代わりに,UpdateColors() に FALSE を渡す
-
- }
-
-
- BOOL PartsDialog::EvQueryNewPalette ()
- {
- BOOL result;
-
- result = TDialog::EvQueryNewPalette();
-
- // INSERT>> 追加コードはここに
-
- UpdatePalette(TRUE);
-
- return result;
- }
-
-
-
- void PartsDialog::EvLButtonDblClk (UINT modKeys, TPoint& point)
- {
- TDialog::EvLButtonDblClk(modKeys, point);
-
- // INSERT>> 追加コードはここに
-
- // const int ux=textwidth*16, uy=textwidth*12;
- int ux, uy;
- GetXY(&ux, &uy, textwidth);
-
- TPoint p;
- p = point - CatalogPosition;
- if (nowmenu >= 0 && 0 <= p.x && p.x < ux*4 && 0 <= p.y && p.y < uy*4) {
- int x, y, n;
- x = p.x / ux;
- y = p.y / uy;
- n = y * 4 + x;
-
- SelectParts(n);
- CloseWindow(IDOK);
- }
- }
-
-