Files
SingularityViewer/indra/newview/dohexeditor.h
2010-05-15 22:33:37 -07:00

160 lines
3.6 KiB
C++

/**
* @file dohexeditor.h
* @brief DOHexEditor Widget
* @author Day Oh
*
* $LicenseInfo:firstyear=2009&license=WTFPLV2$
*
*/
// <edit>
#ifndef DO_DOHEXEDITOR_H
#define DO_DOHEXEDITOR_H
#define MIN_COLS 8
#define MAX_COLS 48
#ifndef COLUMN_SPAN
#define COLUMN_SPAN
#endif
#include "lluictrl.h"
#include "llscrollbar.h"
#include "llviewborder.h"
#include "llundo.h"
#include "lleditmenuhandler.h"
class DOHexEditor : public LLUICtrl, public LLEditMenuHandler
{
public:
DOHexEditor(const std::string& name, const LLRect& rect);
~DOHexEditor();
static LLView* fromXML(LLXMLNodePtr node, LLView *parent, class LLUICtrlFactory *factory);
void setValue(const LLSD& value);
LLSD getValue() const;
void setColumns(U8 columns);
U8 getColumns() { return mColumns; };
U32 getLineCount();
F32 getSuggestedWidth(U8 cols = -1);
U32 getProperSelectionStart();
U32 getProperSelectionEnd();
void reshape(S32 width, S32 height, BOOL called_from_parent);
void setFocus(BOOL b);
BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
BOOL handleMouseDown(S32 x, S32 y, MASK mask);
BOOL handleHover(S32 x, S32 y, MASK mask);
BOOL handleMouseUp(S32 x, S32 y, MASK mask);
BOOL handleKeyHere(KEY key, MASK mask);
BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent);
BOOL handleUnicodeChar(llwchar uni_char, BOOL called_from_parent);
BOOL handleUnicodeCharHere(llwchar uni_char);
void draw();
void moveCursor(U32 pos, BOOL second_nibble);
void insert(U32 pos, std::vector<U8> new_data, BOOL undoable);
void overwrite(U32 first_pos, U32 last_pos, std::vector<U8> new_data, BOOL undoable);
void del(U32 first_pos, U32 last_pos, BOOL undoable);
virtual void cut();
virtual BOOL canCut() const;
virtual void copy();
virtual BOOL canCopy() const;
virtual void paste();
virtual BOOL canPaste() const;
virtual void doDelete();
virtual BOOL canDoDelete() const;
virtual void selectAll();
virtual BOOL canSelectAll() const;
virtual void deselect();
virtual BOOL canDeselect() const;
virtual void undo();
virtual BOOL canUndo() const;
virtual void redo();
virtual BOOL canRedo() const;
private:
std::vector<U8> mValue;
U8 mColumns;
U32 mCursorPos;
BOOL mSecondNibble;
BOOL mInData;
BOOL mSelecting;
BOOL mHasSelection;
U32 mSelectionStart;
U32 mSelectionEnd;
LLFontGL* mGLFont;
LLRect mTextRect;
LLScrollbar* mScrollbar;
LLViewBorder* mBorder;
LLUndoBuffer* mUndoBuffer;
void changedLength();
void getPosAndContext(S32 x, S32 y, BOOL force_context, U32& pos, BOOL& in_data, BOOL& second_nibble);
};
class DOUndoHex : public LLUndoBuffer::LLUndoAction
{
protected:
DOUndoHex() { }
DOHexEditor* mHexEditor;
U32 mFirstPos;
U32 mLastPos;
std::vector<U8> mOldData;
std::vector<U8> mNewData;
public:
static LLUndoAction* create() { return new DOUndoHex(); }
virtual void set(DOHexEditor* hex_editor,
void (*undo_action)(DOUndoHex*),
void (*redo_action)(DOUndoHex*),
U32 first_pos,
U32 last_pos,
std::vector<U8> old_data,
std::vector<U8> new_data);
void (*mUndoAction)(DOUndoHex*);
void (*mRedoAction)(DOUndoHex*);
virtual void undo();
virtual void redo();
static void undoInsert(DOUndoHex* action);
static void redoInsert(DOUndoHex* action);
static void undoOverwrite(DOUndoHex* action);
static void redoOverwrite(DOUndoHex* action);
static void undoDel(DOUndoHex* action);
static void redoDel(DOUndoHex* action);
};
class DOHexInsert : public DOUndoHex
{
virtual void undo();
virtual void redo();
};
class DOHexOverwrite : public DOUndoHex
{
virtual void undo();
virtual void redo();
};
class DOHexDel : public DOUndoHex
{
virtual void undo();
virtual void redo();
};
#endif
// </edit>