From 8aab3489da7ce4edc6f2bd293420ced9c874e640 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 6 Apr 2007 02:33:51 +0000 Subject: added moved code for shortpath git-svn-id: svn://localhost/ardour2/trunk@1671 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/pbd/pbd/shortpath.h | 8 +++++++ libs/pbd/shortpath.cc | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 libs/pbd/pbd/shortpath.h create mode 100644 libs/pbd/shortpath.cc (limited to 'libs/pbd') diff --git a/libs/pbd/pbd/shortpath.h b/libs/pbd/pbd/shortpath.h new file mode 100644 index 0000000000..d126472e77 --- /dev/null +++ b/libs/pbd/pbd/shortpath.h @@ -0,0 +1,8 @@ +#ifndef __pbd_shortpath_h__ +#define __pbd_shortpath_h__ + +#include + +Glib::ustring short_path (const Glib::ustring& path, Glib::ustring::size_type target_characters); + +#endif /* __pbd_shortpath_h__ */ diff --git a/libs/pbd/shortpath.cc b/libs/pbd/shortpath.cc new file mode 100644 index 0000000000..59af8e4dcb --- /dev/null +++ b/libs/pbd/shortpath.cc @@ -0,0 +1,56 @@ +#include + +using namespace Glib; +using namespace std; + +ustring +short_path (const Glib::ustring& path, ustring::size_type target_characters) +{ + ustring::size_type last_sep; + ustring::size_type len = path.length(); + const char separator = '/'; + + if (len <= target_characters) { + return path; + } + + if ((last_sep = path.find_last_of (separator)) == ustring::npos) { + + /* just a filename, but its too long anyway */ + + if (target_characters > 3) { + return path.substr (0, target_characters - 3) + ustring ("..."); + } else { + /* stupid caller, just hand back the whole thing */ + return path; + } + } + + if (len - last_sep >= target_characters) { + + /* even the filename itself is too long */ + + if (target_characters > 3) { + return path.substr (last_sep+1, target_characters - 3) + ustring ("..."); + } else { + /* stupid caller, just hand back the whole thing */ + return path; + } + } + + uint32_t so_far = (len - last_sep); + uint32_t space_for = target_characters - so_far; + + if (space_for >= 3) { + ustring res = "..."; + res += path.substr (last_sep - space_for); + return res; + } else { + /* remove part of the end */ + ustring res = "..."; + res += path.substr (last_sep - space_for, len - last_sep + space_for - 3); + res += "..."; + return res; + + } +} -- cgit v1.2.3