1 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <html lang=
"et" xmlns=
"http://www.w3.org/1999/xhtml" xml:
lang=
"et">
5 <meta http-equiv=
"CONTENT-TYPE" content=
"text/html; charset=utf-8" />
6 <title>eVaf Tutorial -
10 - GUI Module
</title>
7 <meta name=
"Author" content=
"Enar Väikene" />
8 <meta name=
"description" content=
"eVaf Tutorial" />
9 <meta name=
"keywords" content=
"evaf c++ application development framework tutorial password generator" />
10 <link rel=
"StyleSheet" href=
"evaf.css" type=
"text/css" media=
"all" />
11 <link rel=
"StyleSheet" href=
"highlight.css" type=
"text/css" media=
"all" />
16 <h1>eVaf Tutorial
</h1>
18 <h2>10 - GUI Module
</h2>
20 <p>Create the
<tt>gui.cpp
</tt> file in the
<tt>src/apps/PswGen/GUI
</tt> directory:
</p>
22 <pre class=
"hl"><span class=
"hl com">/**
</span>
23 <span class=
"hl com"> *
@file PswGen/GUI/gui.cpp
</span>
24 <span class=
"hl com"> */
</span>
26 <span class=
"hl ppc">#include
</span> <span class=
"hl pps">"gui.h
"</span><span class=
"hl ppc"></span>
28 <span class=
"hl ppc">#include
<QtGui
></span></pre>
30 <p>Copy version information files from the
<tt>Storage
</tt> module:
</p>
32 <pre>evaf/src/apps/PswGen/GUI $
<code>cp ../Storage/version.{h,rc} .
</code></pre>
34 <p>Modify the
<tt>version.h
</tt> file:
</p>
36 <pre class=
"hl"><span class=
"hl com">/**
</span>
37 <span class=
"hl com"> *
@file PswGen/GUI/version.h
</span>
38 <span class=
"hl com"> */
</span>
40 <span class=
"hl ppc">#ifndef __PSWGEN_GUI_VERSION_H
</span>
41 <span class=
"hl ppc"># define __PSWGEN_GUI_VERSION_H
</span>
43 <span class=
"hl ppc">#include
<version_rc.h
></span>
45 <span class=
"hl com">/**
</span>
46 <span class=
"hl com"> * Module/library version number in the form major,minor,release,build
</span>
47 <span class=
"hl com"> */
</span>
48 <span class=
"hl ppc">#define VER_FILE_VERSION
0,
1,
1,
1</span>
50 <span class=
"hl com">/**
</span>
51 <span class=
"hl com"> * Module/library version number in the string format (shall end with \
0)
</span>
52 <span class=
"hl com"> */
</span>
53 <span class=
"hl ppc">#define VER_FILE_VERSION_STR
</span> <span class=
"hl pps">"0.1.1.2\
0"</span><span class=
"hl ppc"></span>
55 <span class=
"hl com">/**
</span>
56 <span class=
"hl com"> * Module/library name (shall end with \
0)
</span>
57 <span class=
"hl com"> */
</span>
58 <span class=
"hl ppc">#define VER_MODULE_NAME_STR
</span> <span class=
"hl pps">"PswGui\
0"</span><span class=
"hl ppc"></span>
60 <span class=
"hl com">/**
</span>
61 <span class=
"hl com"> * Module type (see version_rc.h for all the types)
</span>
62 <span class=
"hl com"> */
</span>
63 <span class=
"hl ppc">#define VER_MODULE_TYPE MT_GENERIC
</span>
65 <span class=
"hl com">/**
</span>
66 <span class=
"hl com"> * Module type in the string format (see version_rc for all the types)
</span>
67 <span class=
"hl com"> */
</span>
68 <span class=
"hl ppc">#define VER_MODULE_TYPE_STR MT_GENERIC
</span>
70 <span class=
"hl com">/**
</span>
71 <span class=
"hl com"> * Original file name for windows (shall end with \
0)
</span>
72 <span class=
"hl com"> */
</span>
73 <span class=
"hl ppc">#define VER_ORIGINAL_FILE_NAME_STR
</span> <span class=
"hl pps">"PswGui.dll\
0"</span><span class=
"hl ppc"></span>
75 <span class=
"hl com">/**
</span>
76 <span class=
"hl com"> * Description of the module/library (shall end with \
0)
</span>
77 <span class=
"hl com"> */
</span>
78 <span class=
"hl ppc">#define VER_FILE_DESCRIPTION_STR
</span> <span class=
"hl pps">"User interface for the PswGen application.\
0"</span><span class=
"hl ppc"></span>
80 <span class=
"hl ppc">#endif
</span> <span class=
"hl slc">// version.h
</span><span class=
"hl ppc"></span></pre>
82 <p>Include the
<tt>version.h
</tt> header file in the
<tt>gui.cpp
</tt> file and export version information:
</p>
84 <pre class=
"hl"><span class=
"hl ppc">#include
</span> <span class=
"hl pps">"version.h
"</span><span class=
"hl ppc"></span>
85 <span class=
"hl kwd">VER_EXPORT_VERSION_INFO
</span><span class=
"hl opt">()
</span></pre>
87 <p>Use the
<tt>Q_EXPORT_PLUGIN2()
</tt> macro to make it a Qt plugin:
</p>
89 <pre class=
"hl"><span class=
"hl kwd">Q_EXPORT_PLUGIN2
</span><span class=
"hl opt">(
</span>VER_MODULE_NAME_STR
<span class=
"hl opt">,
</span> eVaf
<span class=
"hl opt">::
</span>PswGen
<span class=
"hl opt">::
</span>GUI
<span class=
"hl opt">::
</span>Module
<span class=
"hl opt">)
</span></pre>
91 <p>The main job of setting up the user interface is done in the
<tt>init()
</tt> function and our constructor and destructor are
94 <pre class=
"hl">Module
<span class=
"hl opt">::
</span><span class=
"hl kwd">Module
</span><span class=
"hl opt">()
</span>
95 <span class=
"hl opt">:
</span> Plugins
<span class=
"hl opt">::
</span><span class=
"hl kwd">iPlugin
</span><span class=
"hl opt">()
</span>
96 <span class=
"hl opt">,
</span> <span class=
"hl kwd">mReady
</span><span class=
"hl opt">(
</span><span class=
"hl kwa">false
</span><span class=
"hl opt">)
</span>
97 <span class=
"hl opt">,
</span> <span class=
"hl kwd">mGenerator
</span><span class=
"hl opt">(
</span><span class=
"hl num">0</span><span class=
"hl opt">)
</span>
98 <span class=
"hl opt">,
</span> <span class=
"hl kwd">mStorage
</span><span class=
"hl opt">(
</span><span class=
"hl num">0</span><span class=
"hl opt">)
</span>
99 <span class=
"hl opt">{
</span>
100 <span class=
"hl kwd">setObjectName
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">QString
</span><span class=
"hl opt">(
</span><span class=
"hl str">"%
1.%
2"</span><span class=
"hl opt">).
</span><span class=
"hl kwd">arg
</span><span class=
"hl opt">(
</span>VER_MODULE_NAME_STR
<span class=
"hl opt">).
</span><span class=
"hl kwd">arg
</span><span class=
"hl opt">(
</span>__FUNCTION__
<span class=
"hl opt">));
</span>
102 <span class=
"hl kwd">EVAF_INFO
</span><span class=
"hl opt">(
</span><span class=
"hl str">"%s created
"</span><span class=
"hl opt">,
</span> <span class=
"hl kwd">qPrintable
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">objectName
</span><span class=
"hl opt">()));
</span>
103 <span class=
"hl opt">}
</span>
105 Module
<span class=
"hl opt">::~
</span><span class=
"hl kwd">Module
</span><span class=
"hl opt">()
</span>
106 <span class=
"hl opt">{
</span>
107 <span class=
"hl kwd">EVAF_INFO
</span><span class=
"hl opt">(
</span><span class=
"hl str">"%s destroyed
"</span><span class=
"hl opt">,
</span> <span class=
"hl kwd">qPrintable
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">objectName
</span><span class=
"hl opt">()));
</span>
108 <span class=
"hl opt">}
</span></pre>
110 <p>The
<tt>init()
</tt> function:
</p>
113 <li>Queries and stores interfaces implemented in other modules. The
<tt>iGenerator
</tt> interface must be implemented;
114 the
<tt>iStorage
</tt> interface is optional and we can work without it.
</li>
115 <li>Gets the main window interface
<tt>iSdiWindow
</tt>.
</li>
116 <li>Creates the layout for the main window widget and adds our widgets to the layout.
</li>
117 <li>Connects signals on widgets to slots in this class.
</li>
118 <li>Uses actions
<tt>QAction
</tt> to add keyboard shortcuts --
<tt>Enter
</tt> key generates a password and
<tt>Esc
</tt> key
119 quits the application.
</li>
120 <li>Sets the
<tt>mReady
</tt> flag to true when all this is done.
</li>
123 <pre class=
"hl"><span class=
"hl kwb">bool
</span> Module
<span class=
"hl opt">::
</span><span class=
"hl kwd">init
</span><span class=
"hl opt">(
</span>QString
<span class=
"hl kwb">const
</span> <span class=
"hl opt">&</span> args
<span class=
"hl opt">)
</span>
124 <span class=
"hl opt">{
</span>
125 <span class=
"hl kwd">Q_UNUSED
</span><span class=
"hl opt">(
</span>args
<span class=
"hl opt">);
</span>
127 <span class=
"hl slc">// Get the iGenerator interface
</span>
128 <span class=
"hl kwd">EVAF_TEST_X
</span><span class=
"hl opt">((
</span>mGenerator
<span class=
"hl opt">=
</span> evafQueryInterface
<span class=
"hl opt"><</span>PswGen
<span class=
"hl opt">::
</span>iGenerator
<span class=
"hl opt">>(
</span><span class=
"hl str">"iGenerator
"</span><span class=
"hl opt">)),
</span> <span class=
"hl str">"No iGenerator interface
"</span><span class=
"hl opt">);
</span>
130 <span class=
"hl slc">// Get the iStorage interface (can be null)
</span>
131 mStorage
<span class=
"hl opt">=
</span> evafQueryInterface
<span class=
"hl opt"><</span>PswGen
<span class=
"hl opt">::
</span>iStorage
<span class=
"hl opt">>(
</span><span class=
"hl str">"iStorage
"</span><span class=
"hl opt">);
</span>
132 <span class=
"hl kwa">if
</span> <span class=
"hl opt">(!
</span>mStorage
<span class=
"hl opt">)
</span>
133 <span class=
"hl kwd">EVAF_WARNING
</span><span class=
"hl opt">(
</span><span class=
"hl str">"No iStorage interface
"</span><span class=
"hl opt">);
</span>
135 <span class=
"hl slc">// Get the main window interface and fill it with widgets
</span>
136 SdiWindow
<span class=
"hl opt">::
</span>iSdiWindow
<span class=
"hl opt">*
</span> win
<span class=
"hl opt">=
</span> evafQueryInterface
<span class=
"hl opt"><</span>SdiWindow
<span class=
"hl opt">::
</span>iSdiWindow
<span class=
"hl opt">>(
</span><span class=
"hl str">"iSdiWindow
"</span><span class=
"hl opt">);
</span>
137 <span class=
"hl kwd">EVAF_TEST_X
</span><span class=
"hl opt">(
</span>win
<span class=
"hl opt">,
</span> <span class=
"hl str">"No iSdiWindow interface
"</span><span class=
"hl opt">);
</span>
139 QVBoxLayout
<span class=
"hl opt">*
</span> v
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> QVBoxLayout
<span class=
"hl opt">;
</span>
140 win
<span class=
"hl opt">-
></span><span class=
"hl kwd">widget
</span><span class=
"hl opt">()-
></span><span class=
"hl kwd">setLayout
</span><span class=
"hl opt">(
</span>v
<span class=
"hl opt">);
</span>
142 QGridLayout
<span class=
"hl opt">*
</span> g
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> QGridLayout
<span class=
"hl opt">;
</span>
143 v
<span class=
"hl opt">-
></span><span class=
"hl kwd">addLayout
</span><span class=
"hl opt">(
</span>g
<span class=
"hl opt">);
</span>
144 g
<span class=
"hl opt">-
></span><span class=
"hl kwd">setColumnStretch
</span><span class=
"hl opt">(
</span><span class=
"hl num">2</span><span class=
"hl opt">,
</span> <span class=
"hl num">2</span><span class=
"hl opt">);
</span>
146 QLabel
<span class=
"hl opt">*
</span> l
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> <span class=
"hl kwd">QLabel
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">tr
</span><span class=
"hl opt">(
</span><span class=
"hl str">"Master
&password:
"</span><span class=
"hl opt">,
</span> VER_MODULE_NAME_STR
<span class=
"hl opt">));
</span>
147 l
<span class=
"hl opt">-
></span><span class=
"hl kwd">setAlignment
</span><span class=
"hl opt">(
</span>Qt
<span class=
"hl opt">::
</span>AlignRight
<span class=
"hl opt">);
</span>
148 g
<span class=
"hl opt">-
></span><span class=
"hl kwd">addWidget
</span><span class=
"hl opt">(
</span>l
<span class=
"hl opt">,
</span> <span class=
"hl num">0</span><span class=
"hl opt">,
</span> <span class=
"hl num">0</span><span class=
"hl opt">);
</span>
150 wMasterPassword
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> QLineEdit
<span class=
"hl opt">;
</span>
151 l
<span class=
"hl opt">-
></span><span class=
"hl kwd">setBuddy
</span><span class=
"hl opt">(
</span>wMasterPassword
<span class=
"hl opt">);
</span>
152 <span class=
"hl kwd">connect
</span><span class=
"hl opt">(
</span>wMasterPassword
<span class=
"hl opt">,
</span> <span class=
"hl kwd">SIGNAL
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">textChanged
</span><span class=
"hl opt">(
</span>QString
<span class=
"hl opt">)),
</span> <span class=
"hl kwa">this
</span><span class=
"hl opt">,
</span> <span class=
"hl kwd">SLOT
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">textChanged
</span><span class=
"hl opt">(
</span>QString
<span class=
"hl opt">)));
</span>
153 wMasterPassword
<span class=
"hl opt">-
></span><span class=
"hl kwd">setEchoMode
</span><span class=
"hl opt">(
</span>QLineEdit
<span class=
"hl opt">::
</span>Password
<span class=
"hl opt">);
</span>
154 g
<span class=
"hl opt">-
></span><span class=
"hl kwd">addWidget
</span><span class=
"hl opt">(
</span>wMasterPassword
<span class=
"hl opt">,
</span> <span class=
"hl num">0</span><span class=
"hl opt">,
</span> <span class=
"hl num">1</span><span class=
"hl opt">,
</span> <span class=
"hl num">1</span><span class=
"hl opt">,
</span> <span class=
"hl num">2</span><span class=
"hl opt">);
</span>
156 l
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> <span class=
"hl kwd">QLabel
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">tr
</span><span class=
"hl opt">(
</span><span class=
"hl str">"Web site or application
&name:
"</span><span class=
"hl opt">,
</span> VER_MODULE_NAME_STR
<span class=
"hl opt">));
</span>
157 l
<span class=
"hl opt">-
></span><span class=
"hl kwd">setAlignment
</span><span class=
"hl opt">(
</span>Qt
<span class=
"hl opt">::
</span>AlignRight
<span class=
"hl opt">);
</span>
158 g
<span class=
"hl opt">-
></span><span class=
"hl kwd">addWidget
</span><span class=
"hl opt">(
</span>l
<span class=
"hl opt">,
</span> <span class=
"hl num">1</span><span class=
"hl opt">,
</span> <span class=
"hl num">0</span><span class=
"hl opt">);
</span>
160 wName
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> QLineEdit
<span class=
"hl opt">;
</span>
161 l
<span class=
"hl opt">-
></span><span class=
"hl kwd">setBuddy
</span><span class=
"hl opt">(
</span>wName
<span class=
"hl opt">);
</span>
162 <span class=
"hl kwa">if
</span> <span class=
"hl opt">(
</span>mStorage
<span class=
"hl opt">) {
</span>
163 QCompleter
<span class=
"hl opt">*
</span> completer
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> <span class=
"hl kwd">QCompleter
</span><span class=
"hl opt">(
</span>wName
<span class=
"hl opt">);
</span>
164 completer
<span class=
"hl opt">-
></span><span class=
"hl kwd">setModel
</span><span class=
"hl opt">(
</span>mStorage
<span class=
"hl opt">-
></span><span class=
"hl kwd">autoCompletionModel
</span><span class=
"hl opt">());
</span>
165 completer
<span class=
"hl opt">-
></span><span class=
"hl kwd">setCompletionMode
</span><span class=
"hl opt">(
</span>QCompleter
<span class=
"hl opt">::
</span>InlineCompletion
<span class=
"hl opt">);
</span>
166 wName
<span class=
"hl opt">-
></span><span class=
"hl kwd">setCompleter
</span><span class=
"hl opt">(
</span>completer
<span class=
"hl opt">);
</span>
167 <span class=
"hl opt">}
</span>
168 <span class=
"hl kwd">connect
</span><span class=
"hl opt">(
</span>wName
<span class=
"hl opt">,
</span> <span class=
"hl kwd">SIGNAL
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">textChanged
</span><span class=
"hl opt">(
</span>QString
<span class=
"hl opt">)),
</span> <span class=
"hl kwa">this
</span><span class=
"hl opt">,
</span> <span class=
"hl kwd">SLOT
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">textChanged
</span><span class=
"hl opt">(
</span>QString
<span class=
"hl opt">)));
</span>
169 g
<span class=
"hl opt">-
></span><span class=
"hl kwd">addWidget
</span><span class=
"hl opt">(
</span>wName
<span class=
"hl opt">,
</span> <span class=
"hl num">1</span><span class=
"hl opt">,
</span> <span class=
"hl num">1</span><span class=
"hl opt">,
</span> <span class=
"hl num">1</span><span class=
"hl opt">,
</span> <span class=
"hl num">2</span><span class=
"hl opt">);
</span>
170 win
<span class=
"hl opt">-
></span><span class=
"hl kwd">widget
</span><span class=
"hl opt">()-
></span><span class=
"hl kwd">setFocusProxy
</span><span class=
"hl opt">(
</span>wName
<span class=
"hl opt">);
</span>
172 l
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> <span class=
"hl kwd">QLabel
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">tr
</span><span class=
"hl opt">(
</span><span class=
"hl str">"&Length of the password:
"</span><span class=
"hl opt">,
</span> VER_MODULE_NAME_STR
<span class=
"hl opt">));
</span>
173 l
<span class=
"hl opt">-
></span><span class=
"hl kwd">setAlignment
</span><span class=
"hl opt">(
</span>Qt
<span class=
"hl opt">::
</span>AlignRight
<span class=
"hl opt">);
</span>
174 g
<span class=
"hl opt">-
></span><span class=
"hl kwd">addWidget
</span><span class=
"hl opt">(
</span>l
<span class=
"hl opt">,
</span> <span class=
"hl num">2</span><span class=
"hl opt">,
</span> <span class=
"hl num">0</span><span class=
"hl opt">);
</span>
176 wLength
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> QSpinBox
<span class=
"hl opt">;
</span>
177 l
<span class=
"hl opt">-
></span><span class=
"hl kwd">setBuddy
</span><span class=
"hl opt">(
</span>wLength
<span class=
"hl opt">);
</span>
178 wLength
<span class=
"hl opt">-
></span><span class=
"hl kwd">setRange
</span><span class=
"hl opt">(
</span><span class=
"hl num">0</span><span class=
"hl opt">,
</span> mGenerator
<span class=
"hl opt">-
></span><span class=
"hl kwd">maxLength
</span><span class=
"hl opt">());
</span>
179 wLength
<span class=
"hl opt">-
></span><span class=
"hl kwd">setValue
</span><span class=
"hl opt">(
</span>DefaultPasswordLength
<span class=
"hl opt">);
</span>
180 wLength
<span class=
"hl opt">-
></span><span class=
"hl kwd">setSpecialValueText
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">tr
</span><span class=
"hl opt">(
</span><span class=
"hl str">"Maximum
"</span><span class=
"hl opt">,
</span> VER_MODULE_NAME_STR
<span class=
"hl opt">));
</span>
181 g
<span class=
"hl opt">-
></span><span class=
"hl kwd">addWidget
</span><span class=
"hl opt">(
</span>wLength
<span class=
"hl opt">,
</span> <span class=
"hl num">2</span><span class=
"hl opt">,
</span> <span class=
"hl num">1</span><span class=
"hl opt">);
</span>
183 l
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> <span class=
"hl kwd">QLabel
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">tr
</span><span class=
"hl opt">(
</span><span class=
"hl str">"Password:
"</span><span class=
"hl opt">));
</span>
184 l
<span class=
"hl opt">-
></span><span class=
"hl kwd">setAlignment
</span><span class=
"hl opt">(
</span>Qt
<span class=
"hl opt">::
</span>AlignRight
<span class=
"hl opt">);
</span>
185 g
<span class=
"hl opt">-
></span><span class=
"hl kwd">addWidget
</span><span class=
"hl opt">(
</span>l
<span class=
"hl opt">,
</span> <span class=
"hl num">3</span><span class=
"hl opt">,
</span> <span class=
"hl num">0</span><span class=
"hl opt">);
</span>
187 wPassword
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> QLineEdit
<span class=
"hl opt">;
</span>
188 wPassword
<span class=
"hl opt">-
></span><span class=
"hl kwd">setReadOnly
</span><span class=
"hl opt">(
</span><span class=
"hl kwa">true
</span><span class=
"hl opt">);
</span>
189 g
<span class=
"hl opt">-
></span><span class=
"hl kwd">addWidget
</span><span class=
"hl opt">(
</span>wPassword
<span class=
"hl opt">,
</span> <span class=
"hl num">3</span><span class=
"hl opt">,
</span> <span class=
"hl num">1</span><span class=
"hl opt">,
</span> <span class=
"hl num">1</span><span class=
"hl opt">,
</span> <span class=
"hl num">2</span><span class=
"hl opt">);
</span>
191 v
<span class=
"hl opt">-
></span><span class=
"hl kwd">addStretch
</span><span class=
"hl opt">();
</span>
193 QHBoxLayout
<span class=
"hl opt">*
</span> h
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> QHBoxLayout
<span class=
"hl opt">;
</span>
194 h
<span class=
"hl opt">-
></span><span class=
"hl kwd">addStretch
</span><span class=
"hl opt">();
</span>
195 v
<span class=
"hl opt">-
></span><span class=
"hl kwd">addLayout
</span><span class=
"hl opt">(
</span>h
<span class=
"hl opt">);
</span>
197 wGenerate
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> <span class=
"hl kwd">QPushButton
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">tr
</span><span class=
"hl opt">(
</span><span class=
"hl str">"&Generate
"</span><span class=
"hl opt">,
</span> VER_MODULE_NAME_STR
<span class=
"hl opt">));
</span>
198 wGenerate
<span class=
"hl opt">-
></span><span class=
"hl kwd">setDisabled
</span><span class=
"hl opt">(
</span><span class=
"hl kwa">true
</span><span class=
"hl opt">);
</span>
199 wGenerate
<span class=
"hl opt">-
></span><span class=
"hl kwd">setDefault
</span><span class=
"hl opt">(
</span><span class=
"hl kwa">true
</span><span class=
"hl opt">);
</span>
200 <span class=
"hl kwd">connect
</span><span class=
"hl opt">(
</span>wGenerate
<span class=
"hl opt">,
</span> <span class=
"hl kwd">SIGNAL
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">clicked
</span><span class=
"hl opt">()),
</span> <span class=
"hl kwa">this
</span><span class=
"hl opt">,
</span> <span class=
"hl kwd">SLOT
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">generateClicked
</span><span class=
"hl opt">()));
</span>
201 h
<span class=
"hl opt">-
></span><span class=
"hl kwd">addWidget
</span><span class=
"hl opt">(
</span>wGenerate
<span class=
"hl opt">);
</span>
203 wCopy
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> <span class=
"hl kwd">QPushButton
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">tr
</span><span class=
"hl opt">(
</span><span class=
"hl str">"&Copy to Clipboard
"</span><span class=
"hl opt">,
</span> VER_MODULE_NAME_STR
<span class=
"hl opt">));
</span>
204 wCopy
<span class=
"hl opt">-
></span><span class=
"hl kwd">setDisabled
</span><span class=
"hl opt">(
</span><span class=
"hl kwa">true
</span><span class=
"hl opt">);
</span>
205 <span class=
"hl kwd">connect
</span><span class=
"hl opt">(
</span>wCopy
<span class=
"hl opt">,
</span> <span class=
"hl kwd">SIGNAL
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">clicked
</span><span class=
"hl opt">()),
</span> <span class=
"hl kwa">this
</span><span class=
"hl opt">,
</span> <span class=
"hl kwd">SLOT
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">copyClicked
</span><span class=
"hl opt">()));
</span>
206 h
<span class=
"hl opt">-
></span><span class=
"hl kwd">addWidget
</span><span class=
"hl opt">(
</span>wCopy
<span class=
"hl opt">);
</span>
208 QAction
<span class=
"hl opt">*
</span> a
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> <span class=
"hl kwd">QAction
</span><span class=
"hl opt">(
</span>win
<span class=
"hl opt">-
></span><span class=
"hl kwd">widget
</span><span class=
"hl opt">());
</span>
209 a
<span class=
"hl opt">-
></span><span class=
"hl kwd">setShortcut
</span><span class=
"hl opt">(
</span>Qt
<span class=
"hl opt">::
</span>Key_Return
<span class=
"hl opt">);
</span>
210 <span class=
"hl kwd">connect
</span><span class=
"hl opt">(
</span>a
<span class=
"hl opt">,
</span> <span class=
"hl kwd">SIGNAL
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">triggered
</span><span class=
"hl opt">()),
</span> <span class=
"hl kwa">this
</span><span class=
"hl opt">,
</span> <span class=
"hl kwd">SLOT
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">generateClicked
</span><span class=
"hl opt">()));
</span>
211 win
<span class=
"hl opt">-
></span><span class=
"hl kwd">widget
</span><span class=
"hl opt">()-
></span><span class=
"hl kwd">addAction
</span><span class=
"hl opt">(
</span>a
<span class=
"hl opt">);
</span>
213 a
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> <span class=
"hl kwd">QAction
</span><span class=
"hl opt">(
</span>win
<span class=
"hl opt">-
></span><span class=
"hl kwd">widget
</span><span class=
"hl opt">());
</span>
214 a
<span class=
"hl opt">-
></span><span class=
"hl kwd">setShortcut
</span><span class=
"hl opt">(
</span>Qt
<span class=
"hl opt">::
</span>Key_Escape
<span class=
"hl opt">);
</span>
215 <span class=
"hl kwd">connect
</span><span class=
"hl opt">(
</span>a
<span class=
"hl opt">,
</span> <span class=
"hl kwd">SIGNAL
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">triggered
</span><span class=
"hl opt">()),
</span> qApp
<span class=
"hl opt">,
</span> <span class=
"hl kwd">SLOT
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">quit
</span><span class=
"hl opt">()));
</span>
216 win
<span class=
"hl opt">-
></span><span class=
"hl kwd">widget
</span><span class=
"hl opt">()-
></span><span class=
"hl kwd">addAction
</span><span class=
"hl opt">(
</span>a
<span class=
"hl opt">);
</span>
218 mReady
<span class=
"hl opt">=
</span> <span class=
"hl kwa">true
</span><span class=
"hl opt">;
</span>
220 <span class=
"hl kwd">EVAF_INFO
</span><span class=
"hl opt">(
</span><span class=
"hl str">"%s initialized
"</span><span class=
"hl opt">,
</span> <span class=
"hl kwd">qPrintable
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">objectName
</span><span class=
"hl opt">()));
</span>
222 <span class=
"hl kwa">return true
</span><span class=
"hl opt">;
</span>
223 <span class=
"hl opt">}
</span></pre>
225 <p>The
<tt>done()
</tt> function simply sets the
<tt>mReady
</tt> flag back to
<tt>false
</tt>:
</p>
227 <pre class=
"hl"><span class=
"hl kwb">void
</span> Module
<span class=
"hl opt">::
</span><span class=
"hl kwd">done
</span><span class=
"hl opt">()
</span>
228 <span class=
"hl opt">{
</span>
229 mReady
<span class=
"hl opt">=
</span> <span class=
"hl kwa">false
</span><span class=
"hl opt">;
</span>
231 <span class=
"hl kwd">EVAF_INFO
</span><span class=
"hl opt">(
</span><span class=
"hl str">"%s finalized
"</span><span class=
"hl opt">,
</span> <span class=
"hl kwd">qPrintable
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">objectName
</span><span class=
"hl opt">()));
</span>
232 <span class=
"hl opt">}
</span></pre>
234 <p>The
<tt>Generate
</tt> push button is disabled by default. We connected
<tt>textChanged()
</tt> signals to the
<tt>textChanged()
</tt> slot, where we enable the
<tt>Generate
</tt> push button if master password and name fields are not empty.
</p>
236 <p>We can also query for stored passwords and update fields on the window with data from the storage. The
<tt>iStorage::query()
</tt>
237 method can return an empty shared data pointer and we have to check for it before using fields in the shared data object.
</p>
239 <pre class=
"hl"><span class=
"hl kwb">void
</span> Module
<span class=
"hl opt">::
</span><span class=
"hl kwd">textChanged
</span><span class=
"hl opt">(
</span>QString
<span class=
"hl kwb">const
</span> <span class=
"hl opt">&)
</span>
240 <span class=
"hl opt">{
</span>
241 wGenerate
<span class=
"hl opt">-
></span><span class=
"hl kwd">setDisabled
</span><span class=
"hl opt">(
</span>wMasterPassword
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">().
</span><span class=
"hl kwd">isEmpty
</span><span class=
"hl opt">() ||
</span> wName
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">().
</span><span class=
"hl kwd">isEmpty
</span><span class=
"hl opt">());
</span>
242 <span class=
"hl kwa">if
</span> <span class=
"hl opt">(!
</span>wName
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">().
</span><span class=
"hl kwd">isEmpty
</span><span class=
"hl opt">()
&&</span> mStorage
<span class=
"hl opt">) {
</span>
243 QExplicitlySharedDataPointer
<span class=
"hl opt"><</span>PswGen
<span class=
"hl opt">::
</span>Storage
<span class=
"hl opt">::
</span>Data
<span class=
"hl opt">></span> data
<span class=
"hl opt">=
</span> mStorage
<span class=
"hl opt">-
></span><span class=
"hl kwd">query
</span><span class=
"hl opt">(
</span>wName
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">());
</span>
244 <span class=
"hl kwa">if
</span> <span class=
"hl opt">(
</span>data
<span class=
"hl opt">)
</span>
245 wLength
<span class=
"hl opt">-
></span><span class=
"hl kwd">setValue
</span><span class=
"hl opt">(
</span>data
<span class=
"hl opt">-
></span><span class=
"hl kwd">length
</span><span class=
"hl opt">());
</span>
246 <span class=
"hl opt">}
</span>
247 <span class=
"hl opt">}
</span></pre>
249 <p>The
<tt>generateClicked()
</tt> slot is connected to the
<tt>Generate
</tt> push button and also to the
<tt>Enter
</tt> key
250 action. The push button is disabled if master password or name fields are empty, but not the
<tt>Enter
</tt> key action and
251 we need to check for it once more.
</p>
253 <p>Then we generate the password using the
<tt>iGenerator::generatePassword()
</tt> method and show it on the window. We also
254 enable the
<tt>Copy to Clipboard
</tt> push button.
</p>
256 <p>If we have the
<tt>iStorage
</tt>, we either store the new data record or update an existing one in the storage.
</p>
258 <pre class=
"hl"><span class=
"hl kwb">void
</span> Module
<span class=
"hl opt">::
</span><span class=
"hl kwd">generateClicked
</span><span class=
"hl opt">()
</span>
259 <span class=
"hl opt">{
</span>
260 <span class=
"hl kwa">if
</span> <span class=
"hl opt">(
</span>wMasterPassword
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">().
</span><span class=
"hl kwd">isEmpty
</span><span class=
"hl opt">() ||
</span> wName
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">().
</span><span class=
"hl kwd">isEmpty
</span><span class=
"hl opt">())
</span>
261 <span class=
"hl kwa">return
</span><span class=
"hl opt">;
</span>
262 wPassword
<span class=
"hl opt">-
></span><span class=
"hl kwd">setText
</span><span class=
"hl opt">(
</span>mGenerator
<span class=
"hl opt">-
></span><span class=
"hl kwd">generatePassword
</span><span class=
"hl opt">(
</span>wName
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">(),
</span> wMasterPassword
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">(),
</span> wLength
<span class=
"hl opt">-
></span><span class=
"hl kwd">value
</span><span class=
"hl opt">()));
</span>
263 wCopy
<span class=
"hl opt">-
></span><span class=
"hl kwd">setEnabled
</span><span class=
"hl opt">(
</span><span class=
"hl kwa">true
</span><span class=
"hl opt">);
</span>
264 <span class=
"hl kwa">if
</span> <span class=
"hl opt">(
</span>mStorage
<span class=
"hl opt">) {
</span>
265 QExplicitlySharedDataPointer
<span class=
"hl opt"><</span>PswGen
<span class=
"hl opt">::
</span>Storage
<span class=
"hl opt">::
</span>Data
<span class=
"hl opt">></span> data
<span class=
"hl opt">=
</span> mStorage
<span class=
"hl opt">-
></span><span class=
"hl kwd">query
</span><span class=
"hl opt">(
</span>wName
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">());
</span>
266 <span class=
"hl kwa">if
</span> <span class=
"hl opt">(!
</span>data
<span class=
"hl opt">)
</span>
267 data
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> Storage
<span class=
"hl opt">::
</span><span class=
"hl kwd">Data
</span><span class=
"hl opt">(
</span>wName
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">(),
</span> wLength
<span class=
"hl opt">-
></span><span class=
"hl kwd">value
</span><span class=
"hl opt">());
</span>
268 <span class=
"hl kwa">else
</span>
269 data
<span class=
"hl opt">-
></span><span class=
"hl kwd">setLength
</span><span class=
"hl opt">(
</span>wLength
<span class=
"hl opt">-
></span><span class=
"hl kwd">value
</span><span class=
"hl opt">());
</span>
270 mStorage
<span class=
"hl opt">-
></span><span class=
"hl kwd">save
</span><span class=
"hl opt">(
</span>wName
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">(),
</span> data
<span class=
"hl opt">);
</span>
271 <span class=
"hl opt">}
</span>
272 <span class=
"hl opt">}
</span></pre>
274 <p>The final method in our module is the
<tt>copyClicked()
</tt> slot, which simply copies anything from the generated password
275 field to the clipboard:
</p>
277 <pre class=
"hl"><span class=
"hl kwb">void
</span> Module
<span class=
"hl opt">::
</span><span class=
"hl kwd">copyClicked
</span><span class=
"hl opt">()
</span>
278 <span class=
"hl opt">{
</span>
279 QClipboard
<span class=
"hl opt">*
</span> clipboard
<span class=
"hl opt">=
</span> QApplication
<span class=
"hl opt">::
</span><span class=
"hl kwd">clipboard
</span><span class=
"hl opt">();
</span>
280 <span class=
"hl kwa">if
</span> <span class=
"hl opt">(
</span>clipboard
<span class=
"hl opt">)
</span>
281 clipboard
<span class=
"hl opt">-
></span><span class=
"hl kwd">setText
</span><span class=
"hl opt">(
</span>wPassword
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">());
</span>
282 <span class=
"hl opt">}
</span></pre>
284 <p>Here is the final
<tt>gui.cpp
</tt> file:
</p>
286 <pre class=
"hl"><span class=
"hl com">/**
</span>
287 <span class=
"hl com"> *
@file PswGen/GUI/gui.cpp
</span>
288 <span class=
"hl com"> */
</span>
290 <span class=
"hl ppc">#include
</span> <span class=
"hl pps">"gui.h
"</span><span class=
"hl ppc"></span>
291 <span class=
"hl ppc">#include
</span> <span class=
"hl pps">"version.h
"</span><span class=
"hl ppc"></span>
293 <span class=
"hl ppc">#include
</span> <span class=
"hl pps">"Generator/iGenerator
"</span><span class=
"hl ppc"></span>
294 <span class=
"hl ppc">#include
</span> <span class=
"hl pps">"Storage/iStorage
"</span><span class=
"hl ppc"></span>
296 <span class=
"hl ppc">#include
<Common/Globals
></span>
297 <span class=
"hl ppc">#include
<Common/iLogger
></span>
298 <span class=
"hl ppc">#include
<Common/iRegistry
></span>
299 <span class=
"hl ppc">#include
<SdiWindow/iSdiWindow
></span>
301 <span class=
"hl ppc">#include
<QtGui
></span>
303 <span class=
"hl kwd">VER_EXPORT_VERSION_INFO
</span><span class=
"hl opt">()
</span>
304 <span class=
"hl kwd">Q_EXPORT_PLUGIN2
</span><span class=
"hl opt">(
</span>VER_MODULE_NAME_STR
<span class=
"hl opt">,
</span> eVaf
<span class=
"hl opt">::
</span>PswGen
<span class=
"hl opt">::
</span>GUI
<span class=
"hl opt">::
</span>Module
<span class=
"hl opt">)
</span>
306 <span class=
"hl kwa">using namespace
</span> eVaf
<span class=
"hl opt">;
</span>
307 <span class=
"hl kwa">using namespace
</span> eVaf
<span class=
"hl opt">::
</span>PswGen
<span class=
"hl opt">::
</span>GUI
<span class=
"hl opt">;
</span>
309 <span class=
"hl kwb">int const
</span> Module
<span class=
"hl opt">::
</span>DefaultPasswordLength
<span class=
"hl opt">=
</span> <span class=
"hl num">16</span><span class=
"hl opt">;
</span>
311 Module
<span class=
"hl opt">::
</span><span class=
"hl kwd">Module
</span><span class=
"hl opt">()
</span>
312 <span class=
"hl opt">:
</span> Plugins
<span class=
"hl opt">::
</span><span class=
"hl kwd">iPlugin
</span><span class=
"hl opt">()
</span>
313 <span class=
"hl opt">,
</span> <span class=
"hl kwd">mReady
</span><span class=
"hl opt">(
</span><span class=
"hl kwa">false
</span><span class=
"hl opt">)
</span>
314 <span class=
"hl opt">,
</span> <span class=
"hl kwd">mGenerator
</span><span class=
"hl opt">(
</span><span class=
"hl num">0</span><span class=
"hl opt">)
</span>
315 <span class=
"hl opt">,
</span> <span class=
"hl kwd">mStorage
</span><span class=
"hl opt">(
</span><span class=
"hl num">0</span><span class=
"hl opt">)
</span>
316 <span class=
"hl opt">{
</span>
317 <span class=
"hl kwd">setObjectName
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">QString
</span><span class=
"hl opt">(
</span><span class=
"hl str">"%
1.%
2"</span><span class=
"hl opt">).
</span><span class=
"hl kwd">arg
</span><span class=
"hl opt">(
</span>VER_MODULE_NAME_STR
<span class=
"hl opt">).
</span><span class=
"hl kwd">arg
</span><span class=
"hl opt">(
</span>__FUNCTION__
<span class=
"hl opt">));
</span>
319 <span class=
"hl kwd">EVAF_INFO
</span><span class=
"hl opt">(
</span><span class=
"hl str">"%s created
"</span><span class=
"hl opt">,
</span> <span class=
"hl kwd">qPrintable
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">objectName
</span><span class=
"hl opt">()));
</span>
320 <span class=
"hl opt">}
</span>
322 Module
<span class=
"hl opt">::~
</span><span class=
"hl kwd">Module
</span><span class=
"hl opt">()
</span>
323 <span class=
"hl opt">{
</span>
324 <span class=
"hl kwd">EVAF_INFO
</span><span class=
"hl opt">(
</span><span class=
"hl str">"%s destroyed
"</span><span class=
"hl opt">,
</span> <span class=
"hl kwd">qPrintable
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">objectName
</span><span class=
"hl opt">()));
</span>
325 <span class=
"hl opt">}
</span>
327 <span class=
"hl kwb">bool
</span> Module
<span class=
"hl opt">::
</span><span class=
"hl kwd">init
</span><span class=
"hl opt">(
</span>QString
<span class=
"hl kwb">const
</span> <span class=
"hl opt">&</span> args
<span class=
"hl opt">)
</span>
328 <span class=
"hl opt">{
</span>
329 <span class=
"hl kwd">Q_UNUSED
</span><span class=
"hl opt">(
</span>args
<span class=
"hl opt">);
</span>
331 <span class=
"hl slc">// Get the iGenerator interface
</span>
332 <span class=
"hl kwd">EVAF_TEST_X
</span><span class=
"hl opt">((
</span>mGenerator
<span class=
"hl opt">=
</span> evafQueryInterface
<span class=
"hl opt"><</span>PswGen
<span class=
"hl opt">::
</span>iGenerator
<span class=
"hl opt">>(
</span><span class=
"hl str">"iGenerator
"</span><span class=
"hl opt">)),
</span> <span class=
"hl str">"No iGenerator interface
"</span><span class=
"hl opt">);
</span>
334 <span class=
"hl slc">// Get the iStorage interface (can be null)
</span>
335 mStorage
<span class=
"hl opt">=
</span> evafQueryInterface
<span class=
"hl opt"><</span>PswGen
<span class=
"hl opt">::
</span>iStorage
<span class=
"hl opt">>(
</span><span class=
"hl str">"iStorage
"</span><span class=
"hl opt">);
</span>
336 <span class=
"hl kwa">if
</span> <span class=
"hl opt">(!
</span>mStorage
<span class=
"hl opt">)
</span>
337 <span class=
"hl kwd">EVAF_WARNING
</span><span class=
"hl opt">(
</span><span class=
"hl str">"No iStorage interface
"</span><span class=
"hl opt">);
</span>
339 <span class=
"hl slc">// Get the main window interface and fill it with the widgets
</span>
340 SdiWindow
<span class=
"hl opt">::
</span>iSdiWindow
<span class=
"hl opt">*
</span> win
<span class=
"hl opt">=
</span> evafQueryInterface
<span class=
"hl opt"><</span>SdiWindow
<span class=
"hl opt">::
</span>iSdiWindow
<span class=
"hl opt">>(
</span><span class=
"hl str">"iSdiWindow
"</span><span class=
"hl opt">);
</span>
341 <span class=
"hl kwd">EVAF_TEST_X
</span><span class=
"hl opt">(
</span>win
<span class=
"hl opt">,
</span> <span class=
"hl str">"No iSdiWindow interface
"</span><span class=
"hl opt">);
</span>
343 QVBoxLayout
<span class=
"hl opt">*
</span> v
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> QVBoxLayout
<span class=
"hl opt">;
</span>
344 win
<span class=
"hl opt">-
></span><span class=
"hl kwd">widget
</span><span class=
"hl opt">()-
></span><span class=
"hl kwd">setLayout
</span><span class=
"hl opt">(
</span>v
<span class=
"hl opt">);
</span>
346 QGridLayout
<span class=
"hl opt">*
</span> g
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> QGridLayout
<span class=
"hl opt">;
</span>
347 v
<span class=
"hl opt">-
></span><span class=
"hl kwd">addLayout
</span><span class=
"hl opt">(
</span>g
<span class=
"hl opt">);
</span>
348 g
<span class=
"hl opt">-
></span><span class=
"hl kwd">setColumnStretch
</span><span class=
"hl opt">(
</span><span class=
"hl num">2</span><span class=
"hl opt">,
</span> <span class=
"hl num">2</span><span class=
"hl opt">);
</span>
350 QLabel
<span class=
"hl opt">*
</span> l
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> <span class=
"hl kwd">QLabel
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">tr
</span><span class=
"hl opt">(
</span><span class=
"hl str">"Master
&password:
"</span><span class=
"hl opt">,
</span> VER_MODULE_NAME_STR
<span class=
"hl opt">));
</span>
351 l
<span class=
"hl opt">-
></span><span class=
"hl kwd">setAlignment
</span><span class=
"hl opt">(
</span>Qt
<span class=
"hl opt">::
</span>AlignRight
<span class=
"hl opt">);
</span>
352 g
<span class=
"hl opt">-
></span><span class=
"hl kwd">addWidget
</span><span class=
"hl opt">(
</span>l
<span class=
"hl opt">,
</span> <span class=
"hl num">0</span><span class=
"hl opt">,
</span> <span class=
"hl num">0</span><span class=
"hl opt">);
</span>
354 wMasterPassword
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> QLineEdit
<span class=
"hl opt">;
</span>
355 l
<span class=
"hl opt">-
></span><span class=
"hl kwd">setBuddy
</span><span class=
"hl opt">(
</span>wMasterPassword
<span class=
"hl opt">);
</span>
356 <span class=
"hl kwd">connect
</span><span class=
"hl opt">(
</span>wMasterPassword
<span class=
"hl opt">,
</span> <span class=
"hl kwd">SIGNAL
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">textChanged
</span><span class=
"hl opt">(
</span>QString
<span class=
"hl opt">)),
</span> <span class=
"hl kwa">this
</span><span class=
"hl opt">,
</span> <span class=
"hl kwd">SLOT
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">textChanged
</span><span class=
"hl opt">(
</span>QString
<span class=
"hl opt">)));
</span>
357 wMasterPassword
<span class=
"hl opt">-
></span><span class=
"hl kwd">setEchoMode
</span><span class=
"hl opt">(
</span>QLineEdit
<span class=
"hl opt">::
</span>Password
<span class=
"hl opt">);
</span>
358 g
<span class=
"hl opt">-
></span><span class=
"hl kwd">addWidget
</span><span class=
"hl opt">(
</span>wMasterPassword
<span class=
"hl opt">,
</span> <span class=
"hl num">0</span><span class=
"hl opt">,
</span> <span class=
"hl num">1</span><span class=
"hl opt">,
</span> <span class=
"hl num">1</span><span class=
"hl opt">,
</span> <span class=
"hl num">2</span><span class=
"hl opt">);
</span>
360 l
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> <span class=
"hl kwd">QLabel
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">tr
</span><span class=
"hl opt">(
</span><span class=
"hl str">"Web site or application
&name:
"</span><span class=
"hl opt">,
</span> VER_MODULE_NAME_STR
<span class=
"hl opt">));
</span>
361 l
<span class=
"hl opt">-
></span><span class=
"hl kwd">setAlignment
</span><span class=
"hl opt">(
</span>Qt
<span class=
"hl opt">::
</span>AlignRight
<span class=
"hl opt">);
</span>
362 g
<span class=
"hl opt">-
></span><span class=
"hl kwd">addWidget
</span><span class=
"hl opt">(
</span>l
<span class=
"hl opt">,
</span> <span class=
"hl num">1</span><span class=
"hl opt">,
</span> <span class=
"hl num">0</span><span class=
"hl opt">);
</span>
364 wName
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> QLineEdit
<span class=
"hl opt">;
</span>
365 l
<span class=
"hl opt">-
></span><span class=
"hl kwd">setBuddy
</span><span class=
"hl opt">(
</span>wName
<span class=
"hl opt">);
</span>
366 <span class=
"hl kwa">if
</span> <span class=
"hl opt">(
</span>mStorage
<span class=
"hl opt">) {
</span>
367 QCompleter
<span class=
"hl opt">*
</span> completer
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> <span class=
"hl kwd">QCompleter
</span><span class=
"hl opt">(
</span>wName
<span class=
"hl opt">);
</span>
368 completer
<span class=
"hl opt">-
></span><span class=
"hl kwd">setModel
</span><span class=
"hl opt">(
</span>mStorage
<span class=
"hl opt">-
></span><span class=
"hl kwd">autoCompletionModel
</span><span class=
"hl opt">());
</span>
369 completer
<span class=
"hl opt">-
></span><span class=
"hl kwd">setCompletionMode
</span><span class=
"hl opt">(
</span>QCompleter
<span class=
"hl opt">::
</span>InlineCompletion
<span class=
"hl opt">);
</span>
370 wName
<span class=
"hl opt">-
></span><span class=
"hl kwd">setCompleter
</span><span class=
"hl opt">(
</span>completer
<span class=
"hl opt">);
</span>
371 <span class=
"hl opt">}
</span>
372 <span class=
"hl kwd">connect
</span><span class=
"hl opt">(
</span>wName
<span class=
"hl opt">,
</span> <span class=
"hl kwd">SIGNAL
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">textChanged
</span><span class=
"hl opt">(
</span>QString
<span class=
"hl opt">)),
</span> <span class=
"hl kwa">this
</span><span class=
"hl opt">,
</span> <span class=
"hl kwd">SLOT
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">textChanged
</span><span class=
"hl opt">(
</span>QString
<span class=
"hl opt">)));
</span>
373 g
<span class=
"hl opt">-
></span><span class=
"hl kwd">addWidget
</span><span class=
"hl opt">(
</span>wName
<span class=
"hl opt">,
</span> <span class=
"hl num">1</span><span class=
"hl opt">,
</span> <span class=
"hl num">1</span><span class=
"hl opt">,
</span> <span class=
"hl num">1</span><span class=
"hl opt">,
</span> <span class=
"hl num">2</span><span class=
"hl opt">);
</span>
374 win
<span class=
"hl opt">-
></span><span class=
"hl kwd">widget
</span><span class=
"hl opt">()-
></span><span class=
"hl kwd">setFocusProxy
</span><span class=
"hl opt">(
</span>wName
<span class=
"hl opt">);
</span>
376 l
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> <span class=
"hl kwd">QLabel
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">tr
</span><span class=
"hl opt">(
</span><span class=
"hl str">"&Length of the password:
"</span><span class=
"hl opt">,
</span> VER_MODULE_NAME_STR
<span class=
"hl opt">));
</span>
377 l
<span class=
"hl opt">-
></span><span class=
"hl kwd">setAlignment
</span><span class=
"hl opt">(
</span>Qt
<span class=
"hl opt">::
</span>AlignRight
<span class=
"hl opt">);
</span>
378 g
<span class=
"hl opt">-
></span><span class=
"hl kwd">addWidget
</span><span class=
"hl opt">(
</span>l
<span class=
"hl opt">,
</span> <span class=
"hl num">2</span><span class=
"hl opt">,
</span> <span class=
"hl num">0</span><span class=
"hl opt">);
</span>
380 wLength
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> QSpinBox
<span class=
"hl opt">;
</span>
381 l
<span class=
"hl opt">-
></span><span class=
"hl kwd">setBuddy
</span><span class=
"hl opt">(
</span>wLength
<span class=
"hl opt">);
</span>
382 wLength
<span class=
"hl opt">-
></span><span class=
"hl kwd">setRange
</span><span class=
"hl opt">(
</span><span class=
"hl num">0</span><span class=
"hl opt">,
</span> mGenerator
<span class=
"hl opt">-
></span><span class=
"hl kwd">maxLength
</span><span class=
"hl opt">());
</span>
383 wLength
<span class=
"hl opt">-
></span><span class=
"hl kwd">setValue
</span><span class=
"hl opt">(
</span>DefaultPasswordLength
<span class=
"hl opt">);
</span>
384 wLength
<span class=
"hl opt">-
></span><span class=
"hl kwd">setSpecialValueText
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">tr
</span><span class=
"hl opt">(
</span><span class=
"hl str">"Maximum
"</span><span class=
"hl opt">,
</span> VER_MODULE_NAME_STR
<span class=
"hl opt">));
</span>
385 g
<span class=
"hl opt">-
></span><span class=
"hl kwd">addWidget
</span><span class=
"hl opt">(
</span>wLength
<span class=
"hl opt">,
</span> <span class=
"hl num">2</span><span class=
"hl opt">,
</span> <span class=
"hl num">1</span><span class=
"hl opt">);
</span>
387 l
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> <span class=
"hl kwd">QLabel
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">tr
</span><span class=
"hl opt">(
</span><span class=
"hl str">"Password:
"</span><span class=
"hl opt">));
</span>
388 l
<span class=
"hl opt">-
></span><span class=
"hl kwd">setAlignment
</span><span class=
"hl opt">(
</span>Qt
<span class=
"hl opt">::
</span>AlignRight
<span class=
"hl opt">);
</span>
389 g
<span class=
"hl opt">-
></span><span class=
"hl kwd">addWidget
</span><span class=
"hl opt">(
</span>l
<span class=
"hl opt">,
</span> <span class=
"hl num">3</span><span class=
"hl opt">,
</span> <span class=
"hl num">0</span><span class=
"hl opt">);
</span>
391 wPassword
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> QLineEdit
<span class=
"hl opt">;
</span>
392 wPassword
<span class=
"hl opt">-
></span><span class=
"hl kwd">setReadOnly
</span><span class=
"hl opt">(
</span><span class=
"hl kwa">true
</span><span class=
"hl opt">);
</span>
393 g
<span class=
"hl opt">-
></span><span class=
"hl kwd">addWidget
</span><span class=
"hl opt">(
</span>wPassword
<span class=
"hl opt">,
</span> <span class=
"hl num">3</span><span class=
"hl opt">,
</span> <span class=
"hl num">1</span><span class=
"hl opt">,
</span> <span class=
"hl num">1</span><span class=
"hl opt">,
</span> <span class=
"hl num">2</span><span class=
"hl opt">);
</span>
395 v
<span class=
"hl opt">-
></span><span class=
"hl kwd">addStretch
</span><span class=
"hl opt">();
</span>
397 QHBoxLayout
<span class=
"hl opt">*
</span> h
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> QHBoxLayout
<span class=
"hl opt">;
</span>
398 h
<span class=
"hl opt">-
></span><span class=
"hl kwd">addStretch
</span><span class=
"hl opt">();
</span>
399 v
<span class=
"hl opt">-
></span><span class=
"hl kwd">addLayout
</span><span class=
"hl opt">(
</span>h
<span class=
"hl opt">);
</span>
401 wGenerate
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> <span class=
"hl kwd">QPushButton
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">tr
</span><span class=
"hl opt">(
</span><span class=
"hl str">"&Generate
"</span><span class=
"hl opt">,
</span> VER_MODULE_NAME_STR
<span class=
"hl opt">));
</span>
402 wGenerate
<span class=
"hl opt">-
></span><span class=
"hl kwd">setDisabled
</span><span class=
"hl opt">(
</span><span class=
"hl kwa">true
</span><span class=
"hl opt">);
</span>
403 wGenerate
<span class=
"hl opt">-
></span><span class=
"hl kwd">setDefault
</span><span class=
"hl opt">(
</span><span class=
"hl kwa">true
</span><span class=
"hl opt">);
</span>
404 <span class=
"hl kwd">connect
</span><span class=
"hl opt">(
</span>wGenerate
<span class=
"hl opt">,
</span> <span class=
"hl kwd">SIGNAL
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">clicked
</span><span class=
"hl opt">()),
</span> <span class=
"hl kwa">this
</span><span class=
"hl opt">,
</span> <span class=
"hl kwd">SLOT
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">generateClicked
</span><span class=
"hl opt">()));
</span>
405 h
<span class=
"hl opt">-
></span><span class=
"hl kwd">addWidget
</span><span class=
"hl opt">(
</span>wGenerate
<span class=
"hl opt">);
</span>
407 wCopy
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> <span class=
"hl kwd">QPushButton
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">tr
</span><span class=
"hl opt">(
</span><span class=
"hl str">"&Copy to Clipboard
"</span><span class=
"hl opt">,
</span> VER_MODULE_NAME_STR
<span class=
"hl opt">));
</span>
408 wCopy
<span class=
"hl opt">-
></span><span class=
"hl kwd">setDisabled
</span><span class=
"hl opt">(
</span><span class=
"hl kwa">true
</span><span class=
"hl opt">);
</span>
409 <span class=
"hl kwd">connect
</span><span class=
"hl opt">(
</span>wCopy
<span class=
"hl opt">,
</span> <span class=
"hl kwd">SIGNAL
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">clicked
</span><span class=
"hl opt">()),
</span> <span class=
"hl kwa">this
</span><span class=
"hl opt">,
</span> <span class=
"hl kwd">SLOT
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">copyClicked
</span><span class=
"hl opt">()));
</span>
410 h
<span class=
"hl opt">-
></span><span class=
"hl kwd">addWidget
</span><span class=
"hl opt">(
</span>wCopy
<span class=
"hl opt">);
</span>
412 QAction
<span class=
"hl opt">*
</span> a
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> <span class=
"hl kwd">QAction
</span><span class=
"hl opt">(
</span>win
<span class=
"hl opt">-
></span><span class=
"hl kwd">widget
</span><span class=
"hl opt">());
</span>
413 a
<span class=
"hl opt">-
></span><span class=
"hl kwd">setShortcut
</span><span class=
"hl opt">(
</span>Qt
<span class=
"hl opt">::
</span>Key_Return
<span class=
"hl opt">);
</span>
414 <span class=
"hl kwd">connect
</span><span class=
"hl opt">(
</span>a
<span class=
"hl opt">,
</span> <span class=
"hl kwd">SIGNAL
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">triggered
</span><span class=
"hl opt">()),
</span> <span class=
"hl kwa">this
</span><span class=
"hl opt">,
</span> <span class=
"hl kwd">SLOT
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">generateClicked
</span><span class=
"hl opt">()));
</span>
415 win
<span class=
"hl opt">-
></span><span class=
"hl kwd">widget
</span><span class=
"hl opt">()-
></span><span class=
"hl kwd">addAction
</span><span class=
"hl opt">(
</span>a
<span class=
"hl opt">);
</span>
417 a
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> <span class=
"hl kwd">QAction
</span><span class=
"hl opt">(
</span>win
<span class=
"hl opt">-
></span><span class=
"hl kwd">widget
</span><span class=
"hl opt">());
</span>
418 a
<span class=
"hl opt">-
></span><span class=
"hl kwd">setShortcut
</span><span class=
"hl opt">(
</span>Qt
<span class=
"hl opt">::
</span>Key_Escape
<span class=
"hl opt">);
</span>
419 <span class=
"hl kwd">connect
</span><span class=
"hl opt">(
</span>a
<span class=
"hl opt">,
</span> <span class=
"hl kwd">SIGNAL
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">triggered
</span><span class=
"hl opt">()),
</span> qApp
<span class=
"hl opt">,
</span> <span class=
"hl kwd">SLOT
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">quit
</span><span class=
"hl opt">()));
</span>
420 win
<span class=
"hl opt">-
></span><span class=
"hl kwd">widget
</span><span class=
"hl opt">()-
></span><span class=
"hl kwd">addAction
</span><span class=
"hl opt">(
</span>a
<span class=
"hl opt">);
</span>
422 mReady
<span class=
"hl opt">=
</span> <span class=
"hl kwa">true
</span><span class=
"hl opt">;
</span>
424 <span class=
"hl kwd">EVAF_INFO
</span><span class=
"hl opt">(
</span><span class=
"hl str">"%s initialized
"</span><span class=
"hl opt">,
</span> <span class=
"hl kwd">qPrintable
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">objectName
</span><span class=
"hl opt">()));
</span>
426 <span class=
"hl kwa">return true
</span><span class=
"hl opt">;
</span>
427 <span class=
"hl opt">}
</span>
429 <span class=
"hl kwb">void
</span> Module
<span class=
"hl opt">::
</span><span class=
"hl kwd">done
</span><span class=
"hl opt">()
</span>
430 <span class=
"hl opt">{
</span>
431 mReady
<span class=
"hl opt">=
</span> <span class=
"hl kwa">false
</span><span class=
"hl opt">;
</span>
433 <span class=
"hl kwd">EVAF_INFO
</span><span class=
"hl opt">(
</span><span class=
"hl str">"%s finalized
"</span><span class=
"hl opt">,
</span> <span class=
"hl kwd">qPrintable
</span><span class=
"hl opt">(
</span><span class=
"hl kwd">objectName
</span><span class=
"hl opt">()));
</span>
434 <span class=
"hl opt">}
</span>
436 <span class=
"hl kwb">void
</span> Module
<span class=
"hl opt">::
</span><span class=
"hl kwd">textChanged
</span><span class=
"hl opt">(
</span>QString
<span class=
"hl kwb">const
</span> <span class=
"hl opt">&)
</span>
437 <span class=
"hl opt">{
</span>
438 wGenerate
<span class=
"hl opt">-
></span><span class=
"hl kwd">setDisabled
</span><span class=
"hl opt">(
</span>wMasterPassword
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">().
</span><span class=
"hl kwd">isEmpty
</span><span class=
"hl opt">() ||
</span> wName
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">().
</span><span class=
"hl kwd">isEmpty
</span><span class=
"hl opt">());
</span>
439 <span class=
"hl kwa">if
</span> <span class=
"hl opt">(!
</span>wName
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">().
</span><span class=
"hl kwd">isEmpty
</span><span class=
"hl opt">()
&&</span> mStorage
<span class=
"hl opt">) {
</span>
440 QExplicitlySharedDataPointer
<span class=
"hl opt"><</span>PswGen
<span class=
"hl opt">::
</span>Storage
<span class=
"hl opt">::
</span>Data
<span class=
"hl opt">></span> data
<span class=
"hl opt">=
</span> mStorage
<span class=
"hl opt">-
></span><span class=
"hl kwd">query
</span><span class=
"hl opt">(
</span>wName
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">());
</span>
441 <span class=
"hl kwa">if
</span> <span class=
"hl opt">(
</span>data
<span class=
"hl opt">)
</span>
442 wLength
<span class=
"hl opt">-
></span><span class=
"hl kwd">setValue
</span><span class=
"hl opt">(
</span>data
<span class=
"hl opt">-
></span><span class=
"hl kwd">length
</span><span class=
"hl opt">());
</span>
443 <span class=
"hl opt">}
</span>
444 <span class=
"hl opt">}
</span>
446 <span class=
"hl kwb">void
</span> Module
<span class=
"hl opt">::
</span><span class=
"hl kwd">generateClicked
</span><span class=
"hl opt">()
</span>
447 <span class=
"hl opt">{
</span>
448 <span class=
"hl kwa">if
</span> <span class=
"hl opt">(
</span>wMasterPassword
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">().
</span><span class=
"hl kwd">isEmpty
</span><span class=
"hl opt">() ||
</span> wName
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">().
</span><span class=
"hl kwd">isEmpty
</span><span class=
"hl opt">())
</span>
449 <span class=
"hl kwa">return
</span><span class=
"hl opt">;
</span>
450 wPassword
<span class=
"hl opt">-
></span><span class=
"hl kwd">setText
</span><span class=
"hl opt">(
</span>mGenerator
<span class=
"hl opt">-
></span><span class=
"hl kwd">generatePassword
</span><span class=
"hl opt">(
</span>wName
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">(),
</span> wMasterPassword
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">(),
</span> wLength
<span class=
"hl opt">-
></span><span class=
"hl kwd">value
</span><span class=
"hl opt">()));
</span>
451 wCopy
<span class=
"hl opt">-
></span><span class=
"hl kwd">setEnabled
</span><span class=
"hl opt">(
</span><span class=
"hl kwa">true
</span><span class=
"hl opt">);
</span>
452 <span class=
"hl kwa">if
</span> <span class=
"hl opt">(
</span>mStorage
<span class=
"hl opt">) {
</span>
453 QExplicitlySharedDataPointer
<span class=
"hl opt"><</span>PswGen
<span class=
"hl opt">::
</span>Storage
<span class=
"hl opt">::
</span>Data
<span class=
"hl opt">></span> data
<span class=
"hl opt">=
</span> mStorage
<span class=
"hl opt">-
></span><span class=
"hl kwd">query
</span><span class=
"hl opt">(
</span>wName
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">());
</span>
454 <span class=
"hl kwa">if
</span> <span class=
"hl opt">(!
</span>data
<span class=
"hl opt">)
</span>
455 data
<span class=
"hl opt">=
</span> <span class=
"hl kwa">new
</span> Storage
<span class=
"hl opt">::
</span><span class=
"hl kwd">Data
</span><span class=
"hl opt">(
</span>wName
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">(),
</span> wLength
<span class=
"hl opt">-
></span><span class=
"hl kwd">value
</span><span class=
"hl opt">());
</span>
456 <span class=
"hl kwa">else
</span>
457 data
<span class=
"hl opt">-
></span><span class=
"hl kwd">setLength
</span><span class=
"hl opt">(
</span>wLength
<span class=
"hl opt">-
></span><span class=
"hl kwd">value
</span><span class=
"hl opt">());
</span>
458 mStorage
<span class=
"hl opt">-
></span><span class=
"hl kwd">save
</span><span class=
"hl opt">(
</span>wName
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">(),
</span> data
<span class=
"hl opt">);
</span>
459 <span class=
"hl opt">}
</span>
460 <span class=
"hl opt">}
</span>
462 <span class=
"hl kwb">void
</span> Module
<span class=
"hl opt">::
</span><span class=
"hl kwd">copyClicked
</span><span class=
"hl opt">()
</span>
463 <span class=
"hl opt">{
</span>
464 QClipboard
<span class=
"hl opt">*
</span> clipboard
<span class=
"hl opt">=
</span> QApplication
<span class=
"hl opt">::
</span><span class=
"hl kwd">clipboard
</span><span class=
"hl opt">();
</span>
465 <span class=
"hl kwa">if
</span> <span class=
"hl opt">(
</span>clipboard
<span class=
"hl opt">)
</span>
466 clipboard
<span class=
"hl opt">-
></span><span class=
"hl kwd">setText
</span><span class=
"hl opt">(
</span>wPassword
<span class=
"hl opt">-
></span><span class=
"hl kwd">text
</span><span class=
"hl opt">());
</span>
467 <span class=
"hl opt">}
</span></pre>
469 <p>Build the
<a href=
"pswgen11.html">PswGen application
</a>.
</p>