///
/// Copyright (C) 2004-2007 Andrej Vodopivec <andrejv@users.sourceforge.net>
///
/// This program is free software; you can redistribute it and/or modify
/// it under the terms of the GNU General Public License as published by
/// the Free Software Foundation; either version 2 of the License, or
/// (at your option) any later version.
///
/// This program is distributed in the hope that it will be useful,
/// but WITHOUT ANY WARRANTY; without even the implied warranty of
/// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
/// GNU General Public License for more details.
///
///
/// You should have received a copy of the GNU General Public License
/// along with this program; if not, write to the Free Software
/// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
///
#ifndef _MATHCTRL_H_
#define _MATHCTRL_H_
#include <wx/wx.h>
#include "MathCell.h"
enum {
popid_copy,
popid_cut,
popid_paste,
popid_select_all,
popid_copy_text,
popid_copy_image,
popid_delete,
popid_simplify,
popid_expand,
popid_factor,
popid_solve,
popid_solve_num,
popid_integrate,
popid_diff,
popid_subst,
popid_plot2d,
popid_plot3d,
popid_float,
popid_edit,
popid_reeval,
popid_add_comment,
popid_insert_input,
popid_copy_tex,
#if defined __WXMSW__
popid_image_copy,
#endif
popid_image,
popid_comment,
popid_uncomment
};
class MathCtrl: public wxScrolledWindow
{
public:
MathCtrl(wxWindow* parent, int id, wxPoint pos, wxSize size);
~MathCtrl();
void DestroyTree();
void DestroyTree(MathCell* tree);
MathCell* CopyTree();
void AddLine(MathCell *newLine, bool forceNewLine = false);
void InsertLine(MathCell *newLine, bool forceNewLine = false);
void Recalculate(bool scroll = true);
void RecalculateForce();
void Recalculate(MathCell *cell, bool scroll = true);
void RecalculateWidths();
void RecalculateWidths(MathCell *cell);
void RecalculateSize();
void RecalculateSize(MathCell *cell);
void ClearWindow();
bool CanCopy(bool fromActive = false)
{
return m_selectionStart != NULL ||
(fromActive && m_activeCell != NULL && m_activeCell->CanCopy());
}
bool CanPaste()
{
return m_activeCell != NULL;
}
bool CanCut()
{
return m_activeCell != NULL && m_activeCell->CanCopy();
}
void SelectAll();
bool CanDeleteSelection();
bool CanAddComment();
bool CanAddInput();
void DeleteSelection(bool deletePrompt = true);
bool CutToClipboard();
void PasteFromClipboard();
bool Copy(bool lb = false);
bool CopyTeX();
bool CopyBitmap();
bool CopyToFile(wxString file);
bool CopyToFile(wxString file, MathCell* start, MathCell* end, bool asData = false);
bool ExportToHTML(wxString file);
bool ExportToMAC(wxString file);
wxString GetString(bool lb = false);
MathCell* GetTree()
{
return m_tree;
}
void BreakUpCells();
void BreakUpCells(MathCell *cell);
void UnBreakUpCells();
MathCell* GetLastCell();
MathCell* GetLastPrompt();
void SetInsertPoint(MathCell* insert)
{
m_insertPoint = insert;
}
MathCell* GetInsertPoint()
{
return m_insertPoint;
}
void ClearInsertPoint()
{
m_insertPoint = NULL;
}
MathCell* GetSelectionStart()
{
return m_selectionStart;
}
void SetSelection(MathCell* sel)
{
m_selectionStart = m_selectionEnd = sel;
}
void SetScrollTo(int to)
{
m_scrollTo = to;
}
bool CanEdit();
void EnableEdit(bool enable = true)
{
m_editingEnabled = enable;
}
void UnfoldAll();
bool SelectPrevInput();
bool SelectNextInput();
bool SelectPrompt();
void ScrollToSelectionStart();
bool SelectLastInput();
void SetActiveCell(MathCell *cell);
MathCell* GetActiveCell()
{
return m_activeCell;
}
void ShowPoint(wxPoint point);
void OnSetFocus(wxFocusEvent& event);
void OnKillFocus(wxFocusEvent& event);
protected:
MathCell* CopySelection();
MathCell* CopySelection(MathCell* start, MathCell* end, bool asData = false);
void GetMaxPoint(int* width, int* height);
void BreakLines(MathCell* cell);
void OnTimer(wxTimerEvent& event);
void OnMouseExit(wxMouseEvent& event);
void OnMouseEnter(wxMouseEvent& event);
void OnPaint(wxPaintEvent& event);
void OnSize(wxSizeEvent& event);
void OnMouseRightUp(wxMouseEvent& event);
void OnMouseLeftUp(wxMouseEvent& event);
void OnMouseLeftDown(wxMouseEvent& event);
void OnMouseMotion(wxMouseEvent& event);
void OnDoubleClick(wxMouseEvent& event);
void OnKeyDown(wxKeyEvent& event);
void OnChar(wxKeyEvent& event);
void SelectPoint(wxPoint& point);
void SelectRect(wxPoint one, wxPoint two);
void AdjustSize(bool scroll = false);
void OnEraseBackground(wxEraseEvent& event)
{ }
void InsertAfter(MathCell *insertPoint, MathCell *newCell, bool forceBreakLine);
void CheckUnixCopy();
wxPoint m_down;
wxPoint m_up;
wxPoint m_mousePoint;
bool m_leftDown;
bool m_mouseDrag;
bool m_selectWholeLine;
bool m_mouseOutside;
bool m_forceUpdate;
MathCell *m_tree;
MathCell *m_last;
MathCell *m_firstVisible;
MathCell *m_lastVisible;
MathCell *m_selectionStart;
MathCell *m_selectionEnd;
MathCell *m_insertPoint;
MathCell *m_activeCell;
CellParser *m_selectionParser;
bool m_switchDisplayCaret;
bool m_editingEnabled;
int m_scrollTo;
wxTimer m_timer, m_caretTimer;
wxBitmap *m_memory;
DECLARE_EVENT_TABLE()
};
#endif //_MATHCTRL_H_
syntax highlighted by Code2HTML, v. 0.9.1