You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdelibs/kdeui/tests/kwindowtest.cpp

529 lines
15 KiB

#include <tqmessagebox.h>
#include <tqpopupmenu.h>
#include <tqpixmap.h>
#include <tqkeycode.h>
#include <tqwidget.h>
#include <tqstring.h>
#include <tqcursor.h>
#include <stdlib.h>
#include <kstatusbar.h>
#include <kapplication.h>
#include <kcombobox.h>
#include <khelpmenu.h>
#include <kcmdlineargs.h>
#include <kmenubar.h>
#include <ktoolbarradiogroup.h>
#include <kiconloader.h>
#include <kpopupmenu.h>
#include <tqmultilineedit.h>
#include "kwindowtest.h"
#include <kglobal.h>
//#include <dclock.h>
/*
Ok this is a constructor of our top widget. It inherits KMainWindow.
In constructor wi will create all of our interface elements:
menubar, toolbar(s), statusbar, and main widget. Non of those
interface is obligatory, i.e. you don't have to use menubar,
toolbars or statusbar if you don't want to. Theoreticly, you
don't need even main widget (but in that case, you'll get blank
KMainWindow).
*/
static int itemId = 0;
testWindow::testWindow (TQWidget *parent, const char *name)
: KMainWindow (parent,name)
{
ena=false;
setCaption("test window");
setAutoSaveSettings();
/******************************/
/* First, we setup setup Menus */
/******************************/
menuBar = new KMenuBar (this);
// First popup...
fileMenu = new TQPopupMenu;
// We insert this popup in menubar with caption "File".
// Prefix "&" means that "F" will be underlined
menuBar->insertItem ("&File", fileMenu);
// We insert item "Exit" with accelerator ALT-Q, and connect
// it to application's exit-slot.
fileMenu->insertItem ("&Exit", KApplication::kApplication(),
TQT_SLOT( quit() ), ALT + Key_Q );
// Another popup...
toolBarMenu = new TQPopupMenu;
menuBar->insertItem ("&Toolbars", toolBarMenu);
toolBarMenu->insertItem ("(Un)Hide tollbar 1", this, TQT_SLOT(slotHide1()));
toolBarMenu->insertItem ("(Un)Hide tollbar 2", this, TQT_SLOT(slotHide2()));
itemsMenu = new TQPopupMenu;
menuBar->insertItem ("&Items", itemsMenu);
exitB = true; // exit button is shown
lineL = true; // Lined is enabled
greenF = false; // Frame not inserted
itemsMenu->insertItem ("delete/insert exit button", this, TQT_SLOT(slotExit()));
itemsMenu->insertItem ("insert/delete green frame!", this, TQT_SLOT(slotFrame()));
itemsMenu->insertItem ("enable/disable Lined", this, TQT_SLOT(slotLined()));
itemsMenu->insertItem ("Toggle fileNew", this, TQT_SLOT(slotNew()));
itemsMenu->insertItem ("Clear comboBox", this, TQT_SLOT(slotClearCombo()));
itemsMenu->insertItem ("Insert List in Combo", this, TQT_SLOT(slotInsertListInCombo()));
itemsMenu->insertItem ("Make item 3 curent", this, TQT_SLOT(slotMakeItem3Current()));
//itemsMenu->insertItem ("Insert clock!", this, TQT_SLOT(slotInsertClock()));
itemsMenu->insertItem ("Important!", this, TQT_SLOT(slotImportant()));
menuBar->insertSeparator();
helpMenu = new KHelpMenu(this, "KWindowTest was programmed by Sven Radej");
menuBar->insertItem( "&Help", helpMenu->menu() );
/**************************************************/
/*Now, we setup statusbar order is not important. */
/**************************************************/
statusBar = new KStatusBar (this);
statusBar->insertItem("Hi there! ", 0);
statusBar->insertItem("Look for tooltips to see functions", 1);
//DigitalClock *clk = new DigitalClock (statusBar);
//clk->setFrameStyle(TQFrame::NoFrame);
//statusBar->insertWidget(clk, 70, 2);
/***********************/
/* And now the toolbar */
/***********************/
// pixmap which we will use
TQPixmap pix;
// Create toolbar...
tb = toolBar();
// and set it to full width
tb->setFullSize(true);
// First four buttons
pix = BarIcon("filenew");
itemId = tb->insertButton(pix, 0, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotNew()),
true, "Create.. (toggles upper button)", 50);
pix = BarIcon("fileopen");
tb->insertButton(pix, 1, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotOpen()),
false, "Open");
pix = BarIcon("filefloppy");
tb->insertButton(pix, 2, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotSave()),
true, "Save (beep or delayed popup)");
tb->setDelayedPopup(2, itemsMenu);
pix = BarIcon("fileprint");
tb->insertButton(pix, 3, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotPrint()),
true, "Print (enables/disables open)");
// And a combobox
// arguments: text (or strList), ID, writable, signal, object, slot, enabled,
// tooltiptext, size
tb->insertCombo (TQString("one"), 4, true, TQT_SIGNAL(activated(const TQString&)), this,
TQT_SLOT(slotList(const TQString&)), true, "ComboBox", 150);
// Then one line editor
// arguments: text, id, signal, object (this), slot, enabled, tooltiptext, size
tb->insertLined ("ftp://ftp.kde.org/pub/kde", 5, TQT_SIGNAL(returnPressed()), this,
TQT_SLOT(slotReturn()), true, "Location", 200);
// Set this Lined to auto size itself. Note that only one item (Lined or Combo)
// Can be set to autosize; If you specify more of them only last (according to
/// index) will be set to autosize itself. Only Lined or Combo can be
// set to autosize. All items after autoSized one must be aligned right.
// Auto size is valid only for fullWidth toolbars.
tb->setItemAutoSized (5);
// Now add another button and align it right
pix = BarIcon("exit");
tb->insertButton(pix, 6, TQT_SIGNAL(clicked()), KApplication::kApplication(),
TQT_SLOT( quit() ), true, "Exit");
tb->alignItemRight (6);
// Another toolbar
tb1 = new KToolBar(this, TQMainWindow::DockTop); // this one is normal and has separators
pix = BarIcon("filenew");
tb1->insertButton(pix, 0, true, "Create new file2 (Toggle)");
tb1->setToggle(0);
tb1->addConnection (0, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotToggle(bool)));
pix = BarIcon("fileopen");
tb1->insertButton(pix, 1, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotOpen()),
true, "Open (starts progres in sb)");
tb1->insertSeparator ();
pix = BarIcon("filefloppy");
tb1->insertButton(pix, 2, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotSave()),
true, "Save file2 (autorepeat)");
tb1->setAutoRepeat(2);
pix = BarIcon("fileprint");
tb1->insertButton(pix, 3, itemsMenu, true, "Print (pops menu)");
tb1->insertSeparator ();
/**** RADIO BUTTONS */
pix = BarIcon("filenew");
tb1->insertButton(pix, 4, true, "Radiobutton1");
tb1->setToggle(4);
pix = BarIcon("fileopen");
tb1->insertButton(pix, 5, true, "Radiobutton2");
tb1->setToggle(5);
pix = BarIcon("filefloppy");
tb1->insertButton(pix, 6, true, "Radiobutton3");
tb1->setToggle(6);
pix = BarIcon("fileprint");
tb1->insertButton(pix, 7, true, "Radiobutton4");
tb1->setToggle(7);
//Create
rg = new KToolBarRadioGroup (tb1);
rg->addButton(4);
rg->addButton(5);
rg->addButton(6);
rg->addButton(7);
connect (tb1, TQT_SIGNAL(toggled(int)), this, TQT_SLOT(slotToggled(int)));
// Set caption for floating toolbars
tb->setTitle ("Toolbar 1");
tb1->setTitle ("Toolbar 2");
// Set main widget. In this example it is Qt's multiline editor.
widget = new TQMultiLineEdit (this);
// Setup is now complete
// add two toolbars
//addToolBar (tb1);
//addToolBar (tb);
connect (tb, TQT_SIGNAL(highlighted(int,bool)), this, TQT_SLOT(slotMessage(int, bool)));
connect (tb1, TQT_SIGNAL(highlighted(int, bool)), this, TQT_SLOT(slotMessage(int, bool)));
// Floating is enabled by default, so you don't need this.
// tb->enableFloating(true);
// tb1->enableFloating(true);
// Show toolbars
tb->show();
tb1->show();
//... and main widget
setCentralWidget (widget);
// This is not strictly related to toolbars, menubars or KMainWindow.
// Setup popup for completions
completions = new TQPopupMenu;
completions->insertItem("/");
completions->insertItem("/usr/");
completions->insertItem("/lib/");
completions->insertItem("/var/");
completions->insertItem("/bin/");
completions->insertItem("/kde/");
completions->insertItem("/home/");
completions->insertItem("/vmlinuz :-)");
connect (completions, TQT_SIGNAL(activated(int)), this, TQT_SLOT(slotCompletionsMenu(int)));
pr = 0;
}
/***********************************/
/* Now slots for toolbar actions */
/***********************************/
void testWindow::slotToggled(int)
{
statusBar->message ("Buton toggled", 1500);
}
void testWindow::slotInsertClock()
{
//DigitalClock *clock = new DigitalClock(tb1);
//clock->setFrameStyle(TQFrame::NoFrame);
//tb1->insertWidget(8, 70, clock);
}
void testWindow::slotNew()
{
tb1->toggleButton(0);
toolBar()->removeItem( itemId );
}
void testWindow::slotOpen()
{
if (pr == 0)
pr = new TQProgressBar (statusBar);
// statusBar->message(pr);
timer = new TQTimer (pr);
connect (timer, TQT_SIGNAL(timeout()), this, TQT_SLOT(slotGoGoGoo()));
timer->start(100);
}
void testWindow::slotGoGoGoo()
{
pr->setProgress(pr->progress()+1);
if (pr->progress()==100)
{
timer->stop();
statusBar->clear();
delete pr;
pr = 0;
}
}
void testWindow::slotSave()
{
kapp->beep();
statusBar->changeItem("Saving properties...", 0);
}
void testWindow::slotPrint()
{
statusBar->changeItem("Print file pressed", 0);
ena=!ena;
tb->setItemEnabled(1,ena );
}
void testWindow::slotReturn()
{
TQString s = "You entered ";
s = s + tb->getLinedText(5);
statusBar->changeItem(s, 0);
}
void testWindow::slotList(const TQString &str)
{
TQString s = "You chose ";
s = s + str;
statusBar->changeItem(s, 0);
}
void testWindow::slotCompletion()
{
// Now do a completion
// Call your completing function and set that text in klined
// TQString s = tb->getLinedText(/* ID */ 4)
// TQString completed = complete (s);
// tb->setLinedText(/* ID */ 4, completed.data())
// for now this:
completions->popup(TQCursor::pos()); // This popup should understunf keys up and down
/* This is just an example. KLined automatically sets cursor at end of string
when ctrl-d or ctrl-s is pressed. KToolBar will also put cursor at end of text in Lined
after inserting text with setLinedText (...).
*/
}
void testWindow::slotListCompletion()
{
/*
Combo is not behaving good and it is ugly. I will see how it behaves in Qt-1.3,
and then decide should I make a new combobox.
*/
TQString s(tb->getComboItem(4)); // get text in combo
s+= "(completing)";
//tb->getCombo(4)->changeItem(s.data()); // setTextIncombo
}
void testWindow::slotCompletionsMenu(int id)
{
// Now set text in lined
TQString s =completions->text(id);
tb->setLinedText(5, s); // Cursor is automatically at the end of string after this
}
void testWindow::slotHide2 ()
{
tb1->show();
}
void testWindow::slotHide1 ()
{
tb->show();
}
testWindow::~testWindow ()
{
/********************************************************/
/* */
/* THIS IS NOT ANY MORE IMPORTANT BUT ALLOWED!!! */
/* */
/********************************************************/
delete tb1->getWidget(8);
//debug ("kwindowtest: deleted clock");
delete tb;
delete tb1;
delete menuBar;
qDebug ("kwindowtest finished");
}
void testWindow::beFixed()
{
widget->setFixedSize (400, 200);
}
void testWindow::beYFixed()
{
widget->setMinimumSize(400, 200);
widget->setMaximumSize(9999, 200);
}
void testWindow::slotImportant ()
{
statusBar->message("This important message will go away in 15 seconds", 15000);
}
void testWindow::slotExit ()
{
if (exitB == true)
{
tb->removeItem(6);
exitB = false;
}
else
{
TQPixmap pix;
pix = BarIcon("exit");
tb->insertButton(pix, 6, TQT_SIGNAL(clicked()), KApplication::kApplication(),
TQT_SLOT( quit() ), true, "Exit");
tb->alignItemRight (6);
exitB = true;
}
}
void testWindow::slotLined()
{
lineL = !lineL;
tb->setItemEnabled(5, lineL); // enable/disable lined
}
void testWindow::slotToggle (bool on)
{
if (on == true)
statusBar->changeItem("Toggle is on", 0);
else
statusBar->changeItem("Toggle is off", 0);
}
void testWindow::slotFrame()
{
#if 0
if (greenF == false)
{
tb1->insertFrame(10, 100);
tb1->alignItemRight (10); // this is pointless 'cause tb1 is not fullwidth
TQFrame *myFrame = tb1->getFrame(10); // get frame pointer
if (myFrame == 0)
{
warning ("bad frame ID");
return;
}
//paint it green
// Or do whatever you want with it, just don't change its height (height = hardcoded = 24)
// And don't move it
// If you want to have something right from your toolbar you can reduce its
// max_width with setMaxWidth()
myFrame->setBackgroundColor (TQColor("green"));
greenF = true;
}
else
{
tb1->removeItem (10);
greenF = false;
}
#endif
}
void testWindow::slotMessage(int, bool boo)
{
if (boo)
statusBar->message("This button does this and that", 1500);
else
statusBar->clear();
}
// Now few Combo slots, for Torben
void testWindow::slotClearCombo()
{
tb->getCombo(4)->clear();
}
void testWindow::slotInsertListInCombo()
{
TQStringList list;
list.append("ListOne");
list.append("ListTwo");
list.append("ListThree");
list.append("ListFour");
list.append("ListFive");
list.append("ListSix");
list.append("ListSeven");
list.append("ListEight");
list.append("ListNine");
list.append("ListTen");
list.append("ListEleven");
list.append("ListAndSoOn");
tb->getCombo(4)->insertStringList (list,0);
}
void testWindow::slotMakeItem3Current()
{
tb->getCombo(4)->setCurrentItem(3);
}
int main( int argc, char *argv[] )
{
int i;
KCmdLineArgs::init(argc, argv, "KWindowTest", "description", "version");
KApplication *myApp = new KApplication();
testWindow *test = new testWindow;
myApp->setMainWidget(test);
i = TQMessageBox::information(0, "Select", "Select type of mainwidget",
"Fixed", "Y-fixed", "Resizable");
if (i == 0)
test->beFixed();
else if (i == 1)
test->beYFixed();
test->show();
test->resize(400, 500);
int ret = myApp->exec();
//delete test;
return ret;
}
#include "kwindowtest.moc"