chalk

kis_controlframe.cpp
1/*
2 * kis_controlframe.cpp - part of Chalk
3 *
4 * Copyright (c) 1999 Matthias Elter <elter@kde.org>
5 * Copyright (c) 2003 Patrick Julien <freak@codepimps.org>
6 * Copyright (c) 2004 Sven Langkamp <longamp@reallygood.de>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.g
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21 */
22
23#include <stdlib.h>
24
25#include <tqapplication.h>
26#include <tqlayout.h>
27#include <tqtabwidget.h>
28#include <tqframe.h>
29#include <tqwidget.h>
30#include <tqevent.h>
31
32#include <tdetoolbar.h>
33#include <tdemainwindow.h>
34#include <tdeglobalsettings.h>
35#include <kstandarddirs.h>
36#include <kdebug.h>
37#include <tdelocale.h>
38#include <koFrameButton.h>
39#include <tdeactioncollection.h>
40
41#include "kis_resourceserver.h"
42#include "kis_controlframe.h"
43#include "kis_resource_mediator.h"
44#include "kis_itemchooser.h"
45#include "kis_pattern_chooser.h"
46#include "kis_gradient_chooser.h"
47#include "kis_icon_item.h"
48#include "kis_iconwidget.h"
49#include "kis_brush.h"
50#include "kis_pattern.h"
51#include "kis_gradient.h"
52#include "kis_brush_chooser.h"
53#include "kis_view.h"
54#include "kis_autobrush.h"
55#include "kis_autogradient.h"
56#include "kis_config.h"
57#include "kis_paintop_box.h"
58#include "kis_custom_brush.h"
59#include "kis_custom_pattern.h"
60#ifdef HAVE_TEXT_BRUSH
61#include "kis_text_brush.h"
62#endif
63KisPopupFrame::KisPopupFrame(TQWidget * parent, const char* name)
64 : TQPopupMenu(parent, name)
65{
66 setFocusPolicy(TQWidget::StrongFocus);
67}
68
69void KisPopupFrame::keyPressEvent(TQKeyEvent * e)
70{
71 if (e->key()== TQt::Key_Escape)
72 {
73 hide();
74 e->accept();
75 }
76 else {
77 e->ignore();
78 }
79}
80
81
82KisControlFrame::KisControlFrame( TDEMainWindow * /*window*/, KisView * view, const char* name )
83 : TQObject(view, name)
84 //: TDEToolBar ( window, TQt::DockTop, false, name, true, true )
85 , m_view(view)
86 , m_brushWidget(0)
87 , m_patternWidget(0)
88 , m_gradientWidget(0)
89 , m_brushChooserPopup(0)
90 , m_patternChooserPopup(0)
91 , m_gradientChooserPopup(0)
92 , m_brushMediator(0)
93 , m_patternMediator(0)
94 , m_gradientMediator(0)
95 , m_paintopBox(0)
96{
97
98 KisConfig cfg;
99 m_font = TDEGlobalSettings::generalFont();
100 m_font.setPointSize((int)cfg.dockerFontSize());
101
102 m_brushWidget = new KisIconWidget(view, "brushes");
103 m_brushWidget->setTextLabel( i18n("Brush Shapes") );
104 // XXX: An action without a slot -- that's silly, what kind of action could we use here?
105 TDEAction * action = new KWidgetAction(m_brushWidget,
106 i18n("&Brush"),
107 0,
108 view,
109 0,
110 view->actionCollection(),
111 "brushes");
112
113
114 m_patternWidget = new KisIconWidget(view, "patterns");
115 m_patternWidget->setTextLabel( i18n("Fill Patterns") );
116 action = new KWidgetAction(m_patternWidget,
117 i18n("&Patterns"),
118 0,
119 view,
120 0,
121 view->actionCollection(),
122 "patterns");
123
124 m_gradientWidget = new KisIconWidget(view, "gradients");
125 m_gradientWidget->setTextLabel( i18n("Gradients") );
126 action = new KWidgetAction(m_gradientWidget,
127 i18n("&Gradients"),
128 0,
129 view,
130 0,
131 view->actionCollection(),
132 "gradients");
133
134 m_paintopBox = new KisPaintopBox( view, view, "paintopbox" );
135 action = new KWidgetAction(m_paintopBox,
136 i18n("&Painter's Tools"),
137 0,
138 view,
139 0,
140 view->actionCollection(),
141 "paintops");
142
143 m_brushWidget->setFixedSize( 26, 26 );
144 m_patternWidget->setFixedSize( 26, 26 );
145 m_gradientWidget->setFixedSize( 26, 26 );
146
147 createBrushesChooser(m_view);
148 createPatternsChooser(m_view);
149 createGradientsChooser(m_view);
150
151 m_brushWidget->setPopup(m_brushChooserPopup);
152 m_brushWidget->setPopupDelay(1);
153 m_patternWidget->setPopup(m_patternChooserPopup);
154 m_patternWidget->setPopupDelay(1);
155 m_gradientWidget->setPopup(m_gradientChooserPopup);
156 m_gradientWidget->setPopupDelay(1);
157}
158
159
160void KisControlFrame::slotSetBrush(KoIconItem *item)
161{
162 if (item)
163 m_brushWidget->slotSetItem(*item);
164}
165
166void KisControlFrame::slotSetPattern(KoIconItem *item)
167{
168 if (item)
169 m_patternWidget->slotSetItem(*item);
170}
171
172void KisControlFrame::slotSetGradient(KoIconItem *item)
173{
174 if (item)
175 m_gradientWidget->slotSetItem(*item);
176}
177
178void KisControlFrame::slotBrushChanged(KisBrush * brush)
179{
180 KisIconItem *item;
181
182 if((item = m_brushMediator->itemFor(brush)))
183 {
184 slotSetBrush(item);
185 } else {
186 slotSetBrush( new KisIconItem(brush) );
187 }
188
189}
190
191void KisControlFrame::slotPatternChanged(KisPattern * pattern)
192{
193 KisIconItem *item;
194 if (!pattern)
195 return;
196
197 if ( (item = m_patternMediator->itemFor(pattern)) )
198 slotSetPattern(item);
199 else
200 slotSetPattern( new KisIconItem(pattern) );
201}
202
203
204void KisControlFrame::slotGradientChanged(KisGradient * gradient)
205{
206 KisIconItem *item;
207 if (!gradient)
208 return;
209
210 if ( (item = m_gradientMediator->itemFor(gradient)) )
211 slotSetGradient(item);
212 else
213 slotSetGradient( new KisIconItem(gradient) );
214}
215
216void KisControlFrame::createBrushesChooser(KisView * view)
217{
218
219 m_brushChooserPopup = new KisPopupFrame(m_brushWidget, "brush_chooser_popup");
220
221 TQHBoxLayout * l = new TQHBoxLayout(m_brushChooserPopup, 2, 2, "brushpopuplayout");
222
223 TQTabWidget * m_brushesTab = new TQTabWidget(m_brushChooserPopup, "brushestab");
224 m_brushesTab->setTabShape(TQTabWidget::Triangular);
225 m_brushesTab->setFocusPolicy(TQWidget::NoFocus);
226 m_brushesTab->setFont(m_font);
227 m_brushesTab->setMargin(1);
228
229 l->add(m_brushesTab);
230
231 KisAutobrush * m_autobrush = new KisAutobrush(m_brushesTab, "autobrush", i18n("Autobrush"));
232 m_brushesTab->addTab( m_autobrush, i18n("Autobrush"));
233 connect(m_autobrush, TQ_SIGNAL(activatedResource(KisResource*)), m_view, TQ_SLOT(brushActivated( KisResource* )));
234
235 KisBrushChooser * m_brushChooser = new KisBrushChooser(m_brushesTab, "brush_chooser");
236 m_brushesTab->addTab( m_brushChooser, i18n("Predefined Brushes"));
237
238 KisCustomBrush* customBrushes = new KisCustomBrush(m_brushesTab, "custombrush",
239 i18n("Custom Brush"), m_view);
240 m_brushesTab->addTab( customBrushes, i18n("Custom Brush"));
241 connect(customBrushes, TQ_SIGNAL(activatedResource(KisResource*)),
242 m_view, TQ_SLOT(brushActivated(KisResource*)));
243#ifdef HAVE_TEXT_BRUSH
244 KisTextBrush* textBrushes = new KisTextBrush(m_brushesTab, "textbrush",
245 i18n("Text Brush")/*, m_view*/);
246 m_brushesTab->addTab( textBrushes, i18n("Text Brush"));
247 connect(textBrushes, TQ_SIGNAL(activatedResource(KisResource*)),
248 m_view, TQ_SLOT(brushActivated(KisResource*)));
249#endif
250
251 m_brushChooser->setFont(m_font);
252 m_brushMediator = new KisResourceMediator( m_brushChooser, this);
253 connect(m_brushMediator, TQ_SIGNAL(activatedResource(KisResource*)), m_view, TQ_SLOT(brushActivated(KisResource*)));
254
255 KisResourceServerBase* rServer;
256 rServer = KisResourceServerRegistry::instance()->get("ImagePipeBrushServer");
257 m_brushMediator->connectServer(rServer);
258 rServer = KisResourceServerRegistry::instance()->get("BrushServer");
259 m_brushMediator->connectServer(rServer);
260
261 KisControlFrame::connect(view, TQ_SIGNAL(brushChanged(KisBrush *)), this, TQ_SLOT(slotBrushChanged( KisBrush *)));
262 m_brushChooser->setCurrent( 0 );
263 m_brushMediator->setActiveItem( m_brushChooser->currentItem() );
264 customBrushes->setResourceServer(rServer);
265
266 m_autobrush->activate();
267}
268
269void KisControlFrame::createPatternsChooser(KisView * view)
270{
271 m_patternChooserPopup = new KisPopupFrame(m_patternWidget, "pattern_chooser_popup");
272
273 TQHBoxLayout * l2 = new TQHBoxLayout(m_patternChooserPopup, 2, 2, "patternpopuplayout");
274
275 TQTabWidget * m_patternsTab = new TQTabWidget(m_patternChooserPopup, "patternstab");
276 m_patternsTab->setTabShape(TQTabWidget::Triangular);
277 m_patternsTab->setFocusPolicy(TQWidget::NoFocus);
278 m_patternsTab->setFont(m_font);
279 m_patternsTab->setMargin(1);
280 l2->add( m_patternsTab );
281
282 KisPatternChooser * chooser = new KisPatternChooser(m_patternChooserPopup, "pattern_chooser");
283 chooser->setFont(m_font);
284 chooser->setMinimumSize(200, 150);
285 m_patternsTab->addTab(chooser, i18n("Patterns"));
286
287 KisCustomPattern* customPatterns = new KisCustomPattern(m_patternsTab, "custompatterns",
288 i18n("Custom Pattern"), m_view);
289 customPatterns->setFont(m_font);
290 m_patternsTab->addTab( customPatterns, i18n("Custom Pattern"));
291
292
293 m_patternMediator = new KisResourceMediator( chooser, view);
294 connect( m_patternMediator, TQ_SIGNAL(activatedResource(KisResource*)), view, TQ_SLOT(patternActivated(KisResource*)));
295 connect(customPatterns, TQ_SIGNAL(activatedResource(KisResource*)),
296 view, TQ_SLOT(patternActivated(KisResource*)));
297
298 KisResourceServerBase* rServer;
299 rServer = KisResourceServerRegistry::instance()->get("PatternServer");
300 m_patternMediator->connectServer(rServer);
301
302 KisControlFrame::connect(view, TQ_SIGNAL(patternChanged(KisPattern *)), this, TQ_SLOT(slotPatternChanged( KisPattern *)));
303 chooser->setCurrent( 0 );
304 m_patternMediator->setActiveItem( chooser->currentItem() );
305
306 customPatterns->setResourceServer(rServer);
307}
308
309
310void KisControlFrame::createGradientsChooser(KisView * view)
311{
312 m_gradientChooserPopup = new KisPopupFrame(m_gradientWidget, "gradient_chooser_popup");
313
314 TQHBoxLayout * l2 = new TQHBoxLayout(m_gradientChooserPopup, 2, 2, "gradientpopuplayout");
315
316 TQTabWidget * m_gradientTab = new TQTabWidget(m_gradientChooserPopup, "gradientstab");
317 m_gradientTab->setTabShape(TQTabWidget::Triangular);
318 m_gradientTab->setFocusPolicy(TQWidget::NoFocus);
319 m_gradientTab->setFont(m_font);
320 m_gradientTab->setMargin(1);
321
322 l2->add( m_gradientTab);
323
324 KisGradientChooser * m_gradientChooser = new KisGradientChooser(m_view, m_gradientChooserPopup, "gradient_chooser");
325 m_gradientChooser->setFont(m_font);
326 m_gradientChooser->setMinimumSize(200, 150);
327 m_gradientTab->addTab( m_gradientChooser, i18n("Gradients"));
328
329 m_gradientMediator = new KisResourceMediator( m_gradientChooser, view);
330 connect(m_gradientMediator, TQ_SIGNAL(activatedResource(KisResource*)), view, TQ_SLOT(gradientActivated(KisResource*)));
331
332 KisResourceServerBase* rServer;
333 rServer = KisResourceServerRegistry::instance()->get("GradientServer");
334 m_gradientMediator->connectServer(rServer);
335
336 connect(view, TQ_SIGNAL(gradientChanged(KisGradient *)), this, TQ_SLOT(slotGradientChanged( KisGradient *)));
337 m_gradientChooser->setCurrent( 0 );
338 m_gradientMediator->setActiveItem( m_gradientChooser->currentItem() );
339}
340
341
342#include "kis_controlframe.moc"
343
This widget presents all paintops that a user can paint with.
A resource mediator manages access to resources like gradients.
The KisResource class provides a representation of Chalk image resources.