-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTMainWindow.h
More file actions
119 lines (114 loc) · 4.64 KB
/
Copy pathTMainWindow.h
File metadata and controls
119 lines (114 loc) · 4.64 KB
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
/********************************************************************************
* Copyright (c) 2024 Pleshkov Maksim
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
* which is available at https://www.apache.org/licenses/LICENSE-2.0.
*
* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
********************************************************************************/
#ifndef TMainWindowH
#define TMainWindowH
//----------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ExtCtrls.hpp>
#include <Vcl.ComCtrls.hpp>
#include "AppGLContext.h"
#include "Figures/figure3d_unit.h"
#include <Vcl.Dialogs.hpp>
#include <vector>
#include <map>
#include <memory>
//----------------------------------------------------------
//Òèï óêàçàòåëÿ äëÿ äåéñòâèé êíîïêè "Äîáàâèòü"
typedef void (*ActionSelector)();
//Îñíîâíàÿ ôîðìà ïðèëîæåíèÿ
class TMainWindow : public TForm {
__published: // IDE-managed Components
TPanel *Panel1; //Âüþïîðò (ãðàôè÷åñêîå îêíî)
//Ñïèñîê ôèãóð è îïåðàöèé ïî ðàçäåëàì
TTreeView *TreeView1;
//Ñïèñîê ñîçäàííûõ ôèãóð
TListView *ListView1;
//Äîáàâèòü ôèãóðó èëè îïåðàöèþ èëè îòìåíèòü
//òåêóùóþ îïåðàöèþ
TButton *Item_add_btn;
TButton *Item_edit_btn; //Èçìåíèòü âûáð. ôèãóðó (äèàëîã)
TButton *Item_remove_btn;//Óäàëèòü âûáð. ôèãóðó (äèàëîã)
TPanel *Panel2; //Ïàíåëü ñ TreeView1 è êí. "Äîáàâèòü"
//Ïàíåëü ñ ListView1 è êí. "Èçìåíèòü" è "Óäàëèòü"
TPanel *Panel3;
TOpenDialog *STLOpenDialog;
//Íàñòðîéêà ýëåìåíòîâ ôîðìû è êîíòåêñòà îòðèñîâêè
void __fastcall FormCreate(TObject *Sender);
//Îñâîáîæäåíèå êîíòåêñòà îòðèñîâêè è ïàìÿòè
void __fastcall FormDestroy(TObject *Sender);
//Îáíîâëåíèå ñîäåðæèìîãî ãðàôè÷åñêîãî îêíà
void __fastcall FormPaint(TObject *Sender);
//Ìàñøòàáèðîâàíèå è íîðìàëèçàöèÿ ãðàôè÷åñêîãî îêíà
void __fastcall FormResize(TObject *Sender);
//Îáðàáîò÷èê íà÷àëà îïåðàöèé ñ êí. ìûøè
void __fastcall Panel1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift,
int X, int Y);
//Îáðàáîò÷èê íàæàòèé ËÊÌ è îòïóñêàíèÿ êí. ìûøè
void __fastcall Panel1MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift,
int X, int Y);
//Îáðàáîò÷èê ïåðåìåùåíèÿ êóðñîðà ñ çàæàòûìè êí. ìûøè
void __fastcall Panel1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y);
//Îáðàáîò÷èê ñîáûòèÿ ïîêèäàíèÿ êóðñîðîì îêíà
void __fastcall Panel1MouseLeave(TObject *Sender);
//Îáðàáîò÷èê íàæàòèÿ êí. äîáàâëåíèÿ ôèãóðû èëè îïåðàöèè
//èëè îòìåíû òåêóùåãî äåéñòâèÿ (F2Mode!=F2Normal)
void __fastcall Item_add_btnClick(TObject *Sender);
//Îáðàáîò÷èê íàæàòèÿ êí. óäàëåíèÿ ôèãóðû
//Óäàëèòü ôèãóðó èç ïðîñòðàíñòâà è ñïèñêà â ôîðìå
void __fastcall Item_remove_btnClick(TObject *Sender);
//Âûáîð ôèãóðû â ïðîñòð. â ñîîòâ. ñ âûáîðîì â ñïèñêå
void __fastcall ListView1SelectItem(TObject *Sender,
TListItem *Item, bool Selected);
//Ïåðåìåùåíèå êàìåðû ê âûáð. ôèãóðå
void __fastcall ListView1DblClick(TObject *Sender);
//Âûçîâ äèàëîãà èçìåíåíèÿ ôèãóðû ïî êí. "Èçìåíèòü"
void __fastcall Item_edit_btnClick(TObject *Sender);
private: // User declarations
//Êîíòåêñò îòðèñîâêè è îêíà (OpenGL) (âëàäåþùèé óêàçàòåëü)
std::shared_ptr<AppGLContext> glContext;
//Êîíòåêñò îòðèñîâêè è îêíà (OpenGL) (âëàäåþùèé óêàçàòåëü)
std::weak_ptr<const AppGLContext> glContextWeak;
//Ñïèñîê ôèãóð äëÿ î÷èñòêè (âëàäåþùèé)
std::vector<Figure3d_unit*> OwnedFigures;
//Ñîîòâåòñòâèå ôèãóðû ïóíêòó â ñïèñêå ñîçä. ôèãóð
std::map<Figure3d_unit*, TListItem*> Figure_fig_to_list;
//Ìàíõåòòåíñêàÿ äèñòàíöèÿ ïåðåìåùåíèÿ ìûøè îò ò. çàæàòèÿ
unsigned int mouse_move_dst = 0;
//Ôëàãè çàæàòûõ êëàâèø (0b1-ËÊÌ, 0b10-ÏÊÌ, 0b100-ÑÊÌ)
char mouse_btn_state = 0;
//Ôëàã îòëè÷èÿ ïðîñòîãî íàæàòèÿ ËÊÌ îò ïåðåòàñêèâàíèÿ
bool simple_click = false;
//Çàïîëíèòü ñïèñîê ôèãóð è îïåðàöèé ïóíêòàìè
void FillFigureList();
//Îáíîâëåíèå êíîïîê
void UpdateButtons();
public: // User declarations
//Ïîëó÷èòü êîíòåêñò OpenGL
inline std::weak_ptr<AppGLContext> GetGLContext() const {
return glContext;
}
//Äîáàâèòü ôèãóðó â ïðîñòðàíñòâî è çàðåãèñòðèðîâàòü
//â ñïèñêå ïîä çàäàííûì èìåíåì
void AddFigure(Figure3d_unit*, const char*);
//Êîíñòðóêòîð ñ ïðèâÿçêîé ê ñîçäàþùåìó îáúåêòó
__fastcall TMainWindow(TComponent* Owner);
};
//----------------------------------------------------------
//Ãëîáàëüíûé îáúåêò îñíîâíîé ôîðìû
extern PACKAGE TMainWindow *MainWindow;
//----------------------------------------------------------
#endif