Source Code (Use browser search to find items of interest.)

Class Index

kfax'TopLevel (./kdegraphics/kfax/kfax.h:99)

class TopLevel : public KTMainWindow
{
    Q_OBJECT


public:

    TopLevel( QWidget *parent=0, const char *name=0 );
    ~TopLevel();

    void openNetFile( const QString& _url);
    void saveNetFile( const QString& _url );

    static QList<TopLevel> windowList;
    QPopupMenu *file, *view, *help,*options,*right_mouse_button, *colors;

    void closeEvent( QCloseEvent *e );

    void setFaxTitle(const QString& name);
    void setStatusBarMemField(int mem);
    void handle_X_event(XEvent Event);
    void putImage();
//    void setFaxDefaults();

protected:

    void resizeEvent(QResizeEvent *);
    void dropEvent( QDropEvent * event );

    void setSensitivity();

    void readSettings();
    void writeSettings();
    void setupMenuBar();
    void setupToolBar();
    void setupEditWidget();
    void setupStatusBar();

private:


    int statusID, toolID, indentID;
    KMenuBar *menubar;
    KToolBar *toolbar;
    QColor forecolor;
    QColor backcolor;

    KStatusBar *statusbar;
    QTimer *statusbar_timer;

    int open_mode;
    int editor_width;
    int editor_height;
    int hide_toolbar;
    int hide_statusbar;
    int toolbar1;

    KConfig *config;
    QString current_directory;
    QFileDialog* file_dialog;

    QScrollBar *	hsb;
    QScrollBar *	vsb;
    QFrame* 	mainpane;
    QString tmpFile;
    QString netFile;

    PrintDialog * printdialog;
    struct printinfo pi;

public slots:

    void set_colors();
    void pageActivated(const QString&);
    void saving_slot();
    void loading_slot();
    void setGeneralStatusField(QString string);
    void print();
    void timer_slot();
    void file_open_url();
    void file_save_url();
    void quiteditor();
    void file_open();
    void toolbarClicked( int );
    void zoomin();
    void zoomout();
    void resizeView();
    void file_close();
    void file_save();
    void file_save_as();
    void helpselected();
    void helpshort();
    void toggleStatusBar();
    void toggleToolBar();
    void dummy();

    void faxoptions();
    void rotatePage();
    void mirrorPage();
    void flipPage();
    void addFax();
    void closeFax();
    void nextPage();
    void prevPage();
    void newPage();
    void error();
    void goToEnd();
    void goToStart();
    void helptiff();
    void uiUpdate();

    void openadd(QString filename);
    void printIt();
    void FreeFax();
    void scrollHorz(int);
    void scrollVert(int);
    void toolbarMoved(BarPosition);
};


kfax'TopLevel::TopLevel() (./kdegraphics/kfax/kfax.cpp:190)

TopLevel::TopLevel (QWidget *, const char *name)
    : KTMainWindow ( name)
{

  setMinimumSize (100, 100);

  file_dialog = NULL;
  printdialog = NULL;
  buttondown = false;
  statusbar_timer = new QTimer(this);
  connect(statusbar_timer, SIGNAL(timeout()),this,SLOT(timer_slot()));

  connect(kapp,SIGNAL(kdisplayPaletteChanged()),this,SLOT(set_colors()));


  setupMenuBar();
  setupToolBar();
  setupStatusBar();

  readSettings();

  faxqtwin = new QFrame(this);

  qtwin = faxqtwin->winId();
  faxqtwin->setFrameStyle(QFrame::Panel | QFrame::Sunken);

  // Create a Vertical scroll bar

  vsb = new QScrollBar( QScrollBar::Vertical,faxqtwin,"scrollBar" );
  vsb->hide();
  connect( vsb, SIGNAL(valueChanged(int)), SLOT(scrollVert(int)) );

  // Create a Horizontal scroll bar

  hsb = new QScrollBar( QScrollBar::Horizontal,faxqtwin,"scrollBar" );
  connect( hsb, SIGNAL(valueChanged(int)), SLOT(scrollHorz(int)) );
  hsb->hide();


  setView(faxqtwin,TRUE);
  set_colors();

  if ( hide_toolbar )	
    options->changeItem( i18n("Show &Tool Bar"), toolID );
  else
    options->changeItem(i18n( "Hide &Tool Bar"), toolID );

  if ( hide_statusbar )
    options->changeItem(i18n( "Show &Status Bar"), statusID );
  else
    options->changeItem( i18n("Hide &Status Bar"), statusID );

  setCaption(i18n("KFax"));

  setAcceptDrops(true);

  // Calling resize as is done here will reduce flicker considerably
  // ktoplevelwidget updateRect will be called only twice this way instead of 4 times.
  // If I leave the first resize out the toolbar will not be displayed and
  // ktoplevelwidget updateRect will be called four times. All this needs to
  // be looked into. ktoolbar <-> ktoplevelwidget

  resize(editor_width,editor_height);
  show();
  resize(editor_width,editor_height);
}



kfax'TopLevel::~TopLevel() (./kdegraphics/kfax/kfax.cpp:258)

TopLevel::~TopLevel (){

  delete file;
  delete help;
  delete options;
}


kfax'TopLevel::pageActivated() (./kdegraphics/kfax/kfax.cpp:265)

void TopLevel::pageActivated(const QString&){


}


kfax'TopLevel::setFaxTitle() (./kdegraphics/kfax/kfax.cpp:270)

void TopLevel::setFaxTitle(const QString& name){

  QString str(i18n("KFax: "));
  str.append(name);
  setCaption(str);
}


kfax'TopLevel::setupEditWidget() (./kdegraphics/kfax/kfax.cpp:277)

void TopLevel::setupEditWidget(){


}



kfax'TopLevel::resizeEvent() (./kdegraphics/kfax/kfax.cpp:283)

void TopLevel::resizeEvent(QResizeEvent *e){

  KTMainWindow::resizeEvent(e);

  if(!faxqtwin || !display_is_setup)
    return;

  resizeView();
}


kfax'TopLevel::resizeView() (./kdegraphics/kfax/kfax.cpp:293)

void TopLevel::resizeView(){


  if(!faxqtwin || !display_is_setup)
    return;

//printf("In resizeView() entered\n");

  qwindow_width = faxqtwin->width();
  qwindow_height = faxqtwin->height();

  if( hsb->isVisible())
    qwindow_height -= 16;

  if( vsb->isVisible())
    qwindow_width  -= 16;

  if(Image){
    PaneWidth = Image->width;
    PaneHeight = Image->height;
  }

  //  printf("faxw %d qtw %d\n", PaneWidth , faxqtwin->width());

  if( (PaneHeight  > qwindow_height ) &&
      (PaneWidth  > qwindow_width)){

    vsb->setGeometry(faxqtwin->width() - 16,0,16,faxqtwin->height()-16);
    hsb->setGeometry(0,faxqtwin->height() - 16 ,faxqtwin->width()-16,16);

    qwindow_width = faxqtwin->width() -16;
    qwindow_height = faxqtwin->height()-16;


    vsb->raise();
    vsb->show();
    hsb->show();
  }
  else{


    if( PaneHeight  > qwindow_height){
      vsb->setGeometry(faxqtwin->width() - 16,0,16,faxqtwin->height());


      qwindow_width = faxqtwin->width() -16 ;
      qwindow_height = faxqtwin->height();


      vsb->show();
      hsb->hide();
      hsb->raise();
    }
     else
       vsb->hide();

    if( PaneWidth  > qwindow_width ){
      hsb->setGeometry(0,faxqtwin->height() - 16 ,faxqtwin->width(),16);
      hsb->show();
      hsb->raise();
      vsb->hide();
      qwindow_width = faxqtwin->width() ;
      qwindow_height = faxqtwin->height() -16;

    }
    else
      hsb->hide();

  }

  if(Image){
    hsb->setRange(0,max(0,Image->width - qwindow_width));
    hsb->setSteps(5,qwindow_width/2);
    //    printf("hsb range: %d\n",max(0,Image->width - qwindow_width));
    vsb->setRange(0,max(0,Image->height - qwindow_height));
    vsb->setSteps(5,qwindow_height/2);
    //    printf("vsb range: %d\n",max(0,Image->height - qwindow_height));
    //    printf("vsb min %d vdb max %d\n",vsb->minValue(),vsb->maxValue());
  }


  Resize = 1;
  uiUpdate();

}




kfax'TopLevel::setupMenuBar() (./kdegraphics/kfax/kfax.cpp:381)

void TopLevel::setupMenuBar(){

  file = 	new QPopupMenu ();
  help = 	new QPopupMenu ();
  view =        new QPopupMenu ();
  options = 	new QPopupMenu ();


  QString about = i18n("\nKFax %1\n\n"
		     "Copyright 1997-98\n"
                     "Bernd Johannes Wuebben\n"
                     "wuebben@kde.org").arg(KFAXVERSION);

  help = helpMenu(about);

  help->insertItem (i18n("Help page"), 		this, 	SLOT(helpshort()));

  file->insertItem (i18n("&Open Fax..."),		this, 	SLOT(file_open()),KStdAccel::open());
  file->insertItem (i18n("&Add Fax..."),		this, 	SLOT(addFax()));
  //  file->insertItem ("&Save As...",		this, 	SLOT(dummy()));
  file->insertSeparator (-1);
  file->insertItem (i18n("Open &URL..."),	this,	SLOT(file_open_url()));
  file->insertItem (i18n("Save to U&RL..."),	this,	SLOT(file_save_url()));
  file->insertItem (i18n("&Close Fax"),		this,	SLOT(closeFax()),KStdAccel::close());
  file->insertSeparator (-1);
  file->insertItem (i18n("&Print..."),	this,	SLOT(print()),KStdAccel::print() );

  file->insertSeparator (-1);
  file->insertItem (i18n("E&xit"), 		this,	SLOT(quiteditor()),KStdAccel::quit());

  view->insertItem(i18n("&Next Page"),this,SLOT(nextPage()));
  view->insertItem(i18n("&Prev Page"),this,SLOT(prevPage()));
  view->insertItem(i18n("&First Page"),this,SLOT(goToStart()));
  view->insertItem(i18n("&Last Page"),this,SLOT(goToEnd()));
  view->insertSeparator(-1);
  view->insertItem(i18n("&Rotate Page"),this,SLOT(rotatePage()));
  view->insertItem(i18n("&Mirror Page"),this,SLOT(mirrorPage()));
  view->insertItem(i18n("&Flip Page"),this,SLOT(flipPage()));
  view->insertSeparator(-1);
  view->insertItem(i18n("Zoom &in"),this,SLOT(zoomin()));
  view->insertItem(i18n("Zoom &out"),this,SLOT(zoomout()));



  options->setCheckable(TRUE);
  options->insertItem(i18n("&Fax Options..."),this,SLOT(faxoptions()));
  options->insertSeparator(-1);
  toolID   = options->insertItem(i18n("&Tool Bar"),this,SLOT(toggleToolBar()));
  statusID = options->insertItem(i18n("&Status Bar"),this,SLOT(toggleStatusBar()));	


  menubar = new KMenuBar (this, "menubar");
  menubar->insertItem (i18n("&File"), file);
  menubar->insertItem (i18n("&View"), view);
  menubar->insertItem (i18n("&Options"), options);
  menubar->insertSeparator(-1);
  menubar->insertItem (i18n("&Help"), help);

  setMenu(menubar);


}



kfax'TopLevel::setupToolBar() (./kdegraphics/kfax/kfax.cpp:445)

void TopLevel::setupToolBar(){

    toolbar = new KToolBar( this );

    toolbar->insertButton(BarIcon("back"), ID_PREV, TRUE, i18n("Go back"));
    toolbar->insertButton(BarIcon("forward"), ID_NEXT, TRUE, i18n("Go forward"));

    toolbar->insertSeparator();

    toolbar->insertButton(BarIcon("start"), ID_START, TRUE, i18n("Go to start"));
    toolbar->insertButton(BarIcon("finish"), ID_END, TRUE, i18n("Go to end"));

    toolbar->insertSeparator();

    toolbar->insertButton(BarIcon("viewmag+"), ID_ZOOM_IN, TRUE,i18n( "Zoom in"));
    toolbar->insertButton(BarIcon("viewmag-"), ID_ZOOM_OUT, TRUE, i18n("Zoom out"));

    toolbar->insertSeparator();

    toolbar->insertButton(BarIcon("fileprint"), ID_PRINT, TRUE, i18n("Print document"));

    /*
	toolbar->insertButton(BarIcon("tick"), ID_MARK, TRUE, "Mark this page");
    */
    toolbar->insertSeparator();

    toolbar->insertButton(BarIcon("page"), ID_PAGE, TRUE, i18n("Go to page ..."));

  toolbar1 = addToolBar( toolbar );
	
  toolbar->setBarPos( KToolBar::Top );
	
  connect(toolbar, SIGNAL( clicked( int ) ), this,
          SLOT( toolbarClicked( int ) ) );

  connect(toolbar, SIGNAL( moved( BarPosition ) ), this,
          SLOT( toolbarMoved(BarPosition ) ) );
}


kfax'TopLevel::toolbarMoved() (./kdegraphics/kfax/kfax.cpp:484)

void TopLevel::toolbarMoved(BarPosition  ){

  resizeView();

}


kfax'TopLevel::toolbarClicked() (./kdegraphics/kfax/kfax.cpp:490)

void TopLevel::toolbarClicked( int item ){

	switch ( item ) {
  		case ID_PREV:
		        prevPage();
  			break;
  		case ID_NEXT:
		        nextPage();
  			break;
  		case ID_PAGE:
		        helpselected();
  			break;
  		case ID_ZOOM_IN:
		        zoomin();
  			break;
  		case ID_ZOOM_OUT:
		        zoomout();
  			break;
  		case ID_PRINT:
  			print();
  			break;
  		case ID_START:
		        goToStart();
  			break;
  		case ID_END:
		        goToEnd();
  			break;
  		case ID_READ:
  			break;
  	}
}


kfax'TopLevel::setupStatusBar() (./kdegraphics/kfax/kfax.cpp:522)

void TopLevel::setupStatusBar(){

    statusbar = new KStatusBar( this );
    //    statusbar->insertItem("Mem: 000000000", ID_LINE_COLUMN);
    statusbar->insertItem(i18n("w: 00000 h: 00000"), ID_INS_OVR);
    statusbar->insertItem(i18n("Res: XXXXX"), ID_GENERAL);
    statusbar->insertItem(i18n("Type: XXXXXXX"), ID_TYPE);
    statusbar->insertItem(i18n("P:XXXofXXX"), ID_PAGE_NO);
    statusbar->insertItem("",ID_FNAME);

    //    statusbar->changeItem("", ID_LINE_COLUMN);
    statusbar->changeItem("", ID_INS_OVR);
    statusbar->changeItem("", ID_GENERAL);
    statusbar->changeItem("", ID_TYPE);
    statusbar->changeItem("", ID_PAGE_NO);
    statusbar->changeItem("",ID_FNAME);

    //statusbar->setInsertOrder(KStatusBar::RightToLeft);

    //    statusbar->setAlignment(ID_INS_OVR,AlignCenter);

    //    statusbar->setInsertOrder(KStatusBar::LeftToRight);
    //    statusbar->setBorderWidth(1);

    setStatusBar( statusbar );

}




kfax'TopLevel::file_open_url() (./kdegraphics/kfax/kfax.cpp:552)

void TopLevel::file_open_url(){

  UrlDlg l( this,i18n("Open Location:"), "ftp://localhost/welcome");

  if ( l.exec() )
    {
      QString n = l.getText();
      if ( n.left(5) != "file:" && n.left(4) == "ftp:" )
	openNetFile( l.getText());
      else
	openNetFile( l.getText());
    }

}


kfax'TopLevel::file_save_url() (./kdegraphics/kfax/kfax.cpp:567)

void TopLevel::file_save_url(){

  if(!thispage || !thispage->pathname){
    KMessageBox::sorry(this, i18n("You need to open a Fax first"));
    return;
  }

  if(thispage && thispage->pathname){

    UrlDlg l( this, i18n("Save to Location:"), thispage->pathname);

    if ( l.exec() )
      {
	QString n = l.getText();
	if ( n.left(5) != "file:" && n.left(4) == "ftp:" )
	  saveNetFile( l.getText() );	
	else		
	  saveNetFile( l.getText() );
      }
  }
}




kfax'TopLevel::quiteditor() (./kdegraphics/kfax/kfax.cpp:591)

void TopLevel::quiteditor(){

  writeSettings();
  kapp->quit();

}





kfax'TopLevel::file_close() (./kdegraphics/kfax/kfax.cpp:601)

void TopLevel::file_close(){


}


kfax'TopLevel::file_save() (./kdegraphics/kfax/kfax.cpp:606)

void TopLevel::file_save(){


}



kfax'TopLevel::file_open() (./kdegraphics/kfax/kfax.cpp:612)

void TopLevel::file_open(){

  QString newfile;

  /*
  QString d;
  if ( !filename.isEmpty() )
    d = QFileInfo( filename ).dirPath();
  else
    d = QDir::currentDirPath();
    */


  KURL url = KFileDialog::getOpenURL(current_directory,"*");

  if (newfile.isEmpty())
    return;

  if( !url.isLocalFile() )
  {
    KMessageBox::sorry( 0L, i18n( "Only local files are supported yet." ) );
    return;
  }

  newfile = url.path();

  current_directory =  QFileInfo( newfile ).dirPath() ;

  FreeFax();

  fname = newfile;

  (void) notetiff(fname.ascii());	

  thispage = auxpage;

  have_no_fax = false;
  newPage();
  resizeView();
  putImage();

}


kfax'TopLevel::addFax() (./kdegraphics/kfax/kfax.cpp:655)

void TopLevel::addFax()
{
  /*
  QString d;
  if ( !filename.isEmpty() )
    d = QFileInfo( filename ).dirPath();
  else
    d = QDir::currentDirPath();
    */


  KURL url = KFileDialog::getOpenURL(current_directory,"*");

  if( url.isEmpty() )
    return;

  if( !url.isLocalFile() )
  {
    KMessageBox::sorry( 0L, i18n( "Only local files are supported yet." ) );
    return;
  }

  QString newfile = url.path();

  current_directory =  QFileInfo( newfile ).dirPath() ;

  fname = newfile;

  openadd(fname);
}



kfax'TopLevel::openadd() (./kdegraphics/kfax/kfax.cpp:687)

void TopLevel::openadd(QString filename){

  bool this_is_the_first_fax;

  if(firstpage == lastpage)
    this_is_the_first_fax = TRUE;
  else
    this_is_the_first_fax = FALSE;


  auxpage = lastpage;

  (void) notetiff(filename.ascii());	

  if(!this_is_the_first_fax){
    if(auxpage->next)
      auxpage = auxpage->next;
  }

  // auxpage should now point to the first pagenode which was created for
  // the newly added fax file.


  have_no_fax = false;
  thispage = auxpage;
  newPage();
  resizeView();
  putImage();

}

/*
QFileDialog* TopLevel::getFileDialog(const QString& captiontext){

  if(!file_dialog){

    file_dialog = new QFileDialog(current_directory,"*",this,"file_dialog",TRUE);
  }

  file_dialog->setCaption(captiontext);
  file_dialog->rereadDir();

  return file_dialog;
}
*/



kfax'TopLevel::setGeneralStatusField() (./kdegraphics/kfax/kfax.cpp:734)

void TopLevel::setGeneralStatusField(QString text){

    statusbar_timer->stop();
    statusbar->changeItem(text,ID_FNAME);
    statusbar_timer->start(10000,TRUE); // single shot

}



kfax'TopLevel::file_save_as() (./kdegraphics/kfax/kfax.cpp:743)

void TopLevel::file_save_as(){


}





kfax'TopLevel::helpselected() (./kdegraphics/kfax/kfax.cpp:751)

void TopLevel::helpselected(){

  kapp->invokeHTMLHelp( "" , "" );


}


kfax'TopLevel::helpshort() (./kdegraphics/kfax/kfax.cpp:758)

void TopLevel::helpshort(){

  helptiff();

}



kfax'TopLevel::toggleStatusBar() (./kdegraphics/kfax/kfax.cpp:765)

void TopLevel::toggleStatusBar(){

  if(hide_statusbar) {

    hide_statusbar=FALSE;
    enableStatusBar( KStatusBar::Show );
    options->changeItem(i18n("Hide &Status Bar"), statusID);

  }
  else {

    hide_statusbar=TRUE;
    enableStatusBar( KStatusBar::Hide );
    options->changeItem(i18n("Show &Status Bar"), statusID);

  }
  resizeView();

}



kfax'TopLevel::dummy() (./kdegraphics/kfax/kfax.cpp:786)

void TopLevel::dummy(){
  KMessageBox::sorry(this, i18n("Not yet implemented"));
}


kfax'TopLevel::toggleToolBar() (./kdegraphics/kfax/kfax.cpp:790)

void TopLevel::toggleToolBar(){

  if(hide_toolbar) {

    hide_toolbar=FALSE;
    enableToolBar( KToolBar::Show, toolbar1 );
    options->changeItem(i18n("Hide &Tool Bar"), toolID);

  }
  else {

    hide_toolbar=TRUE;
    enableToolBar( KToolBar::Hide, toolbar1 );
    options->changeItem(i18n("Show &Tool Bar"), toolID);

  }

  resizeView();
}	



kfax'TopLevel::closeEvent() (./kdegraphics/kfax/kfax.cpp:811)

void TopLevel::closeEvent( QCloseEvent *e ){

  (void) e;

  file_close();
  writeSettings();
  kapp->quit();
};



kfax'TopLevel::setStatusBarMemField() (./kdegraphics/kfax/kfax.cpp:821)

void TopLevel::setStatusBarMemField(int /*mem*/){

    //    QString memstr = i18n("Mem: %1").arg(mem);
    //    statusbar->changeItem(memstr, ID_LINE_COLUMN);

}



kfax'TopLevel::print() (./kdegraphics/kfax/kfax.cpp:829)

void TopLevel::print(){
  if(!thispage){
    KMessageBox::sorry(this, i18n("There is no document active."));
    return;
  }

  if(!printdialog){
    printdialog = new PrintDialog(NULL,"print",true);
    connect(printdialog,SIGNAL(print()),this,SLOT(printIt()));

  }

  struct printinfo newpi;

  newpi.file = pi.file;
  newpi.cmd = pi.cmd;
  newpi.lpr = pi.lpr;
  newpi.scale = pi.scale;
  newpi.pagesize = pi.pagesize;
  newpi.margins = pi.margins;
  newpi.xmargin = pi.xmargin;
  newpi.ymargin = pi.ymargin;

  printdialog->setWidgets(&newpi);

  QPoint point = this->mapToGlobal (QPoint (0,0));

  QRect pos = this->geometry();
  printdialog->setGeometry(point.x() + pos.width()/2  - printdialog->width()/2,
			   point.y() + pos.height()/2 - printdialog->height()/2,
			   printdialog->width(),
			   printdialog->height()
			   );

  printdialog->show();

}


kfax'TopLevel::printIt() (./kdegraphics/kfax/kfax.cpp:867)

void TopLevel::printIt(){

  if(!firstpage)
    return;

  if(!printdialog)
    return;

  kapp->processEvents();

  struct printinfo *newpi;

  newpi = printdialog->getInfo();

  pi.file = newpi->file;
  pi.cmd = newpi->cmd;
  pi.lpr = newpi->lpr;
  pi.scale = newpi->scale;
  pi.pagesize = newpi->pagesize;
  pi.margins = newpi->margins;
  pi.xmargin = newpi->xmargin;
  pi.ymargin = newpi->ymargin;


  float width = 8.5;
  float height = 11;

  if(pi.pagesize ==  US_LETTER){
    width = 8.5;
    height = 11;
  }

  if(pi.pagesize == US_LEGAL){
    width = 8.5;
    height = 14;
  }

  if(pi.pagesize == US_LEDGER){
    width = 11;
    height = 17;
  }

  if(pi.pagesize == US_EXECUTIVE){
    width = 7.25;
    height = 10.5;
  }

  if(pi.pagesize == DIN_A3){
    width = 12.69;
    height = 16.53;
  }

  if(pi.pagesize == DIN_A4){
    width = 8.267;
    height = 11.692;
  }

  if(pi.pagesize == DIN_A5){
    width = 5.944;
    height = 8.2675;
  }

  if(pi.pagesize == DIN_A6){
    width = 4.2125;
    height = 5.8258;
  }

  if(pi.pagesize == DIN_B4){
    width = 10.04;
    height = 14.33;
  }

  if(pi.pagesize == JAP_LETTER){
    width = 7.165;
    height = 10.1175;
  }

  if(pi.pagesize == JAP_LEGAL){
    width = 10.1175;
    height = 14.33;
  }


  if(pi.margins == 1){
    width  = width - pi.xmargin/2.54*2.0; /* 2.0 since we want this margin both at the
					     top as well as on the bottom */
    height = height - pi.ymargin/2.54*2.0;
  }

  if(width <= 0.0 || height <=0.0 ){

    QString str = i18n("Invalid page dimensions:\nWidth %1 Height %2\n")
		.arg(width, 2).arg(height, 2);
    KMessageBox::sorry(this, str);

    return;
  }

  FILE* psfile;

  if(pi.lpr){

    psfile = NULL;
    psfile = popen(pi.cmd.ascii(),"w");

    if(psfile == NULL){
      QString str = i18n("Can't print to \"%1\"\n").arg(pi.cmd);
      KMessageBox::sorry(this, str);
      return;
    }

  }
  else{

    psfile = fopen(pi.file.ascii(),"w");
    if(psfile == NULL){
      QString str = i18n("Couldn't create %1\n").arg(pi.file);
      KMessageBox::error(this, str);
      return;
    }
  }

  QApplication::setOverrideCursor( waitCursor );
  XDefineCursor(qtdisplay, Win, WorkCursor);
  kapp->processEvents();

  struct pagenode *pn;
  QStrList filelist;

  for(pn = firstpage; pn; pn = pn->next){

    if(filelist.find(pn->pathname) != -1) // we have printed this fax file already
      continue;

    filelist.append(pn->pathname);

    if(pn->type == FAX_TIFF){

      fax2psmain(pn->pathname,psfile,width,height,pi.scale);

    }

    if(pn->type == FAX_RAW){

      int faxtype = 31;

      if(defaultpage.expander ==  g32expand)
	faxtype = 32;

      if(defaultpage.expander ==  g4expand)
	faxtype = 4;

      if(defaultpage.expander ==  g31expand)
	faxtype = 31;


      QString tempfile;
      tempfile = tmpnam(NULL);

      fax2tiffmain(pn->pathname,tempfile.ascii(),pn->lsbfirst,pn->vres?0:1,faxtype);
      fax2psmain(tempfile.ascii(),psfile,width,height,pi.scale);

      remove(tempfile.ascii());

    }

  }

  if(pi.lpr)
    pclose(psfile);
  else
    fclose(psfile);

  QApplication::restoreOverrideCursor();
  XDefineCursor(qtdisplay, Win, ReadyCursor);

}



kfax'TopLevel::setSensitivity() (./kdegraphics/kfax/kfax.cpp:1046)

void TopLevel::setSensitivity (){

}



kfax'TopLevel::saving_slot() (./kdegraphics/kfax/kfax.cpp:1051)

void TopLevel::saving_slot(){

  setGeneralStatusField(i18n("Saving ..."));

}



kfax'TopLevel::loading_slot() (./kdegraphics/kfax/kfax.cpp:1058)

void TopLevel::loading_slot(){

  setGeneralStatusField(i18n("Loading ..."));

}



kfax'TopLevel::saveNetFile() (./kdegraphics/kfax/kfax.cpp:1065)

void TopLevel::saveNetFile( const QString& _url)
{

    int res;
    netFile = _url;
    KURL u( netFile );
    if ( u.isMalformed() )
    {
	KMessageBox::sorry(this, i18n("Malformed URL"));
	return;
    }

    // Just a usual file ?
    if ( u.isLocalFile() )
      {
        saving_slot();
	res = copyfile(u.path().ascii(),thispage->pathname);
	if (res==0) {
	  KMessageBox::error(this, i18n("Failure in 'copy file()'\n"
				"Couldn't save file!"));
          setGeneralStatusField(i18n("Error saving"));
	  return;
	}

	setGeneralStatusField(i18n("Saved"));
	return;
      }

    tmpFile = _PATH_TMP"/kfax" + time( 0L );

    res = copyfile(tmpFile.ascii(),thispage->pathname );
    if (res==0) {
      KMessageBox::error(this, i18n("Failure in 'copy file()'\n"
			    "Couldn't save file!"));
      return;
    }

    KIO::NetAccess::upload( tmpFile, u );

    QString string = i18n("Finished '%1'").arg(tmpFile);
    unlink( tmpFile.local8Bit() );
}


kfax'TopLevel::openNetFile() (./kdegraphics/kfax/kfax.cpp:1108)

void TopLevel::openNetFile( const QString& _url)
{

  netFile = _url;
  KURL u( netFile );
  if ( u.isMalformed() )
    {
	KMessageBox::error(this, i18n("Malformed URL"));
	return;
    }

  // Just a usual file ?
  if ( u.isLocalFile() )
  {
      QString string = i18n("Loading '%1'").arg(u.path());
      setGeneralStatusField(string);
      openadd( u.path());
      setGeneralStatusField(i18n("Done"));
      return;
  }

  setGeneralStatusField(i18n("Downloading..."));
  tmpFile = QString::null; // let NetAccess decide about it
  if ( KIO::NetAccess::download( netFile, tmpFile ) )
  {
    setGeneralStatusField( i18n("Finished '%1'").arg(tmpFile) );
    openadd( tmpFile );
    setCaption( netFile );
	
    // Clean up
    KIO::NetAccess::removeTempFile( tmpFile );
  }
}



kfax'TopLevel::dropEvent() (./kdegraphics/kfax/kfax.cpp:1143)

void TopLevel::dropEvent( QDropEvent * event)
{

  QStrList list;
  QUriDrag::decode(event, list);

  const char *s = list.first();

   if(s != 0L){

     // Load the first file in this window

     if ( s == list.getFirst() )
       {
	 QString n = s;
	 openNetFile( n );

       }
   }
   // lets ignore others for the moment.... ;-)
}


kfax'TopLevel::timer_slot() (./kdegraphics/kfax/kfax.cpp:1165)

void TopLevel::timer_slot(){

  if(thispage){
    if(thispage->name)
      statusbar->changeItem(thispage->name,ID_FNAME);
  }
  else
      statusbar->changeItem("",ID_FNAME);

}



kfax'TopLevel::set_colors() (./kdegraphics/kfax/kfax.cpp:1177)

void TopLevel::set_colors(){

  /*
  QPalette mypalette = (eframe->palette()).copy();

  QColorGroup cgrp = mypalette.normal();
  QColorGroup ncgrp(forecolor,cgrp.background(),
		    cgrp.light(),cgrp.dark(),cgrp.mid(),forecolor,backcolor);

  mypalette.setNormal(ncgrp);
  mypalette.setDisabled(ncgrp);
  mypalette.setActive(ncgrp);

  eframe->setPalette(mypalette);
  eframe->setBackgroundColor(backcolor);
  */
}



kfax'TopLevel::readSettings() (./kdegraphics/kfax/kfax.cpp:1196)

void TopLevel::readSettings(){

	// let's set the defaults

	editor_width = 550;
	editor_height = 400;
	hide_statusbar = FALSE;
	hide_toolbar = FALSE;
	
	// fas display options

	fop.width = 1728;
	fop.height = 2339;
	fop.resauto = 1;
	fop.geomauto = 1;
	fop.fine = 1;
	fop.landscape = 0;
	fop.flip = 0;
	fop.invert =0;
	fop.lsbfirst = 0;
	fop.raw = 3;  // raw faxes are g3 by default -- 2 stands for g32d and 4 for g4
	
	current_directory = QDir::currentDirPath();


	QString str;
	
	config = kapp->config();

	///////////////////////////////////////////////////
	config->setGroup("General Options");


	str = config->readEntry("DefaultPath");
	if ( !str.isEmpty() ){
	  current_directory = str;
	}

	str = config->readEntry("Width");
		if ( !str.isNull() )
		  editor_width = str.toInt();

	str = config->readEntry("Height");
		if ( !str.isNull() )
		  editor_height = str.toInt();


	str = config->readEntry( "StatusBar" );
	if ( !str.isNull() && str.find( "off" ) == 0 ) {
		hide_statusbar = TRUE;
		enableStatusBar( KStatusBar::Hide );

	} else
	  {
		hide_statusbar = FALSE;
		enableStatusBar( KStatusBar::Show );
	  }

	str = config->readEntry( "ToolBar" );

	if ( !str.isNull() && str.find( "off" ) == 0 ) {
		hide_toolbar = TRUE;
		enableToolBar( KToolBar::Hide, toolbar1 );
	} else{
		hide_toolbar = FALSE;
		enableToolBar( KToolBar::Show, toolbar1 );

	}

	str = config->readEntry( "Toolbar position" );
	if ( !str.isNull() ) {
		if( str == "Left" ) {
			toolbar->setBarPos( KToolBar::Left );
		} else if( str == "Right" ) {
			toolbar->setBarPos( KToolBar::Right );
		} else if( str == "Bottom" ) {
			toolbar->setBarPos( KToolBar::Bottom );
		} else
			toolbar->setBarPos( KToolBar::Top );
	}			

	///////////////////////////////////////////////////
	config->setGroup("Fax Options");

	str = config->readEntry("width");
		if ( !str.isNull() )
		  fop.width = str.toInt();

	str = config->readEntry("resauto");
		if ( !str.isNull() )
		  fop.resauto = str.toInt();

	str = config->readEntry("geomauto");
		if ( !str.isNull() )
		  fop.geomauto = str.toInt();

	str = config->readEntry("height");
		if ( !str.isNull() )
		  fop.height = str.toInt();

	str = config->readEntry("resolution");
		if ( !str.isNull() )
		  fop.fine = str.toInt();

	str = config->readEntry("flip");
		if ( !str.isNull() )
		  fop.flip = str.toInt();

	str = config->readEntry("invert");
		if ( !str.isNull() )
		  fop.invert = str.toInt();

	str = config->readEntry("lsb");
		if ( !str.isNull() )
		  fop.lsbfirst = str.toInt();

	str = config->readEntry("raw");
		if ( !str.isNull() )
		  fop.raw = str.toInt();

		
	 setFaxDefaults();
	///////////////////////////////////////////////////

	config->setGroup("Printing");

	pi.cmd = config->readEntry("PrintCommand","lpr");
	pi.file = config->readEntry("PrintFile","");
	pi.lpr = config->readNumEntry("print",1);
	pi.scale = config->readNumEntry("scale",0);
	pi.margins = config->readNumEntry("margins",0);
	str = config->readEntry("xmargin","0.0");
	pi.xmargin = str.toDouble();
	str = config->readEntry("ymargin","0.0");
	pi.ymargin = str.toDouble();
	pi.pagesize = config->readEntry("PageSize",US_LETTER);
}


kfax'TopLevel::writeSettings() (./kdegraphics/kfax/kfax.cpp:1334)

void TopLevel::writeSettings(){
		

  	config = kapp->config();
	
	///////////////////////////////////////////////////

	
	config->setGroup("General Options");

        config->writeEntry("DefaultPath",current_directory);

	QString widthstring;
	widthstring.setNum(this->width() );
	config->writeEntry("Width",  widthstring);

	QString heightstring;
	heightstring.setNum(this->height() );

	config->writeEntry("Height",  heightstring);

	config->writeEntry( "StatusBar", hide_statusbar ? "off" : "on" );
	config->writeEntry( "ToolBar", hide_toolbar ? "off" : "on" );

	QString string;
	string="";
	if ( toolbar->barPos() == KToolBar::Left )
		string = "Left";
	else if ( toolbar->barPos() == KToolBar::Right )
		string = "Right";
	else if ( toolbar->barPos() == KToolBar::Bottom )
		string = "Bottom";
	else
		string = "Top";

	config->writeEntry( "Toolbar position", string );

	////////////////////////////////////////////////////

	config->setGroup("Fax Options");

	config->writeEntry("resauto",fop.resauto);
	config->writeEntry("geomauto",fop.geomauto);
	config->writeEntry("width",fop.width);
	config->writeEntry("height",fop.height);
	config->writeEntry("resolution",fop.fine);
	config->writeEntry("flip",fop.flip);
	config->writeEntry("invert",fop.invert);
	config->writeEntry("lsb",fop.lsbfirst);
	config->writeEntry("raw",fop.raw);

       ////////////////////////////////////////////

	config->setGroup("Printing");

	config->writeEntry("PrintCommand",pi.cmd);
	config->writeEntry("PrintFile",pi.file);
	config->writeEntry("print",pi.lpr);
	config->writeEntry("scale",pi.scale);
	config->writeEntry("PageSize",pi.pagesize);
	config->writeEntry("margins",pi.margins);
	string.sprintf("%.2f",pi.xmargin);
	config->writeEntry("xmargin",string);
	string.sprintf("%.2f",pi.ymargin);
	config->writeEntry("ymargin",string);
	config->sync();	
}



kfax'TopLevel::zoomin() (./kdegraphics/kfax/kfax.cpp:1483)

void TopLevel::zoomin(){

  if(!thispage || !Image || !faxqtwin || !display_is_setup)
    return;

  if (oz > 0) {
    Image = Images[--oz];
    zfactor >>= 1;

    Resize = Refresh = 1;
  }

  int i;

  if (Image == NULL) {

    for (i = oz; i && (Images[i] == NULL); i--)
      ;
    for (; i != oz; i++){
      Images[i+1] = ZoomImage(Images[i]);
      Image = Images[i+1];

      if(Images[i+1] == NULL){ // out of memory	
	Image = Images[i];
	break;
      }
    }


  }

  PaneWidth = Image->width;
  PaneHeight = Image->height;

  resizeView();
  putImage();

  uiUpdate();

}



kfax'TopLevel::zoomout() (./kdegraphics/kfax/kfax.cpp:1525)

void TopLevel::zoomout(){

  if(!thispage || !Image || !faxqtwin || !display_is_setup)
    return;

  if (oz < MAXZOOM && Image->width >= 64 && zfactor < 32) {
    Image = Images[++oz];
    zfactor <<= 1;

    Resize = Refresh = 1;

  }

  int i;

  if (Image == NULL) {
    for ( i = oz; i && (Images[i] == NULL); i--)
      ;
    for (; i != oz; i++){
      Images[i+1] = ZoomImage(Images[i]);
      Image = Images[i+1];

      if(Images[i+1] == NULL){ // out of memory	
	Image = Images[i];
	break;
      }
    }
  }

  PaneWidth = Image->width;
  PaneHeight = Image->height;

  resizeView();
  putImage();

  uiUpdate();

}


kfax'TopLevel::handle_X_event() (./kdegraphics/kfax/kfax.cpp:1564)

void TopLevel::handle_X_event(XEvent Event){


  if(!thispage || !Image || !faxqtwin || !display_is_setup)
    return;

  if(!Image)
    return;

  if(!faxqtwin || !display_is_setup)
    return;


  bool putimage = false; // Do we actually have to write the image to the scree?



  do {
    switch(Event.type) {
    case MappingNotify:
      XRefreshKeyboardMapping((XMappingEvent *)(&Event));
		break;

    case LeaveNotify:
      /*      buttondown = false;
	XDefineCursor(qtdisplay, Win, ReadyCursor);
	XFlush(qtdisplay);*/
      break;
    case Expose:
      {

	if(Event.xexpose.count != 0)
	  break;
	
	if(!Image)
	  break;

	putimage = TRUE;
      }	
    break;

    case KeyPress:
      if (ExpectConfNotify &&
	  (Event.xkey.time < (Lasttime + PATIENCE)))
	break;
      Lasttime = Event.xkey.time;
      ExpectConfNotify = 0;
      switch(XKeycodeToKeysym(qtdisplay, Event.xkey.keycode, 0)) {
      case XK_Help:
      case XK_h:
	helptiff();
	break;
      case XK_m:
	mirrorPage();
	if (Event.xkey.state & ShiftMask)
	  TurnFollowing(TURN_M, thispage->next);
  	break;
      case XK_o:
	zoomout();
	break;

      case XK_i:
	zoomin();
	break;

      case XK_Up:
	ypos-= qwindow_height / 3;
	putimage = TRUE;
	break;
      case XK_Down:
	ypos+= qwindow_height / 3;
	putimage = TRUE;
	break;
      case XK_Left:
	xpos-= qwindow_width / 4;
	putimage = TRUE;
	break;
      case XK_Right:
	xpos+= qwindow_width / 4;
	putimage = TRUE;
	break;
      case XK_Home:
      case XK_R7:	
	if (Event.xkey.state & ShiftMask) {
	  thispage = firstpage;
	  newPage();
	  resizeView();
	  putImage();
	  break;
	}
	xpos= 0;
	ypos= 0;
	putImage();
	break;
      case XK_End:
      case XK_R13:
	if (Event.xkey.state & ShiftMask) {
	  thispage = lastpage;
	  newPage();
	  resizeView();
	  putImage();
	  break;
	}
	xpos= Image->width;
	ypos= Image->height;
	putImage();
	break;
      case XK_l:
	rotatePage();
	if (Event.xkey.state & ShiftMask)
	  TurnFollowing(TURN_L, thispage->next);
	break;
      case XK_p:
      case XK_minus:
      case XK_Prior:
      case XK_R9:
      case XK_BackSpace:
	prevPage();
	break;
      case XK_n:
      case XK_plus:
      case XK_space:
      case XK_Next:
      case XK_R15:
	nextPage();
	break;
      case XK_u:
	flipPage();
	if (Event.xkey.state & ShiftMask)
	  TurnFollowing(TURN_U, thispage->next);
	break;

      case XK_q:
	if (viewpage) {
	  thispage = viewpage;
	  viewpage = NULL;
	  newPage();
	  resizeView();
	  putImage();
	}

      }

      break;

    case ButtonPress:

      if (ExpectConfNotify && (Event.xbutton.time < (Lasttime + PATIENCE)))
	break;

      Lasttime = Event.xbutton.time;
      ExpectConfNotify = 0;


      switch (Event.xbutton.button) {

      case Button1:
	buttondown = true;

	switch (((Image->width > qwindow_width)<<1) |
		(Image->height > qwindow_height)) {
	case 0:
	  break;
	case 1:
	  XDefineCursor(qtdisplay, Win, UDCursor);
	  break;
	case 2:
	  XDefineCursor(qtdisplay, Win, LRCursor);
	  break;
	case 3:
	  XDefineCursor(qtdisplay, Win, MoveCursor);
	}

	XFlush(qtdisplay);
		offx = Event.xbutton.x;
		offy = Event.xbutton.y;
	break;

      }

      break;

    case MotionNotify:
      if(!buttondown)
	break;
      do {

	nx = Event.xmotion.x;
	ny = Event.xmotion.y;


      } while (XCheckTypedEvent(qtdisplay, MotionNotify, &Event));


      xpos+= offx - nx;
      ypos+= offy - ny;

      offx = nx;
      offy = ny;

      putimage = TRUE;

      break;

    case ButtonRelease:

      if (Event.xbutton.button == Button1) {

	buttondown = false;
	XDefineCursor(qtdisplay, Win, ReadyCursor);
	XFlush(qtdisplay);
      }

    }

  } while (XCheckWindowEvent(qtdisplay, Win, KeyPressMask|ButtonPressMask, &Event));

  if(putimage == TRUE){
    Refresh = Resize = 1;
    putImage();
  }

}


kfax'TopLevel::rotatePage() (./kdegraphics/kfax/kfax.cpp:1788)

void TopLevel::rotatePage(){

  if(!thispage || !Image || !faxqtwin || !display_is_setup)
    return;

  XImage *newrotimage = NULL;

  XDefineCursor(qtdisplay, Win, WorkCursor);
  XFlush(qtdisplay);

  newrotimage = RotImage(Images[0]);

  if(newrotimage == NULL){ // out of memory
    XDefineCursor(qtdisplay, Win, ReadyCursor);
    return;
  }

  thispage->extra = Image = newrotimage;
  thispage->orient ^= TURN_L;

  int i;
  for (i = 1; Images[i]; i++) {
    FreeImage(Images[i]);
    Images[i] = NULL;
  }

  Images[0] = Image;

  for (i = 1; i <= oz; i++){

    Images[i] = ZoomImage(Images[i-1]);
    Image = Images[i];
    if(Images[i] == NULL){// out of memory
      Image = Images[i -1];
      break;
    }
  }


  { int t = xpos ; xpos= ypos; ypos= t; }

  Refresh = Resize = 1;

  //	XDefineCursor(qtdisplay, Win, ReadyCursor);

  putImage();

}


kfax'TopLevel::flipPage() (./kdegraphics/kfax/kfax.cpp:1837)

void TopLevel::flipPage(){

  if(!thispage || !Image || !faxqtwin || !display_is_setup)
    return;


  XImage *newflipimage = NULL;

  XDefineCursor(qtdisplay, Win, WorkCursor);
  XFlush(qtdisplay);

  newflipimage = FlipImage(Images[0]);

  if(newflipimage == NULL){ // out of memory
    XDefineCursor(qtdisplay, Win, ReadyCursor);
    return;
  }

  thispage->extra = Images[0] = newflipimage;
  thispage->orient ^= TURN_U;

  int i;
  for (i = 1; Images[i]; i++) {
    FreeImage(Images[i]);
    Images[i] = ZoomImage(Images[i-1]);
    if(Images[i]== NULL){// out of memory
      break;
    }
  }

  Image = Images[min(i-1,oz)];



/*
  XPutImage(qtdisplay, Win, PaintGC, Image,
  xpos -PaneWidth/2, ypos -PaneHeight/2,
  0, 0, PaneWidth, PaneHeight);

  XDefineCursor(qtdisplay, Win, ReadyCursor);
  */

  Refresh = Resize = 1;
  putImage();

}





kfax'TopLevel::mirrorPage() (./kdegraphics/kfax/kfax.cpp:1887)

void TopLevel::mirrorPage(){

  if(!thispage || !Image || !faxqtwin || !display_is_setup)
    return;


  XImage *newmirror = NULL;

  XDefineCursor(qtdisplay, Win, WorkCursor);
  XFlush(qtdisplay);

  newmirror = MirrorImage(Images[0]);

  if(newmirror == NULL){ // out of memory
    XDefineCursor(qtdisplay, Win, ReadyCursor);
    return;
  }
  thispage->extra = Images[0] = newmirror;

  thispage->orient ^= TURN_M;

  int i;
  for (i = 1; Images[i]; i++) {
    FreeImage(Images[i]);
    Images[i] = ZoomImage(Images[i-1]);
    if (Images[i] == NULL) // out of memory
      break;
  }
  Image = Images[min(oz,i-1)];

  /*	XPutImage(qtdisplay, Win, PaintGC, Image,
	xpos - PaneWidth/2, ypos - PaneHeight/2,
	0, 0, PaneWidth, PaneHeight);
	XDefineCursor(qtdisplay, Win, ReadyCursor);*/

    Refresh = Resize = 1;
    putImage();


}


kfax'TopLevel::scrollHorz() (./kdegraphics/kfax/kfax.cpp:1928)

void TopLevel::scrollHorz(int){


  if(!Image)
    return;

  //  printf("hsb value: %d\n",hsb->value());
  xpos=  hsb->value() + qwindow_width/2;

  Refresh = 1;
  putImage();

}


kfax'TopLevel::scrollVert() (./kdegraphics/kfax/kfax.cpp:1942)

void TopLevel::scrollVert(int ){

  if(!Image)
    return;

  //  printf("vsb value: %d\n",vsb->value());
  ypos=  vsb->value() + qwindow_height/2;


  Refresh = 1;
  putImage();
}


kfax'TopLevel::helptiff() (./kdegraphics/kfax/kfax.cpp:1955)

void TopLevel::helptiff(){
  if(!thispage){
    KMessageBox::sorry(this, i18n("You need to open a fax page first."));
    return;
  }

  if( viewpage ) // we are already displaying the help page
    return;

  if (helppage == NULL) {
    if (!notetiff( locate("toolbar", "kfax.tif").ascii() )) {
      return;
    }
    else {

      helppage = lastpage;
      lastpage = helppage->prev;
      lastpage->next = helppage->prev = NULL;

    }
  }
  viewpage = thispage;
  thispage = helppage;

  newPage();
  resizeView();
  putImage();

}

kfax'TopLevel::goToEnd() (./kdegraphics/kfax/kfax.cpp:1984)

void TopLevel::goToEnd(){

  bool have_new_page = FALSE;

  if(!thispage)
    return;

  while(thispage->next != NULL) {

    have_new_page = TRUE;
    thispage = thispage->next;

  }

  if(have_new_page == TRUE){
    newPage();
    resizeView();
    putImage();
  }
  else
    error();

}

kfax'TopLevel::goToStart() (./kdegraphics/kfax/kfax.cpp:2007)

void TopLevel::goToStart(){

  bool have_new_page = FALSE;

  if(!thispage)
    return;


  while(thispage->prev != NULL) {

    have_new_page = TRUE;
    thispage = thispage->prev;

  }

  if(have_new_page == TRUE){
    newPage();
    resizeView();
    putImage();
  }
  else
    error();

}

kfax'TopLevel::nextPage() (./kdegraphics/kfax/kfax.cpp:2031)

void TopLevel::nextPage(){

  if(!thispage)
    return;

  if (thispage->next == NULL) {

    error();
    return;
  }

  thispage = thispage->next;

  newPage();
  resizeView();
  putImage();
}


kfax'TopLevel::prevPage() (./kdegraphics/kfax/kfax.cpp:2049)

void TopLevel::prevPage(){

  if(!thispage)
    return;

  if (thispage->prev == NULL){

    error();
    return;

  }

  thispage = thispage->prev;

  newPage();
  resizeView();
  putImage();

}


kfax'TopLevel::newPage() (./kdegraphics/kfax/kfax.cpp:2069)

void TopLevel::newPage(){


  if(!display_is_setup)
    SetupDisplay();


  XDefineCursor(qtdisplay, Win, WorkCursor);
  XFlush(qtdisplay);


  int i;

  for (i = 1; Images[i]; i++) {
    FreeImage(Images[i]);
    Images[i] = NULL;
  }

  int k = -1;


  if(!thispage) {
    XDefineCursor(qtdisplay, Win, ReadyCursor);
    return;
  }

  if (Pimage(thispage) == NULL){

    while((k != 0) && (k != 3) && (k !=1))
      k = GetImage(thispage);

  }

  if (k == 3 ){

    XDefineCursor(qtdisplay, Win, ReadyCursor);
    FreeFax();
    /*    KMessageBox::sorry(i18n("Bad Fax File k=3"));*/
    return;
  }

  if (k == 0 ){

    XDefineCursor(qtdisplay, Win, ReadyCursor);
    FreeFax();
    /*    KMessageBox::sorry(i18n("Bad Fax File k=0"));*/
    return;
 }

  Image =  Images[0] = Pimage(thispage);

  setfaxtitle(thispage->name);

  for (i = 1; i <= oz; i++){
    Images[i] = ZoomImage(Images[i-1]);
    Image = Images[i];
    if (Images[i] == NULL){ // out of memory
      Image = Images[i-1];
      break;
    }
  }

  PaneWidth = Image->width;
  PaneHeight = Image->height;
  Refresh = 1;

  XDefineCursor(qtdisplay, Win, ReadyCursor);
  uiUpdate();

}



kfax'TopLevel::closeFax() (./kdegraphics/kfax/kfax.cpp:2141)

void TopLevel::closeFax()
{
  FreeFax();

  setCaption(i18n("KFax"));
  // TODO replace this with unmapping the window.
  if(display_is_setup)
    XResizeWindow(qtdisplay,Win,1,1); // we want a clear gray background.

  resizeView();
  vsb->hide();
  hsb->hide();
}




kfax'TopLevel::FreeFax() (./kdegraphics/kfax/kfax.cpp:2157)

void TopLevel::FreeFax(){


  if(display_is_setup)
    XClearWindow(qtdisplay, Win);

  for (int i = 1; Images[i]; i++) {
	  FreeImage(Images[i]);
	  Images[i] = NULL;
  }

  pagenode *pn;

  for (pn = firstpage; pn; pn = pn->next){
    if(Pimage(pn)){
       FreeImage(Pimage(pn));
    }
  }

  Image = NULL;

  for (pn = firstpage; pn; pn = pn->next){
    if(pn->pathname){
       free(pn->pathname);
    }
  }


  if(firstpage){
    for(pn = firstpage->next; pn; pn = pn->next){
      if(pn->prev){
	free(pn->prev);
      }
    }	
  }

  if(lastpage)
    free(lastpage);

  // TODO what about the help page? Well it'll be freed when kfax exits
  firstpage = lastpage = viewpage = helppage = thispage = auxpage = NULL;

  uiUpdate();

}



kfax'TopLevel::error() (./kdegraphics/kfax/kfax.cpp:2204)

void TopLevel::error(){

  QApplication::beep();

}


kfax'TopLevel::uiUpdate() (./kdegraphics/kfax/kfax.cpp:2210)

void TopLevel::uiUpdate(){


  if(!thispage){

    toolbar->setItemEnabled( ID_ZOOM_IN, FALSE );
    toolbar->setItemEnabled( ID_ZOOM_OUT, FALSE );
    toolbar->setItemEnabled( ID_PREV, FALSE );
    toolbar->setItemEnabled( ID_START, FALSE );
    toolbar->setItemEnabled( ID_NEXT, FALSE );
    toolbar->setItemEnabled( ID_END, FALSE );
    toolbar->setItemEnabled( ID_PRINT,FALSE);

    statusbar->changeItem("", ID_INS_OVR);
    statusbar->changeItem("", ID_GENERAL);
    statusbar->changeItem("", ID_PAGE_NO);
    statusbar->changeItem("",ID_FNAME);
    statusbar->changeItem("",ID_TYPE);

    return;
  }

  if(  thispage->next != NULL){

    toolbar->setItemEnabled( ID_NEXT, TRUE );
    toolbar->setItemEnabled( ID_END, TRUE );

  }
  else{

    toolbar->setItemEnabled( ID_NEXT, FALSE );
    toolbar->setItemEnabled( ID_END, FALSE );

  }


  if(  thispage->prev != NULL){

    toolbar->setItemEnabled( ID_PREV, TRUE );
    toolbar->setItemEnabled( ID_START, TRUE );

  }
  else{

    toolbar->setItemEnabled( ID_PREV, FALSE );
    toolbar->setItemEnabled( ID_START, FALSE );

  }



  if(thispage){

    struct pagenode *pn ;
    int pages = 0;
    int currentpage = 0;

    for(pn = firstpage; pn ; pn = pn->next){
      pages ++;
      if (thispage == pn)
	currentpage = pages;
    }

    QString pagestr = i18n("P.%1 of %2").arg(currentpage).arg(pages);

    statusbar->changeItem(pagestr, ID_PAGE_NO);

    toolbar->setItemEnabled( ID_ZOOM_IN, TRUE );
    toolbar->setItemEnabled( ID_ZOOM_OUT, TRUE );
    toolbar->setItemEnabled( ID_PRINT,TRUE);
    if(Image){

    QString wh = i18n("W: %1 H: %2").arg(Image->width).arg(Image->height);
    statusbar->changeItem(wh, ID_INS_OVR);
    }

    QString resolution = i18n("Res: %1").arg(thispage->vres?i18n("Fine"):i18n("Normal"));
    statusbar->changeItem(resolution, ID_GENERAL);

    statusbar->changeItem(thispage->name,ID_FNAME);

    QString typestring;

    if(thispage->type == FAX_TIFF){
      typestring = i18n("Type: Tiff ");
    }	
    else if ( thispage->type == FAX_RAW){
      typestring = i18n("Type: Raw ");
    }

    if ( thispage->expander == g31expand )
      typestring += "G3";

    if ( thispage->expander == g32expand )
      typestring += "G3 2D";

    if ( thispage->expander == g4expand )
      typestring += "G4";

    statusbar->changeItem(typestring,ID_TYPE);
    //    QString memstr = i18n("Mem: %1").arg(Memused);
    //    statusbar->changeItem(memstr, ID_LINE_COLUMN);

  }

}


kfax'TopLevel::putImage() (./kdegraphics/kfax/kfax.cpp:2321)

void TopLevel::putImage(){

  // TODO do I really need to set Refresh or Resize to 1 , is there
  // really still someonce calling this with out haveing set Refresh or Resize to 1?

  if(!Image)
    return;

  if(!display_is_setup)
    return;

  if(!thispage)
    return;


  if ( qwindow_width > Image->width){
	  xpos= Image->width/2;
  }
  else{
    if(xpos< qwindow_width/2){
      xpos = qwindow_width/2;
    }
    else{
      if(xpos> Image->width - qwindow_width/2){
	xpos= Image->width - qwindow_width/2;
      }

    }
  }

  if ( qwindow_height > Image->height){
    ypos= Image->height/2;
  }
  else{
    if(ypos< qwindow_height/2){
      ypos = qwindow_height/2;
    }
    else{
      if(ypos> Image->height - qwindow_height/2){
	ypos= Image->height - qwindow_height/2;
      }

    }
  }

  if (xpos!= ox || ypos!= oy || Refresh || Resize){

    /* In the following we use qwindow_height -1 etc since the main view
       has a sunken frame and I need to offset by 1 pixel to the right and
       one pixel down so that I don't paint my fax into the border of the frame*/

    XResizeWindow(qtdisplay,Win,min(qwindow_width -1,Image->width ),
		  min(qwindow_height -1,Image->height ));

    XPutImage(qtdisplay, Win, PaintGC, Image,
	      max(xpos - qwindow_width/2,0), max(ypos - qwindow_height/2,0),
	      0, 0, min(qwindow_width -1,Image->width)  ,
	      min(qwindow_height -1,Image->height) );

    vsb->setValue(max(ypos - qwindow_height/2,0));
    hsb->setValue(max(xpos - qwindow_width/2,0));

    XFlush(qtdisplay);
  }


  ox = xpos;
  oy = ypos;

  Resize = Refresh = 0;

}



kfax'TopLevel::faxoptions() (./kdegraphics/kfax/kfax.cpp:2395)

void TopLevel::faxoptions(){

 OptionsDialog * opd = new OptionsDialog(NULL,"options");
 opd->setWidgets(&fop);

 if(opd->exec()){

   struct optionsinfo *newops;
   newops = opd->getInfo();

   fop.resauto 	=  newops->resauto;
   fop.geomauto	=  newops->geomauto;
   fop.width 	=  newops->width;
   fop.height 	=  newops->height;
   fop.fine 	=  newops->fine;
   fop.landscape=  newops->landscape;
   fop.flip 	=  newops->flip;
   fop.invert 	=  newops->invert;
   fop.lsbfirst =  newops->lsbfirst;
   fop.raw 	=  newops->raw;


   setFaxDefaults();

 }

 delete opd;

}