1 /*
2  *  This file is part of RawTherapee.
3  *
4  *  Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
5  *
6  *  RawTherapee is free software: you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation, either version 3 of the License, or
9  *  (at your option) any later version.
10  *
11  *  RawTherapee is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with RawTherapee.  If not, see <https://www.gnu.org/licenses/>.
18  */
19 #pragma once
20 
21 #include <atomic>
22 
23 #include <gtkmm.h>
24 
25 #include "batchqueue.h"
26 #include "guiutils.h"
27 #include "saveformatpanel.h"
28 
29 class RTWindow;
30 class FileCatalog;
31 class Thumbnail;
32 
33 class BatchQueuePanel : public Gtk::VBox,
34     public BatchQueueListener,
35     public FormatChangeListener
36 {
37 
38     Gtk::Button* zoomInButton;
39     Gtk::Button* zoomOutButton;
40     Gtk::Switch* qStartStop;
41     sigc::connection qStartStopConn;
42     Gtk::CheckButton* qAutoStart;
43 
44     Gtk::Entry* outdirTemplate;
45     MyFileChooserButton* outdirFolder;
46     Gtk::Button* outdirFolderButton;
47     Gtk::RadioButton* useTemplate;
48     Gtk::RadioButton* useFolder;
49     SaveFormatPanel* saveFormatPanel;
50     Gtk::Frame *fdir, *fformat;
51 
52     RTWindow* parent;
53     BatchQueue* batchQueue;
54     Gtk::HBox* bottomBox;
55     Gtk::HBox* topBox;
56 
57     std::atomic<bool> queueShouldRun;
58 
59     IdleRegister idle_register;
60 
61 public:
62     explicit BatchQueuePanel (FileCatalog* aFileCatalog);
63     ~BatchQueuePanel() override;
64 
65     void init (RTWindow* parent);
66 
67     void addBatchQueueJobs(const std::vector<BatchQueueEntry*>& entries , bool head = false);
68     void saveOptions ();
69 
70     bool handleShortcutKey (GdkEventKey* event);
71 
72     // batchqueuelistener interface
73     void queueSizeChanged(int qsize, bool queueRunning, bool queueError, const Glib::ustring& queueErrorMessage) override;
74     bool canStartNext() override;
75 
76 private:
77     void startBatchProc ();
78     void stopBatchProc ();
79     void startOrStopBatchProc();
80     void setGuiFromBatchState(bool queueRunning, int qsize);
81 
82     void pathFolderChanged ();
83     void pathFolderButtonPressed ();
84     void formatChanged(const Glib::ustring& format) override;
85     void updateTab (int qsize, int forceOrientation = 0); // forceOrientation=0: base on options / 1: horizontal / 2: vertical
86 };
87