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

📄 ptk-utils.c

📁 台湾人开发的Linux下的文件管理器
💻 C
字号:
/**  C Implementation: ptkutils** Description:*** Author: Hong Jen Yee (PCMan) <pcman.tw (AT) gmail.com>, (C) 2006** Copyright: See COPYING file that comes with this distribution**/#include "ptk-utils.h"#include <glib.h>#include <glib/gi18n.h>GtkWidget* ptk_menu_new_from_data( PtkMenuItemEntry* entries,                                   gpointer cb_data,                                   GtkAccelGroup* accel_group ){  GtkWidget* menu;  menu = gtk_menu_new();  ptk_menu_add_items_from_data( menu, entries, cb_data, accel_group );  return menu;}void ptk_menu_add_items_from_data( GtkWidget* menu,                                   PtkMenuItemEntry* entries,                                   gpointer cb_data,                                   GtkAccelGroup* accel_group ){  PtkMenuItemEntry* ent;  GtkWidget* menu_item;  GtkWidget* sub_menu;  GtkWidget* image;  GSList* radio_group = NULL;  const char* signal;  for( ent = entries; ; ++ent )  {    if( G_LIKELY( ent->label ) )    {      /* Stock item */      signal = "activate";      if( G_UNLIKELY( PTK_IS_STOCK_ITEM(ent) ) )  {        menu_item = gtk_image_menu_item_new_from_stock( ent->label, accel_group );      }      else if( G_LIKELY(ent->stock_icon) )  {        if( G_LIKELY( ent->stock_icon > (char *)2 ) )  {          menu_item = gtk_image_menu_item_new_with_mnemonic(_(ent->label));          image = gtk_image_new_from_stock( ent->stock_icon, GTK_ICON_SIZE_MENU );          gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM(menu_item), image );        }        else if( G_UNLIKELY( PTK_IS_CHECK_MENU_ITEM(ent) ) )  {          menu_item = gtk_check_menu_item_new_with_mnemonic(_(ent->label));          signal = "toggled";        }        else if( G_UNLIKELY( PTK_IS_RADIO_MENU_ITEM(ent) ) )  {          menu_item = gtk_radio_menu_item_new_with_mnemonic( radio_group, _(ent->label) );          if( G_LIKELY( PTK_IS_RADIO_MENU_ITEM( (ent + 1) ) ) )            radio_group = gtk_radio_menu_item_get_group( GTK_RADIO_MENU_ITEM(menu_item) );          else            radio_group = NULL;          signal = "toggled";        }      }      else  {        menu_item = gtk_menu_item_new_with_mnemonic(_(ent->label));      }      if( G_LIKELY(accel_group) && ent->key ) {        gtk_widget_add_accelerator (menu_item, "activate", accel_group,                                    ent->key, ent->mod, GTK_ACCEL_VISIBLE);      }      if( G_LIKELY(ent->callback) )  { /* Callback */        g_signal_connect( menu_item, signal, ent->callback, cb_data);      }      if( G_UNLIKELY( ent->sub_menu ) )  { /* Sub menu */        sub_menu = ptk_menu_new_from_data( ent->sub_menu, cb_data, accel_group );        gtk_menu_item_set_submenu( GTK_MENU_ITEM(menu_item), sub_menu );      }    }    else    {      if( ! ent->stock_icon ) /* End of menu */        break;      menu_item = gtk_separator_menu_item_new();    }    gtk_menu_shell_append ( GTK_MENU_SHELL(menu), menu_item );    if( G_UNLIKELY(ent->ret) ) {/* Return */      *ent->ret = menu_item;      ent->ret = NULL;    }  }}GtkWidget* ptk_toolbar_add_items_from_data( GtkWidget* toolbar,                                            PtkToolItemEntry* entries,                                            gpointer cb_data,                                            GtkTooltips* tooltips ){  GtkWidget* btn;  PtkToolItemEntry* ent;  GtkWidget* image;  GtkWidget* menu;  GtkIconSize icon_size = gtk_toolbar_get_icon_size (GTK_TOOLBAR (toolbar));  GSList* radio_group = NULL;  for( ent = entries; ; ++ent )  {    /* Normal tool item */    if( G_LIKELY( ent->stock_icon || ent->tooltip || ent->label ) )    {      /* Stock item */      if( G_LIKELY(ent->stock_icon) )        image = gtk_image_new_from_stock( ent->stock_icon, icon_size );      else        image = NULL;      if( G_LIKELY( ! ent->menu ) )  { /* Normal button */        if( G_UNLIKELY( PTK_IS_STOCK_ITEM(ent) ) )          btn = GTK_WIDGET(gtk_tool_button_new_from_stock ( ent->label ));        else          btn = GTK_WIDGET(gtk_tool_button_new ( image, _(ent->label) ));      }      else if( G_UNLIKELY( PTK_IS_CHECK_TOOL_ITEM(ent) ) )  {        if( G_UNLIKELY( PTK_IS_STOCK_ITEM(ent) ) )          btn = GTK_WIDGET(gtk_toggle_tool_button_new_from_stock(ent->label));        else {          btn = GTK_WIDGET(gtk_toggle_tool_button_new ());          gtk_tool_button_set_icon_widget( GTK_TOOL_BUTTON(btn), image );          gtk_tool_button_set_label(GTK_TOOL_BUTTON(btn), _(ent->label));        }      }      else if( G_UNLIKELY( PTK_IS_RADIO_TOOL_ITEM(ent) ) )  {        if( G_UNLIKELY( PTK_IS_STOCK_ITEM(ent) ) )          btn = GTK_WIDGET(gtk_radio_tool_button_new_from_stock( radio_group, ent->label ));        else {          btn = GTK_WIDGET(gtk_radio_tool_button_new( radio_group ));          if( G_LIKELY( PTK_IS_RADIO_TOOL_ITEM( (ent + 1) ) ) )            radio_group = gtk_radio_tool_button_get_group( GTK_RADIO_TOOL_BUTTON(btn) );          else            radio_group = NULL;          gtk_tool_button_set_icon_widget( GTK_TOOL_BUTTON(btn), image );          gtk_tool_button_set_label(GTK_TOOL_BUTTON(btn), _(ent->label));        }      }      else if( ent->menu )  {        if( G_UNLIKELY( PTK_IS_STOCK_ITEM(ent) ) )          btn = GTK_WIDGET(gtk_menu_tool_button_new_from_stock ( ent->label ));        else {          btn = GTK_WIDGET(gtk_menu_tool_button_new ( image, _(ent->label) ));          if( G_LIKELY( ent->menu ) )  { /* Sub menu */            menu = ptk_menu_new_from_data( ent->menu, cb_data, NULL );            gtk_menu_tool_button_set_menu( GTK_MENU_TOOL_BUTTON(btn), menu );          }        }      }      if( G_LIKELY(ent->callback) )  { /* Callback */        if( G_LIKELY( ent->menu == NULL ) )          g_signal_connect( btn, "clicked", ent->callback, cb_data);        else          g_signal_connect( btn, "toggled", ent->callback, cb_data);      }      if( G_LIKELY(ent->tooltip) )        gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (btn), tooltips, _(ent->tooltip), NULL);    }    else    {      if( ! PTK_IS_SEPARATOR_TOOL_ITEM(ent) ) /* End of menu */        break;      btn = (GtkWidget*)gtk_separator_tool_item_new ();    }    gtk_toolbar_insert ( GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(btn), -1 );    if( G_UNLIKELY(ent->ret) ) {/* Return */      *ent->ret = btn;      ent->ret = NULL;    }  }  return NULL;}void ptk_show_error(GtkWindow* parent, const char* message ){  GtkWidget* dlg = gtk_message_dialog_new(parent, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, message);  gtk_dialog_run( GTK_DIALOG(dlg) );  gtk_widget_destroy( dlg );}

⌨️ 快捷键说明

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