static int resource_set_get_resources(void *data, lua_State *L, int member, mrp_lua_value_t *v) { resource_set_lua_t *rset; void *iter = NULL; mrp_resource_t *resource; mrp_resource_mask_t grant, advice; MRP_UNUSED(member); MRP_UNUSED(v); mrp_debug("> resource_set_get_resources"); rset = (resource_set_lua_t *) data; if (!rset) return luaL_error(L, "internal error"); grant = mrp_get_resource_set_grant(rset->resource_set); advice = mrp_get_resource_set_advice(rset->resource_set); lua_newtable(L); /* push all resource objects to a table and return it */ while ((resource = mrp_resource_set_iterate_resources(rset->resource_set, &iter))) { const char *name = mrp_resource_get_name(resource); mrp_resource_mask_t mask = mrp_resource_get_mask(resource); /* fetch and update the resource object */ resource_lua_t *res = (resource_lua_t *) mrp_htbl_lookup(rset->resources, (void *) name); if (!res) { mrp_log_error("resources out of sync: %s not found", name); continue; } /* mrp_lua_object_ref_value(res, L, 0); */ res->acquired = !!(mask & grant); res->available = !!(mask & advice); /* TODO: update attributes */ /* push the resource to the table */ lua_pushstring(L, res->resource_name); mrp_lua_push_object(L, res); lua_settable(L, -3); } return 1; }
static void show_view_simul_delete_resource_cb (PlannerShowView *view) { GList *tasklist; MrpProject *project; MrpTask *randomtask; gchar *currenttaskname; gint delayedtime; gint chengeddurationtime; gchar *str1; gchar *str2; PlannerShowViewPriv *priv; srand((int) time(0)); currenttasknumber++; priv = view->priv; tasklist = getSortedTaskListByView(view); //randomtask = getRandomTask(tasklist); //deleteRandomResourceFromTask(tasklist); randomtask = getRandomTask(tasklist); MrpResource *delresource = getDelRandomResourceFromTask(randomtask); gchar *s1 = mrp_task_get_name(randomtask); gchar *s2 = mrp_resource_get_name(delresource); g_printf("the random task is %s,the deleted resource is %s\n",s1,s2); MrpAssignment *assignment = mrp_task_get_assignment (randomtask,delresource); mrp_object_removed (MRP_OBJECT (assignment)); if(gtk_toggle_button_get_active(priv->ganttcharttogglebutton)){ firstduration = totalduration(project); priv->firsttotalduration = firstduration; gchar *str2 = planner_format_float(firstduration, 2, FALSE); gtk_entry_set_text(GTK_ENTRY (priv->currentdurationentry), str2); } //currenttask = g_list_nth_data(firsttasklist,currenttasknumber); //setDelayedDuration(currenttask); /* currenttaskname = mrp_task_get_name(randomtask); gtk_entry_set_text (GTK_ENTRY (priv->currenttaskentry), currenttaskname); delayedtime = mrp_task_get_duration(randomtask)/(60*60*8*2); str1 = planner_format_float (delayedtime, 2, FALSE); gtk_entry_set_text (GTK_ENTRY (priv->currentdelayentry), str1); project = planner_window_get_project (PLANNER_VIEW (view)->main_window); chengeddurationtime = totalduration(project); str2 = planner_format_float (chengeddurationtime, 2, FALSE); gtk_entry_set_text (GTK_ENTRY (priv->lastdurationentry), str2); gchar *a = g_strconcat(s1,"'s",s2,"resource has been deleted!",NULL); gtk_button_set_label(priv->deleteresourcebutton, a); // can_go_to_next_task = FALSE; g_source_remove (timertag);*/ }
static void show_view_simul_task_delay_cb (PlannerShowView *view) { GList *tasklist; MrpProject *project; gint probability; MrpTask *currenttask; gchar *currenttaskname; gint delayedtime; gint chengeddurationtime; gchar *str1; gchar *str2; PlannerShowViewPriv *priv; mrptime duration; mrptime delayedduration; currenttasknumber++; priv = view->priv; // tasklist = getSortedTaskListByView(view); // currenttask = g_list_nth_data(tasklist,currenttasknumber); currenttask = g_list_nth_data(firsttasklist,currenttasknumber); //setDelayedDuration(currenttask); probability = mrp_task_get_probability(currenttask); currenttaskname = mrp_task_get_name(currenttask); duration = mrp_task_get_duration(currenttask); g_printf("%s, %d",currenttaskname,probability); gtk_entry_set_text (GTK_ENTRY (priv->currenttaskentry), currenttaskname); project = planner_window_get_project (PLANNER_VIEW (view)->main_window); //random task delay if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->randomtogglebutton)) && ((5 == currenttasknumber) || (1 == currenttasknumber))) // if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->randomtogglebutton)) // && (randomtasknumber == currenttasknumber) && (randomtasknumber+3 == currenttasknumber)) { //srand((int) time(0)); //MrpTask *randomtask = getRandomTask(firsttasklist); delayedduration = duration*1.5; g_object_set (currenttask, "sched",1,NULL); g_object_set (currenttask, "duration", delayedduration, NULL); gtk_widget_set_sensitive(priv->deleteresourcebutton, FALSE); gchar *a = g_strconcat(currenttaskname, "当前审计任务被随机设置延迟!", NULL ); gtk_button_set_label(priv->deleteresourcebutton, a); } //manual set task delay GdkColor color1; if(probability) { if (probability >= 30 && probability <= 60) { color1.red = 50000; color1.green = 20000; color1.blue = 15000; gtk_widget_modify_bg(priv->deleteresourcebutton, GTK_STATE_INSENSITIVE, &color1); gtk_widget_modify_fg(priv->currentdelayentry, GTK_STATE_NORMAL, &color1); gtk_widget_set_sensitive(priv->deleteresourcebutton, FALSE); gchar *a = g_strconcat(currenttaskname, "当前审计任务被手动设置延迟!延迟小于60%", NULL ); gtk_button_set_label(priv->deleteresourcebutton, a); } else{ if (probability > 60) { color1.red = 55000; color1.green = 5000; color1.blue = 5000; gtk_widget_modify_bg(priv->deleteresourcebutton, GTK_STATE_INSENSITIVE, &color1); gtk_widget_modify_bg(priv->currentdelayentry, GTK_STATE_NORMAL, &color1); gtk_widget_set_sensitive(priv->deleteresourcebutton, FALSE); gchar *a = g_strconcat(currenttaskname, "当前审计任务被手动设置延迟!延迟大于60%", NULL ); gtk_button_set_label(priv->deleteresourcebutton, a); } else{ color1.red = 5000; color1.green = 35000; color1.blue = 55000; gtk_widget_modify_bg(priv->deleteresourcebutton, GTK_STATE_INSENSITIVE, &color1); gtk_widget_set_sensitive(priv->deleteresourcebutton, FALSE); gchar *a = g_strconcat(currenttaskname, "当前审计任务被手动设置延迟!延迟小于30%",NULL ); gtk_button_set_label(priv->deleteresourcebutton, a); } } delayedduration = duration*(probability*0.01+1); g_object_set (currenttask, "sched",1,NULL); g_object_set (currenttask, "duration", delayedduration, NULL); } //set task delayed time delayedtime =(delayedduration - duration) / (60 * 60 * 8); if(delayedtime >= 0){ str1 = planner_format_float(delayedtime, 2, FALSE); gtk_entry_set_text(GTK_ENTRY (priv->currentdelayentry), str1); } else{ str1 = planner_format_float(0, 2, FALSE); gtk_entry_set_text(GTK_ENTRY (priv->currentdelayentry), str1); } //delete resource // if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->deleteresourcetogglebutton)) // && (randomresourcenumber == currenttasknumber)) if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->deleteresourcetogglebutton)) && (2 == currenttasknumber)) { MrpResource *delresource = getDelRandomResourceFromTask(currenttask); gchar *s1 = mrp_task_get_name(currenttask); gchar *s2 = mrp_resource_get_name(delresource); g_printf("随机选取审计任务为 %s,退出该任务的审计人员为 %s\n", s1, s2); gtk_entry_set_text (GTK_ENTRY (priv->deleteresourceentry), s2); MrpAssignment *assignment = mrp_task_get_assignment(currenttask,delresource); mrp_object_removed(MRP_OBJECT (assignment)); currenttaskname = mrp_task_get_name(currenttask); gtk_widget_set_sensitive(priv->deleteresourcebutton,FALSE); gchar *a = g_strconcat("审计任务",s1,"的",s2,"退出该任务执行!",NULL); gtk_button_set_label(priv->deleteresourcebutton, a); } //caculat the duration chengeddurationtime = totalduration(project); priv->lasttotalduration = chengeddurationtime; str2 = planner_format_float(chengeddurationtime, 2, FALSE); gtk_entry_set_text(GTK_ENTRY (priv->lastdurationentry), str2); displayTotalDuration(view); g_source_remove (timertag); }