forked from OpenChemistry/avogadrolibs
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a quick "change elements" command (e.g., setting to dummy)
Signed-off-by: Geoff Hutchison <[email protected]>
- Loading branch information
Showing
4 changed files
with
165 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
include_directories(${CMAKE_CURRENT_BINARY_DIR}) | ||
|
||
avogadro_plugin(Alchemy | ||
"Change elements" | ||
ExtensionPlugin | ||
alchemy.h | ||
Alchemy | ||
"alchemy.cpp" | ||
"" | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
/****************************************************************************** | ||
This source file is part of the Avogadro project. | ||
This source code is released under the 3-Clause BSD License, (see "LICENSE"). | ||
******************************************************************************/ | ||
|
||
#include "alchemy.h" | ||
|
||
#include <avogadro/core/elements.h> | ||
#include <avogadro/qtgui/molecule.h> | ||
|
||
#include <QtCore/QSettings> | ||
#include <QtWidgets/QAction> | ||
#include <QtWidgets/QDialog> | ||
#include <QtWidgets/QInputDialog> | ||
|
||
#include <vector> | ||
|
||
namespace Avogadro::QtPlugins { | ||
|
||
using Core::Array; | ||
using Core::Elements; | ||
|
||
Alchemy::Alchemy(QObject* parent_) | ||
: Avogadro::QtGui::ExtensionPlugin(parent_), | ||
m_action(new QAction(tr("Change Elements…"), this)), m_molecule(nullptr) | ||
{ | ||
m_action->setProperty("menu priority", 750); | ||
|
||
connect(m_action, &QAction::triggered, this, &Alchemy::changeElements); | ||
} | ||
|
||
Alchemy::~Alchemy() {} | ||
|
||
QList<QAction*> Alchemy::actions() const | ||
{ | ||
QList<QAction*> result; | ||
return result << m_action; | ||
} | ||
|
||
QStringList Alchemy::menuPath(QAction*) const | ||
{ | ||
return QStringList() << tr("&Build"); | ||
} | ||
|
||
void Alchemy::setMolecule(QtGui::Molecule* mol) | ||
{ | ||
m_molecule = mol; | ||
} | ||
|
||
void Alchemy::changeElements() | ||
{ | ||
if (!m_molecule) | ||
return; | ||
|
||
// assemble the list of elements | ||
QStringList choices; | ||
for (unsigned char i = 0; i < Elements::elementCount(); ++i) { | ||
QString choice("%1: %2"); | ||
choice = choice.arg(i).arg(Elements::name(i)); | ||
choices << choice; | ||
} | ||
|
||
// get the element of the first selected atom | ||
unsigned char firstElement = 0; | ||
for (Index i = 0; i < m_molecule->atomCount(); ++i) { | ||
if (m_molecule->atomSelected(i)) { | ||
firstElement = m_molecule->atom(i).atomicNumber(); | ||
break; | ||
} | ||
} | ||
|
||
bool ok = false; | ||
QString currentChoice = QInputDialog::getItem( | ||
qobject_cast<QWidget*>(parent()), tr("Change Elements"), tr("Element:"), | ||
choices, static_cast<int>(firstElement), false, &ok); | ||
if (!ok) | ||
return; | ||
|
||
unsigned char newElement = currentChoice.section(':', 0, 0).toUShort(); | ||
// loop through the selected atoms and change their elements | ||
for (Index i = 0; i < m_molecule->atomCount(); ++i) { | ||
if (m_molecule->atomSelected(i)) | ||
m_molecule->atom(i).setAtomicNumber(newElement); | ||
} | ||
|
||
m_molecule->emitChanged(QtGui::Molecule::Atoms); | ||
} | ||
|
||
} // namespace Avogadro::QtPlugins |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
/****************************************************************************** | ||
This source file is part of the Avogadro project. | ||
This source code is released under the New BSD License, (the "License"). | ||
******************************************************************************/ | ||
|
||
#ifndef AVOGADRO_QTPLUGINS_BONDING_H | ||
#define AVOGADRO_QTPLUGINS_BONDING_H | ||
|
||
#include <avogadro/core/avogadrocore.h> | ||
#include <avogadro/qtgui/extensionplugin.h> | ||
|
||
#include <QtWidgets/QDialog> | ||
|
||
namespace Ui { | ||
class BondingDialog; | ||
} | ||
|
||
namespace Avogadro { | ||
namespace QtPlugins { | ||
|
||
/** | ||
* @brief The Bonding class performs bonding operations on demand. | ||
*/ | ||
class Alchemy : public QtGui::ExtensionPlugin | ||
{ | ||
Q_OBJECT | ||
public: | ||
explicit Alchemy(QObject* parent_ = nullptr); | ||
~Alchemy() override; | ||
|
||
QString name() const override { return tr("Alchemy"); } | ||
|
||
QString description() const override | ||
{ | ||
return tr("Change elements of atoms."); | ||
} | ||
|
||
QList<QAction*> actions() const override; | ||
|
||
QStringList menuPath(QAction* action) const override; | ||
|
||
public slots: | ||
void setMolecule(QtGui::Molecule* mol) override; | ||
|
||
private slots: | ||
void changeElements(); | ||
|
||
private: | ||
QtGui::Molecule* m_molecule; | ||
|
||
QAction* m_action; | ||
}; | ||
|
||
} // namespace QtPlugins | ||
} // namespace Avogadro | ||
|
||
#endif // AVOGADRO_QTPLUGINS_BONDING_H |
56d5456
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ERROR: clang-format-diff detected formatting issues. See the artifact for a patch or run clang-format on your branch.