21#include "kexidialogbase.h"
23#include "keximainwindow.h"
24#include "kexiviewbase.h"
25#include "kexicontexthelp_p.h"
27#include "kexistaticpart.h"
28#include "kexipartitem.h"
29#include "kexipartinfo.h"
30#include "kexiproject.h"
32#include <kexidb/connection.h>
33#include <kexidb/utils.h>
34#include <kexiutils/utils.h>
36#include <tqwidgetstack.h>
37#include <tqobjectlist.h>
41#include <tdeapplication.h>
42#include <kiconloader.h>
44KexiDialogBase::KexiDialogBase(
KexiMainWindow *parent,
const TQString &caption)
45 : KMdiChildView(caption, parent,
"KexiDialogBase")
47 , m_isRegistered(false)
48 , m_origCaption(caption)
51 , m_disableDirtyChanged(false)
54 m_supportedViewModes = 0;
55 m_openedViewModes = 0;
57 m_parentWindow = parent;
58 m_creatingViewsMode = -1;
60 TQVBoxLayout *lyr =
new TQVBoxLayout(
this);
61 m_stack =
new TQWidgetStack(
this,
"stack");
62 lyr->addWidget(m_stack);
64#ifdef KEXI_NO_CTXT_HELP
65 m_contextHelpInfo=
new KexiContextHelpInfo();
74KexiDialogBase::~KexiDialogBase()
84 return static_cast<KexiViewBase*
>( m_stack->widget(m_currentViewMode) );
89 return static_cast<KexiViewBase*
>( m_stack->widget(mode) );
99 m_stack->addWidget(view, mode);
103 TQWidget *ch =
static_cast<TQWidget*
>(view->child( 0,
"TQWidget",
false ));
105 view->setFocusProxy(ch);
107 m_openedViewModes |= mode;
110void KexiDialogBase::removeView(
int mode)
114 m_stack->removeWidget(view);
116 m_openedViewModes |= mode;
117 m_openedViewModes ^= mode;
124 return KMdiChildView::minimumSizeHint();
125 return v->minimumSizeHint() + TQSize(0, mdiParent() ? mdiParent()->captionHeight() : 0);
132 return KMdiChildView::sizeHint();
141void KexiDialogBase::registerDialog() {
146 if ( m_parentWindow->mdiMode() == KMdi::ToplevelMode ) {
147 m_parentWindow->addWindow( (KMdiChildView *)
this, KMdi::Detach );
148 m_parentWindow->detachWindow((KMdiChildView *)
this,
true);
151 m_parentWindow->addWindow((KMdiChildView *)
this);
156bool KexiDialogBase::isRegistered(){
157 return m_isRegistered;
166void KexiDialogBase::detachFromGUIClient() {
177void KexiDialogBase::setContextHelp(
const TQString& caption,
const TQString& text,
const TQString& iconName) {
178#ifdef KEXI_NO_CTXT_HELP
179 m_contextHelpInfo->caption=caption;
180 m_contextHelpInfo->text=text;
181 m_contextHelpInfo->text=iconName;
186void KexiDialogBase::closeEvent( TQCloseEvent * e )
188 m_parentWindow->acceptPropertySetEditing();
191 TQObjectList *list = m_stack->queryList(
"KexiViewBase", 0,
false,
false);
193 TQObjectListIt it( *list );
194 for ( ;(view =
static_cast<KexiViewBase*
>(it.current()) ) != 0; ++it ) {
204 KMdiChildView::closeEvent(e);
209bool KexiDialogBase::tryClose(
bool dontSaveChanges)
211 if (!dontSaveChanges &&
dirty()) {
226 int m = m_openedViewModes, mode = 1;
229 if (
static_cast<KexiViewBase*
>(m_stack->widget(mode))->dirty())
242 m_disableDirtyChanged =
true;
243 int m = m_openedViewModes, mode = 1;
246 static_cast<KexiViewBase*
>(m_stack->widget(mode))->setDirty(
dirty);
251 m_disableDirtyChanged =
false;
257 if (!m_part || !m_part->info()) {
260 return v->m_defaultIconName;
264 return m_part->info()->itemIcon();
269 if (!m_part || m_currentViewMode<1)
271 return m_part->instanceGuiClient(m_currentViewMode);
278 return m_part->instanceGuiClient(0);
281bool KexiDialogBase::isDesignModePreloadedForTextModeHackUsed(
int newViewMode)
const
289 bool& proposeOpeningInTextViewModeBecauseOfProblems)
291 m_parentWindow->acceptPropertySetEditing();
293 const bool designModePreloadedForTextModeHack = isDesignModePreloadedForTextModeHackUsed(newViewMode);
295 if (designModePreloadedForTextModeHack) {
297 bool _proposeOpeningInTextViewModeBecauseOfProblems =
false;
299 res =
switchToViewMode( Kexi::DesignViewMode, staticObjectArgs, _proposeOpeningInTextViewModeBecauseOfProblems);
300 if ((!res && !_proposeOpeningInTextViewModeBecauseOfProblems) || ~res)
304 kdDebug() <<
"KexiDialogBase::switchToViewMode()" << endl;
305 bool dontStore =
false;
308 if (m_currentViewMode == newViewMode)
315 if (!designModePreloadedForTextModeHack) {
320 if (!dontStore && view->
dirty()) {
321 res = m_parentWindow->saveObject(
this, i18n(
"Design has been changed. "
322 "You must save it before switching to other view."));
331 KexiViewBase *newView
332 = (m_stack->widget(newViewMode) && m_stack->widget(newViewMode)->inherits(
"KexiViewBase"))
333 ?
static_cast<KexiViewBase*
>(m_stack->widget(newViewMode)) : 0;
337 m_creatingViewsMode = newViewMode;
340 newView = staticPart->
createView(m_stack,
this, *m_item, newViewMode, staticObjectArgs);
342 newView = m_part->createView(m_stack,
this, *m_item, newViewMode, staticObjectArgs);
346 kdDebug() <<
"Switching to mode " << newViewMode <<
" failed. Previous mode "
347 << m_currentViewMode <<
" restored." << endl;
350 m_creatingViewsMode = -1;
353 const int prevViewMode = m_currentViewMode;
355 if (designModePreloadedForTextModeHack) {
361 removeView(newViewMode);
363 kdDebug() <<
"Switching to mode " << newViewMode <<
" failed. Previous mode "
364 << m_currentViewMode <<
" restored." << endl;
367 m_currentViewMode = newViewMode;
368 m_newlySelectedView = newView;
370 m_newlySelectedView->
setDirty(
false);
376 removeView(newViewMode);
378 kdDebug() <<
"Switching to mode " << newViewMode <<
" failed. Previous mode "
379 << prevViewMode <<
" restored." << endl;
381 setStatus(mainWin()->project()->dbConnection(),
384 m_currentViewMode = prevViewMode;
387 m_newlySelectedView = 0;
389 m_currentViewMode = prevViewMode;
393 takeActionProxyChild( view );
395 m_stack->raiseWidget( newView );
397 m_parentWindow->invalidateSharedActions( newView );
398 TQTimer::singleShot(10, newView, TQ_SLOT(setFocus()));
409void KexiDialogBase::setFocus()
411 if (m_stack->visibleWidget()) {
412 if (m_stack->visibleWidget()->inherits(
"KexiViewBase"))
413 static_cast<KexiViewBase*
>( m_stack->visibleWidget() )->setFocus();
415 m_stack->visibleWidget()->setFocus();
418 KMdiChildView::setFocus();
434 if (KMdiChildView::eventFilter(obj, e))
440 if ((e->type()==TQEvent::FocusIn && m_parentWindow->activeWindow()==
this)
441 || e->type()==TQEvent::MouseButtonPress) {
452 if (m_disableDirtyChanged)
454 m_viewThatRecentlySetDirtyFlag =
dirty() ? view : 0;
476void KexiDialogBase::updateCaption()
478 if (!m_item || !m_part || !m_origCaption.isEmpty())
481 TQString capt = m_item->name();
482 TQString fullCapt = capt;
484 fullCapt += (
" : " + m_part->instanceCaption());
486 KMdiChildView::setCaption(fullCapt+
"*");
487 KMdiChildView::setTabCaption(capt+
"*");
490 KMdiChildView::setCaption(fullCapt);
491 KMdiChildView::setTabCaption(capt);
497 return m_item ? m_item->neverSaved() :
true;
511 sdata.setName( m_item->name() );
512 sdata.setCaption( m_item->caption() );
513 sdata.setDescription( m_item->description() );
520 setStatus(m_parentWindow->project()->dbConnection(), i18n(
"Saving object's definition failed."),
"");
524 if (!
part()->info()->isIdStoredInPartDatabase()) {
526 KexiDB::TableSchema *ts = m_parentWindow->project()->dbConnection()->tableSchema(
"kexi__parts");
527 kdDebug() <<
"KexiDialogBase::storeNewData(): schema: " << ts << endl;
538 p_id = (int)KexiPart::UserObjectType;
539 tristate success = m_parentWindow->project()->dbConnection()->querySingleNumber(
540 "SELECT max(p_id) FROM kexi__parts", p_id);
547 p_id = TQMAX(p_id, (
int)KexiPart::UserObjectType);
552 kexidbg <<
"KexiDialogBase::storeNewData(): fieldlist: "
557 kexidbg <<
part()->info()->
ptr()->untranslatedGenericName() << endl;
561 if (!m_parentWindow->project()->dbConnection()->insertRecord(
564 TQVariant(
part()->info()->ptr()->untranslatedGenericName()),
565 TQVariant(
part()->info()->mimeType()), TQVariant(
"http://www.koffice.org/kexi/" )))
568 kdDebug() <<
"KexiDialogBase::storeNewData(): insert success!" << endl;
571 kdDebug() <<
"KexiDialogBase::storeNewData(): new id is: "
574 part()->info()->setIdStoredInPartDatabase(
true);
582 m_item->setIdentifier( m_schemaData->id() );
583 m_parentWindow->project()->addStoredItem(
part()->info(), m_item );
596#define storeData_ERR \
597 setStatus(m_parentWindow->project()->dbConnection(), i18n("Saving object's data failed."),"");
600 KexiDB::Transaction transaction = m_parentWindow->project()->dbConnection()->beginTransaction();
601 if (transaction.
isNull()) {
629 KMdiChildView::activate();
660#include "kexidialogbase.moc"
An interface that acts as proxy for shared actions within the application.
void addActionProxyChild(KexiActionProxy *child)
FieldList * subList(const TQString &n1, const TQString &n2=TQString(), const TQString &n3=TQString(), const TQString &n4=TQString(), const TQString &n5=TQString(), const TQString &n6=TQString(), const TQString &n7=TQString(), const TQString &n8=TQString(), const TQString &n9=TQString(), const TQString &n10=TQString(), const TQString &n11=TQString(), const TQString &n12=TQString(), const TQString &n13=TQString(), const TQString &n14=TQString(), const TQString &n15=TQString(), const TQString &n16=TQString(), const TQString &n17=TQString(), const TQString &n18=TQString())
virtual TQString debugString()
Helper class for using inside methods for given connection.
This class encapsulates transaction handle.
KexiDialogTempData * tempData() const
KexiPart::GUIClient * commonGUIClient() const
virtual void attachToGUIClient()
void sendDetachedStateToCurrentView()
KoProperty::Set * propertySet()
KexiPart::GUIClient * guiClient() const
virtual TQSize sizeHint() const
void setDirty(bool dirty)
bool supportsViewMode(int mode) const
void sendAttachedStateToCurrentView()
virtual TQSize minimumSizeHint() const
KexiViewBase * viewForMode(int mode) const
KexiPart::Part * part() const
virtual TQString itemIcon()
tristate storeData(bool dontAsk=false)
KexiPart::Item * partItem() const
void closing()
emitted when the window is about to close
virtual bool eventFilter(TQObject *obj, TQEvent *e)
KexiViewBase * selectedView() const
void dirtyChanged(KexiDialogBase *)
tristate switchToViewMode(int newViewMode)
void addView(KexiViewBase *view)
Adds view for the dialog. It will be the only view (of unspecified mode) for the dialog.
bool proposeOpeningInTextViewModeBecauseOfProblems
Kexi's main window interface This interface is implemented by KexiMainWindowImpl class.
virtual void registerChild(KexiDialogBase *dlg)=0
int projectPartID() const
KService::Ptr ptr() const
void setProjectPartID(int id)
Sets the project-part-id.
The main class for kexi frontend parts like tables, queries, forms and reports.
Static Kexi Part (plugin).
virtual KexiViewBase * createView(TQWidget *parent, KexiDialogBase *dialog, KexiPart::Item &item, int viewMode, TQMap< TQString, TQString > *args)=0
Base class for single view embeddable of in KexiDialogBase.
virtual tristate beforeSwitchTo(int mode, bool &dontStore)
virtual void parentDialogDetached()
virtual tristate afterSwitchFrom(int mode)
virtual bool dirty() const
virtual KexiDB::SchemaData * storeNewData(const KexiDB::SchemaData &sdata, bool &cancel)
virtual tristate storeData(bool dontAsk=false)
virtual void propertySetSwitched()
virtual KoProperty::Set * propertySet()
virtual void parentDialogAttached()
void closing(bool &cancel)
emitted when the view is about to close
virtual TQSize preferredSizeHint(const TQSize &otherSize)
virtual void updateActions(bool activated)
3-state logical type with three values: true, false and cancelled and convenient operators.
bool hasParent(TQObject *par, TQObject *o)
KEXIUTILS_EXPORT void setWaitCursor(bool noDelay=false)
KEXIUTILS_EXPORT void removeWaitCursor()
KEXICORE_EXPORT TQString nameForViewMode(int m)
i18n'ed name of view mode m
@ TextViewMode
Also known as SQL View Mode.