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

📄 list.cpp

📁 多媒体电话记录程序
💻 CPP
字号:
// List.cpp: implementation of the CList class.
//
//////////////////////////////////////////////////////////////////////

#include "List.h"
#include "Pixmap.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CList::CList(CWidget* parent) : CWidget(parent)
{
	m_Seleted_row = -1;
	on_double_click_row = NULL;
	m_hHandle = Create();	
	gtk_signal_connect (GTK_OBJECT (m_hHandle), "destroy",
                      GTK_SIGNAL_FUNC (on_widget_destroy),
                      this);
	Show();
}

CList::~CList()
{

}

const gchar* CList::GetName(int nth)
{
	gchar* text;
	gtk_clist_get_text(GTK_CLIST(m_hHandle),nth, 1, &text);
	return text;
}

const gchar* CList::GetTel(int nth)
{
	gchar* text;
	gtk_clist_get_text(GTK_CLIST(m_hHandle),nth, 2, &text);
	return text;
}

void CList::SelectRow(int row)
{
	if(!m_hHandle)
		return ;
	m_Seleted_row = -1;
	gtk_clist_select_row(GTK_CLIST(m_hHandle), row, 0);
}

void CList::RemoveRow(int row)
{
	if(!m_hHandle)
		return ;
	Freeze();

	m_Seleted_row = -1;
	gtk_clist_remove(GTK_CLIST(m_hHandle), row);

	int count = RowCounts();
	char index[5];
	for(int i=row; i<count; i++){
		g_snprintf(index, 5, "%d", i+1);
		gtk_clist_set_text(GTK_CLIST(GetHandle()), i, 0, index);
	}

	Thaw();
}

void CList::Clear() 
{ 
	if(!m_hHandle)
		return ;
	m_Seleted_row = -1;
	Freeze();
	gtk_clist_clear(GTK_CLIST(m_hHandle)); 
	Thaw ();
}
	
static bool fresh_for_each(const CCallRecord& cr, gpointer user_data)
{
	CList* list = (CList*)user_data;		
	if(!list) 
		return false;
	gchar* s = g_strdup_printf("%d", list->RowCounts()+1);		
	const gchar* text[4];
	text[0] = s;
	text[1] = cr.GetName();
	text[2] = cr.GetTel();
	text[3] = cr.GetTime().time_string().c_str();
/*	if(!text[1] || !text[1][0])
		text[1] = _("<none>");
	int row = */
	gtk_clist_append(GTK_CLIST(list->GetHandle()), (gchar**)text);

/*
	GdkColor col1 = { 0, 0xeeee, 0xeeee, 0xffff };
	GdkColor col2 = { 0, 0xeeee, 0xffff, 0xeeee };
	GtkStyle* style1 = gtk_style_copy(gtk_widget_get_style(list->GetHandle()));
	GtkStyle* style2 = gtk_style_copy(style1);
	style1->base[GTK_STATE_NORMAL] = col1;
	style2->base[GTK_STATE_NORMAL] = col2;
	gtk_clist_set_cell_style (GTK_CLIST (list->GetHandle()), row, 0, style1);
	gtk_clist_set_cell_style (GTK_CLIST (list->GetHandle()), row, 1, style2);
	gtk_clist_set_cell_style (GTK_CLIST (list->GetHandle()), row, 2, style1);
	gtk_style_unref(style1);
	gtk_style_unref(style2);
*/
	g_free(s);	
	return true;
}

void CList::Fresh(CCallsInfo* cif)
{
	while(gtk_events_pending())
		gtk_main_iteration();

	Freeze();
	
	Clear();	
	cif->ForEach(fresh_for_each, this);			

	Thaw ();	
	SelectRow(0);
}

GtkWidget* CList::Create()
{
  GtkWidget *list; 
  GtkWidget *label7;
  GtkWidget *label8;
  GtkWidget *label9;
  GtkWidget *label10;
  
  list = gtk_clist_new (4);
  //gtk_container_set_border_width (GTK_CONTAINER (list), -2);
  gtk_clist_set_column_width (GTK_CLIST (list), 0, 20);
  gtk_clist_set_column_width (GTK_CLIST (list), 1, 75);
  gtk_clist_set_column_width (GTK_CLIST (list), 2, 125);
  gtk_clist_column_titles_show (GTK_CLIST (list));
  gtk_clist_set_row_height(GTK_CLIST (list), 20);

  gtk_clist_set_selection_mode (GTK_CLIST (list), GTK_SELECTION_BROWSE);
  //gtk_clist_set_shadow_type (GTK_CLIST (list), GTK_SHADOW_NONE);

  label7 = gtk_label_new (_("序号"));
  gtk_widget_show (label7);
  gtk_clist_set_column_widget (GTK_CLIST (list), 0, label7);

  label8 = gtk_label_new (_("姓名"));
  gtk_widget_show (label8);
  gtk_clist_set_column_widget (GTK_CLIST (list), 1, label8);

  label9 = gtk_label_new (_("电话"));
  gtk_widget_show (label9);
  gtk_clist_set_column_widget (GTK_CLIST (list), 2, label9);

  label10 = gtk_label_new (_("时间"));
  gtk_widget_show (label10);
  gtk_clist_set_column_widget (GTK_CLIST (list), 3, label10);

  gtk_clist_column_titles_passive(GTK_CLIST(list));
//  gtk_clist_set_column_resizeable(GTK_CLIST(list), 0, false);

 /*   gtk_button_set_relief(GTK_BUTTON(GTK_CLIST (list)->column[0].button), GTK_RELIEF_HALF);
   gtk_button_set_relief(GTK_BUTTON(GTK_CLIST (list)->column[1].button), GTK_RELIEF_HALF);
   gtk_button_set_relief(GTK_BUTTON(GTK_CLIST (list)->column[2].button), GTK_RELIEF_NONE);
*/
  for(int i=0; i<GTK_CLIST(list)->columns; i++)
		gtk_widget_set_usize(GTK_CLIST(list)->column[i].button, -2, 20);

  // signals
  gtk_signal_connect (GTK_OBJECT (list), "select_row",
                      GTK_SIGNAL_FUNC (on_clist_select_row),
                      this);

  return list;
}

void 
CList::set_double_click_row_func(GtkSignalFunc fun, gpointer user_data)
{
	SetData("on double click row user data", user_data);
	on_double_click_row = CListDoubleClickRowFunc(fun);
}

void
CList::on_clist_select_row             (GtkCList        *clist,
                                        gint             row,
                                        gint             column,
                                        GdkEvent        *event,
                                        gpointer         user_data)
{
	CList* list = (CList*)user_data;
	if(!list)
		return;

	if(gtk_clist_row_is_visible(GTK_CLIST(list->GetHandle()), row) != GTK_VISIBILITY_FULL)
		gtk_clist_moveto(GTK_CLIST(list->GetHandle()), row, -1, 0.5, 0.0);

	if(list->m_Seleted_row == row){ 
		if(list->on_double_click_row) {
			gpointer data = list->GetData("on double click row user data");
			list->on_double_click_row(list, row, data);	// 两次单击同一行 					
		}
	}
	
	list->m_Seleted_row = row;
}

⌨️ 快捷键说明

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