#ifndef KVIEWER_H
#define KVIEWER_H

#include <X11/Xlib.h> // XBell
#include <X11/keysym.h>
#undef TrueColor

#include <qpopmenu.h>
#include <qpushbt.h>
#include <qlined.h>
#include <qlabel.h>
#include <qdialog.h>
#include <qscrbar.h>
#include <qimage.h>
#include <qpixmap.h>
#include <qbitmap.h>
#include <qcursor.h>
#include <qevent.h>
#include <qkeycode.h>
#include <kapp.h>
#include <ktopwidget.h>
#include <ktoolbar.h>
#include <kstatusbar.h>
#include <kmenubar.h>
#include <kmsgbox.h>
#include <iostream.h>
#include "QwViewport.h"
#include "krfbproto.h"

class kRfbProto;
class KVNCAuthWdg;

struct rfbServerInitMsg;


#define LeftButtonBits  0x01
#define MidButtonBits   0x02
#define RightButtonBits 0x04

class KVNCCanvas : public QWidget {

Q_OBJECT

 public:
  KVNCCanvas(QWidget *parent = 0, const char *name = 0);
  ~KVNCCanvas(); 

 public slots:
  void drawImage(CARD8*,int,int,int,int);
  bool openConnection();
  void closeConnection();
  void refreshDisplay();
  void setHost(const char *h)  { _host = h;}
  void setDisplay(int d) { _dis = d;}

  const char * host() { return _host;}
  int display() { return _dis;}

  int port() { return (_dis + 5900);}
  
  void setPassword(const char *p) { _password = p;}
  const char * password() {return _password;}

  rfbServerInitMsg * getServerInformation();

  const char * desktop() { return rfb->desktop();}


 private slots:
  void initCanvas(); 
  void slotScrollVert(int);
  void slotScrollHorz(int);
  void createCursor();
  bool initConnection();
  int authenticate();
  void setConnected(bool c) { _connected = c;} 
  bool connected() { return _connected;}
  void bell();
  void displayData();
  void fatal();
  KeySym determineKey(QKeyEvent *);

 private:
  // I'm not sure what this is for (rich)
  //  KVNCCanvas *internalView;
  QScrollBar *horzBar;
  QScrollBar *vertBar;
  int frameHeight,frameWidth, depth;
  kRfbProto *rfb;
  CARD8 mask; // global buttonMask
  bool leftButtonDown;
  bool midButtonDown;
  bool rightButtonDown;
  QLabel *l;
  bool _connected;
  const char * _host;
  int _dis;
  QString _password;
  // We now use screenImage
  //  char *screenBuffer;
  //  long screenBufferLen;

  QImage screenImage;
  QPixmap screenPixmap;

 signals:
  void updateStatusBar(const char* ,int);
  void sigFatal();
  void sizeChanged();
protected:
 virtual void keyPressEvent(QKeyEvent *);
 virtual void keyReleaseEvent(QKeyEvent*);
 virtual void mousePressEvent(QMouseEvent*);
 virtual void mouseReleaseEvent(QMouseEvent*);
 virtual void mouseMoveEvent(QMouseEvent*);
  // virtual void resizeEvent(QResizeEvent *);
 virtual void paintEvent(QPaintEvent *);

};



class KVNCViewer : public KTopLevelWidget {
Q_OBJECT
public: 
 KVNCViewer(QWidget *parent = 0 , const char *name = 0);
 ~KVNCViewer(); 



public slots:

  bool connected() { return _connected;}
  bool openConnection(); 
  void setConnected(bool c);
  void updateStatusBar(const char *, int);
  void fatal();

private slots:
  void setupMenuBar();
  void setupToolBar(); 
  void setupStatusBar();
  void closeConnection();
  void close();
  void serverInformation();
					 
 private:
  QwViewport *viewport;
  KVNCCanvas *canvas;
  KMenuBar *menuBar; 
  KToolBar *toolBar;
  KStatusBar *statusBar;
  bool _connected;

protected:

};


class KVNCConnectDlg : public QDialog {

Q_OBJECT;

 public: 
  KVNCConnectDlg(QWidget *parent = 0, const char *name = 0, KVNCCanvas *wid = 0 );
  
 private:
  QLineEdit *hostNameLdt;
  QLineEdit *displayNumberLdt;
  QPushButton *ok;
  QPushButton *cancel;
  KVNCCanvas *viewer;

 private slots: 
  void slotOkPressed();
  void slotCancelPressed();
  

};
#endif 























Documentation generated by rich@pegasus on Sun Mar 22 20:56:11 MET 1998