summaryrefslogtreecommitdiff
path: root/Application.h
blob: 8c9283edbe742d539ed5aa2032e6708abcdf3118 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/***************************************************************
 * Name:      FreeFileSyncApp.h
 * Purpose:   Defines Application Class
 * Author:    ZenJu (zhnmju123@gmx.de)
 * Created:   2008-07-16
 * Copyright: ZenJu ()
 * License:
 **************************************************************/

#ifndef FREEFILESYNCAPP_H
#define FREEFILESYNCAPP_H

#include <wx/app.h>
#include <wx/cmdline.h>
#include <set>
#include <fstream>
#include "FreeFileSync.h"
#include "ui/smallDialogs.h"

struct TranslationLine
{
    wxString original;
    wxString translation;

    bool operator>(const TranslationLine& b ) const
    {
        return (original > b.original);
    }
    bool operator<(const TranslationLine& b) const
    {
        return (original < b.original);
    }
    bool operator==(const TranslationLine& b) const
    {
        return (original == b.original);
    }
};

typedef set<TranslationLine> Translation;


class CustomLocale : public wxLocale
{
public:
    CustomLocale(int language = wxLANGUAGE_ENGLISH,
                 int flags = wxLOCALE_LOAD_DEFAULT | wxLOCALE_CONV_ENCODING);

    ~CustomLocale() {}

    const wxChar* GetString(const wxChar* szOrigString, const wxChar* szDomain = NULL) const;

private:
    Translation translationDB;
};


class Application : public wxApp
{
public:
    bool OnInit();
    int  OnRun();
    int  OnExit();

    void initialize();
    bool ProcessIdle(); //virtual method

    friend class CommandLineStatusUpdate;

    //methods for writing logs
    void initLog();
    void writeLog(const wxString& logText, const wxString& problemType = wxEmptyString);
    void closeLog();

private:
    void parseCommandline();

    bool applicationRunsOnCommandLineWithoutWindows;

    ofstream logFile;
    CustomLocale* programLanguage;

    int returnValue;
};


class CommandLineStatusUpdater : public StatusUpdater
{
public:
    CommandLineStatusUpdater(Application* application, bool skipErr, bool silent);
    ~CommandLineStatusUpdater();

    void updateStatusText(const wxString& text);
    void initNewProcess(int objectsTotal, double dataTotal, int processID);
    void updateProcessedData(int objectsProcessed, double dataProcessed);
    int reportError(const wxString& text);
    void triggerUI_Refresh();

    void updateFinalStatus(const wxString& text);

private:
    Application* app;
    SyncStatus* syncStatusFrame;
    bool skipErrors;
    bool silentMode;

    wxArrayString unhandledErrors;   //list of non-resolved errors
    int currentProcess;
};


#endif // FREEFILESYNCAPP_H
bgstack15