static GtkWidget * task_view_get_widget (PlannerView *view) { PlannerTaskViewPriv *priv; MrpProject *project; GtkWidget *sw; PlannerGanttModel *model; priv = PLANNER_TASK_VIEW (view)->priv; if (priv->tree == NULL) { project = planner_window_get_project (view->main_window); g_signal_connect (project, "loaded", G_CALLBACK (task_view_project_loaded_cb), view); sw = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); priv->frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (priv->frame), GTK_SHADOW_IN); gtk_container_add (GTK_CONTAINER (priv->frame), sw); model = planner_gantt_model_new (project); priv->tree = planner_task_tree_new (view->main_window, model, TRUE, FALSE, /* i18n: WBS is sort for work breakdown structure, and is a * project management term. You might want to leave it * untranslated unless there is a localized term for it. */ 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"), /* i18n: The string "% Complete" will be used in the header * of a column containing values from 0 upto 100, indicating * what part of a task has been completed. * xgettext:no-c-format */ COL_COMPLETE, _("% Complete"), -1); g_object_unref (model); task_view_load_columns (view); gtk_container_add (GTK_CONTAINER (sw), priv->tree); g_signal_connect (priv->tree, "columns-changed", G_CALLBACK (task_view_tree_view_columns_changed_cb), view); g_signal_connect (priv->tree, "destroy", G_CALLBACK (task_view_tree_view_destroy_cb), view); g_signal_connect (priv->tree, "selection-changed", G_CALLBACK (task_view_selection_changed_cb), view); g_signal_connect (priv->tree, "relation-added", G_CALLBACK (task_view_relations_changed_cb), view); g_signal_connect (priv->tree, "relation-removed", G_CALLBACK (task_view_relations_changed_cb), view); gtk_widget_show (priv->tree); gtk_widget_show (sw); gtk_widget_show (priv->frame); } return priv->frame; }
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; }