Skip to content

Commit 6f0d33a

Browse files
committed
#9 - Refactored code and update UI from java laf.
1 parent cdf61ba commit 6f0d33a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+108
-20
lines changed

manifest.mf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ Manifest-Version: 1.0
22
AutoUpdate-Show-In-Client: true
33
OpenIDE-Module: org.chrisle.netbeans.plugins.nbscratchfile
44
OpenIDE-Module-Localizing-Bundle: org/chrisle/netbeans/plugins/nbscratchfile/Bundle.properties
5-
OpenIDE-Module-Specification-Version: 1.5.1
5+
OpenIDE-Module-Specification-Version: 1.6
66

src/org/chrisle/netbeans/plugins/nbscratchfile/CreateScratchFile.java

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
import org.openide.awt.ActionRegistration;
2525
import org.openide.util.Exceptions;
2626
import org.openide.util.NbBundle.Messages;
27+
import org.w3c.dom.Element;
28+
import org.w3c.dom.NodeList;
29+
import org.w3c.dom.events.EventTarget;
2730

2831
@ActionID(
2932
category = "Tools",
@@ -40,6 +43,7 @@
4043
})
4144
@Messages("CTL_CreateScratchFile=New Scratch File...")
4245
public final class CreateScratchFile implements ActionListener {
46+
4347
private final JDialog dialog;
4448
private final JFXPanel jfxPanel;
4549
private WebView webView;
@@ -58,7 +62,8 @@ public CreateScratchFile() {
5862
dialog.setUndecorated(true);
5963
dialog.addWindowFocusListener(new WindowFocusListener() {
6064
@Override
61-
public void windowGainedFocus(WindowEvent e) {}
65+
public void windowGainedFocus(WindowEvent e) {
66+
}
6267

6368
@Override
6469
public void windowLostFocus(WindowEvent e) {
@@ -71,6 +76,32 @@ public void windowLostFocus(WindowEvent e) {
7176
}, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
7277
}
7378

79+
private void colorizeElement(Element sourceElem, String css) {
80+
sourceElem.setAttribute("style", css);
81+
}
82+
83+
private void colorizeElements(NodeList sourceElements, String css) {
84+
for (int i = 0; i < sourceElements.getLength(); i++) {
85+
colorizeElement((Element) sourceElements.item(i), css);
86+
}
87+
}
88+
89+
private void addHoverEffectToElement(Element sourceElem, String newCss, String oldCss) {
90+
((EventTarget) sourceElem).addEventListener("mouseover", (elem) -> {
91+
sourceElem.setAttribute("style", newCss);
92+
}, false);
93+
94+
((EventTarget) sourceElem).addEventListener("mouseout", (elem) -> {
95+
sourceElem.setAttribute("style", oldCss);
96+
}, false);
97+
}
98+
99+
private void addHoverEffectToElements(NodeList sourceElements, String newCss, String oldCss) {
100+
for (int i = 0; i < sourceElements.getLength(); i++) {
101+
addHoverEffectToElement((Element)sourceElements.item(i), newCss, oldCss);
102+
}
103+
}
104+
74105
@Override
75106
public void actionPerformed(ActionEvent e) {
76107
Platform.runLater(() -> {
@@ -81,7 +112,14 @@ public void actionPerformed(ActionEvent e) {
81112
webEngine.getLoadWorker().stateProperty().addListener((ObservableValue<? extends State> ov, State oldState, State newState) -> {
82113
if (newState == State.SUCCEEDED) {
83114
JSObject win = (JSObject) webView.getEngine().executeScript("window");
84-
win.setMember("NbScratchFileViewModel", this.viewModel);
115+
116+
win.setMember("NbScratchFileViewModel", CreateScratchFile.this.viewModel);
117+
118+
colorizeElement(webEngine.getDocument().getElementById("languageSearch"), String.format("background-color: %s; color: %s;", viewModel.getColor("TextField.background", false), viewModel.getColor("TextField.foreground", false)));
119+
colorizeElement((Element) webEngine.getDocument().getElementsByTagName("body").item(0), String.format("background-color: %s;", viewModel.getColor("Menu.background", false)));
120+
colorizeElement((Element) webEngine.getDocument().getElementsByTagName("ul").item(0), String.format("color: %s;", viewModel.getColor("Label.foreground", false)));
121+
122+
addHoverEffectToElements(webEngine.getDocument().getElementsByTagName("li"), String.format("background-color: %s; color: %s;", viewModel.getColor("Menu.background", true), viewModel.getColor("Menu.foreground", true)), String.format("background-color: %s; color: %s;", viewModel.getColor("Menu.background", false), viewModel.getColor("Menu.foreground", false)));
85123
}
86124
});
87125

@@ -96,7 +134,7 @@ public void actionPerformed(ActionEvent e) {
96134
}
97135

98136
public void showDialog() {
99-
// try to use monitor, where the input focus is
137+
// try to use monitor, where the input focus isOk gu
100138
// therefor get the topmost component based on the input focus
101139
Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
102140

src/org/chrisle/netbeans/plugins/nbscratchfile/NbScratchFileViewModel.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package org.chrisle.netbeans.plugins.nbscratchfile;
22

3+
import java.awt.Color;
34
import java.io.IOException;
45
import java.nio.file.FileAlreadyExistsException;
56
import java.nio.file.Files;
67
import java.nio.file.Path;
78
import java.nio.file.Paths;
89
import javax.swing.JDialog;
910
import javax.swing.JOptionPane;
11+
import javax.swing.UIManager;
1012
import org.netbeans.api.actions.Openable;
1113
import org.openide.filesystems.FileObject;
1214
import org.openide.filesystems.FileUtil;
@@ -41,4 +43,12 @@ public void setExt(String ext, String languageName) {
4143
Exceptions.printStackTrace(ex);
4244
}
4345
}
44-
}
46+
47+
public String getColor(String colorString, Boolean brighter) {
48+
return brighter ? getHex(UIManager.getColor(colorString).brighter()) : getHex(UIManager.getColor(colorString));
49+
}
50+
51+
private String getHex(Color rgbColor) {
52+
return String.format("#%s%s%s", Integer.toHexString(rgbColor.getRed()), Integer.toHexString(rgbColor.getGreen()), Integer.toHexString(rgbColor.getBlue()));
53+
}
54+
}

src/org/chrisle/netbeans/plugins/nbscratchfile/components/filetypewindow/app/app.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ export class App {
7070
}
7171

7272
public main(): void {
73-
7473
this.fileTypeWindowViewModel.Language.subscribe(() => {
7574
this.languageTypesListModel.init();
7675
});

src/org/chrisle/netbeans/plugins/nbscratchfile/components/filetypewindow/app/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<ul id="languageTypes" data-bind="foreach: LanguageTypes">
1818
<li data-bind="click: setExt">
1919
<div class="icon" data-bind="css: 'svg-' + Icon"></div>
20-
<div data-bind="text: LanguageName"></div>
20+
<label data-bind="text: LanguageName"></label>
2121
<div class="small-text" data-bind="text: FileExt && '(' + FileExt + ')'"></div>
2222
<div class="small-text" data-bind="text: showPluginRequiredMessage()"></div>
2323
</li>

src/org/chrisle/netbeans/plugins/nbscratchfile/components/filetypewindow/app/main.scss

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ body {
2020
box-sizing: border-box;
2121
box-shadow: inset 0 0 1px rgba(145, 153, 161, 0.2), 0 0 0 rgba(255, 255, 255, 0);
2222
width: 100%;
23-
color: #6a737c;
2423
font-size: 16px;
2524
outline: none;
2625
height: $input-height;
@@ -30,7 +29,6 @@ body {
3029
ul {
3130
list-style: none;
3231
margin: 0;
33-
color: darkslategrey;
3432
padding: 0;
3533
overflow-y: scroll;
3634
height: auto;
@@ -42,7 +40,7 @@ body {
4240
display: flex;
4341
align-items: center;
4442

45-
div {
43+
div, label {
4644
display: inline-block;
4745
vertical-align: middle;
4846
}
@@ -54,13 +52,14 @@ body {
5452
}
5553

5654
.small-text {
57-
color: grey;
55+
color: gray;
5856
font-size: 80%;
5957
margin-left: .3em;
6058
}
6159

6260
&:hover {
63-
background-color: #f5f5f5;
61+
background-color: #e0e0e0;
62+
color: darkslategray;
6463
cursor: pointer;
6564
}
6665

src/org/chrisle/netbeans/plugins/nbscratchfile/components/filetypewindow/app/model/FileType.ts

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,16 @@ import {LanguageType} from "./LanguageType";
55
*
66
* @author Chris
77
*/
8+
declare const NbScratchFileViewModel: any;
9+
810
export class FileType {
9-
private language: KnockoutObservable<String>;
11+
private language: KnockoutObservable<string>;
1012
private languageTypes: KnockoutComputed<Array<LanguageType>>;
1113

14+
private menuBgColor: KnockoutObservable<string>;
15+
private textFieldBgColor: KnockoutObservable<string>;
16+
private textFieldFgColor: KnockoutObservable<string>;
17+
1218
constructor(languageTypes: Array<LanguageType>) {
1319
this.language = ko.observable('');
1420
this.languageTypes = ko.computed(() => {
@@ -31,16 +37,50 @@ export class FileType {
3137
// return languageType;
3238
// });
3339
}, this);
40+
41+
this.menuBgColor = ko.observable('');
42+
this.textFieldBgColor = ko.observable('');
43+
this.textFieldFgColor = ko.observable('');
3444
}
3545

3646
// private manipulateString(languageName: string, term: string): string {
3747
// return term ? languageName.replace(term, `<strong>${term}</strong>`) : languageName
3848
// }
3949

40-
public get Language(): KnockoutObservable<String> {
50+
public get Language(): KnockoutObservable<string> {
4151
return this.language;
4252
}
4353

54+
public get MenuBgColor(): KnockoutObservable<string> {
55+
let self = this;
56+
57+
setTimeout(() => {
58+
self.menuBgColor(NbScratchFileViewModel.getColor('Menu.background'));
59+
}, 200);
60+
61+
return self.menuBgColor;
62+
}
63+
64+
public get TextFieldBgColor(): KnockoutObservable<string> {
65+
let self = this;
66+
67+
setTimeout(() => {
68+
self.textFieldBgColor(NbScratchFileViewModel.getColor('TextField.background'));
69+
}, 200);
70+
71+
return self.textFieldBgColor;
72+
}
73+
74+
public get TextFieldFgColor(): KnockoutObservable<string> {
75+
let self = this;
76+
77+
setTimeout(() => {
78+
self.textFieldFgColor(NbScratchFileViewModel.getColor('TextField.foreground'));
79+
}, 200);
80+
81+
return self.textFieldFgColor;
82+
}
83+
4484
public get LanguageTypes(): LanguageType[] {
4585
return this.languageTypes();
4686
}

src/org/chrisle/netbeans/plugins/nbscratchfile/components/filetypewindow/app/model/LanguageType.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* @author Chrl
44
*/
55

6-
declare var NbScratchFileViewModel: any;
6+
declare const NbScratchFileViewModel: any;
77

88
export class LanguageType {
99
private icon: string;

src/org/chrisle/netbeans/plugins/nbscratchfile/components/filetypewindow/app/model/LanguageTypesDOMModel.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,6 @@ export class LanguageTypesDOMModel {
173173
}
174174

175175
public getDataFromSelectedElem(): void {
176-
console.log(this.selectedElem);
177176
this.selectedElem && this.selectedElem.addEventListener('keydown', e => {
178177
if(e.keyCode === KeyCode.Enter) {
179178
console.log(this.selectedElem);

src/org/chrisle/netbeans/plugins/nbscratchfile/components/filetypewindow/dist/app.js

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

src/org/chrisle/netbeans/plugins/nbscratchfile/components/filetypewindow/dist/app.js.map

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

src/org/chrisle/netbeans/plugins/nbscratchfile/components/filetypewindow/dist/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<ul id="languageTypes" data-bind="foreach: LanguageTypes">
1818
<li data-bind="click: setExt">
1919
<div class="icon" data-bind="css: 'svg-' + Icon"></div>
20-
<div data-bind="text: LanguageName"></div>
20+
<label data-bind="text: LanguageName"></label>
2121
<div class="small-text" data-bind="text: FileExt && '(' + FileExt + ')'"></div>
2222
<div class="small-text" data-bind="text: showPluginRequiredMessage()"></div>
2323
</li>

src/org/chrisle/netbeans/plugins/nbscratchfile/components/filetypewindow/dist/main.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
auxiliary.org-netbeans-modules-css-prep.sass_2e_configured=true
22
file.reference.filetypewindow-app=app
3+
file.reference.filetypewindow-e2e=e2e
34
files.encoding=UTF-8
45
site.root.folder=${file.reference.filetypewindow-app}
56
source.folder=
7+
test.selenium.folder=${file.reference.filetypewindow-e2e}

src/org/chrisle/netbeans/plugins/nbscratchfile/components/filetypewindow/tests/LanguageTypeModel.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {LanguageType} from "../app/model/LanguageType";
66
// if you used the '@types/mocha' method to install mocha type definitions, uncomment the following line
77
// import 'mocha';
88
import {expect} from 'chai';
9+
import {} from 'mocha';
910

1011
describe('LanguagType LanguagName getter', () => {
1112
it('should return JavaScript', () => {

0 commit comments

Comments
 (0)