From 90825e2392b2d70e43c7a25b8a3752299a933894 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebindings@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kdejava/koala/test/kbase/KBase.java | 596 ++++++++++++++++++++++++++++++++ kdejava/koala/test/kbase/KBaseDoc.java | 198 +++++++++++ kdejava/koala/test/kbase/KBaseView.java | 36 ++ kdejava/koala/test/kbase/kbase.desktop | 11 + kdejava/koala/test/kbase/kbaseui.rc | 8 + 5 files changed, 849 insertions(+) create mode 100644 kdejava/koala/test/kbase/KBase.java create mode 100644 kdejava/koala/test/kbase/KBaseDoc.java create mode 100644 kdejava/koala/test/kbase/KBaseView.java create mode 100644 kdejava/koala/test/kbase/kbase.desktop create mode 100644 kdejava/koala/test/kbase/kbaseui.rc (limited to 'kdejava/koala/test/kbase') diff --git a/kdejava/koala/test/kbase/KBase.java b/kdejava/koala/test/kbase/KBase.java new file mode 100644 index 00000000..abbf784c --- /dev/null +++ b/kdejava/koala/test/kbase/KBase.java @@ -0,0 +1,596 @@ +import java.util.*; + +import org.kde.qt.*; +import org.kde.koala.*; + +/** + * The base class for JavaApiTest application windows. It sets up the main + * window and reads the config file as well as providing a menubar, toolbar + * and statusbar. An instance of KBaseView creates your center view, which is connected + * to the window's Doc object. + * KBase 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 Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team. + * @version KDevelop version 1.2 code generation + */ +public class KBase extends KMainWindow +{ + public static final int ID_STATUS_MSG = 1; + + /** the configuration object of the application */ + private KConfig config; + /** view is the main widget which represents your working area. The View + * class should handle all events of the view widget. It is kept empty so + * you can create your view according to your application's needs by + * changing the view class. + */ + private KBaseView view; + /** doc represents your actual document and is created only once. It keeps + * information such as filename and does the serialization of your files. + */ + private KBaseDoc doc; + + // KAction references to enable/disable actions + private KAction fileNewWindow; + private KAction fileNew; + private KAction fileOpen; + private KRecentFilesAction fileOpenRecent; + private KAction fileSave; + private KAction fileSaveAs; + private KAction fileClose; + private KAction filePrint; + private KAction fileQuit; + private KAction editCut; + private KAction editCopy; + private KAction editPaste; + private KToggleAction viewToolBar; + private KToggleAction viewStatusBar; + + /** construtor of KBase, calls all init functions to create the application. + */ +public KBase(QWidget parent, String name) +{ + super(parent, name, 0); + KApplication kapp = KApplication.kApplication(); + config=kapp.config(); + + /////////////////////////////////////////////////////////////////// + // call inits to invoke all other construction parts + initStatusBar(); + initActions(); + initDocument(); + initView(); + + readOptions(); + + /////////////////////////////////////////////////////////////////// + // disable actions at startup + fileSave.setEnabled(false); + fileSaveAs.setEnabled(false); + filePrint.setEnabled(false); + editCut.setEnabled(false); + editCopy.setEnabled(false); + } + +public KBase() +{ + this(null, null); +} + + /** initializes the KActions of the application */ +protected void initActions() +{ + fileNewWindow = new KAction(tr("New &Window"), "", new KShortcut(), this, SLOT("slotFileNewWindow()"), actionCollection(),"file_new_window"); + fileNew = KStdAction.openNew(this, SLOT("slotFileNew()"), actionCollection()); + fileOpen = KStdAction.open(this, SLOT("slotFileOpen()"), actionCollection()); + fileOpenRecent = (KRecentFilesAction) KStdAction.openRecent(this, SLOT("slotFileOpenRecent(KURL)"), actionCollection()); + fileSave = KStdAction.save(this, SLOT("slotFileSave()"), actionCollection()); + fileSaveAs = KStdAction.saveAs(this, SLOT("slotFileSaveAs()"), actionCollection()); + // this one crashes for me... +// fileClose = KStdAction.close(this, SLOT(slotFileClose()), actionCollection()); + filePrint = KStdAction.print(this, SLOT("slotFilePrint()"), actionCollection()); + fileQuit = KStdAction.quit(this, SLOT("slotFileQuit()"), actionCollection()); + editCut = KStdAction.cut(this, SLOT("slotEditCut()"), actionCollection()); + editCopy = KStdAction.copy(this, SLOT("slotEditCopy()"), actionCollection()); + editPaste = KStdAction.paste(this, SLOT("slotEditPaste()"), actionCollection()); + createStandardStatusBarAction(); +// viewToolBar = KStdAction.showToolbar(this, SLOT("slotViewToolBar()"), actionCollection()); + viewStatusBar = KStdAction.showStatusbar(this, SLOT("slotViewStatusBar()"), actionCollection()); + + fileNewWindow.setToolTip(tr("Opens a new application window")); + fileNew.setToolTip(tr("Creates a new document")); + fileOpen.setToolTip(tr("Opens an existing document")); + fileOpenRecent.setToolTip(tr("Opens a recently used file")); + fileSave.setToolTip(tr("Saves the actual document")); + fileSaveAs.setToolTip(tr("Saves the actual document as...")); +// fileClose.setToolTip(tr("Closes the actual document")); + filePrint .setToolTip(tr("Prints out the actual document")); + fileQuit.setToolTip(tr("Quits the application")); + editCut.setToolTip(tr("Cuts the selected section and puts it to the clipboard")); + editCopy.setToolTip(tr("Copies the selected section to the clipboard")); + editPaste.setToolTip(tr("Pastes the clipboard contents to actual position")); +// viewToolBar.setToolTip(tr("Enables/disables the toolbar")); + viewStatusBar.setToolTip(tr("Enables/disables the statusbar")); + + // use the absolute path to your kbaseui.rc file for testing purpose in createGUI(); + createGUI(); + +} + + + + /** sets up the kstatusBar for the main window by initialzing a statuslabel. + */ +protected void initStatusBar() +{ + /////////////////////////////////////////////////////////////////// + // STATUSBAR + // TODO: add your own items you need for displaying current application status. + kstatusBar().insertItem(tr("Ready."), ID_STATUS_MSG); +} + + /** initializes the document object of the main window that is connected to the view in initView(). + * @see initView(); + */ +public void initDocument() +{ + doc = new KBaseDoc(this, null); + doc.newDocument(); +} + + /** creates the centerwidget of the KTMainWindow instance and sets it as the view + */ +protected void initView() +{ + //////////////////////////////////////////////////////////////////// + // create the main widget here that is managed by KTMainWindow's view-region and + // connect the widget to your document to display document contents. + + view = new KBaseView(this, null); + doc.addView(view); + setCentralWidget(view); + setCaption(doc.URL().fileName(),false); + +} + + /** opens a file specified by commandline option + */ +public void openDocumentFile(KURL url) +{ + slotStatusMsg(tr("Opening file...")); + +// doc.openDocument( url); + fileOpenRecent.addURL( url ); + slotStatusMsg(tr("Ready.")); +} + +public void openDocumentFile() +{ + openDocumentFile(new KURL("")); + return; +} + + + /** returns a pointer to the current document connected to the KTMainWindow instance and is used by + * the View class to access the document object's methods + */ +public KBaseDoc getDocument() +{ + return doc; +} + + /** save general Options like all bar positions and status as well as the geometry and the recent file list to the configuration + * file + */ +protected void saveOptions() +{ + config.setGroup("General Options"); + config.writeEntry("Geometry", size()); +// config.writeEntry("Show Toolbar", viewToolBar.isChecked()); + config.writeEntry("Show Statusbar",viewStatusBar.isChecked()); +// config.writeEntry("ToolBarPos", (int) toolBar("mainToolBar").barPos()); + fileOpenRecent.saveEntries(config,"Recent Files"); +} + + + /** read general Options again and initialize all variables like the recent file list + */ +protected void readOptions() +{ + + config.setGroup("General Options"); + + // bar status settings +// boolean bViewToolbar = config.readBoolEntry("Show Toolbar", true); +// viewToolBar.setChecked(bViewToolbar); +// slotViewToolBar(); + + boolean bViewStatusbar = config.readBoolEntry("Show Statusbar", true); + viewStatusBar.setChecked(bViewStatusbar); + slotViewStatusBar(); + + + // bar position settings +// int toolBarPos; + //Pos=(int) config.readNumEntry("ToolBarPos", KToolBar.Top); +// toolBar("mainToolBar").setBarPos(toolBarPos); + + // initialize the recent file list + fileOpenRecent.loadEntries(config,"Recent Files"); + + QSize size=config.readSizeEntry("Geometry", null); + if(!size.isEmpty()) + { + resize(size); + } +} + + /** 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 KTMainWindow#saveProperties + */ +protected void saveProperties(KConfig _cfg) +{ + if(doc.URL().fileName()!=tr("Untitled") && !doc.isModified()) + { + // saving to tempfile not necessary + + } + else + { + KURL url=doc.URL(); + _cfg.writeEntry("filename", url.url()); + _cfg.writeEntry("modified", doc.isModified()); + String tempname = KApplication.kApplication().tempSaveName(url.url()); + String tempurl= KURL.encode_string(tempname, 0); + KURL _url = new KURL(tempurl); + doc.saveDocument(_url); + } +} + + + /** 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 saveProperties() + * @see KTMainWindow#readProperties + */ +protected void readProperties(KConfig _cfg) +{ + String filename = _cfg.readEntry("filename", ""); + KURL url = new KURL(filename); + boolean modified = _cfg.readBoolEntry("modified", false); + if(modified) + { + boolean canRecover = false; + String tempname = KApplication.kApplication().checkRecoverFile(filename, canRecover); + KURL _url = new KURL(tempname); + + if(canRecover) + { + doc.openDocument(_url); + doc.setModified(); + setCaption(_url.fileName(),true); + QFile.remove(tempname); + } + } + else + { + if(filename.length() > 0) + { + doc.openDocument(url); + setCaption(url.fileName(),false); + } + } +} + + /** queryClose is called by KTMainWindow on each closeEvent of a window. Against the + * default implementation (only returns true), this calles saveModified() on the document object to ask if the document shall + * be saved if Modified; on cancel the closeEvent is rejected. + * @see KTMainWindow#queryClose + * @see KTMainWindow#closeEvent + */ +protected boolean queryClose() +{ + return doc.saveModified(); +} + + /** queryExit is called by KTMainWindow when the last window of the application is going to be closed during the closeEvent(). + * Against the default implementation that just returns true, this calls saveOptions() to save the settings of the last window's + * properties. + * @see KTMainWindow#queryExit + * @see KTMainWindow#closeEvent + */ +protected boolean queryExit() +{ + saveOptions(); + return true; +} + +///////////////////////////////////////////////////////////////////// +// SLOT IMPLEMENTATION +///////////////////////////////////////////////////////////////////// + + /** open a new application window by creating a new instance of KBase */ +public void slotFileNewWindow() +{ + slotStatusMsg(tr("Opening a new application window...")); + + KBase new_window= new KBase(); + new_window.show(); + + slotStatusMsg(tr("Ready.")); +} + + /** clears the document in the actual view to reuse it as the new document */ +public void slotFileNew() +{ + slotStatusMsg(tr("Creating new document...")); + + if(!doc.saveModified()) + { + // here saving wasn't successful + + } + else + { + doc.newDocument(); + setCaption(doc.URL().fileName(), false); + } + + slotStatusMsg(tr("Ready.")); +} + + /** open a file and load it into the document*/ +public void slotFileOpen() +{ +System.out.println("ENTER slotFileOpen()"); + slotStatusMsg(tr("Opening file...")); + + if(!doc.saveModified()) + { + // here saving wasn't successful + + } + else + { + KURL url=KFileDialog.getOpenURL("", + tr("*|All files"), this, tr("Open File...")); + if(!url.isEmpty()) + { + doc.openDocument(url); + setCaption(url.fileName(), false); + fileOpenRecent.addURL( url ); + } + } + slotStatusMsg(tr("Ready.")); +} + + /** opens a file from the recent files menu */ +public void slotFileOpenRecent(KURL url) +{ + slotStatusMsg(tr("Opening file...")); + + if(!doc.saveModified()) + { + // here saving wasn't successful + } + else + { + doc.openDocument(url); + setCaption(url.fileName(), false); + } + + slotStatusMsg(tr("Ready.")); +} + + /** save a document */ +public void slotFileSave() +{ + slotStatusMsg(tr("Saving file...")); + + doc.saveDocument(doc.URL()); + + slotStatusMsg(tr("Ready.")); +} + + /** save a document by a new filename*/ +public void slotFileSaveAs() +{ + slotStatusMsg(tr("Saving file with a new filename...")); + + KURL url=KFileDialog.getSaveURL(QDir.currentDirPath(), + tr("*|All files"), this, tr("Save as...")); + if(!url.isEmpty()) + { + doc.saveDocument(url); + fileOpenRecent.addURL(url); + setCaption(url.fileName(),doc.isModified()); + } + + slotStatusMsg(tr("Ready.")); +} + + /** asks for saving if the file is modified, then closes the actual file and window*/ +public void slotFileClose() +{ + slotStatusMsg(tr("Closing file...")); + + close(); + + slotStatusMsg(tr("Ready.")); +} + + /** print the actual file */ +public void slotFilePrint() +{ + slotStatusMsg(tr("Printing...")); + + QPrinter printer = new QPrinter(); + if (printer.setup(this)) + { + view.print(printer); + } + + slotStatusMsg(tr("Ready.")); +} + + /** closes all open windows by calling close() on each memberList item until the list is empty, then quits the application. + * If queryClose() returns false because the user canceled the saveModified() dialog, the closing breaks. + */ +public void slotFileQuit() +{ + slotStatusMsg(tr("Exiting...")); + saveOptions(); + // close the first window, the list makes the next one the first again. + // This ensures that queryClose() is called on each window to ask for closing + KMainWindow w; + Iterator it = memberList().iterator(); + while(it.hasNext()) + { + w=(KMainWindow)it.next(); + // only close the window if the closeEvent is accepted. If the user presses Cancel on the saveModified() dialog, + // the window and the application stay open. + if(!w.close()) + break; + } + + slotStatusMsg(tr("Ready.")); +} + + /** put the marked text/object into the clipboard and remove + * it from the document + */ +public void slotEditCut() +{ + slotStatusMsg(tr("Cutting selection...")); + + slotStatusMsg(tr("Ready.")); +} + + /** put the marked text/object into the clipboard + */ +public void slotEditCopy() +{ + slotStatusMsg(tr("Copying selection to clipboard...")); + + slotStatusMsg(tr("Ready.")); +} + + /** paste the clipboard into the document + */ +public void slotEditPaste() +{ + slotStatusMsg(tr("Inserting clipboard contents...")); + + slotStatusMsg(tr("Ready.")); +} + + /** toggles the toolbar + */ +public void slotViewToolBar() +{ + slotStatusMsg(tr("Toggling toolbar...")); + /////////////////////////////////////////////////////////////////// + // turn Toolbar on or off +// if(!viewToolBar.isChecked()) +// { +// toolBar("mainToolBar").hide(); +// } +// else +// { +// toolBar("mainToolBar").show(); +// } + + slotStatusMsg(tr("Ready.")); +} + + /** toggles the statusbar + */ +public void slotViewStatusBar() +{ + slotStatusMsg(tr("Toggle the statusbar...")); + /////////////////////////////////////////////////////////////////// + //turn Statusbar on or off + if(!viewStatusBar.isChecked()) + { + kstatusBar().hide(); + } + else + { + kstatusBar().show(); + } + + slotStatusMsg(tr("Ready.")); +} + + + /** changes the statusbar contents for the standard label permanently, used to indicate current actions. + * @param text the text that is displayed in the statusbar + */ +public void slotStatusMsg(String text) +{ + /////////////////////////////////////////////////////////////////// + // change status message permanently + kstatusBar().clear(); + kstatusBar().changeItem(text, ID_STATUS_MSG); +} + +static String description = + "JavaApiTest"; +// INSERT A DESCRIPTION FOR YOUR APPLICATION HERE + + +static String[][] options = +{ + { "+[File]", "file to open", null } + // INSERT YOUR COMMANDLINE OPTIONS HERE +}; + +static String VERSION = "0.1"; + +public static void main(String[] cmdLineArgs) +{ + + KAboutData aboutData = new KAboutData( "kbase", "JavaApiTest", + VERSION, description, KAboutData.License_GPL, + "(c) 2001, Richard Dale"); + aboutData.addAuthor("Richard Dale",null, "Lost_Highway@tipitina.demon.co.uk"); + KCmdLineArgs.init( cmdLineArgs, aboutData ); + KCmdLineArgs.addCmdLineOptions( options ); // Add our own options. + + KApplication app = new KApplication(); + + if (app.isRestored()) + { + RESTORE("KBase"); + } + else + { + KBase kbase = new KBase(); + kbase.show(); + KCmdLineArgs args = KCmdLineArgs.parsedArgs(); + + if (args.count() > 0) + { + kbase.openDocumentFile(new KURL(args.arg(0))); + } + else + { + kbase.openDocumentFile(); + } + args.clear(); + } + + app.exec(); + return; +} + + static { + qtjava.initialize(); + kdejava.initialize(); + } + +} diff --git a/kdejava/koala/test/kbase/KBaseDoc.java b/kdejava/koala/test/kbase/KBaseDoc.java new file mode 100644 index 00000000..0ee4f8f3 --- /dev/null +++ b/kdejava/koala/test/kbase/KBaseDoc.java @@ -0,0 +1,198 @@ +import java.util.*; + +import org.kde.qt.*; +import org.kde.koala.*; + +/** KBaseDoc provides a document object for a document-view model. + * + * The KBaseDoc class provides a document object that can be used in conjunction with the classes JavaApiTestApp and KBaseView + * to create a document-view model for standard KDE applications based on KApplication and KMainWindow. Thereby, the document object + * is created by the JavaApiTestApp instance and contains the document structure with the according methods for manipulation of the document + * data by KBaseView objects. Also, KBaseDoc contains the methods for serialization of the document data from and to files. + * + * @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team. + * @version KDevelop version 1.2 code generation + */ +public class KBaseDoc extends QObject { + + /** the list of the views currently connected to the document */ + public ArrayList pViewList; + + /** the modified flag of the current document */ + private boolean modified; + private KURL doc_url; + + /** Constructor for the fileclass of the application */ +public KBaseDoc(QWidget parent, String name) +{ + super(parent, name); + setURL(new KURL()); + + if(pViewList == null) + { + pViewList = new ArrayList(); + } + +// pViewList.setAutoDelete(true); +} + + /** adds a view to the document which represents the document contents. Usually this is your main view. */ +public void addView(KBaseView view) +{ + pViewList.add(view); +} + + /** removes a view from the list of currently connected views */ +public void removeView(KBaseView view) +{ + pViewList.remove(view); +} + + /** sets the modified flag for the document after a modifying action on the view connected to the document.*/ +public void setModified(boolean _m){ modified=_m; } +public void setModified(){ modified=true; } + + /** returns if the document is modified or not. Use this to determine if your document needs saving by the user on closing.*/ +public boolean isModified(){ return modified; } + + /** sets the URL of the document */ +public void setURL(KURL url) +{ + doc_url=url; +} + + /** returns the KURL of the document */ +public KURL URL() +{ + return doc_url; +} + + /** calls repaint() on all views connected to the document object and is called by the view by which the document has been changed. + * As this view normally repaints itself, it is excluded from the paintEvent. + */ +public void slotUpdateAllViews(KBaseView sender) +{ + KBaseView w; + if(pViewList != null) + { + Iterator it = pViewList.iterator(); + while(it.hasNext()) + { + w=(KBaseView)it.next(); + if(w!=sender) + w.repaint(); + } + } + +} + + /** "save modified" - asks the user for saving if the document is modified */ +public boolean saveModified() +{ + boolean completed=true; + + if(modified) + { + KBase win=(KBase ) parent(); + int want_save = KMessageBox.warningYesNoCancel(win, tr("Warning"), + tr("The current file has been modified.\n" + + "Do you want to save it?")); + switch(want_save) + { + case 1: + if (doc_url.fileName() == tr("Untitled")) + { + win.slotFileSaveAs(); + } + else + { + saveDocument(URL()); + }; + + deleteContents(); + completed=true; + break; + + case 2: + setModified(false); + deleteContents(); + completed=true; + break; + + case 3: + completed=false; + break; + + default: + completed=false; + break; + } + } + + return completed; +} + + /** closes the acutal document */ +public void closeDocument() +{ + deleteContents(); +} + + /** initializes the document generally */ +public boolean newDocument() +{ + ///////////////////////////////////////////////// + // TODO: Add your document initialization code here + ///////////////////////////////////////////////// + modified=false; + doc_url.setFileName(tr("Untitled")); + + return true; +} + + /** loads the document by filename and format and emits the updateViews() signal */ +public boolean openDocument(KURL url, String format) +{ + StringBuffer tmpfile = new StringBuffer(""); + NetAccess.download( url, tmpfile, null ); + ///////////////////////////////////////////////// + // TODO: Add your document opening code here + ///////////////////////////////////////////////// + + NetAccess.removeTempFile( tmpfile.toString() ); + + modified=false; + return true; +} + +public boolean openDocument(KURL url) +{ + return openDocument(url, null); +} + + /** saves the document under filename and format.*/ +public boolean saveDocument(KURL url, String format) +{ + ///////////////////////////////////////////////// + // TODO: Add your document saving code here + ///////////////////////////////////////////////// + + modified=false; + return true; +} + +public boolean saveDocument(KURL url) +{ + return saveDocument(url, null); +} + + /** deletes the document's contents */ +public void deleteContents() +{ + ///////////////////////////////////////////////// + // TODO: Add implementation to delete the document contents + ///////////////////////////////////////////////// + +} + +} diff --git a/kdejava/koala/test/kbase/KBaseView.java b/kdejava/koala/test/kbase/KBaseView.java new file mode 100644 index 00000000..2b745b11 --- /dev/null +++ b/kdejava/koala/test/kbase/KBaseView.java @@ -0,0 +1,36 @@ +import org.kde.qt.*; + +/** The KBaseView class provides the view widget for the KBase instance. + * The View instance inherits QWidget as a base class and represents the view object of a KTMainWindow. As KBaseView is part of the + * docuement-view model, it needs a reference to the document object connected with it by the KBase class to manipulate and display + * the document structure provided by the KBaseDoc class. + * + * @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team. + * @version KDevelop version 0.4 code generation + */ +public class KBaseView extends QWidget { + +public KBaseView(QWidget parent, String name) +{ + super(parent, name); + setBackgroundMode(PaletteBase); +} + +public KBaseDoc getDocument() +{ + KBase theApp=(KBase) parentWidget(); + + return theApp.getDocument(); +} + +public void print(QPrinter pPrinter) +{ + QPainter printpainter = new QPainter(); + printpainter.begin(pPrinter); + + // TODO: add your printing code here + + printpainter.end(); +} + +} diff --git a/kdejava/koala/test/kbase/kbase.desktop b/kdejava/koala/test/kbase/kbase.desktop new file mode 100644 index 00000000..635ae553 --- /dev/null +++ b/kdejava/koala/test/kbase/kbase.desktop @@ -0,0 +1,11 @@ +# KDE Config File +[Desktop Entry] +Type=Application +Exec=java -cp ".:/home/duke/src/qt-2.2.1java/javalib:.." KBase KBase -caption "%c" %i %m +Icon=kbase.xpm +DocPath=kbase/index.html +Comment= +Comment[de]= +Terminal=false +Name=KBase +Name[de]=KBase diff --git a/kdejava/koala/test/kbase/kbaseui.rc b/kdejava/koala/test/kbase/kbaseui.rc new file mode 100644 index 00000000..03958feb --- /dev/null +++ b/kdejava/koala/test/kbase/kbaseui.rc @@ -0,0 +1,8 @@ + + + + &File + + + + -- cgit v1.2.1