From b85e9c623f649dc5e053c2eb44ce1d32f917dd5a Mon Sep 17 00:00:00 2001 From: Adam Reichold Date: Sun, 6 Dec 2015 17:44:38 +0100 Subject: [PATCH] Copy-edit some methods of the batch queue to test usage of C++11's auto variables and lambda functions. --- rtgui/batchqueue.cc | 187 +++++++++++++++++++++----------------------- rtgui/batchqueue.h | 10 +-- 2 files changed, 93 insertions(+), 104 deletions(-) diff --git a/rtgui/batchqueue.cc b/rtgui/batchqueue.cc index 8dc843a8e..5ed12c4c6 100644 --- a/rtgui/batchqueue.cc +++ b/rtgui/batchqueue.cc @@ -21,6 +21,7 @@ #include #include "../rtengine/rt_math.h" +#include #include #include #include @@ -37,13 +38,13 @@ using namespace std; using namespace rtengine; -BatchQueue::BatchQueue (FileCatalog* aFileCatalog) : processing(NULL), fileCatalog(aFileCatalog), sequence(0), listener(NULL) +BatchQueue::BatchQueue (FileCatalog* aFileCatalog) : processing(NULL), fileCatalog(aFileCatalog), sequence(0), listener(NULL), + pmenu (new Gtk::Menu ()) { location = THLOC_BATCHQUEUE; int p = 0; - pmenu = new Gtk::Menu (); pmenu->attach (*Gtk::manage(open = new Gtk::MenuItem (M("FILEBROWSER_POPUPOPENINEDITOR"))), 0, 1, p, p + 1); p++; @@ -79,9 +80,9 @@ BatchQueue::BatchQueue (FileCatalog* aFileCatalog) : processing(NULL), fileCatal cancel->add_accelerator ("activate", pmenu->get_accel_group(), GDK_Delete, (Gdk::ModifierType)0, Gtk::ACCEL_VISIBLE); open->signal_activate().connect(sigc::mem_fun(*this, &BatchQueue::openLastSelectedItemInEditor)); - cancel->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &BatchQueue::cancelItems), &selected)); - head->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &BatchQueue::headItems), &selected)); - tail->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &BatchQueue::tailItems), &selected)); + cancel->signal_activate().connect (std::bind (&BatchQueue::cancelItems, this, selected)); + head->signal_activate().connect (std::bind (&BatchQueue::headItems, this, selected)); + tail->signal_activate().connect (std::bind (&BatchQueue::tailItems, this, selected)); selall->signal_activate().connect (sigc::mem_fun(*this, &BatchQueue::selectAll)); setArrangement (ThumbBrowserBase::TB_Vertical); @@ -99,20 +100,18 @@ BatchQueue::~BatchQueue () } fd.clear (); - - delete pmenu; } void BatchQueue::resizeLoadedQueue() { - // TODO: Check for Linux #if PROTECT_VECTORS MYWRITERLOCK(l, entryRW); #endif - for (size_t i = 0; i < fd.size(); i++) { - fd.at(i)->resize(getThumbnailHeight()); - } + const auto height = getThumbnailHeight (); + + for (const auto entry : fd) + entry->resize(height); } // Reduce the max size of a thumb, since thumb is processed synchronously on adding to queue @@ -161,72 +160,63 @@ bool BatchQueue::keyPressed (GdkEventKey* event) openLastSelectedItemInEditor(); return true; } else if (event->keyval == GDK_Home) { - headItems (&selected); + headItems (selected); return true; } else if (event->keyval == GDK_End) { - tailItems (&selected); + tailItems (selected); return true; } else if (event->keyval == GDK_Delete) { - cancelItems (&selected); + cancelItems (selected); return true; } return false; } -void BatchQueue::addEntries ( std::vector &entries, bool head, bool save) +void BatchQueue::addEntries (const std::vector& entries, bool head, bool save) { { - // TODO: Check for Linux #if PROTECT_VECTORS MYWRITERLOCK(l, entryRW); #endif - for( std::vector::iterator entry = entries.begin(); entry != entries.end(); entry++ ) { - (*entry)->setParent (this); + for (const auto entry : entries) { - // BatchQueueButtonSet HAVE TO be added before resizing to take them into account - BatchQueueButtonSet* bqbs = new BatchQueueButtonSet (*entry); + entry->setParent (this); + + // BatchQueueButtonSet have to be added before resizing to take them into account + const auto bqbs = new BatchQueueButtonSet (entry); bqbs->setButtonListener (this); - (*entry)->addButtonSet (bqbs); + entry->addButtonSet (bqbs); - (*entry)->resize (getThumbnailHeight()); // batch queue might have smaller, restricted size - Glib::ustring tempFile = getTempFilenameForParams( (*entry)->filename ); + // batch queue might have smaller, restricted size + entry->resize (getThumbnailHeight()); // recovery save - if( !(*entry)->params.save( tempFile ) ) { - (*entry)->savedParamsFile = tempFile; - } + const auto tempFile = getTempFilenameForParams (entry->filename); - (*entry)->selected = false; + if (!entry->params.save (tempFile)) + entry->savedParamsFile = tempFile; - if (!head) { - fd.push_back (*entry); - } else { - std::vector::iterator pos; + entry->selected = false; - for (pos = fd.begin(); pos != fd.end(); pos++) - if (!(*pos)->processing) { - fd.insert (pos, *entry); - break; - } + // insert either at the end, or before the first non-processing entry + auto pos = fd.end (); - if (pos == fd.end()) { - fd.push_back (*entry); - } - } + if (head) + pos = std::find_if (fd.begin (), fd.end (), [] (const ThumbBrowserEntryBase* fdEntry) { return !fdEntry->processing; }); - if ((*entry)->thumbnail) { - (*entry)->thumbnail->imageEnqueued (); - } + fd.insert (pos, entry); + + if (entry->thumbnail) + entry->thumbnail->imageEnqueued (); } } - if (save) { - saveBatchQueue( ); - } + if (save) + saveBatchQueue (); - redraw(); + redraw (); notifyListener (false); } @@ -509,107 +499,106 @@ int cancelItemUI (void* data) return 0; } -void BatchQueue::cancelItems (std::vector* items) +void BatchQueue::cancelItems (const std::vector& items) { { - // TODO: Check for Linux #if PROTECT_VECTORS MYWRITERLOCK(l, entryRW); #endif - for (size_t i = 0; i < items->size(); i++) { - BatchQueueEntry* entry = (BatchQueueEntry*)(*items)[i]; + for (const auto item : items) { - if (entry->processing) { + const auto entry = static_cast (item); + + if (entry->processing) continue; - } - std::vector::iterator pos = std::find (fd.begin(), fd.end(), entry); + const auto pos = std::find (fd.begin (), fd.end (), entry); - if (pos != fd.end()) { - fd.erase (pos); - rtengine::ProcessingJob::destroy (entry->job); + if (pos == fd.end ()) + continue; - if (entry->thumbnail) { - entry->thumbnail->imageRemovedFromQueue (); - } + fd.erase (pos); - g_idle_add (cancelItemUI, entry); - } + rtengine::ProcessingJob::destroy (entry->job); + + if (entry->thumbnail) + entry->thumbnail->imageRemovedFromQueue (); + + g_idle_add (cancelItemUI, entry); } - for (size_t i = 0; i < fd.size(); i++) { - fd[i]->selected = false; - } + for (const auto entry : fd) + entry->selected = false; - lastClicked = NULL; + lastClicked = nullptr; selected.clear (); } - saveBatchQueue( ); + saveBatchQueue (); redraw (); notifyListener (false); } -void BatchQueue::headItems (std::vector* items) +void BatchQueue::headItems (const std::vector& items) { { - // TODO: Check for Linux #if PROTECT_VECTORS MYWRITERLOCK(l, entryRW); #endif + for (auto item = items.rbegin(); item != items.rend(); ++item) { - for (int i = items->size() - 1; i >= 0; i--) { - BatchQueueEntry* entry = (BatchQueueEntry*)(*items)[i]; + const auto entry = static_cast (*item); - if (entry->processing) { + if (entry->processing) continue; - } - std::vector::iterator pos = std::find (fd.begin(), fd.end(), entry); + const auto pos = std::find (fd.begin (), fd.end (), entry); - if (pos != fd.end() && pos != fd.begin()) { - fd.erase (pos); + if (pos == fd.end () || pos == fd.begin ()) + continue; - // find the first item that is not under processing - for (pos = fd.begin(); pos != fd.end(); pos++) - if (!(*pos)->processing) { - fd.insert (pos, entry); - break; - } - } + fd.erase (pos); + + // find the first item that is not under processing + const auto newPos = std::find_if (fd.begin (), fd.end (), [] (const ThumbBrowserEntryBase* fdEntry) { return !fdEntry->processing; }); + + fd.insert (newPos, entry); } } - saveBatchQueue( ); + + saveBatchQueue (); redraw (); } -void BatchQueue::tailItems (std::vector* items) +void BatchQueue::tailItems (const std::vector& items) { { - // TODO: Check for Linux #if PROTECT_VECTORS MYWRITERLOCK(l, entryRW); #endif - for (size_t i = 0; i < items->size(); i++) { - BatchQueueEntry* entry = (BatchQueueEntry*)(*items)[i]; + for (const auto item : items) { - if (entry->processing) { + const auto entry = static_cast (item); + + if (entry->processing) continue; - } - std::vector::iterator pos = std::find (fd.begin(), fd.end(), entry); + const auto pos = std::find (fd.begin (), fd.end (), entry); - if (pos != fd.end()) { - fd.erase (pos); - fd.push_back (entry); - } + if (pos == fd.end ()) + continue; + + fd.erase (pos); + + fd.push_back (entry); } } - saveBatchQueue( ); + + saveBatchQueue (); redraw (); } @@ -1034,11 +1023,11 @@ void BatchQueue::buttonPressed (LWButton* button, int actionCode, void* actionDa bqe.push_back (static_cast(actionData)); if (actionCode == 10) { // cancel - cancelItems (&bqe); + cancelItems (bqe); } else if (actionCode == 8) { // to head - headItems (&bqe); + headItems (bqe); } else if (actionCode == 9) { // to tail - tailItems (&bqe); + tailItems (bqe); } } diff --git a/rtgui/batchqueue.h b/rtgui/batchqueue.h index 4e97ebc9f..bef4202d5 100644 --- a/rtgui/batchqueue.h +++ b/rtgui/batchqueue.h @@ -57,7 +57,7 @@ protected: Gtk::ImageMenuItem* tail; Gtk::MenuItem* selall; Gtk::MenuItem* open; - Gtk::Menu* pmenu; + std::unique_ptr pmenu; Glib::RefPtr pmaccelgroup; @@ -72,10 +72,10 @@ public: BatchQueue (FileCatalog* aFileCatalog); ~BatchQueue (); - void addEntries (std::vector &entries, bool head = false, bool save = true); - void cancelItems (std::vector* items); - void headItems (std::vector* items); - void tailItems (std::vector* items); + void addEntries (const std::vector& entries, bool head = false, bool save = true); + void cancelItems (const std::vector& items); + void headItems (const std::vector& items); + void tailItems (const std::vector& items); void selectAll (); void openItemInEditor(ThumbBrowserEntryBase* item); void openLastSelectedItemInEditor();