Case-insensitive sort for image filenames.
authorCarl Hetherington <cth@carlh.net>
Sun, 10 Jan 2016 14:12:42 +0000 (14:12 +0000)
committerCarl Hetherington <cth@carlh.net>
Sun, 10 Jan 2016 14:12:42 +0000 (14:12 +0000)
ChangeLog
src/lib/case_insensitive_sorter.cc [new file with mode: 0644]
src/lib/case_insensitive_sorter.h [new file with mode: 0644]
src/lib/wscript
src/wx/content_panel.cc

index e4877b5adb06cee92736922591581138d50b148d..e75fa064deedce2e1347b8605939a63162a6c0db 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2016-01-10  Carl Hetherington  <cth@carlh.net>
 
+       * Sort "Add file(s)..." images case-insensitively.
+
        * Version 2.6.15 released.
 
 2016-01-09  Carl Hetherington  <cth@carlh.net>
diff --git a/src/lib/case_insensitive_sorter.cc b/src/lib/case_insensitive_sorter.cc
new file mode 100644 (file)
index 0000000..02543f0
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+    Copyright (C) 2016 Carl Hetherington <cth@carlh.net>
+
+    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., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include "case_insensitive_sorter.h"
+#include <boost/filesystem.hpp>
+#include <boost/foreach.hpp>
+#include <iostream>
+
+using std::string;
+
+bool
+CaseInsensitiveSorter::operator() (boost::filesystem::path a, boost::filesystem::path b)
+{
+       string x = a.string ();
+       string y = b.string ();
+       transform (x.begin(), x.end(), x.begin(), ::tolower);
+       transform (y.begin(), y.end(), y.begin(), ::tolower);
+       return x < y;
+}
diff --git a/src/lib/case_insensitive_sorter.h b/src/lib/case_insensitive_sorter.h
new file mode 100644 (file)
index 0000000..0b77f39
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+    Copyright (C) 2016 Carl Hetherington <cth@carlh.net>
+
+    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., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <boost/filesystem.hpp>
+
+class CaseInsensitiveSorter
+{
+public:
+       bool operator() (boost::filesystem::path a, boost::filesystem::path b);
+};
index 5a1ab8b1081cd9e3f5c26ae4cd343674478770d7..c538851d5facf4ab588b408c8795d0f3299c0b65 100644 (file)
@@ -33,6 +33,7 @@ sources = """
           audio_point.cc
           audio_processor.cc
           audio_stream.cc
+          case_insensitive_sorter.cc
           cinema.cc
           cinema_kdms.cc
           cinema_sound_processor.cc
index 6d4a118687027f695d9a8a98653f4bb11902984f..ee9ed2bf87c96f8e57ffa28eee9e819ebd3b3dcd 100644 (file)
@@ -32,6 +32,7 @@
 #include "lib/content_factory.h"
 #include "lib/image_content.h"
 #include "lib/dcp_content.h"
+#include "lib/case_insensitive_sorter.h"
 #include "lib/playlist.h"
 #include <wx/wx.h>
 #include <wx/notebook.h>
@@ -520,7 +521,7 @@ ContentPanel::add_files (list<boost::filesystem::path> paths)
           alphabetical sort is expected here.
        */
 
-       paths.sort ();
+       paths.sort (CaseInsensitiveSorter ());
 
        /* XXX: check for lots of files here and do something */