2496 lines
64 KiB
C++
2496 lines
64 KiB
C++
// ---------------------------------------------------------------------------
|
|
|
|
#include <vcl.h>
|
|
#pragma hdrstop
|
|
#include "GlobalUnit.h"
|
|
#include "StyleSelFormUnit.h"
|
|
#include "MessageFormUnit.h"
|
|
|
|
#define FONT_RANGE 20
|
|
#define FONT_SIZE 10
|
|
#define PAGE_NUM_SHOW 6
|
|
#define LISTBOX_NUM_SHOW 20
|
|
#define LISTBOX_DOWN_WIDTH 40
|
|
|
|
#define BTNSTATE_RECOMMAND 0
|
|
#define BTNSTATE_FIND 1
|
|
#define BTNSTATE_COLLECT 2
|
|
#define BTNSTATE_SERACH 3
|
|
#define BTNSTATE_RECORD 4
|
|
|
|
TSTYLEINFO *sg_aMsg = NULL;
|
|
DEFTSTYLEINFO * sg_tTmpMsg = NULL;
|
|
int sg_nMsg = 0;
|
|
|
|
vector<int>vc_vCollect; // 收藏列表
|
|
vector<TSTYLEINFO>vc_vAllStyles;
|
|
vector<DEFTSTYLEINFO>vc_vUseRecord; // 使用记录列表
|
|
vector<DEFTSTYLEINFO>vc_vFind; // 符合查找条件列表
|
|
vector<DEFTSTYLEINFO>::iterator vc_pFind;
|
|
|
|
int sg_iBeat = -1;
|
|
int g_iCurStyleSort = -1;
|
|
|
|
int __fastcall lessmarkCost(void * Item1, void * Item2)
|
|
{
|
|
DEFTSTYLEINFO *tmpSG1 = (DEFTSTYLEINFO *)Item1;
|
|
DEFTSTYLEINFO *tmpSG2 = (DEFTSTYLEINFO *)Item2;
|
|
|
|
if( tmpSG1->tStyleInfo.cost < tmpSG2->tStyleInfo.cost){
|
|
return -1;
|
|
}else if(tmpSG1->tStyleInfo.cost > tmpSG2->tStyleInfo.cost){
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int __fastcall lessmarkScore(void * Item1, void * Item2)
|
|
{
|
|
DEFTSTYLEINFO *tmpSG1 = (DEFTSTYLEINFO *)Item1;
|
|
DEFTSTYLEINFO *tmpSG2 = (DEFTSTYLEINFO *)Item2;
|
|
|
|
if( tmpSG1->tStyleInfo.score < tmpSG2->tStyleInfo.score){
|
|
return -1;
|
|
}else if(tmpSG1->tStyleInfo.score > tmpSG2->tStyleInfo.score){
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
#pragma package(smart_init)
|
|
#pragma link "PNGButton"
|
|
#pragma resource "*.dfm"
|
|
TStyleSelForm *StyleSelForm;
|
|
|
|
USEFORM("MessageFormUnit.cpp", MessageForm);
|
|
|
|
// ---------------------------------------------------------------------------
|
|
__fastcall TStyleSelForm::TStyleSelForm(TComponent* Owner) : TForm(Owner)
|
|
{
|
|
m_iOldItemState = -1;
|
|
m_iOldItemIndex = -1;
|
|
m_iDwnLdgIndex = -1;
|
|
|
|
m_bBase = false;
|
|
m_iSelStage = -1;
|
|
m_iChordType = -1;
|
|
m_idSelected = -1;
|
|
m_iSegType = -1;
|
|
m_iSegNo = -1;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
void __fastcall TStyleSelForm::FormCreate(TObject *Sender)
|
|
{
|
|
// 屏幕位置显示
|
|
Left = Screen->Width / 2 - Width / 2;
|
|
Top = Screen->Height / 2 - Height / 2;
|
|
|
|
// 圆角
|
|
HRGN hRgn = CreateRoundRectRgn(0, 0, Width + 1, Height + 1, 6, 6);
|
|
SetWindowRgn(Handle, hRgn, TRUE);
|
|
DeleteObject(hRgn);
|
|
|
|
// 相关图片加载
|
|
m_pImgRadioDown = new TBitmap();
|
|
m_pImgRadioUp = new TBitmap();
|
|
m_pImgCheckDown = new TBitmap();
|
|
m_pImgCheckUp = new TBitmap();
|
|
|
|
m_pImgCheckDown->LoadFromResourceName(int(HInstance), "StyleLstCheckA");
|
|
m_pImgCheckUp->LoadFromResourceName(int(HInstance), "StyleLstCheckB");
|
|
m_pImgRadioDown->LoadFromResourceName(int(HInstance), "StyleLstRadioA");
|
|
m_pImgRadioUp->LoadFromResourceName(int(HInstance), "StyleLstRadioB");
|
|
|
|
m_lblTitle->Font->Color = RGB(60,43,23);
|
|
|
|
// 收藏菜单
|
|
m_pPopMenu = new TPopMenu(this);
|
|
// 隐藏查找框
|
|
m_ImgFind->Visible = false;
|
|
|
|
// 按钮状态
|
|
m_iBtnState = BTNSTATE_FIND;
|
|
|
|
// 视听伴奏类型按钮
|
|
m_pbRadio[0] = m_pbBase1;
|
|
m_pbRadio[1] = m_pbBase2;
|
|
m_pbRadio[2] = m_pbBase3;
|
|
m_pbRadio[3] = m_pbBase4;
|
|
m_pbRadio[4] = m_pbInt1;
|
|
m_pbRadio[5] = m_pbInt2;
|
|
m_pbRadio[6] = m_pbInt3;
|
|
m_pbRadio[7] = m_pbInt4;
|
|
m_pbRadio[8] = m_pbEnd1;
|
|
m_pbRadio[9] = m_pbEnd2;
|
|
m_pbRadio[10] = m_pbEnd3;
|
|
m_pbRadio[11] = m_pbEnd4;
|
|
m_pbRadio[12] = m_pbFull;
|
|
// 上下、头尾页按钮
|
|
m_btnPages[0] = m_btnHeadPage;
|
|
m_btnPages[1] = m_btnUpPage;
|
|
m_btnPages[2] = m_btnNextPage;
|
|
m_btnPages[3] = m_btnEndPage;
|
|
// 查找按钮
|
|
m_pbChecks[0] = m_pbPop;
|
|
m_pbChecks[1] = m_pbFolk;
|
|
m_pbChecks[2] = m_pbRock;
|
|
m_pbChecks[3] = m_pbDance;
|
|
m_pbChecks[4] = m_pbJazz;
|
|
m_pbChecks[5] = m_pbBlus;
|
|
m_pbChecks[6] = m_pbSamba;
|
|
m_pbChecks[7] = m_pbClassical;
|
|
m_pbChecks[8] = m_pbWaltz;
|
|
m_pbChecks[9] = m_pbOthStyle;
|
|
m_pbChecks[10] = m_pbFree;
|
|
m_pbChecks[11] = m_pbInverts;
|
|
|
|
// 得到默认选择查找类型
|
|
for (int i = 0; i < CHECK_NUM; i++)
|
|
m_baChecks[i] = 0;
|
|
|
|
// 如果是打开工程,则读取 g_iSelectedStyleType
|
|
if (!g_lstStyleSelected.size()) {
|
|
int nM = 0;
|
|
while (nM < CHECK_NUM) {
|
|
m_baChecks[nM] = (g_iSelectedStyleType >> nM) & 1;
|
|
|
|
if (m_baChecks[nM] > 0)
|
|
g_lstStyleSelected.push_back(nM);
|
|
|
|
nM++;
|
|
}
|
|
}
|
|
else { // 否则读取 g_lstStyleSelected
|
|
vector<int>::iterator pLst;
|
|
for(pLst = g_lstStyleSelected.begin(); pLst != g_lstStyleSelected.end(); pLst++)
|
|
m_baChecks[*pLst] = 1;
|
|
}
|
|
// radio默认完整选项
|
|
for (int i = 0; i < RADIO_NUM; i++)
|
|
m_baRadio[i] = 0;
|
|
m_baRadio[12] = 1;
|
|
|
|
// 字体、页码选中颜色
|
|
m_clFont = RGB(79, 57, 30);
|
|
m_clBox = RGB(94, 67, 35);
|
|
// 提示时间延迟
|
|
m_pTimerHint = new TTimer(this);
|
|
m_pTimerHint->Enabled = false;
|
|
m_pTimerHint->Interval = TIME_HINT;
|
|
m_pTimerHint->OnTimer = HintTimerProc;
|
|
// 提示框
|
|
m_pShowHint = new TSkinHintWindow(this);
|
|
|
|
m_btnFind->Down = true;
|
|
m_ImgFind->Visible = true;
|
|
|
|
// 读取信息文件
|
|
GetStyle();
|
|
|
|
// m_bActiveHappened = false;
|
|
|
|
SetTransparent( this );
|
|
// Activate(NULL);
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::FormDestroy(TObject *Sender) {
|
|
|
|
delete m_pImgRadioDown;
|
|
delete m_pImgRadioUp;
|
|
delete m_pImgCheckDown;
|
|
delete m_pImgCheckUp;
|
|
delete m_pShowHint;
|
|
delete m_pTimerHint;
|
|
/* if( sg_aMsg ){
|
|
delete sg_aMsg;
|
|
} */
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::WMNCHitTest(TWMNCHitTest &Msg) {
|
|
TForm::Dispatch(&Msg);
|
|
|
|
if (Msg.Result == HTCLIENT && Msg.XPos > Left + 10 && Msg.XPos <
|
|
Left + Width - 50 && Msg.YPos < Top + 24)
|
|
Msg.Result = HTCAPTION;
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::CheckStylePaint(TObject *Sender) {
|
|
if (m_ImgFind->Visible != true)
|
|
return;
|
|
for (int i = 0; i < CHECK_NUM; i++) {
|
|
if( m_baChecks[i] )
|
|
m_pbChecks[i]->Canvas->Draw(0, 0, m_pImgCheckDown);
|
|
else
|
|
m_pbChecks[i]->Canvas->Draw(0, 0, m_pImgCheckUp);
|
|
}
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::CheckStyleMouseDown(TObject *Sender,
|
|
TMouseButton Button, TShiftState Shift, int X, int Y) {
|
|
if (m_ImgFind->Visible != true || Button != mbLeft)
|
|
return;
|
|
TPaintBox * pPbCheckStyle = (TPaintBox*)Sender;
|
|
|
|
Stop();
|
|
|
|
m_btnPlay->Enabled = false;
|
|
m_btnTry->Enabled = false;
|
|
|
|
// 判断全不选状态
|
|
bool bflag = false;
|
|
if (m_baChecks[CHECK_NUM - 1] == 0) {
|
|
bflag = true;
|
|
}
|
|
// 对按下的Check取反
|
|
for (int i = 0; i < CHECK_NUM; i++) {
|
|
if (m_pbChecks[i] == pPbCheckStyle) {
|
|
m_baChecks[i] = !m_baChecks[i];
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (m_baChecks[CHECK_NUM - 1] && bflag) { // 全不选,权限不在其范围
|
|
for (int i = 0; i < CHECK_NUM - 2; i++) {
|
|
m_baChecks[i] = 0;
|
|
}
|
|
}
|
|
else {
|
|
if (pPbCheckStyle != m_pbFree)
|
|
m_baChecks[CHECK_NUM - 1] = 0;
|
|
}
|
|
|
|
pPbCheckStyle->Invalidate();
|
|
// 查找、显示风格
|
|
FindStyle();
|
|
ShowStyle();
|
|
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::RadioStylePaint(TObject *Sender) {
|
|
|
|
for (int i = 0; i < RADIO_NUM; i++) {
|
|
if (m_baRadio[i])
|
|
m_pbRadio[i]->Canvas->Draw(0, 0, m_pImgRadioDown);
|
|
else
|
|
m_pbRadio[i]->Canvas->Draw(0, 0, m_pImgRadioUp);
|
|
}
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::RadioStyleMouseDown(TObject *Sender,
|
|
TMouseButton Button, TShiftState Shift, int X, int Y) {
|
|
|
|
if (mbLeft != Button)
|
|
return;
|
|
|
|
// 根据选中的风格决定radio可选
|
|
TPaintBox *pPbRadioStyle = (TPaintBox*)(Sender);
|
|
int iradio = 0;
|
|
|
|
for (int i = 0; i < RADIO_NUM; i++) {
|
|
if (m_pbRadio[i] == pPbRadioStyle) {
|
|
iradio = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (iradio == 6 || iradio == 7 || iradio == 10 || iradio == 11)
|
|
return;
|
|
|
|
for (int i = 0; i < RADIO_NUM; i++)
|
|
m_baRadio[i] = 0;
|
|
m_baRadio[iradio] = 1;
|
|
|
|
pPbRadioStyle->Invalidate();
|
|
|
|
if (m_stLstSelect.iOldSelectItemIndex == -1)
|
|
return;
|
|
m_lbStyle->SetPlayItemIndex(m_stLstSelect.iOldSelectItemIndex);
|
|
m_lbStyle->Invalidate();
|
|
|
|
m_stLstSelect.bPlay = true;
|
|
|
|
vc_pFind = vc_vFind.begin() + (m_stLstSelect.iOldSelectPage - 1)
|
|
* LISTBOX_NUM_SHOW + m_stLstSelect.iOldSelectItemIndex; // 得到索引ID
|
|
/* if ((*vc_pFind).tStyleInfo.idStyle <= 0) {
|
|
int index = (m_stPageNum.iSelectPage - 1) * LISTBOX_NUM_SHOW +
|
|
m_lbStyle->ItemIndex;
|
|
vc_pFind = vc_vFind.begin() + index;
|
|
}
|
|
*/
|
|
Play();
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::PageNumPaint(TObject *Sender) {
|
|
|
|
m_pbPageNum->Canvas->Font->Size = g_szFont8;
|
|
m_pbPageNum->Canvas->Font->Color = m_clFont;
|
|
m_pbPageNum->Canvas->Brush->Style = bsClear;
|
|
m_pbPageNum->Canvas->Pen->Color = clWhite;
|
|
|
|
int nM = m_nPageNum - m_stPageNum.iStartPage;
|
|
nM = nM >= PAGE_NUM_SHOW ? PAGE_NUM_SHOW : (nM + 1);
|
|
|
|
int ipos = 0, iexpert = 0;
|
|
|
|
for (int i = m_stPageNum.iStartPage; i < m_stPageNum.iStartPage + nM; i++) {
|
|
|
|
iexpert = 6;
|
|
if (i > 9)
|
|
iexpert -= 2;
|
|
|
|
// 绘制鼠标进入提示框
|
|
if (m_stPageNum.iMovingPage == i)
|
|
m_pbPageNum->Canvas->Rectangle((m_stPageNum.iMovingPos)*FONT_RANGE,
|
|
1, FONT_RANGE*(m_stPageNum.iMovingPos + 1), m_pbPageNum->Height);
|
|
|
|
m_pbPageNum->Canvas->TextOutW(ipos + iexpert, 1, IntToStr(i));
|
|
ipos += FONT_RANGE;
|
|
}
|
|
|
|
// 显示省略
|
|
if (m_stPageNum.bShowDots)
|
|
m_pbPageNum->Canvas->TextOutW(ipos + 4, 2, "···");
|
|
|
|
// 绘制选中
|
|
for (int i = m_stPageNum.iStartPage; i < m_stPageNum.iStartPage + nM; i++) {
|
|
if (m_stPageNum.iSelectPage == i) {
|
|
m_pbPageNum->Canvas->Pen->Color = m_clBox;
|
|
m_pbPageNum->Canvas->Rectangle
|
|
(TRect((m_stPageNum.iCurrentPos - 1)*FONT_RANGE, 1,
|
|
FONT_RANGE*m_stPageNum.iCurrentPos, m_pbPageNum->Height));
|
|
}
|
|
}
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::PageNumMouseDown(TObject *Sender,
|
|
TMouseButton Button, TShiftState Shift, int X, int Y) {
|
|
|
|
// 点击数字页码
|
|
|
|
int iN = X / FONT_RANGE;
|
|
|
|
// 空白的地方点击返回
|
|
if ((m_nPageNum - m_stPageNum.iStartPage) < iN)
|
|
return;
|
|
|
|
int mid = PAGE_NUM_SHOW / 2;
|
|
|
|
if (iN >= 0 && iN < PAGE_NUM_SHOW) {
|
|
m_stPageNum.iCurrentPos = iN + 1; // 所在格子位置
|
|
|
|
if (m_stPageNum.iCurrentPos == PAGE_NUM_SHOW - 1) { // 点击第5个位置
|
|
if ((m_nPageNum - m_stPageNum.iStartPage) >= PAGE_NUM_SHOW) {
|
|
m_stPageNum.iStartPage++;
|
|
m_stPageNum.iCurrentPos = PAGE_NUM_SHOW - 2;
|
|
}
|
|
}
|
|
else if (m_stPageNum.iCurrentPos == PAGE_NUM_SHOW) { // 点击第6个位置
|
|
if ((m_nPageNum - m_stPageNum.iStartPage) >= PAGE_NUM_SHOW) {
|
|
m_stPageNum.iStartPage += 2;
|
|
m_stPageNum.iCurrentPos = PAGE_NUM_SHOW - 2;
|
|
}
|
|
}
|
|
else if (m_stPageNum.iCurrentPos == 1) { // 点击第1个位置
|
|
m_stPageNum.iStartPage -= 2;
|
|
m_stPageNum.iCurrentPos = 3;
|
|
|
|
if (m_stPageNum.iStartPage < 0) {
|
|
m_stPageNum.iStartPage = 1;
|
|
m_stPageNum.iCurrentPos -= 2;
|
|
}
|
|
else if (m_stPageNum.iStartPage == 0) {
|
|
m_stPageNum.iStartPage = 1;
|
|
m_stPageNum.iCurrentPos = 2;
|
|
}
|
|
}
|
|
else if (m_stPageNum.iCurrentPos == 2) { // 点击第2个位置
|
|
m_stPageNum.iStartPage--;
|
|
m_stPageNum.iCurrentPos = 3;
|
|
|
|
if (m_stPageNum.iStartPage < 1) {
|
|
m_stPageNum.iStartPage = 1;
|
|
m_stPageNum.iCurrentPos--;
|
|
}
|
|
}
|
|
|
|
if ((m_nPageNum - m_stPageNum.iStartPage) < PAGE_NUM_SHOW)
|
|
m_stPageNum.bShowDots = false;
|
|
else
|
|
m_stPageNum.bShowDots = true;
|
|
|
|
// 与上次选择相同
|
|
if (m_stPageNum.iStartPage + m_stPageNum.iCurrentPos -
|
|
1 == m_stPageNum.iSelectPage)
|
|
return;
|
|
|
|
// 得到选择的页码
|
|
m_stPageNum.iSelectPage = m_stPageNum.iStartPage +
|
|
m_stPageNum.iCurrentPos - 1;
|
|
// 添加页代码ListBox
|
|
AddPageItem(m_stPageNum.iSelectPage);
|
|
|
|
m_lbStyle->SetPlayItemIndex();
|
|
if (m_stPageNum.iSelectPage == m_stLstSelect.iOldSelectPage) {
|
|
if (m_stLstSelect.bPlay)
|
|
m_lbStyle->SetPlayItemIndex(m_stLstSelect.iOldSelectItemIndex);
|
|
m_lbStyle->ItemIndex = m_stLstSelect.iOldSelectItemIndex;
|
|
}
|
|
else
|
|
m_lbStyle->Invalidate();
|
|
m_pbPageNum->Invalidate();
|
|
}
|
|
|
|
vector<int>vcItemsIndex;
|
|
m_lbStyle->ResetItemsData(vc_vFind, m_stPageNum.iSelectPage,
|
|
vcItemsIndex, true);
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::PageNumMouseMove(TObject *Sender,
|
|
TShiftState Shift, int X, int Y) {
|
|
int iN = X / FONT_RANGE;
|
|
if (iN >= 0 && iN < PAGE_NUM_SHOW) {
|
|
m_stPageNum.iMovingPos = iN;
|
|
m_stPageNum.iMovingPage = m_stPageNum.iStartPage +
|
|
m_stPageNum.iMovingPos;
|
|
}
|
|
else
|
|
m_stPageNum.iMovingPage = -1;
|
|
|
|
m_pbPageNum->Invalidate();
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::PageNumMouseLeave(TObject *Sender) {
|
|
|
|
m_stPageNum.iMovingPage = -1;
|
|
m_pbPageNum->Invalidate();
|
|
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::BtnStepPageMouseDown(TObject *Sender,
|
|
TMouseButton Button, TShiftState Shift, int X, int Y) {
|
|
|
|
if (Button != mbLeft)
|
|
return;
|
|
|
|
TPNGButton *pBtnTemp = (TPNGButton*)Sender;
|
|
|
|
int iTemp = m_stPageNum.iSelectPage;
|
|
// 下一页
|
|
if (pBtnTemp == m_btnNextPage) {
|
|
if (m_stPageNum.iSelectPage < m_nPageNum) {
|
|
|
|
m_stPageNum.iCurrentPos++;
|
|
if ((m_nPageNum - m_stPageNum.iStartPage) >= PAGE_NUM_SHOW) {
|
|
if (m_stPageNum.iCurrentPos == PAGE_NUM_SHOW - 1) {
|
|
m_stPageNum.iStartPage++;
|
|
m_stPageNum.iCurrentPos = PAGE_NUM_SHOW - 2;
|
|
}
|
|
if (m_stPageNum.iCurrentPos == PAGE_NUM_SHOW) {
|
|
m_stPageNum.iStartPage += 2;
|
|
m_stPageNum.iCurrentPos = PAGE_NUM_SHOW - 2;
|
|
}
|
|
}
|
|
|
|
if ((m_nPageNum - m_stPageNum.iStartPage) < PAGE_NUM_SHOW)
|
|
m_stPageNum.bShowDots = false;
|
|
// 得到选择页码
|
|
m_stPageNum.iSelectPage++;
|
|
}
|
|
} // 上一页
|
|
else {
|
|
if (m_stPageNum.iSelectPage >= 2) {
|
|
|
|
m_stPageNum.iCurrentPos--;
|
|
|
|
if (m_stPageNum.iCurrentPos < 1)
|
|
m_stPageNum.iCurrentPos = 1;
|
|
if (m_stPageNum.iCurrentPos == 1) {
|
|
m_stPageNum.iStartPage -= 2;
|
|
m_stPageNum.iCurrentPos = 3;
|
|
if (m_stPageNum.iStartPage < 1) {
|
|
m_stPageNum.iStartPage = 1;
|
|
m_stPageNum.iCurrentPos = 1;
|
|
}
|
|
}
|
|
if (m_stPageNum.iCurrentPos == 2) {
|
|
m_stPageNum.iStartPage--;
|
|
m_stPageNum.iCurrentPos = 3;
|
|
if (m_stPageNum.iStartPage < 1) {
|
|
m_stPageNum.iStartPage = 1;
|
|
m_stPageNum.iCurrentPos = 2;
|
|
}
|
|
}
|
|
|
|
if ((m_nPageNum - m_stPageNum.iStartPage) >= PAGE_NUM_SHOW)
|
|
m_stPageNum.bShowDots = true;
|
|
// 得到选择页码
|
|
m_stPageNum.iSelectPage--;
|
|
|
|
}
|
|
}
|
|
|
|
if (iTemp == m_stPageNum.iSelectPage) {
|
|
return;
|
|
}
|
|
|
|
m_pbPageNum->Invalidate();
|
|
AddPageItem(m_stPageNum.iSelectPage);
|
|
|
|
m_lbStyle->SetPlayItemIndex();
|
|
if (m_stPageNum.iSelectPage == m_stLstSelect.iOldSelectPage) {
|
|
if (m_stLstSelect.bPlay)
|
|
m_lbStyle->SetPlayItemIndex(m_stLstSelect.iOldSelectItemIndex);
|
|
m_lbStyle->ItemIndex = m_stLstSelect.iOldSelectItemIndex;
|
|
}
|
|
|
|
|
|
vector<int>vcItemsIndex;
|
|
m_lbStyle->ResetItemsData(vc_vFind, m_stPageNum.iSelectPage,
|
|
vcItemsIndex, true);
|
|
|
|
//m_lbStyle->Invalidate();
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::BtnHeadOrEndPageMouseDown(TObject *Sender,
|
|
TMouseButton Button, TShiftState Shift, int X, int Y) {
|
|
//
|
|
if (Button != mbLeft)
|
|
return;
|
|
TPNGButton *pBtnTemp = (TPNGButton*)Sender;
|
|
// ********************************首页
|
|
if (pBtnTemp == m_btnHeadPage) {
|
|
|
|
if (m_stPageNum.iStartPage == 1 && m_stPageNum.iCurrentPos == 1 &&
|
|
m_stPageNum.iSelectPage == 1)
|
|
return;
|
|
m_stPageNum.iStartPage = 1;
|
|
m_stPageNum.iCurrentPos = 1;
|
|
m_stPageNum.iSelectPage = 1;
|
|
m_stPageNum.bShowDots = false;
|
|
if (m_nPageNum > PAGE_NUM_SHOW)
|
|
m_stPageNum.bShowDots = true;
|
|
// 列表框刷新到第1页
|
|
|
|
} // ********************************尾页
|
|
else if (pBtnTemp == m_btnEndPage) {
|
|
|
|
if (m_stPageNum.iSelectPage == m_nPageNum)
|
|
return;
|
|
m_stPageNum.iSelectPage = m_nPageNum;
|
|
if (m_nPageNum >= PAGE_NUM_SHOW) {
|
|
m_stPageNum.iStartPage = m_nPageNum - PAGE_NUM_SHOW + 1;
|
|
m_stPageNum.iCurrentPos = PAGE_NUM_SHOW;
|
|
}
|
|
else {
|
|
m_stPageNum.iStartPage = 1;
|
|
m_stPageNum.iCurrentPos = m_nPageNum;
|
|
}
|
|
|
|
m_stPageNum.bShowDots = false;
|
|
// 列表框刷新到最后1页
|
|
}
|
|
|
|
m_pbPageNum->Invalidate();
|
|
AddPageItem(m_stPageNum.iSelectPage);
|
|
|
|
m_lbStyle->SetPlayItemIndex();
|
|
if (m_stPageNum.iSelectPage == m_stLstSelect.iOldSelectPage) {
|
|
if (m_stLstSelect.bPlay)
|
|
m_lbStyle->SetPlayItemIndex(m_stLstSelect.iOldSelectItemIndex);
|
|
m_lbStyle->ItemIndex = m_stLstSelect.iOldSelectItemIndex;
|
|
}
|
|
|
|
vector<int>vcItemsIndex;
|
|
m_lbStyle->ResetItemsData(vc_vFind, m_stPageNum.iSelectPage,
|
|
vcItemsIndex, true);
|
|
|
|
//m_lbStyle->Invalidate();
|
|
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::LstStyleMouseDown(TObject *Sender,
|
|
TMouseButton Button, TShiftState Shift, int X, int Y) {
|
|
|
|
m_iHitItemIndex = -1;
|
|
m_pTimerHint->Enabled = false;
|
|
m_pShowHint->ReleaseHandle();
|
|
int ret = m_lbStyle->ItemAtPos(TPoint(X, Y), true);
|
|
if (ret == -1)
|
|
return;
|
|
|
|
if (Button == mbRight) {
|
|
// 收藏界面状态显示删除
|
|
bool bCollectDelete = false;
|
|
if (m_iBtnState == BTNSTATE_COLLECT && !m_btnPngSearch->Down) {
|
|
bCollectDelete = true;
|
|
}
|
|
|
|
if (m_btnPngSearch->Down)
|
|
bCollectDelete = false;
|
|
|
|
// If entry Pay_Btn_down's page,not display the pop-menu
|
|
//add by tj 2014/7/2
|
|
// if (m_btnRecommand->Down) {
|
|
// m_lbStyle->ItemIndex = ret;
|
|
// m_stLstSelect.iOldSelectItemIndex = m_lbStyle->ItemIndex;
|
|
// m_stLstSelect.iOldSelectPage = m_stPageNum.iSelectPage;
|
|
//
|
|
// m_lbStyle->Invalidate();
|
|
// return;
|
|
// }
|
|
|
|
int index = (m_stPageNum.iSelectPage - 1) * LISTBOX_NUM_SHOW + ret;
|
|
vc_pFind = vc_vFind.begin() + index; // 得到索引ID
|
|
|
|
m_iCollectDelete = index;
|
|
m_stLstSelect.iIdCollect = vc_pFind->tStyleInfo.idStyle;
|
|
|
|
if (!bCollectDelete) {
|
|
// 增加收藏时检查是否重复
|
|
vector<int>::iterator plst;
|
|
for (plst = vc_vCollect.begin(); plst != vc_vCollect.end(); plst++)
|
|
{
|
|
if (vc_pFind->tStyleInfo.idStyle == *plst) {
|
|
m_stLstSelect.iIdCollect = 0;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Add a download menu item and disenabel the play button
|
|
m_pPopMenu->ClearMenuItem();
|
|
TPoint point(X, Y);
|
|
point = m_lbStyle->ClientToScreen(point);
|
|
|
|
if (vc_pFind->tStyleInfo.state == e_UnDownload) {
|
|
m_pPopMenu->CreateCustomMenuItem("下载", OnDownLoadStyle, -1, !g_bUpdateMandatory,
|
|
false, 0);
|
|
}
|
|
else{
|
|
m_pPopMenu->CreateCustomMenuItem("重新下载", OnDownLoadStyle, -1, !g_bUpdateMandatory,
|
|
false, 0);
|
|
}
|
|
m_pPopMenu->CreateCustomMenuItem("-", NULL, -1, true, false, 0);
|
|
|
|
if (bCollectDelete) {
|
|
m_pPopMenu->CreateCustomMenuItem("删除", OnCollect, -1, true,
|
|
false, 0);
|
|
m_bCollectDelete = true;
|
|
}
|
|
else {
|
|
if (m_stLstSelect.iIdCollect != 0)
|
|
m_pPopMenu->CreateCustomMenuItem("收藏", OnCollect, -1, true,
|
|
false, 0);
|
|
|
|
else
|
|
m_pPopMenu->CreateCustomMenuItem("已收藏", OnCollect, -1, false,
|
|
true, 0);
|
|
|
|
}
|
|
m_lbStyle->ItemIndex = ret;
|
|
m_pPopMenu->Popup(point.x, point.y);
|
|
m_lbStyle->ItemIndex = m_stLstSelect.iOldSelectItemIndex;
|
|
}
|
|
else { //add by tj 2014/1/15 14:35
|
|
if ( m_lbStyle->ItemIndex != -1 &&
|
|
( m_lbStyle->ItemIndex != m_stLstSelect.iOldSelectItemIndex ||
|
|
m_stLstSelect.iOldSelectPage != m_stPageNum.iSelectPage ) ) {
|
|
|
|
int index = (m_stPageNum.iSelectPage - 1) * LISTBOX_NUM_SHOW +
|
|
m_lbStyle->ItemIndex;
|
|
|
|
Stop();
|
|
|
|
m_btnPlay->Enabled = true;
|
|
m_btnTry->Enabled = true;
|
|
|
|
m_stLstSelect.iSelect = index;
|
|
m_stLstSelect.iOldSelectItemIndex = m_lbStyle->ItemIndex;
|
|
m_stLstSelect.iOldSelectPage = m_stPageNum.iSelectPage;
|
|
m_stLstSelect.bPlay = false;
|
|
m_lbStyle->SetPlayItemIndex();
|
|
m_lbStyle->Invalidate();
|
|
/*
|
|
if( m_iSelStage<0 ){
|
|
// 回到完整视听状态
|
|
for (int i = 0; i < RADIO_NUM; i++)
|
|
m_baRadio[i] = 0;
|
|
m_baRadio[12] = 1;
|
|
//m_pbBase1->Invalidate();
|
|
}
|
|
*/
|
|
vc_pFind = vc_vFind.begin() + index; // 得到索引ID
|
|
|
|
m_btnPlay->Enabled = e_Downloaded == vc_pFind->tStyleInfo.state;
|
|
m_btnTry->Enabled = m_btnPlay->Enabled;
|
|
|
|
m_btnPlay->Invalidate();
|
|
m_btnTry->Invalidate();
|
|
}
|
|
}
|
|
|
|
// Display the styles' state
|
|
int iItemIndex = m_lbStyle->ItemAtPos(TPoint(X, Y), true);
|
|
if (iItemIndex != -1) {
|
|
TRect rtFocusItem = m_lbStyle->ItemRect(iItemIndex);
|
|
rtFocusItem.Left = rtFocusItem.Right - LISTBOX_DOWN_WIDTH;
|
|
if (rtFocusItem.PtInRect(TPoint(X, Y))) {
|
|
m_iDownItemIndex = iItemIndex;
|
|
}
|
|
}
|
|
|
|
// Refresh current item state(download)
|
|
// ------------------------------------------------------------------
|
|
|
|
int iHotItemIndex = iItemIndex + (m_stPageNum.iSelectPage - 1) * 20;
|
|
if (m_iOldItemIndex != -1)
|
|
vc_vFind[m_iOldItemIndex].iStyleDownSate = m_iOldItemState;
|
|
|
|
m_iOldItemState = vc_vFind[iHotItemIndex].iStyleDownSate;
|
|
|
|
if (vc_vFind[iHotItemIndex].iStyleDownSate < 2)
|
|
vc_vFind[iHotItemIndex].iStyleDownSate = 1;
|
|
else
|
|
vc_vFind[iHotItemIndex].iStyleDownSate += 10;
|
|
|
|
static vector<int>vcItemsIndex;
|
|
|
|
if (vcItemsIndex.size())
|
|
vcItemsIndex.clear();
|
|
|
|
vcItemsIndex.push_back(iHotItemIndex);
|
|
if (-1 != m_iOldItemIndex && m_iOldItemState != -1)
|
|
vcItemsIndex.push_back(m_iOldItemIndex);
|
|
|
|
m_lbStyle->ResetItemsData(vc_vFind, m_stPageNum.iSelectPage,
|
|
vcItemsIndex, true);
|
|
m_iOldItemIndex = iHotItemIndex;
|
|
// ------------------------------------------------------------------
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::LstStyleMouseMove(TObject *Sender,
|
|
TShiftState Shift, int X, int Y) {
|
|
int ret = m_lbStyle->ItemAtPos(TPoint(X, Y), true);
|
|
|
|
if (ret == -1) {
|
|
m_pShowHint->ReleaseHandle();
|
|
return;
|
|
}
|
|
if (m_iHitItemIndex != ret && ret != -1) {
|
|
m_iHitItemIndex = ret;
|
|
m_pShowHint->ReleaseHandle();
|
|
}
|
|
if (m_iHitItemIndex != -1) {
|
|
m_pTimerHint->Enabled = true;
|
|
m_xPos = X;
|
|
m_yPos = Y;
|
|
}
|
|
|
|
return;
|
|
if (ret != -1) {
|
|
TRect rtItem = m_lbStyle->ItemRect(ret);
|
|
// rtItem.Left = rtItem.Right - LISTBOX_DOWN_WIDTH;
|
|
|
|
TPoint ptFocus = TPoint(X, Y);
|
|
|
|
// TRect rtHotItem(); //Modify Item Focus Item Rect
|
|
int iHotItemIndex = ret + (m_stPageNum.iSelectPage - 1) * 20;
|
|
if (rtItem.PtInRect(ptFocus) && m_iOldItemIndex != iHotItemIndex) {
|
|
|
|
// m_lbStyle->ItemIndex = ret;
|
|
if (m_iOldItemIndex != -1)
|
|
vc_vFind[m_iOldItemIndex].iStyleDownSate = m_iOldItemState;
|
|
|
|
m_iOldItemState = vc_vFind[iHotItemIndex].iStyleDownSate;
|
|
|
|
if (vc_vFind[iHotItemIndex].iStyleDownSate < 2)
|
|
vc_vFind[iHotItemIndex].iStyleDownSate = 1;
|
|
else
|
|
vc_vFind[iHotItemIndex].iStyleDownSate += 10;
|
|
|
|
static vector<int>vcItemsIndex;
|
|
|
|
if (vcItemsIndex.size())
|
|
vcItemsIndex.clear();
|
|
|
|
vcItemsIndex.push_back(iHotItemIndex);
|
|
if (-1 != m_iOldItemIndex && m_iOldItemState != -1)
|
|
vcItemsIndex.push_back(m_iOldItemIndex);
|
|
|
|
m_lbStyle->ResetItemsData(vc_vFind, m_stPageNum.iSelectPage,
|
|
vcItemsIndex, true);
|
|
|
|
m_iOldItemIndex = iHotItemIndex;
|
|
}
|
|
}
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::LstStyleMouseLeave(TObject *Sender) {
|
|
m_iHitItemIndex = -1;
|
|
m_pTimerHint->Enabled = false;
|
|
m_pShowHint->ReleaseHandle();
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::LstStyleMouseUp(TObject *Sender,
|
|
TMouseButton Button, TShiftState Shift, int X, int Y) {
|
|
if (m_stLstSelect.iOldSelectItemIndex != -1) {
|
|
|
|
m_lbStyle->SetPlayItemIndex();
|
|
if (m_stPageNum.iSelectPage == m_stLstSelect.iOldSelectPage) {
|
|
if (m_stLstSelect.bPlay)
|
|
m_lbStyle->SetPlayItemIndex(m_stLstSelect.iOldSelectItemIndex);
|
|
m_lbStyle->ItemIndex = m_stLstSelect.iOldSelectItemIndex;
|
|
}
|
|
m_lbStyle->Invalidate();
|
|
}
|
|
|
|
int iItemIndex = m_lbStyle->ItemAtPos(TPoint(X, Y), true);
|
|
if (-1 != iItemIndex) {
|
|
TRect rtItemFocus = m_lbStyle->ItemRect(iItemIndex);
|
|
//rtItemFocus.Left = rtItemFocus.Right - LISTBOX_DOWN_WIDTH;
|
|
|
|
// Check the mouse-point position
|
|
/* if (rtItemFocus.PtInRect(TPoint(X, Y))
|
|
&& m_iDownItemIndex == iItemIndex) {
|
|
|
|
int iVcIndex = (m_stPageNum.iSelectPage - 1) * 20 +
|
|
m_iDownItemIndex;
|
|
*/
|
|
if (rtItemFocus.PtInRect(TPoint(X, Y))){
|
|
int iVcIndex = (m_stPageNum.iSelectPage - 1) * 20 + iItemIndex;
|
|
|
|
// vc_vFind[iVcIndex].tStyleMsg.bIsDownLoaded
|
|
if (e_Downloaded != vc_vFind[iVcIndex].tStyleInfo.state) {
|
|
// Check the styles' download state
|
|
/* int iSgItemIndex = -1;
|
|
for (int i = 0; i < sg_nMsg; i++) {
|
|
if (sg_tTmpMsg[i].iStyleDownSate >
|
|
1 && e_Downloaded != sg_tTmpMsg[i].tStyleInfo.state) {
|
|
iSgItemIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (iSgItemIndex != -1) {
|
|
// if (iVcIndex == m_iDwnLdgIndex && m_iDwnLdgIndex != -1)
|
|
if (vc_vFind[iVcIndex].iStyleDownSate > 2) {
|
|
Timer2->Enabled = false;
|
|
vc_vFind[iVcIndex].iStyleDownSate = 1;
|
|
m_iOldItemState = 0;
|
|
|
|
sg_tTmpMsg[iSgItemIndex].iStyleDownSate = 0;
|
|
vector<int>vcItemsIndex;
|
|
vcItemsIndex.push_back(iItemIndex);
|
|
m_lbStyle->ResetItemsData(vc_vFind,
|
|
m_stPageNum.iSelectPage, vcItemsIndex, true);
|
|
|
|
OutputDebugString(L"Stop download the style;");
|
|
}
|
|
else {
|
|
MessageForm->ShowMessage(L"有风格已经开始下载,请等待...",
|
|
MB_ICONINFORMATION | MB_OK);
|
|
}
|
|
}
|
|
else {
|
|
*/
|
|
vc_vFind[iVcIndex].iStyleDownSate = 21;
|
|
|
|
m_iOldItemState = 11;
|
|
vector<int>vcItemsIndex;
|
|
vcItemsIndex.push_back(iVcIndex);
|
|
m_lbStyle->ResetItemsData(vc_vFind, m_stPageNum.iSelectPage,
|
|
vcItemsIndex, true);
|
|
|
|
m_iDwnLdgIndex = iVcIndex;
|
|
RefreshAllStylesState();
|
|
Timer2->Enabled = true;
|
|
|
|
int iStyleId = vc_vFind[iVcIndex].tStyleInfo.idStyle;
|
|
HRESULT hr = f_CS_DownloadStyle(iStyleId, Handle);
|
|
// }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::m_pbPagesPaint(TObject *Sender) {
|
|
// 显示总页数
|
|
m_pbPages->Canvas->Font->Size = g_szFont9;
|
|
m_pbPages->Canvas->Font->Color = m_clFont;
|
|
m_pbPages->Canvas->Brush->Style = bsClear;
|
|
|
|
int x_pos = 0;
|
|
if (m_nPageNum > 9)
|
|
x_pos = 2;
|
|
else
|
|
x_pos = 5;
|
|
m_pbPages->Canvas->TextOutW(x_pos, 0, IntToStr(m_nPageNum));
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::OnCollect(TObject* Sender) {
|
|
|
|
TMenuItem* pItem = (TMenuItem*)Sender;
|
|
// 收藏操作
|
|
if (!pItem->Checked) {
|
|
if (m_stLstSelect.iIdCollect != 0) {
|
|
if (!m_bCollectDelete) {
|
|
// 增加收藏
|
|
vc_vCollect.push_back(m_stLstSelect.iIdCollect);
|
|
|
|
}
|
|
else {
|
|
// 删除收藏
|
|
vc_vFind.clear();
|
|
vector<int>::iterator plst;
|
|
for (plst = vc_vCollect.begin(); plst != vc_vCollect.end();
|
|
plst++) {
|
|
if (*plst == m_stLstSelect.iIdCollect) {
|
|
vc_vCollect.erase(plst);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (vc_vCollect.size()) {
|
|
for (int i = 0; i < sg_nMsg; i++)
|
|
for (int j = 0; j < vc_vCollect.size(); j++)
|
|
if (sg_tTmpMsg[i]
|
|
.tStyleInfo.idStyle == vc_vCollect[j]) {
|
|
vc_vFind.push_back(sg_tTmpMsg[i]);
|
|
}
|
|
}
|
|
// 页码数
|
|
m_nPageNum = vc_vCollect.size() / LISTBOX_NUM_SHOW;
|
|
m_nPageNum += vc_vCollect.size() % LISTBOX_NUM_SHOW ? 1 : 0;
|
|
m_edtPageGo->Text = m_nPageNum ? 1 : 0;
|
|
|
|
// 列表参数处理
|
|
if (m_stLstSelect.iOldSelectItemIndex != -1) { // 播放状态
|
|
int iSelect = (m_stLstSelect.iOldSelectPage - 1)
|
|
* LISTBOX_NUM_SHOW + m_stLstSelect.iOldSelectItemIndex;
|
|
if (m_iCollectDelete == iSelect) { // 删除选择或者播放的项
|
|
Stop();
|
|
|
|
m_stLstSelect.iOldSelectPage = -1;
|
|
m_stLstSelect.iOldSelectItemIndex = -1;
|
|
m_stLstSelect.bPlay = false;
|
|
m_btnPlay->Enabled = false;
|
|
m_btnTry->Enabled = false;
|
|
}
|
|
else { // 删除非选择或者播放的项
|
|
if (m_iCollectDelete < iSelect) {
|
|
int ret =
|
|
(m_stLstSelect.iOldSelectPage - 1)
|
|
* LISTBOX_NUM_SHOW +
|
|
m_stLstSelect.iOldSelectItemIndex;
|
|
ret--;
|
|
m_stLstSelect.iOldSelectPage =
|
|
ret / LISTBOX_NUM_SHOW + 1;
|
|
m_stLstSelect.iOldSelectItemIndex =
|
|
ret % LISTBOX_NUM_SHOW;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 页码参数处理
|
|
int deltePage = m_iCollectDelete / LISTBOX_NUM_SHOW + 1;
|
|
int deleteItem = m_iCollectDelete % LISTBOX_NUM_SHOW;
|
|
|
|
int dn = (vc_vCollect.size() + 1) / LISTBOX_NUM_SHOW;
|
|
dn += (vc_vCollect.size() + 1) % LISTBOX_NUM_SHOW ? 1 : 0;
|
|
int dv = (vc_vCollect.size() + 1) % LISTBOX_NUM_SHOW;
|
|
|
|
if (dv == 1) { // 最后一页只有一个行
|
|
if (deltePage == m_stPageNum.iSelectPage) { // 当前页删除
|
|
if (m_stPageNum.iSelectPage > 1) {
|
|
m_stPageNum.iSelectPage--;
|
|
if (m_stPageNum.iStartPage > 1) {
|
|
m_stPageNum.iStartPage--;
|
|
}
|
|
else {
|
|
m_stPageNum.iCurrentPos--;
|
|
}
|
|
}
|
|
else {
|
|
m_stPageNum.iSelectPage = 1;
|
|
m_stPageNum.iMovingPage = -1;
|
|
m_stPageNum.iStartPage = 1;
|
|
m_stPageNum.iCurrentPos = 1;
|
|
m_stPageNum.iMovingPos = -1;
|
|
m_stPageNum.bShowDots = m_nPageNum > PAGE_NUM_SHOW ?
|
|
true : false;
|
|
}
|
|
}
|
|
else { // 非当前页删除
|
|
if (m_stPageNum.iStartPage > 1)
|
|
m_stPageNum.iStartPage--;
|
|
}
|
|
}
|
|
|
|
// 加载页
|
|
if (vc_vFind.size())
|
|
AddPageItem(m_stPageNum.iSelectPage);
|
|
else // 查找内容为空
|
|
m_lbStyle->Clear();
|
|
|
|
m_lbStyle->SetPlayItemIndex();
|
|
if (m_stPageNum.iSelectPage == m_stLstSelect.iOldSelectPage &&
|
|
m_stLstSelect.iOldSelectPage != -1) {
|
|
if (m_stLstSelect.bPlay)
|
|
m_lbStyle->SetPlayItemIndex
|
|
(m_stLstSelect.iOldSelectItemIndex);
|
|
m_lbStyle->ItemIndex = m_stLstSelect.iOldSelectItemIndex;
|
|
}
|
|
else {
|
|
m_lbStyle->ItemIndex = -1;
|
|
}
|
|
|
|
ShowStyle();
|
|
|
|
m_lbStyle->Invalidate();
|
|
m_pbPages->Invalidate();
|
|
m_pbPageNum->Invalidate();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::EdtPageGoChange(TObject *Sender) {
|
|
// 防止粘贴
|
|
String str = m_edtPageGo->Text;
|
|
int n = str.Length();
|
|
if (n == 0)
|
|
return;
|
|
bool flag = false;
|
|
for (int i = 1; i < n; i++) {
|
|
if (str[i] < '0' || str[i] > '9') {
|
|
m_edtPageGo->Clear();
|
|
flag = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!flag) {
|
|
if (StrToInt(str) > m_nPageNum)
|
|
m_edtPageGo->Text = IntToStr(m_nPageNum);
|
|
}
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
int TStyleSelForm::GetStyle() { // 读文件,装载风格信息
|
|
|
|
bool bBeatChange = false;
|
|
bool bSortChange = false;
|
|
|
|
if( sg_iBeat != g_iMelodyTimeSignature ) bBeatChange = true;
|
|
if( g_iCurStyleSort != g_iPreStyleSort ) bSortChange = true;
|
|
|
|
if ( bBeatChange || bSortChange ) {
|
|
|
|
if( bBeatChange ){
|
|
|
|
if (sg_aMsg) {
|
|
delete sg_aMsg;
|
|
sg_aMsg = NULL;
|
|
}
|
|
}
|
|
|
|
if( sg_tTmpMsg ){
|
|
delete sg_tTmpMsg;
|
|
sg_tTmpMsg = NULL;
|
|
}
|
|
|
|
sg_nMsg = 0;
|
|
if (f_SM_GetStyleInfos(g_iMelodyTimeSignature, NULL, &sg_nMsg) == -1)
|
|
return -1;
|
|
|
|
sg_iBeat = g_iMelodyTimeSignature;
|
|
g_iCurStyleSort = g_iPreStyleSort;
|
|
|
|
if( bBeatChange ){
|
|
|
|
sg_aMsg = new TSTYLEINFO[sg_nMsg];
|
|
if (f_SM_GetStyleInfos(g_iMelodyTimeSignature, sg_aMsg, &sg_nMsg) == -1){
|
|
delete sg_aMsg;
|
|
sg_nMsg = 0;
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
sg_tTmpMsg = new DEFTSTYLEINFO[sg_nMsg];
|
|
System::Classes::TList* list_sg = new System::Classes::TList();
|
|
|
|
DEFTSTYLEINFO *tmpSG = NULL;
|
|
for (int i = 0; i < sg_nMsg; i++) {
|
|
|
|
tmpSG = new DEFTSTYLEINFO;
|
|
|
|
if( bBeatChange ){
|
|
AnsiString strTmp = UTF8ToMBCS(sg_aMsg[i].detail.strAuthor)
|
|
.c_str();
|
|
memcpy(sg_aMsg[i].detail.strAuthor, strTmp.c_str(), 40);
|
|
|
|
strTmp = UTF8ToMBCS(sg_aMsg[i].detail.strStyleName).c_str();
|
|
memcpy(sg_aMsg[i].detail.strStyleName, strTmp.c_str(), 40);
|
|
|
|
strTmp = UTF8ToMBCS(sg_aMsg[i].detail.strDescription).c_str();
|
|
memcpy(sg_aMsg[i].detail.strDescription, strTmp.c_str(), 120);
|
|
}
|
|
|
|
tmpSG->tStyleInfo = sg_aMsg[i];
|
|
tmpSG->iStyleDownSate = 0;
|
|
|
|
list_sg->Add(tmpSG);
|
|
}
|
|
|
|
int iSortType, iSortMode;
|
|
iSortType = g_iCurStyleSort & 0xffff;
|
|
iSortMode = (g_iCurStyleSort & 0xffff0000)>>16;
|
|
|
|
if( sg_nMsg ){
|
|
|
|
if( iSortType == STYLESORT_PRICE ){
|
|
|
|
list_sg->Sort(lessmarkCost);
|
|
|
|
}else if( iSortType == STYLESORT_SCORE ){
|
|
|
|
list_sg->Sort(lessmarkScore);
|
|
}
|
|
|
|
int count = list_sg->Count;
|
|
if(iSortMode==STYLESORT_DOWN){
|
|
|
|
for(int i=0; i<count; i++){
|
|
sg_tTmpMsg[i] = *(DEFTSTYLEINFO *)list_sg->Items[count-i-1];
|
|
}
|
|
|
|
}else{
|
|
|
|
for(int i=0; i<count; i++){
|
|
sg_tTmpMsg[i] = *(DEFTSTYLEINFO *)list_sg->Items[i];
|
|
}
|
|
}
|
|
|
|
// for(int i=0; i<list_sg->Count; i++ ){
|
|
//
|
|
// DebugPrint("strStyleName=%s",
|
|
// ((DEFTSTYLEINFO *)list_sg->Items[i])->tStyleInfo.detail.strStyleName);
|
|
// if(iSortType==1){
|
|
// DebugPrint(" cost=%d",
|
|
// ((DEFTSTYLEINFO *)list_sg->Items[i])->tStyleInfo.cost);
|
|
// }else if(iSortType==2){
|
|
// DebugPrint(" score=%d",
|
|
// ((DEFTSTYLEINFO *)list_sg->Items[i])->tStyleInfo.score);
|
|
// }
|
|
// }
|
|
}
|
|
list_sg->Clear();
|
|
if(list_sg){
|
|
delete list_sg;
|
|
}
|
|
}
|
|
|
|
int num = sg_nMsg / LISTBOX_NUM_SHOW;
|
|
if (sg_nMsg % LISTBOX_NUM_SHOW)
|
|
num++;
|
|
m_nPageNum = num;
|
|
|
|
// 读取收藏文件
|
|
int flen = 0;
|
|
AnsiString strCollection = g_strUserPath.c_str();
|
|
strCollection += L"profile\\Collect.dat";
|
|
|
|
FILE *fpFrm = fopen(strCollection.c_str(), "rb");
|
|
if( fpFrm ){
|
|
fseek(fpFrm, 0, SEEK_END);
|
|
flen = ftell(fpFrm);
|
|
rewind(fpFrm);
|
|
|
|
if( flen>0 ){
|
|
int *aCollect = new int[flen / sizeof(int)];
|
|
fread(aCollect, sizeof(int), flen / sizeof(int), fpFrm);
|
|
|
|
vc_vCollect.clear();
|
|
for (int i = 0; i < flen / sizeof(int); i++) {
|
|
vc_vCollect.push_back(aCollect[i]);
|
|
|
|
}
|
|
delete aCollect;
|
|
}
|
|
|
|
fclose(fpFrm);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
int TStyleSelForm::FindStyle() {
|
|
// 清空显示内容
|
|
if (vc_vFind.size())
|
|
vc_vFind.clear();
|
|
|
|
// 遍历每个风格信息,
|
|
for (int i = 0; i < sg_nMsg; i++) {
|
|
for (int index = 0; index < CHECK_NUM - 2; index++) {
|
|
|
|
int iType1 = sg_tTmpMsg[i].tStyleInfo.detail.type[0];
|
|
int iType2 = sg_tTmpMsg[i].tStyleInfo.detail.type[1];
|
|
|
|
if( m_baChecks[CHECK_NUM-2] && sg_tTmpMsg[i].tStyleInfo.cost>0 ){
|
|
continue;
|
|
}
|
|
|
|
if ( m_baChecks[index] &&
|
|
( index < CHECK_NUM - 3 && (iType1 == index || iType2 == index) ||
|
|
index == CHECK_NUM - 3 && (iType1 >= index || iType2 >=index ))) {
|
|
bool bIsInsert = true;
|
|
for (int j = 0; j < vc_vFind.size(); j++) {
|
|
if (vc_vFind[j].tStyleInfo.idStyle == sg_tTmpMsg[i].tStyleInfo.idStyle) {
|
|
bIsInsert = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (bIsInsert) {
|
|
vc_vFind.push_back(sg_tTmpMsg[i]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* // Debug Print Select Styles' Information
|
|
String strPrintInfo =
|
|
L"-------------------Begin-----------------------\r\n";
|
|
for (int i = 0; i < vc_vFind.size(); i++) {
|
|
strPrintInfo +=
|
|
L"风格名:" + (String)vc_vFind[i].tStyleInfo.detail.strStyleName +
|
|
L" 风格类型:(" + IntToStr(vc_vFind[i].tStyleInfo.detail.type[0]) +
|
|
L"," + IntToStr(vc_vFind[i].tStyleInfo.detail.type[1]) + L");\r\n";
|
|
}
|
|
strPrintInfo += L"-------------------End-----------------------\r\n";
|
|
OutputDebugString(strPrintInfo.c_str());
|
|
// --------------------------------------------------------------
|
|
*/
|
|
vector<int>vcItemIndex;
|
|
int iCurPage = 1;
|
|
|
|
RefreshAllItem(vcItemIndex, iCurPage);
|
|
m_lbStyle->SetItemIndex(vcItemIndex, iCurPage);
|
|
|
|
vector<int>vcItemsIndex;
|
|
|
|
m_lbStyle->ResetItemsData(vc_vFind, iCurPage, vcItemsIndex, true);
|
|
m_lbStyle->ItemIndex = -1;
|
|
return 0;
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
/*
|
|
int TStyleSelForm::IdToType(int id) {
|
|
|
|
for (int i = 0; i < sg_nMsg; i++) {
|
|
if (sg_aMsg[i].detail.iTimesignature == id) {
|
|
g_lstStyleSelected.clear();
|
|
int aType[10] = {0};
|
|
// Need to modify by GGGrass
|
|
char * strStyleType[] = {
|
|
"流行", "民摇", "摇滚", "舞曲", "爵士", "蓝调", "桑巴", "古典", "圆舞曲", "独立"};
|
|
|
|
for (int iIndex = 0; iIndex < 10; iIndex++) {
|
|
|
|
int iRet = 0;
|
|
for (int jIndex = 0; jIndex < 2; jIndex++) {
|
|
|
|
int index = sg_aMsg[i].detail.type[jIndex];
|
|
|
|
if (index >= 0 && index < 24)
|
|
iRet += strstr(LSZ_STYLTYPES[index],
|
|
strStyleType[iIndex]) ? 1 : 0;
|
|
}
|
|
|
|
aType[iIndex] = iRet > 0 ? 1 : 0;
|
|
}
|
|
|
|
g_iSelectedStyleType = 0;
|
|
for (int j = 0; j < 10; j++) {
|
|
DWORD temp = 0;
|
|
temp = aType[j] << j;
|
|
g_iSelectedStyleType |= temp;
|
|
if (aType[j])
|
|
g_lstStyleSelected.push_back(j);
|
|
}
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
} */
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void TStyleSelForm::AddPageItem(int iPage) {
|
|
m_lbStyle->Clear();
|
|
|
|
String strText;
|
|
int iAdd = 0;
|
|
char buf[20];
|
|
|
|
// m_lbStyle->Font->Style = TFontStyles()<<fsStrikeOut;
|
|
for (vc_pFind = vc_vFind.begin(); vc_pFind != vc_vFind.end(); vc_pFind++) {
|
|
if ((iPage - 1) * LISTBOX_NUM_SHOW <= iAdd && iAdd < LISTBOX_NUM_SHOW * iPage) {
|
|
strText = vc_pFind->tStyleInfo.detail.strStyleName;
|
|
// 截取多余用……代替
|
|
strText += "_";
|
|
sprintf(buf, "%d", vc_pFind->tStyleInfo.cost);
|
|
strText += buf;
|
|
strText += "_";
|
|
strText += vc_pFind->tStyleInfo.detail.strDescription;
|
|
// 截取多余用……代替
|
|
#ifdef _DEBUG
|
|
OutputDebugString( strText.c_str() );
|
|
#endif
|
|
m_lbStyle->AddItem( strText, NULL );// >Items->Add(strText);
|
|
}
|
|
iAdd++;
|
|
}
|
|
|
|
OutputDebugString( L"AddPageItem done" );
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void TStyleSelForm::OnShowStyle() {
|
|
int num = vc_vFind.size() / LISTBOX_NUM_SHOW;
|
|
if (vc_vFind.size() % LISTBOX_NUM_SHOW)
|
|
num++;
|
|
m_nPageNum = num;
|
|
|
|
if (1) {
|
|
// m_btnPlay->Visible = true;
|
|
// m_btnStop->Visible = false;
|
|
m_btnPlay->Enabled = true;
|
|
m_btnTry->Enabled = true;
|
|
}
|
|
|
|
// Hit提示索引
|
|
m_iHitItemIndex = -1;
|
|
m_bCollectDelete = false;
|
|
m_iCollectDelete = -1;
|
|
|
|
// 初始化数字页码显示的有关参数
|
|
m_stPageNum.iSelectPage = 1;
|
|
m_stPageNum.iMovingPage = -1;
|
|
m_stPageNum.iStartPage = 1;
|
|
m_stPageNum.iCurrentPos = 1;
|
|
m_stPageNum.iMovingPos = -1;
|
|
m_stPageNum.bShowDots = m_nPageNum > PAGE_NUM_SHOW ? true : false;
|
|
|
|
// 初始化列表选择的有关参数
|
|
m_stLstSelect.iOldSelectPage = -1;
|
|
m_stLstSelect.iOldSelectItemIndex = -1;
|
|
m_stLstSelect.iSelect = -1;
|
|
m_stLstSelect.iIdCollect = 0;
|
|
m_stLstSelect.bPlay = false;
|
|
|
|
// 刷新总页数、数字页码
|
|
m_pbPages->Invalidate();
|
|
m_pbPageNum->Invalidate();
|
|
|
|
int nM = 0;
|
|
for (vc_pFind = vc_vFind.begin(); vc_pFind != vc_vFind.end(); vc_pFind++) {
|
|
nM++;
|
|
if (vc_pFind->tStyleInfo.idStyle == m_idSelected) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
int iPage = nM / LISTBOX_NUM_SHOW;
|
|
if (nM % LISTBOX_NUM_SHOW)
|
|
iPage++;
|
|
int iPageSelected = (nM - 1) % LISTBOX_NUM_SHOW;
|
|
|
|
m_stLstSelect.iSelect = nM - 1;
|
|
m_edtPageGo->Text = iPage;
|
|
|
|
if (iPage == 1) {
|
|
AddPageItem(1);
|
|
m_lbStyle->SetPlayItemIndex();
|
|
m_lbStyle->ItemIndex = iPageSelected;
|
|
m_stLstSelect.iOldSelectPage = 1;
|
|
m_stLstSelect.iOldSelectItemIndex = iPageSelected;
|
|
|
|
if (e_UnDownload == vc_vFind[(nM - 1)].tStyleInfo.state) {
|
|
m_iOldItemIndex = iPageSelected;
|
|
vc_vFind[(nM - 1)].iStyleDownSate = 1;
|
|
vector<int>vcItemsIndex;
|
|
m_lbStyle->ResetItemsData(vc_vFind, m_stPageNum.iSelectPage,
|
|
vcItemsIndex, true);
|
|
}
|
|
|
|
m_lbStyle->Invalidate();
|
|
// return;
|
|
}
|
|
else{
|
|
PageGoClick(NULL);
|
|
}
|
|
|
|
if (m_nPageNum==0)
|
|
// m_edtPageGo->Text = 1;
|
|
// else
|
|
m_edtPageGo->Text = 0;
|
|
|
|
m_stLstSelect.iOldSelectPage = iPage;
|
|
m_stLstSelect.iOldSelectItemIndex = iPageSelected;
|
|
m_lbStyle->ItemIndex = m_stLstSelect.iOldSelectItemIndex;
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void TStyleSelForm::ShowStyle() {
|
|
// 得到查找结果总页数
|
|
int num = vc_vFind.size() / LISTBOX_NUM_SHOW;
|
|
if (vc_vFind.size() % LISTBOX_NUM_SHOW)
|
|
num++;
|
|
m_nPageNum = num;
|
|
|
|
if (m_nPageNum)
|
|
m_edtPageGo->Text = 1;
|
|
else
|
|
m_edtPageGo->Text = 0;
|
|
|
|
// Hit提示索引
|
|
m_iHitItemIndex = -1;
|
|
m_bCollectDelete = false;
|
|
m_iCollectDelete = -1;
|
|
|
|
// 初始化数字页码显示的有关参数
|
|
m_stPageNum.iSelectPage = 1;
|
|
m_stPageNum.iMovingPage = -1;
|
|
m_stPageNum.iStartPage = 1;
|
|
m_stPageNum.iCurrentPos = 1;
|
|
m_stPageNum.iMovingPos = -1;
|
|
m_stPageNum.bShowDots = m_nPageNum > PAGE_NUM_SHOW ? true : false;
|
|
|
|
// 初始化列表选择的有关参数
|
|
m_stLstSelect.iOldSelectPage = -1;
|
|
m_stLstSelect.iOldSelectItemIndex = -1;
|
|
m_stLstSelect.iSelect = -1;
|
|
m_stLstSelect.iIdCollect = 0;
|
|
m_stLstSelect.bPlay = false;
|
|
|
|
// 刷新总页数、数字页码
|
|
m_pbPages->Invalidate();
|
|
m_pbPageNum->Invalidate();
|
|
/*
|
|
if (vc_vFind.size()) { // 刷新列表
|
|
AddPageItem(m_stPageNum.iSelectPage);
|
|
}
|
|
else { // 查找内容为空
|
|
m_lbStyle->Clear();
|
|
OutputDebugString(L"查找内容为空");
|
|
}
|
|
*/
|
|
m_lbStyle->SetPlayItemIndex();
|
|
m_lbStyle->ItemIndex = -1;
|
|
|
|
vector<int>vcItemIndex;
|
|
int iCurPage = 1;
|
|
|
|
// OutputDebugString( L"RefreshAllItem..." );
|
|
RefreshAllItem(vcItemIndex, iCurPage);
|
|
// OutputDebugString( L"done.\nSetItemIndex..." );
|
|
m_lbStyle->SetItemIndex(vcItemIndex, iCurPage);
|
|
// OutputDebugString( L"done.\nResetItemsData..." );
|
|
|
|
// Add By GGGrass 2012年12月5日 15:12:08
|
|
if (vc_vFind.size()) {
|
|
vector<int>vcItemsIndex;
|
|
m_lbStyle->ResetItemsData(vc_vFind, iCurPage, vcItemsIndex, false);
|
|
}
|
|
// OutputDebugString( L"done." );
|
|
// End Add By GGGrass 2012年12月5日 15:12:18
|
|
|
|
//m_lbStyle->Invalidate();
|
|
if (vc_vFind.size()) { // 刷新列表
|
|
AddPageItem(m_stPageNum.iSelectPage);
|
|
}
|
|
else { // 查找内容为空
|
|
OutputDebugString(L"查找内容为空");
|
|
m_lbStyle->Clear();
|
|
}
|
|
// m_lbStyle->Invalidate();
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void TStyleSelForm::Play() {
|
|
Stop();
|
|
|
|
if (m_stLstSelect.iOldSelectPage == -1)
|
|
return;
|
|
|
|
// 视听类型
|
|
int iType=-1, iNo=-1;
|
|
for( int iRadio = 0; iRadio < RADIO_NUM-1; iRadio++ ){
|
|
if (m_baRadio[iRadio] != 0){
|
|
iNo = iRadio % 4;
|
|
iType = iRadio / 4;
|
|
break;
|
|
}
|
|
}
|
|
|
|
BYTE pData[100000];
|
|
int nDataSize = 100000;
|
|
int iPlayMode = 0;
|
|
if( m_bBase && iType==-1 ){
|
|
iPlayMode = 1; //播放基本编曲+旋律
|
|
}
|
|
else if( !m_bBase && iType==-1 ){
|
|
iPlayMode = 2; //从头播放完整编曲
|
|
}
|
|
else if( !m_bBase && m_iSegType==0 ){
|
|
iPlayMode = 3; //从指定段开始播放编曲+旋律
|
|
}
|
|
|
|
if( iPlayMode==1 ){
|
|
g_iSelectedStyleID = vc_pFind->tStyleInfo.idStyle;
|
|
g_strSelectedStyleName
|
|
= (vc_vFind.begin() + m_stLstSelect.iSelect)->tStyleInfo.detail.strStyleName;
|
|
GenerateBaseCompose();
|
|
HRESULT hr = f_MM_Play( Handle, 0, TYPE_AUDIO_BASECOMPOSE );
|
|
}
|
|
else if( iPlayMode==2 ){
|
|
COMPOSESTAGELIST lstComposeStages;
|
|
DuplicateComposeStages( lstComposeStages, vc_pFind->tStyleInfo.idStyle );
|
|
|
|
BYTE pBuffer[100000];
|
|
int nBufferLength = 100000;
|
|
int nTemp=0;
|
|
|
|
int ret = GetComposeData( lstComposeStages, g_iMelodyKey, nDataSize, pData,
|
|
false, nTemp, NULL );
|
|
|
|
f_MM_PlayStyleDemo( pData, nDataSize, g_nMelodyTempo);
|
|
|
|
for( int i=0; i<lstComposeStages.size(); i++ ){
|
|
delete lstComposeStages[i];
|
|
}
|
|
}
|
|
else if( iPlayMode==3 ){
|
|
g_lstComposeStages[m_iSelStage]->idStyle = vc_pFind->tStyleInfo.idStyle;
|
|
g_lstComposeStages[m_iSelStage]->iVar = iNo;
|
|
|
|
if( vc_pFind->tStyleInfo.idStyle!=g_iSelectedStyleID ){
|
|
g_lstComposeStages[m_iSelStage]->strStyleName
|
|
= (vc_vFind.begin() + m_stLstSelect.iSelect)->tStyleInfo.detail.strStyleName;
|
|
}
|
|
else{
|
|
g_lstComposeStages[m_iSelStage]->strStyleName = "";
|
|
}
|
|
|
|
GenerateCompose( g_iMelodyKey, false );
|
|
|
|
int nBeginBar = 0;
|
|
for( int i=0; i<m_iSelStage; i++ ){
|
|
nBeginBar += g_lstComposeStages[i]->nStageBars;
|
|
}
|
|
|
|
HRESULT hr = f_MM_Play( Handle, nBeginBar, TYPE_SONG_COMPOSE );
|
|
}
|
|
else{
|
|
HRESULT hr = f_SM_GetStyleDemo( nDataSize, pData, vc_pFind->tStyleInfo.idStyle,
|
|
iType, iNo, g_iMelodyKey, m_iChordType);
|
|
|
|
f_MM_PlayStyleDemo( pData, nDataSize, g_nMelodyTempo);
|
|
}
|
|
|
|
m_btnPlay->Visible = false;
|
|
m_btnStop->Visible = true;
|
|
m_btnTry->Enabled = true;
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void TStyleSelForm::Stop() {
|
|
f_MM_Stop();
|
|
|
|
m_btnPlay->Visible = true;
|
|
m_btnStop->Visible = false;
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::FindClick(TObject *Sender) {
|
|
|
|
m_btnCollect->Down = false;
|
|
m_btnRecord->Down = false;
|
|
m_btnFind->Down = true;
|
|
m_edSearch->Visible = false;
|
|
m_imgSrearch->Visible = false;
|
|
m_btnPngSearch->Down = false;
|
|
|
|
m_btnRecommand->Down = false;
|
|
|
|
if (m_iBtnState == BTNSTATE_FIND) {
|
|
m_ImgFind->Visible = !m_ImgFind->Visible;
|
|
return;
|
|
}
|
|
else {
|
|
Stop();
|
|
|
|
m_btnPlay->Enabled = false;
|
|
m_btnTry->Enabled = false;
|
|
m_stLstSelect.bPlay = false;
|
|
m_lbStyle->SetPlayItemIndex();
|
|
m_lbStyle->ItemIndex = -1;
|
|
m_iBtnState = BTNSTATE_FIND;
|
|
|
|
if (!m_ImgFind->Visible) {
|
|
FindStyle();
|
|
if (Sender)
|
|
ShowStyle();
|
|
}
|
|
m_ImgFind->Visible = !m_ImgFind->Visible;
|
|
}
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::CollectClick(TObject *Sender) {
|
|
|
|
m_btnCollect->Down = true;
|
|
m_btnFind->Down = false;
|
|
m_btnRecord->Down = false;
|
|
m_edSearch->Visible = false;
|
|
m_imgSrearch->Visible = false;
|
|
m_btnPngSearch->Down = false;
|
|
|
|
m_btnRecommand->Down = false;
|
|
|
|
if (m_iBtnState == BTNSTATE_COLLECT ) {
|
|
return;
|
|
}
|
|
|
|
Stop();
|
|
|
|
m_btnPlay->Enabled = false;
|
|
m_btnTry->Enabled = false;
|
|
m_stLstSelect.bPlay = false;
|
|
m_lbStyle->SetPlayItemIndex();
|
|
m_iBtnState = BTNSTATE_COLLECT;
|
|
m_ImgFind->Visible = false;
|
|
|
|
if (vc_vFind.size())
|
|
vc_vFind.clear();
|
|
|
|
DebugPrint( "colect %d.\n", vc_vCollect.size() );
|
|
if (vc_vCollect.size()) {
|
|
for (int i = 0; i < sg_nMsg; i++) {
|
|
for (int j = 0; j < vc_vCollect.size(); j++) {
|
|
if (sg_tTmpMsg[i].tStyleInfo.idStyle == vc_vCollect[j])
|
|
vc_vFind.push_back(sg_tTmpMsg[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (Sender)
|
|
ShowStyle();
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::RecordClick(TObject *Sender) {
|
|
|
|
m_btnCollect->Down = false;
|
|
m_btnFind->Down = false;
|
|
m_btnRecord->Down = true;
|
|
m_btnRecommand->Down = false;
|
|
|
|
if (m_iBtnState == BTNSTATE_RECORD)
|
|
return;
|
|
|
|
Stop();
|
|
|
|
m_btnPlay->Enabled = false;
|
|
m_btnTry->Enabled = false;
|
|
m_stLstSelect.bPlay = false;
|
|
m_lbStyle->SetPlayItemIndex();
|
|
m_iBtnState = BTNSTATE_RECORD;
|
|
m_ImgFind->Visible = false;
|
|
|
|
m_edSearch->Visible = false;
|
|
m_imgSrearch->Visible = false;
|
|
m_btnPngSearch->Down = false;
|
|
|
|
if (vc_vFind.size())
|
|
vc_vFind.clear();
|
|
|
|
for (vc_pFind = vc_vUseRecord.begin(); vc_pFind != vc_vUseRecord.end(); vc_pFind++){
|
|
if( vc_pFind->tStyleInfo.detail.iTimesignature==g_iMelodyTimeSignature )
|
|
vc_vFind.push_back(*vc_pFind);
|
|
}
|
|
if (Sender)
|
|
ShowStyle();
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::PlayClick(TObject *Sender) {
|
|
Stop();
|
|
|
|
if (m_stLstSelect.iOldSelectItemIndex == -1)
|
|
return;
|
|
|
|
// 播放
|
|
vc_pFind = vc_vFind.begin() + (m_stLstSelect.iOldSelectPage - 1)
|
|
* LISTBOX_NUM_SHOW + m_stLstSelect.iOldSelectItemIndex; // 得到索引ID
|
|
|
|
// m_btnTry->Enabled = true;
|
|
m_stLstSelect.bPlay = true;
|
|
|
|
// m_lbStyle->SetPlayItemIndex(m_stLstSelect.iOldSelectItemIndex);
|
|
// m_lbStyle->Invalidate();
|
|
|
|
Play();
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::StopClick(TObject *Sender) {
|
|
Stop();
|
|
|
|
m_lbStyle->SetPlayItemIndex();
|
|
m_lbStyle->Invalidate();
|
|
m_stLstSelect.bPlay = false;
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::TryClick(TObject *Sender) {
|
|
Stop();
|
|
|
|
if (m_stLstSelect.iSelect != -1) {
|
|
bool flag = true;
|
|
for (vc_pFind = vc_vUseRecord.begin(); vc_pFind != vc_vUseRecord.end(); vc_pFind++){
|
|
if (vc_pFind->tStyleInfo.idStyle == (vc_vFind.begin() +
|
|
m_stLstSelect.iSelect)->tStyleInfo.idStyle) {
|
|
flag = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (flag)
|
|
vc_vUseRecord.push_back(*(vc_vFind.begin() + m_stLstSelect.iSelect));
|
|
|
|
int idSel = (vc_vFind.begin() + m_stLstSelect.iSelect)->tStyleInfo.idStyle;
|
|
|
|
if( idSel != m_idSelected ){
|
|
g_bComposeLoaded = false;
|
|
m_idSelected = idSel;
|
|
m_strName = (vc_vFind.begin() + m_stLstSelect.iSelect)->tStyleInfo.detail.strStyleName;
|
|
|
|
if( m_iSegType==-1 ){
|
|
g_bBaseComposeLoaded = false;
|
|
}
|
|
|
|
}
|
|
|
|
// 保存本次查找风格种类
|
|
// IdToType(g_iSelectedStyleID);
|
|
g_lstStyleSelected.clear();
|
|
g_iSelectedStyleType = 0;
|
|
for (int i = 0; i < CHECK_NUM; i++) {
|
|
DWORD temp = 0;
|
|
if (m_baChecks[i]) {
|
|
temp = 1 << i;
|
|
g_iSelectedStyleType |= temp;
|
|
g_lstStyleSelected.push_back(i);
|
|
}
|
|
}
|
|
|
|
for( int j=0; j<4; j++ ){
|
|
if( m_baRadio[m_iSegType*4+j]==1 ){
|
|
m_iSegNo = j;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::PageGoClick(TObject *Sender) {
|
|
if (!vc_vFind.size())
|
|
return;
|
|
|
|
int temp = m_stPageNum.iSelectPage;
|
|
m_stPageNum.iSelectPage = StrToInt(m_edtPageGo->Text);
|
|
|
|
if (m_nPageNum <= PAGE_NUM_SHOW) { // 页数小于等于 PAGE_NUM_SHOW
|
|
m_stPageNum.iStartPage = 1;
|
|
m_stPageNum.iCurrentPos = m_stPageNum.iSelectPage;
|
|
m_stPageNum.bShowDots = false;
|
|
|
|
}
|
|
else { // 页数大于 PAGE_NUM_SHOW
|
|
int rg = m_nPageNum - m_stPageNum.iSelectPage;
|
|
if (rg <= 2) {
|
|
m_stPageNum.bShowDots = false;
|
|
m_stPageNum.iStartPage = m_nPageNum - PAGE_NUM_SHOW + 1;
|
|
m_stPageNum.iCurrentPos = PAGE_NUM_SHOW - rg;
|
|
|
|
}
|
|
else {
|
|
m_stPageNum.bShowDots = true;
|
|
if (m_stPageNum.iSelectPage <= 4) {
|
|
m_stPageNum.iStartPage = 1;
|
|
m_stPageNum.iCurrentPos = m_stPageNum.iSelectPage;
|
|
}
|
|
else {
|
|
m_stPageNum.iStartPage = m_stPageNum.iSelectPage - 3;
|
|
m_stPageNum.iCurrentPos = 4;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 跳转到当前页
|
|
if (m_stPageNum.iSelectPage == temp)
|
|
return;
|
|
|
|
m_pbPages->Invalidate();
|
|
m_pbPageNum->Invalidate();
|
|
|
|
AddPageItem(m_stPageNum.iSelectPage);
|
|
|
|
if (m_stPageNum.iSelectPage == m_stLstSelect.iOldSelectPage) {
|
|
m_lbStyle->SetPlayItemIndex(m_stLstSelect.iOldSelectItemIndex);
|
|
m_lbStyle->ItemIndex = m_stLstSelect.iOldSelectItemIndex;
|
|
}
|
|
else {
|
|
m_lbStyle->SetPlayItemIndex();
|
|
}
|
|
|
|
vector<int>vcItemsIndex;
|
|
m_lbStyle->ResetItemsData(vc_vFind, m_stPageNum.iSelectPage,
|
|
vcItemsIndex, true);
|
|
//m_lbStyle->Invalidate();
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::HintTimerProc(TObject* Sender) {
|
|
m_pTimerHint->Enabled = false;
|
|
if (m_iHitItemIndex == -1)
|
|
return;
|
|
|
|
TPoint point(m_xPos - 20, m_yPos + 20);
|
|
point = m_lbStyle->ClientToScreen(point);
|
|
|
|
int iSel = (m_stPageNum.iSelectPage - 1) * LISTBOX_NUM_SHOW +
|
|
m_iHitItemIndex;
|
|
vector<DEFTSTYLEINFO>::iterator plst;
|
|
|
|
plst = vc_vFind.begin() + iSel;
|
|
|
|
String strHint = "名称:";
|
|
strHint += plst->tStyleInfo.detail.strStyleName;
|
|
strHint += "\n消耗: ";
|
|
|
|
char buf[20];
|
|
sprintf(buf, "%d(唱作音符)", plst->tStyleInfo.cost);
|
|
strHint += buf;
|
|
strHint += "\n描述:";
|
|
strHint += plst->tStyleInfo.detail.strDescription;
|
|
strHint += "\n类型: ";
|
|
|
|
String strType;
|
|
for( int i=0; i<2; i++ ){
|
|
int type = plst->tStyleInfo.detail.type[i];
|
|
|
|
if( type<0 )
|
|
break;
|
|
else{
|
|
if( type<24 ){
|
|
strType += (String)LSZ_STYLTYPES[type] + " ";
|
|
}
|
|
}
|
|
}
|
|
if (strType == L"") {
|
|
strType = L"未知类型";
|
|
}
|
|
strHint += strType;
|
|
|
|
int score10 = (int)(plst->tStyleInfo.score/10.0 + 0.5);
|
|
sprintf( buf, "%.1f", score10 / 10.0 );
|
|
|
|
strHint += "\n评分:";
|
|
strHint += buf;
|
|
strHint += "(由专业版用户评分)";
|
|
|
|
m_pShowHint->ShowHintWindow(point, strHint);
|
|
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::FormKeyDown(TObject *Sender, WORD &Key,
|
|
TShiftState Shift) {
|
|
switch (Key) {
|
|
case VK_RETURN:
|
|
if (m_btnTry->Enabled)
|
|
TryClick(NULL);
|
|
break;
|
|
|
|
case VK_ESCAPE:
|
|
ModalResult = mrCancel;
|
|
break;
|
|
}
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::RecommandClick(TObject *Sender) {
|
|
|
|
m_btnCollect->Down = false;
|
|
m_btnFind->Down = false;
|
|
m_btnRecord->Down = false;
|
|
m_btnRecommand->Down = true;
|
|
|
|
Stop();
|
|
|
|
m_ImgFind->Visible = false;
|
|
m_btnPlay->Enabled = false;
|
|
m_btnTry->Enabled = false;
|
|
|
|
m_edSearch->Visible = false;
|
|
m_imgSrearch->Visible = false;
|
|
m_btnPngSearch->Down = false;
|
|
|
|
m_stLstSelect.bPlay = false;
|
|
|
|
if (m_iBtnState == BTNSTATE_RECOMMAND)
|
|
return;
|
|
m_iBtnState = BTNSTATE_RECOMMAND;
|
|
|
|
m_lbStyle->SetPlayItemIndex();
|
|
m_lbStyle->ItemIndex = -1;
|
|
|
|
if (vc_vFind.size()) {
|
|
vc_vFind.clear();
|
|
}
|
|
|
|
int rs_nMsg;
|
|
if( f_SM_GetStyleRecomInfos(g_iMelodyTimeSignature, NULL, &rs_nMsg)==-1
|
|
|| rs_nMsg==0 )
|
|
return;
|
|
|
|
TSTYLEINFO *rs_aMsg = new TSTYLEINFO[rs_nMsg];
|
|
if (f_SM_GetStyleRecomInfos(g_iMelodyTimeSignature, rs_aMsg, &rs_nMsg) == -1){
|
|
delete rs_aMsg;
|
|
rs_nMsg = 0;
|
|
return;
|
|
}
|
|
|
|
DebugPrint("rs_nMsg=%d", rs_nMsg);
|
|
|
|
for (int iIndex = 0; iIndex < sg_nMsg; iIndex++){
|
|
for (int indexRs = 0; indexRs < rs_nMsg; indexRs++) {
|
|
if (rs_aMsg[indexRs].idStyle == sg_tTmpMsg[iIndex].tStyleInfo.idStyle){
|
|
vc_vFind.push_back(sg_tTmpMsg[iIndex]);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
delete[] rs_aMsg;
|
|
|
|
if(Sender)
|
|
ShowStyle();
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
/*
|
|
void TStyleSelForm::SetBtnPosByLogState(bool bIsLog) {
|
|
|
|
// Recalculate the contorl position
|
|
int iIntral = (m_btnRecord->Left - m_btnFind->BoundsRect.Right -
|
|
m_btnRecord->Width * (bIsLog ? 3 : 2)) / (bIsLog ? 4 : 3);
|
|
|
|
m_btnCollect->Left = m_btnFind->BoundsRect.Right + iIntral;
|
|
m_btnRecommand->Left = m_btnCollect->BoundsRect.Right + iIntral;
|
|
|
|
int iLeft = bIsLog ? m_btnRecommand->BoundsRect.Right :
|
|
m_btnCollect->BoundsRect.Right;
|
|
m_btnPngSearch->Left = iLeft + iIntral;
|
|
m_btnRecommand->Visible = bIsLog;
|
|
}
|
|
*/
|
|
|
|
void TStyleSelForm::RefreshAllItem(vector<int>& vcIndexID, int & iPageIndex) {
|
|
|
|
if (vcIndexID.size())
|
|
vcIndexID.clear();
|
|
|
|
// Display the strikeout-line while user logon and not in pay-page and listen page
|
|
if (!g_bLogon || (g_bLogon && m_btnRecommand->Down)){
|
|
OutputDebugString( L"no items" );
|
|
return;
|
|
}
|
|
|
|
for (int i = 0; i < g_infoUser.ownStyleNum; i++) {
|
|
for (int index = 0; index < vc_vFind.size(); index++) {
|
|
|
|
vc_pFind = vc_vFind.begin() + index;
|
|
|
|
if (vc_pFind->tStyleInfo.idStyle ==
|
|
g_infoUser.arrStyleId[i]) {
|
|
vcIndexID.push_back(index);
|
|
}
|
|
}
|
|
}
|
|
|
|
iPageIndex = m_stPageNum.iSelectPage;
|
|
}
|
|
|
|
void TStyleSelForm::RefreshSearchStyles(const String strStyleName) {
|
|
// 清空显示内容
|
|
if (vc_vFind.size())
|
|
vc_vFind.clear();
|
|
|
|
// 遍历每个风格信息,
|
|
for (int i = 0; i < sg_nMsg; i++) {
|
|
AnsiString strTmp = sg_tTmpMsg[i].tStyleInfo.detail.strStyleName;
|
|
if (strStyleName == L"" || strTmp.Pos(strStyleName) > 0) { {
|
|
vc_vFind.push_back(sg_tTmpMsg[i]);
|
|
}
|
|
}
|
|
}
|
|
ShowStyle();
|
|
}
|
|
|
|
void __fastcall TStyleSelForm::m_edSearchChange(TObject *Sender) {
|
|
String strTxtName = m_edSearch->Text.Trim();
|
|
RefreshSearchStyles(strTxtName);
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::OnTimerDraw(TObject *Sender) {
|
|
|
|
for (int i = 0; i < vc_vFind.size(); i++) {
|
|
if (vc_vFind[i].iStyleDownSate > 1) {
|
|
|
|
int iDwnLoadState = vc_vFind[i].iStyleDownSate - 2;
|
|
vc_vFind[i].iStyleDownSate = (++iDwnLoadState) % 10 + 2;
|
|
|
|
int iHotIndex = (m_stPageNum.iSelectPage - 1) * LISTBOX_NUM_SHOW +
|
|
m_lbStyle->ItemIndex;
|
|
|
|
if (i == iHotIndex) {
|
|
vc_vFind[i].iStyleDownSate += 10;
|
|
}
|
|
|
|
vector<int>vcItemsIndex;
|
|
|
|
if (vcItemsIndex.size())
|
|
vcItemsIndex.clear();
|
|
vcItemsIndex.push_back(i);
|
|
|
|
m_lbStyle->ResetItemsData(vc_vFind, m_stPageNum.iSelectPage,
|
|
vcItemsIndex, true);
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
void TStyleSelForm::RefreshAllStylesState() {
|
|
for (int i = 0; i < vc_vFind.size(); i++) {
|
|
if (vc_vFind[i].iStyleDownSate > 1) {
|
|
for (int j = 0; j < sg_nMsg; j++) {
|
|
if (sg_tTmpMsg[j].tStyleInfo.idStyle == vc_vFind[i]
|
|
.tStyleInfo.idStyle) {
|
|
sg_tTmpMsg[j].iStyleDownSate = vc_vFind[i].iStyleDownSate;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void __fastcall TStyleSelForm::OnNetworkMessage(TMessage &msg) {
|
|
WORD eMessage = HIWORD(msg.WParam);
|
|
WORD eExtra = LOWORD(msg.WParam);
|
|
|
|
/*
|
|
if(g_bLogon)
|
|
f_CS_DownloadStyle(pStyle->idStyle, Handle);
|
|
*/
|
|
switch (eMessage) {
|
|
case e_styleInfoResponse: // download the style data
|
|
{
|
|
if (0 == eExtra) {
|
|
int iRet = 0;
|
|
int iStyleId = msg.LParam;
|
|
|
|
TSTYLEINFO pStyleInfo;
|
|
iRet = f_SM_GetStyleInfo(iStyleId, &pStyleInfo);
|
|
|
|
// sg_tTmpMsg
|
|
for (int i = 0; i < sg_nMsg; i++) {
|
|
if (sg_tTmpMsg[i].tStyleInfo.idStyle == iStyleId) {
|
|
sg_tTmpMsg[i].tStyleInfo = pStyleInfo;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (0 == iRet) {; // InsertNetWorkListView(pStyleInfo);
|
|
}
|
|
else {
|
|
String strError =
|
|
L"Excute Function \"GetStyleInfo()\" Failed,StyleID = " +
|
|
IntToStr(iStyleId);
|
|
OutputDebugString(strError.c_str());
|
|
}
|
|
}
|
|
else if (eExtra == e_DatabaseError) {
|
|
DebugPrint("服务器数据访问失败!\n");
|
|
}
|
|
} break;
|
|
case e_styleDataResponse: {
|
|
// Data has downloaded
|
|
if (0 == eExtra) {
|
|
int iRet = 0;
|
|
int iStyleId = msg.LParam;
|
|
// Need to modify by GGGrass 2013年1月21日 10:59:40
|
|
// Here will stop the timer and reset the styles display
|
|
// data and invalidate the listview control's data
|
|
|
|
int iVcIndex = -1;
|
|
for (int i = 0; i < vc_vFind.size(); i++) {
|
|
if (iStyleId == vc_vFind[i].tStyleInfo.idStyle) {
|
|
vc_vFind[i].tStyleInfo.state = e_Downloaded;
|
|
vc_vFind[i].iStyleDownSate = 0;
|
|
iVcIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < sg_nMsg; i++) {
|
|
if (iStyleId == sg_tTmpMsg[i].tStyleInfo.idStyle) {
|
|
sg_tTmpMsg[i].tStyleInfo.state = e_Downloaded;
|
|
sg_tTmpMsg[i].iStyleDownSate = 0;
|
|
}
|
|
}
|
|
|
|
vector<int>vcItemsIndex;
|
|
vcItemsIndex.push_back(iVcIndex);
|
|
m_lbStyle->ResetItemsData(vc_vFind, m_stPageNum.iSelectPage,
|
|
vcItemsIndex, true);
|
|
|
|
RefreshAllStylesState();
|
|
m_lbStyle->Invalidate();
|
|
|
|
if( (m_stLstSelect.iOldSelectPage - 1)* LISTBOX_NUM_SHOW
|
|
+ m_stLstSelect.iOldSelectItemIndex==iVcIndex ){
|
|
m_btnPlay->Enabled = true;
|
|
m_btnTry->Enabled = true;
|
|
}
|
|
}
|
|
|
|
} break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void __fastcall TStyleSelForm::OnDownLoadStyle(TObject* Sender) {
|
|
|
|
// OutputDebugString(L".........Begin to download style.........");
|
|
int iVcIndex = -1;
|
|
for (int i = 0; i < vc_vFind.size(); i++) {
|
|
if (vc_pFind->tStyleInfo.idStyle == vc_vFind[i].tStyleInfo.idStyle) {
|
|
iVcIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
if (iVcIndex == -1)
|
|
return;
|
|
|
|
vc_vFind[iVcIndex].iStyleDownSate = 12;
|
|
m_iOldItemState = 2;
|
|
vector<int>vcItemsIndex;
|
|
vcItemsIndex.push_back(iVcIndex);
|
|
m_lbStyle->ResetItemsData(vc_vFind, m_stPageNum.iSelectPage,
|
|
vcItemsIndex, true);
|
|
|
|
m_iDwnLdgIndex = iVcIndex;
|
|
RefreshAllStylesState();
|
|
Timer2->Enabled = true;
|
|
|
|
// Here can download the style's data
|
|
// if (g_bLogon) {
|
|
int iStyleId = vc_vFind[iVcIndex].tStyleInfo.idStyle;
|
|
HRESULT hr = f_CS_DownloadStyle(iStyleId, Handle);
|
|
|
|
String strStyleID = L"Begin to download the stlye(id) = " +
|
|
IntToStr(iStyleId) + L"~~~;";
|
|
OutputDebugString(strStyleID.c_str());
|
|
// }
|
|
}
|
|
|
|
void __fastcall TStyleSelForm::OnSearchStyles(TObject *Sender) {
|
|
|
|
m_btnPngSearch->Down = true;
|
|
m_btnCollect->Down = false;
|
|
m_btnFind->Down = false;
|
|
m_btnRecord->Down = false;
|
|
m_btnRecommand->Down = false;
|
|
|
|
m_edSearch->Visible = true;
|
|
m_imgSrearch->Visible = true;
|
|
m_imgSrearch->Transparent = true;
|
|
m_ImgFind->Visible = false;
|
|
|
|
m_btnRecommand->Down = false;
|
|
|
|
if (m_iBtnState == BTNSTATE_SERACH)
|
|
return;
|
|
|
|
Stop();
|
|
|
|
// FindStyle();
|
|
m_lbStyle->SetPlayItemIndex();
|
|
// String strTxtName = m_edSearch->Text.Trim();
|
|
m_iBtnState = BTNSTATE_SERACH;
|
|
|
|
// 清空显示内容
|
|
if (vc_vFind.size())
|
|
vc_vFind.clear();
|
|
|
|
// 遍历每个风格信息,
|
|
for (int i = 0; i < sg_nMsg; i++) {
|
|
vc_vFind.push_back(sg_tTmpMsg[i]);
|
|
}
|
|
|
|
ShowStyle();
|
|
|
|
m_edSearch->SetFocus();
|
|
}
|
|
// ---------------------------------------------------------------------------
|
|
|
|
|
|
void __fastcall TStyleSelForm::FormActivate(TObject *Sender)
|
|
{
|
|
// if(m_bActiveHappened) return;
|
|
// else m_bActiveHappened = true;
|
|
|
|
OutputDebugString( L"Form activate!" );
|
|
|
|
for( int i=0; i<sg_nMsg; i++ ){
|
|
if( sg_aMsg[i].idStyle==m_idSelected ){
|
|
int nM = sg_aMsg[i].detail.type[0];
|
|
if( nM>9 ) nM = 9;
|
|
|
|
if( m_baChecks[nM]==0 ){
|
|
m_baChecks[nM] = 1;
|
|
g_lstStyleSelected.push_back(nM);
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
bool bFindSelStyle = false;
|
|
|
|
int rs_nMsg;
|
|
if (f_SM_GetStyleRecomInfos(g_iMelodyTimeSignature, NULL, &rs_nMsg) == -1)
|
|
bFindSelStyle = false;
|
|
|
|
TSTYLEINFO *rs_aMsg = new TSTYLEINFO[rs_nMsg];
|
|
if (f_SM_GetStyleRecomInfos(g_iMelodyTimeSignature, rs_aMsg, &rs_nMsg) == -1){
|
|
delete rs_aMsg;
|
|
rs_nMsg = 0;
|
|
bFindSelStyle = false;
|
|
}
|
|
|
|
for (int indexRs = 0; indexRs < rs_nMsg; indexRs++) {
|
|
|
|
if (rs_aMsg[indexRs].idStyle == m_idSelected)
|
|
{
|
|
bFindSelStyle = true;
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(rs_aMsg)
|
|
delete rs_aMsg;
|
|
|
|
if( bFindSelStyle ){
|
|
RecommandClick(NULL);
|
|
}else{
|
|
FindStyle();
|
|
}
|
|
|
|
ShowStyle();
|
|
|
|
int nM = 0;
|
|
for (vc_pFind = vc_vFind.begin(); vc_pFind != vc_vFind.end(); vc_pFind++) {
|
|
nM++;
|
|
if (vc_pFind->tStyleInfo.idStyle == m_idSelected){
|
|
if( vc_vUseRecord.empty() )
|
|
vc_vUseRecord.push_back(*vc_pFind);
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
int iPage = nM / LISTBOX_NUM_SHOW;
|
|
if (nM % LISTBOX_NUM_SHOW)
|
|
iPage++;
|
|
int iPageSelected = (nM - 1) % LISTBOX_NUM_SHOW;
|
|
|
|
m_stLstSelect.iSelect = nM - 1;
|
|
m_edtPageGo->Text = iPage;
|
|
|
|
if( iPage>1 ){
|
|
PageGoClick(NULL);
|
|
}
|
|
|
|
m_stLstSelect.iOldSelectPage = iPage;
|
|
m_stLstSelect.iOldSelectItemIndex = iPageSelected;
|
|
m_lbStyle->ItemIndex = iPageSelected;
|
|
|
|
/* // Judge the control position by logon state
|
|
// SetBtnPosByLogState(g_bLogon);
|
|
// if (g_bLogon) {
|
|
vector<int>vcItemIndex;
|
|
RefreshAllItem(vcItemIndex, iPage);
|
|
RefreshAllStylesState();
|
|
m_lbStyle->SetItemIndex(vcItemIndex, iPage);
|
|
m_lbStyle->Invalidate();
|
|
// }
|
|
*/
|
|
if( m_iSelStage>=0 ){
|
|
m_lblTitle->Caption = L"---分段设定---";
|
|
|
|
m_pbRadio[12]->Enabled = false;
|
|
m_baRadio[12] = 0;
|
|
for( int i=0; i<3; i++ ){
|
|
for( int j=0; j<4; j++ ){
|
|
if( i!=m_iSegType ){
|
|
m_pbRadio[i*4 + j]->Enabled = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
m_baRadio[m_iSegType * 4 + m_iSegNo ] = 1;
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::FormClose(TObject *Sender, TCloseAction &Action)
|
|
{
|
|
// Add By GGGrass 2012年12月7日 11:34:17
|
|
int iStyleDlIndex = -1;
|
|
for (int i = 0; i < sg_nMsg; i++) {
|
|
if (sg_tTmpMsg[i].iStyleDownSate > 1
|
|
&& e_Downloaded != sg_tTmpMsg[i].tStyleInfo.state) {
|
|
iStyleDlIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (-1 != iStyleDlIndex) {
|
|
|
|
int iRet = MessageForm->ShowMessage("有风格正在下载,退出将停止风格下载?",
|
|
MB_ICONQUESTION | MB_YESNO);
|
|
if (iRet != IDYES)
|
|
return;
|
|
else {
|
|
sg_tTmpMsg[iStyleDlIndex].iStyleDownSate = 0;
|
|
}
|
|
}
|
|
// End Add By GGGrass 2012年12月7日 11:34:13
|
|
|
|
f_MM_Stop();
|
|
|
|
AnsiString strCollection = g_strUserPath.c_str();
|
|
strCollection += L"profile\\Collect.dat";
|
|
if (vc_vCollect.size()) {
|
|
// 保存收藏
|
|
int *aCollect = new int[vc_vCollect.size()];
|
|
for (int i = 0; i < vc_vCollect.size(); i++)
|
|
aCollect[i] = vc_vCollect[i];
|
|
|
|
FILE *fpCollect = fopen(strCollection.c_str(), "wb");
|
|
if( fpCollect ){
|
|
fwrite(aCollect, sizeof(int), vc_vCollect.size(), fpCollect);
|
|
fclose(fpCollect);
|
|
}
|
|
|
|
delete aCollect;
|
|
}
|
|
else {
|
|
// 清除文件
|
|
remove(strCollection.c_str());
|
|
}
|
|
|
|
f_CS_CancelOperation();
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TStyleSelForm::OnPlayOver(TMessage &msg)
|
|
{
|
|
StopClick( NULL );
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void TStyleSelForm::DuplicateComposeStages( COMPOSESTAGELIST& lstComposeStages, int idStyle )
|
|
{
|
|
for( int i=0; i<g_lstComposeStages.size(); i++ ){
|
|
COMPOSESTAGE* pNewStage = new COMPOSESTAGE;
|
|
pNewStage->iMelodyStage = g_lstComposeStages[i]->iMelodyStage;
|
|
pNewStage->iVar = g_lstComposeStages[i]->iVar;
|
|
|
|
for( int j=0; j<g_lstComposeStages[i]->aFills.size(); j++ ){
|
|
pNewStage->aFills.push_back( g_lstComposeStages[i]->aFills[j] );
|
|
}
|
|
|
|
if( g_lstComposeStages[i]->idStyle==g_iSelectedStyleID ){
|
|
pNewStage->idStyle = idStyle;
|
|
|
|
if( pNewStage->iMelodyStage<0x100 ){
|
|
pNewStage->nStageBars = g_lstComposeStages[i]->nStageBars;
|
|
}
|
|
else if( pNewStage->iMelodyStage<0x110 ){
|
|
int iVar = pNewStage->iMelodyStage - 0x100;
|
|
pNewStage->nStageBars = (vc_vFind.begin()
|
|
+ m_stLstSelect.iSelect)->tStyleInfo.detail.aIntroBars[iVar];
|
|
}
|
|
else{
|
|
int iVar = pNewStage->iMelodyStage - 0x110;
|
|
pNewStage->nStageBars = (vc_vFind.begin()
|
|
+ m_stLstSelect.iSelect)->tStyleInfo.detail.aEndingBars[iVar];
|
|
}
|
|
}
|
|
else{
|
|
pNewStage->idStyle = g_lstComposeStages[i]->idStyle;
|
|
pNewStage->nStageBars = g_lstComposeStages[i]->nStageBars;
|
|
}
|
|
|
|
lstComposeStages.push_back( pNewStage );
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|