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

📄 swfedit_token.c

📁 Swfdec still is development software, but has also followed a rigid no-crashes-allowed policy. I b
💻 C
📖 第 1 页 / 共 2 页
字号:
static gintswfedit_token_get_n_columns (GtkTreeModel *tree_model){  SwfeditToken *token = SWFEDIT_TOKEN (tree_model);  REPORT;  return token->tokens->len;}static GTypeswfedit_token_get_column_type (GtkTreeModel *tree_model, gint index_){  REPORT;  switch (index_) {    case SWFEDIT_COLUMN_NAME:      return G_TYPE_STRING;    case SWFEDIT_COLUMN_VALUE_VISIBLE:      return G_TYPE_BOOLEAN;    case SWFEDIT_COLUMN_VALUE_EDITABLE:      return G_TYPE_BOOLEAN;    case SWFEDIT_COLUMN_VALUE:      return G_TYPE_STRING;    default:      break;  }  g_assert_not_reached ();  return G_TYPE_NONE;}static gbooleanswfedit_token_get_iter (GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreePath *path){  SwfeditToken *token = SWFEDIT_TOKEN (tree_model);  guint i = gtk_tree_path_get_indices (path)[0];  SwfeditTokenEntry *entry;    REPORT;  if (i > token->tokens->len)    return FALSE;  entry = &g_array_index (token->tokens, SwfeditTokenEntry, i);  if (gtk_tree_path_get_depth (path) > 1) {    GtkTreePath *new;    int j;    int *indices;    gboolean ret;    if (entry->type != SWFEDIT_TOKEN_OBJECT)      return FALSE;    new = gtk_tree_path_new ();    indices = gtk_tree_path_get_indices (path);    for (j = 1; j < gtk_tree_path_get_depth (path); j++) {      gtk_tree_path_append_index (new, indices[j]);    }    ret = swfedit_token_get_iter (GTK_TREE_MODEL (entry->value), iter, new);    gtk_tree_path_free (new);    return ret;  } else {    iter->stamp = 0; /* FIXME */    iter->user_data = token;    iter->user_data2 = GINT_TO_POINTER (i);    return TRUE;  }}static GtkTreePath *swfedit_token_get_path (GtkTreeModel *tree_model, GtkTreeIter *iter){  SwfeditToken *token = SWFEDIT_TOKEN (iter->user_data);  GtkTreePath *path = gtk_tree_path_new_from_indices (GPOINTER_TO_INT (iter->user_data2), -1);  REPORT;  while (token->parent) {    guint i;    SwfeditToken *parent = token->parent;    for (i = 0; i < parent->tokens->len; i++) {      SwfeditTokenEntry *entry = &g_array_index (parent->tokens, SwfeditTokenEntry, i);      if (entry->type != SWFEDIT_TOKEN_OBJECT)	continue;      if (entry->value == token)	break;    }    gtk_tree_path_prepend_index (path, i);    token = parent;  }  return path;}static void swfedit_token_get_value (GtkTreeModel *tree_model, GtkTreeIter *iter,    gint column, GValue *value){  SwfeditToken *token = SWFEDIT_TOKEN (iter->user_data);  SwfeditTokenEntry *entry = &g_array_index (token->tokens, SwfeditTokenEntry, GPOINTER_TO_INT (iter->user_data2));  REPORT;  switch (column) {    case SWFEDIT_COLUMN_NAME:      g_value_init (value, G_TYPE_STRING);      g_value_set_string (value, entry->name);      return;    case SWFEDIT_COLUMN_VALUE_VISIBLE:      g_value_init (value, G_TYPE_BOOLEAN);      g_value_set_boolean (value, converters[entry->type].to_string != NULL);      return;    case SWFEDIT_COLUMN_VALUE_EDITABLE:      g_value_init (value, G_TYPE_BOOLEAN);      g_value_set_boolean (value, entry->visible);      return;    case SWFEDIT_COLUMN_VALUE:      g_value_init (value, G_TYPE_STRING);      if (converters[entry->type].to_string)	g_value_take_string (value, converters[entry->type].to_string (entry->value));      return;    default:      break;  }  g_assert_not_reached ();}static gbooleanswfedit_token_iter_next (GtkTreeModel *tree_model, GtkTreeIter *iter){  SwfeditToken *token = SWFEDIT_TOKEN (iter->user_data);  REPORT;  if ((guint) GPOINTER_TO_INT (iter->user_data2) + 1 >= token->tokens->len)    return FALSE;  iter->user_data2++;  return TRUE;}static gbooleanswfedit_token_iter_children (GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent){  SwfeditToken *token;  SwfeditTokenEntry *entry;  REPORT;  if (parent) {    token = SWFEDIT_TOKEN (parent->user_data);    entry = &g_array_index (token->tokens, SwfeditTokenEntry, GPOINTER_TO_INT (parent->user_data2));    if (entry->type != SWFEDIT_TOKEN_OBJECT)      return FALSE;    token = entry->value;  } else {    token = SWFEDIT_TOKEN (tree_model);  }  if (token->tokens->len == 0)    return FALSE;  iter->stamp = 0; /* FIXME */  iter->user_data = token;  iter->user_data2 = GINT_TO_POINTER (0);  return TRUE;}static gbooleanswfedit_token_iter_has_child (GtkTreeModel *tree_model, GtkTreeIter *iter){  SwfeditToken *token = SWFEDIT_TOKEN (iter->user_data);  SwfeditTokenEntry *entry = &g_array_index (token->tokens, SwfeditTokenEntry, GPOINTER_TO_INT (iter->user_data2));  REPORT;  return entry->type == SWFEDIT_TOKEN_OBJECT && SWFEDIT_TOKEN (entry->value)->tokens->len > 0;}static gintswfedit_token_iter_n_children (GtkTreeModel *tree_model, GtkTreeIter *iter){  SwfeditToken *token = SWFEDIT_TOKEN (iter->user_data);  SwfeditTokenEntry *entry = &g_array_index (token->tokens, SwfeditTokenEntry, GPOINTER_TO_INT (iter->user_data2));  REPORT;  if (entry->type != SWFEDIT_TOKEN_OBJECT)    return 0;  token = entry->value;  return token->tokens->len;}static gbooleanswfedit_token_iter_nth_child (GtkTreeModel *tree_model, GtkTreeIter *iter,    GtkTreeIter *parent, gint n){  SwfeditToken *token;  SwfeditTokenEntry *entry;  REPORT;  if (parent) {    token = SWFEDIT_TOKEN (parent->user_data);    entry = &g_array_index (token->tokens, SwfeditTokenEntry, GPOINTER_TO_INT (parent->user_data2));    if (entry->type != SWFEDIT_TOKEN_OBJECT)      return FALSE;    token = entry->value;  } else {    token = SWFEDIT_TOKEN (tree_model);  }  if ((guint) n >= token->tokens->len)    return FALSE;  iter->stamp = 0; /* FIXME */  iter->user_data = token;  iter->user_data2 = GINT_TO_POINTER (n);  return TRUE;}static gbooleanswfedit_token_iter_parent (GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *child){  guint i;  SwfeditToken *token = SWFEDIT_TOKEN (child->user_data);  SwfeditToken *parent = token->parent;  REPORT;  if (parent == NULL)    return FALSE;  for (i = 0; i < parent->tokens->len; i++) {    SwfeditTokenEntry *entry = &g_array_index (parent->tokens, SwfeditTokenEntry, i);    if (entry->type != SWFEDIT_TOKEN_OBJECT)      continue;    if (entry->value == token)      break;  }  iter->stamp = 0; /* FIXME */  iter->user_data = parent;  iter->user_data2 = GINT_TO_POINTER (i);  return TRUE;}static voidswfedit_token_tree_model_init (GtkTreeModelIface *iface){  iface->get_flags = swfedit_token_get_flags;  iface->get_n_columns = swfedit_token_get_n_columns;  iface->get_column_type = swfedit_token_get_column_type;  iface->get_iter = swfedit_token_get_iter;  iface->get_path = swfedit_token_get_path;  iface->get_value = swfedit_token_get_value;  iface->iter_next = swfedit_token_iter_next;  iface->iter_children = swfedit_token_iter_children;  iface->iter_has_child = swfedit_token_iter_has_child;  iface->iter_n_children = swfedit_token_iter_n_children;  iface->iter_nth_child = swfedit_token_iter_nth_child;  iface->iter_parent = swfedit_token_iter_parent;}/*** SWFEDIT_TOKEN ***/G_DEFINE_TYPE_WITH_CODE (SwfeditToken, swfedit_token, G_TYPE_OBJECT,    G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL, swfedit_token_tree_model_init))static voidswfedit_token_dispose (GObject *object){  SwfeditToken *token = SWFEDIT_TOKEN (object);  guint i;  for (i = 0; i < token->tokens->len; i++) {    SwfeditTokenEntry *entry = &g_array_index (token->tokens, SwfeditTokenEntry, i);    g_free (entry->name);    if (converters[entry->type].free)      converters[entry->type].free (entry->value);  }  g_array_free (token->tokens, TRUE);  G_OBJECT_CLASS (swfedit_token_parent_class)->dispose (object);}static voidswfedit_token_class_init (SwfeditTokenClass *class){  GObjectClass *object_class = G_OBJECT_CLASS (class);  object_class->dispose = swfedit_token_dispose;}static voidswfedit_token_init (SwfeditToken *token){  token->tokens = g_array_new (FALSE, FALSE, sizeof (SwfeditTokenEntry));}SwfeditToken *swfedit_token_new (void){  SwfeditToken *token;  token = g_object_new (SWFEDIT_TYPE_TOKEN, NULL);  return token;}voidswfedit_token_add (SwfeditToken *token, const char *name, SwfeditTokenType type,     gpointer value){  SwfeditTokenEntry entry = { NULL, type, value, TRUE };  g_return_if_fail (SWFEDIT_IS_TOKEN (token));  g_return_if_fail (name != NULL);  g_return_if_fail (type < SWFEDIT_N_TOKENS);  g_assert (type != SWFEDIT_TOKEN_OBJECT || value != NULL);  entry.name = g_strdup (name);  g_array_append_val (token->tokens, entry);}voidswfedit_token_set (SwfeditToken *token, guint i, gpointer value){  SwfeditTokenClass *klass;  SwfeditTokenEntry *entry;  GtkTreePath *path;  SwfeditToken *model;  GtkTreeIter iter;  g_return_if_fail (SWFEDIT_IS_TOKEN (token));  g_return_if_fail (i < token->tokens->len);  entry = &g_array_index (token->tokens, SwfeditTokenEntry, i);  if (converters[entry->type].free != NULL)    converters[entry->type].free (entry->value);  entry->value = value;  klass = SWFEDIT_TOKEN_GET_CLASS (token);  if (klass->changed)    klass->changed (token, i);  model = token;  while (model->parent)    model = model->parent;  iter.user_data = token;  iter.user_data2 = GUINT_TO_POINTER (i);  path = gtk_tree_model_get_path (GTK_TREE_MODEL (model), &iter);  gtk_tree_model_row_changed (GTK_TREE_MODEL (model), path, &iter);  gtk_tree_path_free (path);}voidswfedit_token_set_iter (SwfeditToken *token, GtkTreeIter *iter, const char *value){  SwfeditTokenClass *klass;  GtkTreeModel *model;  SwfeditTokenEntry *entry;  guint i;  gpointer new;  GtkTreePath *path;  g_return_if_fail (SWFEDIT_IS_TOKEN (token));  g_return_if_fail (iter != NULL);  g_return_if_fail (value != NULL);  model = GTK_TREE_MODEL (token);  token = iter->user_data;  i = GPOINTER_TO_UINT (iter->user_data2);  entry = &g_array_index (token->tokens, SwfeditTokenEntry, i);  if (converters[entry->type].from_string == NULL)    return;  if (!converters[entry->type].from_string (value, &new))    return;  if (converters[entry->type].free != NULL)    converters[entry->type].free (entry->value);  entry->value = new;  klass = SWFEDIT_TOKEN_GET_CLASS (token);  if (klass->changed)    klass->changed (token, i);  path = gtk_tree_model_get_path (model, iter);  gtk_tree_model_row_changed (model, path, iter);  gtk_tree_path_free (path);}voidswfedit_token_set_visible (SwfeditToken *token, guint i, gboolean visible){  SwfeditTokenEntry *entry;  GtkTreeModel *model;  GtkTreePath *path;  GtkTreeIter iter;  g_return_if_fail (SWFEDIT_IS_TOKEN (token));  g_return_if_fail (i < token->tokens->len);  entry = &g_array_index (token->tokens, SwfeditTokenEntry, i);  if (entry->visible == visible)    return;  entry->visible = visible;  iter.stamp = 0; /* FIXME */  iter.user_data = token;  iter.user_data2 = GINT_TO_POINTER (i);  while (token->parent)     token = token->parent;  model = GTK_TREE_MODEL (token);  path = gtk_tree_model_get_path (model, &iter);  gtk_tree_model_row_changed (model, path, &iter);  gtk_tree_path_free (path);}

⌨️ 快捷键说明

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