1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the tools applications of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:GPL-EXCEPT$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
21 ** included in the packaging of this file. Please review the following
22 ** information to ensure the GNU General Public License requirements will
23 ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
24 **
25 ** $QT_END_LICENSE$
26 **
27 ****************************************************************************/
28 
29 #ifndef DRIVER_H
30 #define DRIVER_H
31 
32 #include "option.h"
33 #include <qhash.h>
34 #include <qstring.h>
35 #include <qstringlist.h>
36 #include <qtextstream.h>
37 
38 QT_BEGIN_NAMESPACE
39 
40 class QTextStream;
41 class DomUI;
42 class DomWidget;
43 class DomSpacer;
44 class DomLayout;
45 class DomLayoutItem;
46 class DomActionGroup;
47 class DomAction;
48 class DomButtonGroup;
49 
50 class Driver
51 {
52     Q_DISABLE_COPY_MOVE(Driver)
53 public:
54     Driver();
55     virtual ~Driver();
56 
57     // tools
58     bool printDependencies(const QString &fileName);
59     bool uic(const QString &fileName, QTextStream *output = nullptr);
60     bool uic(const QString &fileName, DomUI *ui, QTextStream *output = nullptr);
61 
62     // configuration
output()63     inline QTextStream &output() const { return *m_output; }
option()64     inline Option &option() { return m_option; }
65 
66     // utils
67     static QString headerFileName(const QString &fileName);
68     QString headerFileName() const;
69 
70     static QString normalizedName(const QString &name);
71     static QString qtify(const QString &name);
72     QString unique(const QString &instanceName=QString(),
73                    const QString &className=QString());
74 
75     // symbol table
76     QString findOrInsertWidget(const DomWidget *ui_widget);
77     QString findOrInsertSpacer(const DomSpacer *ui_spacer);
78     QString findOrInsertLayout(const DomLayout *ui_layout);
79     QString findOrInsertLayoutItem(const DomLayoutItem *ui_layoutItem);
80     QString findOrInsertName(const QString &name);
81     QString findOrInsertActionGroup(const DomActionGroup *ui_group);
82     QString findOrInsertAction(const DomAction *ui_action);
83     QString findOrInsertButtonGroup(const DomButtonGroup *ui_group);
84     // Find a group by its non-uniqified name
85     const DomButtonGroup *findButtonGroup(const QString &attributeName) const;
86 
87     const DomWidget *widgetByName(const QString &attributeName) const;
88     QString widgetVariableName(const QString &attributeName) const;
89     const DomActionGroup *actionGroupByName(const QString &attributeName) const;
90     const DomAction *actionByName(const QString &attributeName) const;
91 
useIdBasedTranslations()92     bool useIdBasedTranslations() const { return m_idBasedTranslations; }
setUseIdBasedTranslations(bool u)93     void setUseIdBasedTranslations(bool u) { m_idBasedTranslations = u; }
94 
95 private:
96     template <class DomClass> using DomObjectHash = QHash<const DomClass *, QString>;
97     template <class DomClass> using DomObjectHashConstIt =
98         typename DomObjectHash<DomClass>::ConstIterator;
99 
100     template <class DomClass>
101     DomObjectHashConstIt<DomClass> findByAttributeNameIt(const DomObjectHash<DomClass> &domHash,
102                                                          const QString &name) const;
103     template <class DomClass>
104     const DomClass *findByAttributeName(const DomObjectHash<DomClass> &domHash,
105                                         const QString &name) const;
106     template <class DomClass>
107     QString findOrInsert(DomObjectHash<DomClass> *domHash, const DomClass *dom, const QString &className,
108                          bool isMember = true);
109 
110     Option m_option;
111     QTextStream m_stdout;
112     QTextStream *m_output;
113 
114     // symbol tables
115     DomObjectHash<DomWidget> m_widgets;
116     DomObjectHash<DomSpacer> m_spacers;
117     DomObjectHash<DomLayout> m_layouts;
118     DomObjectHash<DomActionGroup> m_actionGroups;
119     DomObjectHash<DomButtonGroup> m_buttonGroups;
120     DomObjectHash<DomAction> m_actions;
121     QHash<QString, bool> m_nameRepository;
122     bool m_idBasedTranslations = false;
123 };
124 
125 QT_END_NAMESPACE
126 
127 #endif // DRIVER_H
128