Esempio n. 1
0
static int lua_job_progress(lua_State *L)
{
    dt_progress_t *progress;
    luaA_to(L, dt_lua_backgroundjob_t, &progress, 1);
    dt_lua_unlock(false);
    gboolean i_own_lock = dt_control_gdk_lock();
    dt_pthread_mutex_lock(&darktable.control->progress_system.mutex);
    GList *iter = g_list_find(darktable.control->progress_system.list, progress);
    dt_pthread_mutex_unlock(&darktable.control->progress_system.mutex);
    if(i_own_lock) dt_control_gdk_unlock();
    dt_lua_lock();
    if(!iter) luaL_error(L,"Accessing an invalid job");
    if(lua_isnone(L, 3))
    {
        dt_lua_unlock(false);
        double result = dt_control_progress_get_progress(progress);
        dt_lua_lock();
        if(!dt_control_progress_has_progress_bar(progress))
            lua_pushnil(L);
        else
            lua_pushnumber(L, result);
        return 1;
    }
    else
    {
        double value;
        luaA_to(L,progress_double,&value,3);
        dt_lua_unlock(false);
        dt_control_progress_set_progress(darktable.control, progress, value);
        dt_lua_lock();
        return 0;
    }
}
Esempio n. 2
0
static int container_numindex(lua_State*L)
{
  lua_container container;
  luaA_to(L,lua_container,&container,1);
  GList * children = gtk_container_get_children(GTK_CONTAINER(container->widget));
  int index = lua_tointeger(L,2) -1;
  if(lua_gettop(L) >2) {
    int length = g_list_length(children);
    if(!lua_isnil(L,3) &&  index == length) {
      lua_widget widget;
      luaA_to(L, lua_widget,&widget,3),
      gtk_container_add(GTK_CONTAINER(container->widget),widget->widget);
    } else if(lua_isnil(L,3) && index < length) {
      GtkWidget *searched_widget = g_list_nth_data(children,index);
      gtk_container_remove(GTK_CONTAINER(container->widget),searched_widget);
    } else {
      luaL_error(L,"Incorrect index or value when setting the child of a container");
    }
    g_list_free(children);
    return 0;
  } else {
    GtkWidget *searched_widget = g_list_nth_data(children,index);
    g_list_free(children);
    lua_getuservalue(L,1);
    lua_pushlightuserdata(L,searched_widget);
    lua_gettable(L,-2);
    return 1;
  }
}
Esempio n. 3
0
static int image_eq(lua_State*L)
{
  dt_lua_image_t imgid1;
  luaA_to(L,dt_lua_image_t,&imgid1,-1);
  dt_lua_image_t imgid2;
  luaA_to(L,dt_lua_image_t,&imgid2,-2);
  lua_pushboolean(L,imgid1==imgid2);
  return 1;
}
Esempio n. 4
0
static int label_member(lua_State *L)
{
  lua_slider slider;
  luaA_to(L,lua_slider,&slider,1);
  if(lua_gettop(L) > 2) {
    char tmp[256];
    luaA_to(L,char_256,&tmp,3);
    dt_bauhaus_widget_set_label(slider->widget,NULL,tmp);
    return 0;
  }
  lua_pushstring(L,dt_bauhaus_widget_get_label(slider->widget));
  return 1;
}
Esempio n. 5
0
static int label_member(lua_State *L)
{
  lua_combobox combobox;
  luaA_to(L,lua_combobox,&combobox,1);
  if(lua_gettop(L) > 2) {
    char tmp[256];
    luaA_to(L,char_256,&tmp,3);
    dt_bauhaus_widget_set_label(combobox->widget,NULL,tmp);
    return 0;
  }
  lua_pushstring(L,dt_bauhaus_widget_get_label(combobox->widget));
  return 1;
}
Esempio n. 6
0
int dt_lua_move_image(lua_State*L) 
{
  dt_lua_image_t imgid = -1;
  dt_lua_film_t filmid = -1;
  if(luaL_testudata(L,1,"dt_lua_image_t")) {
    luaA_to(L,dt_lua_image_t,&imgid,1);
    luaA_to(L,dt_lua_film_t,&filmid,2);
  } else {
    luaA_to(L,dt_lua_film_t,&filmid,1);
    luaA_to(L,dt_lua_image_t,&imgid,2);
  }
  dt_image_move(imgid,filmid);
  return 0;
}
Esempio n. 7
0
int dt_lua_tag_detach(lua_State *L)
{
  dt_lua_image_t imgid;
  dt_lua_tag_t tagid;
  if(luaL_testudata(L,1,"dt_lua_image_t")) {
    luaA_to(L,dt_lua_image_t,&imgid,1);
    luaA_to(L,dt_lua_tag_t,&tagid,2);
  } else {
    luaA_to(L,dt_lua_tag_t,&tagid,1);
    luaA_to(L,dt_lua_image_t,&imgid,2);
  }
  dt_tag_detach(tagid,imgid);
  return 0;
}
Esempio n. 8
0
static int halign_member(lua_State *L)
{
  lua_label label;
  luaA_to(L, lua_label, &label, 1);
  dt_lua_align_t align;
  if(lua_gettop(L) > 2) {
    luaA_to(L, dt_lua_align_t, &align, 3);
    gtk_widget_set_halign(GTK_WIDGET(label->widget), align);
    return 0;
  }
  align = gtk_widget_get_halign(label->widget);
  luaA_push(L, dt_lua_align_t, &align);
  return 1;
}
Esempio n. 9
0
static int ellipsize_member(lua_State *L)
{
  lua_label label;
  luaA_to(L, lua_label, &label, 1);
  dt_lua_ellipsize_mode_t ellipsize;
  if(lua_gettop(L) > 2) {
    luaA_to(L, dt_lua_ellipsize_mode_t, &ellipsize, 3);
    gtk_label_set_ellipsize(GTK_LABEL(label->widget), ellipsize);
    return 0;
  }
  ellipsize = gtk_label_get_ellipsize(GTK_LABEL(label->widget));
  luaA_push(L, dt_lua_ellipsize_mode_t, &ellipsize);
  return 1;
}
Esempio n. 10
0
static int orientation_member(lua_State *L)
{
  lua_box box;
  luaA_to(L,lua_box,&box,1);
  dt_lua_orientation_t orientation;
  if(lua_gettop(L) > 2) {
    luaA_to(L,dt_lua_orientation_t,&orientation,3);
    gtk_orientable_set_orientation(GTK_ORIENTABLE(box->widget),orientation);
    return 0;
  }
  orientation = gtk_orientable_get_orientation(GTK_ORIENTABLE(box->widget));
  luaA_push(L,dt_lua_orientation_t,&orientation);
  return 1;
}
Esempio n. 11
0
int dt_lua_copy_image(lua_State*L) 
{
  dt_lua_image_t imgid = -1;
  dt_lua_film_t filmid = -1;
  if(luaL_testudata(L,1,"dt_lua_image_t")) {
    luaA_to(L,dt_lua_image_t,&imgid,1);
    luaA_to(L,dt_lua_film_t,&filmid,2);
  } else {
    luaA_to(L,dt_lua_film_t,&filmid,1);
    luaA_to(L,dt_lua_image_t,&imgid,2);
  }
  dt_lua_image_t new_image =dt_image_copy(imgid,filmid);
  luaA_push(L,dt_lua_image_t,&new_image);
  return 1;
}
Esempio n. 12
0
static int selection_cb(lua_State *L)
{
    GList *image = dt_collection_get_selected(darktable.collection, -1);
    if(lua_gettop(L) > 0)
    {
        GList * new_selection = NULL;
        luaL_checktype(L,-1,LUA_TTABLE);
        lua_pushnil(L);
        while (lua_next(L, -2) != 0)
        {
            /* uses 'key' (at index -2) and 'value' (at index -1) */
            int imgid;
            luaA_to(L,dt_lua_image_t,&imgid,-1);
            new_selection = g_list_prepend(new_selection,GINT_TO_POINTER(imgid));
            lua_pop(L,1);
        }
        new_selection = g_list_reverse(new_selection);
        dt_lua_unlock(true);// we need the gdk lock to update ui information
        dt_selection_clear(darktable.selection);
        dt_selection_select_list(darktable.selection,new_selection);
        dt_lua_lock();
        g_list_free(new_selection);
    }
    lua_newtable(L);
    while(image)
    {
        luaA_push(L,dt_lua_image_t,&image->data);
        luaL_ref(L,-2);
        image = g_list_delete_link(image, image);
    }
    return 1;
}
Esempio n. 13
0
static int lua_job_valid(lua_State*L)
{
    dt_progress_t *progress;
    luaA_to(L, dt_lua_backgroundjob_t, &progress, 1);
    if(lua_isnone(L, 3))
    {
        dt_lua_unlock(false);
        gboolean i_own_lock = dt_control_gdk_lock();
        dt_pthread_mutex_lock(&darktable.control->progress_system.mutex);
        GList *iter = g_list_find(darktable.control->progress_system.list, progress);
        dt_pthread_mutex_unlock(&darktable.control->progress_system.mutex);
        if(i_own_lock) dt_control_gdk_unlock();
        dt_lua_lock();

        if(iter)
            lua_pushboolean(L, true);
        else
            lua_pushboolean(L, false);

        return 1;
    }
    else
    {
        int validity = lua_toboolean(L, 3);
        if(validity)
            return luaL_argerror(L, 3, "a job can not be made valid");
        dt_lua_unlock(false);
        dt_control_progress_destroy(darktable.control, progress);
        dt_lua_lock();
        return 0;
    }
}
Esempio n. 14
0
static int film_index(lua_State *L)
{
  dt_lua_film_t film_id;
  luaA_to(L,dt_lua_film_t,&film_id,-2);
  switch(luaL_checkoption(L,-1,NULL,film_fields_name))
  {
    case PATH:
      {
        sqlite3_stmt *stmt;
        DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "select folder from film_rolls where id  = ?1", -1, &stmt, NULL);
        DT_DEBUG_SQLITE3_BIND_INT(stmt, 1, film_id);
        if(sqlite3_step(stmt) == SQLITE_ROW)
        {
          lua_pushstring(L,(char *)sqlite3_column_text(stmt, 0));
        }
        else
        {
          sqlite3_finalize(stmt);
          return luaL_error(L,"should never happen");
        }
        sqlite3_finalize(stmt);
        break;
      }
    case ID:
      lua_pushinteger(L,film_id);
      break;
    case DELETE:
      lua_pushcfunction(L,film_delete);
      break;
  }
  return 1;
}
Esempio n. 15
0
static void box_init(lua_State* L)
{
  lua_box box;
  luaA_to(L,lua_box,&box,-1);
  gtk_orientable_set_orientation(GTK_ORIENTABLE(box->widget),GTK_ORIENTATION_VERTICAL);
  gtk_box_set_spacing(GTK_BOX(box->widget), DT_PIXEL_APPLY_DPI(5));
}
Esempio n. 16
0
static int combobox_len(lua_State*L)
{
  lua_combobox combobox;
  luaA_to(L,lua_combobox,&combobox,1);
  lua_pushinteger(L,dt_bauhaus_combobox_length(combobox->widget));
  return 1;
}
Esempio n. 17
0
static int style_tostring(lua_State *L)
{
  dt_style_t style;
  luaA_to(L, dt_style_t, &style, 1);
  lua_pushstring(L, style.name);
  return 1;
}
Esempio n. 18
0
static int tag_index(lua_State *L)
{
  dt_lua_tag_t tagid;
  luaA_to(L, dt_lua_tag_t, &tagid, -2);
  int index = luaL_checkinteger(L, -1);
  if(index < 1)
  {
    return luaL_error(L, "incorrect index in database");
  }
  sqlite3_stmt *stmt = NULL;
  char query[1024];
  snprintf(query, sizeof(query),
           "SELECT imgid FROM main.tagged_images WHERE tagid=?1 ORDER BY imgid LIMIT 1 OFFSET %d", index - 1);
  DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), query, -1, &stmt, NULL);
  DT_DEBUG_SQLITE3_BIND_INT(stmt, 1, tagid);
  if(sqlite3_step(stmt) == SQLITE_ROW)
  {
    int imgid = sqlite3_column_int(stmt, 0);
    luaA_push(L, dt_lua_image_t, &imgid);
  }
  else
  {
    sqlite3_finalize(stmt);
    luaL_error(L, "incorrect index in database");
  }
  sqlite3_finalize(stmt);
  return 1;
}
Esempio n. 19
0
int dt_lua_delete_image(lua_State *L)
{
  int imgid;
  luaA_to(L, dt_lua_image_t, &imgid, -1);
  dt_image_remove(imgid);
  return 0;
}
Esempio n. 20
0
static int drop_cache(lua_State *L)
{
  dt_lua_image_t imgid = -1;
  luaA_to(L, dt_lua_image_t, &imgid, -1);
  dt_mipmap_cache_remove(darktable.mipmap_cache, imgid);
  return 0;
}
Esempio n. 21
0
static int id_member(lua_State *L)
{
  dt_lua_film_t film_id;
  luaA_to(L,dt_lua_film_t,&film_id,1);
  lua_pushinteger(L,film_id);
  return 1;
}
Esempio n. 22
0
static int film_getnum(lua_State*L)
{
  int index = luaL_checkinteger(L,-1);
  if(index < 1) {
    return luaL_error(L,"incorrect index in database");
  }
  dt_lua_film_t film_id;
  luaA_to(L,dt_lua_film_t,&film_id,-2);
  sqlite3_stmt *stmt = NULL;
  char query[1024];
  snprintf(query,sizeof(query),"select id from images where film_id = ?1 order by id limit 1 offset %d",index -1);
  DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db),query, -1, &stmt, NULL);
  DT_DEBUG_SQLITE3_BIND_INT(stmt, 1, film_id);
  if(sqlite3_step(stmt) == SQLITE_ROW)
  {
    dt_lua_image_t imgid = sqlite3_column_int(stmt, 0);
    luaA_push(L,dt_lua_image_t,&imgid);
    sqlite3_finalize(stmt);
  }
  else
  {
    sqlite3_finalize(stmt);
    return luaL_error(L,"incorrect index in database");
  }
  return 1;
}
Esempio n. 23
0
static int protected_to_yield(lua_State *L)
{
  yield_type type;
  luaA_to(L, yield_type, &type, 1);
  lua_pushnumber(L, type);
  return 1;
}
Esempio n. 24
0
static int combobox_numindex(lua_State*L)
{
  lua_combobox combobox;
  luaA_to(L,lua_combobox,&combobox,1);
  int key = lua_tointeger(L,2);
  int length = dt_bauhaus_combobox_length(combobox->widget);
  if(lua_gettop(L) > 2) {
    if(key <= 0 || key > length +1) {
      return luaL_error(L,"Invalid index for combobox : %d\n",key);
    } else if(key == length +1) {
      const char * string = luaL_checkstring(L,3);
      dt_bauhaus_combobox_add(combobox->widget,string);
    } else if(lua_isnil(L,3)){
      dt_bauhaus_combobox_remove_at(combobox->widget,key-1);
    } else {
      const char * string = luaL_checkstring(L,3);
      dt_bauhaus_combobox_remove_at(combobox->widget,key-1);
      dt_bauhaus_combobox_insert(combobox->widget,string,key-1);
    }
    return 0;
  }
  if(key <= 0 || key > length) {
    return luaL_error(L,"Invalid index for combo box : %d\n",key);
  } else if (key > length) {
    lua_pushnil(L);
    return 1;
  }
  const GList *labels = dt_bauhaus_combobox_get_labels(combobox->widget);
  lua_pushstring(L,g_list_nth_data((GList*)labels,key-1));
  return 1;
}
Esempio n. 25
0
int make_group_leader(lua_State *L)
{
  dt_lua_image_t first_image;
  luaA_to(L, dt_lua_image_t, &first_image, 1);
  dt_grouping_change_representative(first_image);
  return 0;
}
Esempio n. 26
0
static int style_delete(lua_State *L)
{
  dt_style_t style;
  luaA_to(L, dt_style_t, &style, 1);
  dt_styles_delete_by_name(style.name);
  return 0;
}
Esempio n. 27
0
static int tag_delete(lua_State *L)
{
  dt_lua_tag_t tagid;
  luaA_to(L, dt_lua_tag_t, &tagid, -1);
  
  GList *tagged_images = NULL;
  sqlite3_stmt *stmt;
  DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "SELECT imgid FROM main.tagged_images WHERE tagid=?1",
                              -1, &stmt, NULL);
  DT_DEBUG_SQLITE3_BIND_INT(stmt, 1, tagid);
  while(sqlite3_step(stmt) == SQLITE_ROW)
  {
    tagged_images = g_list_append(tagged_images, GINT_TO_POINTER(sqlite3_column_int(stmt, 0)));
  }
  sqlite3_finalize(stmt);

  dt_tag_remove(tagid, TRUE);

  GList *list_iter;
  if((list_iter = g_list_first(tagged_images)) != NULL)
  {
    do
    {
      dt_image_synch_xmp(GPOINTER_TO_INT(list_iter->data));
    } while((list_iter = g_list_next(list_iter)) != NULL);
  }
  g_list_free(g_list_first(tagged_images));

  return 0;
}
Esempio n. 28
0
static int value_member(lua_State*L)
{
  lua_combobox combobox;
  luaA_to(L,lua_combobox,&combobox,1);
  int length = dt_bauhaus_combobox_length(combobox->widget);
  if(lua_gettop(L) > 2) {
    if(lua_isnil(L,3)) {
      dt_bauhaus_combobox_set(combobox->widget,-1);
    } else if(lua_isnumber(L,3)) {
      int index = lua_tointeger(L,3) ;
      if(index < 1 || index > length) {
        return luaL_error(L,"Invalid index for combo box : %d\n",index);
      }
      dt_bauhaus_combobox_set(combobox->widget,index -1);
    } else if(lua_isstring(L,3)&& dt_bauhaus_combobox_get_editable(combobox->widget)) {
      const char * string = lua_tostring(L,3);
      dt_bauhaus_combobox_set_text(combobox->widget,string);
    } else {
      return luaL_error(L,"Invalid type for combo box value\n");
    }
    return 0;
  }
  lua_pushstring(L,dt_bauhaus_combobox_get_text(combobox->widget));
  return 1;
}
Esempio n. 29
0
static int history_delete(lua_State *L)
{
  dt_lua_image_t imgid = -1;
  luaA_to(L,dt_lua_image_t,&imgid,-1);
  dt_history_delete_on_image(imgid);
  return 0;
}
Esempio n. 30
0
static void combobox_init(lua_State*L)
{
  lua_combobox combobox;
  luaA_to(L,lua_combobox,&combobox,-1);
  dt_bauhaus_combobox_from_widget(DT_BAUHAUS_WIDGET(combobox->widget),NULL);

}