/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ /* e-msg-composer-attachment-bar.c * * Copyright (C) 1999 Helix Code, Inc. * * 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 2 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, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * * Author: Ettore Perazzoli */ #include #include #include "e-msg-composer-attachment.h" #include "e-msg-composer-attachment-bar.h" #include "camel/camel-data-wrapper.h" #include "camel/camel-stream-fs.h" #include "camel/camel-mime-part.h" #define ICON_WIDTH 64 #define ICON_SEPARATORS " /-_" #define ICON_SPACING 2 #define ICON_ROW_SPACING ICON_SPACING #define ICON_COL_SPACING ICON_SPACING #define ICON_BORDER 2 #define ICON_TEXT_SPACING 2 static GnomeIconListClass *parent_class = NULL; struct _EMsgComposerAttachmentBarPrivate { GList *attachments; guint num_attachments; GtkWidget *context_menu; GtkWidget *icon_context_menu; }; enum { CHANGED, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = { 0 }; static void update (EMsgComposerAttachmentBar *bar); static gchar * size_to_string (gulong size) { gchar *size_string; /* FIXME: The following should probably go into a separate module, as we might have to do the same thing in other places as well. Also, I am not sure this will be OK for all the languages. */ if (size < 1e3L) { if (size == 1) size_string = g_strdup (_("1 byte")); else size_string = g_strdup_printf (_("%u bytes"), (guint) size); } else { gdouble displayed_size; if (size < 1e6L) { displayed_size = (gdouble) size / 1.0e3; size_string = g_strdup_printf (_("%.1fK"), displayed_size); } else if (size < 1e9L) { displayed_size = (gdouble) size / 1.0e6; size_string = g_strdup_printf (_("%.1fM"), displayed_size); } else { displayed_size = (gdouble) size / 1.0e9; size_string = g_strdup_printf (_("%.1fG"), displayed_size); } } return size_string; } /* Attachment handling functions. */ static void free_attachment_list (EMsgComposerAttachmentBar *bar) { EMsgComposerAttachmentBarPrivate *priv; GList *p; priv = bar->priv; for (p = priv->attachments; p != NULL; p = p->next) gtk_object_unref (GTK_OBJECT (p->data)); } static void attachment_changed_cb (EMsgComposerAttachment *attachment, gpointer data) { update (E_MSG_COMPOSER_ATTACHMENT_BAR (data)); } static void add_common (EMsgComposerAttachmentBar *bar, EMsgComposerAttachment *attachment) { gtk_signal_connect (GTK_OBJECT (attachment), "changed", GTK_SIGNAL_FUNC (attachment_changed_cb), bar); bar->priv->attachments = g_list_append (bar->priv->attachments, attachment); bar->priv->num_attachments++; update (bar); gtk_signal_emit (GTK_OBJECT (bar), signals[CHANGED]); } static void add_from_mime_part (EMsgComposerAttachmentBar *bar, CamelMimePart *part) { add_common (bar, e_msg_composer_attachment_new_from_mime_part (part)); } static void add_from_file (EMsgComposerAttachmentBar *bar, const gchar *file_name) { add_common (bar, e_msg_composer_attachment_new (file_name)); } static void remove_attachment (EMsgComposerAttachmentBar *bar, EMsgComposerAttachment *attachment) { bar->priv->attachments = g_list_remove (bar->priv->attachments, attachment); bar->priv->num_attachments--; gtk_object_unref (GTK_OBJECT (attachment)); gtk_signal_emit (GTK_OBJECT (bar), signals[CHANGED]); } /* Icon list contents handling. */ static void update (EMsgComposerAttachmentBar *bar) { EMsgComposerAttachmentBarPrivate *priv; GnomeIconList *icon_list; GList *p; priv = bar->priv; icon_list = GNOME_ICON_LIST (bar); gnome_icon_list_freeze (icon_list); gnome_icon_list_clear (icon_list); /* FIXME could be faster, but we don't care. */ for (p = priv->attachments; p != NULL; p = p->next) { EMsgComposerAttachment *attachment; const gchar *icon_name, *desc; gchar *size_string, *label, *mime_type; GMimeContentField *content_type; attachment = p->data; content_type = camel_mime_part_get_content_type (attachment->body); mime_type = g_strdup_printf ("%s/%s", content_type->type, content_type->subtype); icon_name = gnome_mime_get_value (mime_type, "icon-filename"); g_free (mime_type); /* FIXME we need some better default icon. */ if (icon_name == NULL) icon_name = gnome_mime_get_value ("text/plain", "icon-filename"); desc = camel_mime_part_get_description (attachment->body); if (!desc) desc = camel_mime_part_get_filename (attachment->body); if (!desc) desc = "attachment"; if (attachment->size) { size_string = size_to_string (attachment->size); label = g_strdup_printf ("%s (%s)", desc, size_string); g_free (size_string); } else label = g_strdup (desc); gnome_icon_list_append (icon_list, icon_name, label); g_free (label); } gnome_icon_list_thaw (icon_list); } static void remove_selected (EMsgComposerAttachmentBar *bar) { GnomeIconList *icon_list; EMsgComposerAttachment *attachment; GList *attachment_list; GList *p; gint num; icon_list = GNOME_ICON_LIST (bar); /* Weee! I am especially proud of this piece of cheesy code: it is truly awful. But unless one attaches a huge number of files, it will not be as greedy as intended. FIXME of course. */ attachment_list = NULL; for (p = icon_list->selection; p != NULL; p = p->next) { num = GPOINTER_TO_INT (p->data); attachment = E_MSG_COMPOSER_ATTACHMENT (g_list_nth (bar->priv->attachments, num)->data); attachment_list = g_list_prepend (attachment_list, attachment); } for (p = attachment_list; p != NULL; p = p->next) remove_attachment (bar, E_MSG_COMPOSER_ATTACHMENT (p->data)); g_list_free (attachment_list); update (bar); } static void edit_selected (EMsgComposerAttachmentBar *bar) { GnomeIconList *icon_list; EMsgComposerAttachment *attachment; gint num; icon_list = GNOME_ICON_LIST (bar); num = GPOINTER_TO_INT (icon_list->selection->data); attachment = g_list_nth (bar->priv->attachments, num)->data; e_msg_composer_attachment_edit (attachment, GTK_WIDGET (bar)); } /* "Attach" dialog. */ static void attach_cb (GtkWidget *widget, gpointer data) { EMsgComposerAttachmentBar *bar; GtkWidget *file_selection; const gchar *file_name; file_selection = gtk_widget_get_toplevel (widget); bar = E_MSG_COMPOSER_ATTACHMENT_BAR (data); file_name = gtk_file_selection_get_filename (GTK_FILE_SELECTION (file_selection)); add_from_file (bar, file_name); gtk_widget_hide (file_selection); } static void add_from_user (EMsgComposerAttachmentBar *bar) { static GtkWidget *fs; if (!fs) { GtkWidget *cancel_button; GtkWidget *ok_button; fs = gtk_file_selection_new (_("Add attachment")); ok_button = GTK_FILE_SELECTION (fs)->ok_button; gtk_signal_connect (GTK_OBJECT (ok_button), "clicked", GTK_SIGNAL_FUNC (attach_cb), bar); cancel_button = GTK_FILE_SELECTION (fs)->cancel_button; gtk_signal_connect_object (GTK_OBJECT (cancel_button), "clicked", GTK_SIGNAL_FUNC (gtk_widget_hide), GTK_OBJECT (fs)); gtk_signal_connect (GTK_OBJECT (fs), "delete_event", GTK_SIGNAL_FUNC (gtk_widget_hide), NULL); } else gtk_file_selection_set_filename (GTK_FILE_SELECTION (fs), ""); gtk_window_set_position (GTK_WINDOW (fs), GTK_WIN_POS_MOUSE); gtk_widget_show (GTK_WIDGET (fs)); } /* Callbacks. */ static void add_cb (GtkWidget *widget, gpointer data) { g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (data)); add_from_user (E_MSG_COMPOSER_ATTACHMENT_BAR (data)); } static void properties_cb (GtkWidget *widget, gpointer data) { EMsgComposerAttachmentBar *bar; g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (data)); bar = E_MSG_COMPOSER_ATTACHMENT_BAR (data); edit_selected (data); } static void remove_cb (GtkWidget *widget, gpointer data) { EMsgComposerAttachmentBar *bar; g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (data)); bar = E_MSG_COMPOSER_ATTACHMENT_BAR (data); remove_selected (bar); } /* Popup menu handling. */ static GnomeUIInfo icon_context_menu_info[] = { GNOMEUIINFO_ITEM (N_("Remove"), N_("Remove selected items from the attachment list"), remove_cb, NULL), GNOMEUIINFO_MENU_PROPERTIES_ITEM (properties_cb, NULL), GNOMEUIINFO_END }; static GtkWidget * get_icon_context_menu (EMsgComposerAttachmentBar *bar) { EMsgComposerAttachmentBarPrivate *priv; priv = bar->priv; if (priv->icon_context_menu == NULL) priv->icon_context_menu = gnome_popup_menu_new (icon_context_menu_info); return priv->icon_context_menu; } static void popup_icon_context_menu (EMsgComposerAttachmentBar *bar, gint num, GdkEventButton *event) { GtkWidget *menu; menu = get_icon_context_menu (bar); gnome_popup_menu_do_popup (menu, NULL, NULL, event, bar); } static GnomeUIInfo context_menu_info[] = { GNOMEUIINFO_ITEM (N_("Add attachment..."), N_("Attach a file to the message"), add_cb, NULL), GNOMEUIINFO_END }; static GtkWidget * get_context_menu (EMsgComposerAttachmentBar *bar) { EMsgComposerAttachmentBarPrivate *priv; priv = bar->priv; if (priv->context_menu == NULL) priv->context_menu = gnome_popup_menu_new (context_menu_info); return priv->context_menu; } static void popup_context_menu (EMsgComposerAttachmentBar *bar, GdkEventButton *event) { GtkWidget *menu; menu = get_context_menu (bar); gnome_popup_menu_do_popup (menu, NULL, NULL, event, bar); } /* GtkObject methods. */ static void destroy (GtkObject *object) { EMsgComposerAttachmentBar *bar; bar = E_MSG_COMPOSER_ATTACHMENT_BAR (object); free_attachment_list (bar); if (GTK_OBJECT_CLASS (parent_class)->destroy != NULL) (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); } /* GtkWidget methods. */ static gint button_press_event (GtkWidget *widget, GdkEventButton *event) { EMsgComposerAttachmentBar *bar; GnomeIconList *icon_list; gint icon_number; bar = E_MSG_COMPOSER_ATTACHMENT_BAR (widget); icon_list = GNOME_ICON_LIST (widget); if (event->button != 3) return GTK_WIDGET_CLASS (parent_class)->button_press_event (widget, event); icon_number = gnome_icon_list_get_icon_at (icon_list, event->x, event->y); if (icon_number >= 0) { gnome_icon_list_select_icon (icon_list, icon_number); popup_icon_context_menu (bar, icon_number, event); } else { popup_context_menu (bar, event); } return TRUE; } /* Initialization. */ static void class_init (EMsgComposerAttachmentBarClass *class) { GtkObjectClass *object_class; GtkWidgetClass *widget_class; GnomeIconListClass *icon_list_class; object_class = GTK_OBJECT_CLASS (class); widget_class = GTK_WIDGET_CLASS (class); icon_list_class = GNOME_ICON_LIST_CLASS (class); parent_class = gtk_type_class (gnome_icon_list_get_type ()); object_class->destroy = destroy; widget_class->button_press_event = button_press_event; /* Setup signals. */ signals[CHANGED] = gtk_signal_new ("changed", GTK_RUN_LAST, object_class->type, GTK_SIGNAL_OFFSET (EMsgComposerAttachmentBarClass, changed), gtk_marshal_NONE__NONE, GTK_TYPE_NONE, 0); gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); } static void init (EMsgComposerAttachmentBar *bar) { EMsgComposerAttachmentBarPrivate *priv; guint icon_size; priv = g_new (EMsgComposerAttachmentBarPrivate, 1); priv->attachments = NULL; priv->context_menu = NULL; priv->icon_context_menu = NULL; priv->num_attachments = 0; bar->priv = priv; /* FIXME partly hardcoded. We should compute height from the font, and allow at least 2 lines for every item. */ icon_size = ICON_WIDTH + ICON_SPACING + ICON_BORDER + ICON_TEXT_SPACING; icon_size += 24; gtk_widget_set_usize (GTK_WIDGET (bar), icon_size * 4, icon_size); } GtkType e_msg_composer_attachment_bar_get_type (void) { static GtkType type = 0; if (type == 0) { static const GtkTypeInfo info = { "EMsgComposerAttachmentBar", sizeof (EMsgComposerAttachmentBar), sizeof (EMsgComposerAttachmentBarClass), (GtkClassInitFunc) class_init, (GtkObjectInitFunc) init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique (gnome_icon_list_get_type (), &info); } return type; } GtkWidget * e_msg_composer_attachment_bar_new (GtkAdjustment *adj) { EMsgComposerAttachmentBar *new; GnomeIconList *icon_list; gtk_widget_push_visual (gdk_imlib_get_visual ()); gtk_widget_push_colormap (gdk_imlib_get_colormap ()); new = gtk_type_new (e_msg_composer_attachment_bar_get_type ()); gtk_widget_pop_visual (); gtk_widget_pop_colormap (); icon_list = GNOME_ICON_LIST (new); gnome_icon_list_construct (icon_list, ICON_WIDTH, adj, 0); gnome_icon_list_set_separators (icon_list, ICON_SEPARATORS); gnome_icon_list_set_row_spacing (icon_list, ICON_ROW_SPACING); gnome_icon_list_set_col_spacing (icon_list, ICON_COL_SPACING); gnome_icon_list_set_icon_border (icon_list, ICON_BORDER); gnome_icon_list_set_text_spacing (icon_list, ICON_TEXT_SPACING); gnome_icon_list_set_selection_mode (icon_list, GTK_SELECTION_MULTIPLE); return GTK_WIDGET (new); } static void attach_to_multipart (CamelMultipart *multipart, EMsgComposerAttachment *attachment) { GMimeContentField *content_type; content_type = camel_mime_part_get_content_type (attachment->body); /* Kludge a bit on CTE. For now, we set QP for text and B64 * for all else except message (which must be 7bit, 8bit, or * binary). FIXME. */ if (!strcasecmp (content_type->type, "text")) { camel_mime_part_set_encoding (attachment->body, CAMEL_MIME_PART_ENCODING_QUOTEDPRINTABLE); } else if (strcasecmp (content_type->type, "message") != 0) { camel_mime_part_set_encoding (attachment->body, CAMEL_MIME_PART_ENCODING_BASE64); } camel_multipart_add_part (multipart, attachment->body); } void e_msg_composer_attachment_bar_to_multipart (EMsgComposerAttachmentBar *bar, CamelMultipart *multipart) { EMsgComposerAttachmentBarPrivate *priv; GList *p; g_return_if_fail (bar != NULL); g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (bar)); g_return_if_fail (multipart != NULL); g_return_if_fail (CAMEL_IS_MULTIPART (multipart)); priv = bar->priv; for (p = priv->attachments; p != NULL; p = p->next) { EMsgComposerAttachment *attachment; attachment = E_MSG_COMPOSER_ATTACHMENT (p->data); attach_to_multipart (multipart, attachment); } } guint e_msg_composer_attachment_bar_get_num_attachments (EMsgComposerAttachmentBar *bar) { g_return_val_if_fail (bar != NULL, 0); g_return_val_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (bar), 0); return bar->priv->num_attachments; } void e_msg_composer_attachment_bar_attach (EMsgComposerAttachmentBar *bar, const gchar *file_name) { g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (bar)); if (file_name == NULL) add_from_user (bar); else add_from_file (bar, file_name); } void e_msg_composer_attachment_bar_attach_mime_part (EMsgComposerAttachmentBar *bar, CamelMimePart *part) { g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (bar)); add_from_mime_part (bar, part); } s'>+21 * Update to 3.16.7.0mr2017-03-244-42/+103 * Update to r20170322171812.mr2017-03-235-28/+40 * Update to 1.1.2.hrs2017-03-212-4/+8 * update to 20170310.vanilla2017-03-203-80/+92 * Fix typo in patch.mr2017-03-141-1/+1 * Update to 20170312170442 and try to fix PR 217729 too.mr2017-03-135-25/+26 * Update to 2.3.6.araujo2017-03-112-3/+4 * Update to version 20170308230210.mr2017-03-104-817/+284 * Update devel/tbb to 2017.5martymac2017-03-071-1/+1 * - Update to 9.7.96danilo2017-03-042-4/+4 * Mark a few leaf ports broken on aarch64.linimon2017-02-251-1/+3 * Update to 3.16.5mr2017-02-243-205/+1408 * Update to r20170224025915mr2017-02-245-1445/+4230 * - Update to 0.17.g20170204amdmi32017-02-223-34/+59 * Update Qt5 to 5.7.1, and unify the Qt4 and Qt5 ports some moretcberner2017-02-192-27/+0 * Update to 5.4krion2017-02-024-102/+144 * cad/alliance: unbreak on 12.0 after base r308264jbeich2017-02-022-1/+12 * - Autodetect the installed linux_base port and use LINUX_DEFAULT only astijl2017-02-011-1/+1 * Mark various ports broken on aarch64 and armv6.linimon2017-01-311-1/+2 * - Update to 3.8.83danilo2017-01-282-4/+4 * Update WWW: SF redirects to https://sourceforge.net/projects/<PROJECT_NAME>/sunpoet2017-01-212-2/+2 * Fix plist of cad/qcad -- don't add the manually created desktop file to the p...tcberner2017-01-201-1/+0 * The output of tools like awk, date, sort, tr,... depends on the currenttijl2017-01-182-15/+6 * - Update to 2.1.3jhale2017-01-153-14/+25 * Drop dependency on devel/libc++.thierry2017-01-141-9/+3 * cad/gmsh: Update to version 2.16.0.jrm2017-01-133-4/+5 * cad/openvsp: update 3.9.1 -> 3.10.0robak2017-01-116-6/+37 * - Remove always-true/false conditions after FreeBSD 9, 10.1, 10.2 EOLamdmi32017-01-092-13/+3 * Use PYTHON_PKGNAMEPREFIX instead of py${PYTHON_SUFFIX}-sunpoet2017-01-081-1/+1 * - Update to 20170104 snapshotwen2017-01-083-18/+44 * devel/boost-*: update to 1.63.0jbeich2017-01-067-7/+7 * Never set WRKSRC when using USE_GITHUB.mat2017-01-042-5/+3 * cad/openvsp: drop 10.1 workaround (revert r428665) per EOLjbeich2017-01-031-13/+1 * - Fix configureantoine2017-01-021-1/+6 * Use USES=python instead of LIB_DEPEDNS + python:build.hrs2017-01-011-3/+1 * Update to 0.24.9.hrs2017-01-012-6/+8 * Remove BROKEN_FreeBSD_9sunpoet2017-01-016-12/+0 * - Fix condition for FreeBSD 10.1amdmi32016-12-291-1/+1 * - No more broken after removing gcc requirement from math/cgalamdmi32016-12-291-6/+0 * Set expiration date of ports depending on graphics/urt to 2017-04-01rene2016-12-271-0/+3 * Libopencad is a library written in C++11, which provides a way toamdmi32016-12-268-0/+125 * - Mark broken in FreeBSD 11.x+ i386: this port can't build while cgal is buil...amdmi32016-12-261-1/+7 * Move the doxygen things into a DOXYGEN option.mat2016-12-212-1062/+1062 * Move doxygen dependency to a DOXYGEN option, and have it actually domat2016-12-211-4/+7 * Get rid of QT_PREFIX in favour of PREFIX.tcberner2016-12-191-1/+1 * cad/openvsp: fix compilation in 10.1tz2016-12-161-2/+15 * Switch USES=compiler:gcc-c++11-lib to use base libc++ on 10.2+ systemsjbeich2016-12-162-1/+2 * Those ports build fine with bsd makeantoine2016-12-121-1/+1 * multimedia/ffmpeg: update to 3.2.2jbeich2016-12-111-1/+1 * Remove libintl.so.9 compatibility link that was added in r374303 totijl2016-12-095-5/+5 * Remove libexpat.so.6 compatibility link that was added in r374303 totijl2016-12-091-1/+1 * Remove libtiff.so.4 compatibility links that were added in r374303 totijl2016-12-091-1/+1 * cad/gmsh: update to version 2.15.0jrm2016-12-072-6/+5 * Bump PORTREVISIONS for ports depending on the canonical version of GCC andgerald2016-12-079-7/+9 * Do not use post-stage. Use post-install instead.mat2016-12-021-1/+1 * Stop exporting QT_BINDIR and QT_LIBDIR to PLIST_SUB.tcberner2016-11-291-10/+10 * - Fix library version which should be .2 (as on Linux), not .4martymac2016-11-251-1/+1 * - Update to 9.07danilo2016-11-242-7/+8 * devel/boost-*: update to 1.62.0jbeich2016-11-237-4/+7 * Chase french/med upgrade (switch to hdf5-18).thierry2016-11-231-0/+18 * In several dozen ports, use single space for WWW: line in pkg-descr, anddanfe2016-11-221-1/+1 * Fix build on 9.x.hrs2016-11-226-28/+28 * - When FFMPEG=on, link to multimedia/ffmpeg.stephen2016-11-215-46/+103 * Bump PORTREVISIONS for ports depending on the canonical version of GCC andgerald2016-11-203-1/+3 * - Add LICENSEamdmi32016-11-181-6/+6 * Fix build.hrs2016-11-161-2/+10 * Mark as broken on various tier-2 archs.linimon2016-11-141-0/+2 * Upgrade Code_Aster to 12.0.6-4.thierry2016-11-134-36/+46 * Spell CHOSEN_COMPILER_TYPE correctlyantoine2016-11-132-6/+6 * Fix build with gcc 4.9 by lowering optimization levelantoine2016-11-121-1/+7 * Mark various cad ports broken on aarch64.linimon2016-11-113-0/+6 * Mark broken on aarch64: fails to link with sbrk.linimon2016-11-111-0/+2 * Rename with python-gdsii, which is the official package name in PyPI.hrs2016-11-114-4/+3 * Mark as broken on aarch64: fails to link with sbrk.linimon2016-11-102-0/+4 * cad/solvespace: create portswills2016-11-106-0/+77 * - Pet portlintamdmi32016-11-072-13/+13 * cad/klayout: Include DragonFly with new patch to restore build on DFmarino2016-11-071-1/+1 * Fix broken dependencies.hrs2016-11-072-9/+11 * Update to 20161104 snapshot; drop maintainershipriggs2016-11-063-10/+18 * Add cad/sp2sp, a command-line waveform data processor for SPICE-typehrs2016-11-066-0/+134 * Fix build.hrs2016-11-061-1/+2 * Update to 20161026 snapshotriggs2016-11-059-19/+24 * - Update to 0.24.8.hrs2016-11-055-30/+76 * cad/ngspice_rework: Fix fetch broken by version bumpmarino2016-11-051-1/+2 * Add cad/py-gdsii, GDSII file manipulation library.hrs2016-11-054-0/+29 * cad/ngspice_rework: configure xspice unconditionallymarino2016-11-041-3/+3 * cad/ngspice_rework: Enable X support by default (introduce X11 option)marino2016-11-041-2/+10 * cad/gmsh: Update distinfo after upstream rolled a new tarball without a newjrm2016-11-032-5/+3 * cad/gmsh: update to version 2.14.1jrm2016-11-023-5/+6 * - Update to 0.5vg2016-10-314-2053/+3075 * Remove wrongly used QT-related plist-subs from plisttcberner2016-10-281-1/+1 * ${RM} already has -f.mat2016-10-214-4/+4 * Reassign makc's ports back to the pool.rakuco2016-10-201-1/+1 * - Update devel/tbb to version 2017.1martymac2016-10-191-1/+1 * - Double-quote $@ to properly propagate parameters down the execution pathdanfe2016-10-171-1/+1 * cad/feappv: fix after change in USES=localbase behaviormarino2016-10-171-1/+1 * cad/gmsh, cad/gmsh-occ: update to version 2.14.0jrm2016-10-134-21/+7 * - Switch to options helpersamdmi32016-10-111-12/+15 * - Update to version 0.17.g20160927 [1]pawel2016-10-093-6/+14 * Clean upantoine2016-10-091-3/+2 * Specify which license the license file refers tojrm2016-10-031-1/+1 * Add LICENSE file and return PORTREVISION=1 to cad/gmsh-occjrm2016-10-032-0/+3 * - Update to 3.8.82danilo2016-10-012-4/+4 * Remove PORTREVISION after cad/gmsh update and take maintainershipjrm2016-09-301-2/+1 * Re-add MAKE_JOBS_UNSAFE=yesjrm2016-09-301-0/+2 * Update cad/gmsh to 2.13.2; fix knob issue; other changesjrm2016-09-307-293/+229 * Mark cad/gmsh-occ BROKEN for -CURRENT / i386.thierry2016-09-281-0/+6 * - Update devel/doxygen to 1.8.12antoine2016-09-282-3/+1 * - Update devel/icu to 57.1.tijl2016-09-244-9/+10 * - Update to 9.7.95danilo2016-09-182-4/+4 * - Remove unneeded MASTER_SITESamdmi32016-09-171-1/+0 * - Update to 3.9.1amdmi32016-09-177-85/+6 * Release some of my ports back to the heapmarino2016-09-151-1/+1 * - Switch to newly supported CC licensesamdmi32016-09-131-4/+3 * kicad switched to GIT (still hosted on launchpad) for development.mr2016-09-135-298/+95 * Most commonly used build systems support silent builds, when theyamdmi32016-09-102-2/+0 * (Readdition of cad/freecad which was removed on 235718)mat2016-09-087-0/+911 * - In Uses/linux.mk use the loop variable directly when appending totijl2016-09-071-1/+1 * - Replace Mk/bsd.linux-apps.mk and Mk/bsd.linux-rpm.mk withtijl2016-09-061-2/+2 * cad/NASTRAN-95: Update license acronym and reset maintainershipmarino2016-09-061-2/+2 * cad/NASTRAN-95: Fix hardcoded FC and FFLAG flags in patchmarino2016-09-051-2/+2 * - Pass maintainership to Joseph Mingrone <jrm@ftfl.ca> with his permission.stephen2016-09-011-1/+1 * Update to version 3.9.0pawel2016-08-269-5/+88 * cad/NASTRAN-95: Report version as FREEBSD rather than LINUXmarino2016-08-231-0/+5 * Update to 3.3.76zeising2016-08-212-4/+4 * Update to 2.11maho2016-08-177-43/+262 * New port: cad/NASTRAN - NASA's classic FEA program.pfg2016-08-129-1/+1 * New port: cad/NASTRAN - NASA's classic FEA program.pfg2016-08-129-0/+608 * Update to version 3.8.1pawel2016-08-042-4/+4 * Try to fix shared library links.mr2016-08-033-7/+23 * Update to version 8.2.20160715pawel2016-08-019-15/+18 * cad/openvsp: 3.7.2 -> 3.8.0pi2016-07-313-3/+52 * - Change maintainer email [1]pawel2016-07-281-4/+5 * - Update to 3.8.81danilo2016-07-252-6/+6 * - Update to 9.7.94danilo2016-07-242-3/+4 * - update libgd to 2.2.2dinoex2016-07-201-1/+1 * LinuxCNC controls CNC machines. It can drive milling machines,trasz2016-07-1333-0/+3072 * Remove expired ports without open PRs:rene2016-07-054-44/+0 * Update to 3.3.73zeising2016-06-287-20/+27 * Update to upstream version 3.7.2riggs2016-06-262-7/+5 * Prefer relative links to make packages more relocation friendlybapt2016-06-234-9/+9 * cad/openvsp: 3.6.1 -> 3.6.2pi2016-06-163-3/+6 * cad/kicad-devel: Fix faulty IGNORE message which falsely traps DFmarino2016-06-151-0/+2 * - Take maintainership.hrs2016-06-105-19/+36 * - Delete the usage of %%QT_BINDIR%% in pkg-plist (NB.: %%QT_BINDIR%% is still...mr2016-06-094-508/+1626 * - Update to r6904,mr2016-06-094-32/+75 * Remove unneeded usage of:mat2016-06-061-2/+1 * cad/openvsp: 3.6.0 -> 3.6.1pi2016-06-053-3/+4 * Deprecate ports broken for more than 6 monthsantoine2016-06-041-0/+2 * Update to 10.1.1zeising2016-05-282-4/+5 * cad/ghdl: build it with gcc6-aux, not gcc5-auxmarino2016-05-271-1/+2 * Remove NLS, DOCS, EXAMPLES and IPV6 from OPTIONS_DEFAULT, they are enabled by...amdmi32016-05-243-3/+3 * Convert tab after WWW: in pkg-descrs to single space as per PHBamdmi32016-05-241-1/+1 * - Fix trailing whitespace in Makefilesamdmi32016-05-191-1/+1 * - Fix trailing whitespace in pkg-descrs, categories [a-f]*amdmi32016-05-1919-60/+60 * Add cad/py-gdspy, Python module for creating GDSII stream files.hrs2016-05-174-0/+38 * Fix dependency.hrs2016-05-171-1/+1 * Update to 4.0.4.hrs2016-05-175-20/+21 * Add cad/rubygem-gdsii, Ruby library for GDSII reader and writer.hrs2016-05-1714-0/+235 * Add cad/py-lcapy, Symbolic MDA Analysis Package for Linear Circuits.hrs2016-05-174-0/+47 * cad/openvsp: update 3.5.2 -> 3.6.0junovitch2016-05-1226-280/+6 * Cleanup github bits.mat2016-05-122-3/+3 * - Update to 8.2.20160404amdmi32016-05-123-13/+23 * graphics/py-opengl{-accelerate}: 3.0.1 -> 3.1.0, change to PyPI namingpi2016-05-101-1/+2 * Change Ada Framework foundation from gcc5-aux to gcc6-auxmarino2016-04-301-1/+1 * - Update to 0.24.6nivit2016-04-263-4/+5 * cad/openvsp: Fix build on i386pi2016-04-232-1/+10 * cad/openvsp: 2.3.0 -> 3.5.2pi2016-04-2232-110/+360 * Support Tk in USES=tk:tea. Convert more ports + minor fixes and modernization.gahr2016-04-2115-26/+272 * Update to version 2.10maho2016-04-187-54/+53 * Do not attempt to create ${STAGEDIR}${DESKTOPDIR}: `share/applications'danfe2016-04-161-1/+0 * Try to fix comilation under FreeBSD-9mr2016-04-162-1/+9 * Update to r6680.mr2016-04-115-39/+46 * - Add LICENSEamdmi32016-04-105-19/+22 * Update to 5.2madpilot2016-04-022-3/+3 * Remove ${PORTSDIR}/ from dependencies, Mk and categories a, b, and c.mat2016-04-0140-146/+146 * Make print/ghostscript9-agpl-base the default Ghostscript port. Upstreamtijl2016-03-241-1/+1 * qt4-moc: Add more Boost include guards to moc's definition list.rakuco2016-03-242-28/+0 * Update to version 8.1-20160311.thierry2016-03-189-40/+50 * Unbreak after the math/superlu update in r410620.rakuco2016-03-142-4/+4 * - Update to 2.12.0.stephen2016-03-103-4/+7 * Update to 2.5.110615.mat2016-03-0920-285/+65