Mercurial > ~dholland > hg > ag > index.cgi
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 ©To(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 */