Warning, /maui/strike/src/main.qml is written in an unsupported language. File is not indexed.
0001 import QtQuick 2.14 0002 import QtQml 2.14 0003 0004 import QtQuick.Controls 2.14 0005 import QtQuick.Layouts 1.3 0006 0007 import Qt.labs.settings 1.0 0008 0009 import org.mauikit.controls 1.3 as Maui 0010 import org.mauikit.filebrowsing 1.3 as FB 0011 0012 import org.slike.strike 1.0 as Strike 0013 0014 import "views" 0015 import "views/editor" 0016 import "views/widgets" as Widgets 0017 0018 Maui.ApplicationWindow 0019 { 0020 id: root 0021 title: currentEditor ? currentTab.title : "" 0022 0023 property alias project : _project 0024 property alias manager : _project.manager 0025 0026 property alias currentTab : editorView.currentTab 0027 property alias currentEditor: editorView.currentEditor 0028 property alias dialog : _dialogLoader.item 0029 0030 readonly property font defaultFont: 0031 { 0032 family: "Monospace" 0033 pointSize: Maui.Style.fontSizes.default 0034 } 0035 0036 //Global editor props 0037 property alias appSettings: settings 0038 0039 property Strike.CMakeProject _cmakeProject : _project.manager.project 0040 0041 Maui.WindowBlur 0042 { 0043 view: root 0044 geometry: Qt.rect(root.x, root.y, root.width, root.height) 0045 windowRadius: Maui.Style.radiusV 0046 enabled: !Maui.Handy.isMobile 0047 } 0048 0049 Settings 0050 { 0051 id: settings 0052 category: "General" 0053 0054 property bool showLineNumbers : true 0055 property bool autoSave : true 0056 property bool supportSplit :true 0057 property double tabSpace: 8 0058 property string theme : "" 0059 property color backgroundColor : root.Maui.Theme.backgroundColor 0060 property color textColor : root.Maui.Theme.textColor 0061 property bool enableSidebar: true 0062 property font font : defaultFont 0063 } 0064 0065 Strike.Project 0066 { 0067 id: _project 0068 preferences.installPrefix: "/usr" 0069 0070 onProjectUrlChanged: 0071 { 0072 _initialConfigDialog.open() 0073 editorView.openTab(projectUrl) 0074 } 0075 } 0076 0077 onCurrentEditorChanged: 0078 { 0079 syncSidebar(currentEditor.fileUrl) 0080 editorView.outputPanel.syncTerminal(currentEditor.fileUrl) 0081 } 0082 0083 onClosing: 0084 { 0085 _dialogLoader.sourceComponent = _unsavedDialogComponent 0086 0087 dialog.callback = function () {root.close()} 0088 0089 if(!dialog.discard) 0090 { 0091 for(var i = 0; i < editorView.count; i++) 0092 { 0093 if(editorView.tabHasUnsavedFiles(i)) 0094 { 0095 close.accepted = false 0096 dialog.open() 0097 return 0098 } 0099 } 0100 } 0101 0102 close.accepted = true 0103 } 0104 0105 Widgets.ProjectConfigDialog 0106 { 0107 id: _initialConfigDialog 0108 0109 filling: !root.isWide 0110 maxHeight: 400 0111 maxWidth: 350 0112 hint: 1 0113 } 0114 0115 Loader 0116 { 0117 id: _dialogLoader 0118 } 0119 0120 Component 0121 { 0122 id: _unsavedDialogComponent 0123 0124 Maui.InfoDialog 0125 { 0126 property bool discard : false 0127 property var callback : ({}) 0128 0129 title: i18n("Unsaved files") 0130 message: i18n("You have unsaved files. Do you want to go back and save them or discard all changes and exit?") 0131 0132 template.iconSource: "emblem-warning" 0133 0134 standardButtons: Dialog.Save | Dialog.Discard 0135 0136 onRejected: 0137 { 0138 discard = true 0139 0140 if(callback instanceof Function) 0141 { 0142 callback() 0143 } 0144 close() 0145 } 0146 0147 onAccepted: close() 0148 } 0149 } 0150 0151 Component 0152 { 0153 id: _settingsDialogComponent 0154 Widgets.SettingsDialog 0155 {} 0156 } 0157 0158 Component 0159 { 0160 id: _fileDialogComponent 0161 FB.FileDialog 0162 { 0163 settings.onlyDirs: false 0164 settings.filterType: FB.FMList.TEXT 0165 settings.sortBy: FB.FMList.MODIFIED 0166 } 0167 } 0168 0169 Component 0170 { 0171 id: _tagsDialogComponent 0172 FB.TagsDialog 0173 { 0174 onTagsReady: composerList.updateToUrls(tags) 0175 composerList.strict: false 0176 taglist.strict: false 0177 } 0178 } 0179 0180 Maui.SideBarView 0181 { 0182 id: _sideBarView 0183 0184 anchors.fill: parent 0185 0186 sideBar.preferredWidth: Maui.Style.units.gridUnit*16 0187 sideBar.minimumWidth: Maui.Style.units.gridUnit*14 0188 sideBar.enabled: editorView.count > 0 && settings.enableSidebar 0189 0190 Connections 0191 { 0192 target: _sideBarView.sideBar 0193 function onVisibleChanged() 0194 { 0195 if(currentEditor) 0196 syncSidebar(currentEditor.fileUrl) 0197 } 0198 } 0199 0200 sideBarContent: PlacesSidebar 0201 { 0202 id : _drawer 0203 anchors.fill: parent 0204 } 0205 0206 DropArea 0207 { 0208 id: _dropArea 0209 property var urls : [] 0210 anchors.fill: parent 0211 onDropped: 0212 { 0213 if(drop.urls) 0214 { 0215 var m_urls = drop.urls.join(",") 0216 _dropArea.urls = m_urls.split(",") 0217 Strike.Strike.requestFiles( _dropArea.urls ) 0218 } 0219 } 0220 } 0221 0222 EditorView 0223 { 0224 id: editorView 0225 anchors.fill: parent 0226 showCSDControls: true 0227 0228 headBar.forceCenterMiddleContent: false 0229 0230 headBar.farLeftContent: ToolButton 0231 { 0232 visible: _sideBarView.sideBar.enabled 0233 Layout.minimumWidth: implicitWidth 0234 Layout.alignment: Qt.AlignLeft 0235 icon.name: _sideBarView.sideBar.visible ? "sidebar-collapse" : "sidebar-expand" 0236 onClicked: _sideBarView.sideBar.toggle() 0237 0238 checked: _sideBarView.sideBar.visible 0239 0240 ToolTip.delay: 1000 0241 ToolTip.timeout: 5000 0242 ToolTip.visible: hovered 0243 ToolTip.text: i18n("Toogle SideBar") 0244 } 0245 0246 headBar.rightContent: [ 0247 0248 Maui.ToolButtonMenu 0249 { 0250 icon.name: "list-add" 0251 0252 0253 MenuItem 0254 { 0255 icon.name: "applications-development" 0256 text: i18n("Create New Project") 0257 0258 onTriggered: 0259 { 0260 openFileDialog() 0261 control.close() 0262 } 0263 } 0264 0265 MenuItem 0266 { 0267 icon.name: "folder" 0268 text: i18n("Open Project") 0269 0270 onTriggered: 0271 { 0272 0273 _dialogLoader.sourceComponent = _fileDialogComponent 0274 dialog.mode = dialog.modes.OPEN 0275 // dialog.singleSelection = true 0276 dialog.settings.filters = ["CMakeLists.txt"] 0277 dialog.callback = function (urls) 0278 { 0279 _projectManager.projectUrl = urls[0] 0280 } 0281 dialog.open() 0282 control.close() 0283 } 0284 } 0285 0286 MenuItem 0287 { 0288 icon.name: "text-plain" 0289 text: i18n("Open File") 0290 0291 onTriggered: 0292 { 0293 openFileDialog() 0294 control.close() 0295 } 0296 } 0297 0298 MenuItem 0299 { 0300 icon.name: "text-enriched" 0301 text: i18n("New Template Source File") 0302 0303 onTriggered: 0304 { 0305 openTab("") 0306 // _editorListView.currentItem.body.textFormat = TextEdit.RichText 0307 control.close() 0308 } 0309 } 0310 MenuSeparator{} 0311 MenuItem 0312 { 0313 text: i18n("Settings") 0314 icon.name: "settings-configure" 0315 onTriggered: 0316 { 0317 _dialogLoader.sourceComponent = _settingsDialogComponent 0318 dialog.open() 0319 } 0320 } 0321 0322 MenuItem 0323 { 0324 text: i18n("About") 0325 icon.name: "documentinfo" 0326 onTriggered: root.about() 0327 } 0328 } 0329 ] 0330 0331 headBar.middleContent: Widgets.BuildBar 0332 { 0333 Layout.fillWidth: true 0334 Layout.alignment: Qt.AlignCenter 0335 Layout.maximumWidth: 300 0336 Layout.minimumWidth: 0 0337 } 0338 0339 } 0340 } 0341 0342 Connections 0343 { 0344 target: Strike.Strike 0345 function onOpenFiles(urls) 0346 { 0347 for(var i in urls) 0348 editorView.openTab(urls[i]) 0349 } 0350 } 0351 0352 function syncSidebar(path) 0353 { 0354 if(path && FB.FM.fileExists(path)) 0355 { 0356 _drawer.browser.openFolder(FB.FM.fileDir(path)) 0357 } 0358 } 0359 0360 function openFileDialog() 0361 { 0362 _dialogLoader.sourceComponent = _fileDialogComponent 0363 dialog.mode = dialog.modes.OPEN 0364 dialog.callback = function (urls) 0365 { 0366 for(var url of urls) 0367 { 0368 editorView.openTab(url) 0369 } 0370 } 0371 dialog.open() 0372 } 0373 }