X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=src%2Fmoonshot-idcard-widget.vala;h=25976b3cb09f57ad8ed40dc8d7abdbdc95f8f143;hb=6b9c02ac9b2331291f26a3612cf35a44d5f55aff;hp=6a9c8e8c3aa7aa12d5995e32693931ff2d46217c;hpb=47af2e6683d93e3ac0425407db4e1793bad168a2;p=moonshot-ui.git diff --git a/src/moonshot-idcard-widget.vala b/src/moonshot-idcard-widget.vala index 6a9c8e8..25976b3 100644 --- a/src/moonshot-idcard-widget.vala +++ b/src/moonshot-idcard-widget.vala @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2014, JANET(UK) + * Copyright (c) 2011-2016, JANET(UK) * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -33,153 +33,171 @@ using Gtk; class IdCardWidget : Box { - public IdCard id_card { get; set; default = null; } + // static MoonshotLogger logger = get_logger("IdCardWidget"); + + private static const ShadowType ARROW_SHADOW = ShadowType.NONE; + + private IdentityManagerView manager_view; + public IdCard id_card { get; set; default = null; } private VBox main_vbox; - private HBox table; - public Button delete_button { get; private set; default = null; } - public Button details_button { get; private set; default = null; } - public Button send_button { get; private set; default = null; } - private HButtonBox hbutton_box; + private HBox hbox; private EventBox event_box; + private bool is_selected = false; + private Arrow arrow; - private Label label; + private VBox details; + + internal int _position = 0; + internal int position { + get {return _position;} + set {_position = value; set_idcard_color();} + } public signal void expanded(); - public signal void remove_id(); - public signal void details_id(); - public signal void send_id(); + public signal void collapsed(); - public void collapse() + internal void select() { - this.hbutton_box.set_visible(false); + expand(); + this.expanded(); + } - set_idcard_color(); + internal void unselect() + { + collapse(); + this.collapsed(); } public void expand() { - this.hbutton_box.set_visible(true); + is_selected = true; + details.show_all(); set_idcard_color(); - this.expanded(); + arrow.set(ArrowType.DOWN, ARROW_SHADOW); } - private bool button_press_cb() + public void collapse() { - if (hbutton_box.get_visible()) - collapse(); - else - expand(); + is_selected = false; + details.hide(); - return false; - } - - private void delete_button_cb() - { - this.remove_id(); + set_idcard_color(); + arrow.set(ArrowType.RIGHT, ARROW_SHADOW); } - private void details_button_cb() + private bool button_press_cb() { - this.details_id(); - } + if (is_selected) + unselect(); + else + select(); - private void send_button_cb() - { - this.send_id(); + return false; } private void set_idcard_color() { var color = Gdk.Color(); - if (hbutton_box.get_visible() == false) + if (is_selected) { - color.red = 65535; - color.green = 65535; - color.blue = 65535; + color.red = 0xd9 << 8; + color.green = 0xf7 << 8; + color.blue = 65535; } - else - { - color.red = 33333; - color.green = 33333; - color.blue = 60000; + else { + if (position % 2 == 0) + { + color.red = color.green = color.blue = 0xf2 << 8; + } + else + { + color.red = 65535; + color.green = 65535; + color.blue = 65535; + + } } - var state = this.get_state(); - this.event_box.modify_bg(state, color); + this.event_box.modify_bg(StateType.NORMAL, color); + this.arrow.modify_bg(StateType.NORMAL, color); } - public void - update_id_card_label() + private void + make_id_card_label(Label label) { - string services_text = ""; + var display_name = (manager_view.selection_in_progress() && this.id_card.is_no_identity() + ? _("Do not use a Moonshot identity for this service") : this.id_card.display_name); + var label_text = Markup.printf_escaped("%s", display_name); - var display_name = Markup.printf_escaped("%s", this.id_card.display_name); - for (int i = 0; i < id_card.services.length; i++) - { - var service = id_card.services[i]; - - if (i == (id_card.services.length - 1)) - services_text = services_text + Markup.printf_escaped("%s", service); - else - services_text = services_text + Markup.printf_escaped("%s, ", service); - } - label.set_markup(display_name + "\n" + services_text); + label.set_markup(label_text); } - public IdCardWidget(IdCard id_card) + public IdCardWidget(IdCard id_card, IdentityManagerView manager_view) { this.id_card = id_card; - + this.manager_view = manager_view; + + var display_name_label = new Label(null); + display_name_label.set_alignment((float) 0, (float) 0.5); + display_name_label.set_ellipsize(Pango.EllipsizeMode.END); + make_id_card_label(display_name_label); + + var details_wrapper = new VBox(false, 0); + details_wrapper.pack_start(display_name_label, false, false, 0); + this.details = new VBox(false, 0); + details_wrapper.pack_start(details, false, false, 0); + + if (!this.id_card.is_no_identity()) { + var upper_details_text = _("Username") + ": " + id_card.username; + upper_details_text += "\n" + _("Realm:") + " " + id_card.issuer; + if (!id_card.trust_anchor.is_empty()) { + upper_details_text += "\n" + _("Trust anchor: Enterprise provisioned"); + } + Label upper_details = new Label(upper_details_text); + upper_details.set_alignment(0, 0); + details.pack_start(upper_details); + } + var services_hbox = new HBox(false, 6); + Label services_label = new Label(_("Services: ")); + services_label.set_alignment(0, 0); + + string services_text = this.id_card.get_services_string("\n"); + Label service_list = new Label(services_text); + service_list.set_alignment(0, 0); + service_list.set_ellipsize(Pango.EllipsizeMode.END); + service_list.set_max_width_chars(50); + services_hbox.pack_start(services_label, false, false, 0); + services_hbox.pack_start(service_list, false, false, 0); + details.pack_start(services_hbox); + + hbox = new Gtk.HBox(false, 6); var image = new Image.from_pixbuf(get_pixbuf(id_card)); - - label = new Label(null); - label.set_alignment((float) 0, (float) 0.5); - label.set_ellipsize(Pango.EllipsizeMode.END); - update_id_card_label(); - - table = new Gtk.HBox(false, 6); - table.pack_start(image, false, false, 0); - table.pack_start(label, true, true, 0); - - this.delete_button = new Button.with_label(_("Delete")); - this.details_button = new Button.with_label(_("View details")); - this.send_button = new Button.with_label(_("Send")); - set_atk_name_description(delete_button, _("Delete"), _("Delete this ID Card")); - set_atk_name_description(details_button, _("Details"), _("View the details of this ID Card")); - set_atk_name_description(send_button, _("Send"), _("Send this ID Card")); - this.hbutton_box = new HButtonBox(); - hbutton_box.pack_end(delete_button); - hbutton_box.pack_end(details_button); - hbutton_box.pack_end(send_button); - send_button.set_sensitive(false); - - delete_button.clicked.connect(delete_button_cb); - details_button.clicked.connect(details_button_cb); - send_button.clicked.connect(send_button_cb); + if (this.id_card.is_no_identity()) { + image.clear(); + // Use padding to make the image size = 48x48 (size = 2x padding) + image.set_padding(24, 24); + } + hbox.pack_start(image, false, false, 0); + hbox.pack_start(details_wrapper, true, true, 0); + this.arrow = new Arrow(ArrowType.RIGHT, ARROW_SHADOW); + this.arrow.set_alignment((float) 0.5, (float) 0); + hbox.pack_start(arrow, false, false); this.main_vbox = new VBox(false, 12); - main_vbox.pack_start(table, true, true, 0); - main_vbox.pack_start(hbutton_box, false, false, 0); + main_vbox.pack_start(hbox, true, true, 0); main_vbox.set_border_width(12); event_box = new EventBox(); event_box.add(main_vbox); event_box.button_press_event.connect(button_press_cb); + event_box.set_visible(false); this.pack_start(event_box, true, true); this.show_all(); - this.hbutton_box.hide(); + details.hide(); set_idcard_color(); } - - private void set_atk_name_description(Widget widget, string name, string description) - { - var atk_widget = widget.get_accessible(); - - atk_widget.set_name(name); - atk_widget.set_description(description); - } }