diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
commit | 8362bf63dea22bbf6736609b0f49c152f975eb63 (patch) | |
tree | 0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kexi/widget/kexidataawareview.cpp | |
download | koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip |
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kexi/widget/kexidataawareview.cpp')
-rw-r--r-- | kexi/widget/kexidataawareview.cpp | 383 |
1 files changed, 383 insertions, 0 deletions
diff --git a/kexi/widget/kexidataawareview.cpp b/kexi/widget/kexidataawareview.cpp new file mode 100644 index 00000000..418f0aa1 --- /dev/null +++ b/kexi/widget/kexidataawareview.cpp @@ -0,0 +1,383 @@ +/* This file is part of the KDE project + Copyright (C) 2005-2007 Jaroslaw Staniek <js@iidea.pl> + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this program; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#include "kexidataawareview.h" + +#include <kexidataawareobjectiface.h> +#include <utils/kexisharedactionclient.h> +#include <core/keximainwindow.h> + +#include <qlayout.h> + +#include <kpopupmenu.h> + +KexiDataAwareView::KexiDataAwareView(KexiMainWindow *mainWin, QWidget *parent, const char *name) + : KexiViewBase(mainWin, parent, name) + , KexiSearchAndReplaceViewInterface() + , m_internalView(0) + , m_actionClient(0) + , m_dataAwareObject(0) +{ +} + +void KexiDataAwareView::init( QWidget* viewWidget, KexiSharedActionClient* actionClient, + KexiDataAwareObjectInterface* dataAwareObject, bool noDataAware ) +{ + m_internalView = viewWidget; + m_actionClient = actionClient; + m_dataAwareObject = dataAwareObject; + setViewWidget(m_internalView, true); + + if (!noDataAware) { + m_dataAwareObject->connectCellSelectedSignal(this, SLOT(slotCellSelected(int,int))); + + //! before closing - we'are accepting editing + connect(this, SIGNAL(closing(bool&)), this, SLOT(slotClosing(bool&))); + + //! updating actions on start/stop editing + m_dataAwareObject->connectRowEditStartedSignal(this, SLOT(slotUpdateRowActions(int))); + m_dataAwareObject->connectRowEditTerminatedSignal(this, SLOT(slotUpdateRowActions(int))); + m_dataAwareObject->connectReloadActionsSignal(this, SLOT(reloadActions())); + } + + QVBoxLayout *box = new QVBoxLayout(this); + box->addWidget(m_internalView); + + setMinimumSize(m_internalView->minimumSizeHint().width(), + m_internalView->minimumSizeHint().height()); + resize( preferredSizeHint( m_internalView->sizeHint() ) ); + setFocusProxy(m_internalView); + + if (!noDataAware) { + initActions(); + reloadActions(); + } +} + +void KexiDataAwareView::initActions() +{ + plugSharedAction("edit_delete_row", this, SLOT(deleteCurrentRow())); + m_actionClient->plugSharedAction(sharedAction("edit_delete_row")); //for proper shortcut + + plugSharedAction("edit_delete", this, SLOT(deleteAndStartEditCurrentCell())); + m_actionClient->plugSharedAction(sharedAction("edit_delete")); //for proper shortcut + + plugSharedAction("edit_edititem", this, SLOT(startEditOrToggleValue())); + m_actionClient->plugSharedAction(sharedAction("edit_edititem")); //for proper shortcut + + plugSharedAction("data_save_row", this, SLOT(acceptRowEdit())); + m_actionClient->plugSharedAction(sharedAction("data_save_row")); //for proper shortcut + + plugSharedAction("data_cancel_row_changes", this, SLOT(cancelRowEdit())); + m_actionClient->plugSharedAction(sharedAction("data_cancel_row_changes")); //for proper shortcut + + if (m_dataAwareObject->isSortingEnabled()) { + plugSharedAction("data_sort_az", this, SLOT(sortAscending())); + plugSharedAction("data_sort_za", this, SLOT(sortDescending())); + } + + m_actionClient->plugSharedAction(sharedAction("edit_insert_empty_row")); //for proper shortcut + + setAvailable("data_sort_az", m_dataAwareObject->isSortingEnabled()); + setAvailable("data_sort_za", m_dataAwareObject->isSortingEnabled()); +//! \todo plugSharedAction("data_filter", this, SLOT(???())); + + plugSharedAction("data_go_to_first_record", this, SLOT(slotGoToFirstRow())); + plugSharedAction("data_go_to_previous_record", this, SLOT(slotGoToPreviusRow())); + plugSharedAction("data_go_to_next_record", this, SLOT(slotGoToNextRow())); + plugSharedAction("data_go_to_last_record", this, SLOT(slotGoToLastRow())); + plugSharedAction("data_go_to_new_record", this, SLOT(slotGoToNewRow())); + +//! \todo update availability + setAvailable("data_go_to_first_record", true); + setAvailable("data_go_to_previous_record", true); + setAvailable("data_go_to_next_record", true); + setAvailable("data_go_to_last_record", true); + setAvailable("data_go_to_new_record", true); + + plugSharedAction("edit_copy", this, SLOT(copySelection())); + m_actionClient->plugSharedAction(sharedAction("edit_copy")); //for proper shortcut + + plugSharedAction("edit_cut", this, SLOT(cutSelection())); + m_actionClient->plugSharedAction(sharedAction("edit_cut")); //for proper shortcut + + plugSharedAction("edit_paste", this, SLOT(paste())); + m_actionClient->plugSharedAction(sharedAction("edit_paste")); //for proper shortcut + +// plugSharedAction("edit_find", this, SLOT(editFind())); +// m_actionClient->plugSharedAction(sharedAction("edit_find")); //for proper shortcut + +// plugSharedAction("edit_findnext", this, SLOT(editFindNext())); +// m_actionClient->plugSharedAction(sharedAction("edit_findnext")); //for proper shortcut + +// plugSharedAction("edit_findprevious", this, SLOT(editFindPrevious())); +// m_actionClient->plugSharedAction(sharedAction("edit_findprev")); //for proper shortcut + +//! @todo plugSharedAction("edit_replace", this, SLOT(editReplace())); +//! @todo m_actionClient->plugSharedAction(sharedAction("edit_replace")); //for proper shortcut + +// setAvailable("edit_find", true); +// setAvailable("edit_findnext", true); +// setAvailable("edit_findprevious", true); +//! @todo setAvailable("edit_replace", true); +} + +void KexiDataAwareView::slotUpdateRowActions(int row) +{ + const bool ro = m_dataAwareObject->isReadOnly(); +// const bool inserting = m_dataAwareObject->isInsertingEnabled(); + const bool deleting = m_dataAwareObject->isDeleteEnabled(); + const bool emptyInserting = m_dataAwareObject->isEmptyRowInsertingEnabled(); + const bool editing = m_dataAwareObject->rowEditing(); + const bool sorting = m_dataAwareObject->isSortingEnabled(); + const int rows = m_dataAwareObject->rows(); + + setAvailable("edit_cut", !ro); + setAvailable("edit_paste", !ro); + setAvailable("edit_delete", !ro); // && !(inserting && row==rows)); + setAvailable("edit_delete_row", !ro && !(deleting && row==rows)); + setAvailable("edit_insert_empty_row", !ro && emptyInserting); + setAvailable("edit_clear_table", !ro && deleting && rows>0); + setAvailable("data_save_row", editing); + setAvailable("data_cancel_row_changes", editing); + setAvailable("data_sort_az", sorting); + setAvailable("data_sort_za", sorting); +} + +QWidget* KexiDataAwareView::mainWidget() +{ + return m_internalView; +} + +QSize KexiDataAwareView::minimumSizeHint() const +{ + return m_internalView ? m_internalView->minimumSizeHint() : QSize(0,0);//KexiViewBase::minimumSizeHint(); +} + +QSize KexiDataAwareView::sizeHint() const +{ + return m_internalView ? m_internalView->sizeHint() : QSize(0,0);//KexiViewBase::sizeHint(); +} + +void KexiDataAwareView::updateActions(bool activated) +{ + setAvailable("data_sort_az", m_dataAwareObject->isSortingEnabled()); + setAvailable("data_sort_za", m_dataAwareObject->isSortingEnabled()); + KexiViewBase::updateActions(activated); +} + +void KexiDataAwareView::reloadActions() +{ +// m_view->initActions(guiClient()->actionCollection()); +//warning FIXME Move this to the table part +/* + kdDebug()<<"INIT ACTIONS***********************************************************************"<<endl; + new KAction(i18n("Filter"), "filter", 0, this, SLOT(filter()), actionCollection(), "tablepart_filter"); + setXMLFile("kexidatatableui.rc"); +*/ + m_dataAwareObject->contextMenu()->clear(); + + plugSharedAction("edit_cut", m_dataAwareObject->contextMenu()); + plugSharedAction("edit_copy", m_dataAwareObject->contextMenu()); + plugSharedAction("edit_paste", m_dataAwareObject->contextMenu()); + + bool separatorNeeded = true; + + unplugSharedAction("edit_clear_table"); + plugSharedAction("edit_clear_table", this, SLOT(deleteAllRows())); + + if (m_dataAwareObject->isEmptyRowInsertingEnabled()) { + unplugSharedAction("edit_insert_empty_row"); + plugSharedAction("edit_insert_empty_row", m_internalView, SLOT(insertEmptyRow())); + if (separatorNeeded) + m_dataAwareObject->contextMenu()->insertSeparator(); + plugSharedAction("edit_insert_empty_row", m_dataAwareObject->contextMenu()); + } + else { + unplugSharedAction("edit_insert_empty_row"); + unplugSharedAction("edit_insert_empty_row", m_dataAwareObject->contextMenu()); + } + + if (m_dataAwareObject->isDeleteEnabled()) { + if (separatorNeeded) + m_dataAwareObject->contextMenu()->insertSeparator(); + plugSharedAction("edit_delete", m_dataAwareObject->contextMenu()); + plugSharedAction("edit_delete_row", m_dataAwareObject->contextMenu()); + } + else { + unplugSharedAction("edit_delete_row", m_dataAwareObject->contextMenu()); + unplugSharedAction("edit_delete_row", m_dataAwareObject->contextMenu()); + } + //if (!m_view->isSortingEnabled()) { +// unplugSharedAction("data_sort_az"); +// unplugSharedAction("data_sort_za"); + //} + setAvailable("data_sort_az", m_dataAwareObject->isSortingEnabled()); + setAvailable("data_sort_za", m_dataAwareObject->isSortingEnabled()); + + slotCellSelected( m_dataAwareObject->currentColumn(), m_dataAwareObject->currentRow() ); +} + +void KexiDataAwareView::slotCellSelected(int /*col*/, int row) +{ + slotUpdateRowActions(row); +} + +void KexiDataAwareView::deleteAllRows() +{ + m_dataAwareObject->deleteAllRows(true/*ask*/, true/*repaint*/); +} + +void KexiDataAwareView::deleteCurrentRow() +{ + m_dataAwareObject->deleteCurrentRow(); +} + +void KexiDataAwareView::deleteAndStartEditCurrentCell() +{ + m_dataAwareObject->deleteAndStartEditCurrentCell(); +} + +void KexiDataAwareView::startEditOrToggleValue() +{ + m_dataAwareObject->startEditOrToggleValue(); +} + +bool KexiDataAwareView::acceptRowEdit() +{ + return m_dataAwareObject->acceptRowEdit(); +} + +void KexiDataAwareView::slotClosing(bool& cancel) +{ + if (!acceptRowEdit()) + cancel = true; +} + +void KexiDataAwareView::cancelRowEdit() +{ + m_dataAwareObject->cancelRowEdit(); +} + +void KexiDataAwareView::sortAscending() +{ + m_dataAwareObject->sortAscending(); +} + +void KexiDataAwareView::sortDescending() +{ + m_dataAwareObject->sortDescending(); +} + +void KexiDataAwareView::copySelection() +{ + m_dataAwareObject->copySelection(); +} + +void KexiDataAwareView::cutSelection() +{ + m_dataAwareObject->cutSelection(); +} + +void KexiDataAwareView::paste() +{ + m_dataAwareObject->paste(); +} + +void KexiDataAwareView::slotGoToFirstRow() { m_dataAwareObject->selectFirstRow(); } +void KexiDataAwareView::slotGoToPreviusRow() { m_dataAwareObject->selectPrevRow(); } +void KexiDataAwareView::slotGoToNextRow() { m_dataAwareObject->selectNextRow(); } +void KexiDataAwareView::slotGoToLastRow() { m_dataAwareObject->selectLastRow(); } +void KexiDataAwareView::slotGoToNewRow() { m_dataAwareObject->addNewRecordRequested(); } + +bool KexiDataAwareView::setupFindAndReplace(QStringList& columnNames, QStringList& columnCaptions, + QString& currentColumnName) +{ + if (!dataAwareObject() || !dataAwareObject()->data()) + return false; + KexiTableViewColumn::List columns( dataAwareObject()->data()->columns ); + for (KexiTableViewColumn::ListIterator it(columns); it.current(); ++it) { + if (!it.current()->visible()) + continue; + columnNames.append( it.current()->field()->name() ); + columnCaptions.append( it.current()->captionAliasOrName() ); + } + + //update "look in" selection if there was any + const int currentColumnNumber = dataAwareObject()->currentColumn(); + if (currentColumnNumber!=-1) { + KexiTableViewColumn *col = columns.at( currentColumnNumber ); + if (col && col->field()) + currentColumnName = col->field()->name(); + } + return true; +} + +tristate KexiDataAwareView::find(const QVariant& valueToFind, + const KexiSearchAndReplaceViewInterface::Options& options, bool next) +{ + if (!dataAwareObject() || !dataAwareObject()->data()) + return cancelled; + +// const KexiDataAwareObjectInterface::FindAndReplaceOptions options(dlg->options()); +/* if (res == KexiFindDialog::Find) {*/ +// QVariant valueToFind(dlg->valueToFind()); + return dataAwareObject()->find( valueToFind, options, next ); +/* +//! @todo result... + + } + else if (res == KexiFindDialog::Replace) { +//! @todo + } + else if (res == KexiFindDialog::ReplaceAll) { +//! @todo + } + */ +} + +tristate KexiDataAwareView::findNextAndReplace(const QVariant& valueToFind, + const QVariant& replacement, + const KexiSearchAndReplaceViewInterface::Options& options, bool replaceAll) +{ + if (!dataAwareObject() || !dataAwareObject()->data()) + return cancelled; + + return dataAwareObject()->findNextAndReplace(valueToFind, replacement, options, replaceAll); +} + +/* +void KexiDataAwareView::editFindNext() +{ + //! @todo reuse code from editFind() +} + +void KexiDataAwareView::editFindPrevious() +{ + //! @todo reuse code from editFind() +} + +void KexiDataAwareView::editReplace() +{ + //! @todo editReplace() + //! @todo reuse code from editFind() + // When ready, update KexiDataAwareView::initActions() and KexiMainWindowImpl +}*/ + +#include "kexidataawareview.moc" |