File: main.cpp

package info (click to toggle)
codelite 12.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 95,112 kB
  • sloc: cpp: 424,040; ansic: 18,284; php: 9,569; lex: 4,186; yacc: 2,820; python: 2,294; sh: 312; makefile: 51; xml: 13
file content (120 lines) | stat: -rw-r--r-- 4,328 bytes parent folder | download | duplicates (2)
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
112
113
114
115
116
117
118
119
120
#include <wx/app.h>
#include <wx/event.h>
#include "MainFrame.h"
#include <wx/image.h>
#include <wx/cmdline.h>
#include "terminal_options.h"
#include <wx/dir.h>
#include <wx/log.h>
#include <wx/stdpaths.h>
#include <wx/crt.h>
#include "commandlineparser.h"

#ifdef __WXMAC__
#include <ApplicationServices/ApplicationServices.h>
#endif

#ifdef __WXMSW__
typedef BOOL WINAPI (*SetProcessDPIAwareFunc)();
#endif

// Define the MainApp
class MainApp : public wxApp
{
public:
    MainApp() {}
    virtual ~MainApp() {}

    void PrintUsage()
    {
        wxPrintf("%s [-t <title>] [-e] [-w] [-d <working directory>] [--cmd <command to execute>]\n", wxApp::argv[0]);
        wxPrintf("-t | --title             Set the console title\n");
        wxPrintf("-e | --exit              Exit when execution of command terminates\n");
        wxPrintf("-w | --wait              Wait for any key to be pressed before exiting\n");
        wxPrintf("-d | --working-directory Set the working directory\n");
        wxPrintf("-p | --print-info        Print terminal info to stdout\n");
        wxPrintf("-z | --always-on-top     The terminal is always on top of all windows\n");
        wxPrintf("-g | --dbg-terminal      The terminal is for debugging redirection purposes\n");
        wxPrintf("\n");
        exit(1);
    }

    virtual bool OnInit()
    {

#ifdef __WXMSW__
        HINSTANCE m_user32Dll = LoadLibrary(L"User32.dll");
        if(m_user32Dll) {
            SetProcessDPIAwareFunc pFunc = (SetProcessDPIAwareFunc)GetProcAddress(m_user32Dll, "SetProcessDPIAware");
            if(pFunc) {
                pFunc();
            }
            FreeLibrary(m_user32Dll);
            m_user32Dll = NULL;
        }
#endif

        SetAppName("codelite-terminal");

        CommandLineParser parser(wxApp::argc, wxApp::argv);
        parser.AddOption("t", "title", CommandLineParser::kOptionWithValue | CommandLineParser::kOptional);
        parser.AddOption("d", "working-directory", CommandLineParser::kOptionWithValue | CommandLineParser::kOptional);
        parser.AddOption("e", "exit");          // optional, no value
        parser.AddOption("w", "wait");          // optional, no value
        parser.AddOption("p", "print-info");    // optional
        parser.AddOption("z", "always-on-top"); // optional
        parser.AddOption("g", "dbg-terminal");  // optional
        parser.Parse();

        {
            wxLogNull noLog;
            wxFileName::Mkdir(wxStandardPaths::Get().GetUserDataDir(), wxS_DIR_DEFAULT, wxPATH_MKDIR_FULL);
            ::wxMkdir(wxStandardPaths::Get().GetUserDataDir());
        }

        // Add the common image handlers
        wxImage::AddHandler(new wxPNGHandler);
        wxImage::AddHandler(new wxJPEGHandler);

        TerminalOptions options;
        wxString commandToRun, title, workingDirectory;
        commandToRun = parser.GetCommand();
        workingDirectory = parser.GetArg("d", "working-directory");

        if(parser.HasOption("t", "title")) {
            options.SetTitle(parser.GetArg("t", "title"));

        } else if(!parser.GetCommand().IsEmpty()) {
            options.SetTitle(parser.GetCommand());
        }

        if(!workingDirectory.IsEmpty()) {
            ::wxSetWorkingDirectory(workingDirectory);
        }

        options.EnableFlag(TerminalOptions::kExitWhenInfiriorTerminates, parser.HasOption("e", "exit"));
        options.EnableFlag(TerminalOptions::kPauseBeforeExit, parser.HasOption("w", "wait"));
        options.EnableFlag(TerminalOptions::kPrintInfo, parser.HasOption("p", "print-info"));
        options.EnableFlag(TerminalOptions::kAlwaysOnTop, parser.HasOption("z", "always-on-top"));
        options.EnableFlag(TerminalOptions::kDebuggerTerminal, parser.HasOption("g", "dbg-terminal"));
        options.SetCommand(commandToRun);

        long style = wxDEFAULT_FRAME_STYLE;
        if(options.HasFlag(TerminalOptions::kAlwaysOnTop)) {
            style = wxSTAY_ON_TOP;
        }

        MainFrame* mainFrame = new MainFrame(NULL, options, style);
        SetTopWindow(mainFrame);

#ifdef __WXMAC__
        ProcessSerialNumber PSN;
        GetCurrentProcess(&PSN);
        TransformProcessType(&PSN, kProcessTransformToForegroundApplication);
#endif
        return GetTopWindow()->Show();
    }
};

DECLARE_APP(MainApp)
IMPLEMENT_APP(MainApp)