• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdesdk API Reference
  • KDE Home
  • Contact Us
 

okteta

  • sources
  • kde-4.12
  • kdesdk
  • okteta
  • program
program/mainwindow.cpp
Go to the documentation of this file.
1 /*
2  This file is part of the Okteta program, made within the KDE community.
3 
4  Copyright 2006-2011 Friedrich W. H. Kossebau <kossebau@kde.org>
5 
6  This program is free software; you can redistribute it and/or
7  modify it under the terms of the GNU General Public License as
8  published by the Free Software Foundation; either version 2 of
9  the License or (at your option) version 3 or any later version
10  accepted by the membership of KDE e.V. (or its successor approved
11  by the membership of KDE e.V.), which shall act as a proxy
12  defined in Section 14 of version 3 of the license.
13 
14  This program is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  GNU General Public License for more details.
18 
19  You should have received a copy of the GNU General Public License
20  along with this program. If not, see <http://www.gnu.org/licenses/>.
21 */
22 
23 #include "mainwindow.h"
24 
25 // program
26 #include "program.h"
27 // tmp
28 #include <bytearrayviewprofilemanager.h>
29 // tools
30 #include <stringsextract/stringsextracttoolview.h>
31 #include <stringsextract/stringsextracttool.h>
32 #include <info/infotoolview.h>
33 #include <info/infotool.h>
34 #include <filter/filtertoolview.h>
35 #include <filter/filtertool.h>
36 #include <charsetconversion/charsetconversiontoolview.h>
37 #include <charsetconversion/charsetconversiontool.h>
38 #include <checksum/checksumtoolview.h>
39 #include <checksum/checksumtool.h>
40 #include <info/documentinfotoolview.h>
41 #include <info/documentinfotool.h>
42 #include <poddecoder/poddecodertoolview.h>
43 #include <poddecoder/poddecodertool.h>
44 #include <bytetable/bytetabletoolview.h>
45 #include <bytetable/bytetabletool.h>
46 #include <bookmarks/bookmarkstoolview.h>
47 #include <bookmarks/bookmarkstool.h>
48 
49 #include <structures/structtoolview.h>
50 #include <structures/structtool.h>
51 
52 // Kasten tools
53 #include <document/versionview/versionviewtoolview.h>
54 #include <document/versionview/versionviewtool.h>
55 #include <documentsystem/filesystembrowser/filesystembrowsertoolview.h>
56 #include <documentsystem/filesystembrowser/filesystembrowsertool.h>
57 #include <documentsystem/documentsbrowser/documentstoolview.h>
58 #include <documentsystem/documentsbrowser/documentstool.h>
59 #include <document/terminal/terminaltoolview.h>
60 #include <document/terminal/terminaltool.h>
61 // controllers
62 #include <overwriteonly/overwriteonlycontroller.h>
63 #include <overwritemode/overwritemodecontroller.h>
64 #include <gotooffset/gotooffsetcontroller.h>
65 #include <selectrange/selectrangecontroller.h>
66 #include <search/searchcontroller.h>
67 #include <replace/replacecontroller.h>
68 #include <bookmarks/bookmarkscontroller.h>
69 #include <print/printcontroller.h>
70 #include <viewconfig/viewconfigcontroller.h>
71 #include <viewmode/viewmodecontroller.h>
72 #include <viewstatus/viewstatuscontroller.h>
73 #include <viewprofiles/viewprofilecontroller.h>
74 #include <viewprofiles/viewprofilesmanagecontroller.h>
75 // Kasten controllers
76 #include <document/modified/modifiedbarcontroller.h>
77 #include <document/readonly/readonlycontroller.h>
78 #include <document/readonly/readonlybarcontroller.h>
79 #include <documentsystem/creator/creatorcontroller.h>
80 #include <documentsystem/loader/loadercontroller.h>
81 #include <documentsystem/close/closecontroller.h>
82 #include <io/setremote/setremotecontroller.h>
83 #include <io/synchronize/synchronizecontroller.h>
84 #include <io/clipboard/clipboardcontroller.h>
85 #include <io/insert/insertcontroller.h>
86 #include <io/copyas/copyascontroller.h>
87 #include <io/export/exportcontroller.h>
88 #include <view/version/versioncontroller.h>
89 #include <view/zoom/zoomcontroller.h>
90 #include <view/zoom/zoombarcontroller.h>
91 #include <view/select/selectcontroller.h>
92 #include <shellwindow/switchview/switchviewcontroller.h>
93 #include <shellwindow/viewlistmenu/viewlistmenucontroller.h>
94 #include <shellwindow/viewareasplit/viewareasplitcontroller.h>
95 #include <shellwindow/toollistmenu/toollistmenucontroller.h>
96 #include <shellwindow/fullscreen/fullscreencontroller.h>
97 /*#include <viewsystem/close/closecontroller.h>*/
98 #include <program/quit/quitcontroller.h>
99 // Kasten gui
100 #include <multidocumentstrategy.h>
101 #include <modelcodecviewmanager.h>
102 #include <viewmanager.h>
103 #include <multiviewareas.h>
104 #include <statusbar.h>
105 // Kasten core
106 #include <modelcodecmanager.h>
107 #include <documentcreatemanager.h>
108 #include <documentsyncmanager.h>
109 #include <documentmanager.h>
110 // KDE
111 #include <KUrl>
112 #include <KGlobal>
113 #include <KConfigGroup>
114 
115 
116 namespace Kasten2
117 {
118 
119 static const char LoadedUrlsKey[] = "LoadedUrls";
120 
121 OktetaMainWindow::OktetaMainWindow( OktetaProgram* program )
122  : ShellWindow( program->viewManager() ),
123  mProgram( program )
124 {
125  setObjectName( QLatin1String("Shell") );
126 
127  // there is only one mainwindow, so have this show the document if requested
128  connect( mProgram->documentManager(), SIGNAL(focusRequested(Kasten2::AbstractDocument*)),
129  SLOT(showDocument(Kasten2::AbstractDocument*)) );
130  connect( viewArea(), SIGNAL(dataOffered(const QMimeData*,bool&)),
131  SLOT(onDataOffered(const QMimeData*,bool&)) );
132  connect( viewArea(), SIGNAL(dataDropped(const QMimeData*)),
133  SLOT(onDataDropped(const QMimeData*)) );
134  connect( viewArea(), SIGNAL(closeRequest(QList<Kasten2::AbstractView*>)),
135  SLOT(onCloseRequest(QList<Kasten2::AbstractView*>)) );
136 
137  // XXX: Workaround for Qt 4.4's lacking of proper handling of the initial layout of dock widgets
138  // This state is taken from an oktetarc where the docker constellation was configured by hand.
139  // Setting this state if none is present seems to work, but there's
140  // still the versioning problem to be accounted for.
141  // Hack borrowed from trunk/koffice/krita/ui/kis_view2.cpp:
142  const QString mainWindowState = QLatin1String(
143 "AAAA/wAAAAD9AAAAAwAAAAAAAADPAAACg/wCAAAAAvsAAAAiAEYAaQBsAGUAUwB5AHMAdABlAG0AQgByAG8AdwBzAGUAcgAAAABJAAACgwAAAB4BAAAF+wAAABIARABvAGMAdQBtAGUAbgB0AHMAAAAASQAAAmMAAABeAQAABQAAAAEAAAGcAAACXPwCAAAACPsAAAAUAFAATwBEAEQAZQBjAG8AZABlAHIAAAAAQgAAARMAAAB9AQAABfsAAAAUAFMAdAByAHUAYwB0AFQAbwBvAGwAAAAAQgAAAlwAAAB9AQAABfsAAAAQAFYAZQByAHMAaQBvAG4AcwAAAABNAAAAVgAAAF4BAAAF+wAAABgAQgBpAG4AYQByAHkARgBpAGwAdABlAHIAAAABegAAAM0AAAC8AQAABfsAAAAQAEMAaABlAGMAawBzAHUAbQAAAAF8AAAAywAAAL0BAAAF/AAAAREAAADlAAAAAAD////6AAAAAAEAAAAE+wAAABAAQwBoAGUAYwBrAFMAdQBtAQAAAAD/////AAAAAAAAAAD7AAAAEgBCAG8AbwBrAG0AYQByAGsAcwIAAALBAAAAPQAAAT8AAAFk+wAAAA4AUwB0AHIAaQBuAGcAcwAAAAAA/////wAAAQ8BAAAF+wAAAAgASQBuAGYAbwAAAAGRAAABTAAAAIUBAAAF+wAAABIAQgB5AHQAZQBUAGEAYgBsAGUAAAAAUwAAAjkAAAB9AQAABfsAAAAYAEQAbwBjAHUAbQBlAG4AdABJAG4AZgBvAAAAAEkAAAJjAAAA+wEAAAUAAAADAAAAAAAAAAD8AQAAAAH7AAAAEABUAGUAcgBtAGkAbgBhAGwAAAAAAP////8AAABPAQAABQAABBUAAAGLAAAABAAAAAQAAAAIAAAACPwAAAABAAAAAgAAAAEAAAAWAG0AYQBpAG4AVABvAG8AbABCAGEAcgEAAAAAAAAEBgAAAAAAAAAA");
144  const char mainWindowStateKey[] = "State";
145  KConfigGroup group( KGlobal::config(), QLatin1String("MainWindow") );
146  if( !group.hasKey(mainWindowStateKey) )
147  group.writeEntry( mainWindowStateKey, mainWindowState );
148 
149  setStatusBar( new Kasten2::StatusBar(this) );
150 
151  setupControllers();
152  setupGUI();
153 
154  // all controllers which use plugActionList have to do so after(!) setupGUI() or their entries will be removed
155  // TODO: why is this so?
156  // tmp
157  addXmlGuiController( new ToolListMenuController(this,this) );
158  addXmlGuiController( new ViewListMenuController(viewManager(),viewArea(),this) );
159 }
160 
161 void OktetaMainWindow::setupControllers()
162 {
163  MultiDocumentStrategy* const documentStrategy = mProgram->documentStrategy();
164  ViewManager* const viewManager = this->viewManager();
165  MultiViewAreas* const viewArea = this->viewArea();
166  ModelCodecViewManager* const codecViewManager = viewManager->codecViewManager();
167  DocumentManager* const documentManager = mProgram->documentManager();
168  ModelCodecManager* const codecManager = documentManager->codecManager();
169  DocumentSyncManager* const syncManager = documentManager->syncManager();
170  // tmp
171  ByteArrayViewProfileManager* const byteArrayViewProfileManager = mProgram->byteArrayViewProfileManager();
172 
173  // general, part of Kasten
174  addXmlGuiController( new CreatorController(codecManager,
175  documentStrategy,this) );
176  addXmlGuiController( new LoaderController(documentStrategy,this) );
177  addXmlGuiController( new SetRemoteController(syncManager,this) );
178  addXmlGuiController( new SynchronizeController(syncManager,this) );
179  addXmlGuiController( new ExportController(codecViewManager,
180  codecManager,this) );
181  addXmlGuiController( new CloseController(documentStrategy,this) );
182  addXmlGuiController( new VersionController(this) );
183  addXmlGuiController( new ReadOnlyController(this) );
184  addXmlGuiController( new SwitchViewController(viewArea,this) );
185  addXmlGuiController( new ViewAreaSplitController(viewManager,viewArea,this) );
186  addXmlGuiController( new FullScreenController(this) );
187  addXmlGuiController( new QuitController(0,this) );
188 
189  addXmlGuiController( new ZoomController(this) );
190  addXmlGuiController( new SelectController(this) );
191  addXmlGuiController( new ClipboardController(this) );
192  addXmlGuiController( new InsertController(codecViewManager,
193  codecManager,this) );
194  addXmlGuiController( new CopyAsController(codecViewManager,
195  codecManager,this) );
196 
197  addTool( new FileSystemBrowserToolView(new FileSystemBrowserTool( syncManager )) );
198  addTool( new DocumentsToolView(new DocumentsTool( documentManager )) );
199  addTool( new TerminalToolView(new TerminalTool( syncManager )) );
200 #ifndef NDEBUG
201  addTool( new VersionViewToolView(new VersionViewTool()) );
202 #endif
203 
204  // Okteta specific
205 // addXmlGuiController( new OverwriteOnlyController(this) );
206  addXmlGuiController( new OverwriteModeController(this) );
207  addXmlGuiController( new SearchController(this,this) );
208  addXmlGuiController( new ReplaceController(this,this) );
209  addXmlGuiController( new GotoOffsetController(viewArea,this) );
210  addXmlGuiController( new SelectRangeController(viewArea,this) );
211  addXmlGuiController( new BookmarksController(this) );
212  addXmlGuiController( new PrintController(this) );
213  addXmlGuiController( new ViewConfigController(this) );
214  addXmlGuiController( new ViewModeController(this) );
215  addXmlGuiController( new ViewProfileController(byteArrayViewProfileManager,this,this) );
216  addXmlGuiController( new ViewProfilesManageController(this,byteArrayViewProfileManager,this) );
217 
218  Kasten2::StatusBar* const bottomBar = static_cast<Kasten2::StatusBar*>( statusBar() );
219  addXmlGuiController( new ViewStatusController(bottomBar) );
220  addXmlGuiController( new ModifiedBarController(bottomBar) );
221  addXmlGuiController( new ReadOnlyBarController(bottomBar) );
222  addXmlGuiController( new ZoomBarController(bottomBar) );
223 
224  addTool( new DocumentInfoToolView(new DocumentInfoTool(syncManager)) );
225  addTool( new ChecksumToolView(new ChecksumTool()) );
226  addTool( new FilterToolView(new FilterTool()) );
227  addTool( new CharsetConversionToolView(new CharsetConversionTool()) );
228  addTool( new StringsExtractToolView(new StringsExtractTool()) );
229  addTool( new ByteTableToolView(new ByteTableTool()) );
230  addTool( new InfoToolView(new InfoTool()) );
231  addTool( new PODDecoderToolView(new PODDecoderTool()) );
232  addTool( new StructToolView(new StructTool()) );
233  addTool( new BookmarksToolView(new BookmarksTool()) );
234 }
235 
236 bool OktetaMainWindow::queryClose()
237 {
238  // TODO: query the document manager or query the view manager?
239  return mProgram->documentManager()->canCloseAll();
240 }
241 
242 void OktetaMainWindow::saveProperties( KConfigGroup& configGroup )
243 {
244  DocumentManager* const documentManager = mProgram->documentManager();
245  DocumentSyncManager* const syncManager = documentManager->syncManager();
246  const QList<AbstractDocument*> documents = documentManager->documents();
247 
248  QStringList urls;
249  foreach( AbstractDocument* document, documents )
250  urls.append( syncManager->urlOf(document).url() );
251 
252  configGroup.writePathEntry( LoadedUrlsKey, urls );
253 }
254 
255 void OktetaMainWindow::readProperties( const KConfigGroup& configGroup )
256 {
257  const QStringList urls = configGroup.readPathEntry( LoadedUrlsKey, QStringList() );
258 
259  DocumentManager* const documentManager = mProgram->documentManager();
260  DocumentSyncManager* const syncManager = documentManager->syncManager();
261  DocumentCreateManager* const createManager = documentManager->createManager();
262  foreach( const KUrl& url, urls )
263  {
264  if( url.isEmpty() )
265  createManager->createNew();
266  else
267  syncManager->load( url );
268  // TODO: set view to offset
269  // if( offset != -1 )
270  }
271 }
272 
273 void OktetaMainWindow::onDataOffered( const QMimeData* mimeData, bool& accept )
274 {
275  accept = KUrl::List::canDecode( mimeData )
276  || mProgram->documentManager()->createManager()->canCreateNewFromData( mimeData );
277 }
278 
279 void OktetaMainWindow::onDataDropped( const QMimeData* mimeData )
280 {
281  const KUrl::List urls = KUrl::List::fromMimeData( mimeData );
282 
283  DocumentManager* const documentManager = mProgram->documentManager();
284  if( ! urls.isEmpty() )
285  {
286  DocumentSyncManager* const syncManager = documentManager->syncManager();
287 
288  foreach( const KUrl& url, urls )
289  syncManager->load( url );
290  }
291  else
292  documentManager->createManager()->createNewFromData( mimeData, true );
293 }
294 
295 void OktetaMainWindow::onCloseRequest( const QList<Kasten2::AbstractView*>& views )
296 {
297  // group views per document
298  QHash<AbstractDocument*,QList<AbstractView*> > viewsToClosePerDocument;
299  foreach( AbstractView* view, views )
300  {
301  AbstractDocument* document = view->findBaseModel<AbstractDocument*>();
302  viewsToClosePerDocument[document].append( view );
303  }
304 
305  // find documents which lose all views
306  const QList<AbstractView*> allViews = viewManager()->views();
307  foreach( AbstractView* view, allViews )
308  {
309  AbstractDocument* document = view->findBaseModel<AbstractDocument*>();
310  QHash<AbstractDocument*,QList<AbstractView*> >::Iterator it =
311  viewsToClosePerDocument.find( document );
312 
313  if( it != viewsToClosePerDocument.end() )
314  {
315  const QList<AbstractView*>& viewsOfDocument = it.value();
316  const bool isAnotherView = ! viewsOfDocument.contains( view );
317  if( isAnotherView )
318  viewsToClosePerDocument.erase( it );
319  }
320  }
321 
322  const QList<AbstractDocument*> documentsWithoutViews = viewsToClosePerDocument.keys();
323 
324  DocumentManager* const documentManager = mProgram->documentManager();
325  if( documentManager->canClose(documentsWithoutViews) )
326  {
327  viewManager()->removeViews( views );
328  documentManager->closeDocuments( documentsWithoutViews );
329  }
330 }
331 
332 
333 OktetaMainWindow::~OktetaMainWindow() {}
334 
335 }
viewlistmenucontroller.h
clipboardcontroller.h
Kasten2::AbstractView
Definition: abstractview.h:38
replacecontroller.h
searchcontroller.h
switchviewcontroller.h
charsetconversiontool.h
documentsyncmanager.h
Kasten2::DocumentSyncManager::load
void load(const KUrl &url)
Definition: documentsyncmanager.cpp:90
loadercontroller.h
modelcodecmanager.h
documentmanager.h
bytetabletoolview.h
checksumtoolview.h
gotooffsetcontroller.h
filtertoolview.h
Kasten2::DocumentManager::canClose
bool canClose(AbstractDocument *document)
Definition: documentmanager.cpp:127
stringsextracttoolview.h
Kasten2::DocumentSyncManager::urlOf
KUrl urlOf(AbstractDocument *document) const
Definition: documentsyncmanager.cpp:78
Kasten2::DocumentCreateManager::createNewFromData
void createNewFromData(const QMimeData *mimeData, bool setModified)
Definition: documentcreatemanager.cpp:60
modifiedbarcontroller.h
Kasten2::DocumentManager::documents
QList< AbstractDocument * > documents() const
Definition: documentmanager.cpp:52
bytetabletool.h
terminaltool.h
infotool.h
overwriteonlycontroller.h
structtoolview.h
readonlycontroller.h
Kasten2::StatusBar
Definition: statusbar.h:40
bytearrayviewprofilemanager.h
statusbar.h
stringsextracttool.h
exportcontroller.h
synchronizecontroller.h
setremotecontroller.h
selectrangecontroller.h
viewstatuscontroller.h
printcontroller.h
filtertool.h
Kasten2::DocumentManager::closeDocuments
void closeDocuments(const QList< AbstractDocument * > &documents)
Definition: documentmanager.cpp:84
poddecodertool.h
documentinfotoolview.h
Kasten2::OktetaMainWindow::OktetaMainWindow
OktetaMainWindow(OktetaProgram *program)
Definition: mobile/program/mainwindow.cpp:102
versionviewtoolview.h
versionviewtool.h
overwritemodecontroller.h
mainwindow.h
viewprofilesmanagecontroller.h
closecontroller.h
readonlybarcontroller.h
viewprofilecontroller.h
insertcontroller.h
bookmarkstoolview.h
fullscreencontroller.h
documentstoolview.h
documentstool.h
selectcontroller.h
bookmarkscontroller.h
zoombarcontroller.h
multidocumentstrategy.h
multiviewareas.h
viewconfigcontroller.h
documentinfotool.h
filesystembrowsertoolview.h
Kasten2::AbstractModel::findBaseModel
T findBaseModel() const
returns the first baseModel which is of type T, or null if none is found.
Definition: abstractmodel.h:93
charsetconversiontoolview.h
viewmodecontroller.h
structtool.h
versioncontroller.h
Kasten2::OktetaProgram
Definition: mobile/program/program.h:41
creatorcontroller.h
Kasten2::LoadedUrlsKey
static const char LoadedUrlsKey[]
Definition: mobile/program/mainwindow.cpp:100
checksumtool.h
Kasten2::AbstractDocument
Definition: abstractdocument.h:43
Kasten2::ViewListMenuController
Definition: viewlistmenucontroller.h:43
filesystembrowsertool.h
zoomcontroller.h
bookmarkstool.h
documentcreatemanager.h
Kasten2::ShellWindow
Definition: shellwindow.h:47
viewareasplitcontroller.h
copyascontroller.h
poddecodertoolview.h
quitcontroller.h
infotoolview.h
program.h
modelcodecviewmanager.h
Kasten2::DocumentManager::syncManager
DocumentSyncManager * syncManager()
Definition: documentmanager.h:108
viewmanager.h
Kasten2::DocumentManager::createManager
DocumentCreateManager * createManager()
Definition: documentmanager.h:107
Kasten2::DocumentSyncManager
Definition: documentsyncmanager.h:45
Kasten2::ToolListMenuController
Definition: libs/kasten/controllers/shellwindow/toollistmenu/toollistmenucontroller.h:47
Kasten2::DocumentManager
Definition: documentmanager.h:44
QList< Kasten2::AbstractView * >
terminaltoolview.h
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:04:08 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

okteta

Skip menu "okteta"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdesdk API Reference

Skip menu "kdesdk API Reference"
  • kapptemplate
  • kcachegrind
  • kompare
  • lokalize
  • okteta
  • umbrello
  •   umbrello

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal