⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlgfavoriteedit.cpp

📁 AliEditor_Source code
💻 CPP
字号:
// DlgFavoriteEdit.cpp : implementation file
//

#include "stdafx.h"
#include "AliEditor.h"
#include "DlgFavoriteEdit.h"
#include "MainFrm.h"
#include "DbParser.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDlgFavoriteEdit dialog


CDlgFavoriteEdit::CDlgFavoriteEdit(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgFavoriteEdit::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgFavoriteEdit)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	
}


void CDlgFavoriteEdit::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgFavoriteEdit)
	DDX_Control(pDX, IDC_LIST_ITEMS, m_list);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgFavoriteEdit, CDialog)
	//{{AFX_MSG_MAP(CDlgFavoriteEdit)
	ON_BN_CLICKED(IDC_ADD, OnAdd)
	ON_BN_CLICKED(IDC_REMOVE, OnRemove)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgFavoriteEdit message handlers

BOOL CDlgFavoriteEdit::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_list.InsertColumn(0, PKEYZ_SERVICE_NAME, LVCFMT_LEFT, 200);
	m_list.InsertColumn(1, "member", LVCFMT_LEFT, 60);

	int nBitIndex = m_pSatTpMod->offset;
	CDbParser* pdbParser = &((CMainFrame*)AfxGetMainWnd())->m_dbParser;
	db_header_t* header = &pdbParser->m_progheader;
	int index_name = pdbParser->GetProgNodeIndex(PKEYZ_SERVICE_NAME, TRUE);
	int index_fav = pdbParser->GetProgNodeIndex(PKEYZ_FAV_GROUP, TRUE);
	char bufsz[256];
	int nFav = 0;
	for(short i = 0, short s = 0; i < header->rec_length; i++)
	{
		if( header->precord[i] == -1 )
			continue;
		pdbParser->GetNodeData(PROG_NODE, s, index_name, bufsz, 0, TRUE);
		m_list.InsertItem(s, bufsz);
		pdbParser->GetNodeData(PROG_NODE, s, index_fav, bufsz, 0, TRUE);
		//nFav = pdbParser->GetDataValue(bufsz);
		nFav = atoi(bufsz);
		if( (nFav >> (nBitIndex-1)) & 0x00000001 )
		{
			m_list.SetItemText(s, 1, IS_FAVORITE_MEMBER);
		}
		else
		{
			m_list.SetItemText(s, 1, NOT_FAVORITE_MEMBER);
		}
		m_list.SetItemData(s, i);
		s++;
	}
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

int CDlgFavoriteEdit::GetCurSel()
{
	POSITION pos = m_list.GetFirstSelectedItemPosition();
	if (pos == NULL) return -1;

	int nItem = m_list.GetNextSelectedItem(pos);
	
	return nItem;
}

void CDlgFavoriteEdit::SetCurSel(int index, BOOL bClearFoucs)
{

	LVITEM lvm;
	lvm.mask = LVIF_STATE;
	lvm.iItem = index;
	lvm.stateMask = -1;
	lvm.state =  LVIS_SELECTED | LVIS_FOCUSED;

	lvm.iSubItem = 0;

	int old = GetCurSel();
	
	m_list.SetItem(&lvm);

	lvm.iItem = old;

	if(!bClearFoucs)
	{
		lvm.state = 0;
	}
	else
	{
		lvm.state = LVIS_FOCUSED ;
	//	lvm.state = 0 ;
	}

	m_list.SetItem(&lvm);

	lvm.iItem = index;
	lvm.state =  LVIS_SELECTED | LVIS_FOCUSED;
	m_list.SetItem(&lvm);

	m_list.EnsureVisible(index, TRUE);

}

void CDlgFavoriteEdit::OnAdd() 
{
	// TODO: Add your control notification handler code here
	POSITION pos = m_list.GetFirstSelectedItemPosition();
	while( pos )
	{
		int nItem = m_list.GetNextSelectedItem(pos);
		m_list.SetItemText(nItem, 1, IS_FAVORITE_MEMBER);
	}
}

void CDlgFavoriteEdit::OnRemove() 
{
	// TODO: Add your control notification handler code here
	POSITION pos = m_list.GetFirstSelectedItemPosition();
	while( pos )
	{
		int nItem = m_list.GetNextSelectedItem(pos);
		m_list.SetItemText(nItem, 1, NOT_FAVORITE_MEMBER);
	}
}

void CDlgFavoriteEdit::OnOK() 
{
	// TODO: Add extra validation here
	CDbParser* pdbParser = &((CMainFrame*)AfxGetMainWnd())->m_dbParser;
	int nCount = m_list.GetItemCount();
	int offset = 0;
	int nFav;
	int nBitTrue = 0x00000001 << (m_pSatTpMod->offset -1);
	char bufsz[256];
	char contx[16];
	int index_fav = pdbParser->GetProgNodeIndex(PKEYZ_FAV_GROUP, TRUE);
	for(int s = 0; s < nCount; s++)
	{
		m_list.GetItemText(s, 1, contx, 15);
		offset = m_list.GetItemData(s);
		pdbParser->GetNodeData(PROG_NODE, offset, index_fav, bufsz, 0, TRUE);
		//nFav = pdbParser->GetDataValue(bufsz);
		nFav = atoi(bufsz);
		if( strcmp(contx, NOT_FAVORITE_MEMBER) == 0)
		{
			nFav = nFav & (~nBitTrue);//对应的bit置0			
		}
		else if( strcmp(contx, IS_FAVORITE_MEMBER) == 0)
		{
			nFav = nFav | nBitTrue;//对应的bit置1			
		}
		else
		{
			ASSERT(FALSE);
		}
		sprintf(bufsz, "%u", nFav);
		pdbParser->SetNodeData(PROG_NODE, offset, index_fav, bufsz, TRUE);
		g_bModifyed = true;
	}
	CDialog::OnOK();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -