Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

KdeGlWidget Class Reference

#include <kdeglwidget.h>

Inheritance diagram for KdeGlWidget:

Inheritance graph
Collaboration diagram for KdeGlWidget:

Collaboration graph
List of all members.

Public Member Functions

CelestiaCore::CursorShape getCursorShape () const
 KdeGlWidget (QWidget *parent, const char *name, CelestiaCore *core)
void setCursorShape (CelestiaCore::CursorShape)
 ~KdeGlWidget ()

Protected Member Functions

bool handleSpecialKey (QKeyEvent *e, bool down)
void initializeGL ()
virtual void keyPressEvent (QKeyEvent *e)
virtual void keyReleaseEvent (QKeyEvent *e)
virtual void mouseMoveEvent (QMouseEvent *m)
virtual void mousePressEvent (QMouseEvent *m)
virtual void mouseReleaseEvent (QMouseEvent *m)
void paintGL ()
void resizeGL (int w, int h)
virtual void wheelEvent (QWheelEvent *w)

Private Attributes

KActionCollection * actionColl
CelestiaCoreappCore
RendererappRenderer
SimulationappSim
CelestiaCore::CursorShape currentCursor
int lastX
int lastY

Detailed Description

Author:
Christophe Teyssier

Definition at line 35 of file kdeglwidget.h.


Constructor & Destructor Documentation

KdeGlWidget::KdeGlWidget QWidget *  parent,
const char *  name,
CelestiaCore core
 

Definition at line 52 of file kdeglwidget.cpp.

References actionColl, appCore, appRenderer, appSim, currentCursor, CelestiaCore::getRenderer(), CelestiaCore::getSimulation(), lastX, lastY, and CelestiaCore::setCursorHandler().

00053     : QGLWidget( parent, name )
00054 {
00055 
00056     
00057     actionColl = ((KdeApp*)parent)->actionCollection();
00058 
00059     setFocusPolicy(QWidget::ClickFocus);
00060 
00061     appCore = core;
00062     appRenderer=appCore->getRenderer();
00063     appSim = appCore->getSimulation();
00064 
00065     setCursor(QCursor(Qt::CrossCursor));
00066     currentCursor = CelestiaCore::CrossCursor;
00067     setMouseTracking(true);
00068     
00069     appCore->setCursorHandler(this);
00070     
00071     lastX = lastY = 0;
00072 }

KdeGlWidget::~KdeGlWidget  ) 
 

Release allocated resources

Definition at line 79 of file kdeglwidget.cpp.

00080 {
00081 }


Member Function Documentation

CelestiaCore::CursorShape KdeGlWidget::getCursorShape  )  const [virtual]
 

Implements CelestiaCore::CursorHandler.

Definition at line 492 of file kdeglwidget.cpp.

References currentCursor.

00493 {
00494     return currentCursor;
00495 }

bool KdeGlWidget::handleSpecialKey QKeyEvent *  e,
bool  down
[protected]
 

Definition at line 269 of file kdeglwidget.cpp.

References appCore, CelestiaCore::keyDown(), and CelestiaCore::keyUp().

Referenced by keyPressEvent(), and keyReleaseEvent().

00270 {
00271     int k = -1;
00272     switch (e->key())
00273     {
00274     case Key_Up:
00275         k = CelestiaCore::Key_Up;
00276         break;
00277     case Key_Down:
00278         k = CelestiaCore::Key_Down;
00279         break;
00280     case Key_Left:
00281         k = CelestiaCore::Key_Left;
00282         break;
00283     case Key_Right:
00284         k = CelestiaCore::Key_Right;
00285         break;
00286     case Key_Home:
00287         k = CelestiaCore::Key_Home;
00288         break;
00289     case Key_End:
00290         k = CelestiaCore::Key_End;
00291         break;
00292     case Key_F1:
00293         k = CelestiaCore::Key_F1;
00294         break;
00295     case Key_F2:
00296         k = CelestiaCore::Key_F2;
00297         break;
00298     case Key_F3:
00299         k = CelestiaCore::Key_F3;
00300         break;
00301     case Key_F4:
00302         k = CelestiaCore::Key_F4;
00303         break;
00304     case Key_F5:
00305         k = CelestiaCore::Key_F5;
00306         break;
00307     case Key_F6:
00308         k = CelestiaCore::Key_F6;
00309         break;
00310     case Key_F7:
00311         k = CelestiaCore::Key_F7;
00312         break;
00313     case Key_PageDown:
00314         k = CelestiaCore::Key_PageDown;
00315         break;
00316     case Key_PageUp:
00317         k = CelestiaCore::Key_PageUp;
00318         break;
00319 /*    case Key_F10:
00320         if (down)
00321             menuCaptureImage();
00322         break;     */
00323     case Key_0:
00324         if (e->state() & Qt::Keypad) 
00325             k = CelestiaCore::Key_NumPad0;
00326         break;
00327     case Key_1:
00328         if (e->state() & Qt::Keypad)
00329             k = CelestiaCore::Key_NumPad1;
00330         break;
00331     case Key_2:
00332         if (e->state() & Qt::Keypad)
00333             k = CelestiaCore::Key_NumPad2;
00334         break;
00335     case Key_3:
00336         if (e->state() & Qt::Keypad)
00337             k = CelestiaCore::Key_NumPad3;
00338         break;
00339     case Key_4:
00340         if (e->state() & Qt::Keypad)
00341             k = CelestiaCore::Key_NumPad4;
00342         break;
00343     case Key_5:
00344         if (e->state() & Qt::Keypad)
00345             k = CelestiaCore::Key_NumPad5;
00346         break;
00347     case Key_6:
00348         if (e->state() & Qt::Keypad)
00349             k = CelestiaCore::Key_NumPad6;
00350         break;
00351     case Key_7:
00352         if (e->state() & Qt::Keypad)
00353             k = CelestiaCore::Key_NumPad7;
00354         break;
00355     case Key_8:
00356         if (e->state() & Qt::Keypad)
00357             k = CelestiaCore::Key_NumPad8;
00358         break;    
00359     case Key_9:
00360         if (e->state() & Qt::Keypad)
00361             k = CelestiaCore::Key_NumPad9;
00362         break;   
00363     case Key_A:
00364         k = 'A';
00365         break;
00366     case Key_Z:
00367         k = 'Z';
00368         break;
00369     }
00370 
00371     if (k >= 0)
00372     {
00373         int buttons = 0;
00374         if (e->state() & ShiftButton)
00375             buttons |= CelestiaCore::ShiftKey;
00376 
00377         if (down)
00378             appCore->keyDown(k, buttons);
00379         else
00380             appCore->keyUp(k);
00381         return (k < 'A' || k > 'Z');
00382     }
00383     else
00384     {
00385         return false;
00386     }
00387 }

void KdeGlWidget::initializeGL  )  [protected]
 

Set up the OpenGL rendering state, and define display list

Definition at line 99 of file kdeglwidget.cpp.

References appCore, appRenderer, Renderer::getGLContext(), CelestiaCore::getRenderer(), GLContext::getRenderPath(), CelestiaCore::initRenderer(), GLContext::renderPathSupported(), Renderer::setAmbientLightLevel(), CelestiaCore::setFaintest(), CelestiaCore::setHudDetail(), Renderer::setLabelMode(), Renderer::setMinimumFeatureSize(), Renderer::setOrbitMask(), Renderer::setRenderFlags(), GLContext::setRenderPath(), CelestiaCore::setScreenDpi(), CelestiaCore::setTimeZoneBias(), CelestiaCore::setTimeZoneName(), and CelestiaCore::start().

00100 {
00101     if (!appCore->initRenderer())
00102     {
00103 //        cerr << "Failed to initialize renderer.\n";
00104         exit(1);
00105     }
00106 
00107     time_t curtime=time(NULL);
00108     appCore->start((double) curtime / 86400.0 + (double) astro::Date(1970, 1, 1));
00109     localtime(&curtime); /* Only doing this to set timezone as a side effect*/
00110     appCore->setTimeZoneBias(-timezone+3600*daylight);
00111     appCore->setTimeZoneName(tzname[daylight?0:1]);
00112 
00113     KGlobal::config()->setGroup("Preferences");
00114     if (KGlobal::config()->hasKey("RendererFlags"))
00115         appRenderer->setRenderFlags(KGlobal::config()->readNumEntry("RendererFlags"));
00116     if (KGlobal::config()->hasKey("OrbitMask"))
00117         appRenderer->setOrbitMask(KGlobal::config()->readNumEntry("OrbitMask"));
00118     if (KGlobal::config()->hasKey("LabelMode"))
00119         appRenderer->setLabelMode(KGlobal::config()->readNumEntry("LabelMode"));
00120     if (KGlobal::config()->hasKey("AmbientLightLevel"))
00121         appRenderer->setAmbientLightLevel(KGlobal::config()->readDoubleNumEntry("AmbientLightLevel"));
00122     if (KGlobal::config()->hasKey("FaintestVisible"))
00123         appCore->setFaintest(KGlobal::config()->readDoubleNumEntry("FaintestVisible"));
00124     if (KGlobal::config()->hasKey("HudDetail"))
00125         appCore->setHudDetail(KGlobal::config()->readNumEntry("HudDetail"));
00126     if (KGlobal::config()->hasKey("TimeZoneBias"))
00127         appCore->setTimeZoneBias(KGlobal::config()->readNumEntry("TimeZoneBias"));
00128     if (KGlobal::config()->hasKey("MinFeatureSize"))
00129         appRenderer->setMinimumFeatureSize(KGlobal::config()->readNumEntry("MinFeatureSize"));
00130 
00131         
00132     if (!appCore->getRenderer()->getGLContext()->renderPathSupported(GLContext::GLPath_Basic))
00133         ((KToggleAction*)(((KdeApp*)parentWidget())->action("renderPathBasic")))->setEnabled(false);
00134     if (!appCore->getRenderer()->getGLContext()->renderPathSupported(GLContext::GLPath_Multitexture))
00135         ((KToggleAction*)(((KdeApp*)parentWidget())->action("renderPathMultitexture")))->setEnabled(false);
00136     if (!appCore->getRenderer()->getGLContext()->renderPathSupported(GLContext::GLPath_NvCombiner))
00137         ((KToggleAction*)(((KdeApp*)parentWidget())->action("renderPathNvCombiner")))->setEnabled(false);
00138     if (!appCore->getRenderer()->getGLContext()->renderPathSupported(GLContext::GLPath_DOT3_ARBVP))
00139         ((KToggleAction*)(((KdeApp*)parentWidget())->action("renderPathDOT3ARBVP")))->setEnabled(false);
00140     if (!appCore->getRenderer()->getGLContext()->renderPathSupported(GLContext::GLPath_NvCombiner_NvVP))
00141         ((KToggleAction*)(((KdeApp*)parentWidget())->action("renderPathNvCombinerNvVP")))->setEnabled(false);
00142     if (!appCore->getRenderer()->getGLContext()->renderPathSupported(GLContext::GLPath_NvCombiner_ARBVP))
00143         ((KToggleAction*)(((KdeApp*)parentWidget())->action("renderPathNvCombinerARBVP")))->setEnabled(false);
00144     if (!appCore->getRenderer()->getGLContext()->renderPathSupported(GLContext::GLPath_ARBFP_ARBVP))
00145         ((KToggleAction*)(((KdeApp*)parentWidget())->action("renderPathARBFPARBVP")))->setEnabled(false);
00146     if (!appCore->getRenderer()->getGLContext()->renderPathSupported(GLContext::GLPath_NV30))
00147         ((KToggleAction*)(((KdeApp*)parentWidget())->action("renderPathNV30")))->setEnabled(false);
00148     if (!appCore->getRenderer()->getGLContext()->renderPathSupported(GLContext::GLPath_GLSL))
00149         ((KToggleAction*)(((KdeApp*)parentWidget())->action("renderPathGLSL")))->setEnabled(false);
00150 
00151     if (KGlobal::config()->hasKey("RenderPath")) {
00152        GLContext::GLRenderPath path = (GLContext::GLRenderPath)KGlobal::config()->readNumEntry("RenderPath");
00153        if (appCore->getRenderer()->getGLContext()->renderPathSupported(path)) {
00154             appCore->getRenderer()->getGLContext()->setRenderPath(path);
00155        }
00156     }
00157 
00158     switch (appCore->getRenderer()->getGLContext()->getRenderPath()) {
00159     case GLContext::GLPath_Basic:
00160         ((KToggleAction*)(((KdeApp*)parentWidget())->action("renderPathBasic")))->setChecked(true);
00161         break;
00162     case GLContext::GLPath_Multitexture:
00163         ((KToggleAction*)(((KdeApp*)parentWidget())->action("renderPathMultitexture")))->setChecked(true);
00164         break;
00165     case GLContext::GLPath_NvCombiner:
00166         ((KToggleAction*)(((KdeApp*)parentWidget())->action("renderPathNvCombiner")))->setChecked(true);
00167         break;
00168     case GLContext::GLPath_DOT3_ARBVP:
00169         ((KToggleAction*)(((KdeApp*)parentWidget())->action("renderPathDOT3ARBVP")))->setChecked(true);
00170         break;
00171     case GLContext::GLPath_NvCombiner_NvVP:
00172         ((KToggleAction*)(((KdeApp*)parentWidget())->action("renderPathNvCombinerNvVP")))->setChecked(true);
00173         break;
00174     case GLContext::GLPath_NvCombiner_ARBVP:
00175         ((KToggleAction*)(((KdeApp*)parentWidget())->action("renderPathNvCombinerARBVP")))->setChecked(true);
00176         break;
00177     case GLContext::GLPath_ARBFP_ARBVP:
00178         ((KToggleAction*)(((KdeApp*)parentWidget())->action("renderPathARBFPARBVP")))->setChecked(true);
00179         break;
00180     case GLContext::GLPath_NV30:
00181         ((KToggleAction*)(((KdeApp*)parentWidget())->action("renderPathNV30")))->setChecked(true);
00182         break;
00183     case GLContext::GLPath_GLSL:
00184         ((KToggleAction*)(((KdeApp*)parentWidget())->action("renderPathGLSL")))->setChecked(true);
00185         break;
00186     }
00187 
00188     KGlobal::config()->setGroup(0);
00189 
00190     QPaintDeviceMetrics pdm(this);
00191     appCore->setScreenDpi(pdm.logicalDpiY());
00192 
00193 }

void KdeGlWidget::keyPressEvent QKeyEvent *  e  )  [protected, virtual]
 

Definition at line 390 of file kdeglwidget.cpp.

References appCore, CelestiaCore::charEntered(), CelestiaCore::getTextEnterMode(), and handleSpecialKey().

00391 {
00392     static bool inputMode = false;
00393     switch (e->key())
00394     {
00395     case Key_Escape:
00396         appCore->charEntered('\033');
00397         break;
00398     case Key_BackTab:
00399         appCore->charEntered(CelestiaCore::Key_BackTab);
00400         break;
00401     case Key_Q:
00402         if( e->state() == ControlButton )
00403         {
00404             parentWidget()->close();
00405         }
00406         // Intentional fallthrough if *not* Ctrl-Q
00407 
00408     default:
00409         if (appCore->getTextEnterMode() != CelestiaCore::KbNormal || !handleSpecialKey(e, true))
00410         {
00411             if ((e->text() != 0) && (e->text() != ""))
00412             {
00413                 appCore->charEntered(e->text().utf8().data());
00414             }
00415         }
00416     }
00417 }

void KdeGlWidget::keyReleaseEvent QKeyEvent *  e  )  [protected, virtual]
 

Definition at line 420 of file kdeglwidget.cpp.

References handleSpecialKey().

00421 {
00422     handleSpecialKey(e, false);
00423 }

void KdeGlWidget::mouseMoveEvent QMouseEvent *  m  )  [protected, virtual]
 

Definition at line 204 of file kdeglwidget.cpp.

References appCore, lastX, lastY, and CelestiaCore::mouseMove().

00205 {
00206     int x = (int) m->x();
00207     int y = (int) m->y();
00208 
00209     int buttons = 0;
00210     if (m->state() & LeftButton)
00211         buttons |= CelestiaCore::LeftButton;
00212     if (m->state() & MidButton)
00213         buttons |= CelestiaCore::MiddleButton;
00214     if (m->state() & RightButton)
00215         buttons |= CelestiaCore::RightButton;
00216     if (m->state() & ShiftButton)
00217         buttons |= CelestiaCore::ShiftKey;
00218     if (m->state() & ControlButton)
00219         buttons |= CelestiaCore::ControlKey;
00220 
00221     if (buttons != 0) 
00222         appCore->mouseMove(x - lastX, y - lastY, buttons);
00223     else
00224         appCore->mouseMove(x, y);   
00225 
00226     lastX = x;
00227     lastY = y;
00228 }

void KdeGlWidget::mousePressEvent QMouseEvent *  m  )  [protected, virtual]
 

Definition at line 230 of file kdeglwidget.cpp.

References appCore, lastX, lastY, and CelestiaCore::mouseButtonDown().

00231 {
00232     lastX = (int) m->x();
00233     lastY = (int) m->y();
00234 
00235     if (m->button() == LeftButton)
00236         appCore->mouseButtonDown(m->x(), m->y(), CelestiaCore::LeftButton);
00237     else if (m->button() == MidButton)
00238         appCore->mouseButtonDown(m->x(), m->y(), CelestiaCore::MiddleButton);
00239     else if (m->button() == RightButton)
00240         appCore->mouseButtonDown(m->x(), m->y(), CelestiaCore::RightButton);
00241 
00242 }

void KdeGlWidget::mouseReleaseEvent QMouseEvent *  m  )  [protected, virtual]
 

Definition at line 244 of file kdeglwidget.cpp.

References appCore, lastX, lastY, and CelestiaCore::mouseButtonUp().

00245 {
00246     lastX = (int) m->x();
00247     lastY = (int) m->y();
00248     if (m->button() == LeftButton)
00249         appCore->mouseButtonUp(m->x(), m->y(), CelestiaCore::LeftButton);
00250     else if (m->button() == MidButton)
00251         appCore->mouseButtonUp(m->x(), m->y(), CelestiaCore::MiddleButton);
00252     else if (m->button() == RightButton)
00253         appCore->mouseButtonUp(m->x(), m->y(), CelestiaCore::RightButton);
00254 }

void KdeGlWidget::paintGL  )  [protected]
 

Paint the box. The actual openGL commands for drawing the box are performed here.

Definition at line 89 of file kdeglwidget.cpp.

References appCore, and CelestiaCore::draw().

00090 {
00091     appCore->draw();
00092 }

void KdeGlWidget::resizeGL int  w,
int  h
[protected]
 

Definition at line 195 of file kdeglwidget.cpp.

References appCore, and CelestiaCore::resize().

00196 {
00197 /*    QPaintDeviceMetrics pdm(this);
00198     double fov = 2 * atan(h / (pdm.logicalDpiY() / 25.4) / 2. / 400.);
00199     appCore->getSimulation()->getActiveObserver()->setFOV(fov);
00200 */
00201     appCore->resize(w, h);
00202 }

void KdeGlWidget::setCursorShape CelestiaCore::CursorShape   ) 
 

Definition at line 425 of file kdeglwidget.cpp.

References currentCursor.

00426 {
00427     int cursor;
00428     if (currentCursor != shape) 
00429     {
00430         switch(shape) 
00431         {
00432         case CelestiaCore::ArrowCursor:
00433             cursor = Qt::ArrowCursor;
00434             break;
00435         case CelestiaCore::UpArrowCursor:
00436             cursor = Qt::UpArrowCursor;
00437             break;
00438         case CelestiaCore::CrossCursor:
00439             cursor = Qt::CrossCursor;
00440             break;            
00441         case CelestiaCore::InvertedCrossCursor:
00442             cursor = Qt::CrossCursor;
00443             break;            
00444         case CelestiaCore::WaitCursor:
00445             cursor = Qt::WaitCursor;
00446             break;            
00447         case CelestiaCore::BusyCursor:
00448             cursor = Qt::WaitCursor;
00449             break;            
00450         case CelestiaCore::IbeamCursor:
00451             cursor = Qt::IbeamCursor;
00452             break;            
00453         case CelestiaCore::SizeVerCursor:
00454             cursor = Qt::SizeVerCursor;
00455             break;            
00456         case CelestiaCore::SizeHorCursor:
00457             cursor = Qt::SizeHorCursor;
00458             break;            
00459         case CelestiaCore::SizeBDiagCursor:
00460             cursor = Qt::SizeBDiagCursor;
00461             break;            
00462         case CelestiaCore::SizeFDiagCursor:
00463             cursor = Qt::SizeFDiagCursor;
00464             break;            
00465         case CelestiaCore::SizeAllCursor:
00466             cursor = Qt::SizeAllCursor;
00467             break;            
00468         case CelestiaCore::SplitVCursor:
00469             cursor = Qt::SplitVCursor;
00470             break;            
00471         case CelestiaCore::SplitHCursor:
00472             cursor = Qt::SplitHCursor;
00473             break;            
00474         case CelestiaCore::PointingHandCursor:
00475             cursor = Qt::PointingHandCursor;
00476             break;            
00477         case CelestiaCore::ForbiddenCursor:
00478             cursor = Qt::ForbiddenCursor;
00479             break;            
00480         case CelestiaCore::WhatsThisCursor:
00481             cursor = Qt::WhatsThisCursor;
00482             break;            
00483         default:
00484             cursor = Qt::CrossCursor;
00485             break;            
00486         }
00487         setCursor(QCursor(cursor));
00488         currentCursor = shape;
00489     }
00490 }

void KdeGlWidget::wheelEvent QWheelEvent *  w  )  [protected, virtual]
 

Definition at line 256 of file kdeglwidget.cpp.

References appCore, and CelestiaCore::mouseWheel().

00257 {
00258     if (w->delta() > 0 )
00259     {
00260         appCore->mouseWheel(-1.0f, 0);
00261     }
00262     else if (w->delta() < 0)
00263     {
00264         appCore->mouseWheel(1.0f, 0);
00265     }
00266 }


Member Data Documentation

KActionCollection* KdeGlWidget::actionColl [private]
 

Definition at line 67 of file kdeglwidget.h.

Referenced by KdeGlWidget().

CelestiaCore* KdeGlWidget::appCore [private]
 

Definition at line 60 of file kdeglwidget.h.

Referenced by handleSpecialKey(), initializeGL(), KdeGlWidget(), keyPressEvent(), mouseMoveEvent(), mousePressEvent(), mouseReleaseEvent(), paintGL(), resizeGL(), and wheelEvent().

Renderer* KdeGlWidget::appRenderer [private]
 

Definition at line 61 of file kdeglwidget.h.

Referenced by initializeGL(), and KdeGlWidget().

Simulation* KdeGlWidget::appSim [private]
 

Definition at line 62 of file kdeglwidget.h.

Referenced by KdeGlWidget().

CelestiaCore::CursorShape KdeGlWidget::currentCursor [private]
 

Definition at line 65 of file kdeglwidget.h.

Referenced by getCursorShape(), KdeGlWidget(), and setCursorShape().

int KdeGlWidget::lastX [private]
 

Definition at line 63 of file kdeglwidget.h.

Referenced by KdeGlWidget(), mouseMoveEvent(), mousePressEvent(), and mouseReleaseEvent().

int KdeGlWidget::lastY [private]
 

Definition at line 64 of file kdeglwidget.h.

Referenced by KdeGlWidget(), mouseMoveEvent(), mousePressEvent(), and mouseReleaseEvent().


The documentation for this class was generated from the following files:
Generated on Sat Jan 14 22:33:24 2006 for Celestia by  doxygen 1.4.1