22#include "kexipartinfo.h"
23#include "kexipartitem.h"
24#include "kexistaticpart.h"
25#include "kexidialogbase.h"
26#include "kexiviewbase.h"
28#include "kexipartguiclient.h"
29#include "keximainwindow.h"
33#include <kexidb/connection.h>
34#include <kexiutils/identifier.h>
35#include <kexiutils/utils.h>
37#include <tqwidgetstack.h>
39#include <kiconloader.h>
41#include <tdemessagebox.h>
49 : instanceActionsInitialized(false)
55 int supportedViewModes, int viewMode)
64 TQString singleStatusString( dlg->singleStatusString() );
65 if (!singleStatusString.isEmpty())
66 singleStatusString.prepend(TQString( "\n\n")+i18n( "Details:")+ " ");
67 if (KMessageBox::No==KMessageBox::questionYesNo(0,
68 ((viewMode == Kexi::DesignViewMode)
69 ? i18n( "Object \"%1\" could not be opened in Design View.").arg(item.name())
70 : i18n( "Object could not be opened in Data View."))+ "\n"
71 + i18n( "Do you want to open it in Text View?") + singleStatusString, 0,
72 KStdGuiItem::open(), KStdGuiItem::cancel()))
82 bool instanceActionsInitialized : 1;
88using namespace KexiPart;
90Part::Part(TQObject *parent, const char *name, const TQStringList &)
91: TQObject(parent, name)
93, m_registeredPartID(-1)
104: TQObject(parent, "StaticPart")
106, m_registeredPartID(-1)
107, d(new PartPrivate())
126 m_guiClient = new GUIClient(m_mainWin, this, false, "part");
129 TDEAction *act = new TDEAction( m_names[ "instanceCaption"]+ "...", info()->createItemIcon(), 0, this,
130 TQ_SLOT(slotCreate()), m_mainWin->actionCollection(),
131 KexiPart::nameForCreateAction(*info()));
132 act->plug( m_mainWin->findPopupMenu( "insert") );
137 m_mainWin->guiFactory()->addClient(m_guiClient);
145 for ( int mode = 1; mode <= 0x01000; mode <<= 1) {
166 KXMLGUIClient *cli = m_instanceGuiClients[viewMode];
167 return cli ? cli->actionCollection() : 0;
171 const TQString &pix_name, const TDEShortcut &cut, const char *name,
172 const char *subclassName)
176 kdDebug() << "KexiPart::createSharedAction(): no gui client for mode " << mode << "!" << endl;
184 const TQString &pix_name, const TDEShortcut &cut, const char *name,
185 const char *subclassName)
190 m_guiClient->actionCollection(), subclassName);
194 const TQString &pix_name, const TDEShortcut &cut, const char *name)
200 const TQString &pix_name, const TDEShortcut &cut, const char *name)
222void Part::setActionAvailable( const char *action_name, bool avail)
224 TQIntDictIterator<GUIClient> it( m_instanceGuiClients );
225 for (;it.current();++it) {
226 TDEAction *act = it.current()->actionCollection()->action(action_name);
228 act->setEnabled(avail);
233 m_mainWin->setActionAvailable(action_name, avail);
237 TQMap<TQString,TQString>* staticObjectArgs)
240 if (!d->instanceActionsInitialized) {
241 initInstanceActions();
242 d->instanceActionsInitialized = true;
245 m_status.clearStatus();
256 dlg->updateCaption();
259 sdata.setName( item.name() );
260 sdata.setCaption( item.caption() );
261 sdata.setDescription( item.description() );
268 dlg-> setId(item.identifier());
270 dlg->setIcon( SmallIcon( dlg-> itemIcon() ) );
271 if (dlg->mdiParent())
272 dlg->mdiParent()->setIcon( *dlg->icon() );
275 dlg->stack()->setIcon( *dlg->icon() );
280 dlg->m_schemaData = loadSchemaData(dlg, sdata, viewMode);
281 if (!dlg->m_schemaData) {
283 if ( false == d->askForOpeningInTextMode(dlg, item, dlg->m_supportedViewModes, viewMode)) {
288 dlg->m_schemaData = loadSchemaData(dlg, sdata, viewMode);
290 if (!dlg->m_schemaData) {
291 if (!m_status.error())
293 i18n( "Could not load object's definition."), i18n( "Object design may be corrupted."));
296 .arg(item.name()), TQString()) );
304 bool switchingFailed = false;
309 = d->askForOpeningInTextMode(dlg, item, dlg->m_supportedViewModes, viewMode);
313 if ( true == askForOpeningInTextModeRes) {
314 delete dlg->m_schemaData;
320 else if ( false == askForOpeningInTextModeRes) {
321 delete dlg->m_schemaData;
327 switchingFailed = true;
330 switchingFailed = true;
332 if (switchingFailed) {
333 m_status = dlg->status();
338 dlg->registerDialog();
341 if (dlg->mdiParent() && dlg->mdiParent()->state()==KMdiChildFrm::Normal)
353void Part::slotCreate()
355 emit newObjectRequest( m_info );
366bool Part::loadDataBlock( KexiDialogBase *dlg, TQString &dataString, const TQString& dataID)
370 i18n( "Could not load object's data."), i18n( "Data identifier: \"%1\".").arg(dataID) );
371 m_status.append( *dlg );
377void Part::initPartActions()
381void Part::initInstanceActions()
401 return TQString(englishMessage).startsWith( ":") ? TQString() : englishMessage;
417 return m_names[ "instanceCaption"];
431GUIClient::GUIClient( KexiMainWindow *win, Part* part, bool partInstanceClient, const char* nameSuffix)
433 (part->info()->objectName()
434 + (nameSuffix ? TQString( ":%1").arg(nameSuffix) : TQString())).latin1() )
438 setXMLFile(TQString::fromLatin1( "kexi")+part->info()-> objectName()
439 + "part"+(partInstanceClient? "inst": "")+ "ui.rc");
451#include "kexipart.moc"
Provides database connection, allowing queries and data modification.
bool removeObject(uint objId)
tristate loadDataBlock(int objectID, TQString &dataString, const TQString &dataID)
Base class for child window of Kexi's main application window.
KexiDialogTempData * tempData() const
virtual TQSize sizeHint() const
virtual TQSize minimumSizeHint() const
virtual TQString itemIcon()
KexiViewBase * selectedView() const
tristate switchToViewMode(int newViewMode)
Privides temporary data shared between KexiDialogBase's views (KexiView's)
bool proposeOpeningInTextViewModeBecauseOfProblems
Kexi's main window interface This interface is implemented by KexiMainWindowImpl class.
virtual KexiProject * project()=0 Project data of currently opened project or NULL if no project here yet.
int projectPartID() const
TQString objectName() const
Information about a single object that can be instantiated using Kexi Part.
The main class for kexi frontend parts like tables, queries, forms and reports.
void createGUIClients(KexiMainWindow *win) Creates GUICLients for this part, attached to win This method is called from KexiMainWindow.
bool m_newObjectsAreDirty
TDEAction * createSharedAction(int mode, const TQString &text, const TQString &pix_name, const TDEShortcut &cut, const char *name, const char *subclassName=0)
Part(TQObject *parent, const char *name, const TQStringList &)
TDEAction * createSharedPartAction(const TQString &text, const TQString &pix_name, const TDEShortcut &cut, const char *name, const char *subclassName=0)
virtual void setupCustomPropertyPanelTabs(KTabWidget *tab, KexiMainWindow *mainWin)
KexiDialogBase * openInstance(KexiMainWindow *win, KexiPart::Item &item, int viewMode=Kexi::DataViewMode, TQMap< TQString, TQString > *staticObjectArgs=0)
virtual KexiDialogTempData * createTempData(KexiDialogBase *dialog)
TQString instanceCaption() const
virtual bool remove(KexiMainWindow *win, KexiPart::Item &item)
TQMap< TQString, TQString > m_names Set of i18n'd action names for, initialised on KexiPart::Part subclass ctor The names are useful beca...
TDEActionCollection * actionCollectionForMode(int viewMode) const
virtual tristate rename(KexiMainWindow *win, KexiPart::Item &item, const TQString &newName)
TDEAction * createSharedToggleAction(int mode, const TQString &text, const TQString &pix_name, const TDEShortcut &cut, const char *name)
GUIClient * instanceGuiClient(int mode=0) const
TDEAction * createSharedPartToggleAction(const TQString &text, const TQString &pix_name, const TDEShortcut &cut, const char *name)
TQCString instanceName() const
int m_supportedUserViewModes
virtual TQString i18nMessage(const TQCString &englishMessage, KexiDialogBase *dlg) const
Information about a static Kexi Part (plugin).
KexiProjectData * data() const
KexiDB::Connection * dbConnection() const
TDEAction * createSharedAction(const TQString &text, const TQString &pix_name, const TDEShortcut &cut, const char *name, TDEActionCollection *col=0, const char *subclassName=0)
3-state logical type with three values: true, false and cancelled and convenient operators.
KEXIUTILS_EXPORT TQString string2Identifier(const TQString &s)
KEXICORE_EXPORT TQString nameForViewMode(int m) i18n'ed name of view mode m
@ TextViewMode Also known as SQL View Mode.
@ AllViewModes Usable primarily in KexiPart::initInstanceActions()
|