txt-scrolled demo

原创 2007年09月13日 15:58:00

gboolean GtkTreeModelForeachFunction(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data);

/*
 *   func: do initialization with scroll struct
 *  
 *   Input: scrolled_str: string needed to be displayed fully
 *             orig: the string you wanna to display when leave current row
 *             widget: treeview handle
 *             scrolled_num: max length of string allowed to be displayed

 *   return: void
 */
 void _init_scrolled(gchar* scrolled_str, gchar* orig, GtkWidget* scrolled_widget, int scrolled_num);
/*
 *  func: permit to change scrolled string length
 *   
 *  Input: num: max length of string allower
 *  Return: void
 */

 void _reset_scrolled_num( int scrolled_num);
/*
 *  func: According to the display requirement, return current string need to be displayed
 *   
 *  Input: void
 *  Return: char*, the dest string,
 */
 gchar* get_scrolled_str();
/*
 *  func:  scroll function called by timer
 *   
 *  Input: void
 *  Return: boolean: TRUE:keep scroll, FALSE: stop it
 */
 gboolean _auto_scrolled();
/*
 *  func:  deconstruct, when you wanna to end scroll-operation, call this function to stop it.
 *   
 *  Input: void
 *  Return: void
 */
 void _deinit_scrolled();
/*
 *  func:  check whether all of the param has been set.
 *   
 *  Input: void
 *  Return: boolean: TRUE:yes, FALSE: no can not scrolled
 */
 gboolean _scrolled_valid();
/*
 *  func:  when focus out of the current row, call this function to set orignal string
 *   
 *  Input: void
 *  Return: void
 */
 void  _scrolled_show_fixed_str();
enum{
 COL_PAD1 = 0,
 COL_NAME,
 COL_WEIGHT,
 COL_WEIGHT_SET,
 COL_AGE,
 COL_IS_NAME_BOLD,
 //COL_PIC,
 NUM_COLS,
};

static gchar  _scrolled_str[64];
static gchar _orig_str[64];
static gint      _scrolled_index;
static gint _scrolled_iteration;  // 1: ++,-1: --, 0: do nothing
static GtkWidget* _scrolled_widget;
static gint _scrolled_num;   //the number of characters scrolled
static gint _scrolled_timer;

typedef struct _Widget_Scroll{
 void (*init_scrolled)(gchar* scrolled_str, gchar* orig, GtkWidget* scrolled_widget, int scrolled_num);
 gboolean  (*scrolled_valid)();
 void (*reset_scroll_num) ( int scrolled_num);
 gchar* (*get_scroll_str)();   
 gboolean  (*scroll_auto)();
 void  (*deinit_scrolled)();
 void  (*show_orig_str) ();
} TextScrollStruct;


TextScrollStruct slScrollTreeView = { _init_scrolled, _scrolled_valid, _reset_scrolled_num, get_scrolled_str,_auto_scrolled,

_deinit_scrolled, _scrolled_show_fixed_str};

void  _scrolled_set_txt( gchar* txt)
{
 GtkTreeSelection* select;
 GtkTreeIter iter;
 gchar* scroll_str;

 select = gtk_tree_view_get_selection( GTK_TREE_VIEW(_scrolled_widget));
 if( select && gtk_tree_selection_get_selected( select, NULL,  &iter))
 {
  gtk_list_store_set( GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(_scrolled_widget))), &iter,

COL_NAME, txt, -1 );
 }
}

void  _scrolled_show_fixed_str()
{
 if( FALSE == _scrolled_valid() )
 {
  _deinit_scrolled();
  return;
 }
 _scrolled_set_txt(_orig_str);
 
}

void _init_scrolled(gchar* scrolled_str,  gchar* orig, GtkWidget* widget, int scrolled_num)
{
 
 if(scrolled_str)
 {
  int cl = 0;
  g_print( "src_str=%s/n", scrolled_str);
  //cl = strlen(scrolled_str)>=sizeof(_scrolled_str) ? sizeof(_scrolled_str)-1  : strlen(scrolled_str);
  //strncpy(_scrolled_str, scrolled_str, cl);
  strcpy(_scrolled_str, scrolled_str);
  g_print( "dest_src=%s%d/n", _scrolled_str,cl+1);
 }
 if(orig)
  strncpy(_orig_str, orig, strlen(orig)>=sizeof(_orig_str) ? sizeof(_orig_str)-1  : strlen(orig));
 _scrolled_widget = widget;
 _scrolled_num = scrolled_num > 0 ? scrolled_num : 1;
 _scrolled_iteration = 1;
 _scrolled_index = 0;
 if(_scrolled_timer)
 { 
  g_source_remove(_scrolled_timer);
 }
 _scrolled_timer = g_timeout_add( 500, (GtkFunction) _auto_scrolled, NULL );
}
void _deinit_scrolled()
{
 g_print( "_deinit_scrolled=/n");
 _scrolled_set_txt(_orig_str);
 if(_scrolled_timer)
 { 
  g_source_remove(_scrolled_timer);
  _scrolled_timer = 0;
 }
 _scrolled_str[0] = 0;
 _orig_str[0] = 0;
 _scrolled_index = 0;
 _scrolled_iteration = 0;
 _scrolled_num = 0;
 _scrolled_widget = NULL;
}
void _reset_scrolled_num( int scrolled_num)
{
 _scrolled_num = scrolled_num > 0 ? scrolled_num : 1;
}

gchar* get_scrolled_str()
{
 static gchar return_str[64];
 gint  src_str_len =0;

 if( 0 == _scrolled_str[0] )
  return NULL;
 src_str_len = strlen(_scrolled_str);

 if(src_str_len <= _scrolled_num )
  return _scrolled_str;
 
 if( _scrolled_index >= strlen(_scrolled_str) -_scrolled_num )
  _scrolled_iteration = -1;
 if( _scrolled_index <= 0 )
  _scrolled_iteration = 1;

 _scrolled_index += _scrolled_iteration;
 strncpy(return_str, _scrolled_str+_scrolled_index, _scrolled_num);
 return_str[_scrolled_num] = 0;
 return return_str;
}

gboolean _scrolled_valid()
{
 if( NULL ==_scrolled_widget )
 {
  return FALSE;
 }
 if( 0 == _scrolled_timer )
 {
  return FALSE;
 }
 return TRUE;
}

 

gboolean _auto_scrolled()
{
 if( FALSE == _scrolled_valid() )
 {
  _deinit_scrolled();
  return FALSE;
 }
 _scrolled_set_txt( slScrollTreeView.get_scroll_str());
 return TRUE;
}
 
// call in when select-change-event happened.
slScrollTreeView.init_scrolled(  name, "origa..", user, 5 );

//called when unselected( before focus out)
slScrollTreeView.show_orig_str();
slScrollTreeView.deinit_scrolled();
 

JAVA多线程demo

在 Java 程序中使用多线程要比在 C 或 C++ 中容易得多,这是因为 Java 编程语言提供了语言级的支持。本文通过简单的编程示例来说明 Java 程序中的多线程是多么直观。读完本文以后,用户应...
  • wanghuidhu
  • wanghuidhu
  • 2010年08月06日 11:11
  • 6149

JQuery AJAX Demo

由于浏览器安全方面的限制,大多数 "Ajax" 请求遵守同源策略;请求无法从不同的域、子域或协议成功地取回数据。如果在不同域下访问就会出现提示: No 'Access-Control-Allow-O...
  • messageloop3
  • messageloop3
  • 2014年08月08日 15:28
  • 5156

文件上传与下载Demo

上传、下载、列表展示,删除操作servletpublic class FileServlst extends HttpServlet{ @Override protected void...
  • u010512964
  • u010512964
  • 2017年06月01日 11:14
  • 670

图片demo

@implementation IGThermalSupport + (NSData *) imageToThermalData:(UIImage*)image { NSLog(@"zzzzz...
  • b413845843
  • b413845843
  • 2016年01月25日 15:06
  • 231

jqGrid DEMO

http://www.guriddo.net/demo/bootstrap/
  • white__cat
  • white__cat
  • 2017年02月17日 11:07
  • 611

使用maven创建web项目demo

对于初学者而言,第一次使用maven最大的感慨就是:很好的一款项目构建工具,管理jar包太方便了,不用需要什么jar包亲自去官网上下载,只要配置好私服和本地仓库,需要什么jar包直接引入,maven自...
  • prowo
  • prowo
  • 2016年03月20日 11:09
  • 1412

shell脚本基础demo

这里只是一些简单的shell脚本的基础例子,适合入门的朋友练练手 #! /bin/sh #测试echo、位置变量 ls echo hello echo "\$* is $*" echo "\$@ i...
  • u012886800
  • u012886800
  • 2017年01月05日 18:49
  • 754

一个demo教你如何一分钟学会用R

R语言其实是一种计算、作图的统计编程类的解释型脚本语言,常用于金融和统计领域。大多数人使用R就是因为它的统计功能,R的内部实现了很多经典的or时髦的统计技术。 与Matla区别真不大,应用领域重点不...
  • zhouhaiqing0905
  • zhouhaiqing0905
  • 2014年12月13日 16:31
  • 1455

java多线程简单demo

1.没有加上同步机制 import java.util.ArrayList; import java.util.List; import com.yingze.thread.ThreadDemo1....
  • u012954390
  • u012954390
  • 2016年05月03日 08:58
  • 2820

html列表demo(亲测)一看就懂

无序列表 nihao nihao nihao nihao nihao nihao 有序列表 oloooooooool oloooooooool oloooooo...
  • ITzhongzi
  • ITzhongzi
  • 2016年10月25日 11:06
  • 657
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:txt-scrolled demo
举报原因:
原因补充:

(最多只允许输入30个字)