92 lines
3.3 KiB
C++
92 lines
3.3 KiB
C++
/*
|
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
|
*
|
|
* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* Contributor(s): none yet.
|
|
*
|
|
* ***** END GPL LICENSE BLOCK *****
|
|
*/
|
|
|
|
/** \file ED_numinput.h
|
|
* \ingroup editors
|
|
*/
|
|
|
|
#ifndef __ED_NUMINPUT_H__
|
|
#define __ED_NUMINPUT_H__
|
|
|
|
#define NUM_STR_REP_LEN 64
|
|
#define NUM_MAX_ELEMENTS 3
|
|
|
|
struct wmEvent;
|
|
|
|
typedef struct NumInput {
|
|
short idx_max; /* idx_max < NUM_MAX_ELEMENTS */
|
|
int unit_sys;
|
|
int unit_type[NUM_MAX_ELEMENTS]; /* Each value can have a different type */
|
|
bool unit_use_radians;
|
|
|
|
short flag; /* Flags affecting all values' behavior */
|
|
short val_flag[NUM_MAX_ELEMENTS]; /* Per-value flags */
|
|
float val[NUM_MAX_ELEMENTS]; /* Direct value of the input */
|
|
float val_org[NUM_MAX_ELEMENTS]; /* Original value of the input, for reset */
|
|
float val_inc[NUM_MAX_ELEMENTS]; /* Increment steps */
|
|
|
|
short idx; /* Active element/value */
|
|
char str[NUM_STR_REP_LEN]; /* String as typed by user for edited value (we assume ASCII world!) */
|
|
/* Current position of cursor in edited value str (first byte of "current" letter, so 0 for an empty str) */
|
|
int str_cur;
|
|
} NumInput;
|
|
|
|
/* NumInput.flag */
|
|
enum {
|
|
NUM_AFFECT_ALL = (1 << 0),
|
|
/* (1 << 9) and above are reserved for internal flags! */
|
|
};
|
|
|
|
/* NumInput.val_flag[] */
|
|
enum {
|
|
/* Public! */
|
|
NUM_NULL_ONE = (1 << 0),
|
|
NUM_NO_NEGATIVE = (1 << 1),
|
|
NUM_NO_ZERO = (1 << 2),
|
|
NUM_NO_FRACTION = (1 << 3),
|
|
/* (1 << 9) and above are reserved for internal flags! */
|
|
};
|
|
|
|
struct UnitSettings;
|
|
|
|
/*********************** NumInput ********************************/
|
|
|
|
/* There are important things to note here for code using numinput:
|
|
* * Values passed to applyNumInput() should be valid and are stored as default ones (val_org), if it is not EDITED.
|
|
* * bool returned by applyNumInput should be used to decide whether to apply numinput-specific post-process to data.
|
|
* * *Once applyNumInput has been called*, hasNumInput returns a valid value to decide whether to use numinput
|
|
* as drawstr source or not (i.e. to call outputNumInput).
|
|
*
|
|
* Those two steps have to be separated (so do not use a common call to hasNumInput() to do both in the same time!).
|
|
*/
|
|
|
|
void initNumInput(NumInput *n);
|
|
void outputNumInput(NumInput *n, char *str, struct UnitSettings *unit_settings);
|
|
bool hasNumInput(const NumInput *n);
|
|
bool applyNumInput(NumInput *n, float *vec);
|
|
bool handleNumInput(struct bContext *C, NumInput *n, const struct wmEvent *event);
|
|
|
|
#define NUM_MODAL_INCREMENT_UP 18
|
|
#define NUM_MODAL_INCREMENT_DOWN 19
|
|
|
|
#endif /* __ED_NUMINPUT_H__ */
|