1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235
|
/**********************************************************************
NyqBench.h
Leland Lucius
**********************************************************************/
#ifndef __NYQUIST_EFFECT_WORKBENCH__
#define __NYQUIST_EFFECT_WORKBENCH__
#include <wx/defs.h>
#include <wx/button.h>
#include <wx/dialog.h>
#include <wx/filename.h>
#include <wx/fdrepdlg.h>
#include <wx/hashmap.h>
#include <wx/splitter.h>
#include <wx/statbox.h>
#include <wx/stattext.h>
#include <wx/string.h>
#include <wx/textctrl.h>
#include <iostream>
#include <ostream>
#include <sstream>
#include "commands/CommandManager.h"
#include "effects/nyquist/Nyquist.h"
//----------------------------------------------------------------------------
// NyqTextCtrl
//----------------------------------------------------------------------------
class NyqTextCtrl:public wxTextCtrl
{
public:
NyqTextCtrl(wxWindow *parent,
wxWindowID id,
const wxString & value,
const wxPoint & pos,
const wxSize & size,
int style = 0);
void SetFocusFromKbd();
void MarkDirty();
void GoMatch();
void GoTop();
void GoUp();
void GoPrev();
void GoNext();
private:
#if defined(__WXMAC__REMOVED_UNTIL_ITS_PROVEN_THAT_IT_IS_STILL_NEEDED)
void OnKeyDown(wxKeyEvent & e);
#endif
void OnKeyUp(wxKeyEvent & e);
void OnChar(wxKeyEvent & e);
void OnUpdate(wxUpdateUIEvent & e);
void MoveCursor(long first, long second);
void Colorize(long left, long right);
void FindParens();
private:
wxLongToLongHashMap mLeftParens;
wxLongToLongHashMap mRightParens;
long mLeftParen;
long mRightParen;
long mLastCaretPos;
wxTextAttr mOn;
wxTextAttr mOff;
DECLARE_EVENT_TABLE();
};
//----------------------------------------------------------------------------
// NyqRedirector
//----------------------------------------------------------------------------
class NyqRedirector:wxSTD streambuf
{
public:
NyqRedirector(NyqTextCtrl *text);
virtual ~NyqRedirector();
int overflow(int c);
private:
void AppendText();
std::string s;
std::streambuf *mOld;
NyqTextCtrl *mText;
};
//----------------------------------------------------------------------------
// NyqBench
//----------------------------------------------------------------------------
class NyqBench:public wxFrame
{
public:
NyqBench(wxWindow *parent);
virtual ~NyqBench();
virtual bool Validate();
private:
void PopulateOrExchange(ShuttleGui & S);
void OnClose(wxCloseEvent & e);
void OnMove(wxMoveEvent & e);
void OnSize(wxSizeEvent & e);
void OnNew(wxCommandEvent & e);
void OnOpen(wxCommandEvent & e);
void OnSave(wxCommandEvent & e);
void OnSaveAs(wxCommandEvent & e);
void OnRevert(wxCommandEvent & e);
void OnAutoLoad(wxCommandEvent & e);
void OnCloseWindow(wxCommandEvent & e);
void OnUndo(wxCommandEvent & e);
void OnRedo(wxCommandEvent & e);
void OnCut(wxCommandEvent & e);
void OnCopy(wxCommandEvent & e);
void OnPaste(wxCommandEvent & e);
void OnClear(wxCommandEvent & e);
void OnSelectAll(wxCommandEvent & e);
void OnFind(wxCommandEvent & e);
void OnGoMatch(wxCommandEvent & e);
void OnGoTop(wxCommandEvent & e);
void OnGoUp(wxCommandEvent & e);
void OnGoPrev(wxCommandEvent & e);
void OnGoNext(wxCommandEvent & e);
void OnAutoWrap(wxCommandEvent & e);
void OnFont(wxCommandEvent & e);
void OnSplitV(wxCommandEvent & e);
void OnSplitH(wxCommandEvent & e);
void OnToggleCode(wxCommandEvent & e);
void OnToggleOutput(wxCommandEvent & e);
void OnSmallIcons(wxCommandEvent & e);
void OnLargeIcons(wxCommandEvent & e);
void OnGo(wxCommandEvent & e);
void OnStop(wxCommandEvent & e);
void OnAbout(wxCommandEvent & e);
void OnFindDialog(wxFindDialogEvent & e);
void OnTextUpdate(wxCommandEvent & e);
void OnMenuUpdate(wxUpdateUIEvent & e);
void OnUndoUpdate(wxUpdateUIEvent & e);
void OnRedoUpdate(wxUpdateUIEvent & e);
void OnCutUpdate(wxUpdateUIEvent & e);
void OnCopyUpdate(wxUpdateUIEvent & e);
void OnPasteUpdate(wxUpdateUIEvent & e);
void OnClearUpdate(wxUpdateUIEvent & e);
void OnViewUpdate(wxUpdateUIEvent & e);
void OnRunUpdate(wxUpdateUIEvent & e);
void OnScriptUpdate(wxUpdateUIEvent & e);
void OnOutputUpdate(wxUpdateUIEvent & e);
void SetWindowTitle();
void RecreateToolbar(bool large = false);
void LoadFile();
private:
wxStaticBox *mScriptBox;
wxStaticBox *mOutputBox;
NyqTextCtrl *mScript;
NyqTextCtrl *mOutput;
wxSplitterWindow *mSplitter;
wxFindReplaceDialog *mFindDlg;
wxFindReplaceData mFindData;
NyqTextCtrl *mFindText;
NyquistEffect *mEffect;
wxFont mScriptFont;
wxFont mOutputFont;
wxBitmap mPics[20];
int mSplitMode;
bool mShowCode;
bool mShowOutput;
bool mLargeIcons;
bool mRunning;
wxFileName mPath;
bool mAutoLoad;
bool mAutoWrap;
wxRect mLastSize;
DECLARE_EVENT_TABLE();
};
class ModNyqBenchCommandFunctor:public CommandFunctor
{
public:
virtual void operator()(int index = 0, const wxEvent *e = NULL);
};
#endif
// Indentation settings for Vim and Emacs and unique identifier for Arch, a
// version control system. Please do not modify past this point.
//
// Local Variables:
// c-basic-offset: 3
// indent-tabs-mode: nil
// End:
//
// vim: et sts=3 sw=3
// arch-tag: cad436f5-7c97-40a2-8ee9-3748e8f3e56f
|