1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
|
/** @file
* @brief Text-edit
*/
/* Authors:
* Lauris Kaplinski <lauris@ximian.com>
* bulia byak <buliabyak@users.sf.net>
* Johan Engelen <goejendaagh@zonnet.nl>
* John Smith
* Kris De Gussem <Kris.DeGussem@gmail.com>
*
* Copyright (C) 1999-2012 Authors
* Copyright (C) 2000-2001 Ximian, Inc.
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
#ifndef INKSCAPE_UI_DIALOG_TEXT_EDIT_H
#define INKSCAPE_UI_DIALOG_TEXT_EDIT_H
#include <gtk/gtk.h>
#include <gtkmm/box.h>
#include <gtkmm/textview.h>
#include <gtkmm/notebook.h>
#include <gtkmm/button.h>
#include <gtkmm/frame.h>
#include <gtkmm/scrolledwindow.h>
#include <gtkmm/separator.h>
#include <glibmm/i18n.h>
#include "ui/widget/panel.h"
#include "dialogs/dialog-events.h"
#include "widgets/font-selector.h"
#include "ui/dialog/desktop-tracker.h"
namespace Inkscape {
namespace UI {
namespace Dialog {
#define VB_MARGIN 4
/**
* The TextEdit class defines the Text and font dialog.
*
* The Text and font dialog allows you to set the font family, style and size
* and shows a preview of the result. The dialogs layout settings include
* horizontal and vertical alignment and inter line distance.
*/
class TextEdit : public UI::Widget::Panel {
public:
TextEdit();
virtual ~TextEdit();
/**
* Helper function which returns a new instance of the dialog.
* getInstance is needed by the dialog manager (Inkscape::UI::Dialog::DialogManager).
*/
static TextEdit &getInstance() { return *new TextEdit(); }
protected:
/**
* Callback for pressing the default button.
*/
void onSetDefault ();
/**
* Callback for pressing the apply button.
*/
void onApply ();
void onSelectionChange ();
void onSelectionModified (guint flags);
/**
* Called whenever something 'changes' on canvas.
*
* onReadSelection gets the currently selected item from the canvas and sets all the controls in this dialog to the correct state.
*
* @param dostyle Indicates whether the modification of the user includes a style change.
* @param content Indicates whether the modification of the user includes a style change. Actually refers to the question if we do want to show the content? (Parameter currently not used)
*/
void onReadSelection (gboolean style, gboolean content);
void onToggle ();
static void onLineSpacingChange (GtkComboBox* widget, gpointer data);
static void onTextChange (GtkTextBuffer *text_buffer, TextEdit *self);
static void onFontChange (SPFontSelector *fontsel, font_instance *font, TextEdit *self);
/**
* Get the selected text off the main canvas.
*/
SPItem *getSelectedTextItem (void);
/**
* Count the number of text objects in the selection on the canvas.
*/
unsigned getSelectedTextCount (void);
/**
* Helper function to create markup from a font definition and display in the preview label.
*/
void setPreviewText (font_instance *font, Glib::ustring phrase);
void updateObjectText ( SPItem *text );
SPCSSAttr *getTextStyle ();
/**
* Helper function to style radio buttons with icons, tooltips.
*
* styleButton is used when creating the dialog.
*
* @param button pointer to the button which is created
* @param tooltip pointer to its tooltip string
* @param iconname string identifying the icon to be shown
* @param group_button group to which the radio button belongs to
*/
void styleButton(Gtk::RadioButton *button, gchar const *tooltip, gchar const *iconname, Gtk::RadioButton *group_button );
/**
* Can be invoked for setting the desktop. Currently not used.
*/
void setDesktop(SPDesktop *desktop);
/**
* Is invoked by the desktop tracker when the desktop changes.
*/
void setTargetDesktop(SPDesktop *desktop);
private:
/*
* All the dialogs widgets
*/
Gtk::Notebook notebook;
Gtk::VBox font_vbox;
Gtk::Label font_label;
Gtk::HBox fontsel_hbox;
SPFontSelector *fsel;
Gtk::Frame layout_frame;
Gtk::HBox layout_hbox;
Gtk::RadioButton align_left;
Gtk::RadioButton align_center;
Gtk::RadioButton align_right;
Gtk::RadioButton align_justify;
Gtk::VSeparator align_sep;
Gtk::RadioButton text_vertical;
Gtk::RadioButton text_horizontal;
Gtk::VSeparator text_sep;
GtkWidget *spacing_combo;
Gtk::Label preview_label;
Gtk::Label text_label;
Gtk::VBox text_vbox;
Gtk::ScrolledWindow scroller;
GtkWidget *text_view; // TODO - Convert this to a Gtk::TextView, but GtkSpell doesn't seem to work with it
GtkTextBuffer *text_buffer;
Gtk::HBox button_row;
Gtk::Button setasdefault_button;
Gtk::Button close_button;
Gtk::Button apply_button;
SPDesktop *desktop;
DesktopTracker deskTrack;
sigc::connection desktopChangeConn;
sigc::connection selectChangedConn;
sigc::connection subselChangedConn;
sigc::connection selectModifiedConn;
bool blocked;
const Glib::ustring samplephrase;
TextEdit(TextEdit const &d);
TextEdit operator=(TextEdit const &d);
};
} //namespace Dialog
} //namespace UI
} //namespace Inkscape
#endif // INKSCAPE_UI_DIALOG_TEXT_EDIT_H
/*
Local Variables:
mode:c++
c-file-style:"stroustrup"
c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
indent-tabs-mode:nil
fill-column:99
End:
*/
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
|