当前位置: 首页 > news >正文

大理市政府建设办网站/seo关键词的优化技巧

大理市政府建设办网站,seo关键词的优化技巧,怎么样开始做网站,网站推广资讯转自:http://blog.csdn.net/absurd Gtk的TextView是一个功能强大的编辑控件,也是GTK中最为复杂的控件之一。它基于MVC模型设计,GtkTextView是处理用户界面的视图部分,GtkTextBuffer是负责缓冲区管理的模型部分。它除实现了普通编辑…

转自:http://blog.csdn.net/absurd

 

GtkTextView是一个功能强大的编辑控件,也是GTK+中最为复杂的控件之一。它基于MVC模型设计,GtkTextView是处理用户界面的视图部分,GtkTextBuffer是负责缓冲区管理的模型部分。它除实现了普通编辑控件的功能之外,还支持HTML中的一些基本TAG和图文混排功能,使用也很方便。

 

唯一不爽的就是它不支持undo/redo操作,让人挺郁闷的,偏偏SPEC又要求这个功能。一直没有时间管它,最近进入完善阶段了,今天花了点时间给它加了这个功能。在网上找了一下,发现最新的GTK+也没有提供这个功能,看来GTK官方是没有打算去做了,这次又要自己动手了。

 

至于undo/redo的实现,我倒是有类似的编程经验,其实现虽然不算复杂,不过也要花不少时间。呵,现在忙得很,可没有时间去玩这个,最好是能从其它编辑中移植过来。在网上找了一下,发现GtkSourceView支持undo/redo功能,马上下了一个源码包。

 

解开之后,浏览了一下里面的代码,运气不错:它的undo/redo功能实现得非常独立,只要把gtksourceundomanager.cgtksourceundomanager.hgtksourceview-marshal.h拿过来就行了。

 

剩下的就是要与GtkTextView/GtkTextView结合起来,本来想参考GtkSourceView/GtkSourceBuffer里面做法,不过发现要修改不少地方。我当然不希望修改太多地方,那样可能会引入一些其它BUG。经过几次试验,终于找到一种不修改GtkTextView/GtkTextView的方法。其代码如下:

#include "gtksourceundomanager.h" 
#define GET_UNDO_MANAGER(buffer) (GtkSourceUndoManager*)g_object_get_data(G_OBJECT(buffer), "undo_manager") 

static void undo_cb (GtkWidget   *menuitem, GtkTextView* view) 

    GtkTextBuffer *buffer = NULL; 
    GtkSourceUndoManager* undo_manager = NULL; 

    g_return_if_fail (GTK_IS_TEXT_VIEW (view)); 
    
    buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); 
    undo_manager = GET_UNDO_MANAGER(buffer); 
    
    if(gtk_source_undo_manager_can_undo(undo_manager)) 
    { 
        gtk_source_undo_manager_undo(undo_manager); 
        gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW (view), 
                            gtk_text_buffer_get_insert (buffer)); 
    } 


static void redo_cb (GtkWidget   *menuitem, GtkTextView* view) 

    GtkTextBuffer *buffer = NULL; 
    GtkSourceUndoManager* undo_manager = NULL; 

    g_return_if_fail (GTK_IS_TEXT_VIEW (view)); 

    buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); 
    undo_manager = GET_UNDO_MANAGER(buffer); 

    if(gtk_source_undo_manager_can_redo(undo_manager)) 
    { 
        gtk_source_undo_manager_redo(undo_manager); 
        gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW (view), 
                            gtk_text_buffer_get_insert (buffer)); 
    } 


static void on_populate_popup (GtkTextView* view, GtkMenu *menu, GtkSourceUndoManager* undo_manager) 

    GtkWidget* menu_item = NULL; 

    menu_item = gtk_menu_item_new (); 
    gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item); 
    gtk_widget_show (menu_item); 

    /* create redo menu_item. */ 
    menu_item = gtk_image_menu_item_new_from_stock ("gtk-redo", NULL); 
    g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (redo_cb), view); 
    gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item); 
    gtk_widget_set_sensitive (menu_item, gtk_source_undo_manager_can_redo(undo_manager)); 

    gtk_widget_show (menu_item); 

    /* create undo menu_item. */ 
    menu_item = gtk_image_menu_item_new_from_stock ("gtk-undo", NULL); 
    g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (undo_cb), view); 
    gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item); 
    gtk_widget_set_sensitive (menu_item, gtk_source_undo_manager_can_undo(undo_manager)); 

    gtk_widget_show (menu_item); 

    return


gboolean gtk_text_view_decorate_undo_redo(GtkTextView* view) 

    GtkTextBuffer *buffer = NULL; 
    GtkSourceUndoManager* undo_manager = NULL; 

    g_return_val_if_fail(GTK_IS_TEXT_VIEW(view), FALSE); 

    buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); 

    if((undo_manager = gtk_source_undo_manager_new(GTK_TEXT_BUFFER (buffer))) != NULL) 
    { 
        g_object_set_data_full(G_OBJECT(buffer), "undo_manager", undo_manager, (GDestroyNotify)g_object_unref); 
        g_signal_connect(G_OBJECT(view), "populate_popup", 
            G_CALLBACK(on_populate_popup), undo_manager); 
    } 

    return undo_manager != NULL; 


 

这里采用类似装饰模式的方法动态的给GtkTextView增加undo/redo功能。通过注册GtkTextViewpopulate_popup事件,向右键弹出菜单中增加undoredo菜单项,然后在菜单的事件处理函数中调用undo_manager的函数。

 

之所以这么简单,完全得益于GtkTextViewGtkSourceView精良的设计。

 

http://www.lbrq.cn/news/943147.html

相关文章:

  • 郴州网站建设公司/网址提交入口
  • 设计装修网站大全/一个完整的营销策划案范文
  • 零基础jsp网站开发/搜索引擎优化核心
  • 专做脚本的网站/seo赚钱方式
  • 网站蓝色/百度爱采购官网首页
  • js与asp.net做的网站/南昌seo报价
  • 吉安做网站的公司/创建网站的软件
  • 网站建设精英/培训学校加盟费用
  • 网站如何在百度上做推广/网站设计公司
  • 一个网站建设大概需要多少费用/推广平台app
  • 泰安城乡建设委员会的网站/买了500元黑科技引流靠谱吗
  • 武汉做网站 古凡/网络营销包括哪些
  • 黑龙江门户网站建设/seo排名培训
  • SEO案例网站建设公司/游戏推广一个月能拿多少钱
  • 做任务网站建设/关键词排名代做
  • 彩票网站怎么做系统/今日头条新闻10条简短
  • 南宁市兴宁区建设局网站/怎么申请网站
  • 做彩网站/福建百度开户
  • 网站建设的系统简介/夫唯老师seo
  • 行业协会网站模板/关键词排名点击软件怎样
  • 做建筑看那些网站/seo谷歌外贸推广
  • 做网站常用的jquery/网络营销的特征和功能
  • wordpress二次开发赚钱/河南网站优化公司哪家好
  • 网站建设有什么优点/搜索引擎优化排名优化培训
  • 长治市郊区住房建设局网站/windows优化大师有哪些功能
  • 做网站好公司哪家好/互联网优化
  • 苏州做学校网站的/淘宝运营培训机构
  • 建立局域网网站/关键词百度云
  • 泰安网站建设哪家专业/怎么做好网络推广销售
  • 西安网站制作计划/网奇seo赚钱培训
  • CT、IT、ICT 和 DICT区别
  • 【橘子分布式】gRPC(番外篇-监听流)
  • Linux的生态与软件安装
  • 深度解析 noisereduce:开源音频降噪库实践
  • NodeJS搭建SSE接口服务
  • spring boot整合mybatis