Esempio n. 1
0
static GtkListStore *
get_enum_model_for_combo (PangoAttrType type)
{
  static GtkListStore *style_store = NULL,
      *weight_store = NULL, *variant_store = NULL,
      *stretch_store = NULL, *gravity_store = NULL,
      *gravity_hint_store = NULL, *default_store = NULL;

  switch (type)
    {
      case PANGO_ATTR_STYLE:
        if (!style_store)
          style_store =
              glade_utils_liststore_from_enum_type (PANGO_TYPE_STYLE, TRUE);
        return style_store;

      case PANGO_ATTR_WEIGHT:
        if (!weight_store)
          weight_store =
              glade_utils_liststore_from_enum_type (PANGO_TYPE_WEIGHT, TRUE);
        return weight_store;

      case PANGO_ATTR_VARIANT:
        if (!variant_store)
          variant_store =
              glade_utils_liststore_from_enum_type (PANGO_TYPE_VARIANT, TRUE);
        return variant_store;

      case PANGO_ATTR_STRETCH:
        if (!stretch_store)
          stretch_store =
              glade_utils_liststore_from_enum_type (PANGO_TYPE_STRETCH, TRUE);
        return stretch_store;

      case PANGO_ATTR_GRAVITY:
        if (!gravity_store)
          gravity_store =
              glade_utils_liststore_from_enum_type (PANGO_TYPE_GRAVITY, TRUE);
        return gravity_store;

      case PANGO_ATTR_GRAVITY_HINT:
        if (!gravity_hint_store)
          gravity_hint_store =
              glade_utils_liststore_from_enum_type (PANGO_TYPE_GRAVITY_HINT,
                                                    TRUE);
        return gravity_hint_store;

      default:
        if (!default_store)
          default_store = gtk_list_store_new (1, G_TYPE_STRING);
        return default_store;
    }
}
Esempio n. 2
0
static GtkTreeViewColumn *
eprop_model_generate_column (GladeEditorProperty * eprop,
                             gint colnum, GladeModelData * data)
{
  GtkTreeViewColumn *column = gtk_tree_view_column_new ();
  GtkCellRenderer *renderer = NULL;
  GtkAdjustment *adjustment;
  GtkListStore *store;
  GType type = G_TYPE_INVALID;

  gtk_tree_view_column_set_title (column, data->name);
  gtk_tree_view_column_set_resizable (column, TRUE);
  gtk_tree_view_column_set_expand (column, TRUE);

  type = G_VALUE_TYPE (&data->value);

  /* Support enum and flag types, and a hardcoded list of fundamental types */
  if (type == G_TYPE_CHAR ||
      type == G_TYPE_UCHAR || type == G_TYPE_STRING || type == GDK_TYPE_PIXBUF)
    {
      /* Text renderer */
      renderer = gtk_cell_renderer_text_new ();

      g_object_set (G_OBJECT (renderer),
                    "editable", TRUE,
                    "ellipsize", PANGO_ELLIPSIZE_END, "width", 90, NULL);

      gtk_tree_view_column_pack_start (column, renderer, FALSE);
      gtk_tree_view_column_set_attributes (column, renderer,
                                           "text", NUM_COLUMNS + colnum, NULL);

      if (type == G_TYPE_CHAR || type == G_TYPE_UCHAR)
        {
          /* XXX restrict to 1 char !! */
        }

      g_signal_connect (G_OBJECT (renderer), "edited",
                        G_CALLBACK (value_text_edited), eprop);

      /* Trigger i18n dialog from here */
      if (type == G_TYPE_STRING)
        {
          GtkCellRenderer *icon_renderer = glade_cell_renderer_icon_new ();

          g_object_set (G_OBJECT (icon_renderer),
                        "activatable", TRUE,
                        "icon-name", "gtk-edit",
                        NULL);

          gtk_tree_view_column_pack_start (column, icon_renderer, FALSE);

          g_object_set_data (G_OBJECT (icon_renderer), "column-number",
                             GINT_TO_POINTER (colnum));
          g_signal_connect (G_OBJECT (icon_renderer), "activate",
                            G_CALLBACK (value_i18n_activate), eprop);
        }

    }
  else if (type == G_TYPE_BOOLEAN)
    {
      /* Toggle renderer */
      renderer = gtk_cell_renderer_toggle_new ();
      g_object_set (G_OBJECT (renderer), "activatable", TRUE, NULL);
      gtk_tree_view_column_pack_start (column, renderer, FALSE);
      gtk_tree_view_column_set_attributes (column, renderer,
                                           "active", NUM_COLUMNS + colnum,
                                           NULL);
      g_signal_connect (G_OBJECT (renderer), "toggled",
                        G_CALLBACK (value_toggled), eprop);
    }
  /* Check renderer */
  else if (type == G_TYPE_INT ||
           type == G_TYPE_UINT ||
           type == G_TYPE_LONG ||
           type == G_TYPE_ULONG ||
           type == G_TYPE_INT64 ||
           type == G_TYPE_UINT64 ||
           type == G_TYPE_FLOAT || type == G_TYPE_DOUBLE)
    {
      /* Spin renderer */
      renderer = gtk_cell_renderer_spin_new ();
      adjustment =
          (GtkAdjustment *) gtk_adjustment_new (0, -G_MAXDOUBLE, G_MAXDOUBLE,
                                                100, 100, 0);
      g_object_set (G_OBJECT (renderer), "editable", TRUE, "adjustment",
                    adjustment, NULL);

      gtk_tree_view_column_pack_start (column, renderer, TRUE);
      gtk_tree_view_column_set_attributes (column, renderer,
                                           "text", NUM_COLUMNS + colnum, NULL);

      if (type == G_TYPE_FLOAT || type == G_TYPE_DOUBLE)
        g_object_set (G_OBJECT (renderer), "digits", 2, NULL);

      g_signal_connect (G_OBJECT (renderer), "edited",
                        G_CALLBACK (value_text_edited), eprop);

    }
  else if (G_TYPE_IS_ENUM (type))
    {
      /* Combo renderer */
      renderer = gtk_cell_renderer_combo_new ();
      store = glade_utils_liststore_from_enum_type (type, FALSE);
      g_object_set (G_OBJECT (renderer),
                    "editable", TRUE,
                    "text-column", 0, "has-entry", FALSE, "model", store, NULL);
      gtk_tree_view_column_pack_start (column, renderer, TRUE);
      gtk_tree_view_column_set_attributes (column, renderer,
                                           "text", NUM_COLUMNS + colnum, NULL);


      gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (column),
                                          renderer,
                                          (GtkCellLayoutDataFunc)
                                          enum_flags_format_cell_data, NULL,
                                          NULL);

      g_signal_connect (G_OBJECT (renderer), "edited",
                        G_CALLBACK (value_text_edited), eprop);

    }
  else if (G_TYPE_IS_FLAGS (type))
    {
      /* Export a flags dialog from glade-editor-property... */
      renderer = gtk_cell_renderer_text_new ();
      g_object_set (G_OBJECT (renderer), "editable", FALSE, NULL);
      gtk_tree_view_column_pack_start (column, renderer, FALSE);
      gtk_tree_view_column_set_attributes (column, renderer,
                                           "text", NUM_COLUMNS + colnum, NULL);

    }
  else                          /* All uneditable types at this point (currently we dont do object data here, TODO) */
    {
      /* text renderer and object dialog (or raw text for pixbuf) */
      renderer = gtk_cell_renderer_text_new ();
      g_object_set (G_OBJECT (renderer), "editable", FALSE, NULL);
      gtk_tree_view_column_pack_start (column, renderer, FALSE);
    }

  g_signal_connect (G_OBJECT (renderer), "editing-started",
                    G_CALLBACK (data_editing_started), eprop);

  g_signal_connect (G_OBJECT (renderer), "editing-canceled",
                    G_CALLBACK (data_editing_canceled), eprop);

  g_object_set_data (G_OBJECT (renderer), "column-number",
                     GINT_TO_POINTER (colnum));
  g_object_set_data_full (G_OBJECT (column), "column-type",
                          g_memdup (&type, sizeof (GType)), g_free);

  return column;
}
Esempio n. 3
0
static GtkTreeView *
build_view (GladeEditorProperty * eprop)
{
  GladeEPropIconSources *eprop_sources = GLADE_EPROP_ICON_SOURCES (eprop);
  static GtkListStore *direction_store = NULL, *size_store =
      NULL, *state_store = NULL;
  GtkTreeView *view = (GtkTreeView *) gtk_tree_view_new ();
  GtkCellRenderer *renderer;
  GtkTreeViewColumn *column;

  if (!direction_store)
    {
      direction_store =
          glade_utils_liststore_from_enum_type (GTK_TYPE_TEXT_DIRECTION, FALSE);
      size_store =
          glade_utils_liststore_from_enum_type (GTK_TYPE_ICON_SIZE, FALSE);
      state_store =
          glade_utils_liststore_from_enum_type (GTK_TYPE_STATE_TYPE, FALSE);
    }

  /* Filename / icon name column/renderer */
  renderer = gtk_cell_renderer_text_new ();
  g_object_set (G_OBJECT (renderer), "editable", FALSE, NULL);
  g_signal_connect (G_OBJECT (renderer), "edited",
                    G_CALLBACK (value_filename_edited), eprop);

  eprop_sources->filename_column =
      gtk_tree_view_column_new_with_attributes (_("File Name"), renderer,
                                                "text", COLUMN_TEXT,
                                                "weight", COLUMN_TEXT_WEIGHT,
                                                "editable",
                                                COLUMN_TEXT_EDITABLE, NULL);
  gtk_tree_view_column_set_expand (eprop_sources->filename_column, TRUE);
  gtk_tree_view_append_column (GTK_TREE_VIEW (view),
                               eprop_sources->filename_column);

  g_object_set_data (G_OBJECT (eprop_sources->filename_column), "column-id",
                     GINT_TO_POINTER (COLUMN_TEXT));

        /********************* Size *********************/
  /* Attribute active portion */
  renderer = gtk_cell_renderer_toggle_new ();
  g_object_set (G_OBJECT (renderer), "activatable", TRUE, NULL);
  g_object_set_data (G_OBJECT (renderer), "attribute-column",
                     GINT_TO_POINTER (COLUMN_SIZE_ACTIVE));
  g_signal_connect (G_OBJECT (renderer), "toggled",
                    G_CALLBACK (value_attribute_toggled), eprop);

  column = gtk_tree_view_column_new_with_attributes
      ("dummy", renderer,
       "visible", COLUMN_TEXT_EDITABLE, "active", COLUMN_SIZE_ACTIVE, NULL);
  gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
  g_object_set_data (G_OBJECT (column), "column-id",
                     GINT_TO_POINTER (COLUMN_SIZE_ACTIVE));

  /* Attribute portion */
  renderer = gtk_cell_renderer_combo_new ();
  g_object_set (G_OBJECT (renderer), "editable", TRUE, "has-entry", FALSE,
                "text-column", 0, "model", size_store, NULL);
  g_object_set_data (G_OBJECT (renderer), "attribute-column",
                     GINT_TO_POINTER (COLUMN_SIZE));
  g_signal_connect (G_OBJECT (renderer), "edited",
                    G_CALLBACK (value_attribute_edited), eprop);

  column = gtk_tree_view_column_new_with_attributes
      ("dummy", renderer,
       "visible", COLUMN_TEXT_EDITABLE,
       "editable", COLUMN_SIZE_ACTIVE, "text", COLUMN_SIZE, NULL);
  gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
  g_object_set_data (G_OBJECT (column), "column-id",
                     GINT_TO_POINTER (COLUMN_SIZE));


        /********************* State *********************/
  /* Attribute active portion */
  renderer = gtk_cell_renderer_toggle_new ();
  g_object_set (G_OBJECT (renderer), "activatable", TRUE, NULL);
  g_object_set_data (G_OBJECT (renderer), "attribute-column",
                     GINT_TO_POINTER (COLUMN_STATE_ACTIVE));
  g_signal_connect (G_OBJECT (renderer), "toggled",
                    G_CALLBACK (value_attribute_toggled), eprop);

  column = gtk_tree_view_column_new_with_attributes
      ("dummy", renderer,
       "visible", COLUMN_TEXT_EDITABLE, "active", COLUMN_STATE_ACTIVE, NULL);
  gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
  g_object_set_data (G_OBJECT (column), "column-id",
                     GINT_TO_POINTER (COLUMN_STATE_ACTIVE));

  /* Attribute portion */
  renderer = gtk_cell_renderer_combo_new ();
  g_object_set (G_OBJECT (renderer), "editable", TRUE, "has-entry", FALSE,
                "text-column", 0, "model", state_store, NULL);
  g_object_set_data (G_OBJECT (renderer), "attribute-column",
                     GINT_TO_POINTER (COLUMN_STATE));
  g_signal_connect (G_OBJECT (renderer), "edited",
                    G_CALLBACK (value_attribute_edited), eprop);

  column = gtk_tree_view_column_new_with_attributes
      ("dummy", renderer,
       "visible", COLUMN_TEXT_EDITABLE,
       "editable", COLUMN_STATE_ACTIVE, "text", COLUMN_STATE, NULL);
  gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
  g_object_set_data (G_OBJECT (column), "column-id",
                     GINT_TO_POINTER (COLUMN_STATE));


        /********************* Direction *********************/
  /* Attribute active portion */
  renderer = gtk_cell_renderer_toggle_new ();
  g_object_set (G_OBJECT (renderer), "activatable", TRUE, NULL);
  g_object_set_data (G_OBJECT (renderer), "attribute-column",
                     GINT_TO_POINTER (COLUMN_DIRECTION_ACTIVE));
  g_signal_connect (G_OBJECT (renderer), "toggled",
                    G_CALLBACK (value_attribute_toggled), eprop);

  column = gtk_tree_view_column_new_with_attributes
      ("dummy", renderer,
       "visible", COLUMN_TEXT_EDITABLE,
       "active", COLUMN_DIRECTION_ACTIVE, NULL);
  gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
  g_object_set_data (G_OBJECT (column), "column-id",
                     GINT_TO_POINTER (COLUMN_DIRECTION_ACTIVE));

  /* Attribute portion */
  renderer = gtk_cell_renderer_combo_new ();
  g_object_set (G_OBJECT (renderer), "editable", TRUE, "has-entry", FALSE,
                "text-column", 0, "model", direction_store, NULL);
  g_object_set_data (G_OBJECT (renderer), "attribute-column",
                     GINT_TO_POINTER (COLUMN_DIRECTION));
  g_signal_connect (G_OBJECT (renderer), "edited",
                    G_CALLBACK (value_attribute_edited), eprop);

  column = gtk_tree_view_column_new_with_attributes
      ("dummy", renderer,
       "visible", COLUMN_TEXT_EDITABLE,
       "editable", COLUMN_DIRECTION_ACTIVE, "text", COLUMN_DIRECTION, NULL);
  gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
  g_object_set_data (G_OBJECT (column), "column-id",
                     GINT_TO_POINTER (COLUMN_DIRECTION));


  /* Connect ::query-tooltip here for fancy tooltips... */
  g_object_set (G_OBJECT (view), "has-tooltip", TRUE, NULL);
  g_signal_connect (G_OBJECT (view), "query-tooltip",
                    G_CALLBACK (icon_sources_query_tooltip), eprop);

  gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (view), FALSE);
  gtk_tree_view_set_show_expanders (GTK_TREE_VIEW (view), FALSE);

  return view;
}