Skip to content

Commit

Permalink
_ F Arlo's Commit Notation V2
Browse files Browse the repository at this point in the history
Co-Authored-By: Jay Bazuzi <jay@bazuzi.com>
  • Loading branch information
2 people authored and LarsEckart committed Jul 31, 2023
1 parent c6c203a commit 2c2083e
Show file tree
Hide file tree
Showing 8 changed files with 228 additions and 2 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
timeout-minutes: 10
strategy:
matrix:
os: [ubuntu, windows]
os: [ubuntu, windows, macos]
steps:
- name: Check out repo
uses: actions/checkout@v3
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,6 @@ build

# intellij
.idea

# ApprovalTests
*.received.*
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ dependencies {
api("org.junit.jupiter:junit-jupiter-api:5.10.0")

testImplementation("org.junit.jupiter:junit-jupiter-api:5.10.0")
testImplementation("com.approvaltests:approvaltests:18.7.1")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.10.0")
}

Expand Down
200 changes: 200 additions & 0 deletions src/main/java/com/github/larseckart/tcr/ArlosGitNotation2Prompt.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
package com.github.larseckart.tcr;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

public class ArlosGitNotation2Prompt {
private String message = "";
private boolean done = false;
private final JPanel panel = new JPanel();

public ArlosGitNotation2Prompt() {
setLayout();
}

private void setLayout() {
panel.setLayout(new GridBagLayout());
addCustomCommitPart();
addQuickKeys();
int position = addArlosGitNotation();
addExamples(position);
}

private int addArlosGitNotation() {
int position = 4;
addHelpText("Arlo's Commit Notation:", position++, true);
addHelpText("------ Risk ------", position++);
addHelpText(". Provable", position++);
addHelpText("- Tested", position++);
addHelpText("! Single Action", position++);
addHelpText("@ Other", position++);

position = 5;
addHelpText2("------ Action ------", position++);
addHelpText2("r Refactoring", position++);
addHelpText2("e Environment (non-code)", position++);
addHelpText2("d Documentation", position++);
addHelpText2("t Test only", position++);
addHelpText2("F Feature", position++);
addHelpText2("B Bugfix", position++);
return position;
}

private void addQuickKeys() {
int position = 1;
addHelpText("Quick Actions:", 2, true);
createQuickbutton("Rename", ". r Rename", KeyEvent.VK_R, position++);
createQuickbutton("Inline", ". r Inline", KeyEvent.VK_I, position++);
createQuickbutton("Extract Method", ". r Extract Method", KeyEvent.VK_M, position++);
createQuickbutton("Extract Variable", ". r Extract Variable", KeyEvent.VK_V, position++);
createQuickbutton("Delete Clutter", ". r Delete Clutter", KeyEvent.VK_D, position++);
}

private void addExamples(int position) {
addHelpText("Examples:", position++, true);
addHelpText(". r rename variable", position++);
addHelpText("! B fixed spelling on label", position++);

}

private void addCustomCommitPart() {
{
// Commit Message:
GridBagConstraints c = new GridBagConstraints();
JLabel commitLabel = new JLabel("Commit Message:");
c.anchor = GridBagConstraints.FIRST_LINE_START;
c.insets = new Insets(10, 10, 0, 0);
c.gridx = 1;
c.gridwidth = 1;
c.gridy = 1;
panel.add(commitLabel, c);
}
JTextField prompt;
{
// [Commit Message Text]
GridBagConstraints c = new GridBagConstraints();
prompt = new JTextField("");
prompt.setAction(
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
doCommit(prompt.getText());
}
});
c.fill = GridBagConstraints.HORIZONTAL;
c.anchor = GridBagConstraints.NORTHWEST;
c.insets = new Insets(10, 10, 0, 0);
c.gridx = 2;
c.gridwidth = 3;
c.gridy = 1;
panel.add(prompt, c);
}
{
// [Commit]
var gridBagConstraints = new GridBagConstraints();
JButton commit = new JButton("Commit");
commit.setMnemonic(KeyEvent.VK_C);
commit.setDefaultCapable(true);
gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new Insets(10, 10, 0, 0);
gridBagConstraints.gridx = 5;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.gridy = 1;
commit.addActionListener(e -> doCommit(prompt.getText()));
panel.add(commit, gridBagConstraints);
}
}

private void addHelpText(String text, int position) {
addHelpText(text, position, false);
}

private void addHelpText2(String text, int position) {
addHelpText2(text, position, false);
}

private void addHelpText(String text, int position, boolean first) {
var gridBagConstraints = new GridBagConstraints();
JLabel helpText = new JLabel(text);
var font = new Font("Courier", first ? Font.BOLD : Font.PLAIN, 16);
helpText.setFont(font);
gridBagConstraints.anchor = GridBagConstraints.WEST;
gridBagConstraints.insets = new Insets(first ? 50 : 0, 10, 10, 0);
gridBagConstraints.gridx = 1;
gridBagConstraints.gridwidth = 5;
gridBagConstraints.gridy = position;
panel.add(helpText, gridBagConstraints);
}

private void addHelpText2(String text, int position, boolean first) {
var gridBagConstraints = new GridBagConstraints();
JLabel helpText = new JLabel(text);
var font = new Font("Courier", first ? Font.BOLD : Font.PLAIN, 16);
helpText.setFont(font);
gridBagConstraints.anchor = GridBagConstraints.WEST;
gridBagConstraints.insets = new Insets(first ? 50 : 0, 10, 10, 0);
gridBagConstraints.gridx = 4;
gridBagConstraints.gridwidth = 5;
gridBagConstraints.gridy = position;
panel.add(helpText, gridBagConstraints);
}

private void createQuickbutton(String label, String commitMessage, int shortcut, int position) {
var gridBagConstraints = new GridBagConstraints();
var quick = new JButton(label);
quick.setMnemonic(shortcut);
quick.setDefaultCapable(true);
gridBagConstraints.insets = new Insets(10, 10, 10, 10);
gridBagConstraints.gridx = position;
gridBagConstraints.gridwidth = 1;
gridBagConstraints.gridy = 3;
quick.addActionListener(e -> doCommit(commitMessage));
panel.add(quick, gridBagConstraints);
}

public void doCommit(String text) {
this.message = text;
this.done = true;
Container parent = panel.getParent();
while (!(parent instanceof JFrame)) {
parent = parent.getParent();
}
((JFrame) parent).dispose();
}

public static String display() {
ArlosGitNotation2Prompt panel = new ArlosGitNotation2Prompt();
openInFrame(panel);
while (!panel.done) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {

}
}
return panel.message;
}

private static void openInFrame(ArlosGitNotation2Prompt panel) {
JFrame test = new JFrame("Commit...");
test.getContentPane().add(panel.panel);
test.pack();

Dimension d = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
Dimension w = test.getSize();
int dx = (int) w.getWidth();
int dy = (int) w.getHeight();
int x = (int) ((d.getWidth() - dx) / 2);
int y = (int) ((d.getHeight() - dy) / 2);
test.setBounds(x, y, dx, dy + 1);

test.setVisible(true);
}

public JPanel getPanel() {
return panel;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import javax.swing.JPanel;
import javax.swing.JTextField;

class ArlosGitNotationPrompt {
public class ArlosGitNotationPrompt {
private String message = "";
private boolean done = false;
private final JPanel panel = new JPanel();
Expand Down
22 changes: 22 additions & 0 deletions src/test/java/com/larseckart/tcr/ArloGitNotationPromptTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.larseckart.tcr;

import com.github.larseckart.tcr.ArlosGitNotation2Prompt;
import com.github.larseckart.tcr.ArlosGitNotationPrompt;
import org.approvaltests.awt.AwtApprovals;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledOnOs;

import static org.junit.jupiter.api.condition.OS.MAC;

@EnabledOnOs({ MAC })
public class ArloGitNotationPromptTest {
@Test
void testVersion1() {
AwtApprovals.verify(new ArlosGitNotationPrompt().getPanel());
}

@Test
void testVersion2() {
AwtApprovals.verify(new ArlosGitNotation2Prompt().getPanel());
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 2c2083e

Please sign in to comment.