diff anagram/vaclgui/gtview.hpp @ 0:13d2b8934445

Import AnaGram (near-)release tree into Mercurial.
author David A. Holland
date Sat, 22 Dec 2007 17:52:45 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/anagram/vaclgui/gtview.hpp	Sat Dec 22 17:52:45 2007 -0500
@@ -0,0 +1,283 @@
+/*
+ * AnaGram, A System for Syntax Directed Programming
+ * Copyright 1997-2002 Parsifal Software. All Rights Reserved.
+ * See the file COPYING for license and usage terms.
+ *
+ * gtview.hpp
+ */
+
+#ifndef GTVIEW_HPP
+#define GTVIEW_HPP
+
+#include <icombobx.hpp>
+//#include <iedithdr.hpp>
+#include <ikeyevt.hpp>
+#include <ikeyhdr.hpp>
+#include <imcelcv.hpp>
+#include <imousevt.hpp>
+#include <imoushdr.hpp>
+#include <ipainevt.hpp>
+#include <ipainhdr.hpp>
+#include <isizehdr.hpp>
+#include <islhdr.hpp>
+#include <isplitcv.hpp>
+#include <istattxt.hpp>
+
+//#include "agview.hpp"
+#include "brt.h"
+#include "conflicttrc.h"
+#include "dview.hpp"
+#include "dvplug.hpp"
+#include "frame.hpp"
+#include "ftpar.h"
+#include "ftpardc.h"
+#include "toolbar.hpp"
+
+class trace_window_dc; // from tracedc.h
+
+
+class GTWindow; // below
+
+class GTView
+  : public ICanvas
+  , public AgFocusHandler
+  , public IFocusHandler
+  , public IMouseHandler
+  , public IPaintHandler
+{
+public:
+  GTView(GTWindow *owner_, DcRef<FtParserDc>);
+  ~GTView();
+
+  GTView &refreshRules(int);
+  DcRef<FtParserDc> parserDc;
+  AgDataViewPlug *stackViewData;
+  FtParser &parser;
+
+  ISplitCanvas mainSplitter;
+    ISplitCanvas tracePanels;
+      IMultiCellCanvas leftPanel;
+        AgDataView stackView;
+        IStaticText stackTitle;
+      IMultiCellCanvas rightPanel;
+        AgDataView tokenListView;
+        IStaticText tokenListTitle;
+    ISplitCanvas bottomPanel;
+      AgDataView reductionChoiceView;
+        DcRef<FtParserReductionDc> reductionMenu;
+      AgDataView ruleView;
+        AgDataViewPlug *ruleConnector;
+
+  tsd *itemStack;
+  DcRef<rule_stack_dc> ruleControl;
+
+
+  virtual Boolean gotFocus(IEvent &);
+  virtual Boolean lostFocus(IEvent &);
+  virtual Boolean gotFocus(IControlEvent &);
+  virtual Boolean lostFocus(IControlEvent &);
+  Boolean mouseClicked(IMouseClickEvent &event);
+  Boolean paintWindow(IPaintEvent &event);
+  //GTView &completeReduction();
+  //GTView &setFocus();
+
+  int focusControl;
+  int activePanel;
+
+  enum ButtonState { buttonIdle, buttonDown, waitingForClick };
+  ButtonState leftButtonState;
+
+  int followUpPending;
+  void followUpFocusMsg();
+
+private:
+  AgNotificationAction<GTView> dataColorChange;
+  void onColorChange() { stackTitle.refresh(); tokenListTitle.refresh(); }
+  AgNotificationAction<GTView> fontChange;
+  void onFontChange() {
+    stackTitle.setFont(FontSpec::columnHead).refresh();
+    tokenListTitle.setFont(FontSpec::columnHead).refresh();
+  }
+  GTWindow *frame;
+  //HelpDemon stackViewHelp;
+  //HelpDemon tokenViewHelp;
+};
+
+class GTWindow
+  : public AgFrame
+  , public IShowListHandler
+/*, public IKeyboardHandler - compiler complains because AgFrame has one */
+  , public IMouseHandler
+{
+public:
+  class ComboBox : public IComboBox {
+  public:
+    ComboBox(IWindow *owner, char *text)
+      : IComboBox(nextChildId(), owner, owner, IRectangle(),
+		  autoScroll |
+		  dropDownType | horizontalScroll)
+    {
+      //LOGSECTION("GTWindow::ComboBox::ComboBox");
+      IFont f = font();
+      ISize minimum(f.textWidth(text),f.maxCharHeight() );
+      //LOGV(minimum.asString());
+      setMinimumSize(minimum).show();
+      addAsLast("");
+    }
+
+    void saveText();
+
+    AgAction enterAction;
+    ComboBox &setEnterAction(AgAction action) {
+      enterAction = action;
+      return *this;
+    }
+    virtual void onEnter() {
+      enterAction.performDeferred();
+    }
+
+    AgAction selectAction;
+    ComboBox &setSelectAction(AgAction action) {
+      selectAction = action;
+      return *this;
+    }
+    virtual void onSelect() {
+      selectAction.performDeferred();
+    }
+
+    Boolean enter(IControlEvent &) { onEnter(); return true; }
+    Boolean select(IControlEvent &) { onSelect(); return true; }
+
+    // otherwise the compiler complains this is hidden
+    virtual IBaseComboBox &select(unsigned long a, IBase::Boolean b) {
+      return IBaseComboBox::select(a,b);
+    }
+  };
+
+  FtParser parser;
+  DcRef<FtParserDc> parserDc;
+  GTWindow(trace_window_dc *);
+  GTWindow(tsd *initialStates, 
+	   AgString headTitle, AgString footTitle = AgString());
+  ~GTWindow();
+  void init();
+  //void stackEnter();
+  void stackSelect();
+  void ruleSelect();
+  void tokenEnter();
+  void acceptToken();
+  void tokenProceed();
+  void tokenSelect();
+  void setUpViews();
+  virtual AgString copyTitle();
+  virtual GTWindow &copyTo(IClipboard &c);
+
+  // otherwise the compiler complains this is hidden
+  virtual int showHelp(IEvent &e) { return AgFrame::showHelp(e); }
+
+  Boolean windowResize(IResizeEvent &event);
+  //Boolean command(ICommandEvent &event);
+  Boolean listShown(IControlEvent &event);
+  Boolean virtualKeyPress(IKeyboardEvent &event);
+  Boolean characterKeyPress(IKeyboardEvent &event);
+  Boolean mouseClicked(IMouseClickEvent &event);
+
+  GTWindow &showReductionSelection();
+  void reductionChoiceEnter();
+  void reductionChoiceSelect();
+
+  //AgInfoField statusField;
+  ToolBar toolBar;
+  ToolBar containerBar;
+  IStaticText statusField;
+  HelpDemon statusFieldHelp;
+  GTWindow &setStatusField();
+  void resetParser();
+
+  void comboBoxEnter();
+  void comboBoxSelect();
+  void comboBoxProceed();
+  void comboBoxStep();
+  void doStep();
+  void proceed();
+  void showHelp();
+
+  void synchRules(unsigned sn, unsigned token);
+  void synchTokenList(unsigned sn, unsigned tn);
+  void setLookaheadToken(unsigned tn);
+  void onDeactivate();
+
+  ComboBox comboBox;
+  //ControlHelpDemon comboBoxHelp;
+  //AgToolControl comboBoxTool;
+
+
+
+  GTView canvas;
+  DcRef<TokenMenuDc> tokenList;
+
+  ToolBar buttonGroup;
+  ToolButton proceedButton;
+  ToolButton stepButton;
+  ToolButton resetButton;
+  ToolButton helpButton;
+
+  static char *processStateText[];
+  int comboBoxActive;
+  int comboBoxListShowing;
+  int ruleSelectActive;
+
+public:
+  int listViewLine;
+  int stackViewLine;
+  int ruleViewLine;
+  int reductionChoiceLine;
+  GTWindow &setFocus();
+
+public:
+  virtual Boolean  findNext(AgString s);
+  virtual Boolean  findPrev(AgString s);
+  unsigned selectedToken;
+
+  void setRuleViewCursor();
+
+  class TabControl {
+  public:
+    int enabled;
+    char *helpTopic;
+    AgAction action;
+    IWindow *window;
+
+    TabControl() {}
+    TabControl(IWindow *window_,
+	       char *helpTopic_,
+	       AgAction action_ = AgAction())
+      : enabled(1)
+      , helpTopic(helpTopic_)
+      , action(action_)
+      , window(window_)
+      {}
+    TabControl(const TabControl &x)
+      : enabled(x.enabled)
+      , helpTopic(x.helpTopic)
+      , action(x.action)
+      , window(x.window)
+      {}
+  };
+  enum {
+    stackTab,
+    tokenTab,
+    choiceTab,
+    ruleTab,
+    comboTab,
+    proceedTab,
+    stepTab,
+    resetTab,
+    helpTab,
+    nTabs
+  };
+  TabControl tabControl[nTabs];
+};
+
+
+#endif /* GTVIEW_HPP */