Revision 1 (by moose, 2006/03/06 10:35:57) Initial Import
#include <Qt>
#include <QtGui>
#include <QAction>
#include <QMenuBar>
#include <QMenu>
#include <QStatusBar>
#include "SciQMWBase.h"
#include "SciQApp.h"
#include "SciQDockWindow.h"
#include "SciQToolBar.h"
#include "SciQSettingsDialog.h"
#include "SciQSBInfo.h"
#include <qextscintilla.h>

SciQMWBase::SciQMWBase(QWidget * parent, Qt::WFlags f) : QMainWindow(parent, f), qs(this)
{
	setObjectName(SciQApp::Sequence(metaObject()->className()));

	// Actions:
	//  new file, open file, save file, save file as, print, undo, redo, cut, copy, paste, find
	//  new workspace (all above actions operate in current workspace), docklist (pops up menu:o)


	QToolBar *mtb = new SciQToolBar("Main Menu");
	QMenuBar *mb = new QMenuBar();
	mtb->addWidget(mb);
//	mtb->setMovable(true);

	QMenu *file = new QMenu("&File");
	mb->addMenu(file);

	QMenu *edit = new QMenu("&Edit");
	mb->addMenu(edit);

	edit->addSeparator();
	QAction *settingsAction = new QAction("Settings...", this);
	connect(settingsAction, SIGNAL(triggered()), this, SLOT(editSettings()));

	edit->addAction(settingsAction);

	addToolBar(mtb);
//	addToolBarBreak();

	createPopupMenu();

	// Dock ?? Maybe the child classes should add the docks they want.

	sci = new QextScintilla(this);
	setCentralWidget(sci);

	QFile fh("qrc/settings/general.xrc");
	fh.open(QIODevice::ReadOnly);

	sci->setText(QString(fh.readAll()));

	//QStatusBar *sb = new QStatusBar();
	//setStatusBar(sb);

	sbi = new SciQSBInfo(statusBar());
	statusBar()->addWidget(sbi, 0);

	QLabel *ins = new QLabel("INS", statusBar());
	ins->setLineWidth(4);
	statusBar()->addWidget(ins, 0);
}

SciQMWBase::~SciQMWBase()
{
//	qSettings().setValue("state", saveState());
}

QList<SciQDockWindow *> SciQMWBase::dockwindows()
{
	return dockhash.values();
}

QList<SciQToolBar *> SciQMWBase::toolbars()
{
	return toolbarhash.values();
}

void SciQMWBase::showDockWindow(QString &s, bool b)
{
	SciQDockWindow *dw = 0;
	if(!dockhash.contains(s))
		return;

	dw = dockhash.value(s);

	dw->setVisible(b);
}

void SciQMWBase::editSettings()
{
	SciQApp *app = SciQApp::getInstance();
	app->sd->exec();
}

SciQDockWindow *SciQMWBase::getDockWindow(QString &s)
{
	if(dockhash.contains(s))
		return dockhash.value(s);

	return 0;
}

bool SciQMWBase::addDockWindow(QString &s)
{
	SciQApp *app = SciQApp::getInstance();

	if(dockhash.contains(s))
		return false;

	SciQDockWindow *dw = app->getDockWindowInstance(s, this);
	if(!dw)
		return false;

	dockhash.insert(s, dw);

	return true;
}