Compare commits

...

30 Commits

Author SHA1 Message Date
xiaokai 1eaa67539f 6月20日版本
2 years ago
xiaokai a74a94e388 软件设计规格说明书(6月20日)
2 years ago
xiaokai 52ec132ef0 软件设计需求模型
2 years ago
xiaokai b8373a5098 软件设计规格说明书(6月20日)
2 years ago
xiaokai d9e5eb84f0 软件设计规格说明书(6月20日)
2 years ago
xiaokai d249cb04f9 功耗优化分析代码
2 years ago
xiaokai c40973f02c 设计规格说明书修改
2 years ago
xiaokai fc9cfc3919 设计规格说明书修改
2 years ago
pya9flm25 2360ea86c1 重写软件设计规格说明书
2 years ago
xiaokai cdf07c0394 重写软件设计规格说明书
2 years ago
xiaokai 81735bbc53 调整文件
2 years ago
pya9flm25 ae4cb70283 中期汇报
2 years ago
xiaokai dbbddccdb0 代码更新
2 years ago
xiaokai 0ad53f48d3 中期验收汇报PPT
2 years ago
xiaokai 19a77f786f 平台构思与描述缺现有资料
2 years ago
xiaokai 6d6d6e78be 设计规格说明书需完善
2 years ago
xiaokai dc8bc30623 需求规格说明书
2 years ago
xiaokai a008aa6d2b 需求模型
2 years ago
xiaokai 2abe378316 项目代码更新
2 years ago
xiaokai 530dcaeb5e 汇报PPT
2 years ago
xiaokai bf80a9f1aa 1
2 years ago
xiaokai f04180ddf3 Merge branch 'Liu' of https://bdgit.educoder.net/pya9flm25/UWE
2 years ago
xiaokai 4f012c42d8 ppt
2 years ago
xiaokai ac1eceece2 11
2 years ago
xiaokai e91fce984c 修改命名
2 years ago
xiaokai 22d7e4ca88 Merge branch 'master' of https://bdgit.educoder.net/pya9flm25/UWE
2 years ago
xiaokai e58c2e818a 软件设计文档
2 years ago
xiaokai 53b3e06bb9 文档修改
2 years ago
xiaokai 89981276ac 软件设计文档
2 years ago
pya9flm25 ffd8f976b1 Initial commit
2 years ago

@ -0,0 +1,2 @@
# UWE

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,26 @@
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
finddialog.cpp \
main.cpp \
mainwindow.cpp
HEADERS += \
finddialog.h \
mainwindow.h
FORMS += \
mainwindow.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

@ -0,0 +1,427 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 5.0.2, 2023-05-30T21:54:35. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{9ae9cba5-5ab5-4831-839f-36c967a0caed}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.CTest">false</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
<value type="QString">-fno-delayed-template-parsing</value>
</valuelist>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.BuildSystem</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">4</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
<valuemap type="QVariantMap" key="CppEditor.QuickFix">
<value type="bool" key="UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.12.12 MinGW 32-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.12.12 MinGW 32-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.51212.win32_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:\QTUWE\UWEproject\build-UWE_file-Desktop_Qt_5_12_12_MinGW_32_bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">E:/QTUWE/UWEproject/build-UWE_file-Desktop_Qt_5_12_12_MinGW_32_bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:\QTUWE\UWEproject\build-UWE_file-Desktop_Qt_5_12_12_MinGW_32_bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">E:/QTUWE/UWEproject/build-UWE_file-Desktop_Qt_5_12_12_MinGW_32_bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:\QTUWE\UWEproject\build-UWE_file-Desktop_Qt_5_12_12_MinGW_32_bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">E:/QTUWE/UWEproject/build-UWE_file-Desktop_Qt_5_12_12_MinGW_32_bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">0</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:E:/QTUWE/UWEproject/UWE_file/UWE_file.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">E:/QTUWE/UWEproject/UWE_file/UWE_file.pro</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">false</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">false</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">E:/QTUWE/UWEproject/build-UWE_file-Desktop_Qt_5_12_12_MinGW_32_bit-Debug</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.1</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.12.12 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.12.12 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.51212.win64_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:\QTUWE\UWEproject\build-UWE_file-Desktop_Qt_5_12_12_MinGW_64_bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">E:/QTUWE/UWEproject/build-UWE_file-Desktop_Qt_5_12_12_MinGW_64_bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:\QTUWE\UWEproject\build-UWE_file-Desktop_Qt_5_12_12_MinGW_64_bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">E:/QTUWE/UWEproject/build-UWE_file-Desktop_Qt_5_12_12_MinGW_64_bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:\QTUWE\UWEproject\build-UWE_file-Desktop_Qt_5_12_12_MinGW_64_bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">E:/QTUWE/UWEproject/build-UWE_file-Desktop_Qt_5_12_12_MinGW_64_bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">0</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">2</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

@ -0,0 +1,135 @@
#include "finddialog.h"
#include "mainwindow.h"
#include <QEvent>
#include <QTextCursor>
#include <QMessageBox>
#include <QtWidgets/QPlainTextEdit>
#include <QtGui>
#include <QtWidgets>
#include <QPalette>
FindDialog::FindDialog(QWidget *parent, QPlainTextEdit* pText)
: QDialog(parent, Qt::WindowCloseButtonHint | Qt::Drawer)
{
initControl();
connectSlot();
setLayout(&m_layout);
setWindowTitle("Find");
setPlainTextEdit(pText);
}
void FindDialog::initControl()
{
m_findLbl.setText("Find What:");
m_findBtn.setText("Find Next");
m_closeBtn.setText("Close");
m_matchChkBx.setText("Match Case");
m_backwardBtn.setText("Backward");
m_forwardBtn.setText("Forward");
m_forwardBtn.setChecked(true);
m_radioGrpBx.setTitle("Direction");
m_hbLayout.addWidget(&m_forwardBtn);
m_hbLayout.addWidget(&m_backwardBtn);
m_radioGrpBx.setLayout(&m_hbLayout);
m_layout.setSpacing(10);
m_layout.addWidget(&m_findLbl, 0, 0);
m_layout.addWidget(&m_findEdit, 0, 1);
m_layout.addWidget(&m_findBtn, 0, 2);
m_layout.addWidget(&m_matchChkBx, 1, 0);
m_layout.addWidget(&m_radioGrpBx, 1, 1);
m_layout.addWidget(&m_closeBtn, 1, 2);
}
void FindDialog::connectSlot()
{
connect(&m_findBtn, SIGNAL(clicked()), this, SLOT(onFindClicked()));
connect(&m_closeBtn, SIGNAL(clicked()), this, SLOT(onCloseClicked()));
}
void FindDialog::setPlainTextEdit(QPlainTextEdit* pText)
{
m_pText = pText;
}
QPlainTextEdit* FindDialog::getPlainTextEdit()
{
return m_pText;
}
bool FindDialog::event(QEvent* evt)
{
if( evt->type() == QEvent::Close )
{
hide();
return true;
}
return QDialog::event(evt);
}
void FindDialog::onFindClicked()
{
QString target = m_findEdit.text();
if( (m_pText != NULL) && (target != "") )
{
QString text = m_pText->toPlainText();
QTextCursor c = m_pText->textCursor();
int index = -1;
if( m_forwardBtn.isChecked() )
{
index = text.indexOf(target, c.position(), m_matchChkBx.isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive);
if( index >= 0 )
{
c.setPosition(index);
c.setPosition(index + target.length(), QTextCursor::KeepAnchor);
m_pText->setTextCursor(c);
QTextCharFormat highlight;
highlight.setBackground(Qt::red);
c.mergeCharFormat(highlight);
m_pText->mergeCurrentCharFormat(highlight);
}
}
if( m_backwardBtn.isChecked() )
{
index = text.lastIndexOf(target, c.position() - text.length() - 1, m_matchChkBx.isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive);
if( index >= 0 )
{
c.setPosition(index + target.length());
c.setPosition(index, QTextCursor::KeepAnchor);
m_pText->setTextCursor(c);
QTextCharFormat highlight;
highlight.setBackground(Qt::red);
c.mergeCharFormat(highlight);
m_pText->mergeCurrentCharFormat(highlight);
}
}
if( index < 0 )
{
QMessageBox msg(this);
msg.setWindowTitle("Find");
msg.setText("Can not find \"" + target + "\" any more...");
msg.setIcon(QMessageBox::Information);
msg.setStandardButtons(QMessageBox::Ok);
msg.exec();
}
}
}
void FindDialog::onCloseClicked()
{
close();
}

@ -0,0 +1,53 @@
#ifndef _FINDDIALOG_H_
#define _FINDDIALOG_H_
#include <QDialog>
#include <QGridLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QRadioButton>
#include <QCheckBox>
#include <QGroupBox>
#include <QPlainTextEdit>
#include <QPointer>
class FindDialog : public QDialog
{
Q_OBJECT
protected:
QGroupBox m_radioGrpBx;
QGridLayout m_layout;
QHBoxLayout m_hbLayout;
QLabel m_findLbl;
QLineEdit m_findEdit;
QPushButton m_findBtn;
QPushButton m_closeBtn;
QCheckBox m_matchChkBx;
QRadioButton m_forwardBtn;
QRadioButton m_backwardBtn;
QPointer<QPlainTextEdit> m_pText; // FindDialog 聚合使用 QPlainTextEdit
QSharedPointer<FindDialog> m_pFindDlg;
QTextCharFormat m_format;
void initControl();
void connectSlot();
protected slots:
void onFindClicked();
void onCloseClicked();
public:
explicit FindDialog(QWidget* parent = 0, QPlainTextEdit* pText = 0);
void setPlainTextEdit(QPlainTextEdit* pText);
void highlightText(QPlainTextEdit* pText);
QPlainTextEdit* getPlainTextEdit();
bool event(QEvent* evt);
};
#endif // _FINDDIALOG_H_

@ -0,0 +1,11 @@
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}

@ -0,0 +1,116 @@
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>//QFileDialog类是Qt提供的一个用于指定操作文件的对话框小部件,使用前要先导入
#include <QMessageBox>//弹出对话框
#include <QDebug>//调试
#include<QBitmap>
#include <QFile>
#include "finddialog.h"
MainWindow::MainWindow(QWidget *parent):
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->actionFind,SIGNAL(triggered()),this,SLOT(onFindClicked()));
connect(ui->newAction,&QAction::triggered,this,&MainWindow::newActionSlot);//创建链接newAcion发出取地址信号(newAction),triggered 单击信号this类mainwindow窗口处理信号
//mainwindow.h创建槽函数
//newActionSlot创建链接
connect(ui->openAction,&QAction::triggered,this,&MainWindow::openActionSlot);//打开文件的槽点链接
connect(ui->saveAction,&QAction::triggered,this,&MainWindow::saveActionSlot);
connect(ui->changeAction,&QAction::triggered,this,&MainWindow::changeActionSlot);
m_pFindDlg = QSharedPointer<FindDialog>(new FindDialog(this, &plainTextEdit));
m_format.setBackground(Qt::yellow);
m_format.setForeground(Qt::red);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actionFind_clicked()
{
QPlainTextEdit* pText = ui->plainTextEdit;
FindDialog dlg(this,pText);
dlg.exec();
}
void MainWindow::newActionSlot()
{
ui->textEdit->clear();
this->setWindowTitle("新建文本文档.txt");
//ctrl+R运行
//实现新建文本文档功能
//之后仿照实现openAction(打开文件)等功能,添加槽函数
}
void MainWindow::openActionSlot()
{
//getOpenFileName和getOpenFileNames一个是获取单个文件路径另一个是多个文件
//获取单个文件的本地或者网络路径
//QUrl getOpenFileUrl(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options(), const QStringList &supportedSchemes = QStringList())
//获取多个文件的本地或者网络路径
//QList<QUrl> getOpenFileUrls(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options(), const QStringList &supportedSchemes = QStringList())
QString fileName=QFileDialog::getOpenFileName(this,"选择一个文件",
QCoreApplication::applicationFilePath(),
"images(*.png *jpeg *bmp);;text files(*.txt *.doc *.docx);;video files(*.avi *.mp4 *.wmv);;*.cpp;;All files(*.*)");//静态函数用以返回用户当前选择的目录,(&dir默认打开文件目录需要获取路径Linux可以直接输入window需要用QCoreApplication::applicationFilePath()获取)
if (fileName.isEmpty())
{
QMessageBox::warning(this,"警告","请选择一个文件");
}
else
{
//返回文件路径
//qDebug()<<fileName;
QFile file(fileName);//创建文件对象
file.open(QIODevice::ReadWrite);//设定打开文件模式,否则会报错
QByteArray ba=file.readAll();
ui->textEdit->setText(QString(ba));//toPlainText获取string文本
file.close();
}
}
void MainWindow::saveActionSlot()
{
QString fileName=QFileDialog::getSaveFileName(this,"选择一个文件",QCoreApplication::applicationFilePath());
if(fileName.isEmpty())
{
QMessageBox::warning(this,"警告","请选择一个文件");
}
else
{
QFile file(fileName);
file.open(QIODevice::WriteOnly);
//ui->textEdit->toPlainText();//获取打开文件的内容 String格式
QByteArray ba;//进行格式转换,变成字节格式
ba.append(ui->textEdit->toPlainText());
file.write(ba);
file.close();
}
}
//事件鼠标点击键盘点击在客户端都叫做事件通过捕捉事件来实现一些响应事件被封装成QEvent类
void MainWindow::changeActionSlot(){
}
void MainWindow::keyPressEvent(QKeyEvent *k)
{
if(k->modifiers()==Qt::ControlModifier&&k->key()==Qt::Key_S)//modifiers()表示按键的附加信息
{
saveActionSlot();
}
if(k->modifiers()==Qt::ControlModifier&&k->key()==Qt::Key_F){
on_actionFind_clicked();
}
}
void MainWindow::mousePressEvent(QMouseEvent *m)
{
//QPoint类被用于获取位置
QPoint pt=m->pos();
qDebug()<<pt;
if(m->button()==Qt::LeftButton)
{
qDebug()<<"左键被按下";
}
else if(m->button()==Qt::RightButton)
{
qDebug()<<"右键被按下";
}
}

@ -0,0 +1,49 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDebug>
#include <QFileDialog> //QFileDialog类是Qt提供的一个用于指定操作文件的对话框小部件,使用前要先导入
#include <QKeyEvent>
#include <QMouseEvent>
#include <finddialog.h>
#include <QTextCharFormat>
//头文件用来写 类的声明 (包括类的成员的声明和方法声明)、函数原型、#define 常数等
//必须按照以下格式来写
/*
#ifndef MYCLASS_H
#define MYCLASS_H
// code here
#endif*/
//源文件主要写实现头文件中已经声明的那些函数的具体代码。需要注意的是,开头必须#include一下实现的头文件以及要用到的头文件
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void keyPressEvent(QKeyEvent *k);
void mousePressEvent(QMouseEvent *m);
private slots://创建槽函数 slot插槽
void newActionSlot();//新建文件的槽点 创建之后进入mainwindow.cpp继续处理信息编辑
void openActionSlot();//打开文件的槽点
void saveActionSlot();
void changeActionSlot();
void on_actionFind_clicked();
private:
Ui::MainWindow *ui;
QPlainTextEdit plainTextEdit; // mainEditor为文本编辑框对象
QSharedPointer<FindDialog> m_pFindDlg; // MainWindow 组合使用 FindDialog 和 QPlainTextEdit
QTextCharFormat m_format;
};
#endif // MAINWINDOW_H !!!必须要有的东西

@ -0,0 +1,109 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout">
<item row="3" column="0">
<widget class="QPlainTextEdit" name="plainTextEdit"/>
</item>
<item row="1" column="0">
<widget class="QPlainTextEdit" name="plainTextEdit_2"/>
</item>
<item row="6" column="0">
<widget class="QPushButton" name="actionFind">
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QTextEdit" name="textEdit"/>
</item>
<item row="2" column="0">
<widget class="QTextEdit" name="textEdit_2">
<property name="html">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:16pt; font-weight:600; font-style:italic; text-decoration: underline; vertical-align:sub;&quot;&gt;sdasdasda&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>26</height>
</rect>
</property>
<widget class="QMenu" name="menu_F">
<property name="title">
<string>文件(&amp;F)</string>
</property>
<addaction name="newAction"/>
<addaction name="openAction"/>
<addaction name="saveAction"/>
<addaction name="changeAction"/>
</widget>
<widget class="QMenu" name="menu_N">
<property name="title">
<string>编译(&amp;E)</string>
</property>
</widget>
<widget class="QMenu" name="menu_B">
<property name="title">
<string>构建(&amp;B)</string>
</property>
</widget>
<widget class="QMenu" name="menu_C">
<property name="title">
<string>修改(C)</string>
</property>
</widget>
<addaction name="menu_F"/>
<addaction name="menu_N"/>
<addaction name="menu_B"/>
<addaction name="menu_C"/>
</widget>
<widget class="QStatusBar" name="statusbar"/>
<action name="newAction">
<property name="text">
<string>新建(&amp;N)</string>
</property>
</action>
<action name="openAction">
<property name="text">
<string>打开(&amp;O)</string>
</property>
</action>
<action name="saveAction">
<property name="text">
<string>另存为(&amp;S)</string>
</property>
</action>
<action name="changeAction">
<property name="text">
<string>修改(C)</string>
</property>
</action>
</widget>
<resources/>
<connections/>
</ui>

@ -0,0 +1,63 @@
#include "widget.h"
#include <QPalette>
#include <QMessageBox>
Widget::Widget(QWidget *parent)
: QWidget(parent), m_button(this), m_edit(this), m_label(this)
{
m_label.move(10, 10);
m_label.resize(150, 25);
m_label.setText("Test");
m_edit.move(10, 45);
m_edit.resize(150, 25);
m_button.move(10, 80);
m_button.resize(150, 25);
m_button.setText("Test");
connect(&m_button, SIGNAL(clicked()), this, SLOT(onButtonClicked()));
connect(&m_edit, SIGNAL(textEdited(const QString&)), this, SLOT(onTextChange(const QString&)));
QPalette p = m_button.palette(); // 获取m_button的调色板
p.setColor(QPalette::Active, QPalette::ButtonText, Qt::red); // 设置激活时,按钮文本为红色
p.setColor(QPalette::Inactive, QPalette::ButtonText, Qt::red); // 设置非激活时,按钮文本为红色
m_button.setPalette(p); // 给m_button设置调色板
p = m_edit.palette();
p.setColor(QPalette::Active, QPalette::Highlight, Qt::red); // 高亮背景为红色
p.setColor(QPalette::Active, QPalette::HighlightedText, Qt::white); // 高亮文本为白色
p.setColor(QPalette::Inactive, QPalette::Highlight, Qt::yellow); // 高亮背景为黄色
p.setColor(QPalette::Inactive, QPalette::HighlightedText, Qt::green); // 高亮文本为白色
m_edit.setPalette(p);
}
// 点击按钮更改m_label的调色板方案
void Widget::onButtonClicked()
{
QPalette p = m_label.palette();
p.setColor(QPalette::Active, QPalette::WindowText, Qt::green);
p.setColor(QPalette::Inactive, QPalette::WindowText, Qt::green);
m_label.setPalette(p);
}
void Widget::onTextChange(const QString&)
{
if(m_edit.text().count() > 6)
{
m_edit.selectAll();
QMessageBox::information(this, "tip", "字符超出限制", QMessageBox::Ok);
}
}
Widget::~Widget()
{
}

@ -0,0 +1,24 @@
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
class Widget : public QWidget
{
Q_OBJECT
QPushButton m_button;
QLineEdit m_edit;
QLabel m_label;
protected slots:
void onButtonClicked();
void onTextChange(const QString&);
public:
Widget(QWidget *parent = 0);
~Widget();
};
#endif // WIDGET_H

@ -0,0 +1,954 @@
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
#include <QFileDialog>
#include <QDebug>
#include <QPushButton>
#include <QStackedLayout>
#include <QListWidget>
#include <QHBoxLayout>
#include <QLabel>
#include <QFormLayout>
#include <QLineEdit>
#include <QWidgetAction>
#include <QScrollBar>
#include <fstream>
#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <time.h>
#include <string.h>
#include <QMessageBox>
#include <QComboBox>
#include <QTableView>
#include <QSplitter>
using namespace std;
// 是å<C2AF>¦å<C2A6>¯ç”¨QMainWindow自带的è<E2809E>œå<C593>•æ <20>
//#define USE_DEFAULT_MENU_BAR
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->variate_map = new Variate_Map;
// 建ç«é¡¹ç®ä¸Žä¸»ç•Œé<C592>¢çš„è<E2809E>”ç³»
this->work_project = new Work_Project;
this->work_project->father = this;
// syn界é<C592>¢å¸ƒå±€è®¾ç½®
qmainwindow_syn = new QMainWindow();
QWidget *widget_syn = new QWidget();
QHBoxLayout *layout_syn = new QHBoxLayout(widget_syn);
layout_syn->addWidget(ui->widget);
widget_syn->setLayout(layout_syn);
qmainwindow_syn->setCentralWidget(widget_syn);
qmainwindow_syn->addDockWidget(Qt::TopDockWidgetArea, ui->dockWidget_src_syn);
// qmainwindow_syn->addDockWidget(Qt::BottomDockWidgetArea, ui->dockWidget_cmd_syn);
// QVBoxLayout *layout = new QVBoxLayout(widget_syn);
// layout->addWidget(ui->widget, 0, Qt::AlignLeft);
// QVBoxLayout *layout = new QVBoxLayout;
// layout->addWidget(ui->widget);
// QHBoxLayout *hLayout = new QHBoxLayout;
// hLayout->addWidget(ui->widget);
// QWidget *centralWidget = new QWidget;
// centralWidget->setLayout(hLayout);
// qmainwindow_syn->setCentralWidget(ui->widget);
// layout1->addWidget(button);
// ui->widget->setLayout(layout1);
// ui->widget->setGeometry(0, 0, 150, 600);
ui->tabWidget_flow->addTab(qmainwindow_syn, "Syn");
ui->tabWidget_flow->removeTab(0);
// pt界é<C592>¢å¸ƒå±€è®¾ç½®
qmainwindow_pt = new QMainWindow();
qmainwindow_pt->setCentralWidget(new QWidget());
qmainwindow_pt->addDockWidget(Qt::TopDockWidgetArea, ui->dockWidget_src_pt);
qmainwindow_pt->addDockWidget(Qt::BottomDockWidgetArea, ui->dockWidget_cmd_pt);
ui->tabWidget_flow->removeTab(0);
ui->tabWidget_flow->addTab(qmainwindow_pt, "PT");
// 在å<C2A8>³ä¾§æµ®åŠ¨çª—å<E28094>£ä¸­æ·»åŠ report窗å<E28094>£
// dockWidget_report_syn = new QDockWidget(tr("report"), this);
// dockWidget_report_syn->setFeatures(QDockWidget::DockWidgetMovable|QDockWidget::DockWidgetClosable);
// dockWidget_report_syn->setVisible(true);
// addDockWidget(Qt::RightDockWidgetArea, dockWidget_report_syn);
// qmainwindow_syn->tabifyDockWidget(ui->dockWidget_src_syn, dockWidget_report_syn);
// ui->dockWidget_src_syn->raise();
// 在左侧浮动窗å<E28094>£ä¸­æ·»åŠ module窗å<E28094>£
tabifyDockWidget(ui->dockWidget_file, ui->dockWidget_module);
ui->dockWidget_file->raise();
//指定è<C5A1>œå<C593>•æ <20>
#ifdef USE_DEFAULT_MENU_BAR
//æ·»åŠ è<>œå<C593>•æ <20>(æ­¤å¤„æ·»åŠ ä¸ºçš„ä¸ºQMainWindow自带的è<E2809E>œå<C593>•)
pMenuBar = this->menuBar();
#else
//æ·»åŠ è‡ªå®šä¹‰è<E280B0>œå<C593>
pMenuBar = new QMenuBar(this);
#endif
//定义è<E280B0>œå<C593>•项
//(&n)代表快æ<C2AB>·æ¹å¼<C3A5>,当窗å<E28094>£èŽ·å¾—ç„¦ç¹æ—¶æŒ‰alt+nå<6E>³å<C2B3>¯æ‰“开“æµè¯•â€<C3A2>è<EFBFBD>œå<C593>•项
pMenu1 = new QMenu("文件(&n)",this);
pMenu2 = new QMenu("执行",this);
pMenu3 = new QMenu("工具",this);
//定义å­<C3A5>è<EFBFBD>œå<C593>
//(&s)为å­<C3A5>è<EFBFBD>œå<C593>•å¿«æ<C2AB>·é”®ï¼Œå½“打开该è<C2A5>œå<C593>•项å<C2B9>Žï¼ŒæŒ‰ä¸â€˜s’键å<C2AE>³å<C2B3>¯å“<C3A5>应
pAction_newproject = new QAction("新建项目(&s)",this);
//æ–°å»ºä¸€ä¸ªå¸¦å›¾æ ‡çš„è<E2809E>œå<C593>•é¡¹ï¼Œå¾æ ‡ä½¿ç”¨èµ„æº<C3A6>æ‡ä»¶ä¸­çš„资æº<C3A6>
pAction_openproject = new QAction(QIcon(":/new/prefix1/resource/soccer_ball.ico"),"打开项目",this);
pAction_save = new QAction("ä¿<C3A4>å­˜",this);
pAction_syn = new QAction("run syn(&y)",this);
pAction_parameter_config = new QAction("å<>æ•°é…<C3A9>ç½®",this);
pActionTest5 = new QAction("æµè¯•5(&M)",this);
pActionTest6 = new QAction("æµè¯•6",this);
//å°†è<E280A0>œå<C593>•é¡¹æ·»åŠ åˆ°å­<C3A5>è<EFBFBD>œå<C593>
pMenu1->addAction(pAction_newproject);
pMenu1->addAction(pAction_openproject);
//在è<C2A8>œå<C593>•项ä¹é—´æ·»åŠ åˆ†å‰²çº¿
pMenu1->addSeparator();
pMenu1->addAction(pAction_save);
pMenu2->addAction(pAction_parameter_config);
pMenu2->addAction(pAction_syn);
pMenu3->addAction(pActionTest5);
pMenu3->addAction(pActionTest6);
//å°†å­<C3A5>è<EFBFBD>œå<C593>•æ·»åŠ åˆ°è<C2B0>œå<C593>•æ <20>
pMenuBar->addMenu(pMenu1);
pMenuBar->addMenu(pMenu2);
pMenuBar->addMenu(pMenu3);
// 终端窗å<E28094>£
ui->pushButton_run_cmd_syn->setFocus();
ui->pushButton_run_cmd_syn->setShortcut(Qt::Key_Return);
m_process_bash = new QProcess;
m_process_bash->start("bash");
m_process_bash->waitForStarted();
m_process_bash->write("cd / \n");
// 设置module列表
this->model_module = new QStandardItemModel;
model_module->setHorizontalHeaderLabels(QStringList()<<"module name"<<"state");
this->ui->treeView_module->setModel(model_module);
this->ui->treeView_module->setColumnWidth(0, 200);
this->ui->treeView_module->setColumnWidth(1, 50);
QMenu *menu_module = new QMenu(this);
QAction *pAction_newmodule = new QAction("new module", this);
QAction *pAction_delmodule = new QAction("delete module", this);
menu_module->addAction(pAction_newmodule);
menu_module->addAction(pAction_delmodule);
ui->treeView_module->setContextMenuPolicy(Qt::CustomContextMenu);
// 建ç«ä¿¡å<C2A1>·æ§½è¿žæŽ¥ï¼Œå¤„ç<E2809E>†moduleæ 形列表å<C2A8>³é”®è<C2AE>œå<C593>•äºä»¶
connect(ui->treeView_module, &QTreeView::customContextMenuRequested, this, [=](const QPoint &pos) {
// 显示å<C2BA>³é”®è<C2AE>œå<C593>
menu_module->popup(ui->treeView_module->viewport()->mapToGlobal(pos));
});
// new mdoule槽连接
connect(pAction_newmodule, &QAction::triggered, this, &MainWindow::New_module);
#ifndef USE_DEFAULT_MENU_BAR
//当ä¸<C3A4>使用QMainWindow自带的è<E2809E>œå<C593>•æ <20>时,必须è¦<C3A8>åŠ ä¸Šæ­¤è¡Œ
setMenuBar(pMenuBar);
#endif
//æ·»åŠ è<>œå<C593>•å“<C3A5>应函数
connect(pAction_newproject, &QAction::triggered, this->work_project, &Work_Project::New_Project_1);
connect(pAction_openproject,&QAction::triggered,this,&MainWindow::OpenProject);
connect(pAction_parameter_config, &QAction::triggered, this, &MainWindow::Parameter_Config);
connect(m_process_bash, &QProcess::readyReadStandardOutput, this, &MainWindow::readBashStandardOutputInfo);
connect(m_process_bash, &QProcess::readyReadStandardError, this, &MainWindow::readBashStandardErrorInfo);
}
// 打开项ç®å“<C3A5>应函数
void MainWindow::OpenProject()
{
this->work_project->uwe_project_path = QFileDialog::getExistingDirectory(this, "打开项目", "/home/UWE/zj");
chdir(work_project->uwe_project_path.toStdString().data());
work_project->Get_Work_config();
//è®¾ç½®æ ‘å½¢æ–‡ä»¶åˆ—è¡¨
this->model_file = new QFileSystemModel;
this->model_file->setRootPath(this->work_project->uwe_project_path);
this->ui->treeView_file->setModel(this->model_file);
this->ui->treeView_file->setRootIndex(this->model_file->index(this->work_project->uwe_project_path));
this->ui->treeView_file->setHeaderHidden(true);
this->ui->treeView_file->setColumnHidden(1, true);
this->ui->treeView_file->setColumnHidden(2, true);
this->ui->treeView_file->setColumnHidden(3, true);
connect(this->ui->treeView_file, &QTreeView::clicked, this, &MainWindow::TreeClicked);
//终端进入工作项目
string cmd_cd = "cd " + work_project->uwe_project_path.toStdString() + "\n pwd \n";
this->m_process_bash->write(cmd_cd.data());
}
MainWindow::~MainWindow()
{
delete ui;
}
string get_current_date();
// å<>æ•°é…<C3A9>ç½®å“<C3A5>应函数
void MainWindow::Parameter_Config()
{
this->variate_map->add_variate("TCLPATH", ".");
this->variate_map->add_variate("DCWORK", "./dc.work");
this->variate_map->add_variate("current_date", get_current_date());
//this->variate_map->Generate_Config_File();
this->ui->textEdit_cmd_syn->append("Parameter config completed!\n");
}
// æ°å»ºé¡¹ç®1å“<C3A5>应函数
void Work_Project::New_Project_1()
{
QDialog *qdialog = new QDialog;
qdialog->setWindowTitle("新建项目");
qdialog->setFixedSize(800, 450);
QHBoxLayout *layout = new QHBoxLayout(qdialog);
QListWidget *listWidget = new QListWidget;
listWidget->setMinimumWidth(150);
listWidget->setFont(QFont("宋体",14));
listWidget->addItem("Project1");
listWidget->addItem("");
QWidget *widget1 = new QWidget, *widget2 = new QWidget;
widget1->setMaximumHeight(350); widget2->setMaximumHeight(350);
QLabel *lab1 = new QLabel("åˆå»ºé¡¹ç®æµ<C3A6>ç¨ä¸»è¦<C3A8>包æ¬å¯¼å…¥é¡¹ç®è·¯å¾„ã€<C3A3>导入代ç <20>\n路径ã€<C3A3>选æ©é¡¶å±æ¨¡å<C2A1>—", widget1);
lab1->setFont(QFont("宋体", 15));
lab1->setWordWrap(true);
lab1->adjustSize();
lab1->setMinimumSize(500, 100);
QLabel *lab2 = new QLabel("", widget2);
QStackedLayout *stackedLayout = new QStackedLayout;
stackedLayout->addWidget(widget1);
stackedLayout->addWidget(widget2);
layout->addWidget(listWidget, 2);
layout->addLayout(stackedLayout, 3);
qdialog->setLayout(layout);
QPushButton *button_next = new QPushButton("下一步", qdialog);
button_next->move(568, 400);
QPushButton *button_cancel = new QPushButton("å<>消", qdialog);
button_cancel->move(675, 400);
QObject::connect(listWidget, &QListWidget::currentRowChanged, stackedLayout, &QStackedLayout::setCurrentIndex);
QObject::connect(button_next, &QPushButton::clicked, qdialog, &QDialog::close);
QObject::connect(button_next, &QPushButton::clicked, this, &Work_Project::New_Project_2);
QObject::connect(button_cancel, &QPushButton::clicked, qdialog, &QDialog::close);
qdialog->exec();
}
// æ°å»ºé¡¹ç®2å“<C3A5>应函数(æ°å»ºé¡¹ç®2对è¯<C3A8>框)
void Work_Project::New_Project_2()
{
QDialog *qdialog = new QDialog;
qdialog->setWindowTitle("新建项目");
qdialog->setFixedSize(800,450);
//æ·»åŠ è¡¨æ ¼å¸ƒå±€
QFormLayout* layout = new QFormLayout();
layout->setRowWrapPolicy(QFormLayout::DontWrapRows);
edit_uwe_project_path = new QLineEdit();
edit_uwe_project_name = new QLineEdit();
layout->addRow("项目路径:", edit_uwe_project_path);
layout->addRow("æ°å»ºé¡¹ç®å<C2AE><C3A5>ç§°:", edit_uwe_project_name);
// 选择路径按钮
QPushButton *button_work_project_path = new QPushButton(edit_uwe_project_path);
button_work_project_path->setText("......");
button_work_project_path->setCursor(Qt::ArrowCursor);
QWidgetAction* action = new QWidgetAction(edit_uwe_project_path);
action->setDefaultWidget(button_work_project_path);
edit_uwe_project_path->addAction(action, QLineEdit::TrailingPosition);
// å°†å¸ƒå±€æ·»åŠ åˆ°å¯¹è¯<C3A8>框
qdialog->setLayout(layout);
// æ“<C3A6>作按键
QPushButton *button_next = new QPushButton("下一步", qdialog);
button_next->move(568, 400);
QPushButton *button_back = new QPushButton("上一步", qdialog);
button_back->move(675, 400);
// 按键å“<C3A5>应信å<C2A1>·æ§½å‡½æ•°
connect(button_work_project_path, &QPushButton::clicked, [=](){
this->uwe_project_path = QFileDialog::getExistingDirectory(0, "选择目录", "/home/UWE/zj");
edit_uwe_project_path->setText(uwe_project_path);
});
connect(button_next, &QPushButton::clicked, qdialog, &QDialog::close);
connect(button_next, &QPushButton::clicked, this, &Work_Project::New_setup_lib_path);
QObject::connect(button_back, &QPushButton::clicked, qdialog, &QDialog::close);
QObject::connect(button_back, &QPushButton::clicked, this, &Work_Project::New_Project_1);
// 显示对è¯<C3A8>框
qdialog->exec();
}
// lib_path setup设置界é<C592>¢
void Work_Project::New_setup_lib_path()
{
// ä¿<C3A4>å­˜UWE项ç®ä¿¡æ<C2A1>¯
uwe_project_name = edit_uwe_project_name->text();
uwe_project_path = edit_uwe_project_path->text();
// æ°å»ºå¯¹è¯<C3A8>框
QDialog *qdialog = new QDialog;
qdialog->setWindowTitle("库路径é…<C3A9>ç½®");
qdialog->setFixedSize(800,400);
// æ°å»ºmy_lib_path列表
QListWidget *qlistwidget_lib_path = new QListWidget(qdialog);
qlistwidget_lib_path->resize(600, 350);
// 妿žœlist_lib_pathä¸<C3A4>为空(å<CB86>³ä¸Šä¸€æ­¥é€€åžï¼‰
if (!list_lib_path.isEmpty()){
foreach(QString lib_path, list_lib_path)
qlistwidget_lib_path->addItem(lib_path);
}
// æ·»åŠ æ·»åŠ è·¯å¾„, åˆ é™¤è·¯å¾„ï¼Œä¸‹ä¸€æ­¥ï¼Œä¸Šä¸€æ­¥æŒ‰é”®
QPushButton *button_addpath = new QPushButton("æ·»åŠ è·¯å¾„", qdialog);
button_addpath->move(650, 100);
QPushButton *button_delpath = new QPushButton("åˆ é™¤è·¯å¾„", qdialog);
button_delpath->move(650, 160);
QPushButton *button_next = new QPushButton("下一步", qdialog);
button_next->move(670, 270);
QPushButton *button_previous = new QPushButton("上一步", qdialog);
button_previous->move(670, 310);
// add path按键å“<C3A5>应
connect(button_addpath, &QPushButton::clicked, [=](){
QString lib_path = QFileDialog::getExistingDirectory(0, "选择库路径", "/home/UWE/zj", QFileDialog::ShowDirsOnly);
if (!list_lib_path.contains(lib_path)){
qlistwidget_lib_path->addItem(lib_path);
list_lib_path.append(lib_path);
}
});
// del path按键å“<C3A5>应
connect(button_delpath, &QPushButton::clicked, [=](){
QListWidgetItem* selectedItem = qlistwidget_lib_path->currentItem();
if (selectedItem != nullptr) {
QString lib_path = selectedItem->text();
list_lib_path.removeOne(lib_path);
qlistwidget_lib_path->takeItem(qlistwidget_lib_path->row(selectedItem));
delete selectedItem;
}
});
// next step按键å“<C3A5>应
connect(button_next, &QPushButton::clicked, qdialog, &QDialog::close);
connect(button_next, &QPushButton::clicked, this, &Work_Project::New_setup_target_library);
// previous step按键å“<C3A5>应
connect(button_previous, &QPushButton::clicked, qdialog, &QDialog::close);
connect(button_previous, &QPushButton::clicked, this, &Work_Project::New_Project_2);
// 显示对è¯<C3A8>框
qdialog->exec();
}
// 从lib_path中æ<C2AD><C3A6>å<EFBFBD>lib 函数
void Work_Project::Extract_lib()
{
// lib_pathä¸<C3A4>为空
if (!list_lib_path.isEmpty()){
// é<><C3A9>历所有lib_path,æ<C592><C3A6>å<EFBFBD>其中的lib
foreach (QString lib_path, list_lib_path){
QDir dir(lib_path);
QFileInfoList list = dir.entryInfoList();
for (int i = 0; i < list.size(); ++i) {
QFileInfo fileInfo = list.at(i);
if (fileInfo.isFile()) {
QString fileName = fileInfo.fileName();
if ((list_lib.indexOf(fileName) == -1) && (fileName.endsWith(".db", Qt::CaseInsensitive) || fileName.endsWith(".lib", Qt::CaseInsensitive)))
list_lib.append(fileName);
QString filePath = fileInfo.filePath();
// 处ç<E2809E>†å­<C3A5>ç®å½•
} else if (fileInfo.isDir() && fileInfo.fileName() != "." && fileInfo.fileName() != "..") {
QDir subDir(fileInfo.filePath());
subDir.setFilter(QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks);
QFileInfoList subList = subDir.entryInfoList();
for (int j = 0; j < subList.size(); ++j) {
QFileInfo subFileInfo = subList.at(j);
QString fileName = subFileInfo.fileName();
if ((list_lib.indexOf(fileName) == -1) && (fileName.endsWith(".db", Qt::CaseInsensitive) || fileName.endsWith(".lib", Qt::CaseInsensitive)))
list_lib.append(fileName);
}
}
}
}
}
}
// 展示lib 函数
QTableView* Work_Project::Show_lib(QList<QString>& list_lib, QStandardItemModel *model)
{
QTableView *tableView = new QTableView();
int size = list_lib.size();
int remainder = size % 4;
for (int i = 0; i < size-remainder; i=i+4) {
QList<QStandardItem*> rowItems;
rowItems.append(new QStandardItem(list_lib[i]));
rowItems.append(new QStandardItem(list_lib[i+1]));
rowItems.append(new QStandardItem(list_lib[i+2]));
rowItems.append(new QStandardItem(list_lib[i+3]));
model->appendRow(rowItems);
}
QList<QStandardItem*> rowItems;
for (int i = size-remainder; i < size; i++)
rowItems.append(new QStandardItem(list_lib[i]));
model->appendRow(rowItems);
tableView->setModel(model);
tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
tableView->resizeColumnsToContents();
tableView->resizeRowsToContents();
tableView->setWordWrap(true);
return tableView;
}
// target_library选æ©ç•Œé<C592>¢
void Work_Project::New_setup_target_library()
{
// æ<><C3A6>å<EFBFBD>lib
Extract_lib();
// 展示lib
QStandardItemModel *model = new QStandardItemModel();
QTableView *tableView = Show_lib(list_lib, model);
// 对è¯<C3A8>框å<E280A0>ŠæŒ‰é”®
QDialog *dialog = new QDialog();
dialog->setWindowTitle("target_library选æ©");
dialog->resize(1400, 800);
QVBoxLayout *layout = new QVBoxLayout();
layout->addWidget(tableView);
QHBoxLayout *buttonLayout = new QHBoxLayout();
QPushButton *button_next = new QPushButton("确定");
QPushButton *button_previous = new QPushButton("上一步");
buttonLayout->addWidget(button_next);
buttonLayout->addWidget(button_previous);
layout->addLayout(buttonLayout);
dialog->setLayout(layout);
// å“<C3A5>应函数
connect(button_next, &QPushButton::clicked, dialog, &QDialog::accept);
connect(button_previous, &QPushButton::clicked, dialog, &QDialog::close);
connect(button_previous, &QPushButton::clicked, this, &Work_Project::New_setup_lib_path);
if (dialog->exec() == QDialog::Accepted) {
QItemSelectionModel *selectionModel = tableView->selectionModel();
QModelIndexList selectedIndexes = selectionModel->selectedIndexes();
// iterate over the selected indexes and add their rows to the set
for (const QModelIndex &index : selectedIndexes) {
QString lib = model->data(model->index(index.row(), index.column())).toString();
list_target_lib_selected.append(lib);
}
// è¿å…¥ä¸ä¸€ç•Œé<C592>¢
New_setup_link_library();
}
}
// link_library选æ©ç•Œé<C592>¢
void Work_Project::New_setup_link_library()
{
// 展示lib
QStandardItemModel *model = new QStandardItemModel();
QTableView *tableView = Show_lib(list_lib, model);
// 对è¯<C3A8>框å<E280A0>ŠæŒ‰é”®
QDialog *dialog = new QDialog();
dialog->setWindowTitle("link_library选æ©");
dialog->resize(1400, 800);
QVBoxLayout *layout = new QVBoxLayout();
layout->addWidget(tableView);
QHBoxLayout *buttonLayout = new QHBoxLayout();
QPushButton *button_next = new QPushButton("确定");
QPushButton *button_previous = new QPushButton("上一步");
buttonLayout->addWidget(button_next);
buttonLayout->addWidget(button_previous);
layout->addLayout(buttonLayout);
dialog->setLayout(layout);
// å“<C3A5>应函数
connect(button_next, &QPushButton::clicked, dialog, &QDialog::accept);
connect(button_previous, &QPushButton::clicked, dialog, &QDialog::close);
connect(button_previous, &QPushButton::clicked, this, &Work_Project::New_setup_target_library);
if (dialog->exec() == QDialog::Accepted) {
QItemSelectionModel *selectionModel = tableView->selectionModel();
QModelIndexList selectedIndexes = selectionModel->selectedIndexes();
// iterate over the selected indexes and add their rows to the set
for (const QModelIndex &index : selectedIndexes) {
QString lib = model->data(model->index(index.row(), index.column())).toString();
list_link_lib_selected.append(lib);
}
// è¿å…¥ä¸ä¸€ç•Œé<C592>¢
Src_Project_Environment_set();
}
}
// 芯片环境设置å“<C3A5>应函数
void Work_Project::Src_Project_Environment_set()
{
QDialog *qdialog = new QDialog;
qdialog->setWindowTitle("芯片项目环境设置");
qdialog->setFixedSize(800, 450);
//输入框å<E280A0>Šå…¶æŒ‰é®
QFormLayout *layout = new QFormLayout;
layout->setRowWrapPolicy(QFormLayout::DontWrapRows);
edit_src_project_path = new QLineEdit;
edit_src_path = new QLineEdit;
layout->addRow("芯片项目路径:", edit_src_project_path);
layout->addRow("代ç <20>路径", edit_src_path);
QPushButton *button_src_project_path = new QPushButton(edit_src_project_path);
QPushButton *button_src_path = new QPushButton(edit_src_path);
button_src_project_path->setText("..."); button_src_path->setText("...");
button_src_project_path->setCursor(Qt::ArrowCursor); button_src_path->setCursor(Qt::ArrowCursor);
QWidgetAction *action_Project_path = new QWidgetAction(edit_src_project_path), *action_src_path = new QWidgetAction(edit_src_path);
action_Project_path->setDefaultWidget(button_src_project_path); action_src_path->setDefaultWidget(button_src_path);
edit_src_project_path->addAction(action_Project_path, QLineEdit::TrailingPosition); edit_src_path->addAction(action_src_path, QLineEdit::TrailingPosition);
qdialog->setLayout(layout);
//å<>•ç¬æŒ‰é®
QPushButton *button_determine = new QPushButton("确定", qdialog), *button_back = new QPushButton("上一步", qdialog);
button_determine->move(568, 400); button_back->move(675, 400);
//按钮对应槽函数
connect(button_src_project_path, &QPushButton::clicked, [=](){
this->src_project_path = QFileDialog::getExistingDirectory(0, "选择目录", "/home/UWE/zj");
edit_src_project_path->setText(src_project_path);
});
connect(button_src_path, &QPushButton::clicked, [=](){
src_path = QFileDialog::getExistingDirectory(0, "选择目录", "/home/UWE/zj");
edit_src_path->setText(src_path);
});
connect(button_determine, &QPushButton::clicked, qdialog, &QDialog::close);
connect(button_determine, &QPushButton::clicked, this, &Work_Project::Src_Project_Environment_set_Determine);
connect(button_back, &QPushButton::clicked, qdialog, &QDialog::close);
connect(button_back, &QPushButton::clicked, this, &Work_Project::New_setup_link_library);
qdialog->exec();
}
// 芯片项ç®çŽ¯å¢ƒé…<C3A9>置确定å“<C3A5>应函数
void Work_Project::Src_Project_Environment_set_Determine()
{
src_project_path = edit_src_project_path->text();
src_path = edit_src_path->text();
// module_name = edit_module_name->text();
// 生æˆ<C3A6>工作项ç®å¯¹åº”æ‡ä»¶å¤¹
string str_work_project_path = uwe_project_path.toStdString(), str_work_project_name = uwe_project_name.toStdString();
chdir(str_work_project_path.data());
mkdir(str_work_project_name.data(), 0755);
str_work_project_path += '/' + str_work_project_name;
chdir(str_work_project_path.data());
uwe_project_path = QString::fromStdString(str_work_project_path);
qDebug() << uwe_project_path;
// ä¿<C3A4>å­˜é…<C3A9>置信æ<C2A1>¯
Generate_UWE_Work_config();
// è®¾ç½®æ ‘å½¢æ–‡ä»¶åˆ—è¡¨
this->father->model_file = new QFileSystemModel;
this->father->model_file->setRootPath(uwe_project_path);
this->father->ui->treeView_file->setModel(this->father->model_file);
this->father->ui->treeView_file->setRootIndex(this->father->model_file->index(uwe_project_path));
this->father->ui->treeView_file->setHeaderHidden(true);
this->father->ui->treeView_file->setColumnHidden(1, true);
this->father->ui->treeView_file->setColumnHidden(2, true);
this->father->ui->treeView_file->setColumnHidden(3, true);
connect(this->father->ui->treeView_file, &QTreeView::clicked, this->father, &MainWindow::TreeClicked);
// 终端è¿å…¥é¡¹ç®æ‡ä»¶å¤¹ï¼Œé“¾æŽ¥src代ç <20>æ‡ä»¶å¤¹
string ln_cmd = " ln -s " + this->src_path.toStdString() + ' ' + "./src"; ln_cmd += "\nln -s /home/UWE/zj/tmp/Scripts ./Scripts";
string cmd_1 = "cd "+str_work_project_path+'\n' + "pwd\n" + ln_cmd+'\n';
this->father->m_process_bash->write(cmd_1.data());
// 生æˆ<C3A6>执行所需tclæ‡ä»¶
ofstream out1("ProjectPathSetting.tcl", ios::out);
out1 << "set PROJECTPATH " << this->src_project_path.toStdString() << "\n" << "puts ${PROJECTPATH}";
out1.close();
// make Prepare的一系列æ“<C3A6>作
string cmd_2 = "echo 'ProjectPathSetting.tcl is generated successfully!\n./src soft link is created.'\n";
string cmd_cp = "cp -r /home/UWE/zj/tmp/Template/* ./ \ntouch tmp.log \necho 'copy files in Template here.' \ncp -r /home/UWE/zj/tmp/Makefile ./ \n"
"cp -r /home/UWE/zj/test_1/syn_main.tcl ./ \n";
string cmd_flist = "filelistpath=`find ./src/ -maxdepth 1 -name '*flist*' -type f` \nfilelistname=${filelistpath#*src/} \necho '`include \"./\"' > ./dc.work/filelist.v \n";
string cmd_incdir = "incdirlistpath=`find ./src/ -maxdepth 1 -name '*incdir*' -type f` \nincdirlistname=${incdirlistpath#*src/} \necho -f ./src/$incdirlistname \ > ./nc.work/sim_filelist.f \n";
string cmd_nc = "echo '-f ./src/'$filelistname'' \ >> ./nc.work/sim_filelist.f \necho \" \" >> ./nc.work/sim_filelist.f \necho //Add simulation files bellow >> ./nc.work/sim_filelist.f \n";
string cmd_mv = "mv ./spyglass.work/demo.prj ./spyglass.work/"; cmd_mv += this->module_name.toStdString(); cmd_mv += ".prj \n";
cmd_mv += "mv ./spyglass.work/waiver/demo.awl ./spyglass.work/waiver/"+this->module_name.toStdString()+".awl\n";
cmd_2 += cmd_cp + cmd_flist + cmd_incdir + cmd_nc + cmd_mv;
//cout << cmd_2;
this->father->m_process_bash->write(cmd_2.data());
// 生æˆ<C3A6>synopsys_dc.setupæ‡ä»¶
Generate_Setup_File();
}
// 生æˆ<C3A6>工作项ç®é…<C3A9>ç½®æ‡ä»¶
void Work_Project::Generate_UWE_Work_config()
{
ofstream out("UWE_Project_config", ios::out);
out << "uwe_project_path = " << uwe_project_path.toStdString() << endl;
out << "uwe_project_name = " << uwe_project_name.toStdString() << endl;
out << "src_project_path = " << src_project_path.toStdString() << endl;
out << "src_path = " << src_path.toStdString() << endl;
out.close();
}
// 生æˆ<C3A6>setupæ‡ä»¶
void Work_Project::Generate_Setup_File()
{
// é…<C3A9>ç½®setup默认值
edit_designer = new QLineEdit(); edit_designer->setText("{c64 group}");
edit_company = new QLineEdit(); edit_company->setText("{nudt c64}");
edit_synthetic_library = new QLineEdit(); edit_synthetic_library->setText("{dw_foundation.sldb}");
edit_target_library = new QLineEdit();
edit_link_library = new QLineEdit();
edit_symbol_library=new QLineEdit(); edit_symbol_library->setText("{dw_foundation.sldb}");
edit_cache_write=new QLineEdit(); edit_cache_write->setText("./cache");
edit_cache_read=new QLineEdit(); edit_cache_read->setText("$cache_write");
edit_my_lib_path=new QLineEdit();
edit_search_path=new QLineEdit(); edit_search_path->setText("$search_path $my_lib_path ");
edit_suppress_message=new QLineEdit(); edit_suppress_message->setText("{UID-401}");
edit_define_design_lib=new QLineEdit(); edit_define_design_lib->setText("-path ./analyzed");
edit_view_script_submenu_items=new QLineEdit(); edit_view_script_submenu_items->setText("{\"Clean Sweep" "remove_design -design\"}");
// 生æˆ<C3A6>synopsys_dc.setupæ‡ä»¶
ofstream out_setup("synopsys_dc.setup", ios::out);
out_setup << "set designer " << this->edit_designer->text().toStdString() << '\n';
out_setup << "set company " << this->edit_company->text().toStdString() << '\n';
out_setup << "set synthetic_library " << this->edit_synthetic_library->text().toStdString() << '\n';
out_setup << "set target_library {";
for (int i = 0; i < list_target_lib_selected.size(); i++){
out_setup << list_target_lib_selected.at(i).toStdString() << ' ';
} out_setup << '}' << endl;
out_setup << "set link_library {";
for (int i = 0; i < list_link_lib_selected.size(); i++){
out_setup << list_link_lib_selected.at(i).toStdString() << ' ';
} out_setup << '}' << endl;
out_setup << "set symbol_library " << this->edit_symbol_library->text().toStdString() << '\n';
out_setup << "set cache_write " << this->edit_cache_write->text().toStdString() << '\n';
out_setup << "set cache_read $cache_write\n";
out_setup << "set my_lib_path \" ../ \\n ./ \\n";
for (int i = 0; i < list_lib_path.size()-1; i++){
out_setup << list_lib_path.at(i).toStdString() << " \\\t";
} out_setup << list_lib_path.at(list_lib_path.size()-1).toStdString() << " \"" << endl;
out_setup << "set search_path " << this->edit_search_path->text().toStdString() << '\n';
out_setup << "suppress_message " << this->edit_suppress_message->text().toStdString() << '\n';
out_setup << "define_design_lib DEFAULT -path " << this->edit_define_design_lib->text().toStdString() << '\n';
out_setup << "set view_script_submenu_items " << this->edit_view_script_submenu_items->text().toStdString() << '\n';
out_setup.close();
}
// æ ¹æ<C2B9>®é…<C3A9>ç½®æ‡ä»¶èŽ·å<C2B7>工作项ç®é…<C3A9>ç½®
void Work_Project::Get_Work_config()
{
ifstream in("UWE_Project_config", ios::in);
string str;
in >> str >> str >> str;
in >> str >> str >> str; uwe_project_name = QString::fromStdString(str);
in >> str >> str >> str; src_project_path = QString::fromStdString(str);
in >> str >> str >> str; src_path = QString::fromStdString(str);
in >> str >> str >> str; module_name = QString::fromStdString(str);
in.close();
}
// 获å<C2B7>当å‰<C3A5>系统时间
string get_current_date()
{
time_t timeReal;
time(&timeReal);
timeReal = timeReal + 8*3600;
tm* t = gmtime(&timeReal);
string str = to_string(t->tm_year+1900) + '_' + to_string(t->tm_mon+1)+to_string(t->tm_mday) + '_' + to_string(t->tm_hour)+to_string(t->tm_min);
return str;
}
// ç‚¹å‡»æ ‘å½¢æ–‡ä»¶åˆ—è¡¨å±•ç¤ºæ–‡æœ¬å†…å®¹
void MainWindow::TreeClicked(const QModelIndex &index)
{
ui->dockWidget_src_syn->show();
QString context, file_name = model_file->fileName(index);
QString path = model_file->filePath(index);
QFile file(path);
file.open(QFile::ReadOnly | QFile::Text);
while (!file.atEnd()) {
QByteArray line = file.readLine();
QString str(line);
context.append(str);
}
if (!context.isEmpty()){
QTextEdit *textEdit_src = new QTextEdit;
textEdit_src->setText(context);
textEdit_src->setFont(QFont("Consolas", 12));
ui->tabWidget_src_syn->addTab(textEdit_src, file_name);
ui->tabWidget_src_syn->setCurrentWidget(textEdit_src);
}
ui->dockWidget_src_syn->raise();
}
// 终端输出内容å“<C3A5>应函数
void MainWindow::readBashStandardOutputInfo()
{
QByteArray cmdout = m_process_bash->readAllStandardOutput();
// 综å<C2BC>ˆå®Œæˆ<C3A6>å“<C3A5>应函数
if (cmdout.indexOf("Thank you...") != -1){
qDebug() << "syn sucessfully!" << endl;
QStandardItem *item = model_module->item(row_current_module_treeview, 1);
item->setIcon(style()->standardIcon(QStyle::SP_DialogApplyButton));
}
if (!cmdout.isEmpty()){
ui->textEdit_cmd_syn->append(QString::fromLocal8Bit(cmdout));
}
QScrollBar *scroll = ui->textEdit_cmd_syn->verticalScrollBar();
scroll->setSliderPosition(scroll->maximum());
}
// 终端输出错误信æ<C2A1>¯å“<C3A5>应函数
void MainWindow::readBashStandardErrorInfo()
{
QByteArray cmdout = m_process_bash->readAllStandardError();
if (!cmdout.isEmpty()){
ui->textEdit_cmd_syn->append(QString::fromLocal8Bit(cmdout));
}
QScrollBar *scroll = ui->textEdit_cmd_syn->verticalScrollBar();
scroll->setSliderPosition(scroll->maximum());
}
// 字符串å<C2B2>˜é‡<C3A9>æ¿æ<C2BF>¢
void MainWindow::String_Replace(string &str, string variate_key)
{
string variate_value = this->variate_map->get_value(variate_key);
int variate_size = variate_key.size();
while (str.find(variate_key) != string::npos)
str = str.replace(str.find(variate_key), variate_size, variate_value);
}
// 生æˆ<C3A6>é…<C3A9>ç½®æ‡ä»¶
void Variate_Map::Generate_Parameter_File()
{
ofstream out("parameter.tcl", ios::out);
for (auto i : mapper)
out << "set " << i.first << ' ' << i.second << endl;
out.close();
}
// ä¿<C3A4>å­˜å<CB9C>æ•°é…<C3A9>ç½®
void MainWindow::on_buttonBox_Save_accepted()
{
string FLOW_value = (ui->radioButton_FLOW_TRUE->isChecked()) ? "TRUE" : "FALSE";
variate_map->add_variate("FLOW", FLOW_value);
string LOADDDC_value = (ui->radioButton_LOADDDC_TRUE->isChecked()) ? "TRUE" : "FALSE";
variate_map->add_variate("LOADDDC", LOADDDC_value);
string CHECKCODE_value = (ui->radioButton_CHECKCODE_TRUE->isChecked()) ? "TRUE" : "FALSE";
variate_map->add_variate("CHECKCODE", CHECKCODE_value);
string DEBUGSDC_value = (ui->radioButton_DEBUGSDC_TRUE->isChecked()) ? "TRUE" : "FALSE";
variate_map->add_variate("DEBUGSDC", DEBUGSDC_value);
variate_map->Generate_Parameter_File();
ui->textEdit_cmd_syn->append("parameter.tcl has been generated sucessfully!\n");
}
// è¿<C3A8>行综å<C2BC>ˆæŒ‰é®å“<C3A5>应函数
void MainWindow::on_pushButton_runsyn_clicked()
{
Parameter_Config();
string syn_cmd = "dc_shell-t -f TCLPATH/syn_main.tcl | tee dc.log DCWORK/Logs/dc_current_date.log \nmake c_R0 \n";
this->String_Replace(syn_cmd, "TCLPATH");
this->String_Replace(syn_cmd, "DCWORK");
this->String_Replace(syn_cmd, "current_date");
cout << syn_cmd << endl;
this->ui->textEdit_cmd_syn->append("run syn \n");
this->m_process_bash->write(syn_cmd.data());
}
// 代ç <20>窗å<E28094>£å…³é—­å“<C3A5>应函数
void MainWindow::on_tabWidget_src_tabCloseRequested(int index)
{
ui->tabWidget_src_syn->removeTab(index);
}
// R0_check result按é®å“<C3A5>应函数
void MainWindow::on_pushButton_result_clicked()
{
ktextEdit = new KTextEdit(dockWidget_report_syn);
//获å<C2B7>result内容
QString result_path = QDir::currentPath() + "/R0_check.result";
QFile file(result_path);
QString context;
file.open(QFile::ReadOnly | QFile::Text);
while (!file.atEnd()) {
QByteArray line = file.readLine();
QString str(line);
context.append(str);
}
ktextEdit->SetText(context);
//è®¾ç½®æ–‡æœ¬æ¸¸æ ‡åˆ°æ–‡æœ¬å¤´
QTextCursor cursor = ktextEdit->textCursor();
cursor.movePosition(QTextCursor::Start);
ktextEdit->setTextCursor(cursor);
dockWidget_report_syn->setWidget(ktextEdit);
dockWidget_report_syn->raise();
}
//终端è¿<C3A8>行按é®å“<C3A5>应函数
void MainWindow::on_pushButton_run_cmd_clicked()
{
QString strCmd = ui->lineEdit_syn->text();
ui->textEdit_cmd_syn->append("Linux:~$ " + strCmd);
m_process_bash->write(ui->lineEdit_syn->text().toLocal8Bit() + '\n');
ui->lineEdit_syn->clear();
}
// New noduleå“<C3A5>应函数
void MainWindow::New_module()
{
QDialog *qdialog = new QDialog;
qdialog->setWindowTitle("module name");
qdialog->setFixedSize(500, 50);
//输入框å<E280A0>Šå…¶æŒ‰é®
QFormLayout *layout = new QFormLayout;
layout->setRowWrapPolicy(QFormLayout::DontWrapRows);
QLineEdit *edit_module_name = new QLineEdit;
layout->addRow("module name:", edit_module_name);
qdialog->setLayout(layout);
//å<>•ç¬æŒ‰é®
QPushButton *button_determine = new QPushButton("确定", qdialog);
button_determine->move(300, 100);
//按钮对应槽函数
connect(button_determine, &QPushButton::clicked, qdialog, &QDialog::close);
connect(button_determine, &QPushButton::clicked, this, [=]{
QList<QStandardItem *> items;
items.append(new QStandardItem(edit_module_name->text()));
// childItem->setIcon(style()->standardIcon(QStyle::SP_DialogApplyButton));
QStandardItem *Item_state = new QStandardItem();
Item_state->setIcon(QApplication::style()->standardIcon(QStyle::SP_MessageBoxQuestion));
items.append(Item_state);
model_module->appendRow(items);
row_current_module_treeview++;
this->work_project->module_name = edit_module_name->text();
ofstream out2("setModuleName.tcl", ios::out);
out2 << "set Design " << edit_module_name->text().toStdString() << "\n" << "puts ${Design}";
out2.close();
});
qdialog->exec();
}
// code_checkå“<C3A5>应函数
void MainWindow::on_pushButton_code_check_clicked()
{
string cmd_code_check_date = "c_date=`date +%Y_%m%d_%H%M` \n";
string cmd_code_check_filelist = "echo 'Checking filelist.v ...' > code_check.result \n"
"filelistpath=`find ./src/ -name '*flist*' -type f` \n"
"echo filelistpath: $filelistpath \n"
"for file in $filelistpath; \n"
"do filelistname+=${file#*src/}' ' \n done \n"
"echo filelistname: $filelistname \n"
"if [ -z \"$filelistname\" ]; \n then echo \"Error: Filelist is not exist or the name is not matching '*_filelist' format. exit.\" "
"echo \"Error: Filelist is not exist or the name is not matching '*_filelist' format. exit.\" >> code_check.result exit \n fi \n"
"SIMEMU=`grep -n \"_SIMULATION_\|_EMULATION_\" $filelistpath` \n"
"if [ -z \"$SIMEMU\" ]; \n then echo \"Info: There are no _SIMULATION_ or _EMULATION_ definition in file $filelistname .\" \n fi \n";
string cmd_code_check_src = "echo " " >> code_check.result \n"
"echo \"Checking 'timescale' in *.v files ... (Warning)\" >> code_check.result \n"
"find ./src/ -name \"*.v\" | xargs grep -n 'timescale' >> code_check.result \n"
"echo " " >> code_check.result \n"
"echo \"Checking Chinese words in *.v files .. (Warning).\" >> code_check.result \n"
"find ./src/ -name \"*.v\" | xargs grep -nP '[\p{Han}]' >> code_check.result \n"
"echo " " >> code_check.result \n"
"echo \"Checking Synophsis key words in *.v files ... (Info)\" >> code_check.result \n"
"find ./src/ -name \"*.v\" | xargs grep -n 'full_case' >> code_check.result \n"
"find ./src/ -name \"*.v\" | xargs grep -n 'parallel_case' >> code_check.result \n"
"find ./src/ -name \"*.v\" | xargs grep -n 'translate on' >> code_check.result \n"
"find ./src/ -name \"*.v\" | xargs grep -n 'translate off' >> code_check.result \n";
string cmd_code_check_author = "echo " " >> code_check.result \n"
"echo \"Checking author notes in *.v files .. (Warning).\" >> code_check.result \n"
"for file in `find ./src/ -regex \".*\.vh\|.*\.v\|.*\.h\"` \n"
"do authorname=`grep -n \"author\|Author\|AUTHOR\|Generated by\|created\" $file` \n"
"if [ -z \"$authorname\" ]; \n "
"then echo \"Warning: Author notes is not exist or the name is not matching 'author|Author|AUTHOR|Generated by|created' format in file $file\" \n"
"echo \"Warning: Author notes is not exist or the name is not matching 'author|Author|AUTHOR|Generated by|created' format in file $file\" >> code_check.result \n"
"fi \n done \n";
string cmd_code_check_xrun_log = "echo \" \" >> code_check.result \n"
"echo \"Checking NC log in xrun.log ... \" >> code_check.result \n"
"find . -maxdepth 1 -name \"xrun.log\" | xargs grep \"*E\" >> code_check.result \n"
"find . -maxdepth 1 -name \"xrun.log\" | xargs grep \"*W,RECOME\" >> code_check.result \n"
"find . -maxdepth 1 -name \"xrun.log\" | xargs grep \"*W,CUVWSP\" >> code_check.result \n"
"find . -maxdepth 1 -name \"xrun.log\" | xargs grep \"*W,CUVWSI\" >> code_check.result \n"
"find . -maxdepth 1 -name \"xrun.log\" | xargs grep \"*W,CUVMPW\" >> code_check.result \n";
string cmd_code_check_dc_log = "echo \" \" >> code_check.result \n"
"echo \"Checking DC dc.log ...\" >> code_check.result \n"
"find . -maxdepth 1 -name \"dc.log\" | xargs grep \"Error:\" >> code_check.result \n"
"find . -maxdepth 1 -name \"dc.log\" | xargs grep \"Latch \" >> code_check.result \n"
"find . -maxdepth 1 -name \"dc.log\" | xargs grep \"Timing loop\" >> code_check.result \n"
"find . -maxdepth 1 -name \"dc.log\" | xargs grep \"FFGEN\" >> code_check.result \n"
"find . -maxdepth 1 -name \"dc.log\" | xargs grep \"have the default net type\" >> code_check.result \n"
"find . -maxdepth 1 -name \"dc.log\" | xargs grep \"unresolved\" >> code_check.result \n"
"find . -maxdepth 1 -name \"dc.log\" | xargs grep \"unmapped\" >> code_check.result \n"
"find . -maxdepth 1 -name \"dc.log\" | xargs grep \"(LINT-5)\" >> code_check.result \n"
"find . -maxdepth 1 -name \"dc.log\" | xargs grep \"sensiti\" >> code_check.result \n"
"find . -maxdepth 1 -name \"dc.log\" | xargs grep \"MV-038\" >> code_check.result \n"
"find . -maxdepth 1 -name \"dc.log\" | xargs grep \"MV-039\" >> code_check.result \n"
"find . -maxdepth 1 -name \"dc.log\" | xargs grep \"MV-513\" >> code_check.result \n"
"find . -maxdepth 1 -name \"dc.log\" | xargs grep \"MV-514\" >> code_check.result \n";
string cmd_code_check_copy = "cp code_check.result Logs/code_check_${c_date}.result \n";
string cmd_code_check = cmd_code_check_date + cmd_code_check_filelist + cmd_code_check_src + cmd_code_check_author + cmd_code_check_xrun_log + cmd_code_check_dc_log + cmd_code_check_copy;
this->ui->textEdit_cmd_syn->append("Beginning check code \n");
this->m_process_bash->write(cmd_code_check.data());
}

@ -0,0 +1,49 @@
#-------------------------------------------------
#
# Project created by QtCreator 2022-09-13T16:59:02
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = test
TEMPLATE = app
# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
CONFIG += c++11
SOURCES += \
highlighter.cpp \
ktextedit.cpp \
main.cpp \
mainwindow.cpp \
mytreeview.cpp
HEADERS += \
highlighter.h \
mainwindow.h \
mytreeview.h
FORMS += \
mainwindow.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

@ -0,0 +1,326 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.8.2, 2023-06-07T11:08:23. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{a65e2026-5075-402d-8461-16bc6af287b9}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">GBK</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.12.2 GCC 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.12.2 GCC 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5122.gcc_64_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/UWE/zj/Qt/Project/build-test-ZJ-Desktop_Qt_5_12_2_GCC_64bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/UWE/zj/Qt/Project/build-test-ZJ-Desktop_Qt_5_12_2_GCC_64bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/UWE/zj/Qt/Project/build-test-ZJ-Desktop_Qt_5_12_2_GCC_64bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">部署</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy Configuration</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">test-ZJ</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/UWE/zj/Qt/Project/UWE/test-ZJ.pro</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">test-ZJ.pro</value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/UWE/zj/Qt/Project/build-test-ZJ-Desktop_Qt_5_12_2_GCC_64bit-Debug</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">20</value>
</data>
<data>
<variable>Version</variable>
<value type="int">20</value>
</data>
</qtcreator>

@ -0,0 +1,53 @@
#ifndef _FINDDIALOG_H_
#define _FINDDIALOG_H_
#include <QDialog>
#include <QGridLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QRadioButton>
#include <QCheckBox>
#include <QGroupBox>
#include <QPlainTextEdit>
#include <QPointer>
class FindDialog : public QDialog
{
Q_OBJECT
protected:
QGroupBox m_radioGrpBx;
QGridLayout m_layout;
QHBoxLayout m_hbLayout;
QLabel m_findLbl;
QLineEdit m_findEdit;
QPushButton m_findBtn;
QPushButton m_closeBtn;
QCheckBox m_matchChkBx;
QRadioButton m_forwardBtn;
QRadioButton m_backwardBtn;
QPointer<QPlainTextEdit> m_pText; // FindDialog ¾ÛºÏʹÓà QPlainTextEdit
QSharedPointer<FindDialog> m_pFindDlg;
QTextCharFormat m_format;
void initControl();
void connectSlot();
protected slots:
void onFindClicked();
void onCloseClicked();
public:
explicit FindDialog(QWidget* parent = 0, QPlainTextEdit* pText = 0);
void setPlainTextEdit(QPlainTextEdit* pText);
void highlightText(QPlainTextEdit* pText);
QPlainTextEdit* getPlainTextEdit();
bool event(QEvent* evt);
};
#endif // _FINDDIALOG_H_

@ -0,0 +1,11 @@
#ifndef FINDDIALOG_H
#define FINDDIALOG_H
class finddialog
{
public:
finddialog();
};
#endif // FINDDIALOG_H

@ -0,0 +1,94 @@
#include "highlighter.h"
normol_HighLighter::normol_HighLighter(QTextDocument *parent) :
QSyntaxHighlighter(parent)
{
/*m_moduleFormat.setForeground(Qt::blue);
m_taskFormat.setForeground(Qt::red);
m_functionFormat.setForeground(Qt::darkGreen);
m_assertFormat.setForeground(Qt::magenta);*/
// HighlightRule num_rule;
// num_rule.pattern.setPattern("[0-9]{1,1}");
// num_rule.format.setForeground(QColor(144,238,144));
// highlightrules.append(num_rule);
normol_HighLighteRule key_rule;
key_rule.pattern.setPattern("\\b(char|string|int|double|bool|void|true|false)\\b");
key_rule.format.setForeground(QColor(30,144,255));
highlightrules.append(key_rule);
normol_HighLighteRule code_rule;
code_rule.pattern.setPattern("\\b(if|while|for|else|break|return|switch|case)\\b");
code_rule.format.setForeground(QColor(186,85,211));
highlightrules.append(code_rule);
}
/*void normol_HighLighter::setVerilogKeywordFormat(QStringList keywordList, QTextCharFormat format)
{
foreach (const QString &keyword, keywordList) {
QRegularExpression expression("\\b" + keyword + "\\b");
QRegularExpressionMatchIterator itr = expression.globalMatch(currentBlock().text());
while (itr.hasNext()) {
QRegularExpressionMatch match = itr.next();
setFormat(match.capturedStart(), match.capturedLength(), format);
}
}
}*/
void normol_HighLighter::highlightBlock(const QString &text)
{
for(const normol_HighLighteRule &rule : highlightrules){
QRegExp expression(rule.pattern);
int index = expression.indexIn(text);
while(index>=0){
int length = expression.matchedLength();
setFormat(index,length,rule.format);
index = expression.indexIn(text,index+length);}
}
}
///////////////////////////////////
SV_HighLighter::SV_HighLighter(QTextDocument *parent) :
QSyntaxHighlighter(parent)
{
SV_HighLighteRule key_rule;
key_rule.pattern.setPattern("\\b(class|virtual|function|typedef|interface|modport|new|this|override|final)\\b");
key_rule.format.setForeground(QColor(30,144,255));
highlightrules.append(key_rule);
}
void SV_HighLighter::highlightBlock(const QString &text)
{
for(const SV_HighLighteRule &rule : highlightrules){
QRegExp expression(rule.pattern);
int index = expression.indexIn(text);
while(index>=0){
int length = expression.matchedLength();
setFormat(index,length,rule.format);
index = expression.indexIn(text,index+length);}
}
}
////////////////////////////////////
V_HighLighter::V_HighLighter(QTextDocument *parent) :
QSyntaxHighlighter(parent)
{
V_HighLighteRule key_rule;
key_rule.pattern.setPattern("\\b(module|endmodule|input|output|wire|reg|assign|always|initial|if|else)\\b");
key_rule.format.setForeground(QColor(30,144,255));
highlightrules.append(key_rule);
}
void V_HighLighter::highlightBlock(const QString &text)
{
for(const V_HighLighteRule &rule : highlightrules){
QRegExp expression(rule.pattern);
int index = expression.indexIn(text);
while(index>=0){
int length = expression.matchedLength();
setFormat(index,length,rule.format);
index = expression.indexIn(text,index+length);}
}
}

@ -0,0 +1,58 @@
#ifndef HIGHLIGHTER_H
#define HIGHLIGHTER_H
#include<QSyntaxHighlighter>
#include<QTextCharFormat>
#include<QTextDocument>
#include<QRegularExpression>
class normol_HighLighter :public QSyntaxHighlighter{
Q_OBJECT
public:
explicit normol_HighLighter(QTextDocument *parent=0);
protected:
void highlightBlock(const QString &text);
private:
/*void setVerilogKeywordFormat(QStringList keywordList, QTextCharFormat format);
QTextCharFormat m_moduleFormat;
QTextCharFormat m_taskFormat;
QTextCharFormat m_functionFormat;
QTextCharFormat m_assertFormat;*/
struct normol_HighLighteRule{
QRegExp pattern;
QTextCharFormat format;
};
QVector<normol_HighLighteRule> highlightrules;
};
class SV_HighLighter : public QSyntaxHighlighter{
Q_OBJECT
public:
explicit SV_HighLighter(QTextDocument *parent=0);
protected:
void highlightBlock(const QString &text);
private:
struct SV_HighLighteRule{
QRegExp pattern;
QTextCharFormat format;
};
QVector<SV_HighLighteRule> highlightrules;
};
class V_HighLighter : public QSyntaxHighlighter{
Q_OBJECT
public:
explicit V_HighLighter(QTextDocument *parent=0);
protected:
void highlightBlock(const QString &text);
private:
struct V_HighLighteRule{
QRegExp pattern;
QTextCharFormat format;
};
QVector<V_HighLighteRule> highlightrules;
};
#endif // HIGHLIGHTER_H

File diff suppressed because it is too large Load Diff

@ -0,0 +1,237 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMenuBar>
#include <QDialog>
#include <QLineEdit>
#include <QPushButton>
#include <QFileSystemModel>
#include <QProcess>
#include <map>
#include <string>
#include <fstream>
#include <QObject>
#include <QTextEdit>
#include <QTreeView>
#include <QStandardItemModel>
#include <QTableView>
using namespace std;
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class Variate_Map;
class Work_Project;
class KTextEdit;
class normol_HighLighter;
class SV_HighLighter;
class V_HighLighter;
//
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
normol_HighLighter *n_highlighter;
SV_HighLighter *sv_highlighter;
V_HighLighter *v_highlighter;
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void String_Replace(string& str, string variate);
void keyPressEvent(QKeyEvent *k);
void New_Project();
// 菜单栏
QMenuBar *pMenuBar;
QMenu *pMenu1;
QMenu *pMenu2;
QMenu *pMenu3;
QMenu *pMenu4;
QMenu *pMenu5;
//pmenu1
QAction *pAction_newproject;
QAction *pAction_openproject;
QAction *pAction_save;
QAction *pAction_openrecentproject;
QAction *pAction_print;
QAction *pAction_exit;
//pmenu2
QAction *pAction_parameter_config;
QAction *pAction_startdebug;
QAction *pAction_stopdebug;
QAction *pAction_restartdebug;
QAction *pAction_skip;
QAction *pAction_continue;
QAction *pAction_syn;
//pmenu3
QAction *pAction_revoke;
QAction *pAction_restore;
QAction *pAction_shear;
QAction *pAction_copy;
QAction *pAction_paste;
QAction *pAction_seek;
QAction *pAction_replace;
//pmenu4
QAction *pAction_changeappearance;
QAction *pAction_reportdata;
QAction *pAction_error;
QAction *pAction_control;
//pmeun5
QAction *pAction_alltutorial;
QAction *pAction_fasttutorial;
QAction *pAction_about;
QAction *pAction_search;
QFileSystemModel *model_file;
Ui::MainWindow *ui;
// bash窗口
QProcess *m_process_bash[4];
Variate_Map *variate_map;
QDockWidget *dockWidget_report_check, *dockWidget_module;
KTextEdit *ktextEdit;
// flow界面窗口
QMainWindow *qmainwindow_precheck, *qmainwindow_syn, *qmainwindow_pt, *qmainwindow_fm, *qmainwindow_design_check;
// flag set
bool ready_syn, ready_r0_result, ready_setup, ready_prepare;
// 工作项目
Work_Project *work_project;
// 存储work_flow对象的列表
QTabWidget *tabwidget_flow_src_list[4];
QDockWidget *dockwidget_flow_src_list[4];
public slots:
//????????
//????????
void OpenProject();
void TreeClicked(const QModelIndex &index);
void readBashStandardOutputInfo_precheck();
void readBashStandardErrorInfo_precheck();
void readBashStandardOutputInfo_syn();
void readBashStandardErrorInfo_syn();
void readBashStandardOutputInfo_pt();
void readBashStandardErrorInfo_pt();
void readBashStandardOutputInfo_fm();
void readBashStandardErrorInfo_fm();
// void Parameter_Config();
private slots:
void find();
void on_buttonBox_Save_accepted();
void on_pushButton_runsyn_clicked();
void on_pushButton_result_clicked();
// void on_pushButton_run_cmd_clicked();
// void on_treeView_module_clicked(const QModelIndex &index);
void on_pushButton_code_check_clicked();
void on_pushButton_run_cmd_syn_clicked();
// void on_tabWidget_src_syn_tabCloseRequested(int index);
void on_pushButton_run_cmd_pt_clicked();
// void on_tabWidget_src_pt_tabCloseRequested(int index);
void on_buttonBox_Save_pt_accepted();
void on_pushButton_runpt_clicked();
void on_pushButton_runformality_clicked();
void on_pushButton_run_cmd_fm_clicked();
void on_tabWidget_src_tabCloseRequested(int index);
void on_pushButton_run_cmd_precheck_clicked();
void on_pushButton_result_design_check_clicked();
void on_pushButton_sg_clicked();
};
//????map?
class Variate_Map
{
public:
Variate_Map(){}
~Variate_Map(){}
string get_value(string str){return mapper[str];}
int add_variate(string key, string value){mapper[key] = value;}
bool alter_variate(string key, string value)
{
if (mapper.find(key) == mapper.end())
return false;
else{
mapper[key] = value;
return true;
}
}
void Generate_Parameter_File();
private:
map<string, string> mapper;
};
// 工作项目类
class Work_Project : public QObject
{
Q_OBJECT
public:
MainWindow *father;
QLineEdit *edit_uwe_project_path, *edit_uwe_project_name,
*edit_src_project_path, *edit_src_path, *edit_module_name;
QLineEdit *edit_designer, *edit_company, *edit_synthetic_library,
*edit_target_library, *edit_link_library, *edit_symbol_library, *edit_cache_write,
*edit_cache_read, *edit_my_lib_path, *edit_search_path,
*edit_suppress_message, *edit_define_design_lib , *edit_view_script_submenu_items;
// 判断信号
bool bool_Current_Design_ready;
// 需要存储的变量
QString uwe_project_path, uwe_project_name, src_project_path, src_path, current_module_name;
QList<QString> list_lib_path, list_lib, list_target_lib_selected, list_link_lib_selected;
// int current_module_row;
Work_Project(){}
~Work_Project(){}
void Generate_UWE_Project_config();
void Get_UWE_Project_config();
void Extract_lib();
void Module_Set();
QTableView* Show_lib(QList<QString>& list_lib, QStandardItemModel *model);
public slots:
void New_Project_1();
void New_Project_2();
void New_setup_lib_path();
void New_setup_target_library();
void New_setup_link_library();
void Src_Project_Environment_set();
void Src_Project_Environment_set_Determine();
void Generate_Setup_File();
};
class KTextEdit : public QTextEdit
{
Q_OBJECT
public:
KTextEdit(QWidget *parent = nullptr);
void SetText(const QString &text);
void mouseReleaseEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
QList<QString> clickable_text_list;
QString error_type;
QProcess *m_process_report_man;
QByteArray man_out;
public slots:
void OnCursorMove();
void readBash_manOutputInfo();
};
#endif // MAINWINDOW_H

File diff suppressed because it is too large Load Diff

@ -0,0 +1,236 @@
#include "mytreeview.h"
#include "ui_mainwindow.h"
#include <iostream>
#include <QStandardItemModel>
#include <QDockWidget>
#include <QVBoxLayout>
#include <QTextEdit>
#include <QPushButton>
#include <QDialog>
#include <QFormLayout>
#include <QLineEdit>
#include <iostream>
#include <QMainWindow>
#include "ui_mainwindow.h"
MyTreeView::MyTreeView(QWidget *parent)
: QTreeView(parent)
{
// 初始化
this->model_module = new QStandardItemModel;
cnt_module = 0;
list_actionof_modules = new QList<QAction*>();
map_name_2_item = new std::map<QString, QStandardItem*>();
model_module->setHorizontalHeaderLabels(QStringList()<<"module name"<<"state");
setModel(model_module);
setColumnWidth(0, 200);
setColumnWidth(1, 50);
setContextMenuPolicy(Qt::CustomContextMenu);
setSelectionMode(QAbstractItemView::SingleSelection);
// actions
action_new_module1 = new QAction("new module", this);
action_new_module2 = new QAction("new module", this);
action_del_module = new QAction("del module", this);
// menu_module_blank
menu_module_blank = new QMenu(this);
menu_module_blank->addAction(action_new_module1);
// menu_module_withmodule
menu_module_withmodule = new QMenu(this);
menu_module_withmodule->addAction(action_new_module2);
menu_module_move = menu_module_withmodule->addMenu(tr("move to")); menu_module_move->addAction(new QAction("顶层"));
menu_module_withmodule->addAction(action_del_module);
// 空白处菜单new module信号槽
connect(action_new_module1, &QAction::triggered, this, [=]() {
New_Module(nullptr);
});
// 有module处菜单new module信号槽
connect(action_new_module2, &QAction::triggered, this, [this](){
New_Module(selecteditem);
});
// 有module处菜单move to信号槽
connect(menu_module_move, &QMenu::triggered, this, &MyTreeView::on_MoveMenu_Triggered);
// del module信号槽
connect(action_del_module, &QAction::triggered, this, [this](){
Del_Module(selecteditem);
});
}
// 鼠标点击treeview响应函数
void MyTreeView::mousePressEvent(QMouseEvent *event)
{
QPoint p = event->pos();
QModelIndex index = indexAt(p);
QStandardItemModel *model;
if (event->buttons() & Qt::RightButton){ // 鼠标右键点击
if (!index.isValid()){ // 点击空白处
menu_module_blank->popup(viewport()->mapToGlobal(p));
}
else { // 点击有module处
menu_module_withmodule->popup(viewport()->mapToGlobal(p));
model = qobject_cast<QStandardItemModel *>(this->model());
selecteditem = model->itemFromIndex(index);
}
}
if(!index.isValid())
{
clearSelection(); //实现点空白处取消选择
// if (father->ui->treeView_module->selectionModel())
// father->ui->treeView_module->selectionModel()->clear();
// emit sigPressEmpty();
// return;
}
QTreeView::mousePressEvent(event);
}
// new module响应槽函数
void MyTreeView::New_Module(QStandardItem* selecteditem)
{
QDialog *qdialog = new QDialog;
qdialog->setWindowTitle("module name");
qdialog->setFixedSize(500, 50);
QFormLayout *layout = new QFormLayout;
layout->setRowWrapPolicy(QFormLayout::DontWrapRows);
QLineEdit *edit_module_name = new QLineEdit;
layout->addRow("module name:", edit_module_name);
qdialog->setLayout(layout);
QPushButton *button_determine = new QPushButton("确定", qdialog);
button_determine->move(300, 100);
connect(button_determine, &QPushButton::clicked, qdialog, &QDialog::close);
connect(button_determine, &QPushButton::clicked, this, [=]{
QString module_name = edit_module_name->text();
QStandardItem *item_new = new QStandardItem(module_name);
QStandardItem *Item_state = new QStandardItem();
Item_state->setIcon(QApplication::style()->standardIcon(QStyle::SP_MessageBoxQuestion));
// 直接创建new module
if (selecteditem == nullptr){
QList<QStandardItem *> items;
items.append(item_new);
items.append(Item_state);
model_module->appendRow(items);
}
// 创建子module
else{
int row = selecteditem->rowCount();
selecteditem->setChild(row, 0, item_new);
selecteditem->setChild(row, 1, Item_state);
}
// 添加module信息
map_name_2_item->insert(std::pair<QString, QStandardItem*>(module_name, item_new));
QAction *action_tmp = new QAction(module_name, this); list_actionof_modules->append(action_tmp);
cnt_module++;
// 更新MoveMenu菜单信息
menu_module_move->addAction(action_tmp);
});
qdialog->exec();
}
//
QStandardItem* MyTreeView::Name_get_Item(QString name_module)
{
std::map<QString,QStandardItem*>::iterator it = map_name_2_item->find(name_module);
if (it != map_name_2_item->end()) // 找到
return it->second;
else // 没找到
std::cout << "map中不存在该元素\n";
return nullptr;
}
// move_to菜单列表点击action响应函数 目前还存在的bug父项移到子项下寄
void MyTreeView::on_MoveMenu_Triggered(QAction* action)
{
if (action){
QString father_item_name = action->text();
QString selected_item_name = selecteditem->text();
if (father_item_name == "顶层"){ // 如果移动到顶层
if (selecteditem->parent() == nullptr) // 选中item没有父项
return;
else{ //选中item有原父项
QStandardItem *old_father_item = selecteditem->parent();
QString old_father_item_name = old_father_item->text();
// 移动(重新添加)
model_module->appendRow(old_father_item->takeRow(selecteditem->row()));
}
}
else{ // 不是移动到顶层
// 获取父项item
QStandardItem *fatherItem = Name_get_Item(father_item_name);
if (father_item_name == selected_item_name)
return;
else{
if (selecteditem->parent() == nullptr){ // 选中item没有父项
// 移动(重新添加)
fatherItem->appendRow(model_module->takeRow(selecteditem->row()));
}
else{ //选中item有原父项
QStandardItem *old_father_item = selecteditem->parent();
QString old_father_item_name = old_father_item->text();
if (old_father_item_name == father_item_name) // 新旧父项相同
return;
// 移动(重新添加)
fatherItem->appendRow(old_father_item->takeRow(selecteditem->row()));
}
}
}
}
}
//
void MyTreeView::Add_Module(QString module_name, QStandardItem* father)
{
// 图标item
QStandardItem *Item_state = new QStandardItem();
Item_state->setIcon(QApplication::style()->standardIcon(QStyle::SP_MessageBoxQuestion));
if (father){
father->setChild(father->rowCount(), 0, new QStandardItem(module_name));
father->setChild(father->rowCount(), 1, Item_state);
}
else {
QList<QStandardItem*> item_row;
item_row.append(new QStandardItem(module_name));
item_row.append(Item_state);
model_module->appendRow(item_row);
}
}
// del module响应函数
void MyTreeView::Del_Module(QStandardItem* selecteditem)
{
// 在model中删除
QStandardItem* parentItem = selecteditem->parent();
if (parentItem){
parentItem->removeRow(selecteditem->row());
}
else{
model_module->removeRow(selecteditem->row());
}
// 获取当前model所有module name将不在其中的action对象删除
QList<QString> list_del_module;
for (int i = 0; i < model_module->rowCount(); ++i) {
QStandardItem* item = model_module->item(i, 0);
if (item) {
QString text = item->text();
list_del_module.append(text);
}
}
foreach(QAction* action, menu_module_move->actions()){
if (!list_del_module.contains(action->text()) && action->text() != "顶层") {
menu_module_move->removeAction(action);
action->deleteLater(); // 删除该QAction对象并释放内存
}
}
}

@ -0,0 +1,47 @@
#ifndef MYTREEVIEW_H
#define MYTREEVIEW_H
#include <QTreeView>
#include <QMouseEvent>
#include "mainwindow.h"
#include <map>
#include <QStandardItem>
//改造QTreeView实现点击空白处时取消选择
class MyTreeView : public QTreeView
{
Q_OBJECT
public:
MainWindow* father = nullptr;
QStandardItemModel* model_module; // module数据模型
QMenu *menu_module_blank, *menu_module_withmodule; // 右键菜单选项
QAction *action_new_module1, *action_new_module2, *action_del_module, *action_move_module; // 动作
// 数据结构
std::map<QString, QStandardItem*> *map_name_2_item; // module名和item对应表
QStandardItem *selecteditem = nullptr; // 当前鼠标选中的item对象
QList<QAction*> *list_actionof_modules; // module对应action列表
int cnt_module; // module计数
QMenu *menu_module_move; // move to菜单
//
MyTreeView(QWidget *parent = Q_NULLPTR);
QStandardItem* Name_get_Item(QString);
void Add_Module(QString, QStandardItem*);
public slots:
void New_Module(QStandardItem*);
void Del_Module(QStandardItem*);
void on_MoveMenu_Triggered(QAction*); // menu按键响应槽函数
signals:
void sigPressEmpty();
protected:
void mousePressEvent ( QMouseEvent * event ) ;
};
#endif

@ -0,0 +1,714 @@
Version 1.10.x
--------------
* Bug
* slider: The step size is ignored for negative values. fixed.
* mobile: The animation does not work on some browsers. fixed.
* form: The 'dirty' property does not work with check and radio components. fixed.
* drawer: The 'onBeforeCollapse' event doesn't fire while collapsing it. fixed.
* Improvement
* compatible with strict mode.
* textbox: Add 'show' and 'hide' methods.
* textbox: Add 'setEditable' method.
* textbox: Add 'autoSize' property.
* form: Add 'focusOnValidate' property.
* menu: Add 'navItems' and 'findItems' methods.
* New Plugins
* radiogroup: A set of radio buttons, where no more than one of the buttons can be checked at a time.
* checkgroup: A set of checkbox components, where one or more options can be checked at a time.
Version 1.10.0
--------------
* Bug
* layout: The icon on the collapsed panel is overlaped by title. fixed.
* propertygrid: The css style of the row expander will affact that in the detailview. fixed.
* combogrid: The 'getValues' method returns incorrect values sometimes. fixed.
* datebox: The 'initValue' method can't apply a new value. fixed.
* Improvement
* datagrid: The 'sorter' function on the column accepts the entire row as the sorting parameters.
* datagrid: Add 'hformatter' and 'hstyler' properties for the colomns.
* datebox: Add 'getDate' and 'setDate' methods.
* pagination: Add 'onBeforeSelectPage' event.
* combo: Prevent from conflicting with svg.
* window: Add 'fixed' property.
* timepicker: Add 'hour24' property.
* layout: Add 'stopCollapsing' method.
* messager: Add 'tip' method.
* New Plugins
* drawer: Allow the user to anchor to the left or right edge of the screen.
Version 1.9.0
-------------
* Bug
* datagrid: Slow scrolling with mousewheel on frozen columns. fixed.
* datagrid: The 'rowStyler' function is called on empty row. fixed.
* linkbutton: Calling 'disable' method still can submit the form. fixed.
* combotree: The 'onBeforeSelect' event fires twice while selecting a node. fixed.
* combotreegrid: The 'onSelect' event fires twice while selecting a row. fixed.
* Improvement
* checkbox: Add 'readonly' property.
* radiobutton: Add 'readonly' property.
* Compatible with jQuery 3.x.
* New Plugins
* timepicker: Allow the user to choose time on a clock.
Version 1.8.0
-------------
* Bug
* treegrid: The 'pageNumber' can't be initialized with the specified value. fixed.
* checkbox: The disabled checkbox has no disabled label. fixed.
* Improvement
* switchbutton: Add the 'label','labelAlign','labelPosition','labelWidth' properties.
* switchbutton: Accept 'tabindex' attribute to get focus when the user press TAB key.
* form: The 'onChange' event is available for all the form component.
* calendar: The 'Date' property is available to support the hijri date.
* textbox: The floating label is available.
Version 1.7.0
-------------
* Bug
* sidemenu: The tooltip has a wrong position when the 'floatMenuPosition' is set to 'left'. fixed.
* datagrid: The horizontal scrollbar has a wrong state when the 'showHeader' is set to true. fixed.
* combo: The initialized value will trigger the form's 'onChange' event when the 'multiple' is set to true. fixed.
* panel: The horizontal panel doesn't work normally when 'noheader' property is set to true. fixed.
* pagination: The extended buttons may lose in IE when rebuild the component. fixed.
* Improvement
* tree: Add 'findBy' method to find a node by any fields.
* tree: The 'find' method is enhanced to find a node easily.
* combo: Add 'panelValign' property.
* datagrid: The sorting parameters will be ignored when the 'remoteSort' is set to false.
* timespinner: Add 'hour12' property to display in 12 hour format.
Version 1.6.0
-------------
* Bug
* maskedbox: The component does not accept numeric keypad. fixed.
* combogrid: When selecting multiple records, the datagrid will scroll to the last checked record. fixed.
* Improvement
* Compatible with jQuery 3.x.
* tabs: The 'toolPosition' property can accept 'top' and 'bottom' values.
* textbox: The textbox label has the animating feature when focus or blur on it.
* tooltip: Add 'valign' property.
* tree: The node class can be initialized by setting the 'nodeCls' in the data.
* New Plugins
* sidemenu: The sidemenu is created from accordion and tree plugins. It builds a collapsible menu with some categories.
* radiobutton: This plugin provides a round interface to select one option from a number of options.
* checkbox: This plugin allows a user to select a value from a small set of options.
Version 1.5.5
-------------
* Bug
* tabs: The selecting history has wrong order when the title contains complex elements. fixed.
* combo: The drop-down panel may not be hidden if a bigger 'delay' value is set. fixed.
* layout: The expanding panel does not collapse when move mouse quickly away from it. fixed.
* tagbox: The tagbox and the label don't stay in the same line. fixed.
* Improvement
* combo: The 'blur' event handler is attached to the 'inputEvents' property.
* numberbox: The 'cloneFrom' method is available.
* slider: The 'step' property can be set with a floating number.
* menu: The 'findItem' method allows the user to find menu item by any parameters.
* menubutton: Add 'showEvent' and 'hideEvent' properties.
* New Plugins
* maskedbox: The maskedbox enforces its structure as the user types.
Version 1.5.4
-------------
* Bug
* combotreegrid: The 'onChange' event does not fire when entering values on the inputing box. fixed.
* combobox: Clicking on the drop-down panel will jump to the bottom of body on win10 IE11. fixed.
* datebox: Clicking on the 'Today' button doesn't trigger the 'onSelect' event. fixed.
* propertygrid: The 'getChanges' method doesn't work after editing the only one row. fixed.
* Improvement
* combo: Add the 'panelEvents' property.
* combo: Attach the default 'mousedown' event handler.
* combobox: The 'setValues' method can be called to initialize the displaying text.
* combotreegrid: Press ENTER key to select the highlighted rows.
* panel: Improve the resizing performance.
* filebox: The 'files' method allows the user to get the selected file list.
* searchbox: Improvent the 'selectName' method.
Version 1.5.3
-------------
* Bug
* combobox: The 'iconCls' property can not be parsed from the <option> markup. fixed.
* combobox: Clicking scrollbar will cause the drop-down panel to be hidden in IE. fixed.
* pagination: The pagination height will shrink when the 'displayMsg' property is set to false. fixed.
* tabs: The tab panel takes a wrong 'data' parameter in the 'onLoad' event. fixed.
* Improvement
* draggable: Add 'onEndDrag' event.
* resizable: Retrieve more than one resizing directions with different edges.
* datagrid: Add 'resizeEdge' property.
* datagrid: Avoid the memory leaks.
* combo: The 'originalValue' property value is corrected in multiple mode.
* form: Add the tagbox to the form fields.
* tagbox: Add the 'reset' method.
* progress: Increase the response time to open and close the progress message window.
Version 1.5.2
-------------
* Bug
* form: The initialized value of the inputing box will disappear after calling the 'reset' method. fixed.
* textbox: Calling the 'destroy' method does not clean the field label. fixed.
* datagrid: Calling the 'selectRow' method on an unexisting row causes undesired record set. fixed.
* Improvement
* datagrid: The ctrl selection is supported on Mac keyboards.
* datagrid: The 'scrollOnSelect' property is available for the user to determine whether to scroll to the specified row when selecting it.
* combotree: Add the 'textField' property.
* combotreegrid: Add the 'textField' property.
* pagination: Add 'showPageInfo' property.
* panel: Add 'halign' and 'titleDirection' properties to allow the user to align the panel header to left or right side.
* accordion: Add 'halign' property to build the horizontal accordion.
* tagbox: The 'required' propery can be applied to validate whether the value is empty.
Version 1.5.1
-------------
* Bug
* datagrid: The selecting and checking flags will lose after calling 'updateRow' method. fixed.
* tabs: The trip tools have a wrong position when calling 'update' method. fixed.
* window: When the height is set to 'auto', it will disappear after moving the window. fixed.
* messager: When display the progress message window and then close it immediately, an exception occurs. fixed.
* form: The 'clear' method does not clear the selected drop-down items of the combobox. fixed.
* Improvement
* textbox: The 'cls' property is available to add a custom style to textbox.
* numberbox: Allow the user to format currency in Italian.
* combo: Add 'multivalue' property that allows the user to determine how to submit the multiple values.
* combobox: Add 'reversed' property.
* combobox: Add 'onClick' event.
* combogrid: Add 'reversed' property.
* treegrid: Enable multiple selection with the shift key.
* New Plugins
* tagbox: Allows the user to add tags to a form field.
Version 1.5
-------------
* Bug
* combobox: The 'onSelect' event does not fire when load data that contains the selected item. fixed.
* datagrid: The 'updateRow' method sometimes does not work properly when the field is set to a blank value. fixed.
* Improvement
* A label can be associated to any form fields.
* combobox: Enhance the 'select' and 'unselect' rules on the drop-down items.
* combobox: Add 'limitToList' property to limit the inputed values to the listed items.
* combogrid: Allow the user to clone the component quickly.
* form: Add the 'dirty' property that allows the user to submit the only changed fields.
* form: Add 'resetDirty' method.
* datagrid: Allow the user to display a message when there are no records to be shown.
* textbox: Add 'label','labelWidth','labelPosition' and 'labelAlign' properties.
* spinner: Add 'spinAlign' property.
* calendar: Allow the user to display week number of the year.
* window: Add 'constrain' property.
* New Plugins
* passwordbox: The plugin that allows the user to input passwords with nice feedback.
* combotreegrid: Combines combobox with drop-down treegrid component.
Version 1.4.5
-------------
* Bug
* datagrid: The 'getChanges' method does not return the updated rows after calling 'updateRow' method. fixed.
* treegrid: The 'onLoadSuccess' event fires when append or insert a row. fixed.
* tree: The 'onLoadSuccess' event fires when append or insert a node. fixed.
* Improvement
* window: The displaying style can be customized.
* window: The 'border' property allows the user to set different border style.
* navpanel: The 'href' property is enabled to load content from remote server.
* combotree: The 'setValue' and 'setValues' methods accept the paremter values in 'id' and 'text' pairs
* combobox: Add 'showItemIcon' property.
* combobox: Set 'groupPosition' property to 'sticky' to stick the item group to the top of drop-down panel.
* messager: Pressing ENTER key on input box will trigger click event of the first button.
* validatebox: Add 'editable',disabled' and 'readonly' properties.
* validatebox: Add 'enable','disable','readonly' methods.
* validatebox: Allow the user to determine how to display the error message.
* filebox: Add 'accept' and 'multiple' properties.
* form: Add 'iframe' property and 'onProgress' event.
* treegrid: Add cascade checkbox selection.
* treegrid: Add 'getCheckedNodes','checkNode' and 'uncheckNode' methods.
Version 1.4.4
-------------
* Bug
* filebox: The 'clear' and 'reset' methods do not work properly in IE9. fixed.
* messager: After calling $.messager.progress() with no arguments, the $.messager.progress('close') does not work properly. fixed.
* timespinner: The value does not display properly in IE8 while clicking the spin buttons. fixed.
* window: The window does not display when calling 'options' method in 'onMove' event. fixed.
* treegrid: The 'getLevel' method does not accept the parameter value of 0. fixed.
* Improvement
* layout: The 'collapsedContent','expandMode' and 'hideExpandTool' properties are supported in region panel.
* layout: The 'hideCollapsedContent' property can be set to display the vertical title bar on collapsed panel.
* layout: Add 'onCollapse','onExpand','onAdd','onRemove' events.
* datagrid: Display the 'up-down' icon on the sortable columns.
* datagrid: Add 'gotoPage' method.
* propertygrid: Add 'groups' method that allows to get all the data groups.
* messager: Auto scroll feature is supported when displaying long messages.
* tabs: The 'disabled' property is supported when defining a disabled tab panel.
* tabs: The percentange size is supported now.
Version 1.4.3
-------------
* Bug
* textbox: The 'setText' method does not accept value 0. fixed.
* timespinner: When running in IE11, the error occurs when clicking on the empty textbox. fixed.
* tabs: The 'update' method can not update only the panel body. fixed.
* Improvement
* combobox: Improve the performance of displaying the drop-down panel.
* combogrid: Remember the displaying text when the drop-down datagrid go to other pages.
* combogrid: The 'setValue' and 'setValues' methods accept a key-value object.
* window: The inline window's mask can auto-stretch its size to fill parent container.
* tabs: The 'showTool' and 'hideTool' methods are available for users to show or hide the tools.
* layout: Allow the user to override the 'cls','headerCls' and 'bodyCls' property values.
* New Plugins
* switchbutton: The switch button with two states:'on' and 'off'.
Version 1.4.2
-------------
* Bug
* treegrid: The column will restore its size to original size after recreating the treegrid. fixed.
* Improvement
* draggable: Add 'delay' property that allows the user to delay the drag operation.
* tree: Add 'filter' property and 'doFilter' method.
* tabs: The 'add' method allows the user to insert a tab panel at a specified index.
* tabs: The user can determine what tab panel can be selected.
* tabs: Add 'justified' and 'narrow' properties.
* layout: Add 'unsplit' and 'split' methods.
* messager: Keyboard navigation features are supported now.
* form: Add 'onChange' event.
* combobox: Add 'queryParams' property.
* slider: Add 'range' property.
* menu: Add 'itemHeight','inline','noline' properties.
* panel: The 'header' property allows the user to customize the panel header.
* menubutton: Add 'hasDownArrow' property.
* New Plugins
* datalist: The plugin to render items in a list.
* navpanel: The root component for the mobile page.
* mobile: The plugin to provide the mobile page stack management and navigation.
Version 1.4.1
-------------
* Bug
* combogrid: The combogrid has different height than other combo components. fixed.
* datagrid: The row element loses some class style value after calling 'updateRow' method. fixed.
* menubutton: Calling 'enable' method on a disabled button can not work well. fixed.
* form: The filebox components in the form do not work correctly after calling 'clear' method. fixed.
* Improvement
* tabs: The 'update' method accepts 'type' option that allows the user to update the header,body,or both.
* panel: Add 'openAnimation','openDuration','closeAnimation' and 'closeDuration' properties to set the animation for opening or closing a panel.
* panel: Add 'footer' property that allows the user to add a footer bar to the bottom of panel.
* datagrid: Calling 'endEdit' method will accept the editing value correctly.
* datagrid: Add 'onBeforeSelect','onBeforeCheck','onBeforeUnselect','onBeforeUncheck' events.
* propertygrid: The user can edit a row by calling 'beginEdit' method.
* datebox: Add 'cloneFrom' method to create the datebox component quickly.
* datetimebox: Add 'cloneFrom' method to create the datetimebox component quickly.
Version 1.4
-------------
* Bug
* menu: The menu should not has a correct height when removed a menu item. fixed.
* datagrid: The 'fitColumns' method does not work normally when the datarid width is too small. fixed.
* Improvement
* The fluid/percentange size is supported now for all easyui components.
* menu: Add 'showItem', 'hideItem' and 'resize' methods.
* menu: Auto resize the height upon the window size.
* menu: Add 'duration' property that allows the user to define duration time in milliseconds to hide menu.
* validatebox: Add 'onBeforeValidate' and 'onValidate' events.
* combo: Extended from textbox now.
* combo: Add 'panelMinWidth','panelMaxWidth','panelMinHeight' and 'panelMaxHeight' properties.
* searchbox: Extended from textbox now.
* tree: The 'getRoot' method will return the top parent node of a specified node if pass a 'nodeEl' parameter.
* tree: Add 'queryParams' property.
* datetimebox: Add 'spinnerWidth' property.
* panel: Add 'doLayout' method to cause the panel to lay out its components.
* panel: Add 'clear' method to clear the panel's content.
* datagrid: The user is allowed to assign percent width to columns.
* form: Add 'ajax','novalidate' and 'queryParams' properties.
* linkbutton: Add 'resize' method.
* New Plugins
* textbox: A enhanced input field that allows users build their form easily.
* datetimespinner: A date and time spinner that allows to pick a specific day.
* filebox: The filebox component represents a file field of the forms.
Version 1.3.6
-------------
* Bug
* treegrid: The 'getChecked' method can not return correct checked rows. fixed.
* tree: The checkbox does not display properly on async tree when 'onlyLeafCheck' property is true. fixed.
* Improvement
* treegrid: All the selecting and checking methods are extended from datagrid component.
* linkbutton: The icon alignment is fully supported, possible values are: 'top','bottom','left','right'.
* linkbutton: Add 'size' property, possible values are: 'small','large'.
* linkbutton: Add 'onClick' event.
* menubutton: Add 'menuAlign' property that allows the user set top level menu alignment.
* combo: Add 'panelAlign' property, possible values are: 'left','right'.
* calendar: The 'formatter','styler' and 'validator' options are available to custom the calendar dates.
* calendar: Add 'onChange' event.
* panel: Add 'method','queryParams' and 'loader' options.
* panel: Add 'onLoadError' event.
* datagrid: Add 'onBeginEdit' event that fires when a row goes into edit mode.
* datagrid: Add 'onEndEdit' event that fires when finishing editing but before destroying editors.
* datagrid: Add 'sort' method and 'onBeforeSortColumn' event.
* datagrid: The 'combogrid' editor has been integrated into datagrid.
* datagrid: Add 'ctrlSelect' property that only allows multi-selection when ctrl+click is used.
* slider: Add 'converter' option that allows users determine how to convert a value to the slider position or the slider position to the value.
* searchbox: Add 'disabled' property.
* searchbox: Add 'disable','enable','clear','reset' methods.
* spinner: Add 'readonly' property, 'readonly' method and 'onChange' event.
Version 1.3.5
-------------
* Bug
* searchbox: The 'searcher' function can not offer 'name' parameter value correctly. fixed.
* combo: The 'isValid' method can not return boolean value. fixed.
* combo: Clicking combo will trigger the 'onHidePanel' event of other combo components that have hidden drop-down panels. fixed.
* combogrid: Some methods can not inherit from combo. fixed.
* Improvement
* datagrid: Improve performance on checking rows.
* menu: Allows to append a menu separator.
* menu: Add 'hideOnUnhover' property to indicate if the menu should be hidden when mouse exits it.
* slider: Add 'clear' and 'reset' methods.
* tabs: Add 'unselect' method that will trigger 'onUnselect' event.
* tabs: Add 'selected' property to specify what tab panel will be opened.
* tabs: The 'collapsible' property of tab panel is supported to determine if the tab panel can be collapsed.
* tabs: Add 'showHeader' property, 'showHeader' and 'hideHeader' methods.
* combobox: The 'disabled' property can be used to disable some items.
* tree: Improve loading performance.
* pagination: The 'layout' property can be used to customize the pagination layout.
* accordion: Add 'unselect' method that will trigger 'onUnselect' event.
* accordion: Add 'selected' and 'multiple' properties.
* accordion: Add 'getSelections' method.
* datebox: Add 'sharedCalendar' property that allows multiple datebox components share one calendar component.
Version 1.3.4
-------------
* Bug
* combobox: The onLoadSuccess event fires when parsing empty local data. fixed.
* form: Calling 'reset' method can not reset datebox field. fixed.
* Improvement
* mobile: The context menu and double click features are supported on mobile devices.
* combobox: The 'groupField' and 'groupFormatter' options are available to display items in groups.
* tree: When append or insert nodes, the 'data' parameter accepts one or more nodes data.
* tree: The 'getChecked' method accepts a single 'state' or an array of 'state'.
* tree: Add 'scrollTo' method.
* datagrid: The 'multiSort' property is added to support multiple column sorting.
* datagrid: The 'rowStyler' and column 'styler' can return CSS class name or inline styles.
* treegrid: Add 'load' method to load data and navigate to the first page.
* tabs: Add 'tabWidth' and 'tabHeight' properties.
* validatebox: The 'novalidate' property is available to indicate whether to perform the validation.
* validatebox: Add 'enableValidation' and 'disableValidation' methods.
* form: Add 'enableValidation' and 'disableValidation' methods.
* slider: Add 'onComplete' event.
* pagination: The 'buttons' property accepts the existing element.
Version 1.3.3
-------------
* Bug
* datagrid: Some style features are not supported by column styler function. fixed.
* datagrid: IE 31 stylesheet limit. fixed.
* treegrid: Some style features are not supported by column styler function. fixed.
* menu: The auto width of menu item displays incorrect in ie6. fixed.
* combo: The 'onHidePanel' event can not fire when clicked outside the combo area. fixed.
* Improvement
* datagrid: Add 'scrollTo' and 'highlightRow' methods.
* treegrid: Enable treegrid to parse data from <tbody> element.
* combo: Add 'selectOnNavigation' and 'readonly' options.
* combobox: Add 'loadFilter' option to allow users to change data format before loading into combobox.
* tree: Add 'onBeforeDrop' callback event.
* validatebox: Dependent on tooltip plugin now, add 'deltaX' property.
* numberbox: The 'filter' options can be used to determine if the key pressed was accepted.
* linkbutton: The group button is available.
* layout: The 'minWidth','maxWidth','minHeight','maxHeight' and 'collapsible' properties are available for region panel.
* New Plugins
* tooltip: Display a popup message when moving mouse over an element.
Version 1.3.2
-------------
* Bug
* datagrid: The loading message window can not be centered when changing the width of datagrid. fixed.
* treegrid: The 'mergeCells' method can not work normally. fixed.
* propertygrid: Calling 'endEdit' method to stop editing a row will cause errors. fixed.
* tree: Can not load empty data when 'lines' property set to true. fixed.
* Improvement
* RTL feature is supported now.
* tabs: Add 'scrollBy' method to scroll the tab header by the specified amount of pixels
* tabs: Add 'toolPosition' property to set tab tools to left or right.
* tabs: Add 'tabPosition' property to define the tab position, possible values are: 'top','bottom','left','right'.
* datagrid: Add a column level property 'order' that allows users to define different default sort order per column.
* datagrid: Add a column level property 'halign' that allows users to define how to align the column header.
* datagrid: Add 'resizeHandle' property to define the resizing column position, by grabbing the left or right edge of the column.
* datagrid: Add 'freezeRow' method to freeze some rows that will always be displayed at the top when the datagrid is scrolled down.
* datagrid: Add 'clearChecked' method to clear all checked records.
* datagrid: Add 'data' property to initialize the datagrid data.
* linkbutton: Add 'iconAlgin' property to define the icon position, supported values are: 'left','right'.
* menu: Add 'minWidth' property.
* menu: The menu width can be automatically calculated.
* tree: New events are available including 'onBeforeDrag','onStartDrag','onDragEnter','onDragOver','onDragLeave',etc.
* combo: Add 'height' property to allow users to define the height of combo.
* combo: Add 'reset' method.
* numberbox: Add 'reset' method.
* spinner: Add 'reset' method.
* spinner: Add 'height' property to allow users to define the height of spinner.
* searchbox: Add 'height' property to allow users to define the height of searchbox.
* form: Add 'reset' method.
* validatebox: Add 'delay' property to delay validating from the last inputting value.
* validatebox: Add 'tipPosition' property to define the tip position, supported values are: 'left','right'.
* validatebox: Multiple validate rules on a field is supported now.
* slider: Add 'reversed' property to determine if the min value and max value will switch their positions.
* progressbar: Add 'height' property to allow users to define the height of progressbar.
Version 1.3.1
-------------
* Bug
* datagrid: Setting the 'pageNumber' property is not valid. fixed.
* datagrid: The id attribute of rows isn't adjusted properly while calling 'insertRow' or 'deleteRow' method.
* dialog: When load content from 'href', the script will run twice. fixed.
* propertygrid: The editors that extended from combo can not accept its changed value. fixed.
* Improvement
* droppable: Add 'disabled' property.
* droppable: Add 'options','enable' and 'disable' methods.
* tabs: The tab panel tools can be changed by calling 'update' method.
* messager: When show a message window, the user can define the window position by applying 'style' property.
* window: Prevent script on window body from running twice.
* window: Add 'hcenter','vcenter' and 'center' methods.
* tree: Add 'onBeforeCheck' callback event.
* tree: Extend the 'getChecked' method to allow users to get 'checked','unchecked' or 'indeterminate' nodes.
* treegrid: Add 'update' method to update a specified node.
* treegrid: Add 'insert' method to insert a new node.
* treegrid: Add 'pop' method to remove a node and get the removed node data.
Version 1.3
-----------
* Bug
* combogrid: When set to 'remote' query mode, the 'queryParams' parameters can't be sent to server. fixed.
* combotree: The tree nodes on drop-down panel can not be unchecked while calling 'clear' method. fixed.
* datetimebox: Setting 'showSeconds' property to false cannot hide seconds info. fixed.
* datagrid: Calling 'mergeCells' method can't auto resize the merged cell while header is hidden. fixed.
* dialog: Set cache to false and load data via ajax, the content cannot be refreshed. fixed.
* Improvement
* The HTML5 'data-options' attribute is available for components to declare all custom options, including properties and events.
* More detailed documentation is available.
* panel: Prevent script on panel body from running twice.
* accordion: Add 'getPanelIndex' method.
* accordion: The tools can be added on panel header.
* datetimebox: Add 'timeSeparator' option that allows users to define the time separator.
* pagination: Add 'refresh' and 'select' methods.
* datagrid: Auto resize the column width to fit the contents when the column width is not defined.
* datagrid: Double click on the right border of columns to auto resize the columns to the contents in the columns.
* datagrid: Add 'autoSizeColumn' method that allows users to adjust the column width to fit the contents.
* datagrid: Add 'getChecked' method to get all rows where the checkbox has been checked.
* datagrid: Add 'selectOnCheck' and 'checkOnSelect' properties and some checking methods to enhance the row selections.
* datagrid: Add 'pagePosition' property to allow users to display pager bar at either top,bottom or both places of the grid.
* datagrid: The buffer view and virtual scroll view are supported to display large amounts of records without pagination.
* tabs: Add 'disableTab' and 'enableTab' methods to allow users to disable or enable a tab panel.
Version 1.2.6
-------------
* Bug
* tabs: Call 'add' method with 'selected:false' option, the added tab panel is always selected. fixed.
* treegrid: The 'onSelect' and 'onUnselect' events can't be triggered. fixed.
* treegrid: Cannot display zero value field. fixed.
* Improvement
* propertygrid: Add 'expandGroup' and 'collapseGroup' methods.
* layout: Allow users to create collapsed layout panels by assigning 'collapsed' property to true.
* layout: Add 'add' and 'remove' methods that allow users to dynamically add or remove region panel.
* layout: Additional tool icons can be added on region panel header.
* calendar: Add 'firstDay' option that allow users to set first day of week. Sunday is 0, Monday is 1, ...
* tree: Add 'lines' option, true to display tree lines.
* tree: Add 'loadFilter' option that allow users to change data format before loading into the tree.
* tree: Add 'loader' option that allow users to define how to load data from remote server.
* treegrid: Add 'onClickCell' and 'onDblClickCell' callback function options.
* datagrid: Add 'autoRowHeight' property that allow users to determine if set the row height based on the contents of that row.
* datagrid: Improve performance to load large data set.
* datagrid: Add 'loader' option that allow users to define how to load data from remote server.
* treegrid: Add 'loader' option that allow users to define how to load data from remote server.
* combobox: Add 'onBeforeLoad' callback event function.
* combobox: Add 'loader' option that allow users to define how to load data from remote server.
* Add support for other loading mode such as dwr,xml,etc.
* New Plugins
* slider: Allows the user to choose a numeric value from a finite range.
Version 1.2.5
-------------
* Bug
* tabs: When add a new tab panel with href property, the content page is loaded twice. fixed.
* form: Failed to call 'load' method to load form input with complex name. fixed.
* draggable: End drag in ie9, the cursor cannot be restored. fixed.
* Improvement
* panel: The tools can be defined via html markup.
* tabs: Call 'close' method to close specified tab panel, users can pass tab title or index of tab panel. Other methods such 'select','getTab' and 'exists' are similar to 'close' method.
* tabs: Add 'getTabIndex' method.
* tabs: Users can define mini tools on tabs.
* tree: The mouse must move a specified distance to begin drag and drop operation.
* resizable: Add 'options','enable' and 'disable' methods.
* numberbox: Allow users to change number format.
* datagrid: The subgrid is supported now.
* searchbox: Add 'selectName' method to select searching type name.
Version 1.2.4
-------------
* Bug
* menu: The menu position is wrong when scroll bar appears. fixed.
* accordion: Cannot display the default selected panel in jQuery 1.6.2. fixed.
* tabs: Cannot display the default selected tab panel in jQuery 1.6.2. fixed.
* Improvement
* menu: Allow users to disable or enable menu item.
* combo: Add 'delay' property to set the delay time to do searching from the last key input event.
* treegrid: The 'getEditors' and 'getEditor' methods are supported now.
* treegrid: The 'loadFilter' option is supported now.
* messager: Add 'progress' method to display a message box with a progress bar.
* panel: Add 'extractor' option to allow users to extract panel content from ajax response.
* New Plugins
* searchbox: Allow users to type words into box and do searching operation.
* progressbar: To display the progress of a task.
Version 1.2.3
-------------
* Bug
* window: Cannot resize the window with iframe content. fixed.
* tree: The node will be removed when dragging to its child. fixed.
* combogrid: The onChange event fires multiple times. fixed.
* accordion: Cannot add batch new panels when animate property is set to true. fixed.
* Improvement
* treegrid: The footer row and row styler features are supported now.
* treegrid: Add 'getLevel','reloadFooter','getFooterRows' methods.
* treegrid: Support root nodes pagination and editable features.
* datagrid: Add 'getFooterRows','reloadFooter','insertRow' methods and improve editing performance.
* datagrid: Add 'loadFilter' option that allow users to change original source data to standard data format.
* draggable: Add 'onBeforeDrag' callback event function.
* validatebox: Add 'remote' validation type.
* combobox: Add 'method' option.
* New Plugins
* propertygrid: Allow users to edit property value in datagrid.
Version 1.2.2
-------------
* Bug
* datagrid: Apply fitColumns cannot work fine while set checkbox column. fixed.
* datagrid: The validateRow method cannot return boolean type value. fixed.
* numberbox: Cannot fix value in chrome when min or max property isn't defined. fixed.
* Improvement
* menu: Add some crud methods.
* combo: Add hasDownArrow property to determine whether to display the down arrow button.
* tree: Supports inline editing.
* calendar: Add some useful methods such as 'resize', 'moveTo' etc.
* timespinner: Add some useful methods.
* datebox: Refactoring based on combo and calendar plugin now.
* datagrid: Allow users to change row style in some conditions.
* datagrid: Users can use the footer row to display summary information.
* New Plugins
* datetimebox: Combines datebox with timespinner component.
Version 1.2.1
-------------
* Bug
* easyloader: Some dependencies cannot be loaded by their order. fixed.
* tree: The checkbox is setted incorrectly when removing a node. fixed.
* dialog: The dialog layout incorrectly when 'closed' property is setted to true. fixed.
* Improvement
* parser: Add onComplete callback function that can indicate whether the parse action is complete.
* menu: Add onClick callback function and some other methods.
* tree: Add some useful methods.
* tree: Drag and Drop feature is supported now.
* tree: Add onContextMenu callback function.
* tabs: Add onContextMenu callback function.
* tabs: Add 'tools' property that can create buttons on right bar.
* datagrid: Add onHeaderContextMenu and onRowContextMenu callback functions.
* datagrid: Custom view is supported.
* treegrid: Add onContextMenu callback function and append,remove methods.
Version 1.2
-------------
* Improvement
* tree: Add cascadeCheck,onlyLeafCheck properties and select event.
* combobox: Enable multiple selection.
* combotree: Enable multiple selection.
* tabs: Remember the trace of selection, when current tab panel is closed, the previous selected tab will be selected.
* datagrid: Extend from panel, so many properties defined in panel can be used for datagrid.
* New Plugins
* treegrid: Represent tabular data in hierarchical view, combines tree view and datagrid.
* combo: The basic component that allow user to extend their combo component such as combobox,combotree,etc.
* combogrid: Combines combobox with drop-down datagrid component.
* spinner: The basic plugin to create numberspinner,timespinner,etc.
* numberspinner: The numberbox that allow user to change value by clicking up and down spin buttons.
* timespinner: The time selector that allow user to quickly inc/dec a time.
Version 1.1.2
-------------
* Bug
* messager: When call show method in layout, the message window will be blocked. fixed.
* Improvement
* datagrid: Add validateRow method, remember the current editing row status when do editing action.
* datagrid: Add the ability to create merged cells.
* form: Add callback functions when loading data.
* panel,window,dialog: Add maximize,minimize,restore,collapse,expand methods.
* panel,tabs,accordion: The lazy loading feature is supported.
* tabs: Add getSelected,update,getTab methods.
* accordion: Add crud methods.
* linkbutton: Accept an id option to set the id attribute.
* tree: Enhance tree node operation.
Version 1.1.1
-------------
* Bug
* form: Cannot clear the value of combobox and combotree component. fixed.
* Improvement
* tree: Add some useful methods such as 'getRoot','getChildren','update',etc.
* datagrid: Add editable feature, improve performance while loading data.
* datebox: Add destroy method.
* combobox: Add destroy and clear method.
* combotree: Add destroy and clear method.
Version 1.1
-------------
* Bug
* messager: When call show method with timeout property setted, an error occurs while clicking the close button. fixed.
* combobox: The editable property of combobox plugin is invalid. fixed.
* window: The proxy box will not be removed when dragging or resizing exceed browser border in ie. fixed.
* Improvement
* menu: The menu item can use <a> markup to display a different page.
* tree: The tree node can use <a> markup to act as a tree menu.
* pagination: Add some event on refresh button and page list.
* datagrid: Add a 'param' parameter for reload method, with which users can pass query parameter when reload data.
* numberbox: Add required validation support, the usage is same as validatebox plugin.
* combobox: Add required validation support.
* combotree: Add required validation support.
* layout: Add some method that can get a region panel and attach event handlers.
* New Plugins
* droppable: A droppable plugin that supports drag drop operation.
* calendar: A calendar plugin that can either be embedded within a page or popup.
* datebox: Combines a textbox with a calendar that let users to select date.
* easyloader: A JavaScript loader that allows you to load plugin and their dependencies into your page.
Version 1.0.5
* Bug
* panel: The fit property of panel performs incorrectly. fixed.
* Improvement
* menu: Add a href attribute for menu item, with which user can display a different page in the current browser window.
* form: Add a validate method to do validation for validatebox component.
* dialog: The dialog can read collapsible,minimizable,maximizable and resizable attribute from markup.
* New Plugins
* validatebox: A validation plugin that checks to make sure the user's input value is valid.
Version 1.0.4
-------------
* Bug
* panel: When panel is invisible, it is abnormal when resized. fixed.
* panel: Memory leak in method 'destroy'. fixed.
* messager: Memory leak when messager box is closed. fixed.
* dialog: No onLoad event occurs when loading remote data. fixed.
* Improvement
* panel: Add method 'setTitle'.
* window: Add method 'setTitle'.
* dialog: Add method 'setTitle'.
* combotree: Add method 'getValue'.
* combobox: Add method 'getValue'.
* form: The 'load' method can load data and fill combobox and combotree field correctly.
Version 1.0.3
-------------
* Bug
* menu: When menu is show in a DIV container, it will be cropped. fixed.
* layout: If you collpase a region panel and then expand it immediately, the region panel will not show normally. fixed.
* accordion: If no panel selected then the first one will become selected and the first panel's body height will not set correctly. fixed.
* Improvement
* tree: Add some methods to support CRUD operation.
* datagrid: Toolbar can accept a new property named 'disabled' to disable the specified tool button.
* New Plugins
* combobox: Combines a textbox with a list of options that users are able to choose from.
* combotree: Combines combobox with drop-down tree component.
* numberbox: Make input element can only enter number char.
* dialog: rewrite the dialog plugin, dialog can contains toolbar and buttons.

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>AJAX Content</title>
</head>
<body>
<p style="font-size:14px">Here is the content loaded via AJAX.</p>
<ul>
<li>easyui is a collection of user-interface plugin based on jQuery.</li>
<li>easyui provides essential functionality for building modern, interactive, javascript applications.</li>
<li>using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.</li>
<li>complete framework for HTML5 web page.</li>
<li>easyui save your time and scales while developing your products.</li>
<li>easyui is very easy but powerful.</li>
</ul>
</body>
</html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Basic Accordion - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <span class="m-title">Basic Accordion</span> </div> </header> <div class="easyui-accordion" fit="true" border="false"> <div title="List"> <ul class="m-list"> <li>WLAN</li> <li>Memory</li> <li>Screen</li> <li>More...</li> </ul> </div> <div title="Ajax" href="_content.html" style="padding:10px"></div> </div> </div> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Custom Accordion Header - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <span class="m-title">Custom Accordion Header</span> </div> </header> <div class="easyui-accordion" data-options="fit:true,border:false,selected:-1"> <div> <header> <div class="hh-inner"> <span>List</span> <span class="m-badge" style="float:right">26/51</span> </div> </header> <ul class="m-list"> <li>WLAN</li> <li>Memory</li> <li>Screen</li> <li>More...</li> </ul> </div> <div href="_content.html" style="padding:10px"> <header> <div class="hh-inner"> <span>Ajax</span> <span style="float:right"> <span style="color:#999;margin-right:5px">Loading via ajax</span> <span class="m-badge">23</span> </span> </div> </header> </div> </div> </div> <style scoped> .hh-inner{ position: relative; line-height: 20px; background: #fff; font-weight: bold; margin: -5px; padding: 5px; } </style> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Basic Animation - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <span class="m-title">Basic Animation</span> </div> </header> <ul class="m-list"> <li><a href="#p2">Goto Panel2</a></li> </ul> </div> <div id="p2" class="easyui-navpanel"> <header> <div class="m-toolbar"> <div class="m-left"> <a href="#" class="easyui-linkbutton m-back" data-options="plain:true,outline:true,back:true">Back</a> </div> <div class="m-title">Panel2</div> </div> </header> <ul class="m-list"> <li><a href="#p3">Goto Panel3</a></li> </ul> </div> <div id="p3" class="easyui-navpanel"> <header> <div class="m-toolbar"> <div class="m-left"> <a href="#" class="easyui-linkbutton m-back" data-options="plain:true,outline:true,back:true">Back</a> </div> <div class="m-title">Panel3</div> </div> </header> <div style="padding:20px 10px"> <p>Panel3 Content.</p> </div> </div> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Fade Animation - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <span class="m-title">Fade Animation</span> </div> </header> <ul class="m-list"> <li><a href="#p2" data-options="animation:'fade',direction:''">Fade</a></li> </ul> </div> <div id="p2" class="easyui-navpanel"> <header> <div class="m-toolbar"> <div class="m-left"> <a href="#" class="easyui-linkbutton m-back" data-options="plain:true,outline:true,back:true">Back</a> </div> <div class="m-title">Panel2</div> </div> </header> <div style="padding:10px"> <p>Panel2 Content.</p> </div> </div> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Pop Animation - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <span class="m-title">Pop Animation</span> </div> </header> <ul class="m-list"> <li><a href="#p2" data-options="animation:'pop',direction:''">Pop</a></li> </ul> </div> <div id="p2" class="easyui-navpanel"> <header> <div class="m-toolbar"> <div class="m-left"> <a href="#" class="easyui-linkbutton m-back" data-options="plain:true,outline:true,back:true">Back</a> </div> <div class="m-title">Panel2</div> </div> </header> <div style="padding:10px"> <p>Panel2 Content.</p> </div> </div> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Slide Animation - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <span class="m-title">Slide Animation</span> </div> </header> <ul class="m-list"> <li><a href="#p2" data-options="animation:'slide',direction:'left'">Slide Left</a></li> <li><a href="#p2" data-options="animation:'slide',direction:'right'">Slide Right</a></li> <li><a href="#p2" data-options="animation:'slide',direction:'up'">Slide Up</a></li> <li><a href="#p2" data-options="animation:'slide',direction:'down'">Slide Down</a></li> </ul> </div> <div id="p2" class="easyui-navpanel"> <header> <div class="m-toolbar"> <div class="m-left"> <a href="#" class="easyui-linkbutton m-back" data-options="plain:true,outline:true,back:true">Back</a> </div> <div class="m-title">Panel2</div> </div> </header> <div style="padding:10px"> <p>Panel2 Content.</p> </div> </div> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Basic Badge - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <span class="m-title">Basic Badge</span> </div> </header> <div style="padding:20px 40px"> <a href="#" class="easyui-linkbutton"> Button<span class="m-badge">2</span> </a> </div> <div style="padding:20px 40px"> <a href="#" class="easyui-linkbutton" iconCls="icon-ok"> Button<span class="m-badge">3</span> </a> </div> <div style="padding:20px 40px"> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-large-picture',iconAlign:'top',size:'large'"> LargeButton<span class="m-badge">4</span> </a> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-large-shapes',iconAlign:'top',size:'large'" style="margin-left:20px"> LargeButton<span class="m-badge">5</span> </a> </div> <div style="padding:20px 40px"> <a href="#" class="easyui-linkbutton m-badge" data-badge="22" style="width:100px;height:40px">Badge Attr</a> <a href="#" class="easyui-linkbutton m-badge" data-badge="23" style="width:100px;height:40px;margin-left:20px">Badge Attr</a> </div> </div> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Button Badge - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <span class="m-title">Button Badge</span> </div> </header> <footer> <div class="m-buttongroup m-buttongroup-justified" style="width:100%"> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-large-picture',size:'large',iconAlign:'top',plain:true">Picture</a> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-large-clipart',size:'large',iconAlign:'top',plain:true">Clip Art</a> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-large-shapes',size:'large',iconAlign:'top',plain:true">Shapes<span class="m-badge">23</span></a> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-large-smartart',size:'large',iconAlign:'top',plain:true">SmartArt</a> </div> </footer> </div> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>List Badge - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/color.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <span class="m-title">List Badge</span> </div> </header> <ul class="m-list"> <li>Large <div class="m-right"><span class="m-badge" style="margin-top:10px">234</span></div> </li> <li>Spotted Adult Female <div class="m-right"><span class="m-badge" style="margin-top:10px">215</span></div> </li> <li>Venomless <div class="m-right"><span class="m-badge c1" style="margin-top:10px">12</span></div> </li> <li>Rattleless <div class="m-right"><span class="m-badge c2" style="margin-top:10px">6</span></div> </li> <li>Green Adult</li> <li>Tailless</li> <li>With tail</li> <li>Adult Female</li> </ul> </div> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Tabs Badge - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <div class="m-title">Tabs Badge</div> </div> </header> <div class="easyui-tabs" data-options="tabHeight:60,fit:true,tabPosition:'bottom',border:false,pill:true,narrow:true,justified:true"> <div style="padding:10px"> <div class="panel-header tt-inner"> <img src='../images/modem.png'/><br>Modem </div> <p>A modem (modulator-demodulator) is a device that modulates an analog carrier signal to encode digital information, and also demodulates such a carrier signal to decode the transmitted information.</p> </div> <div style="padding:10px"> <div class="panel-header tt-inner"> <img src='../images/scanner.png'/><br>Scanner </div> <p>In computing, an image scanner—often abbreviated to just scanner—is a device that optically scans images, printed text, handwriting, or an object, and converts it to a digital image.</p> </div> <div style="padding:10px"> <div class="panel-header tt-inner"> <img src='../images/pda.png'/><br>Pda <span class="m-badge">23</span> </div> <p>A personal digital assistant (PDA), also known as a palmtop computer, or personal data assistant, is a mobile device that functions as a personal information manager. PDAs are largely considered obsolete with the widespread adoption of smartphones.</p> </div> <div style="padding:10px"> <div class="panel-header tt-inner"> <img src='../images/tablet.png'/><br>Pda <span class="m-badge">13</span> </div> <p>A tablet computer, or simply tablet, is a one-piece mobile computer. Devices typically have a touchscreen, with finger or stylus gestures replacing the conventional computer mouse.</p> </div> </div> </div> <style scoped> .tt-inner{ display:inline-block; line-height:12px; padding-top:6px; position: relative; } p{ line-height:150%; } </style> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Basic LinkButton - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <span class="m-title">Login to System</span> </div> </header> <div style="margin:20px auto;width:100px;height:100px;border-radius:100px;overflow:hidden"> <img src="../images/login1.jpg" style="margin:0;width:100%;height:100%;"> </div> <div style="padding:0 20px"> <div style="margin-bottom:10px"> <input class="easyui-textbox" data-options="prompt:'Type username',iconCls:'icon-man'" style="width:100%;height:38px"> </div> <div> <input class="easyui-passwordbox" data-options="prompt:'Type password'" style="width:100%;height:38px"> </div> <div style="text-align:center;margin-top:30px"> <a href="#" class="easyui-linkbutton" style="width:100%;height:40px"><span style="font-size:16px">Login</span></a> </div> <div style="text-align:center;margin-top:30px"> <a href="#" class="easyui-linkbutton" plain="true" outline="true" style="width:100px;height:35px"><span style="font-size:16px">Register</span></a> </div> </div> </div> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Group LinkButton - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <div class="m-title">Button Group</div> </div> </header> <div style="text-align:center;padding:10px"> <span class="m-buttongroup"> <a href="javascript:void(0)" class="easyui-linkbutton" data-options="toggle:true,group:'g1',selected:true" onclick="show1('#m-modem')" style="width:80px;height:30px">Modem</a> <a href="javascript:void(0)" class="easyui-linkbutton" data-options="toggle:true,group:'g1'" onclick="show1('#m-scanner')" style="width:80px;height:30px">Scanner</a> <a href="javascript:void(0)" class="easyui-linkbutton" data-options="toggle:true,group:'g1'" onclick="show1('#m-tablet')" style="width:80px;height:30px">Tablet</a> </span> </div> <div id="items" style="padding:10px 20px;"> <div id="m-modem" class="m-item"> <img src="../images/modem.png"/> <p>A modem (modulator-demodulator) is a device that modulates an analog carrier signal to encode digital information, and also demodulates such a carrier signal to decode the transmitted information.</p> </div> <div id="m-scanner" class="m-item" style="display:none"> <img src="../images/scanner.png"/> <p>In computing, an image scanner—often abbreviated to just scanner—is a device that optically scans images, printed text, handwriting, or an object, and converts it to a digital image.</p> </div> <div id="m-tablet" class="m-item" style="display:none"> <img src="../images/tablet.png"/> <p>A tablet computer, or simply tablet, is a one-piece mobile computer. Devices typically have a touchscreen, with finger or stylus gestures replacing the conventional computer mouse.</p> </div> </div> </div> <script> function show1(id){ $('div.m-item').hide(); $(id).show(); } </script> <style scoped> p{ line-height:150%; } #items img{ margin:0 10px 10px 0; float:left; } </style> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Button Style - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/color.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <span class="m-title">Button Style</span> </div> </header> <div style="padding:20px"> <p>Style</p> <a href="#" class="easyui-linkbutton" style="width:80px">Normal</a> <a href="#" class="easyui-linkbutton" plain="true" outline="true" style="width:80px">Outline</a> <a href="#" class="easyui-linkbutton" disabled style="width:80px">Disabled</a> <p>Colors<p> <p><a href="#" class="easyui-linkbutton c1" style="width:100%">Button1</a></p> <p><a href="#" class="easyui-linkbutton c2" style="width:100%">Button2</a></p> <p><a href="#" class="easyui-linkbutton c3" style="width:100%">Button3</a></p> <p><a href="#" class="easyui-linkbutton c4" style="width:100%">Button4</a></p> <p><a href="#" class="easyui-linkbutton c5" style="width:100%">Button5</a></p> <p><a href="#" class="easyui-linkbutton c6" style="width:100%">Button6</a></p> </div> </div> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Switch Button - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/color.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <span class="m-title">Switch Button</span> </div> </header> <ul class="m-list"> <li> <span>Network</span> <div class="m-right"><input class="easyui-switchbutton" checked></div> </li> <li> <span>Bluetooth</span> <div class="m-right"><input class="easyui-switchbutton" checked></div> </li> <li> <span>Sent mail</span> <div class="m-right"><input class="easyui-switchbutton" data-options="checked:false"></div> </li> <li> <a href="javascript:void(0)">Storage...</a> </li> <li> <a href="javascript:void(0)">More...</a> </li> </ul> </div> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Basic DataGrid - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <table id="dg" data-options="header:'#hh',singleSelect:true,border:false,fit:true,fitColumns:true,scrollbarSize:0"> <thead> <tr> <th data-options="field:'itemid',width:80">Item ID</th> <th data-options="field:'productid',width:100">Product</th> <th data-options="field:'listprice',width:80,align:'right'">List Price</th> <th data-options="field:'unitcost',width:80,align:'right'">Unit Cost</th> </tr> </thead> </table> <div id="hh"> <div class="m-toolbar"> <div class="m-title">Basic DataGrid</div> </div> </div> <script> var data = [ {"productid":"FI-SW-01","productname":"Koi","unitcost":10.00,"status":"P","listprice":36.50,"attr1":"Large","itemid":"EST-1"}, {"productid":"K9-DL-01","productname":"Dalmation","unitcost":12.00,"status":"P","listprice":18.50,"attr1":"Spotted Adult Female","itemid":"EST-10"}, {"productid":"RP-SN-01","productname":"Rattlesnake","unitcost":12.00,"status":"P","listprice":38.50,"attr1":"Venomless","itemid":"EST-11"}, {"productid":"RP-SN-01","productname":"Rattlesnake","unitcost":12.00,"status":"P","listprice":26.50,"attr1":"Rattleless","itemid":"EST-12"}, {"productid":"RP-LI-02","productname":"Iguana","unitcost":12.00,"status":"P","listprice":35.50,"attr1":"Green Adult","itemid":"EST-13"}, {"productid":"FL-DSH-01","productname":"Manx","unitcost":12.00,"status":"P","listprice":158.50,"attr1":"Tailless","itemid":"EST-14"}, {"productid":"FL-DSH-01","productname":"Manx","unitcost":12.00,"status":"P","listprice":83.50,"attr1":"With tail","itemid":"EST-15"}, {"productid":"FL-DLH-02","productname":"Persian","unitcost":12.00,"status":"P","listprice":23.50,"attr1":"Adult Female","itemid":"EST-16"}, {"productid":"FL-DLH-02","productname":"Persian","unitcost":12.00,"status":"P","listprice":89.50,"attr1":"Adult Male","itemid":"EST-17"}, {"productid":"AV-CB-01","productname":"Amazon Parrot","unitcost":92.00,"status":"P","listprice":63.50,"attr1":"Adult Male","itemid":"EST-18"} ]; $(function(){ $('#dg').datagrid({ data: data }); }); </script> </body> </html>

@ -0,0 +1,104 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Row Editing DataGrid - jQuery EasyUI Mobile Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/mobile.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.mobile.js"></script>
</head>
<body>
<table id="dg" data-options="
header:'#hh',
iconCls: 'icon-edit',
singleSelect: true,
fit:true,
fitColumns:true,
border: false,
scrollbarSize: 0,
data: data,
onClickRow: onClickRow
">
<thead>
<tr>
<th data-options="field:'itemid',width:80">Item ID</th>
<th data-options="field:'productid',width:100,editor:'textbox'">Product</th>
<th data-options="field:'listprice',width:80,align:'right',editor:{type:'numberbox',options:{precision:1}}">List Price</th>
<th data-options="field:'unitcost',width:80,align:'right',editor:'numberbox'">Unit Cost</th>
</tr>
</thead>
</table>
<div id="hh">
<div class="m-toolbar">
<div class="m-title">Row Editing</div>
<div class="m-right">
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-remove',plain:true" onclick="removeit()"></a>
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-save',plain:true" onclick="accept()"></a>
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-undo',plain:true" onclick="reject()"></a>
</div>
</div>
</div>
<script type="text/javascript">
var data = [
{"productid":"FI-SW-01","productname":"Koi","unitcost":10.00,"status":"P","listprice":36.50,"attr1":"Large","itemid":"EST-1"},
{"productid":"K9-DL-01","productname":"Dalmation","unitcost":12.00,"status":"P","listprice":18.50,"attr1":"Spotted Adult Female","itemid":"EST-10"},
{"productid":"RP-SN-01","productname":"Rattlesnake","unitcost":12.00,"status":"P","listprice":38.50,"attr1":"Venomless","itemid":"EST-11"},
{"productid":"RP-SN-01","productname":"Rattlesnake","unitcost":12.00,"status":"P","listprice":26.50,"attr1":"Rattleless","itemid":"EST-12"},
{"productid":"RP-LI-02","productname":"Iguana","unitcost":12.00,"status":"P","listprice":35.50,"attr1":"Green Adult","itemid":"EST-13"},
{"productid":"FL-DSH-01","productname":"Manx","unitcost":12.00,"status":"P","listprice":158.50,"attr1":"Tailless","itemid":"EST-14"},
{"productid":"FL-DSH-01","productname":"Manx","unitcost":12.00,"status":"P","listprice":83.50,"attr1":"With tail","itemid":"EST-15"},
{"productid":"FL-DLH-02","productname":"Persian","unitcost":12.00,"status":"P","listprice":23.50,"attr1":"Adult Female","itemid":"EST-16"},
{"productid":"FL-DLH-02","productname":"Persian","unitcost":12.00,"status":"P","listprice":89.50,"attr1":"Adult Male","itemid":"EST-17"},
{"productid":"AV-CB-01","productname":"Amazon Parrot","unitcost":92.00,"status":"P","listprice":63.50,"attr1":"Adult Male","itemid":"EST-18"}
];
$(function(){
$('#dg').datagrid({
data: data
});
});
var editIndex = undefined;
function endEditing(){
if (editIndex == undefined){return true}
if ($('#dg').datagrid('validateRow', editIndex)){
$('#dg').datagrid('endEdit', editIndex);
editIndex = undefined;
return true;
} else {
return false;
}
}
function onClickRow(index){
if (editIndex != index){
if (endEditing()){
$('#dg').datagrid('selectRow', index)
.datagrid('beginEdit', index);
editIndex = index;
} else {
$('#dg').datagrid('selectRow', editIndex);
}
}
}
function removeit(){
if (editIndex == undefined){return}
$('#dg').datagrid('cancelEdit', editIndex)
.datagrid('deleteRow', editIndex);
editIndex = undefined;
}
function accept(){
if (endEditing()){
$('#dg').datagrid('acceptChanges');
}
}
function reject(){
$('#dg').datagrid('rejectChanges');
editIndex = undefined;
}
</script>
</body>
</html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Basic DataList - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <span class="m-title">Basic DataList</span> </div> </header> <ul class="easyui-datalist" data-options=" fit: true, lines: true, border: false "> <li>Large</li> <li>Spotted Adult Female</li> <li>Venomless</li> <li><a href="javascript:void(0)" class="datalist-link">Rattleless</a></li> <li><a href="javascript:void(0)" class="datalist-link">Green Adult</a></li> <li>Tailless</li> <li>With tail</li> <li>Adult Female</li> </ul> </div> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Group DataList - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <span class="m-title">Group DataList</span> </div> </header> <div id="dl" data-options=" fit: true, border: false, lines: true "> </div> </div> <div id="p2" class="easyui-navpanel"> <header> <div class="m-toolbar"> <span id="p2-title" class="m-title">Detail</span> <div class="m-left"> <a href="javascript:void(0)" class="easyui-linkbutton m-back" plain="true" outline="true" onclick="$.mobile.back()">Back</a> </div> </div> </header> <div style="margin:50px 0 0;text-align:center"> <a href="javascript:void(0)" class="easyui-linkbutton" style="width:100px;height:30px" onclick="$.mobile.back()">Go Back</a> </div> </div> <script> var data = [ {"group":"FL-DSH-01","item":"Tailless"}, {"group":"FL-DSH-01","item":"With tail"}, {"group":"FL-DSH-02","item":"Adult Female"}, {"group":"FL-DSH-02","item":"Adult Male"} ]; $(function(){ $('#dl').datalist({ data: data, textField: 'item', groupField: 'group', textFormatter: function(value){ return '<a href="javascript:void(0)" class="datalist-link">' + value + '</a>'; }, onClickRow: function(index,row){ $('#p2-title').html(row.item); $.mobile.go('#p2'); } }) }) </script> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>DataList Selection - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <span class="m-title">DataList Selection</span> </div> </header> <div id="dl" data-options=" fit: true, border: false, lines: true, checkbox: true, singleSelect: false "> </div> </div> <script> var data = [ {"group":"FL-DSH-01","item":"Tailless"}, {"group":"FL-DSH-01","item":"With tail"}, {"group":"FL-DSH-02","item":"Adult Female"}, {"group":"FL-DSH-02","item":"Adult Male"} ]; $(function(){ $('#dl').datalist({ data: data, textField: 'item', groupField: 'group' }) }) </script> </body> </html>

@ -0,0 +1,46 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Basic Dialog - jQuery EasyUI Mobile Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/mobile.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.mobile.js"></script>
</head>
<body>
<div class="easyui-navpanel" style="position:relative">
<header>
<div class="m-toolbar">
<div class="m-title">Basic Dialog</div>
</div>
</header>
<footer>
<div class="m-buttongroup m-buttongroup-justified" style="width:100%">
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-large-picture',size:'large',iconAlign:'top',plain:true">Picture</a>
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-large-clipart',size:'large',iconAlign:'top',plain:true">Clip Art</a>
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-large-shapes',size:'large',iconAlign:'top',plain:true">Shapes</a>
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-large-smartart',size:'large',iconAlign:'top',plain:true">SmartArt</a>
</div>
</footer>
<div style="text-align:center;margin:50px 30px">
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="plain:true,outline:true" style="width:80px;height:30px" onclick="$('#dlg1').dialog('open').dialog('center')">Login</a>
</div>
<div id="dlg1" class="easyui-dialog" style="padding:20px 6px;width:80%;" data-options="inline:true,modal:true,closed:true,title:'Login'">
<div style="margin-bottom:10px">
<input class="easyui-textbox" prompt="Username" style="width:100%;height:30px">
</div>
<div>
<input class="easyui-textbox" type="password" prompt="Password" style="width:100%;height:30px">
</div>
<div class="dialog-button">
<a href="javascript:void(0)" class="easyui-linkbutton" style="width:100%;height:35px" onclick="$('#dlg1').dialog('close')">Sign in</a>
</div>
</div>
</div>
</body>
</html>

@ -0,0 +1,41 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Message Dialog - jQuery EasyUI Mobile Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/mobile.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.mobile.js"></script>
</head>
<body>
<div class="easyui-navpanel" style="position:relative">
<header>
<div class="m-toolbar">
<div class="m-title">Message Dialog</div>
</div>
</header>
<footer>
<div class="m-buttongroup m-buttongroup-justified" style="width:100%;">
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-large-picture',size:'large',iconAlign:'top',plain:true">Picture</a>
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-large-clipart',size:'large',iconAlign:'top',plain:true">Clip Art</a>
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-large-shapes',size:'large',iconAlign:'top',plain:true">Shapes</a>
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-large-smartart',size:'large',iconAlign:'top',plain:true">SmartArt</a>
</div>
</footer>
<div style="text-align:center;margin:50px 30px">
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="plain:true,outline:true" style="width:80px;height:30px" onclick="$('#dlg1').dialog('open').dialog('center')">Click me</a>
</div>
<div id="dlg1" class="easyui-dialog" style="padding:20px 6px;width:80%;" data-options="inline:true,modal:true,closed:true,title:'Information'">
<p>This is a message dialog.</p>
<div class="dialog-button">
<a href="javascript:void(0)" class="easyui-linkbutton" style="width:100%;height:35px" onclick="$('#dlg1').dialog('close')">OK</a>
</div>
</div>
</div>
</body>
</html>

@ -0,0 +1,44 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Basic Form - jQuery EasyUI Mobile Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/mobile.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.mobile.js"></script>
</head>
<body>
<div class="easyui-navpanel" style="position:relative;padding:20px">
<header>
<div class="m-toolbar">
<div class="m-title">Basic Form</div>
<div class="m-right">
<a href="javascript:void(0)" class="easyui-linkbutton" plain="true" outline="true" onclick="$('#ff').form('reset')" style="width:60px">Reset</a>
</div>
</div>
</header>
<form id="ff">
<div style="margin-bottom:10px">
<input class="easyui-textbox" label="Full name:" prompt="Full name" style="width:100%">
</div>
<div style="margin-bottom:10px">
<input class="easyui-datebox" label="Birthday:" prompt="Birthday" data-options="editable:false,panelWidth:220,panelHeight:240,iconWidth:30" style="width:100%">
</div>
<div style="margin-bottom:10px">
<input class="easyui-passwordbox" label="Password:" prompt="Password" style="width:100%">
</div>
<div style="margin-bottom:10px">
<input class="easyui-numberbox" label="Number:" prompt="Number" style="width:100%">
</div>
<div style="margin-bottom:10px">
<label class="textbox-label">Switch:</label><!--
--><input class="easyui-switchbutton">
</div>
</form>
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>NumberSpinner - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <div class="m-title">NumberSpinner</div> </div> </header> <ul class="m-list"> <li> <input class="easyui-numberspinner" style="width:100%;" data-options=" label: 'Basic Number:', labelPosition: 'top' "> </li> <li> <input class="easyui-numberspinner" style="width:100%;" data-options=" label: 'Increment Number:', labelPosition: 'top', value: 1000, increment: 100 "> </li> <li> <input class="easyui-numberspinner" style="width:100%;" data-options=" label: 'Format Number:', labelPosition: 'top', value: 23893, groupSeparator: ',', decimalSeparator: '.', prefix: '$' "> </li> </ul> </div> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>TextBox - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <div class="m-title">TextBox</div> </div> </header> <ul class="m-list"> <li> <input class="easyui-textbox" style="width:100%" data-options=" label: 'Standard TextBox:', labelPosition: 'top', prompt: 'Search...' "> </li> <li> <input class="easyui-textbox" style="width:100%" data-options=" label: 'Icon:', labelPosition: 'top', iconCls: 'icon-search' "> </li> <li> <input class="easyui-textbox" style="width:100%" data-options=" label: 'Button:', labelPosition: 'top', buttonText: 'Search' "> </li> </ul> </div> </body> </html>

@ -0,0 +1,32 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Basic Layout - jQuery EasyUI Mobile Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/mobile.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.mobile.js"></script>
</head>
<body>
<div class="easyui-navpanel">
<header>
<div class="m-toolbar">
<div class="m-title">Layout</div>
<div class="m-left">
<a href="javascript:void(0)" class="easyui-linkbutton m-back" plain="true" outline="true">Back</a>
</div>
<div class="m-right">
<a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-search" plain="true" outline="true">Search</a>
</div>
</div>
</header>
<footer style="padding:2px 3px">
<input class="easyui-textbox" style="width:100%;height:32px;" data-options="prompt:'Type something here',buttonText:'<span style=\'padding:0 15px\'>Send</span>'">
</footer>
</div>
</body>
</html>

@ -0,0 +1,39 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Basic Menu - jQuery EasyUI Mobile Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/mobile.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.mobile.js"></script>
</head>
<body>
<div class="easyui-navpanel">
<header>
<div class="m-toolbar">
<div class="m-title">Menu</div>
<div class="m-right">
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-search',plain:true"></a>
<a href="javascript:void(0)" class="easyui-menubutton" data-options="iconCls:'icon-more',menu:'#mm',menuAlign:'right',hasDownArrow:false"></a>
</div>
</div>
</header>
</div>
<div id="mm" class="easyui-menu" style="width:150px;">
<div data-options="iconCls:'icon-undo'">Undo</div>
<div data-options="iconCls:'icon-redo'">Redo</div>
<div class="menu-sep"></div>
<div>Cut</div>
<div>Copy</div>
<div>Paste</div>
<div class="menu-sep"></div>
<div>Toolbar</div>
<div data-options="iconCls:'icon-remove'">Delete</div>
<div>Select All</div>
</div>
</body>
</html>

@ -0,0 +1,45 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Menubar - jQuery EasyUI Mobile Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/mobile.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.mobile.js"></script>
</head>
<body>
<div class="easyui-navpanel">
<header>
<div class="m-toolbar">
<div class="m-title">
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="plain:true,outline:true" style="width:70px">Home</a>
<a href="javascript:void(0)" class="easyui-menubutton" data-options="menu:'#mm1',iconCls:'icon-edit',outline:true" style="width:70px">Edit</a>
<a href="javascript:void(0)" class="easyui-menubutton" data-options="menu:'#mm2',iconCls:'icon-help',outline:true" style="width:75px">Help</a>
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="plain:true,outline:true" style="width:70px">About</a>
</div>
</div>
</header>
</div>
<div id="mm1" class="easyui-menu" style="width:150px;">
<div data-options="iconCls:'icon-undo'">Undo</div>
<div data-options="iconCls:'icon-redo'">Redo</div>
<div class="menu-sep"></div>
<div>Cut</div>
<div>Copy</div>
<div>Paste</div>
<div class="menu-sep"></div>
<div>Toolbar</div>
<div data-options="iconCls:'icon-remove'">Delete</div>
<div>Select All</div>
</div>
<div id="mm2" style="width:100px;">
<div>Help</div>
<div>Update</div>
<div>About</div>
</div>
</body>
</html>

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>AJAX Content</title>
</head>
<body>
<p style="font-size:14px">Here is the content loaded via AJAX.</p>
<ul>
<li>easyui is a collection of user-interface plugin based on jQuery.</li>
<li>easyui provides essential functionality for building modern, interactive, javascript applications.</li>
<li>using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.</li>
<li>complete framework for HTML5 web page.</li>
<li>easyui save your time and scales while developing your products.</li>
<li>easyui is very easy but powerful.</li>
</ul>
</body>
</html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Ajax Panel - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel" data-options="href:'_content.html'" style="padding:10px"> <header> <div class="m-toolbar"> <div class="m-title">Ajax Panel</div> </div> </header> <footer> <div class="m-toolbar"> <div class="m-title">Panel Footer</div> </div> </footer> </div> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Basic Panel - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <div class="m-title">Panel Header</div> </div> </header> <footer> <div class="m-toolbar"> <div class="m-title">Panel Footer</div> </div> </footer> </div> </body> </html>

@ -0,0 +1,39 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Navigation Panel - jQuery EasyUI Mobile Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/mobile.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.mobile.js"></script>
</head>
<body>
<div class="easyui-navpanel">
<header>
<div class="m-toolbar">
<div class="m-title">Navigation</div>
</div>
</header>
<div style="margin:50px 0 0;text-align:center">
<a href="javascript:void(0)" class="easyui-linkbutton" style="width:100px;height:30px" onclick="$.mobile.go('#p2')">Goto Panel2</a>
</div>
</div>
<div id="p2" class="easyui-navpanel">
<header>
<div class="m-toolbar">
<div class="m-title">Panel2</div>
<div class="m-left">
<a href="#" class="easyui-linkbutton m-back" data-options="plain:true,outline:true,back:true">Back</a>
</div>
</div>
</header>
<div style="margin:50px 0 0;text-align:center">
<a href="javascript:void(0)" class="easyui-linkbutton" onclick="$.mobile.back()">Go Back</a>
</div>
</div>
</body>
</html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Simple List - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <span class="m-title">Simple List</span> </div> </header> <ul class="m-list"> <li>Large</li> <li>Spotted Adult Female</li> <li>Venomless</li> <li>Rattleless</li> <li>Green Adult</li> <li>Tailless</li> <li>With tail</li> <li>Adult Female</li> </ul> </div> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Button on List - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> <style> </style> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <span class="m-title">Button on List</span> </div> </header> <ul class="m-list"> <li>HP Deskjet 1000 Printer <div class="m-right"> <a href="javascript:void(0)" class="easyui-linkbutton">Add</a> </div> </li> <li>Epson WorkForce 845 <div class="m-right"> <a href="javascript:void(0)" class="easyui-linkbutton">Add</a> </div> </li> <li>Logitech Keyboard K120 <div class="m-right"> <a href="javascript:void(0)" class="easyui-linkbutton">Add</a> </div> </li> <li>Nikon COOLPIX L26 16.1 MP <div class="m-right"> <a href="javascript:void(0)" class="easyui-linkbutton">Add</a> </div> </li> <li>SanDisk Sansa Clip Zip 4GB <div class="m-right"> <a href="javascript:void(0)" class="easyui-linkbutton">Add</a> </div> </li> <li>BLUE MP3 Metal Mini Clip Player <div class="m-right"> <a href="javascript:void(0)" class="easyui-linkbutton">Add</a> </div> </li> </ul> </div> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Group List - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <span class="m-title">Group List</span> </div> </header> <ul class="m-list"> <li class="m-list-group">FL-DSH-01</li> <li><a href="javascript:void(0)" onclick="openit(this)">Large</a></li> <li><a href="javascript:void(0)" onclick="openit(this)">Spotted Adult Female</a></li> <li><a href="javascript:void(0)" onclick="openit(this)">Venomless</a></li> <li><a href="javascript:void(0)" onclick="openit(this)">Rattleless</a></li> <li><a href="javascript:void(0)" onclick="openit(this)">Green Adult</a></li> <li><a href="javascript:void(0)" onclick="openit(this)">Tailless</a></li> <li class="m-list-group">FL-DSH-02</li> <li><a href="javascript:void(0)" onclick="openit(this)">With tail</a></li> <li><a href="javascript:void(0)" onclick="openit(this)">Adult Female</a></li> </ul> </div> <div id="p2" class="easyui-navpanel"> <header> <div class="m-toolbar"> <span id="p2-title" class="m-title">Detail</span> <div class="m-left"> <a href="javascript:void(0)" class="easyui-linkbutton m-back" plain="true" outline="true" onclick="$.mobile.back()">Back</a> </div> </div> </header> <div style="margin:50px 0 0;text-align:center"> <a href="javascript:void(0)" class="easyui-linkbutton" style="width:100px;height:30px" onclick="$.mobile.back()">Go Back</a> </div> </div> <script type="text/javascript"> function openit(target){ var text = $(target).text(); $('#p2-title').html(text); $.mobile.go('#p2'); } </script> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>List with Image - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <span class="m-title">List with Image</span> </div> </header> <ul id="list" class="m-list"> <li> <img class="list-image" src="../images/modem.png"/> <div class="list-header">modem</div> <div class="list-content">modulates an analog carrier signal to encode digital information.</div> </li> <li> <img class="list-image" src="../images/scanner.png"/> <div class="list-header">scanner</div> <div class="list-content">scans images, printed text, handwriting, or an object.</div> </li> <li> <img class="list-image" src="../images/pda.png"/> <div class="list-header">pda</div> <div class="list-content">A personal digital assistant.</div> </li> <li> <img class="list-image" src="../images/tablet.png"/> <div class="list-header">tablet</div> <div class="list-content">one-piece mobile computer.</div> </li> </ul> </div> <style scoped> #list .list-image{ width: 32px; height: 32px; border: 0; margin-right: 5px; float: left; } #list .list-header{ font-size: 16px; font-weight: bold; } #list .list-content{ text-overflow: ellipsis; overflow: hidden; } </style> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Link List - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <span class="m-title">Link List</span> </div> </header> <ul class="m-list"> <li><a href="javascript:void(0)" onclick="openit(this)">Large</a></li> <li><a href="javascript:void(0)" onclick="openit(this)">Spotted Adult Female</a></li> <li><a href="javascript:void(0)" onclick="openit(this)">Venomless</a></li> <li><a href="javascript:void(0)" onclick="openit(this)">Rattleless</a></li> <li><a href="javascript:void(0)" onclick="openit(this)">Green Adult</a></li> <li><a href="javascript:void(0)" onclick="openit(this)">Tailless</a></li> <li><a href="javascript:void(0)" onclick="openit(this)">With tail</a></li> <li><a href="javascript:void(0)" onclick="openit(this)">Adult Female</a></li> </ul> </div> <div id="p2" class="easyui-navpanel"> <header> <div class="m-toolbar"> <span id="p2-title" class="m-title">Detail</span> <div class="m-left"> <a href="javascript:void(0)" class="easyui-linkbutton m-back" plain="true" outline="true" onclick="$.mobile.back()">Back</a> </div> </div> </header> <div style="margin:50px 0 0;text-align:center"> <a href="javascript:void(0)" class="easyui-linkbutton" style="width:100px;height:30px" onclick="$.mobile.back()">Go Back</a> </div> </div> <script type="text/javascript"> function openit(target){ var text = $(target).text(); $('#p2-title').html(text); $.mobile.go('#p2'); } </script> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Basic Tabs - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-tabs" data-options="fit:true,border:false,tabWidth:80,tabHeight:35"> <div title="Java" style="padding:10px"> <p>Java is a general-purpose, concurrent, class-based, object-oriented computer programming language that is specifically designed to have as few implementation dependencies as possible.</p> <p>Java applications are typically compiled to bytecode (class file) that can run on any Java virtual machine (JVM) regardless of computer architecture.</p> </div> <div title="Fortran" style="padding:10px"> <p>Fortran (previously FORTRAN) is a general-purpose, imperative programming language that is especially suited to numeric computation and scientific computing. Originally developed by IBM at their campus in south San Jose, California[1] in the 1950s for scientific and engineering applications.</p> </div> <div title="Perl" style="padding:10px"> <p>Perl is a family of high-level, general-purpose, interpreted, dynamic programming languages. The languages in this family include Perl 5 and Perl 6.</p> <p>Though Perl is not officially an acronym, there are various backronyms in use, such as: Practical Extraction and Reporting Language. Perl was originally developed by Larry Wall in 1987 as a general-purpose Unix scripting language to make report processing easier. Since then, it has undergone many changes and revisions.</p> </div> </div> <style scoped> p{ line-height:150%; } </style> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Navigation Tabs - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-navpanel"> <header> <div class="m-toolbar"> <div class="m-title">Devices</div> </div> </header> <div class="easyui-tabs" data-options="tabHeight:60,fit:true,tabPosition:'bottom',border:false,pill:true,narrow:true,justified:true"> <div style="padding:10px"> <div class="panel-header tt-inner"> <img src='../images/modem.png'/><br>Modem </div> <p>A modem (modulator-demodulator) is a device that modulates an analog carrier signal to encode digital information, and also demodulates such a carrier signal to decode the transmitted information.</p> </div> <div style="padding:10px"> <div class="panel-header tt-inner"> <img src='../images/scanner.png'/><br>Scanner </div> <p>In computing, an image scanner—often abbreviated to just scanner—is a device that optically scans images, printed text, handwriting, or an object, and converts it to a digital image.</p> </div> <div style="padding:10px"> <div class="panel-header tt-inner"> <img src='../images/pda.png'/><br>Pda </div> <p>A personal digital assistant (PDA), also known as a palmtop computer, or personal data assistant, is a mobile device that functions as a personal information manager. PDAs are largely considered obsolete with the widespread adoption of smartphones.</p> </div> <div style="padding:10px"> <div class="panel-header tt-inner"> <img src='../images/tablet.png'/><br>Pda </div> <p>A tablet computer, or simply tablet, is a one-piece mobile computer. Devices typically have a touchscreen, with finger or stylus gestures replacing the conventional computer mouse.</p> </div> </div> </div> <style scoped> .tt-inner{ display:inline-block; line-height:12px; padding-top:5px; } p{ line-height:150%; } </style> </body> </html>

@ -0,0 +1 @@
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Pill Tabs - jQuery EasyUI Mobile Demo</title> <link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css"> <link rel="stylesheet" type="text/css" href="../../themes/mobile.css"> <link rel="stylesheet" type="text/css" href="../../themes/icon.css"> <script type="text/javascript" src="../../jquery.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.min.js"></script> <script type="text/javascript" src="../../jquery.easyui.mobile.js"></script> </head> <body> <div class="easyui-tabs" data-options="fit:true,border:false,pill:true,justified:true,tabWidth:80,tabHeight:35"> <div title="Java" style="padding:10px"> <p>Java is a general-purpose, concurrent, class-based, object-oriented computer programming language that is specifically designed to have as few implementation dependencies as possible.</p> <p>Java applications are typically compiled to bytecode (class file) that can run on any Java virtual machine (JVM) regardless of computer architecture.</p> </div> <div title="Fortran" style="padding:10px"> <p>Fortran (previously FORTRAN) is a general-purpose, imperative programming language that is especially suited to numeric computation and scientific computing. Originally developed by IBM at their campus in south San Jose, California[1] in the 1950s for scientific and engineering applications.</p> </div> <div title="Perl" style="padding:10px"> <p>Perl is a family of high-level, general-purpose, interpreted, dynamic programming languages. The languages in this family include Perl 5 and Perl 6.</p> <p>Though Perl is not officially an acronym, there are various backronyms in use, such as: Practical Extraction and Reporting Language. Perl was originally developed by Larry Wall in 1987 as a general-purpose Unix scripting language to make report processing easier. Since then, it has undergone many changes and revisions.</p> </div> </div> <style scoped> p{ line-height:150%; } </style> </body> </html>

@ -0,0 +1,63 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Basic Toolbar - jQuery EasyUI Mobile Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/mobile.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.mobile.js"></script>
</head>
<body>
<div class="easyui-navpanel">
<header>
<div class="m-toolbar">
<div class="m-title">Basic Toolbar</div>
<div class="m-left">
<a href="javascript:void(0)" class="easyui-linkbutton m-back" plain="true" outline="true">Back</a>
</div>
<div class="m-right">
<a href="javascript:void(0)" class="easyui-linkbutton m-next" plain="true" outline="true">Next</a>
</div>
</div>
</header>
<ul class="easyui-datalist" data-options="
fit: true,
lines: true,
border: false,
textFormatter: function(value){
return '<a href\'javascript:void(0)\' class=\'datalist-link\'>' + value + '</a>';
},
onClickRow: function(index,row){
$('#p2-title').html(row.text);
$.mobile.go('#p2');
}
">
<li>Large</li>
<li>Spotted Adult Female</li>
<li>Venomless</li>
<li>Rattleless</li>
<li>Green Adult</li>
<li>Tailless</li>
<li>With tail</li>
<li>Adult Female</li>
</ul>
</div>
<div id="p2" class="easyui-navpanel">
<header>
<div class="m-toolbar">
<span id="p2-title" class="m-title">Detail</span>
<div class="m-left">
<a href="javascript:void(0)" class="easyui-linkbutton m-back" plain="true" outline="true" onclick="$.mobile.back()">Back</a>
</div>
</div>
</header>
<div style="margin:50px 0 0;text-align:center">
<a href="javascript:void(0)" class="easyui-linkbutton" style="width:100px;height:30px" onclick="$.mobile.back()">Go Back</a>
</div>
</div>
</body>
</html>

@ -0,0 +1,45 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Toolbar Button - jQuery EasyUI Mobile Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/mobile.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.mobile.js"></script>
</head>
<body>
<div class="easyui-navpanel">
<header>
<div class="m-toolbar">
<div class="m-title">Toolbar Button</div>
</div>
</header>
<footer>
<div class="m-buttongroup m-buttongroup-justified" style="width:100%">
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-large-picture',size:'large',iconAlign:'top',plain:true">Picture</a>
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-large-clipart',size:'large',iconAlign:'top',plain:true">Clip Art</a>
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-large-shapes',size:'large',iconAlign:'top',plain:true">Shapes</a>
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-large-smartart',size:'large',iconAlign:'top',plain:true">SmartArt</a>
</div>
</footer>
<ul class="easyui-datalist" data-options="
fit: true,
lines: true,
border: false
">
<li>Large</li>
<li>Spotted Adult Female</li>
<li>Venomless</li>
<li>Rattleless</li>
<li>Green Adult</li>
<li>Tailless</li>
<li>With tail</li>
<li>Adult Female</li>
</ul>
</div>
</body>
</html>

@ -0,0 +1,76 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Menu on Toolbar - jQuery EasyUI Mobile Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/mobile.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.mobile.js"></script>
</head>
<body>
<div class="easyui-navpanel">
<header>
<div class="m-toolbar">
<div class="m-title">Menu on Toolbar</div>
<div class="m-left">
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-man',plain:true"></a>
</div>
<div class="m-right">
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-search',plain:true"></a>
<a href="javascript:void(0)" class="easyui-menubutton" data-options="iconCls:'icon-more',plain:true,hasDownArrow:false,menu:'#mm',menuAlign:'right'"></a>
</div>
</div>
</header>
<div id="mm" class="easyui-menu" style="width:150px;" data-options="itemHeight:30,noline:true">
<div data-options="iconCls:'icon-undo'">Undo</div>
<div data-options="iconCls:'icon-redo'">Redo</div>
<div class="menu-sep"></div>
<div>Cut</div>
<div>Copy</div>
<div>Paste</div>
<div class="menu-sep"></div>
<div>Toolbar</div>
<div data-options="iconCls:'icon-remove'">Delete</div>
<div>Select All</div>
</div>
<ul class="easyui-datalist" data-options="
fit: true,
lines: true,
border: false,
textFormatter: function(value){
return '<a href\'javascript:void(0)\' class=\'datalist-link\'>' + value + '</a>';
},
onClickRow: function(index,row){
$('#p2-title').html(row.text);
$.mobile.go('#p2');
}
">
<li>Large</li>
<li>Spotted Adult Female</li>
<li>Venomless</li>
<li>Rattleless</li>
<li>Green Adult</li>
<li>Tailless</li>
<li>With tail</li>
<li>Adult Female</li>
</ul>
</div>
<div id="p2" class="easyui-navpanel">
<header>
<div class="m-toolbar">
<span id="p2-title" class="m-title">Detail</span>
<div class="m-left">
<a href="javascript:void(0)" class="easyui-linkbutton m-back" plain="true" outline="true" onclick="$.mobile.back()">Back</a>
</div>
</div>
</header>
<div style="margin:50px 0 0;text-align:center">
<a href="javascript:void(0)" class="easyui-linkbutton" style="width:100px;height:30px" onclick="$.mobile.back()">Go Back</a>
</div>
</div>
</body>
</html>

@ -0,0 +1,56 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Basic Tree - jQuery EasyUI Mobile Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/mobile.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.mobile.js"></script>
</head>
<body>
<div class="easyui-navpanel" style="padding:10px">
<header>
<div class="m-toolbar">
<div class="m-title">Basic Tree</div>
</div>
</header>
<ul class="easyui-tree" data-options="animate:true">
<li>
<span>My Documents</span>
<ul>
<li data-options="state:'closed'">
<span>Photos</span>
<ul>
<li>
<span>Friend</span>
</li>
<li>
<span>Wife</span>
</li>
<li>
<span>Company</span>
</li>
</ul>
</li>
<li>
<span>Program Files</span>
<ul>
<li>Intel</li>
<li>Java</li>
<li>Microsoft Office</li>
<li>Games</li>
</ul>
</li>
<li>index.html</li>
<li>about.html</li>
<li>welcome.html</li>
</ul>
</li>
</ul>
</div>
</body>
</html>

@ -0,0 +1,56 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Drag Drop Tree Nodes - jQuery EasyUI Mobile Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/metro/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/mobile.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.mobile.js"></script>
</head>
<body>
<div class="easyui-navpanel" style="padding:10px">
<header>
<div class="m-toolbar">
<div class="m-title">Drag Drop Tree Nodes</div>
</div>
</header>
<ul class="easyui-tree" data-options="animate:true,dnd:true">
<li>
<span>My Documents</span>
<ul>
<li data-options="state:'closed'">
<span>Photos</span>
<ul>
<li>
<span>Friend</span>
</li>
<li>
<span>Wife</span>
</li>
<li>
<span>Company</span>
</li>
</ul>
</li>
<li>
<span>Program Files</span>
<ul>
<li>Intel</li>
<li>Java</li>
<li>Microsoft Office</li>
<li>Games</li>
</ul>
</li>
<li>index.html</li>
<li>about.html</li>
<li>welcome.html</li>
</ul>
</li>
</ul>
</div>
</body>
</html>

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>AJAX Content</title>
</head>
<body>
<p style="font-size:14px">Here is the content loaded via AJAX.</p>
<ul>
<li>easyui is a collection of user-interface plugin based on jQuery.</li>
<li>easyui provides essential functionality for building modern, interactive, javascript applications.</li>
<li>using easyui you don't need to write many javascript code, you usually defines user-interface by writing some HTML markup.</li>
<li>complete framework for HTML5 web page.</li>
<li>easyui save your time and scales while developing your products.</li>
<li>easyui is very easy but powerful.</li>
</ul>
</body>
</html>

@ -0,0 +1,51 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Accordion Actions - jQuery EasyUI Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<link rel="stylesheet" type="text/css" href="../demo.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
</head>
<body>
<h2>Accordion Actions</h2>
<p>Click the buttons below to add or remove accordion items.</p>
<div style="margin:20px 0 10px 0;">
<a href="javascript:void(0)" class="easyui-linkbutton" onclick="selectPanel()">Select</a>
<a href="javascript:void(0)" class="easyui-linkbutton" onclick="addPanel()">Add</a>
<a href="javascript:void(0)" class="easyui-linkbutton" onclick="removePanel()">Remove</a>
</div>
<div id="aa" class="easyui-accordion" style="width:500px;height:300px;">
<div title="About" data-options="iconCls:'icon-ok'" style="overflow:auto;padding:10px;">
<h3 style="color:#0099FF;">Accordion for jQuery</h3>
<p>Accordion is a part of easyui framework for jQuery. It lets you define your accordion component on web page more easily.</p>
</div>
</div>
<script type="text/javascript">
function selectPanel(){
$.messager.prompt('Prompt','Please enter the panel title:',function(s){
if (s){
$('#aa').accordion('select',s);
}
});
}
var idx = 1;
function addPanel(){
$('#aa').accordion('add',{
title:'Title'+idx,
content:'<div style="padding:10px">Content'+idx+'</div>'
});
idx++;
}
function removePanel(){
var pp = $('#aa').accordion('getSelected');
if (pp){
var index = $('#aa').accordion('getPanelIndex',pp);
$('#aa').accordion('remove',index);
}
}
</script>
</body>
</html>

@ -0,0 +1,28 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Loading Accordion Content with AJAX - jQuery EasyUI Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<link rel="stylesheet" type="text/css" href="../demo.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
</head>
<body>
<h2>Loading Accordion Content with AJAX</h2>
<p>Click AJAX panel header to load content via AJAX.</p>
<div style="margin:20px 0 10px 0;"></div>
<div class="easyui-accordion" style="width:500px;height:300px;">
<div title="About" data-options="iconCls:'icon-ok'" style="overflow:auto;padding:10px;">
<h3 style="color:#0099FF;">Accordion for jQuery</h3>
<p>Accordion is a part of easyui framework for jQuery. It lets you define your accordion component on web page more easily.</p>
</div>
<div title="Help" data-options="iconCls:'icon-help'" style="padding:10px;">
<p>The accordion allows you to provide multiple panels and display one or more at a time. Each panel has built-in support for expanding and collapsing. Clicking on a panel header to expand or collapse that panel body. The panel content can be loaded via ajax by specifying a 'href' property. Users can define a panel to be selected. If it is not specified, then the first panel is taken by default.</p>
</div>
<div title="Ajax" data-options="href:'_content.html'" style="padding:10px">
</div>
</div>
</body>
</html>

@ -0,0 +1,52 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Basic Accordion - jQuery EasyUI Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<link rel="stylesheet" type="text/css" href="../demo.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
</head>
<body>
<h2>Basic Accordion</h2>
<p>Click on panel header to show its content.</p>
<div style="margin:20px 0 10px 0;"></div>
<div class="easyui-accordion" style="width:500px;height:300px;">
<div title="About" data-options="iconCls:'icon-ok'" style="overflow:auto;padding:10px;">
<h3 style="color:#0099FF;">Accordion for jQuery</h3>
<p>Accordion is a part of easyui framework for jQuery. It lets you define your accordion component on web page more easily.</p>
</div>
<div title="Help" data-options="iconCls:'icon-help'" style="padding:10px;">
<p>The accordion allows you to provide multiple panels and display one or more at a time. Each panel has built-in support for expanding and collapsing. Clicking on a panel header to expand or collapse that panel body. The panel content can be loaded via ajax by specifying a 'href' property. Users can define a panel to be selected. If it is not specified, then the first panel is taken by default.</p>
</div>
<div title="TreeMenu" data-options="iconCls:'icon-search'" style="padding:10px 0;">
<ul class="easyui-tree">
<li>
<span>Foods</span>
<ul>
<li>
<span>Fruits</span>
<ul>
<li>apple</li>
<li>orange</li>
</ul>
</li>
<li>
<span>Vegetables</span>
<ul>
<li>tomato</li>
<li>carrot</li>
<li>cabbage</li>
<li>potato</li>
<li>lettuce</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</body>
</html>

@ -0,0 +1,12 @@
{"total":28,"rows":[
{"productid":"FI-SW-01","productname":"Koi","unitcost":10.00,"status":"P","listprice":36.50,"attr1":"Large","itemid":"EST-1"},
{"productid":"K9-DL-01","productname":"Dalmation","unitcost":12.00,"status":"P","listprice":18.50,"attr1":"Spotted Adult Female","itemid":"EST-10"},
{"productid":"RP-SN-01","productname":"Rattlesnake","unitcost":12.00,"status":"P","listprice":38.50,"attr1":"Venomless","itemid":"EST-11"},
{"productid":"RP-SN-01","productname":"Rattlesnake","unitcost":12.00,"status":"P","listprice":26.50,"attr1":"Rattleless","itemid":"EST-12"},
{"productid":"RP-LI-02","productname":"Iguana","unitcost":12.00,"status":"P","listprice":35.50,"attr1":"Green Adult","itemid":"EST-13"},
{"productid":"FL-DSH-01","productname":"Manx","unitcost":12.00,"status":"P","listprice":158.50,"attr1":"Tailless","itemid":"EST-14"},
{"productid":"FL-DSH-01","productname":"Manx","unitcost":12.00,"status":"P","listprice":83.50,"attr1":"With tail","itemid":"EST-15"},
{"productid":"FL-DLH-02","productname":"Persian","unitcost":12.00,"status":"P","listprice":23.50,"attr1":"Adult Female","itemid":"EST-16"},
{"productid":"FL-DLH-02","productname":"Persian","unitcost":12.00,"status":"P","listprice":89.50,"attr1":"Adult Male","itemid":"EST-17"},
{"productid":"AV-CB-01","productname":"Amazon Parrot","unitcost":92.00,"status":"P","listprice":63.50,"attr1":"Adult Male","itemid":"EST-18"}
]}

@ -0,0 +1,33 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Keep Expandable Panel in Accordion - jQuery EasyUI Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<link rel="stylesheet" type="text/css" href="../demo.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
</head>
<body>
<h2>Keep Expandable Panel in Accordion</h2>
<p>Keep a expandable panel and prevent it from collapsing.</p>
<div style="margin:20px 0 10px 0;"></div>
<div class="easyui-accordion" style="width:500px;height:300px;">
<div title="Top Panel" data-options="iconCls:'icon-search',collapsed:false,collapsible:false" style="padding:10px;">
<input class="easyui-searchbox" prompt="Enter something here" style="width:300px;">
</div>
<div title="About" data-options="selected:true" style="padding:10px;">
<h3 style="color:#0099FF;">Accordion for jQuery</h3>
<p>Accordion is a part of easyui framework for jQuery. It lets you define your accordion component on web page more easily.</p>
</div>
<div title="Title1" style="padding:10px">
<p>Content1</p>
</div>
<div title="Title2" style="padding:10px">
<p>Content2</p>
</div>
</div>
</body>
</html>

@ -0,0 +1,33 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Fluid Accordion - jQuery EasyUI Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<link rel="stylesheet" type="text/css" href="../demo.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
</head>
<body>
<h2>Fluid Accordion</h2>
<p>This example shows how to set the width of accordion to a percentage of its parent container.</p>
<div style="margin:20px 0 10px 0;"></div>
<div class="easyui-accordion" style="width:100%;height:180px;">
<div title="About" data-options="iconCls:'icon-ok'" style="overflow:auto;padding:10px;">
<p>width: 100%</p>
</div>
<div title="Help" data-options="iconCls:'icon-help',href:'_content.html'" style="padding:10px;">
</div>
</div>
<div style="margin:20px 0 10px 0;"></div>
<div class="easyui-accordion" style="width:50%;height:180px;">
<div title="About" data-options="iconCls:'icon-ok'" style="overflow:auto;padding:10px;">
<p>width: 50%</p>
</div>
<div title="Help" data-options="iconCls:'icon-help',href:'_content.html'" style="padding:10px;">
</div>
</div>
</body>
</html>

@ -0,0 +1,52 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Horizontal Accordion - jQuery EasyUI Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<link rel="stylesheet" type="text/css" href="../demo.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
</head>
<body>
<h2>Horizontal Accordion</h2>
<p>You can easily set the 'halign' property to create a horizontal accordion.</p>
<div style="margin:20px 0 10px 0;"></div>
<div class="easyui-accordion" halign="left" style="width:700px;height:300px;">
<div title="About" titleDirection="up" style="overflow:auto;padding:10px;">
<h3 style="color:#0099FF;">Accordion for jQuery</h3>
<p>Accordion is a part of easyui framework for jQuery. It lets you define your accordion component on web page more easily.</p>
</div>
<div title="Help" titleDirection="up" style="padding:10px;">
<p>The accordion allows you to provide multiple panels and display one or more at a time. Each panel has built-in support for expanding and collapsing. Clicking on a panel header to expand or collapse that panel body. The panel content can be loaded via ajax by specifying a 'href' property. Users can define a panel to be selected. If it is not specified, then the first panel is taken by default.</p>
</div>
<div title="TreeMenu" titleDirection="up" style="padding:10px;">
<ul class="easyui-tree">
<li>
<span>Foods</span>
<ul>
<li>
<span>Fruits</span>
<ul>
<li>apple</li>
<li>orange</li>
</ul>
</li>
<li>
<span>Vegetables</span>
<ul>
<li>tomato</li>
<li>carrot</li>
<li>cabbage</li>
<li>potato</li>
<li>lettuce</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</body>
</html>

@ -0,0 +1,34 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Multiple Accordion Panels - jQuery EasyUI Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<link rel="stylesheet" type="text/css" href="../demo.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
</head>
<body>
<h2>Multiple Accordion Panels</h2>
<p>Enable 'multiple' mode to expand multiple panels at one time.</p>
<div style="margin:20px 0 10px 0;"></div>
<div class="easyui-accordion" data-options="multiple:true" style="width:500px;">
<div title="Language" data-options="iconCls:'icon-ok'" style="overflow:auto;padding:10px;">
<p>A programming language is a formal language designed to communicate instructions to a machine, particularly a computer. Programming languages can be used to create programs that control the behavior of a machine and/or to express algorithms precisely.</p>
</div>
<div title="Java" style="padding:10px;">
<p>Java (Indonesian: Jawa) is an island of Indonesia. With a population of 135 million (excluding the 3.6 million on the island of Madura which is administered as part of the provinces of Java), Java is the world's most populous island, and one of the most densely populated places in the world.</p>
</div>
<div title="C#" style="padding:10px;">
<p>C# is a multi-paradigm programming language encompassing strong typing, imperative, declarative, functional, generic, object-oriented (class-based), and component-oriented programming disciplines.</p>
</div>
<div title="Ruby" style="padding:10px;">
<p>A dynamic, reflective, general-purpose object-oriented programming language.</p>
</div>
<div title="Fortran" style="padding:10px;">
<p>Fortran (previously FORTRAN) is a general-purpose, imperative programming language that is especially suited to numeric computation and scientific computing.</p>
</div>
</div>
</body>
</html>

@ -0,0 +1,48 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Accordion Tools - jQuery EasyUI Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<link rel="stylesheet" type="text/css" href="../demo.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
</head>
<body>
<h2>Accordion Tools</h2>
<p>Click the tools on top right of panel to perform actions.</p>
<div style="margin:20px 0 10px 0;"></div>
<div class="easyui-accordion" style="width:500px;height:300px;">
<div title="About" data-options="iconCls:'icon-ok'" style="overflow:auto;padding:10px;">
<h3 style="color:#0099FF;">Accordion for jQuery</h3>
<p>Accordion is a part of easyui framework for jQuery. It lets you define your accordion component on web page more easily.</p>
</div>
<div title="Help" data-options="iconCls:'icon-help'" style="padding:10px;">
<p>The accordion allows you to provide multiple panels and display one ore more at a time. Each panel has built-in support for expanding and collapsing. Clicking on a panel header to expand or collapse that panel body. The panel content can be loaded via ajax by specifying a 'href' property. Users can define a panel to be selected. If it is not specified, then the first panel is taken by default.</p>
</div>
<div title="DataGrid" style="padding:10px" data-options="
selected:true,
tools:[{
iconCls:'icon-reload',
handler:function(){
$('#dg').datagrid('reload');
}
}]">
<table id="dg" class="easyui-datagrid"
data-options="url:'datagrid_data1.json',method:'get',fit:true,fitColumns:true,singleSelect:true">
<thead>
<tr>
<th data-options="field:'itemid',width:80">Item ID</th>
<th data-options="field:'productid',width:100">Product ID</th>
<th data-options="field:'listprice',width:80,align:'right'">List Price</th>
<th data-options="field:'unitcost',width:80,align:'right'">Unit Cost</th>
<th data-options="field:'attr1',width:150">Attribute</th>
<th data-options="field:'status',width:50,align:'center'">Status</th>
</tr>
</thead>
</table>
</div>
</div>
</body>
</html>

@ -0,0 +1,19 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Basic Calendar - jQuery EasyUI Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<link rel="stylesheet" type="text/css" href="../demo.css">
<script type="text/javascript" src="../../jquery.min.js"></script>
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
</head>
<body>
<h2>Basic Calendar</h2>
<p>Click to select date.</p>
<div style="margin:20px 0"></div>
<div class="easyui-calendar" style="width:250px;height:250px;"></div>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save