Exemplo n.º 1
0
void gui_init(dt_lib_module_t *self)
{
  /* initialize ui widgets */
  dt_lib_viewswitcher_t *d = (dt_lib_viewswitcher_t *)g_malloc(sizeof(dt_lib_viewswitcher_t));
  self->data = (void *)d;
  memset(d,0,sizeof(dt_lib_viewswitcher_t));

  self->widget = gtk_hbox_new(FALSE,5);

  for (int k=0; k<darktable.view_manager->num_views; k++)
  {
    if (darktable.view_manager->view[k].module)
    {
      /* create view label */
      dt_view_t *v = &darktable.view_manager->view[k];
      GtkWidget *w = _lib_viewswitcher_create_label(v);
      gtk_box_pack_start(GTK_BOX(self->widget),w,FALSE,FALSE,0);

      /* create space if more views */
      if (k < darktable.view_manager->num_views-1)
      {
        GtkWidget *w = gtk_label_new("<span color=\"#7f7f7f\"><big><big><b>|</b></big></big></span>");
        gtk_misc_set_alignment(GTK_MISC(w), 0, 0.5);
        gtk_label_set_use_markup(GTK_LABEL(w), TRUE);
        gtk_widget_set_name(w,"view_label");
        gtk_box_pack_start(GTK_BOX(self->widget),w,FALSE,FALSE,5);
      }

    }
  }

  /* connect callback to view change signal */
  dt_control_signal_connect(darktable.signals, DT_SIGNAL_VIEWMANAGER_VIEW_CHANGED,
                            G_CALLBACK(_lib_viewswitcher_view_changed_callback), self);
}
Exemplo n.º 2
0
void gui_init(dt_lib_module_t *self)
{
  /* initialize ui widgets */
  dt_lib_viewswitcher_t *d = (dt_lib_viewswitcher_t *)g_malloc0(sizeof(dt_lib_viewswitcher_t));
  self->data = (void *)d;

  self->widget = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, DT_PIXEL_APPLY_DPI(5));
  d->dropdown = NULL;
  GtkTreeIter iter;
  GtkListStore *model = NULL;

  for(int k = 0; k < darktable.view_manager->num_views; k++)
  {
    if(darktable.view_manager->view[k].module)
    {
      // lighttable and darkroom are shown in the top level, the rest in a dropdown
      /* create view label */
      dt_view_t *v = &darktable.view_manager->view[k];

      if(!g_strcmp0(v->module_name, "lighttable") || !g_strcmp0(v->module_name, "darkroom"))
      {
        GtkWidget *w = _lib_viewswitcher_create_label(v);
        gtk_box_pack_start(GTK_BOX(self->widget), w, FALSE, FALSE, 0);
        d->labels = g_list_append(d->labels, gtk_bin_get_child(GTK_BIN(w)));

        /* create space if more views */
        if(k < darktable.view_manager->num_views - 1)
        {
          GtkWidget *w = gtk_label_new("|");
          gtk_widget_set_halign(w, GTK_ALIGN_START);
          gtk_widget_set_name(w, "view_label");
          gtk_box_pack_start(GTK_BOX(self->widget), w, FALSE, FALSE, DT_PIXEL_APPLY_DPI(5));
        }
      }
      else
      {
        // only create the dropdown when needed, in case someone runs dt with just lt + dr
        if(!d->dropdown)
        {
          model = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
          d->dropdown = gtk_combo_box_new_with_model(GTK_TREE_MODEL(model));
          gtk_widget_set_name(d->dropdown, "view_dropdown");
          GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
          gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(d->dropdown), renderer, FALSE);
          gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(d->dropdown), renderer, "markup", TEXT_COLUMN,
                                         "sensitive", SENSITIVE_COLUMN, NULL);

          gtk_list_store_append(model, &iter);
//           char *italic = g_strdup_printf("<i>%s</i>", _("other"));
          gtk_list_store_set(model, &iter, TEXT_COLUMN, /*italic*/ _("other"), VIEW_COLUMN, 0, SENSITIVE_COLUMN, 0, -1);
//           g_free(italic);

          gtk_box_pack_start(GTK_BOX(self->widget), d->dropdown, FALSE, FALSE, 0);
          g_signal_connect(G_OBJECT(d->dropdown), "changed", G_CALLBACK(_dropdown_changed), d);
        }

        gtk_list_store_append(model, &iter);
        gtk_list_store_set(model, &iter, TEXT_COLUMN, v->name(v), VIEW_COLUMN, v->view(v), SENSITIVE_COLUMN, 1, -1);
      }
    }
  }

  if(model) g_object_unref(model);

  /* connect callback to view change signal */
  dt_control_signal_connect(darktable.signals, DT_SIGNAL_VIEWMANAGER_VIEW_CHANGED,
                            G_CALLBACK(_lib_viewswitcher_view_changed_callback), self);
}