• Skip to content
  • Skip to link menu
KDE 4.2 API Reference
  • KDE API Reference
  • kdeedu
  • Sitemap
  • Contact Us
 

kstars

indimenu.cpp

Go to the documentation of this file.
00001 /*  INDI frontend for KStars
00002     Copyright (C) 2003 Jasem Mutlaq (mutlaqja@ikarustech.com)
00003                    Elwood C. Downey
00004 
00005     This application is free software; you can redistribute it and/or
00006     modify it under the terms of the GNU General Public
00007     License as published by the Free Software Foundation; either
00008     version 2 of the License, or (at your option) any later version.
00009 
00010     JM Changelog:
00011     2003-04-28 Used indimenu.c as a template. C --> C++, Xm --> KDE/Qt
00012     2003-05-01 Added tab for devices and a group feature
00013     2003-05-02 Added scrolling area. Most things are rewritten
00014     2003-05-05 Adding INDI Conf
00015     2003-05-06 Drivers XML reader
00016     2003-05-07 Device manager integration
00017     2003-05-21 Full client support
00018 
00019  */
00020 
00021 #include "indimenu.h"
00022 #include "indiproperty.h"
00023 #include "indigroup.h"
00024 #include "indidevice.h"
00025 #include "devicemanager.h"
00026 
00027 #include <stdlib.h>
00028 
00029 #include <QLineEdit>
00030 #include <QTextEdit>
00031 #include <QFrame>
00032 #include <QCheckBox>
00033 #include <QLabel>
00034 #include <QPushButton>
00035 #include <QLayout>
00036 #include <QSocketNotifier>
00037 #include <QDateTime>
00038 #include <QTimer>
00039 
00040 #include <kled.h>
00041 #include <klineedit.h>
00042 #include <kpushbutton.h>
00043 #include <klocale.h>
00044 #include <kmessagebox.h>
00045 #include <kdebug.h>
00046 #include <kcombobox.h>
00047 #include <knuminput.h>
00048 #include <kdialog.h>
00049 #include <ktabwidget.h>
00050 
00051 #include "kstars.h"
00052 #include "indidriver.h"
00053 
00054 /*******************************************************************
00055 ** INDI Menu: Handles communication to server and fetching basic XML
00056 ** data.
00057 *******************************************************************/
00058 INDIMenu::INDIMenu(QWidget *parent) : QWidget(parent, Qt::Window)
00059         /*KDialogBase(KDialogBase::Tabbed, i18n("INDI Control Panel"), 0, KDialogBase::Default, parent, name, false)*/
00060 {
00061 
00062     ksw = (KStars *) parent;
00063 
00064     // managers.setAutoDelete(true);
00065 
00066     mainLayout    = new QVBoxLayout(this);
00067     mainLayout->setMargin(10);
00068     mainLayout->setSpacing(10);
00069 
00070     mainTabWidget = new KTabWidget(this);
00071 
00072     mainLayout->addWidget(mainTabWidget);
00073 
00074     //currentLabel = QString();
00075 
00076     setWindowTitle(i18n("INDI Control Panel"));
00077     setAttribute(Qt::WA_ShowModal, false);
00078     //setModal(false);
00079 
00080     resize( 640, 480);
00081 }
00082 
00083 INDIMenu::~INDIMenu()
00084 {
00085     while ( ! managers.isEmpty() ) delete managers.takeFirst();
00086 }
00087 
00088 /*********************************************************************
00089 ** Traverse the drivers list, check for updated drivers and take
00090 ** appropriate action
00091 *********************************************************************/
00092 void INDIMenu::updateStatus()
00093 {
00094     if (managers.size() == 0)
00095     {
00096         KMessageBox::error(0, i18n("No INDI devices currently running. To run devices, please select devices from the Device Manager in the devices menu."));
00097         return;
00098     }
00099 
00100     show();
00101 }
00102 
00103 DeviceManager* INDIMenu::initDeviceManager(QString inHost, uint inPort, DeviceManager::ManagerMode inMode)
00104   {
00105     DeviceManager *deviceManager;
00106     
00107     deviceManager = new DeviceManager(this, inHost, inPort, inMode);
00108     managers.append(deviceManager);
00109   
00110     connect(deviceManager, SIGNAL(newDevice(INDI_D *)), ksw->indiDriver(), SLOT(enableDevice(INDI_D *)));
00111     connect(deviceManager, SIGNAL(deviceManagerError(DeviceManager *)), this, SLOT(removeDeviceManager(DeviceManager*)));
00112   
00113     return deviceManager;
00114 }
00115   
00116 void INDIMenu::stopDeviceManager(QList<IDevice *> &processed_devices)
00117 {
00118 
00119     foreach(IDevice *device, processed_devices)
00120     {
00121         if (device->deviceManager != NULL)
00122             removeDeviceManager(device->deviceManager);
00123     }
00124 }
00125 
00126 
00127 #if 0
00128 void INDIMenu::processServer(IDevice *device)
00129 {
00130 
00131     DeviceManager *deviceManager;
00132 
00133     // Devices ready to run but not yet managed
00134     if (device->state && device->managed == false && device->mode == DeviceManager::M_LOCAL)
00135       {
00136             deviceManager = new DeviceManager(this);
00137             connect(deviceManager, SIGNAL(newDevice(INDI_D *)), device, SLOT(startDeivceManager(DeviceManager *)));
00138         connect(deviceManager, SIGNAL(deviceManagerError(DeviceManager *)), this, SLOT(removeDeviceManager(DeivceManager*)));
00139             connect(deviceManager, SIGNAL(newDevice(DeviceManager *)), this, SLOT(discoverDevice()));
00140   
00141             dev->indiConnect("localhost", QString::number(device->indiPort));
00142      }
00143      // Devices running and they need to be shutdown
00144      else if (!device->state && device->managed == true && device->mode == DeviceManager::M_LOCAL)
00145      {
00146               device->managed = false;
00147             removeDeviceManager(device->DeviceManager);
00148               return true;
00149   
00150       }
00151   }
00152 
00153 int INDIMenu::processClient(const QString &hostname, const QString &portnumber)
00154 {
00155 
00156     DeviceManager *dev;
00157     INDIDriver *drivers = ksw->indiDriver();
00158 
00159     dev = new DeviceManager(this, managersCounter);
00160     if (dev->indiConnect(hostname, portnumber))
00161     {
00162         managers.append(dev);
00163         if (drivers)
00164         {
00165             connect(dev, SIGNAL(newDevice(DeviceManager *)), drivers, SLOT(updateMenuActions()));
00166             connect(dev, SIGNAL(newDevice(DeviceManager *)), this, SLOT(discoverDevice(DeviceManager *)));
00167         }
00168     }
00169     else
00170     {
00171         delete (dev);
00172         return (-1);
00173     }
00174 
00175     managersCounter++;
00176     return (managersCounter - 1);
00177 }
00178 
00179 void INDIMenu::removeDeviceMgr(int managersID)
00180 {
00181 
00182     for (int i=0; i < managers.size(); i++)
00183     {
00184         if (managersID == managers.at(i)->managersID)
00185         {
00186             delete managers.takeAt(i);
00187             emit driverDisconnected(managersID);
00188         }
00189     }
00190 
00191     //FIXME try to hide unnecessary left over, only leave the msg box
00192     // don't use KDialogBase.. just a regular QWidget will suffice
00193     //if (managers.empty())
00194     //deviceContainer->hide();
00195 }
00196 
00197 #endif 
00198 
00199 void INDIMenu::removeDeviceManager(DeviceManager *deviceManager)
00200 {
00201     if (deviceManager == NULL)
00202     {
00203     kWarning() << "Warning: trying to remove a null device manager detected.";
00204     return;
00205     }
00206 
00207     for (int i=0; i < managers.size(); i++)
00208     {
00209         if (deviceManager == managers.at(i))
00210         {
00211         foreach(INDI_D *device, deviceManager->indi_dev)
00212             ksw->indiDriver()->disableDevice(device);
00213         //ksw->indiDriver()->shutDeviceManager(deviceManager);
00214             delete managers.takeAt(i);
00215         }
00216     }
00217   
00218     ksw->indiDriver()->updateMenuActions();
00219 }
00220 
00221 INDI_D * INDIMenu::findDevice(const QString &deviceName)
00222 {
00223     for (int i=0; i < managers.size(); i++)
00224         for (int j=0; j < managers[i]->indi_dev.size(); j++)
00225             if (managers[i]->indi_dev[j]->name == deviceName)
00226                 return managers[i]->indi_dev[j];
00227 
00228     return NULL;
00229 }
00230 
00231 INDI_D * INDIMenu::findDeviceByLabel(const QString &label)
00232 {
00233     for (int i=0; i < managers.size(); i++)
00234         for (int j=0; j < managers[i]->indi_dev.size(); j++)
00235             if (managers[i]->indi_dev[j]->label == label)
00236                 return managers[i]->indi_dev[j];
00237 
00238     return NULL;
00239 }
00240 
00241 
00242 QString INDIMenu::getUniqueDeviceLabel(const QString &deviceName)
00243 {
00244       int nset=0;
00245   
00246       for (int i=0; i < managers.size(); i++)
00247     {
00248           for (int j=0; j < managers[i]->indi_dev.size(); j++)
00249               if (managers[i]->indi_dev[j]->label.indexOf(deviceName) >= 0)
00250                   nset++;
00251     }
00252   
00253       if (nset)
00254         return (deviceName + QString(" %1").arg(nset+1));
00255       else
00256         return (deviceName);
00257 
00258 }
00259 
00260 #include "indimenu.moc"

kstars

Skip menu "kstars"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • Related Pages

kdeedu

Skip menu "kdeedu"
  • kalzium
  • kanagram
  • kig
  •   lib
  • klettres
  • kstars
  • libkdeedu
  •   keduvocdocument
  •   docs
  •   src
  • parley
  •   stepcore
Generated for kdeedu by doxygen 1.5.7
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal