krita

kis_controlframe.cc

00001 /*
00002  *  kis_controlframe.cc - part of Krita
00003  *
00004  *  Copyright (c) 1999 Matthias Elter  <elter@kde.org>
00005  *  Copyright (c) 2003 Patrick Julien  <freak@codepimps.org>
00006  *  Copyright (c) 2004 Sven Langkamp  <longamp@reallygood.de>
00007  *
00008  *  This program is free software; you can redistribute it and/or modify
00009  *  it under the terms of the GNU General Public License as published by
00010  *  the Free Software Foundation; either version 2 of the License, or
00011  *  (at your option) any later version.
00012  *
00013  *  This program is distributed in the hope that it will be useful,
00014  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00015  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016  *  GNU General Public License for more details.g
00017  *
00018  *  You should have received a copy of the GNU General Public License
00019  *  along with this program; if not, write to the Free Software
00020  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
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 * /*window*/, KisView * view, const char* name )
00083     : QObject(view, name)
00084     //: KToolBar ( window, Qt::DockTop, false, name, true, true )
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     // XXX: An action without a slot -- that's silly, what kind of action could we use here?
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")/*, m_view*/);
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 
KDE Home | KDE Accessibility Home | Description of Access Keys