📄 list.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 + -