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

96
LINES

< > BotCompany Repo | #1009705 // Dictation Bot with Splitter 2 [dev.]

JavaX source code (desktop) [tags: use-pretranspiled] - run with: x30.jar

Download Jar. Uses 3874K of libraries. Click here for Pure Java version (9541L/65K).

!7

sS botName = "Dictation.";
static JTextArea ta;
static IVar<S> text;
static Splitter2<S, S> commandOrText;
static JTextArea whatYouSay;
static JButton btnText, btnCommand, btnNothing;
static new L<JButton> typeButtons;
static new L<S> types;
static S currentType;

p-subst {
  if (nempty(sendOpt(botName, "activate"))) { cleanKill(); ret; }
  
  commandOrText = persistentObject("Command or text splitter", Splitter2);
  text = persistentVar("Text");
  swing {
    moveFrameTo(10, 10, 500, 300, showFrame("What you say", whatYouSay = jTextArea()));
    addToFrame(whatYouSay, withCenteredTitle("What is this?", jcenteredline(
      btnText = jbutton("It's text", r { setType('text) }),
      btnCommand = jbutton("It's a command", r { setType('command) }),
      btnNothing = jbutton("It's nothing", r { setType('nothing) })
    )));
    typeButtons = ll(btnText, btnCommand, btnNothing);
    types = ll('text, 'command, 'nothing);
    updateButtons();
    showFrame(ta = jtextArea(text!));
    onUpdate(ta, r { text.set(getText(ta)) });
    exitProgramOnFrameClose(ta);
  }
  bot(botName);
  prioMe();
  hideConsole();
}

svoid prioMe {
  sendOpt("Voice Actions", "prio bot *", botName);
}

svoid cleanMeUp {
  sendOpt("Voice Actions", "prio bot done *", botName);
}

answer {
  if "activate" {
    prioMe();
    activateFrame(ta);
    ret "OK";
  }
    
  if "user said *" {
    onUtterance($1);
    ret "OK";
  }
}

svoid onUtterance(fS s) {
  fS type = commandOrText.get(s);
  onUtterance(s, type);
}

svoid onUtterance(fS s, fS type) {
  swing {
    currentType = type;
    setText(whatYouSay, s);
    updateButtons();
  }
  
  if (eq(type, 'command))
    interpretCommand(s);
  else if (eq(type, 'text)) {
    appendToTextArea(ta, s + "\n");
    requestFocus(ta);
  }
}

svoid interpretCommand(S s) {
  if "dictation done" {
    sendOpt("Voice Actions", "prio bot done *", botName);
    cleanKill();
  }
}

svoid setType(S type) {
  S text = getText(whatYouSay);
  if (currentType != null)
    commandOrText.unlearn(text, type);
  commandOrText.learn(text, type);
  onUtterance(text, type);
}

svoid updateButtons {
  for i over typeButtons:
    typeButtons.get(i).setEnabled(neq(currentType, types.get(i)));
}

Author comment

Began life as a copy of #1009702

download  show line numbers  debug dex  old transpilations   

Travelled to 13 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt

No comments. add comment

Snippet ID: #1009705
Snippet name: Dictation Bot with Splitter 2 [dev.]
Eternal ID of this version: #1009705/7
Text MD5: 4701f93b2d6b5aff60681b1272e5902b
Transpilation MD5: 9fb4a0e92db82d64b51fcb7ef1eb1ec4
Author: stefan
Category: javax / assistants
Type: JavaX source code (desktop)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2017-08-14 17:32:50
Source code size: 2315 bytes / 96 lines
Pitched / IR pitched: No / No
Views / Downloads: 510 / 1145
Version history: 6 change(s)
Referenced in: [show references]