33 #include <wx/valgen.h>
34 #include <boost/format.hpp>
97 wxDefaultSize, wxRESIZE_BORDER),
99 dotInstalled_(
false) {
101 createContents(
this,
true,
true);
104 dagEdit_ =
dynamic_cast<wxTextCtrl*
>(
FindWindow(ID_EDIT_DAG));
107 dynamic_cast<wxChoice*
>(
FindWindow(ID_INDEX_DAG));
115 orig_ = operation_->saveState();
126 dotInstalled_ = hasDot();
188 return wxWindow::TransferDataToWindow();
211 wxString oper = wxT(
"New DAG");
225 if (system(
"which dot > /dev/null 2>&1") != 0) {
226 wxString caption(wxString::FromAscii(
"Warning"));
229 "You must have dot installed to display DAGs."));
230 wxMessageBox(message, caption);
251 if (
operation_ != NULL && index < operation_->dagCount()) {
267 wxString caption(wxString::FromAscii(
"Warning"));
268 wxMessageBox(message, caption);
274 std::string pngDag = temp +
"/dag.png";
275 std::string dotDag = temp +
"/dag.dot";
285 if (currentDAG.
isNull() ==
true) {
291 const int pos = errText.find(
'\n');
300 std::string(
"echo 'digraph G {n140545368 [label=\"") + errText +
301 "\", shape=plaintext, fontsize=12]; }' | dot -Tpng > " + pngDag;
303 if (system(dotCmd.c_str()) != 0) {
309 wxString wxTemp(wxString::FromAscii(pngDag.c_str()));
310 dotImage_->LoadFile(wxTemp, wxBITMAP_TYPE_PNG);
313 unsigned int width =
dotImage_->GetWidth();
314 unsigned int height =
dotImage_->GetHeight();
317 width =
static_cast<unsigned int>(float(width) / 20 + 0.5);
318 height =
static_cast<unsigned int>(float(height) / 20 + 0.5);
330 std::string dotCmd =
"dot -Tpng " + dotDag +
" > " + pngDag;
331 if (system(dotCmd.c_str()) != 0) {
337 wxString wxTemp(wxString::FromAscii(pngDag.c_str()));
338 dotImage_->LoadFile(wxTemp, wxBITMAP_TYPE_PNG);
342 unsigned int width =
dotImage_->GetWidth();
343 unsigned int height =
dotImage_->GetHeight();
346 width =
static_cast<unsigned int>(float(width) / 20 + 0.5);
347 height =
static_cast<unsigned int>(float(height) / 20 + 0.5);
350 dagWindow_->SetScrollbars(20, 20, width, height);
385 EndModal(wxID_CANCEL);
390 std::string code(
"");
393 for (
int i = 0; i <
dagEdit_->GetNumberOfLines(); ++i) {
396 #if wxCHECK_VERSION(2, 6, 0)
397 std::string stdTemp(wxTemp.mb_str());
399 std::string stdTemp(wxTemp.c_str());
522 wxSize size(300, 400);
523 dagWindow_ =
new wxScrolledWindow(parent, -1, wxDefaultPosition, size);
526 wxBoxSizer *item0 =
new wxBoxSizer(wxVERTICAL);
529 wxStaticBox *dagStaticBox =
new wxStaticBox(parent, -1, wxT(
"Code"));
530 wxStaticBoxSizer *dagStaticBoxSizer =
531 new wxStaticBoxSizer(dagStaticBox, wxVERTICAL);
534 wxTextCtrl* editDAG =
537 wxSize(250,-1), wxTE_MULTILINE);
540 wxStaticBox *dagImageStaticBox =
new wxStaticBox(parent, -1, wxT(
"DAG"));
542 new wxStaticBoxSizer(dagImageStaticBox, wxVERTICAL);
557 dagStaticBoxSizer->Add(editDAG, 1, wxALL|wxGROW, 5);
560 wxBoxSizer *pageSizer =
new wxBoxSizer(wxHORIZONTAL);
561 pageSizer->Add(dagStaticBoxSizer, 1, wxGROW|wxTOP, 10);
565 item0->Add(pageSizer, 1, wxEXPAND|wxALL, 5);
576 parent,
ID_INDEX_DAG, wxDefaultPosition, wxSize(150,-1), 1,
586 wxButton *deleteDAG =
595 wxBoxSizer *dagToolsSizer =
new wxBoxSizer(wxHORIZONTAL);
596 dagToolsSizer->Add(indexDAG, 0, wxALIGN_CENTER|wxALL, 5);
598 wxGridSizer *dagButtonSizer =
new wxGridSizer(2, 0, 0);
600 dagButtonSizer->Add(saveDAG, 0, wxALIGN_CENTER|wxALL, 5);
601 dagButtonSizer->Add(undoDAG, 0, wxALIGN_CENTER|wxALL, 5);
602 dagButtonSizer->Add(deleteDAG, 0, wxALIGN_CENTER|wxALL, 5);
603 dagButtonSizer->Add(newDAG, 0, wxALIGN_CENTER|wxALL, 5);
605 dagToolsSizer->Add(dagButtonSizer, 0, wxALIGN_CENTER|wxALL, 5);
606 dagStaticBoxSizer->Add(dagToolsSizer, 0, wxALL, 5);
608 wxBoxSizer *controlButtonSizer =
new wxBoxSizer(wxHORIZONTAL);
615 parent, wxID_CANCEL, wxT(
"Cancel"), wxDefaultPosition,
618 controlButtonSizer->Add(OK, 0, wxALL, 5);
619 controlButtonSizer->Add(Cancel, 0, wxALL, 5);
621 controlButtonSizer, 0,
625 parent->SetSizer(item0);
627 item0->SetSizeHints(parent);