1 /* ------------------ luckybackupwindow.h --------------------------------------------------------------------------------------
2  header file for luckyBackup project
3 
4 ===============================================================================================================================
5 ===============================================================================================================================
6      This file is part of "luckyBackup" project
7      Copyright, Loukas Avgeriou
8      luckyBackup is distributed under the terms of the GNU General Public License
9      luckyBackup is free software: you can redistribute it and/or modify
10      it under the terms of the GNU General Public License as published by
11      the Free Software Foundation, either version 3 of the License, or
12      (at your option) any later version.
13 
14      luckyBackup is distributed in the hope that it will be useful,
15      but WITHOUT ANY WARRANTY; without even the implied warranty of
16      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17      GNU General Public License for more details.
18 
19      You should have received a copy of the GNU General Public License
20      along with luckyBackup.  If not, see <http://www.gnu.org/licenses/>.
21 
22 
23  project version	: Please see "main.cpp" for project version
24 
25  developer          : luckyb
26  last modified      : 07 Feb 2014
27 ===============================================================================================================================
28 ===============================================================================================================================
29 */
30 
31 
32 #ifndef LUCKYBACKUPWINDOW_H
33 #define LUCKYBACKUPWINDOW_H
34 
35 //include  header file that qmake produces from "*.ui" created with qt designer
36 #include "ui_luckybackupwindow.h"
37 #include <QSystemTrayIcon>
38 
39 //==============================================================================================================
40 //Declaration of luckyBackupWindow class (this is the main window of the app)
41 class luckyBackupWindow : public QMainWindow
42 {
43     Q_OBJECT
44 
45     public:
46         luckyBackupWindow (QMainWindow *parent = 0);
47 
48         // general variables
49         bool taskClicked;   //these 2 bool vars help to determine when a checkbox state is changed for SLOT taskStateChanged
50         bool taskChanged;
51         bool savedProfile;  // Becomes true if a profile is saved and false if it is modified
52 
53         bool GoBack;        // Becomes true if the user tries to load a profile, but regrets it !!
54         QString InfoData;   //String holding the information window text
55         QString createData; //String holding messages from createCurrentProfile
56         QString loadData;   //String holding messages from loadCurrentProfile
57         QString saveData;   //String holding messages from saveCurrentProfile
58 
59         int InfoInt;        // this helps to define which message will appear at the info window
60         int count;          //simple count variable !!
61 
62     private slots:
63         void profileComboChanged(); // SLOT to set the currentProfile when profileCombo index changes
64         void savePressed();         // SLOT to execute when "save" pressed
65         void deleteCurrentProfile();//SLOT: Delete the current profile
66         void NewProfile();          //SLOT: Create a new empty profile
67         void setDefaultProfile();   //SLOT: Set the current profile as default
68         void renameCurrentProfile();//SLOT: rename the current profile
69         void exportProfile();       //SLOT to export a profile
70         void importProfile();       //SLOT to import a profile
71         void duplicateProfile();    //SLOT to duplicate a profile
72         void changeProfileDescription();//SLOT to change the profile description
73 
74         void exitApp();             //SLOT: check if a profile is saved and exit application
75 
76         void help();                //SLOT: open "help" popup when action selected
77         void about();               //SLOT: open "about" popup when action selected
78         void setToolbarAttrs();     //SLOT: sets the toolbar attributes
79         void setWinPaths();         //SLOT: sets the rsync and ssh paths for windows
80 
81         void setLanguage(QAction *);//SLOT: Change the application language
82 
83         void checkCurrentItem(QListWidgetItem *);	//SLOT: Check the currently selected operation and set an icon
84         void taskStateChanged();    //SLOT: Sets the profile state to unsaved if a task checkbox is changed
85         void refreshList();         //SLOT: Refresh the operations list when refresh button pressed
86         void start();               //SLOT: Open start operations dialog when Button clicked()
87         void modify();              //SLOT: Modify an existing task. Will also save it if bool is true
88         void add();                 //SLOT: Add a new task
89         void remove();              //SLOT: remove highlighted task
90         void manage();              //SLOT: Manage existing backups of an existing task
91         void AlsoCreateRestore();   //SLOT: Create another operation for RESTORE
92         void duplicateTask();       //SLOT to duplicate a task
93         void moveUp();              //SLOT: move  highlighted operation one position up
94         void moveDown();            //SLOT: move  highlighted operation one position down
95         void schedule();            //SLOT: Open schedule dialog when Button clicked()
96         void email();               //SLOT: Open email dialog when Button clicked()
97 
98         void hideShowInfoWindow();	// SLOT to hide or show the info window
99 
100         //execute.cpp SLOTS
101         void abortPressed();		//SLOT when button pressed( see also notYet)
102         void donePressed();		//SLOT when done button pressed
103         void appendRsyncOutput();	//Display o/p to textbrowser & update logfile
104 /*disable vss until...
105         void appendRsyncVssOutput();
106         void appendRsyncVssOutput(int size);*/
107         void procFinished();		//SLOT executed when syncProcess is finshed (will start a new syncProcess if any left)
108         void procError();        // SLOT for when a process reports an error (eg: failed to start)
109 
110         void LBtrayActivated(QSystemTrayIcon::ActivationReason reason);
111         void minimizeTray();
112         void restoreTray();
113 
114         void previousErrorJump();
115         void nextErrorJump();
116 
117     private:
118         Ui::luckyBackupWindow ui;
119 
120         QSystemTrayIcon *LBtray;	//this is luckybackup's tray icon
121         QMenu *languageMenu;
122         QMenu *settingsMenu;
123         QMenu *toolbarsMenu;
124         QActionGroup *languageGroup;
125         QActionGroup *toolbarsGroup;
126         QMenu *helpMenu;
127         QAction *action;
128         QAction *actionHelp;
129         QAction *actionAbout;
130         QToolBar *profileToolbar;
131         QToolBar *profileComboToolbar;
132         QToolBar *profileStartToolbar;
133         QToolBar *shutdownToolbar;
134         QToolBar *errorsToolbar;
135         QAction *visibleProfileToolbar;
136         QAction *visibleProfileComboToolbar;
137         QAction *visibleProfileStartToolbar;
138         QAction *actionLockToolbars;
139         QAction *actionVisibleToolbarText;
140         QAction *actionSetWinPaths;
141         QStringList deletedTaskNames;
142         bool saveOrNot;
143 
144         //The following functions are inside functions.cpp~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
145         void setCurrentProfile(QString);//function to check if a profile is valid and load it by calling loadProfile
146         bool loadCurrentProfile();      //function to  load an existing profile
147         bool saveCurrentProfile();      //function to save a profile
148         int createCurrentProfile();     //function to create a profile
149         int isProfileSaved();           //function to check if the current profile is saved and proceed or not
150         void checkDeclared();           //function to check all declared data of included operations
151         bool checkOperationList();      // function to first check the operations list for errors (eg nothing is included)
152         void retranslateUi();           //function to retranslate the ui when user changes the gui language
153         void createMenus();             // create the menu "language" with all available languages & menu "help"
154         void createToolbar();           // create the toolbar
155         void createActions();           // create all actions
156         void createProfileCombo();      // fill the profile combo box with existing profile names
157         bool saveSettings();            //saves various luckybackup settings such as the default profile
158         bool loadSettings();            //loads various luckybackup settings such as the default profile - text mode
159         bool loadSettingsQV();          //loads various luckybackup settings such as the default profile - data mode
160         void InitializeVariables();     //initializes all variables
161         bool arrangeLogSnap(bool,QString,QString);//Rename-delete-copy logs & snaps when a profile/task is renamed, deleted,duplicated
162 
163         QString defaultLanguage;        // holds the app's default language
164         QString TransDir;               // holds the actual translation directory path
165         QUrl helpURL;                   // holds the actual manual path as a QUrl
166         QString manualChapter;          // holds the specific chapter of the manual. changes depending on which window is open
167         QUrl licenseURL;                // holds the actual license path as a QUrl
168         int mainWindowWidth;            // holds the main window width in pixels
169         int mainWindowHeight;           // holds the main window height in pixels
170         bool AreToolbarsLocked;         // holds the lock state of the toolbars
171         bool IsVisibleProfileComboToolbar;  // holds the visible state of the profile combo toolbar
172         bool IsVisibleProfileToolbar;   // holds the visible state of the profile actions toolbar
173         bool IsVisibleProfileStartToolbar; // holds the visible state of the profile start toolbar
174         bool IsVisibleToolbarText;      // holds the visible state of the toolbar text
175         bool IsVisibleInfoWindow;       // holds the visible state of the info window
176         bool showOnlyErrors;            //This becomes true if the user selects to only display errors at the commands output window
177 
178         //inside execute.cpp-----------------------------------------------------
179         void executeNOW();      //start the execution of commands (rsync & others)
180         void setNowDoing();     //Display sth in the Now Doing textBrowser
181         void executeRsync();    //execute qprocess "rsync" with Arguments
182         void swapGUI(QString);  //swaps the gui mode from normal to execute
183         int errorCount;         //used for next/previous error button
184         bool firstScroll;       //used for next/previous error button
185         bool NOWexecuting;      //becomes true if a profile execution is running
186         bool guiModeNormal;     //becomes true when the gui is in normnal mode
187         bool ABORTpressed;      //becomes true if the abort button is pressed
188         void finishUp();        // finish up some stuff when all tasks finish either normally or aborted
189         void shutDownSystem();  // shutdown the system if the relevant button is pressed
190         QString convertBytes(QString,bool);  // Converts a string of the form of 10GB to bytes and vice versa
191 
192         //Progress bar variables
193         int progress_total;	//Maximum value of progress
194         int progress_done;	//Current value of progress
195 
196         //variables used for rsync command
197         QString command;		//command to be executed. Normally this is "rsync"
198         QStringList rsyncArguments;	// This stringList holds all arguments for the rsync command
199         QString outputString;		//all the output of rsync is going to fit in here
200         QString outputError;		//all the error output of rsync is going to fit in here
201         QString outputInsert;		//this is used to enter application output between outputString/Error
202         QString nowDoingText;		//this is the text printed in the NowDoing textBrowser
203 
204         bool sync;			//becomes true if syncing is to be executed
205         bool syncAB;			//becomes true if syncing from dirA to dirB is to be executed
206         QString dirA;			//holds the first dir to be synced
207         QString dirB;			//holds the second dir to be synced
208 
209         bool calculating;		//these 3 bools are used to diplay progress of rsync at the info window
210         bool transferring;
211         bool deleting;
212 
213         bool ExecuteBefore;		//becomes true if a before command is to be executed, not rsync !!
214         bool ExecuteAfter;		//becomes true if a after command is to be executed, not rsync !!
215         bool ExecuteBeforeExitedError;	// becomes true if a before command exits with an error
216         bool StopTaskExecution; // becomes true if we want to stop task execution
217         bool ProcReportedError;      //becomes true if any process reports an error (eg failed to start)
218         bool DestCreateFail;		// This will become true if destination does not exist and cannot be created
219         int repeatOnFailMax;   // This is equal to the number of times a command will run when it fails
220         int repeatOnFailTry;        // This is the current run of a command
221         int currentBefore;		//count variable for commands to be executed before task
222         int currentAfter;		//count variable for commands to be executed before task
223         void executeBeforeTask();	//function to start execution of pre-task commands
224         void executeAfterTask();	//function to start execution of post-task commands
225 
226         //tray icon stuff
227         QString trayMessage;		// tray baloon message text
228         QAction *actionAbort;
229         QAction *minimizeToTray;
230         QAction *restoreFromTray;
231         QMenu *LBtrayMenu;
232         void createTrayIcon();		// create the tray icon + relevant actions
233         bool isMinimizedToTray;		// becomes true if the gui is minimized to tray
234 
235     protected:
236         void closeEvent(QCloseEvent *event);
237 };
238 
239 #endif
240 
241 // end of luckybackupwindow.h--------------------------------------------------------------
242