Skip to content

Commit

Permalink
Resolve #4448: Add option to validate that Conversation actors are ex…
Browse files Browse the repository at this point in the history
…isting in the map
  • Loading branch information
codereader committed Dec 26, 2016
1 parent bec8643 commit b02f6c2
Show file tree
Hide file tree
Showing 4 changed files with 138 additions and 1 deletion.
91 changes: 90 additions & 1 deletion install/ui/conversationeditor.fbp
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<wxFormBuilder_Project>
<FileVersion major="1" minor="11" />
<FileVersion major="1" minor="13" />
<object class="Project" expanded="1">
<property name="class_decoration"></property>
<property name="code_generation">C++</property>
Expand Down Expand Up @@ -717,6 +717,7 @@
<event name="OnSize"></event>
<event name="OnSpinCtrl"></event>
<event name="OnSpinCtrlText"></event>
<event name="OnTextEnter"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
Expand Down Expand Up @@ -1170,6 +1171,94 @@
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">6</property>
<property name="flag">wxEXPAND|wxTOP</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default">0</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Validate all</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">ConvEditorValidateActorsButton</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size">80,-1</property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnButtonClick"></event>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
</object>
</object>
Expand Down
10 changes: 10 additions & 0 deletions install/ui/conversationeditor.xrc
Expand Up @@ -156,6 +156,16 @@
<default>0</default>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag>wxEXPAND|wxTOP</flag>
<border>6</border>
<object class="wxButton" name="ConvEditorValidateActorsButton">
<size>80,-1</size>
<label>Validate all</label>
<default>0</default>
</object>
</object>
</object>
</object>
</object>
Expand Down
36 changes: 36 additions & 0 deletions plugins/dm.conversation/ConversationEditor.cpp
Expand Up @@ -4,9 +4,12 @@
#include "string/string.h"

#include <boost/format.hpp>
#include <boost/algorithm/string/join.hpp>
#include <boost/regex.hpp>

#include "CommandEditor.h"
#include "ActorNodeFinder.h"
#include "wxutil/dialog/MessageBox.h"

#include <wx/button.h>
#include <wx/sizer.h>
Expand Down Expand Up @@ -102,6 +105,10 @@ void ConversationEditor::populateWindow()
_delActorButton->Connect(wxEVT_BUTTON, wxCommandEventHandler(ConversationEditor::onDeleteActor), NULL, this);
_delActorButton->Enable(false);

_validateActorsButton = findNamedObject<wxButton>(this, "ConvEditorValidateActorsButton");
_validateActorsButton->Connect(wxEVT_BUTTON, wxCommandEventHandler(ConversationEditor::onValidateActors), NULL, this);
_validateActorsButton->Enable(false);

// Command Panel
wxPanel* commandPanel = findNamedObject<wxPanel>(this, "ConvEditorCommandPanel");

Expand Down Expand Up @@ -161,6 +168,8 @@ void ConversationEditor::updateWidgets()
updateCmdActionSensitivity(false);
_delActorButton->Enable(false);

_validateActorsButton->Enable(!_conversation.actors.empty());

// Name
findNamedObject<wxTextCtrl>(this, "ConvEditorNameEntry")->SetValue(_conversation.name);

Expand Down Expand Up @@ -432,6 +441,33 @@ void ConversationEditor::onDeleteActor(wxCommandEvent& ev)
updateWidgets();
}

void ConversationEditor::onValidateActors(wxCommandEvent& ev)
{
std::vector<std::string> errors;

for (const conversation::Conversation::ActorMap::value_type& i : _conversation.actors)
{
scene::ActorNodeFinder finder(i.second);
GlobalSceneGraph().root()->traverse(finder);

if (!finder.getFoundNode())
{
errors.push_back((boost::format(_("The actor %s cannot be found in the current map.")) % i.second).str());
}
}

if (!errors.empty())
{
std::string message = boost::algorithm::join(errors, "\n");
wxutil::Messagebox::Show(_("Actors missing"), message, IDialog::MESSAGE_ERROR, this);
}
else
{
std::string message = _("All actors are correctly referring to entities in the map.");
wxutil::Messagebox::Show(_("Actors OK"), message, IDialog::MESSAGE_CONFIRM, this);
}
}

void ConversationEditor::onActorEdited(wxDataViewEvent& ev)
{
wxutil::TreeModel::Row row(ev.GetItem(), *_actorStore);
Expand Down
2 changes: 2 additions & 0 deletions plugins/dm.conversation/ConversationEditor.h
Expand Up @@ -58,6 +58,7 @@ class ConversationEditor :

wxButton* _addActorButton;
wxButton* _delActorButton;
wxButton* _validateActorsButton;

wxButton* _addCmdButton;
wxButton* _delCmdButton;
Expand Down Expand Up @@ -104,6 +105,7 @@ class ConversationEditor :

void onAddActor(wxCommandEvent& ev);
void onDeleteActor(wxCommandEvent& ev);
void onValidateActors(wxCommandEvent& ev);
void onActorEdited(wxDataViewEvent& ev);

void onAddCommand(wxCommandEvent& ev);
Expand Down

0 comments on commit b02f6c2

Please sign in to comment.