20#include "kexidataawareview.h"
22#include <kexidataawareobjectiface.h>
23#include <utils/kexisharedactionclient.h>
24#include <core/keximainwindow.h>
28#include <tdepopupmenu.h>
30KexiDataAwareView::KexiDataAwareView(
KexiMainWindow *mainWin, TQWidget *parent,
const char *name)
35 , m_dataAwareObject(0)
42 m_internalView = viewWidget;
43 m_actionClient = actionClient;
44 m_dataAwareObject = dataAwareObject;
45 setViewWidget(m_internalView,
true);
48 m_dataAwareObject->connectCellSelectedSignal(
this, TQ_SLOT(slotCellSelected(
int,
int)));
51 connect(
this, TQ_SIGNAL(
closing(
bool&)),
this, TQ_SLOT(slotClosing(
bool&)));
54 m_dataAwareObject->connectRowEditStartedSignal(
this, TQ_SLOT(slotUpdateRowActions(
int)));
55 m_dataAwareObject->connectRowEditTerminatedSignal(
this, TQ_SLOT(slotUpdateRowActions(
int)));
56 m_dataAwareObject->connectReloadActionsSignal(
this, TQ_SLOT(reloadActions()));
59 TQVBoxLayout *box =
new TQVBoxLayout(
this);
60 box->addWidget(m_internalView);
62 setMinimumSize(m_internalView->minimumSizeHint().width(),
63 m_internalView->minimumSizeHint().height());
65 setFocusProxy(m_internalView);
76 m_actionClient->plugSharedAction(
sharedAction(
"edit_delete_row"));
78 plugSharedAction(
"edit_delete",
this, TQ_SLOT(deleteAndStartEditCurrentCell()));
79 m_actionClient->plugSharedAction(
sharedAction(
"edit_delete"));
82 m_actionClient->plugSharedAction(
sharedAction(
"edit_edititem"));
85 m_actionClient->plugSharedAction(
sharedAction(
"data_save_row"));
88 m_actionClient->plugSharedAction(
sharedAction(
"data_cancel_row_changes"));
90 if (m_dataAwareObject->isSortingEnabled()) {
95 m_actionClient->plugSharedAction(
sharedAction(
"edit_insert_empty_row"));
97 setAvailable(
"data_sort_az", m_dataAwareObject->isSortingEnabled());
98 setAvailable(
"data_sort_za", m_dataAwareObject->isSortingEnabled());
101 plugSharedAction(
"data_go_to_first_record",
this, TQ_SLOT(slotGoToFirstRow()));
102 plugSharedAction(
"data_go_to_previous_record",
this, TQ_SLOT(slotGoToPreviusRow()));
103 plugSharedAction(
"data_go_to_next_record",
this, TQ_SLOT(slotGoToNextRow()));
104 plugSharedAction(
"data_go_to_last_record",
this, TQ_SLOT(slotGoToLastRow()));
115 m_actionClient->plugSharedAction(
sharedAction(
"edit_copy"));
118 m_actionClient->plugSharedAction(
sharedAction(
"edit_cut"));
121 m_actionClient->plugSharedAction(
sharedAction(
"edit_paste"));
141void KexiDataAwareView::slotUpdateRowActions(
int row)
143 const bool ro = m_dataAwareObject->
isReadOnly();
147 const bool editing = m_dataAwareObject->
rowEditing();
149 const int rows = m_dataAwareObject->
rows();
154 setAvailable(
"edit_delete_row", !ro && !(deleting && row==rows));
155 setAvailable(
"edit_insert_empty_row", !ro && emptyInserting);
156 setAvailable(
"edit_clear_table", !ro && deleting && rows>0);
163TQWidget* KexiDataAwareView::mainWidget()
165 return m_internalView;
168TQSize KexiDataAwareView::minimumSizeHint()
const
170 return m_internalView ? m_internalView->minimumSizeHint() : TQSize(0,0);
173TQSize KexiDataAwareView::sizeHint()
const
175 return m_internalView ? m_internalView->sizeHint() : TQSize(0,0);
180 setAvailable(
"data_sort_az", m_dataAwareObject->isSortingEnabled());
181 setAvailable(
"data_sort_za", m_dataAwareObject->isSortingEnabled());
185void KexiDataAwareView::reloadActions()
200 bool separatorNeeded =
true;
202 unplugSharedAction(
"edit_clear_table");
206 unplugSharedAction(
"edit_insert_empty_row");
207 plugSharedAction(
"edit_insert_empty_row", m_internalView, TQ_SLOT(insertEmptyRow()));
209 m_dataAwareObject->
contextMenu()->insertSeparator();
213 unplugSharedAction(
"edit_insert_empty_row");
214 unplugSharedAction(
"edit_insert_empty_row", m_dataAwareObject->contextMenu());
217 if (m_dataAwareObject->isDeleteEnabled()) {
219 m_dataAwareObject->contextMenu()->insertSeparator();
224 unplugSharedAction(
"edit_delete_row", m_dataAwareObject->contextMenu());
225 unplugSharedAction(
"edit_delete_row", m_dataAwareObject->contextMenu());
231 setAvailable(
"data_sort_az", m_dataAwareObject->isSortingEnabled());
232 setAvailable(
"data_sort_za", m_dataAwareObject->isSortingEnabled());
234 slotCellSelected( m_dataAwareObject->currentColumn(), m_dataAwareObject->currentRow() );
237void KexiDataAwareView::slotCellSelected(
int ,
int row)
239 slotUpdateRowActions(row);
242void KexiDataAwareView::deleteAllRows()
244 m_dataAwareObject->deleteAllRows(
true,
true);
247void KexiDataAwareView::deleteCurrentRow()
249 m_dataAwareObject->deleteCurrentRow();
252void KexiDataAwareView::deleteAndStartEditCurrentCell()
254 m_dataAwareObject->deleteAndStartEditCurrentCell();
257void KexiDataAwareView::startEditOrToggleValue()
259 m_dataAwareObject->startEditOrToggleValue();
262bool KexiDataAwareView::acceptRowEdit()
264 return m_dataAwareObject->acceptRowEdit();
267void KexiDataAwareView::slotClosing(
bool& cancel)
269 if (!acceptRowEdit())
273void KexiDataAwareView::cancelRowEdit()
275 m_dataAwareObject->cancelRowEdit();
278void KexiDataAwareView::sortAscending()
280 m_dataAwareObject->sortAscending();
283void KexiDataAwareView::sortDescending()
285 m_dataAwareObject->sortDescending();
288void KexiDataAwareView::copySelection()
290 m_dataAwareObject->copySelection();
293void KexiDataAwareView::cutSelection()
295 m_dataAwareObject->cutSelection();
298void KexiDataAwareView::paste()
300 m_dataAwareObject->paste();
303void KexiDataAwareView::slotGoToFirstRow() { m_dataAwareObject->selectFirstRow(); }
304void KexiDataAwareView::slotGoToPreviusRow() { m_dataAwareObject->selectPrevRow(); }
305void KexiDataAwareView::slotGoToNextRow() { m_dataAwareObject->selectNextRow(); }
306void KexiDataAwareView::slotGoToLastRow() { m_dataAwareObject->selectLastRow(); }
307void KexiDataAwareView::slotGoToNewRow() { m_dataAwareObject->addNewRecordRequested(); }
310 TQString& currentColumnName)
312 if (!dataAwareObject() || !dataAwareObject()->data())
314 KexiTableViewColumn::List columns( dataAwareObject()->data()->columns );
315 for (KexiTableViewColumn::ListIterator it(columns); it.current(); ++it) {
316 if (!it.current()->visible())
318 columnNames.append( it.current()->field()->name() );
319 columnCaptions.append( it.current()->captionAliasOrName() );
323 const int currentColumnNumber = dataAwareObject()->currentColumn();
324 if (currentColumnNumber!=-1) {
326 if (col && col->
field())
327 currentColumnName = col->
field()->name();
335 if (!dataAwareObject() || !dataAwareObject()->data())
341 return dataAwareObject()->find( valueToFind, options, next );
346 else if (res == KexiFindDialog::Replace) {
349 else if (res == KexiFindDialog::ReplaceAll) {
356 const TQVariant& replacement,
359 if (!dataAwareObject() || !dataAwareObject()->data())
362 return dataAwareObject()->findNextAndReplace(valueToFind, replacement, options, replaceAll);
371void KexiDataAwareView::editFindPrevious()
376void KexiDataAwareView::editReplace()
380 // When ready, update KexiDataAwareView::initActions() and KexiMainWindowImpl
383#include "kexidataawareview.moc"
void plugSharedAction(const char *action_name, TQObject *receiver, const char *slot)
The KexiDataAwareObjectInterface is an interface for record-based data object.
virtual bool isReadOnly() const
TDEPopupMenu * contextMenu() const
bool isDeleteEnabled() const
bool isEmptyRowInsertingEnabled() const
bool isSortingEnabled() const
virtual tristate findNextAndReplace(const TQVariant &valueToFind, const TQVariant &replacement, const KexiSearchAndReplaceViewInterface::Options &options, bool replaceAll)
virtual void updateActions(bool activated)
virtual bool setupFindAndReplace(TQStringList &columnNames, TQStringList &columnCaptions, TQString ¤tColumnName)
void init(TQWidget *viewWidget, KexiSharedActionClient *actionClient, KexiDataAwareObjectInterface *dataAwareObject, bool noDataAware=false)
virtual tristate find(const TQVariant &valueToFind, const KexiSearchAndReplaceViewInterface::Options &options, bool next)
Kexi's main window interface This interface is implemented by KexiMainWindowImpl class.
Specifies options for find and replace operations.
An interface used by Kexi views (KexiViewBase) supporting search/replace features.
The KexiSharedActionClient is an interface using application-wide (shared) actions.
KexiDB::Field * field() const
Base class for single view embeddable of in KexiDialogBase.
virtual TDEAction * sharedAction(const char *action_name)
virtual void setAvailable(const char *action_name, bool set)
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.