mirror of
https://github.com/n5ac/mmsstv.git
synced 2025-12-06 04:12:03 +01:00
321 lines
9 KiB
C++
321 lines
9 KiB
C++
//Copyright+LGPL
|
||
|
||
//-----------------------------------------------------------------------------------------------------------------------------------------------
|
||
// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba
|
||
//-----------------------------------------------------------------------------------------------------------------------------------------------
|
||
// This file is part of MMSSTV.
|
||
|
||
// MMSSTV is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License
|
||
// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||
|
||
// MMSSTV is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||
|
||
// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see
|
||
// <http://www.gnu.org/licenses/>.
|
||
//-----------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
|
||
|
||
//---------------------------------------------------------------------
|
||
#include <vcl.h>
|
||
#pragma hdrstop
|
||
|
||
#include "ComLib.h"
|
||
#include "Main.h"
|
||
#include "ListText.h"
|
||
//---------------------------------------------------------------------
|
||
#pragma resource "*.dfm"
|
||
static int SaveTopRow;
|
||
static int SaveRow;
|
||
//---------------------------------------------------------------------
|
||
__fastcall TListTextDlg::TListTextDlg(TComponent* AOwner)
|
||
: TForm(AOwner)
|
||
{
|
||
MultProc();
|
||
FormStyle = ((TForm *)AOwner)->FormStyle;
|
||
Font->Name = ((TForm *)AOwner)->Font->Name;
|
||
Font->Charset = ((TForm *)AOwner)->Font->Charset;
|
||
if( MsgEng ){
|
||
Caption = "Defined text";
|
||
CancelBtn->Caption = "Cancel";
|
||
DelBtn->Caption = "Delete";
|
||
EditBtn->Caption = "Edit";
|
||
UpBtn->Caption = "Up";
|
||
DwnBtn->Caption = "Down";
|
||
m_Jpn = 0;
|
||
}
|
||
else {
|
||
m_Jpn = 1;
|
||
}
|
||
pList = NULL;
|
||
MultProc();
|
||
}
|
||
//---------------------------------------------------------------------
|
||
void __fastcall TListTextDlg::UpdateUI(void)
|
||
{
|
||
if( Grid->Row && (Grid->Row <= pList->m_Cnt) ){
|
||
DelBtn->Enabled = TRUE;
|
||
OKBtn->Enabled = TRUE;
|
||
}
|
||
else {
|
||
DelBtn->Enabled = FALSE;
|
||
OKBtn->Enabled = FALSE;
|
||
}
|
||
EditBtn->Enabled = Grid->Row ? TRUE : FALSE;
|
||
UpBtn->Enabled = (Grid->Row > 1) && (Grid->Row <= pList->m_Cnt) ? TRUE : FALSE;
|
||
DwnBtn->Enabled = (Grid->Row <= (pList->m_Cnt - 1)) ? TRUE : FALSE;
|
||
}
|
||
//---------------------------------------------------------------------
|
||
CDraw *__fastcall TListTextDlg::Execute(CDrawGroup *pg, int pos)
|
||
{
|
||
pList = pg;
|
||
Grid->RowCount = pList->m_Cnt + 2;
|
||
if( pos < 0 ){
|
||
Grid->Row = Grid->RowCount - 2;
|
||
int n = Grid->Row - 11;
|
||
if( n < 1 ) n = 1;
|
||
Grid->TopRow = n;
|
||
}
|
||
else if( SaveRow && SaveTopRow ){
|
||
Grid->TopRow = SaveTopRow;
|
||
Grid->Row = SaveRow;
|
||
}
|
||
UpdateUI();
|
||
MultProc();
|
||
int r = ShowModal();
|
||
MultProc();
|
||
SaveTopRow = Grid->TopRow;
|
||
SaveRow = Grid->Row;
|
||
if( r == IDOK ){
|
||
return (CDraw *)pList->pBase[Grid->Row - 1];
|
||
}
|
||
return NULL;
|
||
}
|
||
//---------------------------------------------------------------------
|
||
void __fastcall TListTextDlg::DrawGrade(CDrawText *pItem, TRect &Rect)
|
||
{
|
||
TRect rc = Rect;
|
||
rc.Top += 2;
|
||
rc.Bottom -= 2;
|
||
int xw = (Rect.Right - Rect.Left)/4;
|
||
int yw = (Rect.Bottom - Rect.Top)/4;
|
||
switch(pItem->m_Grade){
|
||
case 0:
|
||
Grid->Canvas->Brush->Color = pItem->m_Col1;
|
||
Grid->Canvas->FillRect(rc);
|
||
break;
|
||
case 1:
|
||
rc.Right = rc.Left + xw;
|
||
Grid->Canvas->Brush->Color = pItem->m_Col1;
|
||
Grid->Canvas->FillRect(rc);
|
||
rc.Left += xw;
|
||
rc.Right += xw;
|
||
Grid->Canvas->Brush->Color = pItem->m_Col2;
|
||
Grid->Canvas->FillRect(rc);
|
||
rc.Left += xw;
|
||
rc.Right += xw;
|
||
Grid->Canvas->Brush->Color = pItem->m_Col3;
|
||
Grid->Canvas->FillRect(rc);
|
||
rc.Left += xw;
|
||
rc.Right += xw;
|
||
Grid->Canvas->Brush->Color = pItem->m_Col4;
|
||
Grid->Canvas->FillRect(rc);
|
||
break;
|
||
case 2:
|
||
rc.Bottom = rc.Top + yw;
|
||
Grid->Canvas->Brush->Color = pItem->m_Col1;
|
||
Grid->Canvas->FillRect(rc);
|
||
rc.Top += yw;
|
||
rc.Bottom += yw;
|
||
Grid->Canvas->Brush->Color = pItem->m_Col2;
|
||
Grid->Canvas->FillRect(rc);
|
||
rc.Top += yw;
|
||
rc.Bottom += yw;
|
||
Grid->Canvas->Brush->Color = pItem->m_Col3;
|
||
Grid->Canvas->FillRect(rc);
|
||
rc.Top += yw;
|
||
rc.Bottom += yw;
|
||
Grid->Canvas->Brush->Color = pItem->m_Col4;
|
||
Grid->Canvas->FillRect(rc);
|
||
break;
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------
|
||
void __fastcall TListTextDlg::DrawShadow(CDrawText *pItem, TRect &Rect)
|
||
{
|
||
LPCSTR _tt[2][9]={
|
||
{"None","Siege", "Shadow1", "Shadow2", "Shadow3", "Shadow4", "Shadow5", "Shadow6", "?",},
|
||
{"<EFBFBD>Ȃ<EFBFBD>","<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<EFBFBD>e1", "<EFBFBD>e2","<EFBFBD>e3","<EFBFBD>e4","<EFBFBD>e5","<EFBFBD>e6","?"},
|
||
};
|
||
int X = Rect.Left + 4;
|
||
int Y = Rect.Top + 2;
|
||
TRect rc = Rect;
|
||
rc.Top += 2;
|
||
rc.Bottom -= 2;
|
||
rc.Left = rc.Right - (Rect.Right - Rect.Left)/4;
|
||
int n = pItem->m_Shadow;
|
||
if( (n < 0) || (n > 8) ) n = 8;
|
||
Grid->Canvas->TextOut(X, Y, _tt[m_Jpn][n]);
|
||
if( pItem->m_Shadow ){
|
||
Grid->Canvas->Brush->Color = pItem->m_ColS;
|
||
Grid->Canvas->FillRect(rc);
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------
|
||
static void __fastcall ConvCRLF(LPSTR s)
|
||
{
|
||
LPSTR p = s;
|
||
for( ; *p; p++ ){
|
||
if( (*p == CR) || (*p == LF) ){
|
||
*p = '\\';
|
||
}
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------
|
||
void __fastcall TListTextDlg::GridDrawCell(TObject *Sender, int Col,
|
||
int Row, TRect &Rect, TGridDrawState State)
|
||
{
|
||
if( pList == NULL ) return;
|
||
|
||
char bf[256];
|
||
|
||
Grid->Canvas->FillRect(Rect);
|
||
int X = Rect.Left + 4;
|
||
int Y = Rect.Top + 2;
|
||
|
||
if( Row ){
|
||
Row--;
|
||
bf[0] = 0;
|
||
int ec = 4;
|
||
if( Row < pList->m_Cnt ){
|
||
// strcpy(bf, "-");
|
||
bf[0] = 0;
|
||
LPCSTR p;
|
||
CDraw *pItem = pList->pBase[Row];
|
||
CDrawLib *pLib = (CDrawLib *)pItem;
|
||
CDrawText *pText = (CDrawText *)pItem;
|
||
if( (pItem->m_Command != CM_TEXT) && (pItem->m_Command != CM_LIB) ) return;
|
||
if( pItem->m_Command == CM_LIB ) ec = 6;
|
||
switch(Col){
|
||
case 0: // No.
|
||
sprintf(bf, "%u%s", Row+1, (pItem->m_Command == CM_LIB)?" c":"");
|
||
break;
|
||
case 1: // text
|
||
p = (pItem->m_Command == CM_TEXT) ? pText->m_Text.c_str() : pLib->GetItemText();
|
||
StrCopy(bf, p, sizeof(bf)-1);
|
||
ConvCRLF(bf);
|
||
break;
|
||
case 2: // text
|
||
p = (pItem->m_Command == CM_TEXT) ? pText->m_Text.c_str() : pLib->GetItemText();
|
||
Mmsstv->MacroText(bf, p, sizeof(bf)-1);
|
||
ConvCRLF(bf);
|
||
break;
|
||
case 3: // text
|
||
if( pItem->m_Command == CM_TEXT ){
|
||
sprintf(bf, "%u", pText->pFont->Size);
|
||
}
|
||
break;
|
||
case 4: // color
|
||
if( pItem->m_Command == CM_TEXT ){
|
||
DrawGrade(pText, Rect);
|
||
}
|
||
break;
|
||
case 5: // Shadow
|
||
if( pItem->m_Command == CM_TEXT ){
|
||
DrawShadow(pText, Rect);
|
||
}
|
||
break;
|
||
}
|
||
if( pItem->m_Command == CM_TEXT ){
|
||
if( ((Col == 1) || (Col == 2)) && (pText->pFont != NULL) ){
|
||
Grid->Canvas->Font->Name = pText->pFont->Name;
|
||
Grid->Canvas->Font->Charset = pText->pFont->Charset;
|
||
}
|
||
}
|
||
else {
|
||
Grid->Canvas->Font->Name = Font->Name;
|
||
Grid->Canvas->Font->Charset = Font->Charset;
|
||
}
|
||
}
|
||
if( Col < ec ){
|
||
Grid->Canvas->TextRect(Rect, X, Y, bf);
|
||
}
|
||
}
|
||
else { // <20>^<5E>C<EFBFBD>g<EFBFBD><67>
|
||
LPCSTR _tt[2][6]={
|
||
{"No.","Defined Text", "Macro conversion", "Size", "Color", "Shadow",},
|
||
{"No.","<EFBFBD><EFBFBD><EFBFBD>`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<EFBFBD>}<7D>N<EFBFBD><4E><EFBFBD>ϊ<EFBFBD>", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>","<EFBFBD>F","<EFBFBD>e",},
|
||
};
|
||
Grid->Canvas->TextRect(Rect, X, Y, _tt[m_Jpn][Col]);
|
||
}
|
||
if( !Col ) MultProc();
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TListTextDlg::DelBtnClick(TObject *Sender)
|
||
{
|
||
if( Grid->Row && (Grid->Row <= pList->m_Cnt) ){
|
||
pList->DeleteItem(pList->pBase[Grid->Row-1]);
|
||
Grid->RowCount = pList->m_Cnt + 2;
|
||
Grid->Invalidate();
|
||
UpdateUI();
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TListTextDlg::GridClick(TObject *Sender)
|
||
{
|
||
UpdateUI();
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TListTextDlg::EditBtnClick(TObject *Sender)
|
||
{
|
||
if( Grid->Row ){
|
||
if( Grid->Row <= pList->m_Cnt ){
|
||
if( pList->pBase[Grid->Row-1]->Edit() == TRUE ){
|
||
Grid->Invalidate();
|
||
}
|
||
}
|
||
else {
|
||
CDrawText *pItem = (CDrawText *)pList->MakeItem(CM_TEXT);
|
||
pItem->Start(Mmsstv->PBoxTemp->Canvas, 0, 0);
|
||
if( pItem->Finish(0, 0) ){
|
||
pList->AddItem(pItem);
|
||
Grid->RowCount = pList->m_Cnt + 2;
|
||
Grid->Invalidate();
|
||
UpdateUI();
|
||
}
|
||
else {
|
||
delete pItem;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TListTextDlg::UpBtnClick(TObject *Sender)
|
||
{
|
||
if( Grid->Row > 1 ){
|
||
Grid->Row--;
|
||
pList->UpItem(Grid->Row);
|
||
Grid->Invalidate();
|
||
UpdateUI();
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TListTextDlg::DwnBtnClick(TObject *Sender)
|
||
{
|
||
if( Grid->Row <= (pList->m_Cnt - 1) ){
|
||
pList->DownItem(Grid->Row-1);
|
||
Grid->Row++;
|
||
Grid->Invalidate();
|
||
UpdateUI();
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
|