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

viewmode.cpp

Go to the documentation of this file.
00001 /*******************************************************************************
00002  *                                                                             *
00003  *   Copyright (C) 2003  Erik Sjolund,  (<html>Erik Sj&ouml;lund</html>)       *
00004  *                       Center for Genomics and Bioinformatics,               *
00005  *                       Karolinska Institutet,                                *
00006  *                       Stockholm,                                            *
00007  *                       Sweden                                                *
00008  *                                                                             *
00009  *  Author: Erik Sjolund                                                       *
00010  *  Email: erik.sjolund@adivo.se                                               *
00011  *                                                                             *
00012  *******************************************************************************
00013  */
00014 #include "viewmode.h"
00015 #include "trapperconf.h"
00016 #include <qdom.h>
00017 #include <qstring.h>
00018 #include <qmessagebox.h>
00019 #include "trapperdoc.h"
00020 #include "generalmaker.h"
00021 
00022 #include <iostream>
00023 using namespace std;
00024 
00025 
00026 Layer::Layer( const QDomElement & elem, SecItDict & secItDict )
00027 {
00028 //     cerr << "in layer ctor" << endl;
00029     featureList.setAutoDelete( true );
00030 
00031     QString heightStr = elem.attribute( "height","");
00032     height = heightStr.toInt();
00033 //     cerr << "height in Layer ctor = " << height << endl;
00034     QDomNode node = elem.firstChild();
00035     while ( !node.isNull() )
00036     {
00037         if ( node.isElement() && node.nodeName() == "feature" )
00038         {
00039             QDomElement featureElem = node.toElement();
00040             //featureName = "features/";
00041             //            std::string featureName = std::string(featureElem.attribute("name","").ascii() );
00042             QString featureName = featureElem.attribute("name","");
00043             //  GeneralData * dummy = GeneralMaker::newData( featureName );
00044 //             cerr << "feature=" << featureName << endl;
00045 
00046             Database::SecondaryIterator<FeatureData> * it = secItDict[featureName];
00047             if ( it )
00048             {
00049                 featureList.prepend( it );
00050             }
00051             else
00052             {
00053                 QMessageBox::warning(
00054                     NULL, "Unknown feature specified",
00055                     QString( "The feature \n\'%1\' specified in configuration file\n is not of unknown type." ).
00056                     arg( featureName ),
00057                     "&Ok"  );
00058             }
00059         }
00060         node = node.nextSibling();
00061     }
00062 }
00063 
00064 TR_PIX Layer::heightInPix( TR_PIX totalHeight )
00065 {
00066     //  cerr <<"totalheight="<<totalHeight<< endl;
00067     // cerr <<"height="<<height<< endl;
00068     TR_PIX res = ( int ) (( height * totalHeight )/ 100 );
00069     // cerr <<"res="<<res<<endl;
00070     return res;
00071 }
00072 
00073 ViewMode::ViewMode( QDomElement & elem, SecItDict & secItDict)
00074 {
00075     layerList.setAutoDelete( true );
00076 
00077     //            QDomElement elem = node.toElement();
00078     m_name = elem.attribute("name","");
00079     Q_ASSERT((elem.hasAttribute("name")  && elem.hasAttribute("zoom")));
00080     QString zoomStr = elem.attribute( "zoom","");
00081     zoom = zoomStr.toInt();
00082     //            name = elem.attribute("name", "");
00083 
00084     QString shortcut  = elem.attribute("shortcut", "");
00085     //QKeySequence keyS( shortcut );
00086 
00087 
00088 
00089     QDomNode node2 = elem.firstChild();
00090     while ( !node2.isNull() )
00091     {
00092         if ( node2.isElement() && node2.nodeName() == "layer"  )
00093         {
00094             QDomElement layerElem = node2.toElement();
00095             Q_ASSERT((layerElem.hasAttribute("height")  && layerElem.hasAttribute("allowOverlapStr")));
00096             layerList.append( new Layer( layerElem, secItDict ) );
00097         }
00098         node2 = node2.nextSibling();
00099     }
00100 }
00101 
00102 QString ViewMode::name()
00103 {
00104     return m_name;
00105 
00106 }
00107 
00108 
00109 ViewModes::ViewModes( const QString & viewMode, TrapperDoc * doc )
00110 {
00111   secItDict.setAutoDelete( true );
00112   
00113   
00114   m_currentViewMode = NULL;
00115   initFeatureIterators(doc);
00116   TrapperConf * conf = TrapperConf::instance();
00117   QDomElement confElem = conf->viewModeConf();
00118   
00119   QDomNode node = confElem.firstChild();
00120   while ( !node.isNull() )
00121     {
00122       if ( node.isElement() && node.nodeName() == "modeView" )
00123         {
00124           QDomElement e = node.toElement();
00125           ViewMode * m = new ViewMode( e, secItDict );
00126           viewModeDict.insert( node.toElement().attribute("name",""), m );
00127         }
00128       node = node.nextSibling();
00129     }
00130   setMode(viewMode);
00131 }
00132 
00133 void  ViewModes::setMode(QString mode)
00134 {
00135   cerr<<"******************* mode: "<<mode<<endl;
00136   m_currentViewMode = viewModeDict[mode];
00137   Q_CHECK_PTR( m_currentViewMode );
00138 }
00139 
00140 
00141 ViewMode * ViewModes::currentViewMode()
00142 {
00143     return m_currentViewMode;
00144 }
00145 void ViewModes::initFeatureIterators( TrapperDoc * doc )
00146 {
00147     std::list< std::string > aList = GeneralMaker::listRegistered();
00148     for ( std::list< std::string >::iterator it = aList.begin();  it != aList.end(); ++it )
00149     {
00150         GeneralData * data = GeneralMaker::newData( *it );
00151         FeatureData * fdata = dynamic_cast<FeatureData *>( data );
00152         // fdata is just used to see that the registered string is corresponding to
00153         // a feature
00154         if ( fdata )
00155         {
00156 
00157             Database::SecondaryIterator<FeatureData> * secIt =
00158                 new Database::SecondaryIterator<FeatureData>( "readRecno", doc, it->c_str() );
00159             secItDict.insert(it->c_str(), secIt);
00160         }
00161 
00162         delete data;
00163         data = NULL;
00164     }
00165 }
00166 

Generated on Fri Mar 17 17:44:24 2006 for trapper by  doxygen 1.4.4