File: MyAppMainWindow.cpp

package info (click to toggle)
camitk 6.0.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 389,496 kB
  • sloc: cpp: 103,476; sh: 2,448; python: 1,618; xml: 984; makefile: 128; perl: 84; sed: 20
file content (151 lines) | stat: -rw-r--r-- 5,107 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/*****************************************************************************
 * $CAMITK_LICENCE_BEGIN$
 *
 * CamiTK - Computer Assisted Medical Intervention ToolKit
 * (c) 2001-2025 Univ. Grenoble Alpes, CNRS, Grenoble INP - UGA, TIMC, 38000 Grenoble, France
 *
 * Visit http://camitk.imag.fr for more information
 *
 * This file is part of CamiTK.
 *
 * CamiTK is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 3
 * only, as published by the Free Software Foundation.
 *
 * CamiTK 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 Lesser General Public License version 3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with CamiTK.  If not, see <http://www.gnu.org/licenses/>.
 *
 * $CAMITK_LICENCE_END$
 ****************************************************************************/

// -- CamiTK Application Imp stuff
#include "MyAppMainWindow.h"

// -- CamiTK Core stuff
#include <Application.h>
#include <Component.h>
#include <Action.h>
#include <Core.h>
#include <Viewer.h>
#include <Log.h>

// -- Qt Stuff
#include <QMenuBar>

using namespace camitk;

// ------------- constructor -----------------
MyAppMainWindow::MyAppMainWindow() : MainWindow("MyApp - " + tr(Core::version())) {

    // init all GUI
    // -- file
    QMenu* fileMenu = new QMenu(tr("&File"));
    fileMenu->addAction(Application::getAction("Open")->getQAction());
    fileSave = Application::getAction("Save")->getQAction();
    fileMenu->addAction(fileSave);
    fileClose = Application::getAction("Close")->getQAction();
    fileMenu->addAction(fileClose);
    fileMenu->addSeparator();
    fileMenu->addAction(Application::getAction("Quit")->getQAction());

    // -- help
    QMenu* helpMenu = new QMenu(tr("&Help"));
    //--- actions of the Help menu
    helpMenu->addAction(Application::getAction("About...")->getQAction());

    // -- action
    actionMenu = new QMenu(tr("&Actions"));

    // -- add everything in the menu bar
    menuBar()->addMenu(fileMenu);
    menuBar()->addMenu(actionMenu);
    menuBar()->addSeparator();
    menuBar()->addMenu(helpMenu);

    // initialize architecture
    updateActionStates();

    // now add the different viewers
    Viewer* componentExplorer = Application::getViewer("Component Explorer");
    if (componentExplorer != nullptr) {
        addDockViewer(Qt::LeftDockWidgetArea, componentExplorer);
    }
    else {
        CAMITK_ERROR(tr("Cannot find \"Explorer\" viewer. This viewer is mandatory for running camitk-menubar."))
    }

    // get the default 3D viewer out of the MedicalImageViewer and put it directly in the central viewer
    Viewer* default3DViewer = Application::getViewer("3D Viewer");
    if (default3DViewer != nullptr) {
        setCentralViewer(default3DViewer);
    }
    else {
        CAMITK_ERROR(tr("Cannot find \"3D Viewer\". This viewer is mandatory for running camitk-menubar."))
    }

    Viewer* actionViewer = Application::getViewer("Action Viewer");
    if (actionViewer != nullptr) {
        addDockViewer(Qt::RightDockWidgetArea, actionViewer);
        showDockViewer(actionViewer, false);
    }
    else {
        CAMITK_ERROR(tr("Cannot find \"Action Viewer\". This viewer is mandatory for running camitk-menubar."))
    }

    showStatusBar(true);
}


// ------------- destructor -----------------
MyAppMainWindow::~MyAppMainWindow() {
}

// ------------- refresh -----------------
void MyAppMainWindow::refresh() {
    MainWindow::refresh();

    // update all the action states
    updateActionStates();
}

// ------------------------ updateActionStates ----------------------------
void MyAppMainWindow::updateActionStates() {
    unsigned int nrOfSelectedItems = Application::getSelectedComponents().size();
    bool selectedIsTopLevel = (nrOfSelectedItems > 0 && Application::getSelectedComponents().last()->isTopLevel());

    //-- update file menu
    fileClose->setEnabled(selectedIsTopLevel);
    fileSave->setEnabled(selectedIsTopLevel);

    //-- update the action menu
    actionMenu->clear();
    actionMenu->setEnabled(false);

    if (nrOfSelectedItems > 0) {
        Component* comp = Application::getSelectedComponents().last();

        if (comp) {
            QMenu* compActionsMenu = comp->getActionMenu();

            if (compActionsMenu) {
                actionMenu->addActions(compActionsMenu->actions());
                actionMenu->setEnabled(true);
            }
        }
    }

    // update the application window title
    if (nrOfSelectedItems > 0) {
        setWindowSubtitle(Application::getSelectedComponents().last()->getFileName());
    }
}

// ------------- slotHelpAbout -----------------
void MyAppMainWindow::slotHelpAbout() {
    CAMITK_WARNING(tr("About: tutorial app for menu bar\nUsing %1\n(c) Univ. Grenoble Alpes, CNRS, Grenoble INP - UGA, TIMC UMR 5525, France").arg(QString(Core::version())))
}