Compare commits

...
Author SHA1 Message Date
asarium fa6a19bcd8 Enable qtFRED deploy builds 2018-04-15 22:53:36 +02:00
asarium 6fb9373d41 Fix Windows deployment issue
The CMake code did not specify that qwindows.cll also needed to be
distributed with the application which caused errors for users who had
not installed Qt on their system.

This should make qtFRED redistributable without needing a QT
installation.
2018-04-15 22:53:35 +02:00
asarium 1385312ee8 Try to close the window on Esc key presses
This will allow the user to cancel the operation or save their changes
instead of discarding them without question.
2018-04-14 11:51:06 +02:00
asarium f402b71fbc Fix Clang warnings 2018-04-14 11:51:06 +02:00
asarium 53723757a8 Port event handling part of Event editor code 2018-04-14 11:51:06 +02:00
asarium c09658ffb5 Replace interface functions with qt signals 2018-04-14 11:51:06 +02:00
asarium 4622c31d55 Port message handling code of event editor dialog 2018-04-14 11:51:06 +02:00
14 changed files with 1524 additions and 245 deletions

No files matched your search

+2 -2
View File
@@ -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)
+1
View File
@@ -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)" ..
+1
View File
@@ -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
View File
@@ -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)
-2
View File
@@ -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
+3
View File
@@ -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));
+13 -1
View File
@@ -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
+81 -9
View File
@@ -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;
};
}
+86 -34
View File
@@ -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();
}
}
}
+17 -12
View File
@@ -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
View File
@@ -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&amp;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&amp;gger Count</string>
<string>Repeat Co&amp;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&amp;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&amp;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>&amp;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>