00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <stdlib.h>
00024
00025 #include <qapplication.h>
00026 #include <qlayout.h>
00027 #include <qtabwidget.h>
00028 #include <qframe.h>
00029 #include <qwidget.h>
00030 #include <qevent.h>
00031
00032 #include <ktoolbar.h>
00033 #include <kmainwindow.h>
00034 #include <kglobalsettings.h>
00035 #include <kstandarddirs.h>
00036 #include <kdebug.h>
00037 #include <klocale.h>
00038 #include <koFrameButton.h>
00039 #include <kactioncollection.h>
00040
00041 #include "kis_resourceserver.h"
00042 #include "kis_controlframe.h"
00043 #include "kis_resource_mediator.h"
00044 #include "kis_itemchooser.h"
00045 #include "kis_pattern_chooser.h"
00046 #include "kis_gradient_chooser.h"
00047 #include "kis_icon_item.h"
00048 #include "kis_iconwidget.h"
00049 #include "kis_brush.h"
00050 #include "kis_pattern.h"
00051 #include "kis_gradient.h"
00052 #include "kis_brush_chooser.h"
00053 #include "kis_view.h"
00054 #include "kis_autobrush.h"
00055 #include "kis_autogradient.h"
00056 #include "kis_config.h"
00057 #include "kis_paintop_box.h"
00058 #include "kis_custom_brush.h"
00059 #include "kis_custom_pattern.h"
00060 #ifdef HAVE_TEXT_BRUSH
00061 #include "kis_text_brush.h"
00062 #endif
00063 KisPopupFrame::KisPopupFrame(QWidget * parent, const char* name)
00064 : QPopupMenu(parent, name)
00065 {
00066 setFocusPolicy(StrongFocus);
00067 }
00068
00069 void KisPopupFrame::keyPressEvent(QKeyEvent * e)
00070 {
00071 if (e->key()== Qt::Key_Escape)
00072 {
00073 hide();
00074 e->accept();
00075 }
00076 else {
00077 e->ignore();
00078 }
00079 }
00080
00081
00082 KisControlFrame::KisControlFrame( KMainWindow * , KisView * view, const char* name )
00083 : QObject(view, name)
00084
00085 , m_view(view)
00086 , m_brushWidget(0)
00087 , m_patternWidget(0)
00088 , m_gradientWidget(0)
00089 , m_brushChooserPopup(0)
00090 , m_patternChooserPopup(0)
00091 , m_gradientChooserPopup(0)
00092 , m_brushMediator(0)
00093 , m_patternMediator(0)
00094 , m_gradientMediator(0)
00095 , m_paintopBox(0)
00096 {
00097
00098 KisConfig cfg;
00099 m_font = KGlobalSettings::generalFont();
00100 m_font.setPointSize((int)cfg.dockerFontSize());
00101
00102 m_brushWidget = new KisIconWidget(view, "brushes");
00103 m_brushWidget->setTextLabel( i18n("Brush Shapes") );
00104
00105 KAction * action = new KWidgetAction(m_brushWidget,
00106 i18n("&Brush"),
00107 0,
00108 view,
00109 0,
00110 view->actionCollection(),
00111 "brushes");
00112
00113
00114 m_patternWidget = new KisIconWidget(view, "patterns");
00115 m_patternWidget->setTextLabel( i18n("Fill Patterns") );
00116 action = new KWidgetAction(m_patternWidget,
00117 i18n("&Patterns"),
00118 0,
00119 view,
00120 0,
00121 view->actionCollection(),
00122 "patterns");
00123
00124 m_gradientWidget = new KisIconWidget(view, "gradients");
00125 m_gradientWidget->setTextLabel( i18n("Gradients") );
00126 action = new KWidgetAction(m_gradientWidget,
00127 i18n("&Gradients"),
00128 0,
00129 view,
00130 0,
00131 view->actionCollection(),
00132 "gradients");
00133
00134 m_paintopBox = new KisPaintopBox( view, view, "paintopbox" );
00135 action = new KWidgetAction(m_paintopBox,
00136 i18n("&Painter's Tools"),
00137 0,
00138 view,
00139 0,
00140 view->actionCollection(),
00141 "paintops");
00142
00143 m_brushWidget->setFixedSize( 26, 26 );
00144 m_patternWidget->setFixedSize( 26, 26 );
00145 m_gradientWidget->setFixedSize( 26, 26 );
00146
00147 createBrushesChooser(m_view);
00148 createPatternsChooser(m_view);
00149 createGradientsChooser(m_view);
00150
00151 m_brushWidget->setPopup(m_brushChooserPopup);
00152 m_brushWidget->setPopupDelay(1);
00153 m_patternWidget->setPopup(m_patternChooserPopup);
00154 m_patternWidget->setPopupDelay(1);
00155 m_gradientWidget->setPopup(m_gradientChooserPopup);
00156 m_gradientWidget->setPopupDelay(1);
00157 }
00158
00159
00160 void KisControlFrame::slotSetBrush(KoIconItem *item)
00161 {
00162 if (item)
00163 m_brushWidget->slotSetItem(*item);
00164 }
00165
00166 void KisControlFrame::slotSetPattern(KoIconItem *item)
00167 {
00168 if (item)
00169 m_patternWidget->slotSetItem(*item);
00170 }
00171
00172 void KisControlFrame::slotSetGradient(KoIconItem *item)
00173 {
00174 if (item)
00175 m_gradientWidget->slotSetItem(*item);
00176 }
00177
00178 void KisControlFrame::slotBrushChanged(KisBrush * brush)
00179 {
00180 KisIconItem *item;
00181
00182 if((item = m_brushMediator->itemFor(brush)))
00183 {
00184 slotSetBrush(item);
00185 } else {
00186 slotSetBrush( new KisIconItem(brush) );
00187 }
00188
00189 }
00190
00191 void KisControlFrame::slotPatternChanged(KisPattern * pattern)
00192 {
00193 KisIconItem *item;
00194 if (!pattern)
00195 return;
00196
00197 if ( (item = m_patternMediator->itemFor(pattern)) )
00198 slotSetPattern(item);
00199 else
00200 slotSetPattern( new KisIconItem(pattern) );
00201 }
00202
00203
00204 void KisControlFrame::slotGradientChanged(KisGradient * gradient)
00205 {
00206 KisIconItem *item;
00207 if (!gradient)
00208 return;
00209
00210 if ( (item = m_gradientMediator->itemFor(gradient)) )
00211 slotSetGradient(item);
00212 else
00213 slotSetGradient( new KisIconItem(gradient) );
00214 }
00215
00216 void KisControlFrame::createBrushesChooser(KisView * view)
00217 {
00218
00219 m_brushChooserPopup = new KisPopupFrame(m_brushWidget, "brush_chooser_popup");
00220
00221 QHBoxLayout * l = new QHBoxLayout(m_brushChooserPopup, 2, 2, "brushpopuplayout");
00222
00223 QTabWidget * m_brushesTab = new QTabWidget(m_brushChooserPopup, "brushestab");
00224 m_brushesTab->setTabShape(QTabWidget::Triangular);
00225 m_brushesTab->setFocusPolicy(QWidget::NoFocus);
00226 m_brushesTab->setFont(m_font);
00227 m_brushesTab->setMargin(1);
00228
00229 l->add(m_brushesTab);
00230
00231 KisAutobrush * m_autobrush = new KisAutobrush(m_brushesTab, "autobrush", i18n("Autobrush"));
00232 m_brushesTab->addTab( m_autobrush, i18n("Autobrush"));
00233 connect(m_autobrush, SIGNAL(activatedResource(KisResource*)), m_view, SLOT(brushActivated( KisResource* )));
00234
00235 KisBrushChooser * m_brushChooser = new KisBrushChooser(m_brushesTab, "brush_chooser");
00236 m_brushesTab->addTab( m_brushChooser, i18n("Predefined Brushes"));
00237
00238 KisCustomBrush* customBrushes = new KisCustomBrush(m_brushesTab, "custombrush",
00239 i18n("Custom Brush"), m_view);
00240 m_brushesTab->addTab( customBrushes, i18n("Custom Brush"));
00241 connect(customBrushes, SIGNAL(activatedResource(KisResource*)),
00242 m_view, SLOT(brushActivated(KisResource*)));
00243 #ifdef HAVE_TEXT_BRUSH
00244 KisTextBrush* textBrushes = new KisTextBrush(m_brushesTab, "textbrush",
00245 i18n("Text Brush"));
00246 m_brushesTab->addTab( textBrushes, i18n("Text Brush"));
00247 connect(textBrushes, SIGNAL(activatedResource(KisResource*)),
00248 m_view, SLOT(brushActivated(KisResource*)));
00249 #endif
00250
00251 m_brushChooser->setFont(m_font);
00252 m_brushMediator = new KisResourceMediator( m_brushChooser, this);
00253 connect(m_brushMediator, SIGNAL(activatedResource(KisResource*)), m_view, SLOT(brushActivated(KisResource*)));
00254
00255 KisResourceServerBase* rServer;
00256 rServer = KisResourceServerRegistry::instance()->get("ImagePipeBrushServer");
00257 m_brushMediator->connectServer(rServer);
00258 rServer = KisResourceServerRegistry::instance()->get("BrushServer");
00259 m_brushMediator->connectServer(rServer);
00260
00261 KisControlFrame::connect(view, SIGNAL(brushChanged(KisBrush *)), this, SLOT(slotBrushChanged( KisBrush *)));
00262 m_brushChooser->setCurrent( 0 );
00263 m_brushMediator->setActiveItem( m_brushChooser->currentItem() );
00264 customBrushes->setResourceServer(rServer);
00265
00266 m_autobrush->activate();
00267 }
00268
00269 void KisControlFrame::createPatternsChooser(KisView * view)
00270 {
00271 m_patternChooserPopup = new KisPopupFrame(m_patternWidget, "pattern_chooser_popup");
00272
00273 QHBoxLayout * l2 = new QHBoxLayout(m_patternChooserPopup, 2, 2, "patternpopuplayout");
00274
00275 QTabWidget * m_patternsTab = new QTabWidget(m_patternChooserPopup, "patternstab");
00276 m_patternsTab->setTabShape(QTabWidget::Triangular);
00277 m_patternsTab->setFocusPolicy(QWidget::NoFocus);
00278 m_patternsTab->setFont(m_font);
00279 m_patternsTab->setMargin(1);
00280 l2->add( m_patternsTab );
00281
00282 KisPatternChooser * chooser = new KisPatternChooser(m_patternChooserPopup, "pattern_chooser");
00283 chooser->setFont(m_font);
00284 chooser->setMinimumSize(200, 150);
00285 m_patternsTab->addTab(chooser, i18n("Patterns"));
00286
00287 KisCustomPattern* customPatterns = new KisCustomPattern(m_patternsTab, "custompatterns",
00288 i18n("Custom Pattern"), m_view);
00289 customPatterns->setFont(m_font);
00290 m_patternsTab->addTab( customPatterns, i18n("Custom Pattern"));
00291
00292
00293 m_patternMediator = new KisResourceMediator( chooser, view);
00294 connect( m_patternMediator, SIGNAL(activatedResource(KisResource*)), view, SLOT(patternActivated(KisResource*)));
00295 connect(customPatterns, SIGNAL(activatedResource(KisResource*)),
00296 view, SLOT(patternActivated(KisResource*)));
00297
00298 KisResourceServerBase* rServer;
00299 rServer = KisResourceServerRegistry::instance()->get("PatternServer");
00300 m_patternMediator->connectServer(rServer);
00301
00302 KisControlFrame::connect(view, SIGNAL(patternChanged(KisPattern *)), this, SLOT(slotPatternChanged( KisPattern *)));
00303 chooser->setCurrent( 0 );
00304 m_patternMediator->setActiveItem( chooser->currentItem() );
00305
00306 customPatterns->setResourceServer(rServer);
00307 }
00308
00309
00310 void KisControlFrame::createGradientsChooser(KisView * view)
00311 {
00312 m_gradientChooserPopup = new KisPopupFrame(m_gradientWidget, "gradient_chooser_popup");
00313
00314 QHBoxLayout * l2 = new QHBoxLayout(m_gradientChooserPopup, 2, 2, "gradientpopuplayout");
00315
00316 QTabWidget * m_gradientTab = new QTabWidget(m_gradientChooserPopup, "gradientstab");
00317 m_gradientTab->setTabShape(QTabWidget::Triangular);
00318 m_gradientTab->setFocusPolicy(QWidget::NoFocus);
00319 m_gradientTab->setFont(m_font);
00320 m_gradientTab->setMargin(1);
00321
00322 l2->add( m_gradientTab);
00323
00324 KisGradientChooser * m_gradientChooser = new KisGradientChooser(m_view, m_gradientChooserPopup, "gradient_chooser");
00325 m_gradientChooser->setFont(m_font);
00326 m_gradientChooser->setMinimumSize(200, 150);
00327 m_gradientTab->addTab( m_gradientChooser, i18n("Gradients"));
00328
00329 m_gradientMediator = new KisResourceMediator( m_gradientChooser, view);
00330 connect(m_gradientMediator, SIGNAL(activatedResource(KisResource*)), view, SLOT(gradientActivated(KisResource*)));
00331
00332 KisResourceServerBase* rServer;
00333 rServer = KisResourceServerRegistry::instance()->get("GradientServer");
00334 m_gradientMediator->connectServer(rServer);
00335
00336 connect(view, SIGNAL(gradientChanged(KisGradient *)), this, SLOT(slotGradientChanged( KisGradient *)));
00337 m_gradientChooser->setCurrent( 0 );
00338 m_gradientMediator->setActiveItem( m_gradientChooser->currentItem() );
00339 }
00340
00341
00342 #include "kis_controlframe.moc"
00343