Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

163
LINES

< > BotCompany Repo | #1020242 // Teach Colors To The Machine [OK]

JavaX source code (Dynamic Module) [tags: use-pretranspiled] - run with: Stefan's OS

Libraryless. Click here for Pure Java version (16988L/126K).

!7

module ShowRandomColor > DynModule {
  RGB color;
  S myGuess, yourName, lastOverwrite;
  bool voiceMode = true; // voice input & output
  
  transient double maxDiff = 0.25; // max difference to assume it's a similar color
  transient JPanel colorPanel;
  transient JTextField tfYourName;
  transient JButton btnSave;
  transient Pair<S, Double> closestColor;
  transient bool hadBounds;
  
  enhanceFrame {
    /*onInternalFrameDeactivated(f/JInternalFrame, r {
      dm_hideYesPopupForComponent(btnSave)
    });*/
    if (!hadBounds) {
      growInternalFrameLeft(f, 250); // space to type
      growInternalFrameSouth(f, 150); // space to see the color
    }
    internalFrameTitleMenuItem(f, "Talk!", rThread talk);
  }
  
  visualize {
    hadBounds = dm_getBounds() != null;
    dm_showTalkingSmiley();
    if (color == null) setField(color := makeRandomColor());
    dm_onTopInput_q(voidfunc(S s) {
      if (!licensed()) ret;
      //if (!dm_isActiveModule(module())) ret with print("not active");
      if (!voiceMode) ret;
      S _lastOverwrite = lastOverwrite;
      setField(lastOverwrite := null);
      JComponent popup = dm_generalMap_get('yesPopup);
      if "no problem|stop listening|thanks" {}
      else if (matchStart_vbar("hi|hello|hey|carol", s)) dm_say("Hello there");
      else if (matchEnd("your question", s)) dm_say("yes?"); // as to your question
      else if (matchStart_vbar("talk|ask", s)) newColor();
      else if (containsPhrase_vbar(s, "colorblind|colour blind")) dm_say("No problem. I'm not judging.");
      else if (containsWord(s, "forget") && containsWord(s, "all") && containsWord_vbar(s, "colors|colours")) {
        // TODO: backup
        dm_callModule(dm_colorNamesModule(), 'deleteAll);
        dm_hideYesPopupForComponent(btnSave);
        setField(yourName := "");
        dm_setTopInput("");
        dm_say("OK, starting over.");
      } else if (containsWord(s, "list") && containsWord_vbar(s, "show|open")) {
        dm_showModule(dm_colorNamesModule());
        dm_say("Here it is");
      } else if (containsWord(s, "reload")) dm_reloadModuleInBackground();
      else if (containsPhrase(s, "how many")) dm_say("You have taught me " + n2(toInt(dm_callModule(dm_colorNamesModule(), 'conceptCount)), "color"));
      else if (match_vbar("accept|except|save|definitely|and if it is|is if it is right|is this|right|enter|submit|send|you got it|close enough|that it is|bingo|confirm|confirming|confirmed|i said yes|it is|surely|is this the man|guess my man|just|sieve|yesterday's", s)
        || matchStart_vbar("yes|yeah|yep|yay|absolutely|correct|you can say that|chore|shore|shorts|sure|is yes|okay|ok|that's correct|you are right|you're right|you're correct|you just said it", s)
        || matchEnd_vbar("that's right|got it|could say that|could say so|that's it|couldn't be anything else", s)) {
        confirm();
      } else if "no|nope|undo|scratch that|scrap that|oops|oopsie" {
        removeFromParent(popup);
        if (_lastOverwrite != null) {
          setField(yourName := _lastOverwrite);
          dm_say(oneOf("oops", "oopsie", "sorry"));
        } else
          dm_say("What is it then?");
      } else if (matchStart_vbar("no idea", s)) {
        dm_say("OK I'll move on.");
        newColor();
      } else if (matchStart_vbar("new|next|another|hit me|again|do it again", dropPrefix_repeat_matchVBar("give me|a", s)))
        newColor();
      else {
        print("Got input: " + s);
        
        // "that is" is often heard as "what is" or "where is"
        S stuff = "no|actually|maybe|I think|it's|that's|this is|it is|that is|that looks like|I guess|or something|I'd call that|I would call that|I would say|I'd call it|Some call it|Some people call it|is what it is|definitely|of course|well|rather|confirmed|called|that would be called|I say|I said|damn it|what is|make that|a|my friend|buddy|you silly thing|or|just|simply|straight|plain|normal|simple|nothing but|really|good old|plain old|what's|playing|pure|dude|my man|let's|sir|is this|confirmed|confirming|where is|is|because|obviously|there is|say";
        s = dropPrefix_repeat_matchVBar(stuff, s);
        s = dropSuffix_repeat_matchVBar(stuff, s);
        s = replaceWords(s, "blew", "blue", "great", "gray", "grey", "gray", "read", "red");
        print("Simplified to: " + s);
        if (empty(s)) ret;
        if (eqic(s, yourName)) ret with confirm();
        setField(lastOverwrite := yourName);
        setField(yourName := s);
        dm_showYesToAcceptPopupAbove(btnSave);
        if (voiceMode) dm_say(s);
      }
    });
    JComponent theForm = vstackWithSpacing(
      makeBold(fontSize(20, liveValueLabel(mapLiveValue(dm_fieldLiveValue('myGuess), S, func(S s) -> S { "I call this color: " + or2(s, "Uh... no idea") + "." })))),
      westCenterAndEastWithMargin(fontSize(20, jBoldLabel("How do you call this color?")),
        withSideMargin(15, 5, onEnter(tfYourName = focusOnShow(selectAllOnFocus(
          fontSize(20, makeBold(dm_centeredFieldTextField('yourName))))), rThread saveName)),
        btnSave = jBoldButton("SAVE", rThread saveName)),
      withTopMargin(rightAlignedLine(jBoldButton("NEXT ONE PLEASE", rThread newColor))));

    ret onFirstShow(rThread talk,
     centerAndSouthWithMargin(
      northAndCenterWithMargins(
        westAndCenter(dm_fieldCheckBox('voiceMode),
          rightAlignedLine(
            withLabel("Color Code:", jBoldLiveValueLabel(mapLiveValue(func(O color) -> S { "#" + color }, S, dm_fieldLiveValue('color)))),
            jPopDownButton_noText("Choose color...", rThread chooseColor))),
        jCenteredSectionWithFont(sansSerifBold(18), " HERE'S A COLOR FOR YOU ", colorPanel = singleColorPanel(toColor(color)))),
      withBottomMargin(withSideMargin(15, theForm))));
  }
  
  void newColor enter {
    setColor(makeRandomColor());
  }
  
  void setColor(RGB color) enter {
    setField(+color);
    closestColor = (Pair) quickImport(dm_callModule(dm_colorNamesModule(), 'getClosestColor, color.getColor()));
    S guess = pairA(closestColor);
    bool closeEnough = guess != null && pairB(closestColor) <= maxDiff;
    if (!closeEnough) guess = null;
    setField(myGuess := or(guess, "no idea"));
    setField(yourName := guess);
    changeSingleColorPanel(colorPanel, color.getColor());
    selectAll(tfYourName);
    if (guess != null) {
      dm_showYesToAcceptPopupAbove(btnSave);
      if (voiceMode)
        dm_say("Is this " + myGuess + oneOf("", " that I see") + "?");
    } else if (voiceMode)
      dm_say("Master! What is the name of this color?");
  }
  
  void saveName enter {
    setField(yourName := trim(yourName));
    if (empty(yourName)) ret;
    if (eqic(myGuess, yourName))
      dm_infoBoxOrTalk(voiceMode, randomLL(
        "Hey I got this one right.",
        "I'm good!",
        "I'm so good.",
        "I'm so smart.",
        "I'm so smart, don't you think?",
        "Yippieh!"));
    else
      dm_infoBoxOrTalk(voiceMode, quote(yourName) + " confirmed.");
    dm_callModule(dm_colorNamesModule(), 'addColorName, color.getColor(), yourName, "");
    newColor();
  }
  
  RGB makeRandomColor() { ret randomHSBColor(); }
  
  void chooseColor enter {
    inputText("Choose a color (RRGGBB)", color.getHexString(), voidfunc(S s) enter {
      setColor(rgbFromHex(s))
    });
  }
  
  S switchableFields() { ret 'voiceMode; }
  
  void confirm enter {
    dm_hideYesPopupForComponent(btnSave);
    simulateClick(btnSave);
  }
  
  void talk { // ask about current color
    setColor(color);
  }
}

Author comment

Began life as a copy of #1020199

download  show line numbers  debug dex  old transpilations   

Travelled to 8 computer(s): bhatertpkbcr, cfunsshuasjs, gwrvuhgaqvyk, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tvejysmllsmz, vouqrxazstgt

No comments. add comment

Snippet ID: #1020242
Snippet name: Teach Colors To The Machine [OK]
Eternal ID of this version: #1020242/234
Text MD5: 527635451bcb3840341f95d42b785c98
Transpilation MD5: bc3bb3f02c202ab1b4132fab96e307f2
Author: stefan
Category: javax / stefan's os
Type: JavaX source code (Dynamic Module)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2018-12-14 19:43:57
Source code size: 7709 bytes / 163 lines
Pitched / IR pitched: No / No
Views / Downloads: 656 / 3605
Version history: 233 change(s)
Referenced in: [show references]