//--------------------------------------------------------------------------- #include #pragma hdrstop #include "SwitchTextureForm.h" #include "ListViewText.h" #include "GlobalUnit.h" //--------------------------------------------------------------------------- #pragma package(smart_init) //--------------------------------------------------------------------------- #pragma link "ComboBoxComponent" #pragma link "PNGButton" #pragma link "TextButton" #pragma link "CKBox" #pragma link "GeneralDialogPanel" #pragma resource "*.dfm" TSwitchTextureForm *SwitchPartternForm; //--------------------------------------------------------------------------- #define FramColor RGB(123, 123, 123) #define BkClolor RGB(39, 42, 47) #define FontClolor TColor(0xBDAA9C) #define CapClolor RGB(29, 32, 37) #define HEIGHT_TYPE 90 #define HEIGHT_PROG 90 #define HEIGHT_TITTLE 21 #define BORDER_LENGTH 1 #define TYPE_WIDTH 140 #define LSTDEPART 16 //gm 音色分类 char PROG_TYPE[75] = { 5, 7, //钢琴 2 10, 15, //音阶打击乐器 2 20, 23, //风琴 2 25, 27, 28, 30, 31,//吉他 5 39, //贝司 1 40, 41, 42, 43, 45, 46, 47,//弦乐 7 51, 54, 55, //合奏/合唱 3 56, 57, 58, 59, 60, 63,//铜管 6 67, 68, 69, 70, 71,//簧管 5 72, 73, 74, 75, 76, 77, 78, 79,//木管 8 87, //合成主音 1 95, //合成背景 1 96, 97, 98, 99, 100, 101, 102, 103, //合成效果 8 104, 105, 106, 107, 108, 109, 110, 111,//民间乐器 8 112, 113, 114, 115, 116, 117, 118, 119,//击乐器 8 120, 121, 122, 123, 124, 125, 126, 127 //声音效果 8 }; //2+2+2+5+1 +7+3+ 6+ 5+ 8+1+1+ 8*4= 43+32 = 75 TPngImage *pngType = NULL; TPngImage *pngCollect = NULL; //--------------------------------------------------------------------------- void LoadImgParttern() { if( !pngType ) pngType = new TPngImage(); if( !pngCollect ) pngCollect = new TPngImage(); pngType->LoadFromResourceName(int(HInstance), L"imgProg"); pngCollect->LoadFromResourceName(int(HInstance), L"imgCollect"); } //--------------------------------------------------------------------------- void ReleaseImgParttern() { SAFE_DELETE(pngType); SAFE_DELETE(pngCollect); } //--------------------------------------------------------------------------- FONTPRESET* InsGetDrums(int &num, int &index, char iProg=-1) { FONTINFO* pFI = g_lstFonts[g_idFont]; num = pFI->nDrumCount; FONTPRESET *pSet = pFI->aDrums; if( -1!=iProg ) { for( int i=0; i& vcProg, bool bSameType=false, bool bChan9=false ) { vcProg.clear(); if( /*!bChan9 &&*/ iProg>=0 ){ int iStart = iProg, iEnd = iProg; if( bSameType ){ if( bChan9 ){ iStart = 0; iEnd = 127; } else{ iStart = 0; for( int index=0; index<75; index++ ) { if( iProg<=PROG_TYPE[index] ) { iEnd = PROG_TYPE[index]; break; } else{ iStart = PROG_TYPE[index]+1; } } } } vcProg.push_back( iStart ); vcProg.push_back( iEnd ); } } //--------------------------------------------------------------------------- ///////////////////////////////////////////////////////////////////////////// //--------------------------------------------------------------------------- __fastcall TSwitchTextureForm::TSwitchTextureForm(TComponent* Owner, char iSegType, char iProgOri, char iFontCur, char iProgCur, TPROSTYLE *pStyleOri, char chanOri, char segNoOri, TStageList* lstStages, int iPlayBar ) : TForm(Owner) { m_bSubProg = iProgCur>=0; m_bChan9 = chanOri==9; m_cSegType = iSegType; m_cFontCur = iFontCur; m_cProgCur = iProgCur; m_cProgOri = m_cProgOriBac = iProgOri; m_pStyleOri = pStyleOri; m_cChanOri = chanOri; m_cSegNoOri = segNoOri; m_lstStages = lstStages; m_iPlayBar = iPlayBar; m_InsIndex = m_cProgOriType = -1; m_bSameType = m_bCollected = false; m_cSetFont = m_cSetProg = m_cSetProgOri = m_cSetSegType = m_cSetSegNo = m_cSetchan = -1; m_bSetCur = true; m_pSetStyle = NULL; m_btnCol = m_btnSameType = NULL; m_LstParttern = m_LstProgType = m_LstProg = NULL; LoadImgParttern(); if( !m_bSubProg ) { m_BKGPanel->Caption = L"乐器织体添加"; m_lbIntro->Caption = L"所选织体仅添加至相应类型的段落"; m_ckPlay->Enabled = false; m_ckReplaceProg->Enabled = false; m_ckPlay->Font->Color = RGB(93, 93, 93); m_ckReplaceProg->Font->Color = RGB(93, 93, 93); m_lbOri->Font->Color = RGB(93, 93, 93); } InitListPanel(); m_btnInit->Visible = m_cChanOri>=0; m_cbDrum->Visible = (iSegType & 0x80) && m_cChanOri<0; m_lbIntro->Visible = lstStages && lstStages->size()>1;//iSegType==0x03; SetTransparent( this ); } //--------------------------------------------------------------------------- __fastcall TSwitchTextureForm::~TSwitchTextureForm() { f_MM_Stop(); ReleasePt(); SAFE_DELETE(m_LstParttern) SAFE_DELETE(m_LstProgType) SAFE_DELETE(m_LstProg) SAFE_DELETE(m_btnCol) SAFE_DELETE(m_btnSameType) ReleaseImgParttern(); } //--------------------------------------------------------------------------- void __fastcall TSwitchTextureForm::InitListPanel() { f_MM_Stop(); m_cProgOri = m_cProgOriBac; if( -1==m_cProgOri ) { m_cProgOriType = -1; m_InsIndex = -1; }else { if( m_bChan9 ) { int num, index; InsGetDrums(num, index, m_cProgOri); m_cProgOriType = 0; m_InsIndex = index; } else { m_cProgOriType = m_cProgOri/8; m_InsIndex = m_cProgOri%8; } } InitTypePanel(); InitProgPanel(); // m_shapeOri->Left = m_LstProg->Left; // m_shapeOri->Width = m_LstProg->Width; // m_shapeOri->Height = 25; // // m_shapecheck->Left = m_LstProg->Left; // m_shapecheck->Width = m_LstProg->Width; // m_shapecheck->Height = 34; //m_ckPlay->Height + 4; // // m_lbOri->Left = m_shapeOri->Left+(m_shapeOri->Width-m_lbOri->Width)/2; // m_ckPlay->Left = m_shapecheck->Left+(m_shapecheck->Width/2-m_ckPlay->Width)/2; // m_ckReplaceProg->Left = m_shapecheck->Left+m_shapecheck->Width/2+(m_shapecheck->Width/2-m_ckReplaceProg->Width)/2; // // m_shapeOri->Top = m_LstProg->Top+m_LstProg->Height+LSTDEPART; // m_shapecheck->Top = m_shapeOri->Top+m_shapeOri->Height-1; // m_lbOri->Top = m_shapeOri->Top+(m_shapeOri->Height-m_lbOri->Height)/2; // m_ckPlay->Top = m_shapecheck->Top+(m_shapecheck->Height-m_ckPlay->Height)/2; // m_ckReplaceProg->Top = m_shapecheck->Top+(m_shapecheck->Height-m_ckReplaceProg->Height)/2; InitPtPanel(); /* if( !m_bSubProg ) { m_ckPlay->Enabled = false; m_ckReplaceProg->Enabled = false; m_ckPlay->Font->Color = RGB(93, 93, 93); m_ckReplaceProg->Font->Color = RGB(93, 93, 93); m_lbOri->Font->Color = RGB(93, 93, 93); } */ } //--------------------------------------------------------------------------- void __fastcall TSwitchTextureForm::DoDrawBKG(TPanelDB *Sender, TCanvas *pCanvas, TRect rtBKG) { pCanvas->Brush->Color = BkClolor; pCanvas->FillRect(rtBKG); if( Sender==(TPanelDB *)m_LstParttern ) { int iLeft, iTop, iWidth, iHeight; iWidth = rtBKG.Width(); iHeight = rtBKG.Top+rtBKG.Height(); iTop = rtBKG.Top; pCanvas->Pen->Color = FramColor; iLeft = LEFT_CAPTION+WIDTH_PROG(Sender->Width)+WIDTH_LINE/2 ; pCanvas->MoveTo(iLeft, iTop); pCanvas->LineTo(iLeft, iHeight); iLeft = LEFT_STYLE(Sender->Width)+WIDTH_STYLE(Sender->Width)+WIDTH_LINE/2; pCanvas->MoveTo(iLeft, iTop); pCanvas->LineTo(iLeft, iHeight); iLeft = LEFT_SEG(Sender->Width)+WIDTH_SEG(Sender->Width)+WIDTH_LINE/2; pCanvas->MoveTo(iLeft, iTop); pCanvas->LineTo(iLeft, iHeight); } pCanvas->Pen->Color = FramColor; pCanvas->MoveTo(0, 0); //上 pCanvas->LineTo(Sender->Width, 0); pCanvas->MoveTo(0, Sender->Height-1); //下 pCanvas->LineTo(Sender->Width, Sender->Height-1); pCanvas->MoveTo(0, 0); //左 pCanvas->LineTo(0, Sender->Height); pCanvas->MoveTo(Sender->Width-1, 0); //右 pCanvas->LineTo(Sender->Width-1, Sender->Height); } //--------------------------------------------------------------------------- int __fastcall TSwitchTextureForm::DoTitle(TTableView *Sender) { TPanelDB *pTitle = new TPanelDB(Sender); pTitle->OnDrawBKG = DoDrawTitle; // if( Sender==(TPanelDB *)m_LstParttern ) // pTitle->SetBounds(0, 0, Sender->Width, HEIGHT_TITTLE-1); // else pTitle->SetBounds(0, 0, Sender->Width, 1); if( Sender==(TTableView *)m_LstParttern ) { SAFE_DELETE(m_btnCol) SAFE_DELETE(m_btnSameType) if(!m_btnCol) { m_btnCol = new TPanelDB(this); m_btnCol->Parent = this; m_btnCol->Width = pngCollect->Width/3; m_btnCol->Height = pngCollect->Height; m_btnCol->Left = m_ShapeTexture->Left + m_ShapeTexture->Width - m_btnCol->Width - 14; m_btnCol->Top = m_ShapeTexture->Top + (m_ShapeTexture->Height - m_btnCol->Height) / 2; m_btnCol->Color = CapClolor; m_btnCol->ShowHint = true; m_btnCol->Hint = L"点击显示收藏的相应乐器的织体"; m_btnCol->OnPaintBKG = DoDrawBtn; m_btnCol->BringToFront(); } if(!m_btnSameType) { m_btnSameType = new TPanelDB(this); m_btnSameType->Parent = this; m_btnSameType->Width = pngType->Width/3; m_btnSameType->Height = pngType->Height; m_btnSameType->Left = m_btnCol->Left - m_btnCol->Width - 7; m_btnSameType->Top = m_btnCol->Top; m_btnSameType->Color = CapClolor; m_btnSameType->ShowHint = true; m_btnSameType->Hint = L"点击显示相似乐器的织体"; m_btnSameType->OnPaintBKG = DoDrawBtn; m_btnCol->BringToFront(); } m_btnSameType->OnClick = DoPtChanged; m_btnCol->OnClick = DoPtChanged; m_btnSameType->Visible = m_cProgOri>=0; m_btnSameType->Visible = !m_bChan9 && m_cProgOri>=0; } return (int)pTitle; } //--------------------------------------------------------------------------- void __fastcall TSwitchTextureForm::DoDrawTitle(TPanelDB *Sender, TCanvas *pCanvas, TRect rtBKG) { int iLeft, iTop, iWidth, iHeight; TRect rtTmp; TSize sizeFont; String strCaption; TPanelDB *pBKG = (TPanelDB *)Sender->Parent; // if( pBKG==m_LstProgType ) strCaption = L"类别"; // else if( pBKG==m_LstProg ) strCaption = m_bChan9 ? L"鼓组" : L"乐器"; // else if( pBKG==m_LstParttern ) strCaption = L"织体"; iLeft = rtBKG.Left; iTop = rtBKG.Top; iWidth = rtBKG.Width(); iHeight = rtBKG.Height(); rtTmp = TRect(iLeft, iTop, iLeft+iWidth, iTop+iHeight);//(pBKG==m_LstParttern ? iHeight/2 : iHeight) ); pCanvas->Brush->Color = CapClolor; pCanvas->FillRect(rtTmp); // sizeFont = pCanvas->TextExtent(strCaption); // iTop = pBKG==m_LstParttern ? (iHeight/2 - sizeFont.Height)/2 // : (iHeight - sizeFont.Height)/2; // iLeft = (iWidth-sizeFont.Width)/2; // pCanvas->Brush->Style = bsClear; // pCanvas->Font->Color = FontClolor; // pCanvas->TextOutW(iLeft, iTop, strCaption); // if( pBKG==m_LstParttern ) { // iLeft = rtBKG.Left; // iTop = iHeight/2; // iHeight = iHeight/2; // iWidth = pBKG->Width; // // rtTmp = TRect(iLeft, iTop, iLeft+iWidth, iTop+iHeight ); // // pCanvas->Brush->Color = BkClolor; // pCanvas->FillRect(rtTmp); // // pCanvas->Brush->Color = FramColor; // pCanvas->Pen->Color = FramColor; // pCanvas->FrameRect(rtTmp); // // pCanvas->Brush->Style = bsClear; // pCanvas->Font->Color = FontClolor; // //// pCanvas->Font->Size = 8; // strCaption = L"乐器名"; // sizeFont = pCanvas->TextExtent(strCaption); // iTop = iHeight+(iHeight - sizeFont.Height)/2; // // iLeft = LEFT_CAPTION+(WIDTH_PROG(iWidth)-sizeFont.Width)/2+5; // pCanvas->TextOutW(iLeft, iTop, strCaption); // // strCaption = L"风格"; // iLeft = LEFT_STYLE(iWidth)+(WIDTH_STYLE(iWidth)-sizeFont.Width)/2+5; // pCanvas->TextOutW(iLeft, iTop, strCaption); // // strCaption = L"片段"; // iLeft = LEFT_SEG(iWidth)+(WIDTH_SEG(iWidth)-sizeFont.Width)/2+5; // pCanvas->TextOutW(iLeft, iTop, strCaption); // // strCaption = L"收藏"; // iLeft = LEFT_COL(iWidth); // iLeft = iLeft + (iWidth-iLeft-sizeFont.Width)/2; // pCanvas->TextOutW(iLeft, iTop, strCaption); // } pCanvas->Brush->Color = FramColor; pCanvas->Pen->Color = FramColor; pCanvas->FrameRect(rtBKG); } //--------------------------------------------------------------------------- int __fastcall TSwitchTextureForm::DoBottom(TTableView *Sender) { TPanelDB *pBottom = new TPanelDB(Sender); pBottom->OnDrawBKG = DoDrawBottom; pBottom->SetBounds(0, Sender->Height-1, Sender->Width, 1); return (int)pBottom; } //--------------------------------------------------------------------------- void __fastcall TSwitchTextureForm::DoDrawBottom(TPanelDB *Sender, TCanvas *pCanvas, TRect rtBKG) { pCanvas->Brush->Color = FramColor; pCanvas->FillRect(rtBKG); } //--------------------------------------------------------------------------- void __fastcall TSwitchTextureForm::DoDrawBtn(TPanelDB *Sender, TCanvas *pCanvas, TRect rtBKG) { pCanvas->Brush->Color = CapClolor; pCanvas->FillRect(rtBKG); if( Sender==m_btnCol ) { int iWidth = pngCollect->Width/3; int nTrans = !m_bCollected ? 0: (-2*iWidth); pCanvas->Draw(rtBKG.Left+nTrans, rtBKG.Top, pngCollect); }else if( Sender==m_btnSameType ) { int iWidth = pngType->Width/3; int nTrans = !m_bSameType? 0: (-2*iWidth); pCanvas->Draw(rtBKG.Left+nTrans, rtBKG.Top, pngType); } } //--------------------------------------------------------------------------- void __fastcall TSwitchTextureForm::InitTypePanel() { if( !m_LstProgType ) { m_LstProgType = new TListViewText(this); m_LstProgType->Parent = m_panType;// this; m_LstProgType->Left = 0; m_LstProgType->Top = 0; m_LstProgType->Width = m_panType->Width; m_LstProgType->Height = m_panType->Height; m_LstProgType->OnClick= DoProgChanged; m_LstProgType->OnDrawBKG = DoDrawBKG; m_LstProgType->OnTitle = DoTitle; m_LstProgType->OnBottom = DoBottom; m_LstProgType->Border = 1; m_LstProgType->SetTextFontSize(g_szFont9); m_LstProgType->OnMouseEnter = DoPanelFocus; } m_VCType.clear(); if( m_bChan9 ) { m_VCType.push_back("GM鼓"); } else { for(int i=0; i<16; i++) m_VCType.push_back(GM_GROUP[i]); } ((TListViewText *)m_LstProgType)->m_VcText = &m_VCType; if( -1!=m_cProgOriType ) m_LstProgType->IndSel = m_cProgOriType; m_LstProgType->ReloadData(m_LstProgType->IndSel); } //--------------------------------------------------------------------------- void __fastcall TSwitchTextureForm::InitProgPanel() { if( !m_LstProg ) { m_LstProg = new TListViewText(this); m_LstProg->Parent = m_panProg;// this; m_LstProg->Left = 0; m_LstProg->Top = 0; //m_LstProgType->Top + m_LstProgType->Height + LSTDEPART; m_LstProg->Height = m_panProg->Height;// HEIGHT_TYPE+HEIGHT_TITTLE; m_LstProg->Width = m_panProg->Width;// TYPE_WIDTH; m_LstProg->OnClick= DoProgChanged; m_LstProg->OnDrawBKG = DoDrawBKG; m_LstProg->OnTitle = DoTitle; m_LstProg->OnBottom = DoBottom; m_LstProg->Border = 1; m_LstProg->OnMouseEnter = DoPanelFocus; m_LstProg->SetTextFontSize(g_szFont9); } m_VCProg.clear(); if( -1!=m_cProgOriType ){ if( m_bChan9 ) { int num, index; FONTPRESET* pSet = InsGetDrums(num, index); for( int i=0; im_VcText = &m_VCProg; if( -1!=m_InsIndex ) m_LstProg->IndSel = m_InsIndex; m_LstProg->ReloadData(m_LstProg->IndSel); } //--------------------------------------------------------------------------- void __fastcall TSwitchTextureForm::InitPtPanel() { m_VCProgSearch.clear(); ReleasePt(); if( -1!=m_cProgOri ) { InsSearchType(m_cProgOri, m_VCProgSearch, m_bSameType, m_bChan9); InitPtStyle( g_aOriginStyles ); InitPtStyle( g_aShareStyles ); InitPtStyle( g_aLocalStyles ); } if( !m_LstParttern ) { m_LstParttern = new TListViewPattern(this, m_bChan9, m_lstStages, m_iPlayBar); m_LstParttern->Parent = m_panTexture;//this; m_LstParttern->Left = 0;//m_LstProgType->Left+m_LstProgType->Width+20; m_LstParttern->Top = 0;//m_LstProgType->Top; m_LstParttern->Height = m_panTexture->Height;// m_shapecheck->Top+m_shapecheck->Height-m_LstProgType->Top; m_LstParttern->Width = m_panTexture->Width; // m_btnCancel->Left+m_btnCancel->Width-m_LstParttern->Left; m_LstParttern->Color = BkClolor; m_LstParttern->OnDrawBKG = DoDrawBKG; m_LstParttern->OnTitle = DoTitle; m_LstParttern->OnBottom = DoBottom; m_LstParttern->Border = 1; m_LstParttern->SetTextFontSize(g_szFont9); m_LstParttern->OnMouseEnter = DoPanelFocus; ((TListViewPattern*)m_LstParttern)->OnTextureChanged = OnTextureChanged; } int index = -1; if( m_pStyleOri ){ for( int i=0; iidLoc==m_pStyleOri->idLoc && pPtInfo->idStyle==m_pStyleOri->idStyle && ((1<segType) & m_cSegType) && pPtInfo->segNo==m_cSegNoOri && pPtInfo->prog==m_cProgOriBac ){ if( m_pStyleOri->idLoc==0 ) { if( m_pStyleOri->pOrigin->detail.tracks[pPtInfo->segType][m_cSegNoOri][pPtInfo->chNo].no==m_cChanOri ){ index = i; break; } } else if( m_pStyleOri->idLoc!=0 && m_pStyleOri->idLoc!=1 ){ if( m_pStyleOri->pLocal->trkRef[pPtInfo->segType][m_cSegNoOri][pPtInfo->chNo].chan==m_cChanOri ){ index = i; break; } } } } } m_LstParttern->IndSel = index; ((TListViewPattern *)m_LstParttern)->m_LstParttern = &m_VCPtInfo; ((TListViewPattern *)m_LstParttern)->m_pPtInfo = NULL; m_LstParttern->ReloadData(index); if( m_btnInit->Visible ) m_btnInit->Enabled = index>=0; m_btnTry->Enabled = false; } //--------------------------------------------------------------------------- void __fastcall TSwitchTextureForm::ReleasePt() { for( int i=0; iidLoc==0 ? info->pOrigin->detail.nSegNum[s] : info->idLoc==1 ? info->pShare->nSegNum[s] : info->pLocal->nSegNum[s]; int num = s>4 ); if( num>0 ) { for( int i=0; iidLoc==0 && info->pOrigin->detail.tracks[s][sn][j].no>=0 ) || ( info->idLoc==1 && info->pShare->trkRef[s][sn][j].idStyle>0 ) || ( info->idLoc!=0 && info->idLoc!=1 && info->pLocal->trkRef[s][sn][j].idStyle>0 ) ) { char chan = info->idLoc==0 ? info->pOrigin->detail.tracks[s][sn][j].no : info->idLoc==1 ? info->pShare->trkRef[s][sn][j].chan : info->pLocal->trkRef[s][sn][j].chan; if( (m_bChan9 && chan!=9) || (!m_bChan9 && chan==9) ) continue; int state = info->idLoc==0 ? info->pOrigin->state : info->idLoc==1 ? GetStyleInfo( 0, info->pShare->trkRef[s][sn][j].idStyle )->pOrigin->state : e_Downloaded; if( state!=e_Downloaded ) continue; char prog = info->idLoc==0 ? info->pOrigin->detail.tracks[s][sn][j].prog : info->idLoc==1 ? info->pShare->trkRef[s][sn][j].prog : info->pLocal->trkRef[s][sn][j].prog, vol = info->idLoc==0 ? info->pOrigin->detail.tracks[s][sn][j].vol : info->idLoc==1 ? info->pShare->trkRef[s][sn][j].vol : info->pLocal->trkRef[s][sn][j].vol; // if( info->idLoc!=0 && info->idLoc!=1 ) { // DebugPrint("j=%d, s=%d, sn=%d, chan=%d, prog=%d", j, s, sn, chan, prog); // } // if( info->idLoc==1 ) { // DebugPrint("j=%d, s=%d, sn=%d, chan=%d, prog=%d", j, s, sn, chan, prog); // } bool bCollected = IsFavorTexture( info->idLoc, info->idStyle, s, sn, chan ); bool bShow = !m_bCollected || bCollected; if( !m_VCProgSearch.empty() ){ if( progm_VCProgSearch[1] ) bShow= false; } if( bShow ){ TTextureInfo* pPtInfo = new TTextureInfo( info->idLoc, info->idStyle, s, sn, j, prog, vol, bCollected); m_VCPtInfo.push_back( pPtInfo ); } } } // DebugPrint("* * * * * * * * * * * * * * * * * * "); } } } } } //--------------------------------------------------------------------------- void __fastcall TSwitchTextureForm::DoPtChanged(TObject *Sender) { f_MM_Stop(); TPanelDB *pBtnCur = (TPanelDB *)Sender; if( m_btnCol==pBtnCur ) { m_bCollected = !m_bCollected; if( m_bCollected ) m_btnCol->Hint = L"点击显示全部相应乐器的织体"; else m_btnCol->Hint = L"点击显示收藏的相应乐器的织体"; } else if( m_btnSameType==pBtnCur ) { m_bSameType = !m_bSameType; if( m_bSameType ) m_btnSameType->Hint = L"点击显示相同乐器的织体"; else m_btnSameType->Hint = L"点击显示相似乐器的织体"; } InitPtPanel(); m_btnCol->Refresh(); m_btnSameType->Refresh(); } //--------------------------------------------------------------------------- void __fastcall TSwitchTextureForm::DoProgChanged(TObject *Sender) { if( m_LstProgType==(TTableView *)Sender ) { if( m_cProgOriType == m_LstProgType->IndSel && m_cProgOriType!=-1 ) return; m_cProgOriType = m_LstProgType->IndSel; m_LstProg->IndSel = -1; m_InsIndex = -1; m_cProgOri = -1; InitProgPanel(); }else if( m_LstProg==(TTableView *)Sender ) { if( m_InsIndex==m_LstProg->IndSel ) return; m_InsIndex = m_LstProg->IndSel; if( -1!=m_cProgOriType ) { if( m_bChan9 ) { int num, index; FONTPRESET* pSet = InsGetDrums(num, index); m_cProgOri = pSet[m_InsIndex].id; } else m_cProgOri = m_cProgOriType*8+m_InsIndex; } } f_MM_Stop(); InitPtPanel(); } //--------------------------------------------------------------------------- void __fastcall TSwitchTextureForm::DoPartternInit(TObject *Sender) { f_MM_Stop(); InitListPanel(); m_cSetFont = m_cSetProg = m_cSetProgOri = m_cSetSegType = m_cSetSegNo = -1; m_pSetStyle = NULL; m_btnTry->Enabled = false; if( m_btnInit->Visible ) m_btnInit->Enabled = false; } //--------------------------------------------------------------------------- void __fastcall TSwitchTextureForm::OnTextureChanged(TObject *Sender) { TTextureInfo *pPtInfo = ((TListViewPattern *)m_LstParttern)->m_pPtInfo; if( !pPtInfo ) return; // TINSREF *pInsRef = pPtInfo->insRef; // TPROSTYLE *pStyle = pPtInfo->styleInfo; UINT iStyleId, iStyleLoc; char st = pPtInfo->segType, sn = pPtInfo->segNo, tn = pPtInfo->chNo; m_cSetSegType = st; m_cSetSegNo = sn; m_cSetFont = m_bSetCur ? -1 : m_cFontCur; m_cSetProg = m_cSetProgOri = pPtInfo->prog; m_cSetVol = m_cSetVolOri = pPtInfo->vol; TPROSTYLE* pStyle = GetStyleInfo( pPtInfo->idLoc, pPtInfo->idStyle ); if( pPtInfo->idLoc==0 ){ m_pSetStyle = pStyle; m_cSetchan = pStyle->pOrigin->detail.tracks[st][sn][tn].no; } else if( pPtInfo->idLoc==1 ){ TSTYLESHARE* pShare = pStyle->pShare; TSHARETRACKREF& trkRef = pShare->trkRef[st][sn][tn]; m_cSetchan = trkRef.chan; int osn = trkRef.segNo; char chan = trkRef.chan; m_pSetStyle = GetStyleInfo( 0, trkRef.idStyle ); if( m_pSetStyle!=pStyle ){ for( int t=0; t<16; t++ ){ if( m_pSetStyle->pOrigin->detail.tracks[st][osn][t].no==chan ){ m_cSetProgOri = m_pSetStyle->pOrigin->detail.tracks[st][osn][t].prog; m_cSetVolOri = m_pSetStyle->pOrigin->detail.tracks[st][osn][t].vol; break; } } } } else{ TSTYLELOCAL* pLocal = pStyle->pLocal; TTRACKREF& trkRef = pLocal->trkRef[st][sn][tn]; iStyleLoc = trkRef.idLoc; iStyleId = trkRef.idStyle; m_cSetchan = trkRef.chan; int osn = trkRef.segNo; char chan = trkRef.chan; m_pSetStyle = GetStyleInfo( iStyleLoc, iStyleId ); if( m_pSetStyle!=pStyle ){ for( int t=0; t<16; t++ ){ if( iStyleLoc==0 ){ if( m_pSetStyle->pOrigin->detail.tracks[st][osn][t].no==chan ){ m_cSetProgOri = m_pSetStyle->pOrigin->detail.tracks[st][osn][t].prog; m_cSetVolOri = m_pSetStyle->pOrigin->detail.tracks[st][osn][t].vol; break; } } else{ int nSegNum = pLocal->nSegNum[st]; int iStart = ( st>4 )); bool bFind = false; for( int i=iStart; !bFind && ipLocal->trkRef[st][i][j].idLoc==iStyleLoc && m_pSetStyle->pLocal->trkRef[st][i][j].idStyle==iStyleId && m_pSetStyle->pLocal->trkRef[st][i][j].segNo==osn && m_pSetStyle->pLocal->trkRef[st][i][j].chan==chan ){ m_cSetProgOri = m_pSetStyle->pLocal->trkRef[st][i][j].prog; m_cSetVolOri = m_pSetStyle->pLocal->trkRef[st][i][j].vol; bFind = true; break; } else if( m_pSetStyle->pLocal->trkRef[st][i][j].idLoc==0 && m_pSetStyle->pLocal->trkRef[st][i][j].idStyle==0 ){ break; } } } } } } } bool bChange = m_pSetStyle!=m_pStyleOri || m_cSetSegNo!=m_cSegNoOri || m_cSetProg!=m_cProgOri || m_cSetchan!=m_cChanOri; if( m_btnInit->Visible ) m_btnInit->Enabled = bChange; m_btnTry->Enabled = bChange || m_cSetFont!=m_cFontCur; } //--------------------------------------------------------------------------- void __fastcall TSwitchTextureForm::DoPartternUse(TObject *Sender) { f_MM_Stop(); } //--------------------------------------------------------------------------- void __fastcall TSwitchTextureForm::DoPanelFocus(TObject *Sender) { TPanelDB *pPanel = (TPanelDB *)Sender; if( pPanel==m_LstParttern ) m_LstParttern->SetFocus(); if( pPanel==m_LstProgType ) m_LstProgType->SetFocus(); if( pPanel==m_LstProg ) m_LstProg->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TSwitchTextureForm::CurProgPlayClick(TObject *Sender) { int iFont = -1, iProg = -1; if( !m_ckPlay->Checked ){ iFont = m_cFontCur; iProg = m_cProgCur; } if( ((TListViewPattern *)m_LstParttern)->m_iFont!=iFont || ((TListViewPattern *)m_LstParttern)->m_iProg!=iProg ){ f_MM_Stop(); ((TListViewPattern *)m_LstParttern)->m_iFont = iFont; ((TListViewPattern *)m_LstParttern)->m_iProg = iProg; } } //--------------------------------------------------------------------------- void __fastcall TSwitchTextureForm::ReplaceProgClick(TObject *Sender) { if( m_ckReplaceProg->Checked ) { m_bSetCur = true; if( m_ckPlay->Checked==false ) { m_ckPlay->Checked = true; CurProgPlayClick(NULL); } } else { m_bSetCur = false; } if( m_pSetStyle ){ m_cSetFont = m_bSetCur ? -1 : m_cFontCur; bool bChange = m_pSetStyle!=m_pStyleOri || m_cSetFont!=m_cFontCur || m_cSetSegNo!=m_cSegNoOri || m_cSetProg!=m_cProgOri || m_cSetchan!=m_cChanOri; m_btnTry->Enabled = bChange; } } //--------------------------------------------------------------------------- void __fastcall TSwitchTextureForm::DrumClick(TObject *Sender) { f_MM_Stop(); m_cChanOri = m_cbDrum->Checked ? 9 : -1; m_bChan9 = m_cChanOri==9; ((TListViewPattern *)m_LstParttern)->m_bChan9 = m_bChan9; InitListPanel(); m_cSetFont = m_cSetProg = m_cSetSegType = m_cSetSegNo = -1; m_pSetStyle = NULL; m_btnTry->Enabled = false; if( m_btnInit->Visible ) m_btnInit->Enabled = false; } //--------------------------------------------------------------------------- void __fastcall TSwitchTextureForm::FormCreate(TObject *Sender) { m_BKGPanel->Font->Size = g_szFont9; m_btnTry->FontSize = g_szFont9; m_btnCancel->FontSize = g_szFont9; m_btnInit->FontSize = g_szFont9; m_ckPlay->Font->Size = g_szFont9; m_ckReplaceProg->Font->Size = g_szFont9; m_cbDrum->Font->Size = g_szFont9; Canvas->Font->Size = g_szFont9; } //---------------------------------------------------------------------------