void reflow() { unsigned i; for (i=0; i<N::OPN::Types::Total; ++i) lTogglesOPN.append(opnToggles[i], {~0,0}, 2); for (i=0; i<N::OPM::Types::Total; ++i) lTogglesOPM.append(opmToggles[i], {~0,0}, 2); append(lMain); lMain.append(tabMain, {~0,~0}); }
Application() { setGeometry({256, 256, 640, 400}); layout.setMargin(5); button.setText("Toggle"); itemA[0].setText("Item A0"); itemA[1].setText("Item A1"); itemA[2].setText("Item A2"); RadioBox::group(itemA[0], itemA[1], itemA[2]); itemB[0].setText("Item B0"); itemB[1].setText("Item B1"); itemB[2].setText("Item B2"); RadioBox::group(itemB[0], itemB[1], itemB[2]); itemC[0].setText("Item C0"); itemC[1].setText("Item C1"); itemC[2].setText("Item C2"); RadioBox::group(itemC[0], itemC[1], itemC[2]); append(layout); layout.append(button, {~0, 0}, 5); layout.append(groupA, {~0, 0}, 5); groupA.append(itemA[0], {~0, 0}, 5); groupA.append(itemA[1], {~0, 0}, 5); groupA.append(itemA[2], {~0, 0}); layout.append(groupB, {~0, 0}, 5); groupB.append(itemB[0], {~0, 0}, 5); groupB.append(itemB[1], {~0, 0}, 5); groupB.append(itemB[2], {~0, 0}); layout.append(groupC, {~0, 0}, 5); groupC.append(itemC[0], {~0, 0}, 5); groupC.append(itemC[1], {~0, 0}, 5); groupC.append(itemC[2], {~0, 0}); onClose = &OS::quit; itemC[0].onActivate = [] { print("C0\n"); }; itemC[1].onActivate = [] { print("C1\n"); }; itemC[2].onActivate = [] { print("C2\n"); }; button.onActivate = [&] { //print("Before: ", itemC[0].checked(), ",", itemC[1].checked(), ",", itemC[2].checked(), "\n"); static bool visible = true; if(visible) { layout.remove(groupC); } else { layout.append(groupC, {~0, 0}, 5); } visible = !visible; //print("After!: ", itemC[0].checked(), ",", itemC[1].checked(), ",", itemC[2].checked(), "\n"); }; setVisible(); }
void create() { for(unsigned n = 0; n < 544; n++) buffer[n] = n; hexEditFont.setFamily("Liberation Mono"); hexEditFont.setSize(8); hexEdit.setFont(hexEditFont); hexEdit.onRead = [this](unsigned addr) { return this->buffer[addr]; }; hexEdit.onWrite = [this](unsigned addr, uint8_t data) { this->buffer[addr] = data; }; hexEdit.setColumns(16); hexEdit.setRows(16); hexEdit.setOffset(0); hexEdit.setLength(544); layout.setMargin(5); layout.append(hexEdit, ~0, ~0); append(layout); onClose = []() { OS::quit(); }; setStatusText("Ready"); setStatusVisible(); setTitle("Hex Edit"); setGeometry({ 64, 64, 485, 220 }); setVisible(); }
MainWindow() { setFrameGeometry({64, 64, 640, 480}); layout.setMargin(5); listView.append("Item 1"); listView.append("Item 2"); listView.append("Item 3"); listView.setSelection(1); layout.append(listView, {~0, ~0}); append(layout); onClose = &Application::quit; listView.onActivate = [&] { if(modal() == false) { print("Base = ", listView.selection(), "\n"); setModal(true); } else { print("Slot = ", listView.selection(), "\n"); setModal(false); setVisible(false); } }; setVisible(); listView.setFocused(); }
VideoPanel() { setMargin(5); append(spacer, 120, ~0, 5); append(layout, ~0, ~0); label.setFont("Sans, 16, Bold"); label.setText("Video"); layout.append(label, ~0, 0, 5); }
AudioPanel() { setMargin(5); append(spacer, 120, ~0, 5); append(layout, ~0, ~0); label.setFont("Sans, 16, Bold"); label.setText("Audio"); list.setCheckable(); list.append("Item"); list.append("Item"); list.append("Item"); list.append("Item"); list.append("Item"); layout.append(label, ~0, 0, 5); layout.append(list, ~0, ~0); list.onTick = [&](unsigned n) { print("Row ", n, "\n"); }; }
MainWindow() : audio_window(settings, mute_item), video_window(settings, *this), input_window(settings, input, [&]{ run(); }), circuit(nullptr), prev_ui_state{false, false, false, false} { // Load config file nall::string config_path = configpath(); config_path.append("dice/"); directory::create(config_path); settings.filename = {config_path, "settings.cfg"}; settings.load(); onClose = &Application::quit; // Game menu game_menu.setText("Game"); new_game_item.setText("New Game..."); new_game_item.onActivate = [&] { game_window.create(geometry().position()); }; game_window.cancel_button.onActivate = [&] { game_window.setModal(false); game_window.setVisible(false); }; game_window.start_button.onActivate = [&] { GameDesc& g = game_list[game_window.game_view.selection()]; if(circuit) delete circuit; circuit = new Circuit(settings, *input, *video, g.desc, g.command_line); game_window.setModal(false); game_window.setVisible(false); onSize(); }; game_menu.append(new_game_item); end_game_item.setText("End Game"); end_game_item.onActivate = [&] { if(circuit) { delete circuit; circuit = nullptr; } onSize(); }; game_menu.append(end_game_item); game_menu.append(game_sep[0]); pause_item.setText("Pause"); pause_item.onToggle = [&] { settings.pause = pause_item.checked(); }; throttle_item.setText("Throttle"); throttle_item.setChecked(true); throttle_item.onToggle = [&] { settings.throttle = throttle_item.checked(); if(settings.throttle && circuit) // Adjust rtc { uint64_t emu_time = circuit->global_time * 1000000.0 * Circuit::timescale; circuit->rtc += int64_t(circuit->rtc.get_usecs()) - emu_time; } }; game_menu.append(pause_item, throttle_item); game_menu.append(game_sep[1]); exit_item.setText("Exit"); exit_item.onActivate = onClose; game_menu.append(exit_item); append(game_menu); // Settings menu settings_menu.setText("Settings"); audio_item.setText("Audio Settings..."); settings_menu.append(audio_item); audio_item.onActivate = [&] { audio_window.create(geometry().position()); }; audio_window.onClose = audio_window.exit_button.onActivate = [&] { mute_item.setChecked(settings.audio.mute); audio_window.setModal(false); audio_window.setVisible(false); if(circuit) circuit->audio.toggle_mute(); }; mute_item.setText("Mute Audio"); mute_item.setChecked(settings.audio.mute); mute_item.onToggle = [&] { settings.audio.mute = mute_item.checked(); if(circuit) circuit->audio.toggle_mute(); }; settings_menu.append(mute_item); settings_menu.append(settings_sep[0]); video_item.setText("Video Settings..."); video_item.onActivate = [&] { video_window.create(geometry().position()); }; status_visible_item.setText("Status Bar Visible"); status_visible_item.setChecked(settings.video.status_visible); status_visible_item.onToggle = [&] { settings.video.status_visible = status_visible_item.checked(); setStatusVisible(settings.video.status_visible); }; fullscreen_item.setText("Fullscreen"); fullscreen_item.onToggle = [&] { toggleFullscreen(fullscreen_item.checked()); }; settings_menu.append(video_item, status_visible_item, fullscreen_item); settings_menu.append(settings_sep[1]); input_item.setText("Configure Inputs..."); input_item.onActivate = [&] { input_window.create(geometry().position()); }; input_window.onClose = [&] { if(input_window.active_selector) input_window.active_selector->assign(KeyAssignment::None); input_window.setModal(false); input_window.setVisible(false); }; input_window.exit_button.onActivate = [&] { if(input_window.active_selector) input_window.active_selector->assign(KeyAssignment::None); else { input_window.setModal(false); input_window.setVisible(false); } }; settings_menu.append(input_item); dipswitch_item.setText("Configure DIP Switches..."); dipswitch_item.onActivate = [&] { int selection = 0; if(circuit) for(int i = 0; i < dipswitch_window.game_configs.size(); i++) { if(circuit->game_config == dipswitch_window.game_configs[i]) { selection = i; break; } } dipswitch_window.create(geometry().position(), selection); }; dipswitch_window.onClose = dipswitch_window.exit_button.onActivate = [&] { dipswitch_window.game_configs[dipswitch_window.current_config].save(); dipswitch_window.setModal(false); dipswitch_window.setVisible(false); }; settings_menu.append(settings_sep[2]); settings_menu.append(dipswitch_item); append(settings_menu); setStatusVisible(settings.video.status_visible); setBackgroundColor({0, 0, 0}); layout.setMargin(0); viewport = new Viewport(); layout.append(*viewport, {~0, ~0}); append(layout); // Initialize SDL, input, etc. settings.num_mice = ManyMouse_Init(); if(SDL_Init(SDL_INIT_AUDIO|SDL_INIT_JOYSTICK) < 0) { printf("Unable to init SDL:\n%s\n", SDL_GetError()); exit(1); } input = new Input(); video = Video::createDefault(layout, viewport); onSize = [&] { if((signed)geometry().height < 0 || (signed)geometry().width < 0) return; video->video_init(geometry().width, geometry().height, settings.video); if(circuit == nullptr) { drawLogo(); } viewport->setFocused(); }; setTitle(VERSION_STRING); setFrameGeometry({(Desktop::workspace().width - 640) / 2, (Desktop::workspace().height - 480) / 2, 640, 480}); setMenuVisible(); setVisible(); onSize(); }