Driver Class Reference

#include <driver.h>

Collaboration diagram for Driver:

Collaboration graph
[legend]
List of all members.

Detailed Description

Definition at line 42 of file driver.h.

Public Member Functions

 Driver ()
virtual ~Driver ()
bool printDependencies (const QString &fileName)
bool uic (const QString &fileName, QTextStream *output=0)
bool uic (const QString &fileName, DomUI *ui, QTextStream *output=0)
QTextStreamoutput () const
Optionoption ()
void reset ()
QStringList problems ()
void addProblem (const QString &problem)
QString headerFileName () const
QString unique (const QString &instanceName=QString(), const QString &className=QString())
QString findOrInsertWidget (DomWidget *ui_widget)
QString findOrInsertSpacer (DomSpacer *ui_spacer)
QString findOrInsertLayout (DomLayout *ui_layout)
QString findOrInsertLayoutItem (DomLayoutItem *ui_layoutItem)
QString findOrInsertName (const QString &name)
QString findOrInsertActionGroup (DomActionGroup *ui_group)
QString findOrInsertAction (DomAction *ui_action)
bool hasName (const QString &name) const
DomWidgetwidgetByName (const QString &name) const
DomSpacerspacerByName (const QString &name) const
DomLayoutlayoutByName (const QString &name) const
DomActionGroupactionGroupByName (const QString &name) const
DomActionactionByName (const QString &name) const
void insertPixmap (const QString &pixmap)
bool containsPixmap (const QString &pixmap) const

Static Public Member Functions

static QString headerFileName (const QString &fileName)
static QString normalizedName (const QString &name)
static QString qtify (const QString &name)

Private Attributes

Option m_option
QTextStream m_stdout
QTextStreamm_output
QStringList m_problems
QHash< DomWidget *, QStringm_widgets
QHash< DomSpacer *, QStringm_spacers
QHash< DomLayout *, QStringm_layouts
QHash< DomActionGroup *, QStringm_actionGroups
QHash< DomAction *, QStringm_actions
QHash< QString, bool > m_nameRepository
QHash< QString, bool > m_pixmaps


Constructor & Destructor Documentation

Driver::Driver (  ) 

Definition at line 32 of file driver.cpp.

References m_output, and m_stdout.

00033     : m_stdout(stdout, QFile::WriteOnly | QFile::Text)
00034 {
00035     m_output = &m_stdout;
00036 }

Driver::~Driver (  )  [virtual]

Definition at line 38 of file driver.cpp.

00039 {
00040 }


Member Function Documentation

bool Driver::printDependencies ( const QString fileName  ) 

Definition at line 201 of file driver.cpp.

References Option::dependencies, Option::inputFile, m_option, and Uic::printDependencies().

Referenced by main().

00202 {
00203     Q_ASSERT(m_option.dependencies == true);
00204 
00205     m_option.inputFile = fileName;
00206 
00207     Uic tool(this);
00208     return tool.printDependencies();
00209 }

Here is the call graph for this function:

bool Driver::uic ( const QString fileName,
QTextStream output = 0 
)

Definition at line 234 of file driver.cpp.

References QFile::close(), Option::inputFile, QString::isEmpty(), m_option, m_output, QFile::open(), QIODevice::ReadOnly, QFile::setFileName(), QIODevice::Text, Uic::write(), and QIODevice::WriteOnly.

Referenced by main().

00235 {
00236     QFile f;
00237     if (fileName.isEmpty())
00238         f.open(stdin, QIODevice::ReadOnly);
00239     else {
00240         f.setFileName(fileName);
00241         if (!f.open(QIODevice::ReadOnly))
00242             return false;
00243     }
00244 
00245     m_option.inputFile = fileName;
00246 
00247     QTextStream *oldOutput = m_output;
00248     bool deleteOutput = false;
00249 
00250     if (out) {
00251         m_output = out;
00252     } else {
00253         m_output = new QTextStream(stdout, QIODevice::WriteOnly | QFile::Text);
00254         deleteOutput = true;
00255     }
00256 
00257     Uic tool(this);
00258     bool rtn = tool.write(&f);
00259     f.close();
00260 
00261     if (deleteOutput)
00262         delete m_output;
00263 
00264     m_output = oldOutput;
00265 
00266     return rtn;
00267 }

Here is the call graph for this function:

bool Driver::uic ( const QString fileName,
DomUI ui,
QTextStream output = 0 
)

Definition at line 211 of file driver.cpp.

References Option::inputFile, m_option, m_output, m_stdout, and Uic::write().

00212 {
00213     m_option.inputFile = fileName;
00214 
00215     QTextStream *oldOutput = m_output;
00216 
00217     m_output = out != 0 ? out : &m_stdout;
00218 
00219     Uic tool(this);
00220     bool rtn = false;
00221 #ifdef QT_UIC_CPP_GENERATOR
00222     rtn = tool.write(ui);
00223 #else
00224     Q_UNUSED(ui);
00225     fprintf(stderr, "uic: option to generate cpp code not compiled in [%s:%d]\n",
00226             __FILE__, __LINE__);
00227 #endif
00228 
00229     m_output = oldOutput;
00230 
00231     return rtn;
00232 }

Here is the call graph for this function:

QTextStream& Driver::output (  )  const [inline]

Definition at line 54 of file driver.h.

References m_output.

00054 { return *m_output; }

Option& Driver::option (  )  [inline]

Definition at line 55 of file driver.h.

References m_option.

Referenced by main().

00055 { return m_option; }

void Driver::reset (  ) 

Definition at line 269 of file driver.cpp.

References QHash< Key, T >::clear(), QList< T >::clear(), m_actionGroups, m_actions, m_layouts, m_nameRepository, m_option, m_output, m_pixmaps, m_problems, m_spacers, and m_widgets.

00270 {
00271     Q_ASSERT( m_output == 0 );
00272 
00273     m_option = Option();
00274     m_output = 0;
00275     m_problems.clear();
00276 
00277     QStringList m_problems;
00278 
00279     m_widgets.clear();
00280     m_spacers.clear();
00281     m_layouts.clear();
00282     m_actionGroups.clear();
00283     m_actions.clear();
00284     m_nameRepository.clear();
00285     m_pixmaps.clear();
00286 }

Here is the call graph for this function:

QStringList Driver::problems (  )  [inline]

Definition at line 61 of file driver.h.

References m_problems.

00061 { return m_problems; }

void Driver::addProblem ( const QString problem  )  [inline]

Definition at line 62 of file driver.h.

References QList< T >::append(), and m_problems.

00062 { m_problems.append(problem); }

Here is the call graph for this function:

QString Driver::headerFileName ( const QString fileName  )  [static]

Definition at line 179 of file driver.cpp.

References QString::at(), c, headerFileName(), hex(), i, info, isAnsiCCharacter(), QChar::isDigit(), QString::isEmpty(), QString::number(), QString::prepend(), QString::replace(), QString::size(), and QString::toUpper().

Referenced by CPP::WriteInitialization::acceptUI().

00180 {
00181     if (fileName.isEmpty())
00182         return headerFileName(QLatin1String("noname"));
00183 
00184     QFileInfo info(fileName);
00185     QString baseName = info.baseName();
00186     // Transform into a valid C++ identifier
00187     if (!baseName.isEmpty() && baseName.at(0).isDigit())
00188         baseName.prepend(QLatin1Char('_'));
00189     for (int i = 0; i < baseName.size(); ++i) {
00190         QChar c = baseName.at(i);
00191         if (!isAnsiCCharacter(c)) {
00192             // Replace character by its unicode value
00193             QString hex = QString::number(c.unicode(), 16);
00194             baseName.replace(i, 1, "_" + hex + "_");
00195             i += hex.size() + 1;
00196         }
00197     }
00198     return baseName.toUpper() + QLatin1String("_H");
00199 }

Here is the call graph for this function:

QString Driver::headerFileName (  )  const

Definition at line 167 of file driver.cpp.

References Option::inputFile, m_option, name, and Option::outputFile.

Referenced by headerFileName().

00168 {
00169     QString name = m_option.outputFile;
00170 
00171     if (name.isEmpty()) {
00172         name = QLatin1String("ui_"); // ### use ui_ as prefix.
00173         name.append(m_option.inputFile);
00174     }
00175 
00176     return headerFileName(name);
00177 }

QString Driver::normalizedName ( const QString name  )  [static]

Definition at line 105 of file driver.cpp.

References name, and QString::replace().

Referenced by CPP::WriteInitialization::findDeclaration(), and unique().

00106 {
00107     QString result = name;
00108     result.replace(QRegExp(QLatin1String("[^a-zA-Z_0-9]")), QLatin1String("_"));
00109     return result;
00110 }

Here is the call graph for this function:

QString Driver::qtify ( const QString name  )  [static]

Definition at line 141 of file driver.cpp.

References QString::at(), i, QString::length(), QString::mid(), name, and QChar::toLower().

Referenced by unique().

00142 {
00143     QString qname = name;
00144 
00145     if (qname.at(0) == QLatin1Char('Q') || qname.at(0) == QLatin1Char('K'))
00146         qname = qname.mid(1);
00147 
00148     int i=0;
00149     while (i < qname.length()) {
00150         if (qname.at(i).toLower() != qname.at(i))
00151             qname[i] = qname.at(i).toLower();
00152         else
00153             break;
00154 
00155         ++i;
00156     }
00157 
00158     return qname;
00159 }

Here is the call graph for this function:

QString Driver::unique ( const QString instanceName = QString(),
const QString className = QString() 
)

Definition at line 112 of file driver.cpp.

References base, QHash< Key, T >::contains(), QHash< Key, T >::insert(), m_nameRepository, name, normalizedName(), QString::number(), qtify(), and QString::size().

Referenced by findOrInsertAction(), findOrInsertActionGroup(), findOrInsertLayout(), findOrInsertName(), findOrInsertSpacer(), findOrInsertWidget(), CPP::WriteInitialization::initializeListWidget(), CPP::WriteInitialization::initializeQ3IconView(), CPP::WriteInitialization::initializeQ3ListViewItems(), CPP::WriteInitialization::initializeTableWidget(), CPP::WriteInitialization::initializeTreeWidgetItems(), CPP::WriteInitialization::writeBrush(), CPP::WriteInitialization::writeColorGroup(), and CPP::WriteInitialization::writeProperties().

00113 {
00114     QString name;
00115     bool alreadyUsed = false;
00116 
00117     if (instanceName.size()) {
00118         int id = 1;
00119         name = instanceName;
00120         name = normalizedName(name);
00121         QString base = name;
00122 
00123         while (m_nameRepository.contains(name)) {
00124             alreadyUsed = true;
00125             name = base + QString::number(id++);
00126         }
00127     } else if (className.size()) {
00128         name = unique(qtify(className));
00129     } else {
00130         name = unique(QLatin1String("var"));
00131     }
00132 
00133     if (alreadyUsed && className.size()) {
00134         fprintf(stderr, "Warning: name %s is already used\n", qPrintable(instanceName));
00135     }
00136 
00137     m_nameRepository.insert(name, true);
00138     return name;
00139 }

Here is the call graph for this function:

QString Driver::findOrInsertWidget ( DomWidget ui_widget  ) 

Definition at line 42 of file driver.cpp.

References QHash< Key, T >::contains(), QHash< Key, T >::insert(), m_widgets, unique(), and QHash< Key, T >::value().

Referenced by CPP::WriteInitialization::acceptAction(), CPP::WriteInitialization::acceptActionGroup(), CPP::WriteInitialization::acceptActionRef(), CPP::WriteInitialization::acceptLayout(), CPP::WriteInitialization::acceptUI(), CPP::WriteDeclaration::acceptUI(), CPP::WriteInitialization::acceptWidget(), Validator::acceptWidget(), CPP::WriteDeclaration::acceptWidget(), CPP::WriteInitialization::findDeclaration(), findOrInsertLayoutItem(), CPP::WriteInitialization::initializeComboBox(), CPP::WriteInitialization::initializeListWidget(), CPP::WriteInitialization::initializeMenu(), CPP::WriteInitialization::initializeQ3IconView(), CPP::WriteInitialization::initializeQ3ListBox(), CPP::WriteInitialization::initializeQ3ListView(), CPP::WriteInitialization::initializeQ3SqlDataBrowser(), CPP::WriteInitialization::initializeQ3SqlDataTable(), CPP::WriteInitialization::initializeQ3Table(), CPP::WriteInitialization::initializeTableWidget(), CPP::WriteInitialization::initializeTreeWidget(), and CPP::WriteInitialization::writeProperties().

00043 {
00044     if (!m_widgets.contains(ui_widget))
00045         m_widgets.insert(ui_widget, unique(ui_widget->attributeName(), ui_widget->attributeClass()));
00046 
00047     return m_widgets.value(ui_widget);
00048 }

Here is the call graph for this function:

QString Driver::findOrInsertSpacer ( DomSpacer ui_spacer  ) 

Definition at line 50 of file driver.cpp.

References QHash< Key, T >::contains(), QHash< Key, T >::insert(), m_spacers, unique(), and QHash< Key, T >::value().

Referenced by CPP::WriteDeclaration::acceptSpacer(), CPP::WriteInitialization::acceptSpacer(), and findOrInsertLayoutItem().

00051 {
00052     if (!m_spacers.contains(ui_spacer))
00053         m_spacers.insert(ui_spacer, unique(QString(), QLatin1String("QSpacerItem")));
00054 
00055     return m_spacers.value(ui_spacer);
00056 }

Here is the call graph for this function:

QString Driver::findOrInsertLayout ( DomLayout ui_layout  ) 

Definition at line 58 of file driver.cpp.

References QHash< Key, T >::contains(), QHash< Key, T >::insert(), m_layouts, unique(), and QHash< Key, T >::value().

Referenced by CPP::WriteDeclaration::acceptLayout(), CPP::WriteInitialization::acceptLayout(), Validator::acceptLayout(), CPP::WriteInitialization::acceptLayoutItem(), and findOrInsertLayoutItem().

00059 {
00060     if (!m_layouts.contains(ui_layout))
00061         m_layouts.insert(ui_layout, unique(QString(), ui_layout->attributeClass()));
00062 
00063     return m_layouts.value(ui_layout);
00064 }

Here is the call graph for this function:

QString Driver::findOrInsertLayoutItem ( DomLayoutItem ui_layoutItem  ) 

Definition at line 66 of file driver.cpp.

References DomLayoutItem::elementLayout(), DomLayoutItem::elementSpacer(), DomLayoutItem::elementWidget(), findOrInsertLayout(), findOrInsertSpacer(), findOrInsertWidget(), DomLayoutItem::kind(), DomLayoutItem::Layout, DomLayoutItem::Spacer, DomLayoutItem::Unknown, and DomLayoutItem::Widget.

Referenced by Validator::acceptLayoutItem(), and CPP::WriteInitialization::acceptLayoutItem().

00067 {
00068     switch (ui_layoutItem->kind()) {
00069         case DomLayoutItem::Widget:
00070             return findOrInsertWidget(ui_layoutItem->elementWidget());
00071         case DomLayoutItem::Spacer:
00072             return findOrInsertSpacer(ui_layoutItem->elementSpacer());
00073         case DomLayoutItem::Layout:
00074             return findOrInsertLayout(ui_layoutItem->elementLayout());
00075         case DomLayoutItem::Unknown:
00076             break;
00077     }
00078 
00079     Q_ASSERT( 0 );
00080 
00081     return QString();
00082 }

Here is the call graph for this function:

QString Driver::findOrInsertName ( const QString name  ) 

Definition at line 100 of file driver.cpp.

References name, and unique().

Referenced by CPP::WriteInitialization::acceptWidget().

00101 {
00102     return unique(name);
00103 }

Here is the call graph for this function:

QString Driver::findOrInsertActionGroup ( DomActionGroup ui_group  ) 

Definition at line 84 of file driver.cpp.

References QHash< Key, T >::contains(), QHash< Key, T >::insert(), m_actionGroups, unique(), and QHash< Key, T >::value().

Referenced by CPP::WriteInitialization::acceptAction(), CPP::WriteInitialization::acceptActionGroup(), Validator::acceptActionGroup(), and CPP::WriteDeclaration::acceptActionGroup().

00085 {
00086     if (!m_actionGroups.contains(ui_group))
00087         m_actionGroups.insert(ui_group, unique(ui_group->attributeName(), QLatin1String("QActionGroup")));
00088 
00089     return m_actionGroups.value(ui_group);
00090 }

Here is the call graph for this function:

QString Driver::findOrInsertAction ( DomAction ui_action  ) 

Definition at line 92 of file driver.cpp.

References QHash< Key, T >::contains(), QHash< Key, T >::insert(), m_actions, unique(), and QHash< Key, T >::value().

Referenced by CPP::WriteDeclaration::acceptAction(), Validator::acceptAction(), CPP::WriteInitialization::acceptAction(), and CPP::WriteInitialization::findDeclaration().

00093 {
00094     if (!m_actions.contains(ui_action))
00095         m_actions.insert(ui_action, unique(ui_action->attributeName(), QLatin1String("QAction")));
00096 
00097     return m_actions.value(ui_action);
00098 }

Here is the call graph for this function:

bool Driver::hasName ( const QString name  )  const [inline]

Definition at line 82 of file driver.h.

References QHash< Key, T >::contains(), m_nameRepository, and name.

00083     { return m_nameRepository.contains(name); }

Here is the call graph for this function:

DomWidget * Driver::widgetByName ( const QString name  )  const

Definition at line 298 of file driver.cpp.

References QHash< Key, T >::key(), m_widgets, and name.

Referenced by CPP::WriteInitialization::acceptActionRef(), and CPP::WriteInitialization::findDeclaration().

00299 {
00300     return m_widgets.key(name);
00301 }

Here is the call graph for this function:

DomSpacer * Driver::spacerByName ( const QString name  )  const

Definition at line 303 of file driver.cpp.

References QHash< Key, T >::key(), m_spacers, and name.

00304 {
00305     return m_spacers.key(name);
00306 }

Here is the call graph for this function:

DomLayout * Driver::layoutByName ( const QString name  )  const

Definition at line 308 of file driver.cpp.

References QHash< Key, T >::key(), m_layouts, and name.

00309 {
00310     return m_layouts.key(name);
00311 }

Here is the call graph for this function:

DomActionGroup * Driver::actionGroupByName ( const QString name  )  const

Definition at line 313 of file driver.cpp.

References QHash< Key, T >::key(), m_actionGroups, and name.

Referenced by CPP::WriteInitialization::acceptActionRef().

00314 {
00315     return m_actionGroups.key(name);
00316 }

Here is the call graph for this function:

DomAction * Driver::actionByName ( const QString name  )  const

Definition at line 318 of file driver.cpp.

References QHash< Key, T >::key(), m_actions, and name.

Referenced by CPP::WriteInitialization::acceptActionRef(), CPP::WriteInitialization::findDeclaration(), and CPP::WriteInitialization::initializeMenu().

00319 {
00320     return m_actions.key(name);
00321 }

Here is the call graph for this function:

void Driver::insertPixmap ( const QString pixmap  ) 

Definition at line 288 of file driver.cpp.

References QHash< Key, T >::insert(), and m_pixmaps.

Referenced by CPP::WriteIconDeclaration::acceptImage().

00289 {
00290     m_pixmaps.insert(pixmap, true);
00291 }

Here is the call graph for this function:

bool Driver::containsPixmap ( const QString pixmap  )  const

Definition at line 293 of file driver.cpp.

References QHash< Key, T >::contains(), and m_pixmaps.

00294 {
00295     return m_pixmaps.contains(pixmap);
00296 }

Here is the call graph for this function:


Member Data Documentation

Option Driver::m_option [private]

Definition at line 96 of file driver.h.

Referenced by headerFileName(), option(), printDependencies(), reset(), and uic().

QTextStream Driver::m_stdout [private]

Definition at line 97 of file driver.h.

Referenced by Driver(), and uic().

QTextStream* Driver::m_output [private]

Definition at line 98 of file driver.h.

Referenced by Driver(), output(), reset(), and uic().

QStringList Driver::m_problems [private]

Definition at line 100 of file driver.h.

Referenced by addProblem(), problems(), and reset().

QHash<DomWidget*, QString> Driver::m_widgets [private]

Definition at line 103 of file driver.h.

Referenced by findOrInsertWidget(), reset(), and widgetByName().

QHash<DomSpacer*, QString> Driver::m_spacers [private]

Definition at line 104 of file driver.h.

Referenced by findOrInsertSpacer(), reset(), and spacerByName().

QHash<DomLayout*, QString> Driver::m_layouts [private]

Definition at line 105 of file driver.h.

Referenced by findOrInsertLayout(), layoutByName(), and reset().

QHash<DomActionGroup*, QString> Driver::m_actionGroups [private]

Definition at line 106 of file driver.h.

Referenced by actionGroupByName(), findOrInsertActionGroup(), and reset().

QHash<DomAction*, QString> Driver::m_actions [private]

Definition at line 107 of file driver.h.

Referenced by actionByName(), findOrInsertAction(), and reset().

QHash<QString, bool> Driver::m_nameRepository [private]

Definition at line 108 of file driver.h.

Referenced by hasName(), reset(), and unique().

QHash<QString, bool> Driver::m_pixmaps [private]

Definition at line 109 of file driver.h.

Referenced by containsPixmap(), insertPixmap(), and reset().


The documentation for this class was generated from the following files:
Generated on Thu Mar 15 14:57:25 2007 for Qt 4.2 User's Guide by  doxygen 1.5.1