/* * This file is part of RawTherapee. * * Copyright (c) 2004-2010 Gabor Horvath * * RawTherapee 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 3 of the License, or * (at your option) any later version. * * RawTherapee 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 RawTherapee. If not, see . */ #ifndef _FILECATALOG_ #define _FILECATALOG_ #ifdef _WIN32 #include #endif #include #include #include #include #include #include #include #include #include #include #include class PreviewLoaderListener { public: virtual void previewReady (FileBrowserEntry* fd) {} virtual void previewsFinished () {} }; class DirEntry { public: Glib::ustring fullName; DirEntry (const Glib::ustring& n) : fullName (n) {} bool operator< (DirEntry& other) { return fullName.casefold() < other.fullName.casefold(); } }; class PreviewLoader : public ProcessingThread { protected: PreviewLoaderListener* pl; public: PreviewLoader () : pl(NULL) { ProcessingThread(); } void setPreviewLoaderListener (PreviewLoaderListener* p) { pl = p; } void start (); void process () { ProcessingThread::process (); } void process (DirEntry& current); void remove (Glib::ustring fname); void end (); }; class FileCatalog : public Gtk::VBox, public DirSelectionListener, public PreviewLoaderListener, public FilterPanelListener, public FileBrowserListener #ifdef _WIN32 , public WinDirChangeListener #endif { // thumbnail browsers FileBrowser* fileBrowser; Gtk::HBox* hBox; Glib::ustring selectedDirectory; bool enabled; PreviewLoader previewLoader; FileSelectionListener* listener; FileSelectionChangeListener* fslistener; ImageAreaToolListener* iatlistener; Gtk::HBox* buttonBar; Gtk::HBox* buttonBar2; Gtk::ToggleButton* bDir; Gtk::ToggleButton* bUnRanked; Gtk::ToggleButton* bRank[5]; Gtk::ToggleButton* bTrash; Gtk::ToggleButton* categoryButtons[8]; Gtk::ToggleButton* exifInfo; sigc::connection bCateg[8]; Gtk::Image* iranked[5], *igranked[5]; Gtk::Image *iTrashEmpty, *iTrashFull; double hScrollPos[8]; double vScrollPos[8]; int lastScrollPos; Gtk::VBox* trashButtonBox; Gtk::Button* zoomInButton; Gtk::Button* zoomOutButton; ExifFilterSettings dirEFS; ExifFilterSettings currentEFS; bool hasValidCurrentEFS; FilterPanel* filterPanel; Glib::RefPtr dirMonitor; Gtk::ProgressBar* progressBar; int previewsToLoad; int previewsLoaded; #ifdef _WIN32 WinDirMonitor* wdMonitor; public: int checkCounter; void winDirChanged (); private: #endif std::vector fileNameList; std::set editedFiles; guint modifierKey; // any modifiers held when rank button was pressed void addAndOpenFile (const Glib::ustring& fname); void checkAndAddFile (Glib::RefPtr info); std::vector getFileList (); BrowserFilter getFilter (); void trashChanged (); public: CoarsePanel* coarsePanel; ToolBar* toolBar; FileCatalog (CoarsePanel* cp, ToolBar* tb); void dirSelected (const Glib::ustring& dirname, const Glib::ustring& openfile=""); void closeDir (); void refreshEditedState (const std::set& efiles); // previewloaderlistener interface void previewReady (FileBrowserEntry* fdn); void previewsFinished (); void _previewsFinished (); void _refreshProgressBar (); // filterpanel interface void exifFilterChanged (); Glib::ustring lastSelectedDir () { return selectedDirectory; } void setEnabled (bool e); // if not enabled, it does not open image void redrawAll (); void refreshAll (); void openRequested (std::vector tbe); void deleteRequested (std::vector tbe); void developRequested (std::vector tbe); void renameRequested (std::vector tbe); void selectionChanged (std::vector tbe); void emptyTrash (); bool trashIsEmpty (); void setFileSelectionListener (FileSelectionListener* l) { listener = l; } void setFileSelectionChangeListener (FileSelectionChangeListener* l) { fslistener = l; } void setImageAreaToolListener (ImageAreaToolListener* l) { iatlistener = l; } void setFilterPanel (FilterPanel* fpanel); void exifInfoButtonToggled(); void categoryButtonToggled (Gtk::ToggleButton* b); bool capture_event(GdkEventButton* event); void filterChanged (); void runFilterDialog (); void on_realize(); void on_dir_changed (const Glib::RefPtr& file, const Glib::RefPtr& other_file, Gio::FileMonitorEvent event_type, bool internal); int reparseDirectory (); void _openImage (std::vector tmb); void zoomIn (); void zoomOut (); void openNextImage () { fileBrowser->openNextImage(); } void openPrevImage () { fileBrowser->openPrevImage(); } }; #endif