Skip to content

Commit 6e07089

Browse files
committed
rework StatusWidget to new API, move change build settings to build
1 parent 4cb7392 commit 6e07089

26 files changed

+439
-666
lines changed

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

VERSION.md

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
### Version History
66
- [CLionArduinoPlugin Version Notes](#clionarduinoplugin-version-notes)
77
- [TO DO](#to-do)
8-
- [1.5.11 Next](#1511-next)
8+
- [1.5.15 Next](#1515-next)
9+
- [1.5.11](#1511)
910
- [1.5.9](#159)
1011
- [1.5.7](#157)
1112
- [1.5.6](#156)
@@ -45,8 +46,20 @@
4546
* [ ] Add: documentation for Windows installation to readme
4647
* [ ] Fix: update for latest flexmark-java lib 0.60.0
4748

48-
### 1.5.11 Next
49+
### 1.5.15 Next
4950

51+
* [ ] Add: check project settings and `CMakeLists.txt` and if they are out of sync:
52+
* Offer to delete `cmake` directory in project if using non-bundled toolchain and it is not
53+
the project's toolchain in `cmake`
54+
* Offer to add the directory if it is missing
55+
* Add: inspection to check that `CMakeLists.txt` is out of sync, especially if missing the
56+
toolchain file.
57+
* Fix: allow directories to be selected for toolchain file path.
58+
* Fix: if a directory is selected add `ArduinoToolchain.cmake` file name automatically.
59+
60+
### 1.5.11
61+
62+
* Change: minimum supported version is `201.6668.113`
5063
* Add: Toolchain file path option, wth diff and create, to allow not having a `cmake` directory
5164
and tool chain files in every project. Also allows to use different toolchain than
5265
`ArduinoCmake.cmake`.
@@ -282,11 +295,11 @@
282295
* Compiled with Java 6 for compatibility with OS X out of the box
283296

284297
[#22, Open Existing Project files]: https://github.com/vsch/CLionArduinoPlugin/issues/22
298+
[Add LIBS input property to GENERATE_ARDUINO_EXAMPLE by ryanpfeeley · Pull Request #3 · francoiscampbell/arduino-cmake · GitHub]: https://github.com/francoiscampbell/arduino-cmake/pull/3 "Add LIBS input property to GENERATE_ARDUINO_EXAMPLE by ryanpfeeley · Pull Request #3 · francoiscampbell/arduino-cmake · GitHub"
285299
[Allow setting ARDUINO_SDK_PATH as environment variable]: https://github.com/Pro/arduino-cmake/commit/2f069184b029dbe5f91dd55e24b854ee79641510
286300
[Bug fix: Allow linking for sketches]: https://github.com/francoiscampbell/arduino-cmake/pull/10
287301
[Include directories when setting up the library. Added Servo_RECURSE.]: https://github.com/francoiscampbell/arduino-cmake/commit/dbd4fe372b9a0120325b429b3ed23c311ab3dc66
302+
[Let source files depend on included local header files by ntninja · Pull Request #4 · francoiscampbell/arduino-cmake · GitHub]: https://github.com/francoiscampbell/arduino-cmake/pull/4 "Let source files depend on included local header files by ntninja · Pull Request #4 · francoiscampbell/arduino-cmake · GitHub"
288303
[Support for ESP32 using Arduino libs]: https://github.com/altexdim/arduino-cmake/commit/f21fd1ae0c48583c2b498a24cfa2e65814fff483
289304
[arduino-cmake]: https://github.com/queezythegreat/arduino-cmake
290-
[Let source files depend on included local header files by ntninja · Pull Request #4 · francoiscampbell/arduino-cmake · GitHub]: https://github.com/francoiscampbell/arduino-cmake/pull/4 "Let source files depend on included local header files by ntninja · Pull Request #4 · francoiscampbell/arduino-cmake · GitHub"
291-
[Add LIBS input property to GENERATE_ARDUINO_EXAMPLE by ryanpfeeley · Pull Request #3 · francoiscampbell/arduino-cmake · GitHub]: https://github.com/francoiscampbell/arduino-cmake/pull/3 "Add LIBS input property to GENERATE_ARDUINO_EXAMPLE by ryanpfeeley · Pull Request #3 · francoiscampbell/arduino-cmake · GitHub"
292305

resources/META-INF/plugin.xml

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<name>Arduino Support</name>
55
<vendor email="" url="https://github.com/vsch/CLionArduinoPlugin">Vladimir Schneider</vendor>
66

7-
<version>1.5.11</version>
7+
<version>1.5.15</version>
88
<!-- please see https://confluence.jetbrains.com/display/IDEADEV/Plugin+Compatibility+with+IntelliJ+Platform+Products
99
on how to target different products -->
1010
<depends>com.intellij.modules.clion</depends>
@@ -284,42 +284,25 @@
284284
canCloseContents="false"
285285
secondary="false"
286286
icon="PluginIcons.serial_port_tool"
287-
largeStripeAnchor="left"
288-
/>
287+
largeStripeAnchor="left"/>
289288

290289
<statusBarWidgetFactory implementation="com.vladsch.clionarduinoplugin.serial.SerialMonitorStatusBarWidgetFactory"
291-
id="ArduinoSupport.SerialMonitor"
292-
/>
290+
id="ArduinoSupport.SerialMonitor"/>
291+
292+
<applicationService serviceImplementation="com.vladsch.clionarduinoplugin.serial.SerialPortManager"/>
293+
<applicationService serviceImplementation="com.vladsch.clionarduinoplugin.components.ArduinoApplicationComponent"/>
294+
<projectService serviceImplementation="com.vladsch.clionarduinoplugin.components.ArduinoProjectComponent"/>
295+
<projectService serviceImplementation="com.vladsch.clionarduinoplugin.serial.SerialProjectComponent"/>
293296
</extensions>
294297

295-
<application-components>
296-
<!-- Add your application components here -->
297-
<component>
298-
<implementation-class>com.vladsch.clionarduinoplugin.components.ArduinoApplicationComponent</implementation-class>
299-
</component>
300-
<component>
301-
<implementation-class>com.vladsch.clionarduinoplugin.serial.SerialPortManager</implementation-class>
302-
</component>
303-
</application-components>
304-
305-
<project-components>
306-
<!-- Add your project components here -->
307-
<component>
308-
<implementation-class>com.vladsch.clionarduinoplugin.serial.SerialProjectComponent</implementation-class>
309-
</component>
310-
<component>
311-
<implementation-class>com.vladsch.clionarduinoplugin.components.ArduinoProjectComponent</implementation-class>
312-
</component>
313-
</project-components>
314-
315298
<actions>
316299
<group id="com.vladsch.clionarduinoplugin.actions.ToolsMenu" text="Arduino Support" popup="true" icon="PluginIcons.arduino_plugin_logo">
317-
<add-to-group group-id="ToolsMenu" anchor="after" relative-to-action="ExternalToolsGroup"/>
300+
<add-to-group group-id="BuildMenu" anchor="after" relative-to-action="Clean"/>
301+
<separator/>
318302
<action class="com.vladsch.clionarduinoplugin.actions.ChangeBuildSettingsAction"
319303
id="com.vladsch.clionarduinoplugin.actions.ChangeBuildSettings"
320-
text="Change build settings"
321-
description="Change Arduino project board, cpu, programmer, etc."
322-
>
304+
text="Change Build Settings"
305+
description="Change Arduino project board, cpu, programmer, etc.">
323306
<!-- icon="PluginIcons.arduino_sketch"-->
324307
<!--<keyboard-shortcut first-keystroke="ctrl shift b" keymap="$default"/>-->
325308
</action>
@@ -328,7 +311,7 @@
328311
<!-- Add your actions here -->
329312
<action id="com.vladsch.clionarduinoplugin.actions.NewSketchFile"
330313
class="com.vladsch.clionarduinoplugin.actions.NewSketchFile"
331-
text="Arduino Sketch" description="New Arduino Sketch File"
314+
text="Arduino Sketch" description="Create a new arduino sketch file"
332315
icon="PluginIcons.arduino_sketch">
333316
<add-to-group group-id="NewGroup" anchor="first"/>
334317
</action>

resources/com/vladsch/clionarduinoplugin/localization/strings.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,5 +145,5 @@ settings.toolchain-txt-file-directory.title=Select Path for Toolchain Directory
145145
settings.toolchain-txt-path.label=&CMake Toolchain File:
146146
toolwindow.serial-monitor.id=Arduino Support
147147
toolwindow.serial-monitor.title=Serial Monitor
148-
widget.connected.2.label=<html><body>Connected: {0} @ {1}<br>Click to disconnect.<br>Right Click to change settings.</body></html>
149-
widget.disconnected.2.label=<html><body>Disconnected: {0} @ {1}<br>Click to connect.<br>Right Click to change settings.</body></html>
148+
widget.connected.2.label=<html><body>Connected: {0} @ {1}<br>Click to change settings or to disconnect</body></html>
149+
widget.disconnected.2.label=<html><body>Disconnected: {0} @ {1}<br>Click to change settings or to connect.</body></html>

src/com/vladsch/clionarduinoplugin/actions/SerialMonitorBaudRateAction.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package com.vladsch.clionarduinoplugin.actions
22

3-
import com.intellij.openapi.actionSystem.ActionGroup
4-
import com.intellij.openapi.actionSystem.AnAction
5-
import com.intellij.openapi.actionSystem.AnActionEvent
6-
import com.intellij.openapi.actionSystem.Toggleable
3+
import com.intellij.openapi.actionSystem.*
4+
import com.vladsch.clionarduinoplugin.serial.SerialProjectComponent
75
import com.vladsch.clionarduinoplugin.settings.ArduinoProjectSettings
86
import jssc.SerialPort
97

@@ -23,8 +21,9 @@ class SerialMonitorBaudRateAction(internal val myBaudRate: Int) : AnAction(Integ
2321
if (project != null) {
2422
val baudRate = ArduinoProjectSettings.getInstance(project).baudRate
2523
val presentation = e.presentation
26-
presentation.putClientProperty(Toggleable.SELECTED_PROPERTY, baudRate == myBaudRate)
27-
if (e.isFromContextMenu) {
24+
25+
Toggleable.setSelected(presentation, baudRate == myBaudRate)
26+
if (ActionPlaces.isPopupPlace(e.place)) {
2827
//force to show check marks instead of toggled icons in context menu
2928
presentation.icon = null
3029
}

src/com/vladsch/clionarduinoplugin/actions/SerialMonitorPortAction.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package com.vladsch.clionarduinoplugin.actions
22

33
import com.intellij.openapi.actionSystem.ActionGroup
4+
import com.intellij.openapi.actionSystem.ActionPlaces
45
import com.intellij.openapi.actionSystem.AnAction
56
import com.intellij.openapi.actionSystem.AnActionEvent
67
import com.intellij.openapi.actionSystem.Toggleable
78
import com.vladsch.clionarduinoplugin.serial.SerialPortManager
89
import com.vladsch.clionarduinoplugin.settings.ArduinoProjectSettings
910

10-
class SerialMonitorPortAction(internal val myPort: String) : AnAction(myPort), Toggleable {
11+
class SerialMonitorPortAction(private val myPort: String) : AnAction(myPort), Toggleable {
1112

1213
override fun actionPerformed(e: AnActionEvent) {
1314
val project = e.project
@@ -24,8 +25,10 @@ class SerialMonitorPortAction(internal val myPort: String) : AnAction(myPort), T
2425
if (project != null) {
2526
val port = ArduinoProjectSettings.getInstance(project).port
2627
val presentation = e.presentation
27-
presentation.putClientProperty(Toggleable.SELECTED_PROPERTY, port == myPort)
28-
if (e.isFromContextMenu) {
28+
29+
Toggleable.setSelected(presentation, port == myPort)
30+
31+
if (ActionPlaces.isPopupPlace(e.place)) {
2932
//force to show check marks instead of toggled icons in context menu
3033
presentation.icon = null
3134
}
@@ -34,7 +37,7 @@ class SerialMonitorPortAction(internal val myPort: String) : AnAction(myPort), T
3437

3538
companion object {
3639
fun createSerialPortsActionGroup(): ActionGroup {
37-
val serialPorts = SerialPortManager.getInstance().getSerialPorts(true)
40+
val serialPorts = SerialPortManager.getSerialPorts(true)
3841
val portActions = serialPorts.map { SerialMonitorPortAction(it) }
3942

4043
val group = object : ActionGroup("Port", true) {
Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
11
package com.vladsch.clionarduinoplugin.components;
22

3+
import com.intellij.openapi.Disposable;
34
import com.intellij.openapi.application.ApplicationManager;
4-
import com.intellij.openapi.components.BaseComponent;
55
import com.intellij.openapi.fileTypes.FileType;
66
import com.intellij.openapi.fileTypes.FileTypeManager;
7+
import com.intellij.openapi.util.Disposer;
78
import com.vladsch.clionarduinoplugin.resources.Strings;
8-
import org.jetbrains.annotations.NotNull;
9+
import com.vladsch.clionarduinoplugin.serial.SerialPortManager;
910

10-
public class ArduinoApplicationComponent implements BaseComponent {
11-
12-
public void initComponent() {
11+
public class ArduinoApplicationComponent implements Disposable {
12+
public ArduinoApplicationComponent() {
1313
ApplicationManager.getApplication().invokeLater(() ->
1414
ApplicationManager.getApplication().runWriteAction(() -> {
1515
FileType cpp = FileTypeManager.getInstance().getFileTypeByExtension(Strings.CPP_EXT);
1616
FileTypeManager.getInstance().associateExtension(cpp, Strings.INO_EXT);
1717
FileTypeManager.getInstance().associateExtension(cpp, Strings.PDE_EXT);
1818
}));
19+
20+
Disposer.register(SerialPortManager.getInstance(), this);
1921
}
2022

21-
public void disposeComponent() {
23+
public void dispose() {
2224
ApplicationManager.getApplication().invokeLater(() ->
2325
ApplicationManager.getApplication().runWriteAction(() -> {
2426
FileType cpp = FileTypeManager.getInstance().getFileTypeByExtension(Strings.CPP_EXT);
@@ -27,8 +29,7 @@ public void disposeComponent() {
2729
}));
2830
}
2931

30-
@NotNull
31-
public String getComponentName() {
32-
return "ArduinoFileTypeRegistration";
33-
}
32+
static public ArduinoApplicationComponent getInstance() {
33+
return ApplicationManager.getApplication().getService(ArduinoApplicationComponent.class);
34+
}
3435
}
Lines changed: 16 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,39 @@
11
package com.vladsch.clionarduinoplugin.components
22

33
import com.intellij.openapi.Disposable
4-
import com.intellij.openapi.components.ProjectComponent
54
import com.intellij.openapi.project.Project
65
import com.intellij.openapi.vfs.VirtualFileListener
76
import com.intellij.util.messages.MessageBusConnection
8-
import com.jetbrains.cidr.cpp.cmake.workspace.CMakeWorkspace
97
import com.jetbrains.cidr.cpp.cmake.workspace.CMakeWorkspaceListener
10-
import com.vladsch.clionarduinoplugin.Bundle
11-
import com.vladsch.clionarduinoplugin.settings.ArduinoProjectSettings
128
import java.util.concurrent.atomic.AtomicBoolean
139

14-
class ArduinoProjectComponent(val project: Project) : ProjectComponent, VirtualFileListener, CMakeWorkspaceListener, Disposable {
10+
class ArduinoProjectComponent(project: Project) :
11+
VirtualFileListener, CMakeWorkspaceListener, Disposable {
12+
1513
companion object {
14+
1615
fun getInstance(project: Project): ArduinoProjectComponent {
17-
return project.getComponent(ArduinoProjectComponent::class.java)
16+
return project.getService(ArduinoProjectComponent::class.java)
1817
}
1918
}
2019

21-
var inReload = AtomicBoolean(false)
22-
private set
23-
24-
private lateinit var myBusConnection: MessageBusConnection
25-
// private val alarm = Alarm()
26-
private lateinit var mySettings: ArduinoProjectSettings
27-
// private val myRunnables = ListenersRunner<File>()
28-
29-
var isArduinoProject: Boolean? = null
20+
private val myBusConnection: MessageBusConnection = project.messageBus.connect(this)
3021

31-
override fun getComponentName(): String {
32-
return Bundle.message("plugin.project-component.name")
22+
init {
23+
myBusConnection.subscribe(CMakeWorkspaceListener.TOPIC, this)
3324
}
3425

35-
override fun dispose() {
36-
}
26+
@Suppress("MemberVisibilityCanBePrivate")
27+
var inReload: AtomicBoolean = AtomicBoolean(false)
28+
private set
3729

38-
override fun disposeComponent() {
39-
myBusConnection.dispose()
40-
}
30+
@Suppress("MemberVisibilityCanBePrivate")
31+
var isArduinoProject: Boolean? = null
32+
private set
4133

42-
override fun projectClosed() {
34+
override fun dispose() {
4335
myBusConnection.disconnect()
44-
// VirtualFileManager.getInstance().removeVirtualFileListener(this)
45-
}
46-
47-
override fun initComponent() {
48-
}
49-
50-
private val workspace = CMakeWorkspace.getInstance(project)
51-
52-
override fun projectOpened() {
53-
mySettings = ArduinoProjectSettings.getInstance(project)
54-
myBusConnection = project.messageBus.connect(this)
55-
myBusConnection.subscribe(CMakeWorkspaceListener.TOPIC, this)
56-
57-
// myProjectDir = workspace.projectDir.path + File.separator
58-
// VirtualFileManager.getInstance().addVirtualFileListener(this, this)
36+
myBusConnection.dispose()
5937
}
6038

6139
override fun beforeApplying() {
@@ -69,11 +47,9 @@ class ArduinoProjectComponent(val project: Project) : ProjectComponent, VirtualF
6947
}
7048

7149
override fun filesRefreshedAfterGeneration() {
72-
val tmp = 0
7350
}
7451

7552
override fun generationFinished() {
76-
val tmp = 0
7753
}
7854

7955
override fun reloadingStarted() {
@@ -93,32 +69,4 @@ class ArduinoProjectComponent(val project: Project) : ProjectComponent, VirtualF
9369
isArduinoProject = null
9470
// alarm.cancelAllRequests()
9571
}
96-
97-
// private fun triggerReload(event: VirtualFileEvent) {
98-
// if (!myInReload && mySettings.isReloadOnFileChange) {
99-
// if ((event.file.path + File.separator).startsWith(myProjectDir) && event.file.extension.equals(Strings.INO_EXT, true)) {
100-
// myInReload = true
101-
// if (alarm.isDisposed) return
102-
//
103-
// alarm.cancelAllRequests()
104-
// alarm.addRequest({ ArduinoProjectGeneratorBase.reloadCMakeLists(project) }, 500)
105-
// }
106-
// }
107-
// }
108-
109-
// override fun fileDeleted(event: VirtualFileEvent) {
110-
// triggerReload(event)
111-
// }
112-
//
113-
// override fun fileMoved(event: VirtualFileMoveEvent) {
114-
// triggerReload(event)
115-
// }
116-
//
117-
// override fun fileCreated(event: VirtualFileEvent) {
118-
// triggerReload(event)
119-
// }
120-
//
121-
// override fun fileCopied(event: VirtualFileCopyEvent) {
122-
// triggerReload(event)
123-
// }
12472
}

src/com/vladsch/clionarduinoplugin/generators/cmake/commands/CMakeElement.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.vladsch.clionarduinoplugin.generators.cmake.commands;
22

3-
import com.vladsch.flexmark.util.sequence.LineAppendable;
43
import org.jetbrains.annotations.Nullable;
54

65
import java.io.IOException;

src/com/vladsch/clionarduinoplugin/generators/cmake/commands/CMakeText.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.vladsch.clionarduinoplugin.generators.cmake.commands;
22

3-
import com.vladsch.flexmark.util.sequence.LineAppendable;
43
import org.jetbrains.annotations.NotNull;
54
import org.jetbrains.annotations.Nullable;
65

0 commit comments

Comments
 (0)