-
Notifications
You must be signed in to change notification settings - Fork 0
/
ProjectCtl.hpp
158 lines (108 loc) · 3.8 KB
/
ProjectCtl.hpp
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#ifndef WAYROUND_I2P_20241125_061830_590224
#define WAYROUND_I2P_20241125_061830_590224
#include <filesystem>
#include <iostream>
#include <tuple>
#include <gtkmm.h>
#include <sigc++/sigc++.h>
#include "forward_declarations.hpp"
#include "utils.hpp"
#include "ProjectCtlTables.hpp"
namespace wayround_i2p::ccedit
{
class ProjectCtl
{
public:
static ProjectCtl_shared create(Controller_shared controller);
~ProjectCtl();
protected:
ProjectCtl(Controller_shared controller);
private:
ProjectCtl_shared own_ptr;
RunOnce destroyer;
public:
void destroy();
Controller_shared getController();
bool isGlobalProject();
std::string getProjectName();
std::filesystem::path getProjectPath();
// ----------
bool
workSubjectExists(std::filesystem::path fpth);
// tries to find and return existing WorkSubject. result is empty if
// there's no existing WS for fpath
WorkSubject_shared
getWorkSubject(std::filesystem::path fpth);
// tries to find and return existing WorkSubject. if WS not exists already -
// creates and returns new one
WorkSubject_shared
workSubjectEnsureExistance(
std::filesystem::path fpth
);
// ----------
// if subject not exists - create.
// tries to find and return existing editor.
CodeEditorAbstract_shared
workSubjectExistingOrNewEditor(
std::filesystem::path fpth
);
// if subject not exists - create.
// allways create new editor for resulting subject
CodeEditorAbstract_shared
workSubjectNewEditor(
std::filesystem::path fpth
);
// ----------
// tries to find and return existing editor.
CodeEditorAbstract_shared
workSubjectExistingOrNewEditor(
WorkSubject_shared
);
// allways create new editor for subject
CodeEditorAbstract_shared
workSubjectNewEditor(
WorkSubject_shared
);
// ----------
void
destroyEditor(CodeEditorAbstract_shared);
Glib::RefPtr<Gio::ListStore<TableItemTpl<WorkSubject_shared>>>
getWorkSubjectListStore();
Glib::RefPtr<Gio::ListStore<TableItemTpl<CodeEditorAbstract_shared>>>
getCodeEditorListStore();
void updatedName();
void updatedPath();
void showWindow();
void destroyWindow();
FileExplorer_shared
createNewFileExplorer();
CodeEditorAbstract_shared
createBestEditorForWorkSubject(
WorkSubject_shared
);
void destroyWorkSubjectEditors(WorkSubject_shared val);
void destroyAllExplorers();
void destroyAllWorkSubjects();
void destroyAllEditors();
void registerFileExplorer(FileExplorer_shared fe);
void unregisterFileExplorer(FileExplorer_shared fe);
void registerWorkSubject(WorkSubject_shared val);
void unregisterWorkSubject(WorkSubject_shared val);
void registerEditor(CodeEditorAbstract_shared val);
void unregisterEditor(CodeEditorAbstract_shared val);
void showPrevNextEditor(CodeEditorAbstract_shared val, bool prev);
void showPrevEditor(CodeEditorAbstract_shared val);
void showNextEditor(CodeEditorAbstract_shared val);
sigc::signal<void()> &signal_updated_name();
sigc::signal<void()> &signal_updated_path();
private:
Controller_shared controller;
ProjectCtlWin_shared proj_ctl_win;
std::deque<FileExplorer_shared> explorers;
Glib::RefPtr<Gio::ListStore<TableItemTpl<WorkSubject_shared>>> work_subj_list_store;
Glib::RefPtr<Gio::ListStore<TableItemTpl<CodeEditorAbstract_shared>>> editors_list_store;
sigc::signal<void()> priv_signal_updated_name;
sigc::signal<void()> priv_signal_updated_path;
};
} // namespace wayround_i2p::ccedit
#endif