Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

#ifndef __EDITWIDGET_H__
#define __EDITWIDGET_H__

#include "Widget.h"

namespace Sexy
{

class Font;
class EditListener;

class EditWidget : public Widget
{
public:
        enum
        {
                COLOR_BKG,
                COLOR_OUTLINE,
                COLOR_TEXT,
                COLOR_HILITE,
                COLOR_HILITE_TEXT,
                NUM_COLORS
        };

        int                                             mId;
        SexyString                              mString;
        SexyString                              mPasswordDisplayString;
        Font*                                   mFont;

        struct WidthCheck
        {
                Font *mFont;
                int mWidth;
        };
        typedef std::list<WidthCheck> WidthCheckList;
        WidthCheckList                          mWidthCheckList;
       
        EditListener*                   mEditListener;         
        bool                                    mShowingCursor;
        bool                                    mDrawSelOverride; // set this to true to draw selected text even when not in focus
        bool                                    mHadDoubleClick;        // Used to fix a bug with double clicking to hilite a word after the widget manager started calling mouse drag before mouse down/up events
        int                                             mCursorPos;
        int                                             mHilitePos;
        int                                             mBlinkAcc;
        int                                             mBlinkDelay;
        int                                             mLeftPos;              
        int                                             mMaxChars;
        int                                             mMaxPixels;
        SexyChar                                mPasswordChar;
       
        SexyString                              mUndoString;
        int                                             mUndoCursor;
        int                                             mUndoHilitePos;
        int                                             mLastModifyIdx;


protected:
        virtual void                    ProcessKey(KeyCode theKey, SexyChar theChar);
        SexyString&                     GetDisplayString();
        virtual void                    HiliteWord();
        void                                    UpdateCaretPos();

public:
        virtual void                    SetFont(Font* theFont, Font* theWidthCheckFont = NULL);
        virtual void                    SetText(const SexyString& theText, bool leftPosToZero = true);
        virtual bool                    IsPartOfWord(SexyChar theChar);
        virtual int                             GetCharAt(int x, int y);

        virtual void                    Resize(int theX, int theY, int theWidth, int theHeight);
        virtual void                    Draw(Graphics* g); // Already translated;

        virtual void                    Update();
        virtual void                    MarkDirty();

        virtual bool                    WantsFocus();
        virtual void                    GotFocus();
        virtual void                    LostFocus();
        virtual void                    FocusCursor(bool bigJump);

        virtual void                    KeyDown(KeyCode theKey);
        virtual void                    KeyChar(SexyChar theChar);

        virtual void                    MouseDown(int x, int y, int theClickCount) { Widget::MouseDown(x, y, theClickCount); }
        virtual void                    MouseDown(int x, int y, int theBtnNum, int theClickCount);
        virtual void                    MouseUp(int x, int y) { Widget::MouseUp(x, y); }
        virtual void                    MouseUp(int x, int y, int theClickCount) { Widget::MouseUp(x, y, theClickCount); }
        virtual void                    MouseUp(int x, int y, int theBtnNum, int theClickCount);
        virtual void                    MouseDrag(int x, int y);
        virtual void                    MouseEnter();
        virtual void                    MouseLeave();
        void                                    ClearWidthCheckFonts();
        void                                    AddWidthCheckFont(Font *theFont, int theMaxPixels = -1); // defaults to mMaxPixels
        void                                    EnforceMaxPixels();

public:
        EditWidget(int theId, EditListener* theEditListener);
        virtual ~EditWidget();
};

}

#endif //__EDITWIDGET_H__