Exemple #1
0
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);


}
Exemple #2
0
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);
}
Exemple #3
0
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);
}
Exemple #4
0
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);
}
Exemple #5
0
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;
		}
	}
}
Exemple #6
0
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);
	}
}
Exemple #7
0
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);
    }
}
Exemple #8
0
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);
	}
}
Exemple #9
0
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);
}
Exemple #10
0
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));
}
Exemple #11
0
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);
}
Exemple #12
0
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));
}
Exemple #13
0
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);
}
Exemple #14
0
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;
}
Exemple #15
0
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));
}
Exemple #16
0
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;
}
Exemple #17
0
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));
}
Exemple #18
0
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));
	}
}
Exemple #19
0
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);
}
Exemple #20
0
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;
}
Exemple #21
0
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;

}
Exemple #22
0
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);
}