qucs.h
--------
begin : Thu Aug 28 2003
copyright : (C) 2003 by Michael Margraf
email : michael.margraf@alumni.tu-berlin.de
***************************************************************************/
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QUCS_H
#define QUCS_H
#include <QMainWindow>
#include <QString>
#include <QHash>
#include <QStack>
#include <QFileSystemModel>
#include <QSortFilterProxyModel>
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
class QucsDoc;
class Schematic;
class SimMessage;
class MouseActions;
class SearchDialog;
class OctaveWindow;
class MessageDock;
class ProjectView;
class TunerDialog;
class tunerElement;
class ExternSimDialog;
class QLabel;
class QAction;
class QLineEdit;
class QComboBox;
class QTabWidget;
class QDir;
class QMouseEvent;
class QCloseEvent;
class QMenu;
class QToolBar;
class QSettings;
class QListWidgetItem;
class QTreeWidget;
class QTreeWidgetItem;
class QListWidget;
class QShortcut;
class QListView;
class QModelIndex;
class QPushButton;
class QTextEdit;
class QFrame;
class SymbolWidget;
typedef bool (Schematic::*pToggleFunc) ();
typedef void (MouseActions::*pMouseFunc) (Schematic*, QMouseEvent*);
typedef void (MouseActions::*pMouseFunc2) (Schematic*, QMouseEvent*, float, float);
class QucsFileSystemModel : public QFileSystemModel {
Q_OBJECT
public:
explicit QucsFileSystemModel(QObject* parent = nullptr) : QFileSystemModel(parent) {};
QVariant data(const QModelIndex& index, int role) const override;
};
class QucsSortFilterProxyModel : public QSortFilterProxyModel {
Q_OBJECT
public:
explicit QucsSortFilterProxyModel(QObject *parent = nullptr) : QSortFilterProxyModel(parent) {};
protected:
bool lessThan(const QModelIndex &left, const QModelIndex &right) const override;
};
class QucsApp : public QMainWindow {
Q_OBJECT
public:
QucsApp(bool netlist2Console);
~QucsApp();
bool closeAllFiles();
bool gotoPage(const QString&);
QucsDoc *getDoc(int No=-1);
QucsDoc* findDoc (QString, int * Pos = 0);
QString fileType (const QString&);
static bool isTextDocument(QWidget *);
QString ProjName;
QLineEdit *editText;
SearchDialog *SearchDia;
TunerDialog *tunerDia;
SimMessage *sim;
void (MouseActions::*MouseMoveAction) (Schematic*, QMouseEvent*);
void (MouseActions::*MousePressAction) (Schematic*, QMouseEvent*, float, float);
void (MouseActions::*MouseDoubleClickAction) (Schematic*, QMouseEvent*);
void (MouseActions::*MouseReleaseAction) (Schematic*, QMouseEvent*);
protected:
void closeEvent(QCloseEvent*);
public slots:
void slotFileNew();
void slotTextNew();
void slotSymbolNew();
void slotFileOpen();
void slotFileSave();
void slotFileSaveAs();
void slotFileSaveAll();
void slotFileClose();
void slotFileExamples();
void slotHelpTutorial();
void slotHelpReport();
void slotHelpTechnical();
void slotFileClose (int);
void slotSymbolEdit();
void slotFileSettings();
void slotFilePrint();
void slotFilePrintFit();
void slotFileQuit();
void slotApplSettings();
void slotRefreshSchPath();
void slotIntoHierarchy();
void slotPopHierarchy();
void slotShowAll();
void slotZoomToSelection();
void slotShowOne();
void slotZoomOut();
void slotToPage();
void slotSelectComponent(QListWidgetItem*);
void slotSearchComponent(const QString &);
void slotSearchClear();
void slotEditElement();
void slotPowerMatching();
void slot2PortMatching();
void slotShowContentMenu(const QPoint &);
void slotCMenuOpen();
void slotCMenuCopy();
void slotCMenuRename();
void slotCMenuDelete();
void slotCMenuInsert();
void slotUpdateTreeview();
void slotMenuProjClose();
void slotSimulate(QWidget *w = nullptr);
void slotSimulateWithSpice();
void slotTune(bool checked);
private slots:
void slotMenuProjOpen();
void slotMenuProjDel();
void slotListProjOpen(const QModelIndex &);
void slotSelectSubcircuit(const QModelIndex &);
void slotSelectLibComponent(QTreeWidgetItem*);
void slotOpenContent(const QModelIndex &);
void slotSetCompView(int);
void slotChangeSimulator(int);
void slotButtonProjNew();
void slotButtonProjOpen();
void slotButtonProjDel();
void slotChangeView();
void slotAfterSimulation(int, SimMessage*);
void slotDCbias();
void slotChangePage(const QString&, const QString&);
void slotHideEdit();
void slotFileChanged(bool);
void slotSimSettings();
void slotSaveNetlist();
void slotSaveCdlNetlist();
void slotAfterSpiceSimulation(ExternSimDialog *SimDlg);
void slotBuildVAModule();
void slotEDDtoIFS();
void slotEDDtoMOD();*/
void slotShowModel();
void slotSearchLibComponent(const QString &);
void slotSearchLibClear();
signals:
void signalKillEmAll();
public:
MouseActions *view;
QTabWidget *DocumentTab;
QListWidget *CompComps;
QTreeWidget *libTreeWidget;
QTextEdit *CompDescr;
QLineEdit *LibCompSearch;
SymbolWidget *Symbol;
QPushButton *btnShowModel;
QMenu *ContentMenu;
QAction *ActionCMenuOpen, *ActionCMenuCopy, *ActionCMenuRename, *ActionCMenuDelete, *ActionCMenuInsert;
QAction *fileNew, *textNew, *symNew, *fileNewDpl, *fileOpen, *fileSave, *fileSaveAs,
*fileSaveAll, *fileClose, *fileExamples, *fileSettings, *filePrint, *fileQuit,
*projNew, *projOpen, *projDel, *projClose, *applSettings, *refreshSchPath,
*editCut, *editCopy, *magAll, *magSel, *magOne, *magMinus, *filePrintFit, *tune,
*symEdit, *intoH, *popH, *simulate, *save_netlist, *dpl_sch, *undo, *redo, *dcbias,
*saveCdlNetlist;
QAction *exportAsImage;
QAction *activeAction;
bool TuningMode;
QString windowTitle;
private:
QDockWidget *dock;
QTabWidget *TabView;
QDockWidget *octDock;
OctaveWindow *octave;
MessageDock *messageDock;
QListView *Projects;
ProjectView *Content;
QLineEdit *CompSearch;
QPushButton *CompSearchClear;
QComboBox *CompChoose;
QStack<QString> HierarchyHistory;
QString QucsFileFilter;
QFileSystemModel *a_homeDirModel;
QucsSortFilterProxyModel *a_proxyModel;
int ccCurIdx;
bool a_netlist2Console;
void initView();
void initCursorMenu();
int addDocumentTab(QFrame* widget, const QString& title = QString());
void setDocumentTabChanged(int index, bool changed);
void printCurrentDocument(bool);
bool saveFile(QucsDoc *Doc=0);
bool saveAs();
void openProject(const QString &);
bool deleteProject(const QString &);
void updatePortNumber(QucsDoc*, int);
int fillComboBox(bool);
void fillSimulatorsComboBox();
void switchSchematicDoc(bool);
void switchEditMode(bool);
void changeSchematicSymbolMode(Schematic*);
static bool recurRemove(const QString &);
void closeFile(int);
void updateRecentFilesList(QString s);
void successExportMessages(bool ok);
void fillLibrariesTreeView (void);
bool populateLibTreeFromDir(const QString &LibDirPath, QList<QTreeWidgetItem *> &topitems, bool relpath = false);
void saveSettings();
QWidget *getSchematicWidget(QucsDoc *Doc);
public:
void readProjects();
void updatePathList(void);
void updatePathList(QStringList);
***** The following methods are located in *****
***** "qucs_init.cpp". *****
************************************************** */
public slots:
void slotShowWarnings();
void slotResetWarnings();
void printCursorPosition(int, int, QString);
void slotUpdateUndo(bool);
void slotUpdateRedo(bool);
private slots:
void slotViewBrowseDock(bool toggle);
void slotViewOctaveDock(bool);
void slotToggleOctave(bool);
void slotToggleDock(bool);
void slotHelpAbout();
private:
void initActions();
void initMenuBar();
void initToolBar();
void initStatusBar();
QAction *helpAboutApp, *helpAboutQt,
*viewBrowseDock, *viewOctaveDock;
enum { MaxRecentFiles = 8 };
QMenu *fileMenu, *editMenu, *insMenu, *projMenu, *simMenu, *viewMenu,
*helpMenu, *alignMenu, *toolMenu, *recentFilesMenu, *cmMenu;
QAction *fileRecentAction[MaxRecentFiles];
QAction *fileClearRecent;
QMenu *helpTechnical, *helpReport, *helpTutorial;
QComboBox *simulatorsCombobox;
QToolBar *fileToolbar, *editToolbar, *viewToolbar, *workToolbar, *simulateToolbar;
QShortcut *cursorUp, *cursorLeft, *cursorRight, *cursorDown;
QLabel *WarningLabel, *PositionLabel, *DiagramValuesLabel;
***** The following methods are located in *****
***** "qucs_actions.cpp". *****
************************************************** */
public:
void editFile(const QString&);
QAction *insWire, *insLabel, *insGround, *insPort, *insEquation, *magPlus,
*editRotate, *editMirror, *editMirrorY, *editPaste, *select,
*editActivate, *wire, *editDelete, *setMarker, *setDiagramLimits, *resetDiagramLimits, *showGrid, *onGrid, *moveText,
*helpIndex, *helpGetStart, *callEditor, *callFilter, *callLine, *callActiveFilter,
*showMsg, *showNet, *alignTop, *alignBottom, *alignLeft, *alignRight,
*distrHor, *distrVert, *selectAll, *callMatch, *changeProps,
*addToProj, *editFind, *insEntity, *selectMarker,
*createLib, *callConverter, *graph2csv,
*callAtt, *centerHor, *centerVert, *loadModule, *buildModule, *callPwrComb, *callRFLayout, *callSPAR_Viewer;
QAction *helpQucsIndex;
QAction *simSettings;
QAction *buildVAModule;
public slots:
void slotEditRotate(bool);
void slotEditMirrorX(bool);
void slotEditMirrorY(bool);
void slotEditCut();
void slotEditCopy();
void slotEditPaste(bool);
void slotEditDelete(bool);
void slotInsertEquation(bool);
void slotInsertGround(bool);
void slotInsertPort(bool);
void slotInsertEntity();
void slotSetWire(bool);
void slotEscape();
void slotSelect(bool);
void slotEditActivate(bool);
void slotInsertLabel(bool);
void slotSetMarker(bool);
void slotSetDiagramLimits(bool);
void slotResetDiagramLimits();
void slotShowGrid();
void slotOnGrid(bool);
void slotMoveText(bool);
void slotZoomIn(bool);
void slotEditUndo();
void slotEditRedo();
void slotEditFind();
void slotAlignTop();
void slotAlignBottom();
void slotAlignLeft();
void slotAlignRight();
void slotDistribHoriz();
void slotDistribVert();
void slotCenterHorizontal();
void slotCenterVertical();
void slotSelectAll();
void slotSelectMarker();
void slotShowLastMsg();
void slotShowLastNetlist();
void slotCallEditor();
void slotCallFilter();
void slotCallActiveFilter();
void slotCallLine();
void slotCallMatch();
void slotCallAtt();
void slotCallPwrComb();
void slotCallSPAR_Viewer();
void slotCallRFLayout();
void slotHelpIndex();
void slotHelpQucsIndex();
void slotGettingStarted();
void slotChangeProps();
void slotAddToProject();
void slotApplyCompText();
void slotOpenRecent();
void slotSaveDiagramToGraphicsFile();
void slotSaveSchematicToGraphicsFile(bool diagram = false);
private slots:
void slotCursorLeft(bool left=true);
void slotCursorRight() {return slotCursorLeft(false);}
void slotCursorUp(bool up=true);
void slotCursorDown() {return slotCursorUp(false);}
void slotResizePropEdit(const QString&);
void slotCreateLib();
void slotImportData();
void slotExportGraphAsCsv();
void slotUpdateRecentFiles();
void slotClearRecentFiles();
void slotLoadModule();
void slotBuildModule();
private:
void buildWithOpenVAF();
bool performToggleAction(bool, QAction*, pToggleFunc, pMouseFunc, pMouseFunc2);
void launchTool(const QString&, const QString&,
const QStringList& = QStringList(),bool qucs_tool = false);
friend class SaveDialog;
QString lastExportFilename;
};
*
* Classes implemented using this template will be singletons (i.e., only
* one instance of the class will exist per invokation). Primarily this
* is used to support static / access to an application-wide function, e.g.
* settings.
*
*/
template < typename T >
class QucsSingleton final
{
public:
static T& Get()
{
static T instance;
return instance;
}
private:
QucsSingleton() = default;
~QucsSingleton() = default;
QucsSingleton(const QucsSingleton&) = delete;
QucsSingleton& operator=(const QucsSingleton&) = delete;
QucsSingleton(QucsSingleton&&) = delete;
QucsSingleton& operator=(QucsSingleton&&) = delete;
};
#endif