CSVWorld::ScriptEdit::ScriptEdit (const CSMDoc::Document& document, ScriptHighlighter::Mode mode, QWidget* parent) : QPlainTextEdit (parent), mDocument (document), mWhiteListQoutes("^[a-z|_]{1}[a-z|0-9|_]{0,}$", Qt::CaseInsensitive), mChangeLocked (0) { // setAcceptRichText (false); setLineWrapMode (QPlainTextEdit::NoWrap); setTabStopWidth (4); setUndoRedoEnabled (false); // we use OpenCS-wide undo/redo instead mAllowedTypes <<CSMWorld::UniversalId::Type_Journal <<CSMWorld::UniversalId::Type_Global <<CSMWorld::UniversalId::Type_Topic <<CSMWorld::UniversalId::Type_Sound <<CSMWorld::UniversalId::Type_Spell <<CSMWorld::UniversalId::Type_Cell <<CSMWorld::UniversalId::Type_Referenceable <<CSMWorld::UniversalId::Type_Activator <<CSMWorld::UniversalId::Type_Potion <<CSMWorld::UniversalId::Type_Apparatus <<CSMWorld::UniversalId::Type_Armor <<CSMWorld::UniversalId::Type_Book <<CSMWorld::UniversalId::Type_Clothing <<CSMWorld::UniversalId::Type_Container <<CSMWorld::UniversalId::Type_Creature <<CSMWorld::UniversalId::Type_Door <<CSMWorld::UniversalId::Type_Ingredient <<CSMWorld::UniversalId::Type_CreatureLevelledList <<CSMWorld::UniversalId::Type_ItemLevelledList <<CSMWorld::UniversalId::Type_Light <<CSMWorld::UniversalId::Type_Lockpick <<CSMWorld::UniversalId::Type_Miscellaneous <<CSMWorld::UniversalId::Type_Npc <<CSMWorld::UniversalId::Type_Probe <<CSMWorld::UniversalId::Type_Repair <<CSMWorld::UniversalId::Type_Static <<CSMWorld::UniversalId::Type_Weapon <<CSMWorld::UniversalId::Type_Script <<CSMWorld::UniversalId::Type_Region; mHighlighter = new ScriptHighlighter (document.getData(), mode, ScriptEdit::document()); connect (&document.getData(), SIGNAL (idListChanged()), this, SLOT (idListChanged())); connect (&mUpdateTimer, SIGNAL (timeout()), this, SLOT (updateHighlighting())); mUpdateTimer.setSingleShot (true); }
CSVWorld::ScriptSubView::ScriptSubView (const CSMWorld::UniversalId& id, CSMDoc::Document& document) : SubView (id), mDocument (document), mColumn (-1), mChangeLocked (0) { setWidget (mEditor = new ScriptEdit (this, mDocument)); mEditor->setAcceptRichText (false); mEditor->setLineWrapMode (QTextEdit::NoWrap); mEditor->setTabStopWidth (4); mEditor->setUndoRedoEnabled (false); // we use OpenCS-wide undo/redo instead mModel = &dynamic_cast<CSMWorld::IdTable&> ( *document.getData().getTableModel (CSMWorld::UniversalId::Type_Scripts)); for (int i=0; i<mModel->columnCount(); ++i) if (mModel->headerData (i, Qt::Horizontal, CSMWorld::ColumnBase::Role_Display)== CSMWorld::ColumnBase::Display_Script) { mColumn = i; break; } if (mColumn==-1) throw std::logic_error ("Can't find script column"); mEditor->setPlainText (mModel->data (mModel->getModelIndex (id.getId(), mColumn)).toString()); connect (mEditor, SIGNAL (textChanged()), this, SLOT (textChanged())); connect (mModel, SIGNAL (dataChanged (const QModelIndex&, const QModelIndex&)), this, SLOT (dataChanged (const QModelIndex&, const QModelIndex&))); connect (mModel, SIGNAL (rowsAboutToBeRemoved (const QModelIndex&, int, int)), this, SLOT (rowsAboutToBeRemoved (const QModelIndex&, int, int))); connect (&document.getData(), SIGNAL (idListChanged()), this, SLOT (idListChanged())); mHighlighter = new ScriptHighlighter (document.getData(), mEditor->document()); connect (&mUpdateTimer, SIGNAL (timeout()), this, SLOT (updateHighlighting())); mUpdateTimer.setSingleShot (true); }
CSVWorld::GenericCreator::GenericCreator (CSMWorld::Data& data, QUndoStack& undoStack, const CSMWorld::UniversalId& id, bool relaxedIdRules) : mData (data), mUndoStack (undoStack), mListId (id), mLocked (false), mClonedType (CSMWorld::UniversalId::Type_None), mScopes (CSMWorld::Scope_Content), mScope (0), mScopeLabel (0), mCloneMode (false) { // If the collection ID has a parent type, use it instead. // It will change IDs with Record/SubRecord class (used for creators in Dialogue subviews) // to IDs with general RecordList class (used for creators in Table subviews). CSMWorld::UniversalId::Type listParentType = CSMWorld::UniversalId::getParentType(mListId.getType()); if (listParentType != CSMWorld::UniversalId::Type_None) { mListId = listParentType; } mLayout = new QHBoxLayout; mLayout->setContentsMargins (0, 0, 0, 0); mId = new QLineEdit; mId->setValidator (mValidator = new IdValidator (relaxedIdRules, this)); mLayout->addWidget (mId, 1); mCreate = new QPushButton ("Create"); mLayout->addWidget (mCreate); mCancel = new QPushButton("Cancel"); mLayout->addWidget(mCancel); setLayout (mLayout); connect (mCancel, SIGNAL (clicked (bool)), this, SIGNAL (done())); connect (mCreate, SIGNAL (clicked (bool)), this, SLOT (create())); connect (mId, SIGNAL (textChanged (const QString&)), this, SLOT (textChanged (const QString&))); connect (mId, SIGNAL (returnPressed()), this, SLOT (inputReturnPressed())); connect (&mData, SIGNAL (idListChanged()), this, SLOT (dataIdListChanged())); }
CSVWorld::ScriptEdit::ScriptEdit (const CSMDoc::Document& document, ScriptHighlighter::Mode mode, QWidget* parent) : QPlainTextEdit (parent), mDocument (document), mWhiteListQoutes("^[a-z|_]{1}[a-z|0-9|_]{0,}$", Qt::CaseInsensitive), mChangeLocked (0), mLineNumberArea(0), mShowLineNum(false), mDefaultFont(font()), mMonoFont(QFont("Monospace")) { // setAcceptRichText (false); setLineWrapMode (QPlainTextEdit::NoWrap); setTabStopWidth (4); setUndoRedoEnabled (false); // we use OpenCS-wide undo/redo instead mAllowedTypes <<CSMWorld::UniversalId::Type_Journal <<CSMWorld::UniversalId::Type_Global <<CSMWorld::UniversalId::Type_Topic <<CSMWorld::UniversalId::Type_Sound <<CSMWorld::UniversalId::Type_Spell <<CSMWorld::UniversalId::Type_Cell <<CSMWorld::UniversalId::Type_Referenceable <<CSMWorld::UniversalId::Type_Activator <<CSMWorld::UniversalId::Type_Potion <<CSMWorld::UniversalId::Type_Apparatus <<CSMWorld::UniversalId::Type_Armor <<CSMWorld::UniversalId::Type_Book <<CSMWorld::UniversalId::Type_Clothing <<CSMWorld::UniversalId::Type_Container <<CSMWorld::UniversalId::Type_Creature <<CSMWorld::UniversalId::Type_Door <<CSMWorld::UniversalId::Type_Ingredient <<CSMWorld::UniversalId::Type_CreatureLevelledList <<CSMWorld::UniversalId::Type_ItemLevelledList <<CSMWorld::UniversalId::Type_Light <<CSMWorld::UniversalId::Type_Lockpick <<CSMWorld::UniversalId::Type_Miscellaneous <<CSMWorld::UniversalId::Type_Npc <<CSMWorld::UniversalId::Type_Probe <<CSMWorld::UniversalId::Type_Repair <<CSMWorld::UniversalId::Type_Static <<CSMWorld::UniversalId::Type_Weapon <<CSMWorld::UniversalId::Type_Script <<CSMWorld::UniversalId::Type_Region; mHighlighter = new ScriptHighlighter (document.getData(), mode, ScriptEdit::document()); connect (&document.getData(), SIGNAL (idListChanged()), this, SLOT (idListChanged())); connect (&mUpdateTimer, SIGNAL (timeout()), this, SLOT (updateHighlighting())); mUpdateTimer.setSingleShot (true); // TODO: provide a font selector dialogue mMonoFont.setStyleHint(QFont::TypeWriter); std::string useMonoFont = CSMSettings::UserSettings::instance().setting("script-editor/mono-font", "true").toStdString(); if (useMonoFont == "true") setFont(mMonoFont); mLineNumberArea = new LineNumberArea(this); updateLineNumberAreaWidth(0); connect(this, SIGNAL(blockCountChanged(int)), this, SLOT(updateLineNumberAreaWidth(int))); connect(this, SIGNAL(updateRequest(QRect,int)), this, SLOT(updateLineNumberArea(QRect,int))); std::string showStatusBar = CSMSettings::UserSettings::instance().settingValue("script-editor/show-linenum").toStdString(); showLineNum(showStatusBar == "true"); }
void CSMWorld::Data::rowsChanged (const QModelIndex& parent, int start, int end) { emit idListChanged(); }
void CSMWorld::Data::dataChanged (const QModelIndex& topLeft, const QModelIndex& bottomRight) { if (topLeft.column()<=0) emit idListChanged(); }