/**********************************************************************
**
** $Id: kintegerline.h,v 1.4 1998/06/01 08:42:44 kalle Exp $
**
** Definition of KIntegerLine
**
** Copyright (C) 1997 Michael Wiedmann, <mw@miwie.in-berlin.de>
**
** This library is free software; you can redistribute it and/or
** modify it under the terms of the GNU Library General Public
** License as published by the Free Software Foundation; either
** version 2 of the License, or (at your option) any later version.
**
** This library 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
** Library General Public License for more details.
**
** You should have received a copy of the GNU Library General Public
** License along with this library; if not, write to the Free
** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
**
*****************************************************************************/

#ifndef KINTEGERLINE_H
#define KINTEGERLINE_H

#include "krestrictedline.h"

/** Enum for the possible types of Editlines
    */
enum KEditLineType{
  KEditTypeOct =  8,
  KEditTypeDec = 10,
  KEditTypeHex = 16
};

/** IntegerEditline: Editline for Integers. Only octal, decimal or
    hexadecimal characters are valid input characters for this sort 
    of edit lines. 
    A few special keys are supported by this class:
    <ul>
    <li>The up-arrow increments the contents by 1, 
    <li>the down-arrow decrements the contents by 1,
    <li>Page-Up increments by 8, 10 or 16 (depending on the EditLineType),
    <li>Page-Down decrements by 8, 10 or 16 (depending on the EditLinetype)
    </ul>

    @author Michael Wiedmann <mw@miwie.in-berlin.de>
    @version 0.0.1
  */
class KIntegerLine : public KRestrictedLine
{
  Q_OBJECT
  
public:
  /**@name methods */
  //@{
  /** Default - empty - constructor
	*/
  KIntegerLine();
    
  /** Contructor: This constructor takes three - optional - arguments.
	  The first two parameters are simply passed to KRestrictedLine.
	  @param parent   pointer to the parent widget
	  @param name     pointer to the name of this widget
	  @param t        type of this integer line (defaults to KEditTypeDec)
  */
  KIntegerLine( QWidget *parent=0, 
				const char *name=0, 
				KEditLineType t=KEditTypeDec);

  /// Destructor
  ~KIntegerLine();

  /// Get the type of this Line
  KEditLineType getType();

  /// Get the current value in the lined
  int value( void );
  
  /// Set the current value in the lined
  void setValue( int value );
  //@}

signals:
  // emitted whenever the value changes
  void valueChanged( int );

protected:
  /** Key press event handler. 
	  Handles the following special keys:
	  <UL>
	  <LI>Key_Up:    Increments contents of line by 1
	  <LI>Key_Prior: Increments contents of line by 8, 10 or 16
	  <LI>Key_Down:  Decrements contents of line by 1
	  <LI>Key_Next:  Decrements contents of line by 8, 10 or 16
	  </UL>
  */
  void	keyPressEvent( QKeyEvent *e );

private slots:
  void internalValueChanged();

private:
  /// type of this line
  KEditLineType lineType;

  /// get value based on radix of this line
  int getValue(QString &s);
    
  /// put value based on radix of this line
  void putValue(QString &s, int val);  

  /// increment value based on radix of this line
  void incValue(QString &s, int val);

  /// decrement value based on radix of this line
  void decValue(QString &s, int val);
};

#endif // 

