This will essentially not update the tooltip when an action is checked as it isn't suitable As example, view DrawStyle command where the group tooltip is better than the selected action tooltip Only UserEditMode is implemented in this commit, should be pushed to DrawStyle and maybe other after merge
948 lines
33 KiB
C++
948 lines
33 KiB
C++
/***************************************************************************
|
|
* Copyright (c) 2002 Jürgen Riegel <juergen.riegel@web.de> *
|
|
* *
|
|
* This file is part of the FreeCAD CAx development system. *
|
|
* *
|
|
* This library is free software; you can redistribute it and/or *
|
|
* modify it under the terms of the GNU Library General Public *
|
|
* License as published by the Free Software Foundation; either *
|
|
* version 2 of the License, or (at your option) any later version. *
|
|
* *
|
|
* This library is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU Library General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU Library General Public *
|
|
* License along with this library; see the file COPYING.LIB. If not, *
|
|
* write to the Free Software Foundation, Inc., 59 Temple Place, *
|
|
* Suite 330, Boston, MA 02111-1307, USA *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
|
|
#include "PreCompiled.h"
|
|
#ifndef _PreComp_
|
|
# include <QApplication>
|
|
# include <QMessageBox>
|
|
# include <QSharedPointer>
|
|
# include <QWhatsThis>
|
|
# include <QDesktopServices>
|
|
# include <QUrl>
|
|
# include <boost_bind_bind.hpp>
|
|
#endif
|
|
|
|
#include <boost/scoped_ptr.hpp>
|
|
|
|
#include <Base/Exception.h>
|
|
#include <Base/FileInfo.h>
|
|
#include <Base/Interpreter.h>
|
|
#include <Base/Sequencer.h>
|
|
#include <App/Document.h>
|
|
#include "Action.h"
|
|
#include "Application.h"
|
|
#include "Document.h"
|
|
#include "Splashscreen.h"
|
|
#include "Command.h"
|
|
#include "MainWindow.h"
|
|
#include "WhatsThis.h"
|
|
#include "DlgUndoRedo.h"
|
|
#include "BitmapFactory.h"
|
|
#include "View.h"
|
|
|
|
#include "DlgParameterImp.h"
|
|
#include "DlgPreferencesImp.h"
|
|
#include "DlgCustomizeImp.h"
|
|
#include "Widgets.h"
|
|
#include "OnlineDocumentation.h"
|
|
#include "GuiConsole.h"
|
|
#include "WorkbenchManager.h"
|
|
#include "Workbench.h"
|
|
#include "Selection.h"
|
|
#include "DlgUnitsCalculatorImp.h"
|
|
|
|
using Base::Console;
|
|
using Base::Sequencer;
|
|
using namespace Gui;
|
|
namespace bp = boost::placeholders;
|
|
|
|
|
|
//===========================================================================
|
|
// Std_Workbench
|
|
//===========================================================================
|
|
|
|
DEF_STD_CMD_AC(StdCmdWorkbench)
|
|
|
|
StdCmdWorkbench::StdCmdWorkbench()
|
|
: Command("Std_Workbench")
|
|
{
|
|
sGroup = QT_TR_NOOP("View");
|
|
sMenuText = QT_TR_NOOP("Workbench");
|
|
sToolTipText = QT_TR_NOOP("Switch between workbenches");
|
|
sWhatsThis = "Std_Workbench";
|
|
sStatusTip = QT_TR_NOOP("Switch between workbenches");
|
|
sPixmap = "freecad";
|
|
eType = 0;
|
|
}
|
|
|
|
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().toLatin1();
|
|
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"));
|
|
}
|
|
}
|
|
|
|
bool StdCmdWorkbench::isActive(void)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
Action * StdCmdWorkbench::createAction(void)
|
|
{
|
|
Action *pcAction;
|
|
|
|
pcAction = new WorkbenchGroup(this,getMainWindow());
|
|
pcAction->setShortcut(QString::fromLatin1(getAccel()));
|
|
applyCommandData(this->className(), pcAction);
|
|
if (getPixmap())
|
|
pcAction->setIcon(Gui::BitmapFactory().iconFromTheme(getPixmap()));
|
|
|
|
return pcAction;
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_RecentFiles
|
|
//===========================================================================
|
|
|
|
DEF_STD_CMD_C(StdCmdRecentFiles)
|
|
|
|
StdCmdRecentFiles::StdCmdRecentFiles()
|
|
:Command("Std_RecentFiles")
|
|
{
|
|
sGroup = QT_TR_NOOP("File");
|
|
sMenuText = QT_TR_NOOP("Recent files");
|
|
sToolTipText = QT_TR_NOOP("Recent file list");
|
|
sWhatsThis = "Std_RecentFiles";
|
|
sStatusTip = QT_TR_NOOP("Recent file list");
|
|
sPixmap = "Std_RecentFiles";
|
|
eType = NoTransaction;
|
|
}
|
|
|
|
/**
|
|
* Opens the recent file at position \a iMsg in the menu.
|
|
* If the file does not exist or cannot be loaded this item is removed
|
|
* from the list.
|
|
*/
|
|
void StdCmdRecentFiles::activated(int iMsg)
|
|
{
|
|
RecentFilesAction* act = qobject_cast<RecentFilesAction*>(_pcAction);
|
|
if (act) act->activateFile( iMsg );
|
|
}
|
|
|
|
/**
|
|
* Creates the QAction object containing the recent files.
|
|
*/
|
|
Action * StdCmdRecentFiles::createAction(void)
|
|
{
|
|
RecentFilesAction* pcAction = new RecentFilesAction(this, getMainWindow());
|
|
pcAction->setObjectName(QLatin1String("recentFiles"));
|
|
pcAction->setDropDownMenu(true);
|
|
applyCommandData(this->className(), pcAction);
|
|
return pcAction;
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_RecentMacros
|
|
//===========================================================================
|
|
|
|
DEF_STD_CMD_C(StdCmdRecentMacros)
|
|
|
|
StdCmdRecentMacros::StdCmdRecentMacros()
|
|
:Command("Std_RecentMacros")
|
|
{
|
|
sGroup = QT_TR_NOOP("Macro");
|
|
sMenuText = QT_TR_NOOP("Recent macros");
|
|
sToolTipText = QT_TR_NOOP("Recent macro list");
|
|
sWhatsThis = "Std_RecentMacros";
|
|
sStatusTip = QT_TR_NOOP("Recent macro list");
|
|
eType = NoTransaction;
|
|
}
|
|
|
|
/**
|
|
* Opens the recent macro at position \a iMsg in the menu.
|
|
* If the macro does not exist or cannot be loaded this item is removed
|
|
* from the list.
|
|
*/
|
|
void StdCmdRecentMacros::activated(int iMsg)
|
|
{
|
|
RecentMacrosAction* act = qobject_cast<RecentMacrosAction*>(_pcAction);
|
|
if (act) act->activateFile( iMsg );
|
|
}
|
|
|
|
/**
|
|
* Creates the QAction object containing the recent macros.
|
|
*/
|
|
Action * StdCmdRecentMacros::createAction(void)
|
|
{
|
|
RecentMacrosAction* pcAction = new RecentMacrosAction(this, getMainWindow());
|
|
pcAction->setObjectName(QLatin1String("recentMacros"));
|
|
pcAction->setDropDownMenu(true);
|
|
applyCommandData(this->className(), pcAction);
|
|
return pcAction;
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_About
|
|
//===========================================================================
|
|
|
|
DEF_STD_CMD_ACL(StdCmdAbout)
|
|
|
|
StdCmdAbout::StdCmdAbout()
|
|
:Command("Std_About")
|
|
{
|
|
sGroup = QT_TR_NOOP("Help");
|
|
sMenuText = QT_TR_NOOP("&About %1");
|
|
sToolTipText = QT_TR_NOOP("About %1");
|
|
sWhatsThis = "Std_About";
|
|
sStatusTip = QT_TR_NOOP("About %1");
|
|
eType = 0;
|
|
}
|
|
|
|
Action * StdCmdAbout::createAction(void)
|
|
{
|
|
Action *pcAction;
|
|
|
|
QString exe = qApp->applicationName();
|
|
pcAction = new Action(this,getMainWindow());
|
|
pcAction->setText(QCoreApplication::translate(
|
|
this->className(), getMenuText()).arg(exe));
|
|
pcAction->setToolTip(QCoreApplication::translate(
|
|
this->className(), getToolTipText()).arg(exe));
|
|
pcAction->setStatusTip(QCoreApplication::translate(
|
|
this->className(), getStatusTip()).arg(exe));
|
|
pcAction->setWhatsThis(QLatin1String(getWhatsThis()));
|
|
pcAction->setIcon(QApplication::windowIcon());
|
|
pcAction->setShortcut(QString::fromLatin1(getAccel()));
|
|
// Needs to have AboutRole set to avoid duplicates if adding the about action more than once on macOS
|
|
pcAction->setMenuRole(QAction::AboutRole);
|
|
return pcAction;
|
|
}
|
|
|
|
bool StdCmdAbout::isActive()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Shows information about the application.
|
|
*/
|
|
void StdCmdAbout::activated(int iMsg)
|
|
{
|
|
Q_UNUSED(iMsg);
|
|
const Gui::Dialog::AboutDialogFactory* f = Gui::Dialog::AboutDialogFactory::defaultFactory();
|
|
boost::scoped_ptr<QDialog> dlg(f->create(getMainWindow()));
|
|
dlg->exec();
|
|
}
|
|
|
|
void StdCmdAbout::languageChange()
|
|
{
|
|
if (_pcAction) {
|
|
QString exe = qApp->applicationName();
|
|
_pcAction->setText(QCoreApplication::translate(
|
|
this->className(), getMenuText()).arg(exe));
|
|
_pcAction->setToolTip(QCoreApplication::translate(
|
|
this->className(), getToolTipText()).arg(exe));
|
|
_pcAction->setStatusTip(QCoreApplication::translate(
|
|
this->className(), getStatusTip()).arg(exe));
|
|
_pcAction->setWhatsThis(QLatin1String(getWhatsThis()));
|
|
}
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_AboutQt
|
|
//===========================================================================
|
|
DEF_STD_CMD(StdCmdAboutQt)
|
|
|
|
StdCmdAboutQt::StdCmdAboutQt()
|
|
:Command("Std_AboutQt")
|
|
{
|
|
sGroup = QT_TR_NOOP("Help");
|
|
sMenuText = QT_TR_NOOP("About &Qt");
|
|
sToolTipText = QT_TR_NOOP("About Qt");
|
|
sWhatsThis = "Std_AboutQt";
|
|
sStatusTip = QT_TR_NOOP("About Qt");
|
|
eType = 0;
|
|
}
|
|
|
|
void StdCmdAboutQt::activated(int iMsg)
|
|
{
|
|
Q_UNUSED(iMsg);
|
|
qApp->aboutQt();
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_WhatsThis
|
|
//===========================================================================
|
|
DEF_STD_CMD(StdCmdWhatsThis)
|
|
|
|
StdCmdWhatsThis::StdCmdWhatsThis()
|
|
:Command("Std_WhatsThis")
|
|
{
|
|
sGroup = QT_TR_NOOP("Help");
|
|
sMenuText = QT_TR_NOOP("&What's This?");
|
|
sToolTipText = QT_TR_NOOP("What's This");
|
|
sWhatsThis = "Std_WhatsThis";
|
|
sStatusTip = QT_TR_NOOP("What's This");
|
|
sAccel = keySequenceToAccel(QKeySequence::WhatsThis);
|
|
sPixmap = "WhatsThis";
|
|
eType = 0;
|
|
}
|
|
|
|
void StdCmdWhatsThis::activated(int iMsg)
|
|
{
|
|
Q_UNUSED(iMsg);
|
|
QWhatsThis::enterWhatsThisMode();
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_DlgParameter
|
|
//===========================================================================
|
|
DEF_STD_CMD(StdCmdDlgParameter)
|
|
|
|
StdCmdDlgParameter::StdCmdDlgParameter()
|
|
:Command("Std_DlgParameter")
|
|
{
|
|
sGroup = QT_TR_NOOP("Tools");
|
|
sMenuText = QT_TR_NOOP("E&dit parameters ...");
|
|
sToolTipText = QT_TR_NOOP("Opens a Dialog to edit the parameters");
|
|
sWhatsThis = "Std_DlgParameter";
|
|
sStatusTip = QT_TR_NOOP("Opens a Dialog to edit the parameters");
|
|
sPixmap = "Std_DlgParameter";
|
|
eType = 0;
|
|
}
|
|
|
|
void StdCmdDlgParameter::activated(int iMsg)
|
|
{
|
|
Q_UNUSED(iMsg);
|
|
Gui::Dialog::DlgParameterImp cDlg(getMainWindow());
|
|
cDlg.resize(QSize(800, 600));
|
|
cDlg.exec();
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_DlgPreferences
|
|
//===========================================================================
|
|
DEF_STD_CMD_C(StdCmdDlgPreferences)
|
|
|
|
StdCmdDlgPreferences::StdCmdDlgPreferences()
|
|
:Command("Std_DlgPreferences")
|
|
{
|
|
sGroup = QT_TR_NOOP("Tools");
|
|
sMenuText = QT_TR_NOOP("&Preferences ...");
|
|
sToolTipText = QT_TR_NOOP("Opens a Dialog to edit the preferences");
|
|
sWhatsThis = "Std_DlgPreferences";
|
|
sStatusTip = QT_TR_NOOP("Opens a Dialog to edit the preferences");
|
|
sPixmap = "preferences-system";
|
|
eType = 0;
|
|
}
|
|
|
|
Action * StdCmdDlgPreferences::createAction(void)
|
|
{
|
|
Action *pcAction = Command::createAction();
|
|
pcAction->setMenuRole(QAction::PreferencesRole);
|
|
|
|
return pcAction;
|
|
}
|
|
|
|
void StdCmdDlgPreferences::activated(int iMsg)
|
|
{
|
|
Q_UNUSED(iMsg);
|
|
Gui::Dialog::DlgPreferencesImp cDlg(getMainWindow());
|
|
cDlg.exec();
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_DlgCustomize
|
|
//===========================================================================
|
|
DEF_STD_CMD(StdCmdDlgCustomize)
|
|
|
|
StdCmdDlgCustomize::StdCmdDlgCustomize()
|
|
:Command("Std_DlgCustomize")
|
|
{
|
|
sGroup = QT_TR_NOOP("Tools");
|
|
sMenuText = QT_TR_NOOP("Cu&stomize...");
|
|
sToolTipText = QT_TR_NOOP("Customize toolbars and command bars");
|
|
sWhatsThis = "Std_DlgCustomize";
|
|
sStatusTip = QT_TR_NOOP("Customize toolbars and command bars");
|
|
sPixmap = "applications-accessories";
|
|
eType = 0;
|
|
}
|
|
|
|
void StdCmdDlgCustomize::activated(int iMsg)
|
|
{
|
|
Q_UNUSED(iMsg);
|
|
static QPointer<QDialog> dlg = 0;
|
|
if (!dlg)
|
|
dlg = new Gui::Dialog::DlgCustomizeImp(getMainWindow());
|
|
dlg->setAttribute(Qt::WA_DeleteOnClose);
|
|
dlg->show();
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_CommandLine
|
|
//===========================================================================
|
|
DEF_STD_CMD(StdCmdCommandLine)
|
|
|
|
StdCmdCommandLine::StdCmdCommandLine()
|
|
:Command("Std_CommandLine")
|
|
{
|
|
sGroup = QT_TR_NOOP("Tools");
|
|
sMenuText = QT_TR_NOOP("Start command &line...");
|
|
sToolTipText = QT_TR_NOOP("Opens the command line in the console");
|
|
sWhatsThis = "Std_CommandLine";
|
|
sStatusTip = QT_TR_NOOP("Opens the command line in the console");
|
|
sPixmap = "utilities-terminal";
|
|
eType = 0;
|
|
}
|
|
|
|
void StdCmdCommandLine::activated(int iMsg)
|
|
{
|
|
Q_UNUSED(iMsg);
|
|
bool show = getMainWindow()->isMaximized ();
|
|
|
|
// pop up the Gui command window
|
|
GUIConsole Wnd;
|
|
|
|
getMainWindow()->showMinimized () ;
|
|
qApp->processEvents();
|
|
|
|
// create temporary console sequencer
|
|
{
|
|
Base::ConsoleSequencer seq;
|
|
Base::Interpreter().runCommandLine("Console mode");
|
|
}
|
|
|
|
#ifdef Q_WS_X11
|
|
// On X11 this may not work. For further information see QWidget::showMaximized
|
|
//
|
|
// workaround for X11
|
|
getMainWindow()->hide();
|
|
getMainWindow()->show();
|
|
#endif
|
|
|
|
// pop up the main window
|
|
show ? getMainWindow()->showMaximized () : getMainWindow()->showNormal () ;
|
|
qApp->processEvents();
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_OnlineHelp
|
|
//===========================================================================
|
|
|
|
DEF_STD_CMD(StdCmdOnlineHelp)
|
|
|
|
StdCmdOnlineHelp::StdCmdOnlineHelp()
|
|
:Command("Std_OnlineHelp")
|
|
{
|
|
sGroup = QT_TR_NOOP("Help");
|
|
sMenuText = QT_TR_NOOP("Help");
|
|
sToolTipText = QT_TR_NOOP("Show help to the application");
|
|
sWhatsThis = "Std_OnlineHelp";
|
|
sStatusTip = QT_TR_NOOP("Help");
|
|
sPixmap = "help-browser";
|
|
sAccel = keySequenceToAccel(QKeySequence::HelpContents);
|
|
eType = 0;
|
|
}
|
|
|
|
void StdCmdOnlineHelp::activated(int iMsg)
|
|
{
|
|
Q_UNUSED(iMsg);
|
|
Gui::getMainWindow()->showDocumentation(QString::fromLatin1("Online_Help_Startpage"));
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_OnlineHelpWebsite
|
|
//===========================================================================
|
|
|
|
DEF_STD_CMD(StdCmdOnlineHelpWebsite)
|
|
|
|
StdCmdOnlineHelpWebsite::StdCmdOnlineHelpWebsite()
|
|
:Command("Std_OnlineHelpWebsite")
|
|
{
|
|
sGroup = QT_TR_NOOP("Help");
|
|
sMenuText = QT_TR_NOOP("Help Website");
|
|
sToolTipText = QT_TR_NOOP("The website where the help is maintained");
|
|
sWhatsThis = "Std_OnlineHelpWebsite";
|
|
sStatusTip = QT_TR_NOOP("Help Website");
|
|
eType = 0;
|
|
}
|
|
|
|
void StdCmdOnlineHelpWebsite::activated(int iMsg)
|
|
{
|
|
Q_UNUSED(iMsg);
|
|
std::string defaulturl = QCoreApplication::translate(this->className(),"http://www.freecadweb.org/wiki/Online_Help_Toc").toStdString();
|
|
ParameterGrp::handle hURLGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Websites");
|
|
std::string url = hURLGrp->GetASCII("OnlineHelp", defaulturl.c_str());
|
|
hURLGrp->SetASCII("OnlineHelp", url.c_str());
|
|
OpenURLInBrowser(url.c_str());
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_FreeCADDonation
|
|
//===========================================================================
|
|
|
|
DEF_STD_CMD(StdCmdFreeCADDonation)
|
|
|
|
StdCmdFreeCADDonation::StdCmdFreeCADDonation()
|
|
:Command("Std_FreeCADDonation")
|
|
{
|
|
sGroup = QT_TR_NOOP("Help");
|
|
sMenuText = QT_TR_NOOP("Donate");
|
|
sToolTipText = QT_TR_NOOP("Donate to FreeCAD development");
|
|
sWhatsThis = "Std_FreeCADDonation";
|
|
sStatusTip = sToolTipText;
|
|
sPixmap = "internet-web-browser";
|
|
eType = 0;
|
|
}
|
|
|
|
void StdCmdFreeCADDonation::activated(int iMsg)
|
|
{
|
|
Q_UNUSED(iMsg);
|
|
ParameterGrp::handle hURLGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Websites");
|
|
std::string url = hURLGrp->GetASCII("DonatePage", "https://wiki.freecadweb.org/Donate");
|
|
hURLGrp->SetASCII("DonatePage", url.c_str());
|
|
OpenURLInBrowser(url.c_str());
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_FreeCADWebsite
|
|
//===========================================================================
|
|
|
|
DEF_STD_CMD(StdCmdFreeCADWebsite)
|
|
|
|
StdCmdFreeCADWebsite::StdCmdFreeCADWebsite()
|
|
:Command("Std_FreeCADWebsite")
|
|
{
|
|
sGroup = QT_TR_NOOP("Help");
|
|
sMenuText = QT_TR_NOOP("FreeCAD Website");
|
|
sToolTipText = QT_TR_NOOP("The FreeCAD website");
|
|
sWhatsThis = "Std_FreeCADWebsite";
|
|
sStatusTip = QT_TR_NOOP("FreeCAD Website");
|
|
sPixmap = "internet-web-browser";
|
|
eType = 0;
|
|
}
|
|
|
|
void StdCmdFreeCADWebsite::activated(int iMsg)
|
|
{
|
|
Q_UNUSED(iMsg);
|
|
std::string defaulturl = QCoreApplication::translate(this->className(),"http://www.freecadweb.org").toStdString();
|
|
ParameterGrp::handle hURLGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Websites");
|
|
std::string url = hURLGrp->GetASCII("WebPage", defaulturl.c_str());
|
|
hURLGrp->SetASCII("WebPage", url.c_str());
|
|
OpenURLInBrowser(url.c_str());
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_FreeCADUserHub
|
|
//===========================================================================
|
|
|
|
DEF_STD_CMD(StdCmdFreeCADUserHub)
|
|
|
|
StdCmdFreeCADUserHub::StdCmdFreeCADUserHub()
|
|
:Command("Std_FreeCADUserHub")
|
|
{
|
|
sGroup = QT_TR_NOOP("Help");
|
|
sMenuText = QT_TR_NOOP("Users documentation");
|
|
sToolTipText = QT_TR_NOOP("Documentation for users on the FreeCAD website");
|
|
sWhatsThis = "Std_FreeCADUserHub";
|
|
sStatusTip = QT_TR_NOOP("Users documentation");
|
|
sPixmap = "internet-web-browser";
|
|
eType = 0;
|
|
}
|
|
|
|
void StdCmdFreeCADUserHub::activated(int iMsg)
|
|
{
|
|
Q_UNUSED(iMsg);
|
|
std::string defaulturl = QCoreApplication::translate(this->className(),"http://www.freecadweb.org/wiki/User_hub").toStdString();
|
|
ParameterGrp::handle hURLGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Websites");
|
|
std::string url = hURLGrp->GetASCII("Documentation", defaulturl.c_str());
|
|
hURLGrp->SetASCII("Documentation", url.c_str());
|
|
OpenURLInBrowser(url.c_str());
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_FreeCADPowerUserHub
|
|
//===========================================================================
|
|
|
|
DEF_STD_CMD(StdCmdFreeCADPowerUserHub)
|
|
|
|
StdCmdFreeCADPowerUserHub::StdCmdFreeCADPowerUserHub()
|
|
:Command("Std_FreeCADPowerUserHub")
|
|
{
|
|
sGroup = QT_TR_NOOP("Help");
|
|
sMenuText = QT_TR_NOOP("Python scripting documentation");
|
|
sToolTipText = QT_TR_NOOP("Python scripting documentation on the FreeCAD website");
|
|
sWhatsThis = "Std_FreeCADPowerUserHub";
|
|
sStatusTip = QT_TR_NOOP("PowerUsers documentation");
|
|
sPixmap = "internet-web-browser";
|
|
eType = 0;
|
|
}
|
|
|
|
void StdCmdFreeCADPowerUserHub::activated(int iMsg)
|
|
{
|
|
Q_UNUSED(iMsg);
|
|
std::string defaulturl = QCoreApplication::translate(this->className(),"http://www.freecadweb.org/wiki/Power_users_hub").toStdString();
|
|
ParameterGrp::handle hURLGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Websites");
|
|
std::string url = hURLGrp->GetASCII("PowerUsers", defaulturl.c_str());
|
|
hURLGrp->SetASCII("PowerUsers", url.c_str());
|
|
OpenURLInBrowser(url.c_str());
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_FreeCADForum
|
|
//===========================================================================
|
|
|
|
DEF_STD_CMD(StdCmdFreeCADForum)
|
|
|
|
StdCmdFreeCADForum::StdCmdFreeCADForum()
|
|
:Command("Std_FreeCADForum")
|
|
{
|
|
sGroup = QT_TR_NOOP("Help");
|
|
sMenuText = QT_TR_NOOP("FreeCAD Forum");
|
|
sToolTipText = QT_TR_NOOP("The FreeCAD forum, where you can find help from other users");
|
|
sWhatsThis = "Std_FreeCADForum";
|
|
sStatusTip = QT_TR_NOOP("The FreeCAD Forum");
|
|
sPixmap = "internet-web-browser";
|
|
eType = 0;
|
|
}
|
|
|
|
void StdCmdFreeCADForum::activated(int iMsg)
|
|
{
|
|
Q_UNUSED(iMsg);
|
|
std::string defaulturl = QCoreApplication::translate(this->className(),"http://forum.freecadweb.org").toStdString();
|
|
ParameterGrp::handle hURLGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Websites");
|
|
std::string url = hURLGrp->GetASCII("UserForum", defaulturl.c_str());
|
|
hURLGrp->SetASCII("UserForum", url.c_str());
|
|
OpenURLInBrowser(url.c_str());
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_FreeCADFAQ
|
|
//===========================================================================
|
|
|
|
DEF_STD_CMD(StdCmdFreeCADFAQ)
|
|
|
|
StdCmdFreeCADFAQ::StdCmdFreeCADFAQ()
|
|
:Command("Std_FreeCADFAQ")
|
|
{
|
|
sGroup = QT_TR_NOOP("Help");
|
|
sMenuText = QT_TR_NOOP("FreeCAD FAQ");
|
|
sToolTipText = QT_TR_NOOP("Frequently Asked Questions on the FreeCAD website");
|
|
sWhatsThis = "Std_FreeCADFAQ";
|
|
sStatusTip = QT_TR_NOOP("Frequently Asked Questions");
|
|
sPixmap = "internet-web-browser";
|
|
eType = 0;
|
|
}
|
|
|
|
void StdCmdFreeCADFAQ::activated(int iMsg)
|
|
{
|
|
Q_UNUSED(iMsg);
|
|
std::string defaulturl = QCoreApplication::translate(this->className(),"http://www.freecadweb.org/wiki/FAQ").toStdString();
|
|
ParameterGrp::handle hURLGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Websites");
|
|
std::string url = hURLGrp->GetASCII("FAQ", defaulturl.c_str());
|
|
hURLGrp->SetASCII("FAQ", url.c_str());
|
|
OpenURLInBrowser(url.c_str());
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_PythonWebsite
|
|
//===========================================================================
|
|
|
|
DEF_STD_CMD(StdCmdPythonWebsite)
|
|
|
|
StdCmdPythonWebsite::StdCmdPythonWebsite()
|
|
:Command("Std_PythonWebsite")
|
|
{
|
|
sGroup = QT_TR_NOOP("Help");
|
|
sMenuText = QT_TR_NOOP("Python Website");
|
|
sToolTipText = QT_TR_NOOP("The official Python website");
|
|
sWhatsThis = "Std_PythonWebsite";
|
|
sStatusTip = QT_TR_NOOP("Python Website");
|
|
sPixmap = "applications-python";
|
|
eType = 0;
|
|
}
|
|
|
|
void StdCmdPythonWebsite::activated(int iMsg)
|
|
{
|
|
Q_UNUSED(iMsg);
|
|
OpenURLInBrowser("http://python.org");
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_MeasurementSimple
|
|
//===========================================================================
|
|
|
|
DEF_STD_CMD(StdCmdMeasurementSimple)
|
|
|
|
StdCmdMeasurementSimple::StdCmdMeasurementSimple()
|
|
:Command("Std_MeasurementSimple")
|
|
{
|
|
sGroup = QT_TR_NOOP("Tools");
|
|
sMenuText = QT_TR_NOOP("Measure distance");
|
|
sToolTipText = QT_TR_NOOP("Measures distance between two selected objects");
|
|
sWhatsThis = "Std_MeasurementSimple";
|
|
sStatusTip = QT_TR_NOOP("Measures distance between two selected objects");
|
|
sPixmap = "view-measurement";
|
|
eType = 0;
|
|
}
|
|
|
|
void StdCmdMeasurementSimple::activated(int iMsg)
|
|
{
|
|
Q_UNUSED(iMsg);
|
|
unsigned int n = getSelection().countObjectsOfType(App::DocumentObject::getClassTypeId());
|
|
|
|
if (n == 1) {
|
|
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
|
QObject::tr("Only one object selected. Please select two objects.\n"
|
|
"Be aware the point where you click matters."));
|
|
return;
|
|
}
|
|
if (n < 1 || n > 2) {
|
|
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
|
QObject::tr("Please select two objects.\n"
|
|
"Be aware the point where you click matters."));
|
|
return;
|
|
}
|
|
|
|
std::vector<Gui::SelectionSingleton::SelObj> Sel = getSelection().getSelection();
|
|
|
|
std::string name;
|
|
name += "Dist ";
|
|
name += Sel[0].FeatName;
|
|
name += "-";
|
|
name += Sel[0].SubName;
|
|
name += " to ";
|
|
name += Sel[1].FeatName;
|
|
name += "-";
|
|
name += Sel[1].SubName;
|
|
|
|
openCommand(QT_TRANSLATE_NOOP("Command", "Insert measurement"));
|
|
doCommand(Doc,"_f = App.activeDocument().addObject(\"App::MeasureDistance\",\"%s\")","Measurement");
|
|
doCommand(Doc,"_f.Label ='%s'",name.c_str());
|
|
doCommand(Doc,"_f.P1 = FreeCAD.Vector(%f,%f,%f)",Sel[0].x,Sel[0].y,Sel[0].z);
|
|
doCommand(Doc,"_f.P2 = FreeCAD.Vector(%f,%f,%f)",Sel[1].x,Sel[1].y,Sel[1].z);
|
|
updateActive();
|
|
commitCommand();
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_TextDocument
|
|
//===========================================================================
|
|
|
|
DEF_STD_CMD_A(StdCmdTextDocument)
|
|
|
|
StdCmdTextDocument::StdCmdTextDocument()
|
|
:Command("Std_TextDocument")
|
|
{
|
|
sGroup = QT_TR_NOOP("Tools");
|
|
sMenuText = QT_TR_NOOP("Add text document");
|
|
sToolTipText = QT_TR_NOOP("Add text document to active document");
|
|
sWhatsThis = "Std_TextDocument";
|
|
sStatusTip = QT_TR_NOOP("Add text document to active document");
|
|
sPixmap = "TextDocument";
|
|
eType = 0;
|
|
}
|
|
|
|
void StdCmdTextDocument::activated(int iMsg)
|
|
{
|
|
Q_UNUSED(iMsg);
|
|
|
|
openCommand(QT_TRANSLATE_NOOP("Command", "Insert text document"));
|
|
doCommand(Doc, "App.ActiveDocument.addObject(\"App::TextDocument\",\"%s\").Label=\"%s\"","Text document","Text document");
|
|
doCommand(Gui, "Gui.ActiveDocument.ActiveObject.doubleClicked()");
|
|
updateActive();
|
|
commitCommand();
|
|
}
|
|
|
|
bool StdCmdTextDocument::isActive(void)
|
|
{
|
|
return hasActiveDocument();
|
|
}
|
|
|
|
//===========================================================================
|
|
// Std_UnitsCalculator
|
|
//===========================================================================
|
|
DEF_STD_CMD(StdCmdUnitsCalculator)
|
|
|
|
StdCmdUnitsCalculator::StdCmdUnitsCalculator()
|
|
: Command("Std_UnitsCalculator")
|
|
{
|
|
sGroup = QT_TR_NOOP("Tools");
|
|
sMenuText = QT_TR_NOOP("&Units calculator...");
|
|
sToolTipText = QT_TR_NOOP("Start the units calculator");
|
|
sWhatsThis = "Std_UnitsCalculator";
|
|
sStatusTip = QT_TR_NOOP("Start the units calculator");
|
|
sPixmap = "accessories-calculator";
|
|
eType = 0;
|
|
}
|
|
|
|
void StdCmdUnitsCalculator::activated(int iMsg)
|
|
{
|
|
Q_UNUSED(iMsg);
|
|
Gui::Dialog::DlgUnitsCalculator *dlg = new Gui::Dialog::DlgUnitsCalculator( getMainWindow() );
|
|
dlg->show();
|
|
}
|
|
|
|
//===========================================================================
|
|
// StdCmdUserEditMode
|
|
//===========================================================================
|
|
class StdCmdUserEditMode : public Gui::Command
|
|
{
|
|
public:
|
|
StdCmdUserEditMode();
|
|
virtual ~StdCmdUserEditMode(){}
|
|
virtual void languageChange();
|
|
virtual const char* className() const {return "StdCmdUserEditMode";}
|
|
void updateIcon(int mode);
|
|
protected:
|
|
virtual void activated(int iMsg);
|
|
virtual bool isActive(void);
|
|
virtual Gui::Action * createAction(void);
|
|
};
|
|
|
|
StdCmdUserEditMode::StdCmdUserEditMode()
|
|
: Command("Std_UserEditMode")
|
|
{
|
|
sGroup = QT_TR_NOOP("Edit mode");
|
|
sMenuText = QT_TR_NOOP("Edit mode");
|
|
sToolTipText = QT_TR_NOOP("Defines behavior when editing an object from tree");
|
|
sStatusTip = QT_TR_NOOP("Defines behavior when editing an object from tree");
|
|
sWhatsThis = "Std_UserEditMode";
|
|
sPixmap = "EditModeDefault";
|
|
eType = ForEdit;
|
|
|
|
this->getGuiApplication()->signalUserEditModeChanged.connect(boost::bind(&StdCmdUserEditMode::updateIcon, this, bp::_1));
|
|
}
|
|
|
|
Gui::Action * StdCmdUserEditMode::createAction(void)
|
|
{
|
|
Gui::ActionGroup* pcAction = new Gui::ActionGroup(this, Gui::getMainWindow());
|
|
pcAction->setDropDownMenu(true);
|
|
pcAction->setIsMode(true);
|
|
applyCommandData(this->className(), pcAction);
|
|
|
|
for (auto const &uem : Gui::Application::Instance->listUserEditModes()) {
|
|
QAction* act = pcAction->addAction(QString());
|
|
auto modeName = QString::fromStdString(uem.second);
|
|
act->setCheckable(true);
|
|
act->setIcon(BitmapFactory().iconFromTheme(qPrintable(QString::fromLatin1("EditMode")+modeName)));
|
|
act->setObjectName(QString::fromLatin1("Std_EditMode")+modeName);
|
|
act->setWhatsThis(QString::fromLatin1(getWhatsThis()));
|
|
|
|
if (uem.first == 0) {
|
|
pcAction->setIcon(act->icon());
|
|
act->setChecked(true);
|
|
}
|
|
}
|
|
|
|
_pcAction = pcAction;
|
|
languageChange();
|
|
return pcAction;
|
|
}
|
|
|
|
void StdCmdUserEditMode::languageChange()
|
|
{
|
|
Command::languageChange();
|
|
|
|
if (!_pcAction)
|
|
return;
|
|
Gui::ActionGroup* pcAction = qobject_cast<Gui::ActionGroup*>(_pcAction);
|
|
QList<QAction*> a = pcAction->actions();
|
|
|
|
for (int i = 0 ; i < a.count() ; i++) {
|
|
auto modeName = QString::fromStdString(Gui::Application::Instance->getUserEditModeName(i));
|
|
a[i]->setText(QCoreApplication::translate(
|
|
"EditMode", qPrintable(modeName)));
|
|
a[i]->setToolTip(QCoreApplication::translate(
|
|
"EditMode", qPrintable(modeName+QString::fromLatin1(" mode"))));
|
|
}
|
|
}
|
|
|
|
void StdCmdUserEditMode::updateIcon(int mode)
|
|
{
|
|
Gui::ActionGroup *actionGroup = dynamic_cast<Gui::ActionGroup *>(_pcAction);
|
|
if (!actionGroup)
|
|
return;
|
|
|
|
actionGroup->setCheckedAction(mode);
|
|
}
|
|
|
|
void StdCmdUserEditMode::activated(int iMsg)
|
|
{
|
|
Gui::Application::Instance->setUserEditMode(iMsg);
|
|
}
|
|
|
|
bool StdCmdUserEditMode::isActive(void)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
namespace Gui {
|
|
|
|
void CreateStdCommands(void)
|
|
{
|
|
CommandManager &rcCmdMgr = Application::Instance->commandManager();
|
|
|
|
rcCmdMgr.addCommand(new StdCmdAbout());
|
|
rcCmdMgr.addCommand(new StdCmdAboutQt());
|
|
|
|
rcCmdMgr.addCommand(new StdCmdDlgParameter());
|
|
rcCmdMgr.addCommand(new StdCmdDlgPreferences());
|
|
rcCmdMgr.addCommand(new StdCmdDlgCustomize());
|
|
rcCmdMgr.addCommand(new StdCmdCommandLine());
|
|
rcCmdMgr.addCommand(new StdCmdWorkbench());
|
|
rcCmdMgr.addCommand(new StdCmdRecentFiles());
|
|
rcCmdMgr.addCommand(new StdCmdRecentMacros());
|
|
rcCmdMgr.addCommand(new StdCmdWhatsThis());
|
|
rcCmdMgr.addCommand(new StdCmdPythonHelp());
|
|
rcCmdMgr.addCommand(new StdCmdOnlineHelp());
|
|
rcCmdMgr.addCommand(new StdCmdOnlineHelpWebsite());
|
|
rcCmdMgr.addCommand(new StdCmdFreeCADWebsite());
|
|
rcCmdMgr.addCommand(new StdCmdFreeCADDonation());
|
|
rcCmdMgr.addCommand(new StdCmdFreeCADUserHub());
|
|
rcCmdMgr.addCommand(new StdCmdFreeCADPowerUserHub());
|
|
rcCmdMgr.addCommand(new StdCmdFreeCADForum());
|
|
rcCmdMgr.addCommand(new StdCmdFreeCADFAQ());
|
|
rcCmdMgr.addCommand(new StdCmdPythonWebsite());
|
|
rcCmdMgr.addCommand(new StdCmdTextDocument());
|
|
rcCmdMgr.addCommand(new StdCmdUnitsCalculator());
|
|
rcCmdMgr.addCommand(new StdCmdUserEditMode());
|
|
//rcCmdMgr.addCommand(new StdCmdMeasurementSimple());
|
|
//rcCmdMgr.addCommand(new StdCmdDownloadOnlineHelp());
|
|
//rcCmdMgr.addCommand(new StdCmdDescription());
|
|
}
|
|
|
|
} // namespace Gui
|