Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
D
doxverilog
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
doxverilog
Commits
c1605e5b
Commit
c1605e5b
authored
Jul 04, 2004
by
Dimitri van Heesch
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Release-1.3.7-20040704
parent
6b195c8d
Changes
72
Hide whitespace changes
Inline
Side-by-side
Showing
72 changed files
with
2220 additions
and
1030 deletions
+2220
-1030
Doxyfile
Doxyfile
+5
-1
INSTALL
INSTALL
+2
-2
README
README
+2
-2
VERSION
VERSION
+1
-1
Makefile.in
addon/doxywizard/Makefile.in
+1
-1
README
addon/doxywizard/README
+1
-5
doxywizard.cpp
addon/doxywizard/doxywizard.cpp
+1240
-406
doxywizard.h
addon/doxywizard/doxywizard.h
+265
-84
doxywizard.pro.in
addon/doxywizard/doxywizard.pro.in
+5
-5
expert.cpp
addon/doxywizard/expert.cpp
+264
-0
expert.h
addon/doxywizard/expert.h
+82
-0
inputbool.cpp
addon/doxywizard/inputbool.cpp
+13
-16
inputbool.h
addon/doxywizard/inputbool.h
+1
-1
inputint.cpp
addon/doxywizard/inputint.cpp
+2
-4
inputint.h
addon/doxywizard/inputint.h
+1
-2
inputstring.cpp
addon/doxywizard/inputstring.cpp
+13
-10
inputstring.h
addon/doxywizard/inputstring.h
+1
-2
inputstrlist.cpp
addon/doxywizard/inputstrlist.cpp
+13
-13
inputstrlist.h
addon/doxywizard/inputstrlist.h
+1
-2
pagewidget.cpp
addon/doxywizard/pagewidget.cpp
+0
-86
pixmaps.cpp
addon/doxywizard/pixmaps.cpp
+0
-238
pixmaps.h
addon/doxywizard/pixmaps.h
+0
-27
version.h
addon/doxywizard/version.h
+17
-0
configure
configure
+17
-8
config.doc
doc/config.doc
+1
-1
language.doc
doc/language.doc
+1
-1
doxygen.spec
packages/rpm/doxygen.spec
+1
-1
config.l
src/config.l
+7
-6
dot.cpp
src/dot.cpp
+85
-22
dot.h
src/dot.h
+4
-4
doxygen.cpp
src/doxygen.cpp
+25
-14
htmldocvisitor.cpp
src/htmldocvisitor.cpp
+15
-12
scanner.l
src/scanner.l
+13
-2
translator_adapter.h
src/translator_adapter.h
+0
-15
translator_cz.h
src/translator_cz.h
+15
-2
translator_es.h
src/translator_es.h
+1
-1
translator_it.h
src/translator_it.h
+13
-1
translator_nl.h
src/translator_nl.h
+12
-1
util.cpp
src/util.cpp
+43
-30
xmlgen.cpp
src/xmlgen.cpp
+1
-0
tmake.conf
tmake/lib/aix-g++/tmake.conf
+1
-0
tmake.conf
tmake/lib/aix-xlc/tmake.conf
+1
-0
tmake.conf
tmake/lib/beos-g++/tmake.conf
+1
-0
tmake.conf
tmake/lib/bsdi-g++/tmake.conf
+1
-0
tmake.conf
tmake/lib/dgux-g++/tmake.conf
+1
-0
tmake.conf
tmake/lib/freebsd-g++/tmake.conf
+1
-0
tmake.conf
tmake/lib/gnu-g++/tmake.conf
+1
-0
tmake.conf
tmake/lib/hpux-acc/tmake.conf
+1
-0
tmake.conf
tmake/lib/hpux-cc/tmake.conf
+1
-0
tmake.conf
tmake/lib/hpux-g++/tmake.conf
+1
-0
tmake.conf
tmake/lib/irix-64/tmake.conf
+1
-0
tmake.conf
tmake/lib/irix-dcc/tmake.conf
+1
-0
tmake.conf
tmake/lib/irix-g++/tmake.conf
+1
-0
tmake.conf
tmake/lib/irix-n32/tmake.conf
+1
-0
tmake.conf
tmake/lib/irix-o32/tmake.conf
+1
-0
tmake.conf
tmake/lib/linux-g++/tmake.conf
+1
-0
tmake.conf
tmake/lib/macosx-c++/tmake.conf
+1
-0
tmake.conf
tmake/lib/netbsd-g++/tmake.conf
+1
-0
tmake.conf
tmake/lib/openbsd-g++/tmake.conf
+1
-0
tmake.conf
tmake/lib/osf1-cxx/tmake.conf
+1
-0
tmake.conf
tmake/lib/osf1-g++/tmake.conf
+1
-0
tmake.conf
tmake/lib/qnx-g++/tmake.conf
+1
-0
tmake.conf
tmake/lib/sco-g++/tmake.conf
+1
-0
tmake.conf
tmake/lib/solaris-cc-gcc/tmake.conf
+1
-0
tmake.conf
tmake/lib/solaris-cc/tmake.conf
+1
-0
tmake.conf
tmake/lib/solaris-g++/tmake.conf
+1
-0
tmake.conf
tmake/lib/sunos-g++/tmake.conf
+1
-0
tmake.conf
tmake/lib/ultrix-g++/tmake.conf
+1
-0
generic.t
tmake/lib/unix/generic.t
+5
-1
tmake.conf
tmake/lib/unixware-g++/tmake.conf
+1
-0
tmake.conf
tmake/lib/unixware7-cc/tmake.conf
+1
-0
tmake.conf
tmake/lib/unixware7-g++/tmake.conf
+1
-0
No files found.
Doxyfile
View file @
c1605e5b
# Doxyfile 1.3.
5
# Doxyfile 1.3.
7
#---------------------------------------------------------------------------
# Project related configuration options
...
...
@@ -6,6 +6,7 @@
PROJECT_NAME = Doxygen
PROJECT_NUMBER =
OUTPUT_DIRECTORY = doxygen_docs
CREATE_SUBDIRS = YES
OUTPUT_LANGUAGE = English
USE_WINDOWS_ENCODING = NO
BRIEF_MEMBER_DESC = YES
...
...
@@ -15,6 +16,7 @@ ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = YES
STRIP_FROM_PATH = $(PWD)/
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = YES
MULTILINE_CPP_IS_BRIEF = NO
...
...
@@ -33,6 +35,7 @@ EXTRACT_ALL = YES
EXTRACT_PRIVATE = NO
EXTRACT_STATIC = YES
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = NO
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = NO
...
...
@@ -44,6 +47,7 @@ SHOW_INCLUDE_FILES = YES
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = NO
SORT_BY_SCOPE_NAME = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
...
...
INSTALL
View file @
c1605e5b
DOXYGEN Version 1.3.7-20040
617
DOXYGEN Version 1.3.7-20040
704
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (
17 June
2004)
Dimitri van Heesch (
04 July
2004)
README
View file @
c1605e5b
DOXYGEN Version 1.3.7_20040
617
DOXYGEN Version 1.3.7_20040
704
Please read INSTALL for compilation instructions.
...
...
@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (
17 June
2004)
Dimitri van Heesch (dimitri@stack.nl) (
04 July
2004)
VERSION
View file @
c1605e5b
1.3.7-20040
617
1.3.7-20040
704
addon/doxywizard/Makefile.in
View file @
c1605e5b
...
...
@@ -11,7 +11,7 @@
#
all
:
config.h config.l version.cpp Makefile.doxywizard
$(MAKE)
-f
Makefile.doxywizard
$@
$(MAKE)
-f
Makefile.doxywizard
QTDIR
=
$(QTDIR)
$@
config.h
:
../../src/config.h
$(CP)
../../src/config.h config.h
...
...
addon/doxywizard/README
View file @
c1605e5b
Doxywizard is a graphical front-end to read/edit/write doxygen configuration
files. It requires Qt version
2.1.0
or higher.
files. It requires Qt version
3.x
or higher.
As a special exception, Dimitri van Heesch gives permission to link this
program with Qt non-commercial edition, and distribute the resulting
executable, without including the source code for the Qt non-commercial
edition in the source distribution.
addon/doxywizard/doxywizard.cpp
View file @
c1605e5b
/******************************************************************************
*
*
*
* Copyright (C) 1997-2004 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <qmainwindow.h>
#include <qpopupmenu.h>
#include <qfileinfo.h>
#include <qmenubar.h>
#include <qstatusbar.h>
#include <qfiledialog.h>
#include <qmessagebox.h>
#include <qlabel.h>
#include <qhbox.h>
#include <qvbox.h>
#include <qlineedit.h>
#include <qapplication.h>
#include <qwhatsthis.h>
#include <qcheckbox.h>
#include <qpushbutton.h>
#include <qbuttongroup.h>
#include <qradiobutton.h>
#include <qlayout.h>
#include <qtabwidget.h>
#include <qtoolbar.h>
#include <qtoolbutton.h>
#include <qcombobox.h>
#include <qfiledialog.h>
#include <qmessagebox.h>
#include <qtextedit.h>
#include <qprocess.h>
#include <qtimer.h>
#include <qstatusbar.h>
#include <qfileinfo.h>
#include <qpopupmenu.h>
#include <qmenubar.h>
#include <qtooltip.h>
#if defined(Q_OS_MACX)
#include <CoreFoundation/CFBundle.h>
#include <ApplicationServices/ApplicationServices.h>
#undef check
#endif
#include "doxywizard.h"
#include "pagewidget.h"
#include "inputbool.h"
#include "inputstring.h"
#include "inputstrlist.h"
#include "inputint.h"
#include "expert.h"
#include "config.h"
#include "version.h"
#include "pixmaps.h"
QString
configFileName
;
const
int
messageTimeout
=
4000
;
//!< status bar message timeout in millisec.
const
int
messageTimeout
=
5000
;
//!< status bar message timeout in millisec.
#if defined(Q_OS_MACX)
QCString
getResourcePath
()
{
// todo: use qApp->applicationDirPath()
QCString
result
;
CFURLRef
pluginRef
=
CFBundleCopyBundleURL
(
CFBundleGetMainBundle
());
CFStringRef
macPath
=
CFURLCopyFileSystemPath
(
pluginRef
,
kCFURLPOSIXPathStyle
);
result
=
CFStringGetCStringPtr
(
macPath
,
CFStringGetSystemEncoding
());
result
+=
"/Contents/Resources/"
;
return
result
;
}
#endif
//-------------------------------------------------------------------------
static
bool
loadConfig
(
QString
loadFile
)
//==========================================================================
Step1
::
Step1
(
QWidget
*
parent
)
:
QWidget
(
parent
,
"Step1"
)
{
QFileInfo
fi
(
loadFile
);
if
(
!
fi
.
exists
()
)
{
QMessageBox
::
warning
(
0
,
"Warning"
,
"Input file "
+
loadFile
+
" does not exist! Starting new file."
,
"ok"
);
return
FALSE
;
}
QVBoxLayout
*
layout
=
new
QVBoxLayout
(
this
);
layout
->
setMargin
(
4
);
layout
->
setSpacing
(
8
);
layout
->
addWidget
(
new
QLabel
(
"Provide some information "
"about the project you are documenting"
,
this
));
QWidget
*
w
=
new
QWidget
(
this
);
QHBoxLayout
*
bl
=
new
QHBoxLayout
(
w
,
10
);
// set config values to their defaults
Config
::
instance
()
->
init
();
QVBox
*
col1
=
new
QVBox
(
w
);
col1
->
setSpacing
(
8
);
(
new
QLabel
(
"Project name:"
,
col1
))
->
setAlignment
(
Qt
::
AlignRight
|
Qt
::
AlignVCenter
);
(
new
QLabel
(
"Project version or id:"
,
col1
))
->
setAlignment
(
Qt
::
AlignRight
|
Qt
::
AlignVCenter
);
// parse the config file
// this will initialize the various Config data members
if
(
!
Config
::
instance
()
->
parse
(
loadFile
))
{
QMessageBox
::
warning
(
0
,
"Warning"
,
"Cannot open or read input "
+
loadFile
+
"!"
,
"abort"
);
return
FALSE
;
}
Config
::
instance
()
->
convertStrToVal
();
QVBox
*
col2
=
new
QVBox
(
w
);
col2
->
setSpacing
(
8
);
m_projName
=
new
QLineEdit
(
col2
);
m_projNumber
=
new
QLineEdit
(
col2
);
bl
->
addWidget
(
col1
);
bl
->
addWidget
(
col2
);
layout
->
addWidget
(
w
);
return
TRUE
;
//---------------------------------------------------
QFrame
*
f
=
new
QFrame
(
this
);
f
->
setFrameStyle
(
QFrame
::
HLine
|
QFrame
::
Sunken
);
layout
->
addWidget
(
f
);
layout
->
addWidget
(
new
QLabel
(
"Specify the directory to "
"scan for source code"
,
this
));
QHBox
*
row
=
new
QHBox
(
this
);
row
->
setSpacing
(
10
);
new
QLabel
(
"Source code directory:"
,
row
);
m_sourceDir
=
new
QLineEdit
(
row
);
m_srcSelectDir
=
new
QPushButton
(
"Select..."
,
row
);
layout
->
addWidget
(
row
);
m_recursive
=
new
QCheckBox
(
"Scan recursively"
,
this
);
m_recursive
->
setChecked
(
TRUE
);
layout
->
addWidget
(
m_recursive
);
//---------------------------------------------------
f
=
new
QFrame
(
this
);
f
->
setFrameStyle
(
QFrame
::
HLine
|
QFrame
::
Sunken
);
layout
->
addWidget
(
f
);
layout
->
addWidget
(
new
QLabel
(
"Specify the directory where doxygen should "
"put the generated documentation"
,
this
));
row
=
new
QHBox
(
this
);
row
->
setSpacing
(
10
);
new
QLabel
(
"Destination directory:"
,
row
);
m_destDir
=
new
QLineEdit
(
row
);
m_dstSelectDir
=
new
QPushButton
(
"Select..."
,
row
);
layout
->
addWidget
(
row
);
layout
->
addStretch
(
1
);
connect
(
m_srcSelectDir
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
selectSourceDir
()));
connect
(
m_dstSelectDir
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
selectDestinationDir
()));
}
static
bool
saveConfig
(
QString
saveFile
)
void
Step1
::
selectSourceDir
(
)
{
QFile
f
(
saveFile
);
if
(
!
f
.
open
(
IO_WriteOnly
)
)
{
QMessageBox
::
warning
(
0
,
"Warning"
,
"Cannot open file "
+
saveFile
+
" for writing. Nothing saved!."
,
"ok"
);
return
FALSE
;
// failure
}
m_sourceDir
->
setText
(
QFileDialog
::
getExistingDirectory
(
m_sourceDir
->
text
(),
this
));
}
QTextStream
t
(
&
f
);
Config
::
instance
()
->
writeTemplate
(
t
,
TRUE
,
FALSE
);
// write brief config file
void
Step1
::
selectDestinationDir
()
{
m_destDir
->
setText
(
QFileDialog
::
getExistingDirectory
(
m_destDir
->
text
(),
this
));
}
return
TRUE
;
// success
QString
Step1
::
getProjectName
()
const
{
return
m_projName
->
text
();
}
//--------------------------------------------------------------------------
QString
Step1
::
getProjectNumber
()
const
{
return
m_projNumber
->
text
();
}
Wizard
::
Wizard
(
int
argc
,
char
**
argv
)
:
QMainWindow
(
0
,
(
QCString
)
"DoxyWizard v"
+
versionString
)
QString
Step1
::
getSourceDir
()
const
{
// File popupmenu
return
m_sourceDir
->
text
();
}
bool
Step1
::
scanRecursively
()
const
{
return
m_recursive
->
isChecked
();
}
QString
Step1
::
getDestinationDir
()
const
{
return
m_destDir
->
text
();
}
void
Step1
::
setProjectName
(
const
QString
&
name
)
{
m_projName
->
setText
(
name
);
}
void
Step1
::
setProjectNumber
(
const
QString
&
num
)
{
m_projNumber
->
setText
(
num
);
}
hasChanged
=
FALSE
;
fileTools
=
new
QToolBar
(
this
,
"file operations"
);
fileTools
->
setLabel
(
"File Operations"
);
void
Step1
::
setSourceDir
(
const
QString
&
dir
)
{
m_sourceDir
->
setText
(
dir
);
}
new
QToolButton
(
QPixmap
(
file_xpm
),
"New File"
,
QString
::
null
,
this
,
SLOT
(
newFile
()),
fileTools
,
"new file"
);
void
Step1
::
setRecursiveScan
(
bool
enable
)
{
m_recursive
->
setChecked
(
enable
);
}
//QToolButton * fileOpen =
new
QToolButton
(
QPixmap
(
fileopen_xpm
),
"Open File"
,
QString
::
null
,
this
,
SLOT
(
loadFile
()),
fileTools
,
"open file"
);
void
Step1
::
setDestinationDir
(
const
QString
&
dir
)
{
m_destDir
->
setText
(
dir
);
}
//QToolButton * fileSave =
new
QToolButton
(
QPixmap
(
filesave_xpm
),
"Save File"
,
QString
::
null
,
this
,
SLOT
(
saveFile
()),
fileTools
,
"save file"
);
//Micha: QToolButton * =
new
QToolButton
(
QPixmap
(
rundoxygen_xpm
),
"Save and Run doxygen"
,
QString
::
null
,
this
,
SLOT
(
runDoxygen
()),
fileTools
,
"save and run doxygen"
);
//==========================================================================
Step2
::
Step2
(
QWidget
*
parent
)
:
QWidget
(
parent
,
"Step2"
)
{
QVBoxLayout
*
layout
=
new
QVBoxLayout
(
this
);
layout
->
setSpacing
(
8
);
QWhatsThis
::
whatsThisButton
(
fileTools
);
m_extractMode
=
new
QButtonGroup
(
"Select the desired extraction mode:"
,
this
);
QGridLayout
*
gbox
=
new
QGridLayout
(
m_extractMode
,
4
,
1
,
8
,
0
);
gbox
->
addRowSpacing
(
0
,
fontMetrics
().
lineSpacing
()
+
2
);
gbox
->
addWidget
(
new
QRadioButton
(
"Documented entities only"
,
m_extractMode
),
1
,
0
);
gbox
->
addWidget
(
new
QRadioButton
(
"All entities"
,
m_extractMode
),
2
,
0
);
gbox
->
addWidget
(
m_crossRef
=
new
QCheckBox
(
"Include cross-referenced source code in the output"
,
m_extractMode
),
3
,
0
);
m_extractMode
->
setButton
(
0
);
layout
->
addWidget
(
m_extractMode
);
QPopupMenu
*
file
=
new
QPopupMenu
;
file
->
insertItem
(
QIconSet
(
QPixmap
(
file_xpm
)),
"&New"
,
this
,
SLOT
(
newFile
()),
CTRL
+
Key_N
);
file
->
insertItem
(
QIconSet
(
QPixmap
(
fileopen_xpm
)),
"&Load"
,
this
,
SLOT
(
loadFile
()),
CTRL
+
Key_O
);
file
->
insertSeparator
();
file
->
insertItem
(
QIconSet
(
QPixmap
(
filesave_xpm
)),
"&Save"
,
this
,
SLOT
(
saveFile
()),
CTRL
+
Key_S
);
file
->
insertItem
(
"&Save as ..."
,
this
,
SLOT
(
saveAsFile
())
);
file
->
insertSeparator
();
file
->
insertItem
(
"&Quit"
,
this
,
SLOT
(
quit
()),
CTRL
+
Key_Q
);
// Doxygen popupmenu
QPopupMenu
*
doxygen
=
new
QPopupMenu
;
int
itemIndex
=
doxygen
->
insertItem
(
QIconSet
(
QPixmap
(
rundoxygen_xpm
)),
"&Run"
,
this
,
SLOT
(
runDoxygen
()),
CTRL
+
Key_R
);
doxygen
->
setWhatsThis
(
itemIndex
,
"Run doxygen with the current configuration file..."
);
// Help popupmenu
QPopupMenu
*
help
=
new
QPopupMenu
;
help
->
insertItem
(
"&About"
,
this
,
SLOT
(
about
()),
Key_F1
);
help
->
insertItem
(
"What's &This"
,
this
,
SLOT
(
whatsThis
()),
SHIFT
+
Key_F1
);
// menubar definition
menuBar
()
->
insertItem
(
"&File"
,
file
);
menuBar
()
->
insertItem
(
"&Doxygen"
,
doxygen
);
menuBar
()
->
insertSeparator
();
menuBar
()
->
insertItem
(
"&Help"
,
help
);
statusBar
()
->
message
(
"Welcome to DoxyWizard"
,
messageTimeout
);
cw
=
new
ConfigFile
(
this
);
connect
(
cw
,
SIGNAL
(
changed
()),
this
,
SLOT
(
changed
()));
setCentralWidget
(
cw
);
cw
->
show
();
if
(
argc
==
2
)
{
loadFile
(
argv
[
1
]);
//---------------------------------------------------
QFrame
*
f
=
new
QFrame
(
this
);
f
->
setFrameStyle
(
QFrame
::
HLine
|
QFrame
::
Sunken
);
layout
->
addWidget
(
f
);
m_optimizeLang
=
new
QButtonGroup
(
"Select programming language to optimize the results for"
,
this
);
gbox
=
new
QGridLayout
(
m_optimizeLang
,
4
,
1
,
8
,
0
);
gbox
->
addRowSpacing
(
0
,
fontMetrics
().
lineSpacing
()
+
2
);
gbox
->
addWidget
(
new
QRadioButton
(
"Optimize for C++ output"
,
m_optimizeLang
),
1
,
0
);
gbox
->
addWidget
(
new
QRadioButton
(
"Optimize for Java output"
,
m_optimizeLang
),
2
,
0
);
gbox
->
addWidget
(
new
QRadioButton
(
"Optimize for C output"
,
m_optimizeLang
),
3
,
0
);
m_optimizeLang
->
setButton
(
0
);
layout
->
addWidget
(
m_optimizeLang
);
layout
->
addStretch
(
1
);
connect
(
m_crossRef
,
SIGNAL
(
stateChanged
(
int
)),
parent
,
SLOT
(
changeCrossRefState
(
int
)));
}
bool
Step2
::
crossReferencingEnabled
()
const
{
return
m_crossRef
->
isOn
();
}
void
Step2
::
enableCrossReferencing
()
{
m_crossRef
->
setChecked
(
TRUE
);
}
bool
Step2
::
extractAll
()
const
{
return
m_extractMode
->
selectedId
()
==
1
;
}
bool
Step2
::
crossReferencing
()
const
{
return
m_crossRef
->
isChecked
();
}
OptLang
Step2
::
optimizeFor
()
const
{
switch
(
m_optimizeLang
->
selectedId
())
{
case
0
:
return
Lang_Cpp
;
case
1
:
return
Lang_Java
;
case
2
:
return
Lang_C
;
}
else
return
Lang_Cpp
;
}
void
Step2
::
setExtractAll
(
bool
enable
)
{
m_extractMode
->
setButton
(
enable
?
1
:
0
);
}
void
Step2
::
setCrossReferencing
(
bool
enable
)
{
m_crossRef
->
setChecked
(
enable
);
}
void
Step2
::
setOptimizeFor
(
OptLang
lang
)
{
switch
(
lang
)
{
newFile
();
case
Lang_Cpp
:
m_optimizeLang
->
setButton
(
0
);
break
;
case
Lang_Java
:
m_optimizeLang
->
setButton
(
1
);
break
;
case
Lang_C
:
m_optimizeLang
->
setButton
(
2
);
break
;
}
refreshCaption
();
resize
(
640
,
480
);
}
//==========================================================================
Step3
::
Step3
(
QWidget
*
parent
)
:
QWidget
(
parent
,
"Step3"
)
{
QVBoxLayout
*
layout
=
new
QVBoxLayout
(
this
);
QButtonGroup
*
bg
=
new
QButtonGroup
(
"Output format(s) to generate"
,
this
);
QGridLayout
*
gbox
=
new
QGridLayout
(
bg
,
8
,
1
,
8
,
0
);
gbox
->
addRowSpacing
(
0
,
fontMetrics
().
lineSpacing
()
+
2
);
gbox
->
addWidget
(
m_htmlEnabled
=
new
QCheckBox
(
"HTML"
,
bg
),
1
,
0
);
QWidget
*
w
=
new
QWidget
(
bg
);
QHBoxLayout
*
bl
=
new
QHBoxLayout
(
w
);
m_htmlOptions
=
new
QButtonGroup
(
w
);
m_htmlOptions
->
hide
();
m_htmlOptionBox
=
new
QVBox
(
w
);
m_htmlOptions
->
insert
(
new
QRadioButton
(
"plain HTML"
,
m_htmlOptionBox
));
m_htmlOptions
->
insert
(
new
QRadioButton
(
"with frames and a navigation tree"
,
m_htmlOptionBox
));
m_htmlOptions
->
insert
(
new
QRadioButton
(
"prepare for compressed HTML (.chm)"
,
m_htmlOptionBox
));
m_htmlOptions
->
insert
(
m_searchEnabled
=
new
QCheckBox
(
"With search function (requires PHP enabled web server)"
,
m_htmlOptionBox
));
bl
->
addSpacing
(
30
);
bl
->
addWidget
(
m_htmlOptionBox
);
m_htmlOptions
->
setButton
(
0
);
m_htmlOptionBox
->
setEnabled
(
TRUE
);
gbox
->
addWidget
(
w
,
2
,
0
);
gbox
->
addWidget
(
m_latexEnabled
=
new
QCheckBox
(
"LaTeX"
,
bg
),
3
,
0
);
w
=
new
QWidget
(
bg
);
bl
=
new
QHBoxLayout
(
w
);
m_texOptions
=
new
QButtonGroup
(
w
);
m_texOptions
->
hide
();
m_texOptionBox
=
new
QVBox
(
w
);
m_texOptions
->
insert
(
new
QRadioButton
(
"as intermediate format for hyperlinked PDF"
,
m_texOptionBox
));
m_texOptions
->
insert
(
new
QRadioButton
(
"as intermediate format for PDF"
,
m_texOptionBox
));
m_texOptions
->
insert
(
new
QRadioButton
(
"as intermediate format for PostScript"
,
m_texOptionBox
));
bl
->
addSpacing
(
30
);
bl
->
addWidget
(
m_texOptionBox
);
m_texOptions
->
setButton
(
0
);
m_texOptionBox
->
setEnabled
(
FALSE
);
gbox
->
addWidget
(
w
,
4
,
0
);
gbox
->
addWidget
(
m_manEnabled
=
new
QCheckBox
(
"Man pages"
,
bg
),
5
,
0
);
gbox
->
addWidget
(
m_rtfEnabled
=
new
QCheckBox
(
"Rich Text Format (RTF)"
,
bg
),
6
,
0
);
gbox
->
addWidget
(
m_xmlEnabled
=
new
QCheckBox
(
"XML"
,
bg
),
7
,
0
);
bg
->
setButton
(
0
);
layout
->
addWidget
(
bg
);
//w = new QWidget( this );
//bl = new QHBoxLayout(w);
//bl->addWidget(new QLabel("Select the output language:",w));
//m_outputLang = new QComboBox(w);
//m_outputLang->setMinimumSize(m_outputLang->sizeHint());
//bl->setSpacing(10);
//bl->addWidget(m_outputLang);
//bl->addStretch(1);
//m_outputLang->insertItem("English");
//m_outputLang->insertItem("Dutch");
//m_outputLang->insertItem("German");
//m_outputLang->insertItem("Spanish");
//m_outputLang->insertItem("French");
//m_outputLang->insertItem("Chinese");
//m_outputLang->insertItem("Japanese");
//m_outputLang->insertItem("Korean");
//layout->addWidget(w);
layout
->
addStretch
(
1
);
connect
(
m_latexEnabled
,
SIGNAL
(
stateChanged
(
int
)),
this
,
SLOT
(
latexStateChange
(
int
)));
connect
(
m_htmlEnabled
,
SIGNAL
(
stateChanged
(
int
)),
this
,
SLOT
(
htmlStateChange
(
int
)));
}
void
Wizard
::
newFile
(
)
void
Step3
::
latexStateChange
(
int
state
)
{
if
(
hasChanged
)
if
(
state
==
QButton
::
On
)
{
switch
(
QMessageBox
::
warning
(
this
,
"DoxyWizard"
,
"Start a new file and lose changes?"
,
"Yes"
,
"No"
,
0
,
0
,
1
))
{
case
0
:
break
;
default
:
// command aborted by the user
return
;
}
m_texOptionBox
->
setEnabled
(
TRUE
);
}
else
if
(
state
==
QButton
::
Off
)
{
m_texOptionBox
->
setEnabled
(
FALSE
);
}
Config
::
instance
()
->
init
();
configFileName
=
"Doxyfile"
;
cw
->
init
();
}
void
Wizard
::
loadFile
(
const
char
*
fileNam
e
)
void
Step3
::
htmlStateChange
(
int
stat
e
)
{
if
(
fileName
==
0
)
if
(
state
==
QButton
::
On
)
{
configFileName
=
QFileDialog
::
getOpenFileName
(
);
m_htmlOptionBox
->
setEnabled
(
TRUE
);
}
else
else
if
(
state
==
QButton
::
Off
)
{
m_htmlOptionBox
->
setEnabled
(
FALSE
);
}
}
bool
Step3
::
htmlEnabled
()
const
{
return
m_htmlEnabled
->
isChecked
();
}
bool
Step3
::
latexEnabled
()
const
{
return
m_latexEnabled
->
isChecked
();
}
bool
Step3
::
manEnabled
()
const
{
return
m_manEnabled
->
isChecked
();
}
bool
Step3
::
rtfEnabled
()
const
{
return
m_rtfEnabled
->
isChecked
();
}
bool
Step3
::
xmlEnabled
()
const
{
return
m_xmlEnabled
->
isChecked
();
}
bool
Step3
::
searchEnabled
()
const
{
return
m_searchEnabled
->
isChecked
();
}
HtmlStyle
Step3
::
htmlStyle
()
const
{
switch
(
m_htmlOptions
->
selectedId
())
{
configFileName
=
fileName
;
case
0
:
return
HS_Plain
;
case
1
:
return
HS_TreeView
;
case
2
:
return
HS_CHM
;
}
return
HS_Plain
;
}
if
(
!
configFileName
.
isNull
()
)
TexStyle
Step3
::
texStyle
()
const
{
switch
(
m_texOptions
->
selectedId
())
{
//initData( configFileName );
loadConfig
(
configFileName
);
cw
->
init
();
case
0
:
return
TS_PDFHyper
;
case
1
:
return
TS_PDF
;
case
2
:
return
TS_PS
;
}
return
TS_PDFHyper
;
}
statusBar
()
->
message
(
configFileName
,
messageTimeout
);
}
void
Step3
::
setHtmlEnabled
(
bool
enable
)
{
m_htmlEnabled
->
setChecked
(
enable
);
}
void
Wizard
::
loadFile
(
)
void
Step3
::
setLatexEnabled
(
bool
enable
)
{
if
(
hasChanged
)
m_latexEnabled
->
setChecked
(
enable
);
}
void
Step3
::
setManEnabled
(
bool
enable
)
{
m_manEnabled
->
setChecked
(
enable
);
}
void
Step3
::
setRtfEnabled
(
bool
enable
)
{
m_rtfEnabled
->
setChecked
(
enable
);
}
void
Step3
::
setXmlEnabled
(
bool
enable
)
{
m_xmlEnabled
->
setChecked
(
enable
);
}
void
Step3
::
setSearchEnabled
(
bool
enable
)
{
m_searchEnabled
->
setChecked
(
enable
);
}
void
Step3
::
setHtmlStyle
(
HtmlStyle
style
)
{
switch
(
style
)
{
switch
(
QMessageBox
::
warning
(
this
,
"DoxyWizard"
,
"Load a new file and lose changes?"
,
"Yes"
,
"No"
,
0
,
0
,
1
))
{
case
0
:
break
;
default
:
// command aborted by the user
return
;
}
case
HS_Plain
:
m_htmlOptions
->
setButton
(
0
);
break
;
case
HS_TreeView
:
m_htmlOptions
->
setButton
(
1
);
break
;
case
HS_CHM
:
m_htmlOptions
->
setButton
(
2
);
break
;
}
loadFile
(
0
);
}
void
Wizard
::
saveFile
(
)
void
Step3
::
setTexStyle
(
TexStyle
style
)
{
//printf("configFileName=`%s'\n",configFileName.data());
if
(
configFileName
.
isEmpty
())
switch
(
style
)
{
saveAsFile
();
return
;
case
TS_PDFHyper
:
m_texOptions
->
setButton
(
0
);
break
;
case
TS_PDF
:
m_texOptions
->
setButton
(
1
);
break
;
case
TS_PS
:
m_texOptions
->
setButton
(
2
);
break
;
}
else
}
//==========================================================================
Step4
::
Step4
(
QWidget
*
parent
)
:
QWidget
(
parent
,
"Step4"
)
{
QVBoxLayout
*
layout
=
new
QVBoxLayout
(
this
);
m_diagramMode
=
new
QButtonGroup
(
"Diagrams to generate"
,
this
);
QGridLayout
*
gbox
=
new
QGridLayout
(
m_diagramMode
,
5
,
1
,
8
,
0
);
gbox
->
addRowSpacing
(
0
,
fontMetrics
().
lineSpacing
()
+
2
);
gbox
->
addWidget
(
new
QRadioButton
(
"No diagrams"
,
m_diagramMode
),
1
,
0
);
gbox
->
addWidget
(
new
QRadioButton
(
"Use built-in class diagram generator"
,
m_diagramMode
),
2
,
0
);
gbox
->
addWidget
(
new
QRadioButton
(
"Use dot tool from the GraphViz package to generate"
,
m_diagramMode
),
3
,
0
);
QWidget
*
w
=
new
QWidget
(
m_diagramMode
);
QHBoxLayout
*
bl
=
new
QHBoxLayout
(
w
);
QButtonGroup
*
dotGroup
=
new
QButtonGroup
(
w
);
dotGroup
->
hide
();
m_dotOptions
=
new
QVBox
(
w
);
dotGroup
->
insert
(
m_dotClass
=
new
QCheckBox
(
"Class diagrams"
,
m_dotOptions
));
dotGroup
->
insert
(
m_dotCollaboration
=
new
QCheckBox
(
"Collaboration diagrams"
,
m_dotOptions
));
dotGroup
->
insert
(
m_dotInclude
=
new
QCheckBox
(
"Include dependency graphs"
,
m_dotOptions
));
dotGroup
->
insert
(
m_dotIncludedBy
=
new
QCheckBox
(
"Included by dependency graphs"
,
m_dotOptions
));
dotGroup
->
insert
(
m_dotInheritance
=
new
QCheckBox
(
"Overall Class hierarchy"
,
m_dotOptions
));
dotGroup
->
insert
(
m_dotCall
=
new
QCheckBox
(
"Call graphs"
,
m_dotOptions
));
bl
->
addSpacing
(
30
);
bl
->
addWidget
(
m_dotOptions
);
dotGroup
->
setButton
(
0
);
m_dotOptions
->
setEnabled
(
FALSE
);
gbox
->
addWidget
(
w
,
4
,
0
);
m_diagramMode
->
setButton
(
1
);
layout
->
addWidget
(
m_diagramMode
);
layout
->
addStretch
(
1
);
connect
(
m_diagramMode
,
SIGNAL
(
clicked
(
int
)),
this
,
SLOT
(
diagramModeChanged
(
int
)));
connect
(
m_dotCall
,
SIGNAL
(
stateChanged
(
int
)),
parent
,
SLOT
(
changeCallGraphState
(
int
)));
}
void
Step4
::
diagramModeChanged
(
int
buttonId
)
{
m_dotOptions
->
setEnabled
(
buttonId
==
2
);
}
void
Step4
::
disableCallGraphs
()
{
m_dotCall
->
setChecked
(
FALSE
);
}
bool
Step4
::
callGraphEnabled
()
const
{
return
m_dotCall
->
isOn
();
}
DiagramMode
Step4
::
diagramMode
()
const
{
switch
(
m_diagramMode
->
selectedId
())
{
saveConfig
(
configFileName
);
statusBar
()
->
message
(
configFileName
+
" saved"
,
messageTimeout
);
case
0
:
return
DM_None
;
case
1
:
return
DM_Builtin
;
case
2
:
return
DM_Dot
;
}
hasChanged
=
FALSE
;
refreshCaption
();
return
DM_None
;
}
bool
Step4
::
classDiagram
()
const
{
return
m_dotClass
->
isChecked
();
}
bool
Step4
::
collaborationDiagram
()
const
{
return
m_dotCollaboration
->
isChecked
();
}
bool
Step4
::
includeGraph
()
const
{
return
m_dotInclude
->
isChecked
();
}
bool
Step4
::
includedByGraph
()
const
{
return
m_dotIncludedBy
->
isChecked
();
}
bool
Step4
::
inheritanceGraph
()
const
{
return
m_dotInheritance
->
isChecked
();
}
void
Wizard
::
saveAsFile
()
bool
Step4
::
callGraph
()
const
{
configFileName
=
QFileDialog
::
getSaveFileName
();
if
(
configFileName
.
isNull
())
return
m_dotCall
->
isChecked
();
}
void
Step4
::
setDiagramMode
(
DiagramMode
mode
)
{
switch
(
mode
)
{
statusBar
()
->
message
(
"Save aborted"
,
messageTimeout
);
return
;
// operation cancelled by the user
case
DM_None
:
m_diagramMode
->
setButton
(
0
);
break
;
case
DM_Builtin
:
m_diagramMode
->
setButton
(
1
);
break
;
case
DM_Dot
:
m_diagramMode
->
setButton
(
2
);
break
;
}
}
saveConfig
(
configFileName
);
statusBar
()
->
message
(
"Saved as "
+
configFileName
,
messageTimeout
);
void
Step4
::
setClassDiagram
(
bool
enable
)
{
m_dotClass
->
setChecked
(
enable
);
}
//Micha
// TODO: Use QProcess to show the output in a window
void
Wizard
::
runDoxygen
()
void
Step4
::
setCollaborationDiagram
(
bool
enable
)
{
saveFile
();
QString
orgDir
=
QDir
::
currentDirPath
();
QFileInfo
fi
(
configFileName
);
// cd to the config dir
QDir
::
setCurrent
(
fi
.
dirPath
());
// run doxygen on the config file
QString
s
=
"doxygen
\"
"
+
fi
.
fileName
()
+
"
\"
"
;
// actually run the exe
system
((
const
char
*
)
s
);
statusBar
()
->
message
(
"doxygen completed: "
+
configFileName
,
messageTimeout
);
hasChanged
=
FALSE
;
refreshCaption
();
QDir
::
setCurrent
(
orgDir
);
}
m_dotCollaboration
->
setChecked
(
enable
);
}
void
Step4
::
setIncludeGraph
(
bool
enable
)
{
m_dotInclude
->
setChecked
(
enable
);
}
void
Step4
::
setIncludedByGraph
(
bool
enable
)
{
m_dotIncludedBy
->
setChecked
(
enable
);
}
void
Step4
::
setInheritanceGraph
(
bool
enable
)
{
m_dotInheritance
->
setChecked
(
enable
);
}
void
Step4
::
setCallGraph
(
bool
enable
)
{
m_dotCall
->
setChecked
(
enable
);
}
void
Wizard
::
quit
()
//==========================================================================
Wizard
::
Wizard
(
QWidget
*
parent
=
0
)
:
QTabDialog
(
parent
)
{
addTab
(
m_step1
=
new
Step1
(
this
),
"Project"
);
addTab
(
m_step2
=
new
Step2
(
this
),
"Mode"
);
addTab
(
m_step3
=
new
Step3
(
this
),
"Output"
);
addTab
(
m_step4
=
new
Step4
(
this
),
"Diagrams"
);
setCancelButton
();
}
void
Wizard
::
changeCallGraphState
(
int
state
)
{
if
(
hasChanged
)
if
(
state
==
QButton
::
On
&&
!
m_step2
->
crossReferencingEnabled
()
)
{
switch
(
QMessageBox
::
warning
(
this
,
"DoxyWizard"
,
"Quit and lose changes?"
,
"Yes"
,
"No"
,
0
,
0
,
1
))
if
(
QMessageBox
::
question
(
this
,
"This option depends on another option"
,
"The call graph option requires that cross-referencing "
"of source code is enabled.
\n
Do you want to enable this "
"option?"
,
QMessageBox
::
Yes
,
QMessageBox
::
No
)
==
QMessageBox
::
Yes
)
{
case
0
:
qApp
->
quit
();
break
;
case
1
:
break
;
m_step2
->
enableCrossReferencing
();
}
else
{
m_step4
->
disableCallGraphs
()
;
}
}
else
}
void
Wizard
::
changeCrossRefState
(
int
state
)
{
if
(
state
==
QButton
::
Off
&&
m_step4
->
callGraphEnabled
())
{
qApp
->
quit
();
if
(
QMessageBox
::
question
(
this
,
"Another option depends on this one"
,
"The call graph option requires that cross-referencing "
"of source code is enabled.
\n
Do you want to disable the call "
"graph option?"
,
QMessageBox
::
Yes
,
QMessageBox
::
No
)
==
QMessageBox
::
Yes
)
{
m_step4
->
disableCallGraphs
();
}
else
{
m_step2
->
enableCrossReferencing
();
}
}
}
void
Wizard
::
changed
()
//==========================================================================
MainWidget
::
MainWidget
(
QWidget
*
parent
)
:
QMainWindow
(
parent
,
"MainWidget"
)
{
hasChanged
=
TRUE
;
refreshCaption
();
setCaption
(
"Doxygen GUI frontend"
);
// initialize config settings
Config
::
instance
()
->
init
();
Config
::
instance
()
->
check
();
QWidget
*
w
=
new
QWidget
(
this
);
setCentralWidget
(
w
);
QVBoxLayout
*
layout
=
new
QVBoxLayout
(
w
);
layout
->
setMargin
(
10
);
QPopupMenu
*
file
=
new
QPopupMenu
(
this
);
file
->
insertItem
(
"Open..."
,
this
,
SLOT
(
loadConfigFile
()),
CTRL
+
Key_O
);
file
->
insertItem
(
"Save As..."
,
this
,
SLOT
(
saveConfigFile
()),
CTRL
+
Key_S
);
m_recentMenu
=
new
QPopupMenu
;
file
->
insertItem
(
"&Recent configurations"
,
m_recentMenu
);
connect
(
m_recentMenu
,
SIGNAL
(
activated
(
int
)),
this
,
SLOT
(
openRecent
(
int
)));
file
->
insertItem
(
"Set as default..."
,
this
,
SLOT
(
saveDefaults
())
);
file
->
insertItem
(
"Reset..."
,
this
,
SLOT
(
resetConfig
())
);
file
->
insertItem
(
"Quit"
,
this
,
SLOT
(
quit
()),
CTRL
+
Key_Q
);
QPopupMenu
*
help
=
new
QPopupMenu
(
this
);
#if defined(Q_OS_MACX)
help
->
insertItem
(
"Online manual"
,
this
,
SLOT
(
manual
()),
Key_F1
);
#endif
help
->
insertItem
(
"About"
,
this
,
SLOT
(
about
())
);
menuBar
()
->
insertItem
(
"File"
,
file
);
menuBar
()
->
insertItem
(
"Help"
,
help
);
//---------------------------------------------------
QVBox
*
heading
=
new
QVBox
(
w
);
QLabel
*
l
=
new
QLabel
(
"Step 1: Configure doxygen"
,
heading
);
QFrame
*
f
=
new
QFrame
(
heading
);
f
->
setFrameStyle
(
QFrame
::
HLine
|
QFrame
::
Sunken
);
//f->setFixedSize(l->sizeHint().width(),f->sizeHint().height());
layout
->
addWidget
(
heading
);
layout
->
addSpacing
(
10
);
l
=
new
QLabel
(
"Choose one of the following ways to configure doxygen"
,
w
);
layout
->
addWidget
(
l
);
layout
->
addSpacing
(
5
);
QHBoxLayout
*
hbl
=
new
QHBoxLayout
(
layout
);
hbl
->
setSpacing
(
8
);
m_wizard
=
new
QPushButton
(
"Wizard..."
,
w
);
QToolTip
::
add
(
m_wizard
,
"Quickly configure the most important settings"
);
hbl
->
addWidget
(
m_wizard
);
m_expert
=
new
QPushButton
(
"Expert..."
,
w
);
QToolTip
::
add
(
m_expert
,
"Determine all configuration settings in detail"
);
hbl
->
addWidget
(
m_expert
);
m_load
=
new
QPushButton
(
"Load..."
,
w
);
QToolTip
::
add
(
m_load
,
"Load the configuration settings from file"
);
hbl
->
addWidget
(
m_load
);
hbl
->
addStretch
(
1
);
//---------------------------------------------------
heading
=
new
QVBox
(
w
);
l
=
new
QLabel
(
"Step 2: Save the configuration file"
,
heading
);
f
=
new
QFrame
(
heading
);
f
->
setFrameStyle
(
QFrame
::
HLine
|
QFrame
::
Sunken
);
//f->setFixedSize(l->sizeHint().width(),f->sizeHint().height());
layout
->
addSpacing
(
15
);
layout
->
addWidget
(
heading
);
layout
->
addSpacing
(
5
);
QGridLayout
*
grid
=
new
QGridLayout
(
layout
,
1
,
2
,
10
);
m_save
=
new
QPushButton
(
"Save..."
,
w
);
m_save
->
setFixedSize
(
m_save
->
sizeHint
());
grid
->
addWidget
(
m_save
,
0
,
0
);
grid
->
addWidget
(
m_saveStatus
=
new
QLabel
(
w
),
0
,
1
);
m_saveStatus
->
setTextFormat
(
Qt
::
RichText
);
//---------------------------------------------------
heading
=
new
QVBox
(
w
);
l
=
new
QLabel
(
"Step 3: Specify the directory from which to run doxygen"
,
heading
);
f
=
new
QFrame
(
heading
);
f
->
setFrameStyle
(
QFrame
::
HLine
|
QFrame
::
Sunken
);
//f->setFixedSize(l->sizeHint().width(),f->sizeHint().height());
layout
->
addSpacing
(
15
);
layout
->
addWidget
(
heading
);
layout
->
addSpacing
(
5
);
QHBoxLayout
*
row
=
new
QHBoxLayout
(
layout
);
row
->
setSpacing
(
10
);
row
->
addWidget
(
new
QLabel
(
"Working directory:"
,
w
));
m_workingDir
=
new
QLineEdit
(
w
);
m_selWorkingDir
=
new
QPushButton
(
"Select..."
,
w
);
row
->
addWidget
(
m_workingDir
,
1
);
row
->
addWidget
(
m_selWorkingDir
);
//---------------------------------------------------
heading
=
new
QVBox
(
w
);
l
=
new
QLabel
(
"Step 4: Run doxygen"
,
heading
);
f
=
new
QFrame
(
heading
);
f
->
setFrameStyle
(
QFrame
::
HLine
|
QFrame
::
Sunken
);
//f->setFixedSize(l->sizeHint().width(),f->sizeHint().height());
layout
->
addSpacing
(
15
);
layout
->
addWidget
(
heading
);
layout
->
addSpacing
(
5
);
row
=
new
QHBoxLayout
(
layout
);
row
->
setSpacing
(
10
);
m_run
=
new
QPushButton
(
"Start"
,
w
);
row
->
addWidget
(
m_run
);
row
->
addWidget
(
m_runStatus
=
new
QLabel
(
"Status: not running"
,
w
));
row
->
addStretch
(
1
);
m_run
->
setEnabled
(
FALSE
);
m_runStatus
->
setEnabled
(
FALSE
);
m_saveLog
=
new
QPushButton
(
"Save log..."
,
w
);
m_saveLog
->
setEnabled
(
FALSE
);
row
->
addWidget
(
m_saveLog
);
layout
->
addSpacing
(
8
);
layout
->
addWidget
(
m_outputHeading
=
new
QLabel
(
"Output produced by doxygen"
,
w
));
grid
=
new
QGridLayout
(
layout
,
1
,
1
,
3
);
m_outputLog
=
new
QTextEdit
(
w
);
m_outputLog
->
setReadOnly
(
TRUE
);
m_outputLog
->
setMinimumWidth
(
600
);
grid
->
addWidget
(
m_outputLog
,
0
,
0
);
grid
->
setColStretch
(
0
,
1
);
grid
->
setRowStretch
(
0
,
1
);
m_outputLog
->
setEnabled
(
FALSE
);
m_outputHeading
->
setEnabled
(
FALSE
);
// make connections
connect
(
m_wizard
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
launchWizard
()));
connect
(
m_expert
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
launchExpert
()));
connect
(
m_load
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
loadConfigFile
()));
connect
(
m_save
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
saveConfigFile
()));
connect
(
m_selWorkingDir
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
selectWorkingDir
()));
connect
(
m_workingDir
,
SIGNAL
(
textChanged
(
const
QString
&
)),
this
,
SLOT
(
updateRunnable
(
const
QString
&
)));
connect
(
m_run
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
runDoxygen
()));
connect
(
m_saveLog
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
saveLog
()));
// load default settings
m_settings
.
setPath
(
"www.doxygen.org"
,
"Doxygen GUI"
);
bool
ok
;
QString
config
=
m_settings
.
readEntry
(
"/config/default"
,
QString
::
null
,
&
ok
);
if
(
ok
&&
!
config
.
isEmpty
())
{
Config
::
instance
()
->
parseString
(
"default settings"
,
config
);
}
QString
workingDir
=
m_settings
.
readEntry
(
"/config/workingdir"
,
QString
::
null
,
&
ok
);
if
(
ok
&&
!
workingDir
.
isEmpty
())
{
m_workingDir
->
setText
(
workingDir
);
}
setConfigSaved
(
FALSE
);
for
(
int
i
=
0
;
i
<
10
;
i
++
)
{
QString
entry
=
m_settings
.
readEntry
(
QString
().
sprintf
(
"/recent/config%d"
,
i
));
if
(
!
entry
.
isEmpty
())
{
addRecentFile
(
entry
);
}
}
m_runProcess
=
new
QProcess
;
connect
(
m_runProcess
,
SIGNAL
(
readyReadStdout
()),
this
,
SLOT
(
readStdout
()));
connect
(
m_runProcess
,
SIGNAL
(
processExited
()),
this
,
SLOT
(
runComplete
()));
m_running
=
FALSE
;
m_timer
=
new
QTimer
;
connect
(
m_timer
,
SIGNAL
(
timeout
()),
this
,
SLOT
(
readStdout
()));
statusBar
()
->
message
(
"Welcome to Doxygen"
,
messageTimeout
);
}
void
Wizard
::
refreshCaption
()
MainWidget
::~
MainWidget
()
{
QString
s
;
if
(
hasChanged
)
s
=
" *"
;
setCaption
(
"Doxywizard - ["
+
configFileName
+
s
+
"]"
);
delete
m_runProcess
;
}
void
Wizard
::
about
()
void
MainWidget
::
selectWorkingDir
()
{
QCString
text
(
4096
);
text
.
sprintf
(
"<qt><center>A tool to create and edit configuration files "
"that can be read by doxygen version %s.</center><p>"
"<center>Written by Dimitri van Heesch</center><p>"
"<center>(c) 2000-2003</center></qt>"
,
versionString
);
QMessageBox
::
about
(
this
,
"DoxyWizard"
,
text
);
QString
selectedDir
=
QFileDialog
::
getExistingDirectory
(
m_workingDir
->
text
());
if
(
!
selectedDir
.
isEmpty
())
{
m_workingDir
->
setText
(
selectedDir
);
}
}
//----------------------------------------------------------------------
void
MainWidget
::
updateRunnable
(
const
QString
&
newDirName
)
{
if
(
m_running
)
return
;
QFileInfo
fi
(
newDirName
);
bool
isRunnable
=
fi
.
exists
()
&&
fi
.
isDir
()
&&
m_configSaved
;
m_run
->
setEnabled
(
isRunnable
);
m_runStatus
->
setEnabled
(
isRunnable
);
m_outputHeading
->
setEnabled
(
isRunnable
);
m_outputLog
->
setEnabled
(
isRunnable
);
m_saveLog
->
setEnabled
(
isRunnable
&&
!
m_outputLog
->
text
().
isEmpty
());
}
ConfigFile
::
ConfigFile
(
QWidget
*
parent
)
:
QWidget
(
parent
)
void
MainWidget
::
launchWizard
(
)
{
Wizard
wizard
(
this
);
m_dependencies
=
new
QDict
<
QList
<
IInput
>
>
(
257
);
m_dependencies
->
setAutoDelete
(
TRUE
);
m_inputWidgets
=
new
QDict
<
IInput
>
;
m_switches
=
new
QDict
<
QObject
>
;
// -------- Initialize the dialog ----------------
QVBoxLayout
*
layout
=
new
QVBoxLayout
(
this
);
// step1
wizard
.
setProjectName
(
Config_getString
(
"PROJECT_NAME"
));
wizard
.
setProjectNumber
(
Config_getString
(
"PROJECT_NUMBER"
));
if
(
Config_getList
(
"INPUT"
).
count
()
==
1
)
{
QString
dirName
=
Config_getList
(
"INPUT"
).
getFirst
();
QFileInfo
fi
(
dirName
);
if
(
fi
.
exists
()
&&
fi
.
isDir
())
{
wizard
.
setSourceDir
(
dirName
);
}
}
wizard
.
setRecursiveScan
(
Config_getBool
(
"RECURSIVE"
));
wizard
.
setDestinationDir
(
Config_getString
(
"OUTPUT_DIRECTORY"
));
// QTabWidget definition
QTabWidget
*
tab
=
new
QTabWidget
(
this
);
layout
->
addWidget
(
tab
);
// step2
wizard
.
setExtractAll
(
Config_getBool
(
"EXTRACT_ALL"
));
wizard
.
setCrossReferencing
(
Config_getBool
(
"SOURCE_BROWSER"
));
if
(
Config_getBool
(
"OPTIMIZE_OUTPUT_JAVA"
))
{
wizard
.
setOptimizeFor
(
Lang_Java
);
}
else
if
(
Config_getBool
(
"OPTIMIZE_OUTPUT_FOR_C"
))
{
wizard
.
setOptimizeFor
(
Lang_C
);
}
else
{
wizard
.
setOptimizeFor
(
Lang_Cpp
);
}
QListIterator
<
ConfigOption
>
options
=
Config
::
instance
()
->
iterator
();
PageWidget
*
page
=
0
;
ConfigOption
*
option
=
0
;
for
(
options
.
toFirst
();(
option
=
options
.
current
());
++
options
)
// step3
wizard
.
setHtmlEnabled
(
Config_getBool
(
"GENERATE_HTML"
));
wizard
.
setLatexEnabled
(
Config_getBool
(
"GENERATE_LATEX"
));
wizard
.
setManEnabled
(
Config_getBool
(
"GENERATE_MAN"
));
wizard
.
setRtfEnabled
(
Config_getBool
(
"GENERATE_RTF"
));
wizard
.
setXmlEnabled
(
Config_getBool
(
"GENERATE_XML"
));
wizard
.
setSearchEnabled
(
Config_getBool
(
"SEARCHENGINE"
));
if
(
Config_getBool
(
"GENERATE_HTMLHELP"
))
{
switch
(
option
->
kind
())
wizard
.
setHtmlStyle
(
HS_CHM
);
}
else
if
(
Config_getBool
(
"GENERATE_TREEVIEW"
))
{
wizard
.
setHtmlStyle
(
HS_TreeView
);
}
else
{
wizard
.
setHtmlStyle
(
HS_Plain
);
}
if
(
Config_getBool
(
"USE_PDFLATEX"
))
{
if
(
Config_getBool
(
"PDF_HYPERLINKS"
))
{
case
ConfigOption
:
:
O_Info
:
if
(
page
)
page
->
addStretch
(
1
);
page
=
new
PageWidget
(
tab
,
option
->
name
()
);
QWhatsThis
::
add
(
page
,
option
->
docs
().
simplifyWhiteSpace
()
);
break
;
case
ConfigOption
:
:
O_String
:
{
ASSERT
(
page
!=
0
);
InputString
::
StringMode
sm
=
InputString
::
StringFree
;
switch
(((
ConfigString
*
)
option
)
->
widgetType
())
{
case
ConfigString
:
:
String
:
sm
=
InputString
::
StringFree
;
break
;
case
ConfigString
:
:
File
:
sm
=
InputString
::
StringFile
;
break
;
case
ConfigString
:
:
Dir
:
sm
=
InputString
::
StringDir
;
break
;
}
InputString
*
inputString
=
new
InputString
(
option
->
name
(),
// name
page
,
// widget
*
((
ConfigString
*
)
option
)
->
valueRef
(),
// variable
sm
// type
);
QWhatsThis
::
add
(
inputString
,
option
->
docs
().
simplifyWhiteSpace
()
);
connect
(
inputString
,
SIGNAL
(
changed
()),
SIGNAL
(
changed
()));
m_inputWidgets
->
insert
(
option
->
name
(),
inputString
);
addDependency
(
m_switches
,
option
->
dependsOn
(),
option
->
name
());
}
break
;
case
ConfigOption
:
:
O_Enum
:
{
ASSERT
(
page
!=
0
);
InputString
*
inputString
=
new
InputString
(
option
->
name
(),
// name
page
,
// widget
*
((
ConfigEnum
*
)
option
)
->
valueRef
(),
// variable
InputString
::
StringFixed
// type
);
QStrListIterator
sli
=
((
ConfigEnum
*
)
option
)
->
iterator
();
for
(
sli
.
toFirst
();
sli
.
current
();
++
sli
)
{
inputString
->
addValue
(
sli
.
current
());
}
QWhatsThis
::
add
(
inputString
,
option
->
docs
().
simplifyWhiteSpace
()
);
connect
(
inputString
,
SIGNAL
(
changed
()),
SIGNAL
(
changed
()));
m_inputWidgets
->
insert
(
option
->
name
(),
inputString
);
addDependency
(
m_switches
,
option
->
dependsOn
(),
option
->
name
());
}
wizard
.
setTexStyle
(
TS_PDFHyper
);
}
else
{
wizard
.
setTexStyle
(
TS_PDF
);
}
}
else
{
wizard
.
setTexStyle
(
TS_PS
);
}
// step4
if
(
Config_getBool
(
"HAVE_DOT"
))
{
wizard
.
setDiagramMode
(
DM_Dot
);
}
else
if
(
Config_getBool
(
"CLASS_DIAGRAMS"
))
{
wizard
.
setDiagramMode
(
DM_Builtin
);
}
else
{
wizard
.
setDiagramMode
(
DM_None
);
}
wizard
.
setClassDiagram
(
Config_getBool
(
"CLASS_GRAPH"
));
wizard
.
setCollaborationDiagram
(
Config_getBool
(
"COLLABORATION_GRAPH"
));
wizard
.
setIncludeGraph
(
Config_getBool
(
"INCLUDE_GRAPH"
));
wizard
.
setIncludedByGraph
(
Config_getBool
(
"INCLUDED_BY_GRAPH"
));
wizard
.
setInheritanceGraph
(
Config_getBool
(
"GRAPHICAL_HIERARCHY"
));
wizard
.
setCallGraph
(
Config_getBool
(
"CALL_GRAPH"
));
// -------- Run the dialog ----------------
if
(
wizard
.
exec
()
==
QDialog
::
Accepted
)
{
// -------- Store the results ----------------
// step1
Config_getString
(
"PROJECT_NAME"
)
=
wizard
.
getProjectName
();
Config_getString
(
"PROJECT_NUMBER"
)
=
wizard
.
getProjectNumber
();
Config_getList
(
"INPUT"
).
clear
();
Config_getList
(
"INPUT"
).
append
(
wizard
.
getSourceDir
());
Config_getBool
(
"RECURSIVE"
)
=
wizard
.
scanRecursively
();
Config_getString
(
"OUTPUT_DIRECTORY"
)
=
wizard
.
getDestinationDir
();
// step2
if
(
wizard
.
extractAll
())
{
Config_getBool
(
"EXTRACT_ALL"
)
=
TRUE
;
Config_getBool
(
"EXTRACT_PRIVATE"
)
=
TRUE
;
Config_getBool
(
"EXTRACT_STATIC"
)
=
TRUE
;
Config_getBool
(
"EXTRACT_LOCAL_CLASSES"
)
=
TRUE
;
Config_getBool
(
"HIDE_UNDOC_MEMBERS"
)
=
FALSE
;
Config_getBool
(
"HIDE_UNDOC_CLASSES"
)
=
FALSE
;
}
else
{
Config_getBool
(
"EXTRACT_ALL"
)
=
FALSE
;
Config_getBool
(
"EXTRACT_PRIVATE"
)
=
FALSE
;
Config_getBool
(
"EXTRACT_STATIC"
)
=
FALSE
;
Config_getBool
(
"EXTRACT_LOCAL_CLASSES"
)
=
TRUE
;
Config_getBool
(
"HIDE_UNDOC_MEMBERS"
)
=
TRUE
;
Config_getBool
(
"HIDE_UNDOC_CLASSES"
)
=
TRUE
;
}
if
(
wizard
.
crossReferencing
())
{
Config_getBool
(
"SOURCE_BROWSER"
)
=
TRUE
;
Config_getBool
(
"REFERENCED_BY_RELATION"
)
=
TRUE
;
Config_getBool
(
"REFERENCES_RELATION"
)
=
TRUE
;
Config_getBool
(
"VERBATIM_HEADERS"
)
=
TRUE
;
}
else
{
Config_getBool
(
"SOURCE_BROWSER"
)
=
FALSE
;
Config_getBool
(
"REFERENCED_BY_RELATION"
)
=
FALSE
;
Config_getBool
(
"REFERENCES_RELATION"
)
=
FALSE
;
Config_getBool
(
"VERBATIM_HEADERS"
)
=
FALSE
;
}
switch
(
wizard
.
optimizeFor
())
{
case
Lang_Cpp
:
Config_getBool
(
"OPTIMIZE_OUTPUT_FOR_C"
)
=
FALSE
;
Config_getBool
(
"OPTIMIZE_OUTPUT_JAVA"
)
=
FALSE
;
break
;
case
ConfigOption
:
:
O_List
:
{
ASSERT
(
page
!=
0
);
InputStrList
::
ListMode
lm
=
InputStrList
::
ListString
;
switch
(((
ConfigList
*
)
option
)
->
widgetType
())
{
case
ConfigList
:
:
String
:
lm
=
InputStrList
::
ListString
;
break
;
case
ConfigList
:
:
File
:
lm
=
InputStrList
::
ListFile
;
break
;
case
ConfigList
:
:
Dir
:
lm
=
InputStrList
::
ListDir
;
break
;
case
ConfigList
:
:
FileAndDir
:
lm
=
InputStrList
::
ListFileDir
;
break
;
}
InputStrList
*
inputStrList
=
new
InputStrList
(
option
->
name
(),
// name
page
,
// widget
*
((
ConfigList
*
)
option
)
->
valueRef
(),
// variable
lm
// type
);
QWhatsThis
::
add
(
inputStrList
,
option
->
docs
().
simplifyWhiteSpace
()
);
connect
(
inputStrList
,
SIGNAL
(
changed
()),
SIGNAL
(
changed
()));
m_inputWidgets
->
insert
(
option
->
name
(),
inputStrList
);
addDependency
(
m_switches
,
option
->
dependsOn
(),
option
->
name
());
}
case
Lang_Java
:
Config_getBool
(
"OPTIMIZE_OUTPUT_FOR_C"
)
=
FALSE
;
Config_getBool
(
"OPTIMIZE_OUTPUT_JAVA"
)
=
TRUE
;
break
;
case
Lang_C
:
Config_getBool
(
"OPTIMIZE_OUTPUT_FOR_C"
)
=
TRUE
;
Config_getBool
(
"OPTIMIZE_OUTPUT_JAVA"
)
=
FALSE
;
break
;
case
ConfigOption
:
:
O_Bool
:
{
ASSERT
(
page
!=
0
);
InputBool
*
inputBool
=
new
InputBool
(
option
->
name
(),
// name
page
,
// widget
*
((
ConfigBool
*
)
option
)
->
valueRef
()
// variable
);
QWhatsThis
::
add
(
inputBool
,
option
->
docs
().
simplifyWhiteSpace
()
);
connect
(
inputBool
,
SIGNAL
(
changed
()),
SIGNAL
(
changed
()));
m_inputWidgets
->
insert
(
option
->
name
(),
inputBool
);
addDependency
(
m_switches
,
option
->
dependsOn
(),
option
->
name
());
}
}
// step3
Config_getBool
(
"GENERATE_HTML"
)
=
wizard
.
htmlEnabled
();
Config_getBool
(
"GENERATE_LATEX"
)
=
wizard
.
latexEnabled
();
Config_getBool
(
"GENERATE_MAN"
)
=
wizard
.
manEnabled
();
Config_getBool
(
"GENERATE_RTF"
)
=
wizard
.
rtfEnabled
();
Config_getBool
(
"GENERATE_XML"
)
=
wizard
.
xmlEnabled
();
Config_getBool
(
"SEARCHENGINE"
)
=
wizard
.
searchEnabled
();
if
(
wizard
.
htmlEnabled
())
{
switch
(
wizard
.
htmlStyle
())
{
case
HS_Plain
:
Config_getBool
(
"GENERATE_HTMLHELP"
)
=
FALSE
;
Config_getBool
(
"GENERATE_TREEVIEW"
)
=
FALSE
;
break
;
case
HS_TreeView
:
Config_getBool
(
"GENERATE_HTMLHELP"
)
=
FALSE
;
Config_getBool
(
"GENERATE_TREEVIEW"
)
=
TRUE
;
break
;
case
HS_CHM
:
Config_getBool
(
"GENERATE_HTMLHELP"
)
=
TRUE
;
Config_getBool
(
"GENERATE_TREEVIEW"
)
=
FALSE
;
break
;
}
}
if
(
wizard
.
latexEnabled
())
{
switch
(
wizard
.
texStyle
())
{
case
TS_PDFHyper
:
Config_getBool
(
"USE_PDFLATEX"
)
=
TRUE
;
Config_getBool
(
"PDF_HYPERLINKS"
)
=
TRUE
;
break
;
case
TS_PDF
:
Config_getBool
(
"USE_PDFLATEX"
)
=
TRUE
;
Config_getBool
(
"PDF_HYPERLINKS"
)
=
FALSE
;
break
;
case
TS_PS
:
Config_getBool
(
"USE_PDFLATEX"
)
=
FALSE
;
Config_getBool
(
"PDF_HYPERLINKS"
)
=
FALSE
;
break
;
}
}
// step4
switch
(
wizard
.
diagramMode
())
{
case
DM_None
:
Config_getBool
(
"CLASS_DIAGRAMS"
)
=
FALSE
;
Config_getBool
(
"HAVE_DOT"
)
=
FALSE
;
break
;
case
ConfigOption
:
:
O_Int
:
{
ASSERT
(
page
!=
0
);
InputInt
*
inputInt
=
new
InputInt
(
option
->
name
(),
// name
page
,
// widget
*
((
ConfigInt
*
)
option
)
->
valueRef
(),
// variable
((
ConfigInt
*
)
option
)
->
minVal
(),
// min value
((
ConfigInt
*
)
option
)
->
maxVal
()
// max value
);
QWhatsThis
::
add
(
inputInt
,
option
->
docs
().
simplifyWhiteSpace
()
);
connect
(
inputInt
,
SIGNAL
(
changed
()),
SIGNAL
(
changed
()));
m_inputWidgets
->
insert
(
option
->
name
(),
inputInt
);
addDependency
(
m_switches
,
option
->
dependsOn
(),
option
->
name
());
}
case
DM_Builtin
:
Config_getBool
(
"CLASS_DIAGRAMS"
)
=
TRUE
;
Config_getBool
(
"HAVE_DOT"
)
=
FALSE
;
break
;
case
ConfigOption
:
:
O_Obsolete
:
case
DM_Dot
:
Config_getBool
(
"CLASS_DIAGRAMS"
)
=
FALSE
;
Config_getBool
(
"HAVE_DOT"
)
=
TRUE
;
Config_getBool
(
"CLASS_GRAPH"
)
=
wizard
.
classDiagram
();
Config_getBool
(
"COLLABORATION_GRAPH"
)
=
wizard
.
collaborationDiagram
();
Config_getBool
(
"INCLUDE_GRAPH"
)
=
wizard
.
includeGraph
();
Config_getBool
(
"INCLUDED_BY_GRAPH"
)
=
wizard
.
includedByGraph
();
Config_getBool
(
"GRAPHICAL_HIERARCHY"
)
=
wizard
.
inheritanceGraph
();
Config_getBool
(
"CALL_GRAPH"
)
=
wizard
.
callGraph
();
break
;
}
}
#if defined(Q_OS_MACX)
Config_getString
(
"DOT_PATH"
)
=
getResourcePath
();
#endif
setConfigSaved
(
FALSE
);
}
if
(
page
)
page
->
addStretch
(
1
);
}
QDictIterator
<
QObject
>
di
(
*
m_switches
);
QObject
*
obj
=
0
;
for
(
di
.
toFirst
();(
obj
=
di
.
current
());
++
di
)
void
MainWidget
::
loadConfigFromFile
(
const
QString
&
fn
)
{
if
(
!
Config
::
instance
()
->
parse
(
fn
)
)
{
connect
(
obj
,
SIGNAL
(
toggle
(
const
char
*
,
bool
)),
SLOT
(
toggle
(
const
char
*
,
bool
)));
// UGLY HACK: assumes each item depends on a boolean without checking!
emit
toggle
(
di
.
currentKey
(),((
InputBool
*
)
obj
)
->
getState
());
QMessageBox
::
warning
(
0
,
"Warning"
,
"Could not open or read config file "
+
fn
+
"!"
,
"abort"
);
}
else
{
Config
::
instance
()
->
convertStrToVal
();
#if defined(Q_OS_MACX)
if
(
Config_getString
(
"DOT_PATH"
)
!=
getResourcePath
())
{
Config_getString
(
"DOT_PATH"
)
=
getResourcePath
();
setConfigSaved
(
FALSE
);
}
else
{
setConfigSaved
(
TRUE
);
}
#else
setConfigSaved
(
TRUE
);
#endif
addRecentFile
(
fn
);
m_workingDir
->
setText
(
QFileInfo
(
fn
).
dirPath
(
TRUE
));
m_configFileName
=
fn
;
statusBar
()
->
message
(
"New configuration loaded"
,
messageTimeout
);
}
}
void
MainWidget
::
loadConfigFile
()
{
QString
fn
=
QFileDialog
::
getOpenFileName
(
m_workingDir
->
text
(),
QString
::
null
,
this
);
if
(
!
fn
.
isEmpty
())
{
loadConfigFromFile
(
fn
);
}
}
ConfigFile
::~
ConfigFile
()
void
MainWidget
::
launchExpert
()
{
delete
m_dependencies
;
delete
m_inputWidgets
;
delete
m_switches
;
Expert
expert
(
this
);
expert
.
init
();
expert
.
exec
();
#if defined(Q_OS_MACX)
Config_getString
(
"DOT_PATH"
)
=
getResourcePath
();
#endif
setConfigSaved
(
FALSE
);
}
void
ConfigFile
::
addDependency
(
QDict
<
QObject
>
*
switches
,
const
QCString
&
dep
,
const
QCString
&
name
)
void
MainWidget
::
saveDefaults
()
{
if
(
!
dep
.
isEmpty
())
if
(
QMessageBox
::
question
(
this
,
"Store settings as defaults"
,
"Do you wish to use the "
"current configuration settings as the default settings?"
,
QMessageBox
::
Yes
,
QMessageBox
::
No
)
==
QMessageBox
::
Yes
)
{
//printf("ConfigFile::addDependency(%s)\n",name.data());
IInput
*
parent
=
m_inputWidgets
->
find
(
dep
);
ASSERT
(
parent
!=
0
);
IInput
*
child
=
m_inputWidgets
->
find
(
name
);
ASSERT
(
child
!=
0
);
if
(
switches
->
find
(
dep
)
==
0
)
QString
newConfig
;
QTextStream
t
(
&
newConfig
,
IO_WriteOnly
);
Config
::
instance
()
->
writeTemplate
(
t
,
TRUE
,
FALSE
);
m_settings
.
writeEntry
(
"/config/default"
,
newConfig
);
m_settings
.
writeEntry
(
"/config/workingdir"
,
m_workingDir
->
text
());
statusBar
()
->
message
(
"Current configuration saved as default"
,
messageTimeout
);
}
}
void
MainWidget
::
saveConfigFile
()
{
QString
fn
=
QFileDialog
::
getSaveFileName
(
m_workingDir
->
text
()
+
"/Doxyfile"
,
QString
::
null
,
this
);
if
(
!
fn
.
isEmpty
())
{
QFile
f
(
fn
);
if
(
f
.
open
(
IO_WriteOnly
))
{
switches
->
insert
(
dep
,
parent
->
qobject
());
QTextStream
t
(
&
f
);
Config
::
instance
()
->
writeTemplate
(
t
,
TRUE
,
FALSE
);
m_configFileName
=
fn
;
setConfigSaved
(
TRUE
);
addRecentFile
(
fn
);
statusBar
()
->
message
(
"Configuration saved"
,
messageTimeout
);
}
QList
<
IInput
>
*
list
=
m_dependencies
->
find
(
dep
);
if
(
list
==
0
)
else
{
list
=
new
QList
<
IInput
>
;
m_dependencies
->
insert
(
dep
,
list
);
QMessageBox
::
warning
(
0
,
"Warning"
,
"Cannot open file "
+
fn
+
" for writing. Nothing saved!"
,
"ok"
);
}
list
->
append
(
child
);
}
}
void
ConfigFile
::
toggle
(
const
char
*
name
,
bool
state
)
void
MainWidget
::
resetConfig
(
)
{
QList
<
IInput
>
*
inputs
=
m_dependencies
->
find
(
name
);
ASSERT
(
inputs
!=
0
);
IInput
*
input
=
inputs
->
first
();
while
(
input
)
if
(
QMessageBox
::
question
(
this
,
"Reset settings to their defaults"
,
"Do you wish to reset the "
"current configuration settings to their factory defaults?"
,
QMessageBox
::
Yes
,
QMessageBox
::
No
)
==
QMessageBox
::
Yes
)
{
input
->
setEnabled
(
state
);
input
=
inputs
->
next
();
// initialize config settings
Config
::
instance
()
->
init
();
m_configFileName
=
""
;
setConfigSaved
(
FALSE
);
statusBar
()
->
message
(
"Configuration settings reset to their defaults"
,
messageTimeout
);
}
}
void
ConfigFile
::
init
(
)
void
MainWidget
::
setConfigSaved
(
bool
enable
)
{
QDictIterator
<
IInput
>
di
(
*
m_inputWidgets
);
IInput
*
input
=
0
;
for
(
di
.
toFirst
();(
input
=
di
.
current
());
++
di
)
m_configSaved
=
enable
;
if
(
m_configSaved
)
{
input
->
init
(
);
m_saveStatus
->
setText
(
"Status: saved"
);
}
QDictIterator
<
QObject
>
dio
(
*
m_switches
);
QObject
*
obj
=
0
;
for
(
dio
.
toFirst
();(
obj
=
dio
.
current
());
++
dio
)
else
{
connect
(
obj
,
SIGNAL
(
toggle
(
const
char
*
,
bool
)),
SLOT
(
toggle
(
const
char
*
,
bool
)));
// UGLY HACK: assumes each item depends on a boolean without checking!
emit
toggle
(
dio
.
currentKey
(),((
InputBool
*
)
obj
)
->
getState
());
m_saveStatus
->
setText
(
"Status: <font color=
\"
red
\"
>not saved</font>"
);
}
updateRunnable
(
m_workingDir
->
text
());
}
void
MainWidget
::
runDoxygen
()
{
if
(
!
m_running
)
{
QString
doxygenPath
;
#if defined(Q_OS_MACX)
doxygenPath
=
getResourcePath
();
#else
// TODO: get the right value if not in the search path
#endif
//printf("Trying to run doxygen from path %s\n",doxygenPath.data());
m_runProcess
->
setCommunication
(
QProcess
::
Stdout
|
QProcess
::
Stderr
|
QProcess
::
DupStderr
);
m_runProcess
->
setWorkingDirectory
(
QDir
(
m_workingDir
->
text
()));
m_runProcess
->
clearArguments
();
m_runProcess
->
addArgument
(
doxygenPath
+
"doxygen"
);
m_runProcess
->
addArgument
(
"-b"
);
m_runProcess
->
addArgument
(
m_configFileName
);
m_outputLog
->
clear
();
if
(
!
m_runProcess
->
start
())
{
m_outputLog
->
append
(
QString
(
"*** Failed to run doxygen
\n
"
));
}
else
{
m_running
=
TRUE
;
m_run
->
setText
(
"Cancel"
);
m_runStatus
->
setText
(
"Status: running"
);
m_timer
->
start
(
1000
);
}
}
else
{
m_running
=
FALSE
;
m_run
->
setText
(
"Start"
);
m_runStatus
->
setText
(
"Status: not running"
);
m_runProcess
->
kill
();
m_timer
->
stop
();
updateRunnable
(
m_workingDir
->
text
());
}
}
void
MainWidget
::
readStdout
()
{
m_outputLog
->
append
(
QString
(
m_runProcess
->
readStdout
()));
}
void
MainWidget
::
runComplete
()
{
if
(
m_running
)
{
m_outputLog
->
append
(
QString
(
"*** Doxygen has finished
\n
"
));
}
else
{
m_outputLog
->
append
(
QString
(
"*** Cancelled by user
\n
"
));
}
m_run
->
setText
(
"Start"
);
m_runStatus
->
setText
(
"Status: not running"
);
m_running
=
FALSE
;
updateRunnable
(
m_workingDir
->
text
());
}
void
MainWidget
::
about
()
{
QString
msg
;
QTextStream
t
(
&
msg
,
IO_WriteOnly
);
t
<<
"<qt><center>A tool to configure and run doxygen "
"on your source files.</center><p><br>"
"<center>Written by<br> Dimitri van Heesch<br>© 2000-2004</center><p>"
"</qt>"
;
QMessageBox
::
about
(
this
,
"Doxygen GUI"
,
msg
);
}
void
MainWidget
::
manual
()
{
#if defined(Q_OS_MACX)
const
char
*
urlBytes
=
"http://www.doxygen.org/manual.html"
;
CFURLRef
url
=
CFURLCreateWithBytes
(
NULL
,
// allocator
(
UInt8
*
)
urlBytes
,
// bytes
strlen
(
urlBytes
),
// length
kCFStringEncodingASCII
,
// encoding
NULL
// baseURL
);
LSOpenCFURLRef
(
url
,
0
);
CFRelease
(
url
);
#endif
}
void
MainWidget
::
addRecentFile
(
const
QString
&
file
)
{
QStringList
::
Iterator
it
=
m_recentFiles
.
find
(
file
);
if
(
it
!=
m_recentFiles
.
end
())
{
// already found => move to top
m_recentFiles
.
remove
(
it
);
m_recentFiles
.
prepend
(
file
);
}
else
{
// not found
if
(
m_recentFiles
.
count
()
<
10
)
// append
{
m_recentFiles
.
prepend
(
file
);
}
else
// add + drop last item
{
m_recentFiles
.
remove
(
m_recentFiles
.
last
());
m_recentFiles
.
prepend
(
file
);
}
}
m_recentMenu
->
clear
();
int
i
=
0
;
for
(
it
=
m_recentFiles
.
begin
();
it
!=
m_recentFiles
.
end
();
++
it
,
++
i
)
{
m_recentMenu
->
insertItem
(
*
it
);
m_settings
.
writeEntry
(
QString
().
sprintf
(
"/recent/config%d"
,
i
),
*
it
);
}
}
//----------------------------------------------------------------------
void
MainWidget
::
openRecent
(
int
id
)
{
loadConfigFromFile
(
m_recentMenu
->
text
(
id
));
}
void
MainWidget
::
quit
()
{
if
(
!
m_configSaved
&&
QMessageBox
::
warning
(
this
,
"DoxyWizard"
,
"Quit and lose changes?"
,
QMessageBox
::
Yes
,
QMessageBox
::
No
)
==
QMessageBox
::
No
)
return
;
// Quit cancelled by user
qApp
->
quit
();
}
void
MainWidget
::
saveLog
()
{
QString
fn
=
QFileDialog
::
getSaveFileName
(
m_workingDir
->
text
()
+
"/doxygen_log.txt"
,
QString
::
null
,
this
);
if
(
!
fn
.
isEmpty
())
{
QFile
f
(
fn
);
if
(
f
.
open
(
IO_WriteOnly
))
{
QTextStream
t
(
&
f
);
t
<<
m_outputLog
->
text
();
statusBar
()
->
message
(
"Output log saved"
,
messageTimeout
);
}
else
{
QMessageBox
::
warning
(
0
,
"Warning"
,
"Cannot open file "
+
fn
+
" for writing. Nothing saved!"
,
"ok"
);
}
}
}
//==========================================================================
int
main
(
int
argc
,
char
**
argv
)
{
QApplication
::
setColorSpec
(
QApplication
::
NormalColor
);
QApplication
app
(
argc
,
argv
);
Wizard
wizard
(
argc
,
argv
);
app
.
setMainWidget
(
&
wizard
);
wizard
.
show
();
return
app
.
exec
();
{
QApplication
a
(
argc
,
argv
);
MainWidget
main
;
a
.
setMainWidget
(
&
main
);
main
.
show
();
return
a
.
exec
();
}
addon/doxywizard/doxywizard.h
View file @
c1605e5b
/******************************************************************************
*
*
*
* Copyright (C) 1997-2004 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#ifndef _DOXWIZARD_H
#define _DOXWIZARD_H
#ifndef DOXYWIZARD_H
#define DOXYWIZARD_H
#include <qvbox.h>
#include <qtabdialog.h>
#include <qmainwindow.h>
#include <qlist.h>
#include <qdict.h>
class
IInput
;
class
QToolBar
;
class
QWidget
;
class
QObject
;
class
ConfigFile
;
class
InputBool
;
class
InputString
;
class
InputStrList
;
class
InputFile
;
class
InputDir
;
class
InputInt
;
class
Wizard
:
public
QMainWindow
#include <qsettings.h>
#include <qstringlist.h>
class
QLineEdit
;
class
QCheckBox
;
class
QPushButton
;
class
QComboBox
;
class
QButtonGroup
;
class
QTextEdit
;
class
QLabel
;
class
QProcess
;
class
QTimer
;
class
QPopupMenu
;
enum
OptLang
{
Lang_Cpp
,
Lang_C
,
Lang_Java
};
enum
HtmlStyle
{
HS_Plain
,
HS_TreeView
,
HS_CHM
};
enum
TexStyle
{
TS_PDFHyper
,
TS_PDF
,
TS_PS
};
enum
DiagramMode
{
DM_None
,
DM_Builtin
,
DM_Dot
};
class
Step1
:
public
QWidget
{
Q_OBJECT
Q_OBJECT
public
:
Wizard
(
int
argc
,
char
**
argv
);
~
Wizard
(){};
void
loadFile
(
const
char
*
s
);
Step1
(
QWidget
*
parent
);
QString
getProjectName
()
const
;
QString
getProjectNumber
()
const
;
QString
getSourceDir
()
const
;
bool
scanRecursively
()
const
;
QString
getDestinationDir
()
const
;
void
setProjectName
(
const
QString
&
name
);
void
setProjectNumber
(
const
QString
&
num
);
void
setSourceDir
(
const
QString
&
dir
);
void
setRecursiveScan
(
bool
enable
);
void
setDestinationDir
(
const
QString
&
dir
);
private
slots
:
void
newFile
();
void
loadFile
();
void
saveFile
();
void
saveAsFile
();
void
quit
();
void
changed
();
void
about
();
void
runDoxygen
();
// Micha
void
selectSourceDir
();
void
selectDestinationDir
();
private
:
QLineEdit
*
m_projName
;
QLineEdit
*
m_projNumber
;
QLineEdit
*
m_sourceDir
;
QLineEdit
*
m_destDir
;
QCheckBox
*
m_recursive
;
QPushButton
*
m_srcSelectDir
;
QPushButton
*
m_dstSelectDir
;
};
signals
:
class
Step2
:
public
QWidget
{
public
:
Step2
(
QWidget
*
parent
);
bool
crossReferencingEnabled
()
const
;
void
enableCrossReferencing
();
bool
extractAll
()
const
;
bool
crossReferencing
()
const
;
OptLang
optimizeFor
()
const
;
void
setExtractAll
(
bool
enable
);
void
setCrossReferencing
(
bool
enable
);
void
setOptimizeFor
(
OptLang
lang
);
private
:
void
refreshCaption
();
QToolBar
*
fileTools
;
bool
hasChanged
;
ConfigFile
*
cw
;
QButtonGroup
*
m_extractMode
;
QButtonGroup
*
m_optimizeLang
;
QCheckBox
*
m_crossRef
;
};
class
Config
Widget
class
Step3
:
public
Q
Widget
{
Q_OBJECT
public
:
enum
Kind
{
Int
,
String
,
StrList
,
Bool
};
ConfigWidget
(
QWidget
*
w
,
Kind
k
)
:
m_widget
(
w
),
m_kind
(
k
)
{}
Kind
kind
()
const
{
return
m_kind
;
}
InputString
*
getString
()
const
{
return
m_kind
==
String
?
(
InputString
*
)
m_widget
:
0
;
}
InputBool
*
getBool
()
const
{
return
m_kind
==
Bool
?
(
InputBool
*
)
m_widget
:
0
;
}
InputStrList
*
getStrList
()
const
{
return
m_kind
==
StrList
?
(
InputStrList
*
)
m_widget
:
0
;
}
InputInt
*
getInt
()
const
{
return
m_kind
==
Int
?
(
InputInt
*
)
m_widget
:
0
;
}
Step3
(
QWidget
*
parent
);
bool
htmlEnabled
()
const
;
bool
latexEnabled
()
const
;
bool
manEnabled
()
const
;
bool
rtfEnabled
()
const
;
bool
xmlEnabled
()
const
;
bool
searchEnabled
()
const
;
HtmlStyle
htmlStyle
()
const
;
TexStyle
texStyle
()
const
;
void
setHtmlEnabled
(
bool
);
void
setLatexEnabled
(
bool
);
void
setManEnabled
(
bool
);
void
setRtfEnabled
(
bool
);
void
setXmlEnabled
(
bool
);
void
setSearchEnabled
(
bool
);
void
setHtmlStyle
(
HtmlStyle
);
void
setTexStyle
(
TexStyle
);
private
slots
:
void
latexStateChange
(
int
state
);
void
htmlStateChange
(
int
state
);
private
:
QButtonGroup
*
m_texOptions
;
QVBox
*
m_texOptionBox
;
QButtonGroup
*
m_htmlOptions
;
QVBox
*
m_htmlOptionBox
;
QCheckBox
*
m_htmlEnabled
;
QCheckBox
*
m_latexEnabled
;
QCheckBox
*
m_manEnabled
;
QCheckBox
*
m_rtfEnabled
;
QCheckBox
*
m_xmlEnabled
;
QCheckBox
*
m_searchEnabled
;
};
class
Step4
:
public
QWidget
{
Q_OBJECT
public
:
Step4
(
QWidget
*
parent
);
void
disableCallGraphs
();
bool
callGraphEnabled
()
const
;
DiagramMode
diagramMode
()
const
;
bool
classDiagram
()
const
;
bool
collaborationDiagram
()
const
;
bool
includeGraph
()
const
;
bool
includedByGraph
()
const
;
bool
inheritanceGraph
()
const
;
bool
callGraph
()
const
;
void
setDiagramMode
(
DiagramMode
mode
);
void
setClassDiagram
(
bool
enable
);
void
setCollaborationDiagram
(
bool
enable
);
void
setIncludeGraph
(
bool
enable
);
void
setIncludedByGraph
(
bool
enable
);
void
setInheritanceGraph
(
bool
enable
);
void
setCallGraph
(
bool
enable
);
private
slots
:
void
diagramModeChanged
(
int
);
private
:
QWidget
*
m_widget
;
Kind
m_kind
;
QButtonGroup
*
m_diagramMode
;
QVBox
*
m_dotOptions
;
QCheckBox
*
m_dotClass
;
QCheckBox
*
m_dotCollaboration
;
QCheckBox
*
m_dotInclude
;
QCheckBox
*
m_dotIncludedBy
;
QCheckBox
*
m_dotInheritance
;
QCheckBox
*
m_dotCall
;
};
class
ConfigFile
:
public
QWidget
class
Wizard
:
public
QTabDialog
{
Q_OBJECT
Q_OBJECT
public
:
ConfigFile
(
QWidget
*
parent
=
0
);
~
ConfigFile
();
void
init
();
void
addDependency
(
QDict
<
QObject
>
*
switches
,
const
QCString
&
dep
,
const
QCString
&
name
);
signals
:
void
changed
();
Wizard
(
QWidget
*
parent
);
void
disableCallGraphs
();
// step1
QString
getProjectName
()
const
{
return
m_step1
->
getProjectName
();
}
QString
getProjectNumber
()
const
{
return
m_step1
->
getProjectNumber
();
}
QString
getSourceDir
()
const
{
return
m_step1
->
getSourceDir
();
}
bool
scanRecursively
()
const
{
return
m_step1
->
scanRecursively
();
}
QString
getDestinationDir
()
const
{
return
m_step1
->
getDestinationDir
();
}
void
setProjectName
(
const
QString
&
name
)
{
m_step1
->
setProjectName
(
name
);
}
void
setProjectNumber
(
const
QString
&
num
)
{
m_step1
->
setProjectNumber
(
num
);
}
void
setSourceDir
(
const
QString
&
dir
)
{
m_step1
->
setSourceDir
(
dir
);
}
void
setRecursiveScan
(
bool
enable
)
{
m_step1
->
setRecursiveScan
(
enable
);
}
void
setDestinationDir
(
const
QString
&
dir
)
{
m_step1
->
setDestinationDir
(
dir
);
}
// step2
bool
extractAll
()
const
{
return
m_step2
->
extractAll
();
}
bool
crossReferencing
()
const
{
return
m_step2
->
crossReferencing
();
}
OptLang
optimizeFor
()
const
{
return
m_step2
->
optimizeFor
();
}
void
setExtractAll
(
bool
enable
)
{
m_step2
->
setExtractAll
(
enable
);
}
void
setCrossReferencing
(
bool
enable
)
{
m_step2
->
setCrossReferencing
(
enable
);
}
void
setOptimizeFor
(
OptLang
lang
)
{
m_step2
->
setOptimizeFor
(
lang
);
}
private
slots
:
void
toggle
(
const
char
*
,
bool
);
// step3
bool
htmlEnabled
()
const
{
return
m_step3
->
htmlEnabled
();
}
bool
latexEnabled
()
const
{
return
m_step3
->
latexEnabled
();
}
bool
manEnabled
()
const
{
return
m_step3
->
manEnabled
();
}
bool
rtfEnabled
()
const
{
return
m_step3
->
rtfEnabled
();
}
bool
xmlEnabled
()
const
{
return
m_step3
->
xmlEnabled
();
}
bool
searchEnabled
()
const
{
return
m_step3
->
searchEnabled
();
}
HtmlStyle
htmlStyle
()
const
{
return
m_step3
->
htmlStyle
();
}
TexStyle
texStyle
()
const
{
return
m_step3
->
texStyle
();
}
void
setHtmlEnabled
(
bool
enable
)
{
m_step3
->
setHtmlEnabled
(
enable
);
}
void
setLatexEnabled
(
bool
enable
)
{
m_step3
->
setLatexEnabled
(
enable
);
}
void
setManEnabled
(
bool
enable
)
{
m_step3
->
setManEnabled
(
enable
);
}
void
setRtfEnabled
(
bool
enable
)
{
m_step3
->
setRtfEnabled
(
enable
);
}
void
setXmlEnabled
(
bool
enable
)
{
m_step3
->
setXmlEnabled
(
enable
);
}
void
setSearchEnabled
(
bool
enable
)
{
m_step3
->
setSearchEnabled
(
enable
);
}
void
setHtmlStyle
(
HtmlStyle
style
)
{
m_step3
->
setHtmlStyle
(
style
);
}
void
setTexStyle
(
TexStyle
style
)
{
m_step3
->
setTexStyle
(
style
);
}
// step4
DiagramMode
diagramMode
()
const
{
return
m_step4
->
diagramMode
();
}
bool
classDiagram
()
const
{
return
m_step4
->
classDiagram
();
}
bool
collaborationDiagram
()
const
{
return
m_step4
->
collaborationDiagram
();
}
bool
includeGraph
()
const
{
return
m_step4
->
includeGraph
();
}
bool
includedByGraph
()
const
{
return
m_step4
->
includedByGraph
();
}
bool
inheritanceGraph
()
const
{
return
m_step4
->
inheritanceGraph
();
}
bool
callGraph
()
const
{
return
m_step4
->
callGraph
();
}
void
setDiagramMode
(
DiagramMode
mode
)
{
m_step4
->
setDiagramMode
(
mode
);
}
void
setClassDiagram
(
bool
enable
)
{
m_step4
->
setClassDiagram
(
enable
);
}
void
setCollaborationDiagram
(
bool
enable
)
{
m_step4
->
setCollaborationDiagram
(
enable
);
}
void
setIncludeGraph
(
bool
enable
)
{
m_step4
->
setIncludeGraph
(
enable
);
}
void
setIncludedByGraph
(
bool
enable
)
{
m_step4
->
setIncludedByGraph
(
enable
);
}
void
setInheritanceGraph
(
bool
enable
)
{
m_step4
->
setInheritanceGraph
(
enable
);
}
void
setCallGraph
(
bool
enable
)
{
m_step4
->
setCallGraph
(
enable
);
}
public
slots
:
void
changeCallGraphState
(
int
state
);
void
changeCrossRefState
(
int
state
);
private
:
Step1
*
m_step1
;
Step2
*
m_step2
;
Step3
*
m_step3
;
Step4
*
m_step4
;
};
class
MainWidget
:
public
QMainWindow
{
Q_OBJECT
public
:
MainWidget
(
QWidget
*
parent
=
0
);
~
MainWidget
();
private
slots
:
void
launchWizard
();
void
launchExpert
();
void
loadConfigFile
();
void
selectWorkingDir
();
void
updateRunnable
(
const
QString
&
newDirName
);
void
saveDefaults
();
void
saveConfigFile
();
void
runDoxygen
();
void
readStdout
();
void
runComplete
();
void
about
();
void
manual
();
void
resetConfig
();
void
openRecent
(
int
);
void
quit
();
void
saveLog
();
private
:
QDict
<
IInput
>
*
m_inputWidgets
;
QDict
<
QList
<
IInput
>
>
*
m_dependencies
;
QDict
<
QObject
>
*
m_switches
;
void
setConfigSaved
(
bool
);
void
loadConfigFromFile
(
const
QString
&
);
void
addRecentFile
(
const
QString
&
);
QPushButton
*
m_wizard
;
QPushButton
*
m_expert
;
QPushButton
*
m_load
;
QPushButton
*
m_save
;
QPushButton
*
m_defaults
;
QLineEdit
*
m_workingDir
;
QPushButton
*
m_selWorkingDir
;
QPushButton
*
m_run
;
QPushButton
*
m_saveLog
;
QLabel
*
m_runStatus
;
QProcess
*
m_runProcess
;
QLabel
*
m_saveStatus
;
QLabel
*
m_outputHeading
;
QTextEdit
*
m_outputLog
;
QTimer
*
m_timer
;
QSettings
m_settings
;
QPopupMenu
*
m_recentMenu
;
bool
m_configSaved
;
bool
m_running
;
QString
m_configFileName
;
QStringList
m_recentFiles
;
};
#endif
addon/doxywizard/doxywizard.pro.in
View file @
c1605e5b
...
...
@@ -23,23 +23,21 @@ CONFIG = qt warn_on $extraopts
# header file for the project
HEADERS = doxywizard.h \
version.h \
pagewidget.h \
inputstring.h \
inputbool.h \
inputstrlist.h \
inputint.h \
pixmaps.h \
expert.h \
config.h
# source flle for the project
SOURCES = doxywizard.cpp \
version.cpp \
pagewidget.cpp \
inputstring.cpp \
inputbool.cpp \
inputstrlist.cpp \
inputint.cpp \
pixmaps.cpp \
expert.cpp \
config.cpp
# where to put the objects
...
...
@@ -52,8 +50,10 @@ MOC_DIR = moc
INCLUDEPATH += ../../src
win32:TMAKE_CXXFLAGS += -DQT_DLL
win32:INCLUDEPATH += .
macosx-c++:LIBS+=-framework CoreFoundation -framework ApplicationServices
# extra link options
win32:TMAKE_LIBS = $(QTDIR)\lib\qtmain.lib $(QTDIR)\lib\qt-mt230nc.lib user32.lib gdi32.lib comdlg32.lib imm32.lib ole32.lib uuid.lib wsock32.lib
win32:TMAKE_LFLAGS = /NODEFAULTLIB:msvcrt.lib
win32:TMAKE_LIBS = $(QTDIR)\lib\qtmain.lib $(QTDIR)\lib\qt-mt332.lib user32.lib gdi32.lib comdlg32.lib imm32.lib ole32.lib uuid.lib wsock32.lib
win32:TMAKE_LIBS_QT =
addon/doxywizard/expert.cpp
0 → 100644
View file @
c1605e5b
/******************************************************************************
*
*
*
* Copyright (C) 1997-2004 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <qmainwindow.h>
#include <qpopupmenu.h>
#include <qfileinfo.h>
#include <qmenubar.h>
#include <qstatusbar.h>
#include <qfiledialog.h>
#include <qmessagebox.h>
#include <qapplication.h>
#include <qwhatsthis.h>
#include <qlayout.h>
#include <qtabwidget.h>
#include <qtoolbar.h>
#include <qtoolbutton.h>
#include <qscrollview.h>
#include <qlayout.h>
#include "expert.h"
#include "inputbool.h"
#include "inputstring.h"
#include "inputstrlist.h"
#include "inputint.h"
#include "config.h"
#include "version.h"
//-------------------------------------------------------------------------
Expert
::
Expert
(
QWidget
*
parent
)
:
QTabDialog
(
parent
)
{
m_dependencies
=
new
QDict
<
QList
<
IInput
>
>
(
257
);
m_dependencies
->
setAutoDelete
(
TRUE
);
m_inputWidgets
=
new
QDict
<
IInput
>
;
m_switches
=
new
QDict
<
QObject
>
;
setHelpButton
();
QListIterator
<
ConfigOption
>
options
=
Config
::
instance
()
->
iterator
();
QVBoxLayout
*
pageLayout
=
0
;
QFrame
*
page
=
0
;
ConfigOption
*
option
=
0
;
for
(
options
.
toFirst
();(
option
=
options
.
current
());
++
options
)
{
switch
(
option
->
kind
())
{
case
ConfigOption
:
:
O_Info
:
{
if
(
pageLayout
)
pageLayout
->
addStretch
(
1
);
QScrollView
*
view
=
new
QScrollView
(
this
);
view
->
setVScrollBarMode
(
QScrollView
::
Auto
);
view
->
setHScrollBarMode
(
QScrollView
::
AlwaysOff
);
view
->
setResizePolicy
(
QScrollView
::
AutoOneFit
);
page
=
new
QFrame
(
view
->
viewport
(),
option
->
name
()
);
pageLayout
=
new
QVBoxLayout
(
page
);
pageLayout
->
setMargin
(
10
);
view
->
addChild
(
page
);
addTab
(
view
,
option
->
name
());
QWhatsThis
::
add
(
page
,
option
->
docs
().
simplifyWhiteSpace
()
);
}
break
;
case
ConfigOption
:
:
O_String
:
{
ASSERT
(
page
!=
0
);
InputString
::
StringMode
sm
=
InputString
::
StringFree
;
switch
(((
ConfigString
*
)
option
)
->
widgetType
())
{
case
ConfigString
:
:
String
:
sm
=
InputString
::
StringFree
;
break
;
case
ConfigString
:
:
File
:
sm
=
InputString
::
StringFile
;
break
;
case
ConfigString
:
:
Dir
:
sm
=
InputString
::
StringDir
;
break
;
}
InputString
*
inputString
=
new
InputString
(
option
->
name
(),
// name
page
,
// widget
*
((
ConfigString
*
)
option
)
->
valueRef
(),
// variable
sm
// type
);
pageLayout
->
addWidget
(
inputString
);
QWhatsThis
::
add
(
inputString
,
option
->
docs
().
simplifyWhiteSpace
()
);
connect
(
inputString
,
SIGNAL
(
changed
()),
SIGNAL
(
changed
()));
m_inputWidgets
->
insert
(
option
->
name
(),
inputString
);
addDependency
(
m_switches
,
option
->
dependsOn
(),
option
->
name
());
}
break
;
case
ConfigOption
:
:
O_Enum
:
{
ASSERT
(
page
!=
0
);
InputString
*
inputString
=
new
InputString
(
option
->
name
(),
// name
page
,
// widget
*
((
ConfigEnum
*
)
option
)
->
valueRef
(),
// variable
InputString
::
StringFixed
// type
);
pageLayout
->
addWidget
(
inputString
);
QStrListIterator
sli
=
((
ConfigEnum
*
)
option
)
->
iterator
();
for
(
sli
.
toFirst
();
sli
.
current
();
++
sli
)
{
inputString
->
addValue
(
sli
.
current
());
}
inputString
->
init
();
QWhatsThis
::
add
(
inputString
,
option
->
docs
().
simplifyWhiteSpace
()
);
connect
(
inputString
,
SIGNAL
(
changed
()),
SIGNAL
(
changed
()));
m_inputWidgets
->
insert
(
option
->
name
(),
inputString
);
addDependency
(
m_switches
,
option
->
dependsOn
(),
option
->
name
());
}
break
;
case
ConfigOption
:
:
O_List
:
{
ASSERT
(
page
!=
0
);
InputStrList
::
ListMode
lm
=
InputStrList
::
ListString
;
switch
(((
ConfigList
*
)
option
)
->
widgetType
())
{
case
ConfigList
:
:
String
:
lm
=
InputStrList
::
ListString
;
break
;
case
ConfigList
:
:
File
:
lm
=
InputStrList
::
ListFile
;
break
;
case
ConfigList
:
:
Dir
:
lm
=
InputStrList
::
ListDir
;
break
;
case
ConfigList
:
:
FileAndDir
:
lm
=
InputStrList
::
ListFileDir
;
break
;
}
InputStrList
*
inputStrList
=
new
InputStrList
(
option
->
name
(),
// name
page
,
// widget
*
((
ConfigList
*
)
option
)
->
valueRef
(),
// variable
lm
// type
);
pageLayout
->
addWidget
(
inputStrList
);
QWhatsThis
::
add
(
inputStrList
,
option
->
docs
().
simplifyWhiteSpace
()
);
connect
(
inputStrList
,
SIGNAL
(
changed
()),
SIGNAL
(
changed
()));
m_inputWidgets
->
insert
(
option
->
name
(),
inputStrList
);
addDependency
(
m_switches
,
option
->
dependsOn
(),
option
->
name
());
}
break
;
break
;
case
ConfigOption
:
:
O_Bool
:
{
ASSERT
(
page
!=
0
);
InputBool
*
inputBool
=
new
InputBool
(
option
->
name
(),
// name
page
,
// widget
*
((
ConfigBool
*
)
option
)
->
valueRef
()
// variable
);
pageLayout
->
addWidget
(
inputBool
);
QWhatsThis
::
add
(
inputBool
,
option
->
docs
().
simplifyWhiteSpace
()
);
connect
(
inputBool
,
SIGNAL
(
changed
()),
SIGNAL
(
changed
()));
m_inputWidgets
->
insert
(
option
->
name
(),
inputBool
);
addDependency
(
m_switches
,
option
->
dependsOn
(),
option
->
name
());
}
break
;
case
ConfigOption
:
:
O_Int
:
{
ASSERT
(
page
!=
0
);
InputInt
*
inputInt
=
new
InputInt
(
option
->
name
(),
// name
page
,
// widget
*
((
ConfigInt
*
)
option
)
->
valueRef
(),
// variable
((
ConfigInt
*
)
option
)
->
minVal
(),
// min value
((
ConfigInt
*
)
option
)
->
maxVal
()
// max value
);
pageLayout
->
addWidget
(
inputInt
);
QWhatsThis
::
add
(
inputInt
,
option
->
docs
().
simplifyWhiteSpace
()
);
connect
(
inputInt
,
SIGNAL
(
changed
()),
SIGNAL
(
changed
()));
m_inputWidgets
->
insert
(
option
->
name
(),
inputInt
);
addDependency
(
m_switches
,
option
->
dependsOn
(),
option
->
name
());
}
break
;
case
ConfigOption
:
:
O_Obsolete
:
break
;
}
}
if
(
pageLayout
)
pageLayout
->
addStretch
(
1
);
QDictIterator
<
QObject
>
di
(
*
m_switches
);
QObject
*
obj
=
0
;
for
(
di
.
toFirst
();(
obj
=
di
.
current
());
++
di
)
{
connect
(
obj
,
SIGNAL
(
toggle
(
const
char
*
,
bool
)),
SLOT
(
toggle
(
const
char
*
,
bool
)));
// UGLY HACK: assumes each item depends on a boolean without checking!
emit
toggle
(
di
.
currentKey
(),((
InputBool
*
)
obj
)
->
getState
());
}
connect
(
this
,
SIGNAL
(
helpButtonPressed
()),
this
,
SLOT
(
handleHelp
()));
}
Expert
::~
Expert
()
{
delete
m_dependencies
;
delete
m_inputWidgets
;
delete
m_switches
;
}
void
Expert
::
handleHelp
()
{
QWhatsThis
::
enterWhatsThisMode
();
}
void
Expert
::
addDependency
(
QDict
<
QObject
>
*
switches
,
const
QCString
&
dep
,
const
QCString
&
name
)
{
if
(
!
dep
.
isEmpty
())
{
//printf("Expert::addDependency(%s)\n",name.data());
IInput
*
parent
=
m_inputWidgets
->
find
(
dep
);
ASSERT
(
parent
!=
0
);
IInput
*
child
=
m_inputWidgets
->
find
(
name
);
ASSERT
(
child
!=
0
);
if
(
switches
->
find
(
dep
)
==
0
)
{
switches
->
insert
(
dep
,
parent
->
qobject
());
}
QList
<
IInput
>
*
list
=
m_dependencies
->
find
(
dep
);
if
(
list
==
0
)
{
list
=
new
QList
<
IInput
>
;
m_dependencies
->
insert
(
dep
,
list
);
}
list
->
append
(
child
);
}
}
void
Expert
::
toggle
(
const
char
*
name
,
bool
state
)
{
QList
<
IInput
>
*
inputs
=
m_dependencies
->
find
(
name
);
ASSERT
(
inputs
!=
0
);
IInput
*
input
=
inputs
->
first
();
while
(
input
)
{
input
->
setEnabled
(
state
);
input
=
inputs
->
next
();
}
}
void
Expert
::
init
()
{
QDictIterator
<
IInput
>
di
(
*
m_inputWidgets
);
IInput
*
input
=
0
;
for
(
di
.
toFirst
();(
input
=
di
.
current
());
++
di
)
{
input
->
init
();
}
QDictIterator
<
QObject
>
dio
(
*
m_switches
);
QObject
*
obj
=
0
;
for
(
dio
.
toFirst
();(
obj
=
dio
.
current
());
++
dio
)
{
connect
(
obj
,
SIGNAL
(
toggle
(
const
char
*
,
bool
)),
SLOT
(
toggle
(
const
char
*
,
bool
)));
// UGLY HACK: assumes each item depends on a boolean without checking!
emit
toggle
(
dio
.
currentKey
(),((
InputBool
*
)
obj
)
->
getState
());
}
}
addon/doxywizard/
pagewidge
t.h
→
addon/doxywizard/
exper
t.h
View file @
c1605e5b
...
...
@@ -12,52 +12,71 @@
*
*/
#ifndef
_PAGEWIDGE
T_H
#define
_PAGEWIDGE
T_H
#ifndef
EXPER
T_H
#define
EXPER
T_H
#include <qscrollview.h>
#include <qtabdialog.h>
#include <qlist.h>
#include <qdict.h>
class
QTabWidget
;
class
QVBoxLayout
;
class
IInput
;
class
QWidget
;
class
QObject
;
class
InputBool
;
class
InputString
;
class
InputStrList
;
class
InputFile
;
class
InputDir
;
class
InputInt
;
class
FrameLayout
:
public
QFrame
class
ConfigWidget
{
Q_OBJECT
public
:
FrameLayout
(
QWidget
*
parent
=
0
,
const
char
*
name
=
0
,
WFlags
g
=
0
);
~
FrameLayout
();
void
addStretch
(
int
s
=
0
);
void
addWidget
(
QWidget
*
w
);
enum
Kind
{
Int
,
String
,
StrList
,
Bool
};
ConfigWidget
(
QWidget
*
w
,
Kind
k
)
:
m_widget
(
w
),
m_kind
(
k
)
{}
Kind
kind
()
const
{
return
m_kind
;
}
InputString
*
getString
()
const
{
return
m_kind
==
String
?
(
InputString
*
)
m_widget
:
0
;
}
InputBool
*
getBool
()
const
{
return
m_kind
==
Bool
?
(
InputBool
*
)
m_widget
:
0
;
}
InputStrList
*
getStrList
()
const
{
return
m_kind
==
StrList
?
(
InputStrList
*
)
m_widget
:
0
;
}
InputInt
*
getInt
()
const
{
return
m_kind
==
Int
?
(
InputInt
*
)
m_widget
:
0
;
}
private
:
QVBoxLayout
*
lay
;
QWidget
*
m_widget
;
Kind
m_kind
;
};
class
PageWidget
:
public
QScrollView
class
Expert
:
public
QTabDialog
{
Q_OBJECT
public
:
PageWidget
(
QTabWidget
*
parent
,
const
char
*
name
);
~
PageWidget
()
{};
//void frameChanged()
//{
// if (!layout()) return;
// layout()->setMargin(frameWidth());
//}
void
addStretch
(
int
stretch
=
0
);
void
addWidget
(
QWidget
*
w
);
QWidget
*
getLayout
()
const
;
protected
:
void
resizeEvent
(
QResizeEvent
*
e
);
void
paintEvent
(
QPaintEvent
*
e
);
Expert
(
QWidget
*
parent
=
0
);
~
Expert
();
void
init
();
void
addDependency
(
QDict
<
QObject
>
*
switches
,
const
QCString
&
dep
,
const
QCString
&
name
);
private
:
FrameLayout
*
lay
;
QTabWidget
*
m_parent
;
signals
:
void
changed
();
private
slots
:
void
toggle
(
const
char
*
,
bool
);
void
handleHelp
();
private
:
QDict
<
IInput
>
*
m_inputWidgets
;
QDict
<
QList
<
IInput
>
>
*
m_dependencies
;
QDict
<
QObject
>
*
m_switches
;
};
#endif
addon/doxywizard/inputbool.cpp
View file @
c1605e5b
...
...
@@ -13,35 +13,32 @@
*/
#include "inputbool.h"
#include "pagewidget.h"
#if QT_VERSION >= 300
#include <qstylefactory.h>
#else
#include <qwindowsstyle.h>
#endif
//#if QT_VERSION >= 300
//#include <qstylefactory.h>
//#else
//#include <qwindowsstyle.h>
//#endif
#include <qlayout.h>
InputBool
::
InputBool
(
const
QString
&
text
,
Page
Widget
*
parent
,
bool
&
flag
)
:
/*QCheckBox( text, parent->getLayout() )*/
QWidget
(
parent
->
getLayout
()
),
state
(
flag
)
InputBool
::
InputBool
(
const
QString
&
text
,
Q
Widget
*
parent
,
bool
&
flag
)
:
QWidget
(
parent
),
state
(
flag
)
{
QBoxLayout
*
layout
=
new
QHBoxLayout
(
this
);
cb
=
new
QCheckBox
(
text
,
this
);
layout
->
addWidget
(
cb
);
layout
->
addStretch
(
10
);
#if QT_VERSION >= 300
QStyle
*
winStyle
=
QStyleFactory
::
create
(
"windows"
);
#else
QWindowsStyle
*
winStyle
=
new
QWindowsStyle
();
#endif
//
#if QT_VERSION >= 300
//
QStyle *winStyle = QStyleFactory::create("windows");
//
#else
//
QWindowsStyle *winStyle = new QWindowsStyle();
//
#endif
cb
->
setChecked
(
flag
);
if
(
winStyle
)
cb
->
setStyle
(
winStyle
);
//
if (winStyle) cb->setStyle( winStyle );
cb
->
setMinimumSize
(
sizeHint
()
);
connect
(
cb
,
SIGNAL
(
toggled
(
bool
)),
SLOT
(
setState
(
bool
))
);
parent
->
addWidget
(
this
);
layout
->
activate
();
}
...
...
addon/doxywizard/inputbool.h
View file @
c1605e5b
...
...
@@ -27,7 +27,7 @@ class InputBool : public QWidget, /*QCheckBox,*/ public IInput
Q_OBJECT
public
:
InputBool
(
const
QString
&
text
,
Page
Widget
*
parent
,
bool
&
flag
);
InputBool
(
const
QString
&
text
,
Q
Widget
*
parent
,
bool
&
flag
);
~
InputBool
(){};
void
init
();
void
setEnabled
(
bool
b
)
{
cb
->
setEnabled
(
b
);
}
...
...
addon/doxywizard/inputint.cpp
View file @
c1605e5b
...
...
@@ -13,7 +13,6 @@
*/
#include "inputint.h"
#include "pagewidget.h"
#include <stdio.h>
#include <stdlib.h>
...
...
@@ -22,8 +21,8 @@
#include <qwindowsstyle.h>
#include <qspinbox.h>
InputInt
::
InputInt
(
const
QString
&
label
,
Page
Widget
*
parent
,
int
&
val
,
int
minVal
,
int
maxVal
)
:
QWidget
(
parent
->
getLayout
()
),
m_val
(
val
),
m_minVal
(
minVal
),
m_maxVal
(
maxVal
)
InputInt
::
InputInt
(
const
QString
&
label
,
Q
Widget
*
parent
,
int
&
val
,
int
minVal
,
int
maxVal
)
:
QWidget
(
parent
),
m_val
(
val
),
m_minVal
(
minVal
),
m_maxVal
(
maxVal
)
{
QHBoxLayout
*
layout
=
new
QHBoxLayout
(
this
,
5
);
...
...
@@ -44,7 +43,6 @@ InputInt::InputInt( const QString & label, PageWidget *parent, int &val, int min
connect
(
sp
,
SIGNAL
(
valueChanged
(
int
)),
this
,
SLOT
(
valueChanged
(
int
))
);
parent
->
addWidget
(
this
);
}
void
InputInt
::
valueChanged
(
int
val
)
...
...
addon/doxywizard/inputint.h
View file @
c1605e5b
...
...
@@ -22,14 +22,13 @@
class
QLabel
;
class
QSpinBox
;
class
PageWidget
;
class
InputInt
:
public
QWidget
,
public
IInput
{
Q_OBJECT
public
:
InputInt
(
const
QString
&
text
,
Page
Widget
*
parent
,
int
&
val
,
InputInt
(
const
QString
&
text
,
Q
Widget
*
parent
,
int
&
val
,
int
minVal
,
int
maxVal
);
~
InputInt
(){};
void
setEnabled
(
bool
);
...
...
addon/doxywizard/inputstring.cpp
View file @
c1605e5b
...
...
@@ -13,8 +13,7 @@
*/
#include "inputstring.h"
#include "pagewidget.h"
#include "pixmaps.h"
//#include "pixmaps.h"
#include <qlabel.h>
#include <qlayout.h>
...
...
@@ -28,8 +27,8 @@
InputString
::
InputString
(
const
QString
&
label
,
Page
Widget
*
parent
,
QCString
&
s
,
StringMode
m
)
:
QWidget
(
parent
->
getLayout
()
),
str
(
s
),
sm
(
m
),
m_values
(
0
),
m_index
(
0
)
Q
Widget
*
parent
,
QCString
&
s
,
StringMode
m
)
:
QWidget
(
parent
),
str
(
s
),
sm
(
m
),
m_values
(
0
),
m_index
(
0
)
{
if
(
m
==
StringFixed
)
{
...
...
@@ -38,6 +37,7 @@ InputString::InputString( const QString & label,
lab
->
setMinimumSize
(
lab
->
sizeHint
()
);
layout
->
addWidget
(
lab
);
com
=
new
QComboBox
(
this
);
com
->
setMinimumSize
(
com
->
sizeHint
());
layout
->
addWidget
(
com
);
layout
->
addStretch
(
1
);
le
=
0
;
...
...
@@ -57,16 +57,21 @@ InputString::InputString( const QString & label,
layout
->
addWidget
(
le
,
0
,
1
);
if
(
m
==
StringFile
||
m
==
StringDir
)
{
QPixmap
pixmap
=
QPixmap
(
m
==
StringFile
?
file_xpm
:
folder_xpm
);
//
QPixmap pixmap = QPixmap(m==StringFile ?
//
file_xpm :
//
folder_xpm );
br
=
new
QPushButton
(
this
);
br
->
setPixmap
(
pixmap
);
br
->
setMinimumSize
(
br
->
sizeHint
()
);
if
(
m
==
StringFile
)
{
br
->
setText
(
"File..."
);
QToolTip
::
add
(
br
,
"Browse to a file"
);
}
else
{
br
->
setText
(
"Folder..."
);
QToolTip
::
add
(
br
,
"Browse to a folder"
);
}
layout
->
addWidget
(
br
,
0
,
2
);
}
else
...
...
@@ -83,8 +88,6 @@ InputString::InputString( const QString & label,
if
(
br
)
connect
(
br
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
browse
())
);
if
(
com
)
connect
(
com
,
SIGNAL
(
activated
(
const
QString
&
)),
this
,
SLOT
(
textChanged
(
const
QString
&
))
);
parent
->
addWidget
(
this
);
}
InputString
::~
InputString
()
...
...
addon/doxywizard/inputstring.h
View file @
c1605e5b
...
...
@@ -26,7 +26,6 @@ class QLabel;
class
QLineEdit
;
class
QPushButton
;
class
QComboBox
;
class
PageWidget
;
class
InputString
:
public
QWidget
,
public
IInput
{
...
...
@@ -39,7 +38,7 @@ class InputString : public QWidget, public IInput
StringFixed
=
3
};
InputString
(
const
QString
&
text
,
Page
Widget
*
parent
,
QCString
&
s
,
InputString
(
const
QString
&
text
,
Q
Widget
*
parent
,
QCString
&
s
,
StringMode
m
=
StringFree
);
~
InputString
();
void
setEnabled
(
bool
);
...
...
addon/doxywizard/inputstrlist.cpp
View file @
c1605e5b
...
...
@@ -13,8 +13,7 @@
*/
#include "inputstrlist.h"
#include "pagewidget.h"
#include "pixmaps.h"
//#include "pixmaps.h"
#include <qlabel.h>
#include <qlayout.h>
...
...
@@ -27,8 +26,8 @@
#include <qtooltip.h>
InputStrList
::
InputStrList
(
const
QString
&
label
,
Page
Widget
*
parent
,
QStrList
&
sl
,
ListMode
lm
)
:
QWidget
(
parent
->
getLayout
()
),
strList
(
sl
)
Q
Widget
*
parent
,
QStrList
&
sl
,
ListMode
lm
)
:
QWidget
(
parent
),
strList
(
sl
)
{
QGridLayout
*
layout
=
new
QGridLayout
(
this
,
2
,
2
,
5
);
lab
=
new
QLabel
(
label
,
this
);
...
...
@@ -42,19 +41,22 @@ InputStrList::InputStrList( const QString & label,
boxlayout
->
addWidget
(
le
,
1
);
add
=
new
QPushButton
(
dw
);
add
->
setPixmap
(
QPixmap
(
add_xpm
));
//add->setPixmap( QPixmap( add_xpm ));
add
->
setText
(
"+"
);
add
->
setMinimumSize
(
add
->
sizeHint
()
);
QToolTip
::
add
(
add
,
"Add item"
);
boxlayout
->
addWidget
(
add
);
del
=
new
QPushButton
(
dw
);
del
->
setPixmap
(
QPixmap
(
del_xpm
));
//del->setPixmap( QPixmap( del_xpm ));
del
->
setText
(
"-"
);
del
->
setMinimumSize
(
del
->
sizeHint
()
);
QToolTip
::
add
(
del
,
"Delete selected item"
);
boxlayout
->
addWidget
(
del
);
upd
=
new
QPushButton
(
dw
);
upd
->
setPixmap
(
QPixmap
(
update_xpm
));
//upd->setPixmap( QPixmap( update_xpm ));
upd
->
setText
(
"*"
);
upd
->
setMinimumSize
(
upd
->
sizeHint
()
);
QToolTip
::
add
(
upd
,
"Update selected item"
);
boxlayout
->
addWidget
(
upd
);
...
...
@@ -72,7 +74,8 @@ InputStrList::InputStrList( const QString & label,
if
(
lm
&
ListFile
)
{
brFile
=
new
QPushButton
(
dw
);
brFile
->
setPixmap
(
QPixmap
(
file_xpm
)
);
//brFile->setPixmap( QPixmap(file_xpm) );
brFile
->
setText
(
"Select..."
);
brFile
->
setMinimumSize
(
brFile
->
sizeHint
());
QToolTip
::
add
(
brFile
,
"Browse to a file"
);
boxlayout
->
addWidget
(
brFile
);
...
...
@@ -80,7 +83,8 @@ InputStrList::InputStrList( const QString & label,
if
(
lm
&
ListDir
)
{
brDir
=
new
QPushButton
(
dw
);
brDir
->
setPixmap
(
QPixmap
(
folder_xpm
)
);
//brDir->setPixmap( QPixmap(folder_xpm) );
brDir
->
setText
(
"Select..."
);
brDir
->
setMinimumSize
(
brDir
->
sizeHint
());
QToolTip
::
add
(
brDir
,
"Browse to a folder"
);
boxlayout
->
addWidget
(
brDir
);
...
...
@@ -111,10 +115,6 @@ InputStrList::InputStrList( const QString & label,
}
connect
(
lb
,
SIGNAL
(
selected
(
const
QString
&
)),
this
,
SLOT
(
selectText
(
const
QString
&
)));
parent
->
addWidget
(
this
);
strList
=
sl
;
}
void
InputStrList
::
addString
()
...
...
addon/doxywizard/inputstrlist.h
View file @
c1605e5b
...
...
@@ -24,7 +24,6 @@ class QLabel;
class
QLineEdit
;
class
QPushButton
;
class
QListBox
;
class
PageWidget
;
class
QStrList
;
class
InputStrList
:
public
QWidget
,
public
IInput
...
...
@@ -38,7 +37,7 @@ class InputStrList : public QWidget, public IInput
ListFileDir
=
ListFile
|
ListDir
};
InputStrList
(
const
QString
&
text
,
Page
Widget
*
parent
,
InputStrList
(
const
QString
&
text
,
Q
Widget
*
parent
,
QStrList
&
sl
,
ListMode
v
=
ListString
);
~
InputStrList
()
{};
void
setEnabled
(
bool
);
...
...
addon/doxywizard/pagewidget.cpp
deleted
100644 → 0
View file @
6b195c8d
/******************************************************************************
*
*
*
* Copyright (C) 1997-2004 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#include <stdio.h>
#include <qtabwidget.h>
#include <qlayout.h>
#include "pagewidget.h"
FrameLayout
::
FrameLayout
(
QWidget
*
parent
,
const
char
*
name
,
WFlags
f
)
:
QFrame
(
parent
,
name
,
f
)
{
lay
=
new
QVBoxLayout
(
this
,
5
,
3
,
name
);
}
FrameLayout
::~
FrameLayout
()
{
}
void
FrameLayout
::
addStretch
(
int
stretch
)
{
lay
->
addStretch
(
stretch
);
}
void
FrameLayout
::
addWidget
(
QWidget
*
w
)
{
lay
->
addWidget
(
w
);
}
PageWidget
::
PageWidget
(
QTabWidget
*
parent
,
const
char
*
name
)
:
QScrollView
(
parent
,
name
)
{
// the Qt docs say that one has to insert the viewport() as a parent
// here but this does not work! Insert 0 does give the proper result!
lay
=
new
FrameLayout
(
this
);
addChild
(
lay
);
setVScrollBarMode
(
QScrollView
::
Auto
);
setHScrollBarMode
(
QScrollView
::
AlwaysOff
);
m_parent
=
parent
;
m_parent
->
addTab
(
this
,
name
);
}
void
PageWidget
::
addStretch
(
int
stretch
)
{
lay
->
addStretch
(
stretch
);
//printf("Viewport SizeHint %d,%d\n",viewport()->sizeHint().width(),viewport()->sizeHint().height());
}
void
PageWidget
::
addWidget
(
QWidget
*
w
)
{
//printf("Adding widget height=%d\n",w->sizeHint().height());
lay
->
addWidget
(
w
);
}
QWidget
*
PageWidget
::
getLayout
()
const
{
return
lay
;
}
void
PageWidget
::
resizeEvent
(
QResizeEvent
*
e
)
{
QScrollView
::
resizeEvent
(
e
);
//printf("PageWidget::resizeEvent!\n");
lay
->
resize
(
viewport
()
->
width
(),
QMAX
(
lay
->
height
(),
viewport
()
->
height
()));
}
void
PageWidget
::
paintEvent
(
QPaintEvent
*
e
)
{
QScrollView
::
paintEvent
(
e
);
//printf("PageWidget::paintEvent()\n");
lay
->
resize
(
viewport
()
->
width
(),
QMAX
(
lay
->
height
(),
viewport
()
->
height
()));
}
addon/doxywizard/pixmaps.cpp
deleted
100644 → 0
View file @
6b195c8d
/******************************************************************************
*
*
*
* Copyright (C) 1997-2004 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#include "pixmaps.h"
static
const
char
*
const
folder_xpm_data
[]
=
{
"16 16 6 1"
,
". c None"
,
"b c #ffff00"
,
"d c #000000"
,
"* c #999999"
,
"a c #cccccc"
,
"c c #ffffff"
,
"................"
,
"................"
,
"..*****........."
,
".*ababa*........"
,
"*abababa******.."
,
"*cccccccccccc*d."
,
"*cbababababab*d."
,
"*cabababababa*d."
,
"*cbababababab*d."
,
"*cabababababa*d."
,
"*cbababababab*d."
,
"*cabababababa*d."
,
"*cbababababab*d."
,
"**************d."
,
".dddddddddddddd."
,
"................"
};
const
char
**
folder_xpm
=
(
const
char
**
)
folder_xpm_data
;
static
const
char
*
const
file_xpm_data
[]
=
{
"16 16 5 1"
,
". c #7f7f7f"
,
"# c None"
,
"c c #000000"
,
"b c #bfbfbf"
,
"a c #ffffff"
,
"################"
,
"#..........#####"
,
"#.aaaaaaaab.####"
,
"#.aaaaaaaaba.###"
,
"#.aaaaaaaacccc##"
,
"#.aaaaaaaaaabc##"
,
"#.aaaaaaaaaabc##"
,
"#.aaaaaaaaaabc##"
,
"#.aaaaaaaaaabc##"
,
"#.aaaaaaaaaabc##"
,
"#.aaaaaaaaaabc##"
,
"#.aaaaaaaaaabc##"
,
"#.aaaaaaaaaabc##"
,
"#.bbbbbbbbbbbc##"
,
"#ccccccccccccc##"
,
"################"
};
const
char
**
file_xpm
=
(
const
char
**
)
file_xpm_data
;
static
const
char
*
const
add_xpm_data
[]
=
{
"16 16 5 1"
,
". c None"
,
"* c #0328f9"
,
"# c #354396"
,
"a c #353740"
,
"c c #999999"
,
"................"
,
"......###......."
,
"......#*ac......"
,
"......#*ac......"
,
"......#*ac......"
,
"......#*ac......"
,
".######*a#####.."
,
".#***********ac."
,
".#aaaaa*aaaaaac."
,
"..cccc#*acccccc."
,
"......#*ac......"
,
"......#*ac......"
,
"......#*ac......"
,
"......#aac......"
,
".......ccc......"
,
"................"
};
const
char
**
add_xpm
=
(
const
char
**
)
add_xpm_data
;
static
const
char
*
const
del_xpm_data
[]
=
{
"16 16 5 1"
,
". c None"
,
"* c #0328f9"
,
"# c #354396"
,
"a c #353740"
,
"c c #999999"
,
"................"
,
"................"
,
"................"
,
"................"
,
"................"
,
"................"
,
".#############.."
,
".#***********ac."
,
".aaaaaaaaaaaaac."
,
"..ccccccccccccc."
,
"................"
,
"................"
,
"................"
,
"................"
,
"................"
,
"................"
};
const
char
**
del_xpm
=
(
const
char
**
)
del_xpm_data
;
static
char
*
update_xpm_data
[]
=
{
"16 16 5 1"
,
/* colors */
". c #0328f9"
,
"# c #354396"
,
"a c #353740"
,
"b c None"
,
"c c #999999"
,
/* pixels */
"bbbbbbbbbbbbbbbb"
,
"bbbbbbbb#####acb"
,
"bbbbbbbb#....abb"
,
"bbc##cbb#...acbb"
,
"bb#..abb#....abb"
,
"bc#..abb#.a..acb"
,
"b#..acbbaac#..ab"
,
"b#..abbbcbb#..ab"
,
"b#..abbbbbb#..ab"
,
"b#..acbbbbc#..ab"
,
"bc#..#cbbc#..acb"
,
"bb#...####...acb"
,
"bbca........acbb"
,
"bbbbaa....aaccbb"
,
"bbbbbcaaaaccbbbb"
,
"bbbbbbbbbbbbbbbb"
};
const
char
**
update_xpm
=
(
const
char
**
)
update_xpm_data
;
static
const
char
*
fileopen_xpm_data
[]
=
{
"16 13 5 1"
,
". c #040404"
,
"# c #808304"
,
"a c None"
,
"b c #f3f704"
,
"c c #f3f7f3"
,
"aaaaaaaaa...aaaa"
,
"aaaaaaaa.aaa.a.a"
,
"aaaaaaaaaaaaa..a"
,
"a...aaaaaaaa...a"
,
".bcb.......aaaaa"
,
".cbcbcbcbc.aaaaa"
,
".bcbcbcbcb.aaaaa"
,
".cbcb..........."
,
".bcb.#########.a"
,
".cb.#########.aa"
,
".b.#########.aaa"
,
"..#########.aaaa"
,
"...........aaaaa"
};
const
char
**
fileopen_xpm
=
(
const
char
**
)
fileopen_xpm_data
;
/* XPM */
static
const
char
*
filesave_xpm_data
[]
=
{
"14 14 4 1"
,
". c #040404"
,
"# c #808304"
,
"a c #bfc2bf"
,
"b c None"
,
".............."
,
".#.aaaaaaaa.a."
,
".#.aaaaaaaa..."
,
".#.aaaaaaaa.#."
,
".#.aaaaaaaa.#."
,
".#.aaaaaaaa.#."
,
".#.aaaaaaaa.#."
,
".##........##."
,
".############."
,
".##.........#."
,
".##......aa.#."
,
".##......aa.#."
,
".##......aa.#."
,
"b............."
};
const
char
**
filesave_xpm
=
(
const
char
**
)
filesave_xpm_data
;
/* XPM */
static
const
char
*
rundoxygen_xpm_data
[]
=
{
"16 16 11 1"
,
" c None"
,
". c #000000"
,
"+ c #DCDCDC"
,
"@ c #A0A0A0"
,
"# c #C3C3C3"
,
"$ c #808080"
,
"% c #FFA858"
,
"& c #FFDCA8"
,
"* c #FFFFC0"
,
"= c #FFFFFF"
,
"- c #585858"
,
" .. "
,
" .. .++. .. "
,
" .+@.@##@.@+. "
,
" .@+$@%%@$+@. "
,
" .$%%&%&%$. "
,
" ..+@%&$$%&@+.. "
,
".+#@%&%@@&*%@#+."
,
".$@+$&*&&=*$+@$."
,
" .--+$&*=&$+--. "
,
" .$#++$$++#$. "
,
" .@=$-$++$-$=@. "
,
" .+@-..@@..-@+. "
,
" ... .+=. ... "
,
" .-$. "
,
" .. "
,
" "
};
const
char
**
rundoxygen_xpm
=
(
const
char
**
)
rundoxygen_xpm_data
;
addon/doxywizard/pixmaps.h
deleted
100644 → 0
View file @
6b195c8d
/******************************************************************************
*
*
*
* Copyright (C) 1997-2004 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#ifndef _PIXMAPS_H
#define _PIXMAPS_H
extern
const
char
**
folder_xpm
;
extern
const
char
**
file_xpm
;
extern
const
char
**
add_xpm
;
extern
const
char
**
del_xpm
;
extern
const
char
**
update_xpm
;
extern
const
char
**
fileopen_xpm
;
extern
const
char
**
filesave_xpm
;
extern
const
char
**
rundoxygen_xpm
;
#endif
addon/doxywizard/version.h
View file @
c1605e5b
/******************************************************************************
*
*
*
* Copyright (C) 1997-2004 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
*/
#ifndef VERSION_H
#define VERSION_H
...
...
configure
View file @
c1605e5b
...
...
@@ -27,6 +27,7 @@ f_prefix=/usr/local
f_insttool
=
NO
f_english
=
NO
f_wizard
=
NO
f_thread
=
NO
f_langs
=
nl
,se,cz,fr,it,de,jp,je,es,fi,ru,hr,pl,pt,hu,kr,ke,ro,si,cn,no,br,dk,sk,ua,gr,tw,sr,ca,lt
while
test
-n
"
$1
"
;
do
...
...
@@ -233,21 +234,21 @@ if test "$f_wizard" = YES; then
if
test
-d
"/usr/lib/qt3/lib"
;
then
if
test
-d
"/usr/lib/qt3/include"
;
then
if
test
-x
"/usr/lib/qt3/bin/moc"
;
then
QTDIR
=
"/usr/lib/qt3"
;
QTDIR
=
"/usr/lib/qt3"
fi
fi
fi
if
test
-d
"/usr/lib/qt2/lib"
;
then
if
test
-d
"/usr/lib/qt2/include"
;
then
if
test
-x
"/usr/lib/qt2/bin/moc"
;
then
QTDIR
=
"/usr/lib/qt2"
;
QTDIR
=
"/usr/lib/qt2"
fi
fi
fi
if
test
-d
"/usr/lib/qt/lib"
;
then
if
test
-d
"/usr/lib/qt/include"
;
then
if
test
-x
"/usr/lib/qt/bin/moc"
;
then
QTDIR
=
"/usr/lib/qt"
;
QTDIR
=
"/usr/lib/qt"
fi
fi
fi
...
...
@@ -260,19 +261,22 @@ if test "$f_wizard" = YES; then
exit
2
else
if
test
!
-d
"
$QTDIR
/lib"
;
then
echo
"QTDIR is set
, but library directory
does not exist!"
echo
"QTDIR is set
to
$QTDIR
, but library directory
$QTDIR
/lib
does not exist!"
exit
2
fi
if
test
!
-d
"
$QTDIR
/include"
;
then
echo
"QTDIR is set
, but include directory
does not exist!"
echo
"QTDIR is set
to
$QTDIR
, but include directory
$QTDIR
/include
does not exist!"
exit
2
fi
if
test
!
-x
"
$QTDIR
/bin/moc"
;
then
echo
"QTDIR is set, but the moc tool could not be found in
$QTDIR
/bin!"
echo
"QTDIR is set
to
$QTDIR
, but the moc tool could not be found in
$QTDIR
/bin!"
exit
2
fi
echo
" headers
$QTDIR
/include,"
echo
" libraries
$QTDIR
/lib"
if
test
-n
"
`
ls
$QTDIR
/lib/
*
|
grep
qt-mt
`
"
;
then
f_thread
=
YES
fi
fi
fi
...
...
@@ -418,6 +422,7 @@ INSTALL = $f_prefix
INSTTOOL =
$f_insttool
DOXYDOCS = ..
DOCDIR =
$f_docdir
QTDIR =
$QTDIR
EOF
if
test
"
$f_dot
"
!=
NO
;
then
...
...
@@ -505,10 +510,14 @@ for i in $f_inprofiles ; do
EOF
if
test
"
$f_debug
"
=
NO
;
then
cat
$SRC
.tmakeconfig |
sed
-e
"s/
\$
extraopts/release/g"
>>
$DST
realopts
=
"release"
else
cat
$SRC
.tmakeconfig |
sed
-e
"s/
\$
extraopts/debug/g"
>>
$DST
realopts
=
"debug"
fi
if
test
"
$f_thread
"
=
YES
;
then
realopts
=
"
$realopts
thread"
fi
cat
$SRC
.tmakeconfig |
sed
-e
"s/
\$
extraopts/
$realopts
/g"
>>
$DST
echo
" Created
$DST
from
$SRC
..."
done
...
...
doc/config.doc
View file @
c1605e5b
...
...
@@ -239,7 +239,7 @@ followed by the descriptions of the tags grouped by category.
<
dt
>\
c
CREATE_SUBDIRS
<
dd
>
\
addindex
CREATE_SUBDIRS
If
the
\
c
CREATE_SUBDIRS
tag
is
set
to
\
c
YES
,
then
doxygen
will
create
2
levels
of
10
sub
-
directories
under
the
output
directory
of
each
output
4096
sub
-
directories
(
in
2
levels
)
under
the
output
directory
of
each
output
format
and
will
distribute
the
generated
files
over
these
directories
.
Enabling
this
option
can
be
useful
when
feeding
doxygen
a
huge
amount
of
source
files
,
where
putting
all
generated
files
in
the
same
directory
would
otherwise
...
...
doc/language.doc
View file @
c1605e5b
...
...
@@ -23,7 +23,7 @@ text fragments, generated by doxygen, can be produced in languages other
than English (the default). The output language is chosen through the
configuration file (with default name and known as Doxyfile).
Currently (version 1.3.7
-20040616
), 29 languages
Currently (version 1.3.7), 29 languages
are supported (sorted alphabetically):
Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian,
Czech, Danish, Dutch, English, Finnish, French, German, Greek,
...
...
packages/rpm/doxygen.spec
View file @
c1605e5b
Summary: A documentation system for C/C++.
Name: doxygen
Version: 1.3.7_20040
617
Version: 1.3.7_20040
704
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
...
...
src/config.l
View file @
c1605e5b
...
...
@@ -1348,7 +1348,7 @@ void Config::create()
cb = addBool(
"CREATE_SUBDIRS",
"If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \n"
"
2 levels of 10 sub-directories
under the output directory of each output \n"
"
4096 sub-directories (in 2 levels)
under the output directory of each output \n"
"format and will distribute the generated files over these directories. \n"
"Enabling this option can be useful when feeding doxygen a huge amount of source \n"
"files, where putting all generated files in the same directory would otherwise \n"
...
...
@@ -1361,10 +1361,11 @@ void Config::create()
"documentation generated by doxygen is written. Doxygen will use this \n"
"information to generate all constant output in the proper language. \n"
"The default language is English, other supported languages are: \n"
"Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, \n"
"Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en \n"
"(Japanese with English messages), Korean, Korean-en, Norwegian, Polish, Portuguese, \n"
"Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.\n",
"Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, \n"
"Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, \n"
"Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, \n"
"Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, \n"
"Swedish, and Ukrainian.\n",
"English"
);
#ifdef LANG_BR
...
...
@@ -1513,7 +1514,7 @@ void Config::create()
"If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \n"
"path before files name in the file list and in the header files. If set \n"
"to NO the shortest path that makes the file name unique will be used. \n",
FALS
E
TRU
E
);
cl = addList(
"STRIP_FROM_PATH",
...
...
src/dot.cpp
View file @
c1605e5b
...
...
@@ -193,6 +193,48 @@ static bool convertMapFile(QTextStream &t,const char *mapName,
return
TRUE
;
}
static
QArray
<
int
>
*
s_newNumber
=
new
QArray
<
int
>
();
static
int
s_max_newNumber
=
0
;
inline
int
reNumberNode
(
int
number
,
bool
doReNumbering
)
{
if
(
!
doReNumbering
)
{
return
number
;
}
else
{
int
s
=
s_newNumber
->
size
();
if
(
number
>=
s
)
{
int
ns
=
0
;
ns
=
s
*
3
/
2
+
5
;
// new size
if
(
number
>=
ns
)
// number still doesn't fit
{
ns
=
number
*
3
/
2
+
5
;
}
s_newNumber
->
resize
(
ns
);
for
(
int
i
=
s
;
i
<
ns
;
i
++
)
// clear new part of the array
{
s_newNumber
->
at
(
i
)
=
0
;
}
}
int
i
=
s_newNumber
->
at
(
number
);
if
(
i
==
0
)
// not yet mapped
{
i
=
++
s_max_newNumber
;
// start from 1
s_newNumber
->
at
(
number
)
=
i
;
}
return
i
;
}
}
static
void
resetReNumbering
()
{
s_max_newNumber
=
0
;
s_newNumber
->
resize
(
s_max_newNumber
);
}
static
bool
readBoundingBoxDot
(
const
char
*
fileName
,
int
*
width
,
int
*
height
)
{
QFile
f
(
fileName
);
...
...
@@ -497,14 +539,15 @@ static void writeBoxMemberList(QTextStream &t,char prot,MemberList &ml,ClassDef
void
DotNode
::
writeBox
(
QTextStream
&
t
,
GraphType
gt
,
GraphOutputFormat
/*format*/
,
bool
hasNonReachableChildren
)
bool
hasNonReachableChildren
,
bool
reNumber
)
{
const
char
*
labCol
=
m_url
.
isEmpty
()
?
"grey75"
:
// non link
(
(
hasNonReachableChildren
)
?
"red"
:
"black"
);
t
<<
" Node"
<<
m_number
<<
" [label=
\"
"
;
t
<<
" Node"
<<
reNumberNode
(
m_number
,
reNumber
)
<<
" [label=
\"
"
;
if
(
Config_getBool
(
"UML_LOOK"
)
&&
(
gt
==
Inheritance
||
gt
==
Collaboration
))
{
...
...
@@ -567,13 +610,14 @@ void DotNode::writeArrow(QTextStream &t,
DotNode
*
cn
,
EdgeInfo
*
ei
,
bool
topDown
,
bool
pointBack
bool
pointBack
,
bool
reNumber
)
{
t
<<
" Node"
;
if
(
topDown
)
t
<<
cn
->
number
();
else
t
<<
m_number
;
if
(
topDown
)
t
<<
reNumberNode
(
cn
->
number
(),
reNumber
);
else
t
<<
reNumberNode
(
m_number
,
reNumber
)
;
t
<<
" -> Node"
;
if
(
topDown
)
t
<<
m_number
;
else
t
<<
cn
->
number
(
);
if
(
topDown
)
t
<<
reNumberNode
(
m_number
,
reNumber
);
else
t
<<
reNumberNode
(
cn
->
number
(),
reNumber
);
t
<<
" ["
;
if
(
pointBack
)
t
<<
"dir=back,"
;
t
<<
"color=
\"
"
<<
edgeColorMap
[
ei
->
m_color
]
...
...
@@ -603,7 +647,8 @@ void DotNode::write(QTextStream &t,
bool
topDown
,
bool
toChildren
,
int
distance
,
bool
backArrows
bool
backArrows
,
bool
reNumber
)
{
//printf("DotNode::write(%d) name=%s this=%p written=%d\n",distance,m_label.data(),this,m_written);
...
...
@@ -620,7 +665,7 @@ void DotNode::write(QTextStream &t,
if
(
cn
->
m_distance
>
distance
)
hasNonReachableChildren
=
TRUE
;
}
}
writeBox
(
t
,
gt
,
format
,
hasNonReachableChildren
);
writeBox
(
t
,
gt
,
format
,
hasNonReachableChildren
,
reNumber
);
m_written
=
TRUE
;
if
(
nl
)
{
...
...
@@ -634,9 +679,9 @@ void DotNode::write(QTextStream &t,
if
(
cn
->
m_distance
<=
distance
)
{
//printf("write arrow %s%s%s\n",label().data(),backArrows?"<-":"->",cn->label().data());
writeArrow
(
t
,
gt
,
format
,
cn
,
dnli2
.
current
(),
topDown
,
backArrows
);
writeArrow
(
t
,
gt
,
format
,
cn
,
dnli2
.
current
(),
topDown
,
backArrows
,
reNumber
);
}
cn
->
write
(
t
,
gt
,
format
,
topDown
,
toChildren
,
distance
,
backArrows
);
cn
->
write
(
t
,
gt
,
format
,
topDown
,
toChildren
,
distance
,
backArrows
,
reNumber
);
}
}
else
// render parents
...
...
@@ -654,10 +699,11 @@ void DotNode::write(QTextStream &t,
pn
,
pn
->
m_edgeInfo
->
at
(
pn
->
m_children
->
findRef
(
this
)),
FALSE
,
backArrows
backArrows
,
reNumber
);
}
pn
->
write
(
t
,
gt
,
format
,
TRUE
,
FALSE
,
distance
,
backArrows
);
pn
->
write
(
t
,
gt
,
format
,
TRUE
,
FALSE
,
distance
,
backArrows
,
reNumber
);
}
}
}
...
...
@@ -946,9 +992,10 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
{
if
(
node
->
m_subgraphId
==
n
->
m_subgraphId
)
{
node
->
write
(
md5stream
,
DotNode
::
Hierarchy
,
BITMAP
,
FALSE
,
TRUE
,
1000
,
TRUE
);
node
->
write
(
md5stream
,
DotNode
::
Hierarchy
,
BITMAP
,
FALSE
,
TRUE
,
1000
,
TRUE
,
TRUE
);
}
}
resetReNumbering
();
uchar
md5_sig
[
16
];
QCString
sigStr
(
33
);
MD5Buffer
((
const
unsigned
char
*
)
buf
.
ascii
(),
buf
.
length
(),
md5_sig
);
...
...
@@ -974,11 +1021,12 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
{
if
(
node
->
m_subgraphId
==
n
->
m_subgraphId
)
{
node
->
write
(
t
,
DotNode
::
Hierarchy
,
BITMAP
,
FALSE
,
TRUE
,
1000
,
TRUE
);
node
->
write
(
t
,
DotNode
::
Hierarchy
,
BITMAP
,
FALSE
,
TRUE
,
1000
,
TRUE
,
TRUE
);
}
}
writeGraphFooter
(
t
);
f
.
close
();
resetReNumbering
();
QCString
dotArgs
(
maxCmdLine
);
dotArgs
.
sprintf
(
"
\"
%s
\"
-T%s -o
\"
%s
\"
-Timap -o
\"
%s
\"
"
,
...
...
@@ -1407,7 +1455,8 @@ void writeDotGraph(DotNode *root,
bool
lrRank
,
bool
renderParents
,
int
distance
,
bool
backArrows
bool
backArrows
,
bool
reNumber
)
{
// generate the graph description for dot
...
...
@@ -1423,7 +1472,7 @@ void writeDotGraph(DotNode *root,
t
<<
" rankdir=LR;"
<<
endl
;
}
root
->
clearWriteFlag
();
root
->
write
(
t
,
gt
,
format
,
gt
!=
DotNode
::
CallGraph
,
TRUE
,
distance
,
backArrows
);
root
->
write
(
t
,
gt
,
format
,
gt
!=
DotNode
::
CallGraph
,
TRUE
,
distance
,
backArrows
,
reNumber
);
if
(
renderParents
&&
root
->
m_parents
)
{
//printf("rendering parents!\n");
...
...
@@ -1439,10 +1488,11 @@ void writeDotGraph(DotNode *root,
pn
,
pn
->
m_edgeInfo
->
at
(
pn
->
m_children
->
findRef
(
root
)),
FALSE
,
backArrows
backArrows
,
reNumber
);
}
pn
->
write
(
t
,
gt
,
format
,
TRUE
,
FALSE
,
distance
,
backArrows
);
pn
->
write
(
t
,
gt
,
format
,
TRUE
,
FALSE
,
distance
,
backArrows
,
reNumber
);
}
}
writeGraphFooter
(
t
);
...
...
@@ -1462,6 +1512,8 @@ QCString computeMd5Signature(DotNode *root,
bool
backArrows
)
{
bool
reNumber
=
TRUE
;
//printf("computeMd5Signature\n");
QString
buf
;
QTextStream
md5stream
(
&
buf
,
IO_WriteOnly
);
...
...
@@ -1470,7 +1522,7 @@ QCString computeMd5Signature(DotNode *root,
md5stream
<<
"rankdir=LR;"
<<
endl
;
}
root
->
clearWriteFlag
();
root
->
write
(
md5stream
,
gt
,
format
,
gt
!=
DotNode
::
CallGraph
,
TRUE
,
distance
,
backArrows
);
root
->
write
(
md5stream
,
gt
,
format
,
gt
!=
DotNode
::
CallGraph
,
TRUE
,
distance
,
backArrows
,
reNumber
);
if
(
renderParents
&&
root
->
m_parents
)
{
QListIterator
<
DotNode
>
dnli
(
*
root
->
m_parents
);
...
...
@@ -1485,16 +1537,21 @@ QCString computeMd5Signature(DotNode *root,
pn
,
pn
->
m_edgeInfo
->
at
(
pn
->
m_children
->
findRef
(
root
)),
FALSE
,
backArrows
backArrows
,
reNumber
);
}
pn
->
write
(
md5stream
,
gt
,
format
,
TRUE
,
FALSE
,
distance
,
backArrows
);
pn
->
write
(
md5stream
,
gt
,
format
,
TRUE
,
FALSE
,
distance
,
backArrows
,
reNumber
);
}
}
uchar
md5_sig
[
16
];
QCString
sigStr
(
33
);
MD5Buffer
((
const
unsigned
char
*
)
buf
.
ascii
(),
buf
.
length
(),
md5_sig
);
MD5SigToString
(
md5_sig
,
sigStr
.
data
(),
33
);
if
(
reNumber
)
{
resetReNumbering
();
}
//printf("md5: %s | file: %s\n",sigStr,baseName.data());
return
sigStr
;
}
...
...
@@ -1510,6 +1567,7 @@ static bool findMaximalDotGraph(DotNode *root,
bool
backArrows
/*=TRUE*/
)
{
bool
reNumber
=
TRUE
;
int
minDistance
=
1
;
// min distance that shows only direct children.
int
curDistance
;
//=QMIN(2,maxDist); // current distance to try
int
maxDistance
=
maxDist
;
// max distance that show whole graph
...
...
@@ -1526,7 +1584,7 @@ static bool findMaximalDotGraph(DotNode *root,
curDistance
=
(
minDistance
+
maxDistance
)
/
2
;
writeDotGraph
(
root
,
gt
,
format
,
baseName
,
lrRank
,
renderParents
,
curDistance
,
backArrows
);
curDistance
,
backArrows
,
reNumber
);
QCString
dotArgs
(
maxCmdLine
);
// create annotated dot file
...
...
@@ -1576,8 +1634,13 @@ static bool findMaximalDotGraph(DotNode *root,
hasLRRank
,
renderParents
,
lastFit
,
backArrows
backArrows
,
reNumber
);
if
(
reNumber
)
{
resetReNumbering
();
}
return
TRUE
;
}
...
...
src/dot.h
View file @
c1605e5b
...
...
@@ -65,7 +65,7 @@ class DotNode
void
removeChild
(
DotNode
*
n
);
void
removeParent
(
DotNode
*
n
);
void
write
(
QTextStream
&
t
,
GraphType
gt
,
GraphOutputFormat
f
,
bool
topDown
,
bool
toChildren
,
int
maxDistance
,
bool
backArrows
);
bool
topDown
,
bool
toChildren
,
int
maxDistance
,
bool
backArrows
,
bool
reNumber
);
int
m_subgraphId
;
void
clearWriteFlag
();
void
writeXML
(
QTextStream
&
t
,
bool
isClassGraph
);
...
...
@@ -76,9 +76,9 @@ class DotNode
private
:
void
colorConnectedNodes
(
int
curColor
);
void
writeBox
(
QTextStream
&
t
,
GraphType
gt
,
GraphOutputFormat
f
,
bool
hasNonReachableChildren
);
bool
hasNonReachableChildren
,
bool
reNumber
=
FALSE
);
void
writeArrow
(
QTextStream
&
t
,
GraphType
gt
,
GraphOutputFormat
f
,
DotNode
*
cn
,
EdgeInfo
*
ei
,
bool
topDown
,
bool
pointBack
=
TRUE
);
EdgeInfo
*
ei
,
bool
topDown
,
bool
pointBack
=
TRUE
,
bool
reNumber
=
FALSE
);
const
DotNode
*
findDocNode
()
const
;
// only works for acyclic graphs!
int
m_number
;
QCString
m_label
;
//!< label text
...
...
@@ -102,7 +102,7 @@ class DotNode
DotNode
*
root
,
GraphType
gt
,
GraphOutputFormat
f
,
const
QCString
&
baseName
,
bool
lrRank
,
bool
renderParents
,
int
distance
,
bool
backArrows
int
distance
,
bool
backArrows
,
bool
reNumber
);
friend
QCString
computeMd5Signature
(
DotNode
*
root
,
GraphType
gt
,
...
...
src/doxygen.cpp
View file @
c1605e5b
...
...
@@ -810,9 +810,9 @@ static void addClassToContext(Entry *root)
}
}
//
if the class is not in a namespace then we insert
// it in
the file definition
if
(
!
found
&&
fd
&&
(
root
->
section
&
Entry
::
COMPOUND_MASK
))
//
add the class to the file (we do this even if we have already inserted
// it in
to the namespace)
if
(
fd
&&
(
root
->
section
&
Entry
::
COMPOUND_MASK
))
{
//printf(">> Inserting class `%s' in file `%s' (root->fileName=`%s')\n",
// cd->name().data(),
...
...
@@ -1677,14 +1677,13 @@ static MemberDef *addVariableToFile(
nd
->
insertMember
(
md
);
md
->
setNamespace
(
nd
);
}
else
// add member to the file (we do this even if we have already inserted
// it into the namespace.
if
(
fd
)
{
// find file definition
if
(
fd
)
{
fd
->
insertMember
(
md
);
md
->
setFileDef
(
fd
);
}
fd
->
insertMember
(
md
);
md
->
setFileDef
(
fd
);
}
// add member definition to the list of globals
...
...
@@ -1739,6 +1738,8 @@ static bool isVarWithConstructor(Entry *root)
Definition
*
ctx
=
0
;
FileDef
*
fd
=
0
;
bool
ambig
;
int
ti
;
if
(
root
->
parent
&&
root
->
parent
->
section
&
Entry
::
COMPOUND_MASK
)
{
// inside a class
result
=
FALSE
;
...
...
@@ -1760,6 +1761,10 @@ static bool isVarWithConstructor(Entry *root)
type
=
root
->
type
;
if
(
type
.
left
(
6
)
==
"const "
)
type
=
type
.
right
(
type
.
length
()
-
6
);
typeIsClass
=
getResolvedClass
(
ctx
,
fd
,
type
)
!=
0
;
if
(
!
typeIsClass
&&
(
ti
=
type
.
find
(
'<'
))
!=-
1
)
{
typeIsClass
=
getResolvedClass
(
ctx
,
fd
,
type
.
left
(
ti
))
!=
0
;
}
if
(
typeIsClass
)
// now we still have to check if the arguments are
// types or values. Since we do not have complete type info
// we need to rely on heuristics :-(
...
...
@@ -2453,9 +2458,11 @@ static void buildFunctionList(Entry *root)
nd
->
insertMember
(
md
);
md
->
setNamespace
(
nd
);
}
else
if
(
fd
)
if
(
fd
)
{
// add member to the file
// add member to the file (we do this even if we have already
// inserted it into the namespace)
fd
->
insertMember
(
md
);
md
->
setFileDef
(
fd
);
}
...
...
@@ -5367,10 +5374,14 @@ static void findEnums(Entry *root)
nd
->
insertMember
(
md
);
md
->
setNamespace
(
nd
);
}
else
if
(
isGlobal
)
// even if we have already added the enum to a namespace, we still
// also want to add it to other appropriate places such as file
// or class.
if
(
isGlobal
)
{
md
->
setDefinition
(
name
);
if
(
fd
==
0
&&
root
->
tagInfo
)
if
(
fd
==
0
&&
root
->
parent
)
{
bool
ambig
;
QCString
filePathName
=
root
->
parent
->
fileName
;
...
...
src/htmldocvisitor.cpp
View file @
c1605e5b
...
...
@@ -27,6 +27,9 @@
#include "message.h"
#include "config.h"
#define PREFRAG_START "<div class=\"fragment\"><pre>"
#define PREFRAG_END "</pre></div"
static
QString
htmlAttribsToString
(
const
HtmlAttribList
&
attribs
)
{
QString
result
;
...
...
@@ -189,14 +192,14 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
switch
(
s
->
type
())
{
case
DocVerbatim
:
:
Code
:
// fall though
m_t
<<
"<pre><div class=
\"
fragment
\"
>"
;
m_t
<<
PREFRAG_START
;
parseCode
(
m_ci
,
s
->
context
(),
s
->
text
().
latin1
(),
s
->
isExample
(),
s
->
exampleFile
());
m_t
<<
"</div></pre>"
;
m_t
<<
PREFRAG_END
;
break
;
case
DocVerbatim
:
:
Verbatim
:
m_t
<<
"<pre><div class=
\"
fragment
\"
>"
;
m_t
<<
PREFRAG_START
;
filter
(
s
->
text
());
m_t
<<
"</div></pre>"
;
m_t
<<
PREFRAG_END
;
break
;
case
DocVerbatim
:
:
HtmlOnly
:
m_t
<<
s
->
text
();
...
...
@@ -246,17 +249,17 @@ void HtmlDocVisitor::visit(DocInclude *inc)
switch
(
inc
->
type
())
{
case
DocInclude
:
:
Include
:
m_t
<<
"<pre><div class=
\"
fragment
\"
>"
;
m_t
<<
PREFRAG_START
;
parseCode
(
m_ci
,
inc
->
context
(),
inc
->
text
().
latin1
(),
inc
->
isExample
(),
inc
->
exampleFile
());
m_t
<<
"</div></pre>"
;
m_t
<<
PREFRAG_END
;
break
;
case
DocInclude
:
:
IncWithLines
:
{
m_t
<<
"<pre><div class=
\"
fragment
\"
>"
;
m_t
<<
PREFRAG_START
;
QFileInfo
cfi
(
inc
->
file
()
);
FileDef
fd
(
cfi
.
dirPath
(),
cfi
.
fileName
()
);
parseCode
(
m_ci
,
inc
->
context
(),
inc
->
text
().
latin1
(),
inc
->
isExample
(),
inc
->
exampleFile
(),
&
fd
);
m_t
<<
"</div></pre>"
;
m_t
<<
PREFRAG_END
;
}
break
;
case
DocInclude
:
:
DontInclude
:
...
...
@@ -265,9 +268,9 @@ void HtmlDocVisitor::visit(DocInclude *inc)
m_t
<<
inc
->
text
();
break
;
case
DocInclude
:
:
VerbInclude
:
m_t
<<
"<pre><div class=
\"
fragment
\"
>"
;
m_t
<<
PREFRAG_START
;
filter
(
inc
->
text
());
m_t
<<
"</div></pre>"
;
m_t
<<
PREFRAG_END
;
break
;
}
}
...
...
@@ -278,7 +281,7 @@ void HtmlDocVisitor::visit(DocIncOperator *op)
// op->type(),op->isFirst(),op->isLast(),op->text().data());
if
(
op
->
isFirst
())
{
if
(
!
m_hide
)
m_t
<<
"<pre><div class=
\"
fragment
\"
>"
;
if
(
!
m_hide
)
m_t
<<
PREFRAG_START
;
pushEnabled
();
m_hide
=
TRUE
;
}
...
...
@@ -292,7 +295,7 @@ void HtmlDocVisitor::visit(DocIncOperator *op)
if
(
op
->
isLast
())
{
popEnabled
();
if
(
!
m_hide
)
m_t
<<
"</div></pre>"
;
if
(
!
m_hide
)
m_t
<<
PREFRAG_END
;
}
else
{
...
...
src/scanner.l
View file @
c1605e5b
...
...
@@ -5500,12 +5500,23 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
}
<Doc>"*/" {
checkDocs();
current->doc += "\n\n";
//printf("End of docs at line %d: %s\n",yyLineNr,current->doc.data());
if (lastDocContext==SkipCurly
&& Config_getBool("HIDE_IN_BODY_DOCS")
)
if (lastDocContext==SkipCurly)
{
if (!Config_getBool("HIDE_IN_BODY_DOCS"))
{
if (!previous->doc.isEmpty())
{
previous->doc+="<p>";
}
previous->doc += current->doc;
}
current->doc.resize(0);
}
else
{
current->doc += "\n\n";
}
if (current->section==Entry::GROUPDOC_SEC)
{
current_root->addSubEntry(current);
...
...
src/translator_adapter.h
View file @
c1605e5b
...
...
@@ -352,19 +352,4 @@ class TranslatorAdapter_1_2_2 : public TranslatorAdapter_1_2_4
{
return
english
.
trPropertyDocumentation
();
}
};
/*! \brief Translator adapter class for release 1.2.1
*
* Translator adapter for dealing with translator changes since
* release 1.2.1
*/
class
TranslatorAdapter_1_2_1
:
public
TranslatorAdapter_1_2_2
{
public
:
virtual
QCString
updateNeededMessage
()
{
return
createUpdateNeededMessage
(
idLanguage
(),
"release 1.2.1"
);
}
virtual
QCString
trDCOPMethods
()
{
return
english
.
trDCOPMethods
();
}
};
#endif
src/translator_cz.h
View file @
c1605e5b
...
...
@@ -18,7 +18,7 @@
#ifndef TRANSLATOR_CZ_H
#define TRANSLATOR_CZ_H
//
$Id$
//
//
// The first translation from English to Czech was started by
// Vlastimil Havran (1999--2000). The prototype version of Czech strings
...
...
@@ -129,6 +129,7 @@
// 2003/08/13 - Four new methods "since 1.3.3" implemented.
// 2004/02/26 - trLegendDocs() updated.
// 2004/02/27 - Text inside the trCallGraph() corrected.
// 2004/06/16 - The new method "since 1.3.8" implemented.
// Todo
// ----
...
...
@@ -148,7 +149,7 @@
// Windows version. The version which does not call the function is
// probably slightly faster.
class
TranslatorCzech
:
public
Translator
Adapter_1_3_8
class
TranslatorCzech
:
public
Translator
{
private
:
/*! The decode() inline assumes the source written in the
...
...
@@ -1660,6 +1661,18 @@ class TranslatorCzech : public TranslatorAdapter_1_3_8
{
return
decode
(
"Nalezená slova:"
);
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3.8
//////////////////////////////////////////////////////////////////////////
/*! This is used in HTML as the title of page with source code for file filename
*/
virtual
QCString
trSourceFile
(
QCString
&
filename
)
{
return
decode
(
"Zdrojový soubor "
)
+
filename
;
}
};
#endif // TRANSLATOR_CZ_H
src/translator_es.h
View file @
c1605e5b
...
...
@@ -25,7 +25,7 @@
#ifndef TRANSLATOR_ES_H
#define TRANSLATOR_ES_H
class
TranslatorSpanish
:
public
TranslatorAdapter_1_3_
3
class
TranslatorSpanish
:
public
TranslatorAdapter_1_3_
8
{
public
:
virtual
QCString
idLanguage
()
...
...
src/translator_it.h
View file @
c1605e5b
...
...
@@ -19,6 +19,7 @@
*
* Revision history
*
* 2004/06: translated new items used since version 1.3.8
* 2003/11: translated new items used since version 1.3.3
* 2003/06: translated new items used since version 1.3.1
* 2003/04: translated new items used since version 1.3
...
...
@@ -70,7 +71,7 @@
#ifndef TRANSLATOR_IT_H
#define TRANSLATOR_IT_H
class
TranslatorItalian
:
public
Translator
Adapter_1_3_8
class
TranslatorItalian
:
public
Translator
{
public
:
...
...
@@ -1504,6 +1505,17 @@ class TranslatorItalian : public TranslatorAdapter_1_3_8
return
"Corrispondenze:"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3.8
//////////////////////////////////////////////////////////////////////////
/*! This is used in HTML as the title of page with source code for file filename
*/
virtual
QCString
trSourceFile
(
QCString
&
filename
)
{
return
" File sorgente "
+
filename
;
}
};
#endif
src/translator_nl.h
View file @
c1605e5b
...
...
@@ -18,7 +18,7 @@
#ifndef TRANSLATOR_NL_H
#define TRANSLATOR_NL_H
class
TranslatorDutch
:
public
Translator
Adapter_1_3_8
class
TranslatorDutch
:
public
Translator
{
public
:
QCString
idLanguage
()
...
...
@@ -1143,6 +1143,17 @@ class TranslatorDutch : public TranslatorAdapter_1_3_8
return
"Gevonden:"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3.8
//////////////////////////////////////////////////////////////////////////
/*! This is used in HTML as the title of page with source code for file filename
*/
virtual
QCString
trSourceFile
(
QCString
&
filename
)
{
return
filename
+
" Bron Bestand"
;
}
};
...
...
src/util.cpp
View file @
c1605e5b
...
...
@@ -21,6 +21,8 @@
#include <windows.h>
#endif
#include <md5.h>
#include "qtbc.h"
#include <qregexp.h>
#include <qfileinfo.h>
...
...
@@ -60,6 +62,19 @@ extern char **environ;
//------------------------------------------------------------------------
// selects one of the name to sub-dir mapping algorithms that is used
// to select a sub directory when CREATE_SUBDIRS is set to YES.
#define ALGO_COUNT 1
#define ALGO_CRC16 2
#define ALGO_MD5 3
//#define MAP_ALGO ALGO_COUNT
//#define MAP_ALGO ALGO_CRC16
#define MAP_ALGO ALGO_MD5
//------------------------------------------------------------------------
struct
LookupInfo
{
LookupInfo
(
ClassDef
*
cd
=
0
,
MemberDef
*
td
=
0
,
QCString
ts
=
""
)
...
...
@@ -326,24 +341,6 @@ QCString replaceAnonymousScopes(const QCString &s)
// strip annonymous left hand side part of the scope
QCString
stripAnonymousNamespaceScope
(
const
QCString
&
s
)
{
#if 0
int oi=0,i=0,p=0;
p=s.find('@');
if (p==-1) return s;
while (s.at(p)=='@' && (i=s.find("::@",p))!=-1 &&
Doxygen::namespaceDict[s.left(i)]!=0) { oi=i; p=i+2; }
if (oi==0)
{
//printf("stripAnonymousNamespaceScope(`%s')=`%s'\n",s.data(),s.data());
return s;
}
else
{
//printf("stripAnonymousNamespaceScope(`%s')=`%s'\n",s.data(),s.right(s.length()-oi-2).data());
return s.right(s.length()-oi-2);
}
#endif
int
i
,
p
=
0
,
l
;
QCString
newScope
;
while
((
i
=
getScopeFragment
(
s
,
p
,
&
l
))
!=-
1
)
...
...
@@ -3639,6 +3636,11 @@ QCString convertNameToFile(const char *name,bool allowDots)
}
if
(
createSubdirs
)
{
int
l1Dir
=
0
,
l2Dir
=
0
;
#if MAP_ALGO==ALGO_COUNT
// old algorithm, has the problem that after regeneration the
// output can be located in a different dir.
if
(
Doxygen
::
htmlDirMap
==
0
)
{
Doxygen
::
htmlDirMap
=
new
QDict
<
int
>
(
100003
);
...
...
@@ -3646,20 +3648,31 @@ QCString convertNameToFile(const char *name,bool allowDots)
}
static
int
curDirNum
=
0
;
int
*
dirNum
=
Doxygen
::
htmlDirMap
->
find
(
result
);
int
l1Dir
=
0
,
l2Dir
=
0
;
if
(
dirNum
==
0
)
// new name
{
Doxygen
::
htmlDirMap
->
insert
(
result
,
new
int
(
curDirNum
));
l1Dir
=
(
curDirNum
)
%
10
;
l2Dir
=
(
(
curDirNum
)
/
10
)
%
10
;
l1Dir
=
(
curDirNum
)
&
0xf
;
// bits 0-3
l2Dir
=
(
curDirNum
>>
4
)
&
0xff
;
// bits 4-11
curDirNum
++
;
}
else
// existing name
{
l1Dir
=
(
*
dirNum
)
%
10
;
l2Dir
=
((
*
dirNum
)
/
10
)
%
10
;
}
result
.
prepend
(
QCString
().
sprintf
(
"d%d/d%d/"
,
l1Dir
,
l2Dir
));
l1Dir
=
(
*
dirNum
)
&
0xf
;
// bits 0-3
l2Dir
=
((
*
dirNum
)
>>
4
)
&
0xff
;
// bits 4-11
}
#elif MAP_ALGO==ALGO_CRC16
// second algorithm based on CRC-16 checksum
int
dirNum
=
qChecksum
(
result
,
result
.
length
());
l1Dir
=
dirNum
&
0xf
;
l2Dir
=
(
dirNum
>>
4
)
&
0xff
;
#elif MAP_ALGO==ALGO_MD5
// third algorithm based on MD5 hash
uchar
md5_sig
[
16
];
MD5Buffer
((
const
unsigned
char
*
)
result
.
data
(),
result
.
length
(),
md5_sig
);
l1Dir
=
md5_sig
[
14
]
&
0xf
;
l2Dir
=
md5_sig
[
15
];
#endif
result
.
prepend
(
QCString
().
sprintf
(
"d%x/d%02x/"
,
l1Dir
,
l2Dir
));
}
return
result
;
}
...
...
@@ -3690,14 +3703,14 @@ void createSubDirs(QDir &d)
{
if
(
Config_getBool
(
"CREATE_SUBDIRS"
))
{
// create
100
subdirectories
// create
4096
subdirectories
int
l1
,
l2
;
for
(
l1
=
0
;
l1
<
1
0
;
l1
++
)
for
(
l1
=
0
;
l1
<
1
6
;
l1
++
)
{
d
.
mkdir
(
QString
().
sprintf
(
"d%
d
"
,
l1
));
for
(
l2
=
0
;
l2
<
10
;
l2
++
)
d
.
mkdir
(
QString
().
sprintf
(
"d%
x
"
,
l1
));
for
(
l2
=
0
;
l2
<
256
;
l2
++
)
{
d
.
mkdir
(
QString
().
sprintf
(
"d%
d/d%d
"
,
l1
,
l2
));
d
.
mkdir
(
QString
().
sprintf
(
"d%
x/d%02x
"
,
l1
,
l2
));
}
}
}
...
...
src/xmlgen.cpp
View file @
c1605e5b
...
...
@@ -1557,6 +1557,7 @@ void generateXML()
}
}
QDir
xmlDir
(
outputDirectory
);
createSubDirs
(
xmlDir
);
QCString
fileName
=
outputDirectory
+
"/index.xsd"
;
QFile
f
(
fileName
);
if
(
!
f
.
open
(
IO_WriteOnly
))
...
...
tmake/lib/aix-g++/tmake.conf
View file @
c1605e5b
...
...
@@ -45,6 +45,7 @@ TMAKE_LFLAGS_SONAME =
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lMesaGL
-
lMesaGLU
-
lXmu
...
...
tmake/lib/aix-xlc/tmake.conf
View file @
c1605e5b
...
...
@@ -51,6 +51,7 @@ TMAKE_LFLAGS_SONAME =
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lGL
-
lGLU
-
lXmu
...
...
tmake/lib/beos-g++/tmake.conf
View file @
c1605e5b
...
...
@@ -40,6 +40,7 @@ TMAKE_LFLAGS_SONAME = -Wl,-soname,
TMAKE_LIBS
=
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_MOC
=
moc
...
...
tmake/lib/bsdi-g++/tmake.conf
View file @
c1605e5b
...
...
@@ -48,6 +48,7 @@ TMAKE_LFLAGS_SONAME = -Wl,-soname,
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lMesaGL
-
lMesaGLU
-
lXmu
...
...
tmake/lib/dgux-g++/tmake.conf
View file @
c1605e5b
...
...
@@ -46,6 +46,7 @@ TMAKE_LFLAGS_SONAME = -Wl,-h,
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lMesaGL
-
lMesaGLU
-
lXmu
...
...
tmake/lib/freebsd-g++/tmake.conf
View file @
c1605e5b
...
...
@@ -47,6 +47,7 @@ TMAKE_LFLAGS_SHLIB = -shared
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lMesaGL
-
lMesaGLU
-
lXmu
...
...
tmake/lib/gnu-g++/tmake.conf
View file @
c1605e5b
...
...
@@ -45,6 +45,7 @@ TMAKE_LFLAGS_SONAME = -Wl,-soname,
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lMesaGL
-
lMesaGLU
-
lXmu
...
...
tmake/lib/hpux-acc/tmake.conf
View file @
c1605e5b
...
...
@@ -46,6 +46,7 @@ TMAKE_HPUX_SHLIB = 1
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
-
lICE
-
lSM
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
-
lGL
TMAKE_LIBS_OPENGL
= -
lGL
-
lGLU
-
lXmu
TMAKE_LIBS_YACC
= -
ly
...
...
tmake/lib/hpux-cc/tmake.conf
View file @
c1605e5b
...
...
@@ -46,6 +46,7 @@ TMAKE_HPUX_SHLIB = 1
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lGL
-
lGLU
-
lXmu
...
...
tmake/lib/hpux-g++/tmake.conf
View file @
c1605e5b
...
...
@@ -46,6 +46,7 @@ TMAKE_HPUX_SHLIB = 1
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
=
TMAKE_LIBS_OPENGL
= -
lGL
-
lGLU
-
lXmu
...
...
tmake/lib/irix-64/tmake.conf
View file @
c1605e5b
...
...
@@ -45,6 +45,7 @@ TMAKE_LFLAGS_SONAME = -Wl,-soname,
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lGL
-
lGLU
-
lXmu
...
...
tmake/lib/irix-dcc/tmake.conf
View file @
c1605e5b
...
...
@@ -45,6 +45,7 @@ TMAKE_LFLAGS_SONAME = -Wl,-soname,
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lGL
-
lGLU
-
lXmu
...
...
tmake/lib/irix-g++/tmake.conf
View file @
c1605e5b
...
...
@@ -45,6 +45,7 @@ TMAKE_LFLAGS_SONAME = -Wl,-soname,
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lGL
-
lGLU
-
lXmu
...
...
tmake/lib/irix-n32/tmake.conf
View file @
c1605e5b
...
...
@@ -45,6 +45,7 @@ TMAKE_LFLAGS_SONAME = -Wl,-soname,
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
-
lGL
TMAKE_LIBS_OPENGL
= -
lGL
-
lGLU
-
lXmu
...
...
tmake/lib/irix-o32/tmake.conf
View file @
c1605e5b
...
...
@@ -45,6 +45,7 @@ TMAKE_LFLAGS_SONAME = -Wl,-soname,
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lGL
-
lGLU
-
lXmu
...
...
tmake/lib/linux-g++/tmake.conf
View file @
c1605e5b
...
...
@@ -46,6 +46,7 @@ TMAKE_LIBS =
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_X11SM
= -
lICE
-
lSM
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lMesaGL
-
lMesaGLU
-
lXmu
...
...
tmake/lib/macosx-c++/tmake.conf
View file @
c1605e5b
...
...
@@ -47,6 +47,7 @@ TMAKE_LFLAGS_SHLIB = -shared
TMAKE_LIBS
=
TMAKE_LIBS_X11
=
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lMesaGL
-
lMesaGLU
-
lXmu
...
...
tmake/lib/netbsd-g++/tmake.conf
View file @
c1605e5b
...
...
@@ -48,6 +48,7 @@ TMAKE_LFLAGS_SONAME =
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lMesaGL
-
lMesaGLU
-
lXmu
...
...
tmake/lib/openbsd-g++/tmake.conf
View file @
c1605e5b
...
...
@@ -48,6 +48,7 @@ TMAKE_LFLAGS_SONAME =
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lMesaGL
-
lMesaGLU
-
lXmu
...
...
tmake/lib/osf1-cxx/tmake.conf
View file @
c1605e5b
...
...
@@ -47,6 +47,7 @@ END
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lMesaGL
-
lMesaGLU
-
lXmu
...
...
tmake/lib/osf1-g++/tmake.conf
View file @
c1605e5b
...
...
@@ -45,6 +45,7 @@ TMAKE_LFLAGS_SONAME = -Wl,-soname,
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lMesaGL
-
lMesaGLU
-
lXmu
...
...
tmake/lib/qnx-g++/tmake.conf
View file @
c1605e5b
...
...
@@ -45,6 +45,7 @@ TMAKE_LFLAGS_SONAME =
TMAKE_LIBS
= -
lunix
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lMesaGL
-
lMesaGLU
-
lXmu
...
...
tmake/lib/sco-g++/tmake.conf
View file @
c1605e5b
...
...
@@ -45,6 +45,7 @@ TMAKE_LFLAGS_SONAME =
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lsocket
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lMesaGL
-
lMesaGLU
-
lXmu
...
...
tmake/lib/solaris-cc-gcc/tmake.conf
View file @
c1605e5b
...
...
@@ -47,6 +47,7 @@ TMAKE_LFLAGS_SONAME =
TMAKE_LIBS
= -
lC
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lGL
-
lGLU
-
lXmu
...
...
tmake/lib/solaris-cc/tmake.conf
View file @
c1605e5b
...
...
@@ -46,6 +46,7 @@ TMAKE_LFLAGS_SONAME =
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
-
lICE
-
lSM
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
-
lGL
TMAKE_LIBS_OPENGL
= -
lGL
-
lGLU
-
lXmu
...
...
tmake/lib/solaris-g++/tmake.conf
View file @
c1605e5b
...
...
@@ -46,6 +46,7 @@ TMAKE_LFLAGS_SONAME =
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lGL
-
lGLU
-
lXmu
...
...
tmake/lib/sunos-g++/tmake.conf
View file @
c1605e5b
...
...
@@ -45,6 +45,7 @@ TMAKE_LFLAGS_SONAME =
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lGL
-
lGLU
-
lXmu
...
...
tmake/lib/ultrix-g++/tmake.conf
View file @
c1605e5b
...
...
@@ -45,6 +45,7 @@ TMAKE_LFLAGS_DEBUG =
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lMesaGL
-
lMesaGLU
-
lXmu
...
...
tmake/lib/unix/generic.t
View file @
c1605e5b
...
...
@@ -47,7 +47,11 @@
if
(
!
((
Project
(
"TARGET"
)
eq
"qt"
)
&&
Project
(
"TMAKE_LIB_FLAG"
))
)
{
Project
(
"TMAKE_LIBDIR_QT"
)
&&
Project
(
'TMAKE_LIBS *= -L$$TMAKE_LIBDIR_QT'
);
Project
(
'TMAKE_LIBS *= $$TMAKE_LIBS_QT'
);
if
(
Config
(
"thread"
)
)
{
Project
(
'TMAKE_LIBS *= $$TMAKE_LIBS_QT_MT'
);
}
else
{
Project
(
'TMAKE_LIBS *= $$TMAKE_LIBS_QT'
);
}
}
}
if
(
Config
(
"opengl"
)
)
{
...
...
tmake/lib/unixware-g++/tmake.conf
View file @
c1605e5b
...
...
@@ -47,6 +47,7 @@ TMAKE_LFLAGS_SONAME =
TMAKE_LIBS
= -
lc
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lsocket
-
lnsl
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lMesaGL
-
lMesaGLU
-
lXmu
-
lXt
...
...
tmake/lib/unixware7-cc/tmake.conf
View file @
c1605e5b
...
...
@@ -47,6 +47,7 @@ TMAKE_LFLAGS_SONAME =
TMAKE_LIBS
=
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lsocket
-
lnsl
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lMesaGL
-
lMesaGLU
-
lXmu
-
lXt
...
...
tmake/lib/unixware7-g++/tmake.conf
View file @
c1605e5b
...
...
@@ -47,6 +47,7 @@ TMAKE_LFLAGS_SONAME =
TMAKE_LIBS
= -
lc
TMAKE_LIBS_X11
= -
lXext
-
lX11
-
lsocket
-
lnsl
-
lm
TMAKE_LIBS_QT
= -
lqt
TMAKE_LIBS_QT_MT
= -
lqt
-
mt
TMAKE_LIBS_QT_OPENGL
= -
lqgl
TMAKE_LIBS_OPENGL
= -
lMesaGL
-
lMesaGLU
-
lXmu
-
lXt
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment