Add a button to filter the original files to the file browser.
This commit is contained in:
parent
d3ac22531b
commit
ee766b71b8
@ -171,6 +171,7 @@ FILEBROWSER_SHOWEDITEDHINT;Show edited images.\nShortcut: <b>7</b>
|
|||||||
FILEBROWSER_SHOWEDITEDNOTHINT;Show not edited images.\nShortcut: <b>6</b>
|
FILEBROWSER_SHOWEDITEDNOTHINT;Show not edited images.\nShortcut: <b>6</b>
|
||||||
FILEBROWSER_SHOWEXIFINFO;Show Exif info.\n\nShortcuts:\n<b>i</b> - Multiple Editor Tabs Mode,\n<b>Alt-i</b> - Single Editor Tab Mode.
|
FILEBROWSER_SHOWEXIFINFO;Show Exif info.\n\nShortcuts:\n<b>i</b> - Multiple Editor Tabs Mode,\n<b>Alt-i</b> - Single Editor Tab Mode.
|
||||||
FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images.
|
FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images.
|
||||||
|
FILEBROWSER_SHOWORIGINALHINT;Show only the original images.
|
||||||
FILEBROWSER_SHOWRANK1HINT;Show images ranked as 1-star.\nShortcut: <b>1</b>
|
FILEBROWSER_SHOWRANK1HINT;Show images ranked as 1-star.\nShortcut: <b>1</b>
|
||||||
FILEBROWSER_SHOWRANK2HINT;Show images ranked as 2-star.\nShortcut: <b>2</b>
|
FILEBROWSER_SHOWRANK2HINT;Show images ranked as 2-star.\nShortcut: <b>2</b>
|
||||||
FILEBROWSER_SHOWRANK3HINT;Show images ranked as 3-star.\nShortcut: <b>3</b>
|
FILEBROWSER_SHOWRANK3HINT;Show images ranked as 3-star.\nShortcut: <b>3</b>
|
||||||
|
@ -18,11 +18,11 @@
|
|||||||
*/
|
*/
|
||||||
#include "browserfilter.h"
|
#include "browserfilter.h"
|
||||||
|
|
||||||
BrowserFilter::BrowserFilter () : exifFilterEnabled (false)
|
BrowserFilter::BrowserFilter () : exifFilterEnabled (false),
|
||||||
|
showTrash (true),
|
||||||
|
showNotTrash (true),
|
||||||
|
showOriginal (false)
|
||||||
{
|
{
|
||||||
|
|
||||||
showTrash = true;
|
|
||||||
|
|
||||||
for (int i = 0; i < 6; i++) {
|
for (int i = 0; i < 6; i++) {
|
||||||
showRanked[i] = true;
|
showRanked[i] = true;
|
||||||
showCLabeled[i] = true;
|
showCLabeled[i] = true;
|
||||||
|
@ -30,6 +30,7 @@ public:
|
|||||||
bool showCLabeled[6];
|
bool showCLabeled[6];
|
||||||
bool showTrash;
|
bool showTrash;
|
||||||
bool showNotTrash;
|
bool showNotTrash;
|
||||||
|
bool showOriginal;
|
||||||
bool showEdited[2];
|
bool showEdited[2];
|
||||||
bool showRecentlySaved[2];
|
bool showRecentlySaved[2];
|
||||||
bool multiselect;
|
bool multiselect;
|
||||||
|
@ -1461,7 +1461,7 @@ void FileBrowser::applyFilter (const BrowserFilter& filter)
|
|||||||
MYWRITERLOCK(l, entryRW); // Don't make this a writer lock! HOMBRE: Why? 'selected' is modified here
|
MYWRITERLOCK(l, entryRW); // Don't make this a writer lock! HOMBRE: Why? 'selected' is modified here
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (true/* TODO: filterOriginal */) {
|
if (filter.showOriginal) {
|
||||||
findOriginalEntries(fd);
|
findOriginalEntries(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1495,7 +1495,7 @@ bool FileBrowser::checkFilter (ThumbBrowserEntryBase* entryb) // true -> entry
|
|||||||
|
|
||||||
FileBrowserEntry* entry = static_cast<FileBrowserEntry*>(entryb);
|
FileBrowserEntry* entry = static_cast<FileBrowserEntry*>(entryb);
|
||||||
|
|
||||||
if (true/* TODO: filterOriginal */ && entry->getOriginal() != NULL) {
|
if (filter.showOriginal && entry->getOriginal() != NULL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -294,8 +294,16 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
|
|||||||
bCateg[18] = bNotTrash->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bNotTrash, true));
|
bCateg[18] = bNotTrash->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bNotTrash, true));
|
||||||
bNotTrash->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event), false);
|
bNotTrash->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event), false);
|
||||||
|
|
||||||
|
bOriginal = Gtk::manage( new Gtk::ToggleButton () );
|
||||||
|
bOriginal->set_label ("O"); // TODO: Add icon...
|
||||||
|
bOriginal->set_tooltip_markup (M("FILEBROWSER_SHOWORIGINALHINT"));
|
||||||
|
bOriginal->set_relief (Gtk::RELIEF_NONE);
|
||||||
|
bCateg[19] = bOriginal->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bOriginal, true));
|
||||||
|
bOriginal->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event), false);
|
||||||
|
|
||||||
buttonBar->pack_start (*bTrash, Gtk::PACK_SHRINK);
|
buttonBar->pack_start (*bTrash, Gtk::PACK_SHRINK);
|
||||||
buttonBar->pack_start (*bNotTrash, Gtk::PACK_SHRINK);
|
buttonBar->pack_start (*bNotTrash, Gtk::PACK_SHRINK);
|
||||||
|
buttonBar->pack_start (*bOriginal, Gtk::PACK_SHRINK);
|
||||||
buttonBar->pack_start (*Gtk::manage(new Gtk::VSeparator), Gtk::PACK_SHRINK);
|
buttonBar->pack_start (*Gtk::manage(new Gtk::VSeparator), Gtk::PACK_SHRINK);
|
||||||
fileBrowser->trash_changed().connect( sigc::mem_fun(*this, &FileCatalog::trashChanged) );
|
fileBrowser->trash_changed().connect( sigc::mem_fun(*this, &FileCatalog::trashChanged) );
|
||||||
|
|
||||||
@ -318,6 +326,7 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
|
|||||||
// 16 - bRecentlySaved[1]
|
// 16 - bRecentlySaved[1]
|
||||||
// 17 - bTrash
|
// 17 - bTrash
|
||||||
// 18 - bNotTrash
|
// 18 - bNotTrash
|
||||||
|
// 19 - bOriginal
|
||||||
|
|
||||||
categoryButtons[0] = bFilterClear;
|
categoryButtons[0] = bFilterClear;
|
||||||
categoryButtons[1] = bUnRanked;
|
categoryButtons[1] = bUnRanked;
|
||||||
@ -342,6 +351,7 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
|
|||||||
|
|
||||||
categoryButtons[17] = bTrash;
|
categoryButtons[17] = bTrash;
|
||||||
categoryButtons[18] = bNotTrash;
|
categoryButtons[18] = bNotTrash;
|
||||||
|
categoryButtons[19] = bOriginal;
|
||||||
|
|
||||||
exifInfo = Gtk::manage(new Gtk::ToggleButton ());
|
exifInfo = Gtk::manage(new Gtk::ToggleButton ());
|
||||||
exifInfo->set_image (*Gtk::manage(new RTImage ("info.png")));
|
exifInfo->set_image (*Gtk::manage(new RTImage ("info.png")));
|
||||||
@ -1351,8 +1361,8 @@ void FileCatalog::categoryButtonToggled (Gtk::ToggleButton* b, bool isMouseClick
|
|||||||
|
|
||||||
// if no modifier key is pressed,
|
// if no modifier key is pressed,
|
||||||
if (!(control_down || shift_down)) {
|
if (!(control_down || shift_down)) {
|
||||||
// if we're deselecting non-trashed
|
// if we're deselecting non-trashed or original
|
||||||
if (toggled_button == 18 && (buttons & (1 << toggled_button))) {
|
if (toggled_button >= 18 && toggled_button <= 19 && (buttons & (1 << toggled_button))) {
|
||||||
categoryButtons[0]->set_active (true);
|
categoryButtons[0]->set_active (true);
|
||||||
|
|
||||||
for (int i = 1; i < numButtons; i++) {
|
for (int i = 1; i < numButtons; i++) {
|
||||||
@ -1445,9 +1455,15 @@ void FileCatalog::categoryButtonToggled (Gtk::ToggleButton* b, bool isMouseClick
|
|||||||
//if more than one star & color label is selected, do nothing
|
//if more than one star & color label is selected, do nothing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// ...or non-trashed with Control modifier
|
// ...or non-trashed or original with Control modifier
|
||||||
else if (toggled_button == 18 && control_down) {
|
else if (toggled_button >= 18 && toggled_button <= 19 && control_down) {
|
||||||
bNotTrash->set_active (!bNotTrash->get_active ());
|
Gtk::ToggleButton* categoryButton = categoryButtons[toggled_button];
|
||||||
|
categoryButton->set_active (!categoryButton->get_active ());
|
||||||
|
|
||||||
|
// If it was the first or last one, we reset the clear filter.
|
||||||
|
if (buttons == 1 || buttons == (1 << toggled_button)) {
|
||||||
|
bFilterClear->set_active (!categoryButton->get_active ());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool active_now, active_before;
|
bool active_now, active_before;
|
||||||
@ -1554,30 +1570,30 @@ BrowserFilter FileCatalog::getFilter ()
|
|||||||
bool anyCLabelFilterActive = bUnCLabeled->get_active () || bCLabel[0]->get_active () || bCLabel[1]->get_active () || bCLabel[2]->get_active () || bCLabel[3]->get_active () || bCLabel[4]->get_active ();
|
bool anyCLabelFilterActive = bUnCLabeled->get_active () || bCLabel[0]->get_active () || bCLabel[1]->get_active () || bCLabel[2]->get_active () || bCLabel[3]->get_active () || bCLabel[4]->get_active ();
|
||||||
bool anyEditedFilterActive = bEdited[0]->get_active() || bEdited[1]->get_active();
|
bool anyEditedFilterActive = bEdited[0]->get_active() || bEdited[1]->get_active();
|
||||||
bool anyRecentlySavedFilterActive = bRecentlySaved[0]->get_active() || bRecentlySaved[1]->get_active();
|
bool anyRecentlySavedFilterActive = bRecentlySaved[0]->get_active() || bRecentlySaved[1]->get_active();
|
||||||
const bool nonTrashedActive = bNotTrash->get_active();
|
const bool anySupplementaryActive = bNotTrash->get_active() || bOriginal->get_active();
|
||||||
/*
|
/*
|
||||||
* filter is setup in 2 steps
|
* filter is setup in 2 steps
|
||||||
* Step 1: handle individual filters
|
* Step 1: handle individual filters
|
||||||
*/
|
*/
|
||||||
filter.showRanked[0] = bFilterClear->get_active() || bUnRanked->get_active () || bTrash->get_active () || nonTrashedActive ||
|
filter.showRanked[0] = bFilterClear->get_active() || bUnRanked->get_active () || bTrash->get_active () || anySupplementaryActive ||
|
||||||
anyCLabelFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive;
|
anyCLabelFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive;
|
||||||
|
|
||||||
filter.showCLabeled[0] = bFilterClear->get_active() || bUnCLabeled->get_active () || bTrash->get_active () || nonTrashedActive ||
|
filter.showCLabeled[0] = bFilterClear->get_active() || bUnCLabeled->get_active () || bTrash->get_active () || anySupplementaryActive ||
|
||||||
anyRankFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive;
|
anyRankFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive;
|
||||||
|
|
||||||
for (int i = 1; i <= 5; i++) {
|
for (int i = 1; i <= 5; i++) {
|
||||||
filter.showRanked[i] = bFilterClear->get_active() || bRank[i - 1]->get_active () || bTrash->get_active () || nonTrashedActive ||
|
filter.showRanked[i] = bFilterClear->get_active() || bRank[i - 1]->get_active () || bTrash->get_active () || anySupplementaryActive ||
|
||||||
anyCLabelFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive;
|
anyCLabelFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive;
|
||||||
|
|
||||||
filter.showCLabeled[i] = bFilterClear->get_active() || bCLabel[i - 1]->get_active () || bTrash->get_active () || nonTrashedActive ||
|
filter.showCLabeled[i] = bFilterClear->get_active() || bCLabel[i - 1]->get_active () || bTrash->get_active () || anySupplementaryActive ||
|
||||||
anyRankFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive;
|
anyRankFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < 2; i++) {
|
for (int i = 0; i < 2; i++) {
|
||||||
filter.showEdited[i] = bFilterClear->get_active() || bEdited[i]->get_active () || bTrash->get_active () || nonTrashedActive ||
|
filter.showEdited[i] = bFilterClear->get_active() || bEdited[i]->get_active () || bTrash->get_active () || anySupplementaryActive ||
|
||||||
anyRankFilterActive || anyCLabelFilterActive || anyRecentlySavedFilterActive;
|
anyRankFilterActive || anyCLabelFilterActive || anyRecentlySavedFilterActive;
|
||||||
|
|
||||||
filter.showRecentlySaved[i] = bFilterClear->get_active() || bRecentlySaved[i]->get_active () || bTrash->get_active () || nonTrashedActive ||
|
filter.showRecentlySaved[i] = bFilterClear->get_active() || bRecentlySaved[i]->get_active () || bTrash->get_active () || anySupplementaryActive ||
|
||||||
anyRankFilterActive || anyCLabelFilterActive || anyEditedFilterActive;
|
anyRankFilterActive || anyCLabelFilterActive || anyEditedFilterActive;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1615,7 +1631,7 @@ BrowserFilter FileCatalog::getFilter ()
|
|||||||
(anyCLabelFilterActive && anyEditedFilterActive ) ||
|
(anyCLabelFilterActive && anyEditedFilterActive ) ||
|
||||||
(anyCLabelFilterActive && anyRecentlySavedFilterActive ) ||
|
(anyCLabelFilterActive && anyRecentlySavedFilterActive ) ||
|
||||||
(anyEditedFilterActive && anyRecentlySavedFilterActive) ||
|
(anyEditedFilterActive && anyRecentlySavedFilterActive) ||
|
||||||
(nonTrashedActive && (anyRankFilterActive || anyCLabelFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive))) {
|
(anySupplementaryActive && (anyRankFilterActive || anyCLabelFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive))) {
|
||||||
|
|
||||||
filter.multiselect = true;
|
filter.multiselect = true;
|
||||||
filter.showRanked[0] = anyRankFilterActive ? bUnRanked->get_active () : true;
|
filter.showRanked[0] = anyRankFilterActive ? bUnRanked->get_active () : true;
|
||||||
@ -1657,6 +1673,7 @@ BrowserFilter FileCatalog::getFilter ()
|
|||||||
|
|
||||||
filter.showTrash = bTrash->get_active () || !bNotTrash->get_active ();
|
filter.showTrash = bTrash->get_active () || !bNotTrash->get_active ();
|
||||||
filter.showNotTrash = !bTrash->get_active ();
|
filter.showNotTrash = !bTrash->get_active ();
|
||||||
|
filter.showOriginal = bOriginal->get_active();
|
||||||
|
|
||||||
if (!filterPanel) {
|
if (!filterPanel) {
|
||||||
filter.exifFilterEnabled = false;
|
filter.exifFilterEnabled = false;
|
||||||
|
@ -108,9 +108,10 @@ private:
|
|||||||
Gtk::ToggleButton* bRecentlySaved[2];
|
Gtk::ToggleButton* bRecentlySaved[2];
|
||||||
Gtk::ToggleButton* bTrash;
|
Gtk::ToggleButton* bTrash;
|
||||||
Gtk::ToggleButton* bNotTrash;
|
Gtk::ToggleButton* bNotTrash;
|
||||||
Gtk::ToggleButton* categoryButtons[19];
|
Gtk::ToggleButton* bOriginal;
|
||||||
|
Gtk::ToggleButton* categoryButtons[20];
|
||||||
Gtk::ToggleButton* exifInfo;
|
Gtk::ToggleButton* exifInfo;
|
||||||
sigc::connection bCateg[19];
|
sigc::connection bCateg[20];
|
||||||
Gtk::Image* iFilterClear, *igFilterClear;
|
Gtk::Image* iFilterClear, *igFilterClear;
|
||||||
Gtk::Image* iranked[5], *igranked[5], *iUnRanked, *igUnRanked;
|
Gtk::Image* iranked[5], *igranked[5], *iUnRanked, *igUnRanked;
|
||||||
Gtk::Image* iCLabeled[5], *igCLabeled[5], *iUnCLabeled, *igUnCLabeled;
|
Gtk::Image* iCLabeled[5], *igCLabeled[5], *iUnCLabeled, *igUnCLabeled;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user