00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "kexibrowser.h"
00022 #include "kexibrowser_p.h"
00023 #include "kexibrowseritem.h"
00024
00025 #include <qheader.h>
00026 #include <qpoint.h>
00027 #include <qpixmapcache.h>
00028 #include <qtoolbutton.h>
00029 #include <qtooltip.h>
00030 #include <qwhatsthis.h>
00031
00032 #include <kapplication.h>
00033 #include <kiconloader.h>
00034 #include <kdebug.h>
00035 #include <klocale.h>
00036 #include <kpopupmenu.h>
00037 #include <klistview.h>
00038 #include <kmessagebox.h>
00039 #include <klineedit.h>
00040 #include <kimageeffect.h>
00041 #include <kconfig.h>
00042
00043 #include <kexi.h>
00044 #include <kexipart.h>
00045 #include <kexipartinfo.h>
00046 #include <kexipartitem.h>
00047 #include <kexiproject.h>
00048 #include <kexidialogbase.h>
00049 #include <keximainwindow.h>
00050 #include <kexiutils/identifier.h>
00051 #include <widget/utils/kexiflowlayout.h>
00052 #include <widget/kexismalltoolbutton.h>
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070 KexiBrowser::KexiBrowser(KexiMainWindow *mainWin)
00071 : QWidget(mainWin, "KexiBrowser")
00072 , m_mainWin(mainWin)
00073 , m_actions( new KActionCollection(this) )
00074 , m_baseItems(199, false)
00075 , m_normalItems(199)
00076 , m_prevSelectedPart(0)
00077 , m_singleClick(false)
00078
00079 , m_readOnly(false)
00080
00081 {
00082 QVBoxLayout *lyr = new QVBoxLayout(this);
00083 KexiFlowLayout *buttons_flyr = new KexiFlowLayout(lyr);
00084
00085
00086 m_list = new KexiBrowserListView(this);
00087 lyr->addWidget(m_list);
00088 m_list->installEventFilter(this);
00089
00090 m_list->renameLineEdit()->installEventFilter(this);
00091 connect( kapp, SIGNAL( settingsChanged(int) ), SLOT( slotSettingsChanged(int) ) );
00092 slotSettingsChanged(0);
00093
00094
00095 m_deleteAction = new KAction(i18n("&Delete"), "editdelete", 0,
00096 this, SLOT(slotRemove()), m_actions, "edit_delete");
00098 m_deleteAction->setToolTip(i18n("&Delete").replace("&",""));
00099 m_renameAction = new KAction(i18n("&Rename"), "", 0,
00100 this, SLOT(slotRename()), m_actions, "edit_rename");
00101 #ifdef KEXI_SHOW_UNIMPLEMENTED
00102
00103
00104
00105 #endif
00106
00107 setCaption(i18n("Project Navigator"));
00108 setIcon(*mainWin->icon());
00109
00110 m_list->header()->hide();
00111 m_list->addColumn("");
00112 m_list->setShowToolTips(true);
00113 m_list->setRootIsDecorated(true);
00114 m_list->setSorting(0);
00115 m_list->sort();
00116 m_list->setAllColumnsShowFocus(true);
00117 m_list->setTooltipColumn(0);
00118 m_list->renameLineEdit()->setValidator( new KexiUtils::IdentifierValidator(this) );
00119 m_list->setResizeMode(QListView::LastColumn);
00120
00121 connect(m_list, SIGNAL(contextMenu(KListView *, QListViewItem *, const QPoint &)),
00122 this, SLOT(slotContextMenu(KListView*, QListViewItem *, const QPoint&)));
00123 connect(m_list, SIGNAL(selectionChanged(QListViewItem*)), this,
00124 SLOT(slotSelectionChanged(QListViewItem*)));
00125
00126 KConfig *config = kapp->config();
00127 config->setGroup("MainWindow");
00128 if (config->readBoolEntry("SingleClickOpensItem", false)) {
00129 connect(m_list, SIGNAL(executed(QListViewItem*)), this,
00130 SLOT(slotExecuteItem(QListViewItem*)));
00131 }
00132 else {
00133 connect(m_list, SIGNAL(doubleClicked(QListViewItem*)), this,
00134 SLOT(slotExecuteItem(QListViewItem*)));
00135 m_list->enableExecuteArea = false;
00136 }
00137
00138
00139 m_itemPopup = new KPopupMenu(this, "itemPopup");
00140 m_itemPopupTitle_id = m_itemPopup->insertTitle("");
00141 m_openAction = new KAction(i18n("&Open"), "fileopen", 0, this,
00142 SLOT(slotOpenObject()), this, "open_object");
00143 m_openAction->setToolTip(i18n("Open object"));
00144 m_openAction->setWhatsThis(i18n("Opens object selected in the list"));
00145 m_openAction->plug(m_itemPopup);
00146 m_openAction_id = m_itemPopup->idAt(m_itemPopup->count()-1);
00147
00148 KexiSmallToolButton *btn = new KexiSmallToolButton(this, m_openAction);
00149 buttons_flyr->add(btn);
00150
00151 m_designAction = new KAction(i18n("&Design"), "edit", 0, this,
00152 SLOT(slotDesignObject()), this, "design_object");
00153 m_designAction->setToolTip(i18n("Design object"));
00154 m_designAction->setWhatsThis(i18n("Starts designing of the object selected in the list"));
00155 m_designAction->plug(m_itemPopup);
00156 m_designAction_id = m_itemPopup->idAt(m_itemPopup->count()-1);
00157
00158 btn = new KexiSmallToolButton(this, m_designAction);
00159 buttons_flyr->add(btn);
00160
00161 m_editTextAction = new KAction(i18n("Open in &Text View"), "", 0, this,
00162 SLOT(slotEditTextObject()), this, "editText_object");
00163 m_editTextAction->setToolTip(i18n("Open object in text view"));
00164 m_editTextAction->setWhatsThis(i18n("Opens selected object in the list in text view"));
00165 m_editTextAction->plug(m_itemPopup);
00166 m_editTextAction_id = m_itemPopup->idAt(m_itemPopup->count()-1);
00167
00168 m_newObjectAction = new KAction("", "filenew", 0, this, SLOT(slotNewObject()), this, "new_object");
00169 m_newObjectAction->plug(m_itemPopup);
00170
00171
00172
00173 m_newObjectToolButton = new KexiSmallToolButton(this, "", QIconSet(), "new_object");
00174 m_newObjectPopup = new KPopupMenu(this, "newObjectPopup");
00175 connect(m_newObjectPopup, SIGNAL(aboutToShow()), this, SLOT(slotNewObjectPopupAboutToShow()));
00176
00177
00178 m_newObjectToolButton->setPopup(m_newObjectPopup);
00179 m_newObjectToolButton->setPopupDelay(QApplication::startDragTime());
00180 connect(m_newObjectToolButton, SIGNAL(clicked()), this, SLOT(slotNewObject()));
00181 buttons_flyr->add(m_newObjectToolButton);
00182
00183 m_deleteObjectToolButton = new KexiSmallToolButton(this, m_deleteAction);
00184 m_deleteObjectToolButton->setTextLabel("");
00185 buttons_flyr->add(m_deleteObjectToolButton);
00186
00187 m_itemPopup->insertSeparator();
00188
00189 #ifdef KEXI_SHOW_UNIMPLEMENTED
00190
00191
00192 m_itemPopup->insertSeparator();
00193 #endif
00194
00195 m_executeAction = new KAction(i18n("Execute"), "player_play", 0, this,
00196 SLOT(slotExecuteObject()), this, "data_execute");
00197 m_executeAction->plug(m_itemPopup);
00198 m_executeAction_id = m_itemPopup->idAt(m_itemPopup->count()-1);
00199
00200 m_exportActionMenu = new KActionMenu(i18n("Export"));
00201 m_dataExportAction = new KAction(i18n("Export->To File as Data &Table... ", "To &File as Data Table..."),
00202 "table", 0, this, SLOT(slotExportAsDataTable()), this, "exportAsDataTable");
00203 m_dataExportAction->setWhatsThis(
00204 i18n("Exports data from the currently selected table or query data to a file."));
00205 m_exportActionMenu->insert( m_dataExportAction );
00206 m_exportActionMenu->plug(m_itemPopup);
00207 m_exportActionMenu_id = m_exportActionMenu->menuId(0);
00208 m_itemPopup->insertSeparator();
00209 m_exportActionMenu_id_sep = m_itemPopup->idAt(m_itemPopup->count()-1);
00210
00211 m_printAction = new KAction(i18n("&Print..."), "fileprint", 0, this,
00212 SLOT(slotPrintItem()), this, "printItem");
00213 m_printAction->setWhatsThis(
00214 i18n("Prints data from the currently selected table or query."));
00215 m_printAction->plug(m_itemPopup);
00216 m_printAction_id = m_itemPopup->idAt(m_itemPopup->count()-1);
00217 m_pageSetupAction = new KAction(i18n("Page Setup..."), "", 0, this,
00218 SLOT(slotPageSetupForItem()), this, "pageSetupForItem");
00219 m_pageSetupAction->setWhatsThis(
00220 i18n("Shows page setup for printing the active table or query."));
00221 m_pageSetupAction->plug(m_itemPopup);
00222 m_pageSetupAction_id = m_itemPopup->idAt(m_itemPopup->count()-1);
00223 m_itemPopup->insertSeparator();
00224 m_pageSetupAction_id_sep = m_itemPopup->idAt(m_itemPopup->count()-1);
00225
00226
00227 m_renameAction->plug(m_itemPopup);
00228
00229
00230
00231
00232 m_deleteAction->plug(m_itemPopup);
00233
00234
00235 m_partPopup = new KPopupMenu(this, "partPopup");
00236 m_partPopupTitle_id = m_partPopup->insertTitle("");
00237 m_newObjectAction->plug(m_partPopup);
00238 #ifdef KEXI_SHOW_UNIMPLEMENTED
00239 m_partPopup->insertSeparator();
00240 plugSharedAction("edit_paste", m_partPopup);
00241 #endif
00242 }
00243
00244 KexiBrowser::~KexiBrowser()
00245 {
00246 }
00247
00248 void
00249 KexiBrowser::addGroup(KexiPart::Info& info)
00250 {
00251 if(!info.isVisibleInNavigator())
00252 return;
00253
00254 KexiBrowserItem *item = new KexiBrowserItem(m_list, &info);
00255 m_baseItems.insert(info.mimeType().lower(), item);
00256
00257
00258 }
00259
00260 void
00261 KexiBrowser::addItem(KexiPart::Item& item)
00262 {
00263
00264 KexiBrowserItem *parent = item.mimeType().isEmpty() ? 0 : m_baseItems.find(item.mimeType().lower());
00265 if (!parent)
00266 return;
00267
00268
00269 KexiBrowserItem *bitem = new KexiBrowserItem(parent, parent->info(), &item);
00270 m_normalItems.insert(item.identifier(), bitem);
00271 }
00272
00273 void
00274 KexiBrowser::slotRemoveItem(const KexiPart::Item &item)
00275 {
00276 KexiBrowserItem *to_remove=m_normalItems.take(item.identifier());
00277 if (!to_remove)
00278 return;
00279
00280 KexiBrowserItem *it = static_cast<KexiBrowserItem*>(m_list->selectedItem());
00281
00282 QListViewItem *new_item_to_select = 0;
00283 if (it==to_remove) {
00284 new_item_to_select = it->itemBelow();
00285 if (!new_item_to_select || new_item_to_select->parent()!=it->parent()) {
00286 new_item_to_select = it->itemAbove();
00287 }
00288 }
00289 delete to_remove;
00290
00291 if (new_item_to_select)
00292 m_list->setSelected(new_item_to_select, true);
00293 }
00294
00295 void
00296 KexiBrowser::slotContextMenu(KListView* , QListViewItem *item, const QPoint &pos)
00297 {
00298 if(!item)
00299 return;
00300 KexiBrowserItem *bit = static_cast<KexiBrowserItem*>(item);
00301 KPopupMenu *pm;
00302 if (bit->item()) {
00303 pm = m_itemPopup;
00304
00305 QString title_text = bit->text(0).stripWhiteSpace();
00306 KexiBrowserItem *par_it = static_cast<KexiBrowserItem*>(bit->parent());
00307 KexiPart::Part* par_part = 0;
00308 if (par_it && par_it->info() && ((par_part = Kexi::partManager().part(par_it->info()))) && !par_part->instanceCaption().isEmpty()) {
00309
00310 title_text += (" : " + par_part->instanceCaption());
00311 }
00312 pm->changeTitle(m_itemPopupTitle_id, *bit->pixmap(0), title_text);
00313 }
00314 else {
00315 pm = m_partPopup;
00316 QString title_text = bit->text(0).stripWhiteSpace();
00317 pm->changeTitle(m_partPopupTitle_id, *bit->pixmap(0), title_text);
00318
00319
00320
00321
00322
00323
00324 m_list->setCurrentItem(item);
00325 m_list->repaintItem(item);
00326 }
00327 pm->exec(pos);
00328 }
00329
00330 void
00331 KexiBrowser::slotExecuteItem(QListViewItem *vitem)
00332 {
00333
00334 KexiBrowserItem *it = static_cast<KexiBrowserItem*>(vitem);
00335 if (!it)
00336 return;
00337 if (!it->item() && !m_singleClick ) {
00338 m_list->setOpen( vitem, !vitem->isOpen() );
00339 return;
00340 }
00341 emit openOrActivateItem( it->item(), Kexi::DataViewMode );
00342 }
00343
00344 void
00345 KexiBrowser::slotSelectionChanged(QListViewItem* i)
00346 {
00347 KexiBrowserItem *it = static_cast<KexiBrowserItem*>(i);
00348 if (!it)
00349 return;
00350 KexiPart::Part* part = Kexi::partManager().part(it->info());
00351 if (!part) {
00352 it = static_cast<KexiBrowserItem*>(it->parent());
00353 if (it) {
00354 part = Kexi::partManager().part(it->info());
00355 }
00356 }
00357
00358 const bool gotitem = it && it->item();
00359
00360
00361 m_deleteAction->setEnabled(gotitem && !m_readOnly);
00362 m_deleteObjectToolButton->setEnabled(gotitem && !m_readOnly);
00363 #ifdef KEXI_SHOW_UNIMPLEMENTED
00364
00365
00366
00367 #endif
00368
00369 m_openAction->setEnabled(gotitem && part && (part->supportedViewModes() & Kexi::DataViewMode));
00370 m_designAction->setEnabled(gotitem && part && (part->supportedViewModes() & Kexi::DesignViewMode));
00371 m_editTextAction->setEnabled(gotitem && part && (part->supportedViewModes() & Kexi::TextViewMode));
00372
00373 m_itemPopup->setItemVisible(m_openAction_id, m_openAction->isEnabled());
00374 m_itemPopup->setItemVisible(m_designAction_id, m_designAction->isEnabled());
00375 m_itemPopup->setItemVisible(m_editTextAction_id, part && m_editTextAction->isEnabled());
00376 m_itemPopup->setItemVisible(m_executeAction_id, gotitem && it->info()->isExecuteSupported());
00377 m_itemPopup->setItemVisible(m_exportActionMenu_id, gotitem && it->info()->isDataExportSupported());
00378 m_itemPopup->setItemVisible(m_exportActionMenu_id_sep, gotitem && it->info()->isDataExportSupported());
00379 m_itemPopup->setItemVisible(m_printAction_id, gotitem && it->info()->isPrintingSupported());
00380 m_itemPopup->setItemVisible(m_pageSetupAction_id, gotitem && it->info()->isPrintingSupported());
00381 m_itemPopup->setItemVisible(m_pageSetupAction_id_sep, gotitem && it->info()->isPrintingSupported());
00382
00383 if (m_prevSelectedPart != part) {
00384 m_prevSelectedPart = part;
00385 if (part) {
00386 m_newObjectAction->setText(i18n("&Create Object: %1...").arg( part->instanceCaption() ));
00387 m_newObjectAction->setIcon( part->info()->createItemIcon() );
00388
00389
00390 m_newObjectToolButton->setIconSet( part->info()->createItemIcon() );
00391 QToolTip::add(m_newObjectToolButton,
00392 i18n("Create object: %1").arg( part->instanceCaption().lower() ));
00393 QWhatsThis::add(m_newObjectToolButton,
00394 i18n("Creates a new object: %1").arg( part->instanceCaption().lower() ));
00395 } else {
00396 m_newObjectAction->setText(i18n("&Create Object..."));
00397
00398
00399 m_newObjectToolButton->setIconSet( "filenew" );
00400 QToolTip::add(m_newObjectToolButton, i18n("Create object"));
00401 QWhatsThis::add(m_newObjectToolButton, i18n("Creates a new object"));
00402 }
00403 }
00404 emit selectionChanged(it ? it->item() : 0);
00405 }
00406
00407 void KexiBrowser::installEventFilter ( const QObject * filterObj )
00408 {
00409 if (!filterObj)
00410 return;
00411 m_list->installEventFilter ( filterObj );
00412 QWidget::installEventFilter ( filterObj );
00413 }
00414
00415 bool KexiBrowser::eventFilter ( QObject *o, QEvent * e )
00416 {
00417 if (o==m_list && e->type()==QEvent::Resize) {
00418 kdDebug() << "resize!" << endl;
00419 }
00420 if (o==m_list->renameLineEdit()) {
00421 if (e->type()==QEvent::Hide)
00422 itemRenameDone();
00423 }
00424 else if (e->type()==QEvent::KeyPress) {
00425 QKeyEvent *ke = static_cast<QKeyEvent*>(e);
00426 if (ke->key()==Qt::Key_Enter || ke->key()==Qt::Key_Return) {
00427 if (0==(ke->state() & (Qt::ShiftButton|Qt::ControlButton|Qt::AltButton))) {
00428 QListViewItem *it = m_list->selectedItem();
00429 if (it)
00430 slotExecuteItem(it);
00431 }
00432 else if (Qt::ControlButton==(ke->state() & (Qt::ShiftButton|Qt::ControlButton|Qt::AltButton))) {
00433 slotDesignObject();
00434 }
00435 }
00436 }
00437 else if (e->type()==QEvent::AccelOverride) {
00438 QKeyEvent *ke = static_cast<QKeyEvent*>(e);
00439
00440 if (ke->key()==Key_Delete && ke->state()==NoButton) {
00441 slotRemove();
00442 ke->accept();
00443 return true;
00444 }
00445 if (ke->key()==Key_F2 && ke->state()==NoButton) {
00446 slotRename();
00447 ke->accept();
00448 return true;
00449 }
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462 }
00463 return false;
00464 }
00465
00466 void KexiBrowser::slotRemove()
00467 {
00468 if (!m_deleteAction->isEnabled())
00469 return;
00470 KexiBrowserItem *it = static_cast<KexiBrowserItem*>(m_list->selectedItem());
00471 if (!it || !it->item())
00472 return;
00473 emit removeItem( it->item() );
00474 }
00475
00476 void KexiBrowser::slotNewObject()
00477 {
00478 KexiBrowserItem *it = static_cast<KexiBrowserItem*>(m_list->selectedItem());
00479 if (!it || !it->info())
00480 return;
00481 emit newItem( it->info() );
00482 }
00483
00484 void KexiBrowser::slotOpenObject()
00485 {
00486 KexiBrowserItem *it = static_cast<KexiBrowserItem*>(m_list->selectedItem());
00487 if (!it || !it->item())
00488 return;
00489 emit openItem( it->item(), Kexi::DataViewMode );
00490 }
00491
00492 void KexiBrowser::slotDesignObject()
00493 {
00494 KexiBrowserItem *it = static_cast<KexiBrowserItem*>(m_list->selectedItem());
00495 if (!it || !it->item())
00496 return;
00497 emit openItem( it->item(), Kexi::DesignViewMode );
00498 }
00499
00500 void KexiBrowser::slotEditTextObject()
00501 {
00502 KexiBrowserItem *it = static_cast<KexiBrowserItem*>(m_list->selectedItem());
00503 if (!it || !it->item())
00504 return;
00505 emit openItem( it->item(), Kexi::TextViewMode );
00506 }
00507
00508 void KexiBrowser::slotCut()
00509 {
00510
00511
00512 }
00513
00514 void KexiBrowser::slotCopy()
00515 {
00516
00517
00518 }
00519
00520 void KexiBrowser::slotPaste()
00521 {
00522
00523
00524 }
00525
00526 void KexiBrowser::slotRename()
00527 {
00528 KexiBrowserItem *it = static_cast<KexiBrowserItem*>(m_list->selectedItem());
00529 if (it)
00530 m_list->rename(it, 0);
00531 }
00532
00533 void KexiBrowser::itemRenameDone()
00534 {
00535 KexiBrowserItem *it = static_cast<KexiBrowserItem*>(m_list->selectedItem());
00536 if (!it)
00537 return;
00538 QString txt = it->text(0).stripWhiteSpace();
00539 bool ok = it->item()->name().lower()!=txt.lower();
00540 if (ok) {
00541
00542 emit renameItem(it->item(), txt, ok);
00543 }
00544 if (!ok) {
00545 txt = it->item()->name();
00546 }
00547
00548 if (m_list->nameEndsWithAsterisk) {
00549 txt += "*";
00550 m_list->nameEndsWithAsterisk = false;
00551 }
00552 it->setText(0, txt);
00553 it->parent()->sort();
00554 setFocus();
00555 }
00556
00557 void KexiBrowser::setFocus()
00558 {
00559 if (!m_list->selectedItem() && m_list->firstChild())
00560 m_list->setSelected(m_list->firstChild(), true);
00561 m_list->setFocus();
00562 }
00563
00564 void KexiBrowser::updateItemName( KexiPart::Item& item, bool dirty )
00565 {
00566 KexiBrowserItem *bitem = m_normalItems[item.identifier()];
00567 if (!bitem)
00568 return;
00569 bitem->setText( 0, item.name() + (dirty ? "*" : "") );
00570 }
00571
00572 void KexiBrowser::slotSettingsChanged(int)
00573 {
00574 m_singleClick = KGlobalSettings::singleClick();
00575 }
00576
00577 void KexiBrowser::highlightItem(KexiPart::Item& item)
00578 {
00579 KexiBrowserItem *bitem = m_normalItems[item.identifier()];
00580 if (!bitem)
00581 return;
00582 m_list->setSelected(bitem, true);
00583 m_list->ensureItemVisible(bitem);
00584 m_list->setCurrentItem(bitem);
00585 }
00586
00587 void KexiBrowser::slotNewObjectPopupAboutToShow()
00588 {
00589 if (m_newObjectPopup->count()==0) {
00590
00591 KexiPart::PartInfoList *list = Kexi::partManager().partInfoList();
00592 for (KexiPart::PartInfoListIterator it(*list); it.current(); ++it) {
00593
00594 KAction *action = m_mainWin->actionCollection()->action(
00595 KexiPart::nameForCreateAction(*it.current()) );
00596 if (action) {
00597 action->plug(m_newObjectPopup);
00598 }
00599 else {
00601 }
00602 }
00603 }
00604 }
00605
00606 void KexiBrowser::slotExecuteObject()
00607 {
00608 KexiPart::Item* item = selectedPartItem();
00609 if (item)
00610 emit executeItem( item );
00611 }
00612
00613 void KexiBrowser::slotExportAsDataTable()
00614 {
00615 KexiPart::Item* item = selectedPartItem();
00616 if (item)
00617 emit exportItemAsDataTable( item );
00618 }
00619
00620 KexiPart::Item* KexiBrowser::selectedPartItem() const
00621 {
00622 KexiBrowserItem *it = static_cast<KexiBrowserItem*>(m_list->selectedItem());
00623 return it ? it->item() : 0;
00624 }
00625
00626 bool KexiBrowser::actionEnabled(const QCString& actionName) const
00627 {
00628 if (actionName=="project_export_data_table")
00629 return m_itemPopup->isItemVisible(m_exportActionMenu_id);
00630 kdWarning() << "KexiBrowser::actionEnabled() no such action: " << actionName << endl;
00631 return false;
00632 }
00633
00634 void KexiBrowser::slotPrintItem()
00635 {
00636 KexiPart::Item* item = selectedPartItem();
00637 if (item)
00638 emit printItem( item );
00639 }
00640
00641 void KexiBrowser::slotPageSetupForItem()
00642 {
00643 KexiPart::Item* item = selectedPartItem();
00644 if (item)
00645 emit pageSetupForItem( item );
00646 }
00647
00648
00649 void KexiBrowser::setReadOnly(bool set)
00650 {
00651 m_readOnly = set;
00652 m_deleteAction->setEnabled(!m_readOnly);
00653 m_renameAction->setEnabled(!m_readOnly);
00654 m_newObjectAction->setEnabled(!m_readOnly);
00655 m_newObjectPopup->setEnabled(!m_readOnly);
00656 m_newObjectToolButton->setEnabled(!m_readOnly);
00657 }
00658
00659 bool KexiBrowser::isReadOnly() const
00660 {
00661 return m_readOnly;
00662 }
00663
00664 void KexiBrowser::clear()
00665 {
00666 m_list->clear();
00667 }
00668
00669
00670 KexiBrowserListView::KexiBrowserListView(QWidget *parent)
00671 : KListView(parent, "KexiBrowserListView")
00672 , nameEndsWithAsterisk(false)
00673 , enableExecuteArea(true)
00674 {
00675 }
00676
00677 KexiBrowserListView::~KexiBrowserListView()
00678 {
00679 }
00680
00681 void KexiBrowserListView::rename(QListViewItem *item, int c)
00682 {
00683 if (renameLineEdit()->isVisible())
00684 return;
00685 KexiBrowserItem *it = static_cast<KexiBrowserItem*>(item);
00686 if (it->item() && c==0) {
00687
00688
00689
00690
00691 nameEndsWithAsterisk = item->text(0).endsWith("*");
00692 if (nameEndsWithAsterisk)
00693 item->setText(0, item->text(0).left(item->text(0).length()-1));
00694 KListView::rename(item, c);
00695 adjustColumn(0);
00696 }
00697 }
00698
00699 bool KexiBrowserListView::isExecuteArea( const QPoint& point )
00700 {
00701 return enableExecuteArea && KListView::isExecuteArea(point);
00702 }
00703
00704 #include "kexibrowser.moc"
00705 #include "kexibrowser_p.moc"