Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Marco Bubke
flatpak-qt-creator
Commits
97444004
Commit
97444004
authored
Jul 13, 2010
by
Kai Koehne
Browse files
CppEditor: Beautify names in API
Rename method[Overview] to outline
parent
df037e1f
Changes
5
Hide whitespace changes
Inline
Side-by-side
src/plugins/cppeditor/cppeditor.cpp
View file @
97444004
...
...
@@ -664,55 +664,55 @@ TextEditor::BaseTextEditorEditable *CPPEditor::createEditableInterface()
void
CPPEditor
::
createToolBar
(
CPPEditorEditable
*
editable
)
{
m_
method
Combo
=
new
QComboBox
;
m_
method
Combo
->
setMinimumContentsLength
(
22
);
m_
outline
Combo
=
new
QComboBox
;
m_
outline
Combo
->
setMinimumContentsLength
(
22
);
// Make the combo box prefer to expand
QSizePolicy
policy
=
m_
method
Combo
->
sizePolicy
();
QSizePolicy
policy
=
m_
outline
Combo
->
sizePolicy
();
policy
.
setHorizontalPolicy
(
QSizePolicy
::
Expanding
);
m_
method
Combo
->
setSizePolicy
(
policy
);
m_
outline
Combo
->
setSizePolicy
(
policy
);
QTreeView
*
method
View
=
new
OverviewTreeView
;
method
View
->
header
()
->
hide
();
method
View
->
setItemsExpandable
(
false
);
m_
method
Combo
->
setView
(
method
View
);
m_
method
Combo
->
setMaxVisibleItems
(
20
);
QTreeView
*
outline
View
=
new
OverviewTreeView
;
outline
View
->
header
()
->
hide
();
outline
View
->
setItemsExpandable
(
false
);
m_
outline
Combo
->
setView
(
outline
View
);
m_
outline
Combo
->
setMaxVisibleItems
(
20
);
m_o
verview
Model
=
new
OverviewModel
(
this
);
m_proxyModel
=
new
OverviewProxyModel
(
m_o
verview
Model
,
this
);
if
(
CppPlugin
::
instance
()
->
sorted
MethodOverview
())
m_o
utline
Model
=
new
OverviewModel
(
this
);
m_proxyModel
=
new
OverviewProxyModel
(
m_o
utline
Model
,
this
);
if
(
CppPlugin
::
instance
()
->
sorted
Outline
())
m_proxyModel
->
sort
(
0
,
Qt
::
AscendingOrder
);
else
m_proxyModel
->
sort
(
-
1
,
Qt
::
AscendingOrder
);
// don't sort yet, but set column for sorted
MethodOverview
()
m_proxyModel
->
sort
(
-
1
,
Qt
::
AscendingOrder
);
// don't sort yet, but set column for sorted
Outline
()
m_proxyModel
->
setDynamicSortFilter
(
true
);
m_proxyModel
->
setSortCaseSensitivity
(
Qt
::
CaseInsensitive
);
m_
method
Combo
->
setModel
(
m_proxyModel
);
m_
outline
Combo
->
setModel
(
m_proxyModel
);
m_
method
Combo
->
setContextMenuPolicy
(
Qt
::
ActionsContextMenu
);
m_sortAction
=
new
QAction
(
tr
(
"Sort Alphabetically"
),
m_
method
Combo
);
m_
outline
Combo
->
setContextMenuPolicy
(
Qt
::
ActionsContextMenu
);
m_sortAction
=
new
QAction
(
tr
(
"Sort Alphabetically"
),
m_
outline
Combo
);
m_sortAction
->
setCheckable
(
true
);
m_sortAction
->
setChecked
(
sorted
MethodOverview
());
connect
(
m_sortAction
,
SIGNAL
(
toggled
(
bool
)),
CppPlugin
::
instance
(),
SLOT
(
setSorted
MethodOverview
(
bool
)));
m_
method
Combo
->
addAction
(
m_sortAction
);
m_sortAction
->
setChecked
(
sorted
Outline
());
connect
(
m_sortAction
,
SIGNAL
(
toggled
(
bool
)),
CppPlugin
::
instance
(),
SLOT
(
setSorted
Outline
(
bool
)));
m_
outline
Combo
->
addAction
(
m_sortAction
);
m_updateOutlineTimer
=
new
QTimer
(
this
);
m_updateOutlineTimer
->
setSingleShot
(
true
);
m_updateOutlineTimer
->
setInterval
(
UPDATE_OUTLINE_INTERVAL
);
connect
(
m_updateOutlineTimer
,
SIGNAL
(
timeout
()),
this
,
SLOT
(
updateOutlineNow
()));
m_update
MethodBo
xTimer
=
new
QTimer
(
this
);
m_update
MethodBo
xTimer
->
setSingleShot
(
true
);
m_update
MethodBo
xTimer
->
setInterval
(
UPDATE_OUTLINE_INTERVAL
);
connect
(
m_update
MethodBo
xTimer
,
SIGNAL
(
timeout
()),
this
,
SLOT
(
update
MethodBox
IndexNow
()));
m_update
OutlineInde
xTimer
=
new
QTimer
(
this
);
m_update
OutlineInde
xTimer
->
setSingleShot
(
true
);
m_update
OutlineInde
xTimer
->
setInterval
(
UPDATE_OUTLINE_INTERVAL
);
connect
(
m_update
OutlineInde
xTimer
,
SIGNAL
(
timeout
()),
this
,
SLOT
(
update
Outline
IndexNow
()));
m_updateUsesTimer
=
new
QTimer
(
this
);
m_updateUsesTimer
->
setSingleShot
(
true
);
m_updateUsesTimer
->
setInterval
(
UPDATE_USES_INTERVAL
);
connect
(
m_updateUsesTimer
,
SIGNAL
(
timeout
()),
this
,
SLOT
(
updateUsesNow
()));
connect
(
m_
method
Combo
,
SIGNAL
(
activated
(
int
)),
this
,
SLOT
(
jumpTo
Method
(
int
)));
connect
(
this
,
SIGNAL
(
cursorPositionChanged
()),
this
,
SLOT
(
update
MethodBox
Index
()));
connect
(
m_
method
Combo
,
SIGNAL
(
currentIndexChanged
(
int
)),
this
,
SLOT
(
update
MethodBox
ToolTip
()));
connect
(
m_
outline
Combo
,
SIGNAL
(
activated
(
int
)),
this
,
SLOT
(
jumpTo
OutlineElement
(
int
)));
connect
(
this
,
SIGNAL
(
cursorPositionChanged
()),
this
,
SLOT
(
update
Outline
Index
()));
connect
(
m_
outline
Combo
,
SIGNAL
(
currentIndexChanged
(
int
)),
this
,
SLOT
(
update
Outline
ToolTip
()));
connect
(
document
(),
SIGNAL
(
contentsChange
(
int
,
int
,
int
)),
this
,
SLOT
(
onContentsChanged
(
int
,
int
,
int
)));
connect
(
file
(),
SIGNAL
(
changed
()),
this
,
SLOT
(
updateFileName
()));
...
...
@@ -728,7 +728,7 @@ void CPPEditor::createToolBar(CPPEditorEditable *editable)
QToolBar
*
toolBar
=
static_cast
<
QToolBar
*>
(
editable
->
toolBar
());
QList
<
QAction
*>
actions
=
toolBar
->
actions
();
QWidget
*
w
=
toolBar
->
widgetForAction
(
actions
.
first
());
static_cast
<
QHBoxLayout
*>
(
w
->
layout
())
->
insertWidget
(
0
,
m_
method
Combo
,
1
);
static_cast
<
QHBoxLayout
*>
(
w
->
layout
())
->
insertWidget
(
0
,
m_
outline
Combo
,
1
);
}
void
CPPEditor
::
paste
()
...
...
@@ -1012,19 +1012,19 @@ void CPPEditor::onContentsChanged(int position, int charsRemoved, int charsAdded
void
CPPEditor
::
updateFileName
()
{
}
void
CPPEditor
::
jumpTo
Method
(
int
)
void
CPPEditor
::
jumpTo
OutlineElement
(
int
)
{
QModelIndex
index
=
m_proxyModel
->
mapToSource
(
m_
method
Combo
->
view
()
->
currentIndex
());
Symbol
*
symbol
=
m_o
verview
Model
->
symbolFromIndex
(
index
);
QModelIndex
index
=
m_proxyModel
->
mapToSource
(
m_
outline
Combo
->
view
()
->
currentIndex
());
Symbol
*
symbol
=
m_o
utline
Model
->
symbolFromIndex
(
index
);
if
(
!
symbol
)
return
;
openCppEditorAt
(
linkToSymbol
(
symbol
));
}
void
CPPEditor
::
setSorted
MethodOverview
(
bool
sort
)
void
CPPEditor
::
setSorted
Outline
(
bool
sort
)
{
if
(
sort
!=
sorted
MethodOverview
())
{
if
(
sort
!=
sorted
Outline
())
{
if
(
sort
)
m_proxyModel
->
sort
(
0
,
Qt
::
AscendingOrder
);
else
...
...
@@ -1032,11 +1032,11 @@ void CPPEditor::setSortedMethodOverview(bool sort)
bool
block
=
m_sortAction
->
blockSignals
(
true
);
m_sortAction
->
setChecked
(
m_proxyModel
->
sortColumn
()
==
0
);
m_sortAction
->
blockSignals
(
block
);
update
MethodBox
IndexNow
();
update
Outline
IndexNow
();
}
}
bool
CPPEditor
::
sorted
MethodOverview
()
const
bool
CPPEditor
::
sorted
Outline
()
const
{
return
(
m_proxyModel
->
sortColumn
()
==
0
);
}
...
...
@@ -1054,16 +1054,16 @@ void CPPEditor::updateOutlineNow()
return
;
}
m_o
verview
Model
->
rebuild
(
document
);
m_o
utline
Model
->
rebuild
(
document
);
OverviewTreeView
*
treeView
=
static_cast
<
OverviewTreeView
*>
(
m_
method
Combo
->
view
());
OverviewTreeView
*
treeView
=
static_cast
<
OverviewTreeView
*>
(
m_
outline
Combo
->
view
());
treeView
->
sync
();
update
MethodBox
IndexNow
();
update
Outline
IndexNow
();
}
void
CPPEditor
::
update
MethodBox
Index
()
void
CPPEditor
::
update
Outline
Index
()
{
m_update
MethodBo
xTimer
->
start
();
m_update
OutlineInde
xTimer
->
start
();
}
void
CPPEditor
::
highlightUses
(
const
QList
<
SemanticInfo
::
Use
>
&
uses
,
...
...
@@ -1102,35 +1102,35 @@ void CPPEditor::highlightUses(const QList<SemanticInfo::Use> &uses,
}
}
void
CPPEditor
::
update
MethodBox
IndexNow
()
void
CPPEditor
::
update
Outline
IndexNow
()
{
if
(
!
m_o
verview
Model
->
document
())
if
(
!
m_o
utline
Model
->
document
())
return
;
if
(
m_o
verview
Model
->
document
()
->
editorRevision
()
!=
editorRevision
())
{
m_update
MethodBo
xTimer
->
start
();
if
(
m_o
utline
Model
->
document
()
->
editorRevision
()
!=
editorRevision
())
{
m_update
OutlineInde
xTimer
->
start
();
return
;
}
m_update
MethodBo
xTimer
->
stop
();
m_update
OutlineInde
xTimer
->
stop
();
m_o
verview
ModelIndex
=
QModelIndex
();
//invalidate
m_o
utline
ModelIndex
=
QModelIndex
();
//invalidate
// ComboBox only let's you select top level indexes!
QModelIndex
comboIndex
=
o
verview
ModelIndex
();
QModelIndex
comboIndex
=
o
utline
ModelIndex
();
while
(
comboIndex
.
parent
().
isValid
())
comboIndex
=
comboIndex
.
parent
();
if
(
comboIndex
.
isValid
())
{
bool
blocked
=
m_
method
Combo
->
blockSignals
(
true
);
m_
method
Combo
->
setCurrentIndex
(
m_proxyModel
->
mapFromSource
(
comboIndex
).
row
());
update
MethodBox
ToolTip
();
(
void
)
m_
method
Combo
->
blockSignals
(
blocked
);
bool
blocked
=
m_
outline
Combo
->
blockSignals
(
true
);
m_
outline
Combo
->
setCurrentIndex
(
m_proxyModel
->
mapFromSource
(
comboIndex
).
row
());
update
Outline
ToolTip
();
(
void
)
m_
outline
Combo
->
blockSignals
(
blocked
);
}
}
void
CPPEditor
::
update
MethodBox
ToolTip
()
void
CPPEditor
::
update
Outline
ToolTip
()
{
m_
method
Combo
->
setToolTip
(
m_
method
Combo
->
currentText
());
m_
outline
Combo
->
setToolTip
(
m_
outline
Combo
->
currentText
());
}
void
CPPEditor
::
updateUses
()
...
...
@@ -1456,21 +1456,21 @@ SemanticInfo CPPEditor::semanticInfo() const
return
m_lastSemanticInfo
;
}
CPlusPlus
::
OverviewModel
*
CPPEditor
::
o
verview
Model
()
const
CPlusPlus
::
OverviewModel
*
CPPEditor
::
o
utline
Model
()
const
{
return
m_o
verview
Model
;
return
m_o
utline
Model
;
}
QModelIndex
CPPEditor
::
o
verview
ModelIndex
()
QModelIndex
CPPEditor
::
o
utline
ModelIndex
()
{
if
(
!
m_o
verview
ModelIndex
.
isValid
())
{
if
(
!
m_o
utline
ModelIndex
.
isValid
())
{
int
line
=
0
,
column
=
0
;
convertPosition
(
position
(),
&
line
,
&
column
);
m_o
verview
ModelIndex
=
indexForPosition
(
line
,
column
);
emit
o
verview
ModelIndexChanged
(
m_o
verview
ModelIndex
);
m_o
utline
ModelIndex
=
indexForPosition
(
line
,
column
);
emit
o
utline
ModelIndexChanged
(
m_o
utline
ModelIndex
);
}
return
m_o
verview
ModelIndex
;
return
m_o
utline
ModelIndex
;
}
bool
CPPEditor
::
isElectricCharacter
(
QChar
ch
)
const
...
...
@@ -2222,10 +2222,10 @@ QModelIndex CPPEditor::indexForPosition(int line, int column, const QModelIndex
{
QModelIndex
lastIndex
=
rootIndex
;
const
int
rowCount
=
m_o
verview
Model
->
rowCount
(
rootIndex
);
const
int
rowCount
=
m_o
utline
Model
->
rowCount
(
rootIndex
);
for
(
int
row
=
0
;
row
<
rowCount
;
++
row
)
{
const
QModelIndex
index
=
m_o
verview
Model
->
index
(
row
,
0
,
rootIndex
);
Symbol
*
symbol
=
m_o
verview
Model
->
symbolFromIndex
(
index
);
const
QModelIndex
index
=
m_o
utline
Model
->
index
(
row
,
0
,
rootIndex
);
Symbol
*
symbol
=
m_o
utline
Model
->
symbolFromIndex
(
index
);
if
(
symbol
&&
symbol
->
line
()
>
unsigned
(
line
))
break
;
lastIndex
=
index
;
...
...
src/plugins/cppeditor/cppeditor.h
View file @
97444004
...
...
@@ -167,8 +167,8 @@ public:
bool
isOutdated
()
const
;
SemanticInfo
semanticInfo
()
const
;
CPlusPlus
::
OverviewModel
*
o
verview
Model
()
const
;
QModelIndex
o
verview
ModelIndex
();
CPlusPlus
::
OverviewModel
*
o
utline
Model
()
const
;
QModelIndex
o
utline
ModelIndex
();
virtual
void
paste
();
// reimplemented from BaseTextEditor
virtual
void
cut
();
// reimplemented from BaseTextEditor
...
...
@@ -181,12 +181,12 @@ public:
bool
isObjCEnabled
()
const
;
Q_SIGNALS:
void
o
verview
ModelIndexChanged
(
const
QModelIndex
&
index
);
void
o
utline
ModelIndexChanged
(
const
QModelIndex
&
index
);
public
Q_SLOTS
:
virtual
void
setFontSettings
(
const
TextEditor
::
FontSettings
&
);
virtual
void
setTabSettings
(
const
TextEditor
::
TabSettings
&
);
void
setSorted
MethodOverview
(
bool
sort
);
void
setSorted
Outline
(
bool
sort
);
void
switchDeclarationDefinition
();
void
jumpToDefinition
();
void
renameSymbolUnderCursor
();
...
...
@@ -221,11 +221,11 @@ protected:
private
Q_SLOTS
:
void
updateFileName
();
void
jumpTo
Method
(
int
index
);
void
jumpTo
OutlineElement
(
int
index
);
void
updateOutlineNow
();
void
update
MethodBox
Index
();
void
update
MethodBox
IndexNow
();
void
update
MethodBox
ToolTip
();
void
update
Outline
Index
();
void
update
Outline
IndexNow
();
void
update
Outline
ToolTip
();
void
updateUses
();
void
updateUsesNow
();
void
onDocumentUpdated
(
CPlusPlus
::
Document
::
Ptr
doc
);
...
...
@@ -242,7 +242,7 @@ private:
void
setShowWarningMessage
(
bool
showWarningMessage
);
void
markSymbols
(
CPlusPlus
::
Symbol
*
canonicalSymbol
,
const
SemanticInfo
&
info
);
bool
sorted
MethodOverview
()
const
;
bool
sorted
Outline
()
const
;
CPlusPlus
::
Symbol
*
findDefinition
(
CPlusPlus
::
Symbol
*
symbol
,
const
CPlusPlus
::
Snapshot
&
snapshot
);
virtual
void
indentBlock
(
QTextDocument
*
doc
,
QTextBlock
block
,
QChar
typedChar
);
virtual
void
indent
(
QTextDocument
*
doc
,
const
QTextCursor
&
cursor
,
QChar
typedChar
);
...
...
@@ -272,13 +272,13 @@ private:
CppTools
::
CppModelManagerInterface
*
m_modelManager
;
QComboBox
*
m_
method
Combo
;
CPlusPlus
::
OverviewModel
*
m_o
verview
Model
;
QModelIndex
m_o
verview
ModelIndex
;
QComboBox
*
m_
outline
Combo
;
CPlusPlus
::
OverviewModel
*
m_o
utline
Model
;
QModelIndex
m_o
utline
ModelIndex
;
QSortFilterProxyModel
*
m_proxyModel
;
QAction
*
m_sortAction
;
QTimer
*
m_updateOutlineTimer
;
QTimer
*
m_update
MethodBo
xTimer
;
QTimer
*
m_update
OutlineInde
xTimer
;
QTimer
*
m_updateUsesTimer
;
QTextCharFormat
m_occurrencesFormat
;
QTextCharFormat
m_occurrencesUnusedFormat
;
...
...
src/plugins/cppeditor/cppoutline.cpp
View file @
97444004
...
...
@@ -58,7 +58,7 @@ CppOutlineWidget::CppOutlineWidget(CPPEditor *editor) :
TextEditor
::
IOutlineWidget
(),
m_editor
(
editor
),
m_treeView
(
new
CppOutlineTreeView
(
this
)),
m_model
(
m_editor
->
o
verview
Model
()),
m_model
(
m_editor
->
o
utline
Model
()),
m_proxyModel
(
new
CppOutlineFilterModel
(
m_model
,
this
)),
m_enableCursorSync
(
true
),
m_blockCursorSync
(
false
)
...
...
@@ -74,7 +74,7 @@ CppOutlineWidget::CppOutlineWidget(CPPEditor *editor) :
connect
(
m_model
,
SIGNAL
(
modelReset
()),
this
,
SLOT
(
modelUpdated
()));
modelUpdated
();
connect
(
m_editor
,
SIGNAL
(
o
verview
ModelIndexChanged
(
QModelIndex
)),
connect
(
m_editor
,
SIGNAL
(
o
utline
ModelIndexChanged
(
QModelIndex
)),
this
,
SLOT
(
updateSelectionInTree
(
QModelIndex
)));
connect
(
m_treeView
->
selectionModel
(),
SIGNAL
(
selectionChanged
(
QItemSelection
,
QItemSelection
)),
this
,
SLOT
(
updateSelectionInText
(
QItemSelection
)));
...
...
@@ -84,7 +84,7 @@ void CppOutlineWidget::setCursorSynchronization(bool syncWithCursor)
{
m_enableCursorSync
=
syncWithCursor
;
if
(
m_enableCursorSync
)
updateSelectionInTree
(
m_editor
->
o
verview
ModelIndex
());
updateSelectionInTree
(
m_editor
->
o
utline
ModelIndex
());
}
void
CppOutlineWidget
::
modelUpdated
()
...
...
src/plugins/cppeditor/cppplugin.cpp
View file @
97444004
...
...
@@ -135,7 +135,7 @@ CppPlugin *CppPlugin::m_instance = 0;
CppPlugin
::
CppPlugin
()
:
m_actionHandler
(
0
),
m_sorted
MethodOverview
(
false
),
m_sorted
Outline
(
false
),
m_renameSymbolUnderCursorAction
(
0
),
m_findUsagesAction
(
0
),
m_updateCodeModelAction
(
0
)
...
...
@@ -176,19 +176,19 @@ void CppPlugin::initializeEditor(CPPEditor *editor)
this
,
SLOT
(
quickFix
(
TextEditor
::
ITextEditable
*
)));
// method combo box sorting
connect
(
this
,
SIGNAL
(
methodOverview
SortingChanged
(
bool
)),
editor
,
SLOT
(
setSorted
MethodOverview
(
bool
)));
connect
(
this
,
SIGNAL
(
outline
SortingChanged
(
bool
)),
editor
,
SLOT
(
setSorted
Outline
(
bool
)));
}
void
CppPlugin
::
setSorted
MethodOverview
(
bool
sorted
)
void
CppPlugin
::
setSorted
Outline
(
bool
sorted
)
{
m_sorted
MethodOverview
=
sorted
;
emit
methodOverview
SortingChanged
(
sorted
);
m_sorted
Outline
=
sorted
;
emit
outline
SortingChanged
(
sorted
);
}
bool
CppPlugin
::
sorted
MethodOverview
()
const
bool
CppPlugin
::
sorted
Outline
()
const
{
return
m_sorted
MethodOverview
;
return
m_sorted
Outline
;
}
CppQuickFixCollector
*
CppPlugin
::
quickFixCollector
()
const
...
...
@@ -308,12 +308,12 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess
void
CppPlugin
::
readSettings
()
{
m_sorted
MethodOverview
=
Core
::
ICore
::
instance
()
->
settings
()
->
value
(
"CppTools/SortedMethodOverview"
,
false
).
toBool
();
m_sorted
Outline
=
Core
::
ICore
::
instance
()
->
settings
()
->
value
(
"CppTools/SortedMethodOverview"
,
false
).
toBool
();
}
void
CppPlugin
::
writeSettings
()
{
Core
::
ICore
::
instance
()
->
settings
()
->
setValue
(
"CppTools/SortedMethodOverview"
,
m_sorted
MethodOverview
);
Core
::
ICore
::
instance
()
->
settings
()
->
setValue
(
"CppTools/SortedMethodOverview"
,
m_sorted
Outline
);
}
void
CppPlugin
::
extensionsInitialized
()
...
...
src/plugins/cppeditor/cppplugin.h
View file @
97444004
...
...
@@ -65,15 +65,15 @@ public:
// Connect editor to settings changed signals.
void
initializeEditor
(
CPPEditor
*
editor
);
bool
sorted
MethodOverview
()
const
;
bool
sorted
Outline
()
const
;
CppQuickFixCollector
*
quickFixCollector
()
const
;
signals:
void
methodOverview
SortingChanged
(
bool
sort
);
void
outline
SortingChanged
(
bool
sort
);
public
slots
:
void
setSorted
MethodOverview
(
bool
sorted
);
void
setSorted
Outline
(
bool
sorted
);
private
slots
:
void
switchDeclarationDefinition
();
...
...
@@ -93,7 +93,7 @@ private:
static
CppPlugin
*
m_instance
;
TextEditor
::
TextEditorActionHandler
*
m_actionHandler
;
bool
m_sorted
MethodOverview
;
bool
m_sorted
Outline
;
QAction
*
m_renameSymbolUnderCursorAction
;
QAction
*
m_findUsagesAction
;
QAction
*
m_updateCodeModelAction
;
...
...
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