void DlgCustomToolbarsImp::removeCustomCommand(const QString& name, const QByteArray& userdata) { QVariant data = workbenchBox->itemData(workbenchBox->currentIndex(), Qt::UserRole); Workbench* w = WorkbenchManager::instance()->active(); if (w && w->name() == std::string((const char*)data.toByteArray())) { QList<QToolBar*> bars = getMainWindow()->findChildren<QToolBar*>(name); if (bars.size() != 1) return; QByteArray cmd = userdata; int numSep = 0, indexSep = 0; if (cmd.startsWith("Separator")) { numSep = cmd.mid(9).toInt(); cmd = "Separator"; } QList<QAction*> actions = bars.front()->actions(); for (QList<QAction*>::ConstIterator it = actions.begin(); it != actions.end(); ++it) { if ((*it)->data().toByteArray() == cmd) { // if we move a separator then make sure to pick up the right one if (numSep > 0) { if (++indexSep < numSep) continue; } bars.front()->removeAction(*it); break; } } } }
void StdCmdWorkbench::activated(int i) { try { Workbench* w = WorkbenchManager::instance()->active(); QList<QAction*> items = static_cast<WorkbenchGroup*>(_pcAction)->actions(); std::string switch_to = (const char*)items[i]->objectName().toAscii(); if (w) { std::string current_w = w->name(); if (switch_to == current_w) return; } doCommand(Gui, "Gui.activateWorkbench(\"%s\")", switch_to.c_str()); } catch(const Base::PyException& e) { QString msg(QLatin1String(e.what())); // ignore '<type 'exceptions.*Error'>' prefixes QRegExp rx; rx.setPattern(QLatin1String("^\\s*<type 'exceptions.\\w*'>:\\s*")); int pos = rx.indexIn(msg); if (pos != -1) msg = msg.mid(rx.matchedLength()); QMessageBox::critical(getMainWindow(), QObject::tr("Cannot load workbench"), msg); } catch(...) { QMessageBox::critical(getMainWindow(), QObject::tr("Cannot load workbench"), QObject::tr("A general error occurred while loading the workbench")); } }
void DlgCustomToolbarsImp::addCustomCommand(const QString& name, const QByteArray& cmd) { QVariant data = workbenchBox->itemData(workbenchBox->currentIndex(), Qt::UserRole); Workbench* w = WorkbenchManager::instance()->active(); if (w && w->name() == std::string((const char*)data.toByteArray())) { QList<QToolBar*> bars = getMainWindow()->findChildren<QToolBar*>(name); if (bars.size() != 1) return; if (cmd == "Separator") { QAction* action = bars.front()->addSeparator(); action->setData(QByteArray("Separator")); } else { CommandManager& mgr = Application::Instance->commandManager(); if (mgr.addTo(cmd, bars.front())) { QAction* action = bars.front()->actions().last(); // See ToolBarManager::setup(ToolBarItem* , QToolBar* ) // We have to add the user data in order to identify the command in // removeCustomCommand(), moveUpCustomCommand() or moveDownCustomCommand() if (action && action->data().isNull()) action->setData(cmd); } } } }
void DlgCustomToolbarsImp::addCustomToolbar(const QString& name) { QVariant data = workbenchBox->itemData(workbenchBox->currentIndex(), Qt::UserRole); Workbench* w = WorkbenchManager::instance()->active(); if (w && w->name() == std::string((const char*)data.toByteArray())) { QToolBar* bar = getMainWindow()->addToolBar(name); bar->setObjectName(name); } }
void DlgCustomToolbarsImp::renameCustomToolbar(const QString& old_name, const QString& new_name) { QVariant data = workbenchBox->itemData(workbenchBox->currentIndex(), Qt::UserRole); Workbench* w = WorkbenchManager::instance()->active(); if (w && w->name() == std::string((const char*)data.toByteArray())) { QList<QToolBar*> bars = getMainWindow()->findChildren<QToolBar*>(old_name); if (bars.size() != 1) return; QToolBar* tb = bars.front(); tb->setObjectName(new_name); tb->setWindowTitle(new_name); } }
void DlgCustomToolbarsImp::removeCustomToolbar(const QString& name) { QVariant data = workbenchBox->itemData(workbenchBox->currentIndex(), Qt::UserRole); Workbench* w = WorkbenchManager::instance()->active(); if (w && w->name() == std::string((const char*)data.toByteArray())) { QList<QToolBar*> bars = getMainWindow()->findChildren<QToolBar*>(name); if (bars.size() != 1) return; QToolBar* tb = bars.front(); getMainWindow()->removeToolBar(tb); delete tb; } }
PyObject* Application::sActiveWorkbenchHandler(PyObject * /*self*/, PyObject *args,PyObject * /*kwd*/) { if (!PyArg_ParseTuple(args, "")) // convert args: Python->C return NULL; // NULL triggers exception Workbench* actWb = WorkbenchManager::instance()->active(); if (!actWb) { PyErr_SetString(PyExc_AssertionError, "No active workbench\n"); return NULL; } // get the python workbench object from the dictionary std::string key = actWb->name(); PyObject* pcWorkbench = PyDict_GetItemString(Instance->_pcWorkbenchDictionary, key.c_str()); if (!pcWorkbench) { PyErr_Format(PyExc_KeyError, "No such workbench '%s'", key.c_str()); return NULL; } // object get incremented Py_INCREF(pcWorkbench); return pcWorkbench; }
/** * Constructs a DlgCustomToolbars which is a child of 'parent', with the * name 'name' and widget flags set to 'f' * * The dialog will by default be modeless, unless you set 'modal' to * true to construct a modal dialog. */ DlgCustomToolbars::DlgCustomToolbars(DlgCustomToolbars::Type t, QWidget* parent) : CustomizeActionPage(parent), type(t) { this->setupUi(this); moveActionRightButton->setIcon(BitmapFactory().pixmap(":/icons/button_right.svg")); moveActionLeftButton->setIcon(BitmapFactory().pixmap(":/icons/button_left.svg")); moveActionDownButton->setIcon(BitmapFactory().pixmap(":/icons/button_down.svg")); moveActionUpButton->setIcon(BitmapFactory().pixmap(":/icons/button_up.svg")); CommandManager & cCmdMgr = Application::Instance->commandManager(); std::map<std::string,Command*> sCommands = cCmdMgr.getCommands(); GroupMap groupMap; groupMap.push_back(std::make_pair(QLatin1String("File"), QString())); groupMap.push_back(std::make_pair(QLatin1String("Edit"), QString())); groupMap.push_back(std::make_pair(QLatin1String("View"), QString())); groupMap.push_back(std::make_pair(QLatin1String("Standard-View"), QString())); groupMap.push_back(std::make_pair(QLatin1String("Tools"), QString())); groupMap.push_back(std::make_pair(QLatin1String("Window"), QString())); groupMap.push_back(std::make_pair(QLatin1String("Help"), QString())); groupMap.push_back(std::make_pair(QLatin1String("Macros"), qApp->translate("Gui::MacroCommand", "Macros"))); for (std::map<std::string,Command*>::iterator it = sCommands.begin(); it != sCommands.end(); ++it) { QLatin1String group(it->second->getGroupName()); QString text = qApp->translate(it->second->className(), it->second->getGroupName()); GroupMap::iterator jt; jt = std::find_if(groupMap.begin(), groupMap.end(), GroupMap_find(group)); if (jt != groupMap.end()) { if (jt->second.isEmpty()) jt->second = text; } else { groupMap.push_back(std::make_pair(group, text)); } } int index = 0; for (GroupMap::iterator it = groupMap.begin(); it != groupMap.end(); ++it, ++index) { categoryBox->addItem(it->second); categoryBox->setItemData(index, QVariant(it->first), Qt::UserRole); } // fills the combo box with all available workbenches QStringList workbenches = Application::Instance->workbenches(); workbenches.sort(); index = 1; workbenchBox->addItem(QApplication::windowIcon(), tr("Global")); workbenchBox->setItemData(0, QVariant(QString::fromLatin1("Global")), Qt::UserRole); for (QStringList::Iterator it = workbenches.begin(); it != workbenches.end(); ++it) { QPixmap px = Application::Instance->workbenchIcon(*it); QString mt = Application::Instance->workbenchMenuText(*it); if (mt != QLatin1String("<none>")) { if (px.isNull()) workbenchBox->addItem(mt); else workbenchBox->addItem(px, mt); workbenchBox->setItemData(index, QVariant(*it), Qt::UserRole); index++; } } QStringList labels; labels << tr("Icon") << tr("Command"); commandTreeWidget->setHeaderLabels(labels); commandTreeWidget->header()->hide(); commandTreeWidget->setIconSize(QSize(32, 32)); commandTreeWidget->header()->setResizeMode(0, QHeaderView::ResizeToContents); labels.clear(); labels << tr("Command"); toolbarTreeWidget->setHeaderLabels(labels); toolbarTreeWidget->header()->hide(); on_categoryBox_activated(categoryBox->currentIndex()); Workbench* w = WorkbenchManager::instance()->active(); if (w) { QString name = QString::fromLatin1(w->name().c_str()); int index = workbenchBox->findData(name); workbenchBox->setCurrentIndex(index); } on_workbenchBox_activated(workbenchBox->currentIndex()); }