465 |
return r_layer; |
return r_layer; |
466 |
} |
} |
467 |
|
|
468 |
|
enum { |
469 |
|
WMS_SERVER_COL_NAME = 0, |
470 |
|
WMS_SERVER_COL_DATA, |
471 |
|
WMS_SERVER_NUM_COLS |
472 |
|
}; |
473 |
|
|
474 |
|
typedef struct { |
475 |
|
appdata_t *appdata; |
476 |
|
wms_t *wms; |
477 |
|
GtkWidget *dialog, *view; |
478 |
|
GtkListStore *store; |
479 |
|
GtkWidget *but_add, *but_edit, *but_remove; |
480 |
|
GtkWidget *server_label, *path_label; |
481 |
|
} wms_server_context_t; |
482 |
|
|
483 |
|
static wms_server_t *get_selection(wms_server_context_t *context) { |
484 |
|
GtkTreeSelection *selection; |
485 |
|
GtkTreeModel *model; |
486 |
|
GtkTreeIter iter; |
487 |
|
|
488 |
|
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(context->view)); |
489 |
|
if(gtk_tree_selection_get_selected(selection, &model, &iter)) { |
490 |
|
wms_server_t *wms_server; |
491 |
|
gtk_tree_model_get(model, &iter, WMS_SERVER_COL_DATA, &wms_server, -1); |
492 |
|
return(wms_server); |
493 |
|
} |
494 |
|
|
495 |
|
return NULL; |
496 |
|
} |
497 |
|
|
498 |
|
static void wms_server_selected(wms_server_context_t *context, |
499 |
|
wms_server_t *selected) { |
500 |
|
|
501 |
|
if(!selected && context->wms->server && context->wms->path) { |
502 |
|
/* if the projects settings match a list entry, then select this */ |
503 |
|
|
504 |
|
GtkTreeSelection *selection = |
505 |
|
gtk_tree_view_get_selection(GTK_TREE_VIEW(context->view)); |
506 |
|
|
507 |
|
/* walk the entire store to get all values */ |
508 |
|
wms_server_t *server = NULL; |
509 |
|
GtkTreeIter iter; |
510 |
|
|
511 |
|
gboolean valid = |
512 |
|
gtk_tree_model_get_iter_first(GTK_TREE_MODEL(context->store), &iter); |
513 |
|
|
514 |
|
while(valid && !selected) { |
515 |
|
gtk_tree_model_get(GTK_TREE_MODEL(context->store), &iter, |
516 |
|
WMS_SERVER_COL_DATA, &server, -1); |
517 |
|
g_assert(server); |
518 |
|
|
519 |
|
if((strcmp(server->server, context->wms->server) == 0) && |
520 |
|
(strcmp(server->path, context->wms->path) == 0)) { |
521 |
|
gtk_tree_selection_select_iter(selection, &iter); |
522 |
|
selected = server; |
523 |
|
} |
524 |
|
|
525 |
|
valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(context->store), &iter); |
526 |
|
} |
527 |
|
} |
528 |
|
|
529 |
|
gtk_widget_set_sensitive(context->but_remove, selected != NULL); |
530 |
|
gtk_widget_set_sensitive(context->but_edit, selected != NULL); |
531 |
|
|
532 |
|
/* user can click ok if a entry is selected or if both fields are */ |
533 |
|
/* otherwise valid */ |
534 |
|
if(selected) { |
535 |
|
gtk_dialog_set_response_sensitive(GTK_DIALOG(context->dialog), |
536 |
|
GTK_RESPONSE_ACCEPT, TRUE); |
537 |
|
|
538 |
|
gtk_label_set_text(GTK_LABEL(context->server_label), selected->server); |
539 |
|
gtk_label_set_text(GTK_LABEL(context->path_label), selected->path); |
540 |
|
} else { |
541 |
|
gtk_dialog_set_response_sensitive(GTK_DIALOG(context->dialog), |
542 |
|
GTK_RESPONSE_ACCEPT, context->wms->server && context->wms->path); |
543 |
|
|
544 |
|
if(context->wms->server) |
545 |
|
gtk_label_set_text(GTK_LABEL(context->server_label), |
546 |
|
context->wms->server); |
547 |
|
if(context->wms->path) |
548 |
|
gtk_label_set_text(GTK_LABEL(context->path_label), |
549 |
|
context->wms->path); |
550 |
|
} |
551 |
|
} |
552 |
|
|
553 |
|
static gboolean |
554 |
|
wms_server_selection_func(GtkTreeSelection *selection, GtkTreeModel *model, |
555 |
|
GtkTreePath *path, gboolean path_currently_selected, |
556 |
|
gpointer userdata) { |
557 |
|
wms_server_context_t *context = (wms_server_context_t*)userdata; |
558 |
|
GtkTreeIter iter; |
559 |
|
|
560 |
|
if(gtk_tree_model_get_iter(model, &iter, path)) { |
561 |
|
wms_server_t *wms_server = NULL; |
562 |
|
|
563 |
|
g_assert(gtk_tree_path_get_depth(path) == 1); |
564 |
|
gtk_tree_model_get(model, &iter, WMS_SERVER_COL_DATA, &wms_server, -1); |
565 |
|
wms_server_selected(context, wms_server); |
566 |
|
} |
567 |
|
|
568 |
|
return TRUE; /* allow selection state to change */ |
569 |
|
} |
570 |
|
|
571 |
|
static void on_server_remove(GtkWidget *but, wms_server_context_t *context) { |
572 |
|
GtkTreeSelection *selection; |
573 |
|
GtkTreeModel *model; |
574 |
|
GtkTreeIter iter; |
575 |
|
|
576 |
|
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(context->view)); |
577 |
|
if(gtk_tree_selection_get_selected(selection, &model, &iter)) { |
578 |
|
wms_server_t *server = NULL; |
579 |
|
gtk_tree_model_get(model, &iter, WMS_SERVER_COL_DATA, &server, -1); |
580 |
|
|
581 |
|
g_assert(server); |
582 |
|
|
583 |
|
/* de-chain */ |
584 |
|
printf("de-chaining server %s\n", server->name); |
585 |
|
wms_server_t **prev = &context->appdata->settings->wms_server; |
586 |
|
while(*prev != server) prev = &((*prev)->next); |
587 |
|
*prev = server->next; |
588 |
|
|
589 |
|
/* free tag itself */ |
590 |
|
wms_server_free(server); |
591 |
|
|
592 |
|
/* and remove from store */ |
593 |
|
gtk_list_store_remove(GTK_LIST_STORE(model), &iter); |
594 |
|
} |
595 |
|
|
596 |
|
wms_server_selected(context, NULL); |
597 |
|
} |
598 |
|
|
599 |
|
static void callback_modified_name(GtkWidget *widget, gpointer data) { |
600 |
|
wms_server_context_t *context = (wms_server_context_t*)data; |
601 |
|
|
602 |
|
char *name = (char*)gtk_entry_get_text(GTK_ENTRY(widget)); |
603 |
|
|
604 |
|
/* name must not contain some special chars */ |
605 |
|
gboolean ok = TRUE; |
606 |
|
|
607 |
|
/* search all entries except the last (which is the one we are editing) */ |
608 |
|
wms_server_t *server = context->appdata->settings->wms_server; |
609 |
|
while(server && server->next) { |
610 |
|
if(strcasecmp(server->name, name) == 0) ok = FALSE; |
611 |
|
server = server->next; |
612 |
|
} |
613 |
|
|
614 |
|
GtkWidget *toplevel = gtk_widget_get_toplevel(widget); |
615 |
|
/* toplevel is a dialog only of dialog has been realized */ |
616 |
|
if(GTK_IS_DIALOG(toplevel)) |
617 |
|
gtk_dialog_set_response_sensitive( |
618 |
|
GTK_DIALOG(gtk_widget_get_toplevel(widget)), |
619 |
|
GTK_RESPONSE_ACCEPT, ok); |
620 |
|
} |
621 |
|
|
622 |
|
/* edit url and path of a given wms server entry */ |
623 |
|
gboolean wms_server_edit(wms_server_context_t *context, gboolean edit_name, |
624 |
|
wms_server_t *wms_server) { |
625 |
|
GtkWidget *dialog = gtk_dialog_new_with_buttons(_("Edit WMS Server"), |
626 |
|
GTK_WINDOW(context->dialog), GTK_DIALOG_MODAL, |
627 |
|
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, |
628 |
|
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, |
629 |
|
NULL); |
630 |
|
|
631 |
|
#ifdef USE_HILDON |
632 |
|
gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 50); |
633 |
|
#else |
634 |
|
gtk_window_set_default_size(GTK_WINDOW(dialog), 400, 50); |
635 |
|
#endif |
636 |
|
|
637 |
|
gtk_dialog_set_default_response(GTK_DIALOG(dialog), |
638 |
|
GTK_RESPONSE_ACCEPT); |
639 |
|
|
640 |
|
GtkWidget *label, *name, *server, *path; |
641 |
|
GtkWidget *table = gtk_table_new(2, 3, FALSE); |
642 |
|
|
643 |
|
gtk_table_attach(GTK_TABLE(table), |
644 |
|
label = gtk_label_new(_("Name:")), 0, 1, 0, 1, |
645 |
|
GTK_FILL, 0, 0, 0); |
646 |
|
gtk_misc_set_alignment(GTK_MISC(label), 0.f, 0.5f); |
647 |
|
gtk_table_attach_defaults(GTK_TABLE(table), |
648 |
|
name = gtk_entry_new(), 1, 2, 0, 1); |
649 |
|
gtk_entry_set_activates_default(GTK_ENTRY(name), TRUE); |
650 |
|
HILDON_ENTRY_NO_AUTOCAP(name); |
651 |
|
gtk_widget_set_sensitive(GTK_WIDGET(name), edit_name); |
652 |
|
g_signal_connect(G_OBJECT(name), "changed", |
653 |
|
G_CALLBACK(callback_modified_name), context); |
654 |
|
|
655 |
|
gtk_table_attach(GTK_TABLE(table), |
656 |
|
label = gtk_label_new(_("Server:")), 0, 1, 1, 2, |
657 |
|
GTK_FILL, 0, 0, 0); |
658 |
|
gtk_misc_set_alignment(GTK_MISC(label), 0.f, 0.5f); |
659 |
|
gtk_table_attach_defaults(GTK_TABLE(table), |
660 |
|
server = gtk_entry_new(), 1, 2, 1, 2); |
661 |
|
gtk_entry_set_activates_default(GTK_ENTRY(server), TRUE); |
662 |
|
HILDON_ENTRY_NO_AUTOCAP(server); |
663 |
|
|
664 |
|
gtk_table_attach(GTK_TABLE(table), |
665 |
|
label = gtk_label_new(_("Path:")), 0, 1, 2, 3, |
666 |
|
GTK_FILL, 0, 0, 0); |
667 |
|
gtk_misc_set_alignment(GTK_MISC(label), 0.f, 0.5f); |
668 |
|
gtk_table_attach_defaults(GTK_TABLE(table), |
669 |
|
path = gtk_entry_new(), 1, 2, 2, 3); |
670 |
|
gtk_entry_set_activates_default(GTK_ENTRY(path), TRUE); |
671 |
|
HILDON_ENTRY_NO_AUTOCAP(path); |
672 |
|
|
673 |
|
gtk_entry_set_text(GTK_ENTRY(name), wms_server->name); |
674 |
|
gtk_entry_set_text(GTK_ENTRY(server), wms_server->server); |
675 |
|
gtk_entry_set_text(GTK_ENTRY(path), wms_server->path); |
676 |
|
|
677 |
|
gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(dialog)->vbox), table); |
678 |
|
|
679 |
|
gtk_widget_show_all(dialog); |
680 |
|
|
681 |
|
if(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) { |
682 |
|
if(edit_name) { |
683 |
|
GtkTreeSelection *selection; |
684 |
|
GtkTreeModel *model; |
685 |
|
GtkTreeIter iter; |
686 |
|
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(context->view)); |
687 |
|
gtk_tree_selection_get_selected(selection, &model, &iter); |
688 |
|
gtk_list_store_set(context->store, &iter, |
689 |
|
WMS_SERVER_COL_NAME, wms_server->name, |
690 |
|
-1); |
691 |
|
|
692 |
|
g_free(wms_server->name); |
693 |
|
wms_server->name = strdup((char*)gtk_entry_get_text(GTK_ENTRY(name))); |
694 |
|
} |
695 |
|
|
696 |
|
g_free(wms_server->server); |
697 |
|
wms_server->server = strdup((char*)gtk_entry_get_text(GTK_ENTRY(server))); |
698 |
|
g_free(wms_server->path); |
699 |
|
wms_server->path = strdup((char*)gtk_entry_get_text(GTK_ENTRY(path))); |
700 |
|
printf("setting %s/%s\n", wms_server->server, wms_server->path); |
701 |
|
|
702 |
|
/* set texts below */ |
703 |
|
gtk_label_set_text(GTK_LABEL(context->server_label), wms_server->server); |
704 |
|
gtk_label_set_text(GTK_LABEL(context->path_label), wms_server->path); |
705 |
|
|
706 |
|
gtk_widget_destroy(dialog); |
707 |
|
|
708 |
|
return TRUE; |
709 |
|
} |
710 |
|
|
711 |
|
gtk_widget_destroy(dialog); |
712 |
|
return FALSE; |
713 |
|
} |
714 |
|
|
715 |
|
/* user clicked "edit..." button in the wms server list */ |
716 |
|
static void on_server_edit(GtkWidget *but, wms_server_context_t *context) { |
717 |
|
GtkTreeSelection *selection; |
718 |
|
GtkTreeModel *model; |
719 |
|
GtkTreeIter iter; |
720 |
|
|
721 |
|
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(context->view)); |
722 |
|
if(gtk_tree_selection_get_selected(selection, &model, &iter)) { |
723 |
|
wms_server_t *server = NULL; |
724 |
|
gtk_tree_model_get(model, &iter, WMS_SERVER_COL_DATA, &server, -1); |
725 |
|
g_assert(server); |
726 |
|
|
727 |
|
wms_server_edit(context, FALSE, server); |
728 |
|
} |
729 |
|
} |
730 |
|
|
731 |
|
/* user clicked "add..." button in the wms server list */ |
732 |
|
static void on_server_add(GtkWidget *but, wms_server_context_t *context) { |
733 |
|
|
734 |
|
/* attach a new server item to the chain */ |
735 |
|
wms_server_t **prev = &context->appdata->settings->wms_server; |
736 |
|
while(*prev) prev = &(*prev)->next; |
737 |
|
|
738 |
|
*prev = g_new0(wms_server_t, 1); |
739 |
|
(*prev)->name = g_strdup("<service name>"); |
740 |
|
(*prev)->server = g_strdup("<server url>"); |
741 |
|
(*prev)->path = g_strdup("<path in server>"); |
742 |
|
|
743 |
|
GtkTreeModel *model = |
744 |
|
gtk_tree_view_get_model(GTK_TREE_VIEW(context->view)); |
745 |
|
|
746 |
|
GtkTreeIter iter; |
747 |
|
gtk_list_store_append(GTK_LIST_STORE(model), &iter); |
748 |
|
gtk_list_store_set(GTK_LIST_STORE(model), &iter, |
749 |
|
WMS_SERVER_COL_NAME, (*prev)->name, |
750 |
|
WMS_SERVER_COL_DATA, *prev, |
751 |
|
-1); |
752 |
|
|
753 |
|
GtkTreeSelection *selection = |
754 |
|
gtk_tree_view_get_selection(GTK_TREE_VIEW(context->view)); |
755 |
|
gtk_tree_selection_select_iter(selection, &iter); |
756 |
|
|
757 |
|
if(!wms_server_edit(context, TRUE, *prev)) { |
758 |
|
/* user has cancelled request. remove newly added item */ |
759 |
|
printf("user clicked cancel\n"); |
760 |
|
|
761 |
|
wms_server_free(*prev); |
762 |
|
*prev = NULL; |
763 |
|
|
764 |
|
gtk_list_store_remove(GTK_LIST_STORE(model), &iter); |
765 |
|
} else |
766 |
|
/* update name from edit result */ |
767 |
|
gtk_list_store_set(GTK_LIST_STORE(model), &iter, |
768 |
|
WMS_SERVER_COL_NAME, (*prev)->name, |
769 |
|
-1); |
770 |
|
|
771 |
|
wms_server_selected(context, *prev); |
772 |
|
} |
773 |
|
|
774 |
|
/* widget to select a wms server from a list */ |
775 |
|
static GtkWidget *wms_server_widget(wms_server_context_t *context) { |
776 |
|
|
777 |
|
GtkWidget *vbox = gtk_vbox_new(FALSE,3); |
778 |
|
context->view = gtk_tree_view_new(); |
779 |
|
|
780 |
|
gtk_tree_selection_set_select_function( |
781 |
|
gtk_tree_view_get_selection(GTK_TREE_VIEW(context->view)), |
782 |
|
wms_server_selection_func, |
783 |
|
context, NULL); |
784 |
|
|
785 |
|
/* --- "Name" column --- */ |
786 |
|
GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); |
787 |
|
gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(context->view), |
788 |
|
-1, _("Name"), renderer, "text", WMS_SERVER_COL_NAME, NULL); |
789 |
|
|
790 |
|
|
791 |
|
/* build and fill the store */ |
792 |
|
context->store = gtk_list_store_new(WMS_SERVER_NUM_COLS, |
793 |
|
G_TYPE_STRING, G_TYPE_POINTER); |
794 |
|
|
795 |
|
gtk_tree_view_set_model(GTK_TREE_VIEW(context->view), |
796 |
|
GTK_TREE_MODEL(context->store)); |
797 |
|
|
798 |
|
GtkTreeIter iter; |
799 |
|
wms_server_t *wms_server = context->appdata->settings->wms_server; |
800 |
|
while(wms_server) { |
801 |
|
/* Append a row and fill in some data */ |
802 |
|
gtk_list_store_append(context->store, &iter); |
803 |
|
gtk_list_store_set(context->store, &iter, |
804 |
|
WMS_SERVER_COL_NAME, wms_server->name, |
805 |
|
WMS_SERVER_COL_DATA, wms_server, |
806 |
|
-1); |
807 |
|
|
808 |
|
wms_server = wms_server->next; |
809 |
|
} |
810 |
|
|
811 |
|
g_object_unref(context->store); |
812 |
|
|
813 |
|
/* put it into a scrolled window */ |
814 |
|
GtkWidget *scrolled_window = gtk_scrolled_window_new(NULL, NULL); |
815 |
|
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), |
816 |
|
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); |
817 |
|
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), |
818 |
|
GTK_SHADOW_ETCHED_IN); |
819 |
|
gtk_container_add(GTK_CONTAINER(scrolled_window), context->view); |
820 |
|
|
821 |
|
gtk_box_pack_start_defaults(GTK_BOX(vbox), scrolled_window); |
822 |
|
|
823 |
|
/* ------- button box ------------ */ |
824 |
|
|
825 |
|
GtkWidget *hbox = gtk_hbox_new(TRUE,3); |
826 |
|
|
827 |
|
context->but_add = gtk_button_new_with_label(_("Add...")); |
828 |
|
gtk_box_pack_start_defaults(GTK_BOX(hbox), context->but_add); |
829 |
|
gtk_signal_connect(GTK_OBJECT(context->but_add), "clicked", |
830 |
|
GTK_SIGNAL_FUNC(on_server_add), context); |
831 |
|
|
832 |
|
context->but_edit = gtk_button_new_with_label(_("Edit...")); |
833 |
|
gtk_box_pack_start_defaults(GTK_BOX(hbox), context->but_edit); |
834 |
|
gtk_signal_connect(GTK_OBJECT(context->but_edit), "clicked", |
835 |
|
GTK_SIGNAL_FUNC(on_server_edit), context); |
836 |
|
|
837 |
|
context->but_remove = gtk_button_new_with_label(_("Remove")); |
838 |
|
gtk_box_pack_start_defaults(GTK_BOX(hbox), context->but_remove); |
839 |
|
gtk_signal_connect(GTK_OBJECT(context->but_remove), "clicked", |
840 |
|
GTK_SIGNAL_FUNC(on_server_remove), context); |
841 |
|
|
842 |
|
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); |
843 |
|
return vbox; |
844 |
|
} |
845 |
|
|
846 |
static gboolean wms_server_dialog(appdata_t *appdata, wms_t *wms) { |
static gboolean wms_server_dialog(appdata_t *appdata, wms_t *wms) { |
847 |
gboolean ok = FALSE; |
gboolean ok = FALSE; |
848 |
|
|
849 |
GtkWidget *dialog = gtk_dialog_new_with_buttons(_("WMS Setup"), |
wms_server_context_t *context = g_new0(wms_server_context_t, 1); |
850 |
|
context->appdata = appdata; |
851 |
|
context->wms = wms; |
852 |
|
|
853 |
|
context->dialog = gtk_dialog_new_with_buttons(_("WMS Server Selection"), |
854 |
GTK_WINDOW(appdata->window), GTK_DIALOG_MODAL, |
GTK_WINDOW(appdata->window), GTK_DIALOG_MODAL, |
855 |
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, |
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, |
856 |
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, |
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, |
857 |
NULL); |
NULL); |
858 |
|
|
859 |
#ifdef USE_HILDON |
#ifdef USE_HILDON |
860 |
/* making the dialog a little wider makes it less "crowded" */ |
gtk_window_set_default_size(GTK_WINDOW(context->dialog), 500, 300); |
|
gtk_window_set_default_size(GTK_WINDOW(dialog), 640, 50); |
|
861 |
#else |
#else |
862 |
gtk_window_set_default_size(GTK_WINDOW(dialog), 400, 50); |
gtk_window_set_default_size(GTK_WINDOW(context->dialog), 400, 200); |
863 |
#endif |
#endif |
864 |
|
|
865 |
|
/* server selection box */ |
866 |
|
gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(context->dialog)->vbox), |
867 |
|
wms_server_widget(context)); |
868 |
|
|
869 |
|
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(context->dialog)->vbox), |
870 |
|
gtk_hseparator_new(), FALSE, FALSE, 0); |
871 |
|
|
872 |
GtkWidget *label; |
GtkWidget *label; |
873 |
GtkWidget *table = gtk_table_new(2, 2, FALSE); // x, y |
GtkWidget *table = gtk_table_new(2, 2, FALSE); // x, y |
874 |
|
gtk_table_set_col_spacing(GTK_TABLE(table), 0, 10); |
875 |
|
|
876 |
label = gtk_label_new(_("Server:")); |
label = gtk_label_new(_("Server:")); |
877 |
gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f); |
gtk_misc_set_alignment(GTK_MISC(label), 0.f, 0.5f); |
878 |
gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, 0,0,0,0); |
gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, GTK_FILL, 0,0,0); |
879 |
GtkWidget *server_entry = gtk_entry_new(); |
context->server_label = gtk_label_new(""); |
880 |
HILDON_ENTRY_NO_AUTOCAP(server_entry); |
gtk_label_set_ellipsize(GTK_LABEL(context->server_label), |
881 |
gtk_entry_set_text(GTK_ENTRY(server_entry), wms->server); |
PANGO_ELLIPSIZE_MIDDLE); |
882 |
gtk_table_attach_defaults(GTK_TABLE(table), server_entry, 1, 2, 0, 1); |
gtk_misc_set_alignment(GTK_MISC(context->server_label), 0.f, 0.5f); |
883 |
|
gtk_table_attach_defaults(GTK_TABLE(table), context->server_label, |
884 |
|
1, 2, 0, 1); |
885 |
|
|
886 |
label = gtk_label_new(_("Path:")); |
label = gtk_label_new(_("Path:")); |
887 |
gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f); |
gtk_misc_set_alignment(GTK_MISC(label), 0.f, 0.5f); |
888 |
gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, 0,0,0,0); |
gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, GTK_FILL, 0,0,0); |
889 |
GtkWidget *path_entry = gtk_entry_new(); |
context->path_label = gtk_label_new(""); |
890 |
HILDON_ENTRY_NO_AUTOCAP(path_entry); |
gtk_label_set_ellipsize(GTK_LABEL(context->path_label), |
891 |
gtk_entry_set_text(GTK_ENTRY(path_entry), wms->path); |
PANGO_ELLIPSIZE_MIDDLE); |
892 |
gtk_table_attach_defaults(GTK_TABLE(table), path_entry, 1, 2, 1, 2); |
gtk_misc_set_alignment(GTK_MISC(context->path_label), 0.f, 0.5f); |
893 |
|
gtk_table_attach_defaults(GTK_TABLE(table), context->path_label, |
894 |
|
1, 2, 1, 2); |
895 |
|
|
896 |
gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(dialog)->vbox), table); |
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(context->dialog)->vbox), |
897 |
gtk_widget_show_all(dialog); |
table, FALSE, FALSE, 0); |
898 |
|
|
899 |
|
|
900 |
|
wms_server_selected(context, NULL); |
901 |
|
|
902 |
|
gtk_widget_show_all(context->dialog); |
903 |
|
|
904 |
if(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) { |
if(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(context->dialog))) { |
905 |
wms->server = g_strdup(gtk_entry_get_text(GTK_ENTRY(server_entry))); |
wms_server_t *server = get_selection(context); |
906 |
wms->path = g_strdup(gtk_entry_get_text(GTK_ENTRY(path_entry))); |
if(server) { |
907 |
ok = TRUE; |
/* fetch parameters from selected entry */ |
908 |
|
printf("WMS: using %s\n", server->name); |
909 |
|
if(wms->server) g_free(wms->server); |
910 |
|
wms->server = g_strdup(server->server); |
911 |
|
if(wms->path) g_free(wms->path); |
912 |
|
wms->path = g_strdup(server->path); |
913 |
|
ok = TRUE; |
914 |
|
} else { |
915 |
|
if(wms->server && wms->path) |
916 |
|
ok = TRUE; |
917 |
|
|
918 |
|
} |
919 |
} |
} |
920 |
|
|
921 |
gtk_widget_destroy(dialog); |
gtk_widget_destroy(context->dialog); |
922 |
|
|
923 |
|
g_free(context); |
924 |
return ok; |
return ok; |
925 |
} |
} |
926 |
|
|
1154 |
|
|
1155 |
char *url = g_strdup_printf("%s%s" |
char *url = g_strdup_printf("%s%s" |
1156 |
"%sSERVICE=wms" |
"%sSERVICE=wms" |
1157 |
"&WMTVER=1.1.1" |
// "&WMTVER=1.1.1" |
1158 |
|
"&VERSION=1.1.1" |
1159 |
"&REQUEST=GetCapabilities", |
"&REQUEST=GetCapabilities", |
1160 |
wms->server, wms->path, append_char); |
wms->server, wms->path, append_char); |
1161 |
|
|
1233 |
/* start building url */ |
/* start building url */ |
1234 |
url = g_strdup_printf("%s%s" |
url = g_strdup_printf("%s%s" |
1235 |
"%sSERVICE=wms" |
"%sSERVICE=wms" |
1236 |
"&WMTVER=1.1.1" |
// "&WMTVER=1.1.1" |
1237 |
|
"&VERSION=1.1.1" |
1238 |
"&REQUEST=GetMap" |
"&REQUEST=GetMap" |
1239 |
"&LAYERS=", |
"&LAYERS=", |
1240 |
wms->server, wms->path, append_char); |
wms->server, wms->path, append_char); |
1269 |
char minlon[G_ASCII_DTOSTR_BUF_SIZE], minlat[G_ASCII_DTOSTR_BUF_SIZE]; |
char minlon[G_ASCII_DTOSTR_BUF_SIZE], minlat[G_ASCII_DTOSTR_BUF_SIZE]; |
1270 |
char maxlon[G_ASCII_DTOSTR_BUF_SIZE], maxlat[G_ASCII_DTOSTR_BUF_SIZE]; |
char maxlon[G_ASCII_DTOSTR_BUF_SIZE], maxlat[G_ASCII_DTOSTR_BUF_SIZE]; |
1271 |
|
|
1272 |
|
/* build strings of min and max lat and lon to be used in url */ |
1273 |
g_ascii_dtostr(minlon, sizeof(minlon), appdata->project->min.lon); |
g_ascii_dtostr(minlon, sizeof(minlon), appdata->project->min.lon); |
1274 |
g_ascii_dtostr(minlat, sizeof(minlat), appdata->project->min.lat); |
g_ascii_dtostr(minlat, sizeof(minlat), appdata->project->min.lat); |
1275 |
g_ascii_dtostr(maxlon, sizeof(maxlon), appdata->project->max.lon); |
g_ascii_dtostr(maxlon, sizeof(maxlon), appdata->project->max.lon); |
1276 |
g_ascii_dtostr(maxlat, sizeof(maxlat), appdata->project->max.lat); |
g_ascii_dtostr(maxlat, sizeof(maxlat), appdata->project->max.lat); |
1277 |
|
|
1278 |
|
/* find preferred supported video format */ |
1279 |
gint format = 0; |
gint format = 0; |
1280 |
while(!(wms->cap->request->getmap->format & (1<<format))) |
while(!(wms->cap->request->getmap->format & (1<<format))) |
1281 |
format++; |
format++; |
1283 |
const char *formats[] = { "image/jpg", "image/jpeg", |
const char *formats[] = { "image/jpg", "image/jpeg", |
1284 |
"image/png", "image/gif" }; |
"image/png", "image/gif" }; |
1285 |
|
|
1286 |
|
/* build complete url */ |
1287 |
old = url; |
old = url; |
1288 |
url = g_strdup_printf("%s&SRS=EPSG:4326&BBOX=%s,%s,%s,%s" |
url = g_strdup_printf("%s&SRS=EPSG:4326&BBOX=%s,%s,%s,%s" |
1289 |
"&WIDTH=%d&HEIGHT=%d&FORMAT=%s&reaspect=false", url, |
"&WIDTH=%d&HEIGHT=%d&FORMAT=%s" |
1290 |
|
"&reaspect=false", url, |
1291 |
minlon, minlat, maxlon, maxlat, wms->width, |
minlon, minlat, maxlon, maxlat, wms->width, |
1292 |
wms->height, formats[format]); |
wms->height, formats[format]); |
1293 |
g_free(old); |
g_free(old); |
1378 |
} |
} |
1379 |
} |
} |
1380 |
|
|
1381 |
|
struct server_preset_s { |
1382 |
|
char *name, *server, *path; |
1383 |
|
} default_servers[] = { |
1384 |
|
{ "NASA landsat", "http://onearth.jpl.nasa.gov", "/wms.cgi" }, |
1385 |
|
/* add more servers here ... */ |
1386 |
|
{ NULL, NULL, NULL } |
1387 |
|
}; |
1388 |
|
|
1389 |
|
wms_server_t *wms_server_get_default(void) { |
1390 |
|
wms_server_t *server = NULL, **cur = &server; |
1391 |
|
struct server_preset_s *preset = default_servers; |
1392 |
|
|
1393 |
|
while(preset->name) { |
1394 |
|
*cur = g_new0(wms_server_t, 1); |
1395 |
|
(*cur)->name = g_strdup(preset->name); |
1396 |
|
(*cur)->server = g_strdup(preset->server); |
1397 |
|
(*cur)->path = g_strdup(preset->path); |
1398 |
|
cur = &(*cur)->next; |
1399 |
|
preset++; |
1400 |
|
} |
1401 |
|
|
1402 |
|
return server; |
1403 |
|
} |
1404 |
|
|
1405 |
|
void wms_server_free(wms_server_t *wms_server) { |
1406 |
|
if(wms_server->name) g_free(wms_server->name); |
1407 |
|
if(wms_server->server) g_free(wms_server->server); |
1408 |
|
if(wms_server->path) g_free(wms_server->path); |
1409 |
|
g_free(wms_server); |
1410 |
|
} |
1411 |
|
|
1412 |
|
void wms_servers_free(wms_server_t *wms_server) { |
1413 |
|
while(wms_server) { |
1414 |
|
wms_server_t *next = wms_server->next; |
1415 |
|
wms_server_free(wms_server); |
1416 |
|
wms_server = next; |
1417 |
|
} |
1418 |
|
} |