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

Class Index

kwrite'TopLevel (./kdeutils/kwrite/toplevel.h:46)

class TopLevel : public KTMainWindow {
    //Q_ OBJECT
  public:

    TopLevel(KWriteDoc * = 0L, const QString &path = QString::null);
    ~TopLevel();
    void init(); //initialize caption, status and show

    virtual bool queryClose();
    virtual bool queryExit();

    void loadURL(const QString &url, int flags = 0);

  protected:
    void setupEditWidget(KWriteDoc *);
    void setupMenuBar();
    void setupToolBar();
    void setupStatusBar();

    virtual void dragEnterEvent( QDragEnterEvent * );
//  virtual void dragMoveEvent( QDragMoveEvent * );
//  virtual void dragLeaveEvent( QDragLeaveEvent * );
    virtual void dropEvent( QDropEvent * );

    KWrite *m_mainview;
    int menuInsert, menuSave;
    int menuUndo, menuRedo, menuUndoHist,
        menuIndent, menuUnindent, menuCleanIndent,
        menuSpell, menuCut, menuPaste, menuReplace;
    int menuVertical, menuShowTB, menuShowSB, menuShowPath;
//    int statusID, toolID, verticalID, indentID;

    KGuiCmdPopup *file, *edit, *options;
    QPopupMenu *recentPopup, *hlPopup, *eolPopup;

    QStrList recentFiles;

    bool hideToolBar;
    bool hideStatusBar;
    bool showPath;

    QTimer *statusbarTimer;

  public slots:
    void openRecent(int);
    void newWindow();
    void newView();
    void closeWindow();
    void quitEditor();

    void configure();
    void keys();
    void toggleToolBar();
    void toggleStatusBar();
    void togglePath();

  public:
    void print(bool dialog);
  public slots:
    void doPrint(KTextPrint &);
    void printNow();
    void printDlg();

    void helpSelected();

    void newCurPos();
    void newStatus();
    void statusMsg(const QString &);
    void timeout();
    void newCaption();
    void newUndo();

    void showHighlight();
    void showEol();

    void slotDropEvent(QDropEvent *);

  //config file functions
  public:
    //common config
    void readConfig(KConfig *);
    void writeConfig(KConfig *);
    //config file
    void readConfig();
  public slots:
    void writeConfig();
  //session management
  public:
    void restore(KConfig *,int);
  protected:
    virtual void readProperties(KConfig *);
    virtual void saveProperties(KConfig *);
    virtual void saveData(KConfig *);

};

kwrite'TopLevel::TopLevel() (./kdeutils/kwrite/toplevel.cpp:79)

TopLevel::TopLevel (KWriteDoc *doc, const QString &path)
  : KTMainWindow("KWrite") {

  setMinimumSize(180,120);

  recentFiles.setAutoDelete(TRUE);

  statusbarTimer = new QTimer(this);
  connect(statusbarTimer,SIGNAL(timeout()),this,SLOT(timeout()));

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

  if (!doc) {
    doc = new KWriteDoc(HlManager::self(), path); //new doc with default path
    docList.append(doc);
  }
  setupEditWidget(doc);
  setupMenuBar();
  setupToolBar();
  setupStatusBar();

//  readConfig();

  setAcceptDrops(true);
}


kwrite'TopLevel::~TopLevel() (./kdeutils/kwrite/toplevel.cpp:105)

TopLevel::~TopLevel() {

//  delete file;
//  delete edit;
//  delete help;
//  delete options;
//  delete recentpopup;
//  delete toolbar;
  if (m_mainview->isLastView()) docList.remove(m_mainview->doc());
}


kwrite'TopLevel::init() (./kdeutils/kwrite/toplevel.cpp:116)

void TopLevel::init() {

  hideToolBar = !hideToolBar;
  toggleToolBar();
  hideStatusBar = !hideStatusBar;
  toggleStatusBar();
  showPath = !showPath;
  togglePath();
  newCurPos();
  newStatus();
//  newCaption();
  newUndo();

  show();
}


kwrite'TopLevel::queryClose() (./kdeutils/kwrite/toplevel.cpp:132)

bool TopLevel::queryClose() {
  if (!m_mainview->isLastView()) return true;
  return m_mainview->canDiscard();
//  writeConfig();
}


kwrite'TopLevel::queryExit() (./kdeutils/kwrite/toplevel.cpp:138)

bool TopLevel::queryExit() {
  writeConfig();
  kapp->config()->sync();

  return true;
}


kwrite'TopLevel::loadURL() (./kdeutils/kwrite/toplevel.cpp:145)

void TopLevel::loadURL(const QString &url, int flags) {
  m_mainview->loadURL(url,flags);
}



kwrite'TopLevel::setupEditWidget() (./kdeutils/kwrite/toplevel.cpp:150)

void TopLevel::setupEditWidget(KWriteDoc *doc) {

  m_mainview = new KWrite(doc,this,QString::null,false);

  connect(m_mainview,SIGNAL(newCurPos()),this,SLOT(newCurPos()));
  connect(m_mainview,SIGNAL(newStatus()),this,SLOT(newStatus()));
  connect(m_mainview,SIGNAL(statusMsg(const QString &)),this,SLOT(statusMsg(const QString &)));
  connect(m_mainview,SIGNAL(fileChanged()),this,SLOT(newCaption()));
  connect(m_mainview,SIGNAL(newUndo()),this,SLOT(newUndo()));
  connect(m_mainview->view(),SIGNAL(dropEventPass(QDropEvent *)),this,SLOT(slotDropEvent(QDropEvent *)));

  setView(m_mainview,FALSE);
}


kwrite'TopLevel::setupMenuBar() (./kdeutils/kwrite/toplevel.cpp:164)

void TopLevel::setupMenuBar() {
  KMenuBar *menubar;
  KGuiCmdPopup *find, *bookmarks;
  QPopupMenu *help, *popup;
  QPixmap pixmap;
  int z;

  KGuiCmdDispatcher *dispatcher;
  dispatcher = new KGuiCmdDispatcher(this, &cmdMngr);
  dispatcher->connectCategory(ctCursorCommands, m_mainview, SLOT(doCursorCommand(int)));
  dispatcher->connectCategory(ctEditCommands, m_mainview, SLOT(doEditCommand(int)));
  dispatcher->connectCategory(ctBookmarkCommands, m_mainview, SLOT(doBookmarkCommand(int)));
  dispatcher->connectCategory(ctStateCommands, m_mainview, SLOT(doStateCommand(int)));

  file =        new KGuiCmdPopup(dispatcher);
  edit =        new KGuiCmdPopup(dispatcher);
  find =        new KGuiCmdPopup(dispatcher);
  bookmarks =   new KGuiCmdPopup(dispatcher);
  options =     new KGuiCmdPopup(dispatcher);
  help =        new QPopupMenu();
  recentPopup = new QPopupMenu();

//    int addCommand(int catNum, int cmdNum, QPixmap &pixmap,
//      const QObject *receiver, const char *member, int id = -1, int index = -1);

  pixmap = BarIcon("filenew");
  file->addCommand(ctFileCommands, cmNew, pixmap, m_mainview, SLOT(newDoc()));
  pixmap = BarIcon("fileopen");
  file->addCommand(ctFileCommands, cmOpen, pixmap, m_mainview, SLOT(open()));
  menuInsert = file->addCommand(ctFileCommands, cmInsert, m_mainview, SLOT(insertFile()));
  file->insertItem(i18n("Open &Recent"), recentPopup);
  connect(recentPopup, SIGNAL(activated(int)), SLOT(openRecent(int)));
  file->insertSeparator ();
  pixmap = BarIcon("filefloppy");
  menuSave = file->addCommand(ctFileCommands, cmSave, pixmap, m_mainview, SLOT(save()));
  file->addCommand(ctFileCommands, cmSaveAs, m_mainview, SLOT(saveAs()));
  file->insertSeparator ();
  pixmap = BarIcon("fileprint");
  file->addCommand(ctFileCommands, cmPrint, pixmap, this, SLOT(printDlg()));
  file->insertSeparator ();
  file->addCommand(ctFileCommands, cmNewWindow, this, SLOT(newWindow()));
  file->addCommand(ctFileCommands, cmNewView, this, SLOT(newView()));
  file->insertSeparator ();
  pixmap = BarIcon("exit");
  file->addCommand(ctFileCommands, cmClose, pixmap, this, SLOT(closeWindow()));

/*
  file->insertItem(i18n("&New..."),m_mainview,SLOT(newDoc()),keys.openNew());
  file->insertItem(i18n("&Open..."),m_mainview,SLOT(open()),keys.open());
  menuInsert = file->insertItem(i18n("&Insert..."),m_mainview,SLOT(insertFile()));
  file->insertItem(i18n("Open Recen&t"), recentPopup);
  connect(recentPopup,SIGNAL(activated(int)),SLOT(openRecent(int)));
  file->insertSeparator ();
  menuSave = file->insertItem(i18n("&Save"),m_mainview,SLOT(save()),keys.save());
  file->insertItem(i18n("S&ave as..."),m_mainview,SLOT(saveAs()));
  file->insertSeparator ();
  file->insertItem(i18n("&Print..."), m_mainview,SLOT(print()),keys.print());
  file->insertSeparator ();
//  file->insertItem (i18n("&Mail..."),this,SLOT(mail()));
//  file->insertSeparator ();
  file->insertItem (i18n("New &Window"),this,SLOT(newWindow()));
  file->insertItem (i18n("New &View"),this,SLOT(newView()));
  file->insertSeparator ();
  file->insertItem(i18n("&Close"),this,SLOT(closeWindow()),keys.close());
//  file->insertItem (i18n("E&xit"),this,SLOT(quitEditor()),keys.quit());
*/

  pixmap = BarIcon("undo");
  menuUndo = edit->addCommand(ctEditCommands, cmUndo, pixmap);
  pixmap = BarIcon("redo");
  menuRedo = edit->addCommand(ctEditCommands, cmRedo, pixmap);
  menuUndoHist = edit->insertItem(i18n("Undo/Redo &History..."),m_mainview,SLOT(undoHistory()));
  edit->insertSeparator();
  pixmap = BarIcon("editcut");
  menuCut = edit->addCommand(ctEditCommands, cmCut, pixmap);
  pixmap = BarIcon("editcopy");
  edit->addCommand(ctEditCommands, cmCopy, pixmap);
  pixmap = BarIcon("editpaste");
  menuPaste = edit->addCommand(ctEditCommands, cmPaste, pixmap);
//  edit->insertSeparator();
//  pixmap = BarIcon("search");
//  edit->addCommand(ctFindCommands, cmFind, pixmap, m_mainview, SLOT(search()));
//  edit->addCommand(ctFindCommands, cmReplace, m_mainview, SLOT(replace()));
//  edit->addCommand(ctFindCommands, cmFindAgain, m_mainview, SLOT(searchAgain()));
//  edit->addCommand(ctFindCommands, cmGotoLine, m_mainview, SLOT(gotoLine()));
  edit->insertSeparator();
  edit->addCommand(ctEditCommands, cmIndent);
  edit->addCommand(ctEditCommands, cmUnindent);
  edit->addCommand(ctEditCommands, cmCleanIndent);
  edit->insertSeparator();
  edit->addCommand(ctEditCommands, cmSelectAll);
  edit->addCommand(ctEditCommands, cmDeselectAll);
  edit->addCommand(ctEditCommands, cmInvertSelection);
  edit->insertSeparator();
  pixmap = BarIcon("spellcheck");
  menuSpell = edit->insertItem(pixmap, i18n("Check Spe&lling..."), m_mainview,SLOT(spellcheck()));


  // find dialog
  pixmap = BarIcon("search");
  find->addCommand(ctFindCommands, cmFind, pixmap, m_mainview, SLOT(find()));
  find->addCommand(ctFindCommands, cmReplace, m_mainview, SLOT(replace()));
  find->addCommand(ctFindCommands, cmFindAgain, m_mainview, SLOT(findAgain()));
  find->addCommand(ctFindCommands, cmGotoLine, m_mainview, SLOT(gotoLine()));

/*
  menuCut = edit->insertItem(i18n("C&ut"),m_mainview,SLOT(cut()),keys.cut());
  edit->insertItem(i18n("&Copy"),m_mainview,SLOT(copy()),keys.copy());
  menuPaste = edit->insertItem(i18n("&Paste"),m_mainview,SLOT(paste()),keys.paste());
  edit->insertSeparator();
  edit->insertItem(i18n("C&ut"),m_mainview,SLOT(cut()), keys.cut());
  edit->insertItem(i18n("&Copy"),m_mainview,SLOT(copy()), keys.copy());
  edit->insertItem(i18n("&Paste"),m_mainview,SLOT(paste()), keys.paste());
  edit->insertSeparator();
  edit->insertItem(i18n("&Find..."),m_mainview,SLOT(search()),keys.find());
  menuReplace = edit->insertItem(i18n("&Replace..."),m_mainview,SLOT(replace()),keys.replace());
  edit->insertItem(i18n("Find &Again"),m_mainview,SLOT(searchAgain()),Key_F3);
  edit->insertItem(i18n("&Goto Line..."),m_mainview,SLOT(gotoLine()),CTRL+Key_G);
  edit->insertSeparator();
  menuUndo = edit->insertItem(i18n("U&ndo"),m_mainview,SLOT(undo()),keys.undo());
  menuRedo = edit->insertItem(i18n("R&edo"),m_mainview,SLOT(redo()),CTRL+Key_Y);
  menuUndoHist = edit->insertItem(i18n("Undo/Redo &History..."),m_mainview,SLOT(undoHistory()));
  edit->insertSeparator();
  menuIndent = edit->insertItem(i18n("&Indent"),m_mainview,SLOT(indent()),CTRL+Key_I);
  menuUnindent = edit->insertItem(i18n("Uninden&t"),m_mainview,SLOT(unIndent()),CTRL+Key_U);
  menuCleanIndent = edit->insertItem(i18n("C&lean Indentation"),m_mainview,SLOT(cleanIndent()));
  edit->insertSeparator();
//  edit->insertItem(i18n("Format..."),m_mainview,SLOT(format()));
//  edit->insertSeparator();
  edit->insertItem(i18n("&Select All"),m_mainview,SLOT(selectAll()));
  edit->insertItem(i18n("&Deselect All"),m_mainview,SLOT(deselectAll()));
  edit->insertItem(i18n("In&vert Selection"),m_mainview,SLOT(invertSelection()));
  edit->insertSeparator();
  menuSpell = edit->insertItem(i18n("Spe&llcheck..."), m_mainview,SLOT(spellcheck()));
//  edit->insertSeparator();
//  edit->insertItem(i18n("Insert &Date"),this,SLOT(insertDate()));
//  edit->insertItem(i18n("Insert &Time"),this,SLOT(insertTime()));
*/

//  bookmarks->insertItem(i18n("&Set Bookmark..."),m_mainview,SLOT(setBookmark()),ALT+Key_S);
//  bookmarks->insertItem(i18n("&Add Bookmark"),m_mainview,SLOT(addBookmark()));
//  bookmarks->insertItem(i18n("&Clear Bookmarks"),m_mainview,SLOT(clearBookmarks()),ALT+Key_C);
  //m_mainview->installBMPopup(bookmarks);

  //highlight selector
  hlPopup = new QPopupMenu();
  hlPopup->setCheckable(true);
  HlManager * hlManager = HlManager::self();
  for (z = 0; z < hlManager->highlights(); z++) {
    hlPopup->insertItem(i18n(hlManager->hlName(z)),z);
  }
  connect(hlPopup,SIGNAL(activated(int)),m_mainview,SLOT(setHl(int)));

  // end of line selector
  eolPopup = new QPopupMenu();
  eolPopup->setCheckable(true);
  eolPopup->insertItem("Unix", eolUnix);
  eolPopup->insertItem("Macintosh", eolMacintosh);
  eolPopup->insertItem("Windows/Dos", eolDos);
  connect(eolPopup,SIGNAL(activated(int)),m_mainview,SLOT(setEol(int)));

  options->setCheckable(TRUE);
  options->insertItem(i18n("Set Highlight"),hlPopup);
  connect(hlPopup,SIGNAL(aboutToShow()),this,SLOT(showHighlight()));
  options->insertItem(i18n("&Defaults..."),m_mainview,SLOT(hlDef()));
  options->insertItem(i18n("&Highlight..."),m_mainview,SLOT(hlDlg()));
//  indentID = options->insertItem(i18n("Auto &Indent"),this,SLOT(toggle_indent_mode()));
//  options->insertSeparator();
//  options->insertItem(i18n("&Options..."),m_mainview,SLOT(optDlg()));
  options->insertItem(i18n("&Colors..."),m_mainview,SLOT(colDlg()));
  options->insertSeparator();
  options->insertItem(i18n("&Configure..."), this, SLOT(configure()));
  options->insertItem(i18n("&Keys..."), this, SLOT(keys()));
  options->insertItem(i18n("End Of Line"),eolPopup);
  connect(eolPopup,SIGNAL(aboutToShow()),this,SLOT(showEol()));
//  options->insertItem(i18n("&Keys..."), this, SLOT(keyDlg()));
  options->insertSeparator();
  menuVertical = options->addCommand(ctStateCommands, cmToggleVertical);
    //Item(i18n("&Vertical Selections"),m_mainview,SLOT(toggleVertical()),Key_F5);
  menuShowTB = options->insertItem(i18n("Show &Toolbar"),this,SLOT(toggleToolBar()));
  menuShowSB = options->insertItem(i18n("Show &Statusbar"),this,SLOT(toggleStatusBar()));
  menuShowPath = options->insertItem(i18n("Show &Path"),this,SLOT(togglePath()));
  options->insertItem(i18n("Save Config"),this,SLOT(writeConfig()));
//  options->insertSeparator();
//  options->insertItem(i18n("Save Options"),this,SLOT(save_options()));

  help = helpMenu( i18n("KWrite 1.0.0\n\nCopyright 1998, 1999\nJochen Wilhelmy\ndigisnap@cs.tu-berlin.de"));

  //right mouse button popup
  popup = new QPopupMenu();

  pixmap = BarIcon("fileopen");
  popup->insertItem(QIconSet(pixmap), i18n("&Open..."),m_mainview,SLOT(open()));
  pixmap = BarIcon("filefloppy");
  popup->insertItem(QIconSet(pixmap), i18n("&Save"),m_mainview,SLOT(save()));
  popup->insertItem(i18n("S&ave as..."),m_mainview,SLOT(saveAs()));
  popup->insertSeparator();
/*  pixmap = BarIcon("undo");
  popup->insertItem(QIconSet(pixmap), i18n("&Undo"),m_mainview,SLOT(undo()));
  pixmap = BarIcon("redo");
  popup->insertItem(QIconSet(pixmap), i18n("R&edo"),m_mainview,SLOT(redo()));
  popup->insertSeparator();*/
  pixmap = BarIcon("editcut");
  popup->insertItem(QIconSet(pixmap), i18n("C&ut"),m_mainview,SLOT(cut()));
  pixmap = BarIcon("editcopy");
  popup->insertItem(QIconSet(pixmap), i18n("&Copy"),m_mainview,SLOT(copy()));
  pixmap = BarIcon("editpaste");
  popup->insertItem(QIconSet(pixmap), i18n("&Paste"),m_mainview,SLOT(paste()));
  m_mainview->installRBPopup(popup);

  menubar = menuBar();
  menubar->insertItem(i18n("&File"), file);
  menubar->insertItem(i18n("&Edit"), edit);
  menubar->insertItem(i18n("&Search"), find);
  menubar->insertItem(i18n("&Bookmarks"), bookmarks);
  menubar->insertItem(i18n("&Options"), options);
  menubar->insertSeparator();
  menubar->insertItem(i18n("&Help"), help);
}


kwrite'TopLevel::setupToolBar() (./kdeutils/kwrite/toplevel.cpp:384)

void TopLevel::setupToolBar(){
  KToolBar *toolbar;

  toolbar = toolBar();//new KToolBar(this);

  QPixmap pixmap;

  pixmap = BarIcon("filenew");
  toolbar->insertButton(pixmap,0,SIGNAL(clicked()),
    m_mainview,SLOT(newDoc()),TRUE,i18n("New"));

  pixmap = BarIcon("fileopen");
  toolbar->insertButton(pixmap,0,SIGNAL(clicked()),
    m_mainview,SLOT(open()),TRUE,i18n("Open"));

  pixmap = BarIcon("filefloppy");
  toolbar->insertButton(pixmap,0,SIGNAL(clicked()),
    m_mainview,SLOT(save()),TRUE,i18n("Save"));

  toolbar->insertSeparator();

  pixmap = BarIcon("editcut");
  toolbar->insertButton(pixmap,toolCut,SIGNAL(clicked()),
    m_mainview,SLOT(cut()),TRUE,i18n("Cut"));

  pixmap = BarIcon("editcopy");
  toolbar->insertButton(pixmap,0,SIGNAL(clicked()),
    m_mainview,SLOT(copy()),TRUE,i18n("Copy"));

  pixmap = BarIcon("editpaste");
  toolbar->insertButton(pixmap,toolPaste,SIGNAL(clicked()),
    m_mainview,SLOT(paste()),TRUE,i18n("Paste"));

  toolbar->insertSeparator();

  pixmap = BarIcon("undo");
  toolbar->insertButton(pixmap,toolUndo,SIGNAL(clicked()),
    m_mainview,SLOT(undo()),TRUE,i18n("Undo"));

  pixmap = BarIcon("redo");
  toolbar->insertButton(pixmap,toolRedo,SIGNAL(clicked()),
    m_mainview,SLOT(redo()),TRUE,i18n("Redo"));

  toolbar->insertSeparator();

  pixmap = BarIcon("fileprint");
  toolbar->insertButton(pixmap, 0, SIGNAL(clicked()),
    this, SLOT(printNow()), TRUE, i18n("Print Document"));

/*
  pixmap = BarIcon("send");
  toolbar->insertButton(pixmap, 0,
                      SIGNAL(clicked()), this,
                      SLOT(mail()), TRUE, i18n("Mail Document"));

*/
  toolbar->insertSeparator();
  pixmap = BarIcon("help");
  toolbar->insertButton(pixmap,0,SIGNAL(clicked()),
    this,SLOT(helpSelected()),TRUE,i18n("Help"));

  toolbar->setBarPos(KToolBar::Top);
}


kwrite'TopLevel::setupStatusBar() (./kdeutils/kwrite/toplevel.cpp:448)

void TopLevel::setupStatusBar(){
    KStatusBar *statusbar;
    statusbar = statusBar();//new KStatusBar( this );
    statusbar->insertItem("Line:000000 Col: 000", ID_LINE_COLUMN);
    statusbar->insertItem("XXX", ID_INS_OVR);
    statusbar->insertItem("*", ID_MODIFIED);
    statusbar->insertItem("", ID_GENERAL);

    //statusbar->setInsertOrder(KStatusBar::RightToLeft);
    //statusbar->setAlignment(ID_INS_OVR, AlignCenter);
    //statusbar->setAlignment(ID_MODIFIED, AlignCenter);

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

//    setStatusBar( statusbar );
}



kwrite'TopLevel::openRecent() (./kdeutils/kwrite/toplevel.cpp:467)

void TopLevel::openRecent(int id) {
  if (m_mainview->canDiscard()) m_mainview->loadURL(recentPopup->text(id));
}


kwrite'TopLevel::newWindow() (./kdeutils/kwrite/toplevel.cpp:471)

void TopLevel::newWindow() {

  TopLevel *t = new TopLevel(0L, m_mainview->fileName());
  t->readConfig();
  t->init();
//  t->m_mainview->doc()->inheritFileName(m_mainview->doc());
}


kwrite'TopLevel::newView() (./kdeutils/kwrite/toplevel.cpp:479)

void TopLevel::newView() {

  TopLevel *t = new TopLevel(m_mainview->doc());
  t->readConfig();
  t->m_mainview->copySettings(m_mainview);
  t->init();
}



kwrite'TopLevel::closeWindow() (./kdeutils/kwrite/toplevel.cpp:488)

void TopLevel::closeWindow() {
  close();
}



kwrite'TopLevel::quitEditor() (./kdeutils/kwrite/toplevel.cpp:493)

void TopLevel::quitEditor() {

//  writeConfig();
  kapp->quit();
}


kwrite'TopLevel::configure() (./kdeutils/kwrite/toplevel.cpp:499)

void TopLevel::configure() {
  KWM kwm;
  // I read that no widgets should be created on the stack
  QTabDialog *qtd = new QTabDialog(this, "tabdialog", TRUE);

  qtd->setCaption(i18n("Configure KWrite"));

  // indent options
  IndentConfigTab *indentConfig = new IndentConfigTab(qtd, m_mainview);
  qtd->addTab(indentConfig, i18n("Indent"));

  // select options
  SelectConfigTab *selectConfig = new SelectConfigTab(qtd, m_mainview);
  qtd->addTab(selectConfig, i18n("Select"));

  // edit options
  EditConfigTab *editConfig = new EditConfigTab(qtd, m_mainview);
  qtd->addTab(editConfig, i18n("Edit"));

  // spell checker
  KSpellConfig *ksc = new KSpellConfig(qtd, 0L, m_mainview->ksConfig());
  qtd->addTab(ksc, i18n("Spellchecker"));

  // keys
  //this still lacks layout management, so the tabdialog does not
  //make it fit
//  KGuiCmdConfigTab *keys = new KGuiCmdConfigTab(qtd, &cmdMngr);
//  qtd->addTab(keys, i18n("Keys"));

  qtd->setOkButton(i18n("OK"));
  qtd->setCancelButton(i18n("Cancel"));

  // Is there a _right_ way to do this?
  // yes: donīt do it :)
//  qtd->setMinimumSize (ksc.sizeHint().width() + qtd->sizeHint().width(),
//          ksc.sizeHint().height() + qtd->sizeHint().height());
  kwm.setMiniIcon(qtd->winId(), kapp->miniIcon());

  if (qtd->exec()) {
    // indent options
    indentConfig->getData(m_mainview);
    // select options
    selectConfig->getData(m_mainview);
    // edit options
    editConfig->getData(m_mainview);
    // spell checker
    ksc->writeGlobalSettings();
    m_mainview->setKSConfig(*ksc);
    // keys
//    cmdMngr.changeAccels();
//    cmdMngr.writeConfig(kapp->config());
//  } else {
//    // cancel keys
//    cmdMngr.restoreAccels();
  }

  delete qtd;
}


kwrite'TopLevel::keys() (./kdeutils/kwrite/toplevel.cpp:558)

void TopLevel::keys() {

  KDialogBase *dlg = new KDialogBase(this, "keys", true,
    i18n("Configure Keybindings"), KDialogBase::Ok | KDialogBase::Cancel,
    KDialogBase::Ok);

  // keys
  //this still lacks layout management, so the tabdialog does not
  //make it fit
  KGuiCmdConfigTab *keys = new KGuiCmdConfigTab(dlg, &cmdMngr);
  keys->resize(450, 290);
  dlg->setMainWidget(keys);
  dlg->resize(450, 315);

  if (dlg->exec()) {
    // change keys
    cmdMngr.changeAccels();
    cmdMngr.writeConfig(kapp->config());
  } else {
    // cancel keys
    cmdMngr.restoreAccels();
  }

  delete dlg;
}




kwrite'TopLevel::toggleToolBar() (./kdeutils/kwrite/toplevel.cpp:586)

void TopLevel::toggleToolBar() {

  options->setItemChecked(menuShowTB,hideToolBar);
  if (hideToolBar) {
    hideToolBar = FALSE;
    enableToolBar(KToolBar::Show);
  } else {
    hideToolBar = TRUE;
    enableToolBar(KToolBar::Hide);
  }
}

/*
void TopLevel::keyDlg() {
  QDialog *dlg;

//  cmdMngr.saveAccels();
  dlg = new KGuiCmdConfig(&cmdMngr, this);
  dlg->setCaption(i18n("Key Bindings"));
  if (dlg->exec() == QDialog::Accepted) {
    cmdMngr.changeAccels();
    cmdMngr.writeConfig(kapp->config());
  } else cmdMngr.restoreAccels();
  delete dlg;
}
*/


kwrite'TopLevel::toggleStatusBar() (./kdeutils/kwrite/toplevel.cpp:613)

void TopLevel::toggleStatusBar() {

  options->setItemChecked(menuShowSB, hideStatusBar);
  if (hideStatusBar) {
    hideStatusBar = FALSE;
    enableStatusBar(KStatusBar::Show);
  } else {
    hideStatusBar = TRUE;
    enableStatusBar(KStatusBar::Hide);
  }
}


kwrite'TopLevel::togglePath() (./kdeutils/kwrite/toplevel.cpp:625)

void TopLevel::togglePath() {

  showPath = !showPath;
  options->setItemChecked(menuShowPath, showPath);
  newCaption();
}



kwrite'TopLevel::print() (./kdeutils/kwrite/toplevel.cpp:633)

void TopLevel::print(bool dialog) {
  QString title = m_mainview->fileName();
  if (!showPath) {
    int pos = title.findRev('/');
    if (pos != -1) {
      title = title.right(title.length() - pos - 1);
    }
  }

  KTextPrintConfig::print(this, kapp->config(), dialog, title,
    m_mainview->numLines(), this, SLOT(doPrint(KTextPrint &)));
}


kwrite'TopLevel::doPrint() (./kdeutils/kwrite/toplevel.cpp:646)

void TopLevel::doPrint(KTextPrint &printer) {
  KWriteDoc *doc = m_mainview->doc();

  int z, numAttribs;
  Attribute *a;
  int line, attr, nextAttr, oldZ;
  TextLine *textLine;
  const QChar *s;

//  printer.setTitle(m_doc->fileName());
  printer.setTabWidth(doc->tabWidth());

  numAttribs = doc->numAttribs();
  a = doc->attribs();
  for (z = 0; z < numAttribs; z++) {
    printer.defineColor(z, a[z].col.red(), a[z].col.green(), a[z].col.blue());
  }

  printer.begin();

  line = 0;
  attr = -1;
  while (true) {
    textLine = doc->textLine(line);
    s = textLine->getText();
//    printer.print(s, textLine->length());
    oldZ = 0;
    for (z = 0; z < textLine->length(); z++) {
      nextAttr = textLine->getAttr(z);
      if (nextAttr != attr) {
        attr = nextAttr;
        printer.print(&s[oldZ], z - oldZ);
        printer.setColor(attr);
        int fontStyle = 0;
        if (a[attr].font.bold()) fontStyle |= KTextPrint::Bold;
        if (a[attr].font.italic()) fontStyle |= KTextPrint::Italics;
        printer.setFontStyle(fontStyle);
        oldZ = z;
      }
    }
    printer.print(&s[oldZ], z - oldZ);

    line++;
    if (line == doc->numLines()) break;
    printer.newLine();
  }

  printer.end();
}


kwrite'TopLevel::printNow() (./kdeutils/kwrite/toplevel.cpp:696)

void TopLevel::printNow() {
  print(false);
}


kwrite'TopLevel::printDlg() (./kdeutils/kwrite/toplevel.cpp:700)

void TopLevel::printDlg() {
  print(true);
}


kwrite'TopLevel::helpSelected() (./kdeutils/kwrite/toplevel.cpp:704)

void TopLevel::helpSelected() {
  kapp->invokeHTMLHelp( "" , "" );
}


kwrite'TopLevel::newCurPos() (./kdeutils/kwrite/toplevel.cpp:708)

void TopLevel::newCurPos() {
  statusBar()->changeItem(QString("%1: %2 %3: %4")
    .arg(i18n("Line"))
    .arg(m_mainview->currentLine() +1)
    .arg(i18n("Col"))
    .arg(m_mainview->currentColumn() +1),
    ID_LINE_COLUMN);
}


kwrite'TopLevel::newStatus() (./kdeutils/kwrite/toplevel.cpp:717)

void TopLevel::newStatus() {
  int config;
  bool readOnly;

  readOnly = m_mainview->isReadOnly();

  config = m_mainview->config();
  options->setItemChecked(menuVertical,config & cfVerticalSelect);

  if (readOnly)
    statusBar()->changeItem("R/O",ID_INS_OVR);
  else
    statusBar()->changeItem(config & cfOvr ? "OVR" : "INS",ID_INS_OVR);

  statusBar()->changeItem(m_mainview->isModified() ? "*" : "",ID_MODIFIED);

  file->setItemEnabled(menuInsert,!readOnly);
  file->setItemEnabled(menuSave,!readOnly);

  edit->setItemEnabled(menuIndent,!readOnly);
  edit->setItemEnabled(menuUnindent,!readOnly);
  edit->setItemEnabled(menuCleanIndent,!readOnly);
  edit->setItemEnabled(menuSpell,!readOnly);
  edit->setItemEnabled(menuCut,!readOnly);
  edit->setItemEnabled(menuPaste,!readOnly);
  edit->setItemEnabled(menuReplace,!readOnly);

  toolBar()->setItemEnabled(toolCut,!readOnly);
  toolBar()->setItemEnabled(toolPaste,!readOnly);

  newUndo();
}


kwrite'TopLevel::statusMsg() (./kdeutils/kwrite/toplevel.cpp:750)

void TopLevel::statusMsg(const QString &msg) {
  statusbarTimer->stop();
  statusBar()->changeItem(msg, ID_GENERAL);
  statusbarTimer->start(10000, true); //single shot
}


kwrite'TopLevel::timeout() (./kdeutils/kwrite/toplevel.cpp:756)

void TopLevel::timeout() {
  statusBar()->changeItem("", ID_GENERAL);
}


kwrite'TopLevel::newCaption() (./kdeutils/kwrite/toplevel.cpp:760)

void TopLevel::newCaption() {
  QString caption;
  int z;

  if (m_mainview->hasFileName()) {
    caption = m_mainview->fileName();
    //set recent files popup menu
    z = (int) recentPopup->count();
    while (z > 0) {
      z--;
      if (caption == recentPopup->text(recentPopup->idAt(z)))
      recentPopup->removeItemAt(z);
    }
    recentPopup->insertItem(caption, 0, 0);
    if (recentPopup->count() > 5) recentPopup->removeItemAt(5);
    for (z = 0; z < 5; z++) recentPopup->setId(z, z);

    //set caption
    if (!showPath) {
      int pos = caption.findRev('/');
      if (pos != -1) {
        caption = caption.right( caption.length() - pos - 1);
      }
    }
    setCaption(caption);
  } else {
    setCaption(kapp->caption());
  }
}


kwrite'TopLevel::newUndo() (./kdeutils/kwrite/toplevel.cpp:790)

void TopLevel::newUndo() {
  int state, uType, rType;
  QString t;

  state = m_mainview->undoState();

  edit->setItemEnabled(menuUndoHist,(state & 1 || state & 2));

  t = cmdMngr.getCommand(ctEditCommands, cmUndo)->getName();
  if (state & 1) {
    uType = m_mainview->nextUndoType();
    edit->setItemEnabled(menuUndo,true);
    toolBar()->setItemEnabled(toolUndo,true);

    t += ' ';
    t += i18n(m_mainview->undoTypeName(uType));
  } else {
    edit->setItemEnabled(menuUndo,false);
    toolBar()->setItemEnabled(toolUndo,false);
  }
  edit->setText(t, menuUndo);

  t = cmdMngr.getCommand(ctEditCommands, cmRedo)->getName();
  if (state & 2) {
    rType = m_mainview->nextRedoType();
    edit->setItemEnabled(menuRedo,true);
    toolBar()->setItemEnabled(toolRedo,true);

    t += ' ';
    t += i18n(m_mainview->undoTypeName(rType));
  } else {
    edit->setItemEnabled(menuRedo,false);
    toolBar()->setItemEnabled(toolRedo,false);
  }
  edit->setText(t, menuRedo);
}


kwrite'TopLevel::dragEnterEvent() (./kdeutils/kwrite/toplevel.cpp:827)

void TopLevel::dragEnterEvent( QDragEnterEvent *event )
{
  event->accept(QUriDrag::canDecode(event));
}


kwrite'TopLevel::dropEvent() (./kdeutils/kwrite/toplevel.cpp:832)

void TopLevel::dropEvent( QDropEvent *event )
{
  slotDropEvent(event);
}


kwrite'TopLevel::slotDropEvent() (./kdeutils/kwrite/toplevel.cpp:837)

void TopLevel::slotDropEvent( QDropEvent *event )
{
  QStrList  urls;

  if (QUriDrag::decode(event, urls)) {
    debug("TopLevel:Handling QUriDrag...");
    char *s;
    for (s = urls.first(); s != 0L; s = urls.next()) {
      // Load the first file in this window
      if (s == urls.getFirst() && !m_mainview->isModified() && !m_mainview->isReadOnly()) {
        loadURL(s);
      } else {
        TopLevel *t = new TopLevel();
        t->readConfig();
        t->loadURL(s);
        t->init();
      }
    }
  }
}


kwrite'TopLevel::showHighlight() (./kdeutils/kwrite/toplevel.cpp:858)

void TopLevel::showHighlight() {
  int hl = m_mainview->getHl();

  for (int index = 0; index < (int) hlPopup->count(); index++)
    hlPopup->setItemChecked(index, hl == index);
}


kwrite'TopLevel::showEol() (./kdeutils/kwrite/toplevel.cpp:865)

void TopLevel::showEol() {
  int eol = m_mainview->getEol();

  for (int index = 0; index < (int) eolPopup->count(); index++)
    eolPopup->setItemChecked(index, eol == index);
}

//common config

kwrite'TopLevel::readConfig() (./kdeutils/kwrite/toplevel.cpp:873)

void TopLevel::readConfig(KConfig *config) {
  int z;
  char name[16];
  QString s;

  hideToolBar = config->readNumEntry("HideToolBar");
  hideStatusBar = config->readNumEntry("HideStatusBar");
  showPath = config->readNumEntry("ShowPath");

  for (z = 0; z < 5; z++) {
    sprintf(name, "Recent%d", z + 1);
    s = config->readEntry(name);
    if (!s.isEmpty()) recentPopup->insertItem(s);
  }
}


kwrite'TopLevel::writeConfig() (./kdeutils/kwrite/toplevel.cpp:889)

void TopLevel::writeConfig(KConfig *config) {
  int z;
  char name[16];

  config->writeEntry("HideToolBar",hideToolBar);
  config->writeEntry("HideStatusBar",hideStatusBar);
  config->writeEntry("ShowPath",showPath);

  for (z = 0; z < (int) recentPopup->count(); z++) {
    sprintf(name, "Recent%d", z + 1);
    config->writeEntry(name, recentPopup->text(recentPopup->idAt(z)));
  }
}

//config file

kwrite'TopLevel::readConfig() (./kdeutils/kwrite/toplevel.cpp:904)

void TopLevel::readConfig() {
  KConfig *config;
  int w, h;

  config = kapp->config();

  config->setGroup("General Options");
  w = config->readNumEntry("Width", 550);
  h = config->readNumEntry("Height", 400);
  resize(w, h);

  readConfig(config);
//  hideToolBar = config->readNumEntry("HideToolBar");
//  hideStatusBar = config->readNumEntry("HideStatusBar");

  m_mainview->readConfig(config);
  m_mainview->doc()->readConfig(config);
}


kwrite'TopLevel::writeConfig() (./kdeutils/kwrite/toplevel.cpp:923)

void TopLevel::writeConfig() {
  KConfig *config;

  config = kapp->config();

  config->setGroup("General Options");
  config->writeEntry("Width", width());
  config->writeEntry("Height", height());

  writeConfig(config);
//  config->writeEntry("HideToolBar",hideToolBar);
//  config->writeEntry("HideStatusBar",hideStatusBar);

  m_mainview->writeConfig(config);
  m_mainview->doc()->writeConfig(config);
}

// session management

kwrite'TopLevel::restore() (./kdeutils/kwrite/toplevel.cpp:941)

void TopLevel::restore(KConfig *config, int n) {

  if (m_mainview->isLastView() && m_mainview->hasFileName()) { //in this case first view
    loadURL(m_mainview->fileName(), lfNoAutoHl);
  }
  readPropertiesInternal(config, n);
  init();
//  show();
}


kwrite'TopLevel::readProperties() (./kdeutils/kwrite/toplevel.cpp:951)

void TopLevel::readProperties(KConfig *config) {

  readConfig(config);
  m_mainview->readSessionConfig(config);
}


kwrite'TopLevel::saveProperties() (./kdeutils/kwrite/toplevel.cpp:957)

void TopLevel::saveProperties(KConfig *config) {

  writeConfig(config);
  config->writeEntry("DocumentNumber",docList.find(m_mainview->doc()) + 1);
  m_mainview->writeSessionConfig(config);
#warning fix session management
#if 0
  setUnsavedData(m_mainview->isModified());
#endif
}


kwrite'TopLevel::saveData() (./kdeutils/kwrite/toplevel.cpp:968)

void TopLevel::saveData(KConfig *config) { //save documents
  int z;
  char buf[16];
  KWriteDoc *doc;

  config->setGroup("Number");
  config->writeEntry("NumberOfDocuments",docList.count());

  for (z = 1; z <= (int) docList.count(); z++) {
     sprintf(buf,"Document%d",z);
     config->setGroup(buf);
     doc = docList.at(z - 1);
     doc->writeSessionConfig(config);
  }
}

//restore session