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