krita/ui

kis_control_frame.cpp

Go to the documentation of this file.
00001 /*
00002  *  kis_control_frame.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  <sven.langkamp@gmail.com>
00007  *  Copyright (c) 2006 Boudewijn Rempt <boud@valdyas.org>
00008  *
00009  *  This program is free software; you can redistribute it and/or modify
00010  *  it under the terms of the GNU General Public License as published by
00011  *  the Free Software Foundation; either version 2 of the License, or
00012  *  (at your option) any later version.
00013  *
00014  *  This program is distributed in the hope that it will be useful,
00015  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00016  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017  *  GNU General Public License for more details.g
00018  *
00019  *  You should have received a copy of the GNU General Public License
00020  *  along with this program; if not, write to the Free Software
00021  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00022  */
00023 
00024 #include "kis_control_frame.h"
00025 
00026 #include <stdlib.h>
00027 
00028 #include <QApplication>
00029 #include <QLayout>
00030 #include <QTabWidget>
00031 #include <QFrame>
00032 #include <QWidget>
00033 #include <QEvent>
00034 #include <QHBoxLayout>
00035 #include <QKeyEvent>
00036 #include <QMenu>
00037 
00038 #include <kglobalsettings.h>
00039 #include <klocale.h>
00040 #include <kaction.h>
00041 #include <kactioncollection.h>
00042 #include <KoDualColorButton.h>
00043 #include <KoAbstractGradient.h>
00044 #include <KoResourceItemChooser.h>
00045 #include <KoResourceServer.h>
00046 #include <KoResourceServerAdapter.h>
00047 #include <KoResourceServerProvider.h>
00048 
00049 #include "kis_pattern.h"
00050 #include "kis_resource_server_provider.h"
00051 #include "kis_canvas_resource_provider.h"
00052 
00053 #include "widgets/kis_iconwidget.h"
00054 
00055 #include "widgets/kis_gradient_chooser.h"
00056 #include "kis_view2.h"
00057 #include "kis_config.h"
00058 #include "kis_paintop_box.h"
00059 #include "kis_custom_pattern.h"
00060 #include "widgets/kis_pattern_chooser.h"
00061 #include "kis_popup_palette.h"
00062 #include "ko_favorite_resource_manager.h"
00063 
00064 
00065 KisControlFrame::KisControlFrame(KisView2 * view, const char* name)
00066         : QObject(view)
00067         , m_view(view)
00068         , m_patternWidget(0)
00069         , m_gradientWidget(0)
00070         , m_patternChooserPopup(0)
00071         , m_gradientChooserPopup(0)
00072         , m_paintopBox(0)
00073 {
00074     setObjectName(name);
00075     KisConfig cfg;
00076     m_font  = KGlobalSettings::generalFont();
00077 
00078     m_patternWidget = new KisIconWidget(view, "patterns");
00079     m_patternWidget->setText(i18n("Fill Patterns"));
00080     m_patternWidget->setToolTip(i18n("Fill Patterns"));
00081     m_patternWidget->setFixedSize(26, 26);
00082     KAction * action  = new KAction(i18n("&Patterns"), this);
00083     view->actionCollection()->addAction("patterns", action);
00084     action->setDefaultWidget(m_patternWidget);
00085 
00086     m_gradientWidget = new KisIconWidget(view, "gradients");
00087     m_gradientWidget->setText(i18n("Gradients"));
00088     m_gradientWidget->setToolTip(i18n("Gradients"));
00089     m_gradientWidget->setFixedSize(26, 26);
00090     action  = new KAction(i18n("&Gradients"), this);
00091     view->actionCollection()->addAction("gradients", action);
00092     action->setDefaultWidget(m_gradientWidget);
00093 
00094     /**** Temporary hack to test the KoDualColorButton ***/
00095     KoDualColorButton * dual = new KoDualColorButton(view->resourceProvider()->fgColor(), view->resourceProvider()->bgColor(), view, view);
00096     action  = new KAction(i18n("&Color"), this);
00097     view->actionCollection()->addAction("dual", action);
00098     action->setDefaultWidget(dual);
00099     connect(dual, SIGNAL(foregroundColorChanged(const KoColor &)), view->resourceProvider(), SLOT(slotSetFGColor(const KoColor &)));
00100     connect(dual, SIGNAL(backgroundColorChanged(const KoColor &)), view->resourceProvider(), SLOT(slotSetBGColor(const KoColor &)));
00101     connect(view->resourceProvider(), SIGNAL(sigFGColorChanged(const KoColor &)), dual, SLOT(setForegroundColor(const KoColor &)));
00102     connect(view->resourceProvider(), SIGNAL(sigBGColorChanged(const KoColor &)), dual, SLOT(setBackgroundColor(const KoColor &)));
00103     dual->setFixedSize(26, 26);
00104     /*******/
00105 
00106 
00107     createPatternsChooser(m_view);
00108     createGradientsChooser(m_view);
00109 
00110     m_patternWidget->setPopupWidget(m_patternChooserPopup);
00111     m_gradientWidget->setPopupWidget(m_gradientChooserPopup);
00112 
00113     m_paintopBox = new KisPaintopBox(view, view, "paintopbox");
00114     action  = new KAction(i18n("&Painter's Tools"), this);
00115     view->actionCollection()->addAction("paintops", action);
00116     action->setDefaultWidget(m_paintopBox);
00117 
00118         /***TESTING***/
00119     m_view->setFavoriteResourceManager(m_paintopBox);
00120 
00121     m_paletteButton = new QPushButton("Save to Palette");
00122     connect(m_paletteButton, SIGNAL(clicked()), this, SLOT(slotSaveToFavouriteBrushes()));
00123     action  = new KAction(i18n("&Palette"), this);
00124     view->actionCollection()->addAction("palette_manager", action);
00125     action->setDefaultWidget(m_paletteButton);
00126 
00127 }
00128 
00129 
00130 void KisControlFrame::slotSetPattern(KisPattern * pattern)
00131 {
00132     m_patternWidget->slotSetItem(pattern);
00133 }
00134 
00135 void KisControlFrame::slotSetGradient(KoAbstractGradient * gradient)
00136 {
00137     m_gradientWidget->slotSetItem(gradient);
00138 }
00139 
00140 void KisControlFrame::createPatternsChooser(KisView2 * view)
00141 {
00142     m_patternChooserPopup = new QWidget(m_patternWidget);
00143     m_patternChooserPopup->setObjectName("pattern_chooser_popup");
00144     QHBoxLayout * l2 = new QHBoxLayout(m_patternChooserPopup);
00145     l2->setObjectName("patternpopuplayout");
00146     l2->setMargin(2);
00147     l2->setSpacing(2);
00148 
00149     m_patternsTab = new QTabWidget(m_patternChooserPopup);
00150     m_patternsTab->setObjectName("patternstab");
00151     m_patternsTab->setFocusPolicy(Qt::NoFocus);
00152     m_patternsTab->setFont(m_font);
00153     m_patternsTab->setContentsMargins(1, 1, 1, 1);
00154     l2->addWidget(m_patternsTab);
00155 
00156     KisPatternChooser * chooser = new KisPatternChooser(m_patternChooserPopup);
00157     chooser->setFont(m_font);
00158     m_patternsTab->addTab(chooser, i18n("Patterns"));
00159 
00160     KisCustomPattern* customPatterns = new KisCustomPattern(0, "custompatterns",
00161             i18n("Custom Pattern"), m_view);
00162     customPatterns->setFont(m_font);
00163     m_patternsTab->addTab(customPatterns, i18n("Custom Pattern"));
00164 
00165     connect(chooser, SIGNAL(resourceSelected(KoResource*)),
00166             view->resourceProvider(), SLOT(slotPatternActivated(KoResource*)));
00167 
00168     connect(customPatterns, SIGNAL(activatedResource(KoResource*)),
00169             view->resourceProvider(), SLOT(slotPatternActivated(KoResource*)));
00170 
00171     connect(view->resourceProvider(), SIGNAL(sigPatternChanged(KisPattern *)),
00172             this, SLOT(slotSetPattern(KisPattern *)));
00173 
00174     chooser->setCurrentItem(0, 0);
00175     if (chooser->currentResource())
00176         view->resourceProvider()->slotPatternActivated(chooser->currentResource());
00177 
00178 }
00179 
00180 void KisControlFrame::slotSaveToFavouriteBrushes()
00181 {
00182     if(! m_view->favoriteResourceManager())
00183     {
00184         qDebug() << "favoriteResourceManager is not instantiated";
00185         m_view->setFavoriteResourceManager(m_paintopBox);
00186     }
00187     else {
00188         m_view->favoriteResourceManager()->showPaletteManager();
00189     }
00190 }
00191 
00192 void KisControlFrame::createGradientsChooser(KisView2 * view)
00193 {
00194     m_gradientChooserPopup = new QWidget(m_gradientWidget);
00195     m_gradientChooserPopup->setObjectName("gradient_chooser_popup");
00196     QHBoxLayout * l2 = new QHBoxLayout(m_gradientChooserPopup);
00197     l2->setObjectName("gradientpopuplayout");
00198     l2->setMargin(2);
00199     l2->setSpacing(2);
00200 
00201     m_gradientTab = new QTabWidget(m_gradientChooserPopup);
00202     m_gradientTab->setObjectName("gradientstab");
00203     m_gradientTab->setFocusPolicy(Qt::NoFocus);
00204     m_gradientTab->setFont(m_font);
00205     m_gradientTab->setContentsMargins(1, 1, 1, 1);
00206     l2->addWidget(m_gradientTab);
00207 
00208     m_gradientChooser = new KisGradientChooser(m_view, m_gradientChooserPopup);
00209     m_gradientChooser->setFont(m_font);
00210     m_gradientTab->addTab(m_gradientChooser, i18n("Gradients"));
00211 
00212     connect(m_gradientChooser, SIGNAL(resourceSelected(KoResource*)),
00213             view->resourceProvider(), SLOT(slotGradientActivated(KoResource*)));
00214 
00215     connect(view->resourceProvider(), SIGNAL(sigGradientChanged(KoAbstractGradient *)),
00216             this, SLOT(slotSetGradient(KoAbstractGradient *)));
00217 
00218     m_gradientChooser->setCurrentItem(0, 0);
00219     if (m_gradientChooser->currentResource())
00220         view->resourceProvider()->slotGradientActivated(m_gradientChooser->currentResource());
00221 }
00222 
00223 #include "kis_control_frame.moc"
00224