mirror of
https://github.com/scp-fs2open/fs2open.github.com.git
synced 2026-11-07 22:56:30 -10:00
Compare commits
7
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fa6a19bcd8 | ||
|
|
6fb9373d41 | ||
|
|
1385312ee8 | ||
|
|
f402b71fbc | ||
|
|
53723757a8 | ||
|
|
c09658ffb5 | ||
|
|
4622c31d55 |
No files matched your search
+2
-2
@@ -170,7 +170,7 @@ if ("${CMAKE_VERSION}" VERSION_GREATER "3.5")
|
||||
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT Freespace2)
|
||||
endif()
|
||||
|
||||
IF(MSVC_USE_RUNTIME_DLL)
|
||||
IF(MSVC_USE_RUNTIME_DLL OR FSO_BUILD_QTFRED)
|
||||
SET(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION "${BINARY_DESTINATION}")
|
||||
|
||||
IF(FSO_BUILD_FRED2)
|
||||
@@ -178,7 +178,7 @@ IF(MSVC_USE_RUNTIME_DLL)
|
||||
ENDIF(FSO_BUILD_FRED2)
|
||||
|
||||
INCLUDE(InstallRequiredSystemLibraries)
|
||||
ENDIF(MSVC_USE_RUNTIME_DLL)
|
||||
ENDIF()
|
||||
|
||||
include(package)
|
||||
|
||||
|
||||
@@ -132,6 +132,7 @@ if ($DeployBuild) {
|
||||
}
|
||||
|
||||
cmake -DCMAKE_INSTALL_PREFIX="$env:APPVEYOR_BUILD_FOLDER/../install" -DFSO_USE_SPEECH="ON" `
|
||||
-DFSO_BUILD_QTFRED=ON -DQT5_INSTALL_ROOT="$($buildConfig.QtDir)" `
|
||||
-DFSO_USE_VOICEREC="ON" -DMSVC_SIMD_INSTRUCTIONS="$($buildConfig.SimdType)" `
|
||||
-G "$($buildConfig.Generator)" -T "$($buildConfig.Toolset)" ..
|
||||
|
||||
|
||||
@@ -67,6 +67,7 @@ FFmpegContext::~FFmpegContext() {
|
||||
av_free(m_ctx->pb->buffer);
|
||||
}
|
||||
av_free(m_ctx->pb);
|
||||
m_ctx->pb = nullptr;
|
||||
}
|
||||
|
||||
avformat_close_input(&m_ctx);
|
||||
|
||||
+14
-4
@@ -12,9 +12,6 @@ find_package(Qt5 COMPONENTS Widgets OpenGL REQUIRED)
|
||||
|
||||
include(source_groups.cmake)
|
||||
|
||||
# When building qtFRED we need to install the runtime libraries since the Qt DLLs need them
|
||||
INCLUDE(InstallRequiredSystemLibraries)
|
||||
|
||||
qt5_wrap_ui(QTFRED_UI_GENERATED ${files_UI})
|
||||
|
||||
source_group("UI\\Generated" FILES ${QTFRED_UI_GENERATED})
|
||||
@@ -94,11 +91,24 @@ if (WIN32)
|
||||
foreach(path ${file_paths})
|
||||
add_custom_command(TARGET qtfred
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${path}" "$<TARGET_FILE_DIR:qtfred>"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${path}" "$<TARGET_FILE_DIR:qtfred>"
|
||||
VERBATIM)
|
||||
endforeach(path)
|
||||
|
||||
install(FILES ${file_paths}
|
||||
DESTINATION ${BINARY_DESTINATION}
|
||||
)
|
||||
|
||||
# Windows requires that the qwindows DLL is copied as well
|
||||
execute_process(COMMAND ${QT_QMAKE_EXECUTABLE} -query QT_INSTALL_PLUGINS OUTPUT_VARIABLE QT_INSTALL_PLUGINS OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
set(qwindows_path "${QT_INSTALL_PLUGINS}/platforms/qwindows$<$<CONFIG:Debug>:d>.dll")
|
||||
|
||||
add_custom_command(TARGET qtfred
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${qwindows_path}" "$<TARGET_FILE_DIR:qtfred>/platforms/qwindows$<$<CONFIG:Debug>:d>.dll"
|
||||
VERBATIM)
|
||||
|
||||
install(FILES ${qwindows_path}
|
||||
DESTINATION ${BINARY_DESTINATION}/platforms
|
||||
)
|
||||
endif(WIN32)
|
||||
@@ -48,8 +48,6 @@ add_file_folder("Source/Mission/Dialogs"
|
||||
src/mission/dialogs/AbstractDialogModel.h
|
||||
src/mission/dialogs/CustomWingNamesDialogModel.cpp
|
||||
src/mission/dialogs/CustomWingNamesDialogModel.h
|
||||
src/mission/dialogs/EventEditorDialogModel.cpp
|
||||
src/mission/dialogs/EventEditorDialogModel.h
|
||||
src/mission/dialogs/FictionViewerDialogModel.cpp
|
||||
src/mission/dialogs/FictionViewerDialogModel.h
|
||||
src/mission/dialogs/FormWingDialogModel.cpp
|
||||
|
||||
@@ -91,6 +91,9 @@ int main(int argc, char* argv[]) {
|
||||
QCoreApplication::setOrganizationDomain("hard-light.net");
|
||||
QCoreApplication::setApplicationName("qtFRED");
|
||||
|
||||
// Expect that the platform library is in the same directory
|
||||
QCoreApplication::addLibraryPath(QCoreApplication::applicationDirPath());
|
||||
|
||||
QApplication app(argc, argv);
|
||||
|
||||
QGuiApplication::setApplicationDisplayName(app.tr("qtFRED v%1").arg(FS_VERSION_FULL));
|
||||
|
||||
@@ -136,7 +136,7 @@ void Editor::update() {
|
||||
}
|
||||
}
|
||||
|
||||
bool Editor::loadMission(const std::string& filepath, int flags) {
|
||||
bool Editor::loadMission(const std::string& mission_name, int flags) {
|
||||
char name[512], * old_name;
|
||||
int i, j, k, ob;
|
||||
int used_pool[MAX_WEAPON_TYPES];
|
||||
@@ -147,6 +147,18 @@ bool Editor::loadMission(const std::string& filepath, int flags) {
|
||||
|
||||
clearMission();
|
||||
|
||||
std::string filepath = mission_name;
|
||||
char fullpath[MAX_PATH_LEN];
|
||||
size_t pack_offset;
|
||||
if (cf_find_file_location(filepath.c_str(), CF_TYPE_MISSIONS, sizeof(fullpath) - 1, fullpath, nullptr, &pack_offset)) {
|
||||
// We found this file in the CFile system
|
||||
if (pack_offset == 0) {
|
||||
// This is a "real" file. Since we now have an absolute path we can use that to make sure we only deal with
|
||||
// absolute paths which makes sure that the "recent mission" menu has correct file names
|
||||
filepath = fullpath;
|
||||
}
|
||||
}
|
||||
|
||||
if (parse_main(filepath.c_str(), flags)) {
|
||||
if (flags & MPF_IMPORT_FSM) {
|
||||
SCP_string msg;
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
//
|
||||
//
|
||||
|
||||
#include "EventEditorDialogModel.h"
|
||||
|
||||
namespace fso {
|
||||
namespace fred {
|
||||
namespace dialogs {
|
||||
|
||||
EventEditorDialogModel::EventEditorDialogModel(QObject* parent, EditorViewport* viewport) :
|
||||
AbstractDialogModel(parent, viewport) {
|
||||
}
|
||||
bool EventEditorDialogModel::apply() {
|
||||
return true;
|
||||
}
|
||||
void EventEditorDialogModel::reject() {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "AbstractDialogModel.h"
|
||||
|
||||
namespace fso {
|
||||
namespace fred {
|
||||
namespace dialogs {
|
||||
|
||||
class EventEditorDialogModel: public AbstractDialogModel {
|
||||
Q_OBJECT
|
||||
public:
|
||||
EventEditorDialogModel(QObject* parent, EditorViewport* viewport);
|
||||
|
||||
bool apply() override;
|
||||
void reject() override;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1,13 +1,17 @@
|
||||
#pragma once
|
||||
|
||||
#include <QDialog>
|
||||
#include <QListWidget>
|
||||
|
||||
#include "mission/dialogs/EventEditorDialogModel.h"
|
||||
#include "ui/widgets/sexp_tree.h"
|
||||
|
||||
#include <mission/missiongoals.h>
|
||||
#include <mission/missionmessage.h>
|
||||
|
||||
#include <memory>
|
||||
|
||||
class QCheckBox;
|
||||
|
||||
namespace fso {
|
||||
namespace fred {
|
||||
namespace dialogs {
|
||||
@@ -16,23 +20,91 @@ namespace Ui {
|
||||
class EventEditorDialog;
|
||||
}
|
||||
|
||||
class EventEditorDialog: public QDialog {
|
||||
int m_num_events;
|
||||
const int MAX_SEARCH_MESSAGE_DEPTH = 5; // maximum search number of event nodes with message text
|
||||
|
||||
class EventEditorDialog: public QDialog, public SexpTreeEditorInterface {
|
||||
std::unique_ptr<Ui::EventEditorDialog> ui;
|
||||
|
||||
Editor* _editor = nullptr;
|
||||
|
||||
int m_num_events = 0;
|
||||
int m_sig[MAX_MISSION_EVENTS];
|
||||
mission_event m_events[MAX_MISSION_EVENTS];
|
||||
int cur_event = -1;
|
||||
void set_current_event(int evt);
|
||||
|
||||
int m_num_messages = 0;
|
||||
SCP_vector<MMessage> m_messages;
|
||||
int m_cur_msg = -1;
|
||||
void set_current_message(int msg);
|
||||
|
||||
int m_wave_id = -1;
|
||||
|
||||
// Message data
|
||||
int m_last_message_node = -1;
|
||||
|
||||
void connectCheckBox(QCheckBox* box, bool* var);
|
||||
|
||||
bool modified = false;
|
||||
|
||||
void initEventTree();
|
||||
void load_tree();
|
||||
void create_tree();
|
||||
|
||||
void initMessageList();
|
||||
void initHeadCombo();
|
||||
void initWaveFilenames();
|
||||
void initPersonas();
|
||||
|
||||
void applyChanges();
|
||||
void rejectChanges();
|
||||
|
||||
void messageDoubleClicked(QListWidgetItem* item);
|
||||
|
||||
void createNewMessage();
|
||||
void deleteMessage();
|
||||
|
||||
void browseAni();
|
||||
void browseWave();
|
||||
|
||||
void playWave();
|
||||
void updateStuff();
|
||||
|
||||
void updatePersona();
|
||||
|
||||
void rebuildMessageList();
|
||||
|
||||
void initMessageWidgets();
|
||||
|
||||
void initEventWidgets();
|
||||
|
||||
void updateEventBitmap();
|
||||
|
||||
void connectLogState(QCheckBox* box, uint32_t flag);
|
||||
|
||||
void newEventHandler();
|
||||
void insertEventHandler();
|
||||
void deleteEventHandler();
|
||||
QTreeWidgetItem* get_event_handle(int num);
|
||||
void reset_event(int num, QTreeWidgetItem* after);
|
||||
|
||||
bool query_modified();
|
||||
protected:
|
||||
void keyPressEvent(QKeyEvent* event) override;
|
||||
Q_OBJECT
|
||||
protected:
|
||||
void closeEvent(QCloseEvent* event) override;
|
||||
public:
|
||||
EventEditorDialog(QWidget* parent, EditorViewport* viewport);
|
||||
~EventEditorDialog() override;
|
||||
|
||||
private:
|
||||
std::unique_ptr<Ui::EventEditorDialog> ui;
|
||||
void rootNodeDeleted(int node);
|
||||
void rootNodeRenamed(int node);
|
||||
void rootNodeFormulaChanged(int old, int node);
|
||||
|
||||
std::unique_ptr<EventEditorDialogModel> _model;
|
||||
void initEventTree();
|
||||
void load_tree();
|
||||
void create_tree();
|
||||
bool hasDefaultMessageParamter() override;
|
||||
SCP_vector<SCP_string> getMessages() override;
|
||||
int getRootReturnType() const override;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
|
||||
#include <QtWidgets/QMessageBox>
|
||||
#include <QtWidgets/QMenu>
|
||||
#include <QDebug>
|
||||
|
||||
#define TREE_NODE_INCREMENT 100
|
||||
|
||||
@@ -125,10 +126,6 @@ QString node_image_to_resource_name(NodeImage image) {
|
||||
}
|
||||
return ":/images/bitmap1.png";
|
||||
}
|
||||
|
||||
QIcon nodeimage_to_icon(NodeImage image) {
|
||||
return QIcon(node_image_to_resource_name(image));
|
||||
}
|
||||
}
|
||||
|
||||
SexpTreeEditorInterface::SexpTreeEditorInterface() :
|
||||
@@ -191,16 +188,16 @@ int SexpTreeEditorInterface::getRootReturnType() const {
|
||||
bool SexpTreeEditorInterface::requireCampaignOperators() const {
|
||||
return false;
|
||||
}
|
||||
void SexpTreeEditorInterface::rootNodeDeleted(int node) {
|
||||
}
|
||||
void SexpTreeEditorInterface::rootNodeRenamed(int node) {
|
||||
}
|
||||
void SexpTreeEditorInterface::rootNodeFormulaChanged(int old, int node) {
|
||||
|
||||
QIcon sexp_tree::convertNodeImageToIcon(NodeImage image) {
|
||||
return QIcon(node_image_to_resource_name(image));
|
||||
}
|
||||
|
||||
// constructor
|
||||
sexp_tree::sexp_tree(QWidget* parent) : QTreeWidget(parent) {
|
||||
setSelectionMode(QTreeWidget::SingleSelection);
|
||||
setSelectionBehavior(QTreeWidget::SelectItems);
|
||||
|
||||
setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
|
||||
select_sexp_node = -1;
|
||||
@@ -209,6 +206,7 @@ sexp_tree::sexp_tree(QWidget* parent) : QTreeWidget(parent) {
|
||||
|
||||
connect(this, &QWidget::customContextMenuRequested, this, &sexp_tree::customMenuHandler);
|
||||
connect(this, &QTreeWidget::itemChanged, this, &sexp_tree::handleItemChange);
|
||||
connect(this, &QTreeWidget::itemSelectionChanged, this, &sexp_tree::handleNewItemSelected);
|
||||
}
|
||||
|
||||
// clears out the tree, so all the nodes are unused.
|
||||
@@ -1607,7 +1605,7 @@ int sexp_tree::add_variable_data(const char* new_data, int type) {
|
||||
|
||||
// add an operator under operator pointed to by item_index. Updates item_index to point
|
||||
// to this new operator.
|
||||
void sexp_tree::add_operator(const char* op, QTreeWidgetItem* h) {
|
||||
int sexp_tree::add_operator(const char* op, QTreeWidgetItem* h) {
|
||||
int node;
|
||||
|
||||
if (item_index == -1) {
|
||||
@@ -1624,6 +1622,8 @@ void sexp_tree::add_operator(const char* op, QTreeWidgetItem* h) {
|
||||
tree_nodes[node].flags = OPERAND;
|
||||
setCurrentItemIndex(node);
|
||||
modified();
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
// add an operator with one argument under operator pointed to by item_index. This function
|
||||
@@ -1841,24 +1841,20 @@ int sexp_tree::node_error(int node, const char* msg, int* bypass) {
|
||||
}
|
||||
|
||||
void sexp_tree::hilite_item(int node) {
|
||||
|
||||
ensure_visible(node);
|
||||
tree_nodes[node].handle->setSelected(true);
|
||||
clearSelection();
|
||||
setCurrentItem(tree_nodes[node].handle);
|
||||
}
|
||||
|
||||
// because the MFC function EnsureVisible() doesn't do what it says it does, I wrote this.
|
||||
void sexp_tree::ensure_visible(int node) {
|
||||
Assert(node != -1);
|
||||
if (tree_nodes[node].parent != -1) {
|
||||
ensure_visible(tree_nodes[node].parent);
|
||||
} // expand all parents first
|
||||
auto handle = tree_nodes[node].handle->parent();
|
||||
|
||||
if (tree_nodes[node].child != -1) { // expandable?
|
||||
expandItem(tree_nodes[node].handle);
|
||||
} // expand this item
|
||||
}
|
||||
|
||||
void sexp_tree::link_modified(int* ptr) {
|
||||
modified();
|
||||
while (handle != nullptr) {
|
||||
handle->setExpanded(true);
|
||||
handle = handle->parent();
|
||||
}
|
||||
}
|
||||
|
||||
void get_variable_default_text_from_variable_text(char* text, char* default_text) {
|
||||
@@ -2093,8 +2089,8 @@ void sexp_tree::replace_data(const char* new_data, int type) {
|
||||
set_node(item_index, type, new_data);
|
||||
h->setText(0, new_data);
|
||||
auto bmap = get_data_image(item_index);
|
||||
h->setIcon(0, nodeimage_to_icon(bmap));
|
||||
tree_nodes[item_index].handle->setFlags(tree_nodes[node].handle->flags().setFlag(Qt::ItemIsEditable, true));
|
||||
h->setIcon(0, convertNodeImageToIcon(bmap));
|
||||
h->setFlags(h->flags().setFlag(Qt::ItemIsEditable, true));
|
||||
tree_nodes[item_index].flags = EDITABLE;
|
||||
|
||||
// check remaining data beyond replaced data for validity (in case any of it is dependent on data just replaced)
|
||||
@@ -2127,7 +2123,7 @@ void sexp_tree::replace_variable_data(int var_idx, int type) {
|
||||
|
||||
set_node(item_index, type, buf);
|
||||
h->setText(0, QString::fromUtf8(buf));
|
||||
h->setIcon(0, nodeimage_to_icon(NodeImage::VARIABLE));
|
||||
h->setIcon(0, convertNodeImageToIcon(NodeImage::VARIABLE));
|
||||
h->setFlags(h->flags().setFlag(Qt::ItemIsEditable, false));
|
||||
tree_nodes[item_index].flags = NOT_EDITABLE;
|
||||
|
||||
@@ -2302,13 +2298,13 @@ void sexp_tree::swap_roots(QTreeWidgetItem* one, QTreeWidgetItem* two) {
|
||||
// move_branch(two, TVI_ROOT, one);
|
||||
// DeleteItem(one);
|
||||
auto h = move_branch(one, itemFromIndex(rootIndex()), two);
|
||||
h->setSelected(true);
|
||||
setCurrentItem(h);
|
||||
modified();
|
||||
}
|
||||
|
||||
QTreeWidgetItem*
|
||||
sexp_tree::insert(const QString& lpszItem, NodeImage image, QTreeWidgetItem* hParent, QTreeWidgetItem* hInsertAfter) {
|
||||
return insertWithIcon(lpszItem, nodeimage_to_icon(image), hParent, hInsertAfter);
|
||||
return insertWithIcon(lpszItem, convertNodeImageToIcon(image), hParent, hInsertAfter);
|
||||
}
|
||||
|
||||
QTreeWidgetItem* sexp_tree::insertWithIcon(const QString& lpszItem,
|
||||
@@ -2378,8 +2374,31 @@ int sexp_tree::get_type(QTreeWidgetItem* h) {
|
||||
return tree_nodes[i].type;
|
||||
}
|
||||
|
||||
// get node of item clicked on
|
||||
int sexp_tree::get_node(QTreeWidgetItem* h) {
|
||||
uint i;
|
||||
|
||||
// get index into sexp_tree
|
||||
for (i = 0; i < tree_nodes.size(); i++) {
|
||||
if (tree_nodes[i].handle == h) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ((i >= tree_nodes.size())) {
|
||||
// Int3(); // This would be the root of the tree -- ie, event name
|
||||
return -1;
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
void sexp_tree::update_help(QTreeWidgetItem* h) {
|
||||
if (h == nullptr) {
|
||||
helpChanged("");
|
||||
miniHelpChanged("");
|
||||
}
|
||||
|
||||
int i, j, z, c, code, index, sibling_place;
|
||||
|
||||
for (i = 0; i < (int) Operators.size(); i++) {
|
||||
@@ -5393,10 +5412,15 @@ void sexp_tree::cutActionHandler() {
|
||||
deleteActionHandler();
|
||||
}
|
||||
void sexp_tree::deleteActionHandler() {
|
||||
if (currentItem() == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (_interface->getFlags()[TreeFlags::RootDeletable] && (item_index == -1)) {
|
||||
auto item = currentItem();
|
||||
setCurrentItemIndex(item->data(FormulaDataRole, 0).toInt());
|
||||
_interface->rootNodeDeleted(item_index);
|
||||
item_index = item->data(0, FormulaDataRole).toInt();
|
||||
|
||||
rootNodeDeleted(item_index);
|
||||
|
||||
free_node2(item_index);
|
||||
delete item;
|
||||
@@ -5443,8 +5467,10 @@ void sexp_tree::handleItemChange(QTreeWidgetItem* item, int column) {
|
||||
}
|
||||
|
||||
if (node == tree_nodes.size()) {
|
||||
setCurrentItemIndex(qvariant_cast<int>(item->data(FormulaDataRole, 0)));
|
||||
_interface->rootNodeRenamed(item_index);
|
||||
setCurrentItemIndex(qvariant_cast<int>(item->data(0, FormulaDataRole)));
|
||||
|
||||
rootNodeRenamed(item_index);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -5562,7 +5588,7 @@ void sexp_tree::insertOperatorAction(int op) {
|
||||
h = nullptr;
|
||||
root_item = node;
|
||||
} else {
|
||||
_interface->rootNodeFormulaChanged(item_index, node);
|
||||
rootNodeFormulaChanged(item_index, node);
|
||||
h->setData(0, FormulaDataRole, node);
|
||||
}
|
||||
}
|
||||
@@ -5605,8 +5631,10 @@ void sexp_tree::addReplaceTypedDataHandler(int data_idx, bool replace) {
|
||||
}
|
||||
Assert(op >= 0);
|
||||
|
||||
auto type = query_operator_argument_type(op, Add_count);
|
||||
auto list = get_listing_opf(type, item_index, Add_count);
|
||||
auto argcount = replace ? Replace_count : Add_count;
|
||||
|
||||
auto type = query_operator_argument_type(op, argcount);
|
||||
auto list = get_listing_opf(type, item_index, argcount);
|
||||
Assert(list);
|
||||
|
||||
auto ptr = list;
|
||||
@@ -5700,6 +5728,30 @@ void sexp_tree::handleReplaceVariableAction(int id) {
|
||||
replace_variable_data(id, (type | SEXPT_VARIABLE));
|
||||
|
||||
}
|
||||
void sexp_tree::handleNewItemSelected() {
|
||||
auto selectedItem = currentItem();
|
||||
|
||||
update_help(selectedItem);
|
||||
|
||||
if (selectedItem == nullptr) {
|
||||
selectedRootChanged(-1);
|
||||
setCurrentItemIndex(-1);
|
||||
return;
|
||||
}
|
||||
|
||||
// Set the item index so that it is always up to date
|
||||
item_index = get_node(selectedItem);
|
||||
|
||||
auto item = selectedItem;
|
||||
while (item->parent() != nullptr) {
|
||||
item = item->parent();
|
||||
}
|
||||
|
||||
selectedRootChanged(item->data(0, FormulaDataRole).toInt());
|
||||
}
|
||||
void sexp_tree::deleteCurrentItem() {
|
||||
deleteActionHandler();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -118,13 +118,6 @@ class SexpTreeEditorInterface {
|
||||
const flagset<TreeFlags>& getFlags() const;
|
||||
|
||||
virtual bool requireCampaignOperators() const;
|
||||
|
||||
// TODO: These callbacks could be replaced with Qt signals
|
||||
virtual void rootNodeDeleted(int node);
|
||||
|
||||
virtual void rootNodeRenamed(int node);
|
||||
|
||||
virtual void rootNodeFormulaChanged(int old, int node);
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -175,6 +168,8 @@ class sexp_tree: public QTreeWidget {
|
||||
public:
|
||||
static const int FormulaDataRole = Qt::UserRole;
|
||||
|
||||
static QIcon convertNodeImageToIcon(NodeImage image);
|
||||
|
||||
explicit sexp_tree(QWidget* parent = nullptr);
|
||||
|
||||
int find_text(const char* text, int* find, int max_depth);
|
||||
@@ -189,6 +184,7 @@ class sexp_tree: public QTreeWidget {
|
||||
QTreeWidgetItem* hInsertAfter = nullptr);
|
||||
QTreeWidgetItem* handle(int node);
|
||||
int get_type(QTreeWidgetItem* h);
|
||||
int get_node(QTreeWidgetItem* h);
|
||||
int query_false(int node = -1);
|
||||
int add_default_operator(int op, int argnum);
|
||||
int get_default_value(sexp_list_item* item, char* text_buf, int op, int i);
|
||||
@@ -204,7 +200,6 @@ class sexp_tree: public QTreeWidget {
|
||||
void replace_operator(const char* op);
|
||||
void replace_data(const char* new_data, int type);
|
||||
void replace_variable_data(int var_idx, int type);
|
||||
void link_modified(int* ptr);
|
||||
void ensure_visible(int node);
|
||||
int node_error(int node, const char* msg, int* bypass);
|
||||
void expand_branch(QTreeWidgetItem* h);
|
||||
@@ -223,7 +218,7 @@ class sexp_tree: public QTreeWidget {
|
||||
void reset_handles();
|
||||
int save_tree(int node = -1);
|
||||
void load_tree(int index, const char* deflt = "true");
|
||||
void add_operator(const char* op, QTreeWidgetItem* h = nullptr);
|
||||
int add_operator(const char* op, QTreeWidgetItem* h = nullptr);
|
||||
int add_data(const char* new_data, int type);
|
||||
int add_variable_data(const char* new_data, int type);
|
||||
void add_sub_tree(int node, QTreeWidgetItem* root);
|
||||
@@ -331,16 +326,24 @@ class sexp_tree: public QTreeWidget {
|
||||
sexp_list_item* get_listing_opf_nebula_patterns();
|
||||
sexp_list_item* get_listing_opf_game_snds();
|
||||
|
||||
int item_index;
|
||||
|
||||
void setCurrentItemIndex(int index);
|
||||
int select_sexp_node; // used to select an sexp item on dialog box open.
|
||||
|
||||
void initializeEditor(Editor* edit, SexpTreeEditorInterface* editorInterface = nullptr);
|
||||
|
||||
void deleteCurrentItem();
|
||||
signals:
|
||||
void miniHelpChanged(const QString& text);
|
||||
void helpChanged(const QString& text);
|
||||
void modified();
|
||||
|
||||
void rootNodeDeleted(int node);
|
||||
void rootNodeRenamed(int node);
|
||||
void rootNodeFormulaChanged(int old, int node);
|
||||
|
||||
void selectedRootChanged(int formula);
|
||||
|
||||
// Generated message map functions
|
||||
protected:
|
||||
QTreeWidgetItem* insertWithIcon(const QString& lpszItem,
|
||||
@@ -350,6 +353,8 @@ class sexp_tree: public QTreeWidget {
|
||||
|
||||
void customMenuHandler(const QPoint& pos);
|
||||
|
||||
void handleNewItemSelected();
|
||||
|
||||
std::unique_ptr<QMenu> buildContextMenu(QTreeWidgetItem* h);
|
||||
|
||||
int load_branch(int index, int parent);
|
||||
@@ -373,14 +378,14 @@ class sexp_tree: public QTreeWidget {
|
||||
int add_instance; // a source reference index indicator for adding data
|
||||
int replace_instance; // a source reference index indicator for replacing data
|
||||
|
||||
int item_index;
|
||||
|
||||
Editor* _editor = nullptr;
|
||||
SexpTreeEditorInterface* _interface = nullptr;
|
||||
|
||||
// If there is no special interface then we supply a default one which needs to be stored somewhere
|
||||
std::unique_ptr<SexpTreeEditorInterface> _owned_interface;
|
||||
|
||||
void setCurrentItemIndex(int index);
|
||||
|
||||
int Add_count, Replace_count;
|
||||
int Modify_variable;
|
||||
|
||||
|
||||
+186
-126
@@ -58,56 +58,56 @@
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="1" column="0">
|
||||
<widget class="QCheckBox" name="checkBox">
|
||||
<widget class="QCheckBox" name="checkLogTrue">
|
||||
<property name="text">
|
||||
<string>True</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="3">
|
||||
<widget class="QCheckBox" name="checkBox_4">
|
||||
<widget class="QCheckBox" name="checkLogFirstTrigger">
|
||||
<property name="text">
|
||||
<string>First Trigger</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QCheckBox" name="checkBox_2">
|
||||
<widget class="QCheckBox" name="checkLogPrevious">
|
||||
<property name="text">
|
||||
<string>Log Previous</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QCheckBox" name="checkBox_3">
|
||||
<widget class="QCheckBox" name="checkLogFirstRepeat">
|
||||
<property name="text">
|
||||
<string>First Repeat</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="checkBox_5">
|
||||
<widget class="QCheckBox" name="checkLogFalse">
|
||||
<property name="text">
|
||||
<string>False</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QCheckBox" name="checkBox_6">
|
||||
<widget class="QCheckBox" name="checkLogAlwaysFalse">
|
||||
<property name="text">
|
||||
<string>Always False</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<widget class="QCheckBox" name="checkBox_7">
|
||||
<widget class="QCheckBox" name="checkLogLastRepeat">
|
||||
<property name="text">
|
||||
<string>Last Repeat</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="3">
|
||||
<widget class="QCheckBox" name="checkBox_8">
|
||||
<widget class="QCheckBox" name="checkLogLastTrigger">
|
||||
<property name="text">
|
||||
<string>Last Trigger</string>
|
||||
</property>
|
||||
@@ -129,45 +129,8 @@
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="18" column="0" colspan="2">
|
||||
<widget class="QTextEdit" name="textEdit">
|
||||
<property name="verticalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QPushButton" name="pushButton">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>New Event</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="17" column="0" colspan="2">
|
||||
<widget class="QLineEdit" name="lineEdit">
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Repeat Co&unt</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>spinBox</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
<item row="7" column="0">
|
||||
<widget class="QSpinBox" name="triggerCountBox"/>
|
||||
</item>
|
||||
<item row="16" column="0" colspan="2">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
@@ -179,8 +142,34 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="17" column="0" colspan="2">
|
||||
<widget class="QLineEdit" name="miniHelpBox">
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="12" column="0">
|
||||
<widget class="QComboBox" name="teamCombo">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Team 1</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Team 2</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>none</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QPushButton" name="pushButton_3">
|
||||
<widget class="QPushButton" name="btnDeleteEvent">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -192,8 +181,11 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="0">
|
||||
<widget class="QSpinBox" name="scoreBox"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QPushButton" name="pushButton_2">
|
||||
<widget class="QPushButton" name="btnInsertEvent">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -205,36 +197,13 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QSpinBox" name="spinBox"/>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<widget class="QSpinBox" name="spinBox_2"/>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Tri&gger Count</string>
|
||||
<string>Repeat Co&unt</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>spinBox_2</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Interval time</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>spinBox_3</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="13" column="0">
|
||||
<widget class="QCheckBox" name="checkBox_9">
|
||||
<property name="text">
|
||||
<string>Chained</string>
|
||||
<cstring>repeatCountBox</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -244,31 +213,59 @@
|
||||
<string>Score</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>spinBox_4</cstring>
|
||||
<cstring>scoreBox</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="0">
|
||||
<widget class="QSpinBox" name="spinBox_3"/>
|
||||
</item>
|
||||
<item row="12" column="0">
|
||||
<widget class="QComboBox" name="comboBox"/>
|
||||
</item>
|
||||
<item row="11" column="0">
|
||||
<widget class="QSpinBox" name="spinBox_4"/>
|
||||
</item>
|
||||
<item row="14" column="0">
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="text">
|
||||
<string>Chain Dela&y</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>spinBox_5</cstring>
|
||||
<cstring>chainDelayBox</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="15" column="0">
|
||||
<widget class="QSpinBox" name="spinBox_5"/>
|
||||
<item row="18" column="0" colspan="2">
|
||||
<widget class="QTextEdit" name="helpBox">
|
||||
<property name="verticalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="13" column="0">
|
||||
<widget class="QCheckBox" name="chainedCheckBox">
|
||||
<property name="text">
|
||||
<string>Chained</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="0">
|
||||
<widget class="QSpinBox" name="intervalTimeBox"/>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Tri&gger Count</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>triggerCountBox</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Interval time</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>intervalTimeBox</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1" rowspan="15">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
@@ -276,14 +273,17 @@
|
||||
<string>Messages</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="4" column="0" colspan="2">
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="messageName"/>
|
||||
</item>
|
||||
<item row="5" column="0" colspan="2">
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="title">
|
||||
<string>Properties</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_6">
|
||||
<item row="1" column="2">
|
||||
<widget class="QPushButton" name="pushButton_7">
|
||||
<widget class="QPushButton" name="btnBrowseWave">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -301,12 +301,16 @@
|
||||
<string>ANI file</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>comboBox_2</cstring>
|
||||
<cstring>aniCombo</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="comboBox_2"/>
|
||||
<widget class="QComboBox" name="aniCombo">
|
||||
<property name="editable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" alignment="Qt::AlignRight">
|
||||
<widget class="QLabel" name="label_11">
|
||||
@@ -314,7 +318,7 @@
|
||||
<string>Wave file</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>comboBox_3</cstring>
|
||||
<cstring>waveCombo</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -324,18 +328,38 @@
|
||||
<string>&Team</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>comboBox_5</cstring>
|
||||
<cstring>messageTeamCombo</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QComboBox" name="comboBox_3"/>
|
||||
<widget class="QComboBox" name="waveCombo">
|
||||
<property name="editable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QComboBox" name="comboBox_4"/>
|
||||
<widget class="QComboBox" name="personaCombo"/>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QComboBox" name="comboBox_5"/>
|
||||
<widget class="QComboBox" name="messageTeamCombo">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Team 1</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Team 2</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>none</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" alignment="Qt::AlignRight">
|
||||
<widget class="QLabel" name="label_12">
|
||||
@@ -343,12 +367,12 @@
|
||||
<string>Persona</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>comboBox_4</cstring>
|
||||
<cstring>personaCombo</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="3">
|
||||
<widget class="QPushButton" name="pushButton_8">
|
||||
<widget class="QPushButton" name="btnWavePlay">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -365,14 +389,14 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2" colspan="2">
|
||||
<widget class="QPushButton" name="pushButton_6">
|
||||
<widget class="QPushButton" name="btnAniBrowse">
|
||||
<property name="text">
|
||||
<string>Browse</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2" colspan="2">
|
||||
<widget class="QPushButton" name="pushButton_9">
|
||||
<widget class="QPushButton" name="btnUpdateStuff">
|
||||
<property name="text">
|
||||
<string>Update Stuff</string>
|
||||
</property>
|
||||
@@ -394,23 +418,27 @@
|
||||
<string>Name</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>lineEdit_2</cstring>
|
||||
<cstring>messageName</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="lineEdit_2"/>
|
||||
</item>
|
||||
<item row="0" column="0" colspan="2">
|
||||
<widget class="QListView" name="listView"/>
|
||||
<widget class="QListWidget" name="messageList">
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="2">
|
||||
<item row="3" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_4">
|
||||
<widget class="QPushButton" name="btnNewMsg">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -423,7 +451,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_5">
|
||||
<widget class="QPushButton" name="btnDeleteMsg">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -437,9 +465,41 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="2">
|
||||
<widget class="QPlainTextEdit" name="messageContent">
|
||||
<property name="statusTip">
|
||||
<string>Message Text</string>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Message Text</string>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>Message Text</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QSpinBox" name="repeatCountBox"/>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QPushButton" name="btnNewEvent">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>New Event</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="15" column="0">
|
||||
<widget class="QSpinBox" name="chainDelayBox"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -457,22 +517,6 @@
|
||||
<include location="../resources/resources.qrc"/>
|
||||
</resources>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>fso::fred::dialogs::EventEditorDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>782</x>
|
||||
<y>568</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>504</x>
|
||||
<y>-11</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
@@ -489,5 +533,21 @@
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>fso::fred::dialogs::EventEditorDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>782</x>
|
||||
<y>568</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>504</x>
|
||||
<y>-11</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
Reference in new issue
Block a user