00001
00023 #include "core.h"
00024
00025 #include "pluginmanager.h"
00026 #include "editor.h"
00027 #include "plugin.h"
00028
00029 #include <ksettings/dialog.h>
00030 #include <kplugininfo.h>
00031 #include <kapplication.h>
00032 #include <kconfig.h>
00033 #include <ktrader.h>
00034 #include <klibloader.h>
00035 #include <kstdaction.h>
00036 #include <klistbox.h>
00037 #include <kiconloader.h>
00038 #include <kstandarddirs.h>
00039 #include <kshortcut.h>
00040 #include <klocale.h>
00041 #include <kstatusbar.h>
00042 #include <kguiitem.h>
00043 #include <kpopupmenu.h>
00044 #include <kshortcut.h>
00045 #include <kcmultidialog.h>
00046 #include <kaction.h>
00047 #include <kstdaccel.h>
00048 #include <kdebug.h>
00049
00050 #include <qwidgetstack.h>
00051 #include <qhbox.h>
00052 #include <qwidget.h>
00053
00054 using namespace Komposer;
00055
00056 Core::Core( QWidget *parent, const char *name )
00057 : KomposerIface( "KomposerIface" ),
00058 KMainWindow( parent, name ), m_currentEditor( 0 )
00059 {
00060 initWidgets();
00061 initCore();
00062 initConnections();
00063 setInstance( new KInstance( "komposer" ) );
00064
00065 createActions();
00066 setXMLFile( "komposerui.rc" );
00067
00068 createGUI( 0 );
00069
00070 resize( 600, 400 );
00071 setAutoSaveSettings();
00072
00073 loadSettings();
00074 }
00075
00076 Core::~Core()
00077 {
00078 saveSettings();
00079
00080
00081 }
00082
00083 void
00084 Core::addEditor( Komposer::Editor *editor )
00085 {
00086 if ( editor->widget() ) {
00087 m_stack->addWidget( editor->widget() );
00088 m_stack->raiseWidget( editor->widget() );
00089 editor->widget()->show();
00090 m_currentEditor = editor;
00091 }
00092
00093
00094
00095 guiFactory()->addClient( editor );
00096 }
00097
00098 void
00099 Core::addPlugin( Komposer::Plugin *plugin )
00100 {
00101
00102 guiFactory()->addClient( plugin );
00103 }
00104
00105 void
00106 Core::slotPluginLoaded( Plugin *plugin )
00107 {
00108 kdDebug() << "Plugin loaded "<<endl;
00109
00110 Editor *editor = dynamic_cast<Editor*>( plugin );
00111 if ( editor ) {
00112 addEditor( editor );
00113 } else {
00114 addPlugin( plugin );
00115 }
00116 }
00117
00118 void
00119 Core::slotAllPluginsLoaded()
00120 {
00121 QValueList<KPluginInfo*> plugins = m_pluginManager->availablePlugins();
00122 kdDebug()<<"Number of available plugins is "<< plugins.count() <<endl;
00123 for ( QValueList<KPluginInfo*>::iterator it = plugins.begin(); it != plugins.end(); ++it ) {
00124 KPluginInfo *i = ( *it );
00125 kdDebug()<<"\tAvailable plugin "<< i->pluginName()
00126 <<", comment = "<< i->comment() <<endl;
00127 }
00128
00129 if ( !m_stack->visibleWidget() ) {
00130 m_pluginManager->loadPlugin( "komposer_defaulteditor", PluginManager::LoadAsync );
00131 }
00132 }
00133
00134 #if 0
00135 void
00136 Core::slotActivePartChanged( KParts::Part *part )
00137 {
00138 if ( !part ) {
00139 createGUI( 0 );
00140 return;
00141 }
00142
00143 kdDebug() << "Part activated: " << part << " with stack id. "
00144 << m_stack->id( part->widget() )<< endl;
00145
00146 createGUI( part );
00147 }
00148
00149 void
00150 Core::selectEditor( Komposer::Editor *editor )
00151 {
00152 if ( !editor )
00153 return;
00154
00155 KParts::Part *part = editor->part();
00156
00157 editor->select();
00158
00159 QPtrList<KParts::Part> *partList = const_cast<QPtrList<KParts::Part>*>(
00160 m_partManager->parts() );
00161 if ( partList->find( part ) == -1 )
00162 addPart( part );
00163
00164 m_partManager->setActivePart( part );
00165 QWidget *view = part->widget();
00166 Q_ASSERT( view );
00167
00168 kdDebug()<<"Raising view "<<view<<endl;
00169 if ( view )
00170 {
00171 m_stack->raiseWidget( view );
00172 view->show();
00173 view->setFocus();
00174 m_currentEditor = editor;
00175 }
00176 }
00177
00178 void
00179 Core::selectEditor( const QString &editorName )
00180 {
00181
00182 }
00183 #endif
00184
00185 void
00186 Core::loadSettings()
00187 {
00188
00189
00190
00191
00192 }
00193
00194 void
00195 Core::saveSettings()
00196 {
00197
00198
00199 }
00200
00201 void
00202 Core::slotQuit()
00203 {
00204 kdDebug()<<"exit"<<endl;
00205 m_pluginManager->shutdown();
00206 }
00207
00208 void
00209 Core::slotPreferences()
00210 {
00211 if ( m_dlg == 0 )
00212 m_dlg = new KSettings::Dialog( this );
00213 m_dlg->show();
00214 }
00215
00216 void
00217 Core::initWidgets()
00218 {
00219 statusBar()->show();
00220 QHBox *topWidget = new QHBox( this );
00221 setCentralWidget( topWidget );
00222 m_stack = new QWidgetStack( topWidget );
00223 }
00224
00225 void
00226 Core::initCore()
00227 {
00228 m_pluginManager = new PluginManager( this );
00229 connect( m_pluginManager, SIGNAL(pluginLoaded(Plugin*)),
00230 SLOT(slotPluginLoaded(Plugin*)) );
00231 connect( m_pluginManager, SIGNAL(allPluginsLoaded()),
00232 SLOT(slotAllPluginsLoaded()) );
00233
00234
00235 m_pluginManager->loadAllPlugins();
00236 kdDebug()<<"Loading"<<endl;
00237 }
00238
00239 void
00240 Core::initConnections()
00241 {
00242 connect( kapp, SIGNAL(shutDown()),
00243 SLOT(slotQuit()) );
00244 }
00245
00246 void
00247 Core::createActions()
00248 {
00249 KStdAction::close( this, SLOT(slotClose()), actionCollection() );
00250
00251 (void) new KAction( i18n( "&Send" ), "mail_send", CTRL+Key_Return,
00252 this, SLOT(slotSendNow()), actionCollection(),
00253 "send_default" );
00254
00255 (void) new KAction( i18n( "&Queue" ), "queue", 0,
00256 this, SLOT(slotSendLater()),
00257 actionCollection(), "send_alternative" );
00258
00259 (void) new KAction( i18n( "Save in &Drafts Folder" ), "filesave", 0,
00260 this, SLOT(slotSaveDraft()),
00261 actionCollection(), "save_in_drafts" );
00262 (void) new KAction( i18n( "&Insert File..." ), "fileopen", 0,
00263 this, SLOT(slotInsertFile()),
00264 actionCollection(), "insert_file" );
00265 (void) new KAction( i18n( "&Address Book" ), "contents",0,
00266 this, SLOT(slotAddrBook()),
00267 actionCollection(), "addressbook" );
00268 (void) new KAction( i18n( "&New Composer" ), "mail_new",
00269 KStdAccel::shortcut( KStdAccel::New ),
00270 this, SLOT(slotNewComposer()),
00271 actionCollection(), "new_composer" );
00272
00273 (void) new KAction( i18n( "&Attach File..." ), "attach",
00274 0, this, SLOT(slotAttachFile()),
00275 actionCollection(), "attach_file" );
00276 }
00277
00278 void
00279 Core::slotClose()
00280 {
00281 close( false );
00282 }
00283
00284 void
00285 Core::slotSendNow()
00286 {
00287
00288 }
00289
00290 void
00291 Core::slotSendLater()
00292 {
00293
00294 }
00295
00296 void
00297 Core::slotSaveDraft()
00298 {
00299
00300 }
00301
00302 void
00303 Core::slotInsertFile()
00304 {
00305
00306 }
00307
00308 void
00309 Core::slotAddrBook()
00310 {
00311
00312 }
00313
00314 void
00315 Core::slotNewComposer()
00316 {
00317
00318 }
00319
00320 void
00321 Core::slotAttachFile()
00322 {
00323
00324 }
00325
00326 void
00327 Core::send( int how )
00328 {
00329
00330 }
00331
00332 void
00333 Core::addAttachment( const KURL &url, const QString &comment )
00334 {
00335
00336 }
00337
00338 void
00339 Core::setBody( const QString &body )
00340 {
00341 m_currentEditor->setText( body );
00342 }
00343
00344 void
00345 Core::addAttachment( const QString &name,
00346 const QCString &cte,
00347 const QByteArray &data,
00348 const QCString &type,
00349 const QCString &subType,
00350 const QCString ¶mAttr,
00351 const QString ¶mValue,
00352 const QCString &contDisp )
00353 {
00354
00355 }
00356
00357 #include "core.moc"