1 #include "disk.h"
2 
on_toplevel_changed()3 void on_toplevel_changed() {
4 
5 	/* update a disk view */
6 
7 	char *string;
8 	string = gtk_combo_box_text_get_active_text( GTK_COMBO_BOX_TEXT (combo_toplevel));
9 	if(string == NULL) {
10 		/* gtk_combo_box_remove_all() creates a signal for each removed entry */
11 		/* this function is called multiple times */
12 		//msg("Error! gtk_combo_box_text_get_active_text is empty!");
13 		return;
14 	}
15 
16 	/* we don't need these any more */
17 	if(tree != NULL) {
18 		gtk_widget_destroy(tree);
19 		tree = NULL;
20 	}
21 	if(tree1 != NULL) {
22 		gtk_widget_destroy(tree1);
23 		tree1 = NULL;
24 	}
25 
26 	/* what did user select? */
27 	if(strncmp(string, l.overview, 25) == 0) {
28 		/* display an overview of all disks */
29 		free(string);
30 		tree = create_treeview();
31 		populate_treeview();
32 		gtk_widget_show(tree);
33 	}
34 	else {
35 		/* display a particular disk */
36 		tree1 = create_treeview1();
37 		populate_treeview1(string); /* do we need to check return value? */
38 		gtk_widget_show(tree1);
39 		free(string);
40 	}
41 }
42 
toplevel_entries()43 void toplevel_entries() {
44 
45 	/* cleanup */
46 	gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(combo_toplevel));
47 	gtk_combo_box_text_append( GTK_COMBO_BOX_TEXT (combo_toplevel), 0, l.overview);
48 
49 	/* refresh the list of disks */
50 	if(all_disks != NULL)
51 		free(all_disks);
52 	all_disks = get_disks();
53 	if(all_disks == NULL) {
54 		msg("no disks found!");
55 		return;
56 	}
57 
58 	/* add each disk to the combo box */
59 	char *brk;
60 	char *one_disk = strtok_r( all_disks, " ", &brk);
61 
62 	while( one_disk != NULL ) {
63 		gtk_combo_box_text_append( GTK_COMBO_BOX_TEXT (combo_toplevel), NULL, one_disk);
64 		one_disk = strtok_r( NULL, " ", &brk);
65 	}
66 }
67 
on_geom_changed()68 void on_geom_changed() {
69 
70 	char *string;
71 	string = gtk_combo_box_text_get_active_text( GTK_COMBO_BOX_TEXT (combo_geom));
72 	if(string == NULL)
73 		return;
74 
75 	/* update disk information */
76 	gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(combo_disks));
77 	add_geoms();
78 	add_slices();
79 	add_partitions();
80 
81 	/* show only relevant widgets */
82 	hide_widgets();
83 
84 	if(strcmp(string, "create") == 0) {
85 		gtk_widget_show(GTK_WIDGET (combo_disks));
86 		gtk_widget_show(GTK_WIDGET (combo_schemes));
87 	}
88 
89 	else if(strcmp(string, "destroy") == 0) {
90 		gtk_widget_show(GTK_WIDGET (combo_disks));
91 	}
92 	else if(strcmp(string, "add") == 0) {
93 		gtk_widget_show(GTK_WIDGET (combo_disks));
94 		gtk_widget_show(GTK_WIDGET (text_size));
95 		gtk_widget_show(GTK_WIDGET (text_alignment));
96 	}
97 	else if(strcmp(string, "delete") == 0) {
98 		gtk_widget_show(GTK_WIDGET (combo_partitions));
99 	}
100 	else if(strcmp(string, "modify") == 0) {
101 		gtk_widget_show(GTK_WIDGET (combo_partitions));
102 	}
103 	else if(strcmp(string, "set") == 0) {
104 		gtk_widget_show(GTK_WIDGET (combo_partitions));
105 		gtk_widget_show(GTK_WIDGET (combo_bootoptions));
106 	}
107 	else if(strcmp(string, "unset") == 0) {
108 		gtk_widget_show(GTK_WIDGET (combo_partitions));
109 		gtk_widget_show(GTK_WIDGET (combo_bootoptions));
110 	}
111 	else if(strcmp(string, "resize") == 0) {
112 		gtk_widget_show(GTK_WIDGET (combo_partitions));
113 		gtk_widget_show(GTK_WIDGET (text_size));
114 		gtk_widget_show(GTK_WIDGET (text_alignment));
115 	}
116 	else if(strcmp(string, "bootcode") == 0) {
117 		gtk_widget_show(GTK_WIDGET (combo_bootcode));
118 		gtk_widget_show(GTK_WIDGET (gfile));
119 	}
120 	else if(strcmp(string, "file system") == 0) {
121 		gtk_widget_show(GTK_WIDGET (combo_partitions));
122 		gtk_widget_show(GTK_WIDGET (combo_filesystems));
123 		gtk_widget_show(GTK_WIDGET (text_label));
124 	}
125 }
126 
on_fs_changed()127 void on_fs_changed() {
128 
129 	char *string;
130 	string = gtk_combo_box_text_get_active_text( GTK_COMBO_BOX_TEXT (combo_filesystems));
131 	if(string == NULL)
132 		return;
133 
134 	/* hide all options */
135 	gtk_widget_hide(GTK_WIDGET (toggle_soft));
136 	gtk_widget_hide(GTK_WIDGET (toggle_journal));
137 	gtk_widget_hide(GTK_WIDGET (toggle_fast));
138 	gtk_widget_hide(GTK_WIDGET (toggle_comp));
139 
140 	/* ... but show relevant ones */
141 	if(strcmp(string, "ufs2") == 0) {
142 		gtk_widget_show(GTK_WIDGET (toggle_soft));
143 		gtk_widget_show(GTK_WIDGET (toggle_journal));
144 	}
145 
146 	else if(strcmp(string, "ntfs") == 0) {
147 		gtk_widget_show(GTK_WIDGET (toggle_fast));
148 		gtk_widget_show(GTK_WIDGET (toggle_comp));
149 	}
150 }
151 
on_bootcode_changed()152 void on_bootcode_changed() {
153 	char *string;
154 	string = gtk_combo_box_text_get_active_text( GTK_COMBO_BOX_TEXT (combo_bootcode));
155 	if(string == NULL)
156 		return;
157 		/* hide all widgets */
158 	gtk_widget_hide(GTK_WIDGET (combo_disks));
159 	gtk_widget_hide(GTK_WIDGET (combo_partitions));
160 
161 	if(strcmp(string, "Partition") == 0) {
162 		gtk_widget_show(GTK_WIDGET (combo_partitions));
163 	}
164 	else if(strcmp(string, "Disk") == 0) {
165 		gtk_widget_show(GTK_WIDGET (combo_disks));
166 	}
167 }
168 
on_disks_changed()169 void on_disks_changed() {
170 
171 	/*
172 	 * If "gpart add" then show only partition types that fit
173 	 * onto the scheme.
174 	 */
175 
176 	 	const gchar *gdisk = get_combo_box_disk(0);
177 	if( gdisk == NULL)
178 		return;
179 	char *string;
180 	string = gtk_combo_box_text_get_active_text( GTK_COMBO_BOX_TEXT (combo_geom));
181 	if(string == NULL)
182 		return;
183 	if( strncmp(string, "add", 3) != 0 )
184 		return;
185 
186 	char *scheme = get_scheme(gdisk);
187 	if(scheme == NULL) {
188 		msg("Error fetching partitioning scheme. Weird.");
189 		gtk_widget_destroy(thegrid);
190 		editor();
191 		return;
192 	}
193 	gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(combo_types) );
194 	add_types(scheme);
195 	if(( strncmp(scheme, "GPT", 3) == 0 ) || ( strncmp(scheme, "BSD", 3) == 0 ) )
196 		gtk_widget_show(GTK_WIDGET (text_label));
197 	else
198 		gtk_widget_hide(GTK_WIDGET (text_label) );
199 	free(scheme);
200 	gtk_widget_show(GTK_WIDGET (combo_types));
201 }
202 
203 
on_partitions_changed()204 void on_partitions_changed() {
205 
206 	/*
207 	 * If "gpart modify" then show only partition types that fit
208 	 * onto the scheme.
209 	 */
210 
211 	char *string;
212 	string = gtk_combo_box_text_get_active_text( GTK_COMBO_BOX_TEXT (combo_geom));
213 	if(string == NULL)
214 		return;
215 	if( strncmp(string, "modify", 6) != 0 )
216 		return;
217 
218 	char *gpartition = get_combo_box_partition(0);
219 	if(gpartition == NULL)
220 		return;
221 	find_p(gpartition);
222 	char *scheme = get_scheme(gpartition);
223 	if(scheme == NULL) {
224 		msg("error fetching partitioning scheme.Weird.");
225 		gtk_widget_destroy(thegrid);
226 		editor();
227 		return;
228 	}
229 	free(gpartition);
230 	gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(combo_types) );
231 	add_types(scheme);
232 	if(( strncmp(scheme, "GPT", 3) == 0 ) || ( strncmp(scheme, "BSD", 3) == 0 ) )
233 		gtk_widget_show(GTK_WIDGET (text_label));
234 	else
235 		gtk_widget_hide(GTK_WIDGET (text_label) );
236 	free(scheme);
237 	gtk_widget_show(GTK_WIDGET (combo_types));
238 
239 }
240 
on_scheme_changed()241 void on_scheme_changed() {
242 
243 	/**/
244 	const gchar *gscheme = get_combo_box_scheme();
245 	if (gscheme == NULL)
246 		return;
247 
248 	if(strncmp(gscheme, "GPT", 3) == 0)
249 		gtk_widget_show(text_entries);
250 	else
251 		gtk_widget_hide(text_entries);
252 }
253