Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/EventEdition/EventDialog.vala
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public class EventDialog : Granite.Dialog {
event_type = EventType.EDIT;
}

guests_panel = new EventEdition.GuestsPanel (this);
guests_panel = new EventEdition.GuestsPanel (ecal.get_icalcomponent ());
info_panel = new EventEdition.InfoPanel (this);
location_panel = new EventEdition.LocationPanel (this);
reminder_panel = new EventEdition.ReminderPanel (this);
Expand Down
5 changes: 4 additions & 1 deletion src/EventEdition/GuestGrid.vala
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,10 @@ public class Maya.View.EventEdition.GuestGrid : Gtk.Grid {
avatar = new Hdy.Avatar (ICON_SIZE, name_label.label, true);

column_spacing = 12;
margin = 6;
margin_top = 6;
margin_end = 6;
margin_bottom = 6;
margin_start = 6;
attach (avatar, 0, 0, 1, 4);
attach (name_label, 1, 1);
attach (mail_label, 1, 2);
Expand Down
115 changes: 50 additions & 65 deletions src/EventEdition/GuestsPanel.vala
Original file line number Diff line number Diff line change
@@ -1,25 +1,13 @@
// -*- Mode: vala; indent-tabs-mode: nil; tab-width: 4 -*-
/*-
* Copyright (c) 2011-2015 Maya Developers (http://launchpad.net/maya)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
/*
* SPDX-License-Identifier: GPL-3.0-or-later
* SPDX-FileCopyrightText: 2011-2026 elementary, Inc. (https://elementary.io)
*
* Authored by: Jaap Broekhuizen
*/

public class Maya.View.EventEdition.GuestsPanel : Gtk.Grid {
private EventDialog parent_dialog;
public class Maya.View.EventEdition.GuestsPanel : Gtk.Box {
public ICal.Component component { get; construct; }

private Gtk.Entry guest_entry;
private Gtk.EntryCompletion guest_completion;
private Gtk.ListBox guest_list;
Expand All @@ -38,36 +26,35 @@ public class Maya.View.EventEdition.GuestsPanel : Gtk.Grid {
N_COLUMNS;
}

public GuestsPanel (EventDialog parent_dialog) {
this.parent_dialog = parent_dialog;
attendees = new Gee.ArrayList<unowned ICal.Property> ();

margin_start = 12;
margin_end = 12;
row_spacing = 6;
orientation = Gtk.Orientation.VERTICAL;
public GuestsPanel (ICal.Component component) {
Object (component: component);
}

construct {
attendees = new Gee.ArrayList<unowned ICal.Property> ();
guest_store = new Gtk.ListStore (2, typeof (string), typeof (string));

var guest_label = new Granite.HeaderLabel (_("Invitees"));

load_contacts.begin ();

var no_guests_label = new Gtk.Label (_("No Invitees"));
no_guests_label.get_style_context ().add_class (Granite.STYLE_CLASS_H3_LABEL);
no_guests_label.get_style_context ().add_class (Gtk.STYLE_CLASS_DIM_LABEL);
no_guests_label.show ();

unowned Gtk.StyleContext no_guests_context = no_guests_label.get_style_context ();
no_guests_context.add_class (Granite.STYLE_CLASS_H3_LABEL);
no_guests_context.add_class (Gtk.STYLE_CLASS_DIM_LABEL);

guest_list = new Gtk.ListBox ();
guest_list.set_selection_mode (Gtk.SelectionMode.NONE);
guest_list = new Gtk.ListBox () {
hexpand = true,
vexpand = true,
selection_mode = NONE
};
guest_list.set_placeholder (no_guests_label);

var guest_label = new Granite.HeaderLabel (_("Invitees")) {
mnemonic_widget = guest_list
};

var guest_scrolledwindow = new Gtk.ScrolledWindow (null, null) {
child = guest_list
};
guest_scrolledwindow.expand = true;

var frame = new Gtk.Frame (null) {
child = guest_scrolledwindow
Expand All @@ -93,34 +80,33 @@ public class Maya.View.EventEdition.GuestsPanel : Gtk.Grid {
return false;
});

guest_entry = new Gtk.SearchEntry ();
guest_entry.placeholder_text = _("Invite");
guest_entry.hexpand = true;
guest_entry = new Gtk.SearchEntry () {
hexpand = true,
placeholder_text = _("Invite")
};
guest_entry.set_completion (guest_completion);
guest_entry.activate.connect (() => {
var attendee = new ICal.Property (ICal.PropertyKind.ATTENDEE_PROPERTY);
var attendee = new ICal.Property (ATTENDEE_PROPERTY);
attendee.set_attendee (guest_entry.text);
add_guest ((owned)attendee);
guest_entry.delete_text (0, -1);
});

margin_start = 12;
margin_end = 12;
spacing = 6;
orientation = VERTICAL;
add (guest_label);
add (guest_entry);
add (frame);

if (parent_dialog.ecal != null) {
unowned ICal.Component comp = parent_dialog.ecal.get_icalcomponent ();
// Load the guests
int count = comp.count_properties (ICal.PropertyKind.ATTENDEE_PROPERTY);

ICal.Property property;
property = comp.get_first_property (ICal.PropertyKind.ATTENDEE_PROPERTY);
for (int i = 0; i < count; i++) {
if (property.get_attendee () != null)
add_guest (property);

property = comp.get_next_property (ICal.PropertyKind.ATTENDEE_PROPERTY);
var property = component.get_first_property (ATTENDEE_PROPERTY);
for (int i = 0; i < component.count_properties (ATTENDEE_PROPERTY); i++) {
if (property.get_attendee () != null) {
add_guest (property);
}

property = component.get_next_property (ATTENDEE_PROPERTY);
}

show_all ();
Expand All @@ -144,17 +130,13 @@ public class Maya.View.EventEdition.GuestsPanel : Gtk.Grid {
* Save the values in the dialog into the component.
*/
public void save () {
unowned ICal.Component comp = parent_dialog.ecal.get_icalcomponent ();
// Save the guests
// First, clear the guests
int count = comp.count_properties (ICal.PropertyKind.ATTENDEE_PROPERTY);

for (int i = 0; i < count; i++) {
for (int i = 0; i < component.count_properties (ATTENDEE_PROPERTY); i++) {
ICal.Property remove_prop;
if (i == 0) {
remove_prop = comp.get_first_property (ICal.PropertyKind.ATTENDEE_PROPERTY);
remove_prop = component.get_first_property (ATTENDEE_PROPERTY);
} else {
remove_prop = comp.get_next_property (ICal.PropertyKind.ATTENDEE_PROPERTY);
remove_prop = component.get_next_property (ATTENDEE_PROPERTY);
}

ICal.Property found_prop = remove_prop;
Expand All @@ -167,34 +149,37 @@ public class Maya.View.EventEdition.GuestsPanel : Gtk.Grid {
}

if (can_remove == true) {
comp.remove_property (remove_prop);
component.remove_property (remove_prop);
} else if (found_prop != remove_prop) {
attendees.remove (found_prop);
}
}

// Add the new guests
foreach (unowned ICal.Property attendee in attendees) {
comp.add_property (attendee.clone ());
component.add_property (attendee.clone ());
}
}

private void add_guest (ICal.Property attendee) {
var row = new Gtk.ListBoxRow ();
var guest_element = new GuestGrid (attendee);
row.add (guest_element);

var row = new Gtk.ListBoxRow () {
child = guest_element
};
row.show_all ();

guest_list.add (row);

attendees.add (guest_element.attendee);

guest_element.removed.connect (() => {
attendees.remove (guest_element.attendee);
});

row.show_all ();
}

private bool suggestion_selected (Gtk.TreeModel model, Gtk.TreeIter iter) {
var attendee = new ICal.Property (ICal.PropertyKind.ATTENDEE_PROPERTY);
var attendee = new ICal.Property (ATTENDEE_PROPERTY);
Value selected_value;

model.get_value (iter, 1, out selected_value);
Expand Down
Loading