286 |
|
|
287 |
|
void changeSelected(GtkTreeSelection* selection, MapSelector* data) |
288 |
|
{ |
289 |
< |
cout << "STUB: changeSelected\n\a" << flush; |
289 |
> |
if (gtk_tree_selection_count_selected_rows(selection) > 0) |
290 |
> |
{ |
291 |
> |
gtk_widget_set_sensitive(data->remove, true); |
292 |
> |
|
293 |
> |
GtkTreeModel* store = gtk_tree_view_get_model(GTK_TREE_VIEW( |
294 |
> |
data->selected)); |
295 |
> |
GtkTreeIter first, last; |
296 |
> |
|
297 |
> |
gtk_tree_model_get_iter_first(store, &first); |
298 |
> |
gtk_tree_model_iter_nth_child(store, &last, NULL, |
299 |
> |
gtk_tree_model_iter_n_children(store, NULL) - 1); |
300 |
> |
|
301 |
> |
if (!gtk_tree_selection_iter_is_selected(selection, &first)) |
302 |
> |
{ |
303 |
> |
gtk_widget_set_sensitive(data->up, true); |
304 |
> |
} |
305 |
> |
else |
306 |
> |
{ |
307 |
> |
gtk_widget_set_sensitive(data->up, false); |
308 |
> |
} |
309 |
> |
|
310 |
> |
if (!gtk_tree_selection_iter_is_selected(selection, &last)) |
311 |
> |
{ |
312 |
> |
gtk_widget_set_sensitive(data->down, true); |
313 |
> |
} |
314 |
> |
else |
315 |
> |
{ |
316 |
> |
gtk_widget_set_sensitive(data->down, false); |
317 |
> |
} |
318 |
> |
} |
319 |
> |
else |
320 |
> |
{ |
321 |
> |
gtk_widget_set_sensitive(data->remove, false); |
322 |
> |
gtk_widget_set_sensitive(data->up, false); |
323 |
> |
gtk_widget_set_sensitive(data->down, false); |
324 |
> |
} |
325 |
|
} |
326 |
|
|
327 |
|
void mapAdd(GtkWidget* widget, MapSelector* data) |
328 |
|
{ |
329 |
< |
cout << "STUB: add\n\a" << flush; |
329 |
> |
GtkTreeSelection* additions = gtk_tree_view_get_selection(GTK_TREE_VIEW( |
330 |
> |
data->available)); |
331 |
> |
|
332 |
> |
if (debug) cerr << "additions = {\n"; |
333 |
> |
|
334 |
> |
data->counter = 0; |
335 |
> |
gtk_tree_selection_selected_foreach(additions, mapAddEach, data); |
336 |
> |
|
337 |
> |
if (debug) cerr << "}\n"; |
338 |
> |
|
339 |
> |
gtk_tree_selection_unselect_all(additions); |
340 |
> |
} |
341 |
> |
|
342 |
> |
void mapAddEach(GtkTreeModel* model, GtkTreePath* path, GtkTreeIter* iter, |
343 |
> |
MapSelector* data) |
344 |
> |
{ |
345 |
> |
if (debug) |
346 |
> |
{ |
347 |
> |
char* number = gtk_tree_model_get_string_from_iter(model, iter); |
348 |
> |
|
349 |
> |
cerr << " [" << data->counter++ << "] = " << number << "\n"; |
350 |
> |
|
351 |
> |
g_free(number); |
352 |
> |
} |
353 |
> |
|
354 |
> |
char* addition; |
355 |
> |
|
356 |
> |
gtk_tree_model_get(model, iter, 0, &addition, -1); |
357 |
> |
|
358 |
> |
GtkTreeModel* store = gtk_tree_view_get_model(GTK_TREE_VIEW(data->selected) |
359 |
> |
); |
360 |
> |
GtkTreeIter itor; |
361 |
> |
|
362 |
> |
gtk_list_store_append(GTK_LIST_STORE(store), &itor); |
363 |
> |
gtk_list_store_set(GTK_LIST_STORE(store), &itor, 0, addition, -1); |
364 |
> |
|
365 |
> |
g_free(addition); |
366 |
|
} |
367 |
|
|
368 |
|
void mapRemove(GtkWidget* widget, MapSelector* data) |
369 |
|
{ |
370 |
< |
cout << "STUB: remove\n\a" << flush; |
370 |
> |
GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( |
371 |
> |
data->selected)); |
372 |
> |
GtkTreeModel* store = gtk_tree_view_get_model(GTK_TREE_VIEW(data->selected) |
373 |
> |
); |
374 |
> |
GList* removals = gtk_tree_selection_get_selected_rows(selection, &store); |
375 |
> |
|
376 |
> |
if (debug) cerr << "removals = {\n"; |
377 |
> |
|
378 |
> |
removals = g_list_reverse(removals); |
379 |
> |
data->counter = g_list_length(removals) - 1; |
380 |
> |
g_list_foreach(removals, mapRemoveEach, data); |
381 |
> |
|
382 |
> |
if (debug) cerr << "}\n"; |
383 |
> |
|
384 |
> |
g_list_free(removals); |
385 |
> |
gtk_tree_selection_unselect_all(selection); |
386 |
> |
} |
387 |
> |
|
388 |
> |
void mapRemoveEach(GtkTreePath* path, MapSelector* data) |
389 |
> |
{ |
390 |
> |
if (debug) |
391 |
> |
{ |
392 |
> |
char* number = gtk_tree_path_to_string(path); |
393 |
> |
|
394 |
> |
cerr << " [" << data->counter-- << "] = " << number << "\n"; |
395 |
> |
|
396 |
> |
g_free(number); |
397 |
> |
} |
398 |
> |
|
399 |
> |
GtkTreeModel* store = gtk_tree_view_get_model(GTK_TREE_VIEW(data->selected) |
400 |
> |
); |
401 |
> |
GtkTreeIter itor; |
402 |
> |
|
403 |
> |
gtk_tree_model_get_iter(store, &itor, path); |
404 |
> |
gtk_list_store_remove(GTK_LIST_STORE(store), &itor); |
405 |
|
} |
406 |
|
|
407 |
|
void mapUp(GtkWidget* widget, MapSelector* data) |
408 |
|
{ |
409 |
< |
cout << "STUB: up\n\a" << flush; |
409 |
> |
GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( |
410 |
> |
data->selected)); |
411 |
> |
GtkTreeModel* store = gtk_tree_view_get_model(GTK_TREE_VIEW(data->selected) |
412 |
> |
); |
413 |
> |
GList* ups = gtk_tree_selection_get_selected_rows(selection, &store); |
414 |
> |
|
415 |
> |
if (debug) cerr << "ups = {\n"; |
416 |
> |
|
417 |
> |
data->counter = 0; |
418 |
> |
data->insert = 0; |
419 |
> |
g_list_foreach(ups, mapUpEach, data); |
420 |
> |
|
421 |
> |
if (debug) cerr << "}\n"; |
422 |
> |
|
423 |
> |
g_list_free(ups); |
424 |
> |
} |
425 |
> |
|
426 |
> |
void mapUpEach(GtkTreePath* path, MapSelector* data) |
427 |
> |
{ |
428 |
> |
if (debug) |
429 |
> |
{ |
430 |
> |
char* number = gtk_tree_path_to_string(path); |
431 |
> |
|
432 |
> |
cerr << " [" << data->counter++ << "] = " << number << "\n"; |
433 |
> |
|
434 |
> |
g_free(number); |
435 |
> |
} |
436 |
> |
|
437 |
> |
if (data->insert == 0) |
438 |
> |
{ |
439 |
> |
int* number = gtk_tree_path_get_indices(path); |
440 |
> |
|
441 |
> |
data->insert = *number - 1; |
442 |
> |
} |
443 |
> |
|
444 |
> |
GtkTreeModel* store = gtk_tree_view_get_model(GTK_TREE_VIEW(data->selected) |
445 |
> |
); |
446 |
> |
GtkTreeIter itor; |
447 |
> |
char* up; |
448 |
> |
|
449 |
> |
gtk_tree_model_get_iter(store, &itor, path); |
450 |
> |
gtk_tree_model_get(store, &itor, 0, &up, -1); |
451 |
> |
gtk_list_store_remove(GTK_LIST_STORE(store), &itor); |
452 |
> |
gtk_list_store_insert(GTK_LIST_STORE(store), &itor, data->insert++); |
453 |
> |
gtk_list_store_set(GTK_LIST_STORE(store), &itor, 0, up, -1); |
454 |
> |
|
455 |
> |
GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( |
456 |
> |
data->selected)); |
457 |
> |
|
458 |
> |
gtk_tree_selection_select_iter(selection, &itor); |
459 |
> |
g_free(up); |
460 |
|
} |
461 |
|
|
462 |
|
void mapDown(GtkWidget* widget, MapSelector* data) |
463 |
|
{ |
464 |
< |
cout << "STUB: down\n\a" << flush; |
464 |
> |
GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( |
465 |
> |
data->selected)); |
466 |
> |
GtkTreeModel* store = gtk_tree_view_get_model(GTK_TREE_VIEW(data->selected) |
467 |
> |
); |
468 |
> |
GList* downs = gtk_tree_selection_get_selected_rows(selection, &store); |
469 |
> |
|
470 |
> |
if (debug) cerr << "downs = {\n"; |
471 |
> |
|
472 |
> |
downs = g_list_reverse(downs); |
473 |
> |
data->counter = g_list_length(downs) - 1; |
474 |
> |
data->insert = 0; |
475 |
> |
g_list_foreach(downs, mapDownEach, data); |
476 |
> |
|
477 |
> |
if (debug) cerr << "}\n"; |
478 |
> |
|
479 |
> |
g_list_free(downs); |
480 |
> |
} |
481 |
> |
|
482 |
> |
void mapDownEach(GtkTreePath* path, MapSelector* data) |
483 |
> |
{ |
484 |
> |
if (debug) |
485 |
> |
{ |
486 |
> |
char* number = gtk_tree_path_to_string(path); |
487 |
> |
|
488 |
> |
cerr << " [" << data->counter-- << "] = " << number << "\n"; |
489 |
> |
|
490 |
> |
g_free(number); |
491 |
> |
} |
492 |
> |
|
493 |
> |
if (data->insert == 0) |
494 |
> |
{ |
495 |
> |
int* number = gtk_tree_path_get_indices(path); |
496 |
> |
|
497 |
> |
data->insert = *number + 1; |
498 |
> |
} |
499 |
> |
|
500 |
> |
GtkTreeModel* store = gtk_tree_view_get_model(GTK_TREE_VIEW(data->selected) |
501 |
> |
); |
502 |
> |
GtkTreeIter itor; |
503 |
> |
char* down; |
504 |
> |
|
505 |
> |
gtk_tree_model_get_iter(store, &itor, path); |
506 |
> |
gtk_tree_model_get(store, &itor, 0, &down, -1); |
507 |
> |
gtk_list_store_remove(GTK_LIST_STORE(store), &itor); |
508 |
> |
gtk_list_store_insert(GTK_LIST_STORE(store), &itor, data->insert--); |
509 |
> |
gtk_list_store_set(GTK_LIST_STORE(store), &itor, 0, down, -1); |
510 |
> |
|
511 |
> |
GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( |
512 |
> |
data->selected)); |
513 |
> |
|
514 |
> |
gtk_tree_selection_select_iter(selection, &itor); |
515 |
> |
g_free(down); |
516 |
|
} |
517 |
|
|
518 |
|
#endif |