You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ktechlab/src/ktechlab.h

244 lines
6.9 KiB

/***************************************************************************
* Copyright (C) 2003-2005 by David Saxton *
* david@bluehaze.org *
* *
* 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 KTECHLAB_H
#define KTECHLAB_H
#include <katemdi.h>
class CircuitDocument;
class TextDocument;
class ComponentSelector;
class Document;
class FlowCodeDocument;
class ItemEditor;
class LanguageManager;
class LogView;
class MechanicsDocument;
class ProjectManager;
class View;
class ViewContainer;
typedef QValueList< QGuardedPtr<ViewContainer> > ViewContainerList;
class KAction;
class RecentFilesAction;
class KTabWidget;
class KToolBar;
class KToggleAction;
class KURL;
class QLabel;
/**
* This class serves as the main window for KTechlab. It handles the
* menus, toolbars, status bars, loading/saving files, config, etc.
*
* @short Main window class
* @author David Saxton
*/
class KTechlab : public KateMDI::MainWindow
{
Q_OBJECT
public:
KTechlab();
~KTechlab();
/**
* Returns a pointer to an action with the given name.
*/
KAction * action( const QString & name ) const;
/**
* Returns a URL from a Open File dialog (with all ktechlab related file
* types allowed).
*/
static KURL::List getFileURLs();
/**
* Returns a list of the recently opened/saved files
*/
QStringList recentFiles();
/**
* The tab and window captions will get updated when we have re-entered
* the Qt event loop.
*/
void requestUpdateCaptions();
/**
* Returns the tabwidget that shows the list of view containers.
*/
KTabWidget * tabWidget() const { return m_pViewContainerTabWidget; }
/**
* Registers the viewcontainer with the internal list.
*/
void addWindow( ViewContainer * vc );
/**
* Removes all gui clients added to the factory other than ourself.
*/
void removeGUIClients();
/**
* Work around a crash. Adds the given KXMLGUIClient to a list of those
* that ktechlab will not attempt to remove on calling removeGUIClients.
*/
void addNoRemoveGUIClient( KXMLGUIClient * client );
/**
* For preventing flickering when we are updating the toolbars - grab
* a pixmap of the current toolbars, and overlay it in position.
*/
void overlayToolBarScreenshot();
virtual void show();
signals:
/**
* Emitted when the user changes the configuration settings in the config dialog
*/
void configurationChanged();
/**
* Emitted when a recent file is added
*/
void recentFileAdded( const KURL &url );
/**
* Emitted when ViewContainers should update their captions.
*/
void needUpdateCaptions();
public slots:
/**
* The user right clicked on a tab item.
*/
void slotTabContext( QWidget* widget,const QPoint & pos );
void slotDragContextActivated( int id );
/**
* The user clicked on an item in the tab-menu (from right clicking).
*/
void slotTabContextActivated( int id );
void slotChangeStatusbar(const QString& text);
void load(const KURL& url);
void slotUpdateConfiguration();
/**
* Adds a url to the list of recently opened files
*/
void addRecentFile( const KURL &url );
/**
* A document had its modified state changed; will update actions,
* tab titles, etc as appropriate.
*/
void slotDocModifiedChanged();
/**
* A document had its undo/redo state changed; will update actions,
* tab titles, etc as appropriate.
*/
void slotDocUndoRedoChanged();
protected:
/**
* Overridden virtuals for Qt drag 'n drop (XDND)
*/
virtual void dragEnterEvent(QDragEnterEvent *event);
virtual void dropEvent(QDropEvent *event);
/**
* This function is called when it is time for the app to save its
* properties for session management purposes.
*/
void saveProperties(KConfig *);
/**
* This function is called when this app is restored. The KConfig
* object points to the session management config file that was saved
* with @ref saveProperties
*/
void readProperties(KConfig *);
/**
* Called before the window is closed, either by the user or indirectly by the session manager.
* This function doesn't actually close the main window; it only queries the user and closes the active view.
* To quit the appliaction completly, you should use KTechlab::slotFileQuit()
*/
virtual bool queryClose();
protected slots:
void slotViewContainerActivated( QWidget * viewContainer );
void slotTabDragEvent( const QDragMoveEvent *e, bool &accept );
void slotTabDragInitiate( QWidget *widget );
void slotTabReceivedDropEvent( QDropEvent *e );
void slotTabReceivedDropEvent( QWidget *widget, QDropEvent *e );
void slotUpdateTabWidget();
/**
* Updates the tab and window captions from what is currently open and
* focused.
*/
void slotUpdateCaptions();
private slots:
/**
* Called from a QTimer timeout (which should be after the toolbars have
* finished constructing themselves).
*/
void hideToolBarOverlay();
void slotViewContainerDestroyed( QObject * obj );
void slotFileNewAssembly();
void slotFileNewMicrobe();
void slotFileNewC();
void slotFileNewCircuit();
void slotFileNewFlowCode();
void slotFileNewMechanics();
void slotFileNew();
void slotFileOpen();
void slotFileSave();
void slotFileSaveAs();
void slotFilePrint();
void slotFileQuit();
// Editing operations
void slotEditUndo();
void slotEditRedo();
void slotEditCut();
void slotEditCopy();
void slotEditPaste();
/**
* Split the current view into two
*/
void slotViewSplitLeftRight();
/**
* Split the current view into two
*/
void slotViewSplitTopBottom();
void slotViewContainerClose();
void slotViewClose();
void slotOptionsShowStatusbar();
void slotOptionsConfigureKeys();
void slotOptionsConfigureToolbars();
void slotOptionsPreferences();
private:
void setupActions();
void setupToolDocks();
void setupView();
void setupTabWidget();
RecentFilesAction * m_recentFiles;
RecentFilesAction * m_recentProjects;
KToggleAction * m_statusbarAction;
KTabWidget * m_pViewContainerTabWidget;
QString m_lastStatusBarMessage;
QValueList<KXMLGUIClient*> m_noRemoveGUIClients;
QLabel * m_pToolBarOverlayLabel;
bool m_bIsShown; // Set true when show() is called
ViewContainerList m_viewContainerList;
QTimer * m_pUpdateCaptionsTimer;
QGuardedPtr<ViewContainer> m_pContextMenuContainer;
QGuardedPtr<ViewContainer> m_pFocusedContainer;
QGuardedPtr<ViewContainer> m_pContainerDropSource;
QGuardedPtr<ViewContainer> m_pContainerDropReceived;
};
#endif // KTECHLAB_H