/* config-slot: "up" button clicked */ void TopLevel::upButtonClicked() { QListViewItem* item = listbox->currentItem(); if (item && item->itemAbove()) item->itemAbove()->moveItem(item); enable_controls(); }
/* config-slot: "down" button clicked */ void TopLevel::downButtonClicked() { QListViewItem* item = listbox->currentItem(); if (item && item->itemBelow()) item->moveItem(item->itemBelow()); enable_controls(); }
/* config-slot: item in tea-list selected */ void TopLevel::listBoxItemSelected() { if (listbox->currentItem()) { // item selected, display its properties on right side nameEdit->setText(static_cast<TeaListItem *>(listbox->currentItem())->name()); timeEdit->setValue(static_cast<TeaListItem *>(listbox->currentItem())->time()); enable_controls(); } }
/** * \brief Create the controls for which we keep a reference. * \param a The accordion in which the groups are added. */ void bf::snapshot_frame::create_member_controls( accordion* a ) { m_action_choice = new wxChoice( this, IDC_ACTION_CHOICE ); create_snapshot_controls(a); create_marks_controls(a); create_sound_controls(a); create_item_box_controls(a); enable_controls(false); } // snapshot_frame::create_member_controls()
/* config-slot: "new" button clicked */ void TopLevel::newButtonClicked() { TeaListItem* item = new TeaListItem(listbox, listbox->currentItem()); listbox->setCurrentItem(item); nameEdit->setText(i18n("New Tea")); timeEdit->setValue(DEFAULT_TEA_TIME); nameEdit->setFocus(); if (listbox->childCount() == 1) { enable_properties(); current_item = item; } enable_controls(); }
/** * \brief Fill the list with the marks of the model. */ void bf::snapshot_frame::fill() { bool enable = false; m_snapshot = NULL; if ( m_model_frame != NULL ) if ( m_model_frame->get_model().has_active_action() ) { m_snapshot = m_model_frame->get_model().get_selected_snapshot(); if ( m_snapshot != NULL ) { enable = true; m_date_button->SetLabel ( wxString::Format(wxT("%.3f"), m_snapshot->get_date()) ); m_function_button->SetLabel (std_to_wx_string(m_snapshot->get_function())); m_function_button->SetLabel (std_to_wx_string(m_snapshot->get_function())); m_sound_frame->set_sound_description( m_snapshot->get_sound() ); m_width_spin->SetValue(m_snapshot->get_width()); m_height_spin->SetValue(m_snapshot->get_height()); m_x_alignment_choice->SetStringSelection (std_to_wx_string(m_snapshot->get_x_alignment())); m_y_alignment_choice->SetStringSelection (std_to_wx_string(m_snapshot->get_y_alignment())); m_x_alignment_value_spin->SetValue (m_snapshot->get_x_alignment_value()); m_y_alignment_value_spin->SetValue (m_snapshot->get_y_alignment_value()); } } enable_controls(enable); fill_mark(); fill_action(); } // snapshot_frame::fill()
static BOOL CALLBACK dialog_proc(unsigned int num, HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch (msg) { case WM_INITDIALOG: init_dialog(hwnd, num); return TRUE; case WM_NOTIFY: { NMHDR *nmhdr = (NMHDR *)(lparam); switch (nmhdr->code) { case PSN_APPLY: SetWindowLongPtr(hwnd, DWLP_MSGRESULT, store_dialog_results(hwnd, num) ? PSNRET_NOERROR : PSNRET_INVALID); return TRUE; } break; } case WM_COMMAND: switch (LOWORD(wparam)) { case IDC_SELECTDIR: case IDC_SELECTDISK: case IDC_SELECTREAL: case IDC_SELECTNONE: enable_controls_for_disk_device_type(hwnd, LOWORD(wparam)); break; case IDC_TOGGLE_USEIECDEVICE: enable_controls(hwnd); break; case IDC_BROWSEDISK: browse_diskimage(hwnd); break; case IDC_AUTOSTART: autostart_diskimage(hwnd); break; case IDC_BROWSEDIR: browse_dir(hwnd); break; } return TRUE; } return FALSE; }
/* config-slot: "delete" button clicked */ void TopLevel::delButtonClicked() { if (listbox->currentItem()) { TeaListItem *curritem = static_cast<TeaListItem *>(listbox->currentItem()); if (listbox->childCount() == 1) { // no childs left after we've deleted this item listbox->setSelected(listbox->currentItem(), false); nameEdit->setText(""); timeEdit->setValue(0); disable_properties(); } else { // select new current item if (listbox->firstChild() != curritem) listbox->setSelected(listbox->firstChild(), true); else listbox->setSelected(listbox->firstChild()->nextSibling(), true); } delete curritem; enable_controls(); } }
static void init_dialog(HWND hwnd, unsigned int num) { const char *disk_image, *dir; TCHAR *st_disk_image, *st_dir; int devtype, n; int xpos, xpos1, xpos2, xpos3; int distance1, distance2; RECT rect; uilib_localize_dialog_param *diskdevice_dialog = #ifdef HAVE_OPENCBM (opencbmlib_is_available()) ? diskdevice_opencbm_dialog : #endif diskdevice_normal_dialog; if (num >= 8 && num <= 11) { /* translate all dialog items */ uilib_localize_dialog(hwnd, diskdevice_dialog); /* adjust the size of the elements in the diskdevice_left_group */ uilib_adjust_group_width(hwnd, diskdevice_left_group); /* adjust the size of the 'read-only' element */ uilib_adjust_group_width(hwnd, diskdevice_read_only); /* get the min x of the read only element */ uilib_get_element_min_x(hwnd, IDC_TOGGLE_ATTACH_READONLY, &xpos3); /* get the min x of the autostart element */ uilib_get_element_min_x(hwnd, IDC_AUTOSTART, &xpos2); /* get the max x of the first browse element */ uilib_get_element_max_x(hwnd, IDC_BROWSEDISK, &xpos1); /* calculate the distance between the browse button and the autostart button */ distance1 = xpos2 - xpos1; /* get the max x of the autostart element */ uilib_get_element_max_x(hwnd, IDC_AUTOSTART, &xpos2); /* calculate the distance between the browse button and the read only element */ distance2 = xpos3 - xpos2; /* get the max x of the disk_device_left_group items */ uilib_get_group_max_x(hwnd, diskdevice_left_group, &xpos); /* move the filename elements and browse buttons to the right position */ uilib_move_group(hwnd, diskdevice_middle_group, xpos + 10); /* get the max x of the first browse element */ uilib_get_element_max_x(hwnd, IDC_BROWSEDISK, &xpos); /* move the autostart element to the right position */ uilib_move_element(hwnd, IDC_AUTOSTART, xpos + distance1); /* resize the autostart element */ uilib_adjust_element_width(hwnd, IDC_AUTOSTART); /* get the max x of the autostart element */ uilib_get_element_max_x(hwnd, IDC_AUTOSTART, &xpos); /* move the read only element to the right position */ uilib_move_element(hwnd, IDC_TOGGLE_ATTACH_READONLY, xpos + distance2); #ifdef HAVE_OPENCBM if (opencbmlib_is_available()) { /* adjust the size of the real iec element */ uilib_adjust_element_width(hwnd, IDC_SELECTREAL); /* get the max x of the real iec element */ uilib_get_element_max_x(hwnd, IDC_SELECTREAL, &xpos1); } else { xpos1 = 0; } #else xpos1 = 0; #endif /* get the max x of the second browse button */ uilib_get_element_max_x(hwnd, IDC_BROWSEDIR, &xpos2); if (xpos2 > xpos1) { xpos = xpos2 + 20; } else { xpos = xpos1 + 20; } /* move the diskdevice_right_group to the right position */ uilib_move_group(hwnd, diskdevice_right_group, xpos); /* move the p00 group element to the right position */ uilib_move_element(hwnd, IDC_DISKDEVICE_OPTIONS, xpos - 5); /* adjust the diskdevice_right_group elements size */ uilib_adjust_group_width(hwnd, diskdevice_right_group); /* adjust the p00 group element size */ uilib_adjust_element_width(hwnd, IDC_DISKDEVICE_OPTIONS); /* get the width of the disk_device_right_group items */ uilib_get_group_width(hwnd, diskdevice_right_group, &xpos1); /* get the width of the p00 group element */ uilib_get_element_width(hwnd, IDC_DISKDEVICE_OPTIONS, &xpos2); if (xpos2 + 5 > xpos1) { xpos = xpos2 + 15; } else { xpos = xpos1 + 10; } /* set the width of the p00 group element */ uilib_set_element_width(hwnd, IDC_DISKDEVICE_OPTIONS, xpos); /* adjust the none element size */ uilib_adjust_element_width(hwnd, IDC_SELECTNONE); /* adjust the size of the use iec device element */ uilib_adjust_element_width(hwnd, IDC_TOGGLE_USEIECDEVICE); /* get the max x of the window filling elements */ uilib_get_group_max_x(hwnd, diskdevice_filling_group, &xpos); /* set the width of the dialog to 'surround' all the elements */ GetWindowRect(hwnd, &rect); MoveWindow(hwnd, rect.left, rect.top, xpos + 10, rect.bottom - rect.top, TRUE); disk_image = file_system_get_disk_name(num); st_disk_image = system_mbstowcs_alloc(disk_image); SetDlgItemText(hwnd, IDC_DISKIMAGE, st_disk_image != NULL ? st_disk_image : TEXT("")); system_mbstowcs_free(st_disk_image); resources_get_string_sprintf("FSDevice%dDir", &dir, num); st_dir = system_mbstowcs_alloc(dir); SetDlgItemText(hwnd, IDC_DIR, st_dir != NULL ? st_dir : TEXT("")); system_mbstowcs_free(st_dir); resources_get_int_sprintf("FSDevice%dConvertP00", &n, num); CheckDlgButton(hwnd, IDC_TOGGLE_READP00, n ? BST_CHECKED : BST_UNCHECKED); resources_get_int_sprintf("FSDevice%dSaveP00", &n, num); CheckDlgButton(hwnd, IDC_TOGGLE_WRITEP00, n ? BST_CHECKED : BST_UNCHECKED); resources_get_int_sprintf("FSDevice%dHideCBMFiles", &n, num); CheckDlgButton(hwnd, IDC_TOGGLE_HIDENONP00, n ? BST_CHECKED : BST_UNCHECKED); resources_get_int_sprintf("AttachDevice%dReadonly", &n, num); CheckDlgButton(hwnd, IDC_TOGGLE_ATTACH_READONLY, n ? BST_CHECKED : BST_UNCHECKED); resources_get_int_sprintf("FileSystemDevice%d", &devtype, num); switch (devtype) { case ATTACH_DEVICE_FS: if (disk_image != NULL) { n = IDC_SELECTDISK; } else { n = IDC_SELECTDIR; } break; #ifdef HAVE_OPENCBM case ATTACH_DEVICE_REAL: n = IDC_SELECTREAL; break; #endif default: n = IDC_SELECTNONE; } #ifdef HAVE_OPENCBM if (opencbmlib_is_available()) { CheckRadioButton(hwnd, IDC_SELECTDISK, IDC_SELECTREAL, n); } else { CheckRadioButton(hwnd, IDC_SELECTDISK, IDC_SELECTDIR, n); } #else CheckRadioButton(hwnd, IDC_SELECTDISK, IDC_SELECTDIR, n); #endif enable_controls_for_disk_device_type(hwnd, n); if (iec_available_busses() & IEC_BUS_IEC) { resources_get_int_sprintf("IECDevice%d", &n, num); CheckDlgButton(hwnd, IDC_TOGGLE_USEIECDEVICE, n ? BST_CHECKED : BST_UNCHECKED); } else { CheckDlgButton(hwnd, IDC_TOGGLE_USEIECDEVICE, BST_UNCHECKED); ShowWindow(GetDlgItem(hwnd, IDC_TOGGLE_USEIECDEVICE), FALSE); } enable_controls(hwnd); } }
void TopLevel::config() { if (!confdlg) { confdlg = new KDialogBase(KDialogBase::Plain, i18n("Configure Tea Cooker"), KDialogBase::Ok|KDialogBase::Cancel|KDialogBase::Help, KDialogBase::Ok, this, "config", true); QWidget *page = confdlg->plainPage(); // FIXME: enforce sensible initial/default size of dialog // FIXME: modal is ok, but can avoid always-on-top? QBoxLayout *top_box = new QVBoxLayout(page, 0, 8); // whole config-stuff QBoxLayout *box = new QHBoxLayout(top_box); // list + properties /* left side - tea list and list-modifying buttons */ QBoxLayout *leftside = new QVBoxLayout(box); QGroupBox *listgroup = new QGroupBox(2, Vertical, i18n("Tea List"), page); leftside->addWidget(listgroup, 0, 0); listbox = new QListView(listgroup, "listBox"); listbox->addColumn(i18n("Name")); listbox->header()->setClickEnabled(false, listbox->header()->count()-1); listbox->addColumn(i18n("Time")); listbox->header()->setClickEnabled(false, listbox->header()->count()-1); listbox->setSorting(-1); connect(listbox, SIGNAL(selectionChanged()), SLOT(listBoxItemSelected())); // now buttons for editing the tea-list QWidget *listgroup_widget = new QWidget(listgroup); QBoxLayout *hbox = new QHBoxLayout(listgroup_widget); hbox->setSpacing(4); btn_new = new QPushButton(QString::null, listgroup_widget); QToolTip::add(btn_new, i18n("New")); btn_new->setPixmap(SmallIcon("filenew")); btn_new->setMinimumSize(btn_new->sizeHint() * 1.2); connect(btn_new, SIGNAL(clicked()), SLOT(newButtonClicked())); hbox->addWidget(btn_new); btn_del = new QPushButton(QString::null, listgroup_widget); QToolTip::add(btn_del, i18n("Delete")); btn_del->setIconSet(SmallIconSet("editdelete")); btn_del->setMinimumSize(btn_new->sizeHint() * 1.2); connect(btn_del, SIGNAL(clicked()), SLOT(delButtonClicked())); hbox->addWidget(btn_del); btn_up = new QPushButton(QString::null, listgroup_widget); QToolTip::add(btn_up, i18n("Up")); btn_up->setIconSet(SmallIconSet("up")); btn_up->setMinimumSize(btn_up->sizeHint() * 1.2); connect(btn_up, SIGNAL(clicked()), SLOT(upButtonClicked())); hbox->addWidget(btn_up); btn_down = new QPushButton(QString::null, listgroup_widget); QToolTip::add(btn_down, i18n("Down")); btn_down->setIconSet(SmallIconSet("down")); btn_down->setMinimumSize(btn_down->sizeHint() * 1.2); connect(btn_down, SIGNAL(clicked()), SLOT(downButtonClicked())); hbox->addWidget(btn_down); hbox->addStretch(10); /* right side - tea properties */ QBoxLayout *rightside = new QVBoxLayout(box); editgroup = new QGroupBox(2, Vertical, i18n("Tea Properties"), page); rightside->addWidget(editgroup, 0, 0); QHBox *propbox = new QHBox(editgroup); // FIXME: - must enforce correct vertical alignment of each label-editor pair // (better use one HBox for each label-editor pair?) QVBox *propleft = new QVBox(propbox); QVBox *propright = new QVBox(propbox); nameEdit = new QLineEdit(propright); nameEdit->setFixedHeight(nameEdit->sizeHint().height()); nameEdit->setAlignment(QLineEdit::AlignLeft); QLabel *l = new QLabel(nameEdit, i18n("Name:"), propleft); l->setFixedSize(l->sizeHint()); connect(nameEdit, SIGNAL(textChanged(const QString&)), SLOT(nameEditTextChanged(const QString&)) ); timeEdit = new TimeEdit(propright); timeEdit->setFixedHeight(timeEdit->sizeHint().height()); l = new QLabel(timeEdit, i18n("Tea time:"), propleft); l->setFixedSize(l->sizeHint()); connect(timeEdit, SIGNAL(valueChanged(int)), SLOT(spinBoxValueChanged(int))); /* bottom - timeout actions */ QGroupBox *actiongroup = new QGroupBox(4, Vertical, i18n("Action"), page); top_box->addWidget(actiongroup, 0, 0); QWidget *actionconf_widget = new QWidget(actiongroup); QBoxLayout *actionconf_hbox = new QHBoxLayout(actionconf_widget); btn_conf = new QPushButton(i18n("Configure Events..."), actionconf_widget); actionconf_hbox->addWidget(btn_conf); connect(btn_conf, SIGNAL(clicked()), SLOT(confButtonClicked())); actionconf_hbox->addStretch(10); eventEnable = new QCheckBox(i18n("Event"), actiongroup); popupEnable = new QCheckBox(i18n("Popup"), actiongroup); eventEnable->setFixedHeight(eventEnable->sizeHint().height()); popupEnable->setFixedHeight(popupEnable->sizeHint().height()); QHBox *actionbox = new QHBox(actiongroup); actionEnable = new QCheckBox(actionbox); // FIXME: add text to this line: // QLabel *actionLabel = new QLabel(i18n("Execute: "), actiongroup); actionEdit = new QLineEdit(actionbox); actionEdit->setFixedHeight(actionEdit->sizeHint().height()); QToolTip::add(actionEdit, i18n("Enter command here; '%t' will be replaced with name of steeping tea")); connect(actionEnable, SIGNAL(toggled(bool)), SLOT(actionEnableToggled(bool))); rightside->addStretch(); // single checkbox visEnable = new QCheckBox(i18n("Visualize progress in icon tray"), page); top_box->addWidget(visEnable, 0, 0); // let listbox claim all remaining vertical space top_box->setStretchFactor(box, 10); connect(confdlg, SIGNAL(helpClicked()), SLOT(help())); } // now add all defined teas (and their times) to the listview // this is done backwards because QListViewItems are inserted at the top listbox->clear(); for (int i=teas.count()-1; i>=0; i--) { TeaListItem *item = new TeaListItem(listbox); item->setName(teas[i].name); item->setTime(teas[i].time); if ((unsigned int)i == current_selected) current_item = item; } // select first entry in listbox; if no entries present then disable right side if (listempty) { enable_controls(); disable_properties(); nameEdit->setText(""); timeEdit->setValue(1); } else { listbox->setSelected(listbox->firstChild(), true); } // ------------------------- eventEnable->setChecked(useNotify); popupEnable->setChecked(usePopup); actionEnable->setChecked(useAction); actionEdit->setText(action); actionEdit->setEnabled(useAction); visEnable->setChecked(useTrayVis); if (confdlg->exec() == QDialog::Accepted) { // activate new settings useNotify = eventEnable->isChecked(); usePopup = popupEnable->isChecked(); useAction = actionEnable->isChecked(); action = actionEdit->text(); useTrayVis = visEnable->isChecked(); teas.clear(); // Copy over teas and times from the QListView int i = 0; teas.clear(); teas.resize(listbox->childCount()); for (QListViewItemIterator it(listbox); it.current() != 0; ++it) { teas[i].name = static_cast<TeaListItem *>(it.current())->name(); teas[i].time = static_cast<TeaListItem *>(it.current())->time(); if (it.current() == current_item) current_selected = i; i++; } listempty = (teas.count() == 0); rebuildTeaMenus(); // and store to config KConfig *config = kapp->config(); // remove old-style entries from default-group (if present) if (config->hasKey("UserTea")) config->deleteEntry("UserTea"); config->setGroup("General"); config->writeEntry("Beep", useNotify); config->writeEntry("Popup", usePopup); config->writeEntry("UseAction", useAction); config->writeEntry("Action", action); config->writeEntry("Tea", current_selected); config->writeEntry("UseTrayVis", useTrayVis); // first get rid of all previous tea-entries from config, then write anew config->deleteGroup("Teas", true); // deep remove of whole group config->setGroup("Teas"); config->writeEntry("Number", teas.count()); QString key; int index = 1; for (QValueVector<tea_struct>::ConstIterator it = teas.begin(); it != teas.end(); ++it) { key.sprintf("Tea%d Name", index); config->writeEntry(key, it->name); key.sprintf("Tea%d Time", index); config->writeEntry(key, it->time); index++; } config->sync(); } }