|
|
|
/***************************************************************************
|
|
|
|
copyright : (C) 2001-2006 by Robby Stephenson
|
|
|
|
email : robby@periapsis.org
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
* *
|
|
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
|
|
* it under the terms of version 2 of the GNU General Public License as *
|
|
|
|
* published by the Free Software Foundation; *
|
|
|
|
* *
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
#ifndef TELLICO_MAINWINDOW_H
|
|
|
|
#define TELLICO_MAINWINDOW_H
|
|
|
|
|
|
|
|
#include <config.h>
|
|
|
|
|
|
|
|
#include "core/dcopinterface.h"
|
|
|
|
#include "translators/translators.h"
|
|
|
|
#include "datavectors.h"
|
|
|
|
|
|
|
|
#include <kmainwindow.h>
|
|
|
|
|
|
|
|
class KToolBar;
|
|
|
|
class KURL;
|
|
|
|
class KAction;
|
|
|
|
class KSelectAction;
|
|
|
|
class KToggleAction;
|
|
|
|
class KRecentFilesAction;
|
|
|
|
class KActionMenu;
|
|
|
|
class KDialogBase;
|
|
|
|
|
|
|
|
class TQCloseEvent;
|
|
|
|
class TQSplitter;
|
|
|
|
class TQListViewItem;
|
|
|
|
|
|
|
|
namespace Tellico {
|
|
|
|
// forward declarations
|
|
|
|
namespace GUI {
|
|
|
|
class LineEdit;
|
|
|
|
class TabControl;
|
|
|
|
}
|
|
|
|
class Controller;
|
|
|
|
class ViewStack;
|
|
|
|
class DetailedListView;
|
|
|
|
class FilterDialog;
|
|
|
|
class EntryEditDialog;
|
|
|
|
class GroupView;
|
|
|
|
class FilterView;
|
|
|
|
class LoanView;
|
|
|
|
class ConfigDialog;
|
|
|
|
class CollectionFieldsDialog;
|
|
|
|
class StringMapDialog;
|
|
|
|
class EntryItem;
|
|
|
|
class FetchDialog;
|
|
|
|
class ReportDialog;
|
|
|
|
class StatusBar;
|
|
|
|
class DropHandler;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The base class for Tellico application windows. It sets up the main
|
|
|
|
* window and reads the config file as well as providing a menubar, toolbar
|
|
|
|
* and statusbar. Tellico reimplements the methods that KMainWindow provides
|
|
|
|
* for main window handling and supports full session management as well as
|
|
|
|
* using KActions.
|
|
|
|
* @see KMainWindow
|
|
|
|
* @see KApplication
|
|
|
|
* @see KConfig
|
|
|
|
*
|
|
|
|
* @author Robby Stephenson
|
|
|
|
*/
|
|
|
|
class MainWindow : public KMainWindow, public ApplicationInterface {
|
|
|
|
Q_OBJECT
|
|
|
|
TQ_OBJECT
|
|
|
|
|
|
|
|
friend class Controller;
|
|
|
|
friend class DropHandler;
|
|
|
|
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
* The main window constructor, calls all init functions to create the application.
|
|
|
|
*/
|
|
|
|
MainWindow(TQWidget* parent=0, const char* name=0);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Opens the initial file.
|
|
|
|
*
|
|
|
|
* @param nofile If true, even if the config option to reopen last file is set, no file is opened
|
|
|
|
*/
|
|
|
|
void initFileOpen(bool nofile);
|
|
|
|
/**
|
|
|
|
* Saves the document
|
|
|
|
*
|
|
|
|
* @return Returns @p true if successful
|
|
|
|
*/
|
|
|
|
bool fileSave();
|
|
|
|
/**
|
|
|
|
* Saves a document by a new filename
|
|
|
|
*
|
|
|
|
* @return Returns @p true if successful
|
|
|
|
*/
|
|
|
|
bool fileSaveAs();
|
|
|
|
/**
|
|
|
|
* @return Returns whether the current collection is still the non-saved default one
|
|
|
|
*/
|
|
|
|
bool isNewDocument() const { return m_newDocument; }
|
|
|
|
/**
|
|
|
|
* Used by main() and DCOP to import file.
|
|
|
|
*
|
|
|
|
* @param format The file format
|
|
|
|
* @param url The url
|
|
|
|
*/
|
|
|
|
virtual bool importFile(Import::Format format, const KURL& url, Import::Action action);
|
|
|
|
/**
|
|
|
|
* Used by DCOP to export to a file.
|
|
|
|
*/
|
|
|
|
virtual bool exportCollection(Export::Format format, const KURL& url);
|
|
|
|
/**
|
|
|
|
* Used by DCOP
|
|
|
|
*/
|
|
|
|
virtual void openFile(const TQString& file);
|
|
|
|
virtual void setFilter(const TQString& text);
|
|
|
|
virtual bool showEntry(long id);
|
|
|
|
|
|
|
|
public slots:
|
|
|
|
/**
|
|
|
|
* Initializes some stuff after the object is created.
|
|
|
|
*/
|
|
|
|
void slotInit();
|
|
|
|
/**
|
|
|
|
* Cleans up everything and then opens a new document.
|
|
|
|
*
|
|
|
|
* @param type Type of collection to add
|
|
|
|
*/
|
|
|
|
void slotFileNew(int type);
|
|
|
|
/**
|
|
|
|
* Opens a file and loads it into the document
|
|
|
|
*/
|
|
|
|
void slotFileOpen();
|
|
|
|
/**
|
|
|
|
* Opens a file by URL and loads it into the document
|
|
|
|
*
|
|
|
|
* @param url The url to open
|
|
|
|
*/
|
|
|
|
void slotFileOpen(const KURL& url);
|
|
|
|
/**
|
|
|
|
* Opens a file from the recent files menu
|
|
|
|
*
|
|
|
|
* @param url The url sent by the RecentFilesAction
|
|
|
|
*/
|
|
|
|
void slotFileOpenRecent(const KURL& url);
|
|
|
|
/**
|
|
|
|
* Saves the document
|
|
|
|
*/
|
|
|
|
void slotFileSave();
|
|
|
|
/**
|
|
|
|
* Saves a document by a new filename
|
|
|
|
*/
|
|
|
|
void slotFileSaveAs();
|
|
|
|
/**
|
|
|
|
* Prints the current document.
|
|
|
|
*/
|
|
|
|
void slotFilePrint();
|
|
|
|
/**
|
|
|
|
* Quits the application.
|
|
|
|
*/
|
|
|
|
void slotFileQuit();
|
|
|
|
/**
|
|
|
|
* Puts the marked text/object into the clipboard and removes it from the document.
|
|
|
|
*/
|
|
|
|
void slotEditCut();
|
|
|
|
/*
|
|
|
|
* Puts the marked text/object into the clipboard.
|
|
|
|
*/
|
|
|
|
void slotEditCopy();
|
|
|
|
/**
|
|
|
|
* Pastes the clipboard into the document.
|
|
|
|
*/
|
|
|
|
void slotEditPaste();
|
|
|
|
/**
|
|
|
|
* Selects all the entries in the collection.
|
|
|
|
*/
|
|
|
|
void slotEditSelectAll();
|
|
|
|
/**
|
|
|
|
* Deselects all the entries in the collection.
|
|
|
|
*/
|
|
|
|
void slotEditDeselect();
|
|
|
|
/**
|
|
|
|
* Toggles the group widget.
|
|
|
|
*/
|
|
|
|
void slotToggleGroupWidget();
|
|
|
|
/**
|
|
|
|
* Toggles the edit widget.
|
|
|
|
*/
|
|
|
|
void slotToggleEntryEditor();
|
|
|
|
/**
|
|
|
|
* Toggles the edit widget.
|
|
|
|
*/
|
|
|
|
void slotToggleEntryView();
|
|
|
|
/**
|
|
|
|
* Shows the configuration dialog for the application.
|
|
|
|
*/
|
|
|
|
void slotShowConfigDialog();
|
|
|
|
/**
|
|
|
|
* Hides the configuration dialog for the application.
|
|
|
|
*/
|
|
|
|
void slotHideConfigDialog();
|
|
|
|
/**
|
|
|
|
* Shows the fetch dialog.
|
|
|
|
*/
|
|
|
|
void slotShowFetchDialog();
|
|
|
|
/**
|
|
|
|
* Hides the fetch dialog.
|
|
|
|
*/
|
|
|
|
void slotHideFetchDialog();
|
|
|
|
/**
|
|
|
|
* Changes the statusbar contents for the standard label permanently,
|
|
|
|
* used to indicate current actions being made.
|
|
|
|
*
|
|
|
|
* @param text The text that is displayed in the statusbar
|
|
|
|
*/
|
|
|
|
void slotStatusMsg(const TQString& text);
|
|
|
|
void slotClearStatus();
|
|
|
|
/**
|
|
|
|
* Shows the configuration window for the toolbars.
|
|
|
|
*/
|
|
|
|
void slotConfigToolbar();
|
|
|
|
/**
|
|
|
|
* Updates the toolbars;
|
|
|
|
*/
|
|
|
|
void slotNewToolbarConfig();
|
|
|
|
/**
|
|
|
|
* Shows the configuration window for the key bindgins.
|
|
|
|
*/
|
|
|
|
void slotConfigKeys();
|
|
|
|
/**
|
|
|
|
* Updates the entry count in the status bar.
|
|
|
|
*/
|
|
|
|
void slotEntryCount();
|
|
|
|
/**
|
|
|
|
* Handles updating everything when the configuration is changed
|
|
|
|
* via the configuration dialog. This slot is called when the OK or Apply
|
|
|
|
* button is clicked in the dialog
|
|
|
|
*/
|
|
|
|
void slotHandleConfigChange();
|
|
|
|
/**
|
|
|
|
* Changes the grouping of the entries in the @ref GroupView. The current value
|
|
|
|
* of the combobox in the toolbar is used.
|
|
|
|
*/
|
|
|
|
void slotChangeGrouping();
|
|
|
|
/**
|
|
|
|
* Imports data.
|
|
|
|
*
|
|
|
|
* @param format The import format
|
|
|
|
*/
|
|
|
|
void slotFileImport(int format);
|
|
|
|
/**
|
|
|
|
* Exports the current document.
|
|
|
|
*
|
|
|
|
* @param format The export format
|
|
|
|
*/
|
|
|
|
void slotFileExport(int format);
|
|
|
|
/**
|
|
|
|
* Shows the filter dialog for the application.
|
|
|
|
*/
|
|
|
|
void slotShowFilterDialog();
|
|
|
|
/**
|
|
|
|
* Hides the filter dialog for the application.
|
|
|
|
*/
|
|
|
|
void slotHideFilterDialog();
|
|
|
|
/**
|
|
|
|
* Shows the collection properties dialog for the application.
|
|
|
|
*/
|
|
|
|
void slotShowCollectionFieldsDialog();
|
|
|
|
/**
|
|
|
|
* Hides the collection properties dialog for the application.
|
|
|
|
*/
|
|
|
|
void slotHideCollectionFieldsDialog();
|
|
|
|
/**
|
|
|
|
* Shows the "Tip of the Day" dialog.
|
|
|
|
*
|
|
|
|
* @param force Whether the configuration setting should be ignored
|
|
|
|
*/
|
|
|
|
void slotShowTipOfDay(bool force=true);
|
|
|
|
/**
|
|
|
|
* Shows the string macro editor dialog for the application.
|
|
|
|
*/
|
|
|
|
void slotShowStringMacroDialog();
|
|
|
|
/**
|
|
|
|
* Hides the string macro editor dialog for the application.
|
|
|
|
*/
|
|
|
|
void slotHideStringMacroDialog();
|
|
|
|
/**
|
|
|
|
* Handle a url that indicates some actino should be taken
|
|
|
|
*/
|
|
|
|
void slotURLAction(const KURL& url);
|
|
|
|
|
|
|
|
private:
|
|
|
|
/**
|
|
|
|
* Saves the general options like all toolbar positions and status as well as the
|
|
|
|
* geometry and the recent file list to the configuration file.
|
|
|
|
*/
|
|
|
|
void saveOptions();
|
|
|
|
/**
|
|
|
|
* Reads the specific options.
|
|
|
|
*/
|
|
|
|
void readOptions();
|
|
|
|
/**
|
|
|
|
* Initializes the KActions of the application
|
|
|
|
*/
|
|
|
|
void initActions();
|
|
|
|
/**
|
|
|
|
* Sets up the statusbar for the main window by initializing a status label
|
|
|
|
* and inserting a progress bar and entry counter.
|
|
|
|
*/
|
|
|
|
void initStatusBar();
|
|
|
|
/**
|
|
|
|
* Initiates the view, setting up all the dock windows and so on.
|
|
|
|
*/
|
|
|
|
void initView();
|
|
|
|
/**
|
|
|
|
* Initiates the document.
|
|
|
|
*/
|
|
|
|
void initDocument();
|
|
|
|
/**
|
|
|
|
* Initiates all the signal and slot connections between major objects in the view.
|
|
|
|
*/
|
|
|
|
void initConnections();
|
|
|
|
/**
|
|
|
|
* Initiates shutdown
|
|
|
|
*/
|
|
|
|
// void closeEvent(TQCloseEvent *e);
|
|
|
|
/**
|
|
|
|
* Saves the window properties for each open window during session end to the
|
|
|
|
* session config file, including saving the currently opened file by a temporary
|
|
|
|
* filename provided by KApplication.
|
|
|
|
* @see KMainWindow::saveProperties
|
|
|
|
*
|
|
|
|
* @param cfg The config class with the properties to restore
|
|
|
|
*/
|
|
|
|
void saveProperties(KConfig* cfg);
|
|
|
|
/**
|
|
|
|
* Reads the session config file and restores the application's state including
|
|
|
|
* the last opened files and documents by reading the temporary files saved by
|
|
|
|
* @ref saveProperties().
|
|
|
|
* @see KMainWindow::readProperties
|
|
|
|
*
|
|
|
|
* @param cfg The config class with the properties to restore
|
|
|
|
*/
|
|
|
|
void readProperties(KConfig* cfg);
|
|
|
|
/**
|
|
|
|
* Called before the window is closed, either by the user or indirectely by the
|
|
|
|
* session manager.
|
|
|
|
*
|
|
|
|
* The purpose of this function is to prepare the window in a way that it is safe to close it,
|
|
|
|
* i.e. without the user losing some data.
|
|
|
|
* @see KMainWindow::queryClose
|
|
|
|
*/
|
|
|
|
bool queryClose();
|
|
|
|
/**
|
|
|
|
* Called before the very last window is closed, either by the user
|
|
|
|
* or indirectly by the session manager.
|
|
|
|
* @see KMainWindow::queryExit
|
|
|
|
*/
|
|
|
|
bool queryExit();
|
|
|
|
/**
|
|
|
|
* Actual method used when opening a URL. Updating for the list views is turned off
|
|
|
|
* as well as sorting, in order to more quickly load the document.
|
|
|
|
*
|
|
|
|
* @param url The url to open
|
|
|
|
*/
|
|
|
|
bool openURL(const KURL& url);
|
|
|
|
/*
|
|
|
|
* Helper method to handle the printing duties.
|
|
|
|
*
|
|
|
|
* @param html The HTML string representing the doc to print
|
|
|
|
*/
|
|
|
|
void doPrint(const TQString& html);
|
|
|
|
|
|
|
|
void XSLTError();
|
|
|
|
/**
|
|
|
|
* Helper function to activate a slot in the edit widget.
|
|
|
|
* Primarily used for copy, cut, and paste.
|
|
|
|
*
|
|
|
|
* @param slot The slot name
|
|
|
|
*/
|
|
|
|
void activateEditSlot(const char* slot);
|
|
|
|
void addFilterView();
|
|
|
|
void addLoanView();
|
|
|
|
void updateCaption(bool modified);
|
|
|
|
void updateCollectionActions();
|
|
|
|
void updateEntrySources();
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
/**
|
|
|
|
* Updates the actions when a file is opened.
|
|
|
|
*/
|
|
|
|
void slotEnableOpenedActions();
|
|
|
|
/**
|
|
|
|
* Updates the save action and the caption when the document is modified.
|
|
|
|
*/
|
|
|
|
void slotEnableModifiedActions(bool modified = true);
|
|
|
|
/**
|
|
|
|
* Read the options specific to a collection
|
|
|
|
*
|
|
|
|
* @param coll The collection pointer
|
|
|
|
*/
|
|
|
|
void readCollectionOptions(Tellico::Data::CollPtr coll);
|
|
|
|
/**
|
|
|
|
* Saves the options relevant for a collection. I was having problems with the collection
|
|
|
|
* being destructed before I could save info.
|
|
|
|
*
|
|
|
|
* @param coll A pointer to the collection
|
|
|
|
*/
|
|
|
|
void saveCollectionOptions(Tellico::Data::CollPtr coll);
|
|
|
|
/**
|
|
|
|
* Queue a filter update. The timer adds a 200 millisecond delay before actually
|
|
|
|
* updating the filter.
|
|
|
|
*/
|
|
|
|
void slotQueueFilter();
|
|
|
|
/**
|
|
|
|
* Update the filter to match any field with text. If a non-word character appears, the
|
|
|
|
* text is interpreted as a regexp.
|
|
|
|
*/
|
|
|
|
void slotUpdateFilter();
|
|
|
|
/**
|
|
|
|
* Updates the collection toolbar.
|
|
|
|
*/
|
|
|
|
void slotUpdateCollectionToolBar(Tellico::Data::CollPtr coll);
|
|
|
|
/**
|
|
|
|
* Make sure the edit dialog is visible and start a new entry.
|
|
|
|
*/
|
|
|
|
void slotNewEntry();
|
|
|
|
/**
|
|
|
|
* Handle the entry editor dialog being closed.
|
|
|
|
*/
|
|
|
|
void slotEditDialogFinished();
|
|
|
|
/**
|
|
|
|
* Handle the Ok button being clicked in the string macros dialog.
|
|
|
|
*/
|
|
|
|
void slotStringMacroDialogOk();
|
|
|
|
/**
|
|
|
|
* Since I use an application icon in the toolbar, I need to change its size whenever
|
|
|
|
* the toolbar changes mode
|
|
|
|
*/
|
|
|
|
void slotUpdateToolbarIcons();
|
|
|
|
/**
|
|
|
|
* Convert current collection to a bibliography.
|
|
|
|
*/
|
|
|
|
void slotConvertToBibliography();
|
|
|
|
/**
|
|
|
|
* Send a citation for the selected entries
|
|
|
|
*/
|
|
|
|
void slotCiteEntry(int action);
|
|
|
|
/**
|
|
|
|
* Show the entry editor and update menu item.
|
|
|
|
*/
|
|
|
|
void slotShowEntryEditor();
|
|
|
|
/**
|
|
|
|
* Show the report window.
|
|
|
|
*/
|
|
|
|
void slotShowReportDialog();
|
|
|
|
void slotGroupLabelActivated();
|
|
|
|
/**
|
|
|
|
* Show the report window.
|
|
|
|
*/
|
|
|
|
void slotHideReportDialog();
|
|
|
|
/**
|
|
|
|
* Focus the filter
|
|
|
|
*/
|
|
|
|
void slotFilterLabelActivated();
|
|
|
|
void slotClearFilter();
|
|
|
|
void slotRenameCollection();
|
|
|
|
|
|
|
|
private:
|
|
|
|
void importFile(Import::Format format, const KURL::List& kurls);
|
|
|
|
bool importCollection(Data::CollPtr coll, Import::Action action);
|
|
|
|
|
|
|
|
// the reason that I have to keep pointers to all these
|
|
|
|
// is because they get plugged into menus later in Controller
|
|
|
|
KRecentFilesAction* m_fileOpenRecent;
|
|
|
|
KAction* m_fileSave;
|
|
|
|
KAction* m_newEntry;
|
|
|
|
KAction* m_editEntry;
|
|
|
|
KAction* m_copyEntry;
|
|
|
|
KAction* m_deleteEntry;
|
|
|
|
KAction* m_mergeEntry;
|
|
|
|
KActionMenu* m_updateEntryMenu;
|
|
|
|
KAction* m_updateAll;
|
|
|
|
KAction* m_checkInEntry;
|
|
|
|
KAction* m_checkOutEntry;
|
|
|
|
KToggleAction* m_toggleGroupWidget;
|
|
|
|
KToggleAction* m_toggleEntryEditor;
|
|
|
|
KToggleAction* m_toggleEntryView;
|
|
|
|
|
|
|
|
KSelectAction* m_entryGrouping;
|
|
|
|
GUI::LineEdit* m_quickFilter;
|
|
|
|
|
|
|
|
// m_split is used between the stuff on the left and stuff on the right
|
|
|
|
TQSplitter* m_split;
|
|
|
|
// m_leftSplit is used between detailed view and entry view
|
|
|
|
TQSplitter* m_rightSplit;
|
|
|
|
|
|
|
|
Tellico::StatusBar* m_statusBar;
|
|
|
|
|
|
|
|
DetailedListView* m_detailedView;
|
|
|
|
EntryEditDialog* m_editDialog;
|
|
|
|
GUI::TabControl* m_viewTabs;
|
|
|
|
GroupView* m_groupView;
|
|
|
|
FilterView* m_filterView;
|
|
|
|
LoanView* m_loanView;
|
|
|
|
ViewStack* m_viewStack;
|
|
|
|
|
|
|
|
ConfigDialog* m_configDlg;
|
|
|
|
FilterDialog* m_filterDlg;
|
|
|
|
CollectionFieldsDialog* m_collFieldsDlg;
|
|
|
|
StringMapDialog* m_stringMacroDlg;
|
|
|
|
FetchDialog* m_fetchDlg;
|
|
|
|
ReportDialog* m_reportDlg;
|
|
|
|
|
|
|
|
TQPtrList<KAction> m_fetchActions;
|
|
|
|
CollectionInterface m_collInterface;
|
|
|
|
|
|
|
|
// keep track of the number of queued filter updates
|
|
|
|
uint m_queuedFilters;
|
|
|
|
|
|
|
|
// keep track whether everything gets initialized
|
|
|
|
bool m_initialized : 1;
|
|
|
|
// need to keep track of whether the current collection has never been saved
|
|
|
|
bool m_newDocument : 1;
|
|
|
|
};
|
|
|
|
|
|
|
|
} // end namespace
|
|
|
|
#endif // TELLICO_MAINWINDOW_H
|