diff --git a/rtdata/images/cglabel0.png b/rtdata/images/cglabel0.png
new file mode 100644
index 000000000..6199711a1
Binary files /dev/null and b/rtdata/images/cglabel0.png differ
diff --git a/rtdata/images/clabel0.png b/rtdata/images/clabel0.png
new file mode 100644
index 000000000..e7f5c457c
Binary files /dev/null and b/rtdata/images/clabel0.png differ
diff --git a/rtdata/images/edited_10.png b/rtdata/images/edited_10.png
new file mode 100644
index 000000000..f38fd20de
Binary files /dev/null and b/rtdata/images/edited_10.png differ
diff --git a/rtdata/images/editedg_10.png b/rtdata/images/editedg_10.png
new file mode 100644
index 000000000..263050446
Binary files /dev/null and b/rtdata/images/editedg_10.png differ
diff --git a/rtdata/images/editednot_10.png b/rtdata/images/editednot_10.png
new file mode 100644
index 000000000..2db9297e5
Binary files /dev/null and b/rtdata/images/editednot_10.png differ
diff --git a/rtdata/images/editednotg_10.png b/rtdata/images/editednotg_10.png
new file mode 100644
index 000000000..b9034194f
Binary files /dev/null and b/rtdata/images/editednotg_10.png differ
diff --git a/rtdata/images/filterclear_18.png b/rtdata/images/filterclear_18.png
new file mode 100644
index 000000000..98b81b9b5
Binary files /dev/null and b/rtdata/images/filterclear_18.png differ
diff --git a/rtdata/images/filterclearg_18.png b/rtdata/images/filterclearg_18.png
new file mode 100644
index 000000000..cc2fdbd58
Binary files /dev/null and b/rtdata/images/filterclearg_18.png differ
diff --git a/rtdata/images/ratednot_10.png b/rtdata/images/ratednot_10.png
new file mode 100644
index 000000000..1b03db8fd
Binary files /dev/null and b/rtdata/images/ratednot_10.png differ
diff --git a/rtdata/images/ratednotg_10.png b/rtdata/images/ratednotg_10.png
new file mode 100644
index 000000000..3d6bff4f6
Binary files /dev/null and b/rtdata/images/ratednotg_10.png differ
diff --git a/rtdata/images/saved_10.png b/rtdata/images/saved_10.png
new file mode 100644
index 000000000..abe097d00
Binary files /dev/null and b/rtdata/images/saved_10.png differ
diff --git a/rtdata/images/savedg_10.png b/rtdata/images/savedg_10.png
new file mode 100644
index 000000000..0528ea05c
Binary files /dev/null and b/rtdata/images/savedg_10.png differ
diff --git a/rtdata/images/savednot_10.png b/rtdata/images/savednot_10.png
new file mode 100644
index 000000000..90ca8b433
Binary files /dev/null and b/rtdata/images/savednot_10.png differ
diff --git a/rtdata/images/savednotg_10.png b/rtdata/images/savednotg_10.png
new file mode 100644
index 000000000..13234db94
Binary files /dev/null and b/rtdata/images/savednotg_10.png differ
diff --git a/rtdata/images/unrated.png b/rtdata/images/unrated.png
index b5420202e..3d6bff4f6 100644
Binary files a/rtdata/images/unrated.png and b/rtdata/images/unrated.png differ
diff --git a/rtdata/languages/default b/rtdata/languages/default
index 70a7fbe76..e960fb34a 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -128,6 +128,8 @@ FILEBROWSER_SHOWCOLORLABEL3HINT;Show images labeled Green Alt-3
FILEBROWSER_SHOWCOLORLABEL4HINT;Show images labeled Blue Alt-4
FILEBROWSER_SHOWCOLORLABEL5HINT;Show images labeled Purple Alt-5
FILEBROWSER_SHOWDIRHINT;Clear all filters D
+FILEBROWSER_SHOWEDITEDHINT;Show edited images 7
+FILEBROWSER_SHOWEDITEDNOTHINT;Show not edited images 6
FILEBROWSER_SHOWEXIFINFO;Show EXIF info i
FILEBROWSER_SHOWQUEUEHINT;Show content of the processing queue
FILEBROWSER_SHOWRANK1HINT;Show images ranked as 1 star 1
@@ -135,6 +137,8 @@ FILEBROWSER_SHOWRANK2HINT;Show images ranked as 2 star 2
FILEBROWSER_SHOWRANK3HINT;Show images ranked as 3 star 3
FILEBROWSER_SHOWRANK4HINT;Show images ranked as 4 star 4
FILEBROWSER_SHOWRANK5HINT;Show images ranked as 5 star 5
+FILEBROWSER_SHOWRECENTLYSAVEDHINT;Show images recently saved Alt-7
+FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Show images not recently saved Alt-6
FILEBROWSER_SHOWTRASHHINT;Show content of the trash T
FILEBROWSER_SHOWUNCOLORHINT;Show images without Color label Alt-`
FILEBROWSER_SHOWUNRANKHINT;Show unranked images `
diff --git a/rtgui/browserfilter.cc b/rtgui/browserfilter.cc
index ac85a92f3..fda8aff9e 100644
--- a/rtgui/browserfilter.cc
+++ b/rtgui/browserfilter.cc
@@ -25,4 +25,9 @@ BrowserFilter::BrowserFilter () : exifFilterEnabled (false) {
showRanked[i] = true;
showCLabeled[i] = true;
}
+ for (int i=0; i<2; i++){
+ showEdited[i] = true;
+ showRecentlySaved[i] = true;
+ }
}
+
diff --git a/rtgui/browserfilter.h b/rtgui/browserfilter.h
index 6867f65da..ecfc17262 100644
--- a/rtgui/browserfilter.h
+++ b/rtgui/browserfilter.h
@@ -30,6 +30,8 @@ class BrowserFilter {
bool showTrash;
bool showNotTrash;
bool showEdited[2];
+ bool showRecentlySaved[2];
+ bool multiselect;
Glib::ustring queryString;
Glib::ustring queryFileName;
diff --git a/rtgui/filebrowser.cc b/rtgui/filebrowser.cc
index 61191217d..3be2b3a5b 100644
--- a/rtgui/filebrowser.cc
+++ b/rtgui/filebrowser.cc
@@ -775,7 +775,17 @@ bool FileBrowser::checkFilter (ThumbBrowserEntryBase* entryb) { // true -> entry
FileBrowserEntry* entry = (FileBrowserEntry*)entryb;
// return false if basic filter settings are not satisfied
- if (filter.showRanked[entry->thumbnail->getRank()]==false || filter.showCLabeled[entry->thumbnail->getColorLabel()]==false || (entry->thumbnail->getStage()==1 && !filter.showTrash) || (entry->thumbnail->getStage()==0 && !filter.showNotTrash))
+ if ((filter.showRanked[entry->thumbnail->getRank()]==false ) || \
+ (filter.showCLabeled[entry->thumbnail->getColorLabel()]==false ) || \
+
+ ((entry->thumbnail->hasProcParams() && filter.showEdited[0]) && !filter.showEdited[1]) || \
+ ((!entry->thumbnail->hasProcParams() && filter.showEdited[1])&& !filter.showEdited[0]) || \
+
+ ((entry->thumbnail->isRecentlySaved() && filter.showRecentlySaved[0]) && !filter.showRecentlySaved[1]) || \
+ ((!entry->thumbnail->isRecentlySaved() && filter.showRecentlySaved[1]) && !filter.showRecentlySaved[0]) || \
+
+ (entry->thumbnail->getStage()==1 && !filter.showTrash) || \
+ (entry->thumbnail->getStage()==0 && !filter.showNotTrash))
return false;
// return false is query is not satisfied
diff --git a/rtgui/filecatalog.cc b/rtgui/filecatalog.cc
index e38e2593c..1397a6a3e 100644
--- a/rtgui/filecatalog.cc
+++ b/rtgui/filecatalog.cc
@@ -132,9 +132,13 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
buttonBar->pack_start (*tbLeftPanel_1, Gtk::PACK_SHRINK);
buttonBar->pack_start (*(new Gtk::VSeparator), Gtk::PACK_SHRINK);
+
+
+ iFilterClear = new Gtk::Image (argv0+"/images/filterclear_18.png");
+ igFilterClear = new Gtk::Image (argv0+"/images/filterclearg_18.png");
bFilterClear = Gtk::manage(new Gtk::ToggleButton ());
bFilterClear->set_active (true);
- bFilterClear->set_image (*Gtk::manage(new Gtk::Image (argv0+"/images/filterclear.png")));
+ bFilterClear->set_image(*iFilterClear);//(*Gtk::manage(new Gtk::Image (argv0+"/images/filterclear.png")));
bFilterClear->set_relief (Gtk::RELIEF_NONE);
bFilterClear->set_tooltip_markup (M("FILEBROWSER_SHOWDIRHINT"));
bFilterClear->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
@@ -146,9 +150,11 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
fltrRankbox = Gtk::manage (new Gtk::HBox());
fltrLabelbox = Gtk::manage (new Gtk::HBox());
+ iUnRanked = new Gtk::Image (argv0+"/images/ratednot_10.png");
+ igUnRanked = new Gtk::Image (argv0+"/images/ratednotg_10.png");
bUnRanked = Gtk::manage( new Gtk::ToggleButton () );
bUnRanked->set_active (false);
- bUnRanked->set_image (*Gtk::manage(new Gtk::Image (argv0+"/images/unrated.png")));
+ bUnRanked->set_image (*igUnRanked);
bUnRanked->set_relief (Gtk::RELIEF_NONE);
bUnRanked->set_tooltip_markup (M("FILEBROWSER_SHOWUNRANKHINT"));
bCateg[1] = bUnRanked->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bUnRanked));
@@ -168,9 +174,11 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
bRank[i]->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
}
+ iUnCLabeled = new Gtk::Image (argv0+"/images/clabel0.png");
+ igUnCLabeled = new Gtk::Image (argv0+"/images/cglabel0.png");
bUnCLabeled = Gtk::manage(new Gtk::ToggleButton ());
bUnCLabeled->set_active (false);
- bUnCLabeled->set_image (*Gtk::manage(new Gtk::Image (argv0+"/images/uncolorlabel.png")));
+ bUnCLabeled->set_image (*igUnCLabeled);
bUnCLabeled->set_relief (Gtk::RELIEF_NONE);
bUnCLabeled->set_tooltip_markup (M("FILEBROWSER_SHOWUNCOLORHINT"));
bCateg[7] = bUnCLabeled->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bUnCLabeled));
@@ -208,6 +216,55 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
buttonBar->pack_start (*Gtk::manage(new Gtk::VSeparator), Gtk::PACK_SHRINK);
+ fltrVbox2 = Gtk::manage (new Gtk::VBox());
+ fltrEditedBox = Gtk::manage (new Gtk::HBox());
+ fltrRecentlySavedBox = Gtk::manage (new Gtk::HBox());
+
+ // bEdited
+ iEdited[0] = new Gtk::Image (argv0+"/images/editednot_10.png");
+ igEdited[0] = new Gtk::Image (argv0+"/images/editednotg_10.png");
+ iEdited[1] = new Gtk::Image (argv0+"/images/edited_10.png");
+ igEdited[1] = new Gtk::Image (argv0+"/images/editedg_10.png");
+ for (int i=0; i<2; i++) {
+ iEdited[i]->show ();
+ bEdited[i] = Gtk::manage(new Gtk::ToggleButton ());
+ bEdited[i]->set_active (false);
+ bEdited[i]->set_image (*igEdited[i]);
+ bEdited[i]->set_relief (Gtk::RELIEF_NONE);
+ fltrEditedBox->pack_start (*bEdited[i], Gtk::PACK_SHRINK);
+ //13, 14
+ bCateg[i+13] = bEdited[i]->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bEdited[i]));
+ bEdited[i]->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
+ }
+ bEdited[0]->set_tooltip_markup (M("FILEBROWSER_SHOWEDITEDNOTHINT"));
+ bEdited[1]->set_tooltip_markup (M("FILEBROWSER_SHOWEDITEDHINT"));
+
+ // RecentlySaved
+ iRecentlySaved[0] = new Gtk::Image (argv0+"/images/savednot_10.png");
+ igRecentlySaved[0] = new Gtk::Image (argv0+"/images/savednotg_10.png");
+ iRecentlySaved[1] = new Gtk::Image (argv0+"/images/saved_10.png");
+ igRecentlySaved[1] = new Gtk::Image (argv0+"/images/savedg_10.png");
+ for (int i=0; i<2; i++) {
+ iRecentlySaved[i]->show ();
+ bRecentlySaved[i] = Gtk::manage(new Gtk::ToggleButton ());
+ bRecentlySaved[i]->set_active (false);
+ bRecentlySaved[i]->set_image (*igRecentlySaved[i]);
+ bRecentlySaved[i]->set_relief (Gtk::RELIEF_NONE);
+ fltrRecentlySavedBox->pack_start (*bRecentlySaved[i], Gtk::PACK_SHRINK);
+ //15, 16
+ bCateg[i+15] = bRecentlySaved[i]->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bRecentlySaved[i]));
+ bRecentlySaved[i]->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
+ }
+ bRecentlySaved[0]->set_tooltip_markup (M("FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT"));
+ bRecentlySaved[1]->set_tooltip_markup (M("FILEBROWSER_SHOWRECENTLYSAVEDHINT"));
+
+ fltrVbox2->pack_start (*fltrEditedBox, Gtk::PACK_SHRINK,0);
+ fltrVbox2->pack_start (*fltrRecentlySavedBox, Gtk::PACK_SHRINK,0);
+ buttonBar->pack_start (*fltrVbox2, Gtk::PACK_SHRINK);
+
+ buttonBar->pack_start (*Gtk::manage(new Gtk::VSeparator), Gtk::PACK_SHRINK);
+
+ // Trash
iTrashEmpty = new Gtk::Image(argv0+"/images/trash-show-empty.png") ;
iTrashFull = new Gtk::Image(argv0+"/images/trash-show-full.png") ;
@@ -215,7 +272,7 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
bTrash->set_image (*iTrashEmpty);
bTrash->set_relief (Gtk::RELIEF_NONE);
bTrash->set_tooltip_markup (M("FILEBROWSER_SHOWTRASHHINT"));
- bCateg[13] = bTrash->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bTrash));
+ bCateg[17] = bTrash->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bTrash));
bTrash->signal_button_press_event().connect (sigc::mem_fun(*this, &FileCatalog::capture_event),false);
buttonBar->pack_start (*bTrash, Gtk::PACK_SHRINK);
buttonBar->pack_start (*Gtk::manage(new Gtk::VSeparator), Gtk::PACK_SHRINK);
@@ -234,13 +291,20 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
// 10 - bCLabel[2]
// 11 - bCLabel[3]
// 12 - bCLabel[4]
- // 13 - bTrash
+ // 13 - bEdited[0]
+ // 14 - bEdited[1]
+ // 15 - bRecentlySaved[0]
+ // 16 - bRecentlySaved[1]
+ // 17 - bTrash
+
categoryButtons[0] = bFilterClear;
categoryButtons[1] = bUnRanked;
for (int i=0; i<5; i++){ categoryButtons[i+2] = bRank[i];}
categoryButtons[7] = bUnCLabeled;
for (int i=0; i<5; i++){ categoryButtons[i+8] = bCLabel[i];}
- categoryButtons[13] = bTrash;
+ for (int i=0; i<2; i++){ categoryButtons[i+13] = bEdited[i];}
+ for (int i=0; i<2; i++){ categoryButtons[i+15] = bRecentlySaved[i];}
+ categoryButtons[17] = bTrash;
exifInfo = Gtk::manage(new Gtk::ToggleButton ());
exifInfo->set_image (*Gtk::manage(new Gtk::Image (argv0+"/images/info.png")));
@@ -301,7 +365,7 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
enabled = true;
lastScrollPos = 0;
- for (int i=0; i<14; i++) {
+ for (int i=0; i<18; i++) {
hScrollPos[i] = 0;
vScrollPos[i] = 0;
}
@@ -319,6 +383,18 @@ FileCatalog::~FileCatalog(){
delete iCLabeled[i];
delete igCLabeled[i];
}
+ for (int i=0; i<2; i++) {
+ delete iEdited[i];
+ delete igEdited[i];
+ delete iRecentlySaved[i];
+ delete igRecentlySaved[i];
+ }
+ delete iFilterClear;
+ delete igFilterClear;
+ delete iUnRanked;
+ delete igUnRanked;
+ delete iUnCLabeled;
+ delete igUnCLabeled;
delete iTrashEmpty;
delete iTrashFull;
delete iRefreshWhite;
@@ -895,7 +971,7 @@ void FileCatalog::categoryButtonToggled (Gtk::ToggleButton* b) {
//was shift key pressed
bool shift_down = modifierKey & GDK_SHIFT_MASK;
- for (int i=0; i<14; i++)
+ for (int i=0; i<18; i++)
bCateg[i].block (true);
//button is already toggled when entering this function, so we switch it back to its initial state
@@ -909,9 +985,9 @@ void FileCatalog::categoryButtonToggled (Gtk::ToggleButton* b) {
//we look how many stars are already toggled on, if any
int toggled_stars_count=0, buttons=0, start_star=0, toggled_button=0;
- for (int i=0; i<14; i++) {
+ for (int i=0; i<18; i++) {
if (categoryButtons[i]->get_active()) {
- if (i>0 && i<13) {
+ if (i>0 && i<17) {
toggled_stars_count ++;
start_star = i;
}
@@ -922,12 +998,12 @@ void FileCatalog::categoryButtonToggled (Gtk::ToggleButton* b) {
//if no modifier key were pressed, we can switch-on the button, and clear all others
if (!(control_down || shift_down)) {
- for (int i=0; i<14; i++) {
+ for (int i=0; i<18; i++) {
categoryButtons[i]->set_active (i==toggled_button);
}
}
//modifier key allowed only for stars and color labels
- else if (toggled_button>0 && toggled_button<13) {
+ else if (toggled_button>0 && toggled_button<17) {
if (control_down) {
//control is pressed
if (toggled_stars_count == 1 && (buttons & (1 << toggled_button))) {
@@ -944,7 +1020,7 @@ void FileCatalog::categoryButtonToggled (Gtk::ToggleButton* b) {
//no star selected
//we deselect the 2 non star filters
if (buttons & 1 ) categoryButtons[0]->set_active(false);
- if (buttons & (1 << 13)) categoryButtons[13]->set_active(false);
+ if (buttons & (1 << 17)) categoryButtons[17]->set_active(false);
//and we toggle on the star
categoryButtons[toggled_button]->set_active (true);
}
@@ -955,7 +1031,8 @@ void FileCatalog::categoryButtonToggled (Gtk::ToggleButton* b) {
//we deselect the 2 non star filters
if (buttons & 1 ) categoryButtons[0]->set_active(false);
if (buttons & (1 << 7)) categoryButtons[7]->set_active(false);
- if (buttons & (1 << 13)) categoryButtons[13]->set_active(false); //!!! verify if (1 << 13) is correct?
+ if (buttons & (1 << 13)) categoryButtons[13]->set_active(false);
+ if (buttons & (1 << 17)) categoryButtons[17]->set_active(false);
//and we set the start star to 1 (unrated images)
start_star = 1;
//we act as if one star were selected
@@ -974,24 +1051,54 @@ void FileCatalog::categoryButtonToggled (Gtk::ToggleButton* b) {
}
}
- // set the right images
+ bool active_now, active_before;
+
+ // FilterClear: set the right images
+ // TODO: swapping FilterClear icon needs more work in categoryButtonToggled
+ /*active_now = bFilterClear->get_active();
+ active_before = buttons & (1 << (0)); // 0
+ if ( active_now && !active_before) bFilterClear->set_image (*iFilterClear);
+ else if (!active_now && active_before) bFilterClear->set_image (*igFilterClear);*/
+
+ // rank: set the right images
for (int i=0; i<5; i++) {
- bool active_now, active_before;
active_now = bRank[i]->get_active();
- active_before = buttons & (1 << (i+2));
+ active_before = buttons & (1 << (i+2)); // 2,3,4,5,6
if ( active_now && !active_before) bRank[i]->set_image (*iranked[i]);
else if (!active_now && active_before) bRank[i]->set_image (*igranked[i]);
}
+ active_now = bUnRanked->get_active();
+ active_before = buttons & (1 << (1)); // 1
+ if ( active_now && !active_before) bUnRanked->set_image (*iUnRanked);
+ else if (!active_now && active_before) bUnRanked->set_image (*igUnRanked);
-
- // set the right images
+ // color labels: set the right images
for (int i=0; i<5; i++) {
- bool active_now, active_before;
active_now = bCLabel[i]->get_active();
- active_before = buttons & (1 << (i+8));
+ active_before = buttons & (1 << (i+8)); // 8,9,10,11,12
if ( active_now && !active_before) bCLabel[i]->set_image (*iCLabeled[i]);
else if (!active_now && active_before) bCLabel[i]->set_image (*igCLabeled[i]);
}
+ active_now = bUnCLabeled->get_active();
+ active_before = buttons & (1 << (7)); // 7
+ if ( active_now && !active_before) bUnCLabeled->set_image (*iUnCLabeled);
+ else if (!active_now && active_before) bUnCLabeled->set_image (*igUnCLabeled);
+
+ // Edited: set the right images
+ for (int i=0; i<2; i++) {
+ active_now = bEdited[i]->get_active();
+ active_before = buttons & (1 << (i+13)); //13,14
+ if ( active_now && !active_before) bEdited[i]->set_image (*iEdited[i]);
+ else if (!active_now && active_before) bEdited[i]->set_image (*igEdited[i]);
+ }
+
+ // RecentlySaved: set the right images
+ for (int i=0; i<2; i++) {
+ active_now = bRecentlySaved[i]->get_active();
+ active_before = buttons & (1 << (i+15));//15,16
+ if ( active_now && !active_before) bRecentlySaved[i]->set_image (*iRecentlySaved[i]);
+ else if (!active_now && active_before) bRecentlySaved[i]->set_image (*igRecentlySaved[i]);
+ }
fileBrowser->applyFilter (getFilter ());
_refreshProgressBar();
@@ -1005,39 +1112,88 @@ void FileCatalog::categoryButtonToggled (Gtk::ToggleButton* b) {
fileBrowser->setScrollPosition (hScrollPos[lastScrollPos], vScrollPos[lastScrollPos]);
}
- for (int i=0; i<14; i++)
+ for (int i=0; i<18; i++)
bCateg[i].block (false);
}
BrowserFilter FileCatalog::getFilter () {
- BrowserFilter filter;
+ BrowserFilter filter;
+
+ bool anyRankFilterActive = bUnRanked->get_active () || bRank[0]->get_active () || bRank[1]->get_active () || bRank[2]->get_active () || bRank[3]->get_active () || bRank[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 anyRecentlySavedFilterActive = bRecentlySaved[0]->get_active() || bRecentlySaved[1]->get_active();
+ /*
+ * filter is setup in 2 steps
+ * Step 1: handle individual filters
+ */
filter.showRanked[0] = bFilterClear->get_active() || bUnRanked->get_active () || bTrash->get_active () || \
- bUnCLabeled->get_active () || bCLabel[0]->get_active ()|| bCLabel[1]->get_active ()|| bCLabel[2]->get_active ()|| bCLabel[3]->get_active ()|| bCLabel[4]->get_active ();
- for (int i=1; i<=5; i++)
- filter.showRanked[i] = bFilterClear->get_active() || bRank[i-1]->get_active () || bTrash->get_active () || \
- bUnCLabeled->get_active () || bCLabel[0]->get_active ()|| bCLabel[1]->get_active ()|| bCLabel[2]->get_active ()|| bCLabel[3]->get_active ()|| bCLabel[4]->get_active ();
+ anyCLabelFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive;
filter.showCLabeled[0] = bFilterClear->get_active() || bUnCLabeled->get_active () || bTrash->get_active () || \
- bUnRanked->get_active () || bRank[0]->get_active () || bRank[1]->get_active () || bRank[2]->get_active () || bRank[3]->get_active () || bRank[4]->get_active ();
- for (int i=1; i<=5; i++)
+ anyRankFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive;
+
+ for (int i=1; i<=5; i++){
+ filter.showRanked[i] = bFilterClear->get_active() || bRank[i-1]->get_active () || bTrash->get_active () || \
+ anyCLabelFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive;
+
filter.showCLabeled[i] = bFilterClear->get_active() || bCLabel[i-1]->get_active () || bTrash->get_active () || \
- bUnRanked->get_active () || bRank[0]->get_active () || bRank[1]->get_active () || bRank[2]->get_active () || bRank[3]->get_active () || bRank[4]->get_active ();
+ anyRankFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive;
+ }
- // handle AND logic between rank and color labels:
- // only when both filters for rank and color labels are selected
- if ((bUnCLabeled->get_active () || bCLabel[0]->get_active ()|| bCLabel[1]->get_active ()|| bCLabel[2]->get_active ()|| bCLabel[3]->get_active ()|| bCLabel[4]->get_active ()) \
- && (bUnRanked->get_active () || bRank[0]->get_active () || bRank[1]->get_active () || bRank[2]->get_active () || bRank[3]->get_active () || bRank[4]->get_active ()) ){
+ for (int i=0; i<2; i++){
+ filter.showEdited[i] = bFilterClear->get_active() || bEdited[i]->get_active () || bTrash->get_active () || \
+ anyRankFilterActive || anyCLabelFilterActive || anyRecentlySavedFilterActive;
- filter.showRanked[0] = bUnRanked->get_active ();
- filter.showCLabeled[0] = bUnCLabeled->get_active ();
+ filter.showRecentlySaved[i] = bFilterClear->get_active() || bRecentlySaved[i]->get_active () || bTrash->get_active () || \
+ anyRankFilterActive || anyCLabelFilterActive || anyEditedFilterActive;
+ }
+ if( options.rtSettings.verbose ){
+ printf ("\n**************** FileCatalog::getFilter *** AFTER STEP 1 \n");
+ for (int i=0; i<=5; i++) printf ("filter.showRanked[%i] = %i\n",i,filter.showRanked[i]);
+ for (int i=0; i<=5; i++) printf ("filter.showCLabeled[%i] = %i\n",i,filter.showCLabeled[i]);
+ for (int i=0; i<2; i++) printf ("filter.showEdited[%i] = %i\n",i,filter.showEdited[i]);
+ for (int i=0; i<2; i++) printf ("filter.showRecentlySaved[%i] = %i\n",i,filter.showRecentlySaved[i]);
+ }
+ filter.multiselect = false;
+
+ /*
+ * Step 2
+ * handle the case when more than 1 filter is selected. This overrides values set in Step
+ * if no filters in a group are active, filter.show for each member of that group will be set to true
+ * otherwise they are set based on UI input
+ */
+ if ((anyRankFilterActive && anyCLabelFilterActive ) || \
+ (anyRankFilterActive && anyEditedFilterActive ) || \
+ (anyRankFilterActive && anyRecentlySavedFilterActive ) || \
+ (anyCLabelFilterActive && anyEditedFilterActive ) || \
+ (anyCLabelFilterActive && anyRecentlySavedFilterActive ) || \
+ (anyEditedFilterActive && anyRecentlySavedFilterActive)){
+
+ filter.multiselect = true;
+ filter.showRanked[0] = anyRankFilterActive?bUnRanked->get_active ():true;
+ filter.showCLabeled[0] = anyCLabelFilterActive?bUnCLabeled->get_active ():true;
for (int i=1; i<=5; i++){
- filter.showRanked[i] = bRank[i-1]->get_active ();
- filter.showCLabeled[i] = bCLabel[i-1]->get_active ();
+ filter.showRanked[i] = anyRankFilterActive?bRank[i-1]->get_active ():true;
+ filter.showCLabeled[i] = anyCLabelFilterActive?bCLabel[i-1]->get_active ():true;
+ }
+ for (int i=0; i<2; i++){
+ filter.showEdited[i] = anyEditedFilterActive?bEdited[i]->get_active():true;
+ filter.showRecentlySaved[i] = anyRecentlySavedFilterActive?bRecentlySaved[i]->get_active():true;
+ }
+ if( options.rtSettings.verbose ){
+ printf ("\n**************** FileCatalog::getFilter *** AFTER STEP 2 \n");
+ for (int i=0; i<=5; i++) printf ("filter.showRanked[%i] = %i\n",i,filter.showRanked[i]);
+ for (int i=0; i<=5; i++) printf ("filter.showCLabeled[%i] = %i\n",i,filter.showCLabeled[i]);
+ for (int i=0; i<2; i++) printf ("filter.showEdited[%i] = %i\n",i,filter.showEdited[i]);
+ for (int i=0; i<2; i++) printf ("filter.showRecentlySaved[%i] = %i\n",i,filter.showRecentlySaved[i]);
+ printf ("filter.multiselect = %i\n",filter.multiselect);
}
}
+
filter.showTrash = bFilterClear->get_active() || bTrash->get_active ();
filter.showNotTrash = !bTrash->get_active ();
if (!filterPanel)
@@ -1371,6 +1527,9 @@ bool FileCatalog::handleShortcutKey (GdkEventKey* event) {
if (!alt) {
switch(event->keyval) {
+ case GDK_grave:
+ categoryButtonToggled(bUnRanked);
+ return true;
case GDK_1:
categoryButtonToggled(bRank[0]);
return true;
@@ -1386,10 +1545,13 @@ bool FileCatalog::handleShortcutKey (GdkEventKey* event) {
case GDK_5:
categoryButtonToggled(bRank[4]);
return true;
- case GDK_grave:
- categoryButtonToggled(bUnRanked);
+ case GDK_6:
+ categoryButtonToggled(bEdited[0]);
return true;
-
+ case GDK_7:
+ categoryButtonToggled(bEdited[1]);
+ return true;
+
case GDK_Return:
case GDK_KP_Enter:
FileCatalog::buttonBrowsePathPressed ();
@@ -1399,6 +1561,9 @@ bool FileCatalog::handleShortcutKey (GdkEventKey* event) {
if (alt) {
switch(event->keyval) {
+ case GDK_grave:
+ categoryButtonToggled(bUnCLabeled);
+ return true;
case GDK_1:
categoryButtonToggled(bCLabel[0]);
return true;
@@ -1414,8 +1579,11 @@ bool FileCatalog::handleShortcutKey (GdkEventKey* event) {
case GDK_5:
categoryButtonToggled(bCLabel[4]);
return true;
- case GDK_grave:
- categoryButtonToggled(bUnCLabeled);
+ case GDK_6:
+ categoryButtonToggled(bRecentlySaved[0]);
+ return true;
+ case GDK_7:
+ categoryButtonToggled(bRecentlySaved[1]);
return true;
}
}
diff --git a/rtgui/filecatalog.h b/rtgui/filecatalog.h
index e0a007377..152909dc3 100644
--- a/rtgui/filecatalog.h
+++ b/rtgui/filecatalog.h
@@ -73,9 +73,15 @@ class FileCatalog : public Gtk::VBox,
Gtk::HBox* buttonBar;
Gtk::HBox* buttonBar2;
+
Gtk::HBox* fltrRankbox;
Gtk::HBox* fltrLabelbox;
Gtk::VBox* fltrVbox1;
+
+ Gtk::HBox* fltrEditedBox;
+ Gtk::HBox* fltrRecentlySavedBox;
+ Gtk::VBox* fltrVbox2;
+
Gtk::ToggleButton* tbLeftPanel_1;
Gtk::ToggleButton* tbRightPanel_1;
Gtk::ToggleButton* bFilterClear;
@@ -83,12 +89,17 @@ class FileCatalog : public Gtk::VBox,
Gtk::ToggleButton* bRank[5];
Gtk::ToggleButton* bUnCLabeled;
Gtk::ToggleButton* bCLabel[5];//color label
+ Gtk::ToggleButton* bEdited[2];
+ Gtk::ToggleButton* bRecentlySaved[2];
Gtk::ToggleButton* bTrash;
- Gtk::ToggleButton* categoryButtons[14];
+ Gtk::ToggleButton* categoryButtons[18];
Gtk::ToggleButton* exifInfo;
- sigc::connection bCateg[14];
- Gtk::Image* iranked[5], *igranked[5];
- Gtk::Image* iCLabeled[5], *igCLabeled[5];
+ sigc::connection bCateg[18];
+ Gtk::Image* iFilterClear, *igFilterClear;
+ Gtk::Image* iranked[5], *igranked[5], *iUnRanked, *igUnRanked;
+ Gtk::Image* iCLabeled[5], *igCLabeled[5], *iUnCLabeled, *igUnCLabeled;
+ Gtk::Image* iEdited[2], *igEdited[2];
+ Gtk::Image* iRecentlySaved[2], *igRecentlySaved[2];
Gtk::Image *iTrashEmpty, *iTrashFull;
//Gtk::Image *iRightArrow_red, *iRightArrow;
Gtk::Image *iRefreshWhite, *iRefreshRed;
@@ -101,8 +112,8 @@ class FileCatalog : public Gtk::VBox,
Gtk::Entry* Query;
Gtk::Button* buttonQueryClear;
- double hScrollPos[14];
- double vScrollPos[14];
+ double hScrollPos[18];
+ double vScrollPos[18];
int lastScrollPos;
Gtk::VBox* trashButtonBox;