1 /* -*- mode: C++; tab-width: 4; c-basic-offset: 4; -*- */
2 
3 /* AbiWord
4  * Copyright (C) 1998-2000 AbiSource, Inc.
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19  * 02110-1301 USA.
20  */
21 
22 #ifdef HAVE_CONFIG_H
23 #include "config.h"
24 #endif
25 
26 #include "ap_Features.h"
27 
28 #include "ut_types.h"
29 #include "ut_assert.h"
30 #include "ut_debugmsg.h"
31 #include "ev_Toolbar_Actions.h"
32 #include "xap_Toolbar_ActionSet.h"
33 #include "ap_Toolbar_Id.h"
34 #include "ap_Toolbar_Functions.h"
35 #include "xav_Listener.h"
36 
37 /*****************************************************************/
38 
AP_CreateToolbarActionSet(void)39 EV_Toolbar_ActionSet * AP_CreateToolbarActionSet(void)
40 {
41 	// This should only be called once by the application.
42 	// Everyone should share the set we create.
43 
44 	EV_Toolbar_ActionSet * pActionSet = new EV_Toolbar_ActionSet(AP_TOOLBAR_ID__BOGUS1__,
45 																 AP_TOOLBAR_ID__BOGUS2__);
46 	UT_return_val_if_fail (pActionSet, NULL);
47 
48 	// The following is a list of all toolbar id's that we define,
49 	// the actions that they should be bound to, and various
50 	// other small details.  This creates the ActionSet of all
51 	// possible toolbar actions.  Order here is not significant and
52 	// does not necessarily correspond to any actual toolbar.
53 	// Elsewhere we define one or more ToolbarLayouts using these
54 	// verbs....
55 	//
56 	// type         defines the kind of button or thing that should
57 	//              be created on the toolbar.
58 	//
59 	// szMethodName is the name of a "call-by-name" EditMethod that we will
60 	//              call when the toolbar item is selected.  if it is null, the
61 	//              toolbar item doesn't do anything (we set it null for spacers).
62 	//
63 	// mask         defines the mask-of-interest.  This describes what type of
64 	//              document changes that the item reflects (ie. dirty-state vs
65 	//              font style at the insertion point).  this allows us to short
66 	//              cut toolbar refreshes.
67 	//
68 	// pfnGetState  defines a function to be called to compute the state of
69 	//              the toolbar widget;  whether enabled/disabled,
70 	//              grayed/ungrayed, and for text or combo objects, the value
71 	//              of string.
72 
73 #define _s(id,type,szMethodName,maskOfInterest,pfnGetState)		\
74 	pActionSet->setAction(id,type,szMethodName,maskOfInterest,pfnGetState)
75 
76 	//( __id__,          			type,					szMethodName,	mask,				pfn);
77 
78 	_s(AP_TOOLBAR_ID__BOGUS1__,		EV_TBIT_BOGUS,			NULL,			0,					NULL);
79 
80 	_s(AP_TOOLBAR_ID_FILE_NEW,		EV_TBIT_PushButton,		"fileNew",		AV_CHG_NONE,		NULL);
81 	_s(AP_TOOLBAR_ID_FILE_OPEN,		EV_TBIT_PushButton,		"fileOpen",		AV_CHG_NONE,		NULL);
82 	_s(AP_TOOLBAR_ID_FILE_SAVE,		EV_TBIT_PushButton,		"fileSave",		AV_CHG_ALL,		ap_ToolbarGetState_Changes);
83 	_s(AP_TOOLBAR_ID_FILE_SAVEAS,	EV_TBIT_PushButton,		"fileSaveAs",	AV_CHG_NONE,		NULL);
84 #if TOOLKIT_GTK_ALL
85 	_s(AP_TOOLBAR_ID_FILE_PRINT,	EV_TBIT_PushButton,		"cairoPrint",		AV_CHG_NONE,		NULL);
86 	_s(AP_TOOLBAR_ID_FILE_PRINT_PREVIEW, EV_TBIT_PushButton,	"cairoPrintPreview", AV_CHG_NONE,	NULL);
87 #else
88 	_s(AP_TOOLBAR_ID_FILE_PRINT,	EV_TBIT_PushButton,		"printTB",		AV_CHG_NONE,		NULL);
89 	_s(AP_TOOLBAR_ID_FILE_PRINT_PREVIEW, EV_TBIT_PushButton,	"printPreview", AV_CHG_NONE,	NULL);
90 #endif
91 	// AV_CHG_ALL doesn't seem right here. TODO!
92 #ifdef ENABLE_SPELL
93 	_s(AP_TOOLBAR_ID_SPELLCHECK,	EV_TBIT_PushButton,		"dlgSpell",		AV_CHG_ALL,		ap_ToolbarGetState_Spelling);
94 #endif
95 	_s(AP_TOOLBAR_ID_IMG,			EV_TBIT_PushButton,		"fileInsertGraphic", AV_CHG_NONE,	NULL);
96 	_s(AP_TOOLBAR_ID_HELP,			EV_TBIT_PushButton,		"helpContents",	AV_CHG_NONE,		NULL);
97 	// This changes as a document property only, is there a less frequent action than AV_CHG_FRAMEDATA?
98 	_s(AP_TOOLBAR_ID_COLOR_FORE,	EV_TBIT_ColorFore,		"colorForeTB",	AV_CHG_FRAMEDATA,	ap_ToolbarGetState_StylesLocked);
99 	_s(AP_TOOLBAR_ID_COLOR_BACK,	EV_TBIT_ColorBack,		"colorBackTB",	AV_CHG_FRAMEDATA,	ap_ToolbarGetState_StylesLocked);
100 	_s(AP_TOOLBAR_ID_EDIT_UNDO,		EV_TBIT_PushButton,		"undo",			AV_CHG_ALL,			ap_ToolbarGetState_Changes);
101 	_s(AP_TOOLBAR_ID_EDIT_REDO,		EV_TBIT_PushButton,		"redo",			AV_CHG_ALL,			ap_ToolbarGetState_Changes);
102 	_s(AP_TOOLBAR_ID_EDIT_CUT,		EV_TBIT_PushButton,		"cut",			AV_CHG_ALL,	ap_ToolbarGetState_Selection);
103 	_s(AP_TOOLBAR_ID_EDIT_COPY,		EV_TBIT_PushButton,		"copy",			AV_CHG_ALL,	ap_ToolbarGetState_Selection);
104 	_s(AP_TOOLBAR_ID_EDIT_PASTE,	EV_TBIT_PushButton,		"paste",		AV_CHG_CLIPBOARD,	ap_ToolbarGetState_Clipboard);
105 
106 	_s(AP_TOOLBAR_ID_EDIT_HEADER,	EV_TBIT_PushButton,		"editHeader",		AV_CHG_NONE,	NULL);
107 	_s(AP_TOOLBAR_ID_EDIT_FOOTER,	EV_TBIT_PushButton,		"editFooter",		AV_CHG_NONE,	NULL);
108 	_s(AP_TOOLBAR_ID_EDIT_REMOVEHEADER,	EV_TBIT_PushButton,		"removeHeader",		AV_CHG_MOTION,	ap_ToolbarGetState_HdrFtr);
109 	_s(AP_TOOLBAR_ID_EDIT_REMOVEFOOTER,	EV_TBIT_PushButton,		"removeFooter",		AV_CHG_MOTION,	ap_ToolbarGetState_HdrFtr);
110 
111 	_s(AP_TOOLBAR_ID_FMT_STYLE,		EV_TBIT_ComboBox,		"style",		AV_CHG_FMTSTYLE | AV_CHG_MOTION,	ap_ToolbarGetState_Style);
112 	_s(AP_TOOLBAR_ID_FMT_FONT,		EV_TBIT_ComboBox,		"fontFamily",	AV_CHG_FMTCHAR | AV_CHG_MOTION,		ap_ToolbarGetState_CharFmt);
113 
114 #if XAP_SIMPLE_TOOLBAR
115 	_s(AP_TOOLBAR_ID_FMT_CHOOSE,	EV_TBIT_PushButton,		"dlgFont",		AV_CHG_NONE,		NULL);
116 	_s(AP_TOOLBAR_ID_VIEW_FULL_SCREEN,	EV_TBIT_PushButton,		"viewFullScreen",		AV_CHG_NONE,		NULL);
117 #endif
118 
119 	_s(AP_TOOLBAR_ID_FMT_SIZE,		EV_TBIT_ComboBox,		"fontSize",		AV_CHG_FMTCHAR | AV_CHG_MOTION,		ap_ToolbarGetState_CharFmt);
120 	_s(AP_TOOLBAR_ID_FMT_BOLD,		EV_TBIT_ToggleButton,	"toggleBold",	AV_CHG_FMTCHAR | AV_CHG_MOTION,		ap_ToolbarGetState_CharFmt);
121 	_s(AP_TOOLBAR_ID_FMT_ITALIC,	EV_TBIT_ToggleButton,	"toggleItalic",	AV_CHG_FMTCHAR | AV_CHG_MOTION,		ap_ToolbarGetState_CharFmt);
122 	_s(AP_TOOLBAR_ID_FMT_UNDERLINE,	EV_TBIT_ToggleButton,	"toggleUline",	AV_CHG_FMTCHAR | AV_CHG_MOTION,		ap_ToolbarGetState_CharFmt);
123 	_s(AP_TOOLBAR_ID_FMT_OVERLINE,	EV_TBIT_ToggleButton,	"toggleOline",	AV_CHG_FMTCHAR | AV_CHG_MOTION,		ap_ToolbarGetState_CharFmt);
124 	_s(AP_TOOLBAR_ID_FMT_STRIKE,	EV_TBIT_ToggleButton,	"toggleStrike",	AV_CHG_FMTCHAR | AV_CHG_MOTION,		ap_ToolbarGetState_CharFmt);
125 	_s(AP_TOOLBAR_ID_FMT_TOPLINE,	EV_TBIT_ToggleButton,	"toggleTopline",	AV_CHG_FMTCHAR | AV_CHG_MOTION,		ap_ToolbarGetState_CharFmt);
126 	_s(AP_TOOLBAR_ID_FMT_BOTTOMLINE,	EV_TBIT_ToggleButton,	"toggleBottomline",	AV_CHG_FMTCHAR | AV_CHG_MOTION,		ap_ToolbarGetState_CharFmt);
127 
128 	_s(AP_TOOLBAR_ID_INDENT,		EV_TBIT_PushButton,		"toggleIndent",		AV_CHG_FMTBLOCK | AV_CHG_MOTION,		ap_ToolbarGetState_Indents);
129 	_s(AP_TOOLBAR_ID_UNINDENT,		EV_TBIT_PushButton,		"toggleUnIndent",	AV_CHG_FMTBLOCK | AV_CHG_MOTION,	ap_ToolbarGetState_Indents);
130 
131 	_s(AP_TOOLBAR_ID_FMT_SUPERSCRIPT,	EV_TBIT_ToggleButton,	"toggleSuper",	AV_CHG_FMTCHAR | AV_CHG_MOTION,	ap_ToolbarGetState_CharFmt);
132 	_s(AP_TOOLBAR_ID_FMT_SUBSCRIPT,		EV_TBIT_ToggleButton,	"toggleSub",	AV_CHG_FMTCHAR | AV_CHG_MOTION,	ap_ToolbarGetState_CharFmt);
133 	_s(AP_TOOLBAR_ID_INSERT_SYMBOL,		EV_TBIT_PushButton,	"insSymbol",	AV_CHG_NONE,		NULL);
134 
135 	_s(AP_TOOLBAR_ID_ALIGN_LEFT,	EV_TBIT_GroupButton,	"alignLeft",	AV_CHG_FMTBLOCK | AV_CHG_MOTION,	ap_ToolbarGetState_BlockFmt);
136 	_s(AP_TOOLBAR_ID_ALIGN_CENTER,	EV_TBIT_GroupButton,	"alignCenter",	AV_CHG_FMTBLOCK | AV_CHG_MOTION,	ap_ToolbarGetState_BlockFmt);
137 	_s(AP_TOOLBAR_ID_ALIGN_RIGHT,	EV_TBIT_GroupButton,	"alignRight",	AV_CHG_FMTBLOCK | AV_CHG_MOTION,	ap_ToolbarGetState_BlockFmt);
138 	_s(AP_TOOLBAR_ID_ALIGN_JUSTIFY,	EV_TBIT_GroupButton,	"alignJustify",	AV_CHG_FMTBLOCK | AV_CHG_MOTION,	ap_ToolbarGetState_BlockFmt);
139 
140 	_s(AP_TOOLBAR_ID_PARA_0BEFORE,	EV_TBIT_GroupButton,	"paraBefore0",	AV_CHG_FMTBLOCK | AV_CHG_MOTION,	ap_ToolbarGetState_BlockFmt);
141 	_s(AP_TOOLBAR_ID_PARA_12BEFORE,	EV_TBIT_GroupButton,	"paraBefore12",	AV_CHG_FMTBLOCK | AV_CHG_MOTION,	ap_ToolbarGetState_BlockFmt);
142 
143 	_s(AP_TOOLBAR_ID_SINGLE_SPACE,	EV_TBIT_GroupButton,	"singleSpace",	AV_CHG_FMTBLOCK | AV_CHG_MOTION,	ap_ToolbarGetState_BlockFmt);
144 	_s(AP_TOOLBAR_ID_MIDDLE_SPACE,	EV_TBIT_GroupButton,	"middleSpace",	AV_CHG_FMTBLOCK | AV_CHG_MOTION,	ap_ToolbarGetState_BlockFmt);
145 	_s(AP_TOOLBAR_ID_DOUBLE_SPACE,	EV_TBIT_GroupButton,	"doubleSpace",	AV_CHG_FMTBLOCK | AV_CHG_MOTION,	ap_ToolbarGetState_BlockFmt);
146 
147 	_s(AP_TOOLBAR_ID_1COLUMN,		EV_TBIT_GroupButton,	"sectColumns1",	AV_CHG_ALL,	ap_ToolbarGetState_SectionFmt);
148 	_s(AP_TOOLBAR_ID_2COLUMN,		EV_TBIT_GroupButton,	"sectColumns2",	AV_CHG_ALL,	ap_ToolbarGetState_SectionFmt);
149 	_s(AP_TOOLBAR_ID_3COLUMN,		EV_TBIT_GroupButton,	"sectColumns3",	AV_CHG_ALL,	ap_ToolbarGetState_SectionFmt);
150 
151 	_s(AP_TOOLBAR_ID_VIEW_SHOWPARA,	EV_TBIT_ToggleButton,	"viewPara",		AV_CHG_ALL,	ap_ToolbarGetState_View);
152 
153 	// AV_CHG_WINDOWSIZE, below, doesn't seem right.  TODO
154 	_s(AP_TOOLBAR_ID_ZOOM,				EV_TBIT_ComboBox,		"zoom",		AV_CHG_WINDOWSIZE,	ap_ToolbarGetState_Zoom);
155 
156 	// AV_CHG_ALL, below, doesn't seem right.  TODO
157 	_s(AP_TOOLBAR_ID_LISTS_BULLETS,		EV_TBIT_ToggleButton,	"doBullets",	AV_CHG_ALL,		ap_ToolbarGetState_Bullets	);
158 	_s(AP_TOOLBAR_ID_LISTS_NUMBERS,		EV_TBIT_ToggleButton,	"doNumbers",	AV_CHG_ALL,		ap_ToolbarGetState_Numbers	);
159 
160 	_s(AP_TOOLBAR_ID_FMT_HYPERLINK, EV_TBIT_PushButton, "insertHyperlink", AV_CHG_ALL,  ap_ToolbarGetState_HyperlinkOK);
161 	_s(AP_TOOLBAR_ID_FMT_BOOKMARK, EV_TBIT_PushButton, "insertBookmark", AV_CHG_ALL, ap_ToolbarGetState_BookmarkOK);
162 
163 	_s(AP_TOOLBAR_ID_SCRIPT_PLAY,	EV_TBIT_PushButton,	"scriptPlay",		AV_CHG_ALL,			ap_ToolbarGetState_ScriptsActive);
164 	_s(AP_TOOLBAR_ID_FMTPAINTER, EV_TBIT_PushButton, "formatPainter",
165 	   AV_CHG_ALL, ap_ToolbarGetState_Clipboard);
166 
167 	// ... add others here ...
168 	_s(AP_TOOLBAR_ID_FMT_DIR_OVERRIDE_LTR,	EV_TBIT_ToggleButton,	"toggleDirOverrideLTR",	AV_CHG_FMTCHAR | AV_CHG_DIRECTIONMODE | AV_CHG_MOTION,		ap_ToolbarGetState_CharFmt);
169 	_s(AP_TOOLBAR_ID_FMT_DIR_OVERRIDE_RTL,	EV_TBIT_ToggleButton,	"toggleDirOverrideRTL",	AV_CHG_FMTCHAR | AV_CHG_DIRECTIONMODE | AV_CHG_MOTION,		ap_ToolbarGetState_CharFmt);
170 	_s(AP_TOOLBAR_ID_FMT_DOM_DIRECTION,	EV_TBIT_ToggleButton,	"toggleDomDirection",	AV_CHG_FMTBLOCK | AV_CHG_FMTSECTION | AV_CHG_MOTION,		ap_ToolbarGetState_BlockFmt);
171 
172 
173 	_s(AP_TOOLBAR_ID_INSERT_TABLE, EV_TBIT_PushButton, "insertTable", AV_CHG_ALL, ap_ToolbarGetState_TableOK);
174 	_s(AP_TOOLBAR_ID_ADD_ROW, EV_TBIT_PushButton, "insertRowsAfter", AV_CHG_ALL, ap_ToolbarGetState_Table);
175 	_s(AP_TOOLBAR_ID_ADD_COLUMN, EV_TBIT_PushButton, "insertColsAfter", AV_CHG_ALL, ap_ToolbarGetState_Table);
176 	_s(AP_TOOLBAR_ID_DELETE_ROW, EV_TBIT_PushButton, "deleteRows", AV_CHG_ALL, ap_ToolbarGetState_Table);
177 	_s(AP_TOOLBAR_ID_DELETE_COLUMN, EV_TBIT_PushButton, "deleteColumns", AV_CHG_ALL, ap_ToolbarGetState_Table);
178 	_s(AP_TOOLBAR_ID_MERGE_CELLS, EV_TBIT_PushButton, "mergeCells", AV_CHG_ALL, ap_ToolbarGetState_Table);
179 	_s(AP_TOOLBAR_ID_SPLIT_CELLS, EV_TBIT_PushButton, "splitCells", AV_CHG_ALL, ap_ToolbarGetState_TableMerged);
180 
181 	_s(AP_TOOLBAR_ID_MERGELEFT,  EV_TBIT_PushButton, "mergeCells", AV_CHG_ALL, ap_ToolbarGetState_Table); // FIXME
182 	_s(AP_TOOLBAR_ID_MERGERIGHT, EV_TBIT_PushButton, "mergeCells", AV_CHG_ALL, ap_ToolbarGetState_Table); // FIXME
183 	_s(AP_TOOLBAR_ID_MERGEABOVE, EV_TBIT_PushButton, "mergeCells", AV_CHG_ALL, ap_ToolbarGetState_Table); // FIXME
184 	_s(AP_TOOLBAR_ID_MERGEBELOW, EV_TBIT_PushButton, "mergeCells", AV_CHG_ALL, ap_ToolbarGetState_Table); // FIXME
185 
186 	_s(AP_TOOLBAR_ID_REVISIONS_NEW,        EV_TBIT_PushButton,		"revisionNew",    AV_CHG_NONE, NULL );
187 	_s(AP_TOOLBAR_ID_REVISIONS_SELECT,     EV_TBIT_PushButton,		"revisionSelect", AV_CHG_ALL, ap_ToolbarGetState_HasRevisions );
188 	_s(AP_TOOLBAR_ID_REVISIONS_SHOW_FINAL, EV_TBIT_PushButton,		"toggleShowRevisionsAfter", AV_CHG_ALL, ap_ToolbarGetState_HasRevisions );
189 	_s(AP_TOOLBAR_ID_REVISIONS_FIND_PREV,  EV_TBIT_PushButton,		"revisionFindPrev", AV_CHG_ALL, ap_ToolbarGetState_HasRevisions );
190 	_s(AP_TOOLBAR_ID_REVISIONS_FIND_NEXT,  EV_TBIT_PushButton,		"revisionFindNext", AV_CHG_ALL, ap_ToolbarGetState_HasRevisions );
191 
192 	_s(AP_TOOLBAR_ID_SEMITEM_THIS,        EV_TBIT_PushButton,		"rdfAnchorSelectThisReferenceToSemanticItem", AV_CHG_NONE, NULL );
193 	_s(AP_TOOLBAR_ID_SEMITEM_NEXT,         EV_TBIT_PushButton,		"rdfAnchorSelectNextReferenceToSemanticItem",  AV_CHG_ALL, ap_ToolbarGetState_CursorInSemItem );
194 	_s(AP_TOOLBAR_ID_SEMITEM_PREV,         EV_TBIT_PushButton,		"rdfAnchorSelectPrevReferenceToSemanticItem",  AV_CHG_ALL, ap_ToolbarGetState_CursorInSemItem );
195 	_s(AP_TOOLBAR_ID_SEMITEM_EDIT,         EV_TBIT_PushButton,		"rdfAnchorEditSemanticItem",  AV_CHG_ALL, ap_ToolbarGetState_CursorInSemItem );
196 	_s(AP_TOOLBAR_ID_SEMITEM_STYLESHEET_APPLY, EV_TBIT_PushButton, "rdfApplyCurrentStyleSheet",  AV_CHG_ALL, ap_ToolbarGetState_CursorInSemItem );
197 
198 #ifdef ENABLE_MENUBUTTON
199 	_s(AP_TOOLBAR_ID_MENU, EV_TBIT_MenuButton, NULL, AV_CHG_NONE, NULL);
200 #endif
201 	_s(AP_TOOLBAR_ID__BOGUS2__,		EV_TBIT_BOGUS,			NULL,			0,					NULL);
202 #undef _s
203 
204 	return pActionSet;
205 }
206 
207 
208