Elaztek Developer Hub
Blamite Game Engine - Keystone  00390.07.02.23.1947.blamite
A library that enables the use of Qt in Blamite's editing tools.
drag_container.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <QWidget>
4 #include <qlabel.h>
5 #include <qgraphicseffect.h>
6 #include <vector>
7 
8 #include "ui_drag_container.h"
9 
10 #include <HEKGuerilla/components/tags/fields/fields.h>
11 #include <Strings/components/classes/events/events.h>
12 
15 
19 class drag_list
20 {
21 public:
22  QBoxLayout* drag_layout = nullptr;
23 
30  void GenerateDropZones(bool clear_existing = true);
31 
37  void AddContentWidget(QWidget* widget);
38 
46  std::vector<QWidget*> GetContentWidgets();
47 };
48 
73 class grip_frame : public QFrame
74 {
75 private:
76  QImage grip_image;
77 
78 public:
79  grip_frame();
80 
81  void paintEvent(QPaintEvent* event) override;
82 };
83 
90 class drag_container : public QWidget, public BlamEventListener
91 {
92  Q_OBJECT
93 
94 private:
95  Ui::drag_container ui;
96 
100  bool enable_transparency_effects = false;
101 
106  float drag_transparency = 0.5;
107 
108  QPoint click_point = QPoint(0, 0);
109  drag_list* parent_list = nullptr;
110  grip_frame* frame_grip = nullptr;
111  drag_drop_zone* active_drop_zone_widget = nullptr;
112  float move_distance = 0.0f;
113  bool click_start = false;
114  bool dragging = false;
115 
116  std::string style_click = "";
117  std::string style_drag = "";
118 
119  bool focused = false;
120  std::string style_focused = "";
121  std::string style_unfocused = "";
122 
123  bool rebuilding_type_menu = false;
124 
135  void GetDropInfo(int* insert_position, QLayoutItem** item);
136 
142  void UpdateStylesheet();
143 
144 public:
145  BlamPluginField* field_data = nullptr;
147  tag_designer* designer = nullptr;
148 
154  drag_container(drag_list* _parent_list, tag_designer* _designer);
155  ~drag_container();
156 
157  void mousePressEvent(QMouseEvent* mouse_event) override;
158  void mouseMoveEvent(QMouseEvent* event) override;
159  void mouseReleaseEvent(QMouseEvent* mouse_event) override;
160 
161  void OnEditorThemeChangeEvent(EditorThemeChangeEvent* event) override;
162 
168  void AddContentWidget(QWidget* widget);
169 
175  void SetIconVisiblity(bool icon_visible_state);
176 
183  void SetIcon(std::string group_id, std::string resource_id);
184 
196  void SetFocusState(bool focus_state, bool force_update = false);
197 
199 
200 private slots:
201  void ItemTypeDropdownIndexChanged(int index);
202  void EditButtonClicked();
203  void DeleteButtonClicked();
204 
205  void EditMenu_PropertiesClicked();
206  void EditMenu_Bitfield_EditFlagsClicked();
207  void EditMenu_Enum_EditOptionsClicked();
208 };
drag_list::GenerateDropZones
void GenerateDropZones(bool clear_existing=true)
Generates drop zones for the given drag list.
Definition: drag_list.cpp:5
drag_container::RebuildFieldTypeOptions
void RebuildFieldTypeOptions()
Definition: drag_container.cpp:611
editor_data.h
BlamEditorTheme::GetResource
std::string GetResource(std::string group_id, std::string id)
Retrieves a resource path from the theme.
Definition: BlamEditorTheme.cpp:158
tag_designer::UnfocusAllContainers
void UnfocusAllContainers()
Unfocuses all existing drag containers.
Definition: tag_designer.cpp:141
drag_container::designer
tag_designer * designer
The Tag Designer that this container exists within.
Definition: drag_container.h:147
StringListEditDialog.h
BitfieldFlagsEditorDialog::IsCancelled
bool IsCancelled()
Definition: BitfieldFlagsEditorDialog.cpp:111
drag_container::mousePressEvent
void mousePressEvent(QMouseEvent *mouse_event) override
Definition: drag_container.cpp:145
KeystoneDialogResult
KeystoneDialogResult
Enumerator containing all possible generic dialog results.
Definition: keystone_api.h:30
drag_drop_zone
Definition: drag_drop_zone.h:7
drag_container::~drag_container
~drag_container()
Definition: drag_container.cpp:140
drag_container
Class representing a draggable widget container.
Definition: drag_container.h:90
BlamEditorDocumentWidget::document
BlamEditorDocument * document
The document associated with this widget.
Definition: BlamEditorDocument.h:171
BitfieldFlagsEditorDialog.h
grip_frame::grip_frame
grip_frame()
Definition: grip_frame.cpp:6
themes.h
BlamEditorTagFieldControl
Interface used as a base for all tag field controls.
Definition: tag_fields.h:18
BlamEditorDocument.h
BlamEditorDocument::FlagAsModified
virtual void FlagAsModified(bool new_modified_state=true)
Flags the document as being modified.
Definition: BlamEditorDocument.cpp:75
drag_container::mouseMoveEvent
void mouseMoveEvent(QMouseEvent *event) override
Definition: drag_container.cpp:164
PluginFieldPropertiesDialog.h
PluginFieldPropertiesDialog
Dialog allowing the user to edit specific properties of a plugin field directly within the tag design...
Definition: PluginFieldPropertiesDialog.h:16
BlamKeystone::Utils::ShowMessageBox
KEYSTONE KeystoneDialogResult ShowMessageBox(std::string message)
Definition: utils.cpp:279
BitfieldFlagsEditorDialog
Definition: BitfieldFlagsEditorDialog.h:10
tag_designer::RemoveField
void RemoveField(drag_container *container)
Definition: tag_designer.cpp:482
drag_container.h
drag_list::GetContentWidgets
std::vector< QWidget * > GetContentWidgets()
Retrieves a list of all content widgets within the drag list.
Definition: drag_list.cpp:56
KeystoneMessageBoxButtons::YesNo
@ YesNo
Dialog is shown with a [Yes] and [No] button.
utils.h
BlamEditorDocumentType::TagDesigner
@ TagDesigner
Special document type used for the Tag Designer window.
drag_container::SetIconVisiblity
void SetIconVisiblity(bool icon_visible_state)
Sets whether or not the drag container's sidebar icon should be visible.
Definition: drag_container.cpp:353
drag_container::field_data
BlamPluginField * field_data
The plugin field that belongs to this container.
Definition: drag_container.h:145
drag_list::drag_layout
QBoxLayout * drag_layout
The layout container that holds all drag and drop widgets.
Definition: drag_container.h:22
BlamKeystone::Themes::GetActiveTheme
KEYSTONE BlamEditorTheme * GetActiveTheme()
Retrieves the currently selected theme.
Definition: themes.cpp:335
drag_container::drag_container
drag_container(drag_list *_parent_list, tag_designer *_designer)
Creates a new drag_container instance.
Definition: drag_container.cpp:29
drag_container::tag_field_control
BlamEditorTagFieldControl * tag_field_control
The tag field widget that belongs to this container.
Definition: drag_container.h:146
KeystoneDialogResult::Yes
@ Yes
The user pressed the 'Yes' button.
BlamKeystone::Utils::IsPointWithinGeometry
KEYSTONE bool IsPointWithinGeometry(QWidget *widget, QPoint point)
Definition: utils.cpp:309
grip_frame
Class used for the drag container's grip widget.
Definition: drag_container.h:73
drag_drop_zone::SetDropDisplayActive
void SetDropDisplayActive(bool active)
Definition: drag_drop_zone.cpp:24
KeystoneMessageBoxType::Question
@ Question
Dialog icon will be a speech bubble with a question mark.
drag_list
A basic interface class which can be used for drag and drop behaviors.
Definition: drag_container.h:19
drag_list::AddContentWidget
void AddContentWidget(QWidget *widget)
Adds a content item to the drag list.
Definition: drag_list.cpp:38
drag_drop_zone.h
drag_container::AddContentWidget
void AddContentWidget(QWidget *widget)
Adds a widget to this drag container.
Definition: drag_container.cpp:343
grip_frame::paintEvent
void paintEvent(QPaintEvent *event) override
Definition: grip_frame.cpp:22
BitfieldFlagsEditorDialog::GetNewOptions
std::vector< BlamEnumFieldOption > GetNewOptions()
Definition: BitfieldFlagsEditorDialog.cpp:139
drag_container::OnEditorThemeChangeEvent
void OnEditorThemeChangeEvent(EditorThemeChangeEvent *event) override
Definition: drag_container.cpp:273
BlamEditorTagFieldControl::SetupUI
virtual void SetupUI()
Configures the UI for the current field.
Definition: tag_fields.h:64
THEME_RESOURCE
#define THEME_RESOURCE(group_id, id)
Definition: themes.h:17
PluginFieldPropertiesDialog::IsCancelled
bool IsCancelled()
Checks whether the dialog was cancelled.
Definition: PluginFieldPropertiesDialog.cpp:183
drag_container::mouseReleaseEvent
void mouseReleaseEvent(QMouseEvent *mouse_event) override
Definition: drag_container.cpp:193
BlamKeystone::Utils::SetGraphicsViewImage
KEYSTONE void SetGraphicsViewImage(QGraphicsView *graphics_view, std::string image_path, Qt::AspectRatioMode aspect_ratio_mode)
Applies an image to a graphics view, without the need for extra scene/pixmap management.
Definition: utils.cpp:221
tag_fields.h
tag_designer.h
drag_container::SetIcon
void SetIcon(std::string group_id, std::string resource_id)
Sets the drag container's sidebar icon.
Definition: drag_container.cpp:358
tag_designer
Class representing the Tag Designer.
Definition: tag_designer.h:24
drag_container::SetFocusState
void SetFocusState(bool focus_state, bool force_update=false)
Sets the drag container's focus state.
Definition: drag_container.cpp:315
BitfieldFlagsEditorDialog::GetNewFlags
std::vector< BlamBitfieldBitInfo > GetNewFlags()
Definition: BitfieldFlagsEditorDialog.cpp:116
BlamKeystone::EditorData::GetDocumentTypeConfiguration
KEYSTONE BlamConfigurationFile * GetDocumentTypeConfiguration(BlamEditorDocumentType type)
Attempts to locate the configuration file for the specified document type.
Definition: document_config.cpp:107