~ubuntu-branches/ubuntu/precise/koffice/precise

« back to all changes in this revision

Viewing changes to kexi/main/KexiMainWindow.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Alessandro Ghersi
  • Date: 2010-10-27 17:52:57 UTC
  • mfrom: (0.12.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20101027175257-s04zqqk5bs8ckm9o
Tags: 1:2.2.83-0ubuntu1
* Merge with Debian git remaining changes:
 - Add build-deps on librcps-dev, opengtl-dev, libqtgtl-dev, freetds-dev,
   create-resources, libspnav-dev
 - Remove needless build-dep on libwv2-dev
 - koffice-libs recommends create-resources
 - krita recommends pstoedit
 - Keep our patches
* New upstream release 2.3 beta 3
  - Remove debian/patches fixed by upstream
  - Update install files

Show diffs side-by-side

added added

removed removed

Lines of Context:
94
94
#include "kexifinddialog.h"
95
95
#include "kexisearchandreplaceiface.h"
96
96
#include <kexi_global.h>
 
97
#include <widget/KexiProjectModel.h>
97
98
 
98
 
#include <widget/KexiProjectListView.h>
99
99
#include <widget/KexiPropertyEditorView.h>
100
100
#include <widget/utils/kexirecordnavigator.h>
101
101
#include <widget/utils/KexiDockableWidget.h>
 
102
#include <widget/KexiProjectNavigator.h>
102
103
#include <koproperty/EditorView.h>
103
104
#include <koproperty/Set.h>
104
105
 
180
181
        : KTabWidget(parent)
181
182
        , m_mainWidget(mainWidget)
182
183
{
 
184
    m_closeAction = new KAction(KIcon("tab-close"), i18n("&Close Tab"), this);
 
185
    m_closeAction->setToolTip(i18n("Close the current tab"));
 
186
    m_closeAction->setWhatsThis(i18n("Closes the current tab."));
 
187
    connect(m_closeAction, SIGNAL(triggered()), this, SLOT(closeTab()));
183
188
    // close-tab button:
184
189
    QToolButton* rightWidget = new QToolButton(this);
185
 
    connect(rightWidget, SIGNAL(clicked()), this, SLOT(closeTab()));
186
 
    rightWidget->setIcon(KIcon("tab-close"));
 
190
    rightWidget->setDefaultAction(m_closeAction);
 
191
    rightWidget->setText(QString());
187
192
    rightWidget->setAutoRaise(true);
188
193
    rightWidget->adjustSize();
189
 
    rightWidget->setToolTip(i18n("Close the current tab"));
190
194
    setCornerWidget(rightWidget, Qt::TopRightCorner);
 
195
    setMovable(true);
 
196
    tabBar()->setExpanding(true);
191
197
}
192
198
 
193
199
KexiMainWindowTabWidget::~KexiMainWindowTabWidget()
213
219
    m_mainWidget->slotCurrentTabIndexChanged(index);
214
220
}
215
221
 
 
222
void KexiMainWindowTabWidget::contextMenu(int index, const QPoint& point)
 
223
{
 
224
    QMenu menu;
 
225
    menu.addAction(m_closeAction);
 
226
//! @todo add "&Detach Tab"
 
227
    menu.exec(point);
 
228
    KTabWidget::contextMenu(index, point);
 
229
}
 
230
    
216
231
//-------------------------------------------------
217
232
 
218
233
//static
298
313
//#ifdef KEXI_DEBUG_GUI
299
314
// delete debugWindow;
300
315
//#endif
 
316
 
301
317
    return 0;
302
318
}
303
319
 
618
634
    //kde4
619
635
#ifdef __GNUC__
620
636
#warning TODO setupGUI(KMainWindow::Keys|KMainWindow::StatusBar|KMainWindow::Save|KMainWindow::Create, "kexiui.rc" );
 
637
#else
 
638
#pragma WARNING( TODO setupGUI(KMainWindow::Keys|KMainWindow::StatusBar|KMainWindow::Save|KMainWindow::Create, "kexiui.rc" ); )
621
639
#endif
622
640
 
623
641
// d->actionMapper = new QSignalMapper(this, "act_map");
852
870
    ac->addAction("edit_find",
853
871
                  d->action_edit_find = KStandardAction::find(
854
872
                                            this, SLOT(slotEditFind()), this));
 
873
    d->action_edit_find->setToolTip(i18n("Find text"));
 
874
    d->action_edit_find->setWhatsThis(i18n("Looks up the first occurrence of a piece of text."));
855
875
// d->action_edit_find = createSharedAction( KStandardAction::Find, "edit_find");
856
876
    ac->addAction("edit_findnext",
857
877
                  d->action_edit_findnext = KStandardAction::findNext(
1086
1106
    //SETTINGS MENU
1087
1107
#ifdef __GNUC__
1088
1108
#warning TODO setStandardToolBarMenuEnabled( true );
 
1109
#else
 
1110
#pragma WARNING( setStandardToolBarMenuEnabled( true ); )
1089
1111
#endif
1090
1112
 
1091
1113
    action = KStandardAction::keyBindings(this, SLOT(slotConfigureKeys()), this);
1462
1484
    }
1463
1485
 
1464
1486
    //DOCKS
1465
 
    if (d->nav)
1466
 
        d->nav->setEnabled(d->prj);
 
1487
    if (d->navigator) {
 
1488
        d->navigator->setEnabled(d->prj);
 
1489
    }
1467
1490
    if (d->propEditor)
1468
1491
        d->propEditorTabWidget->setEnabled(d->prj);
1469
1492
}
1659
1682
{
1660
1683
    const bool readOnly = d->prj && d->prj->dbConnection() && d->prj->dbConnection()->isReadOnly();
1661
1684
    d->statusBar->setReadOnlyFlag(readOnly);
1662
 
    if (d->nav)
1663
 
        d->nav->setReadOnly(readOnly);
1664
 
    // update "insert ....." actions for every part
 
1685
    if (d->navigator) {
 
1686
        d->navigator->setReadOnly(readOnly);
 
1687
    }
 
1688
    
 
1689
// update "insert ....." actions for every part
1665
1690
    KActionCollection *ac = actionCollection();
1666
1691
    foreach(KexiPart::Info *info, *Kexi::partManager().partInfoList()) {
1667
1692
        QAction *a = ac->action(KexiPart::nameForCreateAction(*info));
1809
1834
    // if (!d->prj->data()->autoopenObjects.isEmpty())
1810
1835
//2.0 d->restoreNavigatorWidth();
1811
1836
 
1812
 
    if (d->nav) {
1813
 
#ifdef __GNUC__
1814
 
#warning NEEDED?  d->nav->updateGeometry();
1815
 
#else
1816
 
#pragma WARNING( NEEDED?  d->nav->updateGeometry(); )
1817
 
#endif
1818
 
    }
1819
1837
    qApp->processEvents();
1820
1838
    emit projectOpened();
1821
1839
}
1902
1920
    if (!d->prj->closeConnection())
1903
1921
        return false;
1904
1922
 
1905
 
    if (d->nav) {
 
1923
    if (d->navigator) {
1906
1924
        d->navWasVisibleBeforeProjectClosing = d->navDockWidget->isVisible();
1907
1925
        d->navDockWidget->hide();
1908
 
        d->nav->clear();
 
1926
        d->navigator->clear();
1909
1927
    }
1910
 
 
 
1928
    
1911
1929
    if (d->propEditorDockWidget)
1912
1930
        d->propEditorDockWidget->hide();
1913
1931
 
2071
2089
    if (!d->isProjectNavigatorVisible)
2072
2090
        return;
2073
2091
 
2074
 
    if (d->nav) {
2075
 
         d->navDockWidget->show();
 
2092
    if (d->navigator) {
 
2093
        d->navDockWidget->show();
2076
2094
    }
2077
2095
    else {
2078
2096
        d->navDockWidget = new KexiDockWidget(QString(), d->mainWidget);
2086
2104
        );
2087
2105
 
2088
2106
        KexiDockableWidget* navDockableWidget = new KexiDockableWidget(d->navDockWidget);
2089
 
        d->nav = new KexiProjectListView(navDockableWidget);
2090
 
        navDockableWidget->setWidget(d->nav);
2091
 
//TODO REMOVE?  d->nav->installEventFilter(this);
2092
 
        d->navDockWidget->setWindowTitle(d->nav->windowTitle());
 
2107
        d->navigator = new KexiProjectNavigator(navDockableWidget);
 
2108
        
 
2109
        //navDockableWidget->setWidget(d->nav);
 
2110
 
 
2111
               
 
2112
        //TODO temp
 
2113
//TODO remove        QWidget *navi = new QWidget(navDockableWidget);
 
2114
//TODO remove        QVBoxLayout *navi_layout = new QVBoxLayout();
 
2115
//TODO remove
 
2116
//TODO remove        navi_layout->addWidget(d->navigator);
 
2117
//TODO remove        navi->setLayout(navi_layout);
 
2118
 
 
2119
        navDockableWidget->setWidget(d->navigator);
 
2120
        //End TODO
 
2121
 
 
2122
        d->navDockWidget->setWindowTitle(d->navigator->windowTitle());
2093
2123
        d->navDockWidget->setWidget(navDockableWidget);
2094
2124
 
2095
2125
//        const bool showProjectNavigator = mainWindowGroup.readEntry("ShowProjectNavigator", true);
2105
2135
#endif
2106
2136
//  d->navToolWindow->hide();
2107
2137
 
2108
 
        connect(d->nav, SIGNAL(openItem(KexiPart::Item*, Kexi::ViewMode)),
 
2138
        connect(d->navDockWidget, SIGNAL(visibilityChanged(bool)),
 
2139
            this, SLOT(slotProjectNavigatorVisibilityChanged(bool)));
 
2140
 
 
2141
        //Nav2 Signals
 
2142
        connect(d->navigator, SIGNAL(openItem(KexiPart::Item*, Kexi::ViewMode)),
2109
2143
                this, SLOT(openObject(KexiPart::Item*, Kexi::ViewMode)));
2110
 
        connect(d->nav, SIGNAL(openOrActivateItem(KexiPart::Item*, Kexi::ViewMode)),
 
2144
        connect(d->navigator, SIGNAL(openOrActivateItem(KexiPart::Item*, Kexi::ViewMode)),
2111
2145
                this, SLOT(openObjectFromNavigator(KexiPart::Item*, Kexi::ViewMode)));
2112
 
        connect(d->nav, SIGNAL(newItem(KexiPart::Info*)),
 
2146
        connect(d->navigator, SIGNAL(newItem(KexiPart::Info*)),
2113
2147
                this, SLOT(newObject(KexiPart::Info*)));
2114
 
        connect(d->nav, SIGNAL(removeItem(KexiPart::Item*)),
 
2148
        connect(d->navigator, SIGNAL(removeItem(KexiPart::Item*)),
2115
2149
                this, SLOT(removeObject(KexiPart::Item*)));
2116
 
        connect(d->nav, SIGNAL(renameItem(KexiPart::Item*, const QString&, bool&)),
 
2150
        connect(d->navigator->model(), SIGNAL(renameItem(KexiPart::Item*, const QString&, bool&)),
2117
2151
                this, SLOT(renameObject(KexiPart::Item*, const QString&, bool&)));
2118
 
        connect(d->nav, SIGNAL(executeItem(KexiPart::Item*)),
 
2152
        connect(d->navigator, SIGNAL(executeItem(KexiPart::Item*)),
2119
2153
                this, SLOT(executeItem(KexiPart::Item*)));
2120
 
        connect(d->nav, SIGNAL(exportItemToClipboardAsDataTable(KexiPart::Item*)),
 
2154
        connect(d->navigator, SIGNAL(exportItemToClipboardAsDataTable(KexiPart::Item*)),
2121
2155
                this, SLOT(copyItemToClipboardAsDataTable(KexiPart::Item*)));
2122
 
        connect(d->nav, SIGNAL(exportItemToFileAsDataTable(KexiPart::Item*)),
 
2156
        connect(d->navigator, SIGNAL(exportItemToFileAsDataTable(KexiPart::Item*)),
2123
2157
                this, SLOT(exportItemAsDataTable(KexiPart::Item*)));
2124
 
        connect(d->nav, SIGNAL(printItem(KexiPart::Item*)),
 
2158
        connect(d->navigator, SIGNAL(printItem(KexiPart::Item*)),
2125
2159
                this, SLOT(printItem(KexiPart::Item*)));
2126
 
        connect(d->nav, SIGNAL(pageSetupForItem(KexiPart::Item*)),
 
2160
        connect(d->navigator, SIGNAL(pageSetupForItem(KexiPart::Item*)),
2127
2161
                this, SLOT(showPageSetupForItem(KexiPart::Item*)));
 
2162
        connect(d->navigator, SIGNAL(selectionChanged(KexiPart::Item*)),
 
2163
                this, SLOT(slotPartItemSelectedInNavigator(KexiPart::Item*)));
2128
2164
        if (d->prj) {//connect to the project
2129
2165
            connect(d->prj, SIGNAL(itemRemoved(const KexiPart::Item&)),
2130
 
                    d->nav, SLOT(slotRemoveItem(const KexiPart::Item&)));
 
2166
                    d->navigator->model(), SLOT(slotRemoveItem(const KexiPart::Item&)));
2131
2167
        }
2132
 
        connect(d->nav, SIGNAL(selectionChanged(KexiPart::Item*)),
2133
 
                this, SLOT(slotPartItemSelectedInNavigator(KexiPart::Item*)));
2134
 
        connect(d->navDockWidget, SIGNAL(visibilityChanged(bool)),
2135
 
            this, SLOT(slotProjectNavigatorVisibilityChanged(bool)));
2136
2168
 
2137
 
//  d->restoreNavigatorWidth();
 
2169
        
 
2170
        //  d->restoreNavigatorWidth();
2138
2171
    }
2139
2172
    if (d->prj->isConnected()) {
2140
2173
        QString partManagerErrorMessages;
2141
 
        d->nav->setProject(d->prj, QString()/*all classes*/, &partManagerErrorMessages);
 
2174
 
2142
2175
        if (!partManagerErrorMessages.isEmpty()) {
2143
2176
            showWarningContinueMessage(partManagerErrorMessages, QString(),
2144
2177
                                       "dontShowWarningsRelatedToPluginsLoading");
2145
2178
        }
 
2179
        d->navigator->setProject(d->prj, QString()/*all classes*/, &partManagerErrorMessages);
 
2180
        
2146
2181
    }
2147
 
    connect(d->prj, SIGNAL(newItemStored(KexiPart::Item&)), d->nav, SLOT(addItem(KexiPart::Item&)));
2148
 
    d->nav->setFocus();
2149
 
 
 
2182
 
 
2183
    connect(d->prj, SIGNAL(newItemStored(KexiPart::Item&)), d->navigator->model(), SLOT(slotAddItem(KexiPart::Item&)));
 
2184
 
 
2185
    d->navigator->setFocus();
 
2186
    
2150
2187
    if (d->forceShowProjectNavigatorOnCreation) {
2151
2188
        slotViewNavigator();
2152
2189
        d->forceShowProjectNavigatorOnCreation = false;
2210
2247
        KexiUtils::setMargins(propEditorDockWidgetContentsLyr, KDialog::marginHint() / 2);
2211
2248
 
2212
2249
        d->propEditorTabWidget = new KTabWidget(propEditorDockWidgetContents);
 
2250
        d->propEditorTabWidget->setDocumentMode(true);
2213
2251
        propEditorDockWidgetContentsLyr->addWidget(d->propEditorTabWidget);
2214
2252
//  d->propEditorTabWidget->hide();
2215
2253
        d->propEditor = new KexiPropertyEditorView(d->propEditorTabWidget);
2465
2503
// d->mainWidget->saveMainWindowSettings( mainWindowGroup );
2466
2504
// d->mainWidget->saveState();
2467
2505
 
2468
 
    if (d->nav)
2469
 
        mainWindowGroup.writeEntry("ProjectNavigatorSize", d->nav->parentWidget()->size());
2470
 
 
 
2506
    if (d->navigator)
 
2507
        mainWindowGroup.writeEntry("ProjectNavigatorSize", d->navigator->parentWidget()->size());
 
2508
    
2471
2509
    if (d->propEditorDockableWidget)
2472
2510
        mainWindowGroup.writeEntry("PropertyEditorSize", d->propEditorDockableWidget->size());
2473
2511
 
3018
3056
//provided by KexiMessageHandler connect(d->prj, SIGNAL(error(const QString&,const QString&)), this, SLOT(showErrorMessage(const QString&,const QString&)));
3019
3057
    connect(d->prj, SIGNAL(itemRenamed(const KexiPart::Item&, const QString&)), this, SLOT(slotObjectRenamed(const KexiPart::Item&, const QString&)));
3020
3058
 
3021
 
    if (d->nav)
3022
 
        connect(d->prj, SIGNAL(itemRemoved(const KexiPart::Item&)), d->nav, SLOT(slotRemoveItem(const KexiPart::Item&)));
 
3059
    if (d->navigator){
 
3060
        connect(d->prj, SIGNAL(itemRemoved(const KexiPart::Item&)), d->navigator, SLOT(slotRemoveItem(const KexiPart::Item&)));
 
3061
    }
 
3062
    
3023
3063
}
3024
3064
 
3025
3065
KexiProjectData*
3381
3421
 
3382
3422
void KexiMainWindow::slotViewNavigator()
3383
3423
{
3384
 
    if (!d->nav
 
3424
    if (!d->navigator
3385
3425
#ifdef __GNUC__
3386
3426
#warning TODO || !d->navToolWindow
3387
3427
#else
3410
3450
#endif
3411
3451
//
3412
3452
//2.0: unused d->block_KMdiMainFrm_eventFilter=true;
3413
 
    d->nav->setFocus();
 
3453
 
 
3454
    d->navigator->setFocus();
3414
3455
//2.0: unused d->block_KMdiMainFrm_eventFilter=false;
3415
3456
}
3416
3457
 
3785
3826
        }
3786
3827
    } else {
3787
3828
        //not dirty now
3788
 
        if (d->nav)
3789
 
            d->nav->updateItemName(*window->partItem(), false);
 
3829
        if (d->navigator) {
 
3830
            d->navigator->updateItemName(*window->partItem(), false);
 
3831
        }
3790
3832
    }
3791
3833
 
3792
3834
    d->removeWindow(window_id); //don't remove -KMDI will do that
3845
3887
    //focus navigator if nothing else available
3846
3888
    if (d->openedWindowsCount() == 0) {
3847
3889
//2.0: unused  d->maximizeFirstOpenedChildFrm = isInMaximizedChildFrmMode;
3848
 
        if (d->nav)
3849
 
            d->nav->setFocus();
 
3890
 
 
3891
        if (d->navigator) {
 
3892
            d->navigator->setFocus();
 
3893
        }
3850
3894
        d->updatePropEditorVisibility(Kexi::NoViewMode);
3851
3895
    }
3852
3896
 
3899
3943
 
3900
3944
QWidget* KexiMainWindow::findWindow(QWidget *w)
3901
3945
{
3902
 
    while (w && !acceptsSharedActions(w))
 
3946
    while (w && !acceptsSharedActions(w)) {
 
3947
        if (w == d->propEditorDockWidget)
 
3948
            return currentWindow();
3903
3949
        w = w->parentWidget();
 
3950
    }
3904
3951
    return w;
3905
3952
}
3906
3953
 
4161
4208
 
4162
4209
        // open new tab earlier
4163
4210
        windowContainer = new KexiWindowContainer(d->mainWidget->tabWidget());
4164
 
        d->mainWidget->tabWidget()->addTab(windowContainer,
4165
 
                                           KIcon(part ? part->info()->itemIcon() : QString()), KexiPart::fullCaptionForItem(*item, part));
 
4211
        const int tabIndex = d->mainWidget->tabWidget()->addTab(
 
4212
            windowContainer,
 
4213
            KIcon(part ? part->info()->itemIcon() : QString()),
 
4214
            item->captionOrName());
 
4215
        d->mainWidget->tabWidget()->setTabToolTip(tabIndex, KexiPart::fullCaptionForItem(*item, part));
 
4216
        d->mainWidget->tabWidget()->setTabWhatsThis(
 
4217
            tabIndex,
 
4218
            i18n("Tab for \"%1\" (%2).", item->captionOrName(), part->instanceCaption()));
4166
4219
        d->mainWidget->tabWidget()->setCurrentWidget(windowContainer);
4167
4220
 
4168
4221
#ifndef KEXI_NO_PENDING_DIALOGS
4226
4279
        currentWindow()->selectedView()->propertySetSwitched();
4227
4280
//  activeWindowChanged(window, previousWindow);
4228
4281
    }
 
4282
    invalidateProjectWideActions();
4229
4283
    return window;
4230
4284
}
4231
4285
 
4317
4371
        return false;
4318
4372
    }
4319
4373
 
4320
 
    if (!it->neverSaved()) //only add stored objects to the browser
4321
 
        d->nav->addItem(*it);
 
4374
    if (!it->neverSaved()) { //only add stored objects to the browser
 
4375
        d->navigator->model()->slotAddItem(*it);
 
4376
    }
4322
4377
    return openObject(it, Kexi::DesignViewMode, openingCancelled);
4323
4378
}
4324
4379
 
4491
4546
{
4492
4547
    KexiPart::Item *item = window->partItem();
4493
4548
    //update text in navigator and app. caption
4494
 
    if (!d->userMode)
4495
 
        d->nav->updateItemName(*item, window->isDirty());
 
4549
    if (!d->userMode) {
 
4550
        d->navigator->updateItemName(*item, window->isDirty());
 
4551
    }
4496
4552
 
4497
4553
    invalidateActions();
4498
4554
    updateAppCaption();
5084
5140
 
5085
5141
void KexiMainWindow::slotEditCopySpecialDataTable()
5086
5142
{
5087
 
    KexiPart::Item* item = d->nav->selectedPartItem();
 
5143
    KexiPart::Item* item = d->navigator->selectedPartItem();
5088
5144
    if (item)
5089
5145
        copyItemToClipboardAsDataTable(item);
5090
5146
}
5233
5289
    KexiPart::Item *item = d->prj->itemForClass(partClass, name);
5234
5290
    if (!item)
5235
5291
        return;
5236
 
    if (d->nav) {
5237
 
        d->nav->selectItem(*item);
 
5292
    if (d->navigator) {
 
5293
        d->navigator->selectItem(*item);
5238
5294
    }
5239
5295
}
5240
5296