~ubuntu-branches/ubuntu/raring/codeblocks/raring-proposed

« back to all changes in this revision

Viewing changes to src/plugins/contrib/HexEditor/ExpressionTester.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Cosme Domínguez Díaz
  • Date: 2010-08-09 04:38:38 UTC
  • mfrom: (1.1.1 upstream)
  • mto: This revision was merged to the branch mainline in revision 4.
  • Revision ID: james.westby@ubuntu.com-20100809043838-a59ygguym4eg0jgw
Tags: 10.05-0ubuntu1
* New upstream release. Closes (LP: #322350)
 - Switch to dpkg-source 3.0 (quilt) format
 - Remove unneeded README.source
 - Add debian/get-source-orig script that removes all
   Windows prebuilt binaries
* Bump Standards-Version to 3.9.1
 - Stop shipping *.la files
* debian/control
 - Add cdbs package as Build-Depend
 - Add libbz2-dev and zlib1g-dev packages as
   Build-Depends (needed by libhelp_plugin.so)
 - Remove dpatch package of Build-Depends
 - Add codeblocks-contrib-debug package
 - Split architecture-independent files of codeblocks
   package in codeblocks-common package
* debian/rules
 - Switch to CDBS rules system
 - Add parallel build support
 - Add a call to debian/get-source-orig script
 - Use lzma compression (saves 23,5 MB of free space)
* debian/patches
 - Refresh 01_codeblocks_plugin_path
 - Add 02_no_Makefiles_in_debian_dir to remove any link
   in codeblocks build system to deleted Makefiles of debian directory
 - Drop 02_ftbfs_gcc44 and 03_ftbfs_glib221 (merged in upstream)
* debian/watch
 - Update to use the new host (berlios.de)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
* This file is part of HexEditor plugin for Code::Blocks Studio
 
3
* Copyright (C) 2008-2009 Bartlomiej Swiecki
 
4
*
 
5
* HexEditor plugin is free software; you can redistribute it and/or modify
 
6
* it under the terms of the GNU General Public License as published by
 
7
* the Free Software Foundation; either version 3 of the License, or
 
8
* (at your option) any later version.
 
9
*
 
10
* HexEditor pluging is distributed in the hope that it will be useful,
 
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 
13
* GNU General Public License for more details.
 
14
*
 
15
* You should have received a copy of the GNU General Public License
 
16
* along with HexEditor. If not, see <http://www.gnu.org/licenses/>.
 
17
*
 
18
* $Revision: 6104 $
 
19
* $Id: ExpressionTester.cpp 6104 2010-01-23 12:56:12Z mortenmacfly $
 
20
* $HeadURL: svn+ssh://jenslody@svn.berlios.de/svnroot/repos/codeblocks/trunk/src/plugins/contrib/HexEditor/ExpressionTester.cpp $
 
21
*/
 
22
 
 
23
#include "ExpressionTester.h"
 
24
 
 
25
#include "ExpressionParser.h"
 
26
#include "ExpressionExecutor.h"
 
27
#include "ExpressionTestCases.h"
 
28
#include "SelectStoredExpressionDlg.h"
 
29
#include "TestCasesDlg.h"
 
30
 
 
31
 
 
32
#include <globals.h>
 
33
 
 
34
//(*InternalHeaders(ExpressionTester)
 
35
#include <wx/string.h>
 
36
#include <wx/intl.h>
 
37
//*)
 
38
 
 
39
//(*IdInit(ExpressionTester)
 
40
const long ExpressionTester::ID_STATICTEXT1 = wxNewId();
 
41
const long ExpressionTester::ID_TEXTCTRL1 = wxNewId();
 
42
const long ExpressionTester::ID_BUTTON3 = wxNewId();
 
43
const long ExpressionTester::ID_STATICTEXT2 = wxNewId();
 
44
const long ExpressionTester::ID_STATICTEXT3 = wxNewId();
 
45
const long ExpressionTester::ID_STATICTEXT4 = wxNewId();
 
46
const long ExpressionTester::ID_STATICTEXT5 = wxNewId();
 
47
const long ExpressionTester::ID_STATICTEXT6 = wxNewId();
 
48
const long ExpressionTester::ID_TEXTCTRL2 = wxNewId();
 
49
const long ExpressionTester::ID_BUTTON4 = wxNewId();
 
50
const long ExpressionTester::ID_BUTTON2 = wxNewId();
 
51
const long ExpressionTester::ID_BUTTON1 = wxNewId();
 
52
//*)
 
53
 
 
54
BEGIN_EVENT_TABLE(ExpressionTester,wxScrollingDialog)
 
55
        //(*EventTable(ExpressionTester)
 
56
        //*)
 
57
END_EVENT_TABLE()
 
58
 
 
59
ExpressionTester::ExpressionTester( wxWindow* parent, FileContentBase* content, FileContentBase::OffsetT current )
 
60
{
 
61
    m_Content = content;
 
62
    m_Current = current;
 
63
        BuildContent(parent);
 
64
}
 
65
 
 
66
void ExpressionTester::BuildContent(wxWindow* parent)
 
67
{
 
68
        //(*Initialize(ExpressionTester)
 
69
        wxFlexGridSizer* FlexGridSizer1;
 
70
        wxBoxSizer* BoxSizer3;
 
71
        wxBoxSizer* BoxSizer2;
 
72
        wxBoxSizer* BoxSizer1;
 
73
        wxStaticBoxSizer* StaticBoxSizer1;
 
74
        
 
75
        Create(parent, wxID_ANY, _("ExpressionTester"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER, _T("wxID_ANY"));
 
76
        BoxSizer1 = new wxBoxSizer(wxVERTICAL);
 
77
        StaticBoxSizer1 = new wxStaticBoxSizer(wxVERTICAL, this, wxEmptyString);
 
78
        FlexGridSizer1 = new wxFlexGridSizer(0, 2, 5, 5);
 
79
        FlexGridSizer1->AddGrowableCol(1);
 
80
        FlexGridSizer1->AddGrowableRow(3);
 
81
        StaticText1 = new wxStaticText(this, ID_STATICTEXT1, _("Expr:"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT1"));
 
82
        FlexGridSizer1->Add(StaticText1, 1, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5);
 
83
        BoxSizer3 = new wxBoxSizer(wxHORIZONTAL);
 
84
        m_Expr = new wxTextCtrl(this, ID_TEXTCTRL1, _("1 + 2 * 3"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL1"));
 
85
        BoxSizer3->Add(m_Expr, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
 
86
        Button3 = new wxButton(this, ID_BUTTON3, _("v"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT, wxDefaultValidator, _T("ID_BUTTON3"));
 
87
        BoxSizer3->Add(Button3, 0, wxLEFT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
 
88
        FlexGridSizer1->Add(BoxSizer3, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
 
89
        StaticText2 = new wxStaticText(this, ID_STATICTEXT2, _("Parsing:"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT2"));
 
90
        FlexGridSizer1->Add(StaticText2, 1, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5);
 
91
        m_Parsing = new wxStaticText(this, ID_STATICTEXT3, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT3"));
 
92
        FlexGridSizer1->Add(m_Parsing, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
 
93
        StaticText4 = new wxStaticText(this, ID_STATICTEXT4, _("Result:"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT4"));
 
94
        FlexGridSizer1->Add(StaticText4, 1, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5);
 
95
        m_Result = new wxStaticText(this, ID_STATICTEXT5, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT5"));
 
96
        FlexGridSizer1->Add(m_Result, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
 
97
        StaticText3 = new wxStaticText(this, ID_STATICTEXT6, _("Code dump:"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT6"));
 
98
        FlexGridSizer1->Add(StaticText3, 1, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5);
 
99
        m_Dump = new wxTextCtrl(this, ID_TEXTCTRL2, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY, wxDefaultValidator, _T("ID_TEXTCTRL2"));
 
100
        FlexGridSizer1->Add(m_Dump, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
 
101
        StaticBoxSizer1->Add(FlexGridSizer1, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
 
102
        BoxSizer2 = new wxBoxSizer(wxHORIZONTAL);
 
103
        Button4 = new wxButton(this, ID_BUTTON4, _("Auto test"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON4"));
 
104
        Button4->SetToolTip(_("Perform automatic parser and executor test"));
 
105
        BoxSizer2->Add(Button4, 0, wxLEFT|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
 
106
        BoxSizer2->Add(15,9,1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
 
107
        Button2 = new wxButton(this, ID_BUTTON2, _("\?"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT, wxDefaultValidator, _T("ID_BUTTON2"));
 
108
        BoxSizer2->Add(Button2, 0, wxRIGHT|wxEXPAND|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5);
 
109
        Button1 = new wxButton(this, ID_BUTTON1, _("Parse"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT, wxDefaultValidator, _T("ID_BUTTON1"));
 
110
        BoxSizer2->Add(Button1, 0, wxRIGHT|wxEXPAND|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5);
 
111
        StaticBoxSizer1->Add(BoxSizer2, 0, wxEXPAND|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5);
 
112
        BoxSizer1->Add(StaticBoxSizer1, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
 
113
        BoxSizer1->Add(357,2,0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
 
114
        SetSizer(BoxSizer1);
 
115
        BoxSizer1->Fit(this);
 
116
        BoxSizer1->SetSizeHints(this);
 
117
        Center();
 
118
        
 
119
        Connect(ID_TEXTCTRL1,wxEVT_COMMAND_TEXT_ENTER,(wxObjectEventFunction)&ExpressionTester::OnButton1Click);
 
120
        Connect(ID_BUTTON3,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&ExpressionTester::OnButton3Click);
 
121
        Connect(ID_BUTTON4,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&ExpressionTester::OnButton4Click);
 
122
        Connect(ID_BUTTON2,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&ExpressionTester::OnButton2Click);
 
123
        Connect(ID_BUTTON1,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&ExpressionTester::OnButton1Click);
 
124
        //*)
 
125
}
 
126
 
 
127
ExpressionTester::~ExpressionTester()
 
128
{
 
129
        //(*Destroy(ExpressionTester)
 
130
        //*)
 
131
}
 
132
 
 
133
 
 
134
void ExpressionTester::OnButton1Click(wxCommandEvent& event)
 
135
{
 
136
    Expression::Parser parser;
 
137
    Expression::Preprocessed code;
 
138
 
 
139
    if ( parser.Parse( m_Expr->GetValue(), code ) )
 
140
    {
 
141
        m_Parsing->SetLabel( _("OK") );
 
142
        m_Dump->SetValue(
 
143
            _("Code dump:\n") + code.DumpCode() +
 
144
            _("====================\n"
 
145
              "Arguments:\n") + code.DumpArgs() );
 
146
 
 
147
        Expression::Executor exec;
 
148
        if ( exec.Execute( code, m_Content, m_Current ) )
 
149
        {
 
150
            unsigned long long v1;
 
151
            long long v2;
 
152
            long double v3;
 
153
            if ( exec.GetResult( v1 ) )
 
154
            {
 
155
                m_Result->SetLabel( wxString::Format( _T("%llu"), v1 ) );
 
156
            }
 
157
            else if ( exec.GetResult( v2 ) )
 
158
            {
 
159
                m_Result->SetLabel( wxString::Format( _T("%lld"), v2 ) );
 
160
            }
 
161
            else if ( exec.GetResult( v3 ) )
 
162
            {
 
163
                m_Result->SetLabel( wxString::Format( _T("%f"), (double)v3 ) );
 
164
            }
 
165
            else
 
166
            {
 
167
                m_Result->SetLabel( _("???") );
 
168
            }
 
169
        }
 
170
        else
 
171
        {
 
172
            m_Result->SetLabel( _("Error: ") + exec.ErrorDesc() );
 
173
        }
 
174
    }
 
175
    else
 
176
    {
 
177
        m_Result->SetLabel( _T("---") );
 
178
        int pos = 0;
 
179
        wxString desc = parser.ParseErrorDesc( pos );
 
180
        m_Parsing->SetLabel( wxString::Format( _("Err at %d: %s"), pos, desc.c_str() ) );
 
181
    }
 
182
}
 
183
 
 
184
void ExpressionTester::OnButton2Click(wxCommandEvent& event)
 
185
{
 
186
    cbMessageBox( Expression::Parser::GetHelpString() );
 
187
 
 
188
}
 
189
 
 
190
void ExpressionTester::OnButton3Click(wxCommandEvent& event)
 
191
{
 
192
    SelectStoredExpressionDlg dlg( this, m_Expr->GetValue() );
 
193
    if ( dlg.ShowModal() == wxID_OK )
 
194
    {
 
195
        m_Expr->SetValue( dlg.GetExpression() );
 
196
        OnButton1Click(event);
 
197
    }
 
198
}
 
199
 
 
200
void ExpressionTester::OnButton4Click(wxCommandEvent& event)
 
201
{
 
202
    TestCasesDlg( this, Expression::GetTests() ).ShowModal();
 
203
}