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

Class Index

knu'TopLevel (./kdenetwork/knu/knu.h:102)

class TopLevel: public KTMainWindow
{
  Q_OBJECT

public:
  TopLevel(QWidget *parent=0, const char *name=0);
  ~TopLevel();
  //CommandDlg **getPages(int *pn) { *pn=pagesNumber; return pages; };
    
protected:
  virtual void saveProperties(KConfig*);
  virtual void readProperties(KConfig*);
  
  QPopupMenu    *fileMenu, *editMenu, *helpMenu;
  KMenuBar      *menuBar;
  KTabCtl       *tabCtrl;
  int            configIndex;
  int            closeIndex;
  CommandDlg    *pages[10];
  static CommandCfgDlg *cfgPages[10];
  int            pagesNumber;

public slots:
  void slotTabChanged(int);
  void slotQuit();  
  void slotClose();  
  void slotCopy();  
  void slotSelectAll();  
  void slotHelp();  
  void slotConfig();  
  void slotClear();  
  void slotNew();
  void checkBinaryAndDisplayWidget();
  void enableFileClose(bool);

private:
  KConfig    *kconfig;
  int         currentTab;

  //public:
  //  static QList<TopLevel>  windowList;

protected:
  void createMenu();

};

knu'TopLevel::TopLevel() (./kdenetwork/knu/knu.cpp:190)

TopLevel::TopLevel(QWidget *, const char *name)
  : KTMainWindow(name)
{
  KConfig         *kc = kapp->config();
  PingDlg         *pd;
  TracerouteDlg   *td;
  HostDlg         *hd;
  FingerDlg       *fd;
  MtrDlg          *md;
  WhoisDlg        *wd;
  NetstatDlg      *nd;

  /*
   * Set caption string
   */
  setCaption(CaptionString);
  
  kconfig = kc;
    
  /*
   * Create MenuBar
   */
  createMenu();
  setMenu(menuBar);

  
  /*
   * Create the tabctrl widget
   */
  tabCtrl = new KTabCtl(this);
  CHECK_PTR(tabCtrl);
  connect(tabCtrl, SIGNAL(tabSelected(int)), 
	  this, SLOT(slotTabChanged(int)));
  pagesNumber = 0;

  /*********************
   * Don't forget the slotConfig function while adding tabs
   *********************/

  // ping tab
  if (isTabEnabled("Ping", kc)) {
    pd = new PingDlg("ping", tabCtrl, i18n("&Ping"));
    CHECK_PTR(pd);
    tabCtrl->addTab(pd, pd->name());
    pages[pagesNumber] = pd;
    pagesNumber++;
  }

  // traceroute tab 
  if (isTabEnabled("Traceroute", kc)) {
    td = new TracerouteDlg("traceroute", tabCtrl, i18n("&Traceroute"));
    CHECK_PTR(td);
    tabCtrl->addTab(td, td->name());
    pages[pagesNumber] = td;
    pagesNumber++;
  }

  // host tab
  if (isTabEnabled("Host resolution", kc)) {
    hd = new HostDlg("host", tabCtrl, i18n("Host &resolution"));
    /* 
     * the "host" command name can be modified by 
     * HostDlg::search_for_binary if host is not found
     */
    CHECK_PTR(hd);
    tabCtrl->addTab(hd, hd->name());
    pages[pagesNumber] = hd;
    pagesNumber++;
  }

  // finger tab 
  if (isTabEnabled("Finger", kc)) {
    fd = new FingerDlg("finger", tabCtrl, i18n("F&inger"));
    CHECK_PTR(fd);
    tabCtrl->addTab(fd, fd->name());
    pages[pagesNumber] = fd;
    pagesNumber++;
  }

  // mtr tab 
  if (isTabEnabled("Mtr", kc)) {
    md = new MtrDlg("mtr", tabCtrl, i18n("&mtr"));
    CHECK_PTR(md);
    tabCtrl->addTab(md, md->name());
    pages[pagesNumber] = md;
    pagesNumber++;
  }

  // whois tab
  if (isTabEnabled("Whois", kc)) {
    wd = new WhoisDlg("whois", tabCtrl, i18n("&Whois"));
    CHECK_PTR(wd);
    tabCtrl->addTab(wd, wd->name());
    pages[pagesNumber] = wd;
    pagesNumber++;
  }

  // netstat tab
  if (isTabEnabled("Netstat", kc)) {
    nd = new NetstatDlg("netstat", tabCtrl, i18n("Netstat"));
    CHECK_PTR(nd);
    tabCtrl->addTab(nd, nd->name());
    pages[pagesNumber] = nd;
    pagesNumber++;
  }
  if (pagesNumber == 0) {
    // There is *no* command enabled ! 

    QMessageBox::critical(this, caption(),
			  i18n("There is no command enabled\n"
			  "in the configuration file.\n\n"
			  "So I can't do anything...\n"),
			  i18n("OK"));
    exit(-1);
  }
  setFrameBorderWidth(FRAME_BORDER_WIDTH);
  //tabCtrl->adjustSize();
  //tabCtrl->setMinimumSize(tabCtrl->size());
  setView(tabCtrl, true);		// for KTMainWindow
  currentTab = -1;

  /*
   * Enable File->Close if needed
   * (calls each toplevel window's enableFileClose() )
   */
  if (memberList->count() > 1) {
    if (memberList->count() == 2) {
      KTMainWindow *ktmw = memberList->first();
      while (ktmw) {
	((TopLevel *)ktmw)->enableFileClose(true);
	ktmw = memberList->next();
      }
    }
  } else {
    enableFileClose(false);
  }

  menuBar->show();
  adjustSize();

  setMinimumSize(QMAX(tabCtrl->minimumSize().width()
		      +2*FRAME_BORDER_WIDTH, 500), 
		 QMAX(tabCtrl->minimumSize().height()
		      +2*FRAME_BORDER_WIDTH, 300));
}


/**
 * Create the KMenuBar
 */
void

knu'TopLevel::createMenu() (./kdenetwork/knu/knu.cpp:341)

TopLevel::createMenu()
{
  int mi;

  fileMenu = new QPopupMenu;
  CHECK_PTR(fileMenu);
  fileMenu->insertItem(i18n("&New window"), 
				   this, SLOT(slotNew()), KStdAccel::key(KStdAccel::New));
  fileMenu->insertSeparator();
  closeIndex = fileMenu->insertItem(i18n("&Close window"), 
				    this, SLOT(slotClose()), 
					KStdAccel::key(KStdAccel::Close));
  fileMenu->insertItem(i18n("&Quit"), this, SLOT(slotQuit()), 
				   KStdAccel::key(KStdAccel::Quit));
  
  editMenu = new QPopupMenu;
  CHECK_PTR(editMenu);
  mi = editMenu->insertItem(i18n("&Copy"), this, SLOT(slotCopy()), 
					KStdAccel::key(KStdAccel::Copy));
  editMenu->setItemEnabled(mi, FALSE);
  editMenu->insertItem(i18n("Select &all"), 
		       this, SLOT(slotSelectAll()));
  editMenu->insertSeparator();
  editMenu->insertItem(i18n("C&lear output window"), 
		       this, SLOT(slotClear()));
  editMenu->insertSeparator();
  configIndex = editMenu->insertItem(i18n("P&references..."), 
				     this, SLOT(slotConfig()));

  
#if 1
  QString about;
  about = i18n("Knu\nVersion %1\n\nBertrand Leconte\n<B.Leconte@mail.dotcom.fr>\n").arg(KNU_VERSION);
  KHelpMenu *myHelpMenu = new KHelpMenu( this, about);
#else
  // old style
  helpMenu = new QPopupMenu;
  CHECK_PTR(helpMenu);
  helpMenu->insertItem(i18n("&Contents"),
			   this, SLOT(slotHelp()), KStdAccel::key(KStdAccel::Help));
  helpMenu->insertSeparator();
  QString str;
  str = i18n("&About %1").arg(KNU_APPNAME);
  helpMenu->insertItem(str, this, SLOT(slotAbout()), SHIFT+Key_F1);
  helpMenu->insertItem(i18n("About &Qt"), this, SLOT(slotAboutQt()));
#endif
  
  menuBar = new KMenuBar(this);
  CHECK_PTR(menuBar);
  menuBar->insertItem(i18n("&File"), fileMenu);
  menuBar->insertItem(i18n("&Edit"), editMenu);
  menuBar->insertSeparator();
#if 1
  menuBar->insertItem(i18n("&Help"), myHelpMenu->menu());
#else
  menuBar->insertItem(i18n("&Help"), helpMenu);
#endif
}


/** 
 * enableFileClose - called to change the status (enable/disable)
 * of the File-> Close menu
 */
void

knu'TopLevel::enableFileClose() (./kdenetwork/knu/knu.cpp:406)

TopLevel::enableFileClose(bool toggle)
{
  debug("TopLevel::enableFileClose(%s)", (toggle ? "true" : "false"));
  fileMenu->setItemEnabled(closeIndex, toggle);
}

/**
 * Edit->Preferences menu entry
 */
void 

knu'TopLevel::slotConfig() (./kdenetwork/knu/knu.cpp:416)

TopLevel::slotConfig()
{
  CommandCfgDlg   *configPages[10];
  OptionsDlg      *options;
  int n = 0;

  /*
   * Create options dialogBox
   */
  
  /* ping */
  CommandCfgDlg *ccd = new CommandCfgDlg(i18n("&Ping"), 0, "ping_cfg");
  CHECK_PTR(ccd);
  configPages[n] = ccd;
  n++;
  
  /* traceroute */
  ccd = new CommandCfgDlg(i18n("&Traceroute"), 0, "traceroute_cfg");
  CHECK_PTR(ccd);
  configPages[n] = ccd;
  n++;
  
  /* host resolution */
  HostCfgDlg *hcd = new HostCfgDlg(i18n("Host &resolution"), 0, "host_cfg");
  CHECK_PTR(hcd);
  configPages[n] = hcd;
  n++;

  /* finger */
  ccd = new CommandCfgDlg(i18n("&Finger"), 0, "finger_cfg");
  CHECK_PTR(ccd);
  configPages[n] = ccd;
  n++;

  /* mtr */
  ccd = new CommandCfgDlg(i18n("&mtr"), 0, "mtr_cfg");
  CHECK_PTR(ccd);
  configPages[n] = ccd;
  n++;

  /* whois */
  WhoisCfgDlg *wcd = new WhoisCfgDlg(i18n("&Whois"), 0, "whois_cfg");
  CHECK_PTR(wcd);
  configPages[n] = wcd;
  n++;

  /* netstat */
  CommandCfgDlg *ncd = new CommandCfgDlg(i18n("Netstat"), 0, "netstat_cfg");
  CHECK_PTR(ncd);
  configPages[n] = ncd;
  n++;
  
  options = new OptionsDlg(configPages, n, 0);
  CHECK_PTR(options);

  if (options->exec()) {
    kapp->config()->sync();
  } else {
    // nothing to do
  }
  
  // distribute the new configs values among all the toplevel windows
  KTMainWindow *ktmw = memberList->first();
  
  while (ktmw) {
    ((TopLevel *)ktmw)->checkBinaryAndDisplayWidget();
    ktmw = memberList->next();
  }
}

/**
 * Pass checkBinaryAndDisplayWidget to each tab
 */
void 

knu'TopLevel::checkBinaryAndDisplayWidget() (./kdenetwork/knu/knu.cpp:490)

TopLevel::checkBinaryAndDisplayWidget()
{
  int i;
  for (i=0; i<pagesNumber; i++) {
    pages[i]->checkBinaryAndDisplayWidget();
  }
}


/**
 * Destructor
 */

knu'TopLevel::~TopLevel() (./kdenetwork/knu/knu.cpp:502)

TopLevel::~TopLevel()
{
  KTMainWindow *ktmw;
  debug("TopLevel::~TopLevel() [memberList->count() = %d]", 
	memberList->count());

  if (memberList->count() == 2) {
    // disable last window File->Close menu entry
    // (I don't know if I'm the first or the last one...)
    ktmw = memberList->first();
    ((TopLevel *)ktmw)->enableFileClose(false);
    ktmw = memberList->next();
    ((TopLevel *)ktmw)->enableFileClose(false);
  }
}


/**
 * called when a tab is changed
 */
void

knu'TopLevel::slotTabChanged() (./kdenetwork/knu/knu.cpp:523)

TopLevel::slotTabChanged(int newTab)
{
  if (newTab != currentTab) {
    if (currentTab >= 0) {
      pages[currentTab]->tabDeselected();
    }
    pages[newTab]->tabSelected();
    currentTab = newTab;
  }
}

/**
 * File->Quit menu entry
 */
void 

knu'TopLevel::slotQuit() (./kdenetwork/knu/knu.cpp:538)

TopLevel::slotQuit()
{
  debug("TopLevel::slotQuit()");
  ::quit();
}

/**
 * Edit->Copy menu entry
 */
void 

knu'TopLevel::slotCopy() (./kdenetwork/knu/knu.cpp:548)

TopLevel::slotCopy()
{
  debug("TopLevel::slotCopy() is not yet implemented");
}

/**
 * Edit->Clear output window menu entry
 */
void 

knu'TopLevel::slotClear() (./kdenetwork/knu/knu.cpp:557)

TopLevel::slotClear()
{
  pages[currentTab]->clearOutput();
}

/**
 * File->New window menu entry
 */
void 

knu'TopLevel::slotNew() (./kdenetwork/knu/knu.cpp:566)

TopLevel::slotNew()
{
  TopLevel *toplevel = new TopLevel;
  toplevel->show();
}

/**
 * File->Close window menu entry
 */
void 

knu'TopLevel::slotClose() (./kdenetwork/knu/knu.cpp:576)

TopLevel::slotClose()
{
  //debug("TopLevel::slotClose()");

  delete this;			// TopLevel has been allocated by new
}

/**
 * Edit->Select all menu entry
 */
void 

knu'TopLevel::slotSelectAll() (./kdenetwork/knu/knu.cpp:587)

TopLevel::slotSelectAll()
{
  pages[currentTab]->selectAll();
}


/**
 * Help->Contents menu entry
 */
void 

knu'TopLevel::slotHelp() (./kdenetwork/knu/knu.cpp:597)

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


/*
 * Called when the user is login out.
 */
void

knu'TopLevel::saveProperties() (./kdenetwork/knu/knu.cpp:607)

TopLevel::saveProperties(KConfig *kc)
{
  kc->writeEntry("CurrentTab", currentTab);
}

void

knu'TopLevel::readProperties() (./kdenetwork/knu/knu.cpp:613)

TopLevel::readProperties(KConfig *kc)
{
  int entry = kc->readNumEntry("CurrentTab", -1);
  if (entry >= 0) {
    //tabCtrl->setCurrentTab(entry);
    // This is not implemented yet (bug somewhere. Qt ?)
    // FIXME
  }
}



/**
 * Application quit function
 */
void