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

Class Index

kautorun'TopLevel (./kdemultimedia/kautorun/toplevel.h:30)

class TopLevel : public KDockWindow
{
  Q_OBJECT

public:

  TopLevel();
  ~TopLevel();


protected slots:
    
  void discChanged(DriveState state);
  void discRemoved(); 
  void setup();
  void about();

    
protected:

  void readConfig();

  void runAudio();
  void runData();
  void runMixed();


private:

  QPixmap _discUnknown;
  QPixmap _discData;
  QPixmap _discAudio;

  CDROM   *_cdrom;
  QString _device;

  bool    _openData, _autorunData, _askAutorun;
  QString _openDataCmd;
  QStringList _autorunFiles;

  bool    _openAudio;

  enum MixedMode { Audio, Data, Ask, Ignore };
  
  MixedMode _mixed;

};

kautorun'TopLevel::TopLevel() (./kdemultimedia/kautorun/toplevel.cpp:49)

TopLevel::TopLevel()
  : KDockWindow(), _discUnknown(cd_cool),
    _discData(cd_data), _discAudio(cd_audio), _cdrom(0), _mixed(Ask)
{
  setPixmap(_discUnknown);

  readConfig();

  contextMenu()->insertItem(i18n("Setup..."), this, SLOT(setup()));
  contextMenu()->insertItem(i18n("About..."), this, SLOT(about()));
}



kautorun'TopLevel::readConfig() (./kdemultimedia/kautorun/toplevel.cpp:62)

void TopLevel::readConfig()
{
  KConfig *config = kapp->config();
  config->setGroup("General");
  
  // (re)create the cdrom object
  delete _cdrom;
  _device = config->readEntry("Device", "/dev/cdrom");
  _cdrom = new CDROM(_device);
  connect(_cdrom, SIGNAL(discChanged(DriveState)), this, SLOT(discChanged(DriveState)));
  connect(_cdrom, SIGNAL(discRemoved()), this, SLOT(discRemoved()));

  // how to treat data CDs
  config->setGroup("Data");
  _openData = config->readBoolEntry("Open", true);
  _openDataCmd = config->readEntry("OpenCMD", "kfmclient openURL file:/auto/cdrom");
  _autorunData = config->readBoolEntry("AutoRun", true);
  _askAutorun = config->readBoolEntry("AskAutorun", true);

  // fill our possible autorun files
  _autorunFiles.clear();
  _autorunFiles.append("autorun.sh");
  _autorunFiles.append("autorun");
  _autorunFiles.append(".autorun");

  // how to treat audio CDs
  config->setGroup("Audio");
  _openAudio = config->readBoolEntry("Open", true);

  // how to treat mixed mode CDs
  config->setGroup("Mixed");
  QString mode = config->readEntry("Mode", "Ask");
  if (mode == "Ask")
    _mixed = Ask;
  if (mode == "Data")
    _mixed = Data;
  if (mode == "Audio")
    _mixed = Audio;
  if (mode == "Ignore")
    _mixed = Ignore;
}



kautorun'TopLevel::~TopLevel() (./kdemultimedia/kautorun/toplevel.cpp:105)

TopLevel::~TopLevel()
{
  delete _cdrom;
}



kautorun'TopLevel::discChanged() (./kdemultimedia/kautorun/toplevel.cpp:111)

void TopLevel::discChanged(DriveState state)
{
  if (state == DataCD)
      runData();
  if (state == AudioCD)
      runAudio();
  if (state == MixedCD)
    runMixed();
}



kautorun'TopLevel::discRemoved() (./kdemultimedia/kautorun/toplevel.cpp:122)

void TopLevel::discRemoved()
{
  setPixmap(_discUnknown);
}



kautorun'TopLevel::runData() (./kdemultimedia/kautorun/toplevel.cpp:128)

void TopLevel::runData()
{
  setPixmap(_discData);

  // try to locate autorun.sh
  if (_autorunData)
    {
      QStringList::Iterator it = _autorunFiles.begin();
      for ( ; it != _autorunFiles.end(); ++it )
        {
          QString file("/auto/cdrom/");
          file += *it;
          QFile autorun(file);
          if (!autorun.exists())
            continue;

	  bool run = true;
	  if (_askAutorun)
	    run = QMessageBox::information(0, i18n("Execute %1").arg(*it),
				     i18n("Do you want to execute '%1' on the CD?").arg(*it),
				     i18n("Yes"), i18n("No")) == QMessageBox::Yes;
	  if (run)
	    {
	      QString cmd("sh ");
          cmd += file + "&";
	      system(cmd.local8Bit());

	      // quit here, do not additionally show the files!
	      return;
	    }
	}
    }

  // open the files
  if (_openData)
    system(_openDataCmd + " &");
}



kautorun'TopLevel::runAudio() (./kdemultimedia/kautorun/toplevel.cpp:167)

void TopLevel::runAudio()
{
  setPixmap(_discAudio);

  if (_openAudio)
    _cdrom->play();
}



kautorun'TopLevel::runMixed() (./kdemultimedia/kautorun/toplevel.cpp:176)

void TopLevel::runMixed()
{
  MixedMode todo = _mixed;

  if (todo == Ask)
    {
      int res = QMessageBox::information(0, i18n("Mixed mode CD"),
					 i18n("How do you want to treat this mixed mode CD?"),
					 i18n("Audio"), i18n("Data"), i18n("Ignore"));
      if (res == 0)
	todo = Audio;
      if (res == 1)
	todo = Data;
      if (res == 2)
	todo = Ignore;
    }

  if (todo == Data)
    runData();
  if (todo == Audio)
    runAudio();
}



kautorun'TopLevel::setup() (./kdemultimedia/kautorun/toplevel.cpp:200)

void TopLevel::setup()
{
  SetupDialog dlg;

  // fill in dialog
  dlg._runAudio->setChecked(_openAudio);
  dlg._runData->setChecked(_openData);
  dlg._runDataCmd->setText(_openDataCmd);
  dlg._runAutorun->setChecked(_autorunData);
  dlg._askAutorun->setChecked(_askAutorun);
  dlg._deviceEdit->setText(_device);
  dlg._mixed1->setChecked(_mixed == Audio);
  dlg._mixed2->setChecked(_mixed == Data);
  dlg._mixed3->setChecked(_mixed == Ask);
  dlg._mixed4->setChecked(_mixed == Ignore);

  dlg.openToggle();
  dlg.execToggle();
  
  // execute dialog
  if (dlg.exec() == 1)
    {
      KConfig *config = kapp->config();
      
      config->setGroup("General");
      config->writeEntry("Device", dlg._deviceEdit->text());

      config->setGroup("Data");
      config->writeEntry("Open", dlg._runData->isChecked());
      config->writeEntry("OpenCMD", dlg._runDataCmd->text());
      config->writeEntry("AutoRun", dlg._runAutorun->isChecked());
      config->writeEntry("AskAutoRun", dlg._askAutorun->isChecked());

      config->setGroup("Audio");
      config->writeEntry("Open", dlg._runAudio->isChecked());

      config->setGroup("Mixed");
      if (dlg._mixed1->isChecked())
	config->writeEntry("Mode", "Audio");
      if (dlg._mixed2->isChecked())
	config->writeEntry("Mode", "Data");
      if (dlg._mixed3->isChecked())
	config->writeEntry("Mode", "Ask");
      if (dlg._mixed4->isChecked())
	config->writeEntry("Mode", "Ignore");

      config->sync();
      readConfig();
    }
}



kautorun'TopLevel::about() (./kdemultimedia/kautorun/toplevel.cpp:252)

void TopLevel::about()
{
  KAboutDialog dlg(this);

  dlg.setLogo(_discUnknown);
  dlg.setVersion(i18n("KDE CD AutoRun")+ " 1.0");
  dlg.setCaption(i18n("KDE CD AutoRun"));
  dlg.setAuthor(i18n("Author:")+ " Matthias Hölzer-Klüpfel", "hoelzer@kde.org", "http://www.caldera.de/~mhk", "");
  dlg.adjust();

  dlg.exec();
}