#pragma once
#include <config.h>
#include "fxheader.h"
#include <utils/gui/images/GUIIconSubSys.h>
class MFXStaticToolTip;
class MFXTextFieldIcon : public FXFrame {
FXDECLARE(MFXTextFieldIcon)
public:
MFXTextFieldIcon(FXComposite* p, MFXStaticToolTip* staticToolTip, GUIIcon icon, FXObject* tgt,
FXSelector sel, FXuint opts, FXint x = 0, FXint y = 0, FXint w = 0, FXint h = 0,
FXint pl = DEFAULT_PAD, FXint pr = DEFAULT_PAD, FXint pt = DEFAULT_PAD, FXint pb = DEFAULT_PAD);
virtual ~MFXTextFieldIcon();
virtual void create();
virtual void layout();
virtual void enable();
virtual void disable();
virtual FXint getDefaultWidth();
virtual FXint getDefaultHeight();
virtual bool canFocus() const;
virtual void setFocus();
virtual void killFocus();
void setEditable(FXbool edit = TRUE);
FXbool isEditable() const;
void setOverstrike(FXbool over = TRUE);
FXbool isOverstrike() const;
void setCursorPos(FXint pos);
FXint getCursorPos() const;
void setAnchorPos(FXint pos);
FXint getAnchorPos() const;
void setText(const FXString& text, FXbool notify = FALSE);
void setIcon(FXIcon* ic);
FXString getText() const;
void setFont(FXFont* fnt);
FXFont* getFont() const;
void setTextColor(FXColor clr);
FXColor getTextColor() const;
void setSelBackColor(FXColor clr);
FXColor getSelBackColor() const {
return mySelectedBackgroundColor;
}
void setSelTextColor(FXColor clr);
FXColor getSelTextColor() const;
void setCursorColor(FXColor clr);
FXColor getCursorColor() const;
void setNumColumns(FXint cols);
FXint getNumColumns() const;
void setJustify(FXuint mode);
FXuint getJustify() const;
void setDelimiters(const FXchar* delims = FXTextField::textDelimiters);
const FXchar* getDelimiters() const;
void setHelpText(const FXString& text);
const FXString& getHelpText() const;
void setTipText(const FXString& text);
const FXString& getTipText() const;
void setTextStyle(FXuint style);
FXuint getTextStyle() const;
FXbool selectAll();
FXbool setSelection(FXint pos, FXint len);
FXbool extendSelection(FXint pos);
FXbool killSelection();
FXbool isPosSelected(FXint pos) const;
FXbool isPosVisible(FXint pos) const;
void makePositionVisible(FXint pos);
void setToolTipText(const FXString& toolTip);
long onEnter(FXObject*, FXSelector, void*);
long onLeave(FXObject*, FXSelector, void*);
long onPaint(FXObject*, FXSelector, void*);
long onUpdate(FXObject*, FXSelector, void*);
long onKeyPress(FXObject*, FXSelector, void*);
long onKeyRelease(FXObject*, FXSelector, void*);
long onLeftBtnPress(FXObject*, FXSelector, void*);
long onLeftBtnRelease(FXObject*, FXSelector, void*);
long onMiddleBtnPress(FXObject*, FXSelector, void*);
long onMiddleBtnRelease(FXObject*, FXSelector, void*);
long onVerify(FXObject*, FXSelector, void*);
long onMotion(FXObject*, FXSelector, void*);
long onSelectionLost(FXObject*, FXSelector, void*);
long onSelectionGained(FXObject*, FXSelector, void*);
long onSelectionRequest(FXObject*, FXSelector, void* ptr);
long onClipboardLost(FXObject*, FXSelector, void*);
long onClipboardGained(FXObject*, FXSelector, void*);
long onClipboardRequest(FXObject*, FXSelector, void*);
long onFocusSelf(FXObject*, FXSelector, void*);
long onFocusIn(FXObject*, FXSelector, void*);
long onFocusOut(FXObject*, FXSelector, void*);
long onBlink(FXObject*, FXSelector, void*);
long onAutoScroll(FXObject*, FXSelector, void*);
long onCmdSetValue(FXObject*, FXSelector, void*);
long onCmdSetIntValue(FXObject*, FXSelector, void*);
long onCmdSetRealValue(FXObject*, FXSelector, void*);
long onCmdSetStringValue(FXObject*, FXSelector, void*);
long onCmdGetIntValue(FXObject*, FXSelector, void*);
long onCmdGetRealValue(FXObject*, FXSelector, void*);
long onCmdGetStringValue(FXObject*, FXSelector, void*);
long onCmdCursorHome(FXObject*, FXSelector, void*);
long onCmdCursorEnd(FXObject*, FXSelector, void*);
long onCmdCursorRight(FXObject*, FXSelector, void*);
long onCmdCursorLeft(FXObject*, FXSelector, void*);
long onCmdCursorWordLeft(FXObject*, FXSelector, void*);
long onCmdCursorWordRight(FXObject*, FXSelector, void*);
long onCmdCursorWordStart(FXObject*, FXSelector, void*);
long onCmdCursorWordEnd(FXObject*, FXSelector, void*);
long onCmdMark(FXObject*, FXSelector, void*);
long onCmdExtend(FXObject*, FXSelector, void*);
long onCmdSelectAll(FXObject*, FXSelector, void*);
long onCmdDeselectAll(FXObject*, FXSelector, void*);
long onCmdCutSel(FXObject*, FXSelector, void*);
long onCmdCopySel(FXObject*, FXSelector, void*);
long onCmdPasteSel(FXObject*, FXSelector, void*);
long onCmdPasteMiddle(FXObject*, FXSelector, void*);
long onCmdDeleteSel(FXObject*, FXSelector, void*);
long onCmdDeleteAll(FXObject*, FXSelector, void*);
long onCmdOverstString(FXObject*, FXSelector, void*);
long onCmdInsertString(FXObject*, FXSelector, void*);
long onCmdBackspace(FXObject*, FXSelector, void*);
long onCmdDelete(FXObject*, FXSelector, void*);
long onCmdToggleEditable(FXObject*, FXSelector, void*);
long onUpdToggleEditable(FXObject*, FXSelector, void*);
long onCmdToggleOverstrike(FXObject*, FXSelector, void*);
long onUpdToggleOverstrike(FXObject*, FXSelector, void*);
long onUpdHaveSelection(FXObject*, FXSelector, void*);
long onUpdSelectAll(FXObject*, FXSelector, void*);
long onCmdSetHelp(FXObject*, FXSelector, void*);
long onCmdGetHelp(FXObject*, FXSelector, void*);
long onCmdSetTip(FXObject*, FXSelector, void*);
long onCmdGetTip(FXObject*, FXSelector, void*);
long onQueryHelp(FXObject*, FXSelector, void*);
long onQueryTip(FXObject*, FXSelector, void*);
protected:
FXString contents;
const FXchar* myTextDelimiter = FXTextField::textDelimiters;
FXFont* myFont;
FXColor myTextColor = 0;
FXColor mySelectedBackgroundColor = 0;
FXColor mySelectedTextColor = 0;
FXColor myCursorColor = 0;
FXint myCursorPosition = 0;
FXint myAnchorPosition = 0;
FXint myVisibleColumns = 0;
FXint myShiftAmount = 0;
FXString myClippedText;
FXString myHelpText;
FXString myTooltipText;
FXIcon* myIcon = nullptr;
MFXStaticToolTip* myStaticToolTip = nullptr;
FXString myToolTipText;
MFXTextFieldIcon();
FXint index(FXint x) const;
FXint coord(FXint i) const;
void drawCursor(FXuint state);
void drawTextRange(FXDCWindow& dc, FXint fm, FXint to);
void drawTextFragment(FXDCWindow& dc, FXint x, FXint y, FXint fm, FXint to);
void drawPWDTextFragment(FXDCWindow& dc, FXint x, FXint y, FXint fm, FXint to);
FXint rightWord(FXint pos) const;
FXint leftWord(FXint pos) const;
FXint wordStart(FXint pos) const;
FXint wordEnd(FXint pos) const;
private:
MFXTextFieldIcon(const MFXTextFieldIcon&) = delete;
MFXTextFieldIcon& operator=(const MFXTextFieldIcon&) = delete;
};