11import com .formdev .flatlaf .themes .FlatMacDarkLaf ;
22import net .miginfocom .swing .MigLayout ;
3+ import org .jfree .chart .renderer .category .BarPainter ;
34import org .nfunk .jep .type .Complex ;
45
56import javax .swing .*;
7+ import javax .swing .text .Highlighter ;
68import java .awt .*;
79import java .awt .event .*;
810import java .awt .geom .Point2D ;
@@ -79,8 +81,16 @@ public void init()
7981 QText = new JTextField ("Q: " );
8082 P = new JTextField ("cos(0.3x + 0.6y)" );
8183 P .setMinimumSize (new Dimension (300 , 40 ));
84+ P .addActionListener (new ActionListener () {
85+ @ Override
86+ public void actionPerformed (ActionEvent e ) {
87+ System .out .println ("shiant" );
88+ panel .colorComplex ();
89+ }
90+ });
8291 Q = new JTextField ("sin(0.3y - 0.6x)" );
8392 Q .setMinimumSize (new Dimension (300 , 40 ));
93+ Q .addActionListener (P .getActionListeners ()[0 ]);
8494 P .setFont (new Font (P .getFont ().getFontName (), Font .PLAIN , 23 ));
8595 Q .setFont (new Font (Q .getFont ().getFontName (), Font .PLAIN , 23 ));
8696 //System.out.println(colorWithCurl.isSelected());
@@ -345,6 +355,9 @@ public void update(Graphics g)
345355 scaleWithMag .setEnabled (true );
346356 complexDetail .setEnabled (false );
347357 mandelbrotDetail .setEnabled (false );
358+ contourFreeform .setEnabled (false );
359+ contourCircular .setEnabled (false );
360+ contourFreeformClosed .setEnabled (false );
348361 curlArea .setText ("Curl at cursor: " + df .format (panel .getCurl (panel .userMouse .x - 6 , panel .userMouse .y - 31 )));
349362 divArea .setText ("Divergence at cursor: " + df .format (panel .getDiv (panel .userMouse .x - 6 , panel .userMouse .y - 31 )));
350363 magArea .setText ("Magnitude at cursor: " + df .format (panel .getMag (panel .userMouse .x - 6 , panel .userMouse .y - 31 )));
@@ -355,13 +368,37 @@ public void update(Graphics g)
355368 panel .parser .addVariable ("x" , mouseCoordX );
356369 panel .parser .addVariable ("y" , mouseCoordY );
357370 panel .parser .addVariable ("t" , panel .time );
371+ panel .parser .removeVariable ("z" );
372+ float tempX = 0 ;
373+ float tempY = 0 ;
374+ boolean error = false ;
358375 panel .parser .parseExpression (P .getText ());
359- float tempX = (float )panel .parser .getValue ();
376+ if (panel .parser .hasError ())
377+ {
378+ P .setForeground (Color .red );
379+ outputAtPoint .setText ("Invalid input!" );
380+ error = true ;
381+ }
382+ else {
383+ P .setForeground (Color .white );
384+ tempX = (float ) panel .parser .getValue ();
385+ }
360386 panel .parser .parseExpression (Q .getText ());
361- float tempY = (float )panel .parser .getValue ();
362- outputAtPoint .setText ("Output at mouse: (" + tempX + ", " + tempY + ")" );
387+ if (panel .parser .hasError ())
388+ {
389+ Q .setForeground (Color .red );
390+ outputAtPoint .setText ("Invalid input!" );
391+ error = true ;
392+ }
393+ else {
394+ Q .setForeground (Color .white );
395+ tempY = (float ) panel .parser .getValue ();
396+ }
397+ if (!error ) {
398+ outputAtPoint .setText ("Output at mouse: (" + tempX + ", " + tempY + ")" );
399+ }
363400 }
364- else if (!P .getText ().contains ("zm" ))
401+ else if (!P .getText ().contains ("zm" ))//contains a function of z that isn't mandelbrot
365402 {
366403 Q .setEnabled (false );
367404 addTestPoint .setEnabled (false );
@@ -371,14 +408,25 @@ else if(!P.getText().contains("zm"))
371408 scaleWithMag .setEnabled (false );
372409 complexDetail .setEnabled (true );
373410 mandelbrotDetail .setEnabled (false );
411+ contourFreeform .setEnabled (true );
412+ contourCircular .setEnabled (true );
413+ contourFreeformClosed .setEnabled (true );
374414 double mouseCoordX = panel .screenToCoordsX (panel .userMouse .x - 6 );
375415 double mouseCoordY = panel .screenToCoordsY (panel .userMouse .y - 31 );
376416 coordAtPoint .setText ("Mouse coordinates: " + mouseCoordX + " + " + mouseCoordY + "i" );
377417 panel .parser .addComplexVariable ("z" , mouseCoordX , mouseCoordY );
378418 panel .parser .addVariable ("t" , panel .time );
379419 panel .parser .parseExpression (P .getText ());
380- Complex temp = panel .parser .getComplexValue ();
381- outputAtPoint .setText ("Output at mouse: " + (float )temp .re () + " + " + (float )temp .im () + "i" );
420+ if (panel .parser .hasError ())
421+ {
422+ P .setForeground (Color .red );
423+ outputAtPoint .setText ("Invalid input!" );
424+ }
425+ else {
426+ Complex temp = panel .parser .getComplexValue ();
427+ P .setForeground (Color .white );
428+ outputAtPoint .setText ("Output at mouse: " + (float ) temp .re () + " + " + (float ) temp .im () + "i" );
429+ }
382430 }
383431 else
384432 {
@@ -389,13 +437,18 @@ else if(!P.getText().contains("zm"))
389437 scaleWithMag .setEnabled (false );
390438 complexDetail .setEnabled (false );
391439 mandelbrotDetail .setEnabled (true );
440+ contourFreeform .setEnabled (false );
441+ contourCircular .setEnabled (false );
442+ contourFreeformClosed .setEnabled (false );
392443 double mouseCoordX = panel .screenToCoordsX (panel .userMouse .x - 6 );
393444 double mouseCoordY = panel .screenToCoordsY (panel .userMouse .y - 31 );
394445 coordAtPoint .setText ("Mouse coordinates: " + (float )mouseCoordX + " + " + (float )mouseCoordY + "i" );
395446 outputAtPoint .setText ("Number of iterations to diverge: " + panel .mandelbrotDiverge (new Complex (mouseCoordX , mouseCoordY )) + " (max " + (int )panel .mandelbrotDetail + ")" );
396447 }
397448 //Arrow tempArrow = new Arrow(panel.axes.screenToCoordsX(panel.userMouse.x), panel.axes.screenToCoordsY(panel.userMouse.y), panel);
398449 //jacobArea.setText("Jacobian:\n x y t\nP " + tempArrow.DPDX + " " + tempArrow.DPDY + " 3\nQ 4 5 6");
450+ Graphics2D g2d = (Graphics2D )g ;
451+ g2d .setStroke (new BasicStroke (1 ));//thickness/size of line of test point trajectory
399452 for (Point i : testPoints )
400453 {
401454 panel .g .drawOval (i .x , i .y , 2 , 2 );
@@ -407,7 +460,7 @@ else if(!P.getText().contains("zm"))
407460 Arrow temp = new Arrow (panel .screenToCoordsX (tempX ), panel .screenToCoordsY (tempY ), panel );
408461 tempX += 3 *Math .cos (temp .angle );
409462 tempY += 3 *Math .sin (temp .angle );
410- panel . g .drawLine ((int )tempX2 , (int )tempY2 , (int )tempX , (int )tempY );
463+ g2d .drawLine ((int )tempX2 , (int )tempY2 , (int )tempX , (int )tempY );
411464 }
412465 tempX = i .x ;
413466 tempY = i .y ;
0 commit comments