Merge remote branch 'origin/2.0'
Conflicts: src/plugins/debugger/moduleshandler.cpp src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp src/plugins/qt4projectmanager/qt-maemo/maemopackagecontents.cpp src/plugins/qt4projectmanager/qt-maemo/maemosshthread.cpp
@@ -54,6 +54,10 @@
|
||||
\o \l{Finding and Replacing}
|
||||
\o \l{Refactoring}
|
||||
\o \l{Searching With the Locator}
|
||||
\o \l{Pasting and Fetching Code Snippets}
|
||||
\o \l{Configuring the Editor}
|
||||
\o \l{Using FakeVim Mode}
|
||||
\o \l{Using an External Editor}
|
||||
\endlist
|
||||
\o \l{Managing Projects}
|
||||
\list
|
||||
@@ -388,6 +392,9 @@
|
||||
\endlist
|
||||
|
||||
Output panes are available in all \l{Qt Creator modes}{modes}.
|
||||
Click the name of an output pane to open the pane. To maximize
|
||||
an open output pane, click the \gui {Maximize Output Pane} button
|
||||
or press \key {Alt+9}.
|
||||
|
||||
|
||||
\section2 Build Issues
|
||||
@@ -620,28 +627,6 @@
|
||||
checking, code completion, context sensitive help and in-line error
|
||||
indicators while you are typing.
|
||||
|
||||
|
||||
\section1 Configuring the Editor
|
||||
|
||||
Qt Creator allows you to configure the text editor to suit your specific
|
||||
needs. To configure the editor, select \gui Tools > \gui{Options...} >
|
||||
\gui{Text Editor}
|
||||
|
||||
You can perform the following configuration actions:
|
||||
\list
|
||||
\o Set the font preferences and apply syntax highlighting in
|
||||
\gui{Font & Colors}.
|
||||
\o Set tabs, indentation, the handling of whitespace, and mouse operations in
|
||||
\gui Behavior.
|
||||
\o Set various display properties, for example,
|
||||
\l{Highlighting and folding blocks}{highlighting and folding blocks},
|
||||
text wrapping or \l{Moving to symbol definition or declaration}
|
||||
{moving to symbol definition or declaration}
|
||||
in \gui Display.
|
||||
\o Configure \l{Completing Code}{code completion} in \gui Completion.
|
||||
\endlist
|
||||
|
||||
|
||||
\section1 Using the Editor Toolbar
|
||||
|
||||
The editor toolbar is located at the top of the editor view. The editor
|
||||
@@ -716,6 +701,11 @@
|
||||
\gui{Text Editor} > \gui Display > \gui{Display folding markers}. This
|
||||
option is enabled by default.
|
||||
|
||||
When the cursor is on a brace, the matching brace is animated
|
||||
by default. To turn off the animation and just highlight the block and
|
||||
the braces, select \gui {Tools > Options... > Text Editor > Display} and
|
||||
deselect \gui {Animate matching parentheses}.
|
||||
|
||||
|
||||
\section1 Checking Code Syntax
|
||||
|
||||
@@ -760,6 +750,10 @@
|
||||
\gui{Autocomplete common prefix} in the code completion preferences.
|
||||
Select \gui Tools > \gui{Options...} > \gui{Text Editor} > \gui Completion.
|
||||
|
||||
By default, code completion considers only the first letter case-sensitive.
|
||||
To apply full or no case-sensitivity, select the option in the
|
||||
\gui {Case-sensitivity} field.
|
||||
|
||||
The following table lists available types for code completion and icon
|
||||
used for each.
|
||||
|
||||
@@ -856,8 +850,16 @@
|
||||
\note In Qt Creator indexing updates the code automatically. Use
|
||||
\gui{Update code model} only as an emergency command.
|
||||
|
||||
*/
|
||||
|
||||
\section1 Pasting and Fetching Code Snippets
|
||||
|
||||
/*!
|
||||
\contentspage index.html
|
||||
\previouspage creator-editor-locator.html
|
||||
\page creator-editor-codepasting.html
|
||||
\nextpage creator-editor-options.html
|
||||
|
||||
\title Pasting and Fetching Code Snippets
|
||||
|
||||
In Qt Creator, you can paste snippets of code to a server or fetch
|
||||
snippets of code from the server. To paste and fetch snippets of code,
|
||||
@@ -890,7 +892,16 @@
|
||||
If they have the project currently opened in Qt Creator, they can apply and test
|
||||
the change by choosing \gui{Tools} > \gui{Git} > \gui{Apply Patch}.
|
||||
|
||||
\section1 Using FakeVim Mode
|
||||
*/
|
||||
|
||||
|
||||
/*!
|
||||
\contentspage index.html
|
||||
\previouspage creator-editor-options.html
|
||||
\page creator-editor-fakevim.html
|
||||
\nextpage creator-editor-external.html
|
||||
|
||||
\title Using FakeVim Mode
|
||||
|
||||
In the \gui{FakeVim} mode, you can run the main editor in a manner similar
|
||||
to the Vim editor. To run the editor in the \gui{FakeVim} mode, select
|
||||
@@ -906,14 +917,26 @@
|
||||
Qt Creator core, select \gui{Tools} > \gui{Options...} > \gui{FakeVim} >
|
||||
\gui{Ex Command Mapping}.
|
||||
|
||||
To make changes to the Vim style settings, select \gui{Tools} >
|
||||
\gui{Options...} > \gui{General}.
|
||||
To make changes to the Vim-style settings, select \gui{Tools} >
|
||||
\gui{Options...} > \gui FakeVim > \gui{General}.
|
||||
|
||||
To use a Vim-style color scheme, select \gui {Tools > Options... >
|
||||
Text Editor > Fonts & Color}. In the \gui {Color Scheme} list, select
|
||||
\gui {Vim (dark)}.
|
||||
|
||||
To quit the FakeVim mode, click \gui {Quit FakeVim} or press
|
||||
\key{Alt+V,Alt+V}.
|
||||
|
||||
*/
|
||||
|
||||
\section1 Using an External Editor
|
||||
|
||||
/*!
|
||||
\contentspage index.html
|
||||
\previouspage creator-editor-fakevim.html
|
||||
\page creator-editor-external.html
|
||||
\nextpage creator-project-managing.html
|
||||
|
||||
\title Using an External Editor
|
||||
|
||||
To open the file you are currently viewing in an external editor, select
|
||||
\gui Edit > \gui Advanced > \gui{Open in External Editor}.
|
||||
@@ -947,6 +970,134 @@
|
||||
*/
|
||||
|
||||
|
||||
/*!
|
||||
\contentspage index.html
|
||||
\previouspage creator-editor-codepasting.html
|
||||
\page creator-editor-options.html
|
||||
\nextpage creator-editor-fakevim.html
|
||||
|
||||
\title Configuring the Editor
|
||||
|
||||
Qt Creator allows you to configure the text editor to suit your specific
|
||||
needs. To configure the editor, select \gui Tools > \gui{Options...} >
|
||||
\gui{Text Editor}.
|
||||
|
||||
You can perform the following configuration actions:
|
||||
\list
|
||||
\o Set the font preferences and apply syntax highlighting in
|
||||
\gui{Font & Colors}.
|
||||
\o Set tabs, indentation, the handling of whitespace, and mouse operations in
|
||||
\gui Behavior.
|
||||
\o Set various display properties, for example,
|
||||
\l{Highlighting and folding blocks}{highlighting and folding blocks},
|
||||
text wrapping or \l{Moving to symbol definition or declaration}
|
||||
{moving to symbol definition or declaration}
|
||||
in \gui Display.
|
||||
\o Configure \l{Completing Code}{code completion} in \gui Completion.
|
||||
\endlist
|
||||
|
||||
\section2 Configuring Fonts
|
||||
|
||||
You can select the font family and size. You can specify a zoom setting in
|
||||
percentage for viewing the text. You can also zoom in or out by pressing
|
||||
\key {Ctrl++} or \key {Ctrl +-}, or by pressing \key Ctrl and rolling
|
||||
the mouse button up or down. To disable the mouse wheel function, select
|
||||
\gui {Tools > Options... > Text Editor > Behavior} and deselect the
|
||||
\gui {Enable scroll wheel zooming} check box.
|
||||
|
||||
Antialiasing is used by default to make text look smoother and more
|
||||
readable on the screen. Deselect the \gui Antialias check box to
|
||||
turn off antialiasing.
|
||||
|
||||
\section2 Defining Color Schemes
|
||||
|
||||
You can select one of the predefined color schemes for syntax highlighting
|
||||
or create customized color schemes. To create a color scheme:
|
||||
|
||||
\list 1
|
||||
|
||||
\o Select \gui {Tools > Options... > Text Editor > Fonts & Color > Copy}.
|
||||
|
||||
\o Enter a name for the color scheme and click \gui OK.
|
||||
|
||||
\o In the \gui Foreground field, specify the color of the selected
|
||||
code element.
|
||||
|
||||
\o In the \gui Background field, select the background
|
||||
color for the code element.
|
||||
|
||||
The backgound of the \gui Text element determines the background of the
|
||||
code editor.
|
||||
|
||||
\endlist
|
||||
|
||||
When you copy code from Qt Creator, it is copied in both plain text and HTML
|
||||
format. The latter makes sure that syntax highlighting is preserved when
|
||||
pasting to a rich-text editor.
|
||||
|
||||
\section2 Indenting Code
|
||||
|
||||
When you type code, it is indented automatically according to the selected
|
||||
options. Select a block to indent it when you press \key Tab.
|
||||
Press \key {Shift+Tab} to decrease the indentation.
|
||||
|
||||
When you press \gui Backspace the indentation is decreased by one level,
|
||||
instead of one space, by default.
|
||||
|
||||
By default, the tab-length in code editor is 8 spaces, but you can change
|
||||
it. The code editor can also determine whether tabs or spaces are used
|
||||
on the previous or next line and copy the style.
|
||||
|
||||
You can determine whether the block indent style includes braces,
|
||||
or you can use the GNU indent style. The GNU style places braces on a separate
|
||||
line, indented by 2 spaces, except when they open a function definition, where
|
||||
they are not indented.
|
||||
|
||||
The following code snippet illustrates excluding braces from the indented block:
|
||||
|
||||
\code
|
||||
|
||||
void foobar(bool zoo)
|
||||
{
|
||||
if (zoo)
|
||||
{
|
||||
foo();
|
||||
}
|
||||
}
|
||||
|
||||
\endcode
|
||||
|
||||
The following code snippet illustrates including braces in the indented block:
|
||||
|
||||
\code
|
||||
|
||||
void foobar(bool zoo)
|
||||
{
|
||||
if (zoo)
|
||||
{
|
||||
foo();
|
||||
}
|
||||
}
|
||||
|
||||
\endcode
|
||||
|
||||
The following code snippet illustrates the GNU style:
|
||||
|
||||
\code
|
||||
|
||||
void foobar(bool zoo)
|
||||
{
|
||||
if (zoo)
|
||||
{
|
||||
foo();
|
||||
}
|
||||
}
|
||||
|
||||
\endcode
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/*!
|
||||
\contentspage index.html
|
||||
\previouspage creator-editor-using.html
|
||||
@@ -1139,7 +1290,7 @@
|
||||
|
||||
/*!
|
||||
\contentspage index.html
|
||||
\previouspage creator-editor-locator.html
|
||||
\previouspage creator-editor-external.html
|
||||
\page creator-project-managing.html
|
||||
\nextpage creator-project-creating.html
|
||||
|
||||
@@ -1702,7 +1853,7 @@
|
||||
|
||||
/*!
|
||||
\contentspage index.html
|
||||
\previouspage creator-developing-symbian.html
|
||||
\previouspage creator-project-managing-sessions.html
|
||||
\page creator-building-running.html
|
||||
\nextpage creator-building-targets.html
|
||||
|
||||
@@ -1941,6 +2092,24 @@
|
||||
For more information on how to define capabilities for a project, see
|
||||
\l{http://doc.qt.nokia.com/4.7-snapshot/qmake-platform-notes.html#capabilities}{Capabilities}.
|
||||
|
||||
\section3 Application UID
|
||||
|
||||
A UID is a globally unique identifier that is used to
|
||||
uniquely identify, for example, an object or file type. In Symbian development,
|
||||
objects are identified by compound identifiers that are constructed from three
|
||||
UIDs, namely UID1, UID2, and UID3. UID1 and UID2 specify the category of an
|
||||
object, whereas UID3 identifies a particular object, such as an application.
|
||||
|
||||
When you create a \gui {Mobile Qt Application}, Qt Creator adds a UID3 suitable for
|
||||
development and debugging automatically to the application .pro file. However, to
|
||||
distribute your application and get it Symbian signed, you must apply for a UID
|
||||
from Symbian, who manages the allocation of UIDs. You can request UIDs either one
|
||||
at a time or as preallocated blocks on the \l{https://www.symbiansigned.com/app/page}{Symbian Signed}
|
||||
web site.
|
||||
|
||||
Replace the testing UID with the distribution UID in the .pro file before you
|
||||
build the final installation package. For more information, see
|
||||
\l{http://doc.qt.nokia.com/4.7-snapshot/qmake-platform-notes.html#unique-identifiers}{Unique Identifiers}.
|
||||
|
||||
\section2 Building and Running for Symbian Emulator
|
||||
|
||||
@@ -2145,7 +2314,7 @@
|
||||
\contentspage index.html
|
||||
\previouspage creator-editor-settings.html
|
||||
\page creator-build-dependencies.html
|
||||
\nextpage creator-project-managing-sessions.html
|
||||
\nextpage creator-visual-editor.html
|
||||
|
||||
\title Specifying Dependencies
|
||||
|
||||
@@ -2890,7 +3059,7 @@
|
||||
\contentspage index.html
|
||||
\previouspage creator-editor-refactoring.html
|
||||
\page creator-editor-locator.html
|
||||
\nextpage creator-project-managing.html
|
||||
\nextpage creator-editor-codepasting.html
|
||||
|
||||
\title Searching With the Locator
|
||||
|
||||
@@ -3064,9 +3233,9 @@
|
||||
|
||||
/*!
|
||||
\contentspage index.html
|
||||
\previouspage creator-build-dependencies.html
|
||||
\previouspage creator-developing-symbian.html
|
||||
\page creator-project-managing-sessions.html
|
||||
\nextpage creator-visual-editor.html
|
||||
\nextpage creator-building-running.html
|
||||
|
||||
\title Managing Sessions
|
||||
|
||||
@@ -4497,7 +4666,7 @@
|
||||
/*!
|
||||
|
||||
\contentspage index.html
|
||||
\previouspage creator-project-managing-sessions.html
|
||||
\previouspage creator-build-dependencies.html
|
||||
\page creator-visual-editor.html
|
||||
\nextpage creator-usability.html
|
||||
|
||||
@@ -5527,7 +5696,7 @@
|
||||
\contentspage index.html
|
||||
\previouspage creator-developing-maemo.html
|
||||
\page creator-developing-symbian.html
|
||||
\nextpage creator-building-running.html
|
||||
\nextpage creator-project-managing-sessions.html
|
||||
|
||||
\title Setting Up Development Environment for Symbian
|
||||
|
||||
@@ -6052,6 +6221,9 @@
|
||||
\row
|
||||
\o Cut line
|
||||
\o Shift+Del
|
||||
\row
|
||||
\o Join lines
|
||||
\o Ctrl+J
|
||||
\row
|
||||
\o Decrease font size
|
||||
\o Ctrl+- (Ctrl+Roll mouse wheel down)
|
||||
@@ -6059,7 +6231,7 @@
|
||||
\o Increase font size
|
||||
\o Ctrl++ (Ctrl+Roll mouse wheel up)
|
||||
\row
|
||||
\o Toggle vim-style editing
|
||||
\o Toggle Vim-style editing
|
||||
\o Alt+V, Alt+V
|
||||
\row
|
||||
\o Split
|
||||
|
||||
@@ -1370,12 +1370,12 @@
|
||||
<type name="Qt.AnchorAnimation" version="4.7" extends="Qt.Animation">
|
||||
<property name="targets" type="Qt.Item" isList="true"/>
|
||||
<property name="duration" type="int"/>
|
||||
<property name="easing" type="QEasingCurve"/>
|
||||
<property name="easing" type="Qt.Easing"/>
|
||||
<signal name="durationChanged">
|
||||
<param type="int"/>
|
||||
</signal>
|
||||
<signal name="easingChanged">
|
||||
<param type="QEasingCurve"/>
|
||||
<param type="Qt.Easing"/>
|
||||
</signal>
|
||||
</type>
|
||||
<type name="Qt.AnchorChanges" version="4.7" extends="QDeclarativeStateOperation">
|
||||
@@ -1457,10 +1457,6 @@
|
||||
<enumerator name="Loading" value="2"/>
|
||||
<enumerator name="Error" value="3"/>
|
||||
</enum>
|
||||
<property name="isNull" type="bool"/>
|
||||
<property name="isReady" type="bool"/>
|
||||
<property name="isError" type="bool"/>
|
||||
<property name="isLoading" type="bool"/>
|
||||
<property name="progress" type="qreal"/>
|
||||
<property name="status" type="Status"/>
|
||||
<property name="url" type="QUrl"/>
|
||||
@@ -1474,6 +1470,7 @@
|
||||
</type>
|
||||
<type name="Qt.Connections" version="4.7" extends="Qt.QtObject">
|
||||
<property name="target" type="Qt.QtObject"/>
|
||||
<property name="ignoreUnknownSignals" type="bool"/>
|
||||
<signal name="targetChanged"/>
|
||||
</type>
|
||||
<type name="Qt.DoubleValidator" version="4.7" extends="QValidator">
|
||||
@@ -1555,7 +1552,7 @@
|
||||
<enumerator name="SineCurve" value="43"/>
|
||||
<enumerator name="CosineCurve" value="44"/>
|
||||
</enum>
|
||||
<property name="type" type="QDeclarativeEasingValueType.Type"/>
|
||||
<property name="type" type="Type"/>
|
||||
<property name="amplitude" type="qreal"/>
|
||||
<property name="overshoot" type="qreal"/>
|
||||
<property name="period" type="qreal"/>
|
||||
@@ -1566,7 +1563,7 @@
|
||||
<enumerator name="DragOverBounds" value="1"/>
|
||||
<enumerator name="DragAndOvershootBounds" value="2"/>
|
||||
</enum>
|
||||
<enum name="FlickDirection">
|
||||
<enum name="FlickableDirection">
|
||||
<enumerator name="AutoFlickDirection" value="0"/>
|
||||
<enumerator name="HorizontalFlick" value="1"/>
|
||||
<enumerator name="VerticalFlick" value="2"/>
|
||||
@@ -1583,8 +1580,13 @@
|
||||
<property name="maximumFlickVelocity" type="qreal"/>
|
||||
<property name="flickDeceleration" type="qreal"/>
|
||||
<property name="moving" type="bool"/>
|
||||
<property name="movingHorizontally" type="bool"/>
|
||||
<property name="movingVertically" type="bool"/>
|
||||
<property name="flicking" type="bool"/>
|
||||
<property name="flickDirection" type="FlickDirection"/>
|
||||
<property name="flickingHorizontally" type="bool"/>
|
||||
<property name="flickingVertically" type="bool"/>
|
||||
<property name="flickDirection" type="FlickableDirection"/>
|
||||
<property name="flickableDirection" type="FlickableDirection"/>
|
||||
<property name="interactive" type="bool"/>
|
||||
<property name="pressDelay" type="int"/>
|
||||
<property name="atXEnd" type="bool"/>
|
||||
@@ -1599,22 +1601,26 @@
|
||||
<signal name="contentXChanged"/>
|
||||
<signal name="contentYChanged"/>
|
||||
<signal name="movingChanged"/>
|
||||
<signal name="movingHorizontallyChanged"/>
|
||||
<signal name="movingVerticallyChanged"/>
|
||||
<signal name="flickingChanged"/>
|
||||
<signal name="movementStarted"/>
|
||||
<signal name="movementEnded"/>
|
||||
<signal name="flickStarted"/>
|
||||
<signal name="flickEnded"/>
|
||||
<signal name="flickingHorizontallyChanged"/>
|
||||
<signal name="flickingVerticallyChanged"/>
|
||||
<signal name="horizontalVelocityChanged"/>
|
||||
<signal name="verticalVelocityChanged"/>
|
||||
<signal name="isAtBoundaryChanged"/>
|
||||
<signal name="pageChanged"/>
|
||||
<signal name="flickDirectionChanged"/>
|
||||
<signal name="flickableDirectionChanged"/>
|
||||
<signal name="interactiveChanged"/>
|
||||
<signal name="overShootChanged"/>
|
||||
<signal name="boundsBehaviorChanged"/>
|
||||
<signal name="maximumFlickVelocityChanged"/>
|
||||
<signal name="flickDecelerationChanged"/>
|
||||
<signal name="pressDelayChanged"/>
|
||||
<signal name="movementStarted"/>
|
||||
<signal name="movementEnded"/>
|
||||
<signal name="flickStarted"/>
|
||||
<signal name="flickEnded"/>
|
||||
</type>
|
||||
<type name="Qt.Flipable" version="4.7" defaultProperty="data" extends="Qt.Item">
|
||||
<enum name="Side">
|
||||
@@ -1865,18 +1871,30 @@
|
||||
<method name="forceFocus"/>
|
||||
</type>
|
||||
<type name="Qt.KeyNavigation" version="4.7" extends="Qt.QtObject">
|
||||
<enum name="Priority">
|
||||
<enumerator name="BeforeItem" value="0"/>
|
||||
<enumerator name="AfterItem" value="1"/>
|
||||
</enum>
|
||||
<property name="left" type="Qt.Item"/>
|
||||
<property name="right" type="Qt.Item"/>
|
||||
<property name="up" type="Qt.Item"/>
|
||||
<property name="down" type="Qt.Item"/>
|
||||
<property name="tab" type="Qt.Item"/>
|
||||
<property name="backtab" type="Qt.Item"/>
|
||||
<property name="priority" type="Priority"/>
|
||||
<signal name="changed"/>
|
||||
<signal name="priorityChanged"/>
|
||||
</type>
|
||||
<type name="Qt.Keys" version="4.7" extends="Qt.QtObject">
|
||||
<enum name="Priority">
|
||||
<enumerator name="BeforeItem" value="0"/>
|
||||
<enumerator name="AfterItem" value="1"/>
|
||||
</enum>
|
||||
<property name="enabled" type="bool"/>
|
||||
<property name="forwardTo" type="Qt.Item" isList="true"/>
|
||||
<property name="priority" type="Priority"/>
|
||||
<signal name="enabledChanged"/>
|
||||
<signal name="priorityChanged"/>
|
||||
<signal name="pressed">
|
||||
<param name="event" type="QDeclarativeKeyEvent"/>
|
||||
</signal>
|
||||
@@ -2126,14 +2144,8 @@
|
||||
<enumerator name="Loading" value="2"/>
|
||||
<enumerator name="Error" value="3"/>
|
||||
</enum>
|
||||
<enum name="ResizeMode">
|
||||
<enumerator name="NoResize" value="0"/>
|
||||
<enumerator name="SizeLoaderToItem" value="1"/>
|
||||
<enumerator name="SizeItemToLoader" value="2"/>
|
||||
</enum>
|
||||
<property name="source" type="QUrl"/>
|
||||
<property name="sourceComponent" type="Qt.Component"/>
|
||||
<property name="resizeMode" type="ResizeMode"/>
|
||||
<property name="item" type="QGraphicsObject"/>
|
||||
<property name="status" type="Status"/>
|
||||
<property name="progress" type="qreal"/>
|
||||
@@ -2141,7 +2153,7 @@
|
||||
<signal name="sourceChanged"/>
|
||||
<signal name="statusChanged"/>
|
||||
<signal name="progressChanged"/>
|
||||
<signal name="resizeModeChanged"/>
|
||||
<signal name="loaded"/>
|
||||
</type>
|
||||
<type name="Qt.MouseArea" version="4.7" defaultProperty="data" extends="Qt.Item">
|
||||
<property name="mouseX" type="qreal"/>
|
||||
@@ -2157,6 +2169,7 @@
|
||||
<signal name="pressedChanged"/>
|
||||
<signal name="enabledChanged"/>
|
||||
<signal name="acceptedButtonsChanged"/>
|
||||
<signal name="hoverEnabledChanged"/>
|
||||
<signal name="positionChanged">
|
||||
<param name="mouse" type="QDeclarativeMouseEvent"/>
|
||||
</signal>
|
||||
@@ -2180,6 +2193,7 @@
|
||||
</signal>
|
||||
<signal name="entered"/>
|
||||
<signal name="exited"/>
|
||||
<signal name="canceled"/>
|
||||
</type>
|
||||
<type name="Qt.NumberAnimation" version="4.7" extends="Qt.PropertyAnimation">
|
||||
<property name="from" type="qreal"/>
|
||||
@@ -2274,6 +2288,8 @@
|
||||
<signal name="highlightChanged"/>
|
||||
<signal name="highlightItemChanged"/>
|
||||
<signal name="highlightMoveDurationChanged"/>
|
||||
<method name="incrementCurrentIndex"/>
|
||||
<method name="decrementCurrentIndex"/>
|
||||
</type>
|
||||
<type name="Qt.PauseAnimation" version="4.7" extends="Qt.Animation">
|
||||
<property name="duration" type="int"/>
|
||||
@@ -2303,7 +2319,7 @@
|
||||
<property name="duration" type="int"/>
|
||||
<property name="from" type="QVariant"/>
|
||||
<property name="to" type="QVariant"/>
|
||||
<property name="easing" type="QEasingCurve"/>
|
||||
<property name="easing" type="Qt.Easing"/>
|
||||
<property name="target" type="Qt.QtObject"/>
|
||||
<property name="property" type="string"/>
|
||||
<property name="properties" type="string"/>
|
||||
@@ -2319,7 +2335,7 @@
|
||||
<param type="QVariant"/>
|
||||
</signal>
|
||||
<signal name="easingChanged">
|
||||
<param type="QEasingCurve"/>
|
||||
<param type="Qt.Easing"/>
|
||||
</signal>
|
||||
<signal name="propertiesChanged">
|
||||
<param type="string"/>
|
||||
@@ -3094,7 +3110,7 @@
|
||||
<property name="contentsMargin" type="qreal"/>
|
||||
</type>
|
||||
<type name="Qt.widgets.QGraphicsLinearLayoutStretchItem" version="4.7" extends="Qt.QtObject"/>
|
||||
<type name="org.webkit.WebView" version="1.0" defaultProperty="data" extends="QDeclarativePaintedItem">
|
||||
<type name="org.webkit.WebView" version="1.0" defaultProperty="data" extends="Qt.Item">
|
||||
<enum name="Status">
|
||||
<enumerator name="Null" value="0"/>
|
||||
<enumerator name="Ready" value="1"/>
|
||||
@@ -3121,6 +3137,8 @@
|
||||
<property name="newWindowComponent" type="Qt.Component"/>
|
||||
<property name="newWindowParent" type="Qt.Item"/>
|
||||
<property name="renderingEnabled" type="bool"/>
|
||||
<property name="contentsSize" type="QSize"/>
|
||||
<property name="contentsScale" type="qreal"/>
|
||||
<signal name="preferredWidthChanged"/>
|
||||
<signal name="preferredHeightChanged"/>
|
||||
<signal name="urlChanged"/>
|
||||
@@ -3139,6 +3157,10 @@
|
||||
<signal name="newWindowComponentChanged"/>
|
||||
<signal name="newWindowParentChanged"/>
|
||||
<signal name="renderingEnabledChanged"/>
|
||||
<signal name="contentsSizeChanged">
|
||||
<param type="QSize"/>
|
||||
</signal>
|
||||
<signal name="contentsScaleChanged"/>
|
||||
<signal name="loadStarted"/>
|
||||
<signal name="loadFinished"/>
|
||||
<signal name="loadFailed"/>
|
||||
|
||||
@@ -70,14 +70,14 @@ GroupBox {
|
||||
property variant pureValue: backendValues.scale.value;
|
||||
onPureValueChanged: {
|
||||
if (value != pureValue * 100)
|
||||
value = pureValue * 100;
|
||||
value = pureValue * 10;
|
||||
}
|
||||
minimum: 1;
|
||||
maximum: 100;
|
||||
singleStep: 1;
|
||||
onValueChanged: {
|
||||
if ((value > 5) && (value < 100))
|
||||
backendValues.scale.value = value / 100;
|
||||
backendValues.scale.value = value / 10;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,13 @@ GroupBox {
|
||||
baseStateFlag: isBaseState;
|
||||
checkable: true;
|
||||
}
|
||||
}
|
||||
}
|
||||
QWidget {
|
||||
layout: HorizontalLayout {
|
||||
Label {
|
||||
text: ""
|
||||
}
|
||||
CheckBox {
|
||||
id: clipCheckBox;
|
||||
text: qsTr("Clip")
|
||||
|
||||
@@ -24,7 +24,8 @@ QLabel {
|
||||
padding: 0;
|
||||
background: none;
|
||||
color: #dedede;
|
||||
font: bold
|
||||
font: bold;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
QScrollArea {
|
||||
@@ -38,7 +39,7 @@ QGroupBox
|
||||
background-color: #4f4f4f;
|
||||
border: 1px solid #4F4F4F;
|
||||
color: white;
|
||||
font: bold
|
||||
font: bold ;
|
||||
}
|
||||
|
||||
QLineEdit
|
||||
|
||||
BIN
share/qtcreator/templates/wizards/qml-runtime/lib.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
@@ -37,6 +37,7 @@ leave room for the Qt 4 target page.
|
||||
<wizard version="1" kind="project"
|
||||
class="qt4project" firstpage="10"
|
||||
id="QmlRuntimePlugin" category="F.Projects">
|
||||
<icon>lib.png</icon>
|
||||
<description>Creates a C++ plugin to extend the funtionality of the QML runtime.</description>
|
||||
<displayname>QML Runtime Plug-in</displayname>
|
||||
<displaycategory>QML Runtime Plug-in</displaycategory>
|
||||
|
||||
@@ -14499,7 +14499,7 @@ Die folgenden Encodings scheinen der Datei zu entsprechen:</translation>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Color Scheme</source>
|
||||
<translation>Farbschema:</translation>
|
||||
<translation>Farbschema</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
|
||||
@@ -585,6 +585,17 @@ void PluginManager::profilingReport(const char *what, const PluginSpec *spec)
|
||||
d->profilingReport(what, spec);
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\fn void PluginManager::loadQueue()
|
||||
|
||||
Returns a list of plugins in load order.
|
||||
*/
|
||||
QList<PluginSpec *> PluginManager::loadQueue()
|
||||
{
|
||||
return d->loadQueue();
|
||||
}
|
||||
|
||||
//============PluginManagerPrivate===========
|
||||
|
||||
/*!
|
||||
@@ -786,13 +797,10 @@ bool PluginManagerPrivate::loadQueue(PluginSpec *spec, QList<PluginSpec *> &queu
|
||||
circularityCheckQueue.append(spec);
|
||||
// check if we have the dependencies
|
||||
if (spec->state() == PluginSpec::Invalid || spec->state() == PluginSpec::Read) {
|
||||
if (!spec->isDisabledIndirectly() && spec->isEnabled()) {
|
||||
spec->d->hasError = true;
|
||||
spec->d->errorString += "\n";
|
||||
spec->d->errorString += PluginManager::tr("Cannot load plugin because dependencies are not resolved");
|
||||
}
|
||||
queue.append(spec);
|
||||
return false;
|
||||
}
|
||||
|
||||
// add dependencies
|
||||
foreach (PluginSpec *depSpec, spec->dependencySpecs()) {
|
||||
if (!loadQueue(depSpec, queue, circularityCheckQueue)) {
|
||||
@@ -814,7 +822,11 @@ bool PluginManagerPrivate::loadQueue(PluginSpec *spec, QList<PluginSpec *> &queu
|
||||
*/
|
||||
void PluginManagerPrivate::loadPlugin(PluginSpec *spec, PluginSpec::State destState)
|
||||
{
|
||||
if (spec->hasError() || spec->isDisabledIndirectly())
|
||||
if (spec->hasError() || spec->state() != destState-1)
|
||||
return;
|
||||
|
||||
// don't load disabled plugins.
|
||||
if ((spec->isDisabledIndirectly() || !spec->isEnabled()) && destState == PluginSpec::Loaded)
|
||||
return;
|
||||
|
||||
switch (destState) {
|
||||
@@ -927,6 +939,9 @@ void PluginManagerPrivate::resolveDependencies()
|
||||
foreach (PluginSpec *spec, pluginSpecs) {
|
||||
spec->d->resolveDependencies(pluginSpecs);
|
||||
}
|
||||
foreach (PluginSpec *spec, loadQueue()) {
|
||||
spec->d->disableIndirectlyIfDependencyDisabled();
|
||||
}
|
||||
}
|
||||
|
||||
// Look in argument descriptions of the specs for the option.
|
||||
|
||||
@@ -91,6 +91,7 @@ public:
|
||||
}
|
||||
|
||||
// Plugin operations
|
||||
QList<PluginSpec *> loadQueue();
|
||||
void loadPlugins();
|
||||
QStringList pluginPaths() const;
|
||||
void setPluginPaths(const QStringList &paths);
|
||||
|
||||
@@ -500,6 +500,11 @@ void PluginSpec::setEnabled(bool value)
|
||||
d->enabled = value;
|
||||
}
|
||||
|
||||
void PluginSpec::setDisabledIndirectly(bool value)
|
||||
{
|
||||
d->disabledIndirectly = value;
|
||||
}
|
||||
|
||||
/*!
|
||||
\fn bool PluginSpecPrivate::reportError(const QString &err)
|
||||
\internal
|
||||
@@ -799,11 +804,7 @@ bool PluginSpecPrivate::resolveDependencies(const QList<PluginSpec *> &specs)
|
||||
foreach (PluginSpec *spec, specs) {
|
||||
if (spec->provides(dependency.name, dependency.version)) {
|
||||
found = spec;
|
||||
if (!spec->isEnabled() || spec->isDisabledIndirectly())
|
||||
disabledIndirectly = true;
|
||||
|
||||
spec->d->addProvidesForPlugin(q);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -822,12 +823,26 @@ bool PluginSpecPrivate::resolveDependencies(const QList<PluginSpec *> &specs)
|
||||
|
||||
dependencySpecs = resolvedDependencies;
|
||||
|
||||
if (enabled && !disabledIndirectly)
|
||||
state = PluginSpec::Resolved;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void PluginSpecPrivate::disableIndirectlyIfDependencyDisabled()
|
||||
{
|
||||
disabledIndirectly = false;
|
||||
|
||||
if (!enabled)
|
||||
return;
|
||||
|
||||
foreach (PluginSpec *dependencySpec, dependencySpecs) {
|
||||
if (dependencySpec->isDisabledIndirectly() || !dependencySpec->isEnabled()) {
|
||||
disabledIndirectly = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\fn bool PluginSpecPrivate::loadLibrary()
|
||||
\internal
|
||||
|
||||
@@ -92,6 +92,7 @@ public:
|
||||
QString filePath() const;
|
||||
|
||||
void setEnabled(bool value);
|
||||
void setDisabledIndirectly(bool value);
|
||||
|
||||
QStringList arguments() const;
|
||||
void setArguments(const QStringList &arguments);
|
||||
|
||||
@@ -92,6 +92,8 @@ public:
|
||||
// add/remove from providesSpecs
|
||||
void addProvidesForPlugin(PluginSpec *dependent);
|
||||
void removeProvidesForPlugin(PluginSpec *dependent);
|
||||
void disableIndirectlyIfDependencyDisabled();
|
||||
|
||||
|
||||
private:
|
||||
PluginSpec *q;
|
||||
|
||||
@@ -177,8 +177,7 @@ void PluginView::updateList()
|
||||
defaultCollectionItem->setToolTip(C_LOAD, tr("Load on Startup"));
|
||||
defaultCollectionItem->setData(0, Qt::UserRole, qVariantFromValue(defaultCollection));
|
||||
|
||||
foreach (PluginSpec *spec, m_specToItem.keys())
|
||||
toggleRelatedPlugins(spec, spec->isEnabled() && !spec->isDisabledIndirectly());
|
||||
updatePluginDependencies();
|
||||
|
||||
m_ui->categoryWidget->clear();
|
||||
if (!m_items.isEmpty()) {
|
||||
@@ -301,7 +300,7 @@ void PluginView::updatePluginSettings(QTreeWidgetItem *item, int column)
|
||||
if (column == C_LOAD) {
|
||||
|
||||
spec->setEnabled(loadOnStartup);
|
||||
toggleRelatedPlugins(spec, loadOnStartup);
|
||||
updatePluginDependencies();
|
||||
|
||||
if (item->parent()) {
|
||||
PluginCollection *collection = item->parent()->data(0, Qt::UserRole).value<PluginCollection *>();
|
||||
@@ -332,33 +331,36 @@ void PluginView::updatePluginSettings(QTreeWidgetItem *item, int column)
|
||||
spec->setEnabled(loadOnStartup);
|
||||
Qt::CheckState state = (loadOnStartup ? Qt::Checked : Qt::Unchecked);
|
||||
child->setData(C_LOAD, Qt::CheckStateRole, state);
|
||||
toggleRelatedPlugins(spec, loadOnStartup);
|
||||
} else {
|
||||
child->setData(C_LOAD, Qt::CheckStateRole, Qt::Checked);
|
||||
child->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
||||
}
|
||||
}
|
||||
updatePluginDependencies();
|
||||
emit pluginSettingsChanged(collection->plugins().first());
|
||||
}
|
||||
|
||||
m_allowCheckStateUpdate = true;
|
||||
}
|
||||
|
||||
void PluginView::toggleRelatedPlugins(PluginSpec *modifiedPlugin, bool isPluginEnabled)
|
||||
void PluginView::updatePluginDependencies()
|
||||
{
|
||||
|
||||
for(int i = 0; i < modifiedPlugin->providesForSpecs().length(); ++i) {
|
||||
PluginSpec *spec = modifiedPlugin->providesForSpecs().at(i);
|
||||
foreach (PluginSpec *spec, PluginManager::instance()->loadQueue()) {
|
||||
bool disableIndirectly = false;
|
||||
foreach(const PluginSpec *depSpec, spec->dependencySpecs()) {
|
||||
if (!depSpec->isEnabled() || depSpec->isDisabledIndirectly()) {
|
||||
disableIndirectly = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
QTreeWidgetItem *childItem = m_specToItem.value(spec);
|
||||
childItem->setDisabled(disableIndirectly);
|
||||
|
||||
if (disableIndirectly == spec->isDisabledIndirectly())
|
||||
continue;
|
||||
spec->setDisabledIndirectly(disableIndirectly);
|
||||
|
||||
if (childItem->isDisabled() != !isPluginEnabled) {
|
||||
childItem->setDisabled(!isPluginEnabled);
|
||||
if (childItem->parent() && !childItem->parent()->isExpanded())
|
||||
childItem->parent()->setExpanded(true);
|
||||
|
||||
|
||||
toggleRelatedPlugins(spec, isPluginEnabled);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ private slots:
|
||||
private:
|
||||
enum ParsedState { ParsedNone = 1, ParsedPartial = 2, ParsedAll = 4, ParsedWithErrors = 8};
|
||||
QIcon iconForState(int state);
|
||||
void toggleRelatedPlugins(PluginSpec *spec, bool isPluginEnabled = true);
|
||||
void updatePluginDependencies();
|
||||
int parsePluginSpecs(QTreeWidgetItem *parentItem, Qt::CheckState &groupState, QList<PluginSpec*> plugins);
|
||||
|
||||
Internal::Ui::PluginView *m_ui;
|
||||
|
||||
@@ -34,7 +34,6 @@
|
||||
#include "parser/qmljsast_p.h"
|
||||
|
||||
#include <QtCore/QDebug>
|
||||
#include <QtCore/QCoreApplication>
|
||||
#include <QtGui/QColor>
|
||||
#include <QtGui/QApplication>
|
||||
|
||||
@@ -64,13 +63,27 @@ public:
|
||||
return _message;
|
||||
}
|
||||
|
||||
virtual void visit(const NumberValue *)
|
||||
virtual void visit(const NumberValue *value)
|
||||
{
|
||||
// ### Consider enums: elide: "ElideLeft" is valid, but currently elide is a NumberValue.
|
||||
if (const QmlEnumValue *enumValue = dynamic_cast<const QmlEnumValue *>(value)) {
|
||||
if (StringLiteral *stringLiteral = cast<StringLiteral *>(_ast)) {
|
||||
const QString valueName = stringLiteral->value->asString();
|
||||
|
||||
if (!enumValue->keys().contains(valueName)) {
|
||||
_message.message = Check::tr("unknown value for enum");
|
||||
}
|
||||
} else if (_rhsValue->asUndefinedValue()) {
|
||||
_message.kind = DiagnosticMessage::Warning;
|
||||
_message.message = Check::tr("value might be 'undefined'");
|
||||
} else if (! _rhsValue->asStringValue() && ! _rhsValue->asNumberValue()) {
|
||||
_message.message = Check::tr("enum value is not a string or number");
|
||||
}
|
||||
} else {
|
||||
if (/*cast<StringLiteral *>(_ast)
|
||||
||*/ _ast->kind == Node::Kind_TrueLiteral
|
||||
|| _ast->kind == Node::Kind_FalseLiteral) {
|
||||
_message.message = QCoreApplication::translate("QmlJS::Check", "numerical value expected");
|
||||
_message.message = Check::tr("numerical value expected");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,7 +94,7 @@ public:
|
||||
if (cast<StringLiteral *>(_ast)
|
||||
|| cast<NumericLiteral *>(_ast)
|
||||
|| (unaryMinus && cast<NumericLiteral *>(unaryMinus->expression))) {
|
||||
_message.message = QCoreApplication::translate("QmlJS::Check", "boolean value expected");
|
||||
_message.message = Check::tr("boolean value expected");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,23 +106,7 @@ public:
|
||||
|| (unaryMinus && cast<NumericLiteral *>(unaryMinus->expression))
|
||||
|| _ast->kind == Node::Kind_TrueLiteral
|
||||
|| _ast->kind == Node::Kind_FalseLiteral) {
|
||||
_message.message = QCoreApplication::translate("QmlJS::Check", "string value expected");
|
||||
}
|
||||
}
|
||||
|
||||
virtual void visit(const EasingCurveNameValue *)
|
||||
{
|
||||
if (StringLiteral *stringLiteral = cast<StringLiteral *>(_ast)) {
|
||||
const QString curveName = stringLiteral->value->asString();
|
||||
|
||||
if (!EasingCurveNameValue::curveNames().contains(curveName)) {
|
||||
_message.message = QCoreApplication::translate("QmlJS::Check", "unknown easing-curve name");
|
||||
}
|
||||
} else if (_rhsValue->asUndefinedValue()) {
|
||||
_message.kind = DiagnosticMessage::Warning;
|
||||
_message.message = QCoreApplication::translate("QmlJS::Check", "value might be 'undefined'");
|
||||
} else if (! _rhsValue->asStringValue()) {
|
||||
_message.message = QCoreApplication::translate("QmlJS::Check", "easing-curve name is not a string");
|
||||
_message.message = Check::tr("string value expected");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,7 +131,7 @@ public:
|
||||
ok = QColor::isValidColor(colorString);
|
||||
}
|
||||
if (!ok)
|
||||
_message.message = QCoreApplication::translate("QmlJS::Check", "not a valid color");
|
||||
_message.message = Check::tr("not a valid color");
|
||||
} else {
|
||||
visit((StringValue *)0);
|
||||
}
|
||||
@@ -143,7 +140,7 @@ public:
|
||||
virtual void visit(const AnchorLineValue *)
|
||||
{
|
||||
if (! (_rhsValue->asAnchorLineValue() || _rhsValue->asUndefinedValue()))
|
||||
_message.message = QCoreApplication::translate("QmlJS::Check", "expected anchor line");
|
||||
_message.message = Check::tr("expected anchor line");
|
||||
}
|
||||
|
||||
DiagnosticMessage _message;
|
||||
@@ -211,7 +208,7 @@ void Check::visitQmlObject(Node *ast, UiQualifiedId *typeId,
|
||||
if (! _context.lookupType(_doc.data(), typeId)) {
|
||||
if (! _ignoreTypeErrors)
|
||||
error(typeId->identifierToken,
|
||||
QCoreApplication::translate("QmlJS::Check", "unknown type"));
|
||||
Check::tr("unknown type"));
|
||||
// suppress subsequent errors about scope object lookup by clearing
|
||||
// the scope object list
|
||||
// ### todo: better way?
|
||||
@@ -236,7 +233,7 @@ bool Check::visit(UiScriptBinding *ast)
|
||||
|
||||
ExpressionStatement *expStmt = cast<ExpressionStatement *>(ast->statement);
|
||||
if (!expStmt) {
|
||||
error(loc, QCoreApplication::translate("QmlJS::Check", "expected id"));
|
||||
error(loc, Check::tr("expected id"));
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -245,14 +242,14 @@ bool Check::visit(UiScriptBinding *ast)
|
||||
id = idExp->name->asString();
|
||||
} else if (StringLiteral *strExp = cast<StringLiteral *>(expStmt->expression)) {
|
||||
id = strExp->value->asString();
|
||||
warning(loc, QCoreApplication::translate("QmlJS::Check", "using string literals for ids is discouraged"));
|
||||
warning(loc, Check::tr("using string literals for ids is discouraged"));
|
||||
} else {
|
||||
error(loc, QCoreApplication::translate("QmlJS::Check", "expected id"));
|
||||
error(loc, Check::tr("expected id"));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (id.isEmpty() || ! id[0].isLower()) {
|
||||
error(loc, QCoreApplication::translate("QmlJS::Check", "ids must be lower case"));
|
||||
error(loc, Check::tr("ids must be lower case"));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -325,7 +322,7 @@ const Value *Check::checkScopeObjectMember(const UiQualifiedId *id)
|
||||
}
|
||||
if (!value) {
|
||||
error(id->identifierToken,
|
||||
QCoreApplication::translate("QmlJS::Check", "'%1' is not a valid property name").arg(propertyName));
|
||||
Check::tr("'%1' is not a valid property name").arg(propertyName));
|
||||
}
|
||||
|
||||
// can't look up members for attached properties
|
||||
@@ -338,7 +335,7 @@ const Value *Check::checkScopeObjectMember(const UiQualifiedId *id)
|
||||
const ObjectValue *objectValue = value_cast<const ObjectValue *>(value);
|
||||
if (! objectValue) {
|
||||
error(idPart->identifierToken,
|
||||
QCoreApplication::translate("QmlJS::Check", "'%1' does not have members").arg(propertyName));
|
||||
Check::tr("'%1' does not have members").arg(propertyName));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -354,7 +351,7 @@ const Value *Check::checkScopeObjectMember(const UiQualifiedId *id)
|
||||
value = objectValue->lookupMember(propertyName, &_context);
|
||||
if (! value) {
|
||||
error(idPart->identifierToken,
|
||||
QCoreApplication::translate("QmlJS::Check", "'%1' is not a member of '%2'").arg(
|
||||
Check::tr("'%1' is not a member of '%2'").arg(
|
||||
propertyName, objectValue->className()));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -36,10 +36,14 @@
|
||||
#include <qmljs/qmljsscopebuilder.h>
|
||||
#include <qmljs/parser/qmljsastvisitor_p.h>
|
||||
|
||||
#include <QtCore/QCoreApplication>
|
||||
|
||||
namespace QmlJS {
|
||||
|
||||
class QMLJS_EXPORT Check: protected AST::Visitor
|
||||
{
|
||||
Q_DECLARE_TR_FUNCTIONS(QmlJS::Check)
|
||||
|
||||
public:
|
||||
Check(Document::Ptr doc, const Snapshot &snapshot, const QStringList &importPaths);
|
||||
virtual ~Check();
|
||||
|
||||
@@ -25,6 +25,10 @@ CompletionContextFinder::CompletionContextFinder(const QTextCursor &cursor)
|
||||
initialize(cursor.document()->begin(), lastBlock);
|
||||
|
||||
m_startTokenIndex = yyLinizerState.tokens.size() - 1;
|
||||
|
||||
// Initialize calls readLine - which skips empty lines. We should only adjust
|
||||
// the start token index if the linizer still is in the same block as the cursor.
|
||||
if (yyLinizerState.iter == cursor.block()) {
|
||||
for (; m_startTokenIndex >= 0; --m_startTokenIndex) {
|
||||
const Token &token = yyLinizerState.tokens.at(m_startTokenIndex);
|
||||
if (token.end() <= cursor.positionInBlock())
|
||||
@@ -33,6 +37,7 @@ CompletionContextFinder::CompletionContextFinder(const QTextCursor &cursor)
|
||||
|
||||
if (m_startTokenIndex == yyLinizerState.tokens.size() - 1 && yyLinizerState.insertedSemicolon)
|
||||
--m_startTokenIndex;
|
||||
}
|
||||
|
||||
getQmlObjectTypeName(m_startTokenIndex);
|
||||
checkBinding();
|
||||
|
||||
@@ -14,9 +14,6 @@ class QMLJS_EXPORT CompletionContextFinder : public LineInfo
|
||||
public:
|
||||
CompletionContextFinder(const QTextCursor &cursor);
|
||||
|
||||
//bool inQmlObjectDefinition();
|
||||
bool inQmlBindingRhs();
|
||||
|
||||
QStringList qmlObjectTypeName() const;
|
||||
bool isInQmlContext() const;
|
||||
|
||||
|
||||
@@ -326,6 +326,8 @@ public:
|
||||
|
||||
class QmlXmlReader
|
||||
{
|
||||
Q_DECLARE_TR_FUNCTIONS(QmlJS::Interpreter::QmlXmlReader)
|
||||
|
||||
public:
|
||||
QmlXmlReader(QIODevice *dev)
|
||||
: _xml(dev)
|
||||
@@ -339,7 +341,7 @@ public:
|
||||
if (_xml.name() == "module")
|
||||
readModule();
|
||||
else
|
||||
_xml.raiseError(QCoreApplication::translate("QmlJS::Interpreter::QmlXmlReader", "The file is not module file."));
|
||||
_xml.raiseError(tr("The file is not module file."));
|
||||
}
|
||||
|
||||
return !_xml.error();
|
||||
@@ -351,7 +353,7 @@ public:
|
||||
|
||||
private:
|
||||
void unexpectedElement(const QStringRef &child, const QString &parent) {
|
||||
_xml.raiseError(QCoreApplication::translate("QmlJS::Interpreter::QmlXmlReader", "Unexpected element <%1> in <%2>").arg(child.toString(), parent));
|
||||
_xml.raiseError(tr("Unexpected element <%1> in <%2>").arg(child.toString(), parent));
|
||||
}
|
||||
|
||||
void ignoreAttr(const QXmlStreamAttribute &attr) {
|
||||
@@ -360,11 +362,11 @@ private:
|
||||
}
|
||||
|
||||
void invalidAttr(const QString &value, const QString &attrName, const QString &tag) {
|
||||
_xml.raiseError(QCoreApplication::translate("QmlJS::Interpreter::QmlXmlReader", "invalid value '%1' for attribute %2 in <%3>").arg(value, attrName, tag));
|
||||
_xml.raiseError(tr("invalid value '%1' for attribute %2 in <%3>").arg(value, attrName, tag));
|
||||
}
|
||||
|
||||
void noValidAttr(const QString &attrName, const QString &tag) {
|
||||
_xml.raiseError(QCoreApplication::translate("QmlJS::Interpreter::QmlXmlReader", "<%1> has no valid %2 attribute").arg(tag, attrName));
|
||||
_xml.raiseError(tr("<%1> has no valid %2 attribute").arg(tag, attrName));
|
||||
}
|
||||
|
||||
void readModule()
|
||||
@@ -846,15 +848,6 @@ const Value *QmlObjectValue::propertyValue(const FakeMetaProperty &prop) const
|
||||
value = engine()->colorValue();
|
||||
} else if (typeName == QLatin1String("QDeclarativeAnchorLine")) {
|
||||
value = engine()->anchorLineValue();
|
||||
} else if (typeName == QLatin1String("QEasingCurve")) {
|
||||
// ### cache
|
||||
ObjectValue *object = engine()->newObject(/*prototype =*/ 0);
|
||||
object->setClassName(QLatin1String("EasingCurve"));
|
||||
object->setProperty("type", engine()->easingCurveNameValue());
|
||||
object->setProperty("period", engine()->numberValue());
|
||||
object->setProperty("amplitude", engine()->numberValue());
|
||||
object->setProperty("overshoot", engine()->numberValue());
|
||||
value = object;
|
||||
}
|
||||
|
||||
// might be an enum
|
||||
@@ -1199,10 +1192,6 @@ void ValueVisitor::visit(const Reference *)
|
||||
{
|
||||
}
|
||||
|
||||
void ValueVisitor::visit(const EasingCurveNameValue *)
|
||||
{
|
||||
}
|
||||
|
||||
void ValueVisitor::visit(const ColorValue *)
|
||||
{
|
||||
}
|
||||
@@ -1267,11 +1256,6 @@ const Reference *Value::asReference() const
|
||||
return 0;
|
||||
}
|
||||
|
||||
const EasingCurveNameValue *Value::asEasingCurveNameValue() const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
const ColorValue *Value::asColorValue() const
|
||||
{
|
||||
return 0;
|
||||
@@ -1411,13 +1395,6 @@ Context::~Context()
|
||||
{
|
||||
}
|
||||
|
||||
void Context::build(const QList<Node *> &astPath, QmlJS::Document::Ptr doc,
|
||||
const QmlJS::Snapshot &snapshot, const QStringList &importPaths)
|
||||
{
|
||||
Link link(this, doc, snapshot, importPaths);
|
||||
ScopeBuilder(doc, this).push(astPath);
|
||||
}
|
||||
|
||||
Engine *Context::engine() const
|
||||
{
|
||||
return _engine;
|
||||
@@ -1557,67 +1534,6 @@ const Value *Reference::value(Context *) const
|
||||
return _engine->undefinedValue();
|
||||
}
|
||||
|
||||
void EasingCurveNameValue::accept(ValueVisitor *visitor) const
|
||||
{
|
||||
visitor->visit(this);
|
||||
}
|
||||
|
||||
QSet<QString> EasingCurveNameValue::_curveNames;
|
||||
QSet<QString> EasingCurveNameValue::curveNames()
|
||||
{
|
||||
if (_curveNames.isEmpty()) {
|
||||
_curveNames = QSet<QString>()
|
||||
<< "Linear"
|
||||
<< "InQuad"
|
||||
<< "OutQuad"
|
||||
<< "InOutQuad"
|
||||
<< "OutInQuad"
|
||||
<< "InCubic"
|
||||
<< "OutCubic"
|
||||
<< "InOutCubic"
|
||||
<< "OutInCubic"
|
||||
<< "InQuart"
|
||||
<< "OutQuart"
|
||||
<< "InOutQuart"
|
||||
<< "OutInQuart"
|
||||
<< "InQuint"
|
||||
<< "OutQuint"
|
||||
<< "InOutQuint"
|
||||
<< "OutInQuint"
|
||||
<< "InSine"
|
||||
<< "OutSine"
|
||||
<< "InOutSine"
|
||||
<< "OutInSine"
|
||||
<< "InExpo"
|
||||
<< "OutExpo"
|
||||
<< "InOutExpo"
|
||||
<< "OutInExpo"
|
||||
<< "InCirc"
|
||||
<< "OutCirc"
|
||||
<< "InOutCirc"
|
||||
<< "OutInCirc"
|
||||
<< "InElastic"
|
||||
<< "OutElastic"
|
||||
<< "InOutElastic"
|
||||
<< "OutInElastic"
|
||||
<< "InBack"
|
||||
<< "OutBack"
|
||||
<< "InOutBack"
|
||||
<< "OutInBack"
|
||||
<< "InBounce"
|
||||
<< "OutBounce"
|
||||
<< "InOutBounce"
|
||||
<< "OutInBounce";
|
||||
}
|
||||
|
||||
return _curveNames;
|
||||
}
|
||||
|
||||
const EasingCurveNameValue *EasingCurveNameValue::asEasingCurveNameValue() const
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
void ColorValue::accept(ValueVisitor *visitor) const
|
||||
{
|
||||
visitor->visit(this);
|
||||
@@ -1999,7 +1915,7 @@ QStringList MetaTypeSystem::load(const QFileInfoList &xmlFiles)
|
||||
}
|
||||
file.close();
|
||||
} else {
|
||||
errorMsgs.append(QCoreApplication::translate("QmlJS::Interpreter::QmlXmlReader", "%1: %2").arg(xmlFile.absoluteFilePath(),
|
||||
errorMsgs.append(QmlXmlReader::tr("%1: %2").arg(xmlFile.absoluteFilePath(),
|
||||
file.errorString()));
|
||||
}
|
||||
}
|
||||
@@ -2337,11 +2253,6 @@ void TypeId::visit(const FunctionValue *object)
|
||||
_result = QLatin1String("Function");
|
||||
}
|
||||
|
||||
void TypeId::visit(const EasingCurveNameValue *)
|
||||
{
|
||||
_result = QLatin1String("string");
|
||||
}
|
||||
|
||||
void TypeId::visit(const ColorValue *)
|
||||
{
|
||||
_result = QLatin1String("string");
|
||||
@@ -2412,11 +2323,6 @@ const StringValue *Engine::stringValue() const
|
||||
return &_stringValue;
|
||||
}
|
||||
|
||||
const EasingCurveNameValue *Engine::easingCurveNameValue() const
|
||||
{
|
||||
return &_easingCurveNameValue;
|
||||
}
|
||||
|
||||
const ColorValue *Engine::colorValue() const
|
||||
{
|
||||
return &_colorValue;
|
||||
|
||||
@@ -60,7 +60,6 @@ class StringValue;
|
||||
class ObjectValue;
|
||||
class FunctionValue;
|
||||
class Reference;
|
||||
class EasingCurveNameValue;
|
||||
class ColorValue;
|
||||
class AnchorLineValue;
|
||||
|
||||
@@ -88,7 +87,6 @@ public:
|
||||
virtual void visit(const ObjectValue *);
|
||||
virtual void visit(const FunctionValue *);
|
||||
virtual void visit(const Reference *);
|
||||
virtual void visit(const EasingCurveNameValue *);
|
||||
virtual void visit(const ColorValue *);
|
||||
virtual void visit(const AnchorLineValue *);
|
||||
};
|
||||
@@ -113,7 +111,6 @@ public:
|
||||
virtual const ObjectValue *asObjectValue() const;
|
||||
virtual const FunctionValue *asFunctionValue() const;
|
||||
virtual const Reference *asReference() const;
|
||||
virtual const EasingCurveNameValue *asEasingCurveNameValue() const;
|
||||
virtual const ColorValue *asColorValue() const;
|
||||
virtual const AnchorLineValue *asAnchorLineValue() const;
|
||||
|
||||
@@ -172,12 +169,6 @@ template <> Q_INLINE_TEMPLATE const Reference *value_cast(const Value *v)
|
||||
else return 0;
|
||||
}
|
||||
|
||||
template <> Q_INLINE_TEMPLATE const EasingCurveNameValue *value_cast(const Value *v)
|
||||
{
|
||||
if (v) return v->asEasingCurveNameValue();
|
||||
else return 0;
|
||||
}
|
||||
|
||||
template <> Q_INLINE_TEMPLATE const ColorValue *value_cast(const Value *v)
|
||||
{
|
||||
if (v) return v->asColorValue();
|
||||
@@ -289,9 +280,6 @@ public:
|
||||
Context(Engine *engine);
|
||||
~Context();
|
||||
|
||||
void build(const QList<AST::Node *> &astPath, const Document::Ptr doc,
|
||||
const Snapshot &snapshot, const QStringList &importPaths);
|
||||
|
||||
Engine *engine() const;
|
||||
const ScopeChain &scopeChain() const;
|
||||
ScopeChain &scopeChain();
|
||||
@@ -342,18 +330,6 @@ private:
|
||||
Engine *_engine;
|
||||
};
|
||||
|
||||
class QMLJS_EXPORT EasingCurveNameValue: public Value
|
||||
{
|
||||
static QSet<QString> _curveNames;
|
||||
|
||||
public:
|
||||
static QSet<QString> curveNames();
|
||||
|
||||
// Value interface
|
||||
virtual const EasingCurveNameValue *asEasingCurveNameValue() const;
|
||||
virtual void accept(ValueVisitor *) const;
|
||||
};
|
||||
|
||||
class QMLJS_EXPORT ColorValue: public Value
|
||||
{
|
||||
public:
|
||||
@@ -639,7 +615,6 @@ protected:
|
||||
virtual void visit(const StringValue *);
|
||||
virtual void visit(const ObjectValue *object);
|
||||
virtual void visit(const FunctionValue *object);
|
||||
virtual void visit(const EasingCurveNameValue *);
|
||||
virtual void visit(const ColorValue *);
|
||||
virtual void visit(const AnchorLineValue *);
|
||||
};
|
||||
@@ -658,7 +633,6 @@ public:
|
||||
const NumberValue *numberValue() const;
|
||||
const BooleanValue *booleanValue() const;
|
||||
const StringValue *stringValue() const;
|
||||
const EasingCurveNameValue *easingCurveNameValue() const;
|
||||
const ColorValue *colorValue() const;
|
||||
const AnchorLineValue *anchorLineValue() const;
|
||||
|
||||
@@ -744,7 +718,6 @@ private:
|
||||
NumberValue _numberValue;
|
||||
BooleanValue _booleanValue;
|
||||
StringValue _stringValue;
|
||||
EasingCurveNameValue _easingCurveNameValue;
|
||||
ColorValue _colorValue;
|
||||
AnchorLineValue _anchorLineValue;
|
||||
QList<Value *> _registeredValues;
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
#include <QtCore/QFileInfo>
|
||||
#include <QtCore/QDir>
|
||||
#include <QtCore/QDebug>
|
||||
#include <QtCore/QCoreApplication>
|
||||
|
||||
using namespace QmlJS;
|
||||
using namespace QmlJS::Interpreter;
|
||||
@@ -211,7 +210,7 @@ void Link::importFile(Interpreter::ObjectValue *typeEnv, Document::Ptr doc,
|
||||
importNamespace->setProperty(targetName, importedDoc->bind()->rootObjectValue());
|
||||
} else {
|
||||
error(doc, import->fileNameToken,
|
||||
QCoreApplication::translate("QmlJS::Link", "could not find file or directory"));
|
||||
tr("could not find file or directory"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -253,7 +252,7 @@ void Link::importNonFile(Interpreter::ObjectValue *typeEnv, Document::Ptr doc, A
|
||||
const int dotIdx = versionString.indexOf(QLatin1Char('.'));
|
||||
if (dotIdx == -1) {
|
||||
error(doc, import->versionToken,
|
||||
QCoreApplication::translate("QmlJS::Link", "expected two numbers separated by a dot"));
|
||||
tr("expected two numbers separated by a dot"));
|
||||
return;
|
||||
} else {
|
||||
majorVersion = versionString.left(dotIdx).toInt();
|
||||
@@ -261,7 +260,7 @@ void Link::importNonFile(Interpreter::ObjectValue *typeEnv, Document::Ptr doc, A
|
||||
}
|
||||
} else {
|
||||
error(doc, locationFromRange(import->firstSourceLocation(), import->lastSourceLocation()),
|
||||
QCoreApplication::translate("QmlJS::Link", "package import requires a version number"));
|
||||
tr("package import requires a version number"));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -307,7 +306,7 @@ void Link::importNonFile(Interpreter::ObjectValue *typeEnv, Document::Ptr doc, A
|
||||
}
|
||||
|
||||
error(doc, locationFromRange(import->firstSourceLocation(), import->lastSourceLocation()),
|
||||
QCoreApplication::translate("QmlJS::Link", "package not found"));
|
||||
tr("package not found"));
|
||||
}
|
||||
|
||||
UiQualifiedId *Link::qualifiedTypeNameId(Node *node)
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <QtCore/QList>
|
||||
#include <QtCore/QHash>
|
||||
#include <QtCore/QStringList>
|
||||
#include <QtCore/QCoreApplication>
|
||||
|
||||
namespace QmlJS {
|
||||
|
||||
@@ -18,6 +19,8 @@ class NameId;
|
||||
*/
|
||||
class QMLJS_EXPORT Link
|
||||
{
|
||||
Q_DECLARE_TR_FUNCTIONS(QmlJS::Link)
|
||||
|
||||
public:
|
||||
// Link all documents in snapshot
|
||||
Link(Interpreter::Context *context, const Document::Ptr &doc, const Snapshot &snapshot,
|
||||
|
||||
@@ -33,6 +33,7 @@ void ScopeBuilder::push(AST::Node *node)
|
||||
// JS scopes
|
||||
if (FunctionDeclaration *fun = cast<FunctionDeclaration *>(node)) {
|
||||
ObjectValue *functionScope = _doc->bind()->findFunctionScope(fun);
|
||||
if (functionScope)
|
||||
_context->scopeChain().jsScopes += functionScope;
|
||||
}
|
||||
|
||||
@@ -106,14 +107,7 @@ void ScopeBuilder::setQmlScopeObject(Node *node)
|
||||
|
||||
// check if the object has a Qt.PropertyChanges ancestor
|
||||
prototype = scopeObject->prototype(_context);
|
||||
while (prototype) {
|
||||
if (const QmlObjectValue *qmlMetaObject = dynamic_cast<const QmlObjectValue *>(prototype)) {
|
||||
if (qmlMetaObject->className() == QLatin1String("PropertyChanges")
|
||||
&& qmlMetaObject->packageName() == QLatin1String("Qt"))
|
||||
break;
|
||||
}
|
||||
prototype = prototype->prototype(_context);
|
||||
}
|
||||
prototype = isPropertyChangesObject(_context, prototype);
|
||||
// find the target script binding
|
||||
if (prototype) {
|
||||
UiObjectInitializer *initializer = 0;
|
||||
@@ -169,3 +163,19 @@ const Value *ScopeBuilder::scopeObjectLookup(AST::UiQualifiedId *id)
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
const ObjectValue *ScopeBuilder::isPropertyChangesObject(Context *context,
|
||||
const ObjectValue *object)
|
||||
{
|
||||
const ObjectValue *prototype = object;
|
||||
while (prototype) {
|
||||
if (const QmlObjectValue *qmlMetaObject = dynamic_cast<const QmlObjectValue *>(prototype)) {
|
||||
if (qmlMetaObject->className() == QLatin1String("PropertyChanges")
|
||||
&& qmlMetaObject->packageName() == QLatin1String("Qt"))
|
||||
return prototype;
|
||||
}
|
||||
prototype = prototype->prototype(context);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ namespace AST {
|
||||
namespace Interpreter {
|
||||
class Context;
|
||||
class Value;
|
||||
class ObjectValue;
|
||||
}
|
||||
|
||||
class QMLJS_EXPORT ScopeBuilder
|
||||
@@ -26,6 +27,8 @@ public:
|
||||
void push(const QList<AST::Node *> &nodes);
|
||||
void pop();
|
||||
|
||||
static const Interpreter::ObjectValue *isPropertyChangesObject(Interpreter::Context *context, const Interpreter::ObjectValue *object);
|
||||
|
||||
private:
|
||||
void setQmlScopeObject(AST::Node *node);
|
||||
const Interpreter::Value *scopeObjectLookup(AST::UiQualifiedId *id);
|
||||
|
||||
@@ -59,5 +59,11 @@
|
||||
<file>images/darkclose.png</file>
|
||||
<file>images/arrowdown.png</file>
|
||||
<file>images/arrowup.png</file>
|
||||
<file>images/category_fakevim.png</file>
|
||||
<file>images/category_locator.png</file>
|
||||
<file>images/category_cpaster.png</file>
|
||||
<file>images/category_cpp.png</file>
|
||||
<file>images/category_vcs.png</file>
|
||||
<file>images/category_qml.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
@@ -56,7 +56,6 @@ ICore* ICore::instance()
|
||||
}
|
||||
|
||||
CoreImpl::CoreImpl(MainWindow *mainwindow)
|
||||
: m_preferredWizardKinds(IWizard::ProjectWizard)
|
||||
{
|
||||
m_instance = this;
|
||||
m_mainwindow = mainwindow;
|
||||
@@ -69,11 +68,6 @@ QStringList CoreImpl::showNewItemDialog(const QString &title,
|
||||
return m_mainwindow->showNewItemDialog(title, wizards, defaultLocation);
|
||||
}
|
||||
|
||||
void CoreImpl::setNewItemDialogPreferredWizardKinds(IWizard::WizardKinds kinds)
|
||||
{
|
||||
m_preferredWizardKinds = kinds;
|
||||
}
|
||||
|
||||
bool CoreImpl::showOptionsDialog(const QString &group, const QString &page, QWidget *parent)
|
||||
{
|
||||
return m_mainwindow->showOptionsDialog(group, page, parent);
|
||||
|
||||
@@ -47,8 +47,6 @@ public:
|
||||
QStringList showNewItemDialog(const QString &title,
|
||||
const QList<IWizard *> &wizards,
|
||||
const QString &defaultLocation = QString());
|
||||
void setNewItemDialogPreferredWizardKinds(IWizard::WizardKinds kinds);
|
||||
IWizard::WizardKinds newItemDialogPreferredWizardKinds() { return m_preferredWizardKinds; }
|
||||
bool showOptionsDialog(const QString &group = QString(),
|
||||
const QString &page = QString(),
|
||||
QWidget *parent = 0);
|
||||
@@ -93,8 +91,6 @@ public:
|
||||
private:
|
||||
MainWindow *m_mainwindow;
|
||||
friend class MainWindow;
|
||||
|
||||
IWizard::WizardKinds m_preferredWizardKinds;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
@@ -50,6 +50,8 @@ Q_DECLARE_METATYPE(Core::IWizard*)
|
||||
|
||||
namespace {
|
||||
|
||||
const int ICON_SIZE = 22;
|
||||
|
||||
class TwoLevelProxyModel : public QAbstractProxyModel
|
||||
{
|
||||
// Q_OBJECT
|
||||
@@ -150,8 +152,7 @@ using namespace Core::Internal;
|
||||
NewDialog::NewDialog(QWidget *parent) :
|
||||
QDialog(parent),
|
||||
m_ui(new Core::Internal::Ui::NewDialog),
|
||||
m_okButton(0),
|
||||
m_preferredWizardKinds(0)
|
||||
m_okButton(0)
|
||||
{
|
||||
typedef QMap<QString, QStandardItem *> CategoryItemMap;
|
||||
m_ui->setupUi(this);
|
||||
@@ -166,7 +167,7 @@ NewDialog::NewDialog(QWidget *parent) :
|
||||
m_ui->templateCategoryView->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
m_ui->templateCategoryView->setItemDelegate(new FancyTopLevelDelegate);
|
||||
|
||||
m_ui->templatesView->setIconSize(QSize(22, 22));
|
||||
m_ui->templatesView->setIconSize(QSize(ICON_SIZE, ICON_SIZE));
|
||||
|
||||
connect(m_ui->templateCategoryView, SIGNAL(clicked(const QModelIndex&)),
|
||||
this, SLOT(currentCategoryChanged(const QModelIndex&)));
|
||||
@@ -192,11 +193,6 @@ bool wizardLessThan(const IWizard *w1, const IWizard *w2)
|
||||
return w1->id().compare(w2->id()) < 0;
|
||||
}
|
||||
|
||||
void NewDialog::setPreferredWizardKinds(IWizard::WizardKinds kinds)
|
||||
{
|
||||
m_preferredWizardKinds = kinds;
|
||||
}
|
||||
|
||||
void NewDialog::setWizards(QList<IWizard*> wizards)
|
||||
{
|
||||
typedef QMap<QString, QStandardItem *> CategoryItemMap;
|
||||
@@ -218,7 +214,7 @@ void NewDialog::setWizards(QList<IWizard*> wizards)
|
||||
parentItem->appendRow(filesClassesKindItem);
|
||||
|
||||
if (m_dummyIcon.isNull()) {
|
||||
m_dummyIcon = QPixmap(22, 22);
|
||||
m_dummyIcon = QPixmap(ICON_SIZE, ICON_SIZE);
|
||||
m_dummyIcon.fill(Qt::transparent);
|
||||
}
|
||||
|
||||
@@ -241,9 +237,10 @@ void NewDialog::setWizards(QList<IWizard*> wizards)
|
||||
break;
|
||||
}
|
||||
kindItem->appendRow(categoryItem);
|
||||
m_categoryItems.append(categoryItem);
|
||||
categoryItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
|
||||
categoryItem->setText(wizard->displayCategory());
|
||||
categoryItem->setData(QVariant::fromValue(0), Qt::UserRole);
|
||||
categoryItem->setData(wizard->category(), Qt::UserRole);
|
||||
cit = categories.insert(categoryName, categoryItem);
|
||||
}
|
||||
// add item
|
||||
@@ -251,10 +248,11 @@ void NewDialog::setWizards(QList<IWizard*> wizards)
|
||||
QIcon wizardIcon;
|
||||
|
||||
// spacing hack. Add proper icons instead
|
||||
if (wizard->icon().isNull())
|
||||
if (wizard->icon().isNull()) {
|
||||
wizardIcon = m_dummyIcon;
|
||||
else
|
||||
} else {
|
||||
wizardIcon = wizard->icon();
|
||||
}
|
||||
wizardItem->setIcon(wizardIcon);
|
||||
wizardItem->setData(QVariant::fromValue(wizard), Qt::UserRole);
|
||||
wizardItem->setFlags(Qt::ItemIsEnabled|Qt::ItemIsSelectable);
|
||||
@@ -274,8 +272,20 @@ void NewDialog::setWizards(QList<IWizard*> wizards)
|
||||
|
||||
Core::IWizard *NewDialog::showDialog()
|
||||
{
|
||||
// Select first category, first item by default
|
||||
m_ui->templateCategoryView->setCurrentIndex(m_proxyModel->index(0,0, m_proxyModel->index(0,0)));
|
||||
static QString lastCategory;
|
||||
QModelIndex idx;
|
||||
|
||||
if (!lastCategory.isEmpty())
|
||||
foreach(QStandardItem* item, m_categoryItems) {
|
||||
if (item->data(Qt::UserRole) == lastCategory) {
|
||||
idx = m_proxyModel->mapToSource(m_model->indexFromItem(item));
|
||||
}
|
||||
}
|
||||
if (!idx.isValid())
|
||||
idx = m_proxyModel->index(0,0, m_proxyModel->index(0,0));
|
||||
|
||||
m_ui->templateCategoryView->setCurrentIndex(idx);
|
||||
|
||||
// We need to set ensure that the category has default focus
|
||||
m_ui->templateCategoryView->setFocus(Qt::NoFocusReason);
|
||||
|
||||
@@ -286,8 +296,15 @@ Core::IWizard *NewDialog::showDialog()
|
||||
currentItemChanged(m_ui->templatesView->rootIndex().child(0,0));
|
||||
|
||||
updateOkButton();
|
||||
if (exec() != Accepted)
|
||||
|
||||
const int retVal = exec();
|
||||
|
||||
idx = m_ui->templateCategoryView->currentIndex();
|
||||
lastCategory = m_model->itemFromIndex(m_proxyModel->mapToSource(idx))->data(Qt::UserRole).toString();
|
||||
|
||||
if (retVal != Accepted)
|
||||
return 0;
|
||||
|
||||
return currentWizard();
|
||||
}
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
|
||||
#include <QtGui/QDialog>
|
||||
#include <QtCore/QList>
|
||||
#include <QtCore/QModelIndex>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QAbstractProxyModel;
|
||||
@@ -41,7 +42,6 @@ class QPushButton;
|
||||
class QStandardItem;
|
||||
class QStandardItemModel;
|
||||
class QStringList;
|
||||
class QModelIndex;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
namespace Core {
|
||||
@@ -61,7 +61,6 @@ public:
|
||||
virtual ~NewDialog();
|
||||
|
||||
void setWizards(QList<IWizard*> wizards);
|
||||
void setPreferredWizardKinds(IWizard::WizardKinds kinds);
|
||||
|
||||
Core::IWizard *showDialog();
|
||||
|
||||
@@ -77,8 +76,8 @@ private:
|
||||
QStandardItemModel *m_model;
|
||||
QAbstractProxyModel *m_proxyModel;
|
||||
QPushButton *m_okButton;
|
||||
IWizard::WizardKinds m_preferredWizardKinds;
|
||||
QPixmap m_dummyIcon;
|
||||
QList<QStandardItem*> m_categoryItems;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
@@ -38,9 +38,15 @@
|
||||
</item>
|
||||
<item row="1" column="0" rowspan="3">
|
||||
<widget class="QTreeView" name="templateCategoryView">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>200</width>
|
||||
<width>225</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
@@ -77,6 +83,12 @@
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>180</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::StrongFocus</enum>
|
||||
</property>
|
||||
@@ -91,17 +103,11 @@
|
||||
<item row="3" column="1">
|
||||
<widget class="QTextBrowser" name="templateDescription">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>140</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::NoFocus</enum>
|
||||
</property>
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
#include <QtGui/QListView>
|
||||
#include <QtGui/QApplication>
|
||||
#include <QtGui/QGroupBox>
|
||||
#include <QtGui/QStyledItemDelegate>
|
||||
|
||||
static const char categoryKeyC[] = "General/LastPreferenceCategory";
|
||||
static const char pageKeyC[] = "General/LastPreferencePage";
|
||||
@@ -200,6 +201,19 @@ bool CategoryFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sou
|
||||
|
||||
// ----------- Category list view
|
||||
|
||||
|
||||
class CategoryListViewDelegate : public QStyledItemDelegate
|
||||
{
|
||||
public:
|
||||
CategoryListViewDelegate(QObject *parent) : QStyledItemDelegate(parent) {}
|
||||
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
|
||||
{
|
||||
QSize size = QStyledItemDelegate::sizeHint(option, index);
|
||||
size.setHeight(qMax(size.height(), 32));
|
||||
return size;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Special version of a QListView that has the width of the first column as
|
||||
* minimum size.
|
||||
@@ -210,6 +224,7 @@ public:
|
||||
CategoryListView(QWidget *parent = 0) : QListView(parent)
|
||||
{
|
||||
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Expanding);
|
||||
setItemDelegate(new CategoryListViewDelegate(this));
|
||||
}
|
||||
|
||||
virtual QSize sizeHint() const
|
||||
|
||||
@@ -67,17 +67,6 @@
|
||||
\sa Core::FileManager
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void setNewItemDialogPreferredWizardKinds(IWizard::WizardKinds kinds)
|
||||
\internal
|
||||
|
||||
When set to true, the general "New File or Project" dialog will
|
||||
collapse the project categories.
|
||||
This is set by the project explorer: When projects are open, the preferred
|
||||
thing is to create files/classes, if no projects are open, the preferred thing
|
||||
to create are projects.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn bool ICore::showOptionsDialog(const QString &group = QString(),
|
||||
const QString &page = QString())
|
||||
|
||||
@@ -74,7 +74,6 @@ public:
|
||||
virtual QStringList showNewItemDialog(const QString &title,
|
||||
const QList<IWizard *> &wizards,
|
||||
const QString &defaultLocation = QString()) = 0;
|
||||
virtual void setNewItemDialogPreferredWizardKinds(IWizard::WizardKinds kinds) = 0;
|
||||
|
||||
virtual bool showOptionsDialog(const QString &group = QString(),
|
||||
const QString &page = QString(),
|
||||
|
||||
|
Before Width: | Height: | Size: 930 B After Width: | Height: | Size: 593 B |
BIN
src/plugins/coreplugin/images/category_cpaster.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
src/plugins/coreplugin/images/category_cpp.png
Normal file
|
After Width: | Height: | Size: 967 B |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 852 B After Width: | Height: | Size: 1.5 KiB |
BIN
src/plugins/coreplugin/images/category_fakevim.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.3 KiB |
BIN
src/plugins/coreplugin/images/category_locator.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 838 B |
BIN
src/plugins/coreplugin/images/category_qml.png
Normal file
|
After Width: | Height: | Size: 876 B |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 801 B |
|
Before Width: | Height: | Size: 615 B After Width: | Height: | Size: 573 B |
BIN
src/plugins/coreplugin/images/category_vcs.png
Normal file
|
After Width: | Height: | Size: 1014 B |
|
Before Width: | Height: | Size: 908 B After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.4 KiB |
@@ -775,8 +775,7 @@ void MainWindow::registerDefaultActions()
|
||||
|
||||
void MainWindow::newFile()
|
||||
{
|
||||
showNewItemDialog(tr("New", "Title of dialog"), IWizard::allWizards(),
|
||||
QString(), m_coreImpl->newItemDialogPreferredWizardKinds());
|
||||
showNewItemDialog(tr("New", "Title of dialog"), IWizard::allWizards(), QString());
|
||||
}
|
||||
|
||||
void MainWindow::openFile()
|
||||
@@ -863,8 +862,7 @@ void MainWindow::setFocusToEditor()
|
||||
|
||||
QStringList MainWindow::showNewItemDialog(const QString &title,
|
||||
const QList<IWizard *> &wizards,
|
||||
const QString &defaultLocation,
|
||||
IWizard::WizardKinds preferredWizardKinds)
|
||||
const QString &defaultLocation)
|
||||
{
|
||||
// Scan for wizards matching the filter and pick one. Don't show
|
||||
// dialog if there is only one.
|
||||
@@ -879,7 +877,6 @@ QStringList MainWindow::showNewItemDialog(const QString &title,
|
||||
NewDialog dlg(this);
|
||||
dlg.setWizards(wizards);
|
||||
dlg.setWindowTitle(title);
|
||||
dlg.setPreferredWizardKinds(preferredWizardKinds);
|
||||
wizard = dlg.showDialog();
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -134,8 +134,7 @@ public slots:
|
||||
|
||||
QStringList showNewItemDialog(const QString &title,
|
||||
const QList<IWizard *> &wizards,
|
||||
const QString &defaultLocation = QString(),
|
||||
IWizard::WizardKinds preferredWizardKinds = 0);
|
||||
const QString &defaultLocation = QString());
|
||||
|
||||
bool showOptionsDialog(const QString &category = QString(),
|
||||
const QString &page = QString(),
|
||||
|
||||
@@ -186,7 +186,7 @@ void OutputPaneManager::updateStatusButtons(bool visible)
|
||||
int idx = m_widgetComboBox->itemData(m_widgetComboBox->currentIndex()).toInt();
|
||||
if (m_buttons.value(idx))
|
||||
m_buttons.value(idx)->setChecked(visible);
|
||||
m_minMaxButton->setVisible(OutputPanePlaceHolder::m_current
|
||||
m_minMaxAction->setVisible(OutputPanePlaceHolder::m_current
|
||||
&& OutputPanePlaceHolder::m_current->canMaximizeOrMinimize());
|
||||
}
|
||||
|
||||
@@ -224,9 +224,8 @@ OutputPaneManager::OutputPaneManager(QWidget *parent) :
|
||||
connect(m_prevAction, SIGNAL(triggered()), this, SLOT(slotPrev()));
|
||||
|
||||
m_minMaxAction = new QAction(this);
|
||||
m_minMaxButton->setIcon(m_maximizeIcon);
|
||||
m_minMaxButton->setToolTip(tr("Maximize Output Pane"));
|
||||
m_minMaxAction->setText(m_minMaxButton->toolTip());
|
||||
m_minMaxAction->setIcon(m_maximizeIcon);
|
||||
m_minMaxAction->setText(tr("Maximize Output Pane"));
|
||||
|
||||
m_closeButton->setIcon(QIcon(":/core/images/closebutton.png"));
|
||||
connect(m_closeButton, SIGNAL(clicked()), this, SLOT(slotHide()));
|
||||
@@ -312,9 +311,10 @@ void OutputPaneManager::init()
|
||||
cmd->setDefaultKeySequence(QKeySequence("Alt+9"));
|
||||
#endif
|
||||
cmd->setAttribute(Command::CA_UpdateText);
|
||||
cmd->setAttribute(Command::CA_UpdateIcon);
|
||||
mpanes->addAction(cmd, "Coreplugin.OutputPane.ActionsGroup");
|
||||
connect(m_minMaxAction, SIGNAL(triggered()), this, SLOT(slotMinMax()));
|
||||
connect(m_minMaxButton, SIGNAL(clicked()), this, SLOT(slotMinMax()));
|
||||
m_minMaxButton->setDefaultAction(cmd->action());
|
||||
|
||||
QAction *sep = new QAction(this);
|
||||
sep->setSeparator(true);
|
||||
@@ -418,10 +418,9 @@ void OutputPaneManager::slotMinMax()
|
||||
return;
|
||||
m_maximised = !m_maximised;
|
||||
OutputPanePlaceHolder::m_current->maximizeOrMinimize(m_maximised);
|
||||
m_minMaxButton->setIcon(m_maximised ? m_minimizeIcon : m_maximizeIcon);
|
||||
m_minMaxButton->setToolTip(m_maximised ? tr("Minimize Output Pane")
|
||||
m_minMaxAction->setIcon(m_maximised ? m_minimizeIcon : m_maximizeIcon);
|
||||
m_minMaxAction->setText(m_maximised ? tr("Minimize Output Pane")
|
||||
: tr("Maximize Output Pane"));
|
||||
m_minMaxAction->setText(m_minMaxButton->toolTip());
|
||||
}
|
||||
|
||||
void OutputPaneManager::buttonTriggered()
|
||||
|
||||
@@ -79,7 +79,7 @@ QString CodePasterSettingsPage::displayCategory() const
|
||||
|
||||
QIcon CodePasterSettingsPage::categoryIcon() const
|
||||
{
|
||||
return QIcon(); // TODO: Add icon for code paster category
|
||||
return QIcon();
|
||||
}
|
||||
|
||||
QWidget *CodePasterSettingsPage::createPage(QWidget *parent)
|
||||
|
||||
@@ -36,6 +36,7 @@ namespace CodePaster {
|
||||
namespace Constants {
|
||||
const char * const CPASTER_SETTINGS_CATEGORY = "X.CPaster";
|
||||
const char * const CPASTER_SETTINGS_TR_CATEGORY = QT_TRANSLATE_NOOP("CodePaster", "Code Pasting");
|
||||
const char * const SETTINGS_CATEGORY_CPASTER_ICON = ":/core/images/category_cpaster.png";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -106,7 +106,7 @@ QString SettingsPage::displayCategory() const
|
||||
|
||||
QIcon SettingsPage::categoryIcon() const
|
||||
{
|
||||
return QIcon(); // TODO: Icon for CodePaster
|
||||
return QIcon(QLatin1String(Constants::SETTINGS_CATEGORY_CPASTER_ICON));
|
||||
}
|
||||
|
||||
QWidget *SettingsPage::createPage(QWidget *parent)
|
||||
|
||||
@@ -321,7 +321,7 @@ QString CppFileSettingsPage::displayCategory() const
|
||||
|
||||
QIcon CppFileSettingsPage::categoryIcon() const
|
||||
{
|
||||
return QIcon(); // TODO: Icon for C++ or move into category
|
||||
return QIcon(QLatin1String(Constants::SETTINGS_CATEGORY_CPP_ICON));
|
||||
}
|
||||
|
||||
QWidget *CppFileSettingsPage::createPage(QWidget *parent)
|
||||
|
||||
@@ -54,6 +54,7 @@ const char * const CPP_SETTINGS_ID = "File Naming";
|
||||
const char * const CPP_SETTINGS_NAME = QT_TRANSLATE_NOOP("CppTools", "File Naming");
|
||||
const char * const CPP_SETTINGS_CATEGORY = "I.C++";
|
||||
const char * const CPP_SETTINGS_TR_CATEGORY = QT_TRANSLATE_NOOP("CppTools", "C++");
|
||||
const char * const SETTINGS_CATEGORY_CPP_ICON = ":/core/images/category_cpp.png";
|
||||
|
||||
} // namespace Constants
|
||||
} // namespace CppTools
|
||||
|
||||
@@ -48,7 +48,7 @@ CheckoutWizard::CheckoutWizard(QObject *parent) :
|
||||
|
||||
QIcon CheckoutWizard::icon() const
|
||||
{
|
||||
return QIcon();
|
||||
return QIcon(QLatin1String(":/cvs/images/cvs.png"));
|
||||
}
|
||||
|
||||
QString CheckoutWizard::description() const
|
||||
|
||||
@@ -2,4 +2,7 @@
|
||||
<qresource prefix="/trolltech.cvs">
|
||||
<file>CVS.mimetypes.xml</file>
|
||||
</qresource>
|
||||
<qresource prefix="/cvs">
|
||||
<file>images/cvs.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
BIN
src/plugins/cvs/images/cvs.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
@@ -101,6 +101,7 @@ const char * const INSTALL_HANDLER = "TextEditor.FakeVimHandler";
|
||||
const char * const MINI_BUFFER = "TextEditor.FakeVimMiniBuffer";
|
||||
const char * const INSTALL_KEY = "Alt+V,Alt+V";
|
||||
const char * const SETTINGS_CATEGORY = "D.FakeVim";
|
||||
const char * const SETTINGS_CATEGORY_FAKEVIM_ICON = ":/core/images/category_fakevim.png";
|
||||
const char * const SETTINGS_ID = "A.General";
|
||||
const char * const SETTINGS_EX_CMDS_ID = "B.ExCommands";
|
||||
const char * const CMD_FILE_NEXT = "FakeVim.SwitchFileNext";
|
||||
@@ -133,7 +134,7 @@ public:
|
||||
QString displayName() const { return tr("General"); }
|
||||
QString category() const { return QLatin1String(Constants::SETTINGS_CATEGORY); }
|
||||
QString displayCategory() const { return tr("FakeVim"); }
|
||||
QIcon categoryIcon() const { return QIcon(); } // TODO: Add an icon or move into another category
|
||||
QIcon categoryIcon() const { return QIcon(QLatin1String(Constants::SETTINGS_CATEGORY_FAKEVIM_ICON)); }
|
||||
|
||||
QWidget *createPage(QWidget *parent);
|
||||
void apply() { m_group.apply(ICore::instance()->settings()); }
|
||||
|
||||
@@ -38,6 +38,11 @@
|
||||
|
||||
#include <QtGui/QIcon>
|
||||
|
||||
#include <QtGui/QApplication>
|
||||
#include <QtGui/QStyle>
|
||||
#include <QtGui/QPainter>
|
||||
#include <QtGui/QPixmap>
|
||||
|
||||
#include <QtCore/QDir>
|
||||
#include <QtCore/QFileInfo>
|
||||
#include <QtCore/QtDebug>
|
||||
@@ -93,7 +98,14 @@ GenericProjectWizard::~GenericProjectWizard()
|
||||
Core::BaseFileWizardParameters GenericProjectWizard::parameters()
|
||||
{
|
||||
Core::BaseFileWizardParameters parameters(ProjectWizard);
|
||||
parameters.setIcon(QIcon(QLatin1String(":/wizards/images/console.png")));
|
||||
// TODO do something about the ugliness of standard icons in sizes different than 16, 32, 64, 128
|
||||
{
|
||||
QPixmap icon(22, 22);
|
||||
icon.fill(Qt::transparent);
|
||||
QPainter p(&icon);
|
||||
p.drawPixmap(3, 3, 16, 16, qApp->style()->standardIcon(QStyle::SP_DirIcon).pixmap(16));
|
||||
parameters.setIcon(icon);
|
||||
}
|
||||
parameters.setDisplayName(tr("Import Existing Project"));
|
||||
parameters.setId(QLatin1String("Z.Makefile"));
|
||||
parameters.setDescription(tr("Imports existing projects that do not use qmake or CMake. "
|
||||
|
||||
@@ -47,7 +47,7 @@ CloneWizard::CloneWizard(QObject *parent) :
|
||||
|
||||
QIcon CloneWizard::icon() const
|
||||
{
|
||||
return QIcon();
|
||||
return QIcon(QLatin1String(":/git/images/git.png"));
|
||||
}
|
||||
|
||||
QString CloneWizard::description() const
|
||||
|
||||
@@ -50,3 +50,6 @@ FORMS += changeselectiondialog.ui \
|
||||
stashdialog.ui
|
||||
OTHER_FILES += ScmGit.pluginspec
|
||||
include(gitorious/gitorious.pri)
|
||||
|
||||
RESOURCES += \
|
||||
git.qrc
|
||||
|
||||
6
src/plugins/git/git.qrc
Normal file
@@ -0,0 +1,6 @@
|
||||
<RCC>
|
||||
<qresource prefix="/git">
|
||||
<file>images/git.png</file>
|
||||
<file>images/gitorious.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
@@ -75,7 +75,7 @@ GitoriousCloneWizard::GitoriousCloneWizard(QObject *parent) :
|
||||
|
||||
QIcon GitoriousCloneWizard::icon() const
|
||||
{
|
||||
return QIcon();
|
||||
return QIcon(QLatin1String(":/git/images/gitorious.png"));
|
||||
}
|
||||
|
||||
QString GitoriousCloneWizard::description() const
|
||||
|
||||
BIN
src/plugins/git/images/git.png
Normal file
|
After Width: | Height: | Size: 466 B |
BIN
src/plugins/git/images/gitorious.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
@@ -38,6 +38,7 @@ namespace Constants {
|
||||
const char * const FILTER_OPTIONS_PAGE = QT_TRANSLATE_NOOP("Locator", "Filters");
|
||||
const char * const LOCATOR_CATEGORY = "G.Locator";
|
||||
const char * const LOCATOR_TR_CATEGORY = QT_TRANSLATE_NOOP("Locator", "Locator");
|
||||
const char * const SETTINGS_CATEGORY_LOCATOR_ICON = ":/core/images/category_locator.png";
|
||||
const char * const TASK_INDEX = "Locator.Task.Index";
|
||||
|
||||
} // namespace Constants
|
||||
|
||||
@@ -71,7 +71,7 @@ QString SettingsPage::displayCategory() const
|
||||
|
||||
QIcon SettingsPage::categoryIcon() const
|
||||
{
|
||||
return QIcon(); // TODO: Icon for Locator
|
||||
return QIcon(QLatin1String(Locator::Constants::SETTINGS_CATEGORY_LOCATOR_ICON));
|
||||
}
|
||||
|
||||
QWidget *SettingsPage::createPage(QWidget *parent)
|
||||
|
||||
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -256,10 +256,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
|
||||
this, SIGNAL(fileListChanged()));
|
||||
connect(d->m_session, SIGNAL(startupProjectChanged(ProjectExplorer::Project *)),
|
||||
this, SLOT(startupProjectChanged()));
|
||||
connect(d->m_session, SIGNAL(projectAdded(ProjectExplorer::Project*)),
|
||||
this, SLOT(updatePreferredWizardKinds()));
|
||||
connect(d->m_session, SIGNAL(projectRemoved(ProjectExplorer::Project*)),
|
||||
this, SLOT(updatePreferredWizardKinds()));
|
||||
connect(d->m_session, SIGNAL(dependencyChanged(ProjectExplorer::Project*,ProjectExplorer::Project*)),
|
||||
this, SLOT(updateActions()));
|
||||
|
||||
@@ -1884,17 +1880,6 @@ void ProjectExplorerPlugin::openRecentProject()
|
||||
openProject(fileName);
|
||||
}
|
||||
|
||||
void ProjectExplorerPlugin::updatePreferredWizardKinds()
|
||||
{
|
||||
if (d->m_session->projects().count()) {
|
||||
Core::ICore::instance()->setNewItemDialogPreferredWizardKinds(
|
||||
Core::IWizard::FileWizard | Core::IWizard::ClassWizard);
|
||||
} else {
|
||||
Core::ICore::instance()->setNewItemDialogPreferredWizardKinds(
|
||||
Core::IWizard::ProjectWizard);
|
||||
}
|
||||
}
|
||||
|
||||
void ProjectExplorerPlugin::invalidateProject(Project *project)
|
||||
{
|
||||
if (debug)
|
||||
|
||||
@@ -173,7 +173,6 @@ private slots:
|
||||
void updateRecentProjectMenu();
|
||||
void openRecentProject();
|
||||
void openTerminalHere();
|
||||
void updatePreferredWizardKinds();
|
||||
|
||||
void invalidateProject(ProjectExplorer::Project *project);
|
||||
|
||||
|
||||
@@ -135,8 +135,6 @@ void DragTool::beginWithPoint(const QPointF &beginPoint)
|
||||
|
||||
void DragTool::createQmlItemNode(const ItemLibraryEntry &itemLibraryEntry, QmlItemNode parentNode, QPointF scenePos)
|
||||
{
|
||||
QmlDesignerItemLibraryDragAndDrop::CustomDragAndDrop::hide();
|
||||
|
||||
MetaInfo metaInfo = MetaInfo::global();
|
||||
|
||||
FormEditorItem *parentItem = scene()->itemForQmlItemNode(parentNode);
|
||||
@@ -151,6 +149,8 @@ void DragTool::createQmlItemNode(const ItemLibraryEntry &itemLibraryEntry, QmlIt
|
||||
nodeList.append(m_dragNode);
|
||||
view()->setSelectedQmlItemNodes(nodeList);
|
||||
m_selectionIndicator.setItems(scene()->itemsForQmlItemNodes(nodeList));
|
||||
|
||||
QmlDesignerItemLibraryDragAndDrop::CustomDragAndDrop::hide();
|
||||
}
|
||||
|
||||
void DragTool::createQmlItemNodeFromImage(const QString &imageName, QmlItemNode parentNode, QPointF scenePos)
|
||||
@@ -158,8 +158,6 @@ void DragTool::createQmlItemNodeFromImage(const QString &imageName, QmlItemNode
|
||||
if (!parentNode.isValid())
|
||||
return;
|
||||
|
||||
QmlDesignerItemLibraryDragAndDrop::CustomDragAndDrop::hide();
|
||||
|
||||
MetaInfo metaInfo = MetaInfo::global();
|
||||
|
||||
FormEditorItem *parentItem = scene()->itemForQmlItemNode(parentNode);
|
||||
@@ -171,6 +169,8 @@ void DragTool::createQmlItemNodeFromImage(const QString &imageName, QmlItemNode
|
||||
nodeList.append(m_dragNode);
|
||||
view()->setSelectedQmlItemNodes(nodeList);
|
||||
m_selectionIndicator.setItems(scene()->itemsForQmlItemNodes(nodeList));
|
||||
|
||||
QmlDesignerItemLibraryDragAndDrop::CustomDragAndDrop::hide();
|
||||
}
|
||||
|
||||
FormEditorItem* DragTool::calculateContainer(const QPointF &point, FormEditorItem * currentItem)
|
||||
@@ -256,11 +256,11 @@ void DragTool::dragMoveEvent(QGraphicsSceneDragDropEvent * event)
|
||||
QPointF scenePos = event->scenePos();
|
||||
if (m_dragNode.isValid()) {
|
||||
|
||||
FormEditorItem *parentItem = calculateContainer(event->scenePos() - QPoint(2, 2));
|
||||
FormEditorItem *parentItem = calculateContainer(event->scenePos() + QPoint(2, 2));
|
||||
if (!parentItem) { //if there is no parent any more - the use left the scene
|
||||
end(event->scenePos());
|
||||
m_dragNode.destroy(); //delete the node then
|
||||
QmlDesignerItemLibraryDragAndDrop::CustomDragAndDrop::show();
|
||||
m_dragNode.destroy(); //delete the node then
|
||||
return;
|
||||
}
|
||||
//move
|
||||
|
||||
@@ -413,7 +413,7 @@ void FormEditorView::nodeSlidedToIndex(const NodeListProperty &listProperty, int
|
||||
void FormEditorView::auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data)
|
||||
{
|
||||
QmlModelView::auxiliaryDataChanged(node, name, data);
|
||||
if (name == "invisible") {
|
||||
if (name == "invisible" && m_scene->hasItemForQmlItemNode(QmlItemNode(node))) {
|
||||
FormEditorItem *item(m_scene->itemForQmlItemNode(QmlItemNode(node)));
|
||||
bool isInvisible = data.toBool();
|
||||
item->setVisible(!isInvisible);
|
||||
|
||||
@@ -461,6 +461,7 @@ void DesignDocumentController::copySelected()
|
||||
{
|
||||
QScopedPointer<Model> model(Model::create("import Qt 4.7; Qt/Rectangle"));
|
||||
model->setMetaInfo(m_d->model->metaInfo());
|
||||
model->setFileUrl(m_d->model->fileUrl());
|
||||
|
||||
Q_ASSERT(model);
|
||||
|
||||
@@ -573,6 +574,8 @@ void DesignDocumentController::paste()
|
||||
|
||||
if (rootNode.id() == "designer__Selection") {
|
||||
QList<ModelNode> selectedNodes = rootNode.allDirectSubModelNodes();
|
||||
qDebug() << rootNode;
|
||||
qDebug() << selectedNodes;
|
||||
model->detachView(&view);
|
||||
m_d->model->attachView(&view);
|
||||
|
||||
@@ -635,7 +638,9 @@ void DesignDocumentController::paste()
|
||||
QString defaultProperty(targetNode.metaInfo().defaultProperty());
|
||||
|
||||
scatterItem(pastedNode, targetNode);
|
||||
if (targetNode.nodeListProperty(defaultProperty).isValid()) {
|
||||
targetNode.nodeListProperty(defaultProperty).reparentHere(pastedNode);
|
||||
}
|
||||
|
||||
view.setSelectedModelNodes(QList<ModelNode>() << pastedNode);
|
||||
}
|
||||
|
||||
@@ -85,7 +85,11 @@ public:
|
||||
static void hide()
|
||||
{ instance()->m_isVisible = false; }
|
||||
static void show()
|
||||
{ instance()->m_isVisible = true; }
|
||||
{
|
||||
instance()->m_isVisible = true;
|
||||
instance()->m_widget->show();
|
||||
instance()->m_widget->update();
|
||||
}
|
||||
static bool isVisible()
|
||||
{ return instance()->m_isVisible; }
|
||||
|
||||
|
||||
@@ -0,0 +1,143 @@
|
||||
#include "declarativewidgetview.h"
|
||||
|
||||
#include <qdeclarative.h>
|
||||
#include <QDeclarativeItem>
|
||||
#include <QDeclarativeEngine>
|
||||
#include <QDeclarativeContext>
|
||||
#include <QPointer>
|
||||
|
||||
namespace QmlDesigner {
|
||||
|
||||
class DeclarativeWidgetViewPrivate
|
||||
{
|
||||
public:
|
||||
DeclarativeWidgetViewPrivate(DeclarativeWidgetView *view)
|
||||
: q(view), root(0), component(0) {}
|
||||
~DeclarativeWidgetViewPrivate() { delete root; }
|
||||
void execute();
|
||||
|
||||
DeclarativeWidgetView *q;
|
||||
|
||||
QPointer<QWidget> root;
|
||||
QUrl source;
|
||||
QDeclarativeEngine engine;
|
||||
QDeclarativeComponent *component;
|
||||
};
|
||||
|
||||
void DeclarativeWidgetViewPrivate::execute()
|
||||
{
|
||||
if (root) {
|
||||
delete root;
|
||||
root = 0;
|
||||
}
|
||||
if (component) {
|
||||
delete component;
|
||||
component = 0;
|
||||
}
|
||||
if (!source.isEmpty()) {
|
||||
component = new QDeclarativeComponent(&engine, source, q);
|
||||
if (!component->isLoading()) {
|
||||
q->continueExecute();
|
||||
} else {
|
||||
QObject::connect(component, SIGNAL(statusChanged(QDeclarativeComponent::Status)), q, SLOT(continueExecute()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DeclarativeWidgetView::DeclarativeWidgetView(QWidget *parent) :
|
||||
QWidget(parent), d(new DeclarativeWidgetViewPrivate(this))
|
||||
{
|
||||
}
|
||||
|
||||
DeclarativeWidgetView::~DeclarativeWidgetView()
|
||||
{
|
||||
delete d;
|
||||
}
|
||||
|
||||
QUrl DeclarativeWidgetView::source() const
|
||||
{
|
||||
return d->source;
|
||||
}
|
||||
|
||||
void DeclarativeWidgetView::setSource(const QUrl& url)
|
||||
{
|
||||
d->source = url;
|
||||
d->execute();
|
||||
}
|
||||
|
||||
QDeclarativeEngine* DeclarativeWidgetView::engine()
|
||||
{
|
||||
return &d->engine;
|
||||
}
|
||||
|
||||
QWidget *DeclarativeWidgetView::rootWidget() const
|
||||
{
|
||||
return d->root;
|
||||
}
|
||||
|
||||
QDeclarativeContext* DeclarativeWidgetView::rootContext()
|
||||
{
|
||||
return d->engine.rootContext();
|
||||
}
|
||||
|
||||
DeclarativeWidgetView::Status DeclarativeWidgetView::status() const
|
||||
{
|
||||
if (!d->component)
|
||||
return DeclarativeWidgetView::Null;
|
||||
|
||||
return DeclarativeWidgetView::Status(d->component->status());
|
||||
}
|
||||
|
||||
|
||||
void DeclarativeWidgetView::continueExecute()
|
||||
{
|
||||
|
||||
disconnect(d->component, SIGNAL(statusChanged(QDeclarativeComponent::Status)), this, SLOT(continueExecute()));
|
||||
|
||||
if (d->component->isError()) {
|
||||
QList<QDeclarativeError> errorList = d->component->errors();
|
||||
foreach (const QDeclarativeError &error, errorList) {
|
||||
qWarning() << error;
|
||||
}
|
||||
emit statusChanged(status());
|
||||
return;
|
||||
}
|
||||
|
||||
QObject *obj = d->component->create();
|
||||
|
||||
if(d->component->isError()) {
|
||||
QList<QDeclarativeError> errorList = d->component->errors();
|
||||
foreach (const QDeclarativeError &error, errorList) {
|
||||
qWarning() << error;
|
||||
}
|
||||
emit statusChanged(status());
|
||||
return;
|
||||
}
|
||||
|
||||
setRootWidget(qobject_cast<QWidget *>(obj));
|
||||
emit statusChanged(status());
|
||||
}
|
||||
|
||||
void DeclarativeWidgetView::setRootWidget(QWidget *widget)
|
||||
{
|
||||
if (d->root == widget)
|
||||
return;
|
||||
|
||||
window()->setAttribute(Qt::WA_OpaquePaintEvent, false);
|
||||
window()->setAttribute(Qt::WA_NoSystemBackground, false);
|
||||
widget->setParent(this);
|
||||
if (isVisible()) {
|
||||
widget->setVisible(true);
|
||||
}
|
||||
resize(widget->size());
|
||||
d->root = widget;
|
||||
|
||||
if (d->root) {
|
||||
QSize initialSize = d->root->size();
|
||||
if (initialSize != size()) {
|
||||
resize(initialSize);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} //QmlDesigner
|
||||
@@ -0,0 +1,55 @@
|
||||
#ifndef DECLARATIVEWIDGETVIEW_H
|
||||
#define DECLARATIVEWIDGETVIEW_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QUrl>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QDeclarativeEngine;
|
||||
class QDeclarativeContext;
|
||||
class QDeclarativeError;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
namespace QmlDesigner {
|
||||
|
||||
class DeclarativeWidgetViewPrivate;
|
||||
|
||||
class DeclarativeWidgetView : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_PROPERTY(QUrl source READ source WRITE setSource DESIGNABLE true)
|
||||
public:
|
||||
explicit DeclarativeWidgetView(QWidget *parent = 0);
|
||||
|
||||
virtual ~DeclarativeWidgetView();
|
||||
|
||||
QUrl source() const;
|
||||
void setSource(const QUrl&);
|
||||
|
||||
QDeclarativeEngine* engine();
|
||||
QDeclarativeContext* rootContext();
|
||||
|
||||
QWidget *rootWidget() const;
|
||||
|
||||
enum Status { Null, Ready, Loading, Error };
|
||||
Status status() const;
|
||||
|
||||
signals:
|
||||
void statusChanged(DeclarativeWidgetView::Status);
|
||||
|
||||
protected:
|
||||
virtual void setRootWidget(QWidget *);
|
||||
|
||||
private Q_SLOTS:
|
||||
void continueExecute();
|
||||
|
||||
private:
|
||||
friend class DeclarativeWidgetViewPrivate;
|
||||
DeclarativeWidgetViewPrivate *d;
|
||||
|
||||
};
|
||||
|
||||
} //QmlDesigner
|
||||
|
||||
#endif // DECLARATIVEWIDGETVIEW_H
|
||||
@@ -81,13 +81,13 @@ const int collapseButtonOffset = 114;
|
||||
namespace QmlDesigner {
|
||||
|
||||
PropertyEditor::NodeType::NodeType(PropertyEditor *propertyEditor) :
|
||||
m_view(new QDeclarativeView), m_propertyEditorTransaction(new PropertyEditorTransaction(propertyEditor)), m_dummyPropertyEditorValue(new PropertyEditorValue()),
|
||||
m_view(new DeclarativeWidgetView), m_propertyEditorTransaction(new PropertyEditorTransaction(propertyEditor)), m_dummyPropertyEditorValue(new PropertyEditorValue()),
|
||||
m_contextObject(new PropertyEditorContextObject())
|
||||
{
|
||||
Q_ASSERT(QFileInfo(":/images/button_normal.png").exists());
|
||||
|
||||
m_view->setResizeMode(QDeclarativeView::SizeRootObjectToView);
|
||||
QDeclarativeContext *ctxt = m_view->rootContext();
|
||||
m_view->engine()->setOutputWarningsToStandardError(debug);
|
||||
m_dummyPropertyEditorValue->setValue("#000000");
|
||||
ctxt->setContextProperty("dummyBackendValue", m_dummyPropertyEditorValue.data());
|
||||
m_contextObject->setBackendValues(&m_backendValuesPropertyMap);
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
#define QmlPropertyView_h
|
||||
|
||||
#include <qmlmodelview.h>
|
||||
#include <QDeclarativeView>
|
||||
#include <declarativewidgetview.h>
|
||||
#include <QHash>
|
||||
#include <QDeclarativePropertyMap>
|
||||
#include <QStackedWidget>
|
||||
@@ -67,7 +67,7 @@ class PropertyEditor: public QmlModelView
|
||||
void initialSetup(const QString &typeName, const QUrl &qmlSpecificsFile, PropertyEditor *propertyEditor);
|
||||
void setValue(const QmlObjectNode &fxObjectNode, const QString &name, const QVariant &value);
|
||||
|
||||
QDeclarativeView *m_view;
|
||||
DeclarativeWidgetView *m_view;
|
||||
Internal::QmlAnchorBindingProxy m_backendAnchorBinding;
|
||||
DesignerPropertyMap<PropertyEditorValue> m_backendValuesPropertyMap;
|
||||
QScopedPointer<PropertyEditorTransaction> m_propertyEditorTransaction;
|
||||
|
||||
@@ -18,7 +18,8 @@ SOURCES += propertyeditor.cpp \
|
||||
originwidget.cpp \
|
||||
siblingcombobox.cpp \
|
||||
propertyeditortransaction.cpp \
|
||||
propertyeditorcontextobject.cpp
|
||||
propertyeditorcontextobject.cpp \
|
||||
declarativewidgetview.cpp
|
||||
|
||||
HEADERS += propertyeditor.h \
|
||||
qmlanchorbindingproxy.h \
|
||||
@@ -38,7 +39,8 @@ HEADERS += propertyeditor.h \
|
||||
siblingcombobox.h \
|
||||
propertyeditortransaction.h \
|
||||
designerpropertymap.h \
|
||||
propertyeditorcontextobject.h
|
||||
propertyeditorcontextobject.h \
|
||||
declarativewidgetview.h
|
||||
QT += declarative
|
||||
RESOURCES += propertyeditor.qrc
|
||||
FORMS += behaviordialog.ui
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
namespace QmlDesigner {
|
||||
|
||||
PropertyEditorContextObject::PropertyEditorContextObject(QObject *parent) :
|
||||
QObject(parent), m_backendValues(0), m_isBaseState(false), m_selectionChanged(false)
|
||||
QObject(parent), m_isBaseState(false), m_selectionChanged(false), m_backendValues(0)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "propertyeditortransaction.h"
|
||||
#include <QTimerEvent>
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
|
||||
#include "invalidnodeinstanceexception.h"
|
||||
#include <QGraphicsObject>
|
||||
#include "private/qgraphicsitem_p.h"
|
||||
#include <QStyleOptionGraphicsItem>
|
||||
#include "nodemetainfo.h"
|
||||
|
||||
namespace QmlDesigner {
|
||||
@@ -153,13 +155,21 @@ bool GraphicsObjectNodeInstance::equalGraphicsItem(QGraphicsItem *item) const
|
||||
return item == graphicsObject();
|
||||
}
|
||||
|
||||
void initOption(QGraphicsItem *item, QStyleOptionGraphicsItem *option, const QTransform &transform)
|
||||
{
|
||||
QGraphicsItemPrivate *privateItem = QGraphicsItemPrivate::get(item);
|
||||
privateItem->initStyleOption(option, transform, QRegion());
|
||||
}
|
||||
|
||||
void GraphicsObjectNodeInstance::paintRecursively(QGraphicsItem *graphicsItem, QPainter *painter) const
|
||||
{
|
||||
if (graphicsItem->isVisible()) {
|
||||
painter->save();
|
||||
painter->setTransform(graphicsItem->itemTransform(graphicsItem->parentItem()), true);
|
||||
painter->setOpacity(graphicsItem->opacity() * painter->opacity());
|
||||
graphicsItem->paint(painter, 0);
|
||||
QStyleOptionGraphicsItem option;
|
||||
initOption(graphicsItem, &option, painter->transform());
|
||||
graphicsItem->paint(painter, &option);
|
||||
foreach(QGraphicsItem *childItem, graphicsItem->childItems()) {
|
||||
paintRecursively(childItem, painter);
|
||||
}
|
||||
@@ -171,12 +181,16 @@ void GraphicsObjectNodeInstance::paint(QPainter *painter) const
|
||||
{
|
||||
painter->save();
|
||||
Q_ASSERT(graphicsObject());
|
||||
if (hasContent())
|
||||
graphicsObject()->paint(painter, 0);
|
||||
if (hasContent()) {
|
||||
QStyleOptionGraphicsItem option;
|
||||
initOption(graphicsObject(), &option, painter->transform());
|
||||
graphicsObject()->paint(painter, &option);
|
||||
|
||||
}
|
||||
foreach(QGraphicsItem *graphicsItem, graphicsObject()->childItems()) {
|
||||
QGraphicsObject *graphicsObject = qgraphicsitem_cast<QGraphicsObject*>(graphicsItem);
|
||||
if (graphicsObject && !nodeInstanceView()->hasInstanceForObject(graphicsObject))
|
||||
if (graphicsObject
|
||||
&& !nodeInstanceView()->hasInstanceForObject(graphicsObject))
|
||||
paintRecursively(graphicsItem, painter);
|
||||
}
|
||||
|
||||
|
||||
@@ -184,7 +184,15 @@ QObject *NodeMetaInfo::createInstance(QDeclarativeContext *context) const
|
||||
newContext->setParent(object);
|
||||
} else {
|
||||
// primitive
|
||||
object = QDeclarativeMetaType::qmlType(typeName().toAscii(), majorVersion(), minorVersion())->create();
|
||||
QDeclarativeType *type = QDeclarativeMetaType::qmlType(typeName().toAscii(), majorVersion(), minorVersion());
|
||||
if (type) {
|
||||
object = type->create();
|
||||
} else {
|
||||
qWarning() << "QuickDesigner: Cannot create an object of type"
|
||||
<< QString("%1 %2,%3").arg(typeName(), majorVersion(), minorVersion())
|
||||
<< "- type isn't known to declarative meta type system";
|
||||
}
|
||||
|
||||
if (object && context)
|
||||
QDeclarativeEngine::setContextForObject(object, context);
|
||||
}
|
||||
|
||||
@@ -127,8 +127,8 @@ QmlItemNode QmlModelView::createQmlItemNodeFromImage(const QString &imageName, c
|
||||
|
||||
newNode.setId(id);
|
||||
if (!currentState().isBaseState()) {
|
||||
newNode.modelNode().variantProperty("visible") = false;
|
||||
newNode.setVariantProperty("visible", true);
|
||||
newNode.modelNode().variantProperty("opacity") = 0;
|
||||
newNode.setVariantProperty("opacity", 1);
|
||||
}
|
||||
|
||||
Q_ASSERT(newNode.isValid());
|
||||
@@ -180,8 +180,8 @@ QmlItemNode QmlModelView::createQmlItemNode(const ItemLibraryEntry &itemLibraryE
|
||||
}
|
||||
|
||||
if (!currentState().isBaseState()) {
|
||||
newNode.modelNode().variantProperty("visible") = false;
|
||||
newNode.setVariantProperty("visible", true);
|
||||
newNode.modelNode().variantProperty("opacity") = 0;
|
||||
newNode.setVariantProperty("opacity", 1);
|
||||
}
|
||||
|
||||
Q_ASSERT(newNode.isValid());
|
||||
|
||||
@@ -384,8 +384,6 @@ public:
|
||||
v.convert(QVariant::Double);
|
||||
} else if (property->asStringValue()) {
|
||||
// nothing to do
|
||||
} else if (property->asEasingCurveNameValue()) {
|
||||
// nothing to do
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
</itemlibraryentry>
|
||||
</node>
|
||||
|
||||
<node name="Qt/WebView" icon=":/fxplugin/images/webview-icon16.png">
|
||||
<node name="org.webkit/WebView" icon=":/fxplugin/images/webview-icon16.png">
|
||||
<propertyDefaultValue name="width" type="int" defaultValue="300"/>
|
||||
<propertyDefaultValue name="height" type="int" defaultValue="300"/>
|
||||
<itemlibraryentry name="Web View" category="Qt - Widgets" icon=":/fxplugin/images/webview-icon.png">
|
||||
|
||||
@@ -63,6 +63,8 @@ const char * const QML_ITEMSPACING_KEY = "ItemSpacing";
|
||||
const char * const QML_SNAPMARGIN_KEY = "SnapMargin";
|
||||
enum { QML_OPENDESIGNMODE_DEFAULT = 0 }; // 0 for text mode, 1 for design mode
|
||||
|
||||
const char * const SETTINGS_CATEGORY_QML_ICON = ":/core/images/category_qml.png";
|
||||
|
||||
namespace Internal {
|
||||
enum { debug = 0 };
|
||||
}
|
||||
|
||||
@@ -95,7 +95,7 @@ QString SettingsPage::displayCategory() const
|
||||
|
||||
QIcon SettingsPage::categoryIcon() const
|
||||
{
|
||||
return QIcon(); // TODO: Icon for QML or move into other category (Designer?)
|
||||
return QIcon(QLatin1String(Constants::SETTINGS_CATEGORY_QML_ICON));
|
||||
}
|
||||
|
||||
QWidget *SettingsPage::createPage(QWidget *parent)
|
||||
|
||||
@@ -38,6 +38,8 @@
|
||||
#include <qmljs/qmljsscanner.h>
|
||||
#include <qmljs/qmljsevaluate.h>
|
||||
#include <qmljs/qmljscompletioncontextfinder.h>
|
||||
#include <qmljs/qmljslink.h>
|
||||
#include <qmljs/qmljsscopebuilder.h>
|
||||
|
||||
#include <texteditor/basetexteditor.h>
|
||||
|
||||
@@ -595,6 +597,31 @@ static bool isLiteral(AST::Node *ast)
|
||||
return false;
|
||||
}
|
||||
|
||||
void CodeCompletion::addCompletions(const QHash<QString, const Interpreter::Value *> &newCompletions,
|
||||
const QIcon &icon)
|
||||
{
|
||||
QHashIterator<QString, const Interpreter::Value *> it(newCompletions);
|
||||
while (it.hasNext()) {
|
||||
it.next();
|
||||
|
||||
TextEditor::CompletionItem item(this);
|
||||
item.text = it.key();
|
||||
item.icon = icon;
|
||||
m_completions.append(item);
|
||||
}
|
||||
}
|
||||
|
||||
void CodeCompletion::addCompletions(const QStringList &newCompletions,
|
||||
const QIcon &icon)
|
||||
{
|
||||
foreach (const QString &text, newCompletions) {
|
||||
TextEditor::CompletionItem item(this);
|
||||
item.text = text;
|
||||
item.icon = icon;
|
||||
m_completions.append(item);
|
||||
}
|
||||
}
|
||||
|
||||
int CodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
|
||||
{
|
||||
m_editor = editor;
|
||||
@@ -627,10 +654,11 @@ int CodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
|
||||
|
||||
Interpreter::Engine interp;
|
||||
Interpreter::Context context(&interp);
|
||||
Link link(&context, document, snapshot, m_modelManager->importPaths());
|
||||
|
||||
// Set up the current scope chain.
|
||||
QList<AST::Node *> astPath = semanticInfo.astPath(editor->position());
|
||||
context.build(astPath, document, snapshot, m_modelManager->importPaths());
|
||||
ScopeBuilder scopeBuilder(document, &context);
|
||||
scopeBuilder.push(semanticInfo.astPath(editor->position()));
|
||||
|
||||
// Search for the operator that triggered the completion.
|
||||
QChar completionOperator;
|
||||
@@ -660,24 +688,12 @@ int CodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
|
||||
enumerateProperties.setGlobalCompletion(true);
|
||||
enumerateProperties.setEnumerateGeneratedSlots(true);
|
||||
|
||||
QHashIterator<QString, const Interpreter::Value *> it(enumerateProperties(qmlScopeType));
|
||||
while (it.hasNext()) {
|
||||
it.next();
|
||||
addCompletions(enumerateProperties(qmlScopeType), symbolIcon);
|
||||
addCompletions(enumerateProperties(context.scopeChain().qmlTypes), symbolIcon);
|
||||
|
||||
TextEditor::CompletionItem item(this);
|
||||
item.text = it.key();
|
||||
item.icon = symbolIcon;
|
||||
m_completions.append(item);
|
||||
}
|
||||
|
||||
it = enumerateProperties(context.scopeChain().qmlTypes);
|
||||
while (it.hasNext()) {
|
||||
it.next();
|
||||
|
||||
TextEditor::CompletionItem item(this);
|
||||
item.text = it.key();
|
||||
item.icon = symbolIcon;
|
||||
m_completions.append(item);
|
||||
if (ScopeBuilder::isPropertyChangesObject(&context, qmlScopeType)
|
||||
&& context.scopeChain().qmlScopeObjects.size() == 2) {
|
||||
addCompletions(enumerateProperties(context.scopeChain().qmlScopeObjects.first()), symbolIcon);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -713,60 +729,33 @@ int CodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
|
||||
// It's a global completion.
|
||||
EnumerateProperties enumerateProperties(&context);
|
||||
enumerateProperties.setGlobalCompletion(true);
|
||||
QHashIterator<QString, const Interpreter::Value *> it(enumerateProperties());
|
||||
while (it.hasNext()) {
|
||||
it.next();
|
||||
|
||||
TextEditor::CompletionItem item(this);
|
||||
item.text = it.key();
|
||||
item.icon = symbolIcon;
|
||||
m_completions.append(item);
|
||||
}
|
||||
addCompletions(enumerateProperties(), symbolIcon);
|
||||
}
|
||||
|
||||
if (doJsKeywordCompletion) {
|
||||
// add js keywords
|
||||
foreach (const QString &word, Scanner::keywords()) {
|
||||
TextEditor::CompletionItem item(this);
|
||||
item.text = word;
|
||||
item.icon = keywordIcon;
|
||||
m_completions.append(item);
|
||||
}
|
||||
addCompletions(Scanner::keywords(), keywordIcon);
|
||||
}
|
||||
|
||||
// add qml extra words
|
||||
if (doQmlKeywordCompletion && isQmlFile) {
|
||||
static QStringList qmlWords;
|
||||
static QStringList qmlWordsAlsoInJs;
|
||||
|
||||
if (qmlWords.isEmpty()) {
|
||||
qmlWords << QLatin1String("property")
|
||||
<< QLatin1String("readonly")
|
||||
//<< QLatin1String("readonly")
|
||||
<< QLatin1String("signal")
|
||||
<< QLatin1String("import");
|
||||
}
|
||||
|
||||
foreach (const QString &word, qmlWords) {
|
||||
TextEditor::CompletionItem item(this);
|
||||
item.text = word;
|
||||
item.icon = keywordIcon;
|
||||
m_completions.append(item);
|
||||
if (qmlWordsAlsoInJs.isEmpty()) {
|
||||
qmlWordsAlsoInJs << QLatin1String("default")
|
||||
<< QLatin1String("function");
|
||||
}
|
||||
|
||||
if (!doJsKeywordCompletion) {
|
||||
{
|
||||
TextEditor::CompletionItem item(this);
|
||||
item.text = QLatin1String("default");
|
||||
item.icon = keywordIcon;
|
||||
m_completions.append(item);
|
||||
}
|
||||
|
||||
{
|
||||
TextEditor::CompletionItem item(this);
|
||||
item.text = QLatin1String("function");
|
||||
item.icon = keywordIcon;
|
||||
m_completions.append(item);
|
||||
}
|
||||
}
|
||||
addCompletions(qmlWords, keywordIcon);
|
||||
if (!doJsKeywordCompletion)
|
||||
addCompletions(qmlWordsAlsoInJs, keywordIcon);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -787,15 +776,7 @@ int CodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
|
||||
|
||||
if (value && completionOperator == QLatin1Char('.')) { // member completion
|
||||
EnumerateProperties enumerateProperties(&context);
|
||||
QHashIterator<QString, const Interpreter::Value *> it(enumerateProperties(value));
|
||||
while (it.hasNext()) {
|
||||
it.next();
|
||||
|
||||
TextEditor::CompletionItem item(this);
|
||||
item.text = it.key();
|
||||
item.icon = symbolIcon;
|
||||
m_completions.append(item);
|
||||
}
|
||||
addCompletions(enumerateProperties(value), symbolIcon);
|
||||
} else if (value && completionOperator == QLatin1Char('(') && m_startPosition == editor->position()) {
|
||||
// function completion
|
||||
if (const Interpreter::FunctionValue *f = value->asFunctionValue()) {
|
||||
|
||||
@@ -39,6 +39,12 @@ namespace TextEditor {
|
||||
class ITextEditable;
|
||||
}
|
||||
|
||||
namespace QmlJS {
|
||||
namespace Interpreter {
|
||||
class Value;
|
||||
}
|
||||
}
|
||||
|
||||
namespace QmlJSEditor {
|
||||
|
||||
class ModelManagerInterface;
|
||||
@@ -74,6 +80,11 @@ private:
|
||||
bool maybeTriggersCompletion(TextEditor::ITextEditable *editor);
|
||||
bool isDelimiter(const QChar &ch) const;
|
||||
|
||||
void addCompletions(const QHash<QString, const QmlJS::Interpreter::Value *> &newCompletions,
|
||||
const QIcon &icon);
|
||||
void addCompletions(const QStringList &newCompletions,
|
||||
const QIcon &icon);
|
||||
|
||||
ModelManagerInterface *m_modelManager;
|
||||
TextEditor::ITextEditable *m_editor;
|
||||
int m_startPosition;
|
||||
|
||||
@@ -39,6 +39,8 @@
|
||||
#include <qmljs/qmljscheck.h>
|
||||
#include <qmljs/qmljsevaluate.h>
|
||||
#include <qmljs/qmljsdocument.h>
|
||||
#include <qmljs/qmljslink.h>
|
||||
#include <qmljs/qmljsscopebuilder.h>
|
||||
#include <qmljs/parser/qmljsastvisitor_p.h>
|
||||
#include <qmljs/parser/qmljsast_p.h>
|
||||
#include <qmljs/parser/qmljsengine_p.h>
|
||||
@@ -1007,8 +1009,9 @@ TextEditor::BaseTextEditor::Link QmlJSTextEditor::findLinkAt(const QTextCursor &
|
||||
|
||||
Interpreter::Engine interp;
|
||||
Interpreter::Context context(&interp);
|
||||
context.build(semanticInfo.astPath(cursorPosition), semanticInfo.document,
|
||||
semanticInfo.snapshot, m_modelManager->importPaths());
|
||||
QmlJS::Link linkedSnapshot(&context, semanticInfo.document, semanticInfo.snapshot, m_modelManager->importPaths());
|
||||
ScopeBuilder scopeBuilder(semanticInfo.document, &context);
|
||||
scopeBuilder.push(semanticInfo.astPath(cursorPosition));
|
||||
|
||||
Evaluate check(&context);
|
||||
const Interpreter::Value *value = check.reference(node);
|
||||
@@ -1018,7 +1021,7 @@ TextEditor::BaseTextEditor::Link QmlJSTextEditor::findLinkAt(const QTextCursor &
|
||||
if (! (value && value->getSourceLocation(&fileName, &line, &column)))
|
||||
return Link();
|
||||
|
||||
Link link;
|
||||
BaseTextEditor::Link link;
|
||||
link.fileName = fileName;
|
||||
link.line = line;
|
||||
link.column = column - 1; // adjust the column
|
||||
|
||||
@@ -39,6 +39,8 @@
|
||||
#include <qmljs/qmljsbind.h>
|
||||
#include <qmljs/qmljsevaluate.h>
|
||||
#include <qmljs/qmljsinterpreter.h>
|
||||
#include <qmljs/qmljslink.h>
|
||||
#include <qmljs/qmljsscopebuilder.h>
|
||||
#include <qmljs/parser/qmljsast_p.h>
|
||||
#include <texteditor/itexteditor.h>
|
||||
#include <texteditor/basetexteditor.h>
|
||||
@@ -172,7 +174,9 @@ void HoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, int p
|
||||
|
||||
Interpreter::Engine interp;
|
||||
Interpreter::Context context(&interp);
|
||||
context.build(astPath, qmlDocument, snapshot, m_modelManager->importPaths());
|
||||
Link link(&context, qmlDocument, snapshot, m_modelManager->importPaths());
|
||||
ScopeBuilder scopeBuilder(qmlDocument, &context);
|
||||
scopeBuilder.push(astPath);
|
||||
|
||||
Evaluate check(&context);
|
||||
const Interpreter::Value *value = check(node);
|
||||
|
||||
BIN
src/plugins/qmlprojectmanager/images/qml_wizard.png
Normal file
|
After Width: | Height: | Size: 556 B |
@@ -3,5 +3,6 @@
|
||||
<file>QmlProject.mimetypes.xml</file>
|
||||
<file>images/qmlfolder.png</file>
|
||||
<file>images/qmlproject.png</file>
|
||||
<file>images/qml_wizard.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
@@ -35,6 +35,9 @@
|
||||
|
||||
#include <QtGui/QIcon>
|
||||
|
||||
#include <QtGui/QPainter>
|
||||
#include <QtGui/QPixmap>
|
||||
|
||||
#include <QtCore/QTextStream>
|
||||
#include <QtCore/QCoreApplication>
|
||||
|
||||
@@ -58,7 +61,14 @@ QmlProjectApplicationWizard::~QmlProjectApplicationWizard()
|
||||
Core::BaseFileWizardParameters QmlProjectApplicationWizard::parameters()
|
||||
{
|
||||
Core::BaseFileWizardParameters parameters(ProjectWizard);
|
||||
parameters.setIcon(QIcon(QLatin1String(":/wizards/images/console.png")));
|
||||
// TODO: provide icons in correct size
|
||||
{
|
||||
QPixmap icon(22, 22);
|
||||
icon.fill(Qt::transparent);
|
||||
QPainter p(&icon);
|
||||
p.drawPixmap(3, 3, 16, 16, QPixmap(QLatin1String(Constants::QML_WIZARD_ICON)));
|
||||
parameters.setIcon(icon);
|
||||
}
|
||||
parameters.setDisplayName(tr("Qt QML Application"));
|
||||
parameters.setId(QLatin1String("QA.QML Application"));
|
||||
parameters.setDescription(tr("Creates a Qt QML application project with a single QML file containing the main view.\n\n"
|
||||
|
||||
@@ -53,6 +53,7 @@ const char *const TASK_CATEGORY_QML = "Task.Category.Qml";
|
||||
const char * const QML_WIZARD_CATEGORY = "F.Projects"; // (after Qt)
|
||||
const char * const QML_WIZARD_TR_SCOPE = "QmlProjectManager";
|
||||
const char * const QML_WIZARD_TR_CATEGORY = QT_TRANSLATE_NOOP("QmlProjectManager", "Qt Quick Project");
|
||||
const char * const QML_WIZARD_ICON = ":/qmlproject/images/qml_wizard.png";
|
||||
|
||||
// Env variables for inspector
|
||||
const char * const E_QML_DEBUG_SERVER_PORT = "QML_DEBUG_SERVER_PORT";
|
||||
|
||||
@@ -40,6 +40,11 @@
|
||||
|
||||
#include <QtGui/QIcon>
|
||||
|
||||
#include <QtGui/QApplication>
|
||||
#include <QtGui/QStyle>
|
||||
#include <QtGui/QPainter>
|
||||
#include <QtGui/QPixmap>
|
||||
|
||||
#include <QtCore/QDir>
|
||||
#include <QtCore/QtDebug>
|
||||
#include <QtCore/QCoreApplication>
|
||||
@@ -100,7 +105,14 @@ QmlProjectImportWizard::~QmlProjectImportWizard()
|
||||
Core::BaseFileWizardParameters QmlProjectImportWizard::parameters()
|
||||
{
|
||||
Core::BaseFileWizardParameters parameters(ProjectWizard);
|
||||
parameters.setIcon(QIcon(QLatin1String(":/wizards/images/console.png")));
|
||||
// TODO do something about the ugliness of standard icons in sizes different than 16, 32, 64, 128
|
||||
{
|
||||
QPixmap icon(22, 22);
|
||||
icon.fill(Qt::transparent);
|
||||
QPainter p(&icon);
|
||||
p.drawPixmap(3, 3, 16, 16, qApp->style()->standardIcon(QStyle::SP_DirIcon).pixmap(16));
|
||||
parameters.setIcon(icon);
|
||||
}
|
||||
parameters.setDisplayName(tr("Import Existing Qt QML Directory"));
|
||||
parameters.setId(QLatin1String("QI.QML Import"));
|
||||
parameters.setDescription(tr("Creates a QML project from an existing directory of QML files."));
|
||||
|
||||