static void task_view_pert_chart_on_load (PlannerShowView *view) { GtkWidget *layout; MrpTask *root; GList *task_list; GList *l; MrpTaskManager *task_manager; //PlannerShowView *view; PlannerShowViewPriv *priv; MrpProject *project; pertnodes = NULL; priv = view->priv; layout = priv->pertlayout; project = planner_window_get_project(PLANNER_VIEW(view)->main_window); task_manager = imrp_project_get_task_manager(project); root = mrp_task_manager_get_root (task_manager); task_list = mrp_task_manager_get_all_tasks(task_manager); // g_print("______________________22222222222222222222_______________________"); l = planner_pertchart_nodes_creat(task_list); task_manager_build_dependency_graph_for_node (task_manager); l = setPertNodesPosition(); avoidCrossingNode(); avoidCrossingLine(); removeEmptyColumn(); getposition(l); getArrowPosition(pertnodes); drawtask(layout,project); }
static void show_view_update_ui (PlannerShowView *view) { PlannerShowViewPriv *priv; GList *list, *l; gboolean value; gboolean rel_value = FALSE; gboolean link_value = FALSE; gint count_value = 0; if (!PLANNER_VIEW (view)->activated) { return; } priv = view->priv; list = planner_task_tree_get_selected_tasks( PLANNER_TASK_TREE (priv->tree) ); for (l = list; l; l = l->next) { if (mrp_task_has_relation(MRP_TASK (l->data) )) { rel_value = TRUE; break; } } for (l = list; l; l = l->next) { count_value++; } value = (list != NULL ); link_value = (count_value >= 2); g_list_free(list); }
static void show_view_gantt_status_updated_cb (PlannerGanttChart *gantt, const gchar *message, PlannerShowView *view) { planner_window_set_status (PLANNER_VIEW (view)->main_window, message); }
static void show_view_project_loaded_cb (MrpProject *project, PlannerShowView *view) { GtkTreeModel *model; GList *task_list; MrpTaskManager *task_manager; //g_free(pertnodes);//pretend more load action that this list add unexcepted tasks //g_free(firsttasklist);//the same as above firsttasklist = NULL; project = planner_window_get_project(PLANNER_VIEW (view) ->main_window); task_manager = imrp_project_get_task_manager(project); task_list = mrp_task_manager_get_all_tasks(task_manager); firsttasklist = sortTasklistsByFinishTime(task_list); tasklistlength = g_list_length(task_list); prosses = tasklistlength; model = GTK_TREE_MODEL (planner_gantt_model_new (project)); planner_task_tree_set_model(PLANNER_TASK_TREE (view->priv->tree), PLANNER_GANTT_MODEL (model) ); planner_gantt_chart_set_model(PLANNER_GANTT_CHART (view->priv->gantt), model); view->priv->expose_id = g_signal_connect_after (view->priv->gantt, "expose_event", G_CALLBACK (show_view_expose_cb), view); //task_view_pert_chart_on_load(view); g_object_unref(model); }
static void print_job_draw_page (GtkPrintOperation *operation, GtkPrintContext *context, gint page_nr, gpointer user_data) { PlannerPrintJob *job; PlannerPrintJobPriv *priv; PlannerView *v; GList *l; gboolean page_found = FALSE; gint pages_in_view; job = (PlannerPrintJob *)user_data; priv = job->priv; l = priv->views; while (! page_found && l != NULL) { v = PLANNER_VIEW (l->data); pages_in_view = planner_view_print_get_n_pages (v); if (page_nr < pages_in_view) { planner_view_print (v, page_nr); page_found = TRUE; } else { page_nr -= pages_in_view; l = l->next; } } }
static void show_view_finalize (GObject *object) { PlannerShowView *view; view = PLANNER_SHOW_VIEW (object); if (PLANNER_VIEW (view)->activated) { show_view_deactivate (PLANNER_VIEW (view)); } g_free (view->priv); if (G_OBJECT_CLASS (parent_class)->finalize) { (*G_OBJECT_CLASS (parent_class)->finalize) (object); } }
static void task_view_finalize (GObject *object) { PlannerTaskView *view; view = PLANNER_TASK_VIEW (object); if (PLANNER_VIEW (view)->activated) { task_view_deactivate (PLANNER_VIEW (view)); } g_free (view->priv); if (G_OBJECT_CLASS (parent_class)->finalize) { (*G_OBJECT_CLASS (parent_class)->finalize) (object); } }
static void usage_view_finalize (GObject *object) { PlannerUsageView *view; view = PLANNER_USAGE_VIEW (object); if (PLANNER_VIEW (view)->activated) { usage_view_deactivate (PLANNER_VIEW (view)); } g_free (view->priv); if (G_OBJECT_CLASS (parent_class)->finalize) { (*G_OBJECT_CLASS (parent_class)->finalize) (object); } }
static void show_view_gantt_resource_clicked_cb(PlannerGanttChart *chart, MrpResource *resource, PlannerShowView *view) { GtkWidget *dialog; dialog = planner_resource_dialog_new(PLANNER_VIEW (view) ->main_window, resource); gtk_widget_show(dialog); }
static void usage_view_save_columns (PlannerUsageView *view) { PlannerUsageViewPriv *priv; priv = view->priv; planner_view_column_save_helper (PLANNER_VIEW (view), GTK_TREE_VIEW (priv->tree)); }
static void usage_view_zoom_to_fit_cb (GtkAction *action, gpointer data) { PlannerView *view; view = PLANNER_VIEW (data); planner_usage_chart_zoom_to_fit (PLANNER_USAGE_VIEW (view)->priv->chart); usage_view_update_zoom_sensitivity (view); }
static void task_view_print_init (PlannerView *view, PlannerPrintJob *job) { PlannerTaskViewPriv *priv; priv = PLANNER_TASK_VIEW (view)->priv; priv->print_sheet = planner_table_print_sheet_new (PLANNER_VIEW (view), job, GTK_TREE_VIEW (priv->tree)); }
static void task_view_edit_custom_props_cb (GtkAction *action, gpointer data) { PlannerTaskView *view; GtkWidget *dialog; MrpProject *project; view = PLANNER_TASK_VIEW (data); project = planner_window_get_project (PLANNER_VIEW (view)->main_window); dialog = planner_property_dialog_new (PLANNER_VIEW (view)->main_window, project, MRP_TYPE_TASK, _("Edit custom task properties")); gtk_window_set_default_size (GTK_WINDOW (dialog), 500, 300); gtk_widget_show (dialog); }
GList * getSortedTaskListByView(PlannerShowView *view) { GList *task_list; GList *sortedtasks; MrpTaskManager *task_manager; MrpProject *project; project = planner_window_get_project (PLANNER_VIEW (view)->main_window); task_manager = imrp_project_get_task_manager(project); task_list = mrp_task_manager_get_all_tasks(task_manager); sortedtasks = sortTasklistsByFinishTime(task_list); return sortedtasks; }
static void task_view_edit_columns_cb (GtkAction *action, gpointer data) { PlannerTaskView *view; PlannerTaskViewPriv *priv; view = PLANNER_TASK_VIEW (data); priv = view->priv; planner_column_dialog_show (PLANNER_VIEW (view)->main_window, _("Edit Task Columns"), GTK_TREE_VIEW (priv->tree)); }
static gboolean usage_view_expose_cb (GtkWidget *widget, GdkEventExpose *event, gpointer data) { PlannerUsageView *view = PLANNER_USAGE_VIEW (data); usage_view_update_row_and_header_height (PLANNER_VIEW(view)); g_signal_handler_disconnect (view->priv->tree, view->priv->expose_id); return FALSE; }
static void usage_view_edit_columns_cb (GtkAction *action, gpointer data) { PlannerUsageView *view; PlannerUsageViewPriv *priv; view = PLANNER_USAGE_VIEW (data); priv = view->priv; planner_column_dialog_show (PLANNER_VIEW (view)->main_window, _("Edit Resource Usage Columns"), GTK_TREE_VIEW (priv->tree)); }
static void print_job_end_print (GtkPrintOperation *operation, GtkPrintContext *context, gpointer user_data) { PlannerPrintJob *job; PlannerPrintJobPriv *priv; GList *l; job = (PlannerPrintJob *)user_data; priv = job->priv; for (l = priv->views; l; l = l->next) { planner_view_print_cleanup (PLANNER_VIEW(l->data)); } }
static void usage_view_load_columns (PlannerUsageView *view) { PlannerUsageViewPriv *priv; GList *columns, *l; GtkTreeViewColumn *column; const gchar *id; gint i; priv = view->priv; /* Load the columns. */ planner_view_column_load_helper (PLANNER_VIEW (view), GTK_TREE_VIEW (priv->tree)); /* Make things a bit more robust by setting defaults if we don't get any * visible columns. Should be done through a schema instead (but we'll * keep this since a lot of people get bad installations when installing * themselves). */ columns = gtk_tree_view_get_columns (GTK_TREE_VIEW (priv->tree)); i = 0; for (l = columns; l; l = l->next) { if (gtk_tree_view_column_get_visible (l->data)) { i++; } } if (i == 0) { for (l = columns; l; l = l->next) { column = l->data; if (g_object_get_data (G_OBJECT (column), "custom")) { continue; } id = g_object_get_data (G_OBJECT (column), "id"); if (!id) { continue; } gtk_tree_view_column_set_visible (column, TRUE); } } g_list_free (columns); }
static gint show_view_next_task_cb(GtkWidget *button, PlannerShowView *view) { GList *task_list; GList *sortedtasks; GList *l; MrpTaskManager *task_manager; PlannerShowViewPriv *priv; MrpProject *project; MrpTask *currenttask; gchar *str; gint currentdurationtime; project = planner_window_get_project (PLANNER_VIEW (view)->main_window); task_manager = imrp_project_get_task_manager(project); task_list = mrp_task_manager_get_all_tasks(task_manager); priv = view->priv; //root = mrp_task_manager_get_root (task_manager); //task_list = mrp_task_manager_get_all_tasks(task_manager); //sortedtasks = sortTasklistsByFinishTime(task_list); tasklistlength--; if(!gtk_widget_get_sensitive(priv->deleteresourcebutton)) gtk_widget_set_sensitive(priv->deleteresourcebutton,TRUE); if (tasklistlength < 0) { gtk_button_set_label(priv->nextstepbutton, "整体审计计划模拟推演完毕"); gtk_widget_set_sensitive(priv->nextstepbutton, FALSE); return 0; } currentdurationtime = totalduration(project); priv->firsttotalduration = currentdurationtime; //g_print("%d",totalduration(project)); str = planner_format_float(currentdurationtime, 2, FALSE); gtk_entry_set_text(GTK_ENTRY (priv->currentdurationentry), str); timertag = g_timeout_add_full(G_PRIORITY_HIGH, 1000, show_view_simul_task_delay_cb, view, show_view_timeout_remove_cb); timer = gtk_timeout_add(1000, timeout_callback, priv->progressbar); return 1; }
static GtkWidget * show_view_create_widget (PlannerShowView *view) { PlannerShowViewPriv *priv; GtkWidget *pertlayout; GtkWidget *tree; GtkWidget *sw; GtkWidget *frame; GtkWidget *layout; GtkWidget *vpaned; GtkAdjustment *hadj, *vadj; GtkTreeModel *model; MrpTaskManager *task_manager; GtkLabel *label; GtkEntry *entry; GtkButton *button; GtkWidget *hbox,*vbox,*vbox2; GtkWidget *progressbar; GtkWidget *randomtogglebutton; GtkWidget *deleteresourcetogglebutton; GtkWidget *ganttcharttogglebutton; GtkWidget *manulsettogglebutton; GtkWidget *table; MrpProject *project; GtkTreeSelection *selection; GList *task_list; project = planner_window_get_project (PLANNER_VIEW (view)->main_window); task_manager = imrp_project_get_task_manager(project); priv = view->priv; g_signal_connect (project, "loaded", G_CALLBACK (show_view_project_loaded_cb), view); model = GTK_TREE_MODEL (planner_gantt_model_new (project)); tree = planner_task_tree_new (PLANNER_VIEW (view)->main_window, PLANNER_GANTT_MODEL (model), FALSE, TRUE, COL_WBS, _("WBS"), COL_NAME, _("Name"), COL_START, _("Start"), COL_FINISH, _("Finish"), COL_WORK, _("Work"), COL_DURATION, _("Duration"), COL_SLACK, _("Slack"), COL_COST, _("Cost"), COL_ASSIGNED_TO, _("Assigned to"), COL_COMPLETE, _("% Complete"), -1); priv->tree = tree; priv->gantt = planner_gantt_chart_new_with_model (model); g_object_set (priv->gantt, "header_height", 50, NULL); planner_gantt_chart_set_view (PLANNER_GANTT_CHART (priv->gantt), PLANNER_TASK_TREE (tree)); //********************* //events sensitive on gantt widget gtk_widget_set_events (GTK_WIDGET (priv->gantt), GDK_SCROLL_MASK); g_signal_connect (priv->gantt, "scroll-event", G_CALLBACK (show_view_chart_scroll_event), view); g_object_unref (model); g_signal_connect (priv->gantt, "status_updated", G_CALLBACK (show_view_gantt_status_updated_cb), view); g_signal_connect (priv->gantt, "resource_clicked", G_CALLBACK (show_view_gantt_resource_clicked_cb), view); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree)); gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE); //g_signal_connect (tree, //"style_set", //G_CALLBACK (show_view_tree_style_set_cb), //view); //********************* //interface design //GtkVPaned // GtkFrame -> GtkScrollWindow ->GtkLayout (pert view showed here)A // GtkHBox // GtkVBox -> GtkHBox (show run-in-time data showed here)B // GtkLabel // GtkEntry // GtkScrollWindow (gantt view showed here)C //interface design in A //GtkScrollWindow, let its scrollbar displayed if needed, put the pert view inside layout = gtk_layout_new(NULL,NULL); priv->pertlayout = layout; sw = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_ALWAYS, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (sw), priv->pertlayout); //GtkFrame, put the GtkScrollWindow in the GtkFrame frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); gtk_container_add (GTK_CONTAINER (frame), sw); //GtkVPaned, add the GtkFrame in the GtkVPaned vpaned = gtk_vpaned_new (); gtk_paned_add1 (GTK_PANED (vpaned), frame); //interface design in B //GtkVBox, holds labels and entry and buttons vbox = gtk_vbox_new(FALSE, 0); vbox2 = gtk_vbox_new(FALSE,0); progressbar = gtk_progress_bar_new(); //GtkLabel, "The Current Task Is: " label = gtk_label_new("当前执行审计任务: "); gtk_box_pack_start(GTK_BOX (vbox), GTK_WIDGET (label), FALSE, FALSE, 0); //GtkEntry, holds task name entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX (vbox), GTK_WIDGET (entry), FALSE, FALSE, 0); priv->currenttaskentry = entry; //GtkLabel, "The Current Delay Is:: " label = gtk_label_new("当前审计延迟时间: "); gtk_box_pack_start(GTK_BOX (vbox), GTK_WIDGET (label), FALSE, FALSE, 0); //GtkEntry, holds task delay entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX (vbox), GTK_WIDGET (entry), FALSE, FALSE, 0); priv->currentdelayentry = entry; //GtkLabel, "The Current duration is " label = gtk_label_new("当前审计总时间: "); gtk_box_pack_start(GTK_BOX (vbox), GTK_WIDGET (label), FALSE, FALSE, 0); //GtkEntry, holds total duration entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX (vbox), GTK_WIDGET (entry), FALSE, FALSE, 0); priv->currentdurationentry = entry; //GtkLabel, "The Duration has changed :: " label = gtk_label_new("延迟后审计总时间: "); gtk_box_pack_start(GTK_BOX (vbox), GTK_WIDGET (label), FALSE, FALSE, 0); //GtkEntry, The Duration has changed to entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX (vbox), GTK_WIDGET (entry), FALSE, FALSE, 0); priv->lastdurationentry = entry; lastdurationentry = entry; //GtkLabel, "delete resource" label = gtk_label_new("调整的审计人员: "); gtk_box_pack_start(GTK_BOX (vbox), GTK_WIDGET (label), FALSE, FALSE, 0); //GtkEntry, delete resource entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX (vbox), GTK_WIDGET (entry), FALSE, FALSE, 0); priv->deleteresourceentry = entry; GtkWidget *labelChild; PangoFontDescription *font1; short fontSize = 8; //GtkButton, delete resource button = gtk_button_new_with_label("重大事项显示"); GdkColor color; color.red = 50000; color.green = 20000; color.blue = 15000; gtk_widget_modify_bg(button, GTK_STATE_INSENSITIVE, &color); // font1 = pango_font_description_from_string("Sans");//"Sans"字体名 //pango_font_description_set_size(font1, fontSize * PANGO_SCALE);//设置字体大小 // labelChild = gtk_bin_get_child(GTK_BIN(button));//取出GtkButton里的label gtk_widget_modify_font(GTK_WIDGET(labelChild), font1);//设置label的字体, 这样这个GtkButton上面显示的字体就变了 gtk_box_pack_start(GTK_BOX (vbox), GTK_WIDGET (button), FALSE,FALSE, 0); g_signal_connect (button, "clicked", G_CALLBACK (show_view_delete_resource_cb), view); priv->deleteresourcebutton = button; //total duration display button = gtk_button_new_with_label("审计总时间无延迟"); GdkColor color1; color1.red = 50000; color1.green = 20000; color1.blue = 15000; gtk_widget_modify_bg(button, GTK_STATE_INSENSITIVE, &color1); // font1 = pango_font_description_from_string("Sans");//"Sans"字体名 // pango_font_description_set_size(font1, fontSize * PANGO_SCALE);//设置字体大小 // labelChild = gtk_bin_get_child(GTK_BIN(button));//取出GtkButton里的label gtk_widget_modify_font(GTK_WIDGET(labelChild), font1);//设置label的字体, 这样这个GtkButton上面显示的字体就变了 gtk_box_pack_start(GTK_BOX (vbox), GTK_WIDGET (button), FALSE,FALSE, 0); g_signal_connect(button, "clicked", G_CALLBACK (show_view_delete_resource_cb), view); priv->displaytotaldurationbutton = button; //GtkButton, go to next task button = gtk_button_new_with_label("执行下一审计任务"); GdkColor color2; color2.red = 50000; color2.green = 10000; color2.blue = 10000; gtk_widget_modify_bg(button, GTK_STATE_INSENSITIVE, &color2); // font1 = pango_font_description_from_string("Sans");//"Sans"字体名 // pango_font_description_set_size(font1, fontSize * PANGO_SCALE);//设置字体大小 // labelChild = gtk_bin_get_child(GTK_BIN(button));//取出GtkButton里的label gtk_widget_modify_font(GTK_WIDGET(labelChild), font1);//设置label的字体, 这样这个GtkButton上面显示的字体就变了 gtk_box_pack_start(GTK_BOX (vbox), GTK_WIDGET (button), FALSE,FALSE, 0); g_signal_connect (button, "clicked", G_CALLBACK (show_view_next_task_cb), view); priv->nextstepbutton = button; table = gtk_table_new(2, 2, FALSE); manulsettogglebutton = gtk_toggle_button_new_with_label("手动设置审计任务延迟"); gtk_widget_set_size_request(manulsettogglebutton,5,7); font1 = pango_font_description_from_string("Sans");//"Sans"字体名 pango_font_description_set_size(font1, fontSize * PANGO_SCALE);//设置字体大小 labelChild = gtk_bin_get_child(GTK_BIN( manulsettogglebutton));//取出GtkButton里的label gtk_widget_modify_font(GTK_WIDGET(labelChild), font1);//设置label的字体, 这样这个GtkButton上面显示的字体就变了 randomtogglebutton = gtk_toggle_button_new_with_label("随机设置审计任务延迟"); font1 = pango_font_description_from_string("Sans");//"Sans"字体名 pango_font_description_set_size(font1, fontSize * PANGO_SCALE);//设置字体大小 labelChild = gtk_bin_get_child(GTK_BIN( randomtogglebutton));//取出GtkButton里的label gtk_widget_modify_font(GTK_WIDGET(labelChild), font1);//设置label的字体, 这样这个GtkButton上面显示的字体就变了 deleteresourcetogglebutton = gtk_toggle_button_new_with_label("参审人员随机调整"); font1 = pango_font_description_from_string("Sans");//"Sans"字体名 pango_font_description_set_size(font1, fontSize * PANGO_SCALE);//设置字体大小 labelChild = gtk_bin_get_child(GTK_BIN( deleteresourcetogglebutton));//取出GtkButton里的label gtk_widget_modify_font(GTK_WIDGET(labelChild), font1);//设置label的字体, 这样这个GtkButton上面显示的字体就变了 ganttcharttogglebutton = gtk_toggle_button_new_with_label("干特图路径选择"); font1 = pango_font_description_from_string("Sans");//"Sans"字体名 pango_font_description_set_size(font1, fontSize * PANGO_SCALE);//设置字体大小 labelChild = gtk_bin_get_child(GTK_BIN( ganttcharttogglebutton));//取出GtkButton里的label gtk_widget_modify_font(GTK_WIDGET(labelChild), font1);//设置label的字体, 这样这个GtkButton上面显示的字体就变了 gtk_table_set_row_spacings(GTK_TABLE(table), 2); gtk_table_set_col_spacings(GTK_TABLE(table), 2); gtk_table_attach_defaults(GTK_TABLE(table), manulsettogglebutton, 0, 1, 0,1); gtk_table_attach_defaults(GTK_TABLE(table), randomtogglebutton, 0, 1, 1, 2); gtk_table_attach_defaults(GTK_TABLE(table), deleteresourcetogglebutton, 1, 2, 0, 1); gtk_table_attach_defaults(GTK_TABLE(table), ganttcharttogglebutton, 1, 2, 1, 2); gtk_signal_connect(GTK_OBJECT(randomtogglebutton), "toggle", GTK_SIGNAL_FUNC(select_random_task), view); gtk_signal_connect(GTK_OBJECT(deleteresourcetogglebutton), "toggle", GTK_SIGNAL_FUNC(select_deleteresource), view); priv->manulsettogglebutton = manulsettogglebutton; priv->randomtogglebutton = randomtogglebutton; priv->deleteresourcetogglebutton = deleteresourcetogglebutton; priv->ganttcharttogglebutton = ganttcharttogglebutton; //gtk_table_attach_defaults(GTK_TABLE(table), labelprobability,1,2,2,3); // gtk_table_attach_defaults(GTK_TABLE(table), togglebutton,0,2,3,4); gtk_box_pack_start(GTK_BOX (vbox), GTK_WIDGET (table), FALSE, FALSE, 0); //GtkButton, auto optimization button = gtk_button_new_with_label("Auto Optimization"); sw = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_ALWAYS, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (sw), priv->gantt); gtk_box_pack_start(GTK_BOX (vbox2), GTK_WIDGET (sw), TRUE, TRUE,0); gtk_widget_set_size_request(progressbar,150,36); gtk_box_pack_start(GTK_BOX (vbox2), GTK_WIDGET (progressbar), FALSE, FALSE, 0); priv->progressbar = progressbar; //put the GtkHBox in the GtkFrame, put the GtkVBox and GtkScrollWindow in the GtkHBox hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX (hbox), GTK_WIDGET (vbox), FALSE,TRUE, 0); gtk_box_pack_end(GTK_BOX (hbox), GTK_WIDGET (vbox2), TRUE, TRUE, 10); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); gtk_container_add (GTK_CONTAINER (frame), GTK_WIDGET (hbox)); //add the GtkFrame in the GtkVPaned gtk_paned_add2 (GTK_PANED (vpaned), frame); gtk_paned_set_position (GTK_PANED (vpaned), 250); g_signal_connect (tree, "row_expanded", G_CALLBACK (show_view_row_expanded), priv->gantt); g_signal_connect (tree, "row_collapsed", G_CALLBACK (show_view_row_collapsed), priv->gantt); gtk_tree_view_expand_all (GTK_TREE_VIEW (tree)); return vpaned; }
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); }