File indexing completed on 2024-04-28 07:52:04
0001 /*************************************************************************** 0002 csession.cpp - basis of multi-world support 0003 ------------------- 0004 begin : Pi nov 15 2002 0005 copyright : (C) 2002 by Tomas Mecir 0006 email : kmuddy@kmuddy.com 0007 ***************************************************************************/ 0008 0009 /*************************************************************************** 0010 * * 0011 * This program is free software; you can redistribute it and/or modify * 0012 * it under the terms of the GNU General Public License as published by * 0013 * the Free Software Foundation; either version 2 of the License, or * 0014 * (at your option) any later version. * 0015 * * 0016 ***************************************************************************/ 0017 0018 #include "csession.h" 0019 0020 #include "cansiparser.h" 0021 #include "ccmdparser.h" 0022 #include "ccmdprocessor.h" 0023 #include "ccmdqueues.h" 0024 #include "cconnection.h" 0025 #include "cgaugebar.h" 0026 #include "cglobalsettings.h" 0027 #include "cinputline.h" 0028 #include "cmultiinputline.h" 0029 #include "coutput.h" 0030 #include "cprompt.h" 0031 #include "cscriptapi.h" 0032 #include "cscripteval.h" 0033 #include "cstatus.h" 0034 #include "ctelnet.h" 0035 #include "ctextprocessor.h" 0036 #include "ctranscript.h" 0037 0038 #ifdef HAVE_MXP 0039 #include "cmxpmanager.h" 0040 #endif //HAVE_MXP 0041 0042 // for variable change reporting 0043 #include "clistmanager.h" 0044 #include "cgaugelist.h" 0045 #include "cstatusvarlist.h" 0046 0047 #include <KLocalizedString> 0048 0049 #include <QHBoxLayout> 0050 #include <QPushButton> 0051 #include <QStatusBar> 0052 #include <QToolTip> 0053 #include <QVBoxLayout> 0054 0055 cSession::cSession (int sess, QWidget *parent) : QWidget (parent), cActionBase ("session", sess) 0056 { 0057 _flashing = false; 0058 defaultName = true; 0059 0060 //create objects 0061 _telnet = new cTelnet (sess); 0062 #ifdef HAVE_MXP 0063 _mxpmanager = new cMXPManager (sess); 0064 #endif 0065 _ansiparser = new cANSIParser (sess); 0066 _parser = new cCmdParser (sess); 0067 _cmdproc = new cCmdProcessor (sess); 0068 _cmdqueues = new cCmdQueues (sess); 0069 _textproc = new cTextProcessor (sess); 0070 _connection = new cConnection (sess); 0071 0072 _output = new cOutput (sess, this); 0073 0074 QWidget *promptinput = new QWidget (this); 0075 _prompt = new cPrompt (sess, promptinput); 0076 0077 _inputline = new cInputLine (sess, "inputline", promptinput); 0078 _inputline->initialize (); 0079 0080 _multiinputline = new cMultiInputLine (sess, promptinput); 0081 _multiinputline->hide (); 0082 _multiinputline->setToolTip (i18n ("Ctrl+Enter adds new line, unless changed in settings")); 0083 0084 QPushButton *switchlinebutton = new QPushButton (promptinput); 0085 switchlinebutton->setIcon (QIcon::fromTheme ("format-justify-center")); 0086 switchlinebutton->setToolTip (i18n ("Switches between standard and multi-line input line.")); 0087 0088 //the button should take as few space as possible 0089 switchlinebutton->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Minimum); 0090 switchlinebutton->setFocusPolicy (Qt::NoFocus); 0091 0092 _auxinputline = new cInputLine (sess, "auxinputline", this); 0093 _auxinputline->initialize (); 0094 _auxinputline->hide (); 0095 0096 _gaugebar = new cGaugeBar (sess, this); 0097 _gaugebar->hide(); 0098 0099 QStatusBar *statusbar = new QStatusBar (this); 0100 _status = new cStatus (sess, statusbar); 0101 0102 QHBoxLayout *playout = new QHBoxLayout (promptinput); 0103 playout->setSpacing (1); 0104 playout->setMargin (1); 0105 playout->addWidget (_prompt); 0106 playout->addWidget (_inputline); 0107 playout->addWidget (_multiinputline); 0108 playout->addWidget (switchlinebutton); 0109 0110 QVBoxLayout *layout = new QVBoxLayout (this); 0111 layout->setSpacing (1); 0112 layout->setMargin (1); 0113 layout->addWidget (_output); 0114 layout->addWidget (promptinput); 0115 layout->addWidget (_auxinputline); 0116 layout->addWidget (_gaugebar); 0117 layout->addWidget (statusbar); 0118 0119 _transcript = new cTranscript (sess); 0120 _scripteval = new cScriptEval (sess); 0121 _scriptapi = new cScriptAPI (sess); 0122 _scripteval->addObject ("kmuddy", _scriptapi); 0123 0124 //the button switches between standard input and multi-line input 0125 connect (switchlinebutton, &QPushButton::clicked, this, &cSession::switchInputLines); 0126 0127 addGlobalEventHandler ("global-settings-changed", 50, PT_NOTHING); 0128 0129 addEventHandler ("var-changed", 50, PT_STRING); 0130 } 0131 0132 cSession::~cSession () 0133 { 0134 removeGlobalEventHandler ("global-settings-changed"); 0135 0136 removeEventHandler ("var-changed"); 0137 0138 delete _scripteval; 0139 //transcript must be deleted before the console! 0140 delete _transcript; 0141 0142 delete _status; //this also destroys the statusbar 0143 delete _multiinputline; 0144 delete _auxinputline; 0145 delete _inputline; 0146 delete _output; 0147 delete _prompt; 0148 0149 delete _connection; 0150 delete _textproc; 0151 delete _cmdqueues; 0152 delete _cmdproc; 0153 delete _parser; 0154 delete _ansiparser; 0155 #ifdef HAVE_MXP 0156 delete _mxpmanager; 0157 #endif 0158 delete _telnet; 0159 } 0160 0161 QString cSession::actionNothingHandler (QString action, int) 0162 { 0163 if (action == "name") 0164 return name(); 0165 0166 return QString(); 0167 } 0168 0169 void cSession::eventNothingHandler (QString event, int) 0170 { 0171 if (event == "global-settings-changed") { 0172 cGlobalSettings *gs = cGlobalSettings::self(); 0173 setAuxInput (gs->getBool ("aux-input")); 0174 } 0175 } 0176 0177 void cSession::eventStringHandler (QString event, int /*session*/, 0178 QString &par1, const QString &) 0179 { 0180 // pass variable changes to lists that need them 0181 // this is a bit of a hack, necessary because lists cannot react on events 0182 // ultimately the affected lists (gauges, statusvars) should move 0183 // to plugins, and the plugin should handle these events 0184 0185 if (event == "var-changed") { 0186 cListManager *lm = cListManager::self(); 0187 cGaugeList *gl = (cGaugeList *) lm->getList (sess(), "gauges"); 0188 cStatusVarList *svl = (cStatusVarList *) lm->getList (sess(), "statusvars"); 0189 0190 if (gl) gl->variableChanged (par1); 0191 if (svl) svl->variableChanged (par1); 0192 } 0193 } 0194 0195 void cSession::setName (const QString &name, bool defName) 0196 { 0197 //don't overwrite non-default name with a default one 0198 if (defName && (!defaultName)) 0199 return; 0200 0201 _name = name; 0202 defaultName = defName; 0203 } 0204 0205 void cSession::setAuxInput (bool val) 0206 { 0207 val ? _auxinputline->show () : _auxinputline->hide (); 0208 } 0209 0210 void cSession::switchInputLines () 0211 { 0212 if (_inputline->isVisible()) 0213 { 0214 _inputline->hide(); 0215 _multiinputline->show(); 0216 _multiinputline->setFocus (); 0217 } 0218 else 0219 { 0220 _multiinputline->hide(); 0221 _inputline->show(); 0222 _inputline->setFocus (); 0223 } 0224 } 0225 0226 #include "moc_csession.cpp"